From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: =?utf-8?b?VG9tw6HFoSBNcsOheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+?= To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: - new upstream patch release, fixes CVE-2010-0742 (#598738) and Date: Tue, 09 Jun 2026 12:42:14 GMT Message-ID: <178100893415.1.18243084430547298185.rpms-openssl-1df3ab4d3275@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: 1df3ab4d3275a5db019180ab130e54a35338fb3f ICAgICAgICBBIG5ldyBjb21taXQgaGFzIGJlZW4gcHVzaGVkLgoKICAgICAgICBSZXBvICAgOiBy cG1zL29wZW5zc2wKICAgICAgICBCcmFuY2ggOiByZWJhc2VfNDBiZXRhCiAgICAgICAgQ29tbWl0 IDogMWRmM2FiNGQzMjc1YTVkYjAxOTE4MGFiMTMwZTU0YTM1MzM4ZmIzZgogICAgICAgIEF1dGhv ciA6IFRvbcOhxaEgTXLDoXogPHRtcmF6QGZlZG9yYXByb2plY3Qub3JnPgogICAgICAgIERhdGUg ICA6IDIwMTAtMDYtMDRUMTQ6MjE6MzUrMDA6MDAKICAgICAgICBTdGF0cyAgOiArMTI0NjMvLTEy NTk1IGluIDExIGZpbGUocykKICAgICAgICBVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9q ZWN0Lm9yZy9ycG1zL29wZW5zc2wvYy8xZGYzYWI0ZDMyNzVhNWRiMDE5MTgwYWIxMzBlNTRhMzUz MzhmYjNmP2JyYW5jaD1yZWJhc2VfNDBiZXRhCgogICAgICAgIExvZzoKICAgICAgICAtIG5ldyB1 cHN0cmVhbSBwYXRjaCByZWxlYXNlLCBmaXhlcyBDVkUtMjAxMC0wNzQyICgjNTk4NzM4KSBhbmQK Q1ZFLTIwMTAtMTYzMyAoIzU5ODczMikKCi0tLQpkaWZmIC0tZ2l0IGEvLmN2c2lnbm9yZSBiLy5j dnNpZ25vcmUKaW5kZXggMzkzMGE5ZC4uZjQ2MjNkNyAxMDA2NDQKLS0tIGEvLmN2c2lnbm9yZQor KysgYi8uY3ZzaWdub3JlCkBAIC0xICsxIEBACi1vcGVuc3NsLTEuMC4wLXVzYS50YXIuYnoyCitv cGVuc3NsLTEuMC4wYS11c2EudGFyLmJ6MgoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0 YTMtZmlwc21vZGUucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGEzLWZpcHNtb2RlLnBhdGNoCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmJmMGE2Li4wMDAwMDAwCi0tLSBhL29wZW5z c2wtMS4wLjAtYmV0YTMtZmlwc21vZGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAs MCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZW5naW5lL2VuZ19hbGwu Yy5maXBzbW9kZSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5maXBzbW9kZQky MDA5LTA3LTAxIDE2OjU1OjU4LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMJMjAwOS0wOC0xMSAxNzozNzoxNi4wMDAwMDAwMDAg KzAyMDAKLUBAIC01OCw5ICs1OCwyMyBAQAotIAotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNp bmNsdWRlICJlbmdfaW50LmgiCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSB2b2lkIEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5l cyh2b2lkKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFy eSgpOwotKwlpZiAoRklQU19tb2RlKCkpIHsKLSsJCS8qIFdlIGFsbG93IGxvYWRpbmcgZHluYW1p YyBlbmdpbmUgYXMgYSB0aGlyZCBwYXJ0eQotKwkJICAgZW5naW5lIG1pZ2h0IGJlIEZJUFMgdmFs aWRhdGVkLgotKwkJICAgVXNlciBpcyBkaXNhbGxvd2VkIHRvIGxvYWQgbm9uLXZhbGlkYXRlZCBl bmdpbmVzCi0rCQkgICBieSBzZWN1cml0eSBwb2xpY3kuICovCi0rCQlFTkdJTkVfbG9hZF9keW5h bWljKCk7Ci0rCQlyZXR1cm47Ci0rCX0KLSsjZW5kaWYKLSAjaWYgMAotIAkvKiBUaGVyZSdzIG5v IGxvbmdlciBhbnkgbmVlZCBmb3IgYW4gIm9wZW5zc2wiIEVOR0lORSB1bmxlc3MsIG9uZSBkYXks Ci0gCSAqIGl0IGlzIHRoZSAqb25seSogd2F5IGZvciBzdGFuZGFyZCBidWlsdGluIGltcGxlbWVu dGF0aW9ucyB0byBiZSBiZQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZw L2NfYWxsYy5jLmZpcHNtb2RlIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9jX2FsbGMu YwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9jX2FsbGMuYy5maXBzbW9kZQky MDA3LTA0LTI0IDAxOjQ4OjI4LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDA5LTA4LTExIDE3OjQyOjM0LjAwMDAwMDAwMCArMDIw MAotQEAgLTY1LDYgKzY1LDExIEBACi0gdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2b2lk KQotIAl7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgp OwotKwlpZighRklQU19tb2RlKCkpIAotKwkJewotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9O T19ERVMKLSAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIoKSk7Ci0gCUVWUF9hZGRfY2lwaGVy KEVWUF9kZXNfY2ZiMSgpKTsKLUBAIC0yMTksNCArMjI0LDYxIEBAIHZvaWQgT3BlblNTTF9hZGRf YWxsX2NpcGhlcnModm9pZCkKLSAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2 X2NiYywiQ0FNRUxMSUEyNTYiKTsKLSAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFf MjU2X2NiYywiY2FtZWxsaWEyNTYiKTsKLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r CQl9Ci0rCWVsc2UKLSsJCXsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fREVTCi0rCUVWUF9hZGRfY2lw aGVyKEVWUF9kZXNfZWRlX2NmYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2Nm YigpKTsKLSsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfb2ZiKCkpOwotKwlFVlBfYWRk X2NpcGhlcihFVlBfZGVzX2VkZTNfb2ZiKCkpOwotKwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZV9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7Ci0rCUVW UF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2NiYywiREVTMyIpOwotKwlFVlBfYWRkX2Np cGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMsImRlczMiKTsKLSsKLSsJRVZQX2FkZF9jaXBoZXIo RVZQX2Rlc19lZGUoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlMygpKTsKLSsjZW5k aWYKLSsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTI4X2VjYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwotKwlFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTI4X2NmYjEoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjgoKSk7Ci0rCUVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X29mYigpKTsKLSsjaWYgMAotKwlFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzEyOF9jdHIoKSk7Ci0rI2VuZGlmCi0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNO X2Flc18xMjhfY2JjLCJBRVMxMjgiKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEy OF9jYmMsImFlczEyOCIpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18xOTJfY2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmIxKCkpOwot KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmI4KCkpOwotKwlFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzE5Ml9vZmIoKSk7Ci0rI2lmIDAKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJf Y3RyKCkpOwotKyNlbmRpZgotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywi QUVTMTkyIik7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCJhZXMxOTIi KTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZWNiKCkpOwotKwlFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzI1Nl9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYigp KTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiMSgpKTsKLSsJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18yNTZfY2ZiOCgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfb2Zi KCkpOwotKyNpZiAwCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2N0cigpKTsKLSsjZW5k aWYKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsIkFFUzI1NiIpOwotKwlF VlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywiYWVzMjU2Iik7Ci0rI2VuZGlmCi0r CQl9Ci0rI2VuZGlmCi0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2 cC9jX2FsbGQuYy5maXBzbW9kZSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvY19hbGxk LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvY19hbGxkLmMuZmlwc21vZGUJ MjAwOS0wNy0wOCAxMDo1MDo1My4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9ldnAvY19hbGxkLmMJMjAwOS0wOC0xMSAxNzo1NDowOC4wMDAwMDAwMDAgKzAy MDAKLUBAIC02NCw2ICs2NCwxMSBAQAotIAotIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHMo dm9pZCkKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnko KTsKLSsJaWYgKCFGSVBTX21vZGUoKSkKLSsJCXsKLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xf Tk9fTUQ0Ci0gCUVWUF9hZGRfZGlnZXN0KEVWUF9tZDQoKSk7Ci0gI2VuZGlmCi1AQCAtMTEwLDUg KzExNSwzMyBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzKHZvaWQpCi0gI2VuZGlmCi0g I2lmbmRlZiBPUEVOU1NMX05PX1dISVJMUE9PTAotIAlFVlBfYWRkX2RpZ2VzdChFVlBfd2hpcmxw b29sKCkpOwotKyNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCX0KLSsJZWxzZQotKwkJ ewotKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19T SEExKQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxp YXMoU05fc2hhMSwic3NsMy1zaGExIik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFX aXRoUlNBRW5jcnlwdGlvbixTTl9zaGExV2l0aFJTQSk7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0RT QQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMo U05fZHNhV2l0aFNIQTEsU05fZHNhV2l0aFNIQTFfMik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFz KFNOX2RzYVdpdGhTSEExLCJEU1MxIik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdp dGhTSEExLCJkc3MxIik7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0rCUVW UF9hZGRfZGlnZXN0KEVWUF9lY2RzYSgpKTsKLSsjZW5kaWYKLSsjZW5kaWYKLSsjaWZuZGVmIE9Q RU5TU0xfTk9fU0hBMjU2Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7Ci0rCUVWUF9h ZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX1NI QTUxMgotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOwotKwlFVlBfYWRkX2RpZ2VzdChF VlBfc2hhNTEyKCkpOwotKyNlbmRpZgotKwkJfQotICNlbmRpZgotIAl9Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9vX2luaXQuYy5maXBzbW9kZSBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9vX2luaXQuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL29faW5p dC5jLmZpcHNtb2RlCTIwMDktMDgtMTEgMTc6Mjg6MjUuMDAwMDAwMDAwICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vb19pbml0LmMJMjAwOS0wOC0xMSAxNzozOTowNi4wMDAw MDAwMDAgKzAyMDAKLUBAIC01OSw2ICs1OSw0MyBAQAotICNpbmNsdWRlIDxlX29zLmg+Ci0gI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KLSsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSsjaW5jbHVkZSA8ZmNudGwu aD4KLSsjaW5jbHVkZSA8dW5pc3RkLmg+Ci0rI2luY2x1ZGUgPGVycm5vLmg+Ci0rI2luY2x1ZGUg PHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLSsjZGVmaW5lIEZJUFNf TU9ERV9TV0lUQ0hfRklMRSAiL3Byb2Mvc3lzL2NyeXB0by9maXBzX2VuYWJsZWQiCi0rCi0rc3Rh dGljIHZvaWQgaW5pdF9maXBzX21vZGUodm9pZCkKLSsJewotKwljaGFyIGJ1ZlsyXSA9ICIwIjsK LSsJaW50IGZkOwotKwkKLSsJaWYgKGdldGVudigiT1BFTlNTTF9GT1JDRV9GSVBTX01PREUiKSAh PSBOVUxMKQotKwkJewotKwkJYnVmWzBdID0gJzEnOwotKwkJfQotKwllbHNlIGlmICgoZmQgPSBv cGVuKEZJUFNfTU9ERV9TV0lUQ0hfRklMRSwgT19SRE9OTFkpKSA+PSAwKQotKwkJewotKwkJd2hp bGUgKHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0r CQljbG9zZShmZCk7Ci0rCQl9Ci0rCS8qIEZhaWx1cmUgcmVhZGluZyB0aGUgZmlwcyBtb2RlIHN3 aXRjaCBmaWxlIG1lYW5zIGp1c3Qgbm90Ci0rCSAqIHN3aXRjaGluZyBpbnRvIEZJUFMgbW9kZS4g V2Ugd291bGQgYnJlYWsgdG9vIG1hbnkgdGhpbmdzCi0rCSAqIG90aGVyd2lzZS4gCi0rCSAqLwot KwkKLSsJaWYgKGJ1ZlswXSA9PSAnMScpCi0rCQl7Ci0rCQlGSVBTX21vZGVfc2V0KDEpOwotKwkJ fQotKwl9Ci0rI2VuZGlmCi0rCi0gLyogUGVyZm9ybSBhbnkgZXNzZW50aWFsIE9wZW5TU0wgaW5p dGlhbGl6YXRpb24gb3BlcmF0aW9ucy4KLSAgKiBDdXJyZW50bHkgb25seSBzZXRzIEZJUFMgY2Fs bGJhY2tzCi0gICovCi1AQCAtNzIsNiArMTA5LDcgQEAgdm9pZCBPUEVOU1NMX2luaXRfbGlicmFy eSh2b2lkKQotICNpZmRlZiBDUllQVE9fTURFQlVHCi0gCQlDUllQVE9fbWFsbG9jX2RlYnVnX2lu aXQoKTsKLSAjZW5kaWYKLSsJCWluaXRfZmlwc19tb2RlKCk7Ci0gCQlkb25lID0gMTsKLSAJCX0K LSAjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3NzbF9hbGdzLmMuZmlw c21vZGUgb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3NsX2FsZ3MuYwotLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTMvc3NsL3NzbF9hbGdzLmMuZmlwc21vZGUJMjAwOS0wNy0wOCAxMDo1MDo1My4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2xfYWxncy5jCTIwMDkt MDgtMTEgMTg6MDE6MTMuMDAwMDAwMDAwICswMjAwCi1AQCAtNjQsNiArNjQsMTIgQEAKLSBpbnQg U1NMX2xpYnJhcnlfaW5pdCh2b2lkKQotIAl7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlP UEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZiAoIUZJUFNfbW9kZSgpKQotKwkJewotKyNlbmRp ZgotKwotICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19j YmMoKSk7Ci0gCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7Ci1AQCAtMTE1LDYg KzEyMSw0MCBAQCBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQotIAlFVlBfYWRkX2RpZ2VzdChF VlBfc2hhKCkpOwotIAlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkpOwotICNlbmRpZgotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJCX0KLSsJZWxzZQotKwkJewotKyNpZm5kZWYgT1BFTlNTTF9OT19E RVMKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKLSsjZW5kaWYKLSsjaWZu ZGVmIE9QRU5TU0xfTk9fQUVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NiYygpKTsK LSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzI1Nl9jYmMoKSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX01ENQotKwkv KiBuZWVkZWQgZXZlbiBpbiB0aGUgRklQUyBtb2RlIGZvciBUTFMgTUFDICovCi0rCUVWUF9hZGRf ZGlnZXN0KEVWUF9tZDUoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwic3NsMi1t ZDUiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wzLW1kNSIpOwotKyNlbmRp ZgotKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7 IC8qIFJTQSB3aXRoIHNoYTEgKi8KLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwic3Ns My1zaGExIik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlv bixTTl9zaGExV2l0aFJTQSk7Ci0rI2VuZGlmCi0rI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hB KSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0RTQSkKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEo KSk7IC8qIERTQSB3aXRoIHNoYTEgKi8KLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0 aFNIQTEsU05fZHNhV2l0aFNIQTFfMik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdp dGhTSEExLCJEU1MxIik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCJk c3MxIik7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0rCUVWUF9hZGRfZGln ZXN0KEVWUF9lY2RzYSgpKTsKLSsjZW5kaWYKLSsJCX0KLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5T U0xfTk9fQ09NUAotIAkvKiBUaGlzIHdpbGwgaW5pdGlhbGlzZSB0aGUgYnVpbHQtaW4gY29tcHJl c3Npb24gYWxnb3JpdGhtcy4KLSAJICAgVGhlIHZhbHVlIHJldHVybmVkIGlzIGEgU1RBQ0tfT0Yo U1NMX0NPTVApLCBidXQgdGhhdCBjYW4KCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWR0bHMx LWJhY2twb3J0cy5wYXRjaCBiL29wZW5zc2wtMS4wLjAtZHRsczEtYmFja3BvcnRzLnBhdGNoCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTUxOGNkLi4wMDAwMDAwCi0tLSBhL29wZW5z c2wtMS4wLjAtZHRsczEtYmFja3BvcnRzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAs MCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9zc2wvZDFfbGliLmMuZHRsczEgb3BlbnNzbC0x LjAuMC9zc2wvZDFfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wL3NzbC9kMV9saWIuYy5kdGxzMQky MDA5LTEyLTA4IDEyOjM4OjE3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvc3Ns L2QxX2xpYi5jCTIwMTAtMDQtMDkgMTY6Mjk6NDkuMDAwMDAwMDAwICswMjAwCi1AQCAtMjgzLDYg KzI4MywxNiBAQCBzdHJ1Y3QgdGltZXZhbCogZHRsczFfZ2V0X3RpbWVvdXQoU1NMICpzCi0gCQl0 aW1lbGVmdC0+dHZfdXNlYyArPSAxMDAwMDAwOwotIAkJfQotIAotKwkvKiBJZiByZW1haW5pbmcg dGltZSBpcyBsZXNzIHRoYW4gMTUgbXMsIHNldCBpdCB0byAwCi0rCSAqIHRvIHByZXZlbnQgaXNz dWVzIGJlY2F1c2Ugb2Ygc21hbGwgZGV2ZXJnZW5jZXMgd2l0aAotKwkgKiBzb2NrZXQgdGltZW91 dHMuCi0rCSAqLwotKwlpZiAodGltZWxlZnQtPnR2X3NlYyA9PSAwICYmIHRpbWVsZWZ0LT50dl91 c2VjIDwgMTUwMDApCi0rCQl7Ci0rCQltZW1zZXQodGltZWxlZnQsIDAsIHNpemVvZihzdHJ1Y3Qg dGltZXZhbCkpOwotKwkJfQotKwkKLSsKLSAJcmV0dXJuIHRpbWVsZWZ0OwotIAl9Ci0gCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4wL3NzbC9kMV9wa3QuYy5kdGxzMSBvcGVuc3NsLTEuMC4wL3NzbC9k MV9wa3QuYwotLS0tIG9wZW5zc2wtMS4wLjAvc3NsL2QxX3BrdC5jLmR0bHMxCTIwMDktMTAtMDQg MTg6NTI6MzUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9zc2wvZDFfcGt0LmMJ MjAxMC0wNC0wOSAxNjozMDo0OS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02NjcsMTQgKzY2NywxNCBA QCBhZ2FpbjoKLSAJaWYgKHJyLT5sZW5ndGggPT0gMCkgZ290byBhZ2FpbjsKLSAKLSAJLyogSWYg dGhpcyByZWNvcmQgaXMgZnJvbSB0aGUgbmV4dCBlcG9jaCAoZWl0aGVyIEhNIG9yIEFMRVJUKSwK LS0JICogYnVmZmVyIGl0IHNpbmNlIGl0IGNhbm5vdCBiZSBwcm9jZXNzZWQgYXQgdGhpcyB0aW1l LiBSZWNvcmRzCi0tCSAqIGZyb20gdGhlIG5leHQgZXBvY2ggYXJlIG1hcmtlZCBhcyByZWNlaXZl ZCBldmVuIHRob3VnaCB0aGV5Ci0tCSAqIGFyZSBub3QgcHJvY2Vzc2VkLCBzbyBhcyB0byBwcmV2 ZW50IGFueSBwb3RlbnRpYWwgcmVzb3VyY2UKLS0JICogRG9TIGF0dGFjayAqLwotKwkgKiBhbmQg YSBoYW5kc2hha2UgaXMgY3VycmVudGx5IGluIHByb2dyZXNzLCBidWZmZXIgaXQgc2luY2UgaXQK LSsJICogY2Fubm90IGJlIHByb2Nlc3NlZCBhdCB0aGlzIHRpbWUuICovCi0gCWlmIChpc19uZXh0 X2Vwb2NoKQotIAkJewotLQkJZHRsczFfcmVjb3JkX2JpdG1hcF91cGRhdGUocywgYml0bWFwKTsK LS0JCWR0bHMxX2J1ZmZlcl9yZWNvcmQocywgJihzLT5kMS0+dW5wcm9jZXNzZWRfcmNkcyksIHJy LT5zZXFfbnVtKTsKLSsJCWlmIChTU0xfaW5faW5pdChzKSB8fCBzLT5pbl9oYW5kc2hha2UpCi0r CQkJewotKwkJCWR0bHMxX2J1ZmZlcl9yZWNvcmQocywgJihzLT5kMS0+dW5wcm9jZXNzZWRfcmNk cyksIHJyLT5zZXFfbnVtKTsKLSsJCQl9Ci0gCQlyci0+bGVuZ3RoID0gMDsKLSAJCXMtPnBhY2tl dF9sZW5ndGggPSAwOwotIAkJZ290byBhZ2FpbjsKLUBAIC04MDksNyArODA5LDcgQEAgc3RhcnQ6 Ci0gCQkgKiBidWZmZXIgdGhlIGFwcGxpY2F0aW9uIGRhdGEgZm9yIGxhdGVyIHByb2Nlc3Npbmcg cmF0aGVyCi0gCQkgKiB0aGFuIGRyb3BwaW5nIHRoZSBjb25uZWN0aW9uLgotIAkJICovCi0tCQlk dGxzMV9idWZmZXJfcmVjb3JkKHMsICYocy0+ZDEtPmJ1ZmZlcmVkX2FwcF9kYXRhKSwgMCk7Ci0r CQlkdGxzMV9idWZmZXJfcmVjb3JkKHMsICYocy0+ZDEtPmJ1ZmZlcmVkX2FwcF9kYXRhKSwgcnIt PnNlcV9udW0pOwotIAkJcnItPmxlbmd0aCA9IDA7Ci0gCQlnb3RvIHN0YXJ0OwotIAkJfQoKZGlm ZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtZmlwcy5wYXRjaCBiL29wZW5zc2wtMS4wLjAtZmlwcy5w YXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViNmRlNy4uMDAwMDAwMAotLS0g YS9vcGVuc3NsLTEuMC4wLWZpcHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMjE2NCArMCww IEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL0NvbmZpZ3VyZS5maXBzIG9wZW5zc2wtMS4wLjAv Q29uZmlndXJlCi0tLS0gb3BlbnNzbC0xLjAuMC9Db25maWd1cmUuZmlwcwkyMDEwLTAzLTMwIDEw OjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvQ29uZmlndXJlCTIwMTAt MDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtNjYwLDYgKzY2MCw3IEBAIG15ICRj bWxsX2VuYz0iY2FtZWxsaWEubyBjbWxsX21pc2MubyBjbWwKLSBteSAkcHJvY2Vzc29yPSIiOwot IG15ICRkZWZhdWx0X3JhbmxpYjsKLSBteSAkcGVybDsKLStteSAkZmlwcz0wOwotIAotIAotICMg QWxsIG9mIHRoZSBmb2xsb3dpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCAoUkM1IHdhcyBlbmFi bGVkIGJlZm9yZSAwLjkuOCk6Ci1AQCAtODA2LDYgKzgwNywxMCBAQCBQUk9DRVNTX0FSR1M6Ci0g CQkJfQotIAkJZWxzaWYgKC9eMzg2JC8pCi0gCQkJeyAkcHJvY2Vzc29yPTM4NjsgfQotKwkJZWxz aWYgKC9eZmlwcyQvKQotKwkJCXsKLSsJCQkkZmlwcz0xOwotKwkJICAgICAgICB9Ci0gCQllbHNp ZiAoL15yc2FyZWYkLykKLSAJCQl7Ci0gCQkJIyBObyBSU0FyZWYgc3VwcG9ydCBhbnkgbW9yZSBz aW5jZSBpdCdzIG5vdCBuZWVkZWQuCi1AQCAtMTM2OCw2ICsxMzczLDExIEBAICRjZmxhZ3MuPSIg LURPUEVOU1NMX0lBMzJfU1NFMiIgaWYgKCEkbm8KLSAKLSAkY2ZsYWdzLj0iIC1ET1BFTlNTTF9C Tl9BU01fTU9OVCIgaWYgKCRibl9vYmogPX4gLy1tb250Lyk7Ci0gCi0raWYgKCRmaXBzKQotKwl7 Ci0rCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfRklQU1xuIjsKLSsJ fQotKwotICRjcHVpZF9vYmo9Im1lbV9jbHIubyIJdW5sZXNzICgkY3B1aWRfb2JqID1+IC9cLm8k Lyk7Ci0gJGRlc19vYmo9JGRlc19lbmMJdW5sZXNzICgkZGVzX29iaiA9fiAvXC5vJC8pOwotICRi Zl9vYmo9JGJmX2VuYwkJdW5sZXNzICgkYmZfb2JqID1+IC9cLm8kLyk7Ci1AQCAtMTUzNSw2ICsx NTQ1LDEwIEBAIHdoaWxlICg8SU4+KQotIAlzL15MSUJLUkI1PS4qL0xJQktSQjU9JHdpdGhhcmdz eyJrcmI1LWxpYiJ9LzsKLSAJcy9eTElCWkxJQj0uKi9MSUJaTElCPSR3aXRoYXJnc3siemxpYi1s aWIifS87Ci0gCXMvXlpMSUJfSU5DTFVERT0uKi9aTElCX0lOQ0xVREU9JHdpdGhhcmdzeyJ6bGli LWluY2x1ZGUifS87Ci0rCWlmICgkZmlwcykKLSsJCXsKLSsJCXMvXkZJUFM9LiovRklQUz15ZXMv OwotKwkJfQotIAlzL15TSExJQl9UQVJHRVQ9LiovU0hMSUJfVEFSR0VUPSRzaGFyZWRfdGFyZ2V0 LzsKLSAJcy9eU0hMSUJfTUFSSz0uKi9TSExJQl9NQVJLPSRzaGFyZWRfbWFyay87Ci0gCXMvXlNI QVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJTPVwkKFNIQVJFRF9DUllQVE8pIFwkKFNIQVJFRF9TU0wp LyBpZiAoISRub19zaGFyZWQpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYmYvYmZf c2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYmYvYmZfc2tleS5jCi0tLS0gb3BlbnNz bC0xLjAuMC9jcnlwdG8vYmYvYmZfc2tleS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1Nzo1Mi4wMDAw MDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9iZi9iZl9za2V5LmMJMjAxMC0w My0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC01OSwxMCArNTksMTUgQEAKLSAjaW5j bHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wv Ymxvd2Zpc2guaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpbmNsdWRl ICJiZl9sb2NsLmgiCi0gI2luY2x1ZGUgImJmX3BpLmgiCi0gCi0tdm9pZCBCRl9zZXRfa2V5KEJG X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQotK0ZJUFNfTk9O X0ZJUFNfVkNJUEhFUl9Jbml0KEJGKQotIAl7Ci0gCWludCBpOwotIAlCRl9MT05HICpwLHJpLGlu WzJdOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYmYvYmxvd2Zpc2guaC5maXBzIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2JmL2Jsb3dmaXNoLmgKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0 by9iZi9ibG93ZmlzaC5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9iZi9ibG93ZmlzaC5oCTIwMTAtMDMtMzAgMTA6MzM6 NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMTA0LDcgKzEwNCw5IEBAIHR5cGVkZWYgc3RydWN0IGJm X2tleV9zdAotIAlCRl9MT05HIFNbNCoyNTZdOwotIAl9IEJGX0tFWTsKLSAKLS0gCi0rI2lmZGVm IE9QRU5TU0xfRklQUyAKLSt2b2lkIHByaXZhdGVfQkZfc2V0X2tleShCRl9LRVkgKmtleSwgaW50 IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0rI2VuZGlmCi0gdm9pZCBCRl9zZXRf a2V5KEJGX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSAK LSB2b2lkIEJGX2VuY3J5cHQoQkZfTE9ORyAqZGF0YSxjb25zdCBCRl9LRVkgKmtleSk7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ibi9ibi5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlw dG8vYm4vYm4uaAotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JuL2JuLmguZmlwcwkyMDEwLTAz LTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Ju L2JuLmgJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC01NDAsNiArNTQw LDE3IEBAIGludAlCTl9pc19wcmltZV9leChjb25zdCBCSUdOVU0gKnAsaW50IG4KLSBpbnQJQk5f aXNfcHJpbWVfZmFzdHRlc3RfZXgoY29uc3QgQklHTlVNICpwLGludCBuY2hlY2tzLCBCTl9DVFgg KmN0eCwKLSAJCWludCBkb190cmlhbF9kaXZpc2lvbiwgQk5fR0VOQ0IgKmNiKTsKLSAKLStpbnQg Qk5fWDkzMV9nZW5lcmF0ZV9YcHEoQklHTlVNICpYcCwgQklHTlVNICpYcSwgaW50IG5iaXRzLCBC Tl9DVFggKmN0eCk7Ci0rCi0raW50IEJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KEJJR05VTSAqcCwg QklHTlVNICpwMSwgQklHTlVNICpwMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwLCBjb25zdCBCSUdO VU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsCi0rCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFgg KmN0eCwgQk5fR0VOQ0IgKmNiKTsKLStpbnQgQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChCSUdO VU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCi0rCQkJQklHTlVNICpYcDEsIEJJR05VTSAq WHAyLAotKwkJCWNvbnN0IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFgg KmN0eCwKLSsJCQlCTl9HRU5DQiAqY2IpOwotKwotIEJOX01PTlRfQ1RYICpCTl9NT05UX0NUWF9u ZXcodm9pZCApOwotIHZvaWQgQk5fTU9OVF9DVFhfaW5pdChCTl9NT05UX0NUWCAqY3R4KTsKLSBp bnQgQk5fbW9kX211bF9tb250Z29tZXJ5KEJJR05VTSAqcixjb25zdCBCSUdOVU0gKmEsY29uc3Qg QklHTlVNICpiLAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYm4vYm5feDkzMXAuYy5m aXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JuL2JuX3g5MzFwLmMKLS0tLSBvcGVuc3NsLTEuMC4w L2NyeXB0by9ibi9ibl94OTMxcC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ibi9ibl94OTMxcC5jCTIwMTAtMDMtMzAg MTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDI3MiBAQAotKy8qIGJuX3g5MzFw LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wu b3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBh cmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAq Ci0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2lu Z0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0r ICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0r ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRv Z3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29m dC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0r ICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8 c3RkaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKy8qIFg5LjMxIHJvdXRpbmVz IGZvciBwcmltZSBkZXJpdmF0aW9uICovCi0rCi0rLyogWDkuMzEgcHJpbWUgZGVyaXZhdGlvbi4g VGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwcmltZXMgcGkKLSsgKiAocDEsIHAyLCBxMSwg cTIpIGZyb20gYSBwYXJhbWV0ZXIgWHBpIGJ5IGNoZWNraW5nIHN1Y2Nlc3NpdmUgb2RkCi0rICog aW50ZWdlcnMuCi0rICovCi0rCi0rc3RhdGljIGludCBibl94OTMxX2Rlcml2ZV9waShCSUdOVU0g KnBpLCBjb25zdCBCSUdOVU0gKlhwaSwgQk5fQ1RYICpjdHgsCi0rCQkJQk5fR0VOQ0IgKmNiKQot Kwl7Ci0rCWludCBpID0gMDsKLSsJaWYgKCFCTl9jb3B5KHBpLCBYcGkpKQotKwkJcmV0dXJuIDA7 Ci0rCWlmICghQk5faXNfb2RkKHBpKSAmJiAhQk5fYWRkX3dvcmQocGksIDEpKQotKwkJcmV0dXJu IDA7Ci0rCWZvcig7OykKLSsJCXsKLSsJCWkrKzsKLSsJCUJOX0dFTkNCX2NhbGwoY2IsIDAsIGkp OwotKwkJLyogTkIgMjcgTVIgaXMgc3BlY2lmaWNlZCBpbiBYOS4zMSAqLwotKwkJaWYgKEJOX2lz X3ByaW1lX2Zhc3R0ZXN0X2V4KHBpLCAyNywgY3R4LCAxLCBjYikpCi0rCQkJYnJlYWs7Ci0rCQlp ZiAoIUJOX2FkZF93b3JkKHBpLCAyKSkKLSsJCQlyZXR1cm4gMDsKLSsJCX0KLSsJQk5fR0VOQ0Jf Y2FsbChjYiwgMiwgaSk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rLyogVGhpcyBpcyB0aGUgbWFp biBYOS4zMSBwcmltZSBkZXJpdmF0aW9uIGZ1bmN0aW9uLiBGcm9tIHBhcmFtZXRlcnMKLSsgKiBY cDEsIFhwMiBhbmQgWHAgZGVyaXZlIHRoZSBwcmltZSBwLiBJZiB0aGUgcGFyYW1ldGVycyBwMSBv ciBwMiBhcmUKLSsgKiBub3QgTlVMTCB0aGV5IHdpbGwgYmUgcmV0dXJuZWQgdG9vOiB0aGlzIGlz IG5lZWRlZCBmb3IgdGVzdGluZy4KLSsgKi8KLSsKLStpbnQgQk5fWDkzMV9kZXJpdmVfcHJpbWVf ZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAotKwkJCWNvbnN0IEJJR05VTSAq WHAsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKLSsJCQljb25zdCBCSUdO VU0gKmUsIEJOX0NUWCAqY3R4LCBCTl9HRU5DQiAqY2IpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0r Ci0rCUJJR05VTSAqdCwgKnAxcDIsICpwbTE7Ci0rCi0rCS8qIE9ubHkgZXZlbiBlIHN1cHBvcnRl ZCAqLwotKwlpZiAoIUJOX2lzX29kZChlKSkKLSsJCXJldHVybiAwOwotKwotKwlCTl9DVFhfc3Rh cnQoY3R4KTsKLSsJaWYgKCFwMSkKLSsJCXAxID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlpZiAo IXAyKQotKwkJcDIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0rCXQgPSBCTl9DVFhfZ2V0KGN0eCk7 Ci0rCi0rCXAxcDIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0rCXBtMSA9IEJOX0NUWF9nZXQoY3R4 KTsKLSsKLSsJaWYgKCFibl94OTMxX2Rlcml2ZV9waShwMSwgWHAxLCBjdHgsIGNiKSkKLSsJCWdv dG8gZXJyOwotKwotKwlpZiAoIWJuX3g5MzFfZGVyaXZlX3BpKHAyLCBYcDIsIGN0eCwgY2IpKQot KwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fbXVsKHAxcDIsIHAxLCBwMiwgY3R4KSkKLSsJCWdv dG8gZXJyOwotKwotKwkvKiBGaXJzdCBzZXQgcCB0byB2YWx1ZSBvZiBScCAqLwotKwotKwlpZiAo IUJOX21vZF9pbnZlcnNlKHAsIHAyLCBwMSwgY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAo IUJOX211bChwLCBwLCBwMiwgY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX21vZF9p bnZlcnNlKHQsIHAxLCBwMiwgY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX211bCh0 LCB0LCBwMSwgY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX3N1YihwLCBwLCB0KSkK LSsJCWdvdG8gZXJyOwotKwotKwlpZiAocC0+bmVnICYmICFCTl9hZGQocCwgcCwgcDFwMikpCi0r CQlnb3RvIGVycjsKLSsKLSsJLyogcCBub3cgZXF1YWxzIFJwICovCi0rCi0rCWlmICghQk5fbW9k X3N1YihwLCBwLCBYcCwgcDFwMiwgY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX2Fk ZChwLCBwLCBYcCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogcCBub3cgZXF1YWxzIFlwMCAqLwot KwotKwlmb3IgKDs7KQotKwkJewotKwkJaW50IGkgPSAxOwotKwkJQk5fR0VOQ0JfY2FsbChjYiwg MCwgaSsrKTsKLSsJCWlmICghQk5fY29weShwbTEsIHApKQotKwkJCWdvdG8gZXJyOwotKwkJaWYg KCFCTl9zdWJfd29yZChwbTEsIDEpKQotKwkJCWdvdG8gZXJyOwotKwkJaWYgKCFCTl9nY2QodCwg cG0xLCBlLCBjdHgpKQotKwkJCWdvdG8gZXJyOwotKwkJaWYgKEJOX2lzX29uZSh0KQotKwkJLyog WDkuMzEgc3BlY2lmaWVzIDggTVIgYW5kIDEgTHVjYXMgdGVzdCBvciBhbnkgcHJpbWUgdGVzdAot KwkJICogb2ZmZXJpbmcgc2ltaWxhciBvciBiZXR0ZXIgZ3VhcmFudGVlcyA1MCBNUiBpcyBjb25z aWRlcmFibHkgCi0rCQkgKiBiZXR0ZXIuCi0rCQkgKi8KLSsJCQkmJiBCTl9pc19wcmltZV9mYXN0 dGVzdF9leChwLCA1MCwgY3R4LCAxLCBjYikpCi0rCQkJYnJlYWs7Ci0rCQlpZiAoIUJOX2FkZChw LCBwLCBwMXAyKSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJQk5fR0VOQ0JfY2FsbChjYiwg MywgMCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycjoKLSsKLSsJQk5fQ1RYX2VuZChjdHgpOwot KwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rLyogR2VuZXJhdGUgcGFpciBvZiBwYXJhbXRlcnMg WHAsIFhxIGZvciBYOS4zMSBwcmltZSBnZW5lcmF0aW9uLgotKyAqIE5vdGU6IG5iaXRzIHBhcmFt dGVyIGlzIHN1bSBvZiBudW1iZXIgb2YgYml0cyBpbiBib3RoLgotKyAqLwotKwotK2ludCBCTl9Y OTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhwLCBCSUdOVU0gKlhxLCBpbnQgbmJpdHMsIEJOX0NU WCAqY3R4KQotKwl7Ci0rCUJJR05VTSAqdDsKLSsJaW50IGk7Ci0rCS8qIE51bWJlciBvZiBiaXRz IGZvciBlYWNoIHByaW1lIGlzIG9mIHRoZSBmb3JtCi0rCSAqIDUxMisxMjhzIGZvciBzID0gMCwg MSwgLi4uCi0rCSAqLwotKwlpZiAoKG5iaXRzIDwgMTAyNCkgfHwgKG5iaXRzICYgMHhmZikpCi0r CQlyZXR1cm4gMDsKLSsJbmJpdHMgPj49IDE7Ci0rCS8qIFRoZSByYW5kb20gdmFsdWUgWHAgbXVz dCBiZSBiZXR3ZWVuIHNxcnQoMikgKiAyXihuYml0cy0xKSBhbmQKLSsJICogMl5uYml0cyAtIDEu IEJ5IHNldHRpbmcgdGhlIHRvcCB0d28gYml0cyB3ZSBlbnN1cmUgdGhhdCB0aGUgbG93ZXIKLSsJ ICogYm91bmQgaXMgZXhjZWVkZWQuCi0rCSAqLwotKwlpZiAoIUJOX3JhbmQoWHAsIG5iaXRzLCAx LCAwKSkKLSsJCXJldHVybiAwOwotKwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsJdCA9IEJOX0NU WF9nZXQoY3R4KTsKLSsKLSsJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKLSsJCXsKLSsJCWlm ICghQk5fcmFuZChYcSwgbmJpdHMsIDEsIDApKQotKwkJCXJldHVybiAwOwotKwkJLyogQ2hlY2sg dGhhdCB8WHAgLSBYcXwgPiAyXihuYml0cyAtIDEwMCkgKi8KLSsJCUJOX3N1Yih0LCBYcCwgWHEp OwotKwkJaWYgKEJOX251bV9iaXRzKHQpID4gKG5iaXRzIC0gMTAwKSkKLSsJCQlicmVhazsKLSsJ CX0KLSsKLSsJQk5fQ1RYX2VuZChjdHgpOwotKwotKwlpZiAoaSA8IDEwMDApCi0rCQlyZXR1cm4g MTsKLSsKLSsJcmV0dXJuIDA7Ci0rCi0rCX0KLSsKLSsvKiBHZW5lcmF0ZSBwcmltZXMgdXNpbmcg WDkuMzEgYWxnb3JpdGhtLiBPZiB0aGUgdmFsdWVzIHAsIHAxLCBwMiwgWHAxCi0rICogYW5kIFhw MiBvbmx5ICdwJyBuZWVkcyB0byBiZSBub24tTlVMTC4gSWYgYW55IG9mIHRoZSBvdGhlcnMgYXJl IG5vdCBOVUxMCi0rICogdGhlIHJlbGV2YW50IHBhcmFtZXRlciB3aWxsIGJlIHN0b3JlZCBpbiBp dC4KLSsgKgotKyAqIER1ZSB0byB0aGUgZmFjdCB0aGF0IHxYcCAtIFhxfCA+IDJeKG5iaXRzIC0g MTAwKSBtdXN0IGJlIHNhdGlzZmllZCBYcCBhbmQgWHEKLSsgKiBhcmUgZ2VuZXJhdGVkIHVzaW5n IHRoZSBwcmV2aW91cyBmdW5jdGlvbiBhbmQgc3VwcGxpZWQgYXMgaW5wdXQuCi0rICovCi0rCi0r aW50IEJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdO VU0gKnAyLAotKwkJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwKLSsJCQljb25zdCBCSUdOVU0g KlhwLAotKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsCi0rCQkJQk5fR0VOQ0IgKmNi KQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsJaWYgKCFY cDEpCi0rCQlYcDEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCWlmICghWHAyKQotKwkJWHAyID0gQk5f Q1RYX2dldChjdHgpOwotKwotKwlpZiAoIUJOX3JhbmQoWHAxLCAxMDEsIDAsIDApKQotKwkJZ290 byBlcnJvcjsKLSsJaWYgKCFCTl9yYW5kKFhwMiwgMTAxLCAwLCAwKSkKLSsJCWdvdG8gZXJyb3I7 Ci0rCWlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocCwgcDEsIHAyLCBYcCwgWHAxLCBYcDIs IGUsIGN0eCwgY2IpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6 Ci0rCUJOX0NUWF9lbmQoY3R4KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYm4vTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9ibi9NYWtlZmlsZQotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JuL01ha2VmaWxlLmZp cHMJMjAwOC0xMS0xMiAwOToxOTowMi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w L2NyeXB0by9ibi9NYWtlZmlsZQkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAot QEAgLTI2LDEzICsyNiwxMyBAQCBMSUJTUkM9CWJuX2FkZC5jIGJuX2Rpdi5jIGJuX2V4cC5jIGJu X2xpCi0gCWJuX3ByaW50LmMgYm5fcmFuZC5jIGJuX3NoaWZ0LmMgYm5fd29yZC5jIGJuX2JsaW5k LmMgXAotIAlibl9rcm9uLmMgYm5fc3FydC5jIGJuX2djZC5jIGJuX3ByaW1lLmMgYm5fZXJyLmMg Ym5fc3FyLmMgYm5fYXNtLmMgXAotIAlibl9yZWNwLmMgYm5fbW9udC5jIGJuX21waS5jIGJuX2V4 cDIuYyBibl9nZjJtLmMgYm5fbmlzdC5jIFwKLS0JYm5fZGVwci5jIGJuX2NvbnN0LmMKLSsJYm5f ZGVwci5jIGJuX2NvbnN0LmMgYm5feDkzMXAuYwotIAotIExJQk9CSj0JYm5fYWRkLm8gYm5fZGl2 Lm8gYm5fZXhwLm8gYm5fbGliLm8gYm5fY3R4Lm8gYm5fbXVsLm8gYm5fbW9kLm8gXAotIAlibl9w cmludC5vIGJuX3JhbmQubyBibl9zaGlmdC5vIGJuX3dvcmQubyBibl9ibGluZC5vIFwKLSAJYm5f a3Jvbi5vIGJuX3NxcnQubyBibl9nY2QubyBibl9wcmltZS5vIGJuX2Vyci5vIGJuX3Nxci5vICQo Qk5fQVNNKSBcCi0gCWJuX3JlY3AubyBibl9tb250Lm8gYm5fbXBpLm8gYm5fZXhwMi5vIGJuX2dm Mm0ubyBibl9uaXN0Lm8gXAotLQlibl9kZXByLm8gYm5fY29uc3QubwotKwlibl9kZXByLm8gYm5f Y29uc3QubyBibl94OTMxcC5vCi0gCi0gU1JDPSAkKExJQlNSQykKLSAKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbC5maXBzIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbAotLS0tIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbC5maXBzCTIwMDktMDQtMDYgMTY6MjU6MDIuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwt eDg2LnBsCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtNzIyLDEyICs3 MjIsMTUgQEAgbXkgJGJpYXM9aW50KEBUWzBdKT9zaGlmdChAVCk6MDsKLSB9Ci0gJmZ1bmN0aW9u X2VuZCgiQ2FtZWxsaWFfRWtleWdlbiIpOwotIAotKyRzZXRrZXlmdW5jID0gIkNhbWVsbGlhX3Nl dF9rZXkiOwotKyRzZXRrZXlmdW5jID0gInByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleSIgaWYgKCRF TlZ7RklQU30gbmUgIiIpOwotKwotIGlmICgkT1BFTlNTTCkgewotICMgaW50IENhbWVsbGlhX3Nl dF9rZXkgKAotICMJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksCi0gIwkJaW50IGJpdHMs Ci0gIwkJQ0FNRUxMSUFfS0VZICprZXkpCi0tJmZ1bmN0aW9uX2JlZ2luX0IoIkNhbWVsbGlhX3Nl dF9rZXkiKTsKLSsmZnVuY3Rpb25fYmVnaW5fQigkc2V0a2V5ZnVuYyk7Ci0gCSZwdXNoCSgiZWJ4 Iik7Ci0gCSZtb3YJKCJlY3giLCZ3cGFyYW0oMCkpOwkjIHB1bGwgYXJndW1lbnRzCi0gCSZtb3YJ KCJlYngiLCZ3cGFyYW0oMSkpOwotQEAgLTc2MCw3ICs3NjMsNyBAQCBpZiAoJE9QRU5TU0wpIHsK LSAmc2V0X2xhYmVsKCJkb25lIiw0KTsKLSAJJnBvcAkoImVieCIpOwotIAkmcmV0CSgpOwotLSZm dW5jdGlvbl9lbmRfQigiQ2FtZWxsaWFfc2V0X2tleSIpOwotKyZmdW5jdGlvbl9lbmRfQigkc2V0 a2V5ZnVuYyk7Ci0gfQotIAotIEBTQk9YPSgKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2NhbWVsbGlhL2NhbWVsbGlhLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9j YW1lbGxpYS5oCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaC5m aXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAw MCArMDIwMAotQEAgLTg4LDYgKzg4LDExIEBAIHN0cnVjdCBjYW1lbGxpYV9rZXlfc3QgCi0gCX07 Ci0gdHlwZWRlZiBzdHJ1Y3QgY2FtZWxsaWFfa2V5X3N0IENBTUVMTElBX0tFWTsKLSAKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNp Z25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLSsJQ0FNRUxMSUFfS0VZICprZXkp OwotKyNlbmRpZgotKwotIGludCBDYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIg KnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotIAlDQU1FTExJQV9LRVkgKmtleSk7Ci0gCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYy5maXBzIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL2NtbGxfZmJsay5jCi0tLS0gb3BlbnNzbC0xLjAuMC9j cnlwdG8vY2FtZWxsaWEvY21sbF9mYmxrLmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL2NtbGxfZmJsay5j CTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDY4IEBACi0r LyogY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhX21pc2MuYyAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5 bGU6ICJlYXkiIC0qLSAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA2 IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK LSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0r ICovCi0rIAotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvY2FtZWxsaWEuaD4KLSsjaW5jbHVkZSAiY21sbF9sb2NsLmgiCi0rI2luY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IENhbWVsbGlhX3Nl dF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0rCUNB TUVMTElBX0tFWSAqa2V5KQotKwl7Ci0rCWlmIChGSVBTX21vZGUoKSkKLSsJCUZJUFNfQkFEX0FC T1JUKENBTUVMTElBKQotKwlyZXR1cm4gcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KHVzZXJLZXks IGJpdHMsIGtleSk7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2NhbWVsbGlhL2NtbGxfbWlzYy5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEv Y21sbF9taXNjLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2Mu Yy5maXBzCTIwMDgtMTAtMjggMTM6MTM6NTIuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMC9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAw MDAwMDAgKzAyMDAKLUBAIC01MiwxMSArNTIsMjAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3Nsdi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2NhbWVsbGlhLmg+Ci0gI2luY2x1ZGUgImNtbGxf bG9jbC5oIgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gY29uc3QgY2hhciBD QU1FTExJQV92ZXJzaW9uW109IkNBTUVMTElBIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkoY29uc3Qg dW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0rCUNBTUVMTElBX0tFWSAq a2V5KQotKyNlbHNlCi0gaW50IENhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAq dXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0gCUNBTUVMTElBX0tFWSAqa2V5KQotKyNlbmRpZgot IAl7Ci0gCWlmKCF1c2VyS2V5IHx8ICFrZXkpCi0gCQlyZXR1cm4gLTE7Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2NhbWVsbGlhL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEv TWFrZWZpbGUuZmlwcwkyMDA4LTEyLTIzIDEyOjMzOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCi1AQCAtMjMsOSArMjMsOSBAQCBBUFBTPQotIAotIExJQj0kKFRPUCkv bGliY3J5cHRvLmEKLSBMSUJTUkM9Y2FtZWxsaWEuYyBjbWxsX21pc2MuYyBjbWxsX2VjYi5jIGNt bGxfY2JjLmMgY21sbF9vZmIuYyBcCi0tCSAgIGNtbGxfY2ZiLmMgY21sbF9jdHIuYyAKLSsJICAg Y21sbF9jZmIuYyBjbWxsX2N0ci5jIGNtbGxfZmJsay5jCi0gCi0tTElCT0JKPSBjbWxsX2VjYi5v IGNtbGxfb2ZiLm8gY21sbF9jZmIubyBjbWxsX2N0ci5vICQoQ01MTF9FTkMpCi0rTElCT0JKPSBj bWxsX2VjYi5vIGNtbGxfb2ZiLm8gY21sbF9jZmIubyBjbWxsX2N0ci5vICQoQ01MTF9FTkMpIGNt bGxfZmJsay5vCi0gCi0gU1JDPSAkKExJQlNSQykKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2Nhc3QvY2FzdC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FzdC9jYXN0LmgK LS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYXN0L2Nhc3QuaC5maXBzCTIwMTAtMDMtMzAgMTA6 MzM6NDUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FzdC9jYXN0 LmgJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC04Myw3ICs4Myw5IEBA IHR5cGVkZWYgc3RydWN0IGNhc3Rfa2V5X3N0Ci0gCWludCBzaG9ydF9rZXk7CS8qIFVzZSByZWR1 Y2VkIHJvdW5kcyBmb3Igc2hvcnQga2V5ICovCi0gCX0gQ0FTVF9LRVk7Ci0gCi0tIAotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMgCi0rdm9pZCBwcml2YXRlX0NBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5 LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSsjZW5kaWYKLSB2b2lkIENB U1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpk YXRhKTsKLSB2b2lkIENBU1RfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVu c2lnbmVkIGNoYXIgKm91dCwgY29uc3QgQ0FTVF9LRVkgKmtleSwKLSAJCSAgICAgIGludCBlbmMp OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FzdC9jX3NrZXkuYy5maXBzIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2Nhc3QvY19za2V5LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9j YXN0L2Nfc2tleS5jLmZpcHMJMjAwMC0wNi0wMyAxNjoxMzozNS4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYXN0L2Nfc2tleS5jCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCi1AQCAtNTcsNiArNTcsMTEgQEAKLSAgKi8KLSAKLSAjaW5jbHVkZSA8 b3BlbnNzbC9jYXN0Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAjaW5j bHVkZSAiY2FzdF9sY2wuaCIKLSAjaW5jbHVkZSAiY2FzdF9zLmgiCi0gCi1AQCAtNzIsNyArNzcs NyBAQAotICNkZWZpbmUgUzYgQ0FTVF9TX3RhYmxlNgotICNkZWZpbmUgUzcgQ0FTVF9TX3RhYmxl NwotIAotLXZvaWQgQ0FTVF9zZXRfa2V5KENBU1RfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmRhdGEpCi0rRklQU19OT05fRklQU19WQ0lQSEVSX0luaXQoQ0FTVCkKLSAJ ewotIAlDQVNUX0xPTkcgeFsxNl07Ci0gCUNBU1RfTE9ORyB6WzE2XTsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2NyeXB0by5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY3J5cHRv LmgKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9jcnlwdG8uaC5maXBzCTIwMTAtMDMtMzAgMTA6 MzM6NDUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY3J5cHRvLmgJ MjAxMC0wMy0zMCAxMDozNjowNi4wMDAwMDAwMDAgKzAyMDAKLUBAIC01NDcsMTIgKzU0Nyw3MCBA QCB1bnNpZ25lZCBsb25nICpPUEVOU1NMX2lhMzJjYXBfbG9jKHZvaWQpCi0gI2RlZmluZSBPUEVO U1NMX2lhMzJjYXAgKCooT1BFTlNTTF9pYTMyY2FwX2xvYygpKSkKLSBpbnQgT1BFTlNTTF9pc3Nl cnZpY2Uodm9pZCk7Ci0gCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNkZWZpbmUgRklQU19F UlJPUl9JR05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKLSsJCWFs ZyAiIHByZXZpb3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBlcnJvciBpZ25vcmVkIik7Ci0r Ci0rI2RlZmluZSBGSVBTX0JBRF9BQk9SVChhbGcpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElO RV9fLCBcCi0rCQkjYWxnICIgQWxnb3JpdGhtIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUiKTsKLSsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTX1NUUklDVAotKyNkZWZpbmUgRklQU19CQURfQUxHT1JJVEhN KGFsZykgRklQU19CQURfQUJPUlQoYWxnKQotKyNlbHNlCi0rI2RlZmluZSBGSVBTX0JBRF9BTEdP UklUSE0oYWxnKSBcCi0rCXsgXAotKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLEZJUFNfUl9O T05fRklQU19NRVRIT0QpOyBcCi0rCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiQWxnb3JpdGhtPSIs ICNhbGcpOyBcCi0rCXJldHVybiAwOyBcCi0rCX0KLSsjZW5kaWYKLSsKLSsvKiBMb3cgbGV2ZWwg ZGlnZXN0IEFQSSBibG9ja2luZyBtYWNybyAqLwotKwotKyNkZWZpbmUgRklQU19OT05fRklQU19N RF9Jbml0KGFsZykgXAotKwlpbnQgYWxnIyNfSW5pdChhbGcjI19DVFggKmMpIFwKLSsJCXsgXAot KwkJaWYgKEZJUFNfbW9kZSgpKSBcCi0rCQkJRklQU19CQURfQUxHT1JJVEhNKGFsZykgXAotKwkJ cmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMpOyBcCi0rCQl9IFwKLSsJaW50IHByaXZhdGVf IyNhbGcjI19Jbml0KGFsZyMjX0NUWCAqYykKLSsKLSsvKiBGb3IgY2lwaGVycyB0aGUgQVBJIG9m dGVuIHZhcmllcyBmcm9tIGNpcGhlciB0byBjaXBoZXIgYW5kIGVhY2ggbmVlZHMgdG8KLSsgKiBi ZSB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjYXNlLiBWYXJpYWJsZSBrZXkgbGVuZ3RoIGNpcGhlcnMg KEJsb3dmaXNoLCBSQzQsCi0rICogQ0FTVCkgaG93ZXZlciBhcmUgdmVyeSBzaW1pbGFyIGFuZCBj YW4gdXNlIGEgYmxvY2tpbmcgbWFjcm8uCi0rICovCi0rCi0rI2RlZmluZSBGSVBTX05PTl9GSVBT X1ZDSVBIRVJfSW5pdChhbGcpIFwKLSsJdm9pZCBhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5 LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKSBcCi0rCQl7IFwKLSsJCWlmIChG SVBTX21vZGUoKSkgXAotKwkJCUZJUFNfQkFEX0FCT1JUKGFsZykgXAotKwkJcHJpdmF0ZV8jI2Fs ZyMjX3NldF9rZXkoa2V5LCBsZW4sIGRhdGEpOyBcCi0rCQl9IFwKLSsJdm9pZCBwcml2YXRlXyMj YWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtleSwgaW50IGxlbiwgXAotKwkJCQkJY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSkKLSsKLSsjZWxzZQotKwotKyNkZWZpbmUgRklQU19OT05fRklQU19W Q0lQSEVSX0luaXQoYWxnKSBcCi0rCXZvaWQgYWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtleSwg aW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLSsKLSsjZGVmaW5lIEZJUFNfTk9O X0ZJUFNfTURfSW5pdChhbGcpIFwKLSsJaW50IGFsZyMjX0luaXQoYWxnIyNfQ1RYICpjKSAKLSsK LSsjZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQUyAqLwotKwotIC8qIEJFR0lOIEVSUk9SIENPREVT ICovCi0gLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNj cmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKLSAgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5 IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KLSAgKi8KLSB2b2lk IEVSUl9sb2FkX0NSWVBUT19zdHJpbmdzKHZvaWQpOwotIAotKyNkZWZpbmUgT1BFTlNTTF9IQVZF X0lOSVQJMQotK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7Ci0rCi0gLyogRXJyb3Ig Y29kZXMgZm9yIHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLwotIAotIC8qIEZ1bmN0aW9uIGNvZGVz LiAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfZXJyLmMuZmlwcyBvcGVu c3NsLTEuMC4wL2NyeXB0by9kaC9kaF9lcnIuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Ro L2RoX2Vyci5jLmZpcHMJMjAwNi0xMS0yMSAyMjoyOTozNy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4wL2NyeXB0by9kaC9kaF9lcnIuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAw MDAwMCArMDIwMAotQEAgLTczLDYgKzczLDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBESF9z dHJfZnVuY3RzW109Ci0ge0VSUl9GVU5DKERIX0ZfQ09NUFVURV9LRVkpLAkiQ09NUFVURV9LRVki fSwKLSB7RVJSX0ZVTkMoREhfRl9ESFBBUkFNU19QUklOVF9GUCksCSJESHBhcmFtc19wcmludF9m cCJ9LAotIHtFUlJfRlVOQyhESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TKSwJIkRIX0JVSUxUSU5f R0VOUEFSQU1TIn0sCi0re0VSUl9GVU5DKERIX0ZfREhfQ09NUFVURV9LRVkpLAkiREhfY29tcHV0 ZV9rZXkifSwKLSt7RVJSX0ZVTkMoREhfRl9ESF9HRU5FUkFURV9LRVkpLAkiREhfZ2VuZXJhdGVf a2V5In0sCi0ge0VSUl9GVU5DKERIX0ZfREhfTkVXX01FVEhPRCksCSJESF9uZXdfbWV0aG9kIn0s Ci0ge0VSUl9GVU5DKERIX0ZfREhfUEFSQU1fREVDT0RFKSwJIkRIX1BBUkFNX0RFQ09ERSJ9LAot IHtFUlJfRlVOQyhESF9GX0RIX1BSSVZfREVDT0RFKSwJIkRIX1BSSVZfREVDT0RFIn0sCi1AQCAt OTQsNiArOTYsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERIX3N0cl9yZWFzb25zW109Ci0g e0VSUl9SRUFTT04oREhfUl9CTl9FUlJPUikgICAgICAgICAgICAgICAsImJuIGVycm9yIn0sCi0g e0VSUl9SRUFTT04oREhfUl9ERUNPREVfRVJST1IpICAgICAgICAgICAsImRlY29kZSBlcnJvciJ9 LAotIHtFUlJfUkVBU09OKERIX1JfSU5WQUxJRF9QVUJLRVkpICAgICAgICAgLCJpbnZhbGlkIHB1 YmxpYyBrZXkifSwKLSt7RVJSX1JFQVNPTihESF9SX0tFWV9TSVpFX1RPT19TTUFMTCkgICAgICwi a2V5IHNpemUgdG9vIHNtYWxsIn0sCi0ge0VSUl9SRUFTT04oREhfUl9LRVlTX05PVF9TRVQpICAg ICAgICAgICAsImtleXMgbm90IHNldCJ9LAotIHtFUlJfUkVBU09OKERIX1JfTU9EVUxVU19UT09f TEFSR0UpICAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9LAotIHtFUlJfUkVBU09OKERIX1JfTk9f UEFSQU1FVEVSU19TRVQpICAgICAgLCJubyBwYXJhbWV0ZXJzIHNldCJ9LAotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9k aC9kaF9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJMjAw NS0wNC0yNiAyMDo1MzoxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9kaC9kaF9nZW4uYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTY1 LDYgKzY1LDEwIEBACi0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2Vu ZGlmCi0gCi0gc3RhdGljIGludCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LCBpbnQgcHJp bWVfbGVuLCBpbnQgZ2VuZXJhdG9yLCBCTl9HRU5DQiAqY2IpOwotIAotQEAgLTEwNiw2ICsxMTAs MjAgQEAgc3RhdGljIGludCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LAotIAlpbnQgZyxv az0gLTE7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlp ZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfREhfQlVJ TFRJTl9HRU5QQVJBTVMsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAw OwotKwkJfQotKwotKwlpZiAoRklQU19tb2RlKCkgJiYgKHByaW1lX2xlbiA8IE9QRU5TU0xfREhf RklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJCURIZXJyKERIX0ZfREhfQlVJTFRJTl9H RU5QQVJBTVMsIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCWdvdG8gZXJyOwotKwkJfQot KyNlbmRpZgotKwotIAljdHg9Qk5fQ1RYX25ldygpOwotIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8g ZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2RoL2RoLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9kaC9kaC5oCi0tLS0gb3BlbnNzbC0x LjAuMC9jcnlwdG8vZGgvZGguaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGguaAkyMDEwLTAzLTMwIDEwOjMzOjQ2 LjAwMDAwMDAwMCArMDIwMAotQEAgLTc3LDYgKzc3LDggQEAKLSAjIGRlZmluZSBPUEVOU1NMX0RI X01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKLSAjZW5kaWYKLSAKLSsjZGVmaW5lIE9QRU5TU0xfREhf RklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsKLSAjZGVmaW5lIERIX0ZMQUdfQ0FDSEVfTU9O VF9QICAgICAweDAxCi0gI2RlZmluZSBESF9GTEFHX05PX0VYUF9DT05TVFRJTUUgMHgwMiAvKiBu ZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBESAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQgdGltZQot QEAgLTI0MSw2ICsyNDMsOCBAQCB2b2lkIEVSUl9sb2FkX0RIX3N0cmluZ3Modm9pZCk7Ci0gI2Rl ZmluZSBESF9GX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTA0Ci0gI2RlZmluZSBESF9GX1BLRVlf REhfREVSSVZFCQkJCSAxMTIKLSAjZGVmaW5lIERIX0ZfUEtFWV9ESF9LRVlHRU4JCQkJIDExMwot KyNkZWZpbmUgREhfRl9ESF9DT01QVVRFX0tFWQkJCQkgMTE0Ci0rI2RlZmluZSBESF9GX0RIX0dF TkVSQVRFX0tFWQkJCSAxMTUKLSAKLSAvKiBSZWFzb24gY29kZXMuICovCi0gI2RlZmluZSBESF9S X0JBRF9HRU5FUkFUT1IJCQkJIDEwMQotQEAgLTI1Myw2ICsyNTcsNyBAQCB2b2lkIEVSUl9sb2Fk X0RIX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBESF9SX05PX1BBUkFNRVRFUlNfU0VUCQkJCSAx MDcKLSAjZGVmaW5lIERIX1JfTk9fUFJJVkFURV9WQUxVRQkJCQkgMTAwCi0gI2RlZmluZSBESF9S X1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUgkJCSAxMDUKLSsjZGVmaW5lIERIX1JfS0VZX1NJWkVf VE9PX1NNQUxMCQkJCSAxMTAKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi0gfQotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9kaC9kaF9rZXkuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMJ MjAwNy0wMy0yOCAwMjoxNToyMy4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9kaC9kaF9rZXkuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAg LTYxLDYgKzYxLDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gc3RhdGljIGludCBn ZW5lcmF0ZV9rZXkoREggKmRoKTsKLSBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNo YXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJfa2V5LCBESCAqZGgpOwotQEAgLTEwNyw2ICsxMTAs MTQgQEAgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKQotIAlCTl9NT05UX0NUWCAqbW9u dD1OVUxMOwotIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKLSAKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnAp IDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIoREhf Rl9HRU5FUkFURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCXJldHVybiAwOwot KwkJfQotKyNlbmRpZgotKwotIAljdHggPSBCTl9DVFhfbmV3KCk7Ci0gCWlmIChjdHggPT0gTlVM TCkgZ290byBlcnI7Ci0gCi1AQCAtMTg0LDYgKzE5NSwxMyBAQCBzdGF0aWMgaW50IGNvbXB1dGVf a2V5KHVuc2lnbmVkIGNoYXIgKmtlCi0gCQlESGVycihESF9GX0NPTVBVVEVfS0VZLERIX1JfTU9E VUxVU19UT09fTEFSR0UpOwotIAkJZ290byBlcnI7Ci0gCQl9Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhf RklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJCURIZXJyKERIX0ZfQ09NUFVURV9LRVks IERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgot IAotIAljdHggPSBCTl9DVFhfbmV3KCk7Ci0gCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7Ci1A QCAtMjUxLDYgKzI2OSw5IEBAIHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25zdCBESCAqZGgs IEIKLSAKLSBzdGF0aWMgaW50IGRoX2luaXQoREggKmRoKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCWRoLT5mbGFncyB8PSBE SF9GTEFHX0NBQ0hFX01PTlRfUDsKLSAJcmV0dXJuKDEpOwotIAl9Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wL2NyeXB0by9kc2EvZHNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNh L2RzYV9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwky MDA4LTEyLTI2IDE4OjE3OjIxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2RzYS9kc2FfZ2VuLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBA IC03Nyw4ICs3NywxMiBAQAotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZHNhLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3No YS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2VuZGlmCi0gI2luY2x1ZGUgImRzYV9sb2NsLmgiCi0gCi0gaW50IERTQV9nZW5lcmF0ZV9wYXJh bWV0ZXJzX2V4KERTQSAqcmV0LCBpbnQgYml0cywKLUBAIC0xMjYsNiArMTMwLDIxIEBAIGludCBk c2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJQk5fQ1RYICpjdHg9TlVMTDsK LSAJdW5zaWduZWQgaW50IGg9MjsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNf c2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfQlVJ TFRJTl9QQVJBTUdFTiwKLSsJCSAgICBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkg ICAgZ290byBlcnI7Ci0rCSAgICB9Ci0rCi0rCWlmIChGSVBTX21vZGUoKSAmJiAoYml0cyA8IE9Q RU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0Zf RFNBX0JVSUxUSU5fUEFSQU1HRU4sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlnb3Rv IGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKHFzaXplICE9IFNIQV9ESUdFU1RfTEVOR1RI ICYmIHFzaXplICE9IFNIQTIyNF9ESUdFU1RfTEVOR1RIICYmCi0gCSAgICBxc2l6ZSAhPSBTSEEy NTZfRElHRVNUX0xFTkdUSCkKLSAJCS8qIGludmFsaWQgcSBzaXplICovCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4wL2NyeXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9kc2Ev ZHNhLmgKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9kc2EvZHNhLmguZmlwcwkyMDEwLTAzLTMw IDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RzYS9k c2EuaAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTg4LDYgKzg4LDgg QEAKLSAjIGRlZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCi0gI2VuZGlm Ci0gCi0rI2RlZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAotKwot ICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QCTB4MDEKLSAjZGVmaW5lIERTQV9GTEFHX05P X0VYUF9DT05TVFRJTUUgICAgICAgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1p biBEU0EKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBp bXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCi1AQCAtOTcsNiArOTksMjEgQEAK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiZSB1c2Vk IGZvciBhbGwgZXhwb25lbnRzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLwotIAotKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIERTQSBtZXRob2Qg aXMgRklQUyBjb21wbGlhbnQgYW5kIGNhbiBiZSB1c2VkCi0rICogaW4gRklQUyBtb2RlLiBUaGlz IGlzIHNldCBpbiB0aGUgdmFsaWRhdGVkIG1vZHVsZSBtZXRob2QuIElmIGFuCi0rICogYXBwbGlj YXRpb24gc2V0cyB0aGlzIGZsYWcgaW4gaXRzIG93biBtZXRob2RzIGl0IGlzIGl0cyByZXBvc2li aWxpdHkKLSsgKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBjb21wbGlhbnQuCi0rICovCi0rCi0r I2RlZmluZSBEU0FfRkxBR19GSVBTX01FVEhPRAkJCTB4MDQwMAotKwotKy8qIElmIHRoaXMgZmxh ZyBpcyBzZXQgdGhlIG9wZXJhdGlvbnMgbm9ybWFsbHkgZGlzYWJsZWQgaW4gRklQUyBtb2RlIGFy ZQotKyAqIHBlcm1pdHRlZCBpdCBpcyB0aGVuIHRoZSBhcHBsaWNhdGlvbnMgcmVzcG9uc2liaWxp dHkgdG8gZW5zdXJlIHRoYXQgdGhlCi0rICogdXNhZ2UgaXMgY29tcGxpYW50LgotKyAqLwotKwot KyNkZWZpbmUgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJCQkweDA0MDAKLSsKLSAjaWZkZWYgIF9f Y3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7Ci0gI2VuZGlmCi1AQCAtMjcwLDggKzI4NywxMSBAQCB2 b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgRFNBX0ZfRE9fRFNBX1BS SU5UCQkJCSAxMDQKLSAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVAkJCQkgMTAwCi0gI2Rl ZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlAJCQkgMTAxCi0rI2RlZmluZSBEU0FfRl9EU0Ff QlVJTFRJTl9LRVlHRU4JCQkgMTI0Ci0rI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdF TgkJCSAxMjMKLSAjZGVmaW5lIERTQV9GX0RTQV9ET19TSUdOCQkJCSAxMTIKLSAjZGVmaW5lIERT QV9GX0RTQV9ET19WRVJJRlkJCQkJIDExMwotKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BB UkFNRVRFUlMJCQkgMTI1Ci0gI2RlZmluZSBEU0FfRl9EU0FfTkVXX01FVEhPRAkJCQkgMTAzCi0g I2RlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVDT0RFCQkJCSAxMTkKLSAjZGVmaW5lIERTQV9GX0RT QV9QUklOVF9GUAkJCQkgMTA1Ci1AQCAtMjk2LDkgKzMxNiwxMiBAQCB2b2lkIEVSUl9sb2FkX0RT QV9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgRFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9T SVpFCQkgMTAwCi0gI2RlZmluZSBEU0FfUl9ERUNPREVfRVJST1IJCQkJIDEwNAotICNkZWZpbmUg RFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRQkJCSAxMDYKLSsjZGVmaW5lIERTQV9SX0tFWV9TSVpF X1RPT19TTUFMTAkJCSAxMTAKLSAjZGVmaW5lIERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAx MDEKLSAjZGVmaW5lIERTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDMKLSsjZGVmaW5lIERT QV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTExCi0gI2RlZmluZSBEU0FfUl9OT19QQVJBTUVURVJT X1NFVAkJCQkgMTA3Ci0rI2RlZmluZSBEU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQ U19NT0RFCSAxMTIKLSAjZGVmaW5lIERTQV9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUgkJCSAx MDUKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9kc2EvZHNhX2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNhL2RzYV9rZXkuYwot LS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcwkyMDA3LTAzLTI4IDAy OjE1OjI1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RzYS9kc2Ff a2V5LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC02Myw5ICs2Myw1 NSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+ Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotIAot IHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKTsKLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCi0rc3RhdGljIGludCBmaXBzX2RzYV9wYWlyd2lzZV9mYWlsID0gMDsKLSsK LSt2b2lkIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpCi0rCXsKLSsJZmlwc19kc2FfcGFp cndpc2VfZmFpbCA9IDE7Ci0rCX0KLSsKLStpbnQgZmlwc19jaGVja19kc2EoRFNBICpkc2EpCi0r CXsKLSsJRVZQX1BLRVkgKnBrOwotKwl1bnNpZ25lZCBjaGFyIHRic1tdID0gIkRTQSBQYWlyd2lz ZSBDaGVjayBEYXRhIjsKLSsJaW50IHJldCA9IDA7Ci0rCi0rICAgIAlpZiAoKHBrPUVWUF9QS0VZ X25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVWUF9QS0VZX3NldDFfRFNBKHBr LCBkc2EpOwotKwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwK LSsJCQkJCU5VTEwsIDAsIEVWUF9zaGExKCksIDAsIE5VTEwpKQotKwkJZ290byBlcnI7Ci0rCi0r CXJldCA9IDE7Ci0rCi0rZXJyOgotKwlpZiAocmV0ID09IDApCi0rCQl7Ci0rCQlmaXBzX3NldF9z ZWxmdGVzdF9mYWlsKCk7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX0RTQSxGSVBTX1Jf UEFJUldJU0VfVEVTVF9GQUlMRUQpOwotKwkJfQotKwotKwlpZiAocGspCi0rCQlFVlBfUEtFWV9m cmVlKHBrKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRpZgotKwotIGludCBEU0FfZ2Vu ZXJhdGVfa2V5KERTQSAqZHNhKQotIAl7Ci0gCWlmKGRzYS0+bWV0aC0+ZHNhX2tleWdlbikKLUBA IC03OSw2ICsxMjUsMTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2Ep Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1O VUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9u dW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJ CXsKLSsJCURTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4sIERTQV9SX0tFWV9TSVpFX1RP T19TTUFMTCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKChjdHg9Qk5f Q1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKLSAKLSAJaWYgKGRzYS0+cHJpdl9rZXkgPT0g TlVMTCkKLUBAIC0xMTcsNiArMTcxLDE1IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2Vu KERTQSAqZHNhKQotIAotIAlkc2EtPnByaXZfa2V5PXByaXZfa2V5OwotIAlkc2EtPnB1Yl9rZXk9 cHViX2tleTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSkKLSsJCXsK LSsJCWlmIChmaXBzX2RzYV9wYWlyd2lzZV9mYWlsKQotKwkJCUJOX2FkZF93b3JkKGRzYS0+cHVi X2tleSwgMSk7Ci0rCQlpZighZmlwc19jaGVja19kc2EoZHNhKSkKLSsJCSAgICBnb3RvIGVycjsK LSsJCX0KLSsjZW5kaWYKLSAJb2s9MTsKLSAKLSBlcnI6Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4w L2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RzYS9kc2Ff b3NzbC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcwkyMDA3 LTAzLTI4IDAyOjE1OjI2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2RzYS9kc2Ffb3NzbC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAt NjUsNiArNjUsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotICNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBzdGF0aWMgRFNB X1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRsZW4sIERT QSAqZHNhKTsKLSBzdGF0aWMgaW50IGRzYV9zaWduX3NldHVwKERTQSAqZHNhLCBCTl9DVFggKmN0 eF9pbiwgQklHTlVNICoqa2ludnAsIEJJR05VTSAqKnJwKTsKLUBAIC04Miw3ICs4NSw3IEBAIE5V TEwsIC8qIGRzYV9tb2RfZXhwLCAqLwotIE5VTEwsIC8qIGRzYV9ibl9tb2RfZXhwLCAqLwotIGRz YV9pbml0LAotIGRzYV9maW5pc2gsCi0tMCwKLStEU0FfRkxBR19GSVBTX01FVEhPRCwKLSBOVUxM LAotIE5VTEwsCi0gTlVMTAotQEAgLTEzNyw2ICsxNDAsMjAgQEAgc3RhdGljIERTQV9TSUcgKmRz YV9kb19zaWduKGNvbnN0IHVuc2lnbgotIAlpbnQgcmVhc29uPUVSUl9SX0JOX0xJQjsKLSAJRFNB X1NJRyAqcmV0PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX3NlbGZ0 ZXN0X2ZhaWxlZCgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0RPX1NJR04s RklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiBOVUxMOwotKwkgICAg fQotKwotKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NM X0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJRFNBZXJyKERTQV9GX0RTQV9E T19TSUdOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9 Ci0rI2VuZGlmCi0rCi0gCUJOX2luaXQoJm0pOwotIAlCTl9pbml0KCZ4cik7Ci0gCi1AQCAtMzEy LDYgKzMyOSwyMCBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQgCi0g CQlyZXR1cm4gLTE7Ci0gCQl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX3Nl bGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0RPX1ZF UklGWSxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIC0xOwotKwkg ICAgfQotKwotKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVO U1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJRFNBZXJyKERTQV9GX0RT QV9ET19WRVJJRlksIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlyZXR1cm4gLTE7Ci0r CQl9Ci0rI2VuZGlmCi0rCi0gCWkgPSBCTl9udW1fYml0cyhkc2EtPnEpOwotIAkvKiBmaXBzIDE4 Ni0zIGFsbG93cyBvbmx5IGRpZmZlcmVudCBzaXplcyBmb3IgcSAqLwotIAlpZiAoaSAhPSAxNjAg JiYgaSAhPSAyMjQgJiYgaSAhPSAyNTYpCi1AQCAtNDAzLDYgKzQzNCw5IEBAIHN0YXRpYyBpbnQg ZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZCAKLSAKLSBzdGF0aWMgaW50IGRzYV9pbml0KERT QSAqZHNhKQotIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2so KTsKLSsjZW5kaWYKLSAJZHNhLT5mbGFnc3w9RFNBX0ZMQUdfQ0FDSEVfTU9OVF9QOwotIAlyZXR1 cm4oMSk7Ci0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXJyL2Vycl9hbGwuYy5m aXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Vyci9lcnJfYWxsLmMKLS0tLSBvcGVuc3NsLTEuMC4w L2NyeXB0by9lcnIvZXJyX2FsbC5jLmZpcHMJMjAwOS0wOC0wOSAxNjo1ODowNS4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9lcnIvZXJyX2FsbC5jCTIwMTAtMDMtMzAg MTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtOTYsNiArOTYsOSBAQAotICNpbmNsdWRlIDxv cGVuc3NsL29jc3AuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaW5jbHVkZSA8b3Bl bnNzbC90cy5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0NNUwotICNpbmNsdWRlIDxvcGVuc3Ns L2Ntcy5oPgotICNlbmRpZgotQEAgLTE0OSw2ICsxNTIsOSBAQCB2b2lkIEVSUl9sb2FkX2NyeXB0 b19zdHJpbmdzKHZvaWQpCi0gI2VuZGlmCi0gCUVSUl9sb2FkX09DU1Bfc3RyaW5ncygpOwotIAlF UlJfbG9hZF9VSV9zdHJpbmdzKCk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlFUlJfbG9hZF9G SVBTX3N0cmluZ3MoKTsKLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCi0gCUVSUl9s b2FkX0NNU19zdHJpbmdzKCk7Ci0gI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9ldnAvZGlnZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZGlnZXN0LmMKLS0t LSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcwkyMDEwLTAzLTA1IDE0OjMz OjQzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9kaWdlc3Qu YwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTExNiw2ICsxMTYsNyBA QAotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUu aD4KLSAjZW5kaWYKLSsjaW5jbHVkZSAiZXZwX2xvY2wuaCIKLSAKLSB2b2lkIEVWUF9NRF9DVFhf aW5pdChFVlBfTURfQ1RYICpjdHgpCi0gCXsKLUBAIC0xMzgsOSArMTM5LDUwIEBAIGludCBFVlBf RGlnZXN0SW5pdChFVlBfTURfQ1RYICpjdHgsIGNvbnMKLSAJcmV0dXJuIEVWUF9EaWdlc3RJbml0 X2V4KGN0eCwgdHlwZSwgTlVMTCk7Ci0gCX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0r LyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVtcHQg dG8gdXNlIG5vbiBGSVBTCi0rICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9yZSB0 aGUgZXJyb3JzLgotKyAqLwotKwotK3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQX01EX0NUWCAqY3R4 KQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IGluaXQiKTsgcmV0dXJuIDA7fQotKwot K3N0YXRpYyBpbnQgYmFkX3VwZGF0ZShFVlBfTURfQ1RYICpjdHgsY29uc3Qgdm9pZCAqZGF0YSxz aXplX3QgY291bnQpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgdXBkYXRlIik7IHJl dHVybiAwO30KLSsKLStzdGF0aWMgaW50IGJhZF9maW5hbChFVlBfTURfQ1RYICpjdHgsdW5zaWdu ZWQgY2hhciAqbWQpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgRmluYWwiKTsgcmV0 dXJuIDA7fQotKwotK3N0YXRpYyBjb25zdCBFVlBfTUQgYmFkX21kID0KLSsJewotKwkwLAotKwkw LAotKwkwLAotKwkwLAotKwliYWRfaW5pdCwKLSsJYmFkX3VwZGF0ZSwKLSsJYmFkX2ZpbmFsLAot KwlOVUxMLAotKwlOVUxMLAotKwlOVUxMLAotKwkwLAotKwl7MCwwLDAsMH0sCi0rCX07Ci0rCi0r I2VuZGlmCi0rCi0gaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgY29uc3Qg RVZQX01EICp0eXBlLCBFTkdJTkUgKmltcGwpCi0gCXsKLSAJRVZQX01EX0NUWF9jbGVhcl9mbGFn cyhjdHgsRVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJ aWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0VWUF9E SUdFU1RJTklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQljdHgtPmRpZ2Vz dCA9ICZiYWRfbWQ7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5T U0xfTk9fRU5HSU5FCi0gCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBjYW4g YmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKLSAJICogc28gdGhpcyBjb250ZXh0IG1heSBh bHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5nCi1AQCAtMTk3LDYg KzIzOSwxOCBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCi0gI2Vu ZGlmCi0gCWlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKQotIAkJewotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJCWlmIChGSVBTX21vZGUoKSkKLSsJCQl7Ci0rCQkJaWYgKCEodHlwZS0+ZmxhZ3MgJiBF VlBfTURfRkxBR19GSVBTKSAKLSsJCQkgJiYgIShjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFH X05PTl9GSVBTX0FMTE9XKSkKLSsJCQkJewotKwkJCQlFVlBlcnIoRVZQX0ZfRVZQX0RJR0VTVElO SVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKLSsJCQkJY3R4LT5kaWdlc3QgPSAmYmFk X21kOwotKwkJCQlyZXR1cm4gMDsKLSsJCQkJfQotKwkJCX0KLSsjZW5kaWYKLSAJCWlmIChjdHgt PmRpZ2VzdCAmJiBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpCi0gCQkJT1BFTlNTTF9mcmVlKGN0eC0+ bWRfZGF0YSk7Ci0gCQljdHgtPmRpZ2VzdD10eXBlOwotQEAgLTIzMCw2ICsyODQsOSBAQCBza2lw X3RvX2luaXQ6Ci0gCi0gaW50IEVWUF9EaWdlc3RVcGRhdGUoRVZQX01EX0NUWCAqY3R4LCBjb25z dCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r CUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJcmV0dXJuIGN0eC0+dXBkYXRlKGN0 eCxkYXRhLGNvdW50KTsKLSAJfQotIAotQEAgLTI0Niw2ICszMDMsOSBAQCBpbnQgRVZQX0RpZ2Vz dEZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zCi0gaW50IEVWUF9EaWdlc3RGaW5hbF9leChFVlBf TURfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKnNpemUpCi0gCXsK LSAJaW50IHJldDsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2so KTsKLSsjZW5kaWYKLSAKLSAJT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUgPD0g RVZQX01BWF9NRF9TSVpFKTsKLSAJcmV0PWN0eC0+ZGlnZXN0LT5maW5hbChjdHgsbWQpOwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcyBvcGVuc3NsLTEuMC4w L2NyeXB0by9ldnAvZV9hZXMuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX2Flcy5j LmZpcHMJMjAwNC0wMS0yOCAyMDowNTozMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4wL2NyeXB0by9ldnAvZV9hZXMuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIw MAotQEAgLTY5LDMyICs2OSwyOSBAQCB0eXBlZGVmIHN0cnVjdAotIAotIElNUExFTUVOVF9CTE9D S19DSVBIRVIoYWVzXzEyOCwga3MsIEFFUywgRVZQX0FFU19LRVksCi0gCQkgICAgICAgTklEX2Fl c18xMjgsIDE2LCAxNiwgMTYsIDEyOCwKLS0JCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEws IAotLQkJICAgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgICAgRVZQX0NJUEhF Ul9nZXRfYXNuMV9pdiwKLS0JCSAgICAgICBOVUxMKQotKwkJICAgICAgIEVWUF9DSVBIX0ZMQUdf RklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJCSAgICAgICBhZXNfaW5pdF9rZXks Ci0rCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKLSBJTVBMRU1FTlRfQkxPQ0tfQ0lQ SEVSKGFlc18xOTIsIGtzLCBBRVMsIEVWUF9BRVNfS0VZLAotIAkJICAgICAgIE5JRF9hZXNfMTky LCAxNiwgMjQsIDE2LCAxMjgsCi0tCQkgICAgICAgMCwgYWVzX2luaXRfa2V5LCBOVUxMLCAKLS0J CSAgICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0 X2FzbjFfaXYsCi0tCQkgICAgICAgTlVMTCkKLSsJCSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFN8 RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgICAgYWVzX2luaXRfa2V5LAotKwkJ ICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCi0gSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihh ZXNfMjU2LCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKLSAJCSAgICAgICBOSURfYWVzXzI1NiwgMTYs IDMyLCAxNiwgMTI4LAotLQkJICAgICAgIDAsIGFlc19pbml0X2tleSwgTlVMTCwgCi0tCQkgICAg ICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKLS0JCSAgICAgICBFVlBfQ0lQSEVSX2dldF9hc24x X2l2LAotLQkJICAgICAgIE5VTEwpCi0tCi0tI2RlZmluZSBJTVBMRU1FTlRfQUVTX0NGQlIoa3Np emUsY2JpdHMpCUlNUExFTUVOVF9DRkJSKGFlcyxBRVMsRVZQX0FFU19LRVksa3Msa3NpemUsY2Jp dHMsMTYpCi0tCi0tSU1QTEVNRU5UX0FFU19DRkJSKDEyOCwxKQotLUlNUExFTUVOVF9BRVNfQ0ZC UigxOTIsMSkKLS1JTVBMRU1FTlRfQUVTX0NGQlIoMjU2LDEpCi0tCi0tSU1QTEVNRU5UX0FFU19D RkJSKDEyOCw4KQotLUlNUExFTUVOVF9BRVNfQ0ZCUigxOTIsOCkKLS1JTVBMRU1FTlRfQUVTX0NG QlIoMjU2LDgpCi0rCQkgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVG QVVMVF9BU04xLAotKwkJICAgICAgIGFlc19pbml0X2tleSwKLSsJCSAgICAgICBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMKQotKwotKyNkZWZpbmUgSU1QTEVNRU5UX0FFU19DRkJSKGtzaXplLGNiaXRz LGZsYWdzKQlJTVBMRU1FTlRfQ0ZCUihhZXMsQUVTLEVWUF9BRVNfS0VZLGtzLGtzaXplLGNiaXRz LDE2LGZsYWdzKQotKwotK0lNUExFTUVOVF9BRVNfQ0ZCUigxMjgsMSxFVlBfQ0lQSF9GTEFHX0ZJ UFMpCi0rSU1QTEVNRU5UX0FFU19DRkJSKDE5MiwxLEVWUF9DSVBIX0ZMQUdfRklQUykKLStJTVBM RU1FTlRfQUVTX0NGQlIoMjU2LDEsRVZQX0NJUEhfRkxBR19GSVBTKQotKwotK0lNUExFTUVOVF9B RVNfQ0ZCUigxMjgsOCxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rSU1QTEVNRU5UX0FFU19DRkJSKDE5 Miw4LEVWUF9DSVBIX0ZMQUdfRklQUykKLStJTVBMRU1FTlRfQUVTX0NGQlIoMjU2LDgsRVZQX0NJ UEhfRkxBR19GSVBTKQotIAotIHN0YXRpYyBpbnQgYWVzX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RY ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLSAJCSAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKml2LCBpbnQgZW5jKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfY2Ft ZWxsaWEuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMKLS0tLSBv cGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9jYW1lbGxpYS5jLmZpcHMJMjAwNi0wOC0zMSAyMjo1 NjoyMC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9jYW1l bGxpYS5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtOTMsNyArOTMs NyBAQCBJTVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGNhbWVsbGlhXzI1Niwga3MsCi0gCUVWUF9DSVBI RVJfZ2V0X2FzbjFfaXYsCi0gCU5VTEwpCi0gCi0tI2RlZmluZSBJTVBMRU1FTlRfQ0FNRUxMSUFf Q0ZCUihrc2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoY2FtZWxsaWEsQ2FtZWxsaWEsRVZQX0NB TUVMTElBX0tFWSxrcyxrc2l6ZSxjYml0cywxNikKLSsjZGVmaW5lIElNUExFTUVOVF9DQU1FTExJ QV9DRkJSKGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihjYW1lbGxpYSxDYW1lbGxpYSxFVlBf Q0FNRUxMSUFfS0VZLGtzLGtzaXplLGNiaXRzLDE2LDApCi0gCi0gSU1QTEVNRU5UX0NBTUVMTElB X0NGQlIoMTI4LDEpCi0gSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIoMTkyLDEpCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9ldnAvZV9kZXMzLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlw cwkyMDA4LTEyLTI5IDEzOjM1OjQ3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2V2cC9lX2RlczMuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAot QEAgLTIwNiw5ICsyMDYsOSBAQCBzdGF0aWMgaW50IGRlc19lZGUzX2NmYjhfY2lwaGVyKEVWUF9D SVBICi0gICAgIH0KLSAKLSBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tFWSwg TklEX2Rlc19lZGUsIDgsIDE2LCA4LCA2NCwKLS0JCQlFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2Vk ZV9pbml0X2tleSwgTlVMTCwgCi0tCQkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKLS0JCQlFVlBf Q0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19G SVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJCWRlc19lZGVfaW5pdF9rZXksCi0r CQkJTlVMTCwgTlVMTCwgTlVMTCwKLSAJCQlkZXMzX2N0cmwpCi0gCi0gI2RlZmluZSBkZXNfZWRl M19jZmI2NF9jaXBoZXIgZGVzX2VkZV9jZmI2NF9jaXBoZXIKLUBAIC0yMTcsMjEgKzIxNywyMSBA QCBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tFWSwgCi0gI2RlZmluZSBkZXNf ZWRlM19lY2JfY2lwaGVyIGRlc19lZGVfZWNiX2NpcGhlcgotIAotIEJMT0NLX0NJUEhFUl9kZWZz KGRlc19lZGUzLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUzLCA4LCAyNCwgOCwgNjQsCi0tCQkJ RVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LCBOVUxMLCAKLS0JCQlFVlBfQ0lQ SEVSX3NldF9hc24xX2l2LAotLQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQ SF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEs Ci0rCQkJZGVzX2VkZTNfaW5pdF9rZXksCi0rCQkJTlVMTCwgTlVMTCwgTlVMTCwKLSAJCQlkZXMz X2N0cmwpCi0gCi0gQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklE X2Rlc19lZGUzLDI0LDgsMSwKLS0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2lu aXRfa2V5LE5VTEwsCi0tCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgIEVW UF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFH X0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgIGRlc19lZGUzX2luaXRf a2V5LAotKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJICAgICBkZXMzX2N0cmwpCi0gCi0g QkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0 LDgsOCwKLS0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEws Ci0tCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgIEVWUF9DSVBIRVJfZ2V0 X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJ UEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAotKwkJICAg ICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJICAgICBkZXMzX2N0cmwpCi0gCi0gc3RhdGljIGludCBk ZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmtleSwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX251bGwuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2V2cC9lX251bGwuYy5maXBzCTIwMDgtMTAtMzEgMjA6NDg6MjQuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfbnVsbC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCi1AQCAtNjksNyArNjksNyBAQCBzdGF0aWMgY29uc3QgRVZQX0NJUEhF UiBuX2NpcGhlcj0KLSAJewotIAlOSURfdW5kZWYsCi0gCTEsMCwwLAotLQkwLAotKwlFVlBfQ0lQ SF9GTEFHX0ZJUFMsCi0gCW51bGxfaW5pdF9rZXksCi0gCW51bGxfY2lwaGVyLAotIAlOVUxMLAot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfcmM0LmMuZmlwcyBvcGVuc3NsLTEu MC4wL2NyeXB0by9ldnAvZV9yYzQuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX3Jj NC5jLmZpcHMJMjAwOC0xMC0zMSAyMDo0ODoyNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9ldnAvZV9yYzQuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCAr MDIwMAotQEAgLTY0LDYgKzY0LDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAjaW5j bHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmM0Lmg+Ci0rI2lu Y2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gLyogRklYTUU6IHN1cmVseSB0aGlzIGlzIGF2YWlsYWJs ZSBlbHNld2hlcmU/ICovCi0gI2RlZmluZSBFVlBfUkM0X0tFWV9TSVpFCQkxNgotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2V2cC9ldnBfZW5jLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZwX2VuYy5j LmZpcHMJMjAxMC0wMy0wMSAwMjo1Mjo0Ny4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4wL2NyeXB0by9ldnAvZXZwX2VuYy5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICsw MjAwCi1AQCAtNjgsOCArNjgsNTMgQEAKLSAKLSBjb25zdCBjaGFyIEVWUF92ZXJzaW9uW109IkVW UCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsv KiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0 byB1c2Ugbm9uIEZJUFMKLSsgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRo ZSBlcnJvcnMuCi0rICovCi0rCi0rc3RhdGljIGludCBiYWRfaW5pdChFVlBfQ0lQSEVSX0NUWCAq Y3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0rCQkgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqaXYsIGludCBlbmMpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgaW5pdCIpOyBy ZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRfZG9fY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpj dHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVu c2lnbmVkIGludCBpbmwpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgdXBkYXRlIik7 IHJldHVybiAwO30KLSsKLSsvKiBOQjogbm8gY2xlYW51cCBiZWNhdXNlIGl0IGlzIGFsbG93ZWQg YWZ0ZXIgZmFpbGVkIGluaXQgKi8KLSsKLStzdGF0aWMgaW50IGJhZF9zZXRfYXNuMShFVlBfQ0lQ SEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNp cGhlciBzZXRfYXNuMSIpOyByZXR1cm4gMDt9Ci0rc3RhdGljIGludCBiYWRfZ2V0X2FzbjEoRVZQ X0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCi0rCXsgRklQU19FUlJPUl9JR05PUkVE KCJDaXBoZXIgZ2V0X2FzbjEiKTsgcmV0dXJuIDA7fQotK3N0YXRpYyBpbnQgYmFkX2N0cmwoRVZQ X0NJUEhFUl9DVFggKmN0eCwgaW50IHR5cGUsIGludCBhcmcsIHZvaWQgKnB0cikKLSsJeyBGSVBT X0VSUk9SX0lHTk9SRUQoIkNpcGhlciBjdHJsIik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgY29u c3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0KLSsJewotKwkwLAotKwkwLAotKwkwLAotKwkwLAot KwkwLAotKwliYWRfaW5pdCwKLSsJYmFkX2RvX2NpcGhlciwKLSsJTlVMTCwKLSsJMCwKLSsJYmFk X3NldF9hc24xLAotKwliYWRfZ2V0X2FzbjEsCi0rCWJhZF9jdHJsLAotKwlOVUxMCi0rCX07Ci0r Ci0rI2VuZGlmCi0rCi0gdm9pZCBFVlBfQ0lQSEVSX0NUWF9pbml0KEVWUF9DSVBIRVJfQ1RYICpj dHgpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsK LSsjZW5kaWYKLSAJbWVtc2V0KGN0eCwwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOwotIAkvKiBj dHgtPmNpcGhlcj1OVUxMOyAqLwotIAl9Ci1AQCAtMTAxLDYgKzE0NiwxNCBAQCBpbnQgRVZQX0Np cGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0Ci0gCQkJZW5jID0gMTsKLSAJCWN0eC0+ZW5j cnlwdCA9IGVuYzsKLSAJCX0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCxG SVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhl cjsKLSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJ TkUKLSAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9u ICJGaW5hbCInZCBjb250ZXh0cwotIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2 ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKLUBAIC0yMTksNiArMjcyLDIyIEBA IHNraXBfdG9faW5pdDoKLSAJCX0KLSAJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJLyog QWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1ldGVycyBjaGFuZ2VzIGFyZSBwZXJt aXNzaWJsZS4KLSsJICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcgYXQgdGhp cyBwb2ludC4KLSsJICovCi0rCWlmIChrZXkgJiYgRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAo IShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rCQkJJiAhKGN0eC0+ ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJCQl7Ci0rCQkJRVZQZXJy KEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0rCQkJ Y3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0r I2VuZGlmCi0rCi0gCWlmKGtleSB8fCAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQUxX QVlTX0NBTExfSU5JVCkpIHsKLSAJCWlmKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsa2V5LGl2LGVu YykpIHJldHVybiAwOwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZw X2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cF9lcnIuYwotLS0tIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfZXJyLmMuZmlwcwkyMDEwLTAyLTA3IDE0OjQxOjIzLjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfZXJyLmMJMjAx MC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xNTUsNiArMTU1LDcgQEAgc3Rh dGljIEVSUl9TVFJJTkdfREFUQSBFVlBfc3RyX3JlYXNvbnNbXQotIHtFUlJfUkVBU09OKEVWUF9S X0RFQ09ERV9FUlJPUikgICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKLSB7RVJSX1JFQVNPTihF VlBfUl9ESUZGRVJFTlRfS0VZX1RZUEVTKSAgICwiZGlmZmVyZW50IGtleSB0eXBlcyJ9LAotIHtF UlJfUkVBU09OKEVWUF9SX0RJRkZFUkVOVF9QQVJBTUVURVJTKSAgLCJkaWZmZXJlbnQgcGFyYW1l dGVycyJ9LAotK3tFUlJfUkVBU09OKEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKSAgICAgLCJkaXNh YmxlZCBmb3IgZmlwcyJ9LAotIHtFUlJfUkVBU09OKEVWUF9SX0VOQ09ERV9FUlJPUikgICAgICAg ICAgLCJlbmNvZGUgZXJyb3IifSwKLSB7RVJSX1JFQVNPTihFVlBfUl9FVlBfUEJFX0NJUEhFUklO SVRfRVJST1IpLCJldnAgcGJlIGNpcGhlcmluaXQgZXJyb3IifSwKLSB7RVJSX1JFQVNPTihFVlBf Ul9FWFBFQ1RJTkdfQU5fUlNBX0tFWSkgICwiZXhwZWN0aW5nIGFuIHJzYSBrZXkifSwKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnAuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2V2cC9ldnAuaAotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnAuaC5maXBzCTIw MTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlw dG8vZXZwL2V2cC5oCTIwMTAtMDMtMzAgMTA6NDA6MTIuMDAwMDAwMDAwICswMjAwCi1AQCAtNzUs NiArNzUsMTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSAjZW5kaWYKLSAKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwot IC8qCi0gI2RlZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkxNgotICNkZWZpbmUgRVZQX1JDNF9LRVlf U0laRQkJMTYKLUBAIC0xOTcsNiArMjAxLDggQEAgdHlwZWRlZiBpbnQgZXZwX3ZlcmlmeV9tZXRo b2QoaW50IHR5cGUsYwotIAotICNkZWZpbmUgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFU VVJFCTB4MDAwNAotIAotKyNkZWZpbmUgRVZQX01EX0ZMQUdfRklQUwkweDA0MDAgLyogTm90ZSBp ZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLwotKwotIC8qIERpZ2VzdEFsZ29yaXRo bUlkZW50aWZpZXIgZmxhZ3MuLi4gKi8KLSAKLSAjZGVmaW5lIEVWUF9NRF9GTEFHX0RJR0FMR0lE X01BU0sJCTB4MDAxOAotQEAgLTI2OSwxMCArMjc1LDYgQEAgc3RydWN0IGVudl9tZF9jdHhfc3QK LSAJCQkJCQkqIGNsZWFuZWQgKi8KLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19SRVVTRQkJMHgw MDA0IC8qIERvbid0IGZyZWUgdXAgY3R4LT5tZF9kYXRhCi0gCQkJCQkJKiBpbiBFVlBfTURfQ1RY X2NsZWFudXAgKi8KLS0vKiBGSVBTIGFuZCBwYWQgb3B0aW9ucyBhcmUgaWdub3JlZCBpbiAxLjAu MCwgZGVmaW5pdGlvbnMgYXJlIGhlcmUKLS0gKiBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHkgcmV1 c2UgdGhlIHZhbHVlcyBmb3Igb3RoZXIgcHVycG9zZXMuCi0tICovCi0tCi0gI2RlZmluZSBFVlBf TURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHgwMDA4CS8qIEFsbG93IHVzZSBvZiBub24gRklQ UyBkaWdlc3QKLSAJCQkJCQkgKiBpbiBGSVBTIG1vZGUgKi8KLSAKLUBAIC0yODQsNiArMjg2LDEw IEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0Ci0gI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BL Q1MxCTB4MDAJLyogUEtDUyMxIHYxLjUgbW9kZSAqLwotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFH X1BBRF9YOTMxCTB4MTAJLyogWDkuMzEgbW9kZSAqLwotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFH X1BBRF9QU1MJCTB4MjAJLyogUFNTIG1vZGUgKi8KLSsjZGVmaW5lIE1fRVZQX01EX0NUWF9GTEFH X1BTU19TQUxUKGN0eCkgXAotKwkJKChjdHgtPmZsYWdzPj4xNikgJjB4RkZGRikgLyogc2VlZCBs ZW5ndGggKi8KLSsjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4JMHhGRkZGCS8qIHNh bHQgbGVuIHNhbWUgYXMgZGlnZXN0ICovCi0rI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01S RUMJMHhGRkZFCS8qIHNhbHQgbWF4IG9yIGF1dG8gcmVjb3ZlcmVkICovCi0gCi0gI2RlZmluZSBF VlBfTURfQ1RYX0ZMQUdfTk9fSU5JVAkJMHgwMTAwIC8qIERvbid0IGluaXRpYWxpemUgbWRfZGF0 YSAqLwotIAotQEAgLTMzMCwxMiArMzM2LDE2IEBAIHN0cnVjdCBldnBfY2lwaGVyX3N0Ci0gI2Rl ZmluZSAJRVZQX0NJUEhfTk9fUEFERElORwkJMHgxMDAKLSAvKiBjaXBoZXIgaGFuZGxlcyByYW5k b20ga2V5IGdlbmVyYXRpb24gKi8KLSAjZGVmaW5lIAlFVlBfQ0lQSF9SQU5EX0tFWQkJMHgyMDAK LS0vKiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25hbCBjb3B5aW5nIGxvZ2ljICovCi0tI2Rl ZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAwCi0rLyogTm90ZSBpZiBzdWl0YWJsZSBm b3IgdXNlIGluIEZJUFMgbW9kZSAqLwotKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfRklQUwkJMHg0 MDAKLSsvKiBBbGxvdyBub24gRklQUyBjaXBoZXIgaW4gRklQUyBtb2RlICovCi0rI2RlZmluZQkJ RVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgwMAotIC8qIEFsbG93IHVzZSBkZWZhdWx0 IEFTTjEgZ2V0L3NldCBpdiAqLwotICNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04x CTB4MTAwMAotIC8qIEJ1ZmZlciBsZW5ndGggaW4gYml0cyBub3QgYnl0ZXM6IENGQjEgbW9kZSBv bmx5ICovCi0gI2RlZmluZQkJRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUwkweDIwMDAKLSsvKiBj aXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25hbCBjb3B5aW5nIGxvZ2ljICovCi0rI2RlZmluZSAJ RVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAwMAotIAotIC8qIGN0cmwoKSB2YWx1ZXMgKi8KLSAK LUBAIC0xMjM5LDYgKzEyNDksNyBAQCB2b2lkIEVSUl9sb2FkX0VWUF9zdHJpbmdzKHZvaWQpOwot ICNkZWZpbmUgRVZQX1JfREVDT0RFX0VSUk9SCQkJCSAxMTQKLSAjZGVmaW5lIEVWUF9SX0RJRkZF UkVOVF9LRVlfVFlQRVMJCQkgMTAxCi0gI2RlZmluZSBFVlBfUl9ESUZGRVJFTlRfUEFSQU1FVEVS UwkJCSAxNTMKLSsjZGVmaW5lIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTCQkJCSAxNjAKLSAjZGVm aW5lIEVWUF9SX0VOQ09ERV9FUlJPUgkJCQkgMTE1Ci0gI2RlZmluZSBFVlBfUl9FVlBfUEJFX0NJ UEhFUklOSVRfRVJST1IJCQkgMTE5Ci0gI2RlZmluZSBFVlBfUl9FWFBFQ1RJTkdfQU5fUlNBX0tF WQkJCSAxMjcKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlw cyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZwX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMC9j cnlwdG8vZXZwL2V2cF9saWIuYy5maXBzCTIwMTAtMDEtMjYgMTU6MzM6NTEuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cF9saWIuYwkyMDEwLTAzLTMwIDEw OjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTY3LDYgKzY3LDggQEAgaW50IEVWUF9DSVBIRVJf cGFyYW1fdG9fYXNuMShFVlBfQ0lQSEVSXwotIAotIAlpZiAoYy0+Y2lwaGVyLT5zZXRfYXNuMV9w YXJhbWV0ZXJzICE9IE5VTEwpCi0gCQlyZXQ9Yy0+Y2lwaGVyLT5zZXRfYXNuMV9wYXJhbWV0ZXJz KGMsdHlwZSk7Ci0rCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0RF RkFVTFRfQVNOMSkKLSsJCXJldD1FVlBfQ0lQSEVSX3NldF9hc24xX2l2KGMsIHR5cGUpOwotIAll bHNlCi0gCQlyZXQ9LTE7Ci0gCXJldHVybihyZXQpOwotQEAgLTc4LDYgKzgwLDggQEAgaW50IEVW UF9DSVBIRVJfYXNuMV90b19wYXJhbShFVlBfQ0lQSEVSXwotIAotIAlpZiAoYy0+Y2lwaGVyLT5n ZXRfYXNuMV9wYXJhbWV0ZXJzICE9IE5VTEwpCi0gCQlyZXQ9Yy0+Y2lwaGVyLT5nZXRfYXNuMV9w YXJhbWV0ZXJzKGMsdHlwZSk7Ci0rCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQ SF9GTEFHX0RFRkFVTFRfQVNOMSkKLSsJCXJldD1FVlBfQ0lQSEVSX2dldF9hc24xX2l2KGMsIHR5 cGUpOwotIAllbHNlCi0gCQlyZXQ9LTE7Ci0gCXJldHVybihyZXQpOwotQEAgLTE4Niw2ICsxOTAs OSBAQCBpbnQgRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZShjb25zdCBFVlBfCi0gCi0gaW50IEVW UF9DaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1 bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKLSAJewotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlyZXR1cm4gY3R4LT5j aXBoZXItPmRvX2NpcGhlcihjdHgsb3V0LGluLGlubCk7Ci0gCX0KLSAKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8v ZXZwL2V2cF9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5m aXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC9jcnlwdG8vZXZwL2V2cF9sb2NsLmgJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAy MDAKLUBAIC0yNTQsMTQgKzI1NCwzMiBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfIyNjbmFtZSMj X2VjYih2b2lkCi0gCi0gI2RlZmluZSBFVlBfQ19EQVRBKGtzdHJ1Y3QsIGN0eCkJKChrc3RydWN0 ICopKGN0eCktPmNpcGhlcl9kYXRhKQotIAotLSNkZWZpbmUgSU1QTEVNRU5UX0NGQlIoY2lwaGVy LGNwcmVmaXgsa3N0cnVjdCxrc2NoZWQsa2V5c2l6ZSxjYml0cyxpdl9sZW4pIFwKLSsjZGVmaW5l IElNUExFTUVOVF9DRkJSKGNpcGhlcixjcHJlZml4LGtzdHJ1Y3Qsa3NjaGVkLGtleXNpemUsY2Jp dHMsaXZfbGVuLGZsKSBcCi0gCUJMT0NLX0NJUEhFUl9mdW5jX2NmYihjaXBoZXIjI18jI2tleXNp emUsY3ByZWZpeCxjYml0cyxrc3RydWN0LGtzY2hlZCkgXAotIAlCTE9DS19DSVBIRVJfZGVmX2Nm YihjaXBoZXIjI18jI2tleXNpemUsa3N0cnVjdCwgXAotIAkJCSAgICAgTklEXyMjY2lwaGVyIyNf IyNrZXlzaXplLCBrZXlzaXplLzgsIGl2X2xlbiwgY2JpdHMsIFwKLS0JCQkgICAgIDAsIGNpcGhl ciMjX2luaXRfa2V5LCBOVUxMLCBcCi0tCQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LCBc Ci0tCQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LCBcCi0tCQkJICAgICBOVUxMKQotKwkJ CSAgICAgKGZsKXxFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwgXAotKwkJCSAgICAgY2lwaGVy IyNfaW5pdF9rZXksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCi0rCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotKyNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQotKyNkZWZpbmUg UkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tleQotKyNkZWZpbmUgQ0FTVF9zZXRfa2V5CXBy aXZhdGVfQ0FTVF9zZXRfa2V5Ci0rI2RlZmluZSBSQzVfMzJfc2V0X2tleQlwcml2YXRlX1JDNV8z Ml9zZXRfa2V5Ci0rI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tleQotKyNkZWZp bmUgU0VFRF9zZXRfa2V5CXByaXZhdGVfU0VFRF9zZXRfa2V5Ci0rI2RlZmluZSBDYW1lbGxpYV9z ZXRfa2V5IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleQotKyNkZWZpbmUgaWRlYV9zZXRfZW5jcnlw dF9rZXkgcHJpdmF0ZV9pZGVhX3NldF9lbmNyeXB0X2tleQotKwotKyNkZWZpbmUgTUQ1X0luaXQJ cHJpdmF0ZV9NRDVfSW5pdAotKyNkZWZpbmUgTUQ0X0luaXQJcHJpdmF0ZV9NRDRfSW5pdAotKyNk ZWZpbmUgTUQyX0luaXQJcHJpdmF0ZV9NRDJfSW5pdAotKyNkZWZpbmUgTURDMl9Jbml0CXByaXZh dGVfTURDMl9Jbml0Ci0rI2RlZmluZSBTSEFfSW5pdAlwcml2YXRlX1NIQV9Jbml0Ci0rI2RlZmlu ZSBSSVBFTUQxNjBfSW5pdAlwcml2YXRlX1JJUEVNRDE2MF9Jbml0Ci0rI2RlZmluZSBXSElSTFBP T0xfSW5pdAlwcml2YXRlX1dISVJMUE9PTF9Jbml0Ci0rCi0rI2VuZGlmCi0gCi0gc3RydWN0IGV2 cF9wa2V5X2N0eF9zdAotIAl7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9k c3MuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX2Rzcy5jCi0tLS0gb3BlbnNzbC0x LjAuMC9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcwkyMDA2LTA0LTE5IDE5OjA1OjU3LjAwMDAwMDAw MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX2Rzcy5jCTIwMTAtMDMtMzAg MTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtODEsNyArODEsNyBAQCBzdGF0aWMgY29uc3Qg RVZQX01EIGRzYV9tZD0KLSAJTklEX2RzYVdpdGhTSEEsCi0gCU5JRF9kc2FXaXRoU0hBLAotIAlT SEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QsCi0rCUVWUF9NRF9G TEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJ ZmluYWwsCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9kc3MxLmMuZmlwcyBv cGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9kc3MxLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0 by9ldnAvbV9kc3MxLmMuZmlwcwkyMDA2LTA0LTE5IDE5OjA1OjU3LjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX2RzczEuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2 LjAwMDAwMDAwMCArMDIwMAotQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBk c3MxX21kPQotIAlOSURfZHNhLAotIAlOSURfZHNhV2l0aFNIQTEsCi0gCVNIQV9ESUdFU1RfTEVO R1RILAotLQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9ESUdF U1R8RVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdCwKLSAJdXBkYXRlLAotIAlmaW5hbCwKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kYzIuYy5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2V2cC9tX21kYzIuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kYzIu Yy5maXBzCTIwMTAtMDItMDIgMTQ6MzY6MDUuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZXZwL21fbWRjMi5jCTIwMTAtMDMtMzAgMTA6NTc6MDIuMDAwMDAwMDAwICsw MjAwCi1AQCAtNjgsNiArNjgsNyBAQAotICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLSAjaW5jbHVk ZSA8b3BlbnNzbC9yc2EuaD4KLSAjZW5kaWYKLSsjaW5jbHVkZSAiZXZwX2xvY2wuaCIKLSAKLSBz dGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQotIAl7IHJldHVybiBNREMyX0luaXQoY3R4 LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fbWQyLmMu ZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9tZDIuYwotLS0tIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2V2cC9tX21kMi5jLmZpcHMJMjAwNS0wNy0xNiAxNDozNzozMi4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9tZDIuYwkyMDEwLTAzLTMwIDEwOjMz OjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xf Tk9fUlNBCi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2 cF9sb2NsLmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1 cm4gTUQyX0luaXQoY3R4LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlw dG8vZXZwL21fbWQ0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9tZDQuYwotLS0t IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kNC5jLmZpcHMJMjAwNS0wNy0xNiAxNDozNzoz Mi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9tZDQuYwky MDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAj aWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlm Ci0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFgg KmN0eCkKLSAJeyByZXR1cm4gTUQ0X0luaXQoY3R4LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fbWQ1LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9l dnAvbV9tZDUuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kNS5jLmZpcHMJMjAw NS0wNy0xNiAxNDozNzozMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9ldnAvbV9tZDUuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTY4 LDYgKzY4LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gI2luY2x1ZGUgPG9wZW5zc2wv cnNhLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gc3RhdGljIGludCBp bml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gTUQ1X0luaXQoY3R4LT5tZF9kYXRhKTsg fQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fcmlwZW1kLmMuZmlwcyBvcGVu c3NsLTEuMC4wL2NyeXB0by9ldnAvbV9yaXBlbWQuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2V2cC9tX3JpcGVtZC5jLmZpcHMJMjAwNS0wNy0xNiAxNDozNzozMi4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9yaXBlbWQuYwkyMDEwLTAzLTMwIDEwOjMz OjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xf Tk9fUlNBCi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2 cF9sb2NsLmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1 cm4gUklQRU1EMTYwX0luaXQoY3R4LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fc2hh MS5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAwOC0wMy0x MiAyMjoxNDoyNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAv bV9zaGExLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC04Miw3ICs4 Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMV9tZD0KLSAJTklEX3NoYTEsCi0gCU5JRF9z aGExV2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQV9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxB R19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlF VlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJT RU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdCwKLSAJdXBkYXRlLAotIAlmaW5hbCwK LUBAIC0xMTksNyArMTIwLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyMjRfbWQ9Ci0gCU5J RF9zaGEyMjQsCi0gCU5JRF9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBMjI0X0RJR0VT VF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxB R19ESUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxF VlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0 MjI0LAotIAl1cGRhdGUyNTYsCi0gCWZpbmFsMjU2LAotQEAgLTEzOCw3ICsxNDAsOCBAQCBzdGF0 aWMgY29uc3QgRVZQX01EIHNoYTI1Nl9tZD0KLSAJTklEX3NoYTI1NiwKLSAJTklEX3NoYTI1Nldp dGhSU0FFbmNyeXB0aW9uLAotIAlTSEEyNTZfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdf UEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQ X01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VO VHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQyNTYsCi0gCXVwZGF0ZTI1NiwKLSAJZmlu YWwyNTYsCi1AQCAtMTY5LDcgKzE3Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMzg0X21k PQotIAlOSURfc2hhMzg0LAotIAlOSURfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTM4 NF9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQ X01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdO QVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywK LSAJaW5pdDM4NCwKLSAJdXBkYXRlNTEyLAotIAlmaW5hbDUxMiwKLUBAIC0xODgsNyArMTkyLDgg QEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGE1MTJfbWQ9Ci0gCU5JRF9zaGE1MTIsCi0gCU5JRF9z aGE1MTJXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBNTEyX0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9N RF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQs Ci0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJ RF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0NTEyLAotIAl1cGRhdGU1MTIs Ci0gCWZpbmFsNTEyLAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fd3AuYy5m aXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX3dwLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2Ny eXB0by9ldnAvbV93cC5jLmZpcHMJMjAwNS0xMS0zMCAyMTo1NzoyMy4wMDAwMDAwMDAgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV93cC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCi1AQCAtOSw2ICs5LDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmpl Y3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3do cmxwb29sLmg+Ci0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVW UF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gV0hJUkxQT09MX0luaXQoY3R4LT5tZF9kYXRhKTsg fQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL25hbWVzLmMuZmlwcyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9ldnAvbmFtZXMuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9u YW1lcy5jLmZpcHMJMjAxMC0wMy0wNiAyMTo0Nzo0NS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wL2NyeXB0by9ldnAvbmFtZXMuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAw MCArMDIwMAotQEAgLTY2LDYgKzY2LDEwIEBAIGludCBFVlBfYWRkX2NpcGhlcihjb25zdCBFVlBf Q0lQSEVSICpjKQotIAl7Ci0gCWludCByOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJT1BF TlNTTF9pbml0X2xpYnJhcnkoKTsKLSsjZW5kaWYKLSsKLSAJcj1PQkpfTkFNRV9hZGQoT0JKX25p ZDJzbihjLT5uaWQpLE9CSl9OQU1FX1RZUEVfQ0lQSEVSX01FVEgsKGNvbnN0IGNoYXIgKiljKTsK LSAJaWYgKHIgPT0gMCkgcmV0dXJuKDApOwotIAljaGVja19kZWZlcihjLT5uaWQpOwotQEAgLTc5 LDYgKzgzLDEwIEBAIGludCBFVlBfYWRkX2RpZ2VzdChjb25zdCBFVlBfTUQgKm1kKQotIAlpbnQg cjsKLSAJY29uc3QgY2hhciAqbmFtZTsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCU9QRU5T U0xfaW5pdF9saWJyYXJ5KCk7Ci0rI2VuZGlmCi0rCi0gCW5hbWU9T0JKX25pZDJzbihtZC0+dHlw ZSk7Ci0gCXI9T0JKX05BTUVfYWRkKG5hbWUsT0JKX05BTUVfVFlQRV9NRF9NRVRILChjb25zdCBj aGFyICopbWQpOwotIAlpZiAociA9PSAwKSByZXR1cm4oMCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEu MC4wL2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvcF9z aWduLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcwkyMDA2LTA1 LTI0IDE1OjI5OjMwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2 cC9wX3NpZ24uYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTYxLDYg KzYxLDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9v YmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L3JzYS5oPgotIAotICNpZmRlZiB1bmRlZgotIHZvaWQgRVZQX1NpZ25Jbml0KEVWUF9NRF9DVFgg KmN0eCwgRVZQX01EICp0eXBlKQotQEAgLTEwMSw2ICsxMDIsMjIgQEAgaW50IEVWUF9TaWduRmlu YWwoRVZQX01EX0NUWCAqY3R4LCB1bnNpZwotIAkJCWdvdG8gZXJyOwotIAkJaWYgKEVWUF9QS0VZ X0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKLSAJCQlnb3Rv IGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQotKwkJ CWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5H KSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9G TEFHX1BBRF9QU1MpCi0rCQkJewotKwkJCWludCBzYWx0bGVuOwotKwkJCWlmIChFVlBfUEtFWV9D VFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCi0r CQkJCWdvdG8gZXJyOwotKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChj dHgpOwotKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCi0rCQkJ CXNhbHRsZW4gPSAtMTsKLSsJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19Q U1NfTVJFQykKLSsJCQkJc2FsdGxlbiA9IC0yOwotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3Jz YV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJ fQotIAkJaWYgKEVWUF9QS0VZX3NpZ24ocGtjdHgsIHNpZ3JldCwgJnNsdG1wLCBtLCBtX2xlbikg PD0gMCkKLSAJCQlnb3RvIGVycjsKLSAJCSpzaWdsZW4gPSBzbHRtcDsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8v ZXZwL3BfdmVyaWZ5LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvcF92ZXJpZnkuYy5m aXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAy MDAKLUBAIC02MSw2ICs2MSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1 ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAKLSBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFgg KmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnYnVmLAotIAkgICAgIHVuc2lnbmVkIGludCBz aWdsZW4sIEVWUF9QS0VZICpwa2V5KQotQEAgLTg2LDYgKzg3LDIyIEBAIGludCBFVlBfVmVyaWZ5 RmluYWwoRVZQX01EX0NUWCAqY3R4LCBjb24KLSAJCQlnb3RvIGVycjsKLSAJCWlmIChFVlBfUEtF WV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDApCi0gCQkJZ290 byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkKLSsJ CQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFERElO RykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhf RkxBR19QQURfUFNTKQotKwkJCXsKLSsJCQlpbnQgc2FsdGxlbjsKLSsJCQlpZiAoRVZQX1BLRVlf Q1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PSAwKQot KwkJCQlnb3RvIGVycjsKLSsJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQo Y3R4KTsKLSsJCQlpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOKQotKwkJ CQlzYWx0bGVuID0gLTE7Ci0rCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdf UFNTX01SRUMpCi0rCQkJCXNhbHRsZW4gPSAtMjsKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9y c2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJ CX0KLSAJCWkgPSBFVlBfUEtFWV92ZXJpZnkocGtjdHgsIHNpZ2J1Ziwgc2lnbGVuLCBtLCBtX2xl bik7Ci0gCQllcnI6Ci0gCQlFVlBfUEtFWV9DVFhfZnJlZShwa2N0eCk7Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYy5maXBzIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2 cy5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDkzOSBA QAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsg KgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3Ry aWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsg KiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0r ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK LSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBOSVNUIEFFUyBBbGdvcml0aG0gVmFsaWRhdGlvbiBT dWl0ZQotKyAgVGVzdCBQcm9ncmFtCi0rCi0rICBEb25hdGVkIHRvIE9wZW5TU0wgYnk6Ci0rICBW LU9ORSBDb3Jwb3JhdGlvbgotKyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAzMDAKLSsgIEdl cm1hbnRvd24sIE1EIDIwODc0Ci0rICBVLlMuQS4KLSsgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNs dWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGVycm5vLmg+ Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgImVfb3Mu aCIKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgQUVTIHN1cHBvcnRcbiIpOwotKyAg ICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotKyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUgMTYK LSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotK2ludCBBRVNUZXN0KEVWUF9DSVBIRVJfQ1RYICpj dHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSwg Ci0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKLSsJICAgIGludCBkaXIsICAvKiAwID0gZGVj cnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwgdW5z aWduZWQgY2hhciAqY2lwaGVydGV4dCwgaW50IGxlbikKLSsgICAgewotKyAgICBjb25zdCBFVlBf Q0lQSEVSICpjaXBoZXIgPSBOVUxMOwotKwotKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNC QyIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJ CWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoK LSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1 NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NiYygpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0r CX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkVDQiIpID09IDApCi0rCXsKLSsJ c3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNf MTI4X2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9h ZXNfMTkyX2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVW UF9hZXNfMjU2X2VjYigpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZSBpZiAoc3Ry Y2FzZWNtcChhbW9kZSwgIkNGQjEyOCIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0r CQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjEyOCgpOwotKwkJ YnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjEyOCgp OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2Nm YjEyOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0rCX0KLSsgICAgZWxzZSBpZiAoc3RybmNhc2Vj bXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewot KwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9vZmIoKTsKLSsJCWJyZWFrOwot KwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9vZmIoKTsKLSsJCWJyZWFr OwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9vZmIoKTsKLSsJCWJy ZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkK LSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0g RVZQX2Flc18xMjhfY2ZiMSgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhl ciA9IEVWUF9hZXNfMTkyX2NmYjEoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQlj aXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxKCk7Ci0rCQlicmVhazsKLSsJCX0KLSsJfQotKyAgICBl bHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCi0rCXsKLSsJc3dpdGNoIChha2V5c3op Ci0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjgoKTsKLSsJ CWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmI4KCk7 Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2Zi OCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZQotKwl7Ci0rCXByaW50ZigiVW5r bm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gMDsKLSsJfQotKyAgICBpZiAoIWNp cGhlcikKLSsJewotKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4iLCBha2V5c3opOwot KwlyZXR1cm4gMDsgCi0rCX0KLSsgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVy LCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCi0rCXJldHVybiAwOwotKyAgICBpZighc3Ry Y2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgs IEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOwotKyAgICBpZiAoZGlyKQotKwkJRVZQX0NpcGhl cihjdHgsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKLSsJZWxzZQotKwkJRVZQX0NpcGhl cihjdHgsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsgICAgcmV0dXJuIDE7Ci0rICAg IH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhFUlRFWFQifTsKLStjaGFy ICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJDRkI4IiwiQ0ZCMTI4In07 Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBDRkI4LCBDRkIxMjh9OwotK2VudW0g WENyeXB0IHtYREVDUllQVCwgWEVOQ1JZUFR9OwotKwotKy8qPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0qLwotKy8qICBNb250ZSBDYXJsbyBUZXN0cyAgICAgICAgICAqLwotKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKy8qI2RlZmluZSBnYihhLGIpICgoKGEpWyhi KS84XSA+PiAoKGIpJTgpKSYxKSovCi0rLyojZGVmaW5lIHNiKGEsYix2KSAoKGEpWyhiKS84XT0o KGEpWyhiKS84XSZ+KDEgPDwgKChiKSU4KSkpfCghISh2KSA8PCAoKGIpJTgpKSkqLwotKwotKyNk ZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKDctKGIpJTgpKSYxKQotKyNkZWZpbmUgc2Io YSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoNy0oYiklOCkpKXwoISEodikg PDwgKDctKGIpJTgpKSkKLSsKLStpbnQgZG9fbWN0KGNoYXIgKmFtb2RlLCAKLSsJICAgaW50IGFr ZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSx1bnNpZ25lZCBjaGFyICppVmVjLAotKwkgICBpbnQg ZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAotKwkgICBGSUxFICpyZnApCi0rICAg IHsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5WzEwMV1bMzJdOwot KyAgICB1bnNpZ25lZCBjaGFyIGl2WzEwMV1bQUVTX0JMT0NLX1NJWkVdOwotKyAgICB1bnNpZ25l ZCBjaGFyIHB0ZXh0WzEwMDFdWzMyXTsKLSsgICAgdW5zaWduZWQgY2hhciBjdGV4dFsxMDAxXVsz Ml07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs2NCs0XTsKLSsgICAgaW50IGksIGos IG4sIG4xLCBuMjsKLSsgICAgaW50IGltb2RlID0gMCwgbmtleXN6ID0gYWtleXN6Lzg7Ci0rICAg IEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsK LSsgICAgaWYgKGxlbiA+IDMyKQotKwl7Ci0rCXByaW50ZigiXG4+Pj4+IExlbmd0aCBleGNlZWRz IDMyIGZvciAlcyAlZCA8PDw8XG5cbiIsIAotKwkgICAgICAgYW1vZGUsIGFrZXlzeik7Ci0rCXJl dHVybiAtMTsKLSsJfQotKyAgICBmb3IgKGltb2RlID0gMDsgaW1vZGUgPCA2OyArK2ltb2RlKQot KwlpZiAoc3RyY21wKGFtb2RlLCB0X21vZGVbaW1vZGVdKSA9PSAwKQotKwkgICAgYnJlYWs7Ci0r ICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlwcmludGYoIlVucmVjb2duaXplZCBtb2RlOiAl c1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsKLSsgICAgbWVtY3B5KGtleVswXSwg YUtleSwgbmtleXN6KTsKLSsgICAgaWYgKGlWZWMpCi0rCW1lbWNweShpdlswXSwgaVZlYywgQUVT X0JMT0NLX1NJWkUpOwotKyAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwltZW1jcHkocHRleHRb MF0sIHRleHQsIGxlbik7Ci0rICAgIGVsc2UKLSsJbWVtY3B5KGN0ZXh0WzBdLCB0ZXh0LCBsZW4p OwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwOyArK2kpCi0rCXsKLSsJLyogcHJpbnRmKCJJdGVy YXRpb24gJWRcbiIsIGkpOyAqLwotKwlpZiAoaSA+IDApCi0rCSAgICB7Ci0rCSAgICBmcHJpbnRm KHJmcCwiQ09VTlQgPSAlZFxuIixpKTsKLSsJICAgIE91dHB1dFZhbHVlKCJLRVkiLGtleVtpXSxu a2V5c3oscmZwLDApOwotKwkgICAgaWYgKGltb2RlICE9IEVDQikgIC8qIEVDQiAqLwotKwkJT3V0 cHV0VmFsdWUoIklWIixpdltpXSxBRVNfQkxPQ0tfU0laRSxyZnAsMCk7Ci0rCSAgICAvKiBPdXRw dXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLwotKwkgICAgT3V0cHV0VmFsdWUodF90YWdbZGly XjFdLGRpciA/IHB0ZXh0WzBdIDogY3RleHRbMF0sbGVuLHJmcCwKLSsJCQlpbW9kZSA9PSBDRkIx KTsKLSsJICAgIH0KLSsJZm9yIChqID0gMDsgaiA8IDEwMDA7ICsraikKLSsJICAgIHsKLSsJICAg IHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJCWlmIChqID09IDApCi0r CQkgICAgeyAvKiBzZXQgdXAgZW5jcnlwdGlvbiAqLwotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0 eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBOVUxMLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVj cnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0r CQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRb al0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqXSwg bGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChkaXIgPT0gWEVO Q1JZUFQpCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBs ZW4pOwotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCQl9Ci0rCQkg ICAgZWxzZQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwg bGVuKTsKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0sIGxlbik7Ci0rCQkJfQotKwkJ ICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjogIAot KwkgICAgY2FzZSBDRkIxMjg6Ci0rCQlpZiAoaiA9PSAwKQotKwkJICAgIHsKLSsJCSAgICByZXQg PSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZbaV0sIAotKwkJCQkgIGRp ciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHB0ZXh0W2pdLCBjdGV4 dFtqXSwgbGVuKTsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCW1lbWNweShwdGV4 dFtqKzFdLCBpdltpXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0s IGl2W2ldLCBsZW4pOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRp ciA9PSBYRU5DUllQVCkKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRl eHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2otMV0sIGxlbik7Ci0r CQkJfQotKwkJICAgIGVsc2UKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwg Y3RleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2otMV0sIGxlbik7 Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDRkI4OgotKwkJaWYg KGogPT0gMCkKLSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtl eXN6LCBrZXlbaV0sIGl2W2ldLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVu Y3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJ ZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCUVWUF9DaXBo ZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQlFVlBf Q2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQlpZiAo ZGlyID09IFhFTkNSWVBUKQotKwkJICAgIHsKLSsJCSAgICBpZiAoaiA8IDE2KQotKwkJCW1lbWNw eShwdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShw dGV4dFtqKzFdLCBjdGV4dFtqLTE2XSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAg ewotKwkJICAgIGlmIChqIDwgMTYpCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sICZpdltpXVtqXSwg bGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2otMTZdLCBs ZW4pOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDRkIxOgotKwkJaWYoaiA9 PSAwKQotKwkJICAgIHsKLSsjaWYgMAotKwkJICAgIC8qIGNvbXBlbnNhdGUgZm9yIHdyb25nIGVu ZGlhbm5lc3Mgb2YgaW5wdXQgZmlsZSAqLwotKwkJICAgIGlmKGkgPT0gMCkKLSsJCQlwdGV4dFsw XVswXTw8PTc7Ci0rI2VuZGlmCi0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LGFtb2RlLGFrZXlz eixrZXlbaV0saXZbaV0sZGlyLAotKwkJCQlwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkg ICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJ CUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UK LSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsKLSsJCSAg ICB9Ci0rCQlpZihkaXIgPT0gWEVOQ1JZUFQpCi0rCQkgICAgewotKwkJICAgIGlmKGogPCAxMjgp Ci0rCQkJc2IocHRleHRbaisxXSwwLGdiKGl2W2ldLGopKTsKLSsJCSAgICBlbHNlCi0rCQkJc2Io cHRleHRbaisxXSwwLGdiKGN0ZXh0W2otMTI4XSwwKSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJ ICAgIHsKLSsJCSAgICBpZihqIDwgMTI4KQotKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihpdltpXSxq KSk7Ci0rCQkgICAgZWxzZQotKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihwdGV4dFtqLTEyOF0sMCkp OwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQotKwkgICAgfQotKwktLWo7IC8qIHJlc2V0IHRv IGxhc3Qgb2YgcmFuZ2UgKi8KLSsJLyogT3V0cHV0IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8K LSsJT3V0cHV0VmFsdWUodF90YWdbZGlyXSxkaXIgPyBjdGV4dFtqXSA6IHB0ZXh0W2pdLGxlbixy ZnAsCi0rCQkgICAgaW1vZGUgPT0gQ0ZCMSk7Ci0rCWZwcmludGYocmZwLCAiXG4iKTsgIC8qIGFk ZCBzZXBhcmF0b3IgKi8KLSsKLSsJLyogQ29tcHV0ZSBuZXh0IEtFWSAqLwotKwlpZiAoZGlyID09 IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgaWYgKGltb2RlID09IENGQjgpCi0rCQl7IC8qIGN0 ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pdICovCi0rCQlmb3IgKG4xID0g MCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lwaGVy dGV4dFtuMV0gPSBjdGV4dFtqLW4yXVswXTsKLSsJCX0KLSsJICAgIGVsc2UgaWYoaW1vZGUgPT0g Q0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24x LC0tbjIpCi0rCQkgICAgc2IoY2lwaGVydGV4dCxuMSxnYihjdGV4dFtqLW4yXSwwKSk7Ci0rCQl9 Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlzeikKLSsJCSAgICB7Ci0rCQljYXNlIDEyODoK LSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsK LSsJCWNhc2UgMTkyOgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqLTFdKzgsIDgp OwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIGN0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJl YWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSwg MTYpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBjdGV4dFtqXSwgMTYpOwotKwkJICAg IGJyZWFrOwotKwkJICAgIH0KLSsJICAgIH0KLSsJZWxzZQotKwkgICAgewotKwkgICAgaWYgKGlt b2RlID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8 IENUW2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsr bjEsIC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtuMV0gPSBwdGV4dFtqLW4yXVswXTsKLSsJCX0K LSsJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0wLG4yPWFrZXlz ei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIpCi0rCQkgICAgc2IoY2lwaGVydGV4dCxuMSxn YihwdGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlzeikK LSsJCSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRb al0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMTkyOgotKwkJICAgIG1lbWNweShjaXBo ZXJ0ZXh0LCBwdGV4dFtqLTFdKzgsIDgpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIHB0 ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAgICBtZW1jcHko Y2lwaGVydGV4dCwgcHRleHRbai0xXSwgMTYpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2 LCBwdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJICAgIH0KLSsJLyog Q29tcHV0ZSBuZXh0IGtleTogS2V5W2krMV0gPSBLZXlbaV0geG9yIGN0ICovCi0rCWZvciAobiA9 IDA7IG4gPCBua2V5c3o7ICsrbikKLSsJICAgIGtleVtpKzFdW25dID0ga2V5W2ldW25dIF4gY2lw aGVydGV4dFtuXTsKLSsJCi0rCS8qIENvbXB1dGUgbmV4dCBJViBhbmQgdGV4dCAqLwotKwlpZiAo ZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgc3dpdGNoIChpbW9kZSkKLSsJCXsKLSsJ ICAgIGNhc2UgRUNCOgotKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJ WkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENCQzoKLSsJICAgIGNhc2UgT0ZCOgotKwkgICAg Y2FzZSBDRkIxMjg6Ci0rCQltZW1jcHkoaXZbaSsxXSwgY3RleHRbal0sIEFFU19CTE9DS19TSVpF KTsKLSsJCW1lbWNweShwdGV4dFswXSwgY3RleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJ YnJlYWs7Ci0rCSAgICBjYXNlIENGQjg6Ci0rCQkvKiBJVltpKzFdID0gY3QgKi8KLSsJCWZvciAo bjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQotKwkJICAgIGl2W2krMV1bbjFd ID0gY3RleHRbai1uMl1bMF07Ci0rCQlwdGV4dFswXVswXSA9IGN0ZXh0W2otMTZdWzBdOwotKwkJ YnJlYWs7Ci0rCSAgICBjYXNlIENGQjE6Ci0rCQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7 ICsrbjEsLS1uMikKLSsJCSAgICBzYihpdltpKzFdLG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKLSsJ CXB0ZXh0WzBdWzBdPWN0ZXh0W2otMTI4XVswXSYweDgwOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAg ICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBj YXNlIEVDQjoKLSsJCW1lbWNweShjdGV4dFswXSwgcHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsK LSsJCWJyZWFrOwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjoKLSsJICAgIGNhc2Ug Q0ZCMTI4OgotKwkJbWVtY3B5KGl2W2krMV0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7Ci0r CQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFr OwotKwkgICAgY2FzZSBDRkI4OgotKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsr bjEsIC0tbjIpCi0rCQkgICAgaXZbaSsxXVtuMV0gPSBwdGV4dFtqLW4yXVswXTsKLSsJCWN0ZXh0 WzBdWzBdID0gcHRleHRbai0xNl1bMF07Ci0rCQlicmVhazsKLSsJICAgIGNhc2UgQ0ZCMToKLSsJ CWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQotKwkJICAgIHNiKGl2W2kr MV0sbjEsZ2IocHRleHRbai1uMl0sMCkpOwotKwkJY3RleHRbMF1bMF09cHRleHRbai0xMjhdWzBd JjB4ODA7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIH0KLSsJfQotKyAgICAKLSsgICAgcmV0dXJu IHJldDsKLSsgICAgfQotKwotKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ki8KLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgICMgQ29u ZmlnIGluZm8gZm9yIHYtb25lCi0rICAjIEFFU1ZTIE1NVCB0ZXN0IGRhdGEgZm9yIEVDQgotKyAg IyBTdGF0ZSA6IEVuY3J5cHQgYW5kIERlY3J5cHQKLSsgICMgS2V5IExlbmd0aCA6IDI1NgotKyAg IyBGcmkgQXVnIDMwIDA0OjA3OjIyIFBNCi0rICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KLSsKLStpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAqcnNwZmlsZSkKLSsgICAg ewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKLSsgICAgRklMRSAqYWZwID0gTlVMTCwg KnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1ZlsyMDQ4XTsKLSsgICAgY2hhciB0YnVmWzIwNDhd OwotKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOwotKyAgICBjaGFyIGFsZ29bOF0gPSAiIjsK LSsgICAgY2hhciBhbW9kZVs4XSA9ICIiOwotKyAgICBjaGFyIGF0ZXN0WzhdID0gIiI7Ci0rICAg IGludCBha2V5c3ogPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsK LSsgICAgaW50IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKLSsgICAgdW5zaWduZWQgY2hh ciBwbGFpbnRleHRbMjA0OF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsK LSsgICAgY2hhciAqcnA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhF Ul9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkKLSsJ ewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIHN0 cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9 PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJ ICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIGlm ICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZuLGFmbik7Ci0rCXJwPXN0cnN0cihyZm4sInJl cS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJaWYgKCFycCkKLSsJICAgIHJwPXN0 cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0rCWFzc2VydChycCk7Ci0rCW1lbWNweShycCwi cnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOwotKwltZW1jcHkocnAsICIucnNw IiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0KLSsgICAgaWYgKChyZnAgPSBmb3Blbihyc3Bm aWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMs ICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJZmNsb3NlKGFmcCk7 Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICB3aGlsZSAoIWVyciAmJiAo ZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQotKwl7Ci0rCXRpZHlfbGlu ZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxlbihpYnVmKTsKLSsJLyogICAgICBwcmludGYo InN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsgKi8KLSsJc3dpdGNoIChzdGVwKQotKwkgICAg ewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxlICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAn XG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUgKi8KLSsJCWlmICgoKmFsZ28gPT0gJ1wwJykg fHwKLSsJCSAgICAoKmFtb2RlID09ICdcMCcpIHx8Ci0rCQkgICAgKGFrZXlzeiA9PSAwKSkKLSsJ CSAgICB7Ci0rCQkgICAgcHJpbnRmKCJNaXNzaW5nIEFsZ29yaXRobSwgTW9kZSBvciBLZXlTaXpl ICglcy8lcy8lZClcbiIsCi0rCQkJICAgYWxnbyxhbW9kZSxha2V5c3opOwotKwkJICAgIGVyciA9 IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnAp OwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAgfQotKwkJfQotKwkgICAgZWxzZSBpZiAoaWJ1Zlsw XSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYoIkludmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIs IGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsgLyogcHJvY2VzcyBw cmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpwcCA9IGlidWYrMjsKLSsJCWludCBuOwotKwkJaWYg KGFrZXlzeikKLSsJCSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUgJiBkYXRlICovCi0rCQkg ICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOwotKwkJICAgIGZwcmludGYocmZwLCAiIyAlcyIsIGN0 aW1lKCZydGltKSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhp YnVmLCByZnApOwotKwkJICAgIGlmIChzdHJuY21wKHBwLCAiQUVTVlMgIiwgNikgPT0gMCkKLSsJ CQl7Ci0rCQkJc3RyY3B5KGFsZ28sICJBRVMiKTsKLSsJCQkvKiBnZXQgdGVzdCB0eXBlICovCi0r CQkJcHAgKz0gNjsKLSsJCQl4cCA9IHN0cmNocihwcCwgJyAnKTsKLSsJCQluID0geHAtcHA7Ci0r CQkJc3RybmNweShhdGVzdCwgcHAsIG4pOwotKwkJCWF0ZXN0W25dID0gJ1wwJzsKLSsJCQkvKiBn ZXQgbW9kZSAqLwotKwkJCXhwID0gc3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1vZGUiICovCi0r CQkJbiA9IHN0cmxlbih4cCsxKS0xOwotKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEsIG4pOwotKwkJ CWFtb2RlW25dID0gJ1wwJzsKLSsJCQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCi0rCQkJaWYgKFZF UkJPU0UpCi0rCQkJCXByaW50ZigiVGVzdCA9ICVzLCBNb2RlID0gJXNcbiIsIGF0ZXN0LCBhbW9k ZSk7Ci0rCQkJfQotKwkJICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKHBwLCAiS2V5IExlbmd0aCA6 ICIsIDEzKSA9PSAwKQotKwkJCXsKLSsJCQlha2V5c3ogPSBhdG9pKHBwKzEzKTsKLSsJCQlpZiAo VkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJLZXkgc2l6ZSA9ICVkXG4iLCBha2V5c3opOwotKwkJCX0K LSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAxOiAgLyogW0VOQ1JZUFRd IHwgW0RFQ1JZUFRdICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnWycpCi0rCQl7Ci0rCQlmcHV0 cyhpYnVmLCByZnApOwotKwkJKytzdGVwOwotKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5D UllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9IDE7Ci0rCQllbHNlIGlmIChzdHJuY2FzZWNt cChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAwOwotKwkJZWxzZQot KwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYpOwot KwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIGlm IChkaXIgPT0gLTEpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZ UFQvREVDUllQVCBrZXl3b3JkXG4iKTsKLSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSAKLSsJ CXN0ZXAgPSAyOwotKwotKwljYXNlIDI6IC8qIEtFWSA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGli dWYsIHJmcCk7Ci0rCSAgICBpZigqaWJ1ZiA9PSAnXG4nKQotKwkJYnJlYWs7Ci0rCSAgICBpZigh c3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJYnJlYWs7Ci0rCi0rCSAgICBpZiAo c3RybmNhc2VjbXAoaWJ1ZiwgIktFWSA9ICIsIDYpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1p c3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQls ZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkg ICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJ CSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJLRVkiLCBhS2V5LCBsZW4pOwot KwkJaWYgKHN0cmNtcChhbW9kZSwgIkVDQiIpID09IDApCi0rCQkgICAgewotKwkJICAgIG1lbXNl dChpVmVjLCAwLCBzaXplb2YoaVZlYykpOwotKwkJICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8q IG5vIGl2ZWMgZm9yIEVDQiAqLwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICArK3N0ZXA7Ci0r CQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KLSsJICAgIGZw dXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkg IT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBJVlxuIik7Ci0rCQllcnIgPSAxOwotKwkJ fQotKwkgICAgZWxzZQotKwkJewotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVj KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgSVZc biIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZh bHVlKCJJViIsIGlWZWMsIGxlbik7Ci0rCQlzdGVwID0gKGRpcik/IDQ6IDU7Ci0rCQl9Ci0rCSAg ICBicmVhazsKLSsKLSsJY2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0 cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAi LCAxMikgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOwotKwkJ ZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWludCBubiA9IHN0cmxlbihpYnVm KzEyKTsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4o aWJ1ZisxMixubi0xLHBsYWludGV4dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuPWhleDJiaW4oaWJ1 ZisxMiwgcGxhaW50ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmlu dGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIsIGlidWYrMTIpOwotKwkJICAgIGVyciA9MTsKLSsJ CSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQot KwkJICAgIHsKLSsJCSAgICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0rCQkgICAgfQot KwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVu KTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVz dCAqLwotKwkJICAgIHsKLSsJCSAgICBpZihkb19tY3QoYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZl YywgCi0rCQkJICAgICAgZGlyLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4sIAotKwkJ CSAgICAgIHJmcCkgPCAwKQotKwkJCUVYSVQoMSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAg IHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMs IAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBs YWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVSVEVY VCIsY2lwaGVydGV4dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJ ICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNTogLyog Q0lQSEVSVEVYVCA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAo c3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkKLSsJCXsKLSsJCXBy aW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJ CXsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1 ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBsZW4g PSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7 Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOwotKwkJICAgIGVyciA9MTsK LSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCi0rCQlQcmludFZhbHVlKCJDSVBIRVJURVhUIiwg Y2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyog TW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19tY3QoYW1vZGUsIGFrZXlz eiwgYUtleSwgaVZlYywgCi0rCQkJICAgZGlyLCBjaXBoZXJ0ZXh0LCBsZW4sIHJmcCk7Ci0rCQkg ICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2Rl LCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0g ZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCSAgICBP dXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4dCxsZW4scmZw LAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2Owot KwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNjoKLSsJICAgIGlmIChpYnVmWzBdICE9ICdc bicpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1pbmF0b3JcbiIp OwotKwkJfQotKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0gMCkKLSsJCXsg LyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KLSsJCWZwdXRzKGlidWYsIHJm cCk7Ci0rCQl9Ci0rCSAgICBzdGVwID0gMTsKLSsJICAgIGJyZWFrOwotKwkgICAgfQotKwl9Ci0r ICAgIGlmIChyZnApCi0rCWZjbG9zZShyZnApOwotKyAgICBpZiAoYWZwKQotKwlmY2xvc2UoYWZw KTsKLSsgICAgcmV0dXJuIGVycjsKLSsgICAgfQotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgIFByb2Nlc3NlcyBlaXRoZXIgYSBzaW5n bGUgZmlsZSBvciAKLSsgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBwYXNzZWQgaW4g YSBmaWxlLgotKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0 IC1mIHh4eC5yZXEKLSsgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVz X3Rlc3QgLWQgeHh4eHgueHh4Ci0rICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4dAotKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgY2hhciAqcnFsaXN0ID0gInJl cS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7Ci0rICAgIEZJTEUgKmZwID0gTlVMTDsKLSsgICAgY2hh ciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7Ci0rICAgIGludCBmX29wdCA9IDAsIGRfb3B0 ID0gMTsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmKCFGSVBTX21vZGVfc2V0KDEp KQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlFWElUKDEpOwotKwl9Ci0rI2VuZGlmCi0r ICAgIGlmIChhcmdjID4gMSkKLSsJewotKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWQiKSA9 PSAwKQotKwkgICAgewotKwkgICAgZF9vcHQgPSAxOwotKwkgICAgfQotKwllbHNlIGlmIChzdHJj YXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCi0rCSAgICB7Ci0rCSAgICBmX29wdCA9IDE7Ci0r CSAgICBkX29wdCA9IDA7Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHByaW50Zigi SW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKLSsJICAgIHJldHVybiAwOwotKwkg ICAgfQotKwlpZiAoYXJnYyA8IDMpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIk1pc3NpbmcgcGFy YW1ldGVyXG4iKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwlpZiAoZF9vcHQpCi0rCSAg ICBycWxpc3QgPSBhcmd2WzJdOwotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBzdHJjcHkoZm4sIGFy Z3ZbMl0pOwotKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107Ci0rCSAgICB9Ci0rCX0KLSsgICAgaWYg KGRfb3B0KQotKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KLSsJaWYgKCEoZnAg PSBmb3BlbihycWxpc3QsICJyIikpKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJDYW5ub3Qgb3Bl biByZXEgbGlzdCBmaWxlXG4iKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0KLSsJd2hpbGUg KGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCi0rCSAgICB7Ci0rCSAgICBzdHJ0b2soZm4sICJc clxuIik7Ci0rCSAgICBzdHJjcHkocmZuLCBmbik7Ci0rCSAgICBpZiAoVkVSQk9TRSkKLSsJCXBy aW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7Ci0rCSAgICBpZiAocHJvY19maWxlKHJmbiwg cnNwZmlsZSkpCi0rCQl7Ci0rCQlwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVz IDw8PFxuIiwgcmZuKTsKLSsJCUVYSVQoMSk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWZjbG9zZShmcCk7 Ci0rCX0KLSsgICAgZWxzZSAvKiBzaW5nbGUgZmlsZSAqLwotKwl7Ci0rCWlmIChWRVJCT1NFKQot KwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgZm4pOwotKwlpZiAocHJvY19maWxlKGZu LCByc3BmaWxlKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVk IGZvcjogJXMgPDw8XG4iLCBmbik7Ci0rCSAgICB9Ci0rCX0KLSsgICAgRVhJVCgwKTsKLSsgICAg cmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2Rlc21vdnMuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2Rlc21vdnMuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCTIwMTAt MDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDcwMiBAQAotKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0r ICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4K LSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVu c3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0r ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsg KgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK LSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KLSsgKgotKyAqLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0rICBOSVNUIERFUyBNb2RlcyBvZiBPcGVyYXRpb24gVmFsaWRhdGlvbiBT eXN0ZW0KLSsgIFRlc3QgUHJvZ3JhbQotKwotKyAgQmFzZWQgb24gdGhlIEFFUyBWYWxpZGF0aW9u IFN1aXRlLCB3aGljaCB3YXM6Ci0rICBEb25hdGVkIHRvIE9wZW5TU0wgYnk6Ci0rICBWLU9ORSBD b3Jwb3JhdGlvbgotKyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAzMDAKLSsgIEdlcm1hbnRv d24sIE1EIDIwODc0Ci0rICBVLlMuQS4KLSsgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxz dGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGVycm5vLmg+Ci0rI2lu Y2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Rlcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgImVfb3MuaCIKLSsK LSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgREVTIHN1cHBvcnRcbiIpOwotKyAgICByZXR1 cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNp bmNsdWRlICJmaXBzX3V0bC5oIgotKwotKyNkZWZpbmUgREVTX0JMT0NLX1NJWkUgOAotKwotKyNk ZWZpbmUgVkVSQk9TRSAwCi0rCi0raW50IERFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKLSsJ ICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKLSsJICAg IHVuc2lnbmVkIGNoYXIgKmlWZWMsIAotKwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAx ID0gZW5jcnlwdCAqLwotKwkgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICpp biwgaW50IGxlbikKLSsgICAgewotKyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxM OwotKwotKyAgICBpZiAoYWtleXN6ICE9IDE5MikKLSsJewotKwlwcmludGYoIkludmFsaWQga2V5 IHNpemU6ICVkXG4iLCBha2V5c3opOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGlmIChzdHJj YXNlY21wKGFtb2RlLCAiQ0JDIikgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NiYygp OwotKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKLSsJY2lwaGVy ID0gRVZQX2Rlc19lZGUzX2VjYigpOwotKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAi Q0ZCNjQiKSA9PSAwKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiNjQoKTsKLSsgICAgZWxz ZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQotKwljaXBoZXIgPSBFVlBf ZGVzX2VkZTNfb2ZiKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkK LSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjgoKTsKLSsgICAgZWxzZSBpZighc3RyY2FzZWNt cChhbW9kZSwiQ0ZCMSIpKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiMSgpOwotKyAgICBl bHNlCi0rCXsKLSsJcHJpbnRmKCJVbmtub3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7Ci0rCUVYSVQo MSk7Ci0rCX0KLSsKLSsgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxM LCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCi0rCXJldHVybiAwOwotKyAgICBpZighc3RyY2FzZWNt cChhbW9kZSwiQ0ZCMSIpKQotKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9D SVBIX0ZMQUdfTEVOR1RIX0JJVFMpOwotKyAgICBFVlBfQ2lwaGVyKGN0eCwgb3V0LCBpbiwgbGVu KTsKLSsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSt2b2lkIERlYnVnVmFsdWUoY2hhciAq dGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCi0rICAgIHsKLSsgICAgY2hhciBvYnVm WzIwNDhdOwotKyAgICBpbnQgb2xlbjsKLSsgICAgb2xlbiA9IGJpbjJoZXgodmFsLCBsZW4sIG9i dWYpOwotKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsgICAg fQotKwotK3ZvaWQgc2hpZnRpbih1bnNpZ25lZCBjaGFyICpkc3QsdW5zaWduZWQgY2hhciAqc3Jj LGludCBuYml0cykKLSsgICAgewotKyAgICBpbnQgbjsKLSsKLSsgICAgLyogbW92ZSB0aGUgYnl0 ZXMuLi4gKi8KLSsgICAgbWVtbW92ZShkc3QsZHN0K25iaXRzLzgsMyo4LW5iaXRzLzgpOwotKyAg ICAvKiBhcHBlbmQgbmV3IGRhdGEgKi8KLSsgICAgbWVtY3B5KGRzdCszKjgtbmJpdHMvOCxzcmMs KG5iaXRzKzcpLzgpOwotKyAgICAvKiBsZWZ0IHNoaWZ0IHRoZSBiaXRzICovCi0rICAgIGlmKG5i aXRzJTgpCi0rCWZvcihuPTAgOyBuIDwgMyo4IDsgKytuKQotKwkgICAgZHN0W25dPShkc3Rbbl0g PDwgKG5iaXRzJTgpKXwoZHN0W24rMV0gPj4gKDgtbmJpdHMlOCkpOwotKyAgICB9CQotKwotKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotK2NoYXIg KnRfdGFnWzJdID0geyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9OwotK2NoYXIgKnRfbW9kZVs2 XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkI2NCJ9OwotK2VudW0gTW9k ZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCNjR9OwotK2ludCBTaXplc1s2XT17NjQs NjQsNjQsMSw4LDY0fTsKLSsKLSt2b2lkIGRvX21jdChjaGFyICphbW9kZSwgCi0rCSAgICBpbnQg YWtleXN6LCBpbnQgbnVta2V5cywgdW5zaWduZWQgY2hhciAqYWtleSx1bnNpZ25lZCBjaGFyICpp dmVjLAotKwkgICAgaW50IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKLSsJICAg IEZJTEUgKnJmcCkKLSsgICAgewotKyAgICBpbnQgaSxpbW9kZTsKLSsgICAgdW5zaWduZWQgY2hh ciBua1s0KjhdOyAvKiBsb25nZXN0IGtleSs4ICovCi0rICAgIHVuc2lnbmVkIGNoYXIgdGV4dDBb OF07Ci0rCi0rICAgIGZvciAoaW1vZGU9MCA7IGltb2RlIDwgNiA7ICsraW1vZGUpCi0rCWlmKCFz dHJjbXAoYW1vZGUsdF9tb2RlW2ltb2RlXSkpCi0rCSAgICBicmVhazsKLSsgICAgaWYgKGltb2Rl ID09IDYpCi0rCXsgCi0rCXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7 Ci0rCUVYSVQoMSk7Ci0rCX0KLSsKLSsgICAgZm9yKGk9MCA7IGkgPCA0MDAgOyArK2kpCi0rCXsK LSsJaW50IGo7Ci0rCWludCBuOwotKwlpbnQga3A9YWtleXN6LzY0OwotKwl1bnNpZ25lZCBjaGFy IG9sZF9pdls4XTsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0 KCZjdHgpOwotKwotKwlmcHJpbnRmKHJmcCwiXG5DT1VOVCA9ICVkXG4iLGkpOwotKwlpZihrcCA9 PSAxKQotKwkgICAgT3V0cHV0VmFsdWUoIktFWSIsYWtleSw4LHJmcCwwKTsKLSsJZWxzZQotKwkg ICAgZm9yKG49MCA7IG4gPCBrcCA7ICsrbikKLSsJCXsKLSsJCWZwcmludGYocmZwLCJLRVklZCIs bisxKTsKLSsJCU91dHB1dFZhbHVlKCIiLGFrZXkrbio4LDgscmZwLDApOwotKwkJfQotKwotKwlp ZihpbW9kZSAhPSBFQ0IpCi0rCSAgICBPdXRwdXRWYWx1ZSgiSVYiLGl2ZWMsOCxyZnAsMCk7Ci0r CU91dHB1dFZhbHVlKHRfdGFnW2Rpcl4xXSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7Ci0r I2lmIDAKLSsJLyogY29tcGVuc2F0ZSBmb3IgZW5kaWFubmVzcyAqLwotKwlpZihpbW9kZSA9PSBD RkIxKQotKwkgICAgdGV4dFswXTw8PTc7Ci0rI2VuZGlmCi0rCW1lbWNweSh0ZXh0MCx0ZXh0LDgp OwotKwotKwlmb3Ioaj0wIDsgaiA8IDEwMDAwIDsgKytqKQotKwkgICAgewotKwkgICAgdW5zaWdu ZWQgY2hhciBvbGRfdGV4dFs4XTsKLSsKLSsJICAgIG1lbWNweShvbGRfdGV4dCx0ZXh0LDgpOwot KwkgICAgaWYoaiA9PSAwKQotKwkJewotKwkJbWVtY3B5KG9sZF9pdixpdmVjLDgpOwotKwkJREVT VGVzdCgmY3R4LGFtb2RlLGFrZXlzeixha2V5LGl2ZWMsZGlyLHRleHQsdGV4dCxsZW4pOwotKwkJ fQotKwkgICAgZWxzZQotKwkJewotKwkJbWVtY3B5KG9sZF9pdixjdHguaXYsOCk7Ci0rCQlFVlBf Q2lwaGVyKCZjdHgsdGV4dCx0ZXh0LGxlbik7Ci0rCQl9Ci0rCSAgICBpZihqID09IDk5OTkpCi0r CQl7Ci0rCQlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJdLHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIx KTsKLSsJCS8qCQltZW1jcHkoaXZlYyx0ZXh0LDgpOyAqLwotKwkJfQotKwkgICAgLyoJICAgIERl YnVnVmFsdWUoIml2IixjdHguaXYsOCk7ICovCi0rCSAgICAvKiBhY2N1bXVsYXRlIG1hdGVyaWFs IGZvciB0aGUgbmV4dCBrZXkgKi8KLSsJICAgIHNoaWZ0aW4obmssdGV4dCxTaXplc1tpbW9kZV0p OwotKwkgICAgLyoJICAgIERlYnVnVmFsdWUoIm5rIixuaywyNCk7Ki8KLSsJICAgIGlmKChkaXIg JiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NAotKwkJ CXx8IGltb2RlID09IENCQykpIHx8IGltb2RlID09IE9GQikKLSsJCW1lbWNweSh0ZXh0LG9sZF9p diw4KTsKLSsKLSsJICAgIGlmKCFkaXIgJiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUgPT0gQ0ZC OCB8fCBpbW9kZSA9PSBDRkI2NCkpCi0rCQl7Ci0rCQkvKiB0aGUgdGVzdCBzcGVjaWZpZXMgdXNp bmcgdGhlIG91dHB1dCBvZiB0aGUgcmF3IERFUyBvcGVyYXRpb24KLSsJCSAgIHdoaWNoIHdlIGRv bid0IGhhdmUsIHNvIHJlY29uc3RydWN0IGl0Li4uICovCi0rCQlmb3Iobj0wIDsgbiA8IDggOyAr K24pCi0rCQkgICAgdGV4dFtuXV49b2xkX3RleHRbbl07Ci0rCQl9Ci0rCSAgICB9Ci0rCWZvcihu PTAgOyBuIDwgOCA7ICsrbikKLSsJICAgIGFrZXlbbl1ePW5rWzE2K25dOwotKwlmb3Iobj0wIDsg biA8IDggOyArK24pCi0rCSAgICBha2V5Wzgrbl1ePW5rWzgrbl07Ci0rCWZvcihuPTAgOyBuIDwg OCA7ICsrbikKLSsJICAgIGFrZXlbMTYrbl1ePW5rW25dOwotKwlpZihudW1rZXlzIDwgMykKLSsJ ICAgIG1lbWNweSgmYWtleVsyKjhdLGFrZXksOCk7Ci0rCWlmKG51bWtleXMgPCAyKQotKwkgICAg bWVtY3B5KCZha2V5WzhdLGFrZXksOCk7Ci0rCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9j ayAqKWFrZXkpOwotKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKikoYWtleSs4KSk7 Ci0rCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5KzE2KSk7Ci0rCW1lbWNw eShpdmVjLGN0eC5pdiw4KTsKLSsKLSsJLyogcG9pbnRsZXNzIGV4ZXJjaXNlIC0gdGhlIGZpbmFs IHRleHQgZG9lc24ndCBkZXBlbmQgb24gdGhlCi0rCSAgIGluaXRpYWwgdGV4dCBpbiBPRkIgbW9k ZSwgc28gd2hvIGNhcmVzIHdoYXQgaXQgaXM/IChXaG8KLSsJICAgZGVzaWduZWQgdGhlc2UgdGVz dHM/KSAqLwotKwlpZihpbW9kZSA9PSBPRkIpCi0rCSAgICBmb3Iobj0wIDsgbiA8IDggOyArK24p Ci0rCQl0ZXh0W25dPXRleHQwW25dXm9sZF9pdltuXTsKLSsJfQotKyAgICB9Ci0rICAgIAotK2lu dCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQotKyAgICB7Ci0rICAgIGNo YXIgYWZuWzI1Nl0sIHJmblsyNTZdOwotKyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVM TDsKLSsgICAgY2hhciBpYnVmWzIwNDhdLCB0YnVmWzIwNDhdOwotKyAgICBpbnQgaWxlbiwgbGVu LCByZXQgPSAwOwotKyAgICBjaGFyIGFtb2RlWzhdID0gIiI7Ci0rICAgIGNoYXIgYXRlc3RbMTAw XSA9ICIiOwotKyAgICBpbnQgYWtleXN6PTA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0s IGFLZXlbNDBdOwotKyAgICBpbnQgZGlyID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAwOwotKyAgICB1 bnNpZ25lZCBjaGFyIHBsYWludGV4dFsyMDQ4XTsKLSsgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0 ZXh0WzIwNDhdOwotKyAgICBjaGFyICpycDsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAg ICBpbnQgbnVta2V5cz0xOwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwotKyAg ICBpZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUpKQotKwl7Ci0rCXByaW50ZigiTm8gcmVxIGZpbGVc biIpOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKLSsKLSsg ICAgaWYgKChhZnAgPSBmb3BlbihhZm4sICJyIikpID09IE5VTEwpCi0rCXsKLSsJcHJpbnRmKCJD YW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAotKwkgICAgICAgYWZuLCBzdHJlcnJvcihlcnJu bykpOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgaWYgKCFyc3BmaWxlKQotKwl7Ci0rCXN0cmNw eShyZm4sYWZuKTsKLSsJcnA9c3Ryc3RyKHJmbiwicmVxLyIpOwotKyNpZmRlZiBPUEVOU1NMX1NZ U19XSU4zMgotKwlpZiAoIXJwKQotKwkgICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKLSsjZW5k aWYKLSsJYXNzZXJ0KHJwKTsKLSsJbWVtY3B5KHJwLCJyc3AiLDMpOwotKwlycCA9IHN0cnN0cihy Zm4sICIucmVxIik7Ci0rCW1lbWNweShycCwgIi5yc3AiLCA0KTsKLSsJcnNwZmlsZSA9IHJmbjsK LSsJfQotKyAgICBpZiAoKHJmcCA9IGZvcGVuKHJzcGZpbGUsICJ3IikpID09IE5VTEwpCi0rCXsK LSsJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAotKwkgICAgICAgcmZuLCBz dHJlcnJvcihlcnJubykpOwotKwlmY2xvc2UoYWZwKTsKLSsJYWZwID0gTlVMTDsKLSsJcmV0dXJu IC0xOwotKwl9Ci0rICAgIHdoaWxlICghZXJyICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1Ziks IGFmcCkpICE9IE5VTEwpCi0rCXsKLSsJdGlkeV9saW5lKHRidWYsIGlidWYpOwotKwlpbGVuID0g c3RybGVuKGlidWYpOwotKwkvKglwcmludGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsq LwotKwlpZihzdGVwID09IDMgJiYgIXN0cmNtcChhbW9kZSwiRUNCIikpCi0rCSAgICB7Ci0rCSAg ICBtZW1zZXQoaVZlYywgMCwgc2l6ZW9mKGlWZWMpKTsKLSsJICAgIHN0ZXAgPSAoZGlyKT8gNDog NTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAqLwotKwkgICAgfQotKwlzd2l0Y2ggKHN0ZXApCi0rCSAg ICB7Ci0rCWNhc2UgMDogIC8qIHJlYWQgcHJlYW1ibGUgKi8KLSsJICAgIGlmIChpYnVmWzBdID09 ICdcbicpCi0rCQl7IC8qIGVuZCBvZiBwcmVhbWJsZSAqLwotKwkJaWYgKCphbW9kZSA9PSAnXDAn KQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIk1pc3NpbmcgTW9kZVxuIik7Ci0rCQkgICAgZXJy ID0gMTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGZwdXRzKGlidWYsIHJm cCk7Ci0rCQkgICAgKysgc3RlcDsKLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChpYnVm WzBdICE9ICcjJykKLSsJCXsKLSsJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xu IiwgaWJ1Zik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJeyAvKiBwcm9jZXNz IHByZWFtYmxlICovCi0rCQljaGFyICp4cCwgKnBwID0gaWJ1ZisyOwotKwkJaW50IG47Ci0rCQlp ZigqYW1vZGUpCi0rCQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLwotKwkJ ICAgIHRpbWVfdCBydGltID0gdGltZSgwKTsKLSsJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBj dGltZSgmcnRpbSkpOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgZnB1dHMo aWJ1ZiwgcmZwKTsKLSsJCSAgICBpZighc3RybmNtcChwcCwiSU5WRVJTRSAiLDgpIHx8ICFzdHJu Y21wKHBwLCJERVMgIiw0KQotKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJUREVTICIsNSkKLSsJ CSAgICAgICB8fCAhc3RybmNtcChwcCwiUEVSTVVUQVRJT04gIiwxMikKLSsJCSAgICAgICB8fCAh c3RybmNtcChwcCwiU1VCU1RJVFVUSU9OICIsMTMpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAs IlZBUklBQkxFICIsOSkpCi0rCQkJewotKwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KLSsJCQlpZigh c3RybmNtcChwcCwiREVTICIsNCkpCi0rCQkJICAgIHBwKz00OwotKwkJCWVsc2UgaWYoIXN0cm5j bXAocHAsIlRERVMgIiw1KSkKLSsJCQkgICAgcHArPTU7Ci0rCQkJeHAgPSBzdHJjaHIocHAsICcg Jyk7Ci0rCQkJbiA9IHhwLXBwOwotKwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKLSsJCQlhdGVz dFtuXSA9ICdcMCc7Ci0rCQkJLyogZ2V0IG1vZGUgKi8KLSsJCQl4cCA9IHN0cnJjaHIocHAsICcg Jyk7IC8qIGdldCBtb2RlIiAqLwotKwkJCW4gPSBzdHJsZW4oeHArMSktMTsKLSsJCQlzdHJuY3B5 KGFtb2RlLCB4cCsxLCBuKTsKLSsJCQlhbW9kZVtuXSA9ICdcMCc7Ci0rCQkJLyogYW1vZGVbM10g PSAnXDAnOyAqLwotKwkJCWlmIChWRVJCT1NFKQotKwkJCQlwcmludGYoIlRlc3Q9JXMsIE1vZGU9 JXNcbiIsYXRlc3QsYW1vZGUpOwotKwkJCX0KLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBicmVhazsK LSsKLSsJY2FzZSAxOiAgLyogW0VOQ1JZUFRdIHwgW0RFQ1JZUFRdICovCi0rCSAgICBpZihpYnVm WzBdID09ICdcbicpCi0rCQlicmVhazsKLSsJICAgIGlmIChpYnVmWzBdID09ICdbJykKLSsJCXsK LSsJCWZwdXRzKGlidWYsIHJmcCk7Ci0rCQkrK3N0ZXA7Ci0rCQlpZiAoc3RybmNhc2VjbXAoaWJ1 ZiwgIltFTkNSWVBUXSIsIDkpID09IDApCi0rCQkgICAgZGlyID0gMTsKLSsJCWVsc2UgaWYgKHN0 cm5jYXNlY21wKGlidWYsICJbREVDUllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9IDA7Ci0r CQllbHNlCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwg aWJ1Zik7Ci0rCQkgICAgZXJyID0gMTsKLSsJCSAgICB9Ci0rCQlicmVhazsKLSsJCX0KLSsJICAg IGVsc2UgaWYgKGRpciA9PSAtMSkKLSsJCXsKLSsJCWVyciA9IDE7Ci0rCQlwcmludGYoIk1pc3Np bmcgRU5DUllQVC9ERUNSWVBUIGtleXdvcmRcbiIpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBl bHNlIAotKwkJc3RlcCA9IDI7Ci0rCi0rCWNhc2UgMjogLyogS0VZID0geHh4eCAqLwotKwkgICAg aWYoKmlidWYgPT0gJ1xuJykKLSsJCXsKLSsJICAgICAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJ YnJlYWs7Ci0rICAgICAgICAgICAgICAgIH0KLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJD T1VOVCA9ICIsOCkpCi0rCQl7Ci0rCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCWJyZWFr OwotKyAgICAgICAgICAgICAgICB9Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQ9 Iiw2KSkKLSsJCXsKLSsJICAgICAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJYnJlYWs7Ci0rICAg ICAgICAgICAgICAgIH0KLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJOdW1LZXlzID0gIiwx MCkpCi0rCQl7Ci0rCQludW1rZXlzPWF0b2koaWJ1ZisxMCk7Ci0rCQlicmVhazsKLSsJCX0KLSsJ ICAKLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1Ziwi S0VZID0gIiw2KSkKLSsJCXsKLSsJCWFrZXlzej02NDsKLSsJCWxlbiA9IGhleDJiaW4oKGNoYXIq KWlidWYrNiwgYUtleSk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRm KCJJbnZhbGlkIEtFWVxuIik7Ci0rCQkgICAgZXJyPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAg fQotKwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsKLSsJCSsrc3RlcDsKLSsJCX0KLSsJ ICAgIGVsc2UgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWXMgPSAiLDcpKQotKwkJewotKwkJYWtl eXN6PTY0KjM7Ci0rCQlsZW49aGV4MmJpbihpYnVmKzcsYUtleSk7Ci0rCQlpZihsZW4gIT0gOCkK LSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7Ci0rCQkgICAgZXJyPTE7 Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJbWVtY3B5KGFLZXkrOCxhS2V5LDgpOwotKwkJ bWVtY3B5KGFLZXkrMTYsYUtleSw4KTsKLSsJCWlidWZbNF09J1wwJzsKLSsJCVByaW50VmFsdWUo IktFWXMiLGFLZXksbGVuKTsKLSsJCSsrc3RlcDsKLSsJCX0KLSsJICAgIGVsc2UgaWYoIXN0cm5j YXNlY21wKGlidWYsIktFWSIsMykpCi0rCQl7Ci0rCQlpbnQgbj1pYnVmWzNdLScxJzsKLSsKLSsJ CWFrZXlzej02NCozOwotKwkJbGVuPWhleDJiaW4oaWJ1Zis3LGFLZXkrbio4KTsKLSsJCWlmKGxl biAhPSA4KQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKLSsJCSAg ICBlcnI9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlpYnVmWzRdPSdcMCc7Ci0rCQlQ cmludFZhbHVlKGlidWYsYUtleSxsZW4pOwotKwkJaWYobiA9PSAyKQotKwkJICAgICsrc3RlcDsK LSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJ ZXJyID0gMTsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDM6IC8qIElWID0geHh4eCAq LwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAi SVYgPSAiLCA1KSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKLSsJCWVy ciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilp YnVmKzUsIGlWZWMpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50Zigi SW52YWxpZCBJVlxuIik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0K LSsJCVByaW50VmFsdWUoIklWIiwgaVZlYywgbGVuKTsKLSsJCXN0ZXAgPSAoZGlyKT8gNDogNTsK LSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8K LSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBM QUlOVEVYVCA9ICIsIDEyKSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVY VFxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJaW50IG5uID0g c3RybGVuKGlidWYrMTIpOwotKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQotKwkJICAgIGxl bj1iaW50MmJpbihpYnVmKzEyLG5uLTEscGxhaW50ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBsZW49 aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRleHQpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewot KwkJICAgIHByaW50ZigiSW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7Ci0rCQkgICAg ZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCWlmIChsZW4gPj0gc2l6ZW9mKHBs YWludGV4dCkpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsK LSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJQTEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxh aW50ZXh0LCBsZW4pOwotKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1v bnRlIENhcmxvIFRlc3QgKi8KLSsJCSAgICB7Ci0rCQkgICAgZG9fbWN0KGFtb2RlLGFrZXlzeixu dW1rZXlzLGFLZXksaVZlYyxkaXIscGxhaW50ZXh0LGxlbixyZnApOwotKwkJICAgIH0KLSsJCWVs c2UKLSsJCSAgICB7Ci0rCQkgICAgYXNzZXJ0KGRpciA9PSAxKTsKLSsJCSAgICByZXQgPSBERVNU ZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAg PSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIGNpcGhlcnRleHQsIHBsYWludGV4dCwg bGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZw LAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2Owot KwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8K LSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJ UEhFUlRFWFQgPSAiLCAxMykgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIp OwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWlmKCFzdHJjbXAoYW1v ZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMykt MSxjaXBoZXJ0ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lw aGVydGV4dCk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZh bGlkIENJUEhFUlRFWFRcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAg ICB9Ci0rCQkKLSsJCVByaW50VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOwot KwkJaWYgKHN0cmNtcChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3Qg Ki8KLSsJCSAgICB7Ci0rCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5c3osIG51bWtleXMsIGFLZXks IGlWZWMsIAotKwkJCSAgIGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnApOwotKwkJICAgIH0KLSsJ CWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgYXNzZXJ0KGRpciA9PSAwKTsKLSsJCSAgICByZXQgPSBE RVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8q IDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4 dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAq KXBsYWludGV4dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAg IH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNjoKLSsJICAg IGlmIChpYnVmWzBdICE9ICdcbicpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNz aW5nIHRlcm1pbmF0b3JcbiIpOwotKwkJfQotKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAi TUNUIikgIT0gMCkKLSsJCXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8K LSsJCWZwdXRzKGlidWYsIHJmcCk7Ci0rCQl9Ci0rCSAgICBzdGVwID0gMTsKLSsJICAgIGJyZWFr OwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChyZnApCi0rCWZjbG9zZShyZnApOwotKyAgICBpZiAo YWZwKQotKwlmY2xvc2UoYWZwKTsKLSsgICAgcmV0dXJuIGVycjsKLSsgICAgfQotKwotKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgIFByb2Nl c3NlcyBlaXRoZXIgYSBzaW5nbGUgZmlsZSBvciAKLSsgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5h bWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxlLgotKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQg YXM6Ci0rICAgIGFlc190ZXN0IC1mIHh4eC5yZXEKLSsgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNp ZmllZCBhczoKLSsgICAgYWVzX3Rlc3QgLWQgeHh4eHgueHh4Ci0rICBUaGUgZGVmYXVsdCBpczog LWQgcmVxLnR4dAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKi8KLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAg Y2hhciAqcnFsaXN0ID0gInJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7Ci0rICAgIEZJTEUgKmZw ID0gTlVMTDsKLSsgICAgY2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7Ci0rICAgIGlu dCBmX29wdCA9IDAsIGRfb3B0ID0gMTsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlm KCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlFWElUKDEp OwotKwl9Ci0rI2VuZGlmCi0rICAgIGlmIChhcmdjID4gMSkKLSsJewotKwlpZiAoc3RyY2FzZWNt cChhcmd2WzFdLCAiLWQiKSA9PSAwKQotKwkgICAgewotKwkgICAgZF9vcHQgPSAxOwotKwkgICAg fQotKwllbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCi0rCSAgICB7Ci0r CSAgICBmX29wdCA9IDE7Ci0rCSAgICBkX29wdCA9IDA7Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAg IHsKLSsJICAgIHByaW50ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKLSsJ ICAgIHJldHVybiAwOwotKwkgICAgfQotKwlpZiAoYXJnYyA8IDMpCi0rCSAgICB7Ci0rCSAgICBw cmludGYoIk1pc3NpbmcgcGFyYW1ldGVyXG4iKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQot KwlpZiAoZF9vcHQpCi0rCSAgICBycWxpc3QgPSBhcmd2WzJdOwotKwllbHNlCi0rCSAgICB7Ci0r CSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0pOwotKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107Ci0rCSAg ICB9Ci0rCX0KLSsgICAgaWYgKGRfb3B0KQotKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9y eSkgKi8KLSsJaWYgKCEoZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQotKwkgICAgewotKwkgICAg cHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKLSsJICAgIHJldHVybiAtMTsK LSsJICAgIH0KLSsJd2hpbGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCi0rCSAgICB7Ci0r CSAgICBzdHJ0b2soZm4sICJcclxuIik7Ci0rCSAgICBzdHJjcHkocmZuLCBmbik7Ci0rCSAgICBw cmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCByZm4pOwotKwkgICAgaWYgKHByb2NfZmlsZShyZm4s IHJzcGZpbGUpKQotKwkJewotKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAl cyA8PDxcbiIsIHJmbik7Ci0rCQlFWElUKDEpOwotKwkJfQotKwkgICAgfQotKwlmY2xvc2UoZnAp OwotKwl9Ci0rICAgIGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KLSsJewotKwlpZiAoVkVSQk9TRSkK LSsJCXByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKLSsJaWYgKHByb2NfZmlsZShmbiwg cnNwZmlsZSkpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBm b3I6ICVzIDw8PFxuIiwgZm4pOwotKwkgICAgfQotKwl9Ci0rICAgIEVYSVQoMCk7Ci0rICAgIHJl dHVybiAwOwotKyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9maXBzL2NhdnMvZmlwc19kc3N2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfZHNzdnMuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2Rzc3ZzLmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMJMjAxMC0wMy0zMCAxMDoz Mzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsNTM3IEBACi0rI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxz dGRpby5oPgotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAgIHBy aW50ZigiTm8gRklQUyBEU0Egc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rI2Vs c2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1 ZGUgPGN0eXBlLmg+Ci0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIHZvaWQg cGJuKGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IGxlbiwgaTsKLSsJ dW5zaWduZWQgY2hhciAqdG1wOwotKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOwotKwl0bXAgPSBP UEVOU1NMX21hbGxvYyhsZW4pOwotKwlpZiAoIXRtcCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJy LCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwlCTl9i bjJiaW4oYm4sIHRtcCk7Ci0rCXByaW50ZigiJXMgPSAiLCBuYW1lKTsKLSsJZm9yIChpID0gMDsg aSA8IGxlbjsgaSsrKQotKwkJcHJpbnRmKCIlMDJYIiwgdG1wW2ldKTsKLSsJZnB1dHMoIlxuIiwg c3Rkb3V0KTsKLSsJT1BFTlNTTF9mcmVlKHRtcCk7Ci0rCXJldHVybjsKLSsJfQotKwotK3ZvaWQg cHJpbWVzKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0MF07Ci0rICAgIGNoYXIgbGJ1Zlsx MDI0MF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsKLSsgICAgd2hpbGUoZmdldHMo YnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJZnB1dHMoYnVmLHN0ZG91dCk7 Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJY29u dGludWU7Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiUHJpbWUiKSkKLSsJICAgIHsKLSsJICAgIEJJ R05VTSAqcHA7Ci0rCi0rCSAgICBwcD1CTl9uZXcoKTsKLSsJICAgIGRvX2hleDJibigmcHAsdmFs dWUpOwotKwkgICAgcHJpbnRmKCJyZXN1bHQ9ICVjXG4iLAotKwkJICAgQk5faXNfcHJpbWVfZXgo cHAsMjAsTlVMTCxOVUxMKSA/ICdQJyA6ICdGJyk7Ci0rCSAgICB9CSAgICAKLSsJfQotKyAgICB9 Ci0rCi0rdm9pZCBwcWcoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFy IGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50IG5tb2Q9 MDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0r CXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7 Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3RyY21w KGtleXdvcmQsIlttb2QiKSkKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJOIikpCi0rCSAgICB7Ci0rCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKLSsK LSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwotKwkgICAgd2hpbGUobi0t KQotKwkJewotKwkJdW5zaWduZWQgY2hhciBzZWVkWzIwXTsKLSsJCURTQSAqZHNhOwotKwkJaW50 IGNvdW50ZXI7Ci0rCQl1bnNpZ25lZCBsb25nIGg7Ci0rCQlkc2EgPSBGSVBTX2RzYV9uZXcoKTsK LSsKLSsJCWlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMCwm Y291bnRlciwmaCxOVUxMKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhp dCgxKTsKLSsJCQl9Ci0rCQlwYm4oIlAiLGRzYS0+cCk7Ci0rCQlwYm4oIlEiLGRzYS0+cSk7Ci0r CQlwYm4oIkciLGRzYS0+Zyk7Ci0rCQlwdigiU2VlZCIsc2VlZCwyMCk7Ci0rCQlwcmludGYoImMg PSAlZFxuIixjb3VudGVyKTsKLSsJCXByaW50ZigiSCA9ICVseFxuIixoKTsKLSsJCXB1dGMoJ1xu JyxzdGRvdXQpOwotKwkJfQotKwkgICAgfQotKwllbHNlCi0rCSAgICBmcHV0cyhidWYsc3Rkb3V0 KTsKLSsJfQotKyAgICB9Ci0rCi0rdm9pZCBwcWd2ZXIoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVm WzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKLSsgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEw7Ci0rICAgIGlu dCBjb3VudGVyLCBjb3VudGVyMjsKLSsgICAgdW5zaWduZWQgbG9uZyBoLCBoMjsKLSsgICAgRFNB ICpkc2E9TlVMTDsKLSsgICAgaW50IG5tb2Q9MDsKLSsgICAgdW5zaWduZWQgY2hhciBzZWVkWzEw MjRdOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkK LSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJ CXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWZwdXRzKGJ1 Ziwgc3Rkb3V0KTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICBubW9kPWF0 b2kodmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQotKwkgICAgcD1oZXgy Ym4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQotKwkgICAgcT1oZXgy Ym4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQotKwkgICAgZz1oZXgy Ym4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiU2VlZCIpKQotKwkgICAgewot KwkgICAgaW50IHNsZW4gPSBoZXgyYmluKHZhbHVlLCBzZWVkKTsKLSsJICAgIGlmIChzbGVuICE9 IDIwKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJTZWVkIHBhcnNlIGxlbmd0aCBlcnJvclxu Iik7Ci0rCQlleGl0ICgxKTsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsImMiKSkKLSsJICAgIGNvdW50ZXIgPWF0b2koYnVmKzQpOwotKwllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiSCIpKQotKwkgICAgewotKwkgICAgaCA9IGF0b2kodmFsdWUpOwotKwkgICAgaWYg KCFwIHx8ICFxIHx8ICFnKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxu Iik7Ci0rCQlleGl0ICgxKTsKLSsJCX0KLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwotKwkg ICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwyMCAsJmNv dW50ZXIyLCZoMixOVUxMKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhp dCgxKTsKLSsJCQl9Ci0rICAgICAgICAgICAgaWYgKEJOX2NtcChkc2EtPnAsIHApIHx8IEJOX2Nt cChkc2EtPnEsIHEpIHx8IEJOX2NtcChkc2EtPmcsIGcpCi0rCQl8fCAoY291bnRlciAhPSBjb3Vu dGVyMikgfHwgKGggIT0gaDIpKQotKwkgICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7Ci0rCSAg ICBlbHNlCi0rCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKLSsJICAgIEJOX2ZyZWUocCk7 Ci0rCSAgICBCTl9mcmVlKHEpOwotKwkgICAgQk5fZnJlZShnKTsKLSsJICAgIHAgPSBOVUxMOwot KwkgICAgcSA9IE5VTEw7Ci0rCSAgICBnID0gTlVMTDsKLSsJICAgIEZJUFNfZHNhX2ZyZWUoZHNh KTsKLSsJICAgIGRzYSA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotKy8qIEtleXBh aXIgdmVyaWZpY2F0aW9uIHJvdXRpbmUuIE5COiB0aGlzIGlzbid0IHBhcnQgb2YgdGhlIHN0YW5k YXJkIEZJUFMxNDAtMgotKyAqIGFsZ29yaXRobSB0ZXN0cy4gSXQgaXMgYW4gYWRkaXRpb25hbCB0 ZXN0IHRvIHBlcmZvcm0gc2FuaXR5IGNoZWNrcyBvbiB0aGUKLSsgKiBvdXRwdXQgb2YgdGhlIEtl eVBhaXIgdGVzdC4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGRzc19wYXJhbWNoZWNrKGludCBubW9k LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwgQklHTlVNICpnLAotKwkJCQkJCQlCTl9DVFggKmN0eCkK LSsgICAgewotKyAgICBCSUdOVU0gKnJlbSA9IE5VTEw7Ci0rICAgIGlmIChCTl9udW1fYml0cyhw KSAhPSBubW9kKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKEJOX251bV9iaXRzKHEpICE9IDE2MCkK LSsJcmV0dXJuIDA7Ci0rICAgIGlmIChCTl9pc19wcmltZV9leChwLCBCTl9wcmltZV9jaGVja3Ms IGN0eCwgTlVMTCkgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmIChCTl9pc19wcmltZV9leChx LCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJl bSA9IEJOX25ldygpOwotKyAgICBpZiAoIUJOX21vZChyZW0sIHAsIHEsIGN0eCkgfHwgIUJOX2lz X29uZShyZW0pCi0rICAgIAl8fCAoQk5fY21wKGcsIEJOX3ZhbHVlX29uZSgpKSA8PSAwKQotKwl8 fCAhQk5fbW9kX2V4cChyZW0sIGcsIHEsIHAsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pKQotKwl7 Ci0rCUJOX2ZyZWUocmVtKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsgICAgLyogVG9kbzogY2hlY2sg ZyAqLwotKyAgICBCTl9mcmVlKHJlbSk7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rdm9p ZCBrZXl2ZXIoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZb MTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgQklHTlVNICpwID0gTlVM TCwgKnEgPSBOVUxMLCAqZyA9IE5VTEwsICpYID0gTlVMTCwgKlkgPSBOVUxMOwotKyAgICBCSUdO VU0gKlkyOwotKyAgICBCTl9DVFggKmN0eCA9IE5VTEw7Ci0rICAgIGludCBubW9kPTAsIHBhcmFt Y2hlY2sgPSAwOwotKwotKyAgICBjdHggPSBCTl9DVFhfbmV3KCk7Ci0rICAgIFkyID0gQk5fbmV3 KCk7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQot Kwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJ ewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNt cChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICB7Ci0rCSAgICBpZiAocCkKLSsJCUJOX2ZyZWUocCk7 Ci0rCSAgICBwID0gTlVMTDsKLSsJICAgIGlmIChxKQotKwkJQk5fZnJlZShxKTsKLSsJICAgIHEg PSBOVUxMOwotKwkgICAgaWYgKGcpCi0rCQlCTl9mcmVlKGcpOwotKwkgICAgZyA9IE5VTEw7Ci0r CSAgICBwYXJhbWNoZWNrID0gMDsKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCSAgICB9Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCi0rCSAgICBwPWhleDJibih2YWx1ZSk7Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCi0rCSAgICBxPWhleDJibih2YWx1ZSk7Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICBnPWhleDJibih2YWx1ZSk7Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJYIikpCi0rCSAgICBYPWhleDJibih2YWx1ZSk7Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCi0rCSAgICB7Ci0rCSAgICBZPWhleDJibih2 YWx1ZSk7Ci0rCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcgfHwgIVggfHwgIVkpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkg ICAgcGJuKCJQIixwKTsKLSsJICAgIHBibigiUSIscSk7Ci0rCSAgICBwYm4oIkciLGcpOwotKwkg ICAgcGJuKCJYIixYKTsKLSsJICAgIHBibigiWSIsWSk7Ci0rCSAgICBpZiAoIXBhcmFtY2hlY2sp Ci0rCQl7Ci0rCQlpZiAoZHNzX3BhcmFtY2hlY2sobm1vZCwgcCwgcSwgZywgY3R4KSkKLSsJCQlw YXJhbWNoZWNrID0gMTsKLSsJCWVsc2UKLSsJCQlwYXJhbWNoZWNrID0gLTE7Ci0rCQl9Ci0rCSAg ICBpZiAocGFyYW1jaGVjayAhPSAxKQotKwkgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKLSsJ ICAgIGVsc2UKLSsJCXsKLSsJCWlmICghQk5fbW9kX2V4cChZMiwgZywgWCwgcCwgY3R4KSB8fCBC Tl9jbXAoWTIsIFkpKQotKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IEZcbiIpOwotKwkgICAgICAg IGVsc2UKLSsJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKLSsJCX0KLSsJICAgIEJOX2Zy ZWUoWCk7Ci0rCSAgICBCTl9mcmVlKFkpOwotKwkgICAgWCA9IE5VTEw7Ci0rCSAgICBZID0gTlVM TDsKLSsJICAgIH0KLSsJfQotKwlpZiAocCkKLSsJICAgIEJOX2ZyZWUocCk7Ci0rCWlmIChxKQot KwkgICAgQk5fZnJlZShxKTsKLSsJaWYgKGcpCi0rCSAgICBCTl9mcmVlKGcpOwotKwlpZiAoWTIp Ci0rCSAgICBCTl9mcmVlKFkyKTsKLSsgICAgfQotKwotK3ZvaWQga2V5cGFpcigpCi0rICAgIHsK LSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAq a2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKwotKyAgICB3aGlsZShmZ2V0cyhi dWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtl eXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwot KwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAg bm1vZD1hdG9pKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKLSsJICAg IHsKLSsJICAgIERTQSAqZHNhOwotKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7Ci0rCi0rCSAgICBw cmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygp OwotKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCww LE5VTEwsTlVMTCxOVUxMKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgx KTsKLSsJCX0KLSsJICAgIHBibigiUCIsZHNhLT5wKTsKLSsJICAgIHBibigiUSIsZHNhLT5xKTsK LSsJICAgIHBibigiRyIsZHNhLT5nKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwotKwkg ICAgd2hpbGUobi0tKQotKwkJewotKwkJaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCi0rCQkJ ewotKwkJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwotKwkJcGJu KCJYIixkc2EtPnByaXZfa2V5KTsKLSsJCXBibigiWSIsZHNhLT5wdWJfa2V5KTsKLSsJCXB1dGMo J1xuJyxzdGRvdXQpOwotKwkJfQotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHNpZ2dl bigpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsK LSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKyAgICBEU0Eg KmRzYT1OVUxMOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0g TlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVm KSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlm KCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgewotKwkgICAgbm1vZD1hdG9pKHZhbHVl KTsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwkgICAgaWYgKGRzYSkK LSsJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwotKwkg ICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEws TlVMTCxOVUxMKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsKLSsJ CX0KLSsJICAgIHBibigiUCIsZHNhLT5wKTsKLSsJICAgIHBibigiUSIsZHNhLT5xKTsKLSsJICAg IHBibigiRyIsZHNhLT5nKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwkgICAgfQotKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCi0rCSAgICB7Ci0rCSAgICB1bnNpZ25lZCBj aGFyIG1zZ1sxMDI0XTsKLSsJICAgIHVuc2lnbmVkIGNoYXIgc2J1Zls2MF07Ci0rCSAgICB1bnNp Z25lZCBpbnQgc2xlbjsKLSsJICAgIGludCBuOwotKwkgICAgRVZQX1BLRVkgcGs7Ci0rCSAgICBF VlBfTURfQ1RYIG1jdHg7Ci0rCSAgICBEU0FfU0lHICpzaWc7Ci0rCSAgICBFVlBfTURfQ1RYX2lu aXQoJm1jdHgpOwotKwotKwkgICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7Ci0rCSAgICBwdigiTXNn Iixtc2csbik7Ci0rCi0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsJCXsKLSsJ CWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsJICAgIHBrLnR5cGUgPSBF VlBfUEtFWV9EU0E7Ci0rCSAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsJICAgIHBibigiWSIsZHNh LT5wdWJfa2V5KTsKLSsKLSsJICAgIEVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwg TlVMTCk7Ci0rCSAgICBFVlBfU2lnblVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKLSsJICAgIEVWUF9T aWduRmluYWwoJm1jdHgsIHNidWYsICZzbGVuLCAmcGspOwotKwotKwkgICAgc2lnID0gRFNBX1NJ R19uZXcoKTsKLSsJICAgIEZJUFNfZHNhX3NpZ19kZWNvZGUoc2lnLCBzYnVmLCBzbGVuKTsKLSsK LSsJICAgIHBibigiUiIsc2lnLT5yKTsKLSsJICAgIHBibigiUyIsc2lnLT5zKTsKLSsJICAgIHB1 dGMoJ1xuJyxzdGRvdXQpOwotKwkgICAgRFNBX1NJR19mcmVlKHNpZyk7Ci0rCSAgICBFVlBfTURf Q1RYX2NsZWFudXAoJm1jdHgpOwotKwkgICAgfQotKwl9Ci0rCWlmIChkc2EpCi0rCQlGSVBTX2Rz YV9mcmVlKGRzYSk7Ci0rICAgIH0KLSsKLSt2b2lkIHNpZ3ZlcigpCi0rICAgIHsKLSsgICAgRFNB ICpkc2E9TlVMTDsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsK LSsgICAgdW5zaWduZWQgY2hhciBtc2dbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKLSsgICAgaW50IG5tb2Q9MCwgbj0wOwotKyAgICBEU0FfU0lHIHNnLCAqc2lnID0gJnNnOwot KwotKyAgICBzaWctPnIgPSBOVUxMOwotKyAgICBzaWctPnMgPSBOVUxMOwotKwotKyAgICB3aGls ZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNl X2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1Zixz dGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIp KQotKwkgICAgewotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJICAgIGlmKGRzYSkKLSsJCUZJ UFNfZHNhX2ZyZWUoZHNhKTsKLSsJICAgIGRzYT1GSVBTX2RzYV9uZXcoKTsKLSsJICAgIH0KLSsJ ZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKLSsJICAgIGRzYS0+cD1oZXgyYm4odmFsdWUp OwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQotKwkgICAgZHNhLT5xPWhleDJibih2 YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICB7Ci0rCSAgICBk c2EtPmc9aGV4MmJuKHZhbHVlKTsKLSsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5t b2QpOwotKwkgICAgcGJuKCJQIixkc2EtPnApOwotKwkgICAgcGJuKCJRIixkc2EtPnEpOwotKwkg ICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKLSsJICAgIHsKLSsJICAgIG49aGV4MmJp bih2YWx1ZSxtc2cpOwotKwkgICAgcHYoIk1zZyIsbXNnLG4pOwotKwkgICAgfQotKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiWSIpKQotKwkgICAgZHNhLT5wdWJfa2V5PWhleDJibih2YWx1ZSk7 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJSIikpCi0rCSAgICBzaWctPnI9aGV4MmJuKHZh bHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlMiKSkKLSsJICAgIHsKLSsJICAgIEVW UF9NRF9DVFggbWN0eDsKLSsJICAgIEVWUF9QS0VZIHBrOwotKwkgICAgdW5zaWduZWQgY2hhciBz aWdidWZbNjBdOwotKwkgICAgdW5zaWduZWQgaW50IHNsZW47Ci0rCSAgICBpbnQgcjsKLSsJICAg IEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOwot KwkgICAgcGsucGtleS5kc2EgPSBkc2E7Ci0rCSAgICBzaWctPnM9aGV4MmJuKHZhbHVlKTsKLSsJ Ci0rCSAgICBwYm4oIlkiLGRzYS0+cHViX2tleSk7Ci0rCSAgICBwYm4oIlIiLHNpZy0+cik7Ci0r CSAgICBwYm4oIlMiLHNpZy0+cyk7Ci0rCi0rCSAgICBzbGVuID0gRklQU19kc2Ffc2lnX2VuY29k ZShzaWdidWYsIHNpZyk7Ci0rCSAgICBFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEo KSwgTlVMTCk7Ci0rCSAgICBFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBtc2csIG4pOwotKwkgICAg ciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnYnVmLCBzbGVuLCAmcGspOwotKwkgICAgRVZQ X01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsJCi0rCSAgICBwcmludGYoIlJlc3VsdCA9ICVjXG4i LCByID09IDEgPyAnUCcgOiAnRicpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9 Ci0rCX0KLSsgICAgfQotKwotK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyAgICB7 Ci0rICAgIGlmKGFyZ2MgIT0gMikKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiJXMgW3ByaW1lfHBx Z3xwcWd2ZXJ8a2V5cGFpcnxzaWdnZW58c2lndmVyXVxuIixhcmd2WzBdKTsKLSsJZXhpdCgxKTsK LSsJfQotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMo KTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZighc3RyY21wKGFyZ3ZbMV0sInByaW1lIikpCi0r CXByaW1lcygpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFnIikpCi0rCXBxZygp OwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFndmVyIikpCi0rCXBxZ3ZlcigpOwot KyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5cGFpciIpKQotKwlrZXlwYWlyKCk7Ci0r ICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXl2ZXIiKSkKLSsJa2V5dmVyKCk7Ci0rICAg IGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWdnZW4iKSkKLSsJc2lnZ2VuKCk7Ci0rICAgIGVs c2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWd2ZXIiKSkKLSsJc2lndmVyKCk7Ci0rICAgIGVsc2UK LSsJewotKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0p OwotKwlleGl0KDEpOwotKwl9Ci0rCi0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rI2VuZGlm Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jLmZp cHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYwotLS0tIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMuZmlwcwkyMDEwLTAzLTMwIDEw OjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3JuZ3ZzLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0w LDAgKzEsMjMwIEBACi0rLyoKLSsgKiBDcnVkZSB0ZXN0IGRyaXZlciBmb3IgcHJvY2Vzc2luZyB0 aGUgVlNUIGFuZCBNQ1QgdGVzdHZlY3RvciBmaWxlcwotKyAqIGdlbmVyYXRlZCBieSB0aGUgQ01W UCBSTkdWUyBwcm9kdWN0LgotKyAqCi0rICogTm90ZSB0aGUgaW5wdXQgZmlsZXMgYXJlIGFzc3Vt ZWQgdG8gaGF2ZSBhIF92ZXJ5XyBzcGVjaWZpYyBmb3JtYXQKLSsgKiBhcyBkZXNjcmliZWQgaW4g dGhlIE5JU1QgZG9jdW1lbnQgIlRoZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcgotKyAqIFZhbGlk YXRpb24gU3lzdGVtIChSTkdWUykiLCBNYXkgMjUsIDIwMDQuCi0rICoKLSsgKi8KLSsjaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2lu Y2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sK LSsgICAgcHJpbnRmKCJObyBGSVBTIFJORyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuIDA7Ci0r fQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgotKyNpbmNsdWRlIDxzdHJp bmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsK LSt2b2lkIHZzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsKLSsg ICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVM TDsKLSsgICAgdW5zaWduZWQgY2hhciByZXRbMTZdOwotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsg ICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGxv bmcgaSwga2V5bGVuOwotKwotKyAgICBrZXlsZW4gPSAwOwotKwotKyAgICB3aGlsZShmZ2V0cyhi dWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rkb3V0KTsK LSsJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMTY7 Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDE5Mi1LZXldIiwgMTMpKQotKwkJa2V5bGVu ID0gMjQ7Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQotKwkJ a2V5bGVuID0gMzI7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBi dWYpKQotKwkJY29udGludWU7Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCSAgICB7 Ci0rCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IGtleWxlbikK LSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3Rpbmcg JWxkXG4iLCBrZXlsZW4pOwotKwkJcmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFz dHJjbXAoa2V5d29yZCwiRFQiKSkKLSsJICAgIHsKLSsJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwm aSk7Ci0rCSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxp ZCBEVCBsZW5ndGhcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFz dHJjbXAoa2V5d29yZCwiViIpKQotKwkgICAgewotKwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkp OwotKwkgICAgaWYgKGkgIT0gMTYpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQg ViBsZW5ndGhcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwotKwkgICAgaWYgKCFrZXkgfHwgIWR0 KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7Ci0rCQly ZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7Ci0r CSAgICBGSVBTX3JhbmRfc2VlZCh2LDE2KTsKLSsJICAgIEZJUFNfcmFuZF9zZXRfZHQoZHQpOwot KwkgICAgaWYgKEZJUFNfcmFuZF9ieXRlcyhyZXQsMTYpIDw9IDApCi0rCQl7Ci0rCQlmcHJpbnRm KHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxuIik7Ci0rCSAgICAgICAgcmV0dXJu OwotKwkgICAgICAgIH0KLSsKLSsJICAgIHB2KCJSIixyZXQsMTYpOwotKwkgICAgT1BFTlNTTF9m cmVlKGtleSk7Ci0rCSAgICBrZXkgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKLSsJ ICAgIGR0ID0gTlVMTDsKLSsJICAgIE9QRU5TU0xfZnJlZSh2KTsKLSsJICAgIHYgPSBOVUxMOwot KwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIG1jdCgpCi0rICAgIHsKLSsgICAgdW5zaWdu ZWQgY2hhciAqa2V5ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7Ci0rICAg IHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciByZXRbMTZdOwot KyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICpr ZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGxvbmcgaSwga2V5bGVuOwotKyAgICBpbnQgajsKLSsKLSsg ICAga2V5bGVuID0gMDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4p ICE9IE5VTEwpCi0rCXsKLSsJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCWlmKCFzdHJuY21wKGJ1Ziwi W0FFUyAxMjgtS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDE2OwotKwllbHNlIGlmKCFzdHJuY21w KGJ1ZiwiW0FFUyAxOTItS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDI0OwotKwllbHNlIGlmKCFz dHJuY21wKGJ1ZiwiW0FFUyAyNTYtS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDMyOwotKwlpZiAo IXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCWNvbnRpbnVlOwot KwlpZighc3RyY21wKGtleXdvcmQsIktleSIpKQotKwkgICAgewotKwkgICAga2V5PWhleDJiaW5f bSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSBrZXlsZW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0 ZGVyciwgIkludmFsaWQga2V5IGxlbmd0aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKLSsJ CXJldHVybjsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikp Ci0rCSAgICB7Ci0rCSAgICBkdD1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0g MTYpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKLSsJ CXJldHVybjsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkK LSsJICAgIHsKLSsJICAgIHY9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IDE2 KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKLSsJCXJl dHVybjsKLSsJCX0KLSsKLSsJICAgIGlmICgha2V5IHx8ICFkdCkKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiTWlzc2luZyBrZXkgb3IgRFRcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwotKwkg ICAgRklQU19yYW5kX3NldF9rZXkoa2V5LCBrZXlsZW4pOwotKwkgICAgRklQU19yYW5kX3NlZWQo diwxNik7Ci0rCSAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKLSsJCXsKLSsJCSAgICBG SVBTX3JhbmRfc2V0X2R0KGR0KTsKLSsJCSAgICBpZiAoRklQU19yYW5kX2J5dGVzKHJldCwxNikg PD0gMCkKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFs dWVcbiIpOwotKwkJICAgICAgICByZXR1cm47Ci0rCQkgICAgICAgIH0KLSsJCSAgICAvKiBJbmNy ZW1lbnQgRFQgKi8KLSsJCSAgICBmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pCi0rCQkJewotKwkJ CWR0W2pdKys7Ci0rCQkJaWYgKGR0W2pdKQotKwkJCQlicmVhazsKLSsJCQl9Ci0rCQl9Ci0rCi0r CSAgICBwdigiUiIscmV0LDE2KTsKLSsJICAgIE9QRU5TU0xfZnJlZShrZXkpOwotKwkgICAga2V5 ID0gTlVMTDsKLSsJICAgIE9QRU5TU0xfZnJlZShkdCk7Ci0rCSAgICBkdCA9IE5VTEw7Ci0rCSAg ICBPUEVOU1NMX2ZyZWUodik7Ci0rCSAgICB2ID0gTlVMTDsKLSsJICAgIH0KLSsJfQotKyAgICB9 Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgaWYoYXJn YyAhPSAyKQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbbWN0fHZzdF1cbiIsYXJndlswXSk7 Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9f cHJpbnRfZXJyb3JzKCk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgRklQU19yYW5kX3Jlc2V0KCk7 Ci0rICAgIGlmICghRklQU19yYW5kX3Rlc3RfbW9kZSgpKQotKwl7Ci0rCWZwcmludGYoc3RkZXJy LCAiRXJyb3Igc2V0dGluZyBQUk5HIHRlc3QgbW9kZVxuIik7Ci0rCWRvX3ByaW50X2Vycm9ycygp OwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFzdHJjbXAoYXJndlsxXSwibWN0IikpCi0rCW1j dCgpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwidnN0IikpCi0rCXZzdCgpOwotKyAg ICBlbHNlCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixh cmd2WzFdKTsKLSsJZXhpdCgxKTsKLSsJfQotKwotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKyNl bmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMK LS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMJ MjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAw MDAwICswMjAwCi1AQCAtMCwwICsxLDM5MCBAQAotKy8qIGZpcHNfcnNhZ3Rlc3QuYyAqLwotKy8q IFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0 aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAq IENvcHlyaWdodCAoYykgMjAwNSwyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3Bl blNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAg IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0r ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsg KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBo aWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29t KS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1 ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlv Lmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L3g1MDl2My5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxu Iik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191 dGwuaCIKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7Ci0rc3RhdGljIGlu dCByc2FfcHJpbnRrZXkxKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhwMSwgQklH TlVNICpYcDIsIEJJR05VTSAqWHAsCi0rCQlCSUdOVU0gKmUpOwotK3N0YXRpYyBpbnQgcnNhX3By aW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEy LCBCSUdOVU0gKlhxKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsK LSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCi0r CWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQln b3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVs c2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJ b3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwot KwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFs aXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0r CQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJv clxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFyc2FfdGVzdChvdXQsIGluKSkK LSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBR1RFU1QgZmlsZSBwcm9jZXNzaW5n IGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwot KwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGlu ICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0g c3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0r I2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0raW50IHJzYV90ZXN0KEZJTEUg Km91dCwgRklMRSAqaW4pCi0rCXsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7 Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJUlNBICpyc2EgPSBOVUxMOwotKwlCSUdOVU0g KlhwMSA9IE5VTEwsICpYcDIgPSBOVUxMLCAqWHAgPSBOVUxMOwotKwlCSUdOVU0gKlhxMSA9IE5V TEwsICpYcTIgPSBOVUxMLCAqWHEgPSBOVUxMOwotKwlCSUdOVU0gKmUgPSBOVUxMOwotKwlpbnQg cmV0ID0gMDsKLSsJaW50IGxudW0gPSAwOwotKwotKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9j KFJTQV9URVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RF U1RfTUFYTElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3Rv IGVycm9yOwotKwotKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4s IGluKSkKLSsJCXsKLSsJCWxudW0rKzsKLSsJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0r CQlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwkJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJCWtleXdvcmQrKzsKLSsK LSsJCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwot KwotKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkg anVzdCBjb3B5ICovCi0rCQlpZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKLSsJCQl7Ci0rCQkJaWYg KGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQljb250aW51 ZTsKLSsJCQl9Ci0rCi0rCQlxID0gcCAtIDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3Bh Y2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0g MDsKLSsKLSsJCSpwID0gMDsKLSsJCXZhbHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVh ZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hh cikqdmFsdWUpKQotKwkJCXZhbHVlKys7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2Ug ZnJvbSB2YWx1ZSAqLwotKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCQl3 aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0t ID0gMDsKLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJ4cDEiKSkKLSsJCQl7Ci0rCQkJaWYg KFhwMSB8fCAhZG9faGV4MmJuKCZYcDEsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwot KwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMiIpKQotKwkJCXsKLSsJCQlp ZiAoWHAyIHx8ICFkb19oZXgyYm4oJlhwMix2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHAiKSkKLSsJCQl7Ci0rCQkJ aWYgKFhwIHx8ICFkb19oZXgyYm4oJlhwLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJ4cTEiKSkKLSsJCQl7Ci0rCQkJ aWYgKFhxMSB8fCAhZG9faGV4MmJuKCZYcTEsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMiIpKQotKwkJCXsKLSsJ CQlpZiAoWHEyIHx8ICFkb19oZXgyYm4oJlhxMix2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJy b3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHEiKSkKLSsJCQl7Ci0r CQkJaWYgKFhxIHx8ICFkb19oZXgyYm4oJlhxLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJv cjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJlIikpCi0rCQkJewotKwkJ CWlmIChlIHx8ICFkb19oZXgyYm4oJmUsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwot KwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAxIikpCi0rCQkJY29udGludWU7 Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwMiIpKQotKwkJCWNvbnRpbnVlOwotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicCIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAicTEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgInEyIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJxIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJuIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJk IikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsKLSsJ CWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJaWYgKGUgJiYgWHAxICYmIFhwMiAmJiBYcCkK LSsJCQl7Ci0rCQkJcnNhID0gRklQU19yc2FfbmV3KCk7Ci0rCQkJaWYgKCFyc2EpCi0rCQkJCWdv dG8gZXJyb3I7Ci0rCQkJaWYgKCFyc2FfcHJpbnRrZXkxKG91dCwgcnNhLCBYcDEsIFhwMiwgWHAs IGUpKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCUJOX2ZyZWUoWHAxKTsKLSsJCQlYcDEgPSBOVUxM OwotKwkJCUJOX2ZyZWUoWHAyKTsKLSsJCQlYcDIgPSBOVUxMOwotKwkJCUJOX2ZyZWUoWHApOwot KwkJCVhwID0gTlVMTDsKLSsJCQlCTl9mcmVlKGUpOwotKwkJCWUgPSBOVUxMOwotKwkJCX0KLSsK LSsJCWlmIChyc2EgJiYgWHExICYmIFhxMiAmJiBYcSkKLSsJCQl7Ci0rCQkJaWYgKCFyc2FfcHJp bnRrZXkyKG91dCwgcnNhLCBYcTEsIFhxMiwgWHEpKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCUJO X2ZyZWUoWHExKTsKLSsJCQlYcTEgPSBOVUxMOwotKwkJCUJOX2ZyZWUoWHEyKTsKLSsJCQlYcTIg PSBOVUxMOwotKwkJCUJOX2ZyZWUoWHEpOwotKwkJCVhxID0gTlVMTDsKLSsJCQlGSVBTX3JzYV9m cmVlKHJzYSk7Ci0rCQkJcnNhID0gTlVMTDsKLSsJCQl9Ci0rCQl9Ci0rCi0rCXJldCA9IDE7Ci0r Ci0rCWVycm9yOgotKwotKwlpZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYp OwotKwlpZiAobGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsKLSsJaWYgKFhw MSkKLSsJCUJOX2ZyZWUoWHAxKTsKLSsJaWYgKFhwMikKLSsJCUJOX2ZyZWUoWHAyKTsKLSsJaWYg KFhwKQotKwkJQk5fZnJlZShYcCk7Ci0rCWlmIChYcTEpCi0rCQlCTl9mcmVlKFhxMSk7Ci0rCWlm IChYcTEpCi0rCQlCTl9mcmVlKFhxMSk7Ci0rCWlmIChYcTIpCi0rCQlCTl9mcmVlKFhxMik7Ci0r CWlmIChYcSkKLSsJCUJOX2ZyZWUoWHEpOwotKwlpZiAoZSkKLSsJCUJOX2ZyZWUoZSk7Ci0rCWlm IChyc2EpCi0rCQlGSVBTX3JzYV9mcmVlKHJzYSk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBh cnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nl c3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStz dGF0aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05VTSAq WHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwKLSsJCUJJR05VTSAqZSkKLSsJewotKwlpbnQg cmV0ID0gMDsKLSsJQklHTlVNICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7Ci0rCXAxID0gQk5fbmV3 KCk7Ci0rCXAyID0gQk5fbmV3KCk7Ci0rCWlmICghcDEgfHwgIXAyKQotKwkJZ290byBlcnJvcjsK LSsKLSsJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBwMSwgcDIsIE5VTEwsIE5VTEwsIFhw MSwgWHAyLCBYcCwKLSsJCQkJCQlOVUxMLCBOVUxMLCBOVUxMLCBlLCBOVUxMKSkKLSsJCWdvdG8g ZXJyb3I7Ci0rCi0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicDEiLCBwMSk7Ci0rCWRvX2JuX3By aW50X25hbWUob3V0LCAicDIiLCBwMik7Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicCIsIHJz YS0+cCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwlpZiAocDEpCi0rCQlCTl9mcmVl KHAxKTsKLSsJaWYgKHAyKQotKwkJQk5fZnJlZShwMik7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0K LSsKLStzdGF0aWMgaW50IHJzYV9wcmludGtleTIoRklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJ R05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklHTlVNICpYcSkKLSsJewotKwlpbnQgcmV0ID0gMDsK LSsJQklHTlVNICpxMSA9IE5VTEwsICpxMiA9IE5VTEw7Ci0rCXExID0gQk5fbmV3KCk7Ci0rCXEy ID0gQk5fbmV3KCk7Ci0rCWlmICghcTEgfHwgIXEyKQotKwkJZ290byBlcnJvcjsKLSsKLSsJaWYg KCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBxMSwgcTIsIE5VTEwsIE5VTEws IE5VTEwsCi0rCQkJCQkJWHExLCBYcTIsIFhxLCBOVUxMLCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7 Ci0rCi0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicTEiLCBxMSk7Ci0rCWRvX2JuX3ByaW50X25h bWUob3V0LCAicTIiLCBxMik7Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicSIsIHJzYS0+cSk7 Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAibiIsIHJzYS0+bik7Ci0rCWRvX2JuX3ByaW50X25h bWUob3V0LCAiZCIsIHJzYS0+ZCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwlpZiAo cTEpCi0rCQlCTl9mcmVlKHExKTsKLSsJaWYgKHEyKQotKwkJQk5fZnJlZShxMik7Ci0rCi0rCXJl dHVybiByZXQ7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBz L2NhdnMvZmlwc19yc2FzdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfcnNhc3Rlc3QuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYwkyMDEw LTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwzNzAgQEAKLSsvKiBm aXBzX3JzYXN0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0 ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0IDIwMDUuCi0rICov Ci0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAq Ci0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJp YnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsg KgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAq ICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5j bHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAo ZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsK LSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZw Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsK LStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBG SVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwot KyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3N0YXRpYyBpbnQgcnNhX3N0ZXN0KEZJTEUgKm91 dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKTsKLStzdGF0aWMgaW50IHJzYV9wcmludHNpZyhGSUxF ICpvdXQsIFJTQSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFyICpN c2csIGxvbmcgTXNnbGVuLCBpbnQgU2FsdGxlbik7Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7Ci0rCi0rCWlu dCByZXQgPSAxLCBTYWx0bGVuID0gLTE7Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJ ewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKChh cmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRs ZW4gPSBhdG9pKGFyZ3ZbMl0pOwotKwkJaWYgKFNhbHRsZW4gPCAwKQotKwkJCXsKLSsJCQlmcHJp bnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4iKTsKLSsJCQlnb3RvIGVu ZDsKLSsJCQl9Ci0rCQlhcmdjIC09IDI7Ci0rCQlhcmd2ICs9IDI7Ci0rCQl9Ci0rCWVsc2UgaWYg KChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRs ZW4gPSAtMjsKLSsJCWFyZ2MtLTsKLSsJCWFyZ3YrKzsKLSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0g MSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsK LSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBm b3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRl cnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsK LSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91 dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJ aWYgKCFyc2Ffc3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMIFJTQVNURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7Ci0rCQlnb3RvIGVu ZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5kOgotKwotKwlpZiAocmV0KQot KwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQotKwkJ ZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0rCQlmY2xvc2Uob3V0 KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgUlNBX1RFU1RfTUFYTElO RUxFTgkxMDI0MAotKwotK2ludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNh bHRsZW4pCi0rCXsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7Ci0rCWNoYXIg KmtleXdvcmQsICp2YWx1ZTsKLSsJUlNBICpyc2EgPSBOVUxMOwotKwljb25zdCBFVlBfTUQgKmRn c3QgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMOwotKwlsb25nIE1zZ2xlbiA9 IC0xOwotKwlpbnQga2V5bGVuID0gLTEsIGN1cnJlbnRfa2V5bGVuID0gLTE7Ci0rCWludCByZXQg PSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNB X1RFU1RfTUFYTElORUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9N QVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJy b3I7Ci0rCi0rCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4p KQotKwkJewotKwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtl eXdvcmQgPSBsaW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAo aXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJ LyogTG9vayBmb3IgPSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0r CQkvKiBJZiBubyA9IGp1c3QgY29weSAqLwotKwkJaWYgKCFwKQotKwkJCXsKLSsJCQlpZiAoZnB1 dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwot KwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAq LwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwot KwotKwkJKnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5n IHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2 YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9t IHZhbHVlICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxl ICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAw OwotKwotKwkJLyogTG9vayBmb3IgW21vZCA9IFhYWF0gZm9yIGtleSBsZW5ndGggKi8KLSsKLSsJ CWlmICghc3RyY21wKGtleXdvcmQsICJbbW9kIikpCi0rCQkJewotKwkJCXAgPSB2YWx1ZSArIHN0 cmxlbih2YWx1ZSkgLSAxOwotKwkJCWlmICgqcCAhPSAnXScpCi0rCQkJCWdvdG8gcGFyc2VfZXJy b3I7Ci0rCQkJKnAgPSAwOwotKwkJCWtleWxlbiA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChrZXls ZW4gPCAwKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIlNIQUFsZyIpKQotKwkJCXsKLSsJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNI QTEiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGExKCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1 ZSwgIlNIQTIyNCIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOwotKwkJCWVsc2UgaWYgKCFz dHJjbXAodmFsdWUsICJTSEEyNTYiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKLSsJCQll bHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMzg0 KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQotKwkJCQlkZ3N0ID0g RVZQX3NoYTUxMigpOwotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwKLSsJ CQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKLSsJCQkJCQkJCXZh bHVlKTsKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlpZiAoTXNnKQotKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOwotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJCQkJKigtLXZhbHVl KSA9ICcwJzsKLSsJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOwotKwkJCWlmICgh TXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsKLSsJCWZwdXRzKG9saW5lYnVm LCBvdXQpOwotKwotKwkJLyogSWYga2V5IGxlbmd0aCBoYXMgY2hhbmdlZCwgZ2VuZXJhdGUgYW5k IG91dHB1dCBwdWJsaWMKLSsJCSAqIGtleSBjb21wb25lbnRzIG9mIG5ldyBSU0EgcHJpdmF0ZSBr ZXkuCi0rCQkgKi8KLSsKLSsJCWlmIChrZXlsZW4gIT0gY3VycmVudF9rZXlsZW4pCi0rCQkJewot KwkJCUJJR05VTSAqYm5fZTsKLSsJCQlpZiAocnNhKQotKwkJCQlGSVBTX3JzYV9mcmVlKHJzYSk7 Ci0rCQkJcnNhID0gRklQU19yc2FfbmV3KCk7Ci0rCQkJaWYgKCFyc2EpCi0rCQkJCWdvdG8gZXJy b3I7Ci0rCQkJYm5fZSA9IEJOX25ldygpOwotKwkJCWlmICghYm5fZSB8fCAhQk5fc2V0X3dvcmQo Ym5fZSwgMHgxMDAxKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlpZiAoIVJTQV9YOTMxX2dlbmVy YXRlX2tleV9leChyc2EsIGtleWxlbiwgYm5fZSwgTlVMTCkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0r CQkJQk5fZnJlZShibl9lKTsKLSsJCQlmcHV0cygibiA9ICIsIG91dCk7Ci0rCQkJZG9fYm5fcHJp bnQob3V0LCByc2EtPm4pOwotKwkJCWZwdXRzKCJcbmUgPSAiLCBvdXQpOwotKwkJCWRvX2JuX3By aW50KG91dCwgcnNhLT5lKTsKLSsJCQlmcHV0cygiXG4iLCBvdXQpOwotKwkJCWN1cnJlbnRfa2V5 bGVuID0ga2V5bGVuOwotKwkJCX0KLSsKLSsJCWlmIChNc2cgJiYgZGdzdCkKLSsJCQl7Ci0rCQkJ aWYgKCFyc2FfcHJpbnRzaWcob3V0LCByc2EsIGRnc3QsIE1zZywgTXNnbGVuLAotKwkJCQkJCQkJ U2FsdGxlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCQkJ TXNnID0gTlVMTDsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgot KwotKwlpZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwotKwlpZiAobGlu ZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsJaWYgKHJzYSkKLSsJCUZJUFNfcnNh X2ZyZWUocnNhKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZw cmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBs bnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50 c2lnKEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVk IGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKQotKwl7Ci0rCWludCByZXQgPSAw OwotKwl1bnNpZ25lZCBjaGFyICpzaWdidWYgPSBOVUxMOwotKwlpbnQgaSwgc2lnbGVuOwotKwkv KiBFVlBfUEtFWSBzdHJ1Y3R1cmUgKi8KLSsJRVZQX1BLRVkgcGs7Ci0rCUVWUF9NRF9DVFggY3R4 OwotKwlway50eXBlID0gRVZQX1BLRVlfUlNBOwotKwlway5wa2V5LnJzYSA9IHJzYTsKLSsKLSsJ c2lnbGVuID0gUlNBX3NpemUocnNhKTsKLSsJc2lnYnVmID0gT1BFTlNTTF9tYWxsb2Moc2lnbGVu KTsKLSsJaWYgKCFzaWdidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwlFVlBfTURfQ1RYX2luaXQo JmN0eCk7Ci0rCi0rCWlmIChTYWx0bGVuID49IDApCi0rCQl7Ci0rCQlNX0VWUF9NRF9DVFhfc2V0 X2ZsYWdzKCZjdHgsCi0rCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgfCAoU2FsdGxlbiA8PCAx NikpOwotKwkJfQotKwllbHNlIGlmIChTYWx0bGVuID09IC0yKQotKwkJTV9FVlBfTURfQ1RYX3Nl dF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOwotKwlpZiAoIUVWUF9TaWdu SW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1Np Z25VcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBf U2lnbkZpbmFsKCZjdHgsIHNpZ2J1ZiwgKHVuc2lnbmVkIGludCAqKSZzaWdsZW4sICZwaykpCi0r CQlnb3RvIGVycm9yOwotKwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCWZwdXRz KCJTID0gIiwgb3V0KTsKLSsKLSsJZm9yIChpID0gMDsgaSA8IHNpZ2xlbjsgaSsrKQotKwkJZnBy aW50ZihvdXQsICIlMDJYIiwgc2lnYnVmW2ldKTsKLSsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsK LSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCi0tLS0g b3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBzCTIwMTAt MDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCAr MDIwMAotQEAgLTAsMCArMSwzNzcgQEAKLSsvKiBmaXBzX3JzYXZ0ZXN0LmMgKi8KLSsvKiBXcml0 dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9w ZW5TU0wKLSsgKiBwcm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0r ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4K LSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhA Y3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5j bHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv YmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1h Yy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2 My5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsgICAg cmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwot K2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgc2FsdGxlbik7Ci0rc3RhdGlj IGludCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAotKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCi0r CQljb25zdCBFVlBfTUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVu LAotKwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbik7Ci0rCi0raW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91 dCA9IE5VTEw7Ci0rCi0rCWludCByZXQgPSAxOwotKwlpbnQgU2FsdGxlbiA9IC0xOwotKwotKwlp ZighRklQU19tb2RlX3NldCgxKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZ290 byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwg YXJndlsxXSkpCi0rCQl7Ci0rCQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKLSsJCWlmIChTYWx0 bGVuIDwgMCkKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0 IGxlbmd0aFxuIik7Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwkJYXJnYyAtPSAyOwotKwkJYXJn diArPSAyOwotKwkJfQotKwllbHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwg YXJndlsxXSkpCi0rCQl7Ci0rCQlTYWx0bGVuID0gLTI7Ci0rCQlhcmdjLS07Ci0rCQlhcmd2Kys7 Ci0rCQl9Ci0rCi0rCWlmIChhcmdjID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0rCQlp biA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9IHN0 ZG91dDsKLSsJZWxzZQotKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYgKCFp bikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24g ZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewotKwkJ ZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwot KwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghcnNhX3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikp Ci0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQVZURVNUIGZpbGUgcHJvY2Vzc2lu ZyBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsK LSsJZW5kOgotKwotKwlpZiAocmV0KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChp biAmJiAoaW4gIT0gc3RkaW4pKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9 IHN0ZG91dCkpCi0rCQlmY2xvc2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwot KyNkZWZpbmUgUlNBX1RFU1RfTUFYTElORUxFTgkxMDI0MAotKwotK2ludCByc2FfdGVzdChGSUxF ICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xp bmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwljb25zdCBFVlBfTUQg KmRnc3QgPSBOVUxMOwotKwlCSUdOVU0gKm4gPSBOVUxMLCAqZSA9IE5VTEw7Ci0rCXVuc2lnbmVk IGNoYXIgKk1zZyA9IE5VTEwsICpTID0gTlVMTDsKLSsJbG9uZyBNc2dsZW4sIFNsZW47Ci0rCWlu dCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxs b2MoUlNBX1RFU1RfTUFYTElORUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ff VEVTVF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdv dG8gZXJyb3I7Ci0rCi0rCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxF TiwgaW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsK LSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3 aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwot KwotKwkJLyogTG9vayBmb3IgPSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7 Ci0rCi0rCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5l KSBqdXN0IGNvcHkgKi8KLSsJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQotKwkJCXsKLSsJCQlp ZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRp bnVlOwotKwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBz cGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0g PSAwOwotKwotKwkJKnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBs ZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBj aGFyKSp2YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFj ZSBmcm9tIHZhbHVlICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJ CXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpw LS0gPSAwOwotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKLSsJCQl7Ci0rCQkJaWYg KCFkb19oZXgyYm4oJm4sdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgy Ym4oJmUsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIlNIQUFsZyIpKQotKwkJCXsKLSsJCQlpZiAoIXN0cmNtcCh2YWx1 ZSwgIlNIQTEiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGExKCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNt cCh2YWx1ZSwgIlNIQTIyNCIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOwotKwkJCWVsc2Ug aWYgKCFzdHJjbXAodmFsdWUsICJTSEEyNTYiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsK LSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCi0rCQkJCWRnc3QgPSBFVlBf c2hhMzg0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQotKwkJCQlk Z3N0ID0gRVZQX3NoYTUxMigpOwotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVy ciwKLSsJCQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKLSsJCQkJ CQkJCXZhbHVlKTsKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkJfQotKwkJCX0KLSsJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlpZiAoTXNnKQotKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJCQkJKigt LXZhbHVlKSA9ICcwJzsKLSsJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOwotKwkJ CWlmICghTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIlMiKSkKLSsJCQl7Ci0rCQkJaWYgKFMpCi0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAn OwotKwkJCVMgPSBoZXgyYmluX20odmFsdWUsICZTbGVuKTsKLSsJCQlpZiAoIVMpCi0rCQkJCWdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUmVz dWx0IikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsK LSsJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJaWYgKG4gJiYgZSAmJiBNc2cgJiYgUyAm JiBkZ3N0KQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludHZlcihvdXQsIG4sIGUsIGRnc3QsCi0r CQkJCQlNc2csIE1zZ2xlbiwgUywgU2xlbiwgU2FsdGxlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0r CQkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJCQlPUEVOU1NMX2ZyZWUo Uyk7Ci0rCQkJUyA9IE5VTEw7Ci0rCQkJfQotKwotKwkJfQotKwotKwotKwlyZXQgPSAxOwotKwot KwotKwllcnJvcjoKLSsKLSsJaWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVm KTsKLSsJaWYgKGxpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChuKQot KwkJQk5fZnJlZShuKTsKLSsJaWYgKGUpCi0rCQlCTl9mcmVlKGUpOwotKwotKwlyZXR1cm4gcmV0 OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBl cnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwot Kwl9Ci0rCi0rc3RhdGljIGludCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAotKwkJQklHTlVNICpu LCBCSUdOVU0gKmUsCi0rCQljb25zdCBFVlBfTUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFyICpN c2csIGxvbmcgTXNnbGVuLAotKwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2Fs dGxlbikKLSsJewotKwlpbnQgcmV0ID0gMCwgcjsKLSsJLyogU2V0dXAgUlNBIGFuZCBFVlBfUEtF WSBzdHJ1Y3R1cmVzICovCi0rCVJTQSAqcnNhX3B1YmtleSA9IE5VTEw7Ci0rCUVWUF9QS0VZIHBr OwotKwlFVlBfTURfQ1RYIGN0eDsKLSsJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKLSsJcnNh X3B1YmtleSA9IEZJUFNfcnNhX25ldygpOwotKwlpZiAoIXJzYV9wdWJrZXkpCi0rCQlnb3RvIGVy cm9yOwotKwlyc2FfcHVia2V5LT5uID0gQk5fZHVwKG4pOwotKwlyc2FfcHVia2V5LT5lID0gQk5f ZHVwKGUpOwotKwlpZiAoIXJzYV9wdWJrZXktPm4gfHwgIXJzYV9wdWJrZXktPmUpCi0rCQlnb3Rv IGVycm9yOwotKwlway50eXBlID0gRVZQX1BLRVlfUlNBOwotKwlway5wa2V5LnJzYSA9IHJzYV9w dWJrZXk7Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKFNhbHRsZW4gPj0g MCkKLSsJCXsKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKLSsJCQlFVlBfTURfQ1RY X0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7Ci0rCQl9Ci0rCWVsc2UgaWYgKFNhbHRs ZW4gPT0gLTIpCi0rCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxB R19QQURfWDkzMSk7Ci0rCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkp Ci0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJmN0eCwgTXNnLCBNc2ds ZW4pKQotKwkJZ290byBlcnJvcjsKLSsKLSsJciA9IEVWUF9WZXJpZnlGaW5hbCgmY3R4LCBTLCBT bGVuLCAmcGspOwotKwotKwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCWlmIChy IDwgMCkKLSsJCWdvdG8gZXJyb3I7Ci0rCUVSUl9jbGVhcl9lcnJvcigpOwotKwotKwlpZiAociA9 PSAwKQotKwkJZnB1dHMoIlJlc3VsdCA9IEZcbiIsIG91dCk7Ci0rCWVsc2UKLSsJCWZwdXRzKCJS ZXN1bHQgPSBQXG4iLCBvdXQpOwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsJaWYgKHJz YV9wdWJrZXkpCi0rCQlGSVBTX3JzYV9mcmVlKHJzYV9wdWJrZXkpOwotKwlpZiAoYnVmKQotKwkJ T1BFTlNTTF9mcmVlKGJ1Zik7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYwotLS0tIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzCTIwMTAtMDMtMzAgMTA6 MzM6NDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfc2hhdGVzdC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAt MCwwICsxLDM4OCBAQAotKy8qIGZpcHNfc2hhdGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBT dGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICog cHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAy MDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAot KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK LSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0r ICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBi eSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5j b20pLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPGN0eXBl Lmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rCi0rI2lm bmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQot K3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFNIQVhYWCBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJu KDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3N0YXRp YyBpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOwotK3N0YXRpYyBpbnQgcHJpbnRf ZGdzdChjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2cs IGludCBNc2dsZW4pOwotK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQX01EICptZCwg RklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4pOwotKwotK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxFICppbiA9IE5VTEwsICpv dXQgPSBOVUxMOwotKwotKwlpbnQgcmV0ID0gMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkp Ci0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlp ZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2 WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UK LSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJ CWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJy LCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwot KwkJfQotKwotKwlpZiAoIWRnc3RfdGVzdChvdXQsIGluKSkKLSsJCXsKLSsJCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUwgZGlnZXN0IGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7Ci0rCQlnb3RvIGVu ZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5kOgotKwotKwlpZiAocmV0KQot KwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQotKwkJ ZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0rCQlmY2xvc2Uob3V0 KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgU0hBX1RFU1RfTUFYX0JJ VFMJMTAyNDAwCi0rI2RlZmluZSBTSEFfVEVTVF9NQVhMSU5FTEVOCSgoKFNIQV9URVNUX01BWF9C SVRTID4+IDMpICogMikgKyAxMDApCi0rCi0raW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJTEUg KmluKQotKwl7Ci0rCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOwotKwljaGFyICpsaW5lYnVmLCAq b2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwl1bnNpZ25lZCBj aGFyICpNc2cgPSBOVUxMLCAqU2VlZCA9IE5VTEw7Ci0rCWxvbmcgTXNnTGVuID0gLTEsIExlbiA9 IC0xLCBTZWVkTGVuID0gLTE7Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0r CW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7Ci0rCWxpbmVi dWYgPSBPUEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFsaW5l YnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCi0rCXdoaWxlIChmZ2V0cyhv bGluZWJ1ZiwgU0hBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJ c3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyog U2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikq a2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9vayBmb3IgPSBzaWduICovCi0r CQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3 aXRoIFsgKGZvciBbTD0yMF0gbGluZSkganVzdCBjb3B5ICovCi0rCQlpZiAoIXApCi0rCQkJewot KwkJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCXEg PSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAwOwot KwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFs dWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFs dWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQlw ID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJaWYgKCFzdHJj bXAoa2V5d29yZCwiW0wiKSAmJiAqcD09J10nKQotKwkJCXsKLSsJCQlzd2l0Y2ggKGF0b2kodmFs dWUpKQotKwkJCQl7Ci0rCQkJCWNhc2UgMjA6IG1kPUVWUF9zaGExKCk7ICAgYnJlYWs7Ci0rCQkJ CWNhc2UgMjg6IG1kPUVWUF9zaGEyMjQoKTsgYnJlYWs7Ci0rCQkJCWNhc2UgMzI6IG1kPUVWUF9z aGEyNTYoKTsgYnJlYWs7Ci0rCQkJCWNhc2UgNDg6IG1kPUVWUF9zaGEzODQoKTsgYnJlYWs7Ci0r CQkJCWNhc2UgNjQ6IG1kPUVWUF9zaGE1MTIoKTsgYnJlYWs7Ci0rCQkJCWRlZmF1bHQ6IGdvdG8g cGFyc2VfZXJyb3I7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJMZW4iKSkKLSsJCQl7Ci0rCQkJaWYgKExlbiAhPSAtMSkKLSsJCQkJZ290byBwYXJzZV9lcnJv cjsKLSsJCQlMZW4gPSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoTGVuIDwgMCkKLSsJCQkJZ290byBw YXJzZV9lcnJvcjsKLSsJCQkvKiBPbmx5IGhhbmRsZSBtdWx0aXBsZXMgb2YgOCBiaXRzICovCi0r CQkJaWYgKExlbiAmIDB4NykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoTGVuID4g U0hBX1RFU1RfTUFYX0JJVFMpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJTXNnTGVuID0g TGVuID4+IDM7Ci0rCQkJfQotKwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikp Ci0rCQkJewotKwkJCWxvbmcgdG1wbGVuOwotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJ CQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJCQlpZiAoTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJnRtcGxlbik7Ci0rCQkJaWYgKCFNc2cpCi0r CQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAiU2VlZCIpKQotKwkJCXsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12 YWx1ZSkgPSAnMCc7Ci0rCQkJaWYgKFNlZWQpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ U2VlZCA9IGhleDJiaW5fbSh2YWx1ZSwgJlNlZWRMZW4pOwotKwkJCWlmICghU2VlZCkKLSsJCQkJ Z290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJN RCIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZQotKwkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCi0r CQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsKLSsJCWlmIChtZCAmJiBNc2cgJiYgKE1zZ0xlbiA+ PSAwKSkKLSsJCQl7Ci0rCQkJaWYgKCFwcmludF9kZ3N0KG1kLCBvdXQsIE1zZywgTXNnTGVuKSkK LSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxM OwotKwkJCU1zZ0xlbiA9IC0xOwotKwkJCUxlbiA9IC0xOwotKwkJCX0KLSsJCWVsc2UgaWYgKG1k ICYmIFNlZWQgJiYgKFNlZWRMZW4gPiAwKSkKLSsJCQl7Ci0rCQkJaWYgKCFwcmludF9tb250ZSht ZCwgb3V0LCBTZWVkLCBTZWVkTGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2Zy ZWUoU2VlZCk7Ci0rCQkJU2VlZCA9IE5VTEw7Ci0rCQkJU2VlZExlbiA9IC0xOwotKwkJCX0KLSsJ Ci0rCi0rCQl9Ci0rCi0rCi0rCXJldCA9IDE7Ci0rCi0rCi0rCWVycm9yOgotKwotKwlpZiAob2xp bmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwotKwlpZiAobGluZWJ1ZikKLSsJCU9Q RU5TU0xfZnJlZShsaW5lYnVmKTsKLSsJaWYgKE1zZykKLSsJCU9QRU5TU0xfZnJlZShNc2cpOwot KwlpZiAoU2VlZCkKLSsJCU9QRU5TU0xfZnJlZShTZWVkKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsK LSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3Ig cHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJfQot KwotK3N0YXRpYyBpbnQgcHJpbnRfZGdzdChjb25zdCBFVlBfTUQgKmVtZCwgRklMRSAqb3V0LAot KwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuKQotKwl7Ci0rCWludCBpLCBtZGxlbjsK LSsJdW5zaWduZWQgY2hhciBtZFtFVlBfTUFYX01EX1NJWkVdOwotKwlpZiAoIUVWUF9EaWdlc3Qo TXNnLCBNc2dsZW4sIG1kLCAodW5zaWduZWQgaW50ICopJm1kbGVuLCBlbWQsIE5VTEwpKQotKwkJ ewotKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIEhBU0hcbiIsIHN0ZGVycik7Ci0rCQlyZXR1 cm4gMDsKLSsJCX0KLSsJZnB1dHMoIk1EID0gIiwgb3V0KTsKLSsJZm9yIChpID0gMDsgaSA8IG1k bGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtZFtpXSk7Ci0rCWZwdXRzKCJcbiIs IG91dCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBwcmludF9tb250ZShjb25z dCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQgU2Vl ZExlbikKLSsJewotKwl1bnNpZ25lZCBpbnQgaSwgaiwgazsKLSsJaW50IHJldCA9IDA7Ci0rCUVW UF9NRF9DVFggY3R4OwotKwl1bnNpZ25lZCBjaGFyICptMSwgKm0yLCAqbTMsICpwOwotKwl1bnNp Z25lZCBpbnQgbWxlbiwgbTFsZW4sIG0ybGVuLCBtM2xlbjsKLSsKLSsJRVZQX01EX0NUWF9pbml0 KCZjdHgpOwotKwotKwlpZiAoU2VlZExlbiA+IEVWUF9NQVhfTURfU0laRSkKLSsJCW1sZW4gPSBT ZWVkTGVuOwotKwllbHNlCi0rCQltbGVuID0gRVZQX01BWF9NRF9TSVpFOwotKwotKwltMSA9IE9Q RU5TU0xfbWFsbG9jKG1sZW4pOwotKwltMiA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOwotKwltMyA9 IE9QRU5TU0xfbWFsbG9jKG1sZW4pOwotKwotKwlpZiAoIW0xIHx8ICFtMiB8fCAhbTMpCi0rCQln b3RvIG1jX2Vycm9yOwotKwotKwltMWxlbiA9IG0ybGVuID0gbTNsZW4gPSBTZWVkTGVuOwotKwlt ZW1jcHkobTEsIFNlZWQsIFNlZWRMZW4pOwotKwltZW1jcHkobTIsIFNlZWQsIFNlZWRMZW4pOwot KwltZW1jcHkobTMsIFNlZWQsIFNlZWRMZW4pOwotKwotKwlmcHV0cygiXG4iLCBvdXQpOwotKwot Kwlmb3IgKGogPSAwOyBqIDwgMTAwOyBqKyspCi0rCQl7Ci0rCQlmb3IgKGkgPSAwOyBpIDwgMTAw MDsgaSsrKQotKwkJCXsKLSsJCQlFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBtZCwgTlVMTCk7Ci0r CQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMSwgbTFsZW4pOwotKwkJCUVWUF9EaWdlc3RVcGRh dGUoJmN0eCwgbTIsIG0ybGVuKTsKLSsJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0zLCBtM2xl bik7Ci0rCQkJcCA9IG0xOwotKwkJCW0xID0gbTI7Ci0rCQkJbTFsZW4gPSBtMmxlbjsKLSsJCQlt MiA9IG0zOwotKwkJCW0ybGVuID0gbTNsZW47Ci0rCQkJbTMgPSBwOwotKwkJCUVWUF9EaWdlc3RG aW5hbF9leCgmY3R4LCBtMywgJm0zbGVuKTsKLSsJCQl9Ci0rCQlmcHJpbnRmKG91dCwgIkNPVU5U ID0gJWRcbiIsIGopOwotKwkJZnB1dHMoIk1EID0gIiwgb3V0KTsKLSsJCWZvciAoayA9IDA7IGsg PCBtM2xlbjsgaysrKQotKwkJCWZwcmludGYob3V0LCAiJTAyeCIsIG0zW2tdKTsKLSsJCWZwdXRz KCJcblxuIiwgb3V0KTsKLSsJCW1lbWNweShtMSwgbTMsIG0zbGVuKTsKLSsJCW1lbWNweShtMiwg bTMsIG0zbGVuKTsKLSsJCW0xbGVuID0gbTJsZW4gPSBtM2xlbjsKLSsJCX0KLSsKLSsJcmV0ID0g MTsKLSsKLSsJbWNfZXJyb3I6Ci0rCWlmIChtMSkKLSsJCU9QRU5TU0xfZnJlZShtMSk7Ci0rCWlm IChtMikKLSsJCU9QRU5TU0xfZnJlZShtMik7Ci0rCWlmIChtMykKLSsJCU9QRU5TU0xfZnJlZSht Myk7Ci0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJ fQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfdXRsLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaAot LS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oLmZpcHMJMjAxMC0w My0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9m aXBzL2NhdnMvZmlwc191dGwuaAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAot QEAgLTAsMCArMSwzNDMgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAw NyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSt2b2lkIGRv X3ByaW50X2Vycm9ycyh2b2lkKQotKwl7Ci0rCWNvbnN0IGNoYXIgKmZpbGUsICpkYXRhOwotKwlp bnQgbGluZSwgZmxhZ3M7Ci0rCXVuc2lnbmVkIGxvbmcgbDsKLSsJd2hpbGUgKChsID0gRVJSX2dl dF9lcnJvcl9saW5lX2RhdGEoJmZpbGUsICZsaW5lLCAmZGF0YSwgJmZsYWdzKSkpCi0rCQl7Ci0r CQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiVseDpsaWI9JWQsZnVuYz0lZCxyZWFzb249JWQiCi0r CQkJCSI6ZmlsZT0lczpsaW5lPSVkOiVzXG4iLAotKwkJCWwsIEVSUl9HRVRfTElCKGwpLCBFUlJf R0VUX0ZVTkMobCksIEVSUl9HRVRfUkVBU09OKGwpLAotKwkJCWZpbGUsIGxpbmUsIGZsYWdzICYg RVJSX1RYVF9TVFJJTkcgPyBkYXRhIDogIiIpOwotKwkJfQotKwl9Ci0rCi0raW50IGhleDJiaW4o Y29uc3QgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKLSsgICAgewotKyAgICBpbnQgbjEs IG4yOwotKyAgICB1bnNpZ25lZCBjaGFyIGNoOwotKwotKyAgICBmb3IgKG4xPTAsbjI9MCA7IGlu W24xXSAmJiBpbltuMV0gIT0gJ1xuJyA7ICkKLSsJeyAvKiBmaXJzdCBieXRlICovCi0rCWlmICgo aW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScpKQotKwkgICAgY2ggPSBpbltuMSsrXSAt ICcwJzsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKLSsJ ICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnYScp ICYmIChpbltuMV0gPD0gJ2YnKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKLSsJ ZWxzZQotKwkgICAgcmV0dXJuIC0xOwotKwlpZighaW5bbjFdKQotKwkgICAgewotKwkgICAgb3V0 W24yKytdPWNoOwotKwkgICAgYnJlYWs7Ci0rCSAgICB9Ci0rCW91dFtuMl0gPSBjaCA8PCA0Owot KwkvKiBzZWNvbmQgYnl0ZSAqLwotKwlpZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0g JzknKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnMCc7Ci0rCWVsc2UgaWYgKChpbltuMV0gPj0g J0EnKSAmJiAoaW5bbjFdIDw9ICdGJykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7 Ci0rCWVsc2UgaWYgKChpbltuMV0gPj0gJ2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCi0rCSAgICBj aCA9IGluW24xKytdIC0gJ2EnICsgMTA7Ci0rCWVsc2UKLSsJICAgIHJldHVybiAtMTsKLSsJb3V0 W24yKytdIHw9IGNoOwotKwl9Ci0rICAgIHJldHVybiBuMjsKLSsgICAgfQotKwotK3Vuc2lnbmVk IGNoYXIgKmhleDJiaW5fbShjb25zdCBjaGFyICppbiwgbG9uZyAqcGxlbikKLSsJewotKwl1bnNp Z25lZCBjaGFyICpwOwotKwlwID0gT1BFTlNTTF9tYWxsb2MoKHN0cmxlbihpbikgKyAxKS8yKTsK LSsJKnBsZW4gPSBoZXgyYmluKGluLCBwKTsKLSsJcmV0dXJuIHA7Ci0rCX0KLSsKLStpbnQgZG9f aGV4MmJuKEJJR05VTSAqKnByLCBjb25zdCBjaGFyICppbikKLSsJewotKwl1bnNpZ25lZCBjaGFy ICpwOwotKwlsb25nIHBsZW47Ci0rCWludCByID0gMDsKLSsJcCA9IGhleDJiaW5fbShpbiwgJnBs ZW4pOwotKwlpZiAoIXApCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCEqcHIpCi0rCQkqcHIgPSBCTl9u ZXcoKTsKLSsJaWYgKCEqcHIpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKEJOX2JpbjJibihwLCBwbGVu LCAqcHIpKQotKwkJciA9IDE7Ci0rCU9QRU5TU0xfZnJlZShwKTsKLSsJcmV0dXJuIHI7Ci0rCX0K LSsKLStpbnQgZG9fYm5fcHJpbnQoRklMRSAqb3V0LCBCSUdOVU0gKmJuKQotKwl7Ci0rCWludCBs ZW4sIGk7Ci0rCXVuc2lnbmVkIGNoYXIgKnRtcDsKLSsJbGVuID0gQk5fbnVtX2J5dGVzKGJuKTsK LSsJaWYgKGxlbiA9PSAwKQotKwkJewotKwkJZnB1dHMoIjAwIiwgb3V0KTsKLSsJCXJldHVybiAx OwotKwkJfQotKwotKwl0bXAgPSBPUEVOU1NMX21hbGxvYyhsZW4pOwotKwlpZiAoIXRtcCkKLSsJ CXsKLSsJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotKwkJ cmV0dXJuIDA7Ci0rCQl9Ci0rCUJOX2JuMmJpbihibiwgdG1wKTsKLSsJZm9yIChpID0gMDsgaSA8 IGxlbjsgaSsrKQotKwkJZnByaW50ZihvdXQsICIlMDJ4IiwgdG1wW2ldKTsKLSsJT1BFTlNTTF9m cmVlKHRtcCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50IGRvX2JuX3ByaW50X25hbWUoRklM RSAqb3V0LCBjb25zdCBjaGFyICpuYW1lLCBCSUdOVU0gKmJuKQotKwl7Ci0rCWludCByOwotKwlm cHJpbnRmKG91dCwgIiVzID0gIiwgbmFtZSk7Ci0rCXIgPSBkb19ibl9wcmludChvdXQsIGJuKTsK LSsJaWYgKCFyKQotKwkJcmV0dXJuIDA7Ci0rCWZwdXRzKCJcbiIsIG91dCk7Ci0rCXJldHVybiAx OwotKwl9Ci0rCi0raW50IHBhcnNlX2xpbmUoY2hhciAqKnBrdywgY2hhciAqKnB2YWwsIGNoYXIg KmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQotKwl7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZSwg KnAsICpxOwotKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwlrZXl3b3JkID0gbGluZWJ1 ZjsKLSsJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSprZXl3b3JkKSkKLSsJCWtleXdvcmQrKzsKLSsKLSsJLyogTG9vayBmb3IgPSBzaWdu ICovCi0rCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJLyogSWYgbm8gJz0nIGV4aXQg Ki8KLSsJaWYgKCFwKQotKwkJcmV0dXJuIDA7Ci0rCi0rCXEgPSBwIC0gMTsKLSsKLSsJLyogUmVt b3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpx KSkKLSsJCSpxLS0gPSAwOwotKwotKwkqcCA9IDA7Ci0rCXZhbHVlID0gcCArIDE7Ci0rCi0rCS8q IFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCXZhbHVlKys7Ci0rCi0rCS8qIFJlbW92ZSB0cmFpbGlu ZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwot KwotKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJ CSpwLS0gPSAwOwotKwotKwkqcGt3ID0ga2V5d29yZDsKLSsJKnB2YWwgPSB2YWx1ZTsKLSsJcmV0 dXJuIDE7Ci0rCX0KLSsKLStCSUdOVU0gKmhleDJibihjb25zdCBjaGFyICppbikKLSsgICAgewot KyAgICBCSUdOVU0gKnA9TlVMTDsKLSsKLSsgICAgaWYgKCFkb19oZXgyYm4oJnAsIGluKSkKLSsJ cmV0dXJuIE5VTEw7Ci0rCi0rICAgIHJldHVybiBwOwotKyAgICB9Ci0rCi0raW50IGJpbjJoZXgo Y29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxlbixjaGFyICpvdXQpCi0rICAgIHsKLSsgICAg aW50IG4xLCBuMjsKLSsgICAgdW5zaWduZWQgY2hhciBjaDsKLSsKLSsgICAgZm9yIChuMT0wLG4y PTAgOyBuMSA8IGxlbiA7ICsrbjEpCi0rCXsKLSsJY2g9aW5bbjFdID4+IDQ7Ci0rCWlmIChjaCA8 PSAweDA5KQotKwkgICAgb3V0W24yKytdPWNoKycwJzsKLSsJZWxzZQotKwkgICAgb3V0W24yKytd PWNoLTEwKydhJzsKLSsJY2g9aW5bbjFdICYgMHgwZjsKLSsJaWYoY2ggPD0gMHgwOSkKLSsJICAg IG91dFtuMisrXT1jaCsnMCc7Ci0rCWVsc2UKLSsJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7Ci0r CX0KLSsgICAgb3V0W24yXT0nXDAnOwotKyAgICByZXR1cm4gbjI7Ci0rICAgIH0KLSsKLSt2b2lk IHB2KGNvbnN0IGNoYXIgKnRhZyxjb25zdCB1bnNpZ25lZCBjaGFyICp2YWwsaW50IGxlbikKLSsg ICAgewotKyAgICBjaGFyIG9idWZbMjA0OF07Ci0rCi0rICAgIGJpbjJoZXgodmFsLGxlbixvYnVm KTsKLSsgICAgcHJpbnRmKCIlcyA9ICVzXG4iLHRhZyxvYnVmKTsKLSsgICAgfQotKwotKy8qIFRv IGF2b2lkIGV4dGVuc2l2ZSBjaGFuZ2VzIHRvIHRlc3QgcHJvZ3JhbSBhdCB0aGlzIHN0YWdlIGp1 c3QgY29udmVydAotKyAqIHRoZSBpbnB1dCBsaW5lIGludG8gYW4gYWNjZXB0YWJsZSBmb3JtLiBL ZXl3b3JkIGxpbmVzIGNvbnZlcnRlZCB0byBmb3JtCi0rICogImtleXdvcmQgPSB2YWx1ZVxuIiBu byBtYXR0ZXIgd2hhdCB3aGl0ZSBzcGFjZSBwcmVzZW50LCBhbGwgb3RoZXIgbGluZXMKLSsgKiBq dXN0IGhhdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UgcmVtb3ZlZC4KLSsgKi8KLSsKLStp bnQgdGlkeV9saW5lKGNoYXIgKmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQotKwl7Ci0rCWNoYXIg KmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOwotKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwot KwlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCWtleXdvcmQrKzsKLSsJLyog TG9vayBmb3IgPSBzaWduICovCi0rCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJLyog SWYgbm8gJz0nIGp1c3QgY2hvcCBsZWFkaW5nLCB0cmFpbGluZyB3cyAqLwotKwlpZiAoIXApCi0r CQl7Ci0rCQlwID0ga2V5d29yZCArIHN0cmxlbihrZXl3b3JkKSAtIDE7Ci0rCQl3aGlsZSAoKnAg PT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsJ CXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7Ci0rCQlzdHJjYXQob2xpbmVidWYsICJcbiIpOwot KwkJcmV0dXJuIDE7Ci0rCQl9Ci0rCi0rCXEgPSBwIC0gMTsKLSsKLSsJLyogUmVtb3ZlIHRyYWls aW5nIHNwYWNlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCSpx LS0gPSAwOwotKwotKwkqcCA9IDA7Ci0rCXZhbHVlID0gcCArIDE7Ci0rCi0rCS8qIFJlbW92ZSBs ZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKnZhbHVlKSkKLSsJCXZhbHVlKys7Ci0rCi0rCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBm cm9tIHZhbHVlICovCi0rCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwl3aGls ZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCSpwLS0gPSAw OwotKwotKwlzdHJjcHkob2xpbmVidWYsIGtleXdvcmQpOwotKwlzdHJjYXQob2xpbmVidWYsICIg PSAiKTsKLSsJc3RyY2F0KG9saW5lYnVmLCB2YWx1ZSk7Ci0rCXN0cmNhdChvbGluZWJ1ZiwgIlxu Iik7Ci0rCi0rCXJldHVybiAxOwotKwl9Ci0rCi0rLyogTkI6IHRoaXMgcmV0dXJuIHRoZSBudW1i ZXIgb2YgX2JpdHNfIHJlYWQgKi8KLStpbnQgYmludDJiaW4oY29uc3QgY2hhciAqaW4sIGludCBs ZW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsKLSsgICAgbWVt c2V0KG91dCwwLGxlbik7Ci0rICAgIGZvcihuPTAgOyBuIDwgbGVuIDsgKytuKQotKwlpZihpbltu XSA9PSAnMScpCi0rCSAgICBvdXRbbi84XXw9KDB4ODAgPj4gKG4lOCkpOwotKyAgICByZXR1cm4g bGVuOwotKyAgICB9Ci0rCi0raW50IGJpbjJiaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLGlu dCBsZW4sY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAgICBmb3Iobj0wIDsg biA8IGxlbiA7ICsrbikKLSsJb3V0W25dPShpbltuLzhdJigweDgwID4+IChuJTgpKSkgPyAnMScg OiAnMCc7Ci0rICAgIHJldHVybiBuOwotKyAgICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0rdm9pZCBQcmludFZhbHVlKGNoYXIg KnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVuKQotK3sKLSsjaWYgVkVSQk9TRQotKyAg Y2hhciBvYnVmWzIwNDhdOwotKyAgaW50IG9sZW47Ci0rICBvbGVuID0gYmluMmhleCh2YWwsIGxl biwgb2J1Zik7Ci0rICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsj ZW5kaWYKLSt9Ci0rCi0rdm9pZCBPdXRwdXRWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIg KnZhbCwgaW50IGxlbiwgRklMRSAqcmZwLGludCBiaXRtb2RlKQotKyAgICB7Ci0rICAgIGNoYXIg b2J1ZlsyMDQ4XTsKLSsgICAgaW50IG9sZW47Ci0rCi0rICAgIGlmKGJpdG1vZGUpCi0rCW9sZW49 YmluMmJpbnQodmFsLGxlbixvYnVmKTsKLSsgICAgZWxzZQotKwlvbGVuPWJpbjJoZXgodmFsLGxl bixvYnVmKTsKLSsKLSsgICAgZnByaW50ZihyZnAsICIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwg b2J1Zik7Ci0rI2lmIFZFUkJPU0UKLSsgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xl biwgb2J1Zik7Ci0rI2VuZGlmCi0rICAgIH0KLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2ZpcHNfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzX2Vyci5jCi0tLS0g b3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwc19lcnIuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwc19lcnIuYwkyMDEw LTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw3IEBACi0rI2luY2x1 ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBp bmNsdWRlICJmaXBzX2Vyci5oIgotKyNlbHNlCi0rc3RhdGljIHZvaWQgKmR1bW15PSZkdW1teTsK LSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHNfZXJyLmguZmlwcyBv cGVuc3NsLTEuMC4wL2NyeXB0by9maXBzX2Vyci5oCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8v Zmlwc19lcnIuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwc19lcnIuaAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAw MDAwMCArMDIwMAotQEAgLTAsMCArMSwxMzcgQEAKLSsvKiBjcnlwdG8vZmlwc19lcnIuaCAqLwot Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot KyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlz dHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIK LSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAot KyAqICAgIG9wZW5zc2wtY29yZUBPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoK LSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcK LSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsg Ki8KLSsKLSsvKiBOT1RFOiB0aGlzIGZpbGUgd2FzIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBta2Vy ci5wbCBzY3JpcHQ6IGFueSBjaGFuZ2VzCi0rICogbWFkZSB0byBpdCB3aWxsIGJlIG92ZXJ3cml0 dGVuIHdoZW4gdGhlIHNjcmlwdCBuZXh0IHVwZGF0ZXMgdGhpcyBmaWxlLAotKyAqIG9ubHkgcmVh c29uIHN0cmluZ3Mgd2lsbCBiZSBwcmVzZXJ2ZWQuCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlv Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKwotKy8qIEJFR0lOIEVSUk9SIENPREVTICovCi0rI2lmbmRlZiBPUEVOU1NMX05PX0VSUgot KwotKyNkZWZpbmUgRVJSX0ZVTkMoZnVuYykgRVJSX1BBQ0soRVJSX0xJQl9GSVBTLGZ1bmMsMCkK LSsjZGVmaW5lIEVSUl9SRUFTT04ocmVhc29uKSBFUlJfUEFDSyhFUlJfTElCX0ZJUFMsMCxyZWFz b24pCi0rCi0rc3RhdGljIEVSUl9TVFJJTkdfREFUQSBGSVBTX3N0cl9mdW5jdHNbXT0KLSsJewot K3tFUlJfRlVOQyhGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMpLAkiREhfQlVJTFRJTl9HRU5Q QVJBTVMifSwKLSt7RVJSX0ZVTkMoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOKSwJIkRTQV9C VUlMVElOX1BBUkFNR0VOIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9EU0FfRE9fU0lHTiksCSJEU0Ff ZG9fc2lnbiJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0RPX1ZFUklGWSksCSJEU0FfZG9fdmVy aWZ5In0sCi0re0VSUl9GVU5DKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCksCSJFVlBfQ2lwaGVy SW5pdF9leCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgpLAkiRVZQX0Rp Z2VzdEluaXRfZXgifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfQ0hFQ0tfRFNBKSwJIkZJUFNf Q0hFQ0tfRFNBIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQ UklOVCksCSJGSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVCJ9LAotK3tFUlJfRlVOQyhGSVBT X0ZfRklQU19DSEVDS19SU0EpLAkiRklQU19DSEVDS19SU0EifSwKLSt7RVJSX0ZVTkMoRklQU19G X0ZJUFNfRFNBX0NIRUNLKSwJIkZJUFNfRFNBX0NIRUNLIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9G SVBTX01PREVfU0VUKSwJIkZJUFNfbW9kZV9zZXQifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNf UEtFWV9TSUdOQVRVUkVfVEVTVCksCSJmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QifSwKLSt7RVJS X0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTKSwJIkZJUFNfc2VsZnRlc3RfYWVzIn0sCi0r e0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUyksCSJGSVBTX3NlbGZ0ZXN0X2RlcyJ9 LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EpLAkiRklQU19zZWxmdGVzdF9k c2EifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQyksCSJGSVBTX3NlbGZ0 ZXN0X2htYWMifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HKSwJIkZJUFNf c2VsZnRlc3Rfcm5nIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEpLAki RklQU19zZWxmdGVzdF9zaGExIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9IQVNIX0ZJTkFMKSwJIkhB U0hfRklOQUwifSwKLSt7RVJSX0ZVTkMoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTiksCSJSU0Ff QlVJTFRJTl9LRVlHRU4ifSwKLSt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNS WVBUKSwJIlJTQV9FQVlfUFJJVkFURV9ERUNSWVBUIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9SU0Ff RUFZX1BSSVZBVEVfRU5DUllQVCksCSJSU0FfRUFZX1BSSVZBVEVfRU5DUllQVCJ9LAotK3tFUlJf RlVOQyhGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCksCSJSU0FfRUFZX1BVQkxJQ19ERUNS WVBUIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUKSwJIlJTQV9F QVlfUFVCTElDX0VOQ1JZUFQifSwKLSt7RVJSX0ZVTkMoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRF X0tFWV9FWCksCSJSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgifSwKLSt7RVJSX0ZVTkMoRklQU19G X1NTTEVBWV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCi0rezAsTlVMTH0KLSsJ fTsKLSsKLStzdGF0aWMgRVJSX1NUUklOR19EQVRBIEZJUFNfc3RyX3JlYXNvbnNbXT0KLSsJewot K3tFUlJfUkVBU09OKEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUpICAgICAgLCJjYW5ub3QgcmVhZCBl eGUifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJR0VTVCksImNhbm5v dCByZWFkIGV4ZSBkaWdlc3QifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfQ09OVFJBRElDVElOR19F VklERU5DRSksImNvbnRyYWRpY3RpbmcgZXZpZGVuY2UifSwKLSt7RVJSX1JFQVNPTihGSVBTX1Jf RVhFX0RJR0VTVF9ET0VTX05PVF9NQVRDSCksImV4ZSBkaWdlc3QgZG9lcyBub3QgbWF0Y2gifSwK LSt7RVJSX1JFQVNPTihGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpLCJmaW5nZXJw cmludCBkb2VzIG5vdCBtYXRjaCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9GSU5HRVJQUklOVF9E T0VTX05PVF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEKSwiZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0 Y2ggbm9ucGljIHJlbG9jYXRlZCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9GSU5HRVJQUklOVF9E T0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HKSwiZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0 Y2ggc2VnbWVudCBhbGlhc2luZyJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9GSVBTX01PREVfQUxS RUFEWV9TRVQpLCJmaXBzIG1vZGUgYWxyZWFkeSBzZXQifSwKLSt7RVJSX1JFQVNPTihGSVBTX1Jf RklQU19TRUxGVEVTVF9GQUlMRUQpICwiZmlwcyBzZWxmdGVzdCBmYWlsZWQifSwKLSt7RVJSX1JF QVNPTihGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKSAgICwiaW52YWxpZCBrZXkgbGVuZ3RoIn0s Ci0re0VSUl9SRUFTT04oRklQU19SX0tFWV9UT09fU0hPUlQpICAgICAgICAsImtleSB0b28gc2hv cnQifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKSAgICAgICwibm9uIGZp cHMgbWV0aG9kIn0sCi0re0VSUl9SRUFTT04oRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKSAs InBhaXJ3aXNlIHRlc3QgZmFpbGVkIn0sCi0re0VSUl9SRUFTT04oRklQU19SX1JTQV9ERUNSWVBU X0VSUk9SKSAgICAsInJzYSBkZWNyeXB0IGVycm9yIn0sCi0re0VSUl9SRUFTT04oRklQU19SX1JT QV9FTkNSWVBUX0VSUk9SKSAgICAsInJzYSBlbmNyeXB0IGVycm9yIn0sCi0re0VSUl9SRUFTT04o RklQU19SX1NFTEZURVNUX0ZBSUxFRCkgICAgICAsInNlbGZ0ZXN0IGZhaWxlZCJ9LAotK3tFUlJf UkVBU09OKEZJUFNfUl9URVNUX0ZBSUxVUkUpICAgICAgICAgLCJ0ZXN0IGZhaWx1cmUifSwKLSt7 RVJSX1JFQVNPTihGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0pICwidW5zdXBwb3J0ZWQgcGxh dGZvcm0ifSwKLSt7MCxOVUxMfQotKwl9OwotKwotKyNlbmRpZgotKwotK3ZvaWQgRVJSX2xvYWRf RklQU19zdHJpbmdzKHZvaWQpCi0rCXsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRVJSCi0rCi0rCWlm IChFUlJfZnVuY19lcnJvcl9zdHJpbmcoRklQU19zdHJfZnVuY3RzWzBdLmVycm9yKSA9PSBOVUxM KQotKwkJewotKwkJRVJSX2xvYWRfc3RyaW5ncygwLEZJUFNfc3RyX2Z1bmN0cyk7Ci0rCQlFUlJf bG9hZF9zdHJpbmdzKDAsRklQU19zdHJfcmVhc29ucyk7Ci0rCQl9Ci0rI2VuZGlmCi0rCX0KLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYy5maXBz IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwotLS0tIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDMtMzAg MTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9m aXBzX2Flc19zZWxmdGVzdC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1A QCAtMCwwICsxLDEwMyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAz IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK LSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRl IDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMgc3RydWN0Ci0rICAg IHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBsYWlu dGV4dFsxNl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsxNl07Ci0rICAgIH0gdGVz dHNbXT0KLSsJewotKwl7Ci0rCXsgMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiww eDA3LAotKwkgIDB4MDgsMHgwOSwweDBBLDB4MEIsMHgwQywweDBELDB4MEUsMHgwRiB9LAotKwl7 IDB4MDAsMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywKLSsJICAweDg4LDB4OTks MHhBQSwweEJCLDB4Q0MsMHhERCwweEVFLDB4RkYgfSwKLSsJeyAweDY5LDB4QzQsMHhFMCwweEQ4 LDB4NkEsMHg3QiwweDA0LDB4MzAsCi0rCSAgMHhEOCwweENELDB4QjcsMHg4MCwweDcwLDB4QjQs MHhDNSwweDVBIH0sCi0rCX0sCi0rCX07Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKCkKLSsg ICAgewotKyAgICB0ZXN0c1swXS5rZXlbMF0rKzsKLSsgICAgfQotKwotK2ludCBGSVBTX3NlbGZ0 ZXN0X2FlcygpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rICAgIGludCByZXQgPSAwOwotKyAgICBF VlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0r ICAgIGZvcihuPTAgOyBuIDwgMSA7ICsrbikKLSsJewotKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgm Y3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwKLSsJCQkJdGVzdHNbbl0ua2V5LCBOVUxMLAotKwkJCQl0 ZXN0c1tuXS5wbGFpbnRleHQsCi0rCQkJCXRlc3RzW25dLmNpcGhlcnRleHQsCi0rCQkJCTE2KSA8 PSAwKQotKwkJZ290byBlcnI7Ci0rCX0KLSsgICAgcmV0ID0gMTsKLSsgICAgZXJyOgotKyAgICBF VlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKyAgICBpZiAocmV0ID09IDApCi0rCSAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsK LSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHMu YwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHMJMjAxMC0wMy0zMCAx MDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2Zp cHMuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw0MTkg QEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0r ICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0 cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgot KyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0r ICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgot KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS Ci0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv aG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4K LSsjaW5jbHVkZSA8bGltaXRzLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rI2lmbmRl ZiBQQVRIX01BWAotKyNkZWZpbmUgUEFUSF9NQVggMTAyNAotKyNlbmRpZgotKwotK3N0YXRpYyBp bnQgZmlwc19zZWxmdGVzdF9mYWlsOwotK3N0YXRpYyBpbnQgZmlwc19tb2RlOwotK3N0YXRpYyBj b25zdCB2b2lkICpmaXBzX3JhbmRfY2hlY2s7Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19zZXRfbW9k ZShpbnQgb25vZmYpCi0rCXsKLSsJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190 aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewotKwkJaWYgKCFvd25p bmdfdGhyZWFkKSBmaXBzX3dfbG9jaygpOwotKwkJZmlwc19tb2RlID0gb25vZmY7Ci0rCQlpZiAo IW93bmluZ190aHJlYWQpIGZpcHNfd191bmxvY2soKTsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyB2 b2lkIGZpcHNfc2V0X3JhbmRfY2hlY2soY29uc3Qgdm9pZCAqcmFuZF9jaGVjaykKLSsJewotKwlp bnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOwotKwotKwlpZiAoZmlw c19pc19zdGFydGVkKCkpCi0rCQl7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd19sb2Nr KCk7Ci0rCQlmaXBzX3JhbmRfY2hlY2sgPSByYW5kX2NoZWNrOwotKwkJaWYgKCFvd25pbmdfdGhy ZWFkKSBmaXBzX3dfdW5sb2NrKCk7Ci0rCQl9Ci0rCX0KLSsKLStpbnQgRklQU19tb2RlKHZvaWQp Ci0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25p bmdfdGhyZWFkKCk7Ci0rCi0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJCXsKLSsJCWlmICgh b3duaW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKLSsJCXJldCA9IGZpcHNfbW9kZTsKLSsJCWlm ICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOwotKwkJfQotKwlyZXR1cm4gcmV0Owot Kwl9Ci0rCi0rY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNrKHZvaWQpCi0rCXsKLSsJY29uc3Qg dm9pZCAqcmV0ID0gMDsKLSsJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJl YWQoKTsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewotKwkJaWYgKCFvd25pbmdf dGhyZWFkKSBmaXBzX3JfbG9jaygpOwotKwkJcmV0ID0gZmlwc19yYW5kX2NoZWNrOwotKwkJaWYg KCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0r CX0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCkKLSsgICAgewotKyAgICBpbnQg cmV0ID0gMDsKLSsgICAgaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwl7Ci0rCWludCBvd25pbmdf dGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmICghb3duaW5nX3RocmVh ZCkgZmlwc19yX2xvY2soKTsKLSsJcmV0ID0gZmlwc19zZWxmdGVzdF9mYWlsOwotKwlpZiAoIW93 bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKLSsJfQotKyAgICByZXR1cm4gcmV0OwotKyAg ICB9Ci0rCi0rLyogU2VsZnRlc3QgZmFpbHVyZSBmYXRhbCBleGl0IHJvdXRpbmUuIFRoaXMgd2ls bCBiZSBjYWxsZWQKLSsgKiBkdXJpbmcgKmFueSogY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24uIEl0 IGhhcyB0aGUgbWluaW11bQotKyAqIG92ZXJoZWFkIHBvc3NpYmxlIHRvIGF2b2lkIHRvbyBiaWcg YSBwZXJmb3JtYW5jZSBoaXQuCi0rICovCi0rCi0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZv aWQpCi0rICAgIHsKLSsgICAgaWYgKGZpcHNfc2VsZnRlc3RfZmFpbCkKLSsJewotKwlPcGVuU1NM RGllKF9fRklMRV9fLF9fTElORV9fLCAiRkFUQUwgRklQUyBTRUxGVEVTVCBGQUlMVVJFIik7Ci0r CX0KLSsgICAgfQotKwotK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKQotKyAgICB7 Ci0rICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxm dGVzdCgpCi0rICAgIHsKLSsKLSsgICAgcmV0dXJuIEZJUFNfc2VsZnRlc3Rfc2hhMSgpCi0rCSYm IEZJUFNfc2VsZnRlc3RfaG1hYygpCi0rCSYmIEZJUFNfc2VsZnRlc3RfYWVzKCkKLSsJJiYgRklQ U19zZWxmdGVzdF9kZXMoKQotKwkmJiBGSVBTX3NlbGZ0ZXN0X3JzYSgpCi0rCSYmIEZJUFNfc2Vs ZnRlc3RfZHNhKCk7Ci0rICAgIH0KLSsKLStpbnQgRklQU19tb2RlX3NldChpbnQgb25vZmYpCi0r ICAgIHsKLSsgICAgaW50IGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKLSsgICAgaW50IGZpcHNf Y2xlYXJfb3duaW5nX3RocmVhZCgpOwotKyAgICBpbnQgcmV0ID0gMDsKLSsKLSsgICAgZmlwc193 X2xvY2soKTsKLSsgICAgZmlwc19zZXRfc3RhcnRlZCgpOwotKyAgICBmaXBzX3NldF9vd25pbmdf dGhyZWFkKCk7Ci0rCi0rICAgIGlmKG9ub2ZmKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgYnVmWzQ4 XTsKLSsKLSsJZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsKLSsJLyogRG9uJ3QgZ28gaW50byBG SVBTIG1vZGUgdHdpY2UsIGp1c3Qgc28gd2UgY2FuIGRvIGF1dG9tYWdpYwotKwkgICBzZWVkaW5n ICovCi0rCWlmKEZJUFNfbW9kZSgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRklQ U19NT0RFX1NFVCxGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUKTsKLSsJICAgIGZpcHNfc2Vs ZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAgZ290byBlbmQ7Ci0rCSAgICB9 Ci0rCi0rI2lmZGVmIE9QRU5TU0xfSUEzMl9TU0UyCi0rCWlmICgoT1BFTlNTTF9pYTMyY2FwICYg KDE8PDI1fDE8PDI2KSkgIT0gKDE8PDI1fDE8PDI2KSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfTU9ERV9TRVQsRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JNKTsKLSsJICAg IGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAgZ290byBlbmQ7 Ci0rCSAgICB9Ci0rI2VuZGlmCi0rCi0rCS8qIFBlcmZvcm0gUk5HIEtBVCBiZWZvcmUgc2VlZGlu ZyAqLwotKwlpZiAoIUZJUFNfc2VsZnRlc3Rfcm5nKCkpCi0rCSAgICB7Ci0rCSAgICBmaXBzX3Nl bGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAg fQotKwotKwkvKiBhdXRvbWFnaWNhbGx5IHNlZWQgUFJORyBpZiBub3QgYWxyZWFkeSBzZWVkZWQg Ki8KLSsJaWYoIUZJUFNfcmFuZF9zdGF0dXMoKSkKLSsJICAgIHsKLSsJICAgIGlmKFJBTkRfYnl0 ZXMoYnVmLHNpemVvZiBidWYpIDw9IDApCi0rCQl7Ci0rCQlmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAx OwotKwkJcmV0ID0gMDsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwkgICAgRklQU19yYW5kX3NldF9r ZXkoYnVmLDMyKTsKLSsJICAgIEZJUFNfcmFuZF9zZWVkKGJ1ZiszMiwxNik7Ci0rCSAgICB9Ci0r Ci0rCS8qIG5vdyBzd2l0Y2ggaW50byBGSVBTIG1vZGUgKi8KLSsJZmlwc19zZXRfcmFuZF9jaGVj ayhGSVBTX3JhbmRfbWV0aG9kKCkpOwotKwlSQU5EX3NldF9yYW5kX21ldGhvZChGSVBTX3JhbmRf bWV0aG9kKCkpOwotKwlpZihGSVBTX3NlbGZ0ZXN0KCkpCi0rCSAgICBmaXBzX3NldF9tb2RlKDEp OwotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAg cmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwlyZXQgPSAxOwotKwlnb3RvIGVu ZDsKLSsJfQotKyAgICBmaXBzX3NldF9tb2RlKDApOwotKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwg PSAwOwotKyAgICByZXQgPSAxOwotK2VuZDoKLSsgICAgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFk KCk7Ci0rICAgIGZpcHNfd191bmxvY2soKTsKLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwot K3ZvaWQgZmlwc193X2xvY2sodm9pZCkJCXsgQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBT KTsgfQotK3ZvaWQgZmlwc193X3VubG9jayh2b2lkKQl7IENSWVBUT193X3VubG9jayhDUllQVE9f TE9DS19GSVBTKTsgfQotK3ZvaWQgZmlwc19yX2xvY2sodm9pZCkJCXsgQ1JZUFRPX3JfbG9jayhD UllQVE9fTE9DS19GSVBTKTsgfQotK3ZvaWQgZmlwc19yX3VubG9jayh2b2lkKQl7IENSWVBUT19y X3VubG9jayhDUllQVE9fTE9DS19GSVBTKTsgfQotKwotK3N0YXRpYyBpbnQgZmlwc19zdGFydGVk ID0gMDsKLStzdGF0aWMgdW5zaWduZWQgbG9uZyBmaXBzX3RocmVhZCA9IDA7Ci0rCi0rdm9pZCBm aXBzX3NldF9zdGFydGVkKHZvaWQpCi0rCXsKLSsJZmlwc19zdGFydGVkID0gMTsKLSsJfQotKwot K2ludCBmaXBzX2lzX3N0YXJ0ZWQodm9pZCkKLSsJewotKwlyZXR1cm4gZmlwc19zdGFydGVkOwot Kwl9Ci0rCi0raW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKQotKwl7Ci0rCWludCByZXQg PSAwOwotKwotKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCi0rCQl7Ci0rCQlDUllQVE9fcl9sb2Nr KENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCWlmIChmaXBzX3RocmVhZCAhPSAwICYmIGZpcHNfdGhy ZWFkID09IENSWVBUT190aHJlYWRfaWQoKSkKLSsJCQlyZXQgPSAxOwotKwkJQ1JZUFRPX3JfdW5s b2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2lu dCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0r CWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJCXsKLSsJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xP Q0tfRklQUzIpOwotKwkJaWYgKGZpcHNfdGhyZWFkID09IDApCi0rCQkJewotKwkJCWZpcHNfdGhy ZWFkID0gQ1JZUFRPX3RocmVhZF9pZCgpOwotKwkJCXJldCA9IDE7Ci0rCQkJfQotKwkJQ1JZUFRP X3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQot KwotK2ludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQodm9pZCkKLSsJewotKwlpbnQgcmV0ID0g MDsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewotKwkJQ1JZUFRPX3dfbG9jayhD UllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAoZmlwc190aHJlYWQgPT0gQ1JZUFRPX3RocmVhZF9p ZCgpKQotKwkJCXsKLSsJCQlmaXBzX3RocmVhZCA9IDA7Ci0rCQkJcmV0ID0gMTsKLSsJCQl9Ci0r CQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJfQotKwlyZXR1cm4gcmV0 OwotKwl9Ci0rCi0rLyogR2VuZXJhbGl6ZWQgcHVibGljIGtleSB0ZXN0IHJvdXRpbmUuIFNpZ25z IGFuZCB2ZXJpZmllcyB0aGUgZGF0YQotKyAqIHN1cHBsaWVkIGluIHRicyB1c2luZyBtZXNhZ2Ug ZGlnZXN0IG1kIGFuZCBzZXR0aW5nIG9wdGlvbiBkaWdlc3QKLSsgKiBmbGFncyBtZF9mbGFncy4g SWYgdGhlICdrYXQnIHBhcmFtZXRlciBpcyBub3QgTlVMTCBpdCB3aWxsCi0rICogYWRkaXRpb25h bGx5IGNoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyBpdDogYSBrbm93biBhbnN3ZXIgdGVzdAot KyAqIFRoZSBzdHJpbmcgImZhaWxfc3RyIiBpcyB1c2VkIGZvciBpZGVudGlmaWNhdGlvbiBwdXJw b3NlcyBpbiBjYXNlCi0rICogb2YgZmFpbHVyZS4KLSsgKi8KLSsKLStpbnQgZmlwc19wa2V5X3Np Z25hdHVyZV90ZXN0KEVWUF9QS0VZICpwa2V5LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRi cywgaW50IHRic2xlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGlu dCBrYXRsZW4sCi0rCQkJY29uc3QgRVZQX01EICpkaWdlc3QsIHVuc2lnbmVkIGludCBtZF9mbGFn cywKLSsJCQljb25zdCBjaGFyICpmYWlsX3N0cikKLSsJewkKLSsJaW50IHJldCA9IDA7Ci0rCXVu c2lnbmVkIGNoYXIgc2lndG1wWzI1Nl0sICpzaWcgPSBzaWd0bXA7Ci0rCXVuc2lnbmVkIGludCBz aWdsZW47Ci0rCUVWUF9NRF9DVFggbWN0eDsKLSsJRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsK LSsJaWYgKChwa2V5LT50eXBlID09IEVWUF9QS0VZX1JTQSkKLSsJCSYmIChSU0Ffc2l6ZShwa2V5 LT5wa2V5LnJzYSkgPiBzaXplb2Yoc2lndG1wKSkpCi0rCQl7Ci0rCQlzaWcgPSBPUEVOU1NMX21h bGxvYyhSU0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkpOwotKwkJaWYgKCFzaWcpCi0rCQkJewotKwkJ CUZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxFUlJfUl9NQUxMT0NfRkFJ TFVSRSk7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwotKwlpZiAodGJzbGVuID09IC0x KQotKwkJdGJzbGVuID0gc3RybGVuKChjaGFyICopdGJzKTsKLSsKLSsJaWYgKG1kX2ZsYWdzKQot KwkJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1jdHgsIG1kX2ZsYWdzKTsKLSsKLSsJaWYgKCFFVlBf U2lnbkluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAo IUVWUF9TaWduVXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlp ZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIHNpZywgJnNpZ2xlbiwgcGtleSkpCi0rCQlnb3RvIGVy cm9yOwotKwotKwlpZiAoa2F0ICYmICgoc2lnbGVuICE9IGthdGxlbikgfHwgbWVtY21wKGthdCwg c2lnLCBrYXRsZW4pKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghRVZQX1ZlcmlmeUluaXRf ZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9WZXJp ZnlVcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCXJldCA9IEVW UF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnLCBzaWdsZW4sIHBrZXkpOwotKwotKwllcnJvcjoKLSsJ aWYgKHNpZyAhPSBzaWd0bXApCi0rCQlPUEVOU1NMX2ZyZWUoc2lnKTsKLSsJRVZQX01EX0NUWF9j bGVhbnVwKCZtY3R4KTsKLSsJaWYgKHJldCAhPSAxKQotKwkJewotKwkJRklQU2VycihGSVBTX0Zf RklQU19QS0VZX1NJR05BVFVSRV9URVNULEZJUFNfUl9URVNUX0ZBSUxVUkUpOwotKwkJaWYgKGZh aWxfc3RyKQotKwkJCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiVHlwZT0iLCBmYWlsX3N0cik7Ci0r CQlyZXR1cm4gMDsKLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBHZW5lcmFsaXplZCBz eW1tZXRyaWMgY2lwaGVyIHRlc3Qgcm91dGluZS4gRW5jcnlwdCBkYXRhLCB2ZXJpZnkgcmVzdWx0 Ci0rICogYWdhaW5zdCBrbm93biBhbnN3ZXIsIGRlY3J5cHQgYW5kIGNvbXBhcmUgd2l0aCBvcmln aW5hbCBwbGFpbnRleHQuCi0rICovCi0rCi0raW50IGZpcHNfY2lwaGVyX3Rlc3QoRVZQX0NJUEhF Ul9DVFggKmN0eCwgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAotKwkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwKLSsJCQljb25zdCB1bnNp Z25lZCBjaGFyICpwbGFpbnRleHQsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4 dCwKLSsJCQlpbnQgbGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgcGx0bXBbRklQU19NQVhfQ0lQ SEVSX1RFU1RfU0laRV07Ci0rCXVuc2lnbmVkIGNoYXIgY2l0bXBbRklQU19NQVhfQ0lQSEVSX1RF U1RfU0laRV07Ci0rCU9QRU5TU0xfYXNzZXJ0KGxlbiA8PSBGSVBTX01BWF9DSVBIRVJfVEVTVF9T SVpFKTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2 LCAxKSA8PSAwKQotKwkJcmV0dXJuIDA7Ci0rCUVWUF9DaXBoZXIoY3R4LCBjaXRtcCwgcGxhaW50 ZXh0LCBsZW4pOwotKwlpZiAobWVtY21wKGNpdG1wLCBjaXBoZXJ0ZXh0LCBsZW4pKQotKwkJcmV0 dXJuIDA7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBp diwgMCkgPD0gMCkKLSsJCXJldHVybiAwOwotKwlFVlBfQ2lwaGVyKGN0eCwgcGx0bXAsIGNpdG1w LCBsZW4pOwotKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIGxlbikpCi0rCQlyZXR1cm4g MDsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsjaWYgMAotKy8qIFRoZSBwdXJwb3NlIG9mIHRoaXMg aXMgdG8gZW5zdXJlIHRoZSBlcnJvciBjb2RlIGV4aXN0cyBhbmQgdGhlIGZ1bmN0aW9uCi0rICog bmFtZSBpcyB0byBrZWVwIHRoZSBlcnJvciBjaGVja2luZyBzY3JpcHQgcXVpZXQKLSsgKi8KLSt2 b2lkIGhhc2hfZmluYWwodm9pZCkKLSsJewotKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLEZJ UFNfUl9OT05fRklQU19NRVRIT0QpOwotKwl9Ci0rI2VuZGlmCi0rCi0rCi0rI2VuZGlmCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcyBv cGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3Ns LTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDEwLTAzLTMwIDEw OjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlw c19kZXNfc2VsZnRlc3QuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAg LTAsMCArMSwxMzkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK LSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0r ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8 c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgc3RydWN0Ci0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hh ciBrZXlbMTZdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsgICAgdW5zaWdu ZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwotKyAgICB9IHRlc3RzMltdPQotKwl7Ci0rCXsKLSsJeyAw eDdjLDB4NGYsMHg2ZSwweGY3LDB4YTIsMHgwNCwweDE2LDB4ZWMsCi0rCSAgMHgwYiwweDZiLDB4 N2MsMHg5ZSwweDVlLDB4MTksMHhhNywweGM0IH0sCi0rCXsgMHgwNiwweGE3LDB4ZDgsMHg3OSww eGFhLDB4Y2UsMHg2OSwweGVmIH0sCi0rCXsgMHg0YywweDExLDB4MTcsMHg1NSwweGJmLDB4YzQs MHg0ZSwweGZkIH0KLSsJfSwKLSsJewotKwl7IDB4NWQsMHg5ZSwweDAxLDB4ZDMsMHgyNSwweGM3 LDB4M2UsMHgzNCwKLSsJICAweDAxLDB4MTYsMHg3YywweDg1LDB4MjMsMHhkZiwweGUwLDB4Njgg fSwKLSsJeyAweDljLDB4NTAsMHgwOSwweDBmLDB4NWUsMHg3ZCwweDY5LDB4N2UgfSwKLSsJeyAw eGQyLDB4MGIsMHgxOCwweGRmLDB4ZDksMHgwZCwweDllLDB4ZmYgfSwKLSsJfQotKwl9OwotKwot K3N0YXRpYyBzdHJ1Y3QKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVsyNF07Ci0rICAg IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRl eHRbOF07Ci0rICAgIH0gdGVzdHMzW109Ci0rCXsKLSsJewotKwl7IDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJICAweEZFLDB4REMsMHhCQSwweDk4LDB4NzYsMHg1 NCwweDMyLDB4MTAsCi0rCSAgMHgxMiwweDM0LDB4NTYsMHg3OCwweDlhLDB4YmMsMHhkZSwweGYw IH0sCi0rCXsgMHg4ZiwweDhmLDB4YmYsMHg5YiwweDVkLDB4NDgsMHhiNCwweDFjIH0sCi0rCXsg MHg1OSwweDhjLDB4ZTUsMHhkMywweDZjLDB4YTIsMHhlYSwweDFiIH0sCi0rCX0sCi0rCXsKLSsJ eyAweERDLDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLDB4RkUsCi0rCSAgMHgwMSwweDIz LDB4NDUsMHg2NywweDg5LDB4QUIsMHhDRCwweEVGLAotKwkgIDB4RUQsMHgzOSwweEQ5LDB4NTAs MHhGQSwweDc0LDB4QkMsMHhDNCB9LAotKwl7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFC LDB4Q0QsMHhFRiB9LAotKwl7IDB4MTEsMHgyNSwweGIwLDB4MzUsMHhiZSwweGEwLDB4ODIsMHg4 NiB9LAotKwl9LAotKwl9OwotKwotK3ZvaWQgRklQU19jb3JydXB0X2RlcygpCi0rICAgIHsKLSsg ICAgdGVzdHMyWzBdLnBsYWludGV4dFswXSsrOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRl c3RfZGVzKCkKLSsgICAgewotKyAgICBpbnQgbiwgcmV0ID0gMDsKLSsgICAgRVZQX0NJUEhFUl9D VFggY3R4OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKyAgICAvKiBFbmNyeXB0 L2RlY3J5cHQgd2l0aCAyLWtleSAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8K LSsgICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQotKwl7Ci0rCWlmICghZmlwc19jaXBoZXJfdGVz dCgmY3R4LCBFVlBfZGVzX2VkZV9lY2IoKSwKLSsJCQkJdGVzdHMyW25dLmtleSwgTlVMTCwKLSsJ CQkJdGVzdHMyW25dLnBsYWludGV4dCwgdGVzdHMyW25dLmNpcGhlcnRleHQsIDgpKQotKwkJZ290 byBlcnI7Ci0rCX0KLSsKLSsgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggM0RFUyBhbmQgY29t cGFyZSB0byBrbm93biBhbnN3ZXJzICovCi0rICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKLSsJ ewotKwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLAotKwkJ CQl0ZXN0czNbbl0ua2V5LCBOVUxMLAotKwkJCQl0ZXN0czNbbl0ucGxhaW50ZXh0LCB0ZXN0czNb bl0uY2lwaGVydGV4dCwgOCkpCi0rCQlnb3RvIGVycjsKLSsJfQotKyAgICByZXQgPSAxOwotKyAg ICBlcnI6Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rICAgIGlmIChyZXQg PT0gMCkKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTLEZJUFNfUl9TRUxG VEVTVF9GQUlMRUQpOwotKwotKyAgICByZXR1cm4gcmV0OwotKyAgICB9Ci0rI2VuZGlmCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcyBv cGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3Ns LTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDEwLTAzLTMwIDEw OjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlw c19kc2Ffc2VsZnRlc3QuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAg LTAsMCArMSwxODYgQEAKLSsvKiBjcnlwdG8vZHNhL2RzYXRlc3QuYyAqLwotKy8qIENvcHlyaWdo dCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVu dGF0aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0r ICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBO ZXRzY2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJj aWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUg UkM0LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBj b2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3Ry aWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2Vw dCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAq IAotKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENv cHlyaWdodCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgot KyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91 bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBv ZiB0aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4 dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24g KG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv bi4KLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9n cmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0 c29mdC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBv dXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJl IG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFu eSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAot KyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5j bHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAK LSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFO RAotKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1Ig U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0r ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNl IGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJz aW9uIG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBp LmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5kZXIg YW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJs aWMgTGljZW5jZS5dCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rLyogc2VlZCwgb3V0X3As IG91dF9xLCBvdXRfZyBhcmUgdGFrZW4gdGhlIE5JU1QgdGVzdCB2ZWN0b3JzICovCi0rCi0rc3Rh dGljIHVuc2lnbmVkIGNoYXIgc2VlZFsyMF0gPSB7Ci0rCTB4NzcsIDB4OGYsIDB4NDAsIDB4NzQs IDB4NmYsIDB4NjYsIDB4YmUsIDB4MzMsIDB4Y2UsIDB4YmUsIDB4OTksIDB4MzQsCi0rCTB4NGMs IDB4ZmMsIDB4ZjMsIDB4MjgsIDB4YWEsIDB4NzAsIDB4MmQsIDB4M2EKLSsgIAl9OwotKwotK3N0 YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9wW10gPSB7Ci0rCTB4ZjcsIDB4N2MsIDB4MWIsIDB4ODMs IDB4ZDgsIDB4ZTgsIDB4NWMsIDB4N2YsIDB4ODUsIDB4MzAsIDB4MTcsIDB4NTcsCi0rCTB4MjEs IDB4OTUsIDB4ZmUsIDB4MjYsIDB4MDQsIDB4ZWIsIDB4NDcsIDB4NGMsIDB4M2EsIDB4NGEsIDB4 ODEsIDB4NGIsCi0rCTB4NzEsIDB4MmUsIDB4ZWQsIDB4NmUsIDB4NGYsIDB4M2QsIDB4MTEsIDB4 MGYsIDB4N2MsIDB4ZmUsIDB4MzYsIDB4NDMsCi0rCTB4NTEsIDB4ZDksIDB4ODEsIDB4MzksIDB4 MTcsIDB4ZGYsIDB4NjIsIDB4ZjYsIDB4OWMsIDB4MDEsIDB4YTgsIDB4NjksCi0rCTB4NzEsIDB4 ZGQsIDB4MjksIDB4N2YsIDB4NDcsIDB4ZTYsIDB4NjUsIDB4YTYsIDB4MjIsIDB4ZTgsIDB4NmEs IDB4MTIsCi0rCTB4MmIsIDB4YzIsIDB4ODEsIDB4ZmYsIDB4MzIsIDB4NzAsIDB4MmYsIDB4OWUs IDB4Y2EsIDB4NTMsIDB4MjYsIDB4NDcsCi0rCTB4MGYsIDB4NTksIDB4ZDcsIDB4OWUsIDB4MmMs IDB4YTUsIDB4MDcsIDB4YzQsIDB4NDksIDB4NTIsIDB4YTMsIDB4ZTQsCi0rCTB4NmIsIDB4MDQs IDB4MDAsIDB4MjUsIDB4NDksIDB4ZTIsIDB4ZTYsIDB4N2YsIDB4MjgsIDB4NzgsIDB4OTcsIDB4 YjgsCi0rCTB4M2EsIDB4MzIsIDB4MTQsIDB4MzgsIDB4YTIsIDB4NTEsIDB4MzMsIDB4MjIsIDB4 NDQsIDB4N2UsIDB4ZDcsIDB4ZWYsCi0rCTB4NDUsIDB4ZGIsIDB4MDYsIDB4NGEsIDB4ZDIsIDB4 ODIsIDB4NGEsIDB4ODIsIDB4MmMsIDB4YjEsIDB4ZDcsIDB4ZDgsCi0rCTB4YjYsIDB4NzMsIDB4 MDAsIDB4NGQsIDB4OTQsIDB4NzcsIDB4OTQsIDB4ZWYKLSsJfTsKLSsKLStzdGF0aWMgdW5zaWdu ZWQgY2hhciBvdXRfcVtdID0gewotKwkweGQ0LCAweDBhLCAweGFjLCAweDlmLCAweGJkLCAweDhj LCAweDgwLCAweGMyLCAweDM4LCAweDdlLCAweDJlLCAweDBjLAotKwkweDUyLCAweDVjLCAweGVh LCAweDM0LCAweGExLCAweDgzLCAweDMyLCAweGYzCi0rCX07Ci0rCi0rc3RhdGljIHVuc2lnbmVk IGNoYXIgb3V0X2dbXSA9IHsKLSsJMHgzNCwgMHg3MywgMHg4YiwgMHg1NywgMHg4NCwgMHg4ZSwg MHg1NSwgMHhiZiwgMHg1NywgMHhjYywgMHg0MSwgMHhiYiwKLSsJMHg1ZSwgMHgyYiwgMHhkNSwg MHg0MiwgMHhkZCwgMHgyNCwgMHgyMiwgMHgyYSwgMHgwOSwgMHhlYSwgMHgyNiwgMHgxZSwKLSsJ MHgxNywgMHg2NSwgMHhjYiwgMHgxYSwgMHhiMywgMHgxMiwgMHg0NCwgMHhhMywgMHg5ZSwgMHg5 OSwgMHhlOSwgMHg2MywKLSsJMHhlYiwgMHgzMCwgMHhiMSwgMHg3OCwgMHg3YiwgMHgwOSwgMHg0 MCwgMHgzMCwgMHhmYSwgMHg4MywgMHhjMiwgMHgzNSwKLSsJMHhlMSwgMHhjNCwgMHgyZCwgMHg3 NCwgMHgxYSwgMHhiMSwgMHg4MywgMHg1NCwgMHhkOCwgMHgyOSwgMHhmNCwgMHhjZiwKLSsJMHg3 ZiwgMHg2ZiwgMHg2NywgMHgxYywgMHgzNiwgMHg0OSwgMHhlZSwgMHg2YywgMHhhMiwgMHgzYywg MHgyZCwgMHg2YSwKLSsJMHhlOSwgMHhkMywgMHg5YSwgMHhmNiwgMHg1NywgMHg3OCwgMHg2Ziwg MHhmZCwgMHgzMywgMHhjZCwgMHgzYywgMHhlZCwKLSsJMHhmZCwgMHhkNCwgMHg0MSwgMHhlNiwg MHg1YywgMHg4YiwgMHhlMCwgMHg2OCwgMHgzMSwgMHg0NywgMHg0NywgMHhhZiwKLSsJMHgxMiwg MHhhNywgMHhmOSwgMHgzMiwgMHgwZCwgMHg5NCwgMHgxNSwgMHg0OCwgMHhkMCwgMHg1NCwgMHg4 NSwgMHhiMiwKLSsJMHgwNCwgMHhiNSwgMHg0ZCwgMHhkNCwgMHg5ZCwgMHgwNSwgMHgyMiwgMHgy NSwgMHhkOSwgMHhmZCwgMHg2YywgMHgzNiwKLSsJMHhlZiwgMHhiZSwgMHg2OSwgMHg2YywgMHg1 NSwgMHhmNCwgMHhlZSwgMHhlYwotKwl9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHN0cjFbXT0iMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOwotKwotK3ZvaWQgRklQU19jb3JydXB0X2Rz YSgpCi0rICAgIHsKLSsgICAgKytzZWVkWzBdOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRl c3RfZHNhKCkKLSsgICAgewotKyAgICBEU0EgKmRzYTsKLSsgICAgaW50IGNvdW50ZXIsaSxqLCBy ZXQgPSAwOwotKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgdW5zaWduZWQgY2hhciBidWZb MjU2XTsKLSsgICAgdW5zaWduZWQgbG9uZyBoOwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rICAg IEVWUF9QS0VZICpwayA9IE5VTEw7Ci0rCi0rICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0r Ci0rICAgIGRzYSA9IERTQV9uZXcoKTsKLSsKLSsgICAgaWYoZHNhID09IE5VTEwpCi0rCWdvdG8g ZXJyOwotKyAgICBpZighRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCAxMDI0LHNlZWQs MjAsJmNvdW50ZXIsJmgsTlVMTCkpCi0rCWdvdG8gZXJyOwotKyAgICBpZiAoY291bnRlciAhPSAz NzgpIAotKwlnb3RvIGVycjsKLSsgICAgaWYgKGggIT0gMikKLSsJZ290byBlcnI7Ci0rICAgIGk9 Qk5fYm4yYmluKGRzYS0+cSxidWYpOwotKyAgICBqPXNpemVvZihvdXRfcSk7Ci0rICAgIGlmIChp ICE9IGogfHwgbWVtY21wKGJ1ZixvdXRfcSxpKSAhPSAwKQotKwlnb3RvIGVycjsKLSsKLSsgICAg aT1CTl9ibjJiaW4oZHNhLT5wLGJ1Zik7Ci0rICAgIGo9c2l6ZW9mKG91dF9wKTsKLSsgICAgaWYg KGkgIT0gaiB8fCBtZW1jbXAoYnVmLG91dF9wLGkpICE9IDApCi0rCWdvdG8gZXJyOwotKwotKyAg ICBpPUJOX2JuMmJpbihkc2EtPmcsYnVmKTsKLSsgICAgaj1zaXplb2Yob3V0X2cpOwotKyAgICBp ZiAoaSAhPSBqIHx8IG1lbWNtcChidWYsb3V0X2csaSkgIT0gMCkKLSsJZ290byBlcnI7Ci0rICAg IERTQV9nZW5lcmF0ZV9rZXkoZHNhKTsKLSsKLSsgICAgaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkg PT0gTlVMTCkKLSsJZ290byBlcnI7Ci0rICAgIEVWUF9QS0VZX2Fzc2lnbl9EU0EocGssIGRzYSk7 Ci0rCi0rICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkK LSsJZ290byBlcnI7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHN0cjEsIDIwKSkK LSsJZ290byBlcnI7Ci0rICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwg cGspKQotKwlnb3RvIGVycjsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwg RVZQX2RzczEoKSwgTlVMTCkpCi0rCWdvdG8gZXJyOwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRh dGUoJm1jdHgsIHN0cjEsIDIwKSkKLSsJZ290byBlcnI7Ci0rICAgIGlmIChFVlBfVmVyaWZ5Rmlu YWwoJm1jdHgsIGJ1Ziwgc2xlbiwgcGspICE9IDEpCi0rCWdvdG8gZXJyOwotKwotKyAgICByZXQg PSAxOwotKwotKyAgICBlcnI6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rICAg IGlmIChwaykKLSsJRVZQX1BLRVlfZnJlZShwayk7Ci0rICAgIGVsc2UgaWYgKGRzYSkKLSsJRFNB X2ZyZWUoZHNhKTsKLSsgICAgaWYgKHJldCA9PSAwKQotKwkgICAgRklQU2VycihGSVBTX0ZfRklQ U19TRUxGVEVTVF9EU0EsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgIHJldHVybiByZXQ7 Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlw cy5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzLmgKLS0tLSBvcGVuc3NsLTEu MC4wL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzLmgJMjAxMC0wMy0zMCAx MDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMTYzIEBACi0rLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUg bWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0r ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29y ZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0r ICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0r ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsj aWZuZGVmIE9QRU5TU0xfRklQUwotKyNlcnJvciBGSVBTIGlzIGRpc2FibGVkLgotKyNlbmRpZgot KwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJu ICJDIiB7Ci0rI2VuZGlmCi0rCi0rc3RydWN0IGRzYV9zdDsKLStzdHJ1Y3QgZXZwX3BrZXlfc3Q7 Ci0rc3RydWN0IGVudl9tZF9zdDsKLStzdHJ1Y3QgZXZwX2NpcGhlcl9zdDsKLStzdHJ1Y3QgZXZw X2NpcGhlcl9jdHhfc3Q7Ci0rCi0raW50IEZJUFNfbW9kZV9zZXQoaW50IG9ub2ZmKTsKLStpbnQg RklQU19tb2RlKHZvaWQpOwotK2NvbnN0IHZvaWQgKkZJUFNfcmFuZF9jaGVjayh2b2lkKTsKLStp bnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCk7Ci0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNr KHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3NoYTEodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRl c3Rfc2hhMSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9hZXModm9pZCk7Ci0raW50IEZJUFNf c2VsZnRlc3RfYWVzKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X2Rlcyh2b2lkKTsKLStpbnQg RklQU19zZWxmdGVzdF9kZXModm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKHZvaWQpOwot K3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rf cnNhKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X2RzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29y cnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSh2b2lkKTsKLSt2 b2lkIEZJUFNfY29ycnVwdF9ybmcodm9pZCk7Ci0rdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKTsK LStpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfaG1hYyh2 b2lkKTsKLSsKLStpbnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHN0cnVjdCBldnBfcGtleV9z dCAqcGtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCi0rCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVuLAotKwkJCWNvbnN0 IHN0cnVjdCBlbnZfbWRfc3QgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdzLAotKwkJCWNv bnN0IGNoYXIgKmZhaWxfc3RyKTsKLSsKLStpbnQgZmlwc19jaXBoZXJfdGVzdChzdHJ1Y3QgZXZw X2NpcGhlcl9jdHhfc3QgKmN0eCwKLSsJCQljb25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAqY2lw aGVyLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBj aGFyICppdiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCi0rCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwKLSsJCQlpbnQgbGVuKTsKLSsKLSsvKiBCRUdJTiBF UlJPUiBDT0RFUyAqLwotKy8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVk IGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCi0rICogbWFkZSBhZnRlciB0aGlz IHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCi0r ICovCi0rdm9pZCBFUlJfbG9hZF9GSVBTX3N0cmluZ3Modm9pZCk7Ci0rCi0rLyogRXJyb3IgY29k ZXMgZm9yIHRoZSBGSVBTIGZ1bmN0aW9ucy4gKi8KLSsKLSsvKiBGdW5jdGlvbiBjb2Rlcy4gKi8K LSsjZGVmaW5lIEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUwkJCSAxMDAKLSsjZGVmaW5lIEZJ UFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMDEKLSsjZGVmaW5lIEZJUFNfRl9EU0FfRE9f U0lHTgkJCQkgMTAyCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTAzCi0rI2Rl ZmluZSBGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgJCQkgMTI0Ci0rI2RlZmluZSBGSVBTX0ZfRVZQ X0RJR0VTVElOSVRfRVgJCQkgMTI1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0EJCQkJ IDEwNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5UCQkgMTA1 Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19SU0EJCQkJIDEwNgotKyNkZWZpbmUgRklQU19G X0ZJUFNfRFNBX0NIRUNLCQkJCSAxMDcKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX01PREVfU0VUCQkJ CSAxMDgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QJCQkgMTA5Ci0r I2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMJCQkgMTEwCi0rI2RlZmluZSBGSVBTX0Zf RklQU19TRUxGVEVTVF9ERVMJCQkgMTExCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9E U0EJCQkgMTEyCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDCQkJIDExMwotKyNk ZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HCQkJIDExNAotKyNkZWZpbmUgRklQU19GX0ZJ UFNfU0VMRlRFU1RfU0hBMQkJCSAxMTUKLSsjZGVmaW5lIEZJUFNfRl9IQVNIX0ZJTkFMCQkJCSAx MjMKLSsjZGVmaW5lIEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTE2Ci0rI2RlZmluZSBG SVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQJCQkgMTE3Ci0rI2RlZmluZSBGSVBTX0ZfUlNB X0VBWV9QUklWQVRFX0VOQ1JZUFQJCQkgMTE4Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QVUJM SUNfREVDUllQVAkJCSAxMTkKLSsjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBU CQkJIDEyMAotKyNkZWZpbmUgRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWAkJCSAxMjEK LSsjZGVmaW5lIEZJUFNfRl9TU0xFQVlfUkFORF9CWVRFUwkJCSAxMjIKLSsKLSsvKiBSZWFzb24g Y29kZXMuICovCi0rI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFCQkJCSAxMDMKLSsjZGVm aW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVfRElHRVNUCQkJIDEwNAotKyNkZWZpbmUgRklQU19S X0NPTlRSQURJQ1RJTkdfRVZJREVOQ0UJCQkgMTE0Ci0rI2RlZmluZSBGSVBTX1JfRVhFX0RJR0VT VF9ET0VTX05PVF9NQVRDSAkJIDEwNQotKyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNf Tk9UX01BVENICQkgMTEwCi0rI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFU Q0hfTk9OUElDX1JFTE9DQVRFRCAxMTEKLSsjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VT X05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HIDExMgotKyNkZWZpbmUgRklQU19SX0ZJUFNfTU9E RV9BTFJFQURZX1NFVAkJCSAxMDIKLSsjZGVmaW5lIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxF RAkJCSAxMDYKLSsjZGVmaW5lIEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgJCQkgMTA5Ci0rI2Rl ZmluZSBGSVBTX1JfS0VZX1RPT19TSE9SVAkJCQkgMTA4Ci0rI2RlZmluZSBGSVBTX1JfTk9OX0ZJ UFNfTUVUSE9ECQkJCSAxMDAKLSsjZGVmaW5lIEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRAkJ CSAxMDcKLSsjZGVmaW5lIEZJUFNfUl9SU0FfREVDUllQVF9FUlJPUgkJCSAxMTUKLSsjZGVmaW5l IEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUgkJCSAxMTYKLSsjZGVmaW5lIEZJUFNfUl9TRUxGVEVT VF9GQUlMRUQJCQkJIDEwMQotKyNkZWZpbmUgRklQU19SX1RFU1RfRkFJTFVSRQkJCQkgMTE3Ci0r I2RlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0JCQkgMTEzCi0rCi0rI2lmZGVmICBf X2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3Qu YwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwxMzcgQEAK LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0r ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotK3R5cGVkZWYgc3RydWN0IHsKLSsJY29uc3QgRVZQX01EICoo KmFsZykodm9pZCk7Ci0rCWNvbnN0IGNoYXIgKmtleSwgKml2OwotKwl1bnNpZ25lZCBjaGFyIGth dmFsW0VWUF9NQVhfTURfU0laRV07Ci0rfSBITUFDX0tBVDsKLSsKLStzdGF0aWMgY29uc3QgSE1B Q19LQVQgdmVjdG9yW10gPSB7Ci0rICAgIHsJRVZQX3NoYTEsCi0rCS8qIGZyb20gaHR0cDovL2Nz cmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5OC9maXBzLTE5OGEucGRmICovCi0r CSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4MDksMHgyMiww eGQzLDB4NDAsMHg1ZiwweGFhLDB4M2QsMHgxOSwKLSsJICAweDRmLDB4ODIsMHhhNCwweDU4LDB4 MzAsMHg3MywweDdkLDB4NWMsCi0rCSAgMHhjNiwweGM3LDB4NWQsMHgyNCB9Ci0rICAgIH0sCi0r ICAgIHsJRVZQX3NoYTIyNCwKLSsJLyoganVzdCBrZWVwIGV4dGVuZGluZyB0aGUgYWJvdmUuLi4g Ki8KLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHhkZCww eGVmLDB4MGEsMHg0MCwweGNiLDB4N2QsMHg1MCwweGZiLAotKwkgIDB4NmUsMHhlNiwweGNlLDB4 YTEsMHgyMCwweGJhLDB4MjYsMHhhYSwKLSsJICAweDA4LDB4ZjMsMHgwNywweDc1LDB4ODcsMHhi OCwweGFkLDB4MWIsCi0rCSAgMHg4YywweDhkLDB4MTIsMHhjNyB9Ci0rICAgIH0sCi0rICAgIHsJ RVZQX3NoYTI1NiwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0r CXsgMHhiOCwweGYyLDB4MGQsMHhiNSwweDQxLDB4ZWEsMHg0MywweDA5LAotKwkgIDB4Y2EsMHg0 ZSwweGE5LDB4MzgsMHgwYywweGQwLDB4ZTgsMHgzNCwKLSsJICAweGY3LDB4MWYsMHhiZSwweDkx LDB4NzQsMHhhMiwweDYxLDB4MzgsCi0rCSAgMHgwZCwweGMxLDB4N2UsMHhhZSwweDZhLDB4MzQs MHg1MSwweGQ5IH0KLSsgICAgfSwKLSsgICAgewlFVlBfc2hhMzg0LAotKwkiMDEyMzQ1Njc4OTo7 PD0+P0BBQkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAweDA4LDB4YmMsMHhiMCwweGRhLDB4NDks MHgxZSwweDg3LDB4YWQsCi0rCSAgMHg5YSwweDFkLDB4NmEsMHhjZSwweDIzLDB4YzUsMHgwYiww eGY2LAotKwkgIDB4YjcsMHgxOCwweDA2LDB4YTUsMHg3NywweGNkLDB4NDksMHgwNCwKLSsJICAw eDg5LDB4ZjEsMHhlNiwweDIzLDB4NDQsMHg1MSwweDUxLDB4OWYsCi0rCSAgMHg4NSwweDU2LDB4 ODAsMHg3OSwweDBjLDB4YmQsMHg0ZCwweDUwLAotKwkgIDB4YTQsMHg1ZiwweDI5LDB4ZTMsMHg5 MywweGYwLDB4ZTgsMHg3ZiB9Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTUxMiwKLSsJIjAxMjM0 NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHg4MCwweDlkLDB4NDQsMHgw NSwweDdjLDB4NWIsMHg5NSwweDQxLAotKwkgIDB4MDUsMHhiZCwweDA0LDB4MTMsMHgxNiwweGRi LDB4MGYsMHhhYywKLSsJICAweDQ0LDB4ZDUsMHhhNCwweGQ1LDB4ZDAsMHg4OSwweDJiLDB4ZDAs Ci0rCSAgMHg0ZSwweDg2LDB4NjQsMHgxMiwweGMwLDB4OTAsMHg3NywweDY4LAotKwkgIDB4ZjEs MHg4NywweGI3LDB4N2MsMHg0ZiwweGFlLDB4MmMsMHgyZiwKLSsJICAweDIxLDB4YTUsMHhiNSww eDY1LDB4OWEsMHg0ZiwweDRiLDB4YTcsCi0rCSAgMHg0NywweDAyLDB4YTMsMHhkZSwweDliLDB4 NTEsMHhmMSwweDQ1LAotKwkgIDB4YmQsMHg0ZiwweDI1LDB4MjcsMHg0MiwweDk4LDB4OTksMHgw NSB9Ci0rICAgIH0sCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9obWFjKCkKLSsgICAgewot KyAgICBpbnQgbjsKLSsgICAgdW5zaWduZWQgaW50ICAgIG91dGxlbjsKLSsgICAgdW5zaWduZWQg Y2hhciAgIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICBjb25zdCBFVlBfTUQgICAqbWQ7Ci0r ICAgIGNvbnN0IEhNQUNfS0FUICp0OwotKwotKyAgICBmb3Iobj0wLHQ9dmVjdG9yOyBuPHNpemVv Zih2ZWN0b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsrKQotKwl7Ci0rCW1kID0gKCp0LT5h bGcpKCk7Ci0rCUhNQUMobWQsdC0+a2V5LHN0cmxlbih0LT5rZXkpLAotKwkJKGNvbnN0IHVuc2ln bmVkIGNoYXIgKil0LT5pdixzdHJsZW4odC0+aXYpLAotKwkJb3V0LCZvdXRsZW4pOwotKwotKwlp ZihtZW1jbXAob3V0LHQtPmthdmFsLG91dGxlbikpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX1NFTEZURVNUX0hNQUMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICBy ZXR1cm4gMDsKLSsJICAgIH0KLSsJfQotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKyNlbmRpZgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0 by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCTIwMTAtMDMtMzAg MTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDQxMiBAQAotKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJl IG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgot KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNv cmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwot KyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgot KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KLSsgKgotKyAqLwotKwotKy8qCi0rICogVGhpcyBpcyBhIEZJUFMgYXBwcm92ZWQgQUVTIFBS TkcgYmFzZWQgb24gQU5TSSBYOS4zMSBBLjIuNC4KLSsgKi8KLSsKLSsjaW5jbHVkZSAiZV9vcy5o IgotKwotKy8qIElmIHdlIGRvbid0IGRlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVELCBzdHJ1 Y3QgdGltZXZhbCB3b24ndAotKyAgIGJlIGRlZmluZWQgYW5kIGdldHRpbWVvZmRheSgpIHdvbid0 IGJlIGRlY2xhcmVkIHdpdGggc3RyaWN0IGNvbXBpbGVycwotKyAgIGxpa2UgREVDIEMgaW4gQU5T SSBDIG1vZGUuICAqLwotKyNpZm5kZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAotKyNkZWZpbmUg X1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAxCi0rI2VuZGlmCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpZm5kZWYgT1BFTlNTTF9T WVNfV0lOMzIKLSsjaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8YXNz ZXJ0Lmg+Ci0rI2lmbmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKyMgaWZkZWYgT1BFTlNTTF9VTklT VEQKLSsjICBpbmNsdWRlIE9QRU5TU0xfVU5JU1RECi0rIyBlbHNlCi0rIyAgaW5jbHVkZSA8dW5p c3RkLmg+Ci0rIyBlbmRpZgotKyNlbmRpZgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNs dWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rdm9pZCAqT1BF TlNTTF9zdGRlcnIodm9pZCk7Ci0rCi0rI2RlZmluZSBBRVNfQkxPQ0tfTEVOR1RICTE2Ci0rCi0r Ci0rLyogQUVTIEZJUFMgUFJORyBpbXBsZW1lbnRhdGlvbiAqLwotKwotK3R5cGVkZWYgc3RydWN0 IAotKwl7Ci0rCWludCBzZWVkZWQ7Ci0rCWludCBrZXllZDsKLSsJaW50IHRlc3RfbW9kZTsKLSsJ aW50IHNlY29uZDsKLSsJaW50IGVycm9yOwotKwl1bnNpZ25lZCBsb25nIGNvdW50ZXI7Ci0rCUFF U19LRVkga3M7Ci0rCWludCB2cG9zOwotKwkvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3Iga2V5IGlm IGl0IGVxdWFscyBzZWVkIGxlbmd0aCAqLwotKwl1bnNpZ25lZCBjaGFyIHRtcF9rZXlbQUVTX0JM T0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgVltBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5z aWduZWQgY2hhciBEVFtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5zaWduZWQgY2hhciBsYXN0W0FF U19CTE9DS19MRU5HVEhdOwotKwl9IEZJUFNfUFJOR19DVFg7Ci0rCi0rc3RhdGljIEZJUFNfUFJO R19DVFggc2N0eDsKLSsKLStzdGF0aWMgaW50IGZpcHNfcHJuZ19mYWlsID0gMDsKLSsKLSt2b2lk IEZJUFNfcm5nX3N0aWNrKHZvaWQpCi0rCXsKLSsJZmlwc19wcm5nX2ZhaWwgPSAxOwotKwl9Ci0r Ci0rdm9pZCBmaXBzX3JhbmRfcHJuZ19yZXNldChGSVBTX1BSTkdfQ1RYICpjdHgpCi0rCXsKLSsJ Y3R4LT5zZWVkZWQgPSAwOwotKwljdHgtPmtleWVkID0gMDsKLSsJY3R4LT50ZXN0X21vZGUgPSAw OwotKwljdHgtPmNvdW50ZXIgPSAwOwotKwljdHgtPnNlY29uZCA9IDA7Ci0rCWN0eC0+ZXJyb3Ig PSAwOwotKwljdHgtPnZwb3MgPSAwOwotKwlPUEVOU1NMX2NsZWFuc2UoY3R4LT5WLCBBRVNfQkxP Q0tfTEVOR1RIKTsKLSsJT1BFTlNTTF9jbGVhbnNlKCZjdHgtPmtzLCBzaXplb2YoQUVTX0tFWSkp OwotKwl9Ci0rCQotKwotK3N0YXRpYyBpbnQgZmlwc19zZXRfcHJuZ19rZXkoRklQU19QUk5HX0NU WCAqY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBr ZXlsZW4pCi0rCXsKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKwlpZiAoa2V5bGVuICE9IDE2 ICYmIGtleWxlbiAhPSAyNCAmJiBrZXlsZW4gIT0gMzIpCi0rCQl7Ci0rCQkvKiBlcnJvcjogaW52 YWxpZCBrZXkgc2l6ZSAqLwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUFFU19zZXRfZW5jcnlwdF9r ZXkoa2V5LCBrZXlsZW4gPDwgMywgJmN0eC0+a3MpOwotKwlpZiAoa2V5bGVuID09IDE2KQotKwkJ ewotKwkJbWVtY3B5KGN0eC0+dG1wX2tleSwga2V5LCAxNik7Ci0rCQljdHgtPmtleWVkID0gMjsK LSsJCX0KLSsJZWxzZQotKwkJY3R4LT5rZXllZCA9IDE7Ci0rCWN0eC0+c2VlZGVkID0gMDsKLSsJ Y3R4LT5zZWNvbmQgPSAwOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19z ZXRfcHJuZ19zZWVkKEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4pCi0rCXsKLSsJaW50IGk7Ci0rCWlmICgh Y3R4LT5rZXllZCkKLSsJCXJldHVybiAwOwotKwkvKiBJbiB0ZXN0IG1vZGUgc2VlZCBpcyBqdXN0 IHN1cHBsaWVkIGRhdGEgKi8KLSsJaWYgKGN0eC0+dGVzdF9tb2RlKQotKwkJewotKwkJaWYgKHNl ZWRsZW4gIT0gQUVTX0JMT0NLX0xFTkdUSCkKLSsJCQlyZXR1cm4gMDsKLSsJCW1lbWNweShjdHgt PlYsIHNlZWQsIEFFU19CTE9DS19MRU5HVEgpOwotKwkJY3R4LT5zZWVkZWQgPSAxOwotKwkJcmV0 dXJuIDE7Ci0rCQl9Ci0rCS8qIE91dHNpZGUgdGVzdCBtb2RlIFhPUiBzdXBwbGllZCBkYXRhIHdp dGggZXhpc3Rpbmcgc2VlZCAqLwotKwlmb3IgKGkgPSAwOyBpIDwgc2VlZGxlbjsgaSsrKQotKwkJ ewotKwkJY3R4LT5WW2N0eC0+dnBvcysrXSBePSBzZWVkW2ldOwotKwkJaWYgKGN0eC0+dnBvcyA9 PSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXsKLSsJCQljdHgtPnZwb3MgPSAwOwotKwkJCS8qIFNw ZWNpYWwgY2FzZSBpZiBmaXJzdCBzZWVkIGFuZCBrZXkgbGVuZ3RoIGVxdWFscwotKyAJCQkgKiBi bG9jayBzaXplIGNoZWNrIGtleSBhbmQgc2VlZCBkbyBub3QgbWF0Y2guCi0rIAkJCSAqLyAKLSsJ CQlpZiAoY3R4LT5rZXllZCA9PSAyKQotKwkJCQl7Ci0rCQkJCWlmICghbWVtY21wKGN0eC0+dG1w X2tleSwgY3R4LT5WLCAxNikpCi0rCQkJCQl7Ci0rCQkJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NF VF9QUk5HX1NFRUQsCi0rCQkJCQkJUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkp OwotKwkJCQkJcmV0dXJuIDA7Ci0rCQkJCQl9Ci0rCQkJCU9QRU5TU0xfY2xlYW5zZShjdHgtPnRt cF9rZXksIDE2KTsKLSsJCQkJY3R4LT5rZXllZCA9IDE7Ci0rCQkJCX0KLSsJCQljdHgtPnNlZWRl ZCA9IDE7Ci0rCQkJfQotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBmaXBzX3NldF90 ZXN0X21vZGUoRklQU19QUk5HX0NUWCAqY3R4KQotKwl7Ci0rCWlmIChjdHgtPmtleWVkKQotKwkJ ewotKwkJUkFORGVycihSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFLFJBTkRfUl9QUk5HX0tFWUVE KTsKLSsJCXJldHVybiAwOwotKwkJfQotKwljdHgtPnRlc3RfbW9kZSA9IDE7Ci0rCXJldHVybiAx OwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCkKLSsJewotKwlyZXR1cm4g Zmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc2V0X2R0 KHVuc2lnbmVkIGNoYXIgKmR0KQotKwl7Ci0rCWlmICghc2N0eC50ZXN0X21vZGUpCi0rCQl7Ci0r CQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RULFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RF KTsKLSsJCXJldHVybiAwOwotKwkJfQotKwltZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19M RU5HVEgpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyB2b2lkIGZpcHNfZ2V0X2R0KEZJ UFNfUFJOR19DVFggKmN0eCkKLSsgICAgewotKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKwlG SUxFVElNRSBmdDsKLSsjZWxzZQotKwlzdHJ1Y3QgdGltZXZhbCB0djsKLSsjZW5kaWYKLSsJdW5z aWduZWQgY2hhciAqYnVmID0gY3R4LT5EVDsKLSsKLSsjaWZuZGVmIEdFVFBJRF9JU19NRUFOSU5H TEVTUwotKwl1bnNpZ25lZCBsb25nIHBpZDsKLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9T WVNfV0lOMzIKLSsJR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0KTsKLSsJYnVmWzBdID0gKHVu c2lnbmVkIGNoYXIpIChmdC5kd0hpZ2hEYXRlVGltZSAmIDB4ZmYpOwotKwlidWZbMV0gPSAodW5z aWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOwotKwlidWZbMl0g PSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAxNikgJiAweGZmKTsKLSsJ YnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gMjQpICYgMHhm Zik7Ci0rCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdMb3dEYXRlVGltZSAmIDB4ZmYp OwotKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDgpICYg MHhmZik7Ci0rCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4g MTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRp bWUgPj4gMjQpICYgMHhmZik7Ci0rI2Vsc2UKLSsJZ2V0dGltZW9mZGF5KCZ0dixOVUxMKTsKLSsJ YnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl9zZWMgJiAweGZmKTsKLSsJYnVmWzFdID0g KHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDgpICYgMHhmZik7Ci0rCWJ1ZlsyXSA9ICh1 bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzNdID0gKHVu c2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDI0KSAmIDB4ZmYpOwotKwlidWZbNF0gPSAodW5z aWduZWQgY2hhcikgKHR2LnR2X3VzZWMgJiAweGZmKTsKLSsJYnVmWzVdID0gKHVuc2lnbmVkIGNo YXIpICgodHYudHZfdXNlYyA+PiA4KSAmIDB4ZmYpOwotKwlidWZbNl0gPSAodW5zaWduZWQgY2hh cikgKCh0di50dl91c2VjID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbN10gPSAodW5zaWduZWQgY2hh cikgKCh0di50dl91c2VjID4+IDI0KSAmIDB4ZmYpOwotKyNlbmRpZgotKwlidWZbOF0gPSAodW5z aWduZWQgY2hhcikgKGN0eC0+Y291bnRlciAmIDB4ZmYpOwotKwlidWZbOV0gPSAodW5zaWduZWQg Y2hhcikgKChjdHgtPmNvdW50ZXIgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzEwXSA9ICh1bnNpZ25l ZCBjaGFyKSAoKGN0eC0+Y291bnRlciA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzExXSA9ICh1bnNp Z25lZCBjaGFyKSAoKGN0eC0+Y291bnRlciA+PiAyNCkgJiAweGZmKTsKLSsKLSsJY3R4LT5jb3Vu dGVyKys7Ci0rCi0rCi0rI2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKLSsJcGlkPSh1bnNp Z25lZCBsb25nKWdldHBpZCgpOwotKwlidWZbMTJdID0gKHVuc2lnbmVkIGNoYXIpIChwaWQgJiAw eGZmKTsKLSsJYnVmWzEzXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiA4KSAmIDB4ZmYpOwot KwlidWZbMTRdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDE2KSAmIDB4ZmYpOwotKwlidWZb MTVdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDI0KSAmIDB4ZmYpOwotKyNlbmRpZgotKyAg ICB9Ci0rCi0rc3RhdGljIGludCBmaXBzX3JhbmQoRklQU19QUk5HX0NUWCAqY3R4LAotKwkJCXVu c2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pCi0rCXsKLSsJdW5zaWdu ZWQgY2hhciBSW0FFU19CTE9DS19MRU5HVEhdLCBJW0FFU19CTE9DS19MRU5HVEhdOwotKwl1bnNp Z25lZCBjaGFyIHRtcFtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJaW50IGk7Ci0rCWlmIChjdHgtPmVy cm9yKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX0VSUk9S KTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoIWN0eC0+a2V5ZWQpCi0rCQl7Ci0rCQlSQU5E ZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX05PX0tFWV9TRVQpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rCWlmICghY3R4LT5zZWVkZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JB TkQsUkFORF9SX1BSTkdfTk9UX1NFRURFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJZm9yICg7 OykKLSsJCXsKLSsJCWlmICghY3R4LT50ZXN0X21vZGUpCi0rCQkJZmlwc19nZXRfZHQoY3R4KTsK LSsJCUFFU19lbmNyeXB0KGN0eC0+RFQsIEksICZjdHgtPmtzKTsKLSsJCWZvciAoaSA9IDA7IGkg PCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCi0rCQkJdG1wW2ldID0gSVtpXSBeIGN0eC0+VltpXTsK LSsJCUFFU19lbmNyeXB0KHRtcCwgUiwgJmN0eC0+a3MpOwotKwkJZm9yIChpID0gMDsgaSA8IEFF U19CTE9DS19MRU5HVEg7IGkrKykKLSsJCQl0bXBbaV0gPSBSW2ldIF4gSVtpXTsKLSsJCUFFU19l bmNyeXB0KHRtcCwgY3R4LT5WLCAmY3R4LT5rcyk7Ci0rCQkvKiBDb250aW51b3VzIFBSTkcgdGVz dCAqLwotKwkJaWYgKGN0eC0+c2Vjb25kKQotKwkJCXsKLSsJCQlpZiAoZmlwc19wcm5nX2ZhaWwp Ci0rCQkJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOwotKwkJCWlmICgh bWVtY21wKFIsIGN0eC0+bGFzdCwgQUVTX0JMT0NLX0xFTkdUSCkpCi0rCQkJCXsKLSsJICAgIAkJ CVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19TVFVDSyk7Ci0rCQkJCWN0eC0+ ZXJyb3IgPSAxOwotKwkJCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rCQkJCXJldHVybiAw OwotKwkJCQl9Ci0rCQkJfQotKwkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdU SCk7Ci0rCQlpZiAoIWN0eC0+c2Vjb25kKQotKwkJCXsKLSsJCQljdHgtPnNlY29uZCA9IDE7Ci0r CQkJaWYgKCFjdHgtPnRlc3RfbW9kZSkKLSsJCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJaWYg KG91dGxlbiA8PSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXsKLSsJCQltZW1jcHkob3V0LCBSLCBv dXRsZW4pOwotKwkJCWJyZWFrOwotKwkJCX0KLSsKLSsJCW1lbWNweShvdXQsIFIsIEFFU19CTE9D S19MRU5HVEgpOwotKwkJb3V0ICs9IEFFU19CTE9DS19MRU5HVEg7Ci0rCQlvdXRsZW4gLT0gQUVT X0JMT0NLX0xFTkdUSDsKLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsKLStpbnQgRklQU19y YW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtl eWxlbikKLSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQp OwotKwlyZXQgPSBmaXBzX3NldF9wcm5nX2tleSgmc2N0eCwga2V5LCBrZXlsZW4pOwotKwlDUllQ VE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStp bnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVk bGVuKQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7 Ci0rCXJldCA9IGZpcHNfc2V0X3Bybmdfc2VlZCgmc2N0eCwgc2VlZCwgc2VlZGxlbik7Ci0rCUNS WVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwot KwotK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0la RV9UIGNvdW50KQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tf UkFORCk7Ci0rCXJldCA9IGZpcHNfcmFuZCgmc2N0eCwgb3V0LCBjb3VudCk7Ci0rCUNSWVBUT193 X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBG SVBTX3JhbmRfc3RhdHVzKHZvaWQpCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3JfbG9jayhD UllQVE9fTE9DS19SQU5EKTsKLSsJcmV0ID0gc2N0eC5zZWVkZWQ7Ci0rCUNSWVBUT19yX3VubG9j ayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3ZvaWQgRklQU19y YW5kX3Jlc2V0KHZvaWQpCi0rCXsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsK LSsJZmlwc19yYW5kX3BybmdfcmVzZXQoJnNjdHgpOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRP X0xPQ0tfUkFORCk7Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBmaXBzX2RvX3JhbmRfc2VlZChjb25z dCB2b2lkICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4pCi0rCXsKLSsJRklQU19yYW5k X3NlZWQoc2VlZCwgc2VlZGxlbik7Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBmaXBzX2RvX3JhbmRf YWRkKGNvbnN0IHZvaWQgKnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbiwKLSsJCQkJCWRv dWJsZSBhZGRfZW50cm9weSkKLSsJewotKwlGSVBTX3JhbmRfc2VlZChzZWVkLCBzZWVkbGVuKTsK LSsJfQotKwotK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX2ZpcHNfbWV0aD0KLSsgICAg ewotKyAgICBmaXBzX2RvX3JhbmRfc2VlZCwKLSsgICAgRklQU19yYW5kX2J5dGVzLAotKyAgICBG SVBTX3JhbmRfcmVzZXQsCi0rICAgIGZpcHNfZG9fcmFuZF9hZGQsCi0rICAgIEZJUFNfcmFuZF9i eXRlcywKLSsgICAgRklQU19yYW5kX3N0YXR1cwotKyAgICB9OwotKwotK2NvbnN0IFJBTkRfTUVU SE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpCi0rewotKyAgcmV0dXJuICZyYW5kX2ZpcHNfbWV0 aDsKLSt9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2Zp cHNfcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAotLS0t IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmguZmlwcwkyMDEwLTAzLTMwIDEw OjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlw c19yYW5kLmgJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEs NzcgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g Ci0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBk aXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0r ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsg KgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaWZuZGVmIEhFQURFUl9GSVBT X1JBTkRfSAotKyNkZWZpbmUgSEVBREVSX0ZJUFNfUkFORF9ICi0rCi0rI2luY2x1ZGUgImRlcy5o IgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0 ZXJuICJDIiB7Ci0rI2VuZGlmCi0rCi0raW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2ln bmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4pOwotK2ludCBGSVBTX3JhbmRf c2VlZChjb25zdCB2b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKTsKLStpbnQgRklQU19y YW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pOwot KwotK2ludCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpOwotK3ZvaWQgRklQU19yYW5kX3Jlc2V0 KHZvaWQpOwotK2ludCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKLSsKLStp bnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19y YW5kX21ldGhvZCh2b2lkKTsKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgot KyNlbmRpZgotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBz X3JhbmRfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yYW5k X3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxm dGVzdC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCTIwMTAtMDMtMzAgMTA6 MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDM3MyBAQAotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVA b3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAq ICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up Ci0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K LSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgot KyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzX3JhbmQuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rCi0rCi0rdHlwZWRlZiBz dHJ1Y3QKLSsJewotKwl1bnNpZ25lZCBjaGFyIERUWzE2XTsKLSsJdW5zaWduZWQgY2hhciBWWzE2 XTsKLSsJdW5zaWduZWQgY2hhciBSWzE2XTsKLSsJfSBBRVNfUFJOR19UVjsKLSsKLSsvKiBUaGUg Zm9sbG93aW5nIHRlc3QgdmVjdG9ycyBhcmUgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUgUkdOVlMg c3BlYyAqLwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xMjhfa2V5WzE2XSA9Ci0rCQl7 MHhmMywweGIxLDB4NjYsMHg2ZCwweDEzLDB4NjAsMHg3MiwweDQyLAotKwkJIDB4ZWQsMHgwNiww eDFjLDB4YWIsMHhiOCwweGQ0LDB4NjIsMHgwMn07Ci0rCi0rc3RhdGljIEFFU19QUk5HX1RWIGFl c18xMjhfdHZbXSA9IHsKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZTYsMHhiMywweGJlLDB4 NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhl OSwweDIyLDB4Zjl9LAotKwkJCQkvKiBWICovCi0rCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDU5LDB4NTMsMHgxZSwweGQxLDB4M2IsMHhiMCww eGMwLDB4NTUsCi0rCQkgMHg4NCwweDc5LDB4NjYsMHg4NSwweGMxLDB4MmYsMHg3NiwweDQxfQot Kwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4 MjMsMHhmYSwweDYyLAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhm YX0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJ CQkJLyogUiAqLwotKwkJezB4N2MsMHgyMiwweDJjLDB4ZjQsMHhjYSwweDhmLDB4YTIsMHg0YywK LSsJCSAweDFjLDB4OWMsMHhiNiwweDQxLDB4YTksMHhmMywweDIyLDB4MGR9Ci0rCX0sCi0rCXsK LSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4 NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGZifSwKLSsJCQkJ LyogViAqLwotKwkJezB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJ CSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICov Ci0rCQl7MHg4YSwweGFhLDB4MDAsMHgzOSwweDY2LDB4NjcsMHg1YiwweGU1LAotKwkJIDB4Mjks MHgxNCwweDI4LDB4ODEsMHhhOSwweDRkLDB4NGUsMHhjN30KLSsJfSwKLSsJewotKwkJCQkvKiBE VCAqLwotKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAw eGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmN9LAotKwkJCQkvKiBWICovCi0r CQl7MHhmMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDg4 LDB4ZGQsMHhhNCwweDU2LDB4MzAsMHgyNCwweDIzLDB4ZTUsCi0rCQkgMHhmNiwweDlkLDB4YTUs MHg3ZSwweDdiLDB4OTUsMHhjNywweDNhfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7 MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAotKwkJIDB4ZDcsMHgxZCww eDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmZH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGY4LDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MDUsMHgyNSwweDky LDB4NDYsMHg2MSwweDc5LDB4ZDIsMHhjYiwKLSsJCSAweDc4LDB4YzQsMHgwYiwweDE0LDB4MGEs MHg1YSwweDlhLDB4Yzh9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMs MHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiww eGIwLDB4ZTksMHgyMywweDc3fSwKLSsJCQkJLyogViAqLwotKwkJezB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmV9LAotKwkJCQkvKiBSICovCi0rCQl7MHgwZCwweGQ1LDB4YTAsMHgzNiwweDdh LDB4NTksMHgyNiwweGJjLAotKwkJIDB4NDgsMHhkOSwweDM4LDB4YmYsMHhmMCwweDg1LDB4OGYs MHhlYX0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZTYsMHhiMywweGJlLDB4Nzgs MHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSww eDIzLDB4Nzh9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLAotKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm Zn0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweGFlLDB4NTMsMHg4NywweGVlLDB4OGMsMHhkOSwweDEy LDB4ZjUsCi0rCQkgMHg3MywweDUzLDB4YWUsMHgwMywweGY5LDB4ZDUsMHgxMywweDMzfQotKwl9 LAotK307Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9rZXlbMjRdID0KLSsJCXsw eDE1LDB4ZDgsMHg3OCwweDBkLDB4NjIsMHhkMywweDI1LDB4NmUsCi0rCQkgMHg0NCwweDY0LDB4 MTAsMHgxMywweDYwLDB4MmIsMHhhOSwweGJjLAotKwkJIDB4NGEsMHhmYiwweGNhLDB4ZWIsMHg0 YywweDhiLDB4OTksMHgzYn07Ci0rCi0rc3RhdGljIEFFU19QUk5HX1RWIGFlc18xOTJfdHZbXSA9 IHsKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5 LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGJ9 LAotKwkJCQkvKiBWICovCi0rCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJ CS8qIFIgKi8KLSsJCXsweDE3LDB4MDcsMHhkNSwweDI4LDB4MTksMHg3OSwweDFlLDB4ZWYsCi0r CQkgMHhhNSwweDBjLDB4YmYsMHgyNSwweGU1LDB4NTYsMHhiNCwweDkzfQotKwl9LAotKwl7Ci0r CQkJCS8qIERUICovCi0rCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMx LAotKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0Y30sCi0rCQkJCS8q IFYgKi8KLSsJCXsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkg MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwot KwkJezB4OTIsMHg4ZCwweGJlLDB4MDcsMHhkZCwweGM3LDB4NTgsMHhjMCwKLSsJCSAweDZmLDB4 MzUsMHg0MSwweDliLDB4MTcsMHhjOSwweGJkLDB4OWJ9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQg Ki8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhi ZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRkfSwKLSsJCQkJLyogViAqLwotKwkJ ezB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHhkNSww eGRlLDB4ZjQsMHg1MCwweGYzLDB4YjcsMHgxMCwweDRlLAotKwkJIDB4YjgsMHhjNiwweGY4LDB4 Y2YsMHhlMiwweGIxLDB4Y2EsMHhhMn0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4 M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3 ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGV9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweGNlLDB4MjksMHgwOCww eDQzLDB4ZmMsMHgzNCwweDQxLDB4ZTcsCi0rCQkgMHg0NywweDhmLDB4YjMsMHg2NiwweDJiLDB4 NDYsMHhiMSwweGJifQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHgzZiwweGQ4LDB4 ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgy NCwweDc4LDB4ZjMsMHg0Zn0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGY4LDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4YjMsMHgyNiwweDBmLDB4ZjUsMHhkNiww eGNhLDB4YTgsMHhiZiwKLSsJCSAweDg5LDB4YjgsMHg1ZSwweDJmLDB4MjIsMHg1NiwweDkyLDB4 MmZ9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4 ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhm MywweGM5fSwKLSsJCQkJLyogViAqLwotKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmV9 LAotKwkJCQkvKiBSICovCi0rCQl7MHgwNSwweGViLDB4MTgsMHg1MiwweDM0LDB4NDMsMHgwMCww eDQzLAotKwkJIDB4NmUsMHg1YSwweGE1LDB4ZmUsMHg3YiwweDMyLDB4YzQsMHgyZH0KLSsJfSwK LSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4 OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4Y2F9LAot KwkJCQkvKiBWICovCi0rCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZm LAotKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn0sCi0rCQkJCS8q IFIgKi8KLSsJCXsweDE1LDB4M2MsMHhlOCwweGQxLDB4MDQsMHhjNywweGFkLDB4NTAsCi0rCQkg MHgwYiwweGYwLDB4MDcsMHgxNiwweGU3LDB4NTYsMHg3YSwweGVhfQotKwl9LAotK307Ci0rCi0r c3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9rZXlbMzJdID0KLSsJCXsweDZkLDB4MTQsMHgw NiwweDZjLDB4YjYsMHhkOCwweDIxLDB4MmQsCi0rCQkgMHg4MiwweDhkLDB4ZmEsMHhmMiwweDdh LDB4MDMsMHhiNywweDlmLAotKwkJIDB4MGMsMHhjNywweDNlLDB4Y2QsMHg3NiwweGViLDB4ZWUs MHhiNSwKLSsJCSAweDIxLDB4MDUsMHg4YywweDRmLDB4MzEsMHg3YSwweDgwLDB4YmJ9OwotKwot K3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMjU2X3R2W10gPSB7Ci0rCXsKLSsJCQkJLyogRFQgKi8K LSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiww eGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDg4fSwKLSsJCQkJLyogViAqLwotKwkJezB4 ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHgzNSwweGM3 LDB4ZWYsMHhhNywweDc4LDB4NGQsMHgyOSwweGJjLAotKwkJIDB4ODIsMHg3OSwweDk5LDB4ZmIs MHhkMCwweGIzLDB4M2IsMHg3Mn0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEs MHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSww eDM0LDB4NzQsMHg4ZSwweDllLDB4ODl9LAotKwkJCQkvKiBWICovCi0rCQl7MHhjMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDZjLDB4ZjQsMHg0MiwweDVk LDB4YzcsMHgwNCwweDFhLDB4NDEsCi0rCQkgMHgyOCwweDJhLDB4NzgsMHhhOSwweGIwLDB4MTIs MHhjNCwweDk1fQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEs MHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCww eDhlLDB4OWUsMHg4YX0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGUwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MTYsMHg5MCwweGE0LDB4ZmYsMHg3YiwweDdl LDB4YjksMHgzMCwKLSsJCSAweGRiLDB4NjcsMHg0YiwweGFjLDB4MmQsMHhlMSwweGQxLDB4NzV9 Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQs MHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSww eDhifSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAot KwkJCQkvKiBSICovCi0rCQl7MHgxNCwweDZmLDB4ZjUsMHg5NSwweGExLDB4NDYsMHg2NSwweDMw LAotKwkJIDB4YmMsMHg1NywweGUyLDB4NGEsMHhmNywweDQ1LDB4NjIsMHgwNX0KLSsJfSwKLSsJ ewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAs MHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4OGN9LAotKwkJ CQkvKiBWICovCi0rCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAot KwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIg Ki8KLSsJCXsweDk2LDB4ZTIsMHhiNCwweDFlLDB4NjYsMHg1ZSwweDBmLDB4YTQsCi0rCQkgMHhj NSwweGNkLDB4YTIsMHgwNywweGNjLDB4YjcsMHg5NCwweDQwfQotKwl9LAotKwl7Ci0rCQkJCS8q IERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJ IDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWYsMHgwNn0sCi0rCQkJCS8qIFYgKi8K LSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkgMHhmZiww eGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKLSsJCQkJLyogUiAqLwotKwkJezB4 NjEsMHhjZSwweDFkLDB4NmEsMHg0OCwweDc1LDB4OTcsMHgyOCwKLSsJCSAweDRiLDB4NDEsMHhk ZSwweDE4LDB4NDQsMHg0ZiwweDU2LDB4ZWN9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJ CXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiwweGE5 LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZiwweDA3fSwKLSsJCQkJLyogViAqLwotKwkJezB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYsMHhmZiww eGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkvKiBSICovCi0rCQl7MHg1MiwweDg5LDB4 NTksMHg3OSwweDJkLDB4YWEsMHgyOCwweGIzLAotKwkJIDB4YjAsMHg4YSwweDNlLDB4NzAsMHhm YSwweDcxLDB4NTksMHg4NH0KLSsJfSwKLSt9OwotKwotKwotK3ZvaWQgRklQU19jb3JydXB0X3Ju ZygpCi0rICAgIHsKLSsgICAgYWVzXzE5Ml90dlswXS5WWzBdKys7Ci0rICAgIH0KLSsKLSsjZGVm aW5lIGZpcHNfcmFuZF90ZXN0KGtleSwgdHYpIFwKLSsJZG9fcmFuZF90ZXN0KGtleSwgc2l6ZW9m IGtleSwgdHYsIHNpemVvZih0dikvc2l6ZW9mKEFFU19QUk5HX1RWKSkKLSsKLStzdGF0aWMgaW50 IGRvX3JhbmRfdGVzdCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sCi0rCQkJQUVTX1BS TkdfVFYgKnR2LCBpbnQgbnR2KQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgUlsxNl07Ci0rCWludCBp OwotKwlpZiAoIUZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVuKSkKLSsJCXJldHVybiAwOwot Kwlmb3IgKGkgPSAwOyBpIDwgbnR2OyBpKyspCi0rCQl7Ci0rCQlGSVBTX3JhbmRfc2VlZCh0dltp XS5WLCAxNik7Ci0rCQlGSVBTX3JhbmRfc2V0X2R0KHR2W2ldLkRUKTsKLSsJCUZJUFNfcmFuZF9i eXRlcyhSLCAxNik7Ci0rCQlpZiAobWVtY21wKFIsIHR2W2ldLlIsIDE2KSkKLSsJCQlyZXR1cm4g MDsKLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsJCi0rCi0raW50IEZJUFNfc2VsZnRlc3Rfcm5n KCkKLSsJewotKwlGSVBTX3JhbmRfcmVzZXQoKTsKLSsJaWYgKCFGSVBTX3JhbmRfdGVzdF9tb2Rl KCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORyxGSVBTX1JfU0VM RlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoIWZpcHNfcmFuZF90ZXN0 KGFlc18xMjhfa2V5LGFlc18xMjhfdHYpCi0rCQl8fCAhZmlwc19yYW5kX3Rlc3QoYWVzXzE5Ml9r ZXksIGFlc18xOTJfdHYpCi0rCQl8fCAhZmlwc19yYW5kX3Rlc3QoYWVzXzI1Nl9rZXksIGFlc18y NTZfdHYpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcsRklQU19S X1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJRklQU19yYW5kX3Jlc2V0 KCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4w L2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Zp cHMvZmlwc19yYW5kdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3Jh bmR0ZXN0LmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCTIwMTAtMDMtMzAgMTA6MzM6 NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDI0OCBAQAotKy8qIENvcHlyaWdodCAoQykg MTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9u IHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0rICogVGhl IGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2Fw ZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFu ZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFwcGx5 IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBS U0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAg VGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlv biBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2VwdCB0aGF0 IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqIAotKyAq IENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdo dCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotKyAqIElm IHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUg Z2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUg bGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBt ZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGlu ZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0r ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGlj IHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5j b20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYg dGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBj cnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5k b3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotKyAqICAg IHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBh biBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAKLSsgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotKyAq IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK LSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1IgU0VSVklD RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0rICogT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT SUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNlIGFuZCBk aXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9y Ci0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRo aXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhl ciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGlj ZW5jZS5dCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0r ICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0 ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5j bHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KLSsKLSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKyNpZm5kZWYgT1BFTlNT TF9GSVBTCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50 ZigiTm8gRklQUyBSQU5EIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNl bHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rdHlwZWRlZiBzdHJ1Y3QKLSsJewot Kwl1bnNpZ25lZCBjaGFyIERUWzE2XTsKLSsJdW5zaWduZWQgY2hhciBWWzE2XTsKLSsJdW5zaWdu ZWQgY2hhciBSWzE2XTsKLSsJfSBBRVNfUFJOR19NQ1Q7Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNo YXIgYWVzXzEyOF9tY3Rfa2V5WzE2XSA9Ci0rCXsweDlmLDB4NWIsMHg1MSwweDIwLDB4MGIsMHhm MywweDM0LDB4YjUsCi0rCSAweGQ4LDB4MmIsMHhlOCwweGMzLDB4NzIsMHg1NSwweGM4LDB4NDh9 OwotKwotK3N0YXRpYyBBRVNfUFJOR19NQ1QgYWVzXzEyOF9tY3RfdHYgPSB7Ci0rCQkJLyogRFQg Ki8KLSsJezB4NjMsMHg3NiwweGJiLDB4ZTUsMHgyOSwweDAyLDB4YmEsMHgzYiwKLSsJIDB4Njcs MHhjOSwweDI1LDB4ZmEsMHg3MCwweDFmLDB4MTEsMHhhY30sCi0rCQkJLyogViAqLwotKwl7MHg1 NywweDJjLDB4OGUsMHg3NiwweDg3LDB4MjYsMHg0NywweDk3LAotKwkgMHg3ZSwweDc0LDB4ZmIs MHhkZCwweGM0LDB4OTUsMHgwMSwweGQxfSwKLSsJCQkvKiBSICovCi0rCXsweDQ4LDB4ZTksMHhi ZCwweDBkLDB4MDYsMHhlZSwweDE4LDB4ZmIsCi0rCSAweGU0LDB4NTcsMHg5MCwweGQ1LDB4YzMs MHhmYywweDliLDB4NzN9Ci0rfTsKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTkyX21j dF9rZXlbMjRdID0KLSsJezB4YjcsMHg2YywweDM0LDB4ZDEsMHgwOSwweDY3LDB4YWIsMHg3MywK LSsJIDB4NGQsMHg1YSwweGQ1LDB4MzQsMHg5OCwweDE2LDB4MGIsMHg5MSwKLSsJIDB4YmMsMHgz NSwweDUxLDB4MTYsMHg2YiwweGFlLDB4OTMsMHg4YX07Ci0rCi0rc3RhdGljIEFFU19QUk5HX01D VCBhZXNfMTkyX21jdF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7MHg4NCwweGNlLDB4MjIsMHg3 ZCwweDkxLDB4NWEsMHhhMywweGM5LAotKwkgMHg4NCwweDNjLDB4MGEsMHhiMywweGE5LDB4NjMs MHgxNSwweDUyfSwKLSsJCQkvKiBWICovCi0rCXsweGI2LDB4YWYsMHhlNiwweDhmLDB4OTksMHg5 ZSwweDkwLDB4NjQsCi0rCSAweGRkLDB4YzcsMHg3YSwweGMxLDB4YmIsMHg5MCwweDNhLDB4NmR9 LAotKwkJCS8qIFIgKi8KLSsJezB4ZmMsMHg4NSwweDYwLDB4OWEsMHgyOSwweDZmLDB4ZWYsMHgy MSwKLSsJIDB4ZGQsMHg4NiwweDIwLDB4MzIsMHg4YSwweDI5LDB4NmYsMHg0N30KLSt9OwotKwot K3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbWN0X2tleVszMl0gPQotKwl7MHg5YiwweDA1 LDB4YzgsMHg2OCwweGZmLDB4NDcsMHhmOCwweDNhLAotKwkgMHhhNiwweDNhLDB4YTgsMHhjYiww eDRlLDB4NzEsMHhiMiwweGUwLAotKwkgMHhiOCwweDdlLDB4ZjEsMHgzNywweGI2LDB4YjQsMHhm NiwweDZkLAotKwkgMHg4NiwweDMyLDB4ZmMsMHgxZiwweDVlLDB4MWQsMHgxZSwweDUwfTsKLSsK LStzdGF0aWMgQUVTX1BSTkdfTUNUIGFlc18yNTZfbWN0X3R2ID0gewotKwkJCS8qIERUICovCi0r CXsweDMxLDB4NmUsMHgzNSwweDlhLDB4YjEsMHg0NCwweGYwLDB4ZWUsCi0rCSAweDYyLDB4NmQs MHgwNCwweDQ2LDB4ZTAsMHhhMywweDkyLDB4NGN9LAotKwkJCS8qIFYgKi8KLSsJezB4NGYsMHhj ZCwweGMxLDB4ODcsMHg4MiwweDFmLDB4NGQsMHhhMSwKLSsJIDB4M2UsMHgwZSwweDU2LDB4NDQs MHg1OSwweGU4LDB4ODMsMHhjYX0sCi0rCQkJLyogUiAqLwotKwl7MHhjOCwweDg3LDB4YzIsMHg2 MSwweDViLDB4ZDAsMHhiOSwweGUxLAotKwkgMHhlNywweGYzLDB4OGIsMHhkNywweDViLDB4ZDUs MHhmMSwweDhkfQotK307Ci0rCi0rc3RhdGljIHZvaWQgZHVtcChjb25zdCB1bnNpZ25lZCBjaGFy ICpiLGludCBuKQotKyAgICB7Ci0rICAgIHdoaWxlKG4tLSA+IDApCi0rCXsKLSsJcHJpbnRmKCIg JTAyeCIsKmIrKyk7Ci0rCX0KLSsgICAgfQotKwotK3N0YXRpYyB2b2lkIGNvbXBhcmUoY29uc3Qg dW5zaWduZWQgY2hhciAqcmVzdWx0LGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4cGVjdGVkLAotKwkJ ICAgIGludCBuKQotKyAgICB7Ci0rICAgIGludCBpOwotKwotKyAgICBmb3IoaT0wIDsgaSA8IG4g OyArK2kpCi0rCWlmKHJlc3VsdFtpXSAhPSBleHBlY3RlZFtpXSkKLSsJICAgIHsKLSsJICAgIHB1 dHMoIlJhbmRvbSB0ZXN0IGZhaWxlZCwgZ290OiIpOwotKwkgICAgZHVtcChyZXN1bHQsbik7Ci0r CSAgICBwdXRzKCJcbiAgICAgICAgICAgICAgIGV4cGVjdGVkOiIpOwotKwkgICAgZHVtcChleHBl Y3RlZCxuKTsKLSsJICAgIHB1dGNoYXIoJ1xuJyk7Ci0rCSAgICBFWElUKDEpOwotKwkgICAgfQot KyAgICB9Ci0rCi0rCi0rc3RhdGljIHZvaWQgcnVuX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5LCBp bnQga2V5bGVuLCBBRVNfUFJOR19NQ1QgKnR2KQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIg YnVmWzE2XSwgZHRbMTZdOwotKyAgICBpbnQgaSwgajsKLSsgICAgRklQU19yYW5kX3Jlc2V0KCk7 Ci0rICAgIEZJUFNfcmFuZF90ZXN0X21vZGUoKTsKLSsgICAgRklQU19yYW5kX3NldF9rZXkoa2V5 LCBrZXlsZW4pOwotKyAgICBGSVBTX3JhbmRfc2VlZCh0di0+ViwgMTYpOwotKyAgICBtZW1jcHko ZHQsIHR2LT5EVCwgMTYpOwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKLSsJewot KyAgICAJRklQU19yYW5kX3NldF9kdChkdCk7Ci0rCUZJUFNfcmFuZF9ieXRlcyhidWYsIDE2KTsK LSsJLyogSW5jcmVtZW50IERUICovCi0rCWZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKLSsJCXsK LSsJCWR0W2pdKys7Ci0rCQlpZiAoZHRbal0pCi0rCQkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsKLSsg ICAgY29tcGFyZShidWYsdHYtPlIsIDE2KTsKLSsgICAgfQotKwotK2ludCBtYWluKCkKLSsJewot KwlydW5fdGVzdChhZXNfMTI4X21jdF9rZXksIDE2LCAmYWVzXzEyOF9tY3RfdHYpOwotKwlwcmlu dGYoIkZJUFMgUFJORyB0ZXN0IDEgZG9uZVxuIik7Ci0rCXJ1bl90ZXN0KGFlc18xOTJfbWN0X2tl eSwgMjQsICZhZXNfMTkyX21jdF90dik7Ci0rCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMiBkb25l XG4iKTsKLSsJcnVuX3Rlc3QoYWVzXzI1Nl9tY3Rfa2V5LCAzMiwgJmFlc18yNTZfbWN0X3R2KTsK LSsJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAzIGRvbmVcbiIpOwotKwlyZXR1cm4gMDsKLSsJfQot KwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JzYV9z ZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVz dC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZp cHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4w L2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAw MDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsNDQxIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMDMtMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0r ICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv Ci0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5z c2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoK LSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5k aWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25m Lmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG5b XSA9Ci0rIlx4MDBceEJCXHhGOFx4MkZceDA5XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4XHhBQ1x4 MkJceDlEXHhBOFx4NzEiCi0rIlx4RjdceDM2XHg4RFx4MDdceEVFXHhENFx4MTBceDQzXHhBNFx4 NDBceEQ2XHhCNlx4RjBceDc0XHg1NFx4RjUiCi0rIlx4MUZceEI4XHhERlx4QkFceEFGXHgwM1x4 NUNceDAyXHhBQlx4NjFceEVBXHg0OFx4Q0VceEVCXHg2Rlx4Q0QiCi0rIlx4NDhceDc2XHhFRFx4 NTJceDBEXHg2MFx4RTFceEVDXHg0Nlx4MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCi0rIlx4 N0ZceEFGXHhCOFx4RTBceEEzXHhERlx4QzdceDM3XHg3Mlx4M0VceEU2XHhCNFx4QjdceEQ5XHgz QVx4MjUiCi0rIlx4ODRceEVFXHg2QVx4NjRceDlEXHgwNlx4MDlceDUzXHg3NFx4ODhceDM0XHhC Mlx4NDVceDQ1XHg5OFx4MzkiCi0rIlx4NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgx Rlx4NTJceDdBXHg5QVx4NDFceEY2XHhDMVx4NjgiCi0rIlx4N0ZceEUyXHg1M1x4NzJceDk4XHhD QVx4MkFceDhGXHg1OVx4NDZceEY4XHhFNVx4RkRceDA5XHgxRFx4QkQiCi0rIlx4Q0IiOwotKwot KwotK3N0YXRpYyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5KQotKyAgICB7Ci0rICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJceDExIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgZFtdID0KLSsiXHgwMFx4QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4RjJceDg5 XHhDNFx4QjlceDg4XHhEQlx4MzBceEMxXHhDRCIKLSsiXHhGOFx4M0ZceDMxXHgyNVx4MUVceDA2 XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4XHgwMVx4NTdceDk2XHg0MSIKLSsiXHhCMlx4OTRceDEw XHhCM1x4QzdceDk5XHg4RFx4NkJceEM0XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIKLSsi XHhENlx4ODdceDBEXHhBMlx4QzBceDgyXHhBOVx4MzlceEUzXHg3Rlx4RENceEI4XHgyRVx4Qzlc eDNFXHhEQSIKLSsiXHhDOVx4N0ZceEYzXHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4MUNc eDc2XHhGMVx4QTlceDUyXHg5NCIKLSsiXHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4MDlc eDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQyXHgwQSIKLSsiXHg5M1x4OTlceDI2XHhFRFx4NEZc eDc0XHhBMVx4M0VceEREXHhGQlx4RTFceEExXHhDRVx4Q0NceDQ4XHg5NCIKLSsiXHhBRlx4OTRc eDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhCMyIK LSsiXHhDMSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9Ci0rIlx4 MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4QjlceEIzXHhDOVx4MDhceDgxXHgwQlx4MTBceEExXHhC NVx4NjAiCi0rIlx4MDFceDk5XHhFQlx4OUZceDQ0XHhBRVx4RjRceEZEXHhBNFx4OTNceEI4XHgx QVx4OUVceDNEXHg4NFx4RjYiCi0rIlx4MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURceDFFXHgz Qlx4N0VceDI4XHhGQVx4RTdceEFBXHgwNFx4MEEiCi0rIlx4MkRceDVCXHgyNVx4MjFceDc2XHg0 NVx4OURceDFGXHgzOVx4NzVceDQxXHhCQVx4MkFceDU4XHhGQlx4NjUiCi0rIlx4OTkiOwotKwot KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQotKyJceDAwXHhDOVx4N0ZceEIx XHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhBQVx4RDFceEQ5IgotKyJceDM1 XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2XHhCMVx4RDBceDVBXHgwRlx4MjBceDM1XHgwMlx4OEJc eDlEIgotKyJceDg2XHg5OFx4NDBceEI0XHgxNlx4NjZceEI0XHgyRVx4OTJceEVBXHgwRFx4QTNc eEI0XHgzMlx4MDRceEI1IgotKyJceENGXHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4QTVc eEE0XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1IgotKyJceDAzIjsKLSsKLSsgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZG1wMVtdID0KLSsiXHg1NFx4NDlceDRDXHhBNlx4M0VceEJBXHgw M1x4MzdceEU0XHhFMlx4NDBceDIzXHhGQ1x4RDZceDlBXHg1QSIKLSsiXHhFQlx4MDdceEREXHhE Q1x4MDFceDgzXHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJceEIxXHgzRSIKLSsiXHhE OVx4NDlceDA5XHg3NVx4RUFceEI3XHg3NFx4MTRceEZGXHg1OVx4QzFceEY3XHg2OVx4MkVceDlB XHgyRSIKLSsiXHgyMFx4MkJceDM4XHhGQ1x4OTFceDBBXHg0N1x4NDFceDc0XHhBRFx4QzlceDND XHgxRlx4NjdceEM5XHg4MSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRt cTFbXSA9Ci0rIlx4NDdceDFFXHgwMlx4OTBceEZGXHgwQVx4RjBceDc1XHgwM1x4NTFceEI3XHhG OFx4NzhceDg2XHg0Q1x4QTkiCi0rIlx4NjFceEFEXHhCRFx4M0FceDhBXHg3RVx4OTlceDFDXHg1 Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0Nlx4QTciCi0rIlx4RjlceDgwXHgzRlx4OEZceDZGXHg4 QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4QVx4RTRceDdBXHgyMlx4MEQiCi0rIlx4MUJceDk5XHhB NFx4OTVceDg0XHg5OFx4MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4M0QiOwot KyAgICAKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXFtcFtdID0KLSsiXHgwMFx4 QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4MDFceDE5XHg4RFx4MjZceDVCXHhEQlx4QUVceDk0XHgy MyIKLSsiXHhCM1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUwXHg5M1x4MDdceDdGXHhD RFx4MzlceEUyXHgxMSIKLSsiXHg5Rlx4QzlceDg2XHgzMlx4MTVceDRGXHg1OFx4ODNceEIxXHg2 N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0RSIKLSsiXHg5RVx4MkVceDBGXHg5Nlx4NTZceEU2XHg5 OFx4RUFceDM2XHg2Nlx4RURceEZCXHgyNVx4NzlceDgwXHgzOSIKLSsiXHhGNyI7Ci0rCi0rICAg IGtleS0+biA9IEJOX2JpbjJibihuLCBzaXplb2YobiktMSwga2V5LT5uKTsKLSsgICAga2V5LT5l ID0gQk5fYmluMmJuKGUsIHNpemVvZihlKS0xLCBrZXktPmUpOwotKyAgICBrZXktPmQgPSBCTl9i aW4yYm4oZCwgc2l6ZW9mKGQpLTEsIGtleS0+ZCk7Ci0rICAgIGtleS0+cCA9IEJOX2JpbjJibihw LCBzaXplb2YocCktMSwga2V5LT5wKTsKLSsgICAga2V5LT5xID0gQk5fYmluMmJuKHEsIHNpemVv ZihxKS0xLCBrZXktPnEpOwotKyAgICBrZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwgc2l6ZW9m KGRtcDEpLTEsIGtleS0+ZG1wMSk7Ci0rICAgIGtleS0+ZG1xMSA9IEJOX2JpbjJibihkbXExLCBz aXplb2YoZG1xMSktMSwga2V5LT5kbXExKTsKLSsgICAga2V5LT5pcW1wID0gQk5fYmluMmJuKGlx bXAsIHNpemVvZihpcW1wKS0xLCBrZXktPmlxbXApOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQot KwotK3ZvaWQgRklQU19jb3JydXB0X3JzYSgpCi0rICAgIHsKLSsgICAgblswXSsrOwotKyAgICB9 Ci0rCi0rLyogS25vd24gQW5zd2VyIFRlc3QgKEtBVCkgZGF0YSBmb3IgdGhlIGFib3ZlIFJTQSBw cml2YXRlIGtleSBzaWduaW5nCi0rICoga2F0X3Ricy4KLSsgKi8KLSsKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBrYXRfdGJzW10gPSAiT3BlblNTTCBGSVBTIDE0MC0yIFB1YmxpYyBLZXkg UlNBIEtBVCI7Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hB MVtdID0gewotKyAgMHgyRCwgMHhBRiwgMHg2RSwgMHhDMiwgMHg5OCwgMHhGQiwgMHg4QSwgMHhB MSwgMHhCOSwgMHg0NiwgMHhEQSwgMHgwRiwKLSsgIDB4MDEsIDB4MUUsIDB4MzcsIDB4OTMsIDB4 QzIsIDB4NTUsIDB4MjcsIDB4RTQsIDB4MUQsIDB4RDIsIDB4OTAsIDB4QkIsCi0rICAweEY0LCAw eEJGLCAweDRBLCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAweEU4LCAweDBDLCAweEI3LCAweEY4 LCAweEQzLAotKyAgMHhEMSwgMHhERiwgMHhFNywgMHhCRSwgMHg4MCwgMHgwNSwgMHhDMywgMHhC NSwgMHhDNywgMHg4MywgMHhENSwgMHg0QywKLSsgIDB4N0YsIDB4NDksIDB4RkIsIDB4M0YsIDB4 MjksIDB4OUIsIDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAsIDB4RDAsIDB4QTcsCi0rICAweDBELCAw eEE5LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAweEUzLCAweDVFLCAweDNGLCAweDlC LCAweEY1LAotKyAgMHhCNiwgMHhGMywgMHhGMiwgMHg1RSwgMHg3NCwgMHhDOSwgMHg4MywgMHg4 MSwgMHg0NywgMHhGMCwgMHhDNSwgMHg0NSwKLSsgIDB4MEEsIDB4RTksIDB4OEUsIDB4MzgsIDB4 RDcsIDB4MTgsIDB4QzYsIDB4MkEsIDB4MEYsIDB4RjgsIDB4QjcsIDB4MzEsCi0rICAweEQ2LCAw eDU1LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAweEU2LCAweERCLCAweDlGLCAweEJB LCAweEU4LAotKyAgMHgyMywgMHhCNSwgMHg3RiwgMHhEQywgMHgwOCwgMHhFQSwgMHhENSwgMHgy NiwgMHgxRSwgMHgyMCwgMHgyNSwgMHg4NCwKLSsgIDB4MjYsIDB4QzYsIDB4NzksIDB4QzksIDB4 OUIsIDB4M0QsIDB4N0UsIDB4QTkKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGthdF9SU0FfUFNTX1NIQTIyNFtdID0gewotKyAgMHgzOSwgMHg0QSwgMHg2QSwgMHgyMCwgMHhC QywgMHhFOSwgMHgzMywgMHhFRCwgMHhFRiwgMHhDNSwgMHg1OCwgMHhBNywKLSsgIDB4RkUsIDB4 ODEsIDB4QzQsIDB4MzYsIDB4NTAsIDB4OUEsIDB4MkMsIDB4ODIsIDB4OTgsIDB4MDgsIDB4OTUs IDB4RkEsCi0rICAweEIxLCAweDlFLCAweEQyLCAweDU1LCAweDYxLCAweDg3LCAweDIxLCAweDU5 LCAweDg3LCAweDdCLCAweDFGLCAweDU3LAotKyAgMHgzMCwgMHg5RCwgMHgwRCwgMHg0QSwgMHgw NiwgMHhFQiwgMHg1MiwgMHgzNywgMHg1NSwgMHg1NCwgMHgxQywgMHg4OSwKLSsgIDB4ODMsIDB4 NzUsIDB4NTksIDB4NjUsIDB4NjQsIDB4OTAsIDB4MkUsIDB4MTYsIDB4Q0MsIDB4ODYsIDB4MDUs IDB4RUUsCi0rICAweEIxLCAweEU2LCAweDdCLCAweEJBLCAweDE2LCAweDc1LCAweDBELCAweDBD LCAweDY0LCAweDBCLCAweEFCLCAweDIyLAotKyAgMHgxNSwgMHg3OCwgMHg2QiwgMHg2RiwgMHhB NCwgMHhGQiwgMHg3NywgMHg0MCwgMHg2NCwgMHg2MiwgMHhEMSwgMHhCNSwKLSsgIDB4MzcsIDB4 MUUsIDB4RTAsIDB4M0QsIDB4QTgsIDB4RjksIDB4RDIsIDB4QkQsIDB4QUEsIDB4MzgsIDB4MjQs IDB4NDksCi0rICAweDU4LCAweEQyLCAweDc0LCAweDg1LCAweEY0LCAweEI1LCAweDkzLCAweDhF LCAweEY1LCAweDAzLCAweEVBLCAweDJELAotKyAgMHhDOCwgMHg1MiwgMHhGQSwgMHhDRiwgMHg3 RSwgMHgzNSwgMHhCMCwgMHg2QSwgMHhBRiwgMHg5NSwgMHhDMCwgMHgwMCwKLSsgIDB4NTQsIDB4 NzYsIDB4M0QsIDB4MEMsIDB4OUMsIDB4QjIsIDB4RUUsIDB4QzAKLSt9OwotKwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTI1NltdID0gewotKyAgMHg2RCwgMHgz RCwgMHhCRSwgMHg4RiwgMHg2MCwgMHg2RCwgMHgyNSwgMHgxNCwgMHhGMCwgMHgzMSwgMHhFMywg MHg4OSwKLSsgIDB4MDAsIDB4OTcsIDB4RkEsIDB4OTksIDB4NzEsIDB4MjgsIDB4RTUsIDB4MTAs IDB4MjUsIDB4OUEsIDB4RjMsIDB4OEYsCi0rICAweDdCLCAweEM1LCAweEE4LCAweDRBLCAweDc0 LCAweDUxLCAweDM2LCAweEUyLCAweDhELCAweDdELCAweDczLCAweDI4LAotKyAgMHhDMSwgMHg3 NywgMHhDNiwgMHgyNywgMHg5NywgMHgwMCwgMHg4QiwgMHgwMCwgMHhBMywgMHg5NiwgMHg3Mywg MHg0RSwKLSsgIDB4N0QsIDB4MkUsIDB4MkMsIDB4MzQsIDB4NjgsIDB4OEMsIDB4OEUsIDB4REYs IDB4OUQsIDB4NDksIDB4NDcsIDB4MDUsCi0rICAweEFCLCAweEY1LCAweDAxLCAweEQ2LCAweDgx LCAweDQ3LCAweDcwLCAweEY1LCAweDFELCAweDZELCAweDI2LCAweEJBLAotKyAgMHgyRiwgMHg3 QSwgMHg1NCwgMHg1MywgMHg0RSwgMHhFRCwgMHg3MSwgMHhEOSwgMHg1QSwgMHhGMywgMHhEQSwg MHhCNiwKLSsgIDB4MEIsIDB4NDcsIDB4MzQsIDB4QUYsIDB4OTAsIDB4REMsIDB4QzgsIDB4RDks IDB4NkYsIDB4NTYsIDB4Q0QsIDB4OUYsCi0rICAweDIxLCAweEI3LCAweDdFLCAweEFELCAweDdD LCAweDJGLCAweDc1LCAweDUwLCAweDQ3LCAweDEyLCAweEU0LCAweDZELAotKyAgMHg1RiwgMHhC NywgMHgwMSwgMHhERiwgMHhDMywgMHgxMSwgMHg2QywgMHhBOSwgMHg5RSwgMHg0OSwgMHhCOSwg MHhGNiwKLSsgIDB4NzIsIDB4RjQsIDB4RjYsIDB4RUYsIDB4ODgsIDB4MUUsIDB4MkQsIDB4MUMK LSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTM4NFtd ID0gewotKyAgMHg0MCwgMHhGQiwgMHhBMSwgMHgyMSwgMHhGNCwgMHhCMiwgMHg0MCwgMHg5QSwg MHhCNCwgMHgzMSwgMHhBOCwgMHhGMiwKLSsgIDB4RUMsIDB4MUMsIDB4QzQsIDB4QzgsIDB4N0Ms IDB4MjIsIDB4NjUsIDB4OUMsIDB4NTcsIDB4NDUsIDB4Q0QsIDB4NUUsCi0rICAweDg2LCAweDAw LCAweEY3LCAweDI1LCAweDc4LCAweERFLCAweERDLCAweDdBLCAweDcxLCAweDQ0LCAweDlBLCAw eENELAotKyAgMHhBQSwgMHgyNSwgMHhGNCwgMHhCMiwgMHhGQywgMHhGMCwgMHg3NSwgMHhEOSwg MHgyRiwgMHg3OCwgMHgyMywgMHg3RiwKLSsgIDB4NkYsIDB4MDIsIDB4RUYsIDB4QzEsIDB4QUYs IDB4QTYsIDB4MjgsIDB4MTYsIDB4MzEsIDB4REMsIDB4NDIsIDB4NkMsCi0rICAweEIyLCAweDQ0 LCAweEU1LCAweDRELCAweDY2LCAweEEyLCAweEU2LCAweDcxLCAweEYzLCAweEFDLCAweDRGLCAw eEZCLAotKyAgMHg5MSwgMHhDQSwgMHhGNSwgMHg3MCwgMHhFRiwgMHg2QiwgMHg5RCwgMHhBNCwg MHhFRiwgMHhEOSwgMHgzRCwgMHgyRiwKLSsgIDB4M0EsIDB4QkUsIDB4ODksIDB4MzgsIDB4NTks IDB4MDEsIDB4QkEsIDB4REEsIDB4MzIsIDB4QUQsIDB4NDIsIDB4ODksCi0rICAweDk4LCAweDhC LCAweDM5LCAweDQ0LCAweEYwLCAweEZDLCAweDM4LCAweEFDLCAweDg3LCAweDFGLCAweENBLCAw eDZGLAotKyAgMHg0OCwgMHhGNiwgMHhBRSwgMHhENywgMHg0NSwgMHhFRSwgMHhBRSwgMHg4OCwg MHgwRSwgMHg2MCwgMHhGNCwgMHg1NSwKLSsgIDB4NDgsIDB4NDQsIDB4RUUsIDB4MUYsIDB4OTAs IDB4MTgsIDB4NEIsIDB4RjEKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGth dF9SU0FfUFNTX1NIQTUxMltdID0gewotKyAgMHgwNywgMHgxRSwgMHhEOCwgMHhENSwgMHgwNSwg MHhFOCwgMHhFNiwgMHhFNiwgMHg1NywgMHhBRSwgMHg2MywgMHg4QywKLSsgIDB4QzYsIDB4ODMs IDB4QjcsIDB4QTAsIDB4NTksIDB4QkIsIDB4RjIsIDB4QzYsIDB4OEYsIDB4MTIsIDB4NTMsIDB4 OUEsCi0rICAweDlCLCAweDU0LCAweDlFLCAweEIzLCAweEMxLCAweDFELCAweDIzLCAweDRELCAw eDUxLCAweEVELCAweDlFLCAweERELAotKyAgMHg0QiwgMHhGMywgMHg0NiwgMHg5QiwgMHg2Qiwg MHhGNiwgMHg3QywgMHgyNCwgMHg2MCwgMHg3OSwgMHgyMywgMHgzOSwKLSsgIDB4MDEsIDB4MUMs IDB4NTEsIDB4Q0IsIDB4RDgsIDB4RTksIDB4OUEsIDB4MDEsIDB4NjcsIDB4NUYsIDB4RkUsIDB4 RDcsCi0rICAweDdDLCAweEUzLCAweDdGLCAweEVELCAweERCLCAweDg3LCAweEJCLCAweEYwLCAw eDNELCAweDc4LCAweDU1LCAweDYxLAotKyAgMHg1NywgMHhFMywgMHgwRiwgMHhFMywgMHhEMiwg MHg5RCwgMHgwQywgMHgyQSwgMHgyMCwgMHhCMCwgMHg4NSwgMHgxMywKLSsgIDB4QzUsIDB4NDcs IDB4MzQsIDB4MEQsIDB4MzIsIDB4MTUsIDB4QzgsIDB4QUUsIDB4OUEsIDB4NkEsIDB4MzksIDB4 NjMsCi0rICAweDJELCAweDYwLCAweEY1LCAweDRDLCAweERGLCAweDhBLCAweDQ4LCAweDRCLCAw eEJGLCAweEY0LCAweEE4LCAweEZFLAotKyAgMHg3NiwgMHhGMiwgMHgzMiwgMHgxQiwgMHg5Qywg MHg3QywgMHhDQSwgMHhGRSwgMHg3RiwgMHg4MCwgMHhDMiwgMHg4OCwKLSsgIDB4NUMsIDB4OTcs IDB4NzAsIDB4QjQsIDB4MjYsIDB4QzksIDB4MTQsIDB4OEIKLSt9OwotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMVtdID0gewotKyAgMHg3MSwgMHhFRSwgMHgxQSwg MHhDMCwgMHhGRSwgMHgwMSwgMHg5MywgMHg1NCwgMHg3OSwgMHg1QywgMHhGMiwgMHg0QywKLSsg IDB4NEEsIDB4RkQsIDB4MUEsIDB4MDUsIDB4OEYsIDB4NjQsIDB4QjEsIDB4NkQsIDB4NjEsIDB4 MzMsIDB4OEQsIDB4OUIsCi0rICAweEU3LCAweEZELCAweDYwLCAweEEzLCAweDgzLCAweEI1LCAw eEEzLCAweDUxLCAweDU1LCAweDc3LCAweDkwLCAweENGLAotKyAgMHhEQywgMHgyMiwgMHgzNywg MHg4RSwgMHhEMCwgMHhFMSwgMHhBRSwgMHgwOSwgMHhFMywgMHgzRCwgMHgxRSwgMHhGOCwKLSsg IDB4ODAsIDB4RDEsIDB4OEIsIDB4QzIsIDB4RUMsIDB4MEEsIDB4RDcsIDB4NkIsIDB4ODgsIDB4 OEIsIDB4OEIsIDB4QTEsCi0rICAweDIwLCAweDIyLCAweEJFLCAweDU5LCAweDVCLCAweEUwLCAw eDIzLCAweDI0LCAweEExLCAweDQ5LCAweDMwLCAweEJBLAotKyAgMHhBOSwgMHg5RSwgMHhFOCwg MHhCMSwgMHg4QSwgMHg2MiwgMHgxNiwgMHhCRiwgMHg0RSwgMHhDQSwgMHgyRSwgMHg0RSwKLSsg IDB4QkMsIDB4MjksIDB4QTgsIDB4NjcsIDB4MTMsIDB4QjcsIDB4OUYsIDB4MUQsIDB4MDQsIDB4 NDQsIDB4RTUsIDB4NUYsCi0rICAweDM1LCAweDA3LCAweDExLCAweEJDLCAweEVELCAweDE5LCAw eDM3LCAweDIxLCAweENGLCAweDIzLCAweDQ4LCAweDFGLAotKyAgMHg3MiwgMHgwNSwgMHhERSwg MHhFNiwgMHhFOCwgMHg3RiwgMHgzMywgMHg4QSwgMHg3NiwgMHg0QiwgMHgyRiwgMHg5NSwKLSsg IDB4REYsIDB4RjEsIDB4NUYsIDB4ODQsIDB4ODAsIDB4RDksIDB4NDYsIDB4QjQKLSt9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjI0W10gPSB7Ci0rICAweDYy LCAweEFBLCAweDc5LCAweEE5LCAweDE4LCAweDBFLCAweDVGLCAweDhDLCAweEJCLCAweEI3LCAw eDE1LCAweEY5LAotKyAgMHgyNSwgMHhCQiwgMHhGQSwgMHhENCwgMHgzQSwgMHgzNCwgMHhFRCwg MHg5RSwgMHhBMCwgMHhBOSwgMHgxOCwgMHg4RCwKLSsgIDB4NUIsIDB4NTUsIDB4OUEsIDB4N0Us IDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUsIDB4MUEsIDB4QzUsIDB4ODksCi0rICAweDA4 LCAweEUyLCAweDFCLCAweEJELCAweDYyLCAweDUwLCAweDE3LCAweDc2LCAweDMwLCAweDJDLCAw eDlFLCAweENELAotKyAgMHhBNCwgMHgwMiwgMHhBRCwgMHhCMSwgMHg2RCwgMHg0NCwgMHg2RCwg MHhENSwgMHhDNiwgMHg0NSwgMHg0MSwgMHhFNSwKLSsgIDB4RUUsIDB4MUYsIDB4OEQsIDB4N0Us IDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEsIDB4NUUsIDB4MEIsIDB4QTksIDB4Q0MsCi0rICAweERC LCAweDU5LCAweDU1LCAweDg3LCAweDA5LCAweDI1LCAweDcwLCAweDg2LCAweDg0LCAweDAyLCAw eEM2LCAweDNCLAotKyAgMHgwQiwgMHg0NCwgMHg0QywgMHg0NiwgMHg5NSwgMHhGNCwgMHhGOCwg MHg1QSwgMHg5MSwgMHgyOCwgMHgzRSwgMHhCMiwKLSsgIDB4NTgsIDB4MkUsIDB4MDYsIDB4NDUs IDB4NDksIDB4RTAsIDB4OTIsIDB4RTIsIDB4QzAsIDB4NjYsIDB4RTYsIDB4MzUsCi0rICAweEQ5 LCAweDc5LCAweDdGLCAweDE3LCAweDVFLCAweDAyLCAweDczLCAweDA0LCAweDc3LCAweDgyLCAw eEU2LCAweERDLAotKyAgMHg0MCwgMHgyMSwgMHg4OSwgMHg4QiwgMHgzNywgMHgzRSwgMHgxRSwg MHg4RAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyNTZb XSA9IHsKLSsgIDB4MEQsIDB4NTUsIDB4RTIsIDB4QUEsIDB4ODEsIDB4REIsIDB4OEUsIDB4ODIs IDB4MDUsIDB4MTcsIDB4QTUsIDB4MjMsCi0rICAweEU3LCAweDNCLCAweDFELCAweEFGLCAweEZC LCAweDhDLCAweEQwLCAweDgxLCAweDIwLCAweDdCLCAweEFBLCAweDIzLAotKyAgMHg5MiwgMHg4 NywgMHg4QywgMHhEMSwgMHg1MywgMHg4NSwgMHgxNiwgMHhEQywgMHhCRSwgMHhBRCwgMHg2Riwg MHgzNSwKLSsgIDB4OTgsIDB4MkQsIDB4NjksIDB4ODQsIDB4QkYsIDB4RDksIDB4OEEsIDB4MDEs IDB4MTcsIDB4NTgsIDB4QjIsIDB4NkUsCi0rICAweDJDLCAweDQ0LCAweDlCLCAweDkwLCAweEYx LCAweEZCLCAweDUxLCAweEU4LCAweDZBLCAweDkwLCAweDJELCAweDE4LAotKyAgMHgwRSwgMHhD MCwgMHg5MCwgMHgxMCwgMHgyNCwgMHhBOSwgMHgxRCwgMHhCMywgMHg1OCwgMHg3QSwgMHg5MSwg MHgzMCwKLSsgIDB4QkUsIDB4MjIsIDB4QzcsIDB4RDMsIDB4RUMsIDB4QzMsIDB4MDksIDB4NUQs IDB4QkYsIDB4RTIsIDB4ODAsIDB4M0EsCi0rICAweDdDLCAweDg1LCAweEI0LCAweEJDLCAweEQx LCAweEU5LCAweEYwLCAweDVDLCAweERFLCAweDgxLCAweEE2LCAweDM4LAotKyAgMHhCOCwgMHg0 MiwgMHhCQiwgMHg4NiwgMHhDNSwgMHg5RCwgMHhDRSwgMHg3QywgMHgyQywgMHhFRSwgMHhEMSwg MHhEQSwKLSsgIDB4MjcsIDB4NDgsIDB4MkIsIDB4RjUsIDB4QUIsIDB4QjksIDB4RjcsIDB4ODAs IDB4RDEsIDB4OTAsIDB4MjcsIDB4OTAsCi0rICAweEJELCAweDQ0LCAweDk3LCAweDYwLCAweENE LCAweDU3LCAweEMwLCAweDdBCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBr YXRfUlNBX1NIQTM4NFtdID0gewotKyAgMHgxRCwgMHhFMywgMHg2QSwgMHhERCwgMHgyNywgMHg0 QywgMHhDMCwgMHhBNSwgMHgyNywgMHhFRiwgMHhFNiwgMHgxRiwKLSsgIDB4RDIsIDB4OTEsIDB4 NjgsIDB4NTksIDB4MDQsIDB4QUUsIDB4QkQsIDB4OTksIDB4NjMsIDB4NTYsIDB4NDcsIDB4Qzcs Ci0rICAweDZGLCAweDIyLCAweDE2LCAweDQ4LCAweEQwLCAweEY5LCAweDE4LCAweEE5LCAweENB LCAweEZBLCAweDVELCAweDVDLAotKyAgMHhBNywgMHg2NSwgMHg1MiwgMHg4QSwgMHhDOCwgMHg0 NCwgMHg3RSwgMHg4NiwgMHg1RCwgMHhBOSwgMHhBNiwgMHg1NSwKLSsgIDB4NjUsIDB4M0UsIDB4 RDksIDB4MkQsIDB4MDIsIDB4MzgsIDB4QTgsIDB4NzksIDB4MjgsIDB4N0YsIDB4QjYsIDB4Q0Ys Ci0rICAweDgyLCAweERELCAweDdFLCAweDU1LCAweEUxLCAweEIxLCAweEJDLCAweEUyLCAweDE5 LCAweDJCLCAweDMwLCAweEMyLAotKyAgMHgxQiwgMHgyQiwgMHhCMCwgMHg4MiwgMHg0NiwgMHhB QywgMHg0QiwgMHhEMSwgMHhFMiwgMHg3RCwgMHhFQiwgMHg4QywKLSsgIDB4RkYsIDB4OTUsIDB4 RTksIDB4NkEsIDB4MUMsIDB4M0QsIDB4NEQsIDB4QkYsIDB4OEYsIDB4OEIsIDB4OUMsIDB4Q0Qs Ci0rICAweEVBLCAweDg1LCAweEVFLCAweDAwLCAweERDLCAweDFDLCAweEE3LCAweEVCLCAweEQw LCAweDhGLCAweDk5LCAweEYxLAotKyAgMHgxNiwgMHgyOCwgMHgyNCwgMHg2NCwgMHgwNCwgMHgz OSwgMHgyRCwgMHg1OCwgMHgxRSwgMHgzNywgMHhEQywgMHgwNCwKLSsgIDB4QkQsIDB4MzEsIDB4 QTIsIDB4MkYsIDB4QjMsIDB4MzUsIDB4NTYsIDB4QkYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBNTEyW10gPSB7Ci0rICAweDY5LCAweDUyLCAweDFCLCAw eDUxLCAweDVFLCAweDA2LCAweENBLCAweDlCLCAweDE2LCAweDUxLCAweDVELCAweENGLAotKyAg MHg0OSwgMHgyNSwgMHg0QSwgMHhBMSwgMHg2QSwgMHg3NywgMHg0QywgMHgzNiwgMHg0MCwgMHhG OCwgMHhCMiwgMHg5QSwKLSsgIDB4MTUsIDB4RUEsIDB4NUMsIDB4RTUsIDB4RTYsIDB4ODIsIDB4 RTAsIDB4ODYsIDB4ODIsIDB4NkIsIDB4MzIsIDB4RjEsCi0rICAweDA0LCAweEMxLCAweDVBLCAw eDFBLCAweEVELCAweDFFLCAweDlBLCAweEI2LCAweDRDLCAweDU0LCAweDlGLCAweEQ4LAotKyAg MHg4RCwgMHhDQywgMHhBQywgMHg4QSwgMHhCQiwgMHg5QywgMHg4MiwgMHgzRiwgMHhBNiwgMHg1 MywgMHg2MiwgMHhCNSwKLSsgIDB4ODAsIDB4RTIsIDB4QkMsIDB4REQsIDB4NjcsIDB4MkIsIDB4 RDksIDB4M0YsIDB4RTQsIDB4NzUsIDB4OTIsIDB4NkIsCi0rICAweEFGLCAweDYyLCAweDdDLCAw eDUyLCAweEYwLCAweEVFLCAweDMzLCAweERGLCAweDFCLCAweDFELCAweDQ3LCAweEU2LAotKyAg MHg1OSwgMHg1NiwgMHhBNSwgMHhCOSwgMHg1QywgMHhFNiwgMHg3NywgMHg3OCwgMHgxNiwgMHg2 MywgMHg4NCwgMHgwNSwKLSsgIDB4NkYsIDB4MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4RjcsIDB4 N0YsIDB4QjIsIDB4NjQsIDB4NzEsIDB4RTAsIDB4MkQsCi0rICAweDNFLCAweDYyLCAweENFLCAw eEI1LCAweDNGLCAweDg4LCAweERGLCAweDJELCAweEFCLCAweDk4LCAweDY1LCAweDkxLAotKyAg MHhERiwgMHg3MCwgMHgxNCwgMHhBNSwgMHgzRiwgMHgzNiwgMHhBQiwgMHg4NAotK307Ci0rCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTFbXSA9IHsKLSsgIDB4 ODYsIDB4QjQsIDB4MTgsIDB4QkEsIDB4RDEsIDB4ODAsIDB4QjYsIDB4N0MsIDB4NDIsIDB4NDUs IDB4NEQsIDB4REYsCi0rICAweEU5LCAweDJELCAweEUxLCAweDgzLCAweDVGLCAweEI1LCAweDJG LCAweEM5LCAweENELCAweEM0LCAweEIyLCAweDc1LAotKyAgMHg4MCwgMHhBNCwgMHhGMSwgMHg0 QSwgMHhFNywgMHg4MywgMHgxMiwgMHgxRSwgMHgxRSwgMHgxNCwgMHhCOCwgMHhBQywKLSsgIDB4 MzUsIDB4RTIsIDB4QUEsIDB4MEIsIDB4NUMsIDB4RjgsIDB4MzgsIDB4NEQsIDB4MDQsIDB4RUUs IDB4QTksIDB4OTcsCi0rICAweDcwLCAweEZCLCAweDVFLCAweEU3LCAweEI3LCAweEUzLCAweDYy LCAweDIzLCAweDRCLCAweDM4LCAweEJFLCAweEQ2LAotKyAgMHg1MywgMHgxNSwgMHhGNywgMHhE RiwgMHg4NywgMHhCNCwgMHgwRSwgMHhDQywgMHhCMSwgMHgxQSwgMHgxMSwgMHgxOSwKLSsgIDB4 RUUsIDB4NTEsIDB4Q0MsIDB4OTIsIDB4REQsIDB4QkMsIDB4NjMsIDB4MjksIDB4NjMsIDB4MEMs IDB4NTksIDB4RDcsCi0rICAweDZGLCAweDRDLCAweDNDLCAweDM3LCAweDVCLCAweDM3LCAweDAz LCAweDYxLCAweDdELCAweDI0LCAweDFDLCAweDk5LAotKyAgMHg0OCwgMHhBRiwgMHg4MiwgMHhG RSwgMHgzMiwgMHg0MSwgMHg5QiwgMHhCMiwgMHhEQiwgMHhFQSwgMHhFRCwgMHg3NiwKLSsgIDB4 OEUsIDB4NkUsIDB4Q0EsIDB4N0UsIDB4NEUsIDB4MTQsIDB4QkEsIDB4MzAsIDB4ODQsIDB4MUMs IDB4QjMsIDB4NjcsCi0rICAweEEzLCAweDI5LCAweDgwLCAweDcwLCAweDU0LCAweDY4LCAweDdE LCAweDQ5Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFf U0hBMjU2W10gPSB7Ci0rICAweDdFLCAweEEyLCAweDc3LCAweEZFLCAweEI4LCAweDU0LCAweDhB LCAweEM3LCAweDdGLCAweDY0LCAweDU0LCAweDg5LAotKyAgMHhFNSwgMHg1MiwgMHgxNSwgMHg4 RSwgMHg1MiwgMHg5NiwgMHg0RSwgMHhBNiwgMHg1OCwgMHg5MiwgMHgxQywgMHhERCwKLSsgIDB4 RUEsIDB4QTIsIDB4MkQsIDB4NUMsIDB4RDEsIDB4NjIsIDB4MDAsIDB4NDksIDB4MDUsIDB4OTUs IDB4NzMsIDB4Q0YsCi0rICAweDE2LCAweDc2LCAweDY4LCAweEY2LCAweEM2LCAweDVFLCAweDgw LCAweEI4LCAweEI4LCAweDdCLCAweEM4LCAweDlCLAotKyAgMHhDNiwgMHg1MywgMHg4OCwgMHgy NiwgMHgyMCwgMHg4OCwgMHg3MywgMHhCNiwgMHgxMywgMHhCOCwgMHhGMCwgMHg0QiwKLSsgIDB4 MDAsIDB4ODUsIDB4RjMsIDB4REQsIDB4MDcsIDB4NTAsIDB4RUIsIDB4MjAsIDB4QzQsIDB4Mzgs IDB4MEUsIDB4OTgsCi0rICAweEFELCAweDRFLCAweDQ5LCAweDJDLCAweEQ3LCAweDY1LCAweEE1 LCAweDE5LCAweDBFLCAweDU5LCAweDAxLCAweEVDLAotKyAgMHg3RSwgMHg3NSwgMHg4OSwgMHg2 OSwgMHgyRSwgMHg2MywgMHg3NiwgMHg4NSwgMHg0NiwgMHg4RCwgMHhBMCwgMHg4QywKLSsgIDB4 MzMsIDB4MUQsIDB4ODIsIDB4OEMsIDB4MDMsIDB4RUEsIDB4NjksIDB4ODgsIDB4MzUsIDB4QTEs IDB4NDIsIDB4QkQsCi0rICAweDIxLCAweEVELCAweDhELCAweEJDLCAweEJDLCAweERCLCAweDMw LCAweEZGLCAweDg2LCAweEYwLCAweDVCLCAweERDLAotKyAgMHhFMywgMHhFMiwgMHhFOCwgMHgw QSwgMHgwQSwgMHgyOSwgMHg5NCwgMHg4MAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9YOTMxX1NIQTM4NFtdID0gewotKyAgMHg1QywgMHg3RCwgMHg5NiwgMHgz NSwgMHhFQywgMHg3RSwgMHgxMSwgMHgzOCwgMHhCQiwgMHg3QiwgMHhFQywgMHg3QiwKLSsgIDB4 RjIsIDB4ODIsIDB4OEUsIDB4OTksIDB4QkQsIDB4RUYsIDB4RDgsIDB4QUUsIDB4RDcsIDB4Mzks IDB4MzcsIDB4Q0IsCi0rICAweEU2LCAweDRGLCAweDVFLCAweDBBLCAweDEzLCAweEU0LCAweDJF LCAweDQwLCAweEI5LCAweEJFLCAweDJFLCAweEUzLAotKyAgMHhFRiwgMHg3OCwgMHg4MywgMHgx OCwgMHg0NCwgMHgzNSwgMHg5QywgMHg4RSwgMHhENywgMHg0QSwgMHg2MywgMHhGNiwKLSsgIDB4 NTcsIDB4QzIsIDB4QjAsIDB4MDgsIDB4NTEsIDB4NzMsIDB4Q0YsIDB4Q0EsIDB4OTksIDB4NjYs IDB4RUUsIDB4MzEsCi0rICAweEQ4LCAweDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3LCAweDdC LCAweDQxLCAweDFFLCAweDZELCAweDhELCAweEYxLAotKyAgMHgzRSwgMHg5QywgMHgzNSwgMHg5 NSwgMHg1OCwgMHhERCwgMHgyQiwgMHhENSwgMHhBMCwgMHg2MCwgMHg0MSwgMHg3OSwKLSsgIDB4 MjQsIDB4MjIsIDB4RTQsIDB4QjcsIDB4QkYsIDB4NDcsIDB4NTMsIDB4RjYsIDB4MzQsIDB4RDUs IDB4N0MsIDB4RkYsCi0rICAweDBFLCAweDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3LCAweEI5 LCAweERFLCAweEM1LCAweDEyLCAweDQ0LCAweDM1LAotKyAgMHhFRiwgMHgwMSwgMHhFNiwgMHg1 RSwgMHgzOSwgMHgzMSwgMHgyRCwgMHg3MSwgMHhBNSwgMHhEQywgMHhDNiwgMHg2RCwKLSsgIDB4 RTIsIDB4Q0QsIDB4ODUsIDB4REIsIDB4NzMsIDB4ODIsIDB4NjUsIDB4MjgKLSt9OwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEE1MTJbXSA9IHsKLSsgIDB4 QTYsIDB4NjUsIDB4QTIsIDB4NzcsIDB4NEYsIDB4QjMsIDB4ODYsIDB4Q0IsIDB4NjQsIDB4M0Es IDB4QzEsIDB4NjMsCi0rICAweEZDLCAweEExLCAweEFBLCAweENCLCAweDlCLCAweDc5LCAweERE LCAweDRCLCAweEUxLCAweEQ5LCAweERBLCAweEFDLAotKyAgMHhFNywgMHg0NywgMHgwOSwgMHhC MiwgMHgxMSwgMHg0QiwgMHg4QSwgMHhBQSwgMHgwNSwgMHg5RSwgMHg3NywgMHhENywKLSsgIDB4 M0EsIDB4QkQsIDB4NUUsIDB4NTMsIDB4MDksIDB4NEEsIDB4RTYsIDB4MEYsIDB4NUUsIDB4Rjks IDB4MTQsIDB4MjgsCi0rICAweEEwLCAweDk5LCAweDc0LCAweDY0LCAweDcwLCAweDRFLCAweEYy LCAweEUzLCAweEZBLCAweEM3LCAweEY4LCAweEM1LAotKyAgMHg2RSwgMHgyQiwgMHg3OSwgMHg5 NiwgMHgwRCwgMHgwQywgMHhDOCwgMHgxMCwgMHgzNCwgMHg1MywgMHhEMiwgMHhBRiwKLSsgIDB4 MTcsIDB4MEUsIDB4RTAsIDB4QkYsIDB4NzksIDB4RjYsIDB4MDQsIDB4NzIsIDB4MTAsIDB4RTAs IDB4RjYsIDB4RDAsCi0rICAweENFLCAweDhBLCAweDZGLCAweEExLCAweDk1LCAweDg5LCAweEJG LCAweDU4LCAweDhGLCAweDQ2LCAweDVGLCAweDA5LAotKyAgMHg5RiwgMHgwOSwgMHhDQSwgMHg4 NCwgMHgxNSwgMHg4NSwgMHhFMCwgMHhFRCwgMHgwNCwgMHgyRCwgMHhGQiwgMHg3QywKLSsgIDB4 MzYsIDB4MzUsIDB4MjEsIDB4MzEsIDB4QzMsIDB4RkQsIDB4OTIsIDB4NDIsIDB4MTEsIDB4MzAs IDB4NzEsIDB4MUIsCi0rICAweDYwLCAweDgzLCAweDE4LCAweDg4LCAweEEzLCAweEY1LCAweDU5 LCAweEMzCi0rfTsKLSsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9yc2EoKQotKwl7Ci0rCWludCBy ZXQgPSAwOwotKwlSU0EgKmtleTsKLSsJRVZQX1BLRVkgKnBrID0gTlVMTDsKLSsKLSsJaWYgKChr ZXk9UlNBX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCXNldHJzYWtleShrZXkpOwot KwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVW UF9QS0VZX2Fzc2lnbl9SU0EocGssIGtleSk7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NI QTEsIHNpemVvZihrYXRfUlNBX1NIQTEpLAotKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZM QUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTEgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJ aWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJz KSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9TSEEyMjQpLAotKwkJ CQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hB MjI0IFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90 ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTI1 Niwgc2l6ZW9mKGthdF9SU0FfU0hBMjU2KSwKLSsJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTI1NiBQS0NTIzEiKSkKLSsJCWdvdG8gZXJy OwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGth dF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1NIQTM4NCks Ci0rCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJT QSBTSEEzODQgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0 dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0Ff U0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9TSEE1MTIpLAotKwkJCQlFVlBfc2hhNTEyKCksIEVWUF9N RF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBNTEyIFBLQ1MjMSIpKQotKwkJZ290 byBlcnI7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBz aXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEExLCBzaXplb2Yoa2F0X1JT QV9QU1NfU0hBMSksCi0rCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAot KwkJCQkiUlNBIFNIQTEgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9S U0FfUFNTX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTIyNCksCi0rCQkJCUVWUF9zaGEy MjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBMjI0IFBTUyIpKQot KwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEyNTYsIHNpemVvZihr YXRfUlNBX1BTU19TSEEyNTYpLAotKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19Q QURfUFNTLAotKwkJCQkiUlNBIFNIQTI1NiBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwK LSsJCQkJa2F0X1JTQV9QU1NfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMzg0KSwKLSsJ CQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEEz ODQgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NIQTUx Miwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTUxMiksCi0rCQkJCUVWUF9zaGE1MTIoKSwgRVZQX01E X0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBNTEyIFBTUyIpKQotKwkJZ290byBlcnI7 Ci0rCi0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXpl b2Yoa2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEExLCBzaXplb2Yoa2F0X1JTQV9Y OTMxX1NIQTEpLAotKwkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJ CQkiUlNBIFNIQTEgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCS8qIE5COiBTSEEyMjQgbm90IHN1 cHBvcnRlZCBpbiBYOS4zMSAqLwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywg a2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hBMjU2LCBz aXplb2Yoa2F0X1JTQV9YOTMxX1NIQTI1NiksCi0rCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEEyNTYgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0r CWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ri cykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hB Mzg0KSwKLSsJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQki UlNBIFNIQTM4NCBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0 dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0X1JTQV9Y OTMxX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEE1MTIpLAotKwkJCUVWUF9zaGE1MTIo KSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBNTEyIFg5MzEiKSkKLSsJ CWdvdG8gZXJyOwotKwotKwotKwlyZXQgPSAxOwotKwotKwllcnI6Ci0rCWlmIChwaykKLSsJCUVW UF9QS0VZX2ZyZWUocGspOwotKwllbHNlIGlmIChrZXkpCi0rCQlSU0FfZnJlZShrZXkpOwotKwly ZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmIC8qIGRlZiBPUEVOU1NMX0ZJUFMgKi8KLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYwotLS0tIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMx Zy5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDI4MSBA QAotKy8qIGNyeXB0by9yc2EvcnNhX2dlbi5jICovCi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5 OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRl bgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVt ZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wu Ci0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1j b21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy ZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxs IGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsg KiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NM IGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNv dmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhv bGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJp Z2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGlj ZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBw YWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBh dHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5 IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2Ug YXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRl eHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0r ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdl bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdh cmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0r ICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91 aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dy YXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3Bl Y2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFw cHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25v d2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1 dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBk ZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2Rl IGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3Ry aWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0K LSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2lu Y2x1ZGUgPHRpbWUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rZXh0ZXJuIGludCBmaXBzX2NoZWNr X3JzYShSU0EgKnJzYSk7Ci0rI2VuZGlmCi0rCi0rLyogWDkuMzEgUlNBIGtleSBkZXJpdmF0aW9u IGFuZCBnZW5lcmF0aW9uICovCi0rCi0raW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwg QklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKLSsJCQljb25z dCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCi0rCQkJ Y29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAot KwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCUJJR05VTSAqcjA9TlVM TCwqcjE9TlVMTCwqcjI9TlVMTCwqcjM9TlVMTDsKLSsJQk5fQ1RYICpjdHg9TlVMTCwqY3R4Mj1O VUxMOwotKwotKwlpZiAoIXJzYSkgCi0rCQlnb3RvIGVycjsKLSsKLSsJY3R4ID0gQk5fQ1RYX25l dygpOwotKwlpZiAoIWN0eCkgCi0rCQlnb3RvIGVycjsKLSsJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0r Ci0rCXIwID0gQk5fQ1RYX2dldChjdHgpOwotKwlyMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjIg PSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXIzID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlpZiAocjMg PT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIXJzYS0+ZSkKLSsJCXsKLSsJCXJzYS0+ZSA9 IEJOX2R1cChlKTsKLSsJCWlmICghcnNhLT5lKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwllbHNl Ci0rCQllID0gcnNhLT5lOwotKwotKwkvKiBJZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2VudCBv bmx5IGNhbGN1bGF0ZSB3aGF0IHdlIGNhbi4KLSsJICogVGhpcyBhbGxvd3MgdGVzdCBwcm9ncmFt cyB0byBvdXRwdXQgc2VsZWN0aXZlIHBhcmFtZXRlcnMuCi0rCSAqLwotKwotKwlpZiAoWHAgJiYg IXJzYS0+cCkKLSsJCXsKLSsJCXJzYS0+cCA9IEJOX25ldygpOwotKwkJaWYgKCFyc2EtPnApCi0r CQkJZ290byBlcnI7Ci0rCi0rCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cCwg cDEsIHAyLAotKwkJCQkJWHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNiKSkKLSsJCQlnb3RvIGVycjsK LSsJCX0KLSsKLSsJaWYgKFhxICYmICFyc2EtPnEpCi0rCQl7Ci0rCQlyc2EtPnEgPSBCTl9uZXco KTsKLSsJCWlmICghcnNhLT5xKQotKwkJCWdvdG8gZXJyOwotKwkJaWYgKCFCTl9YOTMxX2Rlcml2 ZV9wcmltZV9leChyc2EtPnEsIHExLCBxMiwKLSsJCQkJCVhxLCBYcTEsIFhxMiwgZSwgY3R4LCBj YikpCi0rCQkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCi0r CQl7Ci0rCQlCTl9DVFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShjdHgpOwotKwkJcmV0dXJu IDI7Ci0rCQl9Ci0rCi0rCS8qIFNpbmNlIGJvdGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5vdyBj YWxjdWxhdGUgYWxsIHJlbWFpbmluZyAKLSsJICogY29tcG9uZW50cy4KLSsJICovCi0rCi0rCS8q IGNhbGN1bGF0ZSBuICovCi0rCXJzYS0+bj1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+biA9PSBOVUxM KQotKwkJZ290byBlcnI7Ci0rCWlmICghQk5fbXVsKHJzYS0+bixyc2EtPnAscnNhLT5xLGN0eCkp Ci0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRlIGQgKi8KLSsJaWYgKCFCTl9zdWIocjEs cnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkKLSsJCWdvdG8gZXJyOwkvKiBwLTEgKi8KLSsJaWYgKCFC Tl9zdWIocjIscnNhLT5xLEJOX3ZhbHVlX29uZSgpKSkKLSsJCWdvdG8gZXJyOwkvKiBxLTEgKi8K LSsJaWYgKCFCTl9tdWwocjAscjEscjIsY3R4KSkKLSsJCWdvdG8gZXJyOwkvKiAocC0xKShxLTEp ICovCi0rCi0rCWlmICghQk5fZ2NkKHIzLCByMSwgcjIsIGN0eCkpCi0rCQlnb3RvIGVycjsKLSsK LSsJaWYgKCFCTl9kaXYocjAsIE5VTEwsIHIwLCByMywgY3R4KSkKLSsJCWdvdG8gZXJyOwkvKiBM Q00oKHAtMSkocS0xKSkgKi8KLSsKLSsJY3R4MiA9IEJOX0NUWF9uZXcoKTsKLSsJaWYgKCFjdHgy KQotKwkJZ290byBlcnI7Ci0rCi0rCXJzYS0+ZD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+ZSxy MCxjdHgyKTsJLyogZCAqLwotKwlpZiAocnNhLT5kID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsK LSsJLyogY2FsY3VsYXRlIGQgbW9kIChwLTEpICovCi0rCXJzYS0+ZG1wMT1CTl9uZXcoKTsKLSsJ aWYgKHJzYS0+ZG1wMSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICghQk5fbW9kKHJzYS0+ ZG1wMSxyc2EtPmQscjEsY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgZCBt b2QgKHEtMSkgKi8KLSsJcnNhLT5kbXExPUJOX25ldygpOwotKwlpZiAocnNhLT5kbXExID09IE5V TEwpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFCTl9tb2QocnNhLT5kbXExLHJzYS0+ZCxyMixjdHgp KQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAgKi8K LSsJcnNhLT5pcW1wPUJOX21vZF9pbnZlcnNlKE5VTEwscnNhLT5xLHJzYS0+cCxjdHgyKTsKLSsK LSsJZXJyOgotKwlpZiAoY3R4KQotKwkJewotKwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJQk5fQ1RY X2ZyZWUoY3R4KTsKLSsJCX0KLSsJaWYgKGN0eDIpCi0rCQlCTl9DVFhfZnJlZShjdHgyKTsKLSsJ LyogSWYgdGhpcyBpcyBzZXQgYWxsIGNhbGxzIHN1Y2Nlc3NmdWwgKi8KLSsJaWYgKHJzYSAmJiBy c2EtPmlxbXAgIT0gTlVMTCkKLSsJCXJldHVybiAxOwotKwotKwlyZXR1cm4gMDsKLSsKLSsJfQot KwotK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25z dCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKLSsJewotKwlpbnQgb2sgPSAwOwotKwlCSUdOVU0g KlhwID0gTlVMTCwgKlhxID0gTlVMTDsKLSsJQk5fQ1RYICpjdHggPSBOVUxMOwotKwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVT X0JJVFMpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9L RVlfRVgsRklQU19SX0tFWV9UT09fU0hPUlQpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0r Ci0rCWlmIChiaXRzICYgMHhmZikKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX1JTQV9Y OTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKTsKLSsJICAgIHJl dHVybiAwOwotKwkgICAgfQotKwotKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAg ewotKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9G SVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsjZW5kaWYK LSsKLSsJY3R4ID0gQk5fQ1RYX25ldygpOwotKwlpZiAoIWN0eCkKLSsJCWdvdG8gZXJyb3I7Ci0r Ci0rCUJOX0NUWF9zdGFydChjdHgpOwotKwlYcCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJWHEgPSBC Tl9DVFhfZ2V0KGN0eCk7Ci0rCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9YcHEoWHAsIFhxLCBiaXRz LCBjdHgpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJcnNhLT5wID0gQk5fbmV3KCk7Ci0rCXJzYS0+ cSA9IEJOX25ldygpOwotKwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQotKwkJZ290byBlcnJvcjsK LSsKLSsJLyogR2VuZXJhdGUgdHdvIHByaW1lcyBmcm9tIFhwLCBYcSAqLwotKwotKwlpZiAoIUJO X1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5wLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBY cCwKLSsJCQkJCWUsIGN0eCwgY2IpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJaWYgKCFCTl9YOTMx X2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHEsCi0r CQkJCQllLCBjdHgsIGNiKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCS8qIFNpbmNlIHJzYS0+cCBh bmQgcnNhLT5xIGFyZSB2YWxpZCB0aGlzIGNhbGwgd2lsbCBqdXN0IGRlcml2ZQotKwkgKiByZW1h aW5pbmcgUlNBIGNvbXBvbmVudHMuCi0rCSAqLwotKwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9l eChyc2EsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0rCQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIGUsIGNiKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotKwlpZighZmlwc19jaGVja19yc2EocnNhKSkKLSsJICAgIGdvdG8gZXJyb3I7Ci0r I2VuZGlmCi0rCi0rCW9rID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChjdHgpCi0rCQl7Ci0rCQlC Tl9DVFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShjdHgpOwotKwkJfQotKwotKwlpZiAob2sp Ci0rCQlyZXR1cm4gMTsKLSsKLSsJcmV0dXJuIDA7Ci0rCi0rCX0KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4w L2NyeXB0by9maXBzL2ZpcHNfc2hhMV9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlw dG8vZmlwcy9maXBzX3NoYTFfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3NoYTFfc2Vs ZnRlc3QuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw5 OSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK LSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRp c3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK LSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAq Ci0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0 aWMgY2hhciB0ZXN0W11bNjBdPQotKyAgICB7Ci0rICAgICIiLAotKyAgICAiYWJjIiwKLSsgICAg ImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3Bx IgotKyAgICB9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJldFtdW1NIQV9ESUdF U1RfTEVOR1RIXT0KLSsgICAgewotKyAgICB7IDB4ZGEsMHgzOSwweGEzLDB4ZWUsMHg1ZSwweDZi LDB4NGIsMHgwZCwweDMyLDB4NTUsCi0rICAgICAgMHhiZiwweGVmLDB4OTUsMHg2MCwweDE4LDB4 OTAsMHhhZiwweGQ4LDB4MDcsMHgwOSB9LAotKyAgICB7IDB4YTksMHg5OSwweDNlLDB4MzYsMHg0 NywweDA2LDB4ODEsMHg2YSwweGJhLDB4M2UsCi0rICAgICAgMHgyNSwweDcxLDB4NzgsMHg1MCww eGMyLDB4NmMsMHg5YywweGQwLDB4ZDgsMHg5ZCB9LAotKyAgICB7IDB4ODQsMHg5OCwweDNlLDB4 NDQsMHgxYywweDNiLDB4ZDIsMHg2ZSwweGJhLDB4YWUsCi0rICAgICAgMHg0YSwweGExLDB4Zjks MHg1MSwweDI5LDB4ZTUsMHhlNSwweDQ2LDB4NzAsMHhmMSB9LAotKyAgICB9OwotKwotK3ZvaWQg RklQU19jb3JydXB0X3NoYTEoKQotKyAgICB7Ci0rICAgIHRlc3RbMl1bMF0rKzsKLSsgICAgfQot KwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAg ICBmb3Iobj0wIDsgbjxzaXplb2YodGVzdCkvc2l6ZW9mKHRlc3RbMF0pIDsgKytuKQotKwl7Ci0r CXVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOwotKwotKwlFVlBfRGlnZXN0KHRl c3Rbbl0sc3RybGVuKHRlc3Rbbl0pLG1kLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKTsKLSsJaWYo bWVtY21wKG1kLHJldFtuXSxzaXplb2YgbWQpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBT X0ZfRklQU19TRUxGVEVTVF9TSEExLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0 dXJuIDA7Ci0rCSAgICB9Ci0rCX0KLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsjZW5kaWYK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEu Yy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEuYwot LS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEuYy5maXBz CTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9j cnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAw MDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDE3MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29w eXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgot KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwot KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQot KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK LSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAq LwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9zaGEuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rCi0rI2lmbmRl ZiBGSVBTQ0FOSVNURVJfTwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpIHsgcmV0dXJuIDA7 IH0KLSt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2soKSB7fQotK3ZvaWQgT1BFTlNTTF9jbGVhbnNl KHZvaWQgKnAsc2l6ZV90IGxlbikge30KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCi0rc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQV9DVFggKm1kX2N0eCxTSEFfQ1RYICpvX2N0 eCwKLSsJCSAgICAgIGNvbnN0IGNoYXIgKmtleSkKLSsgICAgewotKyAgICBzaXplX3QgbGVuPXN0 cmxlbihrZXkpOwotKyAgICBpbnQgaTsKLSsgICAgdW5zaWduZWQgY2hhciBrZXltZFtITUFDX01B WF9NRF9DQkxPQ0tdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBhZFtITUFDX01BWF9NRF9DQkxPQ0td OwotKwotKyAgICBpZiAobGVuID4gU0hBX0NCTE9DSykKLSsJewotKwlTSEExX0luaXQobWRfY3R4 KTsKLSsJU0hBMV9VcGRhdGUobWRfY3R4LGtleSxsZW4pOwotKwlTSEExX0ZpbmFsKGtleW1kLG1k X2N0eCk7Ci0rCWxlbj0yMDsKLSsJfQotKyAgICBlbHNlCi0rCW1lbWNweShrZXltZCxrZXksbGVu KTsKLSsgICAgbWVtc2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhfTURfQ0JMT0NLLWxlbik7 Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQotKwlwYWRb aV09MHgzNl5rZXltZFtpXTsKLSsgICAgU0hBMV9Jbml0KG1kX2N0eCk7Ci0rICAgIFNIQTFfVXBk YXRlKG1kX2N0eCxwYWQsU0hBX0NCTE9DSyk7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgSE1BQ19N QVhfTURfQ0JMT0NLIDsgaSsrKQotKwlwYWRbaV09MHg1Y15rZXltZFtpXTsKLSsgICAgU0hBMV9J bml0KG9fY3R4KTsKLSsgICAgU0hBMV9VcGRhdGUob19jdHgscGFkLFNIQV9DQkxPQ0spOwotKyAg ICB9Ci0rCi0rc3RhdGljIHZvaWQgaG1hY19maW5hbCh1bnNpZ25lZCBjaGFyICptZCxTSEFfQ1RY ICptZF9jdHgsU0hBX0NUWCAqb19jdHgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBidWZb MjBdOwotKwotKyAgICBTSEExX0ZpbmFsKGJ1ZixtZF9jdHgpOwotKyAgICBTSEExX1VwZGF0ZShv X2N0eCxidWYsc2l6ZW9mIGJ1Zik7Ci0rICAgIFNIQTFfRmluYWwobWQsb19jdHgpOwotKyAgICB9 Ci0rCi0rI2VuZGlmCi0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAgIHsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIHN0YXRpYyBjaGFyIGtleVtdPSJldGFvbnJpc2hk bGN1cGZtIjsKLSsgICAgaW50IG4sYmluYXJ5PTA7Ci0rCi0rICAgIGlmKGFyZ2MgPCAyKQotKwl7 Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlswXSk7Ci0rCWV4aXQoMSk7 Ci0rCX0KLSsKLSsgICAgbj0xOwotKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCItYmluYXJ5Iikp Ci0rCXsKLSsJbisrOwotKwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQuLi4g Ki8KLSsJfQotKwotKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKLSsJewotKwlGSUxFICpmPWZv cGVuKGFyZ3Zbbl0sInJiIik7Ci0rCVNIQV9DVFggbWRfY3R4LG9fY3R4OwotKwl1bnNpZ25lZCBj aGFyIG1kWzIwXTsKLSsJaW50IGk7Ci0rCi0rCWlmKCFmKQotKwkgICAgewotKwkgICAgcGVycm9y KGFyZ3Zbbl0pOwotKwkgICAgZXhpdCgyKTsKLSsJICAgIH0KLSsKLSsJaG1hY19pbml0KCZtZF9j dHgsJm9fY3R4LGtleSk7Ci0rCWZvciggOyA7ICkKLSsJICAgIHsKLSsJICAgIGNoYXIgYnVmWzEw MjRdOwotKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6ZW9mIGJ1ZixmKTsKLSsKLSsJICAg IGlmKGwgPT0gMCkKLSsJCXsKLSsJCWlmKGZlcnJvcihmKSkKLSsJCSAgICB7Ci0rCQkgICAgcGVy cm9yKGFyZ3Zbbl0pOwotKwkJICAgIGV4aXQoMyk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAg IGJyZWFrOwotKwkJfQotKwkgICAgU0hBMV9VcGRhdGUoJm1kX2N0eCxidWYsbCk7Ci0rCSAgICB9 Ci0rCWhtYWNfZmluYWwobWQsJm1kX2N0eCwmb19jdHgpOwotKwotKwlpZiAoYmluYXJ5KQotKwkg ICAgewotKwkgICAgZndyaXRlKG1kLDIwLDEsc3Rkb3V0KTsKLSsJICAgIGJyZWFrOwkvKiAuLi4g Zm9yIHNpbmdsZSghKSBmaWxlICovCi0rCSAgICB9Ci0rCi0rCXByaW50ZigiSE1BQy1TSEExKCVz KT0gIixhcmd2W25dKTsKLSsJZm9yKGk9MCA7IGkgPCAyMCA7ICsraSkKLSsJICAgIHByaW50Zigi JTAyeCIsbWRbaV0pOwotKwlwcmludGYoIlxuIik7Ci0rCX0KLSsjZW5kaWYKLSsgICAgcmV0dXJu IDA7Ci0rICAgIH0KLSsKLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlw c190ZXN0X3N1aXRlLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9z dWl0ZS5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYy5m aXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAw MDAwMCArMDIwMAotQEAgLTAsMCArMSw1ODggQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHly aWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSsgKgotKyAqCi0rICogVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGFzIGEgdGVzdCBkcml2ZXIg Zm9yIHRoZSBGSVBTLTE0MCB0ZXN0aW5nCi0rICogbGFiIHBlcmZvcm1pbmcgRklQUy0xNDAgdmFs aWRhdGlvbi4gIEl0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZQotKyAqIE9wZW5TU0wgbGli cmFyeSBpdG8gcGVyZm9ybSBhIHZhcmlldHkgb2YgY29tbW9uIGNyeXB0b2dyYXBoaWMKLSsgKiBm dW5jdGlvbnMuICBBIHBvd2VyLXVwIHNlbGYgdGVzdCBpcyBkZW1vbnN0cmF0ZWQgYnkgZGVsaWJl cmF0ZWx5Ci0rICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBleGVjdXRhYmxlIGhhc2gKLSsgKgot KyAqIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIE1hcnF1ZXNzLgotKyAqCi0rICovCi0rI2luY2x1ZGUg PHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv cnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGgu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMK LStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotKyAgICB7Ci0rICAgIHByaW50Zigi Tm8gRklQUyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotKyAgICB9Ci0rI2Vsc2UKLSsK LSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0r LyogQUVTOiBlbmNyeXB0IGFuZCBkZWNyeXB0IGtub3duIHBsYWludGV4dCwgdmVyaWZ5IHJlc3Vs dCBtYXRjaGVzIG9yaWdpbmFsIHBsYWludGV4dAotKyovCi0rc3RhdGljIGludCBGSVBTX2Flc190 ZXN0KHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgcGx0bXBbMTZd OwotKwl1bnNpZ25lZCBjaGFyIGNpdG1wWzE2XTsKLSsJdW5zaWduZWQgY2hhciBrZXlbMTZdID0g eyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNn07Ci0rCXVuc2lnbmVkIGNo YXIgcGxhaW50ZXh0WzE2XSA9ICJldGFvbnJpc2hkbGN1IjsKLSsJRVZQX0NJUEhFUl9DVFggY3R4 OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgo JmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQotKwkJZ290 byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgMTYpOwotKwlpZiAo RVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxM LCAwKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1w LCAxNik7Ci0rCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgMTYpKQotKwkJZ290byBlcnI7 Ci0rCXJldCA9IDE7Ci0rCWVycjoKLSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsJ cmV0dXJuIHJldDsKLSsJfQotKwotK3N0YXRpYyBpbnQgRklQU19kZXMzX3Rlc3Qodm9pZCkKLSsJ ewotKwlpbnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciBwbHRtcFs4XTsKLSsJdW5zaWduZWQg Y2hhciBjaXRtcFs4XTsKLSsgICAgCXVuc2lnbmVkIGNoYXIga2V5W10gPSB7IDEsMiwzLDQsNSw2 LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LAotKwkJICAgICAgICAgICAgICAxOSwy MCwyMSwyMiwyMywyNH07Ci0rICAgIAl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtdID0geyAnZScs ICd0JywgJ2EnLCAnbycsICduJywgJ3InLCAnaScsICdzJyB9OwotKwlFVlBfQ0lQSEVSX0NUWCBj dHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9l eCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQotKwkJ Z290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgOCk7Ci0rCWlm IChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBO VUxMLCAwKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNp dG1wLCA4KTsKLSsJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCA4KSkKLSsJCWdvdG8gZXJy OwotKwlyZXQgPSAxOwotKwllcnI6Ci0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0r CXJldHVybiByZXQ7Ci0rCX0KLSsKLSsvKgotKyAqIERTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2ln biwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KLSsgKi8KLStzdGF0aWMgaW50IEZJUFNfZHNhX3Rl c3QoaW50IGJhZCkKLSsgICAgewotKyAgICBEU0EgKmRzYSA9IE5VTEw7Ci0rICAgIEVWUF9QS0VZ IHBrOwotKyAgICB1bnNpZ25lZCBjaGFyIGRnc3RbXSA9ICJldGFvbnJpc2hkbGMiOwotKyAgICB1 bnNpZ25lZCBjaGFyIGJ1Zls2MF07Ci0rICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAgICBpbnQg ciA9IDA7Ci0rICAgIEVWUF9NRF9DVFggbWN0eDsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7 Ci0rICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rICAgIGRzYSA9IERTQV9uZXcoKTsKLSsg ICAgaWYgKCFkc2EpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0 ZXJzX2V4KGRzYSwgMTAyNCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwlnb3RvIGVuZDsKLSsg ICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoYmFk KQotKwkgICAgQk5fYWRkX3dvcmQoZHNhLT5wdWJfa2V5LCAxKTsKLSsKLSsgICAgcGsudHlwZSA9 IEVWUF9QS0VZX0RTQTsKLSsgICAgcGsucGtleS5kc2EgPSBkc2E7Ci0rCi0rICAgIGlmICghRVZQ X1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKLSsJZ290byBlbmQ7Ci0rICAg IGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQotKwln b3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGsp KQotKwlnb3RvIGVuZDsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQ X2RzczEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUo Jm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgciA9IEVW UF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOwotKyAgICBlbmQ6Ci0rICAgIEVW UF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rICAgIGlmIChkc2EpCi0rICAJICBEU0FfZnJlZShk c2EpOwotKyAgICBpZiAociAhPSAxKQotKwlyZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAg IH0KLSsKLSsvKgotKyAqIFJTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0 IHBsYWludGV4dC4KLSsgKi8KLStzdGF0aWMgaW50IEZJUFNfcnNhX3Rlc3QoaW50IGJhZCkKLSsg ICAgewotKyAgICBSU0EgKmtleTsKLSsgICAgdW5zaWduZWQgY2hhciBpbnB1dF9wdGV4dFtdID0g ImV0YW9ucmlzaGRsYyI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07Ci0rICAgIHVuc2ln bmVkIGludCBzbGVuOwotKyAgICBCSUdOVU0gKmJuOwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0r ICAgIEVWUF9QS0VZIHBrOwotKyAgICBpbnQgciA9IDA7Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJv cigpOwotKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKyAgICBrZXkgPSBSU0FfbmV3KCk7 Ci0rICAgIGJuID0gQk5fbmV3KCk7Ci0rICAgIGlmICgha2V5IHx8ICFibikKLSsJcmV0dXJuIDA7 Ci0rICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7Ci0rICAgIGlmICghUlNBX2dlbmVyYXRlX2tl eV9leChrZXksIDEwMjQsYm4sTlVMTCkpCi0rCXJldHVybiAwOwotKyAgICBCTl9mcmVlKGJuKTsK LSsgICAgaWYgKGJhZCkKLSsJICAgIEJOX2FkZF93b3JkKGtleS0+biwgMSk7Ci0rCi0rICAgIHBr LnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rICAgIHBrLnBrZXkucnNhID0ga2V5OwotKwotKyAgICBp ZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCi0rCWdvdG8gZW5k OwotKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlu cHV0X3B0ZXh0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZt Y3R4LCBidWYsICZzbGVuLCAmcGspKQotKwlnb3RvIGVuZDsKLSsKLSsgICAgaWYgKCFFVlBfVmVy aWZ5SW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBp ZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRl eHQpIC0gMSkpCi0rCWdvdG8gZW5kOwotKyAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBi dWYsIHNsZW4sICZwayk7Ci0rICAgIGVuZDoKLSsgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4 KTsKLSsgICAgaWYgKGtleSkKLSsgIAkgICAgUlNBX2ZyZWUoa2V5KTsKLSsgICAgaWYgKHIgIT0g MSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogU0hBMTogZ2Vu ZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsg ICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGExX3Rl c3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdFU1RfTEVOR1RI XSA9Ci0rICAgICAgICB7IDB4MTEsIDB4ZjEsIDB4OWEsIDB4M2EsIDB4ZWMsIDB4MWEsIDB4MWUs IDB4OGUsIDB4NjUsIDB4ZDQsIDB4OWEsIDB4MzgsIDB4MGMsIDB4OGIsIDB4MWUsIDB4MmMsIDB4 ZTgsIDB4YjMsIDB4YzUsIDB4MTggfTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFv bnJpc2hkIjsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07Ci0r Ci0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVv ZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCkpIHJldHVybiAwOwotKyAgICBp ZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAg ICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93 biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3Jy ZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGEyNTZfdGVzdCgpCi0rICAgIHsKLSsg ICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBMjU2X0RJR0VTVF9MRU5HVEhdID0KLSsJezB4ZjUs IDB4NTMsIDB4Y2QsIDB4YjgsIDB4Y2YsIDB4MSwgMHhlZSwgMHgxNywgMHg5YiwgMHg5MywgMHhj OSwgMHg2OCwgMHhjMCwgMHhlYSwgMHg0MCwgMHg5MSwKLSsJIDB4NiwgMHhlYywgMHg4ZSwgMHgx MSwgMHg5NiwgMHhjOCwgMHg1ZCwgMHgxYywgMHhhZiwgMHg2NCwgMHgyMiwgMHhlNiwgMHg1MCwg MHg0ZiwgMHg0NywgMHg1N307Ci0rICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNo ZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwot KyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yo c3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVMTCkpIHJldHVybiAwOwotKyAgICBp ZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAg ICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93 biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3Jy ZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGE1MTJfdGVzdCgpCi0rICAgIHsKLSsg ICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBNTEyX0RJR0VTVF9MRU5HVEhdID0KLSsJezB4OTks IDB4YzksIDB4ZTksIDB4NWIsIDB4ODgsIDB4ZDQsIDB4NzgsIDB4ODgsIDB4ZGYsIDB4ODgsIDB4 NWYsIDB4OTQsIDB4NzEsIDB4NjQsIDB4MjgsIDB4Y2EsCi0rCSAweDE2LCAweDFmLCAweDNkLCAw eGY0LCAweDFmLCAweGYzLCAweDBmLCAweGM1LCAweDAzLCAweDk5LCAweGIyLCAweGQwLCAweGU3 LCAweDBiLCAweDk0LCAweDRhLAotKwkgMHg0NSwgMHhkMiwgMHg2YywgMHg0ZiwgMHgyMCwgMHgw NiwgMHhlZiwgMHg3MSwgMHhhOSwgMHgyNSwgMHg3ZiwgMHgyNCwgMHhiMSwgMHhkOSwgMHg0MCwg MHgyMiwKLSsJIDB4NDksIDB4NTQsIDB4MTAsIDB4YzIsIDB4MjIsIDB4OWQsIDB4MjcsIDB4ZmUs IDB4YmQsIDB4ZDYsIDB4ZDYsIDB4ZWIsIDB4MmQsIDB4NDIsIDB4MWQsIDB4YTN9OwotKyAgICB1 bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFy IG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0r ICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hh NTEyKCksIE5VTEwpKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9m KG1kKSkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsv KiBITUFDLVNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21w YXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMg aW50IEZJUFNfaG1hY19zaGExX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5 W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4 dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweDcz LCAweGY3LCAweGEwLCAweDQ4LCAweGY4LCAweDk0LCAweGVkLCAweGRkLCAweDBhLCAweGVhLCAw eGVhLCAweDU2LCAweDFiLCAweDYxLCAweDJlLCAweDcwLAotKwkgMHhiMiwgMHhmYiwgMHhlYywg MHhjNn07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAg IHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBp ZiAoIUhNQUMoRVZQX3NoYTEoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0 LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkK LSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIEhNQUMt U0hBMjI0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0 byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBG SVBTX2htYWNfc2hhMjI0X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10g PSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7 Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweDc1LCAw eDU4LCAweGQ1LCAweGJkLCAweDU1LCAweDZkLCAweDg3LCAweDBmLCAweDc1LCAweGZmLCAweGJl LCAweDFjLCAweGIyLCAweGYwLCAweDIwLCAweDM1LAotKwkgMHhlNSwgMHg2MiwgMHg0OSwgMHhi NiwgMHg5NCwgMHhiOSwgMHhmYywgMHg2NSwgMHgzNCwgMHgzMywgMHgzYSwgMHgxOX07Ci0rCi0r ICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGlu dCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQ X3NoYTIyNCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikp IHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAg cmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogSE1BQy1TSEEyNTY6IGdl bmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0r ICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19z aGEyNTZfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJp c2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5z aWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsJezB4ZTksIDB4MTcsIDB4YzEs IDB4N2IsIDB4NGMsIDB4NmIsIDB4NzcsIDB4ZGEsIDB4ZDIsIDB4MzAsIDB4MzYsIDB4MDIsIDB4 ZjUsIDB4NzIsIDB4MzMsIDB4ODcsCi0rCSAweDlmLCAweGM2LCAweDZlLCAweDdiLCAweDdlLCAw eGE4LCAweGVhLCAweGFhLCAweDlmLCAweGJhLCAweGVlLCAweDUxLCAweGZmLCAweGRhLCAweDI0 LCAweGY0fTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsg ICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAg IGlmICghSE1BQyhFVlBfc2hhMjU2KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0x LG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxl bikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBI TUFDLVNIQTM4NDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBh cmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBp bnQgRklQU19obWFjX3NoYTM4NF90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtl eVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRl eHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhi MiwgMHg5ZCwgMHg0MCwgMHg1OCwgMHgzMiwgMHhjNCwgMHhlMywgMHgzMSwgMHhiNiwgMHg2Mywg MHgwOCwgMHgyNiwgMHg5OSwgMHhlZiwgMHgzYiwgMHgxMCwKLSsJIDB4ZTIsIDB4ZGYsIDB4Zjgs IDB4ZmYsIDB4YzYsIDB4ZTEsIDB4MDMsIDB4MjksIDB4ODEsIDB4MmEsIDB4MWIsIDB4YWMsIDB4 YjAsIDB4MDcsIDB4MzksIDB4MDgsCi0rCSAweGYzLCAweDkxLCAweDM1LCAweDExLCAweDc2LCAw eGQ2LCAweDRjLCAweDIwLCAweGZiLCAweDRkLCAweGMzLCAweGYzLCAweGI4LCAweDliLCAweDg4 LCAweDFjfTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsg ICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAg IGlmICghSE1BQyhFVlBfc2hhMzg0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0x LG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxl bikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBI TUFDLVNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBh cmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBp bnQgRklQU19obWFjX3NoYTUxMl90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtl eVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRl eHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhj ZCwgMHgzZSwgMHhiOSwgMHg1MSwgMHhiOCwgMHhiYywgMHg3ZiwgMHg5YSwgMHgyMywgMHhhZiwg MHhmMywgMHg3NywgMHg1OSwgMHg4NSwgMHhhOSwgMHhlNiwKLSsJIDB4ZjcsIDB4ZDEsIDB4NTEs IDB4OTYsIDB4MTcsIDB4ZTAsIDB4OTIsIDB4ZDgsIDB4YTYsIDB4M2IsIDB4YzEsIDB4YWQsIDB4 N2UsIDB4MjQsIDB4Y2EsIDB4YjEsCi0rCSAweGQ3LCAweDc5LCAweDBhLCAweGE1LCAweGVhLCAw eDJjLCAweDAyLCAweDU4LCAweDBiLCAweGE2LCAweDUyLCAweDZiLCAweDYxLCAweDdmLCAweGVi LCAweDljLAotKwkgMHg0NywgMHg4NiwgMHg1ZCwgMHg3NCwgMHgyYiwgMHg4OCwgMHhkZiwgMHhl ZSwgMHg0NiwgMHg2OSwgMHg5NiwgMHgzZCwgMHhhNiwgMHhkOSwgMHgyYSwgMHg1M307Ci0rCi0r ICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGlu dCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQ X3NoYTUxMigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikp IHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAg cmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rCi0rLyogREg6IGdlbmVyYXRl IHNoYXJlZCBwYXJhbWV0ZXJzCi0rKi8KLStzdGF0aWMgaW50IGRoX3Rlc3QoKQotKyAgICB7Ci0r ICAgIERIICpkaDsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGRoID0gRklQU19kaF9u ZXcoKTsKLSsgICAgaWYgKCFkaCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmICghREhfZ2VuZXJhdGVf cGFyYW1ldGVyc19leChkaCwgMTAyNCwgMiwgTlVMTCkpCi0rCXJldHVybiAwOwotKyAgICBGSVBT X2RoX2ZyZWUoZGgpOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFplcm9pemUKLSsq LwotK3N0YXRpYyBpbnQgWmVyb2l6ZSgpCi0rICAgIHsKLSsgICAgUlNBICprZXk7Ci0rICAgIEJJ R05VTSAqYm47Ci0rICAgIHVuc2lnbmVkIGNoYXIgdXNlcmtleVsxNl0gPSAKLSsJeyAweDQ4LCAw eDUwLCAweGYwLCAweGEzLCAweDNhLCAweGVkLCAweGQzLCAweGFmLCAweDZlLCAweDQ3LCAweDdm LCAweDgzLCAweDAyLCAweGIxLCAweDA5LCAweDY4IH07Ci0rICAgIGludCBpLCBuOwotKwotKyAg ICBrZXkgPSBGSVBTX3JzYV9uZXcoKTsKLSsgICAgYm4gPSBCTl9uZXcoKTsKLSsgICAgaWYgKCFr ZXkgfHwgIWJuKQotKwlyZXR1cm4gMDsKLSsgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKLSsg ICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKLSsJcmV0dXJu IDA7Ci0rICAgIEJOX2ZyZWUoYm4pOwotKyAgICAKLSsgICAgbiA9IEJOX251bV9ieXRlcyhrZXkt PmQpOwotKyAgICBwcmludGYoIiBHZW5lcmF0ZWQgJWQgYnl0ZSBSU0EgcHJpdmF0ZSBrZXlcbiIs IG4pOwotKyAgICBwcmludGYoIlx0Qk4ga2V5IGJlZm9yZSBvdmVyd3JpdGluZzpcbiIpOwotKyAg ICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7Ci0rICAgIEJOX3JhbmQoa2V5LT5kLG4qOCwt MSwwKTsKLSsgICAgcHJpbnRmKCJcdEJOIGtleSBhZnRlciBvdmVyd3JpdGluZzpcbiIpOwotKyAg ICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7Ci0rCi0rICAgIHByaW50ZigiXHRjaGFyIGJ1 ZmZlciBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOiBcblx0XHQiKTsKLSsgICAgZm9yKGkgPSAwOyBp IDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspIHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOwotKyAg ICAgICAgcHJpbnRmKCJcbiIpOwotKyAgICBSQU5EX2J5dGVzKHVzZXJrZXksIHNpemVvZiB1c2Vy a2V5KTsKLSsgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVyIGtleSBhZnRlciBvdmVyd3JpdGluZzog XG5cdFx0Iik7Ci0rICAgIGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmlu dGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKLSsgICAgICAgIHByaW50ZigiXG4iKTsKLSsKLSsgICAg cmV0dXJuIDE7Ci0rICAgIH0KLSsKLStzdGF0aWMgaW50IEVycm9yOwotK2NvbnN0IGNoYXIgKiBG YWlsKGNvbnN0IGNoYXIgKm1zZykKLSsgICAgewotKyAgICBkb19wcmludF9lcnJvcnMoKTsKLSsg ICAgRXJyb3IrKzsKLSsgICAgcmV0dXJuIG1zZzsgCi0rICAgIH0KLSsKLStpbnQgbWFpbihpbnQg YXJnYyxjaGFyICoqYXJndikKLSsgICAgewotKwotKyAgICBpbnQgZG9fY29ycnVwdF9yc2Ffa2V5 Z2VuID0gMCwgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMDsKLSsgICAgaW50IGJhZF9yc2EgPSAw LCBiYWRfZHNhID0gMDsKLSsgICAgaW50IGRvX3JuZ19zdGljayA9IDA7Ci0rICAgIGludCBub19l eGl0ID0gMDsKLSsKLSsgICAgcHJpbnRmKCJcdEZJUFMtbW9kZSB0ZXN0IGFwcGxpY2F0aW9uXG5c biIpOwotKwotKyAgICAvKiBMb2FkIGVudHJvcHkgZnJvbSBleHRlcm5hbCBmaWxlLCBpZiBhbnkg Ki8KLSsgICAgUkFORF9sb2FkX2ZpbGUoIi5ybmQiLCAxMDI0KTsKLSsKLSsgICAgaWYgKGFyZ3Zb MV0pIHsKLSsgICAgICAgIC8qIENvcnJ1cHRlZCBLQVQgdGVzdHMgKi8KLSsgICAgICAgIGlmICgh c3RyY21wKGFyZ3ZbMV0sICJhZXMiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9hZXMo KTsKLSsgICAgICAgICAgICBwcmludGYoIkFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBj b3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFd LCAiZGVzIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZGVzKCk7Ci0rICAgICAgICAg ICAgcHJpbnRmKCJERVMzLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQg S0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNhIikp IHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhKCk7Ci0rICAgICAgICAgICAgcHJpbnRm KCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVw dGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJz YSIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYSgpOwotKyAgICAgICAgICAgIHBy aW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNv cnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0s ICJyc2FrZXkiKSkgewotKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFu ZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOwotKwkgICAg YmFkX3JzYSA9IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0 cmNtcChhcmd2WzFdLCAicnNha2V5Z2VuIikpIHsKLSsJICAgIGRvX2NvcnJ1cHRfcnNhX2tleWdl biA9IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkg Z2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2Vu Li4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5Iikp IHsKLSsgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJl IHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKLSsJICAgIGJhZF9kc2EgPSAx OwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsx XSwgImRzYWtleWdlbiIpKSB7Ci0rCSAgICBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAxOwotKwkg ICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24g YW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7Ci0r ICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInNoYTEiKSkgewotKyAgICAgICAg ICAgIEZJUFNfY29ycnVwdF9zaGExKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJTSEEtMSBoYXNo IHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFd LCAicm5nIikpIHsKLSsJICAgIEZJUFNfY29ycnVwdF9ybmcoKTsKLSsJfSBlbHNlIGlmICghc3Ry Y21wKGFyZ3ZbMV0sICJybmdzdGljayIpKSB7Ci0rCSAgICBkb19ybmdfc3RpY2sgPSAxOwotKwkg ICAgbm9fZXhpdCA9IDE7Ci0rCSAgICBwcmludGYoIlJORyB0ZXN0IHdpdGggc3R1Y2sgY29udGlu dW91cyB0ZXN0Li4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgcHJpbnRm KCJCYWQgYXJndW1lbnQgXCIlc1wiXG4iLCBhcmd2WzFdKTsKLSsgICAgICAgICAgICBleGl0KDEp OwotKyAgICAgICAgfQotKwlpZiAoIW5vX2V4aXQpIHsKLSsgICAgICAgIAlpZiAoIUZJUFNfbW9k ZV9zZXQoMSkpIHsKLSsgCQkgICAgZG9fcHJpbnRfZXJyb3JzKCk7Ci0rICAgICAgICAJICAgIHBy aW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IGZhaWxlZFxuIik7Ci0rCQkgICAgZXhpdCgxKTsKLSsJ CX0KLSsgICAgICAgIAlwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBzdWNjZXNzZnVsXG4iKTsK LSsgICAgICAgIAlleGl0KDApOwotKwl9Ci0rICAgIH0KLSsKLSsgICAgLyogTm9uLUFwcHJvdmVk IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiMS4gTm9uLUFw cHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOwotKyAgICBwcmludGYo Ilx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7Ci0rICAgIHByaW50ZiggZGhfdGVz dCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyog UG93ZXItdXAgc2VsZiB0ZXN0Ci0rICAgICovCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAg ICBwcmludGYoIjIuIEF1dG9tYXRpYyBwb3dlci11cCBzZWxmIHRlc3QuLi4iKTsKLSsgICAgaWYg KCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKyAgICAgICAg cHJpbnRmKEZhaWwoIkZBSUxFRCFcbiIpKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBwcmludGYo InN1Y2Nlc3NmdWxcbiIpOwotKyAgICBpZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2VuKQotKyAgICAg ICAgICAgIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKCk7Ci0rICAgIGlmIChkb19jb3JydXB0X3Jz YV9rZXlnZW4pCi0rICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYV9rZXlnZW4oKTsKLSsgICAg aWYgKGRvX3JuZ19zdGljaykKLSsgICAgICAgICAgICBGSVBTX3JuZ19zdGljaygpOwotKwotKyAg ICAvKiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiMy4g QUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfYWVzX3Rl c3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8q IFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICovCi0r ICAgIHByaW50ZigiNC4gUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRp b24uLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3JzYV90ZXN0KGJhZF9yc2EpID8gInN1Y2Nlc3Nm dWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogREVTLUNCQyBlbmNyeXB0 aW9uL2RlY3J5cHRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRmKCI1LiBERVMtRUNCIGVuY3J5cHRp b24vZGVjcnlwdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfZGVzM190ZXN0KCkgPyAic3Vj Y2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBEU0Ega2V5IGdl bmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uCi0rICAgICovCi0rICAgIHByaW50Zigi Ni4gRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbi4uLiIpOwotKyAg ICBwcmludGYoIEZJUFNfZHNhX3Rlc3QoYmFkX2RzYSkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWls KCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBTSEEtMSBoYXNoCi0rICAgICovCi0rICAgIHBy aW50ZigiN2EuIFNIQS0xIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTFfdGVzdCgp ID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogU0hB LTI1NiBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2IuIFNIQS0yNTYgaGFzaC4uLiIpOwot KyAgICBwcmludGYoIEZJUFNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwo IkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFNIQS01MTIgaGFzaAotKyAgICAqLwotKyAgICBw cmludGYoIjdjLiBTSEEtNTEyIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTUxMl90 ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAv KiBITUFDLVNIQS0xIGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3ZC4gSE1BQy1TSEEtMSBo YXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3Nm dWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMjI0IGhh c2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3ZS4gSE1BQy1TSEEtMjI0IGhhc2guLi4iKTsKLSsg ICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZh aWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTI1NiBoYXNoCi0rICAgICov Ci0rICAgIHByaW50ZigiN2YuIEhNQUMtU0hBLTI1NiBoYXNoLi4uIik7Ci0rICAgIHByaW50Zigg RklQU19obWFjX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQh XG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0zODQgaGFzaAotKyAgICAqLwotKyAgICBwcmlu dGYoIjdnLiBITUFDLVNIQS0zODQgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19z aGEzODRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsK LSsgICAgLyogSE1BQy1TSEEtNTEyIGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3aC4gSE1B Qy1TSEEtNTEyIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhNTEyX3Rlc3Qo KSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIE5v bi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgotKyAgICAqLwotKyAgICBwcmludGYo IjguIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKLSsg ICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOwotKyAgICBwcmlu dGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCi0rCSAgICA6IEZhaWwo ImZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7Ci0rCi0rICAgIC8qIFplcm9pemF0aW9uCi0rICAg ICovCi0rICAgIHByaW50ZigiOS4gWmVyby1pemF0aW9uLi4uXG4iKTsKLSsgICAgcHJpbnRmKCBa ZXJvaXplKCkgPyAiXHRzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCi0rCSAgICA6IEZhaWwoIlx0 ZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKLSsKLSsgICAgcHJpbnRmKCJcbkFsbCB0ZXN0cyBj b21wbGV0ZWQgd2l0aCAlZCBlcnJvcnNcbiIsIEVycm9yKTsKLSsgICAgcmV0dXJuIEVycm9yID8g MSA6IDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2ZpcHNfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwc19sb2NsLmgKLS0tLSBv cGVuc3NsLTEuMC4wL2NyeXB0by9maXBzX2xvY2wuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwc19sb2NsLmgJMjAx MC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsNzIgQEAKLSsvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot KyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24u Ci0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2lmZGVm ICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotK3ZvaWQgZmlwc193X2xv Y2sodm9pZCk7Ci0rdm9pZCBmaXBzX3dfdW5sb2NrKHZvaWQpOwotK3ZvaWQgZmlwc19yX2xvY2so dm9pZCk7Ci0rdm9pZCBmaXBzX3JfdW5sb2NrKHZvaWQpOwotK2ludCBmaXBzX2lzX3N0YXJ0ZWQo dm9pZCk7Ci0rdm9pZCBmaXBzX3NldF9zdGFydGVkKHZvaWQpOwotK2ludCBmaXBzX2lzX293bmlu Z190aHJlYWQodm9pZCk7Ci0raW50IGZpcHNfc2V0X293bmluZ190aHJlYWQodm9pZCk7Ci0rdm9p ZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpOwotK2ludCBmaXBzX2NsZWFyX293bmluZ190 aHJlYWQodm9pZCk7Ci0rCi0rI2RlZmluZSBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFCTE2Ci0r Ci0rI2lmZGVmICBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsjZW5kaWYKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9maXBzL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9NYWtlZmlsZS5m aXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC9jcnlwdG8vZmlwcy9NYWtlZmlsZQkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIw MAotQEAgLTAsMCArMSw4MSBAQAotKyMKLSsjIE9wZW5TU0wvY3J5cHRvL2ZpcHMvTWFrZWZpbGUK LSsjCi0rCi0rRElSPQlmaXBzCi0rVE9QPQkuLi8uLgotK0NDPQljYwotK0lOQ0xVREVTPQotK0NG TEFHPS1nCi0rTUFLRUZJTEU9CU1ha2VmaWxlCi0rQVI9CQlhciByCi0rCi0rQ0ZMQUdTPSAkKElO Q0xVREVTKSAkKENGTEFHKQotKwotK0dFTkVSQUw9TWFrZWZpbGUKLStURVNUPWZpcHNfdGVzdF9z dWl0ZS5jIGZpcHNfcmFuZHRlc3QuYwotK0FQUFM9Ci0rCi0rTElCPSQoVE9QKS9saWJjcnlwdG8u YQotK0xJQlNSQz1maXBzX2Flc19zZWxmdGVzdC5jIGZpcHNfZGVzX3NlbGZ0ZXN0LmMgZmlwc19o bWFjX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX3NlbGZ0ZXN0LmMgXAotKyAgICBmaXBzX3JzYV9zZWxm dGVzdC5jIGZpcHNfc2hhMV9zZWxmdGVzdC5jIGZpcHMuYyBmaXBzX2RzYV9zZWxmdGVzdC5jICBm aXBzX3JhbmQuYyBcCi0rICAgIGZpcHNfcnNhX3g5MzFnLmMKLSsKLStMSUJPQko9Zmlwc19hZXNf c2VsZnRlc3QubyBmaXBzX2Rlc19zZWxmdGVzdC5vIGZpcHNfaG1hY19zZWxmdGVzdC5vIGZpcHNf cmFuZF9zZWxmdGVzdC5vIFwKLSsgICAgZmlwc19yc2Ffc2VsZnRlc3QubyBmaXBzX3NoYTFfc2Vs ZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2VsZnRlc3QubyAgZmlwc19yYW5kLm8gXAotKyAgICBm aXBzX3JzYV94OTMxZy5vCi0rCi0rU1JDPSAkKExJQlNSQykgZmlwc19zdGFuZGFsb25lX3NoYTEu YwotKwotK0VYSEVBREVSPSBmaXBzLmggZmlwc19yYW5kLmgKLStIRUFERVI9CSQoRVhIRUFERVIp Ci0rCi0rQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLSsKLSt0b3A6Ci0rCShj ZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLSsKLSth bGw6CWxpYgotKwotK2xpYjoJJChMSUJPQkopCi0rCSQoQVIpICQoTElCKSAkKExJQk9CSikKLSsJ JChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0rCUB0b3VjaCBsaWIKLSsKLStm aWxlczoKLSsJJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkv TUlORk8KLSsKLStsaW5rczoKLSsJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4u L2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xp bmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0rCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5w bCAuLi8uLi9hcHBzICQoQVBQUykKLSsKLStpbnN0YWxsOgotKwlAWyAtbiAiJChJTlNUQUxMVE9Q KSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0rCUBoZWFkZXJsaXN0PSIk KEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLSsJZG8gIFwKLSsJKGNwICQk aSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAot KwljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNz bC8kJGkgKTsgXAotKwlkb25lOwotKwotK3RhZ3M6Ci0rCWN0YWdzICQoU1JDKQotKwotK3Rlc3Rz OgotKwotK2xpbnQ6Ci0rCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotKwot K2RlcGVuZDoKLSsJQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVw cGVyIE1ha2VmaWxlLi4uCi0rCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykg JChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLSsKLStkY2xlYW46Ci0rCSQoUEVSTCkg LXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30n ICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLSsJbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJ TEUpCi0rCi0rY2xlYW46Ci0rCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5u ZnMqICoub2xkICouYmFrIGZsdWZmCi0rCi0rIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBt YWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlw dG8vaG1hYy9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9obWFjL2htYWMuYwotLS0t IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMJMjAxMC0wMS0yNiAxNTozMzo1 Mi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9obWFjL2htYWMuYwky MDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAotQEAgLTc3LDYgKzc3LDEzIEBAIGlu dCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KLSAKLSAJaWYgKGtleSAhPSBO VUxMKQotIAkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCWlmIChGSVBTX21vZGUoKSAmJiAh KG1kLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpCi0rCQkmJiAoIShjdHgtPm1kX2N0eC5mbGFn cyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKLSsJCSB8fCAhKGN0eC0+aV9jdHgu ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkgfHwgIShjdHgtPm9f Y3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkpCi0rCQkJZ290byBl cnI7Ci0rI2VuZGlmCi0gCQlyZXNldD0xOwotIAkJaj1FVlBfTURfYmxvY2tfc2l6ZShtZCk7Ci0g CQlPUEVOU1NMX2Fzc2VydChqIDw9IChpbnQpc2l6ZW9mKGN0eC0+a2V5KSk7Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4wL2NyeXB0by9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL01h a2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vTWFrZWZpbGUuZmlwcwkyMDA5LTA0LTA2 IDE2OjMxOjM1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL01ha2Vm aWxlCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMzQsMTQgKzM0LDE0 IEBAIEdFTkVSQUw9TWFrZWZpbGUgUkVBRE1FIGNyeXB0by1saWIuY29tIGkKLSAKLSBMSUI9ICQo VE9QKS9saWJjcnlwdG8uYQotIFNIQVJFRF9MSUI9IGxpYmNyeXB0byQoU0hMSUJfRVhUKQotLUxJ QlNSQz0JY3J5cHRsaWIuYyBtZW0uYyBtZW1fY2xyLmMgbWVtX2RiZy5jIGN2ZXJzaW9uLmMgZXhf ZGF0YS5jIGNwdF9lcnIuYyBlYmNkaWMuYyB1aWQuYyBvX3RpbWUuYyBvX3N0ci5jIG9fZGlyLmMK LS1MSUJPQko9IGNyeXB0bGliLm8gbWVtLm8gbWVtX2RiZy5vIGN2ZXJzaW9uLm8gZXhfZGF0YS5v IGNwdF9lcnIubyBlYmNkaWMubyB1aWQubyBvX3RpbWUubyBvX3N0ci5vIG9fZGlyLm8gJChDUFVJ RF9PQkopCi0rTElCU1JDPQljcnlwdGxpYi5jIG1lbS5jIG1lbV9jbHIuYyBtZW1fZGJnLmMgY3Zl cnNpb24uYyBleF9kYXRhLmMgY3B0X2Vyci5jIGViY2RpYy5jIHVpZC5jIG9fdGltZS5jIG9fc3Ry LmMgb19kaXIuYyBvX2luaXQuYyBmaXBzX2Vyci5jCi0rTElCT0JKPSBjcnlwdGxpYi5vIG1lbS5v IG1lbV9kYmcubyBjdmVyc2lvbi5vIGV4X2RhdGEubyBjcHRfZXJyLm8gZWJjZGljLm8gdWlkLm8g b190aW1lLm8gb19zdHIubyBvX2Rpci5vIG9faW5pdC5vIGZpcHNfZXJyLm8gJChDUFVJRF9PQkop Ci0gCi0gU1JDPSAkKExJQlNSQykKLSAKLSBFWEhFQURFUj0gY3J5cHRvLmggb3BlbnNzbHYuaCBv cGVuc3NsY29uZi5oIGViY2RpYy5oIHN5bWhhY2tzLmggXAotIAlvc3NsX3R5cC5oCi0tSEVBREVS PQljcnlwdGxpYi5oIGJ1aWxkaW5mLmggbWQzMl9jb21tb24uaCBvX3RpbWUuaCBvX3N0ci5oIG9f ZGlyLmggJChFWEhFQURFUikKLStIRUFERVI9CWNyeXB0bGliLmggYnVpbGRpbmYuaCBmaXBzX2xv Y2wuaCBtZDMyX2NvbW1vbi5oIG9fdGltZS5oIG9fc3RyLmggb19kaXIuaCAkKEVYSEVBREVSKQot IAotIEFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0gCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4wL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9tZGMyL21kYzJkZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZGMyL21kYzJkZ3N0 LmMuZmlwcwkyMDA0LTA3LTI1IDIxOjEwOjQxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjAvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAw MCArMDIwMAotQEAgLTYxLDYgKzYxLDExIEBACi0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNs dWRlIDxvcGVuc3NsL2Rlcy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL21kYzIuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotICN1bmRlZiBjMmwKLSAjZGVmaW5lIGMybChjLGwp CShsID0oKERFU19MT05HKSgqKChjKSsrKSkpICAgICwgXAotQEAgLTc1LDcgKzgwLDcgQEAKLSAJ CQkqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MjRMKSYweGZmKSkKLSAKLSBzdGF0aWMg dm9pZCBtZGMyX2JvZHkoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXpl X3QgbGVuKTsKLS1pbnQgTURDMl9Jbml0KE1EQzJfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURf SW5pdChNREMyKQotIAl7Ci0gCWMtPm51bT0wOwotIAljLT5wYWRfdHlwZT0xOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vbWRjMi9tZGMyLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9tZGMyL21kYzIuaAotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kYzIvbWRjMi5oLmZpcHMJ MjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9tZGMyL21kYzIuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAg LTgwLDcgKzgwLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgbWRjMl9jdHhfc3QKLSAJaW50IHBhZF90eXBl OyAvKiBlaXRoZXIgMSBvciAyLCBkZWZhdWx0IDEgKi8KLSAJfSBNREMyX0NUWDsKLSAKLS0KLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfTURDMl9Jbml0KE1EQzJfQ1RYICpjKTsK LSsjZW5kaWYKLSBpbnQgTURDMl9Jbml0KE1EQzJfQ1RYICpjKTsKLSBpbnQgTURDMl9VcGRhdGUo TURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pOwotIGlu dCBNREMyX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNREMyX0NUWCAqYyk7Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4wL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL21kMi9tZDJfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQyL21kMl9kZ3N0 LmMuZmlwcwkyMDA3LTA4LTMxIDEyOjEyOjM1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjAvY3J5cHRvL21kMi9tZDJfZGdzdC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAw ICswMjAwCi1AQCAtNjIsNiArNjIsMTEgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9tZDIuaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5o PgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2Vu ZGlmCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gCi0gY29uc3QgY2hhciBNRDJfdmVy c2lvbltdPSJNRDIiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLUBAIC0xMTYsNyArMTIxLDcg QEAgY29uc3QgY2hhciAqTUQyX29wdGlvbnModm9pZCkKLSAJCXJldHVybigibWQyKGludCkiKTsK LSAJfQotIAotLWludCBNRDJfSW5pdChNRDJfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5p dChNRDIpCi0gCXsKLSAJYy0+bnVtPTA7Ci0gCW1lbXNldChjLT5zdGF0ZSwwLHNpemVvZiBjLT5z dGF0ZSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDIvbWQyLmguZmlwcyBvcGVu c3NsLTEuMC4wL2NyeXB0by9tZDIvbWQyLmgKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDIv bWQyLmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjAvY3J5cHRvL21kMi9tZDIuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCAr MDIwMAotQEAgLTgxLDYgKzgxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTUQyc3RhdGVfc3QKLSAJfSBN RDJfQ1RYOwotIAotIGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQpOwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9NRDJfSW5pdChNRDJfQ1RYICpjKTsKLSsjZW5kaWYKLSBp bnQgTUQyX0luaXQoTUQyX0NUWCAqYyk7Ci0gaW50IE1EMl9VcGRhdGUoTUQyX0NUWCAqYywgY29u c3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IE1EMl9GaW5hbCh1bnNp Z25lZCBjaGFyICptZCwgTUQyX0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kNC9tZDRfZGdzdC5j Ci0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIx IDE0OjA3OjExLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kNC9t ZDRfZGdzdC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtNTksNiAr NTksMTEgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSAibWQ0X2xvY2wuaCIKLSAj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlm Ci0rCi0gCi0gY29uc3QgY2hhciBNRDRfdmVyc2lvbltdPSJNRDQiIE9QRU5TU0xfVkVSU0lPTl9Q VEVYVDsKLSAKLUBAIC03MCw3ICs3NSw3IEBAIGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0 IiBPUEVOU1NMX1YKLSAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRj ZmVMCi0gI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAotIAot LWludCBNRDRfSW5pdChNRDRfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNRDQpCi0g CXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPkE9SU5JVF9EQVRBX0E7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDQvbWQ0LmguZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9tZDQvbWQ0LmgKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDQvbWQ0LmguZmlwcwky MDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL21kNC9tZDQuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTEw NSw2ICsxMDUsOSBAQCB0eXBlZGVmIHN0cnVjdCBNRDRzdGF0ZV9zdAotIAl1bnNpZ25lZCBpbnQg bnVtOwotIAl9IE1ENF9DVFg7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBwcml2YXRl X01ENF9Jbml0KE1ENF9DVFggKmMpOwotKyNlbmRpZgotIGludCBNRDRfSW5pdChNRDRfQ1RYICpj KTsKLSBpbnQgTUQ0X1VwZGF0ZShNRDRfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qg bGVuKTsKLSBpbnQgTUQ0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDRfQ1RYICpjKTsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMC9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDUv bWQ1X2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTEuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4w MDAwMDAwMDAgKzAyMDAKLUBAIC01OSw2ICs1OSwxMSBAQAotICNpbmNsdWRlIDxzdGRpby5oPgot ICNpbmNsdWRlICJtZDVfbG9jbC5oIgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSBjb25zdCBjaGFyIE1ENV92ZXJzaW9u W109Ik1ENSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAgLTcwLDcgKzc1LDcgQEAgY29u c3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVgotICNkZWZpbmUgSU5JVF9EQVRB X0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKLSAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNp Z25lZCBsb25nKTB4MTAzMjU0NzZMCi0gCi0taW50IE1ENV9Jbml0KE1ENV9DVFggKmMpCi0rRklQ U19OT05fRklQU19NRF9Jbml0KE1ENSkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsK LSAJYy0+QT1JTklUX0RBVEFfQTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kNS9t ZDUuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kNS9tZDUuaAotLS0tIG9wZW5zc2wtMS4w LjAvY3J5cHRvL21kNS9tZDUuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQ1L21kNS5oCTIwMTAtMDMtMzAgMTA6MzQ6 NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMTA1LDYgKzEwNSw5IEBAIHR5cGVkZWYgc3RydWN0IE1E NXN0YXRlX3N0Ci0gCXVuc2lnbmVkIGludCBudW07Ci0gCX0gTUQ1X0NUWDsKLSAKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfTUQ1X0luaXQoTUQ1X0NUWCAqYyk7Ci0rI2VuZGlm Ci0gaW50IE1ENV9Jbml0KE1ENV9DVFggKmMpOwotIGludCBNRDVfVXBkYXRlKE1ENV9DVFggKmMs IGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwotIGludCBNRDVfRmluYWwodW5zaWduZWQg Y2hhciAqbWQsIE1ENV9DVFggKmMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWVt LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZW0uYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL21lbS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1Nzo0Ny4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4wL2NyeXB0by9tZW0uYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCAr MDIwMAotQEAgLTEwMSw3ICsxMDEsNyBAQCBzdGF0aWMgdm9pZCAoKmZyZWVfbG9ja2VkX2Z1bmMp KHZvaWQgKikgCi0gCi0gLyogbWF5IGJlIGNoYW5nZWQgYXMgbG9uZyBhcyAnYWxsb3dfY3VzdG9t aXplX2RlYnVnJyBpcyBzZXQgKi8KLSAvKiBYWFggdXNlIGNvcnJlY3QgZnVuY3Rpb24gcG9pbnRl ciB0eXBlcyAqLwotLSNpZmRlZiBDUllQVE9fTURFQlVHCi0rI2lmIGRlZmluZWQoQ1JZUFRPX01E RUJVRykgJiYgIWRlZmluZWQoT1BFTlNTTF9GSVBTKQotIC8qIHVzZSBkZWZhdWx0IGZ1bmN0aW9u cyBmcm9tIG1lbV9kYmcuYyAqLwotIHN0YXRpYyB2b2lkICgqbWFsbG9jX2RlYnVnX2Z1bmMpKHZv aWQgKixpbnQsY29uc3QgY2hhciAqLGludCxpbnQpCi0gCT0gQ1JZUFRPX2RiZ19tYWxsb2M7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9vX2luaXQuYy5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL29faW5pdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vb19pbml0LmMuZmlwcwky MDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL29faW5pdC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMCww ICsxLDgwIEBACi0rLyogb19pbml0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBI ZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0Lgot KyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK LSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRp c3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK LSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAq Ci0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9k dWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5n Ci0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0r ICovCi0rCi0rI2luY2x1ZGUgPGVfb3MuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsK LSsvKiBQZXJmb3JtIGFueSBlc3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXphdGlvbiBvcGVyYXRp b25zLgotKyAqIEN1cnJlbnRseSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MKLSsgKi8KLSsKLSt2 b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpCi0rCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCXN0YXRpYyBpbnQgZG9uZSA9IDA7Ci0rCWlmICghZG9uZSkKLSsJCXsKLSsjaWZkZWYgQ1JZ UFRPX01ERUJVRwotKwkJQ1JZUFRPX21hbGxvY19kZWJ1Z19pbml0KCk7Ci0rI2VuZGlmCi0rCQlk b25lID0gMTsKLSsJCX0KLSsjZW5kaWYKLSsJfQotKwkJCi0rCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wL2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vb3Bl bnNzbGNvbmYuaC5pbgotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL29wZW5zc2xjb25mLmguaW4u ZmlwcwkyMDA1LTEyLTE2IDExOjM3OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjAvY3J5cHRvL29wZW5zc2xjb25mLmguaW4JMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAg KzAyMDAKLUBAIC0xLDUgKzEsMjAgQEAKLSAvKiBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbiAqLwot IAotKyNpZmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQKLSsKLSsvKiBJbmNsdWRlIGFueSBz eW1ib2xzIGhlcmUgdGhhdCBoYXZlIHRvIGJlIGV4cGxpY2l0bHkgc2V0IHRvIGVuYWJsZSBhIGZl YXR1cmUKLSsgKiB0aGF0IHNob3VsZCBiZSB2aXNpYmxlIHRvIG1ha2VkZXBlbmQuCi0rICoKLSsg KiBbT3VyICJtYWtlIGRlcGVuZCIgZG9lc24ndCBhY3R1YWxseSBsb29rIGF0IHRoaXMsIHdlIHVz ZSBhY3R1YWwgYnVpbGQgc2V0dGluZ3MKLSsgKiBpbnN0ZWFkOyB3ZSB3YW50IHRvIG1ha2UgaXQg ZWFzeSB0byByZW1vdmUgc3ViZGlyZWN0b3JpZXMgd2l0aCBkaXNhYmxlZCBhbGdvcml0aG1zLl0K LSsgKi8KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTCi0r I2VuZGlmCi0rCi0rI2VuZGlmCi0rCi0gLyogR2VuZXJhdGUgODAzODYgY29kZT8gKi8KLSAjdW5k ZWYgSTM4Nl9PTkxZCi0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9wa2NzMTIvcDEy X2NydC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYwotLS0tIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMuZmlwcwkyMDA5LTAzLTA5IDE0OjA4 OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3BrY3MxMi9wMTJf Y3J0LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC01OSw2ICs1OSwx MCBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNs dWRlIDxvcGVuc3NsL3BrY3MxMi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gCi0gc3RhdGljIGludCBwa2NzMTJfYWRk X2JhZyhTVEFDS19PRihQS0NTMTJfU0FGRUJBRykgKipwYmFncywgUEtDUzEyX1NBRkVCQUcgKmJh Zyk7Ci1AQCAtOTAsNyArOTQsMTQgQEAgUEtDUzEyICpQS0NTMTJfY3JlYXRlKGNoYXIgKnBhc3Ms IGNoYXIgKgotIAotIAkvKiBTZXQgZGVmYXVsdHMgKi8KLSAJaWYgKCFuaWRfY2VydCkKLSsJCXsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkpCi0rCQkJbmlkX2NlcnQg PSBOSURfcGJlX1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKLSsJCWVsc2UKLSsjZW5k aWYKLSAJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0UkMyX0NCQzsKLSsJCX0K LSAJaWYgKCFuaWRfa2V5KQotIAkJbmlkX2tleSA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9U cmlwbGVERVNfQ0JDOwotIAlpZiAoIWl0ZXIpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9yYW5kL21kX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQvbWRfcmFuZC5j Ci0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcwkyMDA5LTAxLTAz IDEwOjI1OjMyLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQv bWRfcmFuZC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMTI2LDYg KzEyNiwxMCBAQAotIAotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotICNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gI2lmZGVmIEJOX0RFQlVHCi0gIyBkZWZpbmUgUFJFRElD VAotQEAgLTM0Miw2ICszNDYsMTQgQEAgc3RhdGljIGludCBzc2xlYXlfcmFuZF9ieXRlcyh1bnNp Z25lZCBjaAotICNlbmRpZgotIAlpbnQgZG9fc3Rpcl9wb29sID0gMDsKLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCWlmKEZJUFNfbW9kZSgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBT X0ZfU1NMRUFZX1JBTkRfQllURVMsRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rCSAgICByZXR1 cm4gMDsKLSsJICAgIH0KLSsjZW5kaWYKLSsKLSAjaWZkZWYgUFJFRElDVAotIAlpZiAocmFuZF9w cmVkaWN0YWJsZSkKLSAJCXsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQvcmFu ZF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYwotLS0tIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYy5maXBzCTIwMDYtMTEtMjEgMjI6Mjk6 NDEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9yYW5kX2Vy ci5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtNzAsNiArNzAsMTMg QEAKLSAKLSBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJBTkRfc3RyX2Z1bmN0c1tdPQotIAl7Ci0r e0VSUl9GVU5DKFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QpLAkiRU5HX1JBTkRfR0VU X1JBTkRfTUVUSE9EIn0sCi0re0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkQpLAkiRklQU19SQU5E In0sCi0re0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkRfQllURVMpLAkiRklQU19SQU5EX0JZVEVT In0sCi0re0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RUKSwJIkZJUFNfUkFORF9TRVRf RFQifSwKLSt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfU0VUX0RUKSwJIkZJUFNfU0VUX0RUIn0sCi0r e0VSUl9GVU5DKFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQpLAkiRklQU19TRVRfUFJOR19TRUVE In0sCi0re0VSUl9GVU5DKFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUpLAkiRklQU19TRVRfVEVT VF9NT0RFIn0sCi0ge0VSUl9GVU5DKFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRCksCSJSQU5E X2dldF9yYW5kX21ldGhvZCJ9LAotIHtFUlJfRlVOQyhSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMp LAkiU1NMRUFZX1JBTkRfQllURVMifSwKLSB7MCxOVUxMfQotQEAgLTc3LDcgKzg0LDE3IEBAIHN0 YXRpYyBFUlJfU1RSSU5HX0RBVEEgUkFORF9zdHJfZnVuY3RzW10KLSAKLSBzdGF0aWMgRVJSX1NU UklOR19EQVRBIFJBTkRfc3RyX3JlYXNvbnNbXT0KLSAJewotK3tFUlJfUkVBU09OKFJBTkRfUl9O T05fRklQU19NRVRIT0QpICAgICAgLCJub24gZmlwcyBtZXRob2QifSwKLSt7RVJSX1JFQVNPTihS QU5EX1JfTk9UX0lOX1RFU1RfTU9ERSkgICAgICwibm90IGluIHRlc3QgbW9kZSJ9LAotK3tFUlJf UkVBU09OKFJBTkRfUl9OT19LRVlfU0VUKSAgICAgICAgICAgLCJubyBrZXkgc2V0In0sCi0re0VS Ul9SRUFTT04oUkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9UT09fTVVDSCksInBybmcgYXNraW5nIGZv ciB0b28gbXVjaCJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0VSUk9SKSAgICAgICAgICAg LCJwcm5nIGVycm9yIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX1BSTkdfS0VZRUQpICAgICAgICAg ICAsInBybmcga2V5ZWQifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19OT1RfUkVLRVlFRCkg ICAgICwicHJuZyBub3QgcmVrZXllZCJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9S RVNFRURFRCkgICAgLCJwcm5nIG5vdCByZXNlZWRlZCJ9LAotIHtFUlJfUkVBU09OKFJBTkRfUl9Q Uk5HX05PVF9TRUVERUQpICAgICAgLCJQUk5HIG5vdCBzZWVkZWQifSwKLSt7RVJSX1JFQVNPTihS QU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWSksInBybmcgc2VlZCBtdXN0IG5vdCBt YXRjaCBrZXkifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19TVFVDSykgICAgICAgICAgICwi cHJuZyBzdHVjayJ9LAotIHswLE5VTEx9Ci0gCX07Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4w L2NyeXB0by9yYW5kL3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQvcmFuZC5o Ci0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcwkyMDEwLTAzLTMwIDEw OjMzOjQ1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQvcmFu ZC5oCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMTI4LDExICsxMjgs MjggQEAgdm9pZCBFUlJfbG9hZF9SQU5EX3N0cmluZ3Modm9pZCk7Ci0gLyogRXJyb3IgY29kZXMg Zm9yIHRoZSBSQU5EIGZ1bmN0aW9ucy4gKi8KLSAKLSAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLSsj ZGVmaW5lIFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTA4Ci0rI2RlZmluZSBS QU5EX0ZfRklQU19SQU5ECQkJCSAxMDMKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRfQllURVMJ CQkJIDEwMgotKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQJCQkJIDEwNgotKyNkZWZp bmUgUkFORF9GX0ZJUFNfU0VUX0RUCQkJCSAxMDQKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9Q Uk5HX1NFRUQJCQkgMTA3Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFCQkJIDEw NQotICNkZWZpbmUgUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9ECQkJIDEwMQotICNkZWZpbmUg UkFORF9GX1NTTEVBWV9SQU5EX0JZVEVTCQkJIDEwMAotIAotIC8qIFJlYXNvbiBjb2Rlcy4gKi8K LSsjZGVmaW5lIFJBTkRfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwNQotKyNkZWZpbmUgUkFORF9S X05PVF9JTl9URVNUX01PREUJCQkJIDEwNgotKyNkZWZpbmUgUkFORF9SX05PX0tFWV9TRVQJCQkJ IDEwNwotKyNkZWZpbmUgUkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9UT09fTVVDSAkJCSAxMDEKLSsj ZGVmaW5lIFJBTkRfUl9QUk5HX0VSUk9SCQkJCSAxMDgKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX0tF WUVECQkJCSAxMDkKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRUtFWUVECQkJCSAxMDIKLSsj ZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRAkJCSAxMDMKLSAjZGVmaW5lIFJBTkRfUl9Q Uk5HX05PVF9TRUVERUQJCQkJIDEwMAotKyNkZWZpbmUgUkFORF9SX1BSTkdfU0VFRF9NVVNUX05P VF9NQVRDSF9LRVkJCSAxMTAKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX1NUVUNLCQkJCSAxMDQKLSAK LSAjaWZkZWYgIF9fY3BsdXNwbHVzCi0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8v cmFuZC9yYW5kX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9yYW5kX2xpYi5j Ci0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jLmZpcHMJMjAwOC0xMS0x MiAwNDo1ODowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYW5k L3JhbmRfbGliLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02MCw2 ICs2MCwxMiBAQAotICNpbmNsdWRlIDx0aW1lLmg+Ci0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0g I2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlICJyYW5kX2xjbC5oIgotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2VuZGlmCi0rCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lO RQotICNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgotICNlbmRpZgotQEAgLTEwMiw4ICsxMDgs MTkgQEAgY29uc3QgUkFORF9NRVRIT0QgKlJBTkRfZ2V0X3JhbmRfbWV0aG9kKAotIAkJCWZ1bmN0 X3JlZiA9IGU7Ci0gCQllbHNlCi0gI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJCWRl ZmF1bHRfUkFORF9tZXRoID0gRklQU19tb2RlKCkgPyBGSVBTX3JhbmRfbWV0aG9kKCkgOiBSQU5E X1NTTGVheSgpOwotKwkJfQotKwlpZiAoRklQU19tb2RlKCkKLSsJCSYmIGRlZmF1bHRfUkFORF9t ZXRoICE9IEZJUFNfcmFuZF9jaGVjaygpKQotKwkgICAgewotKwkgICAgUkFORGVycihSQU5EX0Zf UkFORF9HRVRfUkFORF9NRVRIT0QsUkFORF9SX05PTl9GSVBTX01FVEhPRCk7Ci0rCSAgICByZXR1 cm4gMDsKLSsJICAgIH0KLSsjZWxzZQotIAkJCWRlZmF1bHRfUkFORF9tZXRoID0gUkFORF9TU0xl YXkoKTsKLSAJCX0KLSsjZW5kaWYKLSAJcmV0dXJuIGRlZmF1bHRfUkFORF9tZXRoOwotIAl9Ci0g Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzIvcmMyLmguZmlwcyBvcGVuc3NsLTEu MC4wL2NyeXB0by9yYzIvcmMyLmgKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzIvcmMyLmgu ZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjAvY3J5cHRvL3JjMi9yYzIuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAot QEAgLTc5LDcgKzc5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgcmMyX2tleV9zdAotIAlSQzJfSU5UIGRh dGFbNjRdOwotIAl9IFJDMl9LRVk7Ci0gCi0tIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMgCi0rdm9p ZCBwcml2YXRlX1JDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWdu ZWQgY2hhciAqZGF0YSxpbnQgYml0cyk7Ci0rI2VuZGlmCi0gdm9pZCBSQzJfc2V0X2tleShSQzJf S0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsaW50IGJpdHMpOwot IHZvaWQgUkMyX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNo YXIgKm91dCxSQzJfS0VZICprZXksCi0gCQkgICAgIGludCBlbmMpOwotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC9jcnlwdG8vcmMyL3JjMl9za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9y YzIvcmMyX3NrZXkuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjMi9yYzJfc2tleS5jLmZp cHMJMjAwNy0wOS0xOCAyMzoxMDozMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4w L2NyeXB0by9yYzIvcmMyX3NrZXkuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIw MAotQEAgLTU3LDYgKzU3LDExIEBACi0gICovCi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvcmMyLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAjaW5jbHVkZSAicmMyX2xvY2wu aCIKLSAKLSBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlfdGFibGVbMjU2XT17Ci1AQCAt OTQsOCArOTksMjAgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5X3RhYmxlWzI1Ngot ICAqIEJTQUZFIHVzZXMgdGhlICdyZXRhcmRlZCcgdmVyc2lvbi4gIFdoYXQgSSBwcmV2aW91c2x5 IHNoaXBwZWQgaXMKLSAgKiB0aGUgc2FtZSBhcyBzcGVjaWZ5aW5nIDEwMjQgZm9yIHRoZSAnYml0 cycgcGFyYW1ldGVyLiAgQnNhZmUgdXNlcwotICAqIGEgdmVyc2lvbiB3aGVyZSB0aGUgYml0cyBw YXJhbWV0ZXIgaXMgdGhlIHNhbWUgYXMgbGVuKjggKi8KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0gdm9pZCBSQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmRhdGEsIGludCBiaXRzKQotIAl7Ci0rCWlmIChGSVBTX21vZGUoKSkKLSsJCUZJUFNf QkFEX0FCT1JUKFJDMikKLSsJcHJpdmF0ZV9SQzJfc2V0X2tleShrZXksIGxlbiwgZGF0YSwgYml0 cyk7Ci0rCX0KLSt2b2lkIHByaXZhdGVfUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVu LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAotKwkJCQkJCQkJaW50IGJpdHMpCi0rI2Vsc2UK LSt2b2lkIFJDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQg Y2hhciAqZGF0YSwgaW50IGJpdHMpCi0rI2VuZGlmCi0rCXsKLSAJaW50IGksajsKLSAJdW5zaWdu ZWQgY2hhciAqazsKLSAJUkMyX0lOVCAqa2k7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9yYzQvYXNtL3JjNC1zMzkweC5wbC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9hc20v cmM0LXMzOTB4LnBsCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L2FzbS9yYzQtczM5MHgu cGwuZmlwcwkyMDA5LTAyLTEyIDE1OjQ4OjQ5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAw MDAwMDAwICswMjAwCi1AQCAtMjAyLDQgKzIwMiw2IEBAIFJDNF9vcHRpb25zOgotIC5zdHJpbmcJ InJjNCg4eCxjaGFyKSIKLSBfX18KLSAKLSskY29kZSA9fiBzL1JDNF9zZXRfa2V5L3ByaXZhdGVf UkM0X3NldF9rZXkvZyBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0rCi0gcHJpbnQgJGNvZGU7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwuZmlwcyBv cGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwKLS0tLSBvcGVuc3NsLTEu MC4wL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwuZmlwcwkyMDA5LTA0LTI3IDIxOjMxOjA0 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9hc20vcmM0LXg4 Nl82NC5wbAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTQ5OSw2ICs0 OTksOCBAQCBfX18KLSAKLSAkY29kZSA9fiBzLyMoW2J3ZF0pLyQxL2dtOwotIAotKyRjb2RlID1+ IHMvUkM0X3NldF9rZXkvcHJpdmF0ZV9SQzRfc2V0X2tleS9nIGlmICgkRU5We0ZJUFN9IG5lICIi KTsKLSsKLSBwcmludCAkY29kZTsKLSAKLSBjbG9zZSBTVERPVVQ7Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wL2NyeXB0by9yYzQvYXNtL3JjNC01ODYucGwuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9yYzQvYXNtL3JjNC01ODYucGwKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvYXNtL3Jj NC01ODYucGwuZmlwcwkyMDA3LTEyLTAyIDIyOjMyOjAzLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbAkyMDEwLTAzLTMwIDEwOjM0OjQx LjAwMDAwMDAwMCArMDIwMAotQEAgLTE2Niw4ICsxNjYsMTIgQEAgJGlkeD0iZWR4IjsKLSAKLSAm ZXh0ZXJuYWxfbGFiZWwoIk9QRU5TU0xfaWEzMmNhcF9QIik7Ci0gCi0rJHNldGtleWZ1bmMgPSAi UkM0X3NldF9rZXkiOwotKyRzZXRrZXlmdW5jID0gInByaXZhdGVfUkM0X3NldF9rZXkiIGlmICgk RU5We0ZJUFN9IG5lICIiKTsKLSsKLSsKLSAjIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5 LGludCBsZW4sY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0tJmZ1bmN0aW9uX2JlZ2luKCJS QzRfc2V0X2tleSIpOwotKyZmdW5jdGlvbl9iZWdpbigkc2V0a2V5ZnVuYyk7Ci0gCSZtb3YJKCRv dXQsJndwYXJhbSgwKSk7CQkjIGxvYWQga2V5Ci0gCSZtb3YJKCRpZGksJndwYXJhbSgxKSk7CQkj IGxvYWQgbGVuCi0gCSZtb3YJKCRpbnAsJndwYXJhbSgyKSk7CQkjIGxvYWQgZGF0YQotQEAgLTI0 NSw3ICsyNDksNyBAQCAkaWR4PSJlZHgiOwotIAkmeG9yCSgiZWF4IiwiZWF4Iik7Ci0gCSZtb3YJ KCZEV1AoLTgsJG91dCksImVheCIpOwkJIyBrZXktPng9MDsKLSAJJm1vdgkoJkRXUCgtNCwkb3V0 KSwiZWF4Iik7CQkjIGtleS0+eT0wOwotLSZmdW5jdGlvbl9lbmQoIlJDNF9zZXRfa2V5Iik7Ci0r JmZ1bmN0aW9uX2VuZCgkc2V0a2V5ZnVuYyk7Ci0gCi0gIyBjb25zdCBjaGFyICpSQzRfb3B0aW9u cyh2b2lkKTsKLSAmZnVuY3Rpb25fYmVnaW5fQigiUkM0X29wdGlvbnMiKTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRv L3JjNC9NYWtlZmlsZQotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9NYWtlZmlsZS5maXBz CTIwMDktMDItMTEgMTE6MDE6MzYuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9j cnlwdG8vcmM0L01ha2VmaWxlCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1A QCAtMjEsOCArMjEsOCBAQCBURVNUPXJjNHRlc3QuYwotIEFQUFM9Ci0gCi0gTElCPSQoVE9QKS9s aWJjcnlwdG8uYQotLUxJQlNSQz1yYzRfc2tleS5jIHJjNF9lbmMuYwotLUxJQk9CSj0kKFJDNF9F TkMpCi0rTElCU1JDPXJjNF9za2V5LmMgcmM0X2VuYy5jIHJjNF9mYmxrLmMKLStMSUJPQko9JChS QzRfRU5DKSByYzRfZmJsay5vCi0gCi0gU1JDPSAkKExJQlNSQykKLSAKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAvY3J5cHRvL3JjNC9yYzRfZmJsay5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8v cmM0L3JjNF9mYmxrLmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvcmM0X2ZibGsuYy5m aXBzCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC9jcnlwdG8vcmM0L3JjNF9mYmxrLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAy MDAKLUBAIC0wLDAgKzEsNzUgQEAKLSsvKiBjcnlwdG8vcmM0L3JjNF9mYmxrLmMgKi8KLSsvKiBX cml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhl IE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJp Z2h0IChjKSAyMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot KyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0r ICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqLwotKwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgotKyNpbmNsdWRlICJyYzRf bG9jbC5oIgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjZW5kaWYKLSsKLSsvKiBGSVBTIG1vZGUgYmxvY2tpbmcgZm9yIFJDNCBoYXMgdG8g YmUgZG9uZSBzZXBhcmF0ZWx5IHNpbmNlIFJDNF9zZXRfa2V5Ci0rICogbWF5IGJlIGltcGxlbWVu dGVkIGluIGFuIGFzc2VtYmx5IGxhbmd1YWdlIGZpbGUuCi0rICovCi0rCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotK3ZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1 bnNpZ25lZCBjaGFyICpkYXRhKQotKwl7Ci0rCWlmIChGSVBTX21vZGUoKSkKLSsJCUZJUFNfQkFE X0FCT1JUKFJDNCkKLSsJcHJpdmF0ZV9SQzRfc2V0X2tleShrZXksIGxlbiwgZGF0YSk7Ci0rCX0K LSsjZW5kaWYKLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9yYzQuaC5maXBz IG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9yYzQuaAotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRv L3JjNC9yYzQuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L3JjNC5oCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAw MDAwICswMjAwCi1AQCAtNzgsNiArNzgsOSBAQCB0eXBlZGVmIHN0cnVjdCByYzRfa2V5X3N0Ci0g Ci0gIAotIGNvbnN0IGNoYXIgKlJDNF9vcHRpb25zKHZvaWQpOwotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSt2b2lkIHByaXZhdGVfUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25z dCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSsjZW5kaWYKLSB2b2lkIFJDNF9zZXRfa2V5KFJDNF9L RVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0gdm9pZCBSQzQo UkM0X0tFWSAqa2V5LCBzaXplX3QgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbmRhdGEsCi0g CQl1bnNpZ25lZCBjaGFyICpvdXRkYXRhKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRv L3JjNC9yYzRfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L3JjNF9za2V5LmMK LS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvcmM0X3NrZXkuYy5maXBzCTIwMDctMDEtMjEg MTQ6MDc6MTMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L3Jj NF9za2V5LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC01OSw2ICs1 OSwxMSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgotICNpbmNsdWRlICJyYzRfbG9jbC5o IgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjZW5kaWYKLSsKLSAKLSBjb25zdCBjaGFyIFJDNF92ZXJzaW9uW109IlJDNCIgT1BFTlNTTF9W RVJTSU9OX1BURVhUOwotIAotQEAgLTg1LDcgKzkwLDExIEBAIGNvbnN0IGNoYXIgKlJDNF9vcHRp b25zKHZvaWQpCi0gICogRGF0ZTogV2VkLCAxNCBTZXAgMTk5NCAwNjozNTozMSBHTVQKLSAgKi8K LSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdm9pZCBwcml2YXRlX1JDNF9zZXRfa2V5KFJDNF9L RVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLSsjZWxzZQotIHZv aWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpkYXRhKQotKyNlbmRpZgotIAl7Ci0gICAgICAgICByZWdpc3RlciBSQzRfSU5UIHRtcDsKLSAg ICAgICAgIHJlZ2lzdGVyIGludCBpZDEsaWQyOwotQEAgLTEyNiw3ICsxMzUsMTIgQEAgdm9pZCBS QzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIAotIAkJICogbW9kdWxlLi4uCi0gCQkg KgkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+Ci0gCQkgKi8KLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCQl1bnNpZ25lZCBsb25nICppYTMyY2FwX3B0ciA9IE9QRU5TU0xfaWEzMmNhcF9sb2MoKTsK LSsJCWlmIChpYTMyY2FwX3B0ciAmJiAoKmlhMzJjYXBfcHRyICYgKDE8PDI4KSkpIHsKLSsjZWxz ZQotIAkJaWYgKE9QRU5TU0xfaWEzMmNhcF9QICYgKDE8PDI4KSkgewotKyNlbmRpZgotIAkJCXVu c2lnbmVkIGNoYXIgKmNwPSh1bnNpZ25lZCBjaGFyICopZDsKLSAKLSAJCQlmb3IgKGk9MDtpPDI1 NjtpKyspIGNwW2ldPWk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yaXBlbWQvcmlw ZW1kLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yaXBlbWQvcmlwZW1kLmgKLS0tLSBvcGVu c3NsLTEuMC4wL2NyeXB0by9yaXBlbWQvcmlwZW1kLmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JpcGVtZC9yaXBlbWQu aAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTkxLDYgKzkxLDkgQEAg dHlwZWRlZiBzdHJ1Y3QgUklQRU1EMTYwc3RhdGVfc3QKLSAJdW5zaWduZWQgaW50ICAgbnVtOwot IAl9IFJJUEVNRDE2MF9DVFg7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBwcml2YXRl X1JJUEVNRDE2MF9Jbml0KFJJUEVNRDE2MF9DVFggKmMpOwotKyNlbmRpZgotIGludCBSSVBFTUQx NjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKTsKLSBpbnQgUklQRU1EMTYwX1VwZGF0ZShSSVBFTUQx NjBfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgUklQRU1EMTYw X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBSSVBFTUQxNjBfQ1RYICpjKTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9j cnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yaXBlbWQv cm1kX2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTMuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMC9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMJMjAxMC0wMy0zMCAxMDozNDo0 MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC01OSw2ICs1OSwxMSBAQAotICNpbmNsdWRlIDxzdGRpby5o PgotICNpbmNsdWRlICJybWRfbG9jbC5oIgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSBjb25zdCBjaGFyIFJNRDE2MF92 ZXJzaW9uW109IlJJUEUtTUQxNjAiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLUBAIC02OSw3 ICs3NCw3IEBAIGNvbnN0IGNoYXIgUk1EMTYwX3ZlcnNpb25bXT0iUklQRS1NRDE2MCIKLSAgICAg IHZvaWQgcmlwZW1kMTYwX2Jsb2NrKFJJUEVNRDE2MF9DVFggKmMsIHVuc2lnbmVkIGxvbmcgKnAs c2l6ZV90IG51bSk7Ci0gIyAgZW5kaWYKLSAKLS1pbnQgUklQRU1EMTYwX0luaXQoUklQRU1EMTYw X0NUWCAqYykKLStGSVBTX05PTl9GSVBTX01EX0luaXQoUklQRU1EMTYwKQotIAl7Ci0gCW1lbXNl dCAoYywwLHNpemVvZigqYykpOwotIAljLT5BPVJJUEVNRDE2MF9BOwotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3Jz YS9yc2FfZWF5LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMJ MjAwOC0wOS0xNCAxNTo1MTo0NC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9yc2EvcnNhX2VheS5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1A QCAtMTE0LDYgKzExNCwxMCBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvcnNhLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rI2VuZGlmCi0gCi0gI2lmbmRlZiBSU0FfTlVMTAotIAotQEAgLTEzOCw3ICsxNDIs NyBAQCBzdGF0aWMgUlNBX01FVEhPRCByc2FfcGtjczFfZWF5X21ldGg9ewotIAlCTl9tb2RfZXhw X21vbnQsIC8qIFhYWCBwcm9iYWJseSB3ZSBzaG91bGQgbm90IHVzZSBNb250Z29tZXJ5IGlmICBl ID09IDMgKi8KLSAJUlNBX2VheV9pbml0LAotIAlSU0FfZWF5X2ZpbmlzaCwKLS0JMCwgLyogZmxh Z3MgKi8KLSsJUlNBX0ZMQUdfRklQU19NRVRIT0QsIC8qIGZsYWdzICovCi0gCU5VTEwsCi0gCTAs IC8qIHJzYV9zaWduICovCi0gCTAsIC8qIHJzYV92ZXJpZnkgKi8KLUBAIC0xNTAsNiArMTU0LDE2 IEBAIGNvbnN0IFJTQV9NRVRIT0QgKlJTQV9QS0NTMV9TU0xlYXkodm9pZCkKLSAJcmV0dXJuKCZy c2FfcGtjczFfZWF5X21ldGgpOwotIAl9Ci0gCi0rLyogVXNhZ2UgZXhhbXBsZTsKLSsgKiAgICBN T05UX0hFTFBFUihyc2EsIGJuX2N0eCwgcCwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BS SVZBVEUsIGdvdG8gZXJyKTsKLSsgKi8KLSsjZGVmaW5lIE1PTlRfSEVMUEVSKHJzYSwgY3R4LCBt LCBwcmVfY29uZCwgZXJyX2luc3RyKSBcCi0rCWlmKChwcmVfY29uZCkgJiYgKChyc2EpLT5fbWV0 aG9kX21vZF8jI20gPT0gTlVMTCkgJiYgXAotKwkJCSFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCYo KHJzYSktPl9tZXRob2RfbW9kXyMjbSksIFwKLSsJCQkJQ1JZUFRPX0xPQ0tfUlNBLCBcCi0rCQkJ CShyc2EpLT5tLCAoY3R4KSkpIFwKLSsJCWVycl9pbnN0cgotKwotIHN0YXRpYyBpbnQgUlNBX2Vh eV9wdWJsaWNfZW5jcnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwKLSAJ ICAgICB1bnNpZ25lZCBjaGFyICp0bywgUlNBICpyc2EsIGludCBwYWRkaW5nKQotIAl7Ci1AQCAt MTU4LDYgKzE3MiwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZs Ci0gCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoRklQU19z ZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJM SUNfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCWdvdG8gZXJyOwot KwkJCX0KLSsKLSsJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19N SU5fTU9EVUxVU19CSVRTKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNf RU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJ fQotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xf UlNBX01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0gCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJM SUNfRU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOwotQEAgLTIyMyw5ICsyNTQsNyBA QCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsCi0gCQlnb3RvIGVycjsK LSAJCX0KLSAKLS0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCi0tCQlp ZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xP Q0tfUlNBLCByc2EtPm4sIGN0eCkpCi0tCQkJZ290byBlcnI7Ci0rCU1PTlRfSEVMUEVSKHJzYSwg Y3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7Ci0g Ci0gCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLHJzYS0+ZSxyc2EtPm4sY3R4LAot IAkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290byBlcnI7Ci1AQCAtMzU1LDYgKzM4NCwyMyBAQCBz dGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGludCBmCi0gCWludCBsb2NhbF9ibGlu ZGluZyA9IDA7Ci0gCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7Ci0gCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0 X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5D UllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0K LSsKLSsJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9E VUxVU19CSVRTKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZ UFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJ CX0KLSsjZW5kaWYKLSsKLSAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVy cjsKLSAJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0gCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKLUBAIC00 MzIsOSArNDc4LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQgZgot IAkJZWxzZQotIAkJCWQ9IHJzYS0+ZDsKLSAKLS0JCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdf Q0FDSEVfUFVCTElDKQotLQkJCWlmKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRo b2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQotLQkJCQlnb3RvIGVycjsK LSsJCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVf UFVCTElDLCBnb3RvIGVycik7Ci0gCi0gCQlpZiAoIXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChyZXQs ZixkLHJzYS0+bixjdHgsCi0gCQkJCXJzYS0+X21ldGhvZF9tb2RfbikpIGdvdG8gZXJyOwotQEAg LTQ4OCw2ICs1MzIsMjMgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZGVjcnlwdChpbnQg ZgotIAlpbnQgbG9jYWxfYmxpbmRpbmcgPSAwOwotIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBO VUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewot KwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0Zf UlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJ CQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5T U0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKLSsJCQl7Ci0rCQkJUlNBZXJyKFJTQV9GX1JT QV9FQVlfUFJJVkFURV9ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJCXJl dHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmKChjdHggPSBCTl9DVFhfbmV3 KCkpID09IE5VTEwpIGdvdG8gZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsKLSAJZiAgID0gQk5f Q1RYX2dldChjdHgpOwotQEAgLTU1NSw5ICs2MTYsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJp dmF0ZV9kZWNyeXB0KGludCBmCi0gCQllbHNlCi0gCQkJZCA9IHJzYS0+ZDsKLSAKLS0JCWlmIChy c2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQotLQkJCWlmICghQk5fTU9OVF9DVFhf c2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwg Y3R4KSkKLS0JCQkJZ290byBlcnI7Ci0rCQlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5m bGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOwotIAkJaWYgKCFyc2EtPm1l dGgtPmJuX21vZF9leHAocmV0LGYsZCxyc2EtPm4sY3R4LAotIAkJCQlyc2EtPl9tZXRob2RfbW9k X24pKQotIAkJICBnb3RvIGVycjsKLUBAIC02MTcsNiArNjc2LDIzIEBAIHN0YXRpYyBpbnQgUlNB X2VheV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKLSAJdW5zaWduZWQgY2hhciAqYnVmPU5VTEw7Ci0g CUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19t b2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlG SVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNU X0ZBSUxFRCk7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJaWYgKEJOX251bV9iaXRzKHJz YS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCi0rCQkJewotKwkJCVJT QWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01B TEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChCTl9u dW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKLSAJCXsKLSAJ CVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19M QVJHRSk7Ci1AQCAtNjY3LDkgKzc0Myw3IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZGVj cnlwdChpbnQgZmwKLSAJCWdvdG8gZXJyOwotIAkJfQotIAotLQlpZiAocnNhLT5mbGFncyAmIFJT QV9GTEFHX0NBQ0hFX1BVQkxJQykKLS0JCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNh LT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKLS0JCQlnb3Rv IGVycjsKLSsJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19D QUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKLSAKLSAJaWYgKCFyc2EtPm1ldGgtPmJuX21vZF9leHAo cmV0LGYscnNhLT5lLHJzYS0+bixjdHgsCi0gCQlyc2EtPl9tZXRob2RfbW9kX24pKSBnb3RvIGVy cjsKLUBAIC03MTcsNiArNzkxLDcgQEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9leHAoQklHTlVN ICpyMCwgYwotIAlCSUdOVU0gKnIxLCptMSwqdnJmeTsKLSAJQklHTlVNIGxvY2FsX2RtcDEsbG9j YWxfZG1xMSxsb2NhbF9jLGxvY2FsX3IxOwotIAlCSUdOVU0gKmRtcDEsKmRtcTEsKmMsKnByMTsK LSsJaW50IGJuX2ZsYWdzOwotIAlpbnQgcmV0PTA7Ci0gCi0gCUJOX0NUWF9zdGFydChjdHgpOwot QEAgLTcyNCw0MSArNzk5LDMxIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9tb2RfZXhwKEJJR05VTSAq cjAsIGMKLSAJbTEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gCXZyZnkgPSBCTl9DVFhfZ2V0KGN0eCk7 Ci0gCi0tCXsKLS0JCUJJR05VTSBsb2NhbF9wLCBsb2NhbF9xOwotLQkJQklHTlVNICpwID0gTlVM TCwgKnEgPSBOVUxMOwotLQotLQkJLyogTWFrZSBzdXJlIEJOX21vZF9pbnZlcnNlIGluIE1vbnRn b21lcnkgaW50aWFsaXphdGlvbiB1c2VzIHRoZQotLQkJICogQk5fRkxHX0NPTlNUVElNRSBmbGFn ICh1bmxlc3MgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FIGlzIHNldCkKLS0JCSAqLwotLQkJaWYgKCEo cnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCi0tCQkJewotLQkJCUJOX2luaXQo JmxvY2FsX3ApOwotLQkJCXAgPSAmbG9jYWxfcDsKLS0JCQlCTl93aXRoX2ZsYWdzKHAsIHJzYS0+ cCwgQk5fRkxHX0NPTlNUVElNRSk7Ci0tCi0tCQkJQk5faW5pdCgmbG9jYWxfcSk7Ci0tCQkJcSA9 ICZsb2NhbF9xOwotLQkJCUJOX3dpdGhfZmxhZ3MocSwgcnNhLT5xLCBCTl9GTEdfQ09OU1RUSU1F KTsKLS0JCQl9Ci0tCQllbHNlCi0tCQkJewotLQkJCXAgPSByc2EtPnA7Ci0tCQkJcSA9IHJzYS0+ cTsKLS0JCQl9Ci0rCS8qIE1ha2Ugc3VyZSBtb2RfaW52ZXJzZSBpbiBtb250Z29tZXJleSBpbnRp YWxpemF0aW9uIHVzZSBjb3JyZWN0IAotKwkgKiBCTl9GTEdfQ09OU1RUSU1FIGZsYWcuCi0rCSAq LwotKwlibl9mbGFncyA9IHJzYS0+cC0+ZmxhZ3M7Ci0rCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0Ff RkxBR19OT19DT05TVFRJTUUpKQotKwkJewotKwkJcnNhLT5wLT5mbGFncyB8PSBCTl9GTEdfQ09O U1RUSU1FOwotKwkJfQotKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgcCwgcnNhLT5mbGFncyAmIFJT QV9GTEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJyKTsKLSsJLyogV2UgcmVzdG9yZSBibl9mbGFn cyBiYWNrICovCi0rCXJzYS0+cC0+ZmxhZ3MgPSBibl9mbGFnczsKLSAKLS0JCWlmIChyc2EtPmZs YWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSkKLS0JCQl7Ci0tCQkJaWYgKCFCTl9NT05UX0NU WF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX3AsIENSWVBUT19MT0NLX1JTQSwgcCwgY3R4 KSkKLS0JCQkJZ290byBlcnI7Ci0tCQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2Et Pl9tZXRob2RfbW9kX3EsIENSWVBUT19MT0NLX1JTQSwgcSwgY3R4KSkKLS0JCQkJZ290byBlcnI7 Ci0tCQkJfQotLQl9Ci0rICAgICAgICAvKiBNYWtlIHN1cmUgbW9kX2ludmVyc2UgaW4gbW9udGdv bWVyZXkgaW50aWFsaXphdGlvbiB1c2UgY29ycmVjdAotKyAgICAgICAgICogQk5fRkxHX0NPTlNU VElNRSBmbGFnLgotKyAgICAgICAgICovCi0rCWJuX2ZsYWdzID0gcnNhLT5xLT5mbGFnczsKLSsJ aWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCi0rCQl7Ci0rCQlyc2Et PnEtPmZsYWdzIHw9IEJOX0ZMR19DT05TVFRJTUU7Ci0rCQl9Ci0rCU1PTlRfSEVMUEVSKHJzYSwg Y3R4LCBxLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSwgZ290byBlcnIpOwot KwkvKiBXZSByZXN0b3JlIGJuX2ZsYWdzIGJhY2sgKi8KLSsJcnNhLT5xLT5mbGFncyA9IGJuX2Zs YWdzOwkKLSAKLS0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCi0tCQlp ZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xP Q0tfUlNBLCByc2EtPm4sIGN0eCkpCi0tCQkJZ290byBlcnI7Ci0rCU1PTlRfSEVMUEVSKHJzYSwg Y3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7Ci0g Ci0gCS8qIGNvbXB1dGUgSSBtb2QgcSAqLwotIAlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdf Tk9fQ09OU1RUSU1FKSkKLUBAIC04NzUsNiArOTQwLDkgQEAgZXJyOgotIAotIHN0YXRpYyBpbnQg UlNBX2VheV9pbml0KFJTQSAqcnNhKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBT X3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCXJzYS0+ZmxhZ3N8PVJTQV9GTEFHX0NBQ0hF X1BVQkxJQ3xSU0FfRkxBR19DQUNIRV9QUklWQVRFOwotIAlyZXR1cm4oMSk7Ci0gCX0KLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4w L2NyeXB0by9yc2EvcnNhX2Vyci5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9l cnIuYy5maXBzCTIwMDgtMTItMjkgMTc6MTE6NTYuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9lcnIuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAw MCArMDIwMAotQEAgLTExMSw4ICsxMTEsMTIgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ff c3RyX2Z1bmN0c1tdPQotIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFJJTlRfRlApLAkiUlNBX3ByaW50 X2ZwIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9QUklWX0RFQ09ERSksCSJSU0FfUFJJVl9ERUNP REUifSwKLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BSSVZfRU5DT0RFKSwJIlJTQV9QUklWX0VOQ09E RSJ9LAotK3tFUlJfRlVOQyhSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUKSwJIlJTQV9wcml2YXRl X2VuY3J5cHQifSwKLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQl9ERUNPREUpLAkiUlNBX1BVQl9E RUNPREUifSwKLSt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUKSwJIlJTQV9wdWJs aWNfZGVjcnlwdCJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNB X3NldHVwX2JsaW5kaW5nIn0sCi0re0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRI T0QpLAkiUlNBX3NldF9kZWZhdWx0X21ldGhvZCJ9LAotK3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VU X01FVEhPRCksCSJSU0Ffc2V0X21ldGhvZCJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTiks CSJSU0Ffc2lnbiJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklO RyksCSJSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORyJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0Ff VkVSSUZZKSwJIlJTQV92ZXJpZnkifSwKLUBAIC0xNTUsMTAgKzE1OSwxMiBAQCBzdGF0aWMgRVJS X1NUUklOR19EQVRBIFJTQV9zdHJfcmVhc29uc1tdCi0ge0VSUl9SRUFTT04oUlNBX1JfS0VZX1NJ WkVfVE9PX1NNQUxMKSAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAotIHtFUlJfUkVBU09OKFJT QV9SX0xBU1RfT0NURVRfSU5WQUxJRCkgICAgLCJsYXN0IG9jdGV0IGludmFsaWQifSwKLSB7RVJS X1JFQVNPTihSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSkgICAgICwibW9kdWx1cyB0b28gbGFyZ2Ui fSwKLSt7RVJSX1JFQVNPTihSU0FfUl9OT05fRklQU19NRVRIT0QpICAgICAgICwibm9uIGZpcHMg bWV0aG9kIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfTk9fUFVCTElDX0VYUE9ORU5UKSAgICAsIm5v IHB1YmxpYyBleHBvbmVudCJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX05VTExfQkVGT1JFX0JMT0NL X01JU1NJTkcpLCJudWxsIGJlZm9yZSBibG9jayBtaXNzaW5nIn0sCi0ge0VSUl9SRUFTT04oUlNB X1JfTl9ET0VTX05PVF9FUVVBTF9QX1EpICAsIm4gZG9lcyBub3QgZXF1YWwgcCBxIn0sCi0ge0VS Ul9SRUFTT04oUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUikgICAsIm9hZXAgZGVjb2RpbmcgZXJy b3IifSwKLSt7RVJSX1JFQVNPTihSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19N T0RFKSwib3BlcmF0aW9uIG5vdCBhbGxvd2VkIGluIGZpcHMgbW9kZSJ9LAotIHtFUlJfUkVBU09O KFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpLCJvcGVyYXRp b24gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBrZXl0eXBlIn0sCi0ge0VSUl9SRUFTT04oUlNBX1Jf UEFERElOR19DSEVDS19GQUlMRUQpICAsInBhZGRpbmcgY2hlY2sgZmFpbGVkIn0sCi0ge0VSUl9S RUFTT04oUlNBX1JfUF9OT1RfUFJJTUUpICAgICAgICAgICAsInAgbm90IHByaW1lIn0sCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAu MC9jcnlwdG8vcnNhL3JzYV9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2Ff Z2VuLmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjI3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfZ2VuLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAw MDAgKzAyMDAKLUBAIC02Nyw2ICs2Nyw4MiBAQAotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc19s b2NsLmgiCi0rCi0rc3RhdGljIGludCBmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsKLSsKLSt2 b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKHZvaWQpCi0rCXsKLSsJZmlwc19yc2FfcGFpcndp c2VfZmFpbCA9IDE7Ci0rCX0KLSsKLStpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpCi0rCXsK LSsJY29uc3QgdW5zaWduZWQgY2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7 Ci0rCXVuc2lnbmVkIGNoYXIgKmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKLSsJaW50IGxl biwgcmV0ID0gMDsKLSsJRVZQX1BLRVkgKnBrOwotKwotKwlpZiAoKHBrPUVWUF9QS0VZX25ldygp KSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVWUF9QS0VZX3NldDFfUlNBKHBrLCByc2Ep OwotKwotKwkvKiBQZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0ICov Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKwkJCU5VTEws IDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCi0rCQl8fCAh Zmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKwkJCU5VTEwsIDAsIEVWUF9z aGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwgTlVMTCkKLSsJCXx8ICFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9QU1MsIE5VTEwpKQotKwkJZ290byBlcnI7Ci0rCS8qIE5vdyBwZXJm b3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCi0rCWN0YnVm ID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7Ci0rCWlmICghY3RidWYpCi0rCQlnb3Rv IGVycjsKLSsKLSsJbGVuID0gUlNBX3B1YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwgdGJz LCBjdGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7Ci0rCWlmIChsZW4gPD0gMCkKLSsJCWdv dG8gZXJyOwotKwkvKiBDaGVjayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0ICov Ci0rCWlmICgobGVuID09IChzaXplb2YodGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3RidWYs IGxlbikpCi0rCQlnb3RvIGVycjsKLSsJcHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShy c2EpKTsKLSsKLSsJaWYgKCFwdGJ1ZikKLSsJCWdvdG8gZXJyOwotKwlsZW4gPSBSU0FfcHJpdmF0 ZV9kZWNyeXB0KGxlbiwgY3RidWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKLSsJ aWYgKGxlbiAhPSAoc2l6ZW9mKHRicykgLSAxKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAobWVtY21w KHB0YnVmLCB0YnMsIGxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJaWYg KCFwdGJ1ZikKLSsJCWdvdG8gZXJyOwotKwkKLSsJZXJyOgotKwlpZiAocmV0ID09IDApCi0rCQl7 Ci0rCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NI RUNLX1JTQSxGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOwotKwkJfQotKwotKwlpZiAoY3Ri dWYpCi0rCQlPUEVOU1NMX2ZyZWUoY3RidWYpOwotKwlpZiAocHRidWYpCi0rCQlPUEVOU1NMX2Zy ZWUocHRidWYpOwotKwlpZiAocGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsKLSsJcmV0dXJu IHJldDsKLSsJfQotKyNlbmRpZgotIAotIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJT QSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOwotIAotQEAg LTkwLDYgKzE2NiwyMyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwg Ci0gCWludCBiaXRzcCxiaXRzcSxvaz0gLTEsbj0wOwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIAl7Ci0rCQkgICAgRklQU2VycihGSVBTX0ZfUlNB X0JVSUxUSU5fS0VZR0VOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICAJcmV0 dXJuIDA7Ci0rCSAgICAJfQotKwotKwkJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9N T0RVTFVTX0JJVFMpCi0rCQkgICAgewotKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElO X0tFWUdFTixGSVBTX1JfS0VZX1RPT19TSE9SVCk7Ci0rCQkgICAgcmV0dXJuIDA7Ci0rCQkJfQot KwkJfQotKyNlbmRpZgotKwotIAljdHg9Qk5fQ1RYX25ldygpOwotIAlpZiAoY3R4ID09IE5VTEwp IGdvdG8gZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsKLUBAIC0yMDEsNiArMjk0LDE3IEBAIHN0 YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCAKLSAJCXAgPSByc2EtPnA7Ci0g CWlmICghQk5fbW9kX2ludmVyc2UocnNhLT5pcW1wLHJzYS0+cSxwLGN0eCkpIGdvdG8gZXJyOwot IAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYg KGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwpCi0rCQkJQk5fYWRkX3dvcmQocnNhLT5uLCAxKTsKLSsK LSsJCWlmKCFmaXBzX2NoZWNrX3JzYShyc2EpKQotKwkJICAgIGdvdG8gZXJyOwotKwkJfQotKyNl bmRpZgotKwotIAlvaz0xOwotIGVycjoKLSAJaWYgKG9rID09IC0xKQotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC9jcnlwdG8vcnNhL3JzYS5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3Jz YS5oCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYS5oLmZpcHMJMjAxMC0wMy0zMCAx MDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNh LmgJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC03NCw2ICs3NCwyMSBA QAotICNlcnJvciBSU0EgaXMgZGlzYWJsZWQuCi0gI2VuZGlmCi0gCi0rLyogSWYgdGhpcyBmbGFn IGlzIHNldCB0aGUgUlNBIG1ldGhvZCBpcyBGSVBTIGNvbXBsaWFudCBhbmQgY2FuIGJlIHVzZWQK LSsgKiBpbiBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1l dGhvZC4gSWYgYW4KLSsgKiBhcHBsaWNhdGlvbiBzZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3duIG1l dGhvZHMgaXQgaXMgaXRzIHJlcG9zaWJpbGl0eQotKyAqIHRvIGVuc3VyZSB0aGUgcmVzdWx0IGlz IGNvbXBsaWFudC4KLSsgKi8KLSsKLSsjZGVmaW5lIFJTQV9GTEFHX0ZJUFNfTUVUSE9ECQkJMHgw NDAwCi0rCi0rLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBk aXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCi0rICogcGVybWl0dGVkIGl0IGlzIHRoZW4gdGhlIGFw cGxpY2F0aW9ucyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUKLSsgKiB1c2FnZSBp cyBjb21wbGlhbnQuCi0rICovCi0rCi0rI2RlZmluZSBSU0FfRkxBR19OT05fRklQU19BTExPVwkJ CTB4MDQwMAotKwotICNpZmRlZiAgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKLSAjZW5kaWYK LUBAIC0xNjQsNiArMTc5LDggQEAgc3RydWN0IHJzYV9zdAotICMgZGVmaW5lIE9QRU5TU0xfUlNB X01BWF9NT0RVTFVTX0JJVFMJMTYzODQKLSAjZW5kaWYKLSAKLSsjZGVmaW5lIE9QRU5TU0xfUlNB X0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0rCi0gI2lmbmRlZiBPUEVOU1NMX1JTQV9TTUFM TF9NT0RVTFVTX0JJVFMKLSAjIGRlZmluZSBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMJ MzA3MgotICNlbmRpZgotQEAgLTI2Nyw2ICsyODQsMTEgQEAgUlNBICoJUlNBX2dlbmVyYXRlX2tl eShpbnQgYml0cywgdW5zaWduZQotIAotIC8qIE5ldyB2ZXJzaW9uICovCi0gaW50CVJTQV9nZW5l cmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7 Ci0raW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpw MiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3Qg QklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklHTlVNICpYcTEsIGNv bnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAotKwkJCWNvbnN0IEJJR05VTSAqZSwg Qk5fR0VOQ0IgKmNiKTsKLStpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBp bnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotIAotIGludAlSU0FfY2hl Y2tfa2V5KGNvbnN0IFJTQSAqKTsKLSAJLyogbmV4dCA0IHJldHVybiAtMSBvbiBlcnJvciAqLwot QEAgLTQzOCw4ICs0NjAsMTIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAj ZGVmaW5lIFJTQV9GX1JTQV9QUklOVF9GUAkJCQkgMTE2Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFJJ Vl9ERUNPREUJCQkJIDEzNwotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfRU5DT0RFCQkJCSAxMzgK LSsjZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQJCQkgMTQ4Ci0gI2RlZmluZSBSU0Ff Rl9SU0FfUFVCX0RFQ09ERQkJCQkgMTM5Ci0rI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZ UFQJCQkgMTQ5Ci0gI2RlZmluZSBSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcJCQkgMTM2Ci0rI2Rl ZmluZSBSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9ECQkJIDE1MAotKyNkZWZpbmUgUlNBX0Zf UlNBX1NFVF9NRVRIT0QJCQkJIDE1MQotICNkZWZpbmUgUlNBX0ZfUlNBX1NJR04JCQkJCSAxMTcK LSAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HCQkgMTE4Ci0gI2RlZmlu ZSBSU0FfRl9SU0FfVkVSSUZZCQkJCSAxMTkKLUBAIC00NzksMTAgKzUwNSwxMiBAQCB2b2lkIEVS Ul9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgUlNBX1JfS0VZX1NJWkVfVE9PX1NN QUxMCQkJIDEyMAotICNkZWZpbmUgUlNBX1JfTEFTVF9PQ1RFVF9JTlZBTElECQkJIDEzNAotICNk ZWZpbmUgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwNQotKyNkZWZpbmUgUlNBX1JfTk9O X0ZJUFNfTUVUSE9ECQkJCSAxNDkKLSAjZGVmaW5lIFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVAkJ CSAxNDAKLSAjZGVmaW5lIFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcJCQkgMTEzCi0g I2RlZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUQkJCSAxMjcKLSAjZGVmaW5lIFJTQV9S X09BRVBfREVDT0RJTkdfRVJST1IJCQkgMTIxCi0rI2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9U X0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTAKLSAjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1Rf U1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0OAotICNkZWZpbmUgUlNBX1JfUEFERElOR19D SEVDS19GQUlMRUQJCQkgMTE0Ci0gI2RlZmluZSBSU0FfUl9QX05PVF9QUklNRQkJCQkgMTI4Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMgb3BlbnNzbC0x LjAuMC9jcnlwdG8vcnNhL3JzYV9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9y c2FfbGliLmMuZmlwcwkyMDA5LTEyLTA5IDE0OjM4OjIwLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfbGliLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAw MDAwMDAgKzAyMDAKLUBAIC04MCw2ICs4MCwxMyBAQCBSU0EgKlJTQV9uZXcodm9pZCkKLSAKLSB2 b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKLSAJewot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3Mg JiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCi0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9E RUZBVUxUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybjsKLSsJCX0K LSsjZW5kaWYKLSAJZGVmYXVsdF9SU0FfbWV0aCA9IG1ldGg7Ci0gCX0KLSAKLUBAIC0xMTEsNiAr MTE4LDEzIEBAIGludCBSU0Ffc2V0X21ldGhvZChSU0EgKnJzYSwgY29uc3QgUlNBX00KLSAJLyog TkI6IFRoZSBjYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHNldHRpbmcgYSBtZXRob2QsIHNvIGl0J3Mg bm90IHVwIHRvIHVzCi0gCSAqIHRvIGRlYWwgd2l0aCB3aGljaCBFTkdJTkUgaXQgY29tZXMgZnJv bS4gKi8KLSAJY29uc3QgUlNBX01FVEhPRCAqbXRtcDsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r CWlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0Qp KQotKwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19N RVRIT0QpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gCW10bXAgPSByc2EtPm1ldGg7 Ci0gCWlmIChtdG1wLT5maW5pc2gpIG10bXAtPmZpbmlzaChyc2EpOwotICNpZm5kZWYgT1BFTlNT TF9OT19FTkdJTkUKLUBAIC0xNjMsNiArMTc3LDE4IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5H SU5FICplbmdpbmUpCi0gCQkJfQotIAkJfQotICNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJaWYgKEZJUFNfbW9kZSgpICYmICEocmV0LT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNf TUVUSE9EKSkKLSsJCXsKLSsJCVJTQWVycihSU0FfRl9SU0FfTkVXX01FVEhPRCwgUlNBX1JfTk9O X0ZJUFNfTUVUSE9EKTsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0rCQlpZiAocmV0LT5l bmdpbmUpCi0rCQkJRU5HSU5FX2ZpbmlzaChyZXQtPmVuZ2luZSk7Ci0rI2VuZGlmCi0rCQlPUEVO U1NMX2ZyZWUocmV0KTsKLSsJCXJldHVybiBOVUxMOwotKwkJfQotKyNlbmRpZgotIAotIAlyZXQt PnBhZD0wOwotIAlyZXQtPnZlcnNpb249MDsKLUBAIC0yOTQsNiArMzIwLDEzIEBAIGludCBSU0Ff cHVibGljX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHUKLSBpbnQgUlNBX3ByaXZhdGVfZW5jcnlw dChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8s Ci0gCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19B TExPVykpCi0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1Jf T1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0K LSsjZW5kaWYKLSAJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGZsZW4sIGZyb20sIHRv LCByc2EsIHBhZGRpbmcpKTsKLSAJfQotIAotQEAgLTMwNiw2ICszMzksMTMgQEAgaW50IFJTQV9w cml2YXRlX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IAotIGludCBSU0FfcHVibGljX2RlY3J5cHQo aW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAot IAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpKQotKwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfT1BF UkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsj ZW5kaWYKLSAJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoZmxlbiwgZnJvbSwgdG8sIHJz YSwgcGFkZGluZykpOwotIAl9Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2Ev cnNhX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCi0tLS0g b3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDA3LTA0LTI0IDAzOjA1 OjQyLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2Ffc2ln bi5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMTMwLDcgKzEzMCw4 IEBAIGludCBSU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKLSAJCWkyZF9YNTA5 X1NJRygmc2lnLCZwKTsKLSAJCXM9dG1wczsKLSAJfQotLQlpPVJTQV9wcml2YXRlX2VuY3J5cHQo aSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOwotKwkvKiBOQjogY2FsbCB1bmRlcmx5 aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCi0rCWkgPSByc2Et Pm1ldGgtPnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGkscyxzaWdyZXQs cnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7Ci0gCWlmIChpIDw9IDApCi0gCQlyZXQ9MDsKLSAJ ZWxzZQotQEAgLTE2MSw4ICsxNjIsOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBj b25zdCB1bnNpCi0gCi0gCWlmKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEpICYmIHJtKQotIAkJewot LQkJaSA9IFJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKLS0JCQkJCXNpZ2J1ZixybSxy c2EsUlNBX1BLQ1MxX1BBRERJTkcpOwotKwkJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyBy c2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLAotKwkJCQkJc2lnYnVmLHJtLHJzYSxS U0FfUEtDUzFfUEFERElORykgOiAwOwotIAkJaWYgKGkgPD0gMCkKLSAJCQlyZXR1cm4gMDsKLSAJ CSpwcm1fbGVuID0gaTsKLUBAIC0xNzksNyArMTgwLDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGlu dCBkdHlwZSwgY29uc3QgdW5zaQotIAkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxSU0Ff Ul9JTlZBTElEX01FU1NBR0VfTEVOR1RIKTsKLSAJCQlnb3RvIGVycjsKLSAJfQotLQlpPVJTQV9w dWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcp OwotKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBT IGJsb2NraW5nICovCi0rCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5y c2FfcHViX2RlYygoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDog MDsKLSAKLSAJaWYgKGkgPD0gMCkgZ290byBlcnI7Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4w L2NyeXB0by9zZWVkL3NlZWQuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NlZWQvc2VlZC5j Ci0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2VlZC9zZWVkLmMuZmlwcwkyMDA4LTEyLTE2IDA4 OjQxOjIxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NlZWQvc2Vl ZC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMzQsNiArMzQsOSBA QAotIAotICNpbmNsdWRlIDxvcGVuc3NsL3NlZWQuaD4KLSAjaW5jbHVkZSAic2VlZF9sb2NsLmgi Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5k aWYKLSAKLSBzdGF0aWMgY29uc3Qgc2VlZF93b3JkIFNTWzRdWzI1Nl0gPSB7CXsKLSAJMHgyOTg5 YTFhOCwgMHgwNTg1ODE4NCwgMHgxNmM2ZDJkNCwgMHgxM2MzZDNkMCwgMHgxNDQ0NTA1NCwgMHgx ZDBkMTExYywgMHgyYzhjYTBhYywgMHgyNTA1MjEyNCwKLUBAIC0xOTMsNyArMTk2LDE4IEBAIHN0 YXRpYyBjb25zdCBzZWVkX3dvcmQgS0NbXSA9IHsKLSAJS0M4LAlLQzksCUtDMTAsCUtDMTEsCUtD MTIsCUtDMTMsCUtDMTQsCUtDMTUJfTsKLSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0gdm9pZCBTRUVEX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciByYXdrZXlbU0VFRF9LRVlf TEVOR1RIXSwgU0VFRF9LRVlfU0NIRURVTEUgKmtzKQotKyAgICAgICAgewotKyAgICAgICAgaWYg KEZJUFNfbW9kZSgpKQotKyAgICAgICAgICAgICAgICBGSVBTX0JBRF9BQk9SVChTRUVEKQotKyAg ICAgICAgcHJpdmF0ZV9TRUVEX3NldF9rZXkocmF3a2V5LCBrcyk7Ci0rICAgICAgICB9Ci0rCi0r dm9pZCBwcml2YXRlX1NFRURfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyIHJhd2tleVtTRUVE X0tFWV9MRU5HVEhdLCBTRUVEX0tFWV9TQ0hFRFVMRSAqa3MpCi0rI2Vsc2UKLSt2b2lkIFNFRURf c2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyIHJhd2tleVtTRUVEX0tFWV9MRU5HVEhdLCBTRUVE X0tFWV9TQ0hFRFVMRSAqa3MpCi0rI2VuZGlmCi0gewotIAlzZWVkX3dvcmQgeDEsIHgyLCB4Mywg eDQ7Ci0gCXNlZWRfd29yZCB0MCwgdDE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9z ZWVkL3NlZWQuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NlZWQvc2VlZC5oCi0tLS0gb3Bl bnNzbC0xLjAuMC9jcnlwdG8vc2VlZC9zZWVkLmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NlZWQvc2VlZC5oCTIwMTAt MDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMTE3LDYgKzExNyw5IEBAIHR5cGVk ZWYgc3RydWN0IHNlZWRfa2V5X3N0IHsKLSB9IFNFRURfS0VZX1NDSEVEVUxFOwotIAotIAotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSt2b2lkIHByaXZhdGVfU0VFRF9zZXRfa2V5KGNvbnN0IHVuc2ln bmVkIGNoYXIgcmF3a2V5W1NFRURfS0VZX0xFTkdUSF0sIFNFRURfS0VZX1NDSEVEVUxFICprcyk7 Ci0rI2VuZGlmCi0gdm9pZCBTRUVEX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciByYXdrZXlb U0VFRF9LRVlfTEVOR1RIXSwgU0VFRF9LRVlfU0NIRURVTEUgKmtzKTsKLSAKLSB2b2lkIFNFRURf ZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyIHNbU0VFRF9CTE9DS19TSVpFXSwgdW5zaWduZWQg Y2hhciBkW1NFRURfQkxPQ0tfU0laRV0sIGNvbnN0IFNFRURfS0VZX1NDSEVEVUxFICprcyk7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhX2Rnc3QuYy5maXBzIG9wZW5zc2wt MS4wLjAvY3J5cHRvL3NoYS9zaGFfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hh L3NoYV9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGFfZGdzdC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEu MDAwMDAwMDAwICswMjAwCi1AQCAtNTcsNiArNTcsMTIgQEAKLSAgKi8KLSAKLSAjaW5jbHVkZSA8 b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0r Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hB MCkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpCi0gCi0gI3VuZGVmICBTSEFfMQotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYS5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlw dG8vc2hhL3NoYS5oCi0tLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYS5oLmZpcHMJMjAx MC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9zaGEvc2hhLmgJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMDYs NiArMTA2LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBc3RhdGVfc3QKLSAJfSBTSEFfQ1RYOwotIAot ICNpZm5kZWYgT1BFTlNTTF9OT19TSEEwCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBwcml2 YXRlX1NIQV9Jbml0KFNIQV9DVFggKmMpOwotKyNlbmRpZgotIGludCBTSEFfSW5pdChTSEFfQ1RY ICpjKTsKLSBpbnQgU0hBX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXpl X3QgbGVuKTsKLSBpbnQgU0hBX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMgb3BlbnNz bC0xLjAuMC9jcnlwdG8vc2hhL3NoYV9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9z aGEvc2hhX2xvY2wuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYV9sb2NsLmgJMjAxMC0wMy0zMCAxMDozNDo0 MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMjIsOCArMTIyLDE1IEBAIHZvaWQgc2hhMV9ibG9ja19k YXRhX29yZGVyIChTSEFfQ1RYICpjLCAKLSAjZGVmaW5lIElOSVRfREFUQV9oMyAweDEwMzI1NDc2 VUwKLSAjZGVmaW5lIElOSVRfREFUQV9oNCAweGMzZDJlMWYwVUwKLSAKLSsjaWYgZGVmaW5lZChT SEFfMCkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0rRklQU19OT05fRklQU19NRF9Jbml0KFNI QSkKLSsjZWxzZQotIGludCBIQVNIX0lOSVQgKFNIQV9DVFggKmMpCi0rI2VuZGlmCi0gCXsKLSsj aWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0rCUZJUFNfc2VsZnRl c3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPmgw PUlOSVRfREFUQV9oMDsKLSAJYy0+aDE9SU5JVF9EQVRBX2gxOwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEv c2hhMWRnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGExZGdzdC5jLmZpcHMJ MjAwNy0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9zaGEvc2hhMWRnc3QuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAot QEAgLTYzLDYgKzYzLDEwIEBACi0gI2RlZmluZSBTSEFfMQotIAotICNpbmNsdWRlIDxvcGVuc3Ns L29wZW5zc2x2Lmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjZW5kaWYKLSsKLSAKLSBjb25zdCBjaGFyIFNIQTFfdmVyc2lvbltdPSJTSEExIiBP UEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9z aGEvc2hhMjU2LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhMjU2LmMKLS0tLSBv cGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0 LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGEyNTYuYwky MDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTEyLDEyICsxMiwxOSBAQAot IAotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5o PgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2Vu ZGlmCi0rCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSAKLSBjb25zdCBjaGFyIFNI QTI1Nl92ZXJzaW9uW109IlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSBpbnQg U0hBMjI0X0luaXQgKFNIQTI1Nl9DVFggKmMpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r CUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpj KSk7Ci0gCWMtPmhbMF09MHhjMTA1OWVkOFVMOwljLT5oWzFdPTB4MzY3Y2Q1MDdVTDsKLSAJYy0+ aFsyXT0weDMwNzBkZDE3VUw7CWMtPmhbM109MHhmNzBlNTkzOVVMOwotQEAgLTI5LDYgKzM2LDkg QEAgaW50IFNIQTIyNF9Jbml0IChTSEEyNTZfQ1RYICpjKQotIAotIGludCBTSEEyNTZfSW5pdCAo U0hBMjU2X0NUWCAqYykKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVz dF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+aFsw XT0weDZhMDllNjY3VUw7CWMtPmhbMV09MHhiYjY3YWU4NVVMOwotIAljLT5oWzJdPTB4M2M2ZWYz NzJVTDsJYy0+aFszXT0weGE1NGZmNTNhVUw7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9zaGEvc2hhNTEyLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhNTEyLmMKLS0t LSBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDA5LTEyLTMwIDEyOjUz OjMzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGE1MTIu YwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTUsNiArNSwxMCBAQAot ICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0gICovCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4K LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRp ZgotKwotICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9O T19TSEE1MTIpCi0gLyoKLSAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUy4KLUBAIC02MSw2ICs2NSw5 IEBAIGNvbnN0IGNoYXIgU0hBNTEyX3ZlcnNpb25bXT0iU0hBLTUxMiIgT1AKLSAKLSBpbnQgU0hB Mzg0X0luaXQgKFNIQTUxMl9DVFggKmMpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJ UFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAjaWYgZGVmaW5lZChTSEE1MTJfQVNNKSAm JiAoZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSkKLSAJLyogbWFpbnRhaW4gZHdv cmQgb3JkZXIgcmVxdWlyZWQgYnkgYXNzZW1ibGVyIG1vZHVsZSAqLwotIAl1bnNpZ25lZCBpbnQg KmggPSAodW5zaWduZWQgaW50ICopYy0+aDsKLUBAIC05MCw2ICs5Nyw5IEBAIGludCBTSEEzODRf SW5pdCAoU0hBNTEyX0NUWCAqYykKLSAKLSBpbnQgU0hBNTEyX0luaXQgKFNIQTUxMl9DVFggKmMp Ci0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsj ZW5kaWYKLSAjaWYgZGVmaW5lZChTSEE1MTJfQVNNKSAmJiAoZGVmaW5lZChfX2FybV9fKSB8fCBk ZWZpbmVkKF9fYXJtKSkKLSAJLyogbWFpbnRhaW4gZHdvcmQgb3JkZXIgcmVxdWlyZWQgYnkgYXNz ZW1ibGVyIG1vZHVsZSAqLwotIAl1bnNpZ25lZCBpbnQgKmggPSAodW5zaWduZWQgaW50ICopYy0+ aDsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3docmxwb29sL3docmxwb29sLmguZmlw cyBvcGVuc3NsLTEuMC4wL2NyeXB0by93aHJscG9vbC93aHJscG9vbC5oCi0tLS0gb3BlbnNzbC0x LjAuMC9jcnlwdG8vd2hybHBvb2wvd2hybHBvb2wuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUu MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vd2hybHBvb2wvd2hybHBv b2wuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTI0LDYgKzI0LDkg QEAgdHlwZWRlZiBzdHJ1Y3QJewotIAl9IFdISVJMUE9PTF9DVFg7Ci0gCi0gI2lmbmRlZiBPUEVO U1NMX05PX1dISVJMUE9PTAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9XSElS TFBPT0xfSW5pdChXSElSTFBPT0xfQ1RYICpjKTsKLSsjZW5kaWYKLSBpbnQgV0hJUkxQT09MX0lu aXQJKFdISVJMUE9PTF9DVFggKmMpOwotIGludCBXSElSTFBPT0xfVXBkYXRlCShXSElSTFBPT0xf Q1RYICpjLGNvbnN0IHZvaWQgKmlucCxzaXplX3QgYnl0ZXMpOwotIHZvaWQgV0hJUkxQT09MX0Jp dFVwZGF0ZShXSElSTFBPT0xfQ1RYICpjLGNvbnN0IHZvaWQgKmlucCxzaXplX3QgYml0cyk7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMuZmlwcyBvcGVu c3NsLTEuMC4wL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4wL2Ny eXB0by93aHJscG9vbC93cF9kZ3N0LmMuZmlwcwkyMDA4LTEyLTI5IDEzOjM1OjQ5LjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYwkyMDEw LTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTUzLDggKzUzLDEyIEBACi0gCi0g I2luY2x1ZGUgIndwX2xvY2wuaCIKLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjZW5kaWYKLSAKLS1pbnQgV0hJUkxQT09MX0luaXQJKFdISVJMUE9PTF9DVFggKmMp Ci0rRklQU19OT05fRklQU19NRF9Jbml0KFdISVJMUE9PTCkKLSAJewotIAltZW1zZXQgKGMsMCxz aXplb2YoKmMpKTsKLSAJcmV0dXJuKDEpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9NYWtlZmls ZS5vcmcuZmlwcyBvcGVuc3NsLTEuMC4wL01ha2VmaWxlLm9yZwotLS0tIG9wZW5zc2wtMS4wLjAv TWFrZWZpbGUub3JnLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4wL01ha2VmaWxlLm9yZwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAw MCArMDIwMAotQEAgLTExMCw2ICsxMTAsOSBAQCBMSUJLUkI1PQotIFpMSUJfSU5DTFVERT0KLSBM SUJaTElCPQotIAotKyMgTm9uLWVtcHR5IGlmIEZJUFMgZW5hYmxlZAotK0ZJUFM9Ci0rCi0gRElS Uz0gICBjcnlwdG8gc3NsIGVuZ2luZXMgYXBwcyB0ZXN0IHRvb2xzCi0gRU5HRElSUz0gY2Nnb3N0 Ci0gU0hMSUJESVJTPSBjcnlwdG8gc3NsCi1AQCAtMTIyLDcgKzEyNSw3IEBAIFNESVJTPSAgXAot IAlibiBlYyByc2EgZHNhIGVjZHNhIGRoIGVjZGggZHNvIGVuZ2luZSBcCi0gCWJ1ZmZlciBiaW8g c3RhY2sgbGhhc2ggcmFuZCBlcnIgXAotIAlldnAgYXNuMSBwZW0geDUwOSB4NTA5djMgY29uZiB0 eHRfZGIgcGtjczcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1IFwKLS0JY21zIHBxdWV1ZSB0cyBq cGFrZSBzdG9yZQotKwljbXMgcHF1ZXVlIHRzIGpwYWtlIHN0b3JlIGZpcHMKLSAjIGtlZXAgaW4g bWluZCB0aGF0IHRoZSBhYm92ZSBsaXN0IGlzIGFkanVzdGVkIGJ5IC4vQ29uZmlndXJlCi0gIyBh Y2NvcmRpbmcgdG8gbm8teHh4IGFyZ3VtZW50cy4uLgotIAotQEAgLTIwNiw2ICsyMDksNyBAQCBC VUlMREVOVj0JUExBVEZPUk09JyQoUExBVEZPUk0pJyBQUk9DRVNTCi0gCQlSTUQxNjBfQVNNX09C Sj0nJChSTUQxNjBfQVNNX09CSiknCQlcCi0gCQlXUF9BU01fT0JKPSckKFdQX0FTTV9PQkopJwkJ CVwKLSAJCVBFUkxBU01fU0NIRU1FPSckKFBFUkxBU01fU0NIRU1FKScJCVwKLSsJCUZJUFM9IiQk e0ZJUFM6LSQoRklQUyl9IglcCi0gCQlUSElTPSQke1RISVM6LSRAfSBNQUtFRklMRT1NYWtlZmls ZSBNQUtFT1ZFUlJJREVTPQotICMgTUFLRU9WRVJSSURFUz0gZWZmZWN0aXZlbHkgImVxdWFsaXpl cyIgR05VLWlzaCBhbmQgU3lzVi1pc2ggbWFrZSBmbGF2b3JzLAotICMgd2hpY2ggaW4gdHVybiBl bGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0bWVudCB3aXRoIC1lLgotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC9zc2wvc3NsX2NpcGguYy5maXBzIG9wZW5zc2wtMS4wLjAvc3Ns L3NzbF9jaXBoLmMKLS0tLSBvcGVuc3NsLTEuMC4wL3NzbC9zc2xfY2lwaC5jLmZpcHMJMjAwOS0w OS0xMyAwMToxODowOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL3NzbC9zc2xf Y2lwaC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtNzI3LDYgKzcy Nyw5IEBAIHN0YXRpYyB2b2lkIHNzbF9jaXBoZXJfY29sbGVjdF9jaXBoZXJzKGMKLSAJCSAgICAh KGMtPmFsZ29yaXRobV9hdXRoICYgZGlzYWJsZWRfYXV0aCkgJiYKLSAJCSAgICAhKGMtPmFsZ29y aXRobV9lbmMgJiBkaXNhYmxlZF9lbmMpICYmCi0gCQkgICAgIShjLT5hbGdvcml0aG1fbWFjICYg ZGlzYWJsZWRfbWFjKSAmJgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQkoIUZJUFNfbW9kZSgp IHx8IChjLT5hbGdvX3N0cmVuZ3RoICYgU1NMX0ZJUFMpKSAmJgotKyNlbmRpZgotIAkJICAgICEo Yy0+YWxnb3JpdGhtX3NzbCAmIGRpc2FibGVkX3NzbCkpCi0gCQkJewotIAkJCWNvX2xpc3RbY29f bGlzdF9udW1dLmNpcGhlciA9IGM7Ci1AQCAtMTQyMyw3ICsxNDI2LDExIEBAIFNUQUNLX09GKFNT TF9DSVBIRVIpICpzc2xfY3JlYXRlX2NpcGhlcl8KLSAJICovCi0gCWZvciAoY3VyciA9IGhlYWQ7 IGN1cnIgIT0gTlVMTDsgY3VyciA9IGN1cnItPm5leHQpCi0gCQl7Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwkJaWYgKGN1cnItPmFjdGl2ZSAmJiAoIUZJUFNfbW9kZSgpIHx8IGN1cnItPmNpcGhl ci0+YWxnb19zdHJlbmd0aCAmIFNTTF9GSVBTKSkKLSsjZWxzZQotIAkJaWYgKGN1cnItPmFjdGl2 ZSkKLSsjZW5kaWYKLSAJCQl7Ci0gCQkJc2tfU1NMX0NJUEhFUl9wdXNoKGNpcGhlcnN0YWNrLCBj dXJyLT5jaXBoZXIpOwotICNpZmRlZiBDSVBIRVJfREVCVUcKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjAvc3NsL3NzbF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjAvc3NsL3NzbF9saWIuYwotLS0tIG9w ZW5zc2wtMS4wLjAvc3NsL3NzbF9saWIuYy5maXBzCTIwMTAtMDItMTcgMjA6NDM6NDYuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9zc2wvc3NsX2xpYi5jCTIwMTAtMDMtMzAgMTA6 MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMTUyMSw2ICsxNTIxLDE0IEBAIFNTTF9DVFggKlNT TF9DVFhfbmV3KGNvbnN0IFNTTF9NRVRIT0QgKm0KLSAJCXJldHVybihOVUxMKTsKLSAJCX0KLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAobWV0aC0+dmVyc2lv biA8IFRMUzFfVkVSU0lPTikpCQotKwkJewotKwkJU1NMZXJyKFNTTF9GX1NTTF9DVFhfTkVXLCBT U0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJ CX0KLSsjZW5kaWYKLSsKLSAJaWYgKFNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHgo KSA8IDApCi0gCQl7Ci0gCQlTU0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsU1NMX1JfWDUwOV9WRVJJ RklDQVRJT05fU0VUVVBfUFJPQkxFTVMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9zc2wvc3Ns dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9zc2wvc3NsdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAu MC9zc2wvc3NsdGVzdC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wL3NzbC9zc2x0ZXN0LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAw MDAwMDAgKzAyMDAKLUBAIC0yNjgsNiArMjY4LDkgQEAgc3RhdGljIHZvaWQgc3ZfdXNhZ2Uodm9p ZCkKLSAJewotIAlmcHJpbnRmKHN0ZGVyciwidXNhZ2U6IHNzbHRlc3QgW2FyZ3MgLi4uXVxuIik7 Ci0gCWZwcmludGYoc3RkZXJyLCJcbiIpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJZnByaW50 ZihzdGRlcnIsIi1GICAgICAgICAgICAgIC0gcnVuIHRlc3QgaW4gRklQUyBtb2RlXG4iKTsKLSsj ZW5kaWYKLSAJZnByaW50ZihzdGRlcnIsIiAtc2VydmVyX2F1dGggIC0gY2hlY2sgc2VydmVyIGNl cnRpZmljYXRlXG4iKTsKLSAJZnByaW50ZihzdGRlcnIsIiAtY2xpZW50X2F1dGggIC0gZG8gY2xp ZW50IGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAJZnByaW50ZihzdGRlcnIsIiAtcHJveHkgICAgICAg IC0gYWxsb3cgcHJveHkgY2VydGlmaWNhdGVzXG4iKTsKLUBAIC00ODcsNiArNDkwLDkgQEAgaW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAjZW5kaWYKLSAJU1RBQ0tfT0YoU1NMX0NP TVApICpzc2xfY29tcF9tZXRob2RzID0gTlVMTDsKLSAJaW50IHRlc3RfY2lwaGVybGlzdCA9IDA7 Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpbnQgZmlwc19tb2RlPTA7Ci0rI2VuZGlmCi0gCi0g CXZlcmJvc2UgPSAwOwotIAlkZWJ1ZyA9IDA7Ci1AQCAtNTE4LDcgKzUyNCwxNiBAQCBpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQotIAotIAl3aGlsZSAoYXJnYyA+PSAxKQotIAkJewot LQkJaWYJKHN0cmNtcCgqYXJndiwiLXNlcnZlcl9hdXRoIikgPT0gMCkKLSsJCWlmKCFzdHJjbXAo KmFyZ3YsIi1GIikpCi0rCQkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQlmaXBzX21vZGU9 MTsKLSsjZWxzZQotKwkJCWZwcmludGYoc3RkZXJyLCJub3QgY29tcGlsZWQgd2l0aCBGSVBTIHN1 cHBvcnQsIHNvIGV4aXR0aW5nIHdpdGhvdXQgcnVubmluZy5cbiIpOwotKwkJCUVYSVQoMCk7Ci0r I2VuZGlmCi0rCQkJfQotKwkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItc2VydmVyX2F1dGgiKSA9 PSAwKQotIAkJCXNlcnZlcl9hdXRoPTE7Ci0gCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jbGll bnRfYXV0aCIpID09IDApCi0gCQkJY2xpZW50X2F1dGg9MTsKLUBAIC03MTQsNiArNzI5LDIwIEBA IGJhZDoKLSAJCUVYSVQoMSk7Ci0gCQl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihm aXBzX21vZGUpCi0rCQl7Ci0rCQlpZighRklQU19tb2RlX3NldCgxKSkKLSsJCQl7Ci0rCQkJRVJS X2xvYWRfY3J5cHRvX3N0cmluZ3MoKTsKLSsJCQlFUlJfcHJpbnRfZXJyb3JzKEJJT19uZXdfZnAo c3RkZXJyLEJJT19OT0NMT1NFKSk7Ci0rCQkJRVhJVCgxKTsKLSsJCQl9Ci0rCQllbHNlCi0rCQkJ ZnByaW50ZihzdGRlcnIsIioqKiBJTiBGSVBTIE1PREUgKioqXG4iKTsKLSsJCX0KLSsjZW5kaWYK LSsKLSAJaWYgKHByaW50X3RpbWUpCi0gCQl7Ci0gCQlpZiAoIWJpb19wYWlyKQotQEAgLTIxNTYs MTIgKzIxODUsMTIgQEAgc3RhdGljIGludCBNU19DQUxMQkFDSyBhcHBfdmVyaWZ5X2NhbGxiYQot IAkJfQotIAotICNpZm5kZWYgT1BFTlNTTF9OT19YNTA5X1ZFUklGWQotLSMgaWZkZWYgT1BFTlNT TF9GSVBTCi0rIyBpZiAwCi0gCWlmKHMtPnZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQotIAkJRklQ U19hbGxvd19tZDUoMSk7Ci0gIyBlbmRpZgotIAlvayA9IFg1MDlfdmVyaWZ5X2NlcnQoY3R4KTsK LS0jIGlmZGVmIE9QRU5TU0xfRklQUwotKyMgaWYgMAotIAlpZihzLT52ZXJzaW9uID09IFRMUzFf VkVSU0lPTikKLSAJCUZJUFNfYWxsb3dfbWQ1KDApOwotICMgZW5kaWYKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAvc3NsL3MyM19jbG50LmMuZmlwcyBvcGVuc3NsLTEuMC4wL3NzbC9zMjNfY2xudC5j Ci0tLS0gb3BlbnNzbC0xLjAuMC9zc2wvczIzX2NsbnQuYy5maXBzCTIwMTAtMDItMTYgMTU6MjA6 NDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9zc2wvczIzX2NsbnQuYwkyMDEw LTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTMzNCw2ICszMzQsMTQgQEAgc3Rh dGljIGludCBzc2wyM19jbGllbnRfaGVsbG8oU1NMICpzKQotIAkJCXZlcnNpb25fbWFqb3IgPSBU TFMxX1ZFUlNJT05fTUFKT1I7Ci0gCQkJdmVyc2lvbl9taW5vciA9IFRMUzFfVkVSU0lPTl9NSU5P UjsKLSAJCQl9Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJZWxzZSBpZihGSVBTX21vZGUoKSkK LSsJCQl7Ci0rCQkJU1NMZXJyKFNTTF9GX1NTTDIzX0NMSUVOVF9IRUxMTywKLSsJCQkJCVNTTF9S X09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQot KyNlbmRpZgotIAkJZWxzZSBpZiAodmVyc2lvbiA9PSBTU0wzX1ZFUlNJT04pCi0gCQkJewotIAkJ CXZlcnNpb25fbWFqb3IgPSBTU0wzX1ZFUlNJT05fTUFKT1I7Ci1AQCAtNjE3LDYgKzYyNSwxNCBA QCBzdGF0aWMgaW50IHNzbDIzX2dldF9zZXJ2ZXJfaGVsbG8oU1NMICpzCi0gCQlpZiAoKHBbMl0g PT0gU1NMM19WRVJTSU9OX01JTk9SKSAmJgotIAkJCSEocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19T U0x2MykpCi0gCQkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQlpZihGSVBTX21vZGUoKSkK LSsJCQkJewotKwkJCQlTU0xlcnIoU1NMX0ZfU1NMMjNfR0VUX1NFUlZFUl9IRUxMTywKLSsJCQkJ CVNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLSsJCQkJZ290byBlcnI7Ci0r CQkJCX0KLSsjZW5kaWYKLSAJCQlzLT52ZXJzaW9uPVNTTDNfVkVSU0lPTjsKLSAJCQlzLT5tZXRo b2Q9U1NMdjNfY2xpZW50X21ldGhvZCgpOwotIAkJCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAv c3NsL3MyM19zcnZyLmMuZmlwcyBvcGVuc3NsLTEuMC4wL3NzbC9zMjNfc3J2ci5jCi0tLS0gb3Bl bnNzbC0xLjAuMC9zc2wvczIzX3NydnIuYy5maXBzCTIwMTAtMDItMTYgMTU6MjA6NDAuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9zc2wvczIzX3NydnIuYwkyMDEwLTAzLTMwIDEw OjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTM5Myw2ICszOTMsMTUgQEAgaW50IHNzbDIzX2dl dF9jbGllbnRfaGVsbG8oU1NMICpzKQotIAkJCX0KLSAJCX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAocy0+dmVyc2lvbiA8IFRMUzFfVkVSU0lPTikpCi0r CQl7Ci0rCQlTU0xlcnIoU1NMX0ZfU1NMMjNfR0VUX0NMSUVOVF9IRUxMTywKLSsJCQkJCVNTTF9S X09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNl bmRpZgotKwotIAlpZiAocy0+c3RhdGUgPT0gU1NMMjNfU1RfU1JfQ0xOVF9IRUxMT19CKQotIAkJ ewotIAkJLyogd2UgaGF2ZSBTU0x2My9UTFN2MSBpbiBhbiBTU0x2MiBoZWFkZXIKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAvc3NsL3MzX2NsbnQuYy5maXBzIG9wZW5zc2wtMS4wLjAvc3NsL3MzX2Ns bnQuYwotLS0tIG9wZW5zc2wtMS4wLjAvc3NsL3MzX2NsbnQuYy5maXBzCTIwMTAtMDItMjggMDE6 MjQ6MjQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC9zc2wvczNfY2xudC5jCTIw MTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMTU2LDYgKzE1NiwxMCBAQAot ICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSAjaW5jbHVkZSA8b3BlbnNzbC9tZDUuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpZm5kZWYgT1BFTlNTTF9OT19ESAot ICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0gI2VuZGlmCi1AQCAtMTU0Niw2ICsxNTUwLDggQEAg aW50IHNzbDNfZ2V0X2tleV9leGNoYW5nZShTU0wgKnMpCi0gCQkJcT1tZF9idWY7Ci0gCQkJZm9y IChudW09MjsgbnVtID4gMDsgbnVtLS0pCi0gCQkJCXsKLSsJCQkJRVZQX01EX0NUWF9zZXRfZmxh Z3MoJm1kX2N0eCwKLSsJCQkJCUVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7Ci0gCQkJ CUVWUF9EaWdlc3RJbml0X2V4KCZtZF9jdHgsKG51bSA9PSAyKQotIAkJCQkJP3MtPmN0eC0+bWQ1 OnMtPmN0eC0+c2hhMSwgTlVMTCk7Ci0gCQkJCUVWUF9EaWdlc3RVcGRhdGUoJm1kX2N0eCwmKHMt PnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAvc3NsL3MzX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMC9zc2wvczNfZW5jLmMKLS0t LSBvcGVuc3NsLTEuMC4wL3NzbC9zM19lbmMuYy5maXBzCTIwMDktMDQtMTYgMTk6MjI6NTAuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9zc2wvczNfZW5jLmMJMjAxMC0wMy0zMCAx MDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xNzAsNiArMTcwLDcgQEAgc3RhdGljIGludCBz c2wzX2dlbmVyYXRlX2tleV9ibG9jayhTU0wgKgotICNlbmRpZgotIAlrPTA7Ci0gCUVWUF9NRF9D VFhfaW5pdCgmbTUpOwotKwlFVlBfTURfQ1RYX3NldF9mbGFncygmbTUsIEVWUF9NRF9DVFhfRkxB R19OT05fRklQU19BTExPVyk7Ci0gCUVWUF9NRF9DVFhfaW5pdCgmczEpOwotIAlmb3IgKGk9MDsg KGludClpPG51bTsgaSs9TUQ1X0RJR0VTVF9MRU5HVEgpCi0gCQl7Ci1AQCAtNjE0LDYgKzYxNSw4 IEBAIGludCBzc2wzX2RpZ2VzdF9jYWNoZWRfcmVjb3JkcyhTU0wgKnMpCi0gCQlpZiAoKG1hc2sg JiBzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobTIpICYmIG1kKSAKLSAJCQl7Ci0gCQkJ cy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldPUVWUF9NRF9DVFhfY3JlYXRlKCk7Ci0rCQkJRVZQX01E X0NUWF9zZXRfZmxhZ3Mocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldLAotKwkJCQlFVlBfTURfQ1RY X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotIAkJCUVWUF9EaWdlc3RJbml0X2V4KHMtPnMzLT5oYW5k c2hha2VfZGdzdFtpXSxtZCxOVUxMKTsKLSAJCQlFVlBfRGlnZXN0VXBkYXRlKHMtPnMzLT5oYW5k c2hha2VfZGdzdFtpXSxoZGF0YSxoZGF0YWxlbik7Ci0gCQkJfSAKLUBAIC02NzAsNiArNjczLDcg QEAgc3RhdGljIGludCBzc2wzX2hhbmRzaGFrZV9tYWMoU1NMICpzLCBpbgotIAkJcmV0dXJuIDA7 Ci0gCX0JCi0gCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsJRVZQX01EX0NUWF9zZXRfZmxhZ3Mo JmN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJRVZQX01EX0NUWF9jb3B5 X2V4KCZjdHgsZCk7Ci0gCW49RVZQX01EX0NUWF9zaXplKCZjdHgpOwotIAlpZiAobiA8IDApCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wL3NzbC9zM19zcnZyLmMuZmlwcyBvcGVuc3NsLTEuMC4wL3Nz bC9zM19zcnZyLmMKLS0tLSBvcGVuc3NsLTEuMC4wL3NzbC9zM19zcnZyLmMuZmlwcwkyMDEwLTAy LTI4IDAwOjA0OjEwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvc3NsL3MzX3Ny dnIuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTE3NTIsNiArMTc1 Miw4IEBAIGludCBzc2wzX3NlbmRfc2VydmVyX2tleV9leGNoYW5nZShTU0wgKnMKLSAJCQkJaj0w OwotIAkJCQlmb3IgKG51bT0yOyBudW0gPiAwOyBudW0tLSkKLSAJCQkJCXsKLSsJCQkJCUVWUF9N RF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgsCi0rCQkJCQkJRVZQX01EX0NUWF9GTEFHX05PTl9GSVBT X0FMTE9XKTsKLSAJCQkJCUVWUF9EaWdlc3RJbml0X2V4KCZtZF9jdHgsKG51bSA9PSAyKQotIAkJ CQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNoYTEsIE5VTEwpOwotIAkJCQkJRVZQX0RpZ2VzdFVw ZGF0ZSgmbWRfY3R4LCYocy0+czMtPmNsaWVudF9yYW5kb21bMF0pLFNTTDNfUkFORE9NX1NJWkUp OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9zc2wvdDFfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4w L3NzbC90MV9lbmMuYwotLS0tIG9wZW5zc2wtMS4wLjAvc3NsL3QxX2VuYy5jLmZpcHMJMjAwOS0w NC0xOSAyMDowMzoxMy4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wL3NzbC90MV9l bmMuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTE2OSw2ICsxNjks OCBAQCBzdGF0aWMgdm9pZCB0bHMxX1BfaGFzaChjb25zdCBFVlBfTUQgKm1kCi0gCi0gCUhNQUNf Q1RYX2luaXQoJmN0eCk7Ci0gCUhNQUNfQ1RYX2luaXQoJmN0eF90bXApOwotKwlITUFDX0NUWF9z ZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSsJSE1BQ19D VFhfc2V0X2ZsYWdzKCZjdHhfdG1wLCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwot IAlITUFDX0luaXRfZXgoJmN0eCxzZWMsc2VjX2xlbixtZCwgTlVMTCk7Ci0gCUhNQUNfSW5pdF9l eCgmY3R4X3RtcCxzZWMsc2VjX2xlbixtZCwgTlVMTCk7Ci0gCWlmIChzZWVkMSAhPSBOVUxMKSBI TUFDX1VwZGF0ZSgmY3R4LHNlZWQxLHNlZWQxX2xlbik7CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0x LjAuMC1pbml0LXNoYTI1Ni5wYXRjaCBiL29wZW5zc2wtMS4wLjAtaW5pdC1zaGEyNTYucGF0Y2gK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNTcyMmMuLjAwMDAwMDAKLS0tIGEvb3Bl bnNzbC0xLjAuMC1pbml0LXNoYTI1Ni5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAg QEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvZG9jL3NzbC9TU0xfbGlicmFyeV9pbml0LnBvZC5z aGEyNTYgb3BlbnNzbC0xLjAuMC9kb2Mvc3NsL1NTTF9saWJyYXJ5X2luaXQucG9kCi0tLS0gb3Bl bnNzbC0xLjAuMC9kb2Mvc3NsL1NTTF9saWJyYXJ5X2luaXQucG9kLnNoYTI1NgkyMDA2LTAzLTEy IDAxOjM3OjU1LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAvZG9jL3NzbC9TU0xf bGlicmFyeV9pbml0LnBvZAkyMDEwLTA0LTA5IDE2OjMzOjExLjAwMDAwMDAwMCArMDIwMAotQEAg LTE1LDcgKzE1LDcgQEAgU1NMX2xpYnJhcnlfaW5pdCwgT3BlblNTTF9hZGRfc3NsX2FsZ29yaQot IAotID1oZWFkMSBERVNDUklQVElPTgotIAotLVNTTF9saWJyYXJ5X2luaXQoKSByZWdpc3RlcnMg dGhlIGF2YWlsYWJsZSBjaXBoZXJzIGFuZCBkaWdlc3RzLgotK1NTTF9saWJyYXJ5X2luaXQoKSBy ZWdpc3RlcnMgdGhlIGF2YWlsYWJsZSBTU0wvVExTIGNpcGhlcnMgYW5kIGRpZ2VzdHMuCi0gCi0g T3BlblNTTF9hZGRfc3NsX2FsZ29yaXRobXMoKSBhbmQgU1NMZWF5X2FkZF9zc2xfYWxnb3JpdGht cygpIGFyZSBzeW5vbnltcwotIGZvciBTU0xfbGlicmFyeV9pbml0KCkuCi1AQCAtMjcsMjQgKzI3 LDI4IEBAIFNTTF9saWJyYXJ5X2luaXQoKSBpcyBub3QgcmVlbnRyYW50LiAKLSAKLSA9aGVhZDEg V0FSTklORwotIAotLVNTTF9saWJyYXJ5X2luaXQoKSBvbmx5IHJlZ2lzdGVycyBjaXBoZXJzLiBB bm90aGVyIGltcG9ydGFudCBpbml0aWFsaXphdGlvbgotLWlzIHRoZSBzZWVkaW5nIG9mIHRoZSBQ Uk5HIChQc2V1ZG8gUmFuZG9tIE51bWJlciBHZW5lcmF0b3IpLCB3aGljaCBoYXMgdG8KLS1iZSBw ZXJmb3JtZWQgc2VwYXJhdGVseS4KLStTU0xfbGlicmFyeV9pbml0KCkgYWRkcyBjaXBoZXJzIGFu ZCBkaWdlc3RzIHVzZWQgZGlyZWN0bHkgYW5kIGluZGlyZWN0bHkgYnkKLStTU0wvVExTLgotIAot ID1oZWFkMSBFWEFNUExFUwotIAotIEEgdHlwaWNhbCBUTFMvU1NMIGFwcGxpY2F0aW9uIHdpbGwg c3RhcnQgd2l0aCB0aGUgbGlicmFyeSBpbml0aWFsaXphdGlvbiwKLS13aWxsIHByb3ZpZGUgcmVh ZGFibGUgZXJyb3IgbWVzc2FnZXMgYW5kIHdpbGwgc2VlZCB0aGUgUFJORy4KLSthbmQgcHJvdmlk ZSByZWFkYWJsZSBlcnJvciBtZXNzYWdlcy4KLSAKLSAgU1NMX2xvYWRfZXJyb3Jfc3RyaW5ncygp OyAgICAgICAgICAgICAgICAvKiByZWFkYWJsZSBlcnJvciBtZXNzYWdlcyAqLwotICBTU0xfbGli cmFyeV9pbml0KCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRpYWxpemUgbGlicmFyeSAq LwotLSBhY3Rpb25zX3RvX3NlZWRfUFJORygpOyAKLSAKLSA9aGVhZDEgUkVUVVJOIFZBTFVFUwot IAotIFNTTF9saWJyYXJ5X2luaXQoKSBhbHdheXMgcmV0dXJucyAiMSIsIHNvIGl0IGlzIHNhZmUg dG8gZGlzY2FyZCB0aGUgcmV0dXJuCi0gdmFsdWUuCi0gCi0rPWhlYWQxIE5PVEVTCi0rCi0rT3Bl blNTTCAwLjkuOG8gYW5kIDEuMC4wYSBhbmQgbGF0ZXIgYWRkZWQgU0hBMiBhbGdvcml0aG1zIHRv IFNTTF9saWJyYXJ5X2luaXQoKS4KLStBcHBsaWNhdGlvbnMgd2hpY2ggbmVlZCB0byB1c2UgU0hB MiBpbiBlYXJsaWVyIHZlcnNpb25zIG9mIE9wZW5TU0wgc2hvdWxkIGNhbGwKLStPcGVuU1NMX2Fk ZF9hbGxfYWxnb3JpdGhtcygpIGFzIHdlbGwuCi0rCi0gPWhlYWQxIFNFRSBBTFNPCi0gCi0gTDxz c2woMyl8c3NsKDMpPiwgTDxTU0xfbG9hZF9lcnJvcl9zdHJpbmdzKDMpfFNTTF9sb2FkX2Vycm9y X3N0cmluZ3MoMyk+LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9zc2wvc3NsX2FsZ3MuYy5zaGEy NTYgb3BlbnNzbC0xLjAuMC9zc2wvc3NsX2FsZ3MuYwotLS0tIG9wZW5zc2wtMS4wLjAvc3NsL3Nz bF9hbGdzLmMuc2hhMjU2CTIwMTAtMDQtMDYgMTI6NTI6MzguMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMC9zc2wvc3NsX2FsZ3MuYwkyMDEwLTA0LTA5IDE2OjM0OjQxLjAwMDAwMDAw MCArMDIwMAotQEAgLTExMSw2ICsxMTEsMTQgQEAgaW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkK LSAJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwic3NsMy1zaGExIik7Ci0gCUVWUF9hZGRf ZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlvbixTTl9zaGExV2l0aFJTQSk7Ci0g I2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgotKwlFVlBfYWRkX2RpZ2VzdChFVlBf c2hhMjI0KCkpOwotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOwotKyNlbmRpZgotKyNp Zm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsK LSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKLSsjZW5kaWYKLSAjaWYgIWRlZmluZWQo T1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fRFNBKQotIAlFVlBfYWRkX2Rp Z2VzdChFVlBfZHNzMSgpKTsgLyogRFNBIHdpdGggc2hhMSAqLwotIAlFVlBfYWRkX2RpZ2VzdF9h bGlhcyhTTl9kc2FXaXRoU0hBMSxTTl9kc2FXaXRoU0hBMV8yKTsKLUBAIC0xNDgsNiArMTU2LDE0 IEBAIGludCBTU0xfbGlicmFyeV9pbml0KHZvaWQpCi0gCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNO X3NoYTEsInNzbDMtc2hhMSIpOwotIAlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExV2l0aFJT QUVuY3J5cHRpb24sU05fc2hhMVdpdGhSU0EpOwotICNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9O T19TSEEyNTYKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIyNCgpKTsKLSsJRVZQX2FkZF9kaWdl c3QoRVZQX3NoYTI1NigpKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0r CUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1 MTIoKSk7Ci0rI2VuZGlmCi0gI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5l ZChPUEVOU1NMX05PX0RTQSkKLSAJRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEoKSk7IC8qIERTQSB3 aXRoIHNoYTEgKi8KLSAJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsU05fZHNh V2l0aFNIQTFfMik7CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC12ZXJzaW9uLnBhdGNoIGIv b3BlbnNzbC0xLjAuMC12ZXJzaW9uLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBhZGFlYTZhLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtdmVyc2lvbi5wYXRjaAorKysg L2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRv L29wZW5zc2x2LmgudmVyc2lvbiBvcGVuc3NsLTEuMC4wL2NyeXB0by9vcGVuc3Nsdi5oCi0tLS0g b3BlbnNzbC0xLjAuMC9jcnlwdG8vb3BlbnNzbHYuaC52ZXJzaW9uCTIwMTAtMDMtMzAgMTA6NTk6 MjYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vb3BlbnNzbHYuaAky MDEwLTAzLTMwIDExOjAwOjUyLjAwMDAwMDAwMCArMDIwMAotQEAgLTI1LDcgKzI1LDggQEAKLSAg KiAoUHJpb3IgdG8gMC45LjVhIGJldGExLCBhIGRpZmZlcmVudCBzY2hlbWUgd2FzIHVzZWQ6IE1N Tk5GRlJCQiBmb3IKLSAgKiAgbWFqb3IgbWlub3IgZml4IGZpbmFsIHBhdGNoL2JldGEpCi0gICov Ci0tI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSCTB4MTAwMDAwMGZMCi0rLyogd2UgaGF2 ZSB0byBrZWVwIHRoZSB2ZXJzaW9uIG51bWJlciB0byBub3QgYnJlYWsgdGhlIGFiaSAqLwotKyNk ZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05VTUJFUgkweDEwMDAwMDAzTAotICNpZmRlZiBPUEVOU1NM X0ZJUFMKLSAjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9URVhUCSJPcGVuU1NMIDEuMC4wLWZpcHMg MjkgTWFyIDIwMTAiCi0gI2Vsc2UKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wYS1maXBzLnBh dGNoIGIvb3BlbnNzbC0xLjAuMGEtZmlwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi40MjFlNTA3Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMGEtZmlw cy5wYXRjaApAQCAtMCwwICsxLDEyMTY0IEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9Db25m aWd1cmUuZmlwcyBvcGVuc3NsLTEuMC4wYS9Db25maWd1cmUKKy0tLSBvcGVuc3NsLTEuMC4wYS9D b25maWd1cmUuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjBhL0NvbmZpZ3VyZQkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIw MAorQEAgLTY2MCw2ICs2NjAsNyBAQCBteSAkY21sbF9lbmM9ImNhbWVsbGlhLm8gY21sbF9taXNj Lm8gY21sCisgbXkgJHByb2Nlc3Nvcj0iIjsKKyBteSAkZGVmYXVsdF9yYW5saWI7CisgbXkgJHBl cmw7CisrbXkgJGZpcHM9MDsKKyAKKyAKKyAjIEFsbCBvZiB0aGUgZm9sbG93aW5nIGlzIGRpc2Fi bGVkIGJ5IGRlZmF1bHQgKFJDNSB3YXMgZW5hYmxlZCBiZWZvcmUgMC45LjgpOgorQEAgLTgwNiw2 ICs4MDcsMTAgQEAgUFJPQ0VTU19BUkdTOgorIAkJCX0KKyAJCWVsc2lmICgvXjM4NiQvKQorIAkJ CXsgJHByb2Nlc3Nvcj0zODY7IH0KKysJCWVsc2lmICgvXmZpcHMkLykKKysJCQl7CisrCQkJJGZp cHM9MTsKKysJCSAgICAgICAgfQorIAkJZWxzaWYgKC9ecnNhcmVmJC8pCisgCQkJeworIAkJCSMg Tm8gUlNBcmVmIHN1cHBvcnQgYW55IG1vcmUgc2luY2UgaXQncyBub3QgbmVlZGVkLgorQEAgLTEz NjgsNiArMTM3MywxMSBAQCAkY2ZsYWdzLj0iIC1ET1BFTlNTTF9JQTMyX1NTRTIiIGlmICghJG5v CisgCisgJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX01PTlQiIGlmICgkYm5fb2JqID1+IC8t bW9udC8pOworIAorK2lmICgkZmlwcykKKysJeworKwkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0i I2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7CisrCX0KKysKKyAkY3B1aWRfb2JqPSJtZW1fY2xyLm8i CXVubGVzcyAoJGNwdWlkX29iaiA9fiAvXC5vJC8pOworICRkZXNfb2JqPSRkZXNfZW5jCXVubGVz cyAoJGRlc19vYmogPX4gL1wubyQvKTsKKyAkYmZfb2JqPSRiZl9lbmMJCXVubGVzcyAoJGJmX29i aiA9fiAvXC5vJC8pOworQEAgLTE1MzUsNiArMTU0NSwxMCBAQCB3aGlsZSAoPElOPikKKyAJcy9e TElCS1JCNT0uKi9MSUJLUkI1PSR3aXRoYXJnc3sia3JiNS1saWIifS87CisgCXMvXkxJQlpMSUI9 LiovTElCWkxJQj0kd2l0aGFyZ3N7InpsaWItbGliIn0vOworIAlzL15aTElCX0lOQ0xVREU9Liov WkxJQl9JTkNMVURFPSR3aXRoYXJnc3siemxpYi1pbmNsdWRlIn0vOworKwlpZiAoJGZpcHMpCisr CQl7CisrCQlzL15GSVBTPS4qL0ZJUFM9eWVzLzsKKysJCX0KKyAJcy9eU0hMSUJfVEFSR0VUPS4q L1NITElCX1RBUkdFVD0kc2hhcmVkX3RhcmdldC87CisgCXMvXlNITElCX01BUks9LiovU0hMSUJf TUFSSz0kc2hhcmVkX21hcmsvOworIAlzL15TSEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChT SEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9iZi9iZl9za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vYmYvYmZfc2tleS5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2JmL2JmX3NrZXku Yy5maXBzCTIwMDgtMTEtMTIgMDQ6NTc6NTIuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL2JmL2JmX3NrZXkuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAorQEAgLTU5LDEwICs1OSwxNSBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRl IDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9ibG93ZmlzaC5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2NyeXB0by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgImJmX2xvY2wuaCIKKyAjaW5jbHVkZSAi YmZfcGkuaCIKKyAKKy12b2lkIEJGX3NldF9rZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmRhdGEpCisrRklQU19OT05fRklQU19WQ0lQSEVSX0luaXQoQkYpCisg CXsKKyAJaW50IGk7CisgCUJGX0xPTkcgKnAscmksaW5bMl07CitkaWZmIC11cCBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vYmYvYmxvd2Zpc2guaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9iZi9i bG93ZmlzaC5oCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2JmL2Jsb3dmaXNoLmguZmlwcwky MDEwLTA2LTA0IDEyOjI1OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9iZi9ibG93ZmlzaC5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitA QCAtMTA0LDcgKzEwNCw5IEBAIHR5cGVkZWYgc3RydWN0IGJmX2tleV9zdAorIAlCRl9MT05HIFNb NCoyNTZdOworIAl9IEJGX0tFWTsKKyAKKy0gCisrI2lmZGVmIE9QRU5TU0xfRklQUyAKKyt2b2lk IHByaXZhdGVfQkZfc2V0X2tleShCRl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQg Y2hhciAqZGF0YSk7CisrI2VuZGlmCisgdm9pZCBCRl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBpbnQg bGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyAKKyB2b2lkIEJGX2VuY3J5cHQoQkZf TE9ORyAqZGF0YSxjb25zdCBCRl9LRVkgKmtleSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vYm4vYm4uaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ibi9ibi5oCistLS0gb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2JuL2JuLmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ibi9ibi5oCTIwMTAtMDYtMDQg MTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNTQwLDYgKzU0MCwxNyBAQCBpbnQJQk5faXNf cHJpbWVfZXgoY29uc3QgQklHTlVNICpwLGludCBuCisgaW50CUJOX2lzX3ByaW1lX2Zhc3R0ZXN0 X2V4KGNvbnN0IEJJR05VTSAqcCxpbnQgbmNoZWNrcywgQk5fQ1RYICpjdHgsCisgCQlpbnQgZG9f dHJpYWxfZGl2aXNpb24sIEJOX0dFTkNCICpjYik7CisgCisraW50IEJOX1g5MzFfZ2VuZXJhdGVf WHBxKEJJR05VTSAqWHAsIEJJR05VTSAqWHEsIGludCBuYml0cywgQk5fQ1RYICpjdHgpOworKwor K2ludCBCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05V TSAqcDIsCisrCQkJY29uc3QgQklHTlVNICpYcCwgY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJ R05VTSAqWHAyLAorKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsIEJOX0dFTkNCICpj Yik7CisraW50IEJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAx LCBCSUdOVU0gKnAyLAorKwkJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwKKysJCQljb25zdCBC SUdOVU0gKlhwLAorKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsCisrCQkJQk5fR0VO Q0IgKmNiKTsKKysKKyBCTl9NT05UX0NUWCAqQk5fTU9OVF9DVFhfbmV3KHZvaWQgKTsKKyB2b2lk IEJOX01PTlRfQ1RYX2luaXQoQk5fTU9OVF9DVFggKmN0eCk7CisgaW50IEJOX21vZF9tdWxfbW9u dGdvbWVyeShCSUdOVU0gKnIsY29uc3QgQklHTlVNICphLGNvbnN0IEJJR05VTSAqYiwKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ibi9ibl94OTMxcC5jLmZpcHMgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2JuL2JuX3g5MzFwLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vYm4vYm5f eDkzMXAuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2JuL2JuX3g5MzFwLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAw MDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMjcyIEBACisrLyogYm5feDkzMXAuYyAqLworKy8qIFdy aXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUg T3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENv cHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoK KysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK KysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisr ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3Jn LgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisr ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3 YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRq aEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrLyogWDkuMzEgcm91dGluZXMgZm9yIHByaW1lIGRl cml2YXRpb24gKi8KKysKKysvKiBYOS4zMSBwcmltZSBkZXJpdmF0aW9uLiBUaGlzIGlzIHVzZWQg dG8gZ2VuZXJhdGUgdGhlIHByaW1lcyBwaQorKyAqIChwMSwgcDIsIHExLCBxMikgZnJvbSBhIHBh cmFtZXRlciBYcGkgYnkgY2hlY2tpbmcgc3VjY2Vzc2l2ZSBvZGQKKysgKiBpbnRlZ2Vycy4KKysg Ki8KKysKKytzdGF0aWMgaW50IGJuX3g5MzFfZGVyaXZlX3BpKEJJR05VTSAqcGksIGNvbnN0IEJJ R05VTSAqWHBpLCBCTl9DVFggKmN0eCwKKysJCQlCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50IGkg PSAwOworKwlpZiAoIUJOX2NvcHkocGksIFhwaSkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFCTl9p c19vZGQocGkpICYmICFCTl9hZGRfd29yZChwaSwgMSkpCisrCQlyZXR1cm4gMDsKKysJZm9yKDs7 KQorKwkJeworKwkJaSsrOworKwkJQk5fR0VOQ0JfY2FsbChjYiwgMCwgaSk7CisrCQkvKiBOQiAy NyBNUiBpcyBzcGVjaWZpY2VkIGluIFg5LjMxICovCisrCQlpZiAoQk5faXNfcHJpbWVfZmFzdHRl c3RfZXgocGksIDI3LCBjdHgsIDEsIGNiKSkKKysJCQlicmVhazsKKysJCWlmICghQk5fYWRkX3dv cmQocGksIDIpKQorKwkJCXJldHVybiAwOworKwkJfQorKwlCTl9HRU5DQl9jYWxsKGNiLCAyLCBp KTsKKysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBUaGlzIGlzIHRoZSBtYWluIFg5LjMxIHByaW1l IGRlcml2YXRpb24gZnVuY3Rpb24uIEZyb20gcGFyYW1ldGVycworKyAqIFhwMSwgWHAyIGFuZCBY cCBkZXJpdmUgdGhlIHByaW1lIHAuIElmIHRoZSBwYXJhbWV0ZXJzIHAxIG9yIHAyIGFyZQorKyAq IG5vdCBOVUxMIHRoZXkgd2lsbCBiZSByZXR1cm5lZCB0b286IHRoaXMgaXMgbmVlZGVkIGZvciB0 ZXN0aW5nLgorKyAqLworKworK2ludCBCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChCSUdOVU0gKnAs IEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCisrCQkJY29uc3QgQklHTlVNICpYcCwgY29uc3QgQklH TlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLAorKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RY ICpjdHgsIEJOX0dFTkNCICpjYikKKysJeworKwlpbnQgcmV0ID0gMDsKKysKKysJQklHTlVNICp0 LCAqcDFwMiwgKnBtMTsKKysKKysJLyogT25seSBldmVuIGUgc3VwcG9ydGVkICovCisrCWlmICgh Qk5faXNfb2RkKGUpKQorKwkJcmV0dXJuIDA7CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwlp ZiAoIXAxKQorKwkJcDEgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCWlmICghcDIpCisrCQlwMiA9 IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJdCA9IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJcDFwMiA9 IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJcG0xID0gQk5fQ1RYX2dldChjdHgpOworKworKwlpZiAo IWJuX3g5MzFfZGVyaXZlX3BpKHAxLCBYcDEsIGN0eCwgY2IpKQorKwkJZ290byBlcnI7CisrCisr CWlmICghYm5feDkzMV9kZXJpdmVfcGkocDIsIFhwMiwgY3R4LCBjYikpCisrCQlnb3RvIGVycjsK KysKKysJaWYgKCFCTl9tdWwocDFwMiwgcDEsIHAyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisr CS8qIEZpcnN0IHNldCBwIHRvIHZhbHVlIG9mIFJwICovCisrCisrCWlmICghQk5fbW9kX2ludmVy c2UocCwgcDIsIHAxLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fbXVsKHAsIHAs IHAyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fbW9kX2ludmVyc2UodCwgcDEs IHAyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fbXVsKHQsIHQsIHAxLCBjdHgp KQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fc3ViKHAsIHAsIHQpKQorKwkJZ290byBlcnI7 CisrCisrCWlmIChwLT5uZWcgJiYgIUJOX2FkZChwLCBwLCBwMXAyKSkKKysJCWdvdG8gZXJyOwor KworKwkvKiBwIG5vdyBlcXVhbHMgUnAgKi8KKysKKysJaWYgKCFCTl9tb2Rfc3ViKHAsIHAsIFhw LCBwMXAyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fYWRkKHAsIHAsIFhwKSkK KysJCWdvdG8gZXJyOworKworKwkvKiBwIG5vdyBlcXVhbHMgWXAwICovCisrCisrCWZvciAoOzsp CisrCQl7CisrCQlpbnQgaSA9IDE7CisrCQlCTl9HRU5DQl9jYWxsKGNiLCAwLCBpKyspOworKwkJ aWYgKCFCTl9jb3B5KHBtMSwgcCkpCisrCQkJZ290byBlcnI7CisrCQlpZiAoIUJOX3N1Yl93b3Jk KHBtMSwgMSkpCisrCQkJZ290byBlcnI7CisrCQlpZiAoIUJOX2djZCh0LCBwbTEsIGUsIGN0eCkp CisrCQkJZ290byBlcnI7CisrCQlpZiAoQk5faXNfb25lKHQpCisrCQkvKiBYOS4zMSBzcGVjaWZp ZXMgOCBNUiBhbmQgMSBMdWNhcyB0ZXN0IG9yIGFueSBwcmltZSB0ZXN0CisrCQkgKiBvZmZlcmlu ZyBzaW1pbGFyIG9yIGJldHRlciBndWFyYW50ZWVzIDUwIE1SIGlzIGNvbnNpZGVyYWJseSAKKysJ CSAqIGJldHRlci4KKysJCSAqLworKwkJCSYmIEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHAsIDUw LCBjdHgsIDEsIGNiKSkKKysJCQlicmVhazsKKysJCWlmICghQk5fYWRkKHAsIHAsIHAxcDIpKQor KwkJCWdvdG8gZXJyOworKwkJfQorKworKwlCTl9HRU5DQl9jYWxsKGNiLCAzLCAwKTsKKysKKysJ cmV0ID0gMTsKKysKKysJZXJyOgorKworKwlCTl9DVFhfZW5kKGN0eCk7CisrCisrCXJldHVybiBy ZXQ7CisrCX0KKysKKysvKiBHZW5lcmF0ZSBwYWlyIG9mIHBhcmFtdGVycyBYcCwgWHEgZm9yIFg5 LjMxIHByaW1lIGdlbmVyYXRpb24uCisrICogTm90ZTogbmJpdHMgcGFyYW10ZXIgaXMgc3VtIG9m IG51bWJlciBvZiBiaXRzIGluIGJvdGguCisrICovCisrCisraW50IEJOX1g5MzFfZ2VuZXJhdGVf WHBxKEJJR05VTSAqWHAsIEJJR05VTSAqWHEsIGludCBuYml0cywgQk5fQ1RYICpjdHgpCisrCXsK KysJQklHTlVNICp0OworKwlpbnQgaTsKKysJLyogTnVtYmVyIG9mIGJpdHMgZm9yIGVhY2ggcHJp bWUgaXMgb2YgdGhlIGZvcm0KKysJICogNTEyKzEyOHMgZm9yIHMgPSAwLCAxLCAuLi4KKysJICov CisrCWlmICgobmJpdHMgPCAxMDI0KSB8fCAobmJpdHMgJiAweGZmKSkKKysJCXJldHVybiAwOwor KwluYml0cyA+Pj0gMTsKKysJLyogVGhlIHJhbmRvbSB2YWx1ZSBYcCBtdXN0IGJlIGJldHdlZW4g c3FydCgyKSAqIDJeKG5iaXRzLTEpIGFuZAorKwkgKiAyXm5iaXRzIC0gMS4gQnkgc2V0dGluZyB0 aGUgdG9wIHR3byBiaXRzIHdlIGVuc3VyZSB0aGF0IHRoZSBsb3dlcgorKwkgKiBib3VuZCBpcyBl eGNlZWRlZC4KKysJICovCisrCWlmICghQk5fcmFuZChYcCwgbmJpdHMsIDEsIDApKQorKwkJcmV0 dXJuIDA7CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwl0ID0gQk5fQ1RYX2dldChjdHgpOwor KworKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorKwkJeworKwkJaWYgKCFCTl9yYW5kKFhx LCBuYml0cywgMSwgMCkpCisrCQkJcmV0dXJuIDA7CisrCQkvKiBDaGVjayB0aGF0IHxYcCAtIFhx fCA+IDJeKG5iaXRzIC0gMTAwKSAqLworKwkJQk5fc3ViKHQsIFhwLCBYcSk7CisrCQlpZiAoQk5f bnVtX2JpdHModCkgPiAobmJpdHMgLSAxMDApKQorKwkJCWJyZWFrOworKwkJfQorKworKwlCTl9D VFhfZW5kKGN0eCk7CisrCisrCWlmIChpIDwgMTAwMCkKKysJCXJldHVybiAxOworKworKwlyZXR1 cm4gMDsKKysKKysJfQorKworKy8qIEdlbmVyYXRlIHByaW1lcyB1c2luZyBYOS4zMSBhbGdvcml0 aG0uIE9mIHRoZSB2YWx1ZXMgcCwgcDEsIHAyLCBYcDEKKysgKiBhbmQgWHAyIG9ubHkgJ3AnIG5l ZWRzIHRvIGJlIG5vbi1OVUxMLiBJZiBhbnkgb2YgdGhlIG90aGVycyBhcmUgbm90IE5VTEwKKysg KiB0aGUgcmVsZXZhbnQgcGFyYW1ldGVyIHdpbGwgYmUgc3RvcmVkIGluIGl0LgorKyAqCisrICog RHVlIHRvIHRoZSBmYWN0IHRoYXQgfFhwIC0gWHF8ID4gMl4obmJpdHMgLSAxMDApIG11c3QgYmUg c2F0aXNmaWVkIFhwIGFuZCBYcQorKyAqIGFyZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIHByZXZpb3Vz IGZ1bmN0aW9uIGFuZCBzdXBwbGllZCBhcyBpbnB1dC4KKysgKi8KKysKKytpbnQgQk5fWDkzMV9n ZW5lcmF0ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCisrCQkJ QklHTlVNICpYcDEsIEJJR05VTSAqWHAyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAsCisrCQkJY29u c3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwKKysJCQlCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50 IHJldCA9IDA7CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwlpZiAoIVhwMSkKKysJCVhwMSA9 IEJOX0NUWF9nZXQoY3R4KTsKKysJaWYgKCFYcDIpCisrCQlYcDIgPSBCTl9DVFhfZ2V0KGN0eCk7 CisrCisrCWlmICghQk5fcmFuZChYcDEsIDEwMSwgMCwgMCkpCisrCQlnb3RvIGVycm9yOworKwlp ZiAoIUJOX3JhbmQoWHAyLCAxMDEsIDAsIDApKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFCTl9Y OTMxX2Rlcml2ZV9wcmltZV9leChwLCBwMSwgcDIsIFhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikp CisrCQlnb3RvIGVycm9yOworKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysJQk5fQ1RYX2Vu ZChjdHgpOworKworKwlyZXR1cm4gcmV0OworKworKwl9CisrCitkaWZmIC11cCBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vYm4vTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vYm4vTWFr ZWZpbGUKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vYm4vTWFrZWZpbGUuZmlwcwkyMDA4LTEx LTEyIDA5OjE5OjAyLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9i bi9NYWtlZmlsZQkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTI2LDEz ICsyNiwxMyBAQCBMSUJTUkM9CWJuX2FkZC5jIGJuX2Rpdi5jIGJuX2V4cC5jIGJuX2xpCisgCWJu X3ByaW50LmMgYm5fcmFuZC5jIGJuX3NoaWZ0LmMgYm5fd29yZC5jIGJuX2JsaW5kLmMgXAorIAli bl9rcm9uLmMgYm5fc3FydC5jIGJuX2djZC5jIGJuX3ByaW1lLmMgYm5fZXJyLmMgYm5fc3FyLmMg Ym5fYXNtLmMgXAorIAlibl9yZWNwLmMgYm5fbW9udC5jIGJuX21waS5jIGJuX2V4cDIuYyBibl9n ZjJtLmMgYm5fbmlzdC5jIFwKKy0JYm5fZGVwci5jIGJuX2NvbnN0LmMKKysJYm5fZGVwci5jIGJu X2NvbnN0LmMgYm5feDkzMXAuYworIAorIExJQk9CSj0JYm5fYWRkLm8gYm5fZGl2Lm8gYm5fZXhw Lm8gYm5fbGliLm8gYm5fY3R4Lm8gYm5fbXVsLm8gYm5fbW9kLm8gXAorIAlibl9wcmludC5vIGJu X3JhbmQubyBibl9zaGlmdC5vIGJuX3dvcmQubyBibl9ibGluZC5vIFwKKyAJYm5fa3Jvbi5vIGJu X3NxcnQubyBibl9nY2QubyBibl9wcmltZS5vIGJuX2Vyci5vIGJuX3Nxci5vICQoQk5fQVNNKSBc CisgCWJuX3JlY3AubyBibl9tb250Lm8gYm5fbXBpLm8gYm5fZXhwMi5vIGJuX2dmMm0ubyBibl9u aXN0Lm8gXAorLQlibl9kZXByLm8gYm5fY29uc3QubworKwlibl9kZXByLm8gYm5fY29uc3QubyBi bl94OTMxcC5vCisgCisgU1JDPSAkKExJQlNSQykKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9jYW1lbGxpYS9hc20vY21sbC14ODYucGwuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vY2FtZWxsaWEvYXNtL2NtbGwteDg2LnBsCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Nh bWVsbGlhL2FzbS9jbWxsLXg4Ni5wbC5maXBzCTIwMDktMDQtMDYgMTY6MjU6MDIuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5w bAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTcyMiwxMiArNzIyLDE1 IEBAIG15ICRiaWFzPWludChAVFswXSk/c2hpZnQoQFQpOjA7CisgfQorICZmdW5jdGlvbl9lbmQo IkNhbWVsbGlhX0VrZXlnZW4iKTsKKyAKKyskc2V0a2V5ZnVuYyA9ICJDYW1lbGxpYV9zZXRfa2V5 IjsKKyskc2V0a2V5ZnVuYyA9ICJwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkiIGlmICgkRU5We0ZJ UFN9IG5lICIiKTsKKysKKyBpZiAoJE9QRU5TU0wpIHsKKyAjIGludCBDYW1lbGxpYV9zZXRfa2V5 ICgKKyAjCQljb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LAorICMJCWludCBiaXRzLAorICMJ CUNBTUVMTElBX0tFWSAqa2V5KQorLSZmdW5jdGlvbl9iZWdpbl9CKCJDYW1lbGxpYV9zZXRfa2V5 Iik7CisrJmZ1bmN0aW9uX2JlZ2luX0IoJHNldGtleWZ1bmMpOworIAkmcHVzaAkoImVieCIpOwor IAkmbW92CSgiZWN4Iiwmd3BhcmFtKDApKTsJIyBwdWxsIGFyZ3VtZW50cworIAkmbW92CSgiZWJ4 Iiwmd3BhcmFtKDEpKTsKK0BAIC03NjAsNyArNzYzLDcgQEAgaWYgKCRPUEVOU1NMKSB7CisgJnNl dF9sYWJlbCgiZG9uZSIsNCk7CisgCSZwb3AJKCJlYngiKTsKKyAJJnJldAkoKTsKKy0mZnVuY3Rp b25fZW5kX0IoIkNhbWVsbGlhX3NldF9rZXkiKTsKKysmZnVuY3Rpb25fZW5kX0IoJHNldGtleWZ1 bmMpOworIH0KKyAKKyBAU0JPWD0oCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2Ft ZWxsaWEvY2FtZWxsaWEuaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9jYW1l bGxpYS5oCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhLmguZmlw cwkyMDEwLTA2LTA0IDEyOjI1OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAw ICswMjAwCitAQCAtODgsNiArODgsMTEgQEAgc3RydWN0IGNhbWVsbGlhX2tleV9zdCAKKyAJfTsK KyB0eXBlZGVmIHN0cnVjdCBjYW1lbGxpYV9rZXlfc3QgQ0FNRUxMSUFfS0VZOworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2ln bmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorKwlDQU1FTExJQV9LRVkgKmtleSk7 CisrI2VuZGlmCisrCisgaW50IENhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAq dXNlcktleSwgY29uc3QgaW50IGJpdHMsCisgCUNBTUVMTElBX0tFWSAqa2V5KTsKKyAKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYy5maXBzIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYworLS0tIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAw MDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2NhbWVsbGlhL2NtbGxfZmJs ay5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDY4IEBA CisrLyogY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhX21pc2MuYyAtKi0gbW9kZTpDOyBjLWZpbGUt c3R5bGU6ICJlYXkiIC0qLSAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq CisrICovCisrIAorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvY2FtZWxsaWEuaD4KKysjaW5jbHVkZSAiY21sbF9sb2NsLmgiCisrI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjZW5kaWYKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IENhbWVsbGlh X3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisr CUNBTUVMTElBX0tFWSAqa2V5KQorKwl7CisrCWlmIChGSVBTX21vZGUoKSkKKysJCUZJUFNfQkFE X0FCT1JUKENBTUVMTElBKQorKwlyZXR1cm4gcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KHVzZXJL ZXksIGJpdHMsIGtleSk7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1l bGxpYS9jbWxsX21pc2MuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9jbWxs X21pc2MuYy5maXBzCTIwMDgtMTAtMjggMTM6MTM6NTIuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2NhbWVsbGlhL2NtbGxfbWlzYy5jCTIwMTAtMDYtMDQgMTI6MjU6 MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNTIsMTEgKzUyLDIwIEBACisgI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbHYuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9jYW1lbGxpYS5oPgorICNpbmNsdWRl ICJjbWxsX2xvY2wuaCIKKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIGNvbnN0 IGNoYXIgQ0FNRUxMSUFfdmVyc2lvbltdPSJDQU1FTExJQSIgT1BFTlNTTF9WRVJTSU9OX1BURVhU OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5 KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorKwlDQU1FTExJ QV9LRVkgKmtleSkKKysjZWxzZQorIGludCBDYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVk IGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorIAlDQU1FTExJQV9LRVkgKmtleSkKKysj ZW5kaWYKKyAJeworIAlpZighdXNlcktleSB8fCAha2V5KQorIAkJcmV0dXJuIC0xOworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2NhbWVsbGlhL01ha2VmaWxlLmZpcHMJMjAwOC0xMi0yMyAxMjozMzowMC4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2FtZWxsaWEvTWFrZWZpbGUJMjAxMC0wNi0w NCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMyw5ICsyMyw5IEBAIEFQUFM9CisgCisg TElCPSQoVE9QKS9saWJjcnlwdG8uYQorIExJQlNSQz1jYW1lbGxpYS5jIGNtbGxfbWlzYy5jIGNt bGxfZWNiLmMgY21sbF9jYmMuYyBjbWxsX29mYi5jIFwKKy0JICAgY21sbF9jZmIuYyBjbWxsX2N0 ci5jIAorKwkgICBjbWxsX2NmYi5jIGNtbGxfY3RyLmMgY21sbF9mYmxrLmMKKyAKKy1MSUJPQko9 IGNtbGxfZWNiLm8gY21sbF9vZmIubyBjbWxsX2NmYi5vIGNtbGxfY3RyLm8gJChDTUxMX0VOQykK KytMSUJPQko9IGNtbGxfZWNiLm8gY21sbF9vZmIubyBjbWxsX2NmYi5vIGNtbGxfY3RyLm8gJChD TUxMX0VOQykgY21sbF9mYmxrLm8KKyAKKyBTUkM9ICQoTElCU1JDKQorIAorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2Nhc3QvY2FzdC5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2Nhc3QvY2FzdC5oCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Nhc3QvY2FzdC5oLmZpcHMJ MjAxMC0wNi0wNCAxMjoyNToxNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vY2FzdC9jYXN0LmgJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BA IC04Myw3ICs4Myw5IEBAIHR5cGVkZWYgc3RydWN0IGNhc3Rfa2V5X3N0CisgCWludCBzaG9ydF9r ZXk7CS8qIFVzZSByZWR1Y2VkIHJvdW5kcyBmb3Igc2hvcnQga2V5ICovCisgCX0gQ0FTVF9LRVk7 CisgCistIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMgCisrdm9pZCBwcml2YXRlX0NBU1Rfc2V0X2tl eShDQVNUX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKysj ZW5kaWYKKyB2b2lkIENBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1 bnNpZ25lZCBjaGFyICpkYXRhKTsKKyB2b2lkIENBU1RfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgQ0FTVF9LRVkgKmtleSwKKyAJ CSAgICAgIGludCBlbmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Nhc3QvY19z a2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2FzdC9jX3NrZXkuYworLS0tIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9jYXN0L2Nfc2tleS5jLmZpcHMJMjAwMC0wNi0wMyAxNjoxMzozNS4w MDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2FzdC9jX3NrZXkuYwky MDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTU3LDYgKzU3LDExIEBACisg ICovCisgCisgI2luY2x1ZGUgPG9wZW5zc2wvY2FzdC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Ny eXB0by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2VuZGlmCisrCisgI2luY2x1ZGUgImNhc3RfbGNsLmgiCisgI2luY2x1ZGUgImNhc3Rfcy5o IgorIAorQEAgLTcyLDcgKzc3LDcgQEAKKyAjZGVmaW5lIFM2IENBU1RfU190YWJsZTYKKyAjZGVm aW5lIFM3IENBU1RfU190YWJsZTcKKyAKKy12b2lkIENBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5 LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorK0ZJUFNfTk9OX0ZJUFNfVkNJ UEhFUl9Jbml0KENBU1QpCisgCXsKKyAJQ0FTVF9MT05HIHhbMTZdOworIAlDQVNUX0xPTkcgelsx Nl07CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY3J5cHRvLmguZmlwcyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vY3J5cHRvLmgKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY3J5cHRv LmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9jcnlwdG8uaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIw MAorQEAgLTU0NywxMiArNTQ3LDcwIEBAIHVuc2lnbmVkIGxvbmcgKk9QRU5TU0xfaWEzMmNhcF9s b2Modm9pZCkKKyAjZGVmaW5lIE9QRU5TU0xfaWEzMmNhcCAoKihPUEVOU1NMX2lhMzJjYXBfbG9j KCkpKQorIGludCBPUEVOU1NMX2lzc2VydmljZSh2b2lkKTsKKyAKKysKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrI2RlZmluZSBGSVBTX0VSUk9SX0lHTk9SRUQoYWxnKSBPcGVuU1NMRGllKF9fRklM RV9fLCBfX0xJTkVfXywgXAorKwkJYWxnICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxnb3Jp dGhtIGVycm9yIGlnbm9yZWQiKTsKKysKKysjZGVmaW5lIEZJUFNfQkFEX0FCT1JUKGFsZykgT3Bl blNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKysJCSNhbGcgIiBBbGdvcml0aG0gZm9yYmlk ZGVuIGluIEZJUFMgbW9kZSIpOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFNfU1RSSUNUCisrI2Rl ZmluZSBGSVBTX0JBRF9BTEdPUklUSE0oYWxnKSBGSVBTX0JBRF9BQk9SVChhbGcpCisrI2Vsc2UK KysjZGVmaW5lIEZJUFNfQkFEX0FMR09SSVRITShhbGcpIFwKKysJeyBcCisrCUZJUFNlcnIoRklQ U19GX0hBU0hfRklOQUwsRklQU19SX05PTl9GSVBTX01FVEhPRCk7IFwKKysJRVJSX2FkZF9lcnJv cl9kYXRhKDIsICJBbGdvcml0aG09IiwgI2FsZyk7IFwKKysJcmV0dXJuIDA7IFwKKysJfQorKyNl bmRpZgorKworKy8qIExvdyBsZXZlbCBkaWdlc3QgQVBJIGJsb2NraW5nIG1hY3JvICovCisrCisr I2RlZmluZSBGSVBTX05PTl9GSVBTX01EX0luaXQoYWxnKSBcCisrCWludCBhbGcjI19Jbml0KGFs ZyMjX0NUWCAqYykgXAorKwkJeyBcCisrCQlpZiAoRklQU19tb2RlKCkpIFwKKysJCQlGSVBTX0JB RF9BTEdPUklUSE0oYWxnKSBcCisrCQlyZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7IFwK KysJCX0gXAorKwlpbnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQoYWxnIyNfQ1RYICpjKQorKworKy8q IEZvciBjaXBoZXJzIHRoZSBBUEkgb2Z0ZW4gdmFyaWVzIGZyb20gY2lwaGVyIHRvIGNpcGhlciBh bmQgZWFjaCBuZWVkcyB0bworKyAqIGJlIHRyZWF0ZWQgYXMgYSBzcGVjaWFsIGNhc2UuIFZhcmlh YmxlIGtleSBsZW5ndGggY2lwaGVycyAoQmxvd2Zpc2gsIFJDNCwKKysgKiBDQVNUKSBob3dldmVy IGFyZSB2ZXJ5IHNpbWlsYXIgYW5kIGNhbiB1c2UgYSBibG9ja2luZyBtYWNyby4KKysgKi8KKysK KysjZGVmaW5lIEZJUFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0KGFsZykgXAorKwl2b2lkIGFsZyMj X3NldF9rZXkoYWxnIyNfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRh dGEpIFwKKysJCXsgXAorKwkJaWYgKEZJUFNfbW9kZSgpKSBcCisrCQkJRklQU19CQURfQUJPUlQo YWxnKSBcCisrCQlwcml2YXRlXyMjYWxnIyNfc2V0X2tleShrZXksIGxlbiwgZGF0YSk7IFwKKysJ CX0gXAorKwl2b2lkIHByaXZhdGVfIyNhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQg bGVuLCBcCisrCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKworKyNlbHNlCisrCisr I2RlZmluZSBGSVBTX05PTl9GSVBTX1ZDSVBIRVJfSW5pdChhbGcpIFwKKysJdm9pZCBhbGcjI19z ZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRh KQorKworKyNkZWZpbmUgRklQU19OT05fRklQU19NRF9Jbml0KGFsZykgXAorKwlpbnQgYWxnIyNf SW5pdChhbGcjI19DVFggKmMpIAorKworKyNlbmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBTICovCisr CisgLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KKyAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBh dXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcworICAqIG1h ZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlz IG5leHQgcnVuLgorICAqLworIHZvaWQgRVJSX2xvYWRfQ1JZUFRPX3N0cmluZ3Modm9pZCk7Cisg CisrI2RlZmluZSBPUEVOU1NMX0hBVkVfSU5JVAkxCisrdm9pZCBPUEVOU1NMX2luaXRfbGlicmFy eSh2b2lkKTsKKysKKyAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIENSWVBUTyBmdW5jdGlvbnMuICov CisgCisgLyogRnVuY3Rpb24gY29kZXMuICovCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZGgvZGhfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgvZGhfZXJyLmMKKy0t LSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgvZGhfZXJyLmMuZmlwcwkyMDA2LTExLTIxIDIyOjI5 OjM3LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kaC9kaF9lcnIu YwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTczLDYgKzczLDggQEAg c3RhdGljIEVSUl9TVFJJTkdfREFUQSBESF9zdHJfZnVuY3RzW109Cisge0VSUl9GVU5DKERIX0Zf Q09NUFVURV9LRVkpLAkiQ09NUFVURV9LRVkifSwKKyB7RVJSX0ZVTkMoREhfRl9ESFBBUkFNU19Q UklOVF9GUCksCSJESHBhcmFtc19wcmludF9mcCJ9LAorIHtFUlJfRlVOQyhESF9GX0RIX0JVSUxU SU5fR0VOUEFSQU1TKSwJIkRIX0JVSUxUSU5fR0VOUEFSQU1TIn0sCisre0VSUl9GVU5DKERIX0Zf REhfQ09NUFVURV9LRVkpLAkiREhfY29tcHV0ZV9rZXkifSwKKyt7RVJSX0ZVTkMoREhfRl9ESF9H RU5FUkFURV9LRVkpLAkiREhfZ2VuZXJhdGVfa2V5In0sCisge0VSUl9GVU5DKERIX0ZfREhfTkVX X01FVEhPRCksCSJESF9uZXdfbWV0aG9kIn0sCisge0VSUl9GVU5DKERIX0ZfREhfUEFSQU1fREVD T0RFKSwJIkRIX1BBUkFNX0RFQ09ERSJ9LAorIHtFUlJfRlVOQyhESF9GX0RIX1BSSVZfREVDT0RF KSwJIkRIX1BSSVZfREVDT0RFIn0sCitAQCAtOTQsNiArOTYsNyBAQCBzdGF0aWMgRVJSX1NUUklO R19EQVRBIERIX3N0cl9yZWFzb25zW109Cisge0VSUl9SRUFTT04oREhfUl9CTl9FUlJPUikgICAg ICAgICAgICAgICAsImJuIGVycm9yIn0sCisge0VSUl9SRUFTT04oREhfUl9ERUNPREVfRVJST1Ip ICAgICAgICAgICAsImRlY29kZSBlcnJvciJ9LAorIHtFUlJfUkVBU09OKERIX1JfSU5WQUxJRF9Q VUJLRVkpICAgICAgICAgLCJpbnZhbGlkIHB1YmxpYyBrZXkifSwKKyt7RVJSX1JFQVNPTihESF9S X0tFWV9TSVpFX1RPT19TTUFMTCkgICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCisge0VSUl9S RUFTT04oREhfUl9LRVlTX05PVF9TRVQpICAgICAgICAgICAsImtleXMgbm90IHNldCJ9LAorIHtF UlJfUkVBU09OKERIX1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAgLCJtb2R1bHVzIHRvbyBsYXJn ZSJ9LAorIHtFUlJfUkVBU09OKERIX1JfTk9fUEFSQU1FVEVSU19TRVQpICAgICAgLCJubyBwYXJh bWV0ZXJzIHNldCJ9LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RoL2RoX2dlbi5j LmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RoL2RoX2dlbi5jCistLS0gb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJMjAwNS0wNC0yNiAyMDo1MzoxNS4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgvZGhfZ2VuLmMJMjAxMC0wNi0wNCAx MjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02NSw2ICs2NSwxMCBAQAorICNpbmNsdWRlICJj cnlwdGxpYi5oIgorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wv ZGguaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHN0YXRpYyBpbnQgZGhfYnVp bHRpbl9nZW5wYXJhbXMoREggKnJldCwgaW50IHByaW1lX2xlbiwgaW50IGdlbmVyYXRvciwgQk5f R0VOQ0IgKmNiKTsKKyAKK0BAIC0xMDYsNiArMTEwLDIwIEBAIHN0YXRpYyBpbnQgZGhfYnVpbHRp bl9nZW5wYXJhbXMoREggKnJldCwKKyAJaW50IGcsb2s9IC0xOworIAlCTl9DVFggKmN0eD1OVUxM OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkK KysJCXsKKysJCUZJUFNlcnIoRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJaWYgKEZJUFNfbW9k ZSgpICYmIChwcmltZV9sZW4gPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisr CQl7CisrCQlESGVycihESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLCBESF9SX0tFWV9TSVpFX1RP T19TTUFMTCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJY3R4PUJOX0NUWF9u ZXcoKTsKKyAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgvZGguaC5maXBzIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9kaC9kaC5oCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RoL2RoLmguZmlw cwkyMDEwLTA2LTA0IDEyOjI1OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9kaC9kaC5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAt NzcsNiArNzcsOCBAQAorICMgZGVmaW5lIE9QRU5TU0xfREhfTUFYX01PRFVMVVNfQklUUwkxMDAw MAorICNlbmRpZgorIAorKyNkZWZpbmUgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMg MTAyNAorKworICNkZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKKyAjZGVmaW5l IERIX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1 aWx0LWluIERICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBs ZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCitAQCAtMjQxLDYgKzI0Myw4IEBAIHZv aWQgRVJSX2xvYWRfREhfc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIERIX0ZfR0VORVJBVEVfUEFS QU1FVEVSUwkJCSAxMDQKKyAjZGVmaW5lIERIX0ZfUEtFWV9ESF9ERVJJVkUJCQkJIDExMgorICNk ZWZpbmUgREhfRl9QS0VZX0RIX0tFWUdFTgkJCQkgMTEzCisrI2RlZmluZSBESF9GX0RIX0NPTVBV VEVfS0VZCQkJCSAxMTQKKysjZGVmaW5lIERIX0ZfREhfR0VORVJBVEVfS0VZCQkJIDExNQorIAor IC8qIFJlYXNvbiBjb2Rlcy4gKi8KKyAjZGVmaW5lIERIX1JfQkFEX0dFTkVSQVRPUgkJCQkgMTAx CitAQCAtMjUzLDYgKzI1Nyw3IEBAIHZvaWQgRVJSX2xvYWRfREhfc3RyaW5ncyh2b2lkKTsKKyAj ZGVmaW5lIERIX1JfTk9fUEFSQU1FVEVSU19TRVQJCQkJIDEwNworICNkZWZpbmUgREhfUl9OT19Q UklWQVRFX1ZBTFVFCQkJCSAxMDAKKyAjZGVmaW5lIERIX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VS Uk9SCQkJIDEwNQorKyNkZWZpbmUgREhfUl9LRVlfU0laRV9UT09fU01BTEwJCQkJIDExMAorIAor ICNpZmRlZiAgX19jcGx1c3BsdXMKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v ZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgvZGhfa2V5LmMKKy0tLSBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjIz LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kaC9kaF9rZXkuYwky MDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTYxLDYgKzYxLDkgQEAKKyAj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAjaW5j bHVkZSA8b3BlbnNzbC9kaC5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRo KTsKKyBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgQklH TlVNICpwdWJfa2V5LCBESCAqZGgpOworQEAgLTEwNyw2ICsxMTAsMTQgQEAgc3RhdGljIGludCBn ZW5lcmF0ZV9rZXkoREggKmRoKQorIAlCTl9NT05UX0NUWCAqbW9udD1OVUxMOworIAlCSUdOVU0g KnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIoREhfRl9HRU5FUkFURV9LRVksIERI X1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgorKwor IAljdHggPSBCTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7CisgCitA QCAtMTg0LDYgKzE5NSwxMyBAQCBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIg KmtlCisgCQlESGVycihESF9GX0NPTVBVVEVfS0VZLERIX1JfTU9EVUxVU19UT09fTEFSR0UpOwor IAkJZ290byBlcnI7CisgCQl9CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2Rl KCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19C SVRTKSkKKysJCXsKKysJCURIZXJyKERIX0ZfQ09NUFVURV9LRVksIERIX1JfS0VZX1NJWkVfVE9P X1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorIAorIAljdHggPSBCTl9DVFhf bmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7CitAQCAtMjUxLDYgKzI2OSw5IEBA IHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25zdCBESCAqZGgsIEIKKyAKKyBzdGF0aWMgaW50 IGRoX2luaXQoREggKmRoKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0 ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWRoLT5mbGFncyB8PSBESF9GTEFHX0NBQ0hFX01PTlRf UDsKKyAJcmV0dXJuKDEpOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNh L2RzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kc2EvZHNhX2dlbi5jCistLS0g b3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwkyMDA4LTEyLTI2IDE4OjE3 OjIxLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kc2EvZHNhX2dl bi5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNzcsOCArNzcsMTIg QEAKKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorICNpbmNs dWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorICNpbmNs dWRlICJkc2FfbG9jbC5oIgorIAorIGludCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0Eg KnJldCwgaW50IGJpdHMsCitAQCAtMTI2LDYgKzEzMCwyMSBAQCBpbnQgZHNhX2J1aWx0aW5fcGFy YW1nZW4oRFNBICpyZXQsIHNpemVfCisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCXVuc2lnbmVkIGlu dCBoPTI7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxl ZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4s CisrCQkgICAgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIGdvdG8gZXJyOwor KwkgICAgfQorKworKwlpZiAoRklQU19tb2RlKCkgJiYgKGJpdHMgPCBPUEVOU1NMX0RTQV9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX1BB UkFNR0VOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJZ290byBlcnI7CisrCQl9Cisr I2VuZGlmCisrCisgCWlmIChxc2l6ZSAhPSBTSEFfRElHRVNUX0xFTkdUSCAmJiBxc2l6ZSAhPSBT SEEyMjRfRElHRVNUX0xFTkdUSCAmJgorIAkgICAgcXNpemUgIT0gU0hBMjU2X0RJR0VTVF9MRU5H VEgpCisgCQkvKiBpbnZhbGlkIHEgc2l6ZSAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2RzYS9kc2EuaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kc2EvZHNhLmgKKy0tLSBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYS5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4w MDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYS5oCTIwMTAt MDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtODgsNiArODgsOCBAQAorICMgZGVm aW5lIE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKKyAjZW5kaWYKKyAKKysjZGVm aW5lIE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0CisrCisgI2RlZmluZSBE U0FfRkxBR19DQUNIRV9NT05UX1AJMHgwMQorICNkZWZpbmUgRFNBX0ZMQUdfTk9fRVhQX0NPTlNU VElNRSAgICAgICAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERTQQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGltcGxlbWVudGF0 aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKK0BAIC05Nyw2ICs5OSwyMSBAQAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlIHVzZWQgZm9yIGFsbCBl eHBvbmVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICovCisgCisrLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgRFNBIG1ldGhvZCBpcyBGSVBTIGNv bXBsaWFudCBhbmQgY2FuIGJlIHVzZWQKKysgKiBpbiBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0IGlu IHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1ldGhvZC4gSWYgYW4KKysgKiBhcHBsaWNhdGlvbiBzZXRz IHRoaXMgZmxhZyBpbiBpdHMgb3duIG1ldGhvZHMgaXQgaXMgaXRzIHJlcG9zaWJpbGl0eQorKyAq IHRvIGVuc3VyZSB0aGUgcmVzdWx0IGlzIGNvbXBsaWFudC4KKysgKi8KKysKKysjZGVmaW5lIERT QV9GTEFHX0ZJUFNfTUVUSE9ECQkJMHgwNDAwCisrCisrLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0 aGUgb3BlcmF0aW9ucyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCisrICogcGVy bWl0dGVkIGl0IGlzIHRoZW4gdGhlIGFwcGxpY2F0aW9ucyByZXNwb25zaWJpbGl0eSB0byBlbnN1 cmUgdGhhdCB0aGUKKysgKiB1c2FnZSBpcyBjb21wbGlhbnQuCisrICovCisrCisrI2RlZmluZSBE U0FfRkxBR19OT05fRklQU19BTExPVwkJCTB4MDQwMAorKworICNpZmRlZiAgX19jcGx1c3BsdXMK KyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC0yNzAsOCArMjg3LDExIEBAIHZvaWQgRVJSX2xv YWRfRFNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBEU0FfRl9ET19EU0FfUFJJTlQJCQkJIDEw NAorICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5UCQkJCSAxMDAKKyAjZGVmaW5lIERTQV9G X0RTQVBBUkFNU19QUklOVF9GUAkJCSAxMDEKKysjZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX0tF WUdFTgkJCSAxMjQKKysjZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEyMwor ICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1NJR04JCQkJIDExMgorICNkZWZpbmUgRFNBX0ZfRFNBX0RP X1ZFUklGWQkJCQkgMTEzCisrI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSUwkJ CSAxMjUKKyAjZGVmaW5lIERTQV9GX0RTQV9ORVdfTUVUSE9ECQkJCSAxMDMKKyAjZGVmaW5lIERT QV9GX0RTQV9QQVJBTV9ERUNPREUJCQkJIDExOQorICNkZWZpbmUgRFNBX0ZfRFNBX1BSSU5UX0ZQ CQkJCSAxMDUKK0BAIC0yOTYsOSArMzE2LDEyIEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Mo dm9pZCk7CisgI2RlZmluZSBEU0FfUl9EQVRBX1RPT19MQVJHRV9GT1JfS0VZX1NJWkUJCSAxMDAK KyAjZGVmaW5lIERTQV9SX0RFQ09ERV9FUlJPUgkJCQkgMTA0CisgI2RlZmluZSBEU0FfUl9JTlZB TElEX0RJR0VTVF9UWVBFCQkJIDEwNgorKyNkZWZpbmUgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxM CQkJIDExMAorICNkZWZpbmUgRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTCQkJIDEwMQorICNkZWZp bmUgRFNBX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwMworKyNkZWZpbmUgRFNBX1JfTk9OX0ZJ UFNfTUVUSE9ECQkJCSAxMTEKKyAjZGVmaW5lIERTQV9SX05PX1BBUkFNRVRFUlNfU0VUCQkJCSAx MDcKKysjZGVmaW5lIERTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDEx MgorICNkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJIDEwNQorIAorICNp ZmRlZiAgX19jcGx1c3BsdXMKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kc2EvZHNh X2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RzYS9kc2Ffa2V5LmMKKy0tLSBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzCTIwMDctMDMtMjggMDI6MTU6MjUu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RzYS9kc2Ffa2V5LmMJ MjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02Myw5ICs2Myw1NSBAQAor ICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisgI2lu Y2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorIAorIHN0YXRp YyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKTsKKyAKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCisrc3RhdGljIGludCBmaXBzX2RzYV9wYWlyd2lzZV9mYWlsID0gMDsKKysKKyt2b2lk IEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpCisrCXsKKysJZmlwc19kc2FfcGFpcndpc2Vf ZmFpbCA9IDE7CisrCX0KKysKKytpbnQgZmlwc19jaGVja19kc2EoRFNBICpkc2EpCisrCXsKKysJ RVZQX1BLRVkgKnBrOworKwl1bnNpZ25lZCBjaGFyIHRic1tdID0gIkRTQSBQYWlyd2lzZSBDaGVj ayBEYXRhIjsKKysJaW50IHJldCA9IDA7CisrCisrICAgIAlpZiAoKHBrPUVWUF9QS0VZX25ldygp KSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisrCUVWUF9QS0VZX3NldDFfRFNBKHBrLCBkc2Ep OworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKKysJCQkJ CU5VTEwsIDAsIEVWUF9zaGExKCksIDAsIE5VTEwpKQorKwkJZ290byBlcnI7CisrCisrCXJldCA9 IDE7CisrCisrZXJyOgorKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlmaXBzX3NldF9zZWxmdGVz dF9mYWlsKCk7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX0RTQSxGSVBTX1JfUEFJUldJ U0VfVEVTVF9GQUlMRUQpOworKwkJfQorKworKwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBr KTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgorKworIGludCBEU0FfZ2VuZXJhdGVf a2V5KERTQSAqZHNhKQorIAl7CisgCWlmKGRzYS0+bWV0aC0+ZHNhX2tleWdlbikKK0BAIC03OSw2 ICsxMjUsMTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCisgCUJO X0NUWCAqY3R4PU5VTEw7CisgCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxMOwor IAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0 cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJ CURTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFM TCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKChjdHg9Qk5fQ1RYX25l dygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKyAKKyAJaWYgKGRzYS0+cHJpdl9rZXkgPT0gTlVMTCkK K0BAIC0xMTcsNiArMTcxLDE1IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAq ZHNhKQorIAorIAlkc2EtPnByaXZfa2V5PXByaXZfa2V5OworIAlkc2EtPnB1Yl9rZXk9cHViX2tl eTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlm IChmaXBzX2RzYV9wYWlyd2lzZV9mYWlsKQorKwkJCUJOX2FkZF93b3JkKGRzYS0+cHViX2tleSwg MSk7CisrCQlpZighZmlwc19jaGVja19kc2EoZHNhKSkKKysJCSAgICBnb3RvIGVycjsKKysJCX0K KysjZW5kaWYKKyAJb2s9MTsKKyAKKyBlcnI6CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZHNhL2RzYV9vc3NsLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYV9vc3Ns LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcwkyMDA3LTAz LTI4IDAyOjE1OjI2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9k c2EvZHNhX29zc2wuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTY1 LDYgKzY1LDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9yYW5kLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3RhdGljIERTQV9T SUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkbGVuLCBEU0Eg KmRzYSk7Cisgc3RhdGljIGludCBkc2Ffc2lnbl9zZXR1cChEU0EgKmRzYSwgQk5fQ1RYICpjdHhf aW4sIEJJR05VTSAqKmtpbnZwLCBCSUdOVU0gKipycCk7CitAQCAtODIsNyArODUsNyBAQCBOVUxM LCAvKiBkc2FfbW9kX2V4cCwgKi8KKyBOVUxMLCAvKiBkc2FfYm5fbW9kX2V4cCwgKi8KKyBkc2Ff aW5pdCwKKyBkc2FfZmluaXNoLAorLTAsCisrRFNBX0ZMQUdfRklQU19NRVRIT0QsCisgTlVMTCwK KyBOVUxMLAorIE5VTEwKK0BAIC0xMzcsNiArMTQwLDIwIEBAIHN0YXRpYyBEU0FfU0lHICpkc2Ff ZG9fc2lnbihjb25zdCB1bnNpZ24KKyAJaW50IHJlYXNvbj1FUlJfUl9CTl9MSUI7CisgCURTQV9T SUcgKnJldD1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVz dF9mYWlsZWQoKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19TSUdOLEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gTlVMTDsKKysJICAgIH0K KysKKysJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9E U0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfRE9f U0lHTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVybiBOVUxMOworKwkJfQor KyNlbmRpZgorKworIAlCTl9pbml0KCZtKTsKKyAJQk5faW5pdCgmeHIpOworIAorQEAgLTMxMiw2 ICszMjksMjAgQEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkIAorIAkJ cmV0dXJuIC0xOworIAkJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJ RlksRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAtMTsKKysJICAg IH0KKysKKysJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNT TF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURTQWVycihEU0FfRl9EU0Ff RE9fVkVSSUZZLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJcmV0dXJuIC0xOworKwkJ fQorKyNlbmRpZgorKworIAlpID0gQk5fbnVtX2JpdHMoZHNhLT5xKTsKKyAJLyogZmlwcyAxODYt MyBhbGxvd3Mgb25seSBkaWZmZXJlbnQgc2l6ZXMgZm9yIHEgKi8KKyAJaWYgKGkgIT0gMTYwICYm IGkgIT0gMjI0ICYmIGkgIT0gMjU2KQorQEAgLTQwMyw2ICs0MzQsOSBAQCBzdGF0aWMgaW50IGRz YV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQgCisgCisgc3RhdGljIGludCBkc2FfaW5pdChEU0Eg KmRzYSkKKyB7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7 CisrI2VuZGlmCisgCWRzYS0+ZmxhZ3N8PURTQV9GTEFHX0NBQ0hFX01PTlRfUDsKKyAJcmV0dXJu KDEpOworIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9lcnIvZXJyX2FsbC5jLmZp cHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Vyci9lcnJfYWxsLmMKKy0tLSBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vZXJyL2Vycl9hbGwuYy5maXBzCTIwMDktMDgtMDkgMTY6NTg6MDUuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Vyci9lcnJfYWxsLmMJMjAxMC0wNi0w NCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC05Niw2ICs5Niw5IEBACisgI2luY2x1ZGUg PG9wZW5zc2wvb2NzcC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorICNpbmNsdWRlIDxv cGVuc3NsL3RzLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCisgI2luY2x1ZGUgPG9wZW5z c2wvY21zLmg+CisgI2VuZGlmCitAQCAtMTQ5LDYgKzE1Miw5IEBAIHZvaWQgRVJSX2xvYWRfY3J5 cHRvX3N0cmluZ3Modm9pZCkKKyAjZW5kaWYKKyAJRVJSX2xvYWRfT0NTUF9zdHJpbmdzKCk7Cisg CUVSUl9sb2FkX1VJX3N0cmluZ3MoKTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUVSUl9sb2Fk X0ZJUFNfc3RyaW5ncygpOworKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19DTVMKKyAJRVJS X2xvYWRfQ01TX3N0cmluZ3MoKTsKKyAjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9ldnAvZGlnZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2RpZ2VzdC5j CistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzCTIwMTAtMDMtMDUg MTQ6MzM6NDMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9k aWdlc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTExNiw2ICsx MTYsNyBAQAorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAjaW5jbHVkZSA8b3BlbnNzbC9l bmdpbmUuaD4KKyAjZW5kaWYKKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyB2b2lkIEVWUF9N RF9DVFhfaW5pdChFVlBfTURfQ1RYICpjdHgpCisgCXsKK0BAIC0xMzgsOSArMTM5LDUwIEBAIGlu dCBFVlBfRGlnZXN0SW5pdChFVlBfTURfQ1RYICpjdHgsIGNvbnMKKyAJcmV0dXJuIEVWUF9EaWdl c3RJbml0X2V4KGN0eCwgdHlwZSwgTlVMTCk7CisgCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0 dGVtcHQgdG8gdXNlIG5vbiBGSVBTCisrICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGln bm9yZSB0aGUgZXJyb3JzLgorKyAqLworKworK3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQX01EX0NU WCAqY3R4KQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IGluaXQiKTsgcmV0dXJuIDA7 fQorKworK3N0YXRpYyBpbnQgYmFkX3VwZGF0ZShFVlBfTURfQ1RYICpjdHgsY29uc3Qgdm9pZCAq ZGF0YSxzaXplX3QgY291bnQpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgdXBkYXRl Iik7IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50IGJhZF9maW5hbChFVlBfTURfQ1RYICpjdHgs dW5zaWduZWQgY2hhciAqbWQpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgRmluYWwi KTsgcmV0dXJuIDA7fQorKworK3N0YXRpYyBjb25zdCBFVlBfTUQgYmFkX21kID0KKysJeworKwkw LAorKwkwLAorKwkwLAorKwkwLAorKwliYWRfaW5pdCwKKysJYmFkX3VwZGF0ZSwKKysJYmFkX2Zp bmFsLAorKwlOVUxMLAorKwlOVUxMLAorKwlOVUxMLAorKwkwLAorKwl7MCwwLDAsMH0sCisrCX07 CisrCisrI2VuZGlmCisrCisgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwg Y29uc3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmltcGwpCisgCXsKKyAJRVZQX01EX0NUWF9jbGVh cl9mbGFncyhjdHgsRVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19G X0VWUF9ESUdFU1RJTklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQljdHgt PmRpZ2VzdCA9ICZiYWRfbWQ7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYKKyAjaWZuZGVm IE9QRU5TU0xfTk9fRU5HSU5FCisgCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRz IiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKKyAJICogc28gdGhpcyBjb250ZXh0 IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5nCitAQCAt MTk3LDYgKzIzOSwxOCBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBj CisgI2VuZGlmCisgCWlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKQorIAkJeworKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSkKKysJCQl7CisrCQkJaWYgKCEodHlwZS0+Zmxh Z3MgJiBFVlBfTURfRkxBR19GSVBTKSAKKysJCQkgJiYgIShjdHgtPmZsYWdzICYgRVZQX01EX0NU WF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJCQkJeworKwkJCQlFVlBlcnIoRVZQX0ZfRVZQX0RJ R0VTVElOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKysJCQkJY3R4LT5kaWdlc3Qg PSAmYmFkX21kOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCX0KKysjZW5kaWYKKyAJCWlm IChjdHgtPmRpZ2VzdCAmJiBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpCisgCQkJT1BFTlNTTF9mcmVl KGN0eC0+bWRfZGF0YSk7CisgCQljdHgtPmRpZ2VzdD10eXBlOworQEAgLTIzMCw2ICsyODQsOSBA QCBza2lwX3RvX2luaXQ6CisgCisgaW50IEVWUF9EaWdlc3RVcGRhdGUoRVZQX01EX0NUWCAqY3R4 LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJcmV0dXJuIGN0eC0+dXBk YXRlKGN0eCxkYXRhLGNvdW50KTsKKyAJfQorIAorQEAgLTI0Niw2ICszMDMsOSBAQCBpbnQgRVZQ X0RpZ2VzdEZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zCisgaW50IEVWUF9EaWdlc3RGaW5hbF9l eChFVlBfTURfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKnNpemUp CisgCXsKKyAJaW50IHJldDsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3Rf Y2hlY2soKTsKKysjZW5kaWYKKyAKKyAJT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3Np emUgPD0gRVZQX01BWF9NRF9TSVpFKTsKKyAJcmV0PWN0eC0+ZGlnZXN0LT5maW5hbChjdHgsbWQp OworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2V2cC9lX2Flcy5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2 cC9lX2Flcy5jLmZpcHMJMjAwNC0wMS0yOCAyMDowNTozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2VfYWVzLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAw MDAwMDAgKzAyMDAKK0BAIC02OSwzMiArNjksMjkgQEAgdHlwZWRlZiBzdHJ1Y3QKKyAKKyBJTVBM RU1FTlRfQkxPQ0tfQ0lQSEVSKGFlc18xMjgsIGtzLCBBRVMsIEVWUF9BRVNfS0VZLAorIAkJICAg ICAgIE5JRF9hZXNfMTI4LCAxNiwgMTYsIDE2LCAxMjgsCistCQkgICAgICAgMCwgYWVzX2luaXRf a2V5LCBOVUxMLCAKKy0JCSAgICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJICAgICAg IEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCistCQkgICAgICAgTlVMTCkKKysJCSAgICAgICBFVlBf Q0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkgICAgICAgYWVz X2luaXRfa2V5LAorKwkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCisgSU1QTEVNRU5U X0JMT0NLX0NJUEhFUihhZXNfMTkyLCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKKyAJCSAgICAgICBO SURfYWVzXzE5MiwgMTYsIDI0LCAxNiwgMTI4LAorLQkJICAgICAgIDAsIGFlc19pbml0X2tleSwg TlVMTCwgCistCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAgICAgICBFVlBf Q0lQSEVSX2dldF9hc24xX2l2LAorLQkJICAgICAgIE5VTEwpCisrCQkgICAgICAgRVZQX0NJUEhf RkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJICAgICAgIGFlc19pbml0 X2tleSwKKysJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorIElNUExFTUVOVF9CTE9D S19DSVBIRVIoYWVzXzI1Niwga3MsIEFFUywgRVZQX0FFU19LRVksCisgCQkgICAgICAgTklEX2Fl c18yNTYsIDE2LCAzMiwgMTYsIDEyOCwKKy0JCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEws IAorLQkJICAgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkgICAgICAgRVZQX0NJUEhF Ul9nZXRfYXNuMV9pdiwKKy0JCSAgICAgICBOVUxMKQorLQorLSNkZWZpbmUgSU1QTEVNRU5UX0FF U19DRkJSKGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihhZXMsQUVTLEVWUF9BRVNfS0VZLGtz LGtzaXplLGNiaXRzLDE2KQorLQorLUlNUExFTUVOVF9BRVNfQ0ZCUigxMjgsMSkKKy1JTVBMRU1F TlRfQUVTX0NGQlIoMTkyLDEpCistSU1QTEVNRU5UX0FFU19DRkJSKDI1NiwxKQorLQorLUlNUExF TUVOVF9BRVNfQ0ZCUigxMjgsOCkKKy1JTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDgpCistSU1QTEVN RU5UX0FFU19DRkJSKDI1Niw4KQorKwkJICAgICAgIEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQ SF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAgICBhZXNfaW5pdF9rZXksCisrCQkgICAgICAg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKKysKKysjZGVmaW5lIElNUExFTUVOVF9BRVNfQ0ZCUihr c2l6ZSxjYml0cyxmbGFncykJSU1QTEVNRU5UX0NGQlIoYWVzLEFFUyxFVlBfQUVTX0tFWSxrcyxr c2l6ZSxjYml0cywxNixmbGFncykKKysKKytJTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDEsRVZQX0NJ UEhfRkxBR19GSVBTKQorK0lNUExFTUVOVF9BRVNfQ0ZCUigxOTIsMSxFVlBfQ0lQSF9GTEFHX0ZJ UFMpCisrSU1QTEVNRU5UX0FFU19DRkJSKDI1NiwxLEVWUF9DSVBIX0ZMQUdfRklQUykKKysKKytJ TVBMRU1FTlRfQUVTX0NGQlIoMTI4LDgsRVZQX0NJUEhfRkxBR19GSVBTKQorK0lNUExFTUVOVF9B RVNfQ0ZCUigxOTIsOCxFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrSU1QTEVNRU5UX0FFU19DRkJSKDI1 Niw4LEVWUF9DSVBIX0ZMQUdfRklQUykKKyAKKyBzdGF0aWMgaW50IGFlc19pbml0X2tleShFVlBf Q0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgCQkgICBjb25zdCB1 bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9ldnAvZV9jYW1lbGxpYS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9lX2NhbWVs bGlhLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYy5maXBzCTIw MDYtMDgtMzEgMjI6NTY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2V2cC9lX2NhbWVsbGlhLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAK K0BAIC05Myw3ICs5Myw3IEBAIElNUExFTUVOVF9CTE9DS19DSVBIRVIoY2FtZWxsaWFfMjU2LCBr cywKKyAJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKyAJTlVMTCkKKyAKKy0jZGVmaW5lIElNUExF TUVOVF9DQU1FTExJQV9DRkJSKGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihjYW1lbGxpYSxD YW1lbGxpYSxFVlBfQ0FNRUxMSUFfS0VZLGtzLGtzaXplLGNiaXRzLDE2KQorKyNkZWZpbmUgSU1Q TEVNRU5UX0NBTUVMTElBX0NGQlIoa3NpemUsY2JpdHMpCUlNUExFTUVOVF9DRkJSKGNhbWVsbGlh LENhbWVsbGlhLEVWUF9DQU1FTExJQV9LRVksa3Msa3NpemUsY2JpdHMsMTYsMCkKKyAKKyBJTVBM RU1FTlRfQ0FNRUxMSUFfQ0ZCUigxMjgsMSkKKyBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUigxOTIs MSkKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZXZwL2VfZGVzMy5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2V2cC9lX2RlczMuYy5maXBzCTIwMDgtMTItMjkgMTM6MzU6NDcuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9lX2RlczMuYwkyMDEwLTA2LTA0IDEyOjI1OjE1 LjAwMDAwMDAwMCArMDIwMAorQEAgLTIwNiw5ICsyMDYsOSBAQCBzdGF0aWMgaW50IGRlc19lZGUz X2NmYjhfY2lwaGVyKEVWUF9DSVBICisgICAgIH0KKyAKKyBCTE9DS19DSVBIRVJfZGVmcyhkZXNf ZWRlLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUsIDgsIDE2LCA4LCA2NCwKKy0JCQlFVlBfQ0lQ SF9SQU5EX0tFWSwgZGVzX2VkZV9pbml0X2tleSwgTlVMTCwgCistCQkJRVZQX0NJUEhFUl9zZXRf YXNuMV9pdiwKKy0JCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorKwkJRVZQX0NJUEhfUkFORF9L RVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJCWRl c19lZGVfaW5pdF9rZXksCisrCQkJTlVMTCwgTlVMTCwgTlVMTCwKKyAJCQlkZXMzX2N0cmwpCisg CisgI2RlZmluZSBkZXNfZWRlM19jZmI2NF9jaXBoZXIgZGVzX2VkZV9jZmI2NF9jaXBoZXIKK0BA IC0yMTcsMjEgKzIxNywyMSBAQCBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tF WSwgCisgI2RlZmluZSBkZXNfZWRlM19lY2JfY2lwaGVyIGRlc19lZGVfZWNiX2NpcGhlcgorIAor IEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUzLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUzLCA4 LCAyNCwgOCwgNjQsCistCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LCBO VUxMLCAKKy0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJCUVWUF9DSVBIRVJfZ2V0X2Fz bjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhf RkxBR19ERUZBVUxUX0FTTjEsCisrCQkJZGVzX2VkZTNfaW5pdF9rZXksCisrCQkJTlVMTCwgTlVM TCwgTlVMTCwKKyAJCQlkZXMzX2N0cmwpCisgCisgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2Vk ZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsMSwKKy0JCSAgICAgRVZQX0NJUEhfUkFO RF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCistCQkgICAgIEVWUF9DSVBIRVJfc2V0X2Fz bjFfaXYsCistCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5E X0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkg ICAgIGRlc19lZGUzX2luaXRfa2V5LAorKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAorIAkJICAg ICBkZXMzX2N0cmwpCisgCisgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9L RVksTklEX2Rlc19lZGUzLDI0LDgsOCwKKy0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19l ZGUzX2luaXRfa2V5LE5VTEwsCistCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkg ICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQ SF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkgICAgIGRlc19lZGUz X2luaXRfa2V5LAorKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAorIAkJICAgICBkZXMzX2N0cmwp CisgCisgc3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9l dnAvZV9udWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2VfbnVsbC5jCistLS0g b3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzCTIwMDgtMTAtMzEgMjA6NDg6 MjQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9lX251bGwu YwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTY5LDcgKzY5LDcgQEAg c3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgbl9jaXBoZXI9CisgCXsKKyAJTklEX3VuZGVmLAorIAkx LDAsMCwKKy0JMCwKKysJRVZQX0NJUEhfRkxBR19GSVBTLAorIAludWxsX2luaXRfa2V5LAorIAlu dWxsX2NpcGhlciwKKyAJTlVMTCwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAv ZV9yYzQuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZV9yYzQuYworLS0tIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9ldnAvZV9yYzQuYy5maXBzCTIwMDgtMTAtMzEgMjA6NDg6MjQuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9lX3JjNC5jCTIwMTAt MDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNjQsNiArNjQsNyBAQAorICNpbmNs dWRlIDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5j bHVkZSA8b3BlbnNzbC9yYzQuaD4KKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyAvKiBGSVhN RTogc3VyZWx5IHRoaXMgaXMgYXZhaWxhYmxlIGVsc2V3aGVyZT8gKi8KKyAjZGVmaW5lIEVWUF9S QzRfS0VZX1NJWkUJCTE2CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2cF9l bmMuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwX2VuYy5jCistLS0gb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcwkyMDEwLTAzLTAxIDAyOjUyOjQ3LjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwX2VuYy5jCTIw MTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNjgsOCArNjgsNTMgQEAKKyAK KyBjb25zdCBjaGFyIEVWUF92ZXJzaW9uW109IkVWUCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwor IAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0 byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKKysgKiBhbGdvcml0 aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCisrICovCisrCisrc3RhdGlj IGludCBiYWRfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpr ZXksCisrCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCisrCXsgRklQU19F UlJPUl9JR05PUkVEKCJDaXBoZXIgaW5pdCIpOyByZXR1cm4gMDt9CisrCisrc3RhdGljIGludCBi YWRfZG9fY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKysJ CQkgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisrCXsgRklQU19F UlJPUl9JR05PUkVEKCJDaXBoZXIgdXBkYXRlIik7IHJldHVybiAwO30KKysKKysvKiBOQjogbm8g Y2xlYW51cCBiZWNhdXNlIGl0IGlzIGFsbG93ZWQgYWZ0ZXIgZmFpbGVkIGluaXQgKi8KKysKKytz dGF0aWMgaW50IGJhZF9zZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5 cCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBzZXRfYXNuMSIpOyByZXR1cm4gMDt9 Cisrc3RhdGljIGludCBiYWRfZ2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBF ICp0eXApCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgZ2V0X2FzbjEiKTsgcmV0dXJu IDA7fQorK3N0YXRpYyBpbnQgYmFkX2N0cmwoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IHR5cGUs IGludCBhcmcsIHZvaWQgKnB0cikKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBjdHJs Iik7IHJldHVybiAwO30KKysKKytzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0K KysJeworKwkwLAorKwkwLAorKwkwLAorKwkwLAorKwkwLAorKwliYWRfaW5pdCwKKysJYmFkX2Rv X2NpcGhlciwKKysJTlVMTCwKKysJMCwKKysJYmFkX3NldF9hc24xLAorKwliYWRfZ2V0X2FzbjEs CisrCWJhZF9jdHJsLAorKwlOVUxMCisrCX07CisrCisrI2VuZGlmCisrCisgdm9pZCBFVlBfQ0lQ SEVSX0NUWF9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVtc2V0KGN0eCwwLHNp emVvZihFVlBfQ0lQSEVSX0NUWCkpOworIAkvKiBjdHgtPmNpcGhlcj1OVUxMOyAqLworIAl9CitA QCAtMTAxLDYgKzE0NiwxNCBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFgg KmN0CisgCQkJZW5jID0gMTsKKyAJCWN0eC0+ZW5jcnlwdCA9IGVuYzsKKyAJCX0KKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBT ZXJyKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQp OworKwkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKKysJCXJldHVybiAwOworKwkJfQorKyNl bmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAJLyogV2hldGhlciBpdCdzIG5pY2Ug b3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cworIAkgKiBz byB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCBy ZWxlYXNpbmcKK0BAIC0yMTksNiArMjcyLDIyIEBAIHNraXBfdG9faW5pdDoKKyAJCX0KKyAJfQor IAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJLyogQWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1cnRo ZXIgcGFyYW1ldGVycyBjaGFuZ2VzIGFyZSBwZXJtaXNzaWJsZS4KKysJICogU28gb25seSBjaGVj ayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcgYXQgdGhpcyBwb2ludC4KKysJICovCisrCWlmIChrZXkg JiYgRklQU19tb2RlKCkpCisrCQl7CisrCQlpZiAoIShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBf Q0lQSF9GTEFHX0ZJUFMpCisrCQkJJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9G SVBTX0FMTE9XKSkKKysJCQl7CisrCQkJRVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBF VlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7CisrCQkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsK KysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmKGtleSB8fCAoY3R4 LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5JVCkpIHsKKyAJCWlmKCFj dHgtPmNpcGhlci0+aW5pdChjdHgsa2V5LGl2LGVuYykpIHJldHVybiAwOworIAl9CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2cF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9ldnAvZXZwX2Vyci5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9ldnBf ZXJyLmMuZmlwcwkyMDEwLTAyLTA3IDE0OjQxOjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwX2Vyci5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAw MDAwICswMjAwCitAQCAtMTU1LDYgKzE1NSw3IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRVZQ X3N0cl9yZWFzb25zW10KKyB7RVJSX1JFQVNPTihFVlBfUl9ERUNPREVfRVJST1IpICAgICAgICAg ICwiZGVjb2RlIGVycm9yIn0sCisge0VSUl9SRUFTT04oRVZQX1JfRElGRkVSRU5UX0tFWV9UWVBF UykgICAsImRpZmZlcmVudCBrZXkgdHlwZXMifSwKKyB7RVJSX1JFQVNPTihFVlBfUl9ESUZGRVJF TlRfUEFSQU1FVEVSUykgICwiZGlmZmVyZW50IHBhcmFtZXRlcnMifSwKKyt7RVJSX1JFQVNPTihF VlBfUl9ESVNBQkxFRF9GT1JfRklQUykgICAgICwiZGlzYWJsZWQgZm9yIGZpcHMifSwKKyB7RVJS X1JFQVNPTihFVlBfUl9FTkNPREVfRVJST1IpICAgICAgICAgICwiZW5jb2RlIGVycm9yIn0sCisg e0VSUl9SRUFTT04oRVZQX1JfRVZQX1BCRV9DSVBIRVJJTklUX0VSUk9SKSwiZXZwIHBiZSBjaXBo ZXJpbml0IGVycm9yIn0sCisge0VSUl9SRUFTT04oRVZQX1JfRVhQRUNUSU5HX0FOX1JTQV9LRVkp ICAsImV4cGVjdGluZyBhbiByc2Ega2V5In0sCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZXZwL2V2cC5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9ldnAuaAorLS0tIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwLmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwLmgJMjAxMC0w Ni0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC03NSw2ICs3NSwxMCBAQAorICNpbmNs dWRlIDxvcGVuc3NsL2Jpby5oPgorICNlbmRpZgorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgLyoKKyAjZGVmaW5lIEVWUF9S QzJfS0VZX1NJWkUJCTE2CisgI2RlZmluZSBFVlBfUkM0X0tFWV9TSVpFCQkxNgorQEAgLTE5Nyw2 ICsyMDEsOCBAQCB0eXBlZGVmIGludCBldnBfdmVyaWZ5X21ldGhvZChpbnQgdHlwZSxjCisgCisg I2RlZmluZSBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUJMHgwMDA0CisgCisrI2Rl ZmluZSBFVlBfTURfRkxBR19GSVBTCTB4MDQwMCAvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2Ug aW4gRklQUyBtb2RlICovCisrCisgLyogRGlnZXN0QWxnb3JpdGhtSWRlbnRpZmllciBmbGFncy4u LiAqLworIAorICNkZWZpbmUgRVZQX01EX0ZMQUdfRElHQUxHSURfTUFTSwkJMHgwMDE4CitAQCAt MjY5LDEwICsyNzUsNiBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAorIAkJCQkJCSogY2xlYW5lZCAq LworICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1JFVVNFCQkweDAwMDQgLyogRG9uJ3QgZnJlZSB1 cCBjdHgtPm1kX2RhdGEKKyAJCQkJCQkqIGluIEVWUF9NRF9DVFhfY2xlYW51cCAqLworLS8qIEZJ UFMgYW5kIHBhZCBvcHRpb25zIGFyZSBpZ25vcmVkIGluIDEuMC4wLCBkZWZpbml0aW9ucyBhcmUg aGVyZQorLSAqIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSByZXVzZSB0aGUgdmFsdWVzIGZvciBv dGhlciBwdXJwb3Nlcy4KKy0gKi8KKy0KKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT05fRklQ U19BTExPVwkweDAwMDgJLyogQWxsb3cgdXNlIG9mIG5vbiBGSVBTIGRpZ2VzdAorIAkJCQkJCSAq IGluIEZJUFMgbW9kZSAqLworIAorQEAgLTI4NCw2ICsyODYsMTAgQEAgc3RydWN0IGVudl9tZF9j dHhfc3QKKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEJMHgwMAkvKiBQS0NTIzEg djEuNSBtb2RlICovCisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEJMHgxMAkvKiBY OS4zMSBtb2RlICovCisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUwkJMHgyMAkvKiBQ U1MgbW9kZSAqLworKyNkZWZpbmUgTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KSBcCisr CQkoKGN0eC0+ZmxhZ3M+PjE2KSAmMHhGRkZGKSAvKiBzZWVkIGxlbmd0aCAqLworKyNkZWZpbmUg RVZQX01EX0NUWF9GTEFHX1BTU19NRExFTgkweEZGRkYJLyogc2FsdCBsZW4gc2FtZSBhcyBkaWdl c3QgKi8KKysjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQwkweEZGRkUJLyogc2FsdCBt YXggb3IgYXV0byByZWNvdmVyZWQgKi8KKyAKKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT19J TklUCQkweDAxMDAgLyogRG9uJ3QgaW5pdGlhbGl6ZSBtZF9kYXRhICovCisgCitAQCAtMzMwLDEy ICszMzYsMTYgQEAgc3RydWN0IGV2cF9jaXBoZXJfc3QKKyAjZGVmaW5lIAlFVlBfQ0lQSF9OT19Q QURESU5HCQkweDEwMAorIC8qIGNpcGhlciBoYW5kbGVzIHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAq LworICNkZWZpbmUgCUVWUF9DSVBIX1JBTkRfS0VZCQkweDIwMAorLS8qIGNpcGhlciBoYXMgaXRz IG93biBhZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMgKi8KKy0jZGVmaW5lIAlFVlBfQ0lQSF9DVVNU T01fQ09QWQkJMHg0MDAKKysvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2Rl ICovCisrI2RlZmluZQkJRVZQX0NJUEhfRkxBR19GSVBTCQkweDQwMAorKy8qIEFsbG93IG5vbiBG SVBTIGNpcGhlciBpbiBGSVBTIG1vZGUgKi8KKysjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9G SVBTX0FMTE9XCTB4ODAwCisgLyogQWxsb3cgdXNlIGRlZmF1bHQgQVNOMSBnZXQvc2V0IGl2ICov CisgI2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEJMHgxMDAwCisgLyogQnVmZmVy IGxlbmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZCMSBtb2RlIG9ubHkgKi8KKyAjZGVmaW5lCQlF VlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAwMAorKy8qIGNpcGhlciBoYXMgaXRzIG93biBh ZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMgKi8KKysjZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09Q WQkJMHg0MDAwCisgCisgLyogY3RybCgpIHZhbHVlcyAqLworIAorQEAgLTEyMzksNiArMTI0OSw3 IEBAIHZvaWQgRVJSX2xvYWRfRVZQX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBFVlBfUl9ERUNP REVfRVJST1IJCQkJIDExNAorICNkZWZpbmUgRVZQX1JfRElGRkVSRU5UX0tFWV9UWVBFUwkJCSAx MDEKKyAjZGVmaW5lIEVWUF9SX0RJRkZFUkVOVF9QQVJBTUVURVJTCQkJIDE1MworKyNkZWZpbmUg RVZQX1JfRElTQUJMRURfRk9SX0ZJUFMJCQkJIDE2MAorICNkZWZpbmUgRVZQX1JfRU5DT0RFX0VS Uk9SCQkJCSAxMTUKKyAjZGVmaW5lIEVWUF9SX0VWUF9QQkVfQ0lQSEVSSU5JVF9FUlJPUgkJCSAx MTkKKyAjZGVmaW5lIEVWUF9SX0VYUEVDVElOR19BTl9SU0FfS0VZCQkJIDEyNworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vZXZwL2V2cF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwX2xp Yi5jLmZpcHMJMjAxMC0wMS0yNiAxNTozMzo1MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZXZwL2V2cF9saWIuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAw MCArMDIwMAorQEAgLTY3LDYgKzY3LDggQEAgaW50IEVWUF9DSVBIRVJfcGFyYW1fdG9fYXNuMShF VlBfQ0lQSEVSXworIAorIAlpZiAoYy0+Y2lwaGVyLT5zZXRfYXNuMV9wYXJhbWV0ZXJzICE9IE5V TEwpCisgCQlyZXQ9Yy0+Y2lwaGVyLT5zZXRfYXNuMV9wYXJhbWV0ZXJzKGMsdHlwZSk7CisrCWVs c2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkKKysJ CXJldD1FVlBfQ0lQSEVSX3NldF9hc24xX2l2KGMsIHR5cGUpOworIAllbHNlCisgCQlyZXQ9LTE7 CisgCXJldHVybihyZXQpOworQEAgLTc4LDYgKzgwLDggQEAgaW50IEVWUF9DSVBIRVJfYXNuMV90 b19wYXJhbShFVlBfQ0lQSEVSXworIAorIAlpZiAoYy0+Y2lwaGVyLT5nZXRfYXNuMV9wYXJhbWV0 ZXJzICE9IE5VTEwpCisgCQlyZXQ9Yy0+Y2lwaGVyLT5nZXRfYXNuMV9wYXJhbWV0ZXJzKGMsdHlw ZSk7CisrCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0RFRkFVTFRf QVNOMSkKKysJCXJldD1FVlBfQ0lQSEVSX2dldF9hc24xX2l2KGMsIHR5cGUpOworIAllbHNlCisg CQlyZXQ9LTE7CisgCXJldHVybihyZXQpOworQEAgLTE4Niw2ICsxOTAsOSBAQCBpbnQgRVZQX0NJ UEhFUl9DVFhfYmxvY2tfc2l6ZShjb25zdCBFVlBfCisgCisgaW50IEVWUF9DaXBoZXIoRVZQX0NJ UEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpp biwgdW5zaWduZWQgaW50IGlubCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19z ZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlyZXR1cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhl cihjdHgsb3V0LGluLGlubCk7CisgCX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9ldnAvZXZwX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwX2xvY2wu aAorLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzCTIwMTAtMDYt MDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2 cC9ldnBfbG9jbC5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMjU0 LDE0ICsyNTQsMzIgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQXyMjY25hbWUjI19lY2Iodm9pZAor IAorICNkZWZpbmUgRVZQX0NfREFUQShrc3RydWN0LCBjdHgpCSgoa3N0cnVjdCAqKShjdHgpLT5j aXBoZXJfZGF0YSkKKyAKKy0jZGVmaW5lIElNUExFTUVOVF9DRkJSKGNpcGhlcixjcHJlZml4LGtz dHJ1Y3Qsa3NjaGVkLGtleXNpemUsY2JpdHMsaXZfbGVuKSBcCisrI2RlZmluZSBJTVBMRU1FTlRf Q0ZCUihjaXBoZXIsY3ByZWZpeCxrc3RydWN0LGtzY2hlZCxrZXlzaXplLGNiaXRzLGl2X2xlbixm bCkgXAorIAlCTE9DS19DSVBIRVJfZnVuY19jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGNwcmVmaXgs Y2JpdHMsa3N0cnVjdCxrc2NoZWQpIFwKKyAJQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNf IyNrZXlzaXplLGtzdHJ1Y3QsIFwKKyAJCQkgICAgIE5JRF8jI2NpcGhlciMjXyMja2V5c2l6ZSwg a2V5c2l6ZS84LCBpdl9sZW4sIGNiaXRzLCBcCistCQkJICAgICAwLCBjaXBoZXIjI19pbml0X2tl eSwgTlVMTCwgXAorLQkJCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAorLQkJCSAgICAg RVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwgXAorLQkJCSAgICAgTlVMTCkKKysJCQkgICAgIChmbCl8 RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsIFwKKysJCQkgICAgIGNpcGhlciMjX2luaXRfa2V5 LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjZGVm aW5lIFJDMl9zZXRfa2V5CXByaXZhdGVfUkMyX3NldF9rZXkKKysjZGVmaW5lIFJDNF9zZXRfa2V5 CXByaXZhdGVfUkM0X3NldF9rZXkKKysjZGVmaW5lIENBU1Rfc2V0X2tleQlwcml2YXRlX0NBU1Rf c2V0X2tleQorKyNkZWZpbmUgUkM1XzMyX3NldF9rZXkJcHJpdmF0ZV9SQzVfMzJfc2V0X2tleQor KyNkZWZpbmUgQkZfc2V0X2tleQlwcml2YXRlX0JGX3NldF9rZXkKKysjZGVmaW5lIFNFRURfc2V0 X2tleQlwcml2YXRlX1NFRURfc2V0X2tleQorKyNkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleSBwcml2 YXRlX0NhbWVsbGlhX3NldF9rZXkKKysjZGVmaW5lIGlkZWFfc2V0X2VuY3J5cHRfa2V5IHByaXZh dGVfaWRlYV9zZXRfZW5jcnlwdF9rZXkKKysKKysjZGVmaW5lIE1ENV9Jbml0CXByaXZhdGVfTUQ1 X0luaXQKKysjZGVmaW5lIE1ENF9Jbml0CXByaXZhdGVfTUQ0X0luaXQKKysjZGVmaW5lIE1EMl9J bml0CXByaXZhdGVfTUQyX0luaXQKKysjZGVmaW5lIE1EQzJfSW5pdAlwcml2YXRlX01EQzJfSW5p dAorKyNkZWZpbmUgU0hBX0luaXQJcHJpdmF0ZV9TSEFfSW5pdAorKyNkZWZpbmUgUklQRU1EMTYw X0luaXQJcHJpdmF0ZV9SSVBFTUQxNjBfSW5pdAorKyNkZWZpbmUgV0hJUkxQT09MX0luaXQJcHJp dmF0ZV9XSElSTFBPT0xfSW5pdAorKworKyNlbmRpZgorIAorIHN0cnVjdCBldnBfcGtleV9jdHhf c3QKKyAJeworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX2Rzcy5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2V2cC9tX2Rzcy5jLmZpcHMJMjAwNi0wNC0xOSAxOTowNTo1Ny4wMDAwMDAwMDAgKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fZHNzLmMJMjAxMC0wNi0wNCAxMjoyNTox NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQg ZHNhX21kPQorIAlOSURfZHNhV2l0aFNIQSwKKyAJTklEX2RzYVdpdGhTSEEsCisgCVNIQV9ESUdF U1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwKKysJRVZQX01EX0ZMQUdfUEtF WV9ESUdFU1R8RVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9kc3MxLmMuZmlwcyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZXZwL21fZHNzMS5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2 cC9tX2RzczEuYy5maXBzCTIwMDYtMDQtMTkgMTk6MDU6NTcuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX2RzczEuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAw MDAwMDAwMCArMDIwMAorQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc3Mx X21kPQorIAlOSURfZHNhLAorIAlOSURfZHNhV2l0aFNIQTEsCisgCVNIQV9ESUdFU1RfTEVOR1RI LAorLQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8 RVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9tZGMyLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vZXZwL21fbWRjMi5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX21kYzIu Yy5maXBzCTIwMTAtMDItMDIgMTQ6MzY6MDUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL2V2cC9tX21kYzIuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAorQEAgLTY4LDYgKzY4LDcgQEAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisgI2luY2x1 ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2VuZGlmCisrI2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCisg c3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKKyAJeyByZXR1cm4gTURDMl9Jbml0KGN0 eC0+bWRfZGF0YSk7IH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9tZDIu Yy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9tZDIuYworLS0tIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9ldnAvbV9tZDIuYy5maXBzCTIwMDUtMDctMTYgMTQ6Mzc6MzIuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX21kMi5jCTIwMTAtMDYtMDQg MTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNjgsNiArNjgsNyBAQAorICNpZm5kZWYgT1BF TlNTTF9OT19SU0EKKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjZW5kaWYKKysjaW5jbHVk ZSAiZXZwX2xvY2wuaCIKKyAKKyBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIAl7 IHJldHVybiBNRDJfSW5pdChjdHgtPm1kX2RhdGEpOyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vZXZwL21fbWQ0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fbWQ0 LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fbWQ0LmMuZmlwcwkyMDA1LTA3LTE2 IDE0OjM3OjMyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAv bV9tZDQuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTY4LDYgKzY4 LDcgQEAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ CisgI2VuZGlmCisrI2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCisgc3RhdGljIGludCBpbml0KEVW UF9NRF9DVFggKmN0eCkKKyAJeyByZXR1cm4gTUQ0X0luaXQoY3R4LT5tZF9kYXRhKTsgfQorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX21kNS5jLmZpcHMgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2V2cC9tX21kNS5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX21k NS5jLmZpcHMJMjAwNS0wNy0xNiAxNDozNzozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZXZwL21fbWQ1LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAg KzAyMDAKK0BAIC02OCw2ICs2OCw3IEBACisgI2lmbmRlZiBPUEVOU1NMX05PX1JTQQorICNpbmNs dWRlIDxvcGVuc3NsL3JzYS5oPgorICNlbmRpZgorKyNpbmNsdWRlICJldnBfbG9jbC5oIgorIAor IHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCisgCXsgcmV0dXJuIE1ENV9Jbml0KGN0 eC0+bWRfZGF0YSk7IH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9yaXBl bWQuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9yaXBlbWQuYworLS0tIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9ldnAvbV9yaXBlbWQuYy5maXBzCTIwMDUtMDctMTYgMTQ6Mzc6MzIu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX3JpcGVtZC5j CTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNjgsNiArNjgsNyBAQAor ICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjZW5k aWYKKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NU WCAqY3R4KQorIAl7IHJldHVybiBSSVBFTUQxNjBfSW5pdChjdHgtPm1kX2RhdGEpOyB9CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2V2cC9tX3NoYTEuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9z aGExLmMuZmlwcwkyMDA4LTAzLTEyIDIyOjE0OjI0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9ldnAvbV9zaGExLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAw MDAgKzAyMDAKK0BAIC04Miw3ICs4Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMV9tZD0K KyAJTklEX3NoYTEsCisgCU5JRF9zaGExV2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQV9ESUdFU1Rf TEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdf RElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQ X01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwK KyAJdXBkYXRlLAorIAlmaW5hbCwKK0BAIC0xMTksNyArMTIwLDggQEAgc3RhdGljIGNvbnN0IEVW UF9NRCBzaGEyMjRfbWQ9CisgCU5JRF9zaGEyMjQsCisgCU5JRF9zaGEyMjRXaXRoUlNBRW5jcnlw dGlvbiwKKyAJU0hBMjI0X0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9E X1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BL RVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBf TURfRkxBR19GSVBTLAorIAlpbml0MjI0LAorIAl1cGRhdGUyNTYsCisgCWZpbmFsMjU2LAorQEAg LTEzOCw3ICsxNDAsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTI1Nl9tZD0KKyAJTklEX3No YTI1NiwKKyAJTklEX3NoYTI1NldpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEEyNTZfRElHRVNUX0xF TkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJ R0FMR0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9N RF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQyNTYs CisgCXVwZGF0ZTI1NiwKKyAJZmluYWwyNTYsCitAQCAtMTY5LDcgKzE3Miw4IEBAIHN0YXRpYyBj b25zdCBFVlBfTUQgc2hhMzg0X21kPQorIAlOSURfc2hhMzg0LAorIAlOSURfc2hhMzg0V2l0aFJT QUVuY3J5cHRpb24sCisgCVNIQTM4NF9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZ X01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURf RkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAor KwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdDM4NCwKKyAJdXBkYXRlNTEyLAorIAlmaW5hbDUx MiwKK0BAIC0xODgsNyArMTkyLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGE1MTJfbWQ9Cisg CU5JRF9zaGE1MTIsCisgCU5JRF9zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBNTEyX0RJ R0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURf RkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVS RXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlp bml0NTEyLAorIAl1cGRhdGU1MTIsCisgCWZpbmFsNTEyLAorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2V2cC9tX3dwLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fd3Au YworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV93cC5jLmZpcHMJMjAwNS0xMS0zMCAy MTo1NzoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21f d3AuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTksNiArOSw3IEBA CisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3g1MDku aD4KKyAjaW5jbHVkZSA8b3BlbnNzbC93aHJscG9vbC5oPgorKyNpbmNsdWRlICJldnBfbG9jbC5o IgorIAorIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCisgCXsgcmV0dXJuIFdISVJM UE9PTF9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9ldnAvbmFtZXMuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbmFtZXMuYworLS0t IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbmFtZXMuYy5maXBzCTIwMTAtMDMtMDYgMjE6NDc6 NDUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9uYW1lcy5j CTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNjYsNiArNjYsMTAgQEAg aW50IEVWUF9hZGRfY2lwaGVyKGNvbnN0IEVWUF9DSVBIRVIgKmMpCisgCXsKKyAJaW50IHI7Cisg CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKyNlbmRp ZgorKworIAlyPU9CSl9OQU1FX2FkZChPQkpfbmlkMnNuKGMtPm5pZCksT0JKX05BTUVfVFlQRV9D SVBIRVJfTUVUSCwoY29uc3QgY2hhciAqKWMpOworIAlpZiAociA9PSAwKSByZXR1cm4oMCk7Cisg CWNoZWNrX2RlZmVyKGMtPm5pZCk7CitAQCAtNzksNiArODMsMTAgQEAgaW50IEVWUF9hZGRfZGln ZXN0KGNvbnN0IEVWUF9NRCAqbWQpCisgCWludCByOworIAljb25zdCBjaGFyICpuYW1lOworIAor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysjZW5kaWYK KysKKyAJbmFtZT1PQkpfbmlkMnNuKG1kLT50eXBlKTsKKyAJcj1PQkpfTkFNRV9hZGQobmFtZSxP QkpfTkFNRV9UWVBFX01EX01FVEgsKGNvbnN0IGNoYXIgKiltZCk7CisgCWlmIChyID09IDApIHJl dHVybigwKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvcF9zaWduLmMuZmlw cyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL3Bfc2lnbi5jCistLS0gb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzCTIwMDYtMDUtMjQgMTU6Mjk6MzAuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9wX3NpZ24uYwkyMDEwLTA2LTA0IDEy OjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTYxLDYgKzYxLDcgQEAKKyAjaW5jbHVkZSA8b3Bl bnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisgI2luY2x1ZGUgPG9w ZW5zc2wveDUwOS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorIAorICNpZmRlZiB1bmRl ZgorIHZvaWQgRVZQX1NpZ25Jbml0KEVWUF9NRF9DVFggKmN0eCwgRVZQX01EICp0eXBlKQorQEAg LTEwMSw2ICsxMDIsMjIgQEAgaW50IEVWUF9TaWduRmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnNp ZworIAkJCWdvdG8gZXJyOworIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBr Y3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKKyAJCQlnb3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdz ICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQorKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3Jz YV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsK KysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCisrCQkJeworKwkJ CWludCBzYWx0bGVuOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4 LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJCXNhbHRs ZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOworKwkJCWlmIChzYWx0bGVuID09 IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCisrCQkJCXNhbHRsZW4gPSAtMTsKKysJCQllbHNl IGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKKysJCQkJc2FsdGxlbiA9 IC0yOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2Fs dGxlbikgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJfQorIAkJaWYgKEVWUF9QS0VZX3NpZ24o cGtjdHgsIHNpZ3JldCwgJnNsdG1wLCBtLCBtX2xlbikgPD0gMCkKKyAJCQlnb3RvIGVycjsKKyAJ CSpzaWdsZW4gPSBzbHRtcDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvcF92 ZXJpZnkuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvcF92ZXJpZnkuYworLS0tIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6 MDEuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9wX3Zlcmlm eS5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNjEsNiArNjEsNyBA QAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMu aD4KKyAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ CisgCisgaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKnNpZ2J1ZiwKKyAJICAgICB1bnNpZ25lZCBpbnQgc2lnbGVuLCBFVlBfUEtFWSAqcGtl eSkKK0BAIC04Niw2ICs4NywyMiBAQCBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0 eCwgY29uCisgCQkJZ290byBlcnI7CisgCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVf bWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQorIAkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCisrCQkJaWYgKEVWUF9QS0VZX0NUWF9z ZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8g ZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKKysJCQl7 CisrCQkJaW50IHNhbHRsZW47CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmco cGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJ c2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7CisrCQkJaWYgKHNhbHRs ZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKKysJCQkJc2FsdGxlbiA9IC0xOworKwkJ CWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQorKwkJCQlzYWx0 bGVuID0gLTI7CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4 LCBzYWx0bGVuKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCQl9CisgCQlpID0gRVZQX1BLRVlf dmVyaWZ5KHBrY3R4LCBzaWdidWYsIHNpZ2xlbiwgbSwgbV9sZW4pOworIAkJZXJyOgorIAkJRVZQ X1BLRVlfQ1RYX2ZyZWUocGtjdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2Flc2F2cy5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2Flc2F2cy5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMJMjAxMC0wNi0wNCAx MjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsOTM5IEBACisrLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUg bWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisr ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29y ZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisr ICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisr ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorKyAqCisrICovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKysgIE5JU1QgQUVTIEFsZ29yaXRobSBWYWxpZGF0aW9uIFN1aXRlCisrICBUZXN0IFBy b2dyYW0KKysKKysgIERvbmF0ZWQgdG8gT3BlblNTTCBieToKKysgIFYtT05FIENvcnBvcmF0aW9u CisrICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMwMAorKyAgR2VybWFudG93biwgTUQgMjA4 NzQKKysgIFUuUy5BLgorKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8YXNz ZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYg T1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7Cisr ICAgIHByaW50ZigiTm8gRklQUyBBRVMgc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9 CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZp cHNfdXRsLmgiCisrCisrI2RlZmluZSBBRVNfQkxPQ0tfU0laRSAxNgorKworKyNkZWZpbmUgVkVS Qk9TRSAwCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovCisrCisraW50IEFFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKKysJICAgIGNoYXIg KmFtb2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKKysJICAgIHVuc2lnbmVk IGNoYXIgKmlWZWMsIAorKwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLworKwkgICAgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LCB1bnNpZ25lZCBjaGFyICpjaXBo ZXJ0ZXh0LCBpbnQgbGVuKQorKyAgICB7CisrICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9 IE5VTEw7CisrCisrICAgIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0JDIikgPT0gMCkKKysJewor Kwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Fl c18xMjhfY2JjKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQ X2Flc18xOTJfY2JjKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0g RVZQX2Flc18yNTZfY2JjKCk7CisrCQlicmVhazsKKysJCX0KKysKKysJfQorKyAgICBlbHNlIGlm IChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikK KysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfZWNiKCk7CisrCQli cmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfZWNiKCk7Cisr CQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfZWNiKCk7 CisrCQlicmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAi Q0ZCMTI4IikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4 OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMTI4KCk7CisrCQlicmVhazsKKysKKysJCWNh c2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiMTI4KCk7CisrCQlicmVhazsKKysK KysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiMTI4KCk7CisrCQlicmVh azsKKysJCX0KKysKKysJfQorKyAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChhbW9kZSwgIk9GQiIs IDMpID09IDApCisrCXsKKysJc3dpdGNoIChha2V5c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJ CWNpcGhlciA9IEVWUF9hZXNfMTI4X29mYigpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoK KysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX29mYigpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1 NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X29mYigpOworKwkJYnJlYWs7CisrCQl9CisrCX0K KysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwl7CisrCXN3aXRjaCAo YWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIx KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJf Y2ZiMSgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNf MjU2X2NmYjEoKTsKKysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UgaWYoIXN0cmNhc2Vj bXAoYW1vZGUsIkNGQjgiKSkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2Ug MTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiOCgpOworKwkJYnJlYWs7CisrCisrCQlj YXNlIDE5MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjgoKTsKKysJCWJyZWFrOworKwor KwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmI4KCk7CisrCQlicmVhazsK KysJCX0KKysJfQorKyAgICBlbHNlCisrCXsKKysJcHJpbnRmKCJVbmtub3duIG1vZGU6ICVzXG4i LCBhbW9kZSk7CisrCXJldHVybiAwOworKwl9CisrICAgIGlmICghY2lwaGVyKQorKwl7CisrCXBy aW50ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlzeik7CisrCXJldHVybiAwOyAKKysJ fQorKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlW ZWMsIGRpcikgPD0gMCkKKysJcmV0dXJuIDA7CisrICAgIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJD RkIxIikpCisrCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwgRVZQX0NJUEhfRkxBR19M RU5HVEhfQklUUyk7CisrICAgIGlmIChkaXIpCisrCQlFVlBfQ2lwaGVyKGN0eCwgY2lwaGVydGV4 dCwgcGxhaW50ZXh0LCBsZW4pOworKwllbHNlCisrCQlFVlBfQ2lwaGVyKGN0eCwgcGxhaW50ZXh0 LCBjaXBoZXJ0ZXh0LCBsZW4pOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2NoYXIgKnRfdGFn WzJdID0geyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9OworK2NoYXIgKnRfbW9kZVs2XSA9IHsi Q0JDIiwiRUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkIxMjgifTsKKytlbnVtIE1vZGUge0NC QywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENGQjEyOH07CisrZW51bSBYQ3J5cHQge1hERUNSWVBU LCBYRU5DUllQVH07CisrCisrLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisrLyog IE1vbnRlIENhcmxvIFRlc3RzICAgICAgICAgICovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCisrCisrLyojZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIpLzhdID4+ICgoYiklOCkp JjEpKi8KKysvKiNkZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8 PCAoKGIpJTgpKSl8KCEhKHYpIDw8ICgoYiklOCkpKSovCisrCisrI2RlZmluZSBnYihhLGIpICgo KGEpWyhiKS84XSA+PiAoNy0oYiklOCkpJjEpCisrI2RlZmluZSBzYihhLGIsdikgKChhKVsoYikv OF09KChhKVsoYikvOF0mfigxIDw8ICg3LShiKSU4KSkpfCghISh2KSA8PCAoNy0oYiklOCkpKQor KworK2ludCBkb19tY3QoY2hhciAqYW1vZGUsIAorKwkgICBpbnQgYWtleXN6LCB1bnNpZ25lZCBj aGFyICphS2V5LHVuc2lnbmVkIGNoYXIgKmlWZWMsCisrCSAgIGludCBkaXIsIHVuc2lnbmVkIGNo YXIgKnRleHQsIGludCBsZW4sCisrCSAgIEZJTEUgKnJmcCkKKysgICAgeworKyAgICBpbnQgcmV0 ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbMTAxXVszMl07CisrICAgIHVuc2lnbmVkIGNo YXIgaXZbMTAxXVtBRVNfQkxPQ0tfU0laRV07CisrICAgIHVuc2lnbmVkIGNoYXIgcHRleHRbMTAw MV1bMzJdOworKyAgICB1bnNpZ25lZCBjaGFyIGN0ZXh0WzEwMDFdWzMyXTsKKysgICAgdW5zaWdu ZWQgY2hhciBjaXBoZXJ0ZXh0WzY0KzRdOworKyAgICBpbnQgaSwgaiwgbiwgbjEsIG4yOworKyAg ICBpbnQgaW1vZGUgPSAwLCBua2V5c3ogPSBha2V5c3ovODsKKysgICAgRVZQX0NJUEhFUl9DVFgg Y3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAobGVuID4g MzIpCisrCXsKKysJcHJpbnRmKCJcbj4+Pj4gTGVuZ3RoIGV4Y2VlZHMgMzIgZm9yICVzICVkIDw8 PDxcblxuIiwgCisrCSAgICAgICBhbW9kZSwgYWtleXN6KTsKKysJcmV0dXJuIC0xOworKwl9Cisr ICAgIGZvciAoaW1vZGUgPSAwOyBpbW9kZSA8IDY7ICsraW1vZGUpCisrCWlmIChzdHJjbXAoYW1v ZGUsIHRfbW9kZVtpbW9kZV0pID09IDApCisrCSAgICBicmVhazsKKysgICAgaWYgKGltb2RlID09 IDYpCisrCXsgCisrCXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7Cisr CXJldHVybiAtMTsKKysJfQorKworKyAgICBtZW1jcHkoa2V5WzBdLCBhS2V5LCBua2V5c3opOwor KyAgICBpZiAoaVZlYykKKysJbWVtY3B5KGl2WzBdLCBpVmVjLCBBRVNfQkxPQ0tfU0laRSk7Cisr ICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCW1lbWNweShwdGV4dFswXSwgdGV4dCwgbGVuKTsK KysgICAgZWxzZQorKwltZW1jcHkoY3RleHRbMF0sIHRleHQsIGxlbik7CisrICAgIGZvciAoaSA9 IDA7IGkgPCAxMDA7ICsraSkKKysJeworKwkvKiBwcmludGYoIkl0ZXJhdGlvbiAlZFxuIiwgaSk7 ICovCisrCWlmIChpID4gMCkKKysJICAgIHsKKysJICAgIGZwcmludGYocmZwLCJDT1VOVCA9ICVk XG4iLGkpOworKwkgICAgT3V0cHV0VmFsdWUoIktFWSIsa2V5W2ldLG5rZXlzeixyZnAsMCk7Cisr CSAgICBpZiAoaW1vZGUgIT0gRUNCKSAgLyogRUNCICovCisrCQlPdXRwdXRWYWx1ZSgiSVYiLGl2 W2ldLEFFU19CTE9DS19TSVpFLHJmcCwwKTsKKysJICAgIC8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwg UGxhaW50ZXh0ICovCisrCSAgICBPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sZGlyID8gcHRleHRb MF0gOiBjdGV4dFswXSxsZW4scmZwLAorKwkJCWltb2RlID09IENGQjEpOworKwkgICAgfQorKwlm b3IgKGogPSAwOyBqIDwgMTAwMDsgKytqKQorKwkgICAgeworKwkgICAgc3dpdGNoIChpbW9kZSkK KysJCXsKKysJICAgIGNhc2UgRUNCOgorKwkJaWYgKGogPT0gMCkKKysJCSAgICB7IC8qIHNldCB1 cCBlbmNyeXB0aW9uICovCisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6 LCBrZXlbaV0sIE5VTEwsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLworKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICBpZiAoZGlyID09 IFhFTkNSWVBUKQorKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAg ICBlbHNlCisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0K KysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQl7Cisr CQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkJbWVtY3B5 KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOworKwkJCX0KKysJCSAgICBlbHNlCisrCQkJewor KwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNw eShjdGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsKKysJCQl9CisrCQkgICAgfQorKwkJYnJlYWs7 CisrCisrCSAgICBjYXNlIENCQzoKKysJICAgIGNhc2UgT0ZCOiAgCisrCSAgICBjYXNlIENGQjEy ODoKKysJCWlmIChqID09IDApCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwg YW1vZGUsIGFrZXlzeiwga2V5W2ldLCBpdltpXSwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5 cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJ ICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGl2W2ldLCBs ZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgaXZbaV0sIGxlbik7Cisr CQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQor KwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJ CQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbai0xXSwgbGVuKTsKKysJCQl9CisrCQkgICAgZWxz ZQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsK KysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0xXSwgbGVuKTsKKysJCQl9CisrCQkgICAg fQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENGQjg6CisrCQlpZiAoaiA9PSAwKQorKwkJICAg IHsKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZb aV0sIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkg IHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgewor KwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtq XSwgcHRleHRbal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRl eHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWlmIChkaXIgPT0gWEVOQ1JZUFQp CisrCQkgICAgeworKwkJICAgIGlmIChqIDwgMTYpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sICZp dltpXVtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0 W2otMTZdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGog PCAxNikKKysJCQltZW1jcHkoY3RleHRbaisxXSwgJml2W2ldW2pdLCBsZW4pOworKwkJICAgIGVs c2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0xNl0sIGxlbik7CisrCQkgICAgfQor KwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENGQjE6CisrCQlpZihqID09IDApCisrCQkgICAgewor KyNpZiAwCisrCQkgICAgLyogY29tcGVuc2F0ZSBmb3Igd3JvbmcgZW5kaWFubmVzcyBvZiBpbnB1 dCBmaWxlICovCisrCQkgICAgaWYoaSA9PSAwKQorKwkJCXB0ZXh0WzBdWzBdPDw9NzsKKysjZW5k aWYKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsYW1vZGUsYWtleXN6LGtleVtpXSxpdltpXSxk aXIsCisrCQkJCXB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisr CQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJRVZQX0NpcGhlcigmY3R4 LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCUVWUF9DaXBoZXIo JmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKworKwkJICAgIH0KKysJCWlmKGRpciA9 PSBYRU5DUllQVCkKKysJCSAgICB7CisrCQkgICAgaWYoaiA8IDEyOCkKKysJCQlzYihwdGV4dFtq KzFdLDAsZ2IoaXZbaV0saikpOworKwkJICAgIGVsc2UKKysJCQlzYihwdGV4dFtqKzFdLDAsZ2Io Y3RleHRbai0xMjhdLDApKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlm KGogPCAxMjgpCisrCQkJc2IoY3RleHRbaisxXSwwLGdiKGl2W2ldLGopKTsKKysJCSAgICBlbHNl CisrCQkJc2IoY3RleHRbaisxXSwwLGdiKHB0ZXh0W2otMTI4XSwwKSk7CisrCQkgICAgfQorKwkJ YnJlYWs7CisrCQl9CisrCSAgICB9CisrCS0tajsgLyogcmVzZXQgdG8gbGFzdCBvZiByYW5nZSAq LworKwkvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLworKwlPdXRwdXRWYWx1ZSh0 X3RhZ1tkaXJdLGRpciA/IGN0ZXh0W2pdIDogcHRleHRbal0sbGVuLHJmcCwKKysJCSAgICBpbW9k ZSA9PSBDRkIxKTsKKysJZnByaW50ZihyZnAsICJcbiIpOyAgLyogYWRkIHNlcGFyYXRvciAqLwor KworKwkvKiBDb21wdXRlIG5leHQgS0VZICovCisrCWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCSAg ICB7CisrCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKKysJCXsgLyogY3QgPSBDVFtqLTE1XSB8fCBD VFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KKysJCWZvciAobjEgPSAwLCBuMiA9IG5rZXlzei0x OyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKKysJCSAgICBjaXBoZXJ0ZXh0W24xXSA9IGN0ZXh0 W2otbjJdWzBdOworKwkJfQorKwkgICAgZWxzZSBpZihpbW9kZSA9PSBDRkIxKQorKwkJeworKwkJ Zm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1uMikKKysJCSAgICBz YihjaXBoZXJ0ZXh0LG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKKysJCX0KKysJICAgIGVsc2UKKysJ CXN3aXRjaCAoYWtleXN6KQorKwkJICAgIHsKKysJCWNhc2UgMTI4OgorKwkJICAgIG1lbWNweShj aXBoZXJ0ZXh0LCBjdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAxOTI6Cisr CQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0rOCwgOCk7CisrCQkgICAgbWVtY3B5 KGNpcGhlcnRleHQrOCwgY3RleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCWNhc2UgMjU2 OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqLTFdLCAxNik7CisrCQkgICAgbWVt Y3B5KGNpcGhlcnRleHQrMTYsIGN0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQkgICAg fQorKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKKysJ CXsgLyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KKysJCWZv ciAobjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKKysJCSAg ICBjaXBoZXJ0ZXh0W24xXSA9IHB0ZXh0W2otbjJdWzBdOworKwkJfQorKwkgICAgZWxzZSBpZihp bW9kZSA9PSBDRkIxKQorKwkJeworKwkJZm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlz eiA7ICsrbjEsLS1uMikKKysJCSAgICBzYihjaXBoZXJ0ZXh0LG4xLGdiKHB0ZXh0W2otbjJdLDAp KTsKKysJCX0KKysJICAgIGVsc2UKKysJCXN3aXRjaCAoYWtleXN6KQorKwkJICAgIHsKKysJCWNh c2UgMTI4OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqXSwgMTYpOworKwkJICAg IGJyZWFrOworKwkJY2FzZSAxOTI6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2ot MV0rOCwgOCk7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrOCwgcHRleHRbal0sIDE2KTsKKysJ CSAgICBicmVhazsKKysJCWNhc2UgMjU2OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4 dFtqLTFdLCAxNik7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrMTYsIHB0ZXh0W2pdLCAxNik7 CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkgICAgfQorKwkvKiBDb21wdXRlIG5leHQga2V5 OiBLZXlbaSsxXSA9IEtleVtpXSB4b3IgY3QgKi8KKysJZm9yIChuID0gMDsgbiA8IG5rZXlzejsg KytuKQorKwkgICAga2V5W2krMV1bbl0gPSBrZXlbaV1bbl0gXiBjaXBoZXJ0ZXh0W25dOworKwkK KysJLyogQ29tcHV0ZSBuZXh0IElWIGFuZCB0ZXh0ICovCisrCWlmIChkaXIgPT0gWEVOQ1JZUFQp CisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAgY2FzZSBFQ0I6Cisr CQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsK KysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6CisrCSAgICBjYXNlIENGQjEyODoKKysJ CW1lbWNweShpdltpKzFdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJbWVtY3B5KHB0 ZXh0WzBdLCBjdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNh c2UgQ0ZCODoKKysJCS8qIElWW2krMV0gPSBjdCAqLworKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7 IG4xIDwgMTY7ICsrbjEsIC0tbjIpCisrCQkgICAgaXZbaSsxXVtuMV0gPSBjdGV4dFtqLW4yXVsw XTsKKysJCXB0ZXh0WzBdWzBdID0gY3RleHRbai0xNl1bMF07CisrCQlicmVhazsKKysJICAgIGNh c2UgQ0ZCMToKKysJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQorKwkJ ICAgIHNiKGl2W2krMV0sbjEsZ2IoY3RleHRbai1uMl0sMCkpOworKwkJcHRleHRbMF1bMF09Y3Rl eHRbai0xMjhdWzBdJjB4ODA7CisrCQlicmVhazsKKysJCX0KKysJICAgIH0KKysJZWxzZQorKwkg ICAgeworKwkgICAgc3dpdGNoIChpbW9kZSkKKysJCXsKKysJICAgIGNhc2UgRUNCOgorKwkJbWVt Y3B5KGN0ZXh0WzBdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJYnJlYWs7CisrCSAg ICBjYXNlIENCQzoKKysJICAgIGNhc2UgT0ZCOgorKwkgICAgY2FzZSBDRkIxMjg6CisrCQltZW1j cHkoaXZbaSsxXSwgcHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsKKysJCW1lbWNweShjdGV4dFsw XSwgcHRleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENG Qjg6CisrCQlmb3IgKG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikKKysJCSAg ICBpdltpKzFdW24xXSA9IHB0ZXh0W2otbjJdWzBdOworKwkJY3RleHRbMF1bMF0gPSBwdGV4dFtq LTE2XVswXTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDRkIxOgorKwkJZm9yKG4xPTAsbjI9MTI3 IDsgbjEgPCAxMjggOyArK24xLC0tbjIpCisrCQkgICAgc2IoaXZbaSsxXSxuMSxnYihwdGV4dFtq LW4yXSwwKSk7CisrCQljdGV4dFswXVswXT1wdGV4dFtqLTEyOF1bMF0mMHg4MDsKKysJCWJyZWFr OworKwkJfQorKwkgICAgfQorKwl9CisrICAgIAorKyAgICByZXR1cm4gcmV0OworKyAgICB9Cisr CisrLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwor Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgIyBDb25maWcgaW5mbyBmb3Igdi1v bmUKKysgICMgQUVTVlMgTU1UIHRlc3QgZGF0YSBmb3IgRUNCCisrICAjIFN0YXRlIDogRW5jcnlw dCBhbmQgRGVjcnlwdAorKyAgIyBLZXkgTGVuZ3RoIDogMjU2CisrICAjIEZyaSBBdWcgMzAgMDQ6 MDc6MjIgUE0KKysgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK2ludCBwcm9j X2ZpbGUoY2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQorKyAgICB7CisrICAgIGNoYXIgYWZu WzI1Nl0sIHJmblsyNTZdOworKyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKKysg ICAgY2hhciBpYnVmWzIwNDhdOworKyAgICBjaGFyIHRidWZbMjA0OF07CisrICAgIGludCBpbGVu LCBsZW4sIHJldCA9IDA7CisrICAgIGNoYXIgYWxnb1s4XSA9ICIiOworKyAgICBjaGFyIGFtb2Rl WzhdID0gIiI7CisrICAgIGNoYXIgYXRlc3RbOF0gPSAiIjsKKysgICAgaW50IGFrZXlzeiA9IDA7 CisrICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOworKyAgICBpbnQgZGlyID0g LTEsIGVyciA9IDAsIHN0ZXAgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsyMDQ4 XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOworKyAgICBjaGFyICpycDsK KysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgp OworKworKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUpKQorKwl7CisrCXByaW50ZigiTm8g cmVxIGZpbGVcbiIpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgc3RyY3B5KGFmbiwgcnFmaWxl KTsKKysKKysgICAgaWYgKChhZnAgPSBmb3BlbihhZm4sICJyIikpID09IE5VTEwpCisrCXsKKysJ cHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgYWZuLCBzdHJl cnJvcihlcnJubykpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgaWYgKCFyc3BmaWxlKQorKwl7 CisrCXN0cmNweShyZm4sYWZuKTsKKysJcnA9c3Ryc3RyKHJmbiwicmVxLyIpOworKyNpZmRlZiBP UEVOU1NMX1NZU19XSU4zMgorKwlpZiAoIXJwKQorKwkgICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwi KTsKKysjZW5kaWYKKysJYXNzZXJ0KHJwKTsKKysJbWVtY3B5KHJwLCJyc3AiLDMpOworKwlycCA9 IHN0cnN0cihyZm4sICIucmVxIik7CisrCW1lbWNweShycCwgIi5yc3AiLCA0KTsKKysJcnNwZmls ZSA9IHJmbjsKKysJfQorKyAgICBpZiAoKHJmcCA9IGZvcGVuKHJzcGZpbGUsICJ3IikpID09IE5V TEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAg ICAgcmZuLCBzdHJlcnJvcihlcnJubykpOworKwlmY2xvc2UoYWZwKTsKKysJYWZwID0gTlVMTDsK KysJcmV0dXJuIC0xOworKwl9CisrICAgIHdoaWxlICghZXJyICYmIChmZ2V0cyhpYnVmLCBzaXpl b2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwpCisrCXsKKysJdGlkeV9saW5lKHRidWYsIGlidWYpOwor KwlpbGVuID0gc3RybGVuKGlidWYpOworKwkvKiAgICAgIHByaW50Zigic3RlcD0lZCBpYnVmPSVz IixzdGVwLGlidWYpOyAqLworKwlzd2l0Y2ggKHN0ZXApCisrCSAgICB7CisrCWNhc2UgMDogIC8q IHJlYWQgcHJlYW1ibGUgKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdcbicpCisrCQl7IC8qIGVu ZCBvZiBwcmVhbWJsZSAqLworKwkJaWYgKCgqYWxnbyA9PSAnXDAnKSB8fAorKwkJICAgICgqYW1v ZGUgPT0gJ1wwJykgfHwKKysJCSAgICAoYWtleXN6ID09IDApKQorKwkJICAgIHsKKysJCSAgICBw cmludGYoIk1pc3NpbmcgQWxnb3JpdGhtLCBNb2RlIG9yIEtleVNpemUgKCVzLyVzLyVkKVxuIiwK KysJCQkgICBhbGdvLGFtb2RlLGFrZXlzeik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9Cisr CQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgKysgc3Rl cDsKKysJCSAgICB9CisrCQl9CisrCSAgICBlbHNlIGlmIChpYnVmWzBdICE9ICcjJykKKysJCXsK KysJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7CisrCQllcnIg PSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeyAvKiBwcm9jZXNzIHByZWFtYmxlICovCisrCQlj aGFyICp4cCwgKnBwID0gaWJ1ZisyOworKwkJaW50IG47CisrCQlpZiAoYWtleXN6KQorKwkJICAg IHsgLyogaW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8KKysJCSAgICB0aW1lX3QgcnRpbSA9 IHRpbWUoMCk7CisrCQkgICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKKysJ CSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkg ICAgaWYgKHN0cm5jbXAocHAsICJBRVNWUyAiLCA2KSA9PSAwKQorKwkJCXsKKysJCQlzdHJjcHko YWxnbywgIkFFUyIpOworKwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KKysJCQlwcCArPSA2OworKwkJ CXhwID0gc3RyY2hyKHBwLCAnICcpOworKwkJCW4gPSB4cC1wcDsKKysJCQlzdHJuY3B5KGF0ZXN0 LCBwcCwgbik7CisrCQkJYXRlc3Rbbl0gPSAnXDAnOworKwkJCS8qIGdldCBtb2RlICovCisrCQkJ eHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KKysJCQluID0gc3RybGVuKHhw KzEpLTE7CisrCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7CisrCQkJYW1vZGVbbl0gPSAnXDAn OworKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KKysJCQlpZiAoVkVSQk9TRSkKKysJCQkJcHJp bnRmKCJUZXN0ID0gJXMsIE1vZGUgPSAlc1xuIiwgYXRlc3QsIGFtb2RlKTsKKysJCQl9CisrCQkg ICAgZWxzZSBpZiAoc3RybmNhc2VjbXAocHAsICJLZXkgTGVuZ3RoIDogIiwgMTMpID09IDApCisr CQkJeworKwkJCWFrZXlzeiA9IGF0b2kocHArMTMpOworKwkJCWlmIChWRVJCT1NFKQorKwkJCQlw cmludGYoIktleSBzaXplID0gJWRcbiIsIGFrZXlzeik7CisrCQkJfQorKwkJICAgIH0KKysJCX0K KysJICAgIGJyZWFrOworKworKwljYXNlIDE6ICAvKiBbRU5DUllQVF0gfCBbREVDUllQVF0gKi8K KysJICAgIGlmIChpYnVmWzBdID09ICdbJykKKysJCXsKKysJCWZwdXRzKGlidWYsIHJmcCk7Cisr CQkrK3N0ZXA7CisrCQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDAp CisrCQkgICAgZGlyID0gMTsKKysJCWVsc2UgaWYgKHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQ VF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDA7CisrCQllbHNlCisrCQkgICAgeworKwkJICAg IHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7CisrCQkgICAgZXJyID0gMTsK KysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKKysJ CXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdv cmRcbiIpOworKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNlIAorKwkJc3RlcCA9IDI7CisrCisr CWNhc2UgMjogLyogS0VZID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAg IGlmKCppYnVmID09ICdcbicpCisrCQlicmVhazsKKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVm LCJDT1VOVCA9ICIsOCkpCisrCQlicmVhazsKKysKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVm LCAiS0VZID0gIiwgNikgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwor KwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWxlbiA9IGhleDJiaW4oKGNo YXIqKWlidWYrNiwgYUtleSk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJp bnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJ ICAgIH0KKysJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxlbik7CisrCQlpZiAoc3RyY21wKGFt b2RlLCAiRUNCIikgPT0gMCkKKysJCSAgICB7CisrCQkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVv ZihpVmVjKSk7CisrCQkgICAgc3RlcCA9IChkaXIpPyA0OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNC ICovCisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgICsrc3RlcDsKKysJCX0KKysJICAgIGJyZWFr OworKworKwljYXNlIDM6IC8qIElWID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK KysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAhPSAwKQorKwkJeworKwkJ cHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisr CQl7CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMpOworKwkJaWYgKGxlbiA8 IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxuIik7CisrCQkgICAgZXJy ID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIklWIiwgaVZlYywg bGVuKTsKKysJCXN0ZXAgPSAoZGlyKT8gNDogNTsKKysJCX0KKysJICAgIGJyZWFrOworKworKwlj YXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7Cisr CSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIsIDEyKSAhPSAwKQorKwkJ eworKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7CisrCQllcnIgPSAxOworKwkJfQor KwkgICAgZWxzZQorKwkJeworKwkJaW50IG5uID0gc3RybGVuKGlidWYrMTIpOworKwkJaWYoIXN0 cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEyLG5uLTEscGxh aW50ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW49aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRleHQp OworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBQTEFJ TlRFWFQ6ICVzIiwgaWJ1ZisxMik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJ ICAgIH0KKysJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCisrCQkgICAgeworKwkJICAg IHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJQ TEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNt cChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgewor KwkJICAgIGlmKGRvX21jdChhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkgICAgICBk aXIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbiwgCisrCQkJICAgICAgcmZwKSA8IDAp CisrCQkJRVhJVCgxKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHJldCA9 IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAg LyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0 ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZhbHVlKCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxl bixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9 IDY7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4 eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVm LCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIEtF WVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJaWYoIXN0cmNt cChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVm KzEzKS0xLGNpcGhlcnRleHQpOworKwkJZWxzZQorKwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1Zisx MyxjaXBoZXJ0ZXh0KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYo IkludmFsaWQgQ0lQSEVSVEVYVFxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOwor KwkJICAgIH0KKysKKysJCVByaW50VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4p OworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0 ICovCisrCQkgICAgeworKwkJICAgIGRvX21jdChhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAK KysJCQkgICBkaXIsIGNpcGhlcnRleHQsIGxlbiwgcmZwKTsKKysJCSAgICB9CisrCQllbHNlCisr CQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwg aVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJ CSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZhbHVlKCJQTEFJ TlRFWFQiLCh1bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxlbixyZnAsCisrCQkJCSFzdHJjbXAo YW1vZGUsIkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9IDY7CisrCQl9CisrCSAgICBicmVh azsKKysKKysJY2FzZSA2OgorKwkgICAgaWYgKGlidWZbMF0gIT0gJ1xuJykKKysJCXsKKysJCWVy ciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRvclxuIik7CisrCQl9CisrCSAgICBl bHNlIGlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQorKwkJeyAvKiBNQ1QgYWxyZWFkeSBh ZGRlZCB0ZXJtaW5hdGluZyBubCAqLworKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCX0KKysJICAg IHN0ZXAgPSAxOworKwkgICAgYnJlYWs7CisrCSAgICB9CisrCX0KKysgICAgaWYgKHJmcCkKKysJ ZmNsb3NlKHJmcCk7CisrICAgIGlmIChhZnApCisrCWZjbG9zZShhZnApOworKyAgICByZXR1cm4g ZXJyOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorKyAgUHJvY2Vzc2VzIGVpdGhlciBhIHNpbmdsZSBmaWxlIG9yIAorKyAg YSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3NlZCBpbiBhIGZpbGUuCisrICBBIHNp bmdsZSBmaWxlIGlzIHNwZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3QgLWYgeHh4LnJlcQorKyAg QSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVzdCAtZCB4eHh4eC54 eHgKKysgIFRoZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKKysgICAgeworKyAgICBjaGFyICpycWxpc3QgPSAicmVxLnR4dCIsICpyc3BmaWxl ID0gTlVMTDsKKysgICAgRklMRSAqZnAgPSBOVUxMOworKyAgICBjaGFyIGZuWzI1MF0gPSAiIiwg cmZuWzI1Nl0gPSAiIjsKKysgICAgaW50IGZfb3B0ID0gMCwgZF9vcHQgPSAxOworKworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJp bnRfZXJyb3JzKCk7CisrCUVYSVQoMSk7CisrCX0KKysjZW5kaWYKKysgICAgaWYgKGFyZ2MgPiAx KQorKwl7CisrCWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZCIpID09IDApCisrCSAgICB7Cisr CSAgICBkX29wdCA9IDE7CisrCSAgICB9CisrCWVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwg Ii1mIikgPT0gMCkKKysJICAgIHsKKysJICAgIGZfb3B0ID0gMTsKKysJICAgIGRfb3B0ID0gMDsK KysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkgICAgcHJpbnRmKCJJbnZhbGlkIHBhcmFtZXRl cjogJXNcbiIsIGFyZ3ZbMV0pOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCWlmIChhcmdj IDwgMykKKysJICAgIHsKKysJICAgIHByaW50ZigiTWlzc2luZyBwYXJhbWV0ZXJcbiIpOworKwkg ICAgcmV0dXJuIDA7CisrCSAgICB9CisrCWlmIChkX29wdCkKKysJICAgIHJxbGlzdCA9IGFyZ3Zb Ml07CisrCWVsc2UKKysJICAgIHsKKysJICAgIHN0cmNweShmbiwgYXJndlsyXSk7CisrCSAgICBy c3BmaWxlID0gYXJndlszXTsKKysJICAgIH0KKysJfQorKyAgICBpZiAoZF9vcHQpCisrCXsgLyog bGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5KSAqLworKwlpZiAoIShmcCA9IGZvcGVuKHJxbGlzdCwg InIiKSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIkNhbm5vdCBvcGVuIHJlcSBsaXN0IGZpbGVc biIpOworKwkgICAgcmV0dXJuIC0xOworKwkgICAgfQorKwl3aGlsZSAoZmdldHMoZm4sIHNpemVv ZihmbiksIGZwKSkKKysJICAgIHsKKysJICAgIHN0cnRvayhmbiwgIlxyXG4iKTsKKysJICAgIHN0 cmNweShyZm4sIGZuKTsKKysJICAgIGlmIChWRVJCT1NFKQorKwkJcHJpbnRmKCJQcm9jZXNzaW5n OiAlc1xuIiwgcmZuKTsKKysJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKKysJCXsK KysJCXByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOwor KwkJRVhJVCgxKTsKKysJCX0KKysJICAgIH0KKysJZmNsb3NlKGZwKTsKKysJfQorKyAgICBlbHNl IC8qIHNpbmdsZSBmaWxlICovCisrCXsKKysJaWYgKFZFUkJPU0UpCisrCSAgICBwcmludGYoIlBy b2Nlc3Npbmc6ICVzXG4iLCBmbik7CisrCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQorKwkg ICAgeworKwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIs IGZuKTsKKysJICAgIH0KKysJfQorKyAgICBFWElUKDApOworKyAgICByZXR1cm4gMDsKKysgICAg fQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX2Rlc21vdnMuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19k ZXNtb3ZzLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92 cy5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCTIwMTAtMDYtMDQgMTI6MjU6 MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDcwMiBAQAorKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisr ICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoK KysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3Bl bnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAg IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisr ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysg KgorKyAqLworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisrICBOSVNUIERFUyBNb2RlcyBvZiBPcGVyYXRpb24gVmFsaWRhdGlvbiBTeXN0ZW0KKysgIFRl c3QgUHJvZ3JhbQorKworKyAgQmFzZWQgb24gdGhlIEFFUyBWYWxpZGF0aW9uIFN1aXRlLCB3aGlj aCB3YXM6CisrICBEb25hdGVkIHRvIE9wZW5TU0wgYnk6CisrICBWLU9ORSBDb3Jwb3JhdGlvbgor KyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAzMDAKKysgIEdlcm1hbnRvd24sIE1EIDIwODc0 CisrICBVLlMuQS4KKysgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0qLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPGFzc2Vy dC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysjaWZuZGVmIE9Q RU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAg ICBwcmludGYoIk5vIEZJUFMgREVTIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQor KworKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBz X3V0bC5oIgorKworKyNkZWZpbmUgREVTX0JMT0NLX1NJWkUgOAorKworKyNkZWZpbmUgVkVSQk9T RSAwCisrCisraW50IERFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKKysJICAgIGNoYXIgKmFt b2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKKysJICAgIHVuc2lnbmVkIGNo YXIgKmlWZWMsIAorKwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAq LworKwkgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IGxlbikK KysgICAgeworKyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOworKworKyAgICBp ZiAoYWtleXN6ICE9IDE5MikKKysJeworKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4i LCBha2V5c3opOworKwlFWElUKDEpOworKwl9CisrCisrICAgIGlmIChzdHJjYXNlY21wKGFtb2Rl LCAiQ0JDIikgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NiYygpOworKyAgICBlbHNl IGlmIChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19l ZGUzX2VjYigpOworKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0ZCNjQiKSA9PSAw KQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiNjQoKTsKKysgICAgZWxzZSBpZiAoc3RybmNh c2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfb2Zi KCk7CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkKKysJY2lwaGVyID0g RVZQX2Rlc19lZGUzX2NmYjgoKTsKKysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZC MSIpKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiMSgpOworKyAgICBlbHNlCisrCXsKKysJ cHJpbnRmKCJVbmtub3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCUVYSVQoMSk7CisrCX0KKysK KysgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBpVmVj LCBkaXIpIDw9IDApCisrCXJldHVybiAwOworKyAgICBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZC MSIpKQorKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdfTEVO R1RIX0JJVFMpOworKyAgICBFVlBfQ2lwaGVyKGN0eCwgb3V0LCBpbiwgbGVuKTsKKysKKysgICAg cmV0dXJuIDE7CisrICAgIH0KKysKKyt2b2lkIERlYnVnVmFsdWUoY2hhciAqdGFnLCB1bnNpZ25l ZCBjaGFyICp2YWwsIGludCBsZW4pCisrICAgIHsKKysgICAgY2hhciBvYnVmWzIwNDhdOworKyAg ICBpbnQgb2xlbjsKKysgICAgb2xlbiA9IGJpbjJoZXgodmFsLCBsZW4sIG9idWYpOworKyAgICBw cmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKKysgICAgfQorKworK3ZvaWQg c2hpZnRpbih1bnNpZ25lZCBjaGFyICpkc3QsdW5zaWduZWQgY2hhciAqc3JjLGludCBuYml0cykK KysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAgLyogbW92ZSB0aGUgYnl0ZXMuLi4gKi8KKysg ICAgbWVtbW92ZShkc3QsZHN0K25iaXRzLzgsMyo4LW5iaXRzLzgpOworKyAgICAvKiBhcHBlbmQg bmV3IGRhdGEgKi8KKysgICAgbWVtY3B5KGRzdCszKjgtbmJpdHMvOCxzcmMsKG5iaXRzKzcpLzgp OworKyAgICAvKiBsZWZ0IHNoaWZ0IHRoZSBiaXRzICovCisrICAgIGlmKG5iaXRzJTgpCisrCWZv cihuPTAgOyBuIDwgMyo4IDsgKytuKQorKwkgICAgZHN0W25dPShkc3Rbbl0gPDwgKG5iaXRzJTgp KXwoZHN0W24rMV0gPj4gKDgtbmJpdHMlOCkpOworKyAgICB9CQorKworKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2NoYXIgKnRfdGFnWzJdID0g eyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9OworK2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JDIiwi RUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkI2NCJ9OworK2VudW0gTW9kZSB7Q0JDLCBFQ0Is IE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCNjR9OworK2ludCBTaXplc1s2XT17NjQsNjQsNjQsMSw4LDY0 fTsKKysKKyt2b2lkIGRvX21jdChjaGFyICphbW9kZSwgCisrCSAgICBpbnQgYWtleXN6LCBpbnQg bnVta2V5cywgdW5zaWduZWQgY2hhciAqYWtleSx1bnNpZ25lZCBjaGFyICppdmVjLAorKwkgICAg aW50IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKKysJICAgIEZJTEUgKnJmcCkK KysgICAgeworKyAgICBpbnQgaSxpbW9kZTsKKysgICAgdW5zaWduZWQgY2hhciBua1s0KjhdOyAv KiBsb25nZXN0IGtleSs4ICovCisrICAgIHVuc2lnbmVkIGNoYXIgdGV4dDBbOF07CisrCisrICAg IGZvciAoaW1vZGU9MCA7IGltb2RlIDwgNiA7ICsraW1vZGUpCisrCWlmKCFzdHJjbXAoYW1vZGUs dF9tb2RlW2ltb2RlXSkpCisrCSAgICBicmVhazsKKysgICAgaWYgKGltb2RlID09IDYpCisrCXsg CisrCXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCUVYSVQoMSk7 CisrCX0KKysKKysgICAgZm9yKGk9MCA7IGkgPCA0MDAgOyArK2kpCisrCXsKKysJaW50IGo7Cisr CWludCBuOworKwlpbnQga3A9YWtleXN6LzY0OworKwl1bnNpZ25lZCBjaGFyIG9sZF9pdls4XTsK KysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKwor KwlmcHJpbnRmKHJmcCwiXG5DT1VOVCA9ICVkXG4iLGkpOworKwlpZihrcCA9PSAxKQorKwkgICAg T3V0cHV0VmFsdWUoIktFWSIsYWtleSw4LHJmcCwwKTsKKysJZWxzZQorKwkgICAgZm9yKG49MCA7 IG4gPCBrcCA7ICsrbikKKysJCXsKKysJCWZwcmludGYocmZwLCJLRVklZCIsbisxKTsKKysJCU91 dHB1dFZhbHVlKCIiLGFrZXkrbio4LDgscmZwLDApOworKwkJfQorKworKwlpZihpbW9kZSAhPSBF Q0IpCisrCSAgICBPdXRwdXRWYWx1ZSgiSVYiLGl2ZWMsOCxyZnAsMCk7CisrCU91dHB1dFZhbHVl KHRfdGFnW2Rpcl4xXSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7CisrI2lmIDAKKysJLyog Y29tcGVuc2F0ZSBmb3IgZW5kaWFubmVzcyAqLworKwlpZihpbW9kZSA9PSBDRkIxKQorKwkgICAg dGV4dFswXTw8PTc7CisrI2VuZGlmCisrCW1lbWNweSh0ZXh0MCx0ZXh0LDgpOworKworKwlmb3Io aj0wIDsgaiA8IDEwMDAwIDsgKytqKQorKwkgICAgeworKwkgICAgdW5zaWduZWQgY2hhciBvbGRf dGV4dFs4XTsKKysKKysJICAgIG1lbWNweShvbGRfdGV4dCx0ZXh0LDgpOworKwkgICAgaWYoaiA9 PSAwKQorKwkJeworKwkJbWVtY3B5KG9sZF9pdixpdmVjLDgpOworKwkJREVTVGVzdCgmY3R4LGFt b2RlLGFrZXlzeixha2V5LGl2ZWMsZGlyLHRleHQsdGV4dCxsZW4pOworKwkJfQorKwkgICAgZWxz ZQorKwkJeworKwkJbWVtY3B5KG9sZF9pdixjdHguaXYsOCk7CisrCQlFVlBfQ2lwaGVyKCZjdHgs dGV4dCx0ZXh0LGxlbik7CisrCQl9CisrCSAgICBpZihqID09IDk5OTkpCisrCQl7CisrCQlPdXRw dXRWYWx1ZSh0X3RhZ1tkaXJdLHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIxKTsKKysJCS8qCQlt ZW1jcHkoaXZlYyx0ZXh0LDgpOyAqLworKwkJfQorKwkgICAgLyoJICAgIERlYnVnVmFsdWUoIml2 IixjdHguaXYsOCk7ICovCisrCSAgICAvKiBhY2N1bXVsYXRlIG1hdGVyaWFsIGZvciB0aGUgbmV4 dCBrZXkgKi8KKysJICAgIHNoaWZ0aW4obmssdGV4dCxTaXplc1tpbW9kZV0pOworKwkgICAgLyoJ ICAgIERlYnVnVmFsdWUoIm5rIixuaywyNCk7Ki8KKysJICAgIGlmKChkaXIgJiYgKGltb2RlID09 IENGQjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NAorKwkJCXx8IGltb2RlID09 IENCQykpIHx8IGltb2RlID09IE9GQikKKysJCW1lbWNweSh0ZXh0LG9sZF9pdiw4KTsKKysKKysJ ICAgIGlmKCFkaXIgJiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9 PSBDRkI2NCkpCisrCQl7CisrCQkvKiB0aGUgdGVzdCBzcGVjaWZpZXMgdXNpbmcgdGhlIG91dHB1 dCBvZiB0aGUgcmF3IERFUyBvcGVyYXRpb24KKysJCSAgIHdoaWNoIHdlIGRvbid0IGhhdmUsIHNv IHJlY29uc3RydWN0IGl0Li4uICovCisrCQlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCQkgICAg dGV4dFtuXV49b2xkX3RleHRbbl07CisrCQl9CisrCSAgICB9CisrCWZvcihuPTAgOyBuIDwgOCA7 ICsrbikKKysJICAgIGFrZXlbbl1ePW5rWzE2K25dOworKwlmb3Iobj0wIDsgbiA8IDggOyArK24p CisrCSAgICBha2V5Wzgrbl1ePW5rWzgrbl07CisrCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJ ICAgIGFrZXlbMTYrbl1ePW5rW25dOworKwlpZihudW1rZXlzIDwgMykKKysJICAgIG1lbWNweSgm YWtleVsyKjhdLGFrZXksOCk7CisrCWlmKG51bWtleXMgPCAyKQorKwkgICAgbWVtY3B5KCZha2V5 WzhdLGFrZXksOCk7CisrCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKWFrZXkpOwor KwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKikoYWtleSs4KSk7CisrCURFU19zZXRf b2RkX3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5KzE2KSk7CisrCW1lbWNweShpdmVjLGN0eC5p diw4KTsKKysKKysJLyogcG9pbnRsZXNzIGV4ZXJjaXNlIC0gdGhlIGZpbmFsIHRleHQgZG9lc24n dCBkZXBlbmQgb24gdGhlCisrCSAgIGluaXRpYWwgdGV4dCBpbiBPRkIgbW9kZSwgc28gd2hvIGNh cmVzIHdoYXQgaXQgaXM/IChXaG8KKysJICAgZGVzaWduZWQgdGhlc2UgdGVzdHM/KSAqLworKwlp ZihpbW9kZSA9PSBPRkIpCisrCSAgICBmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCQl0ZXh0W25d PXRleHQwW25dXm9sZF9pdltuXTsKKysJfQorKyAgICB9CisrICAgIAorK2ludCBwcm9jX2ZpbGUo Y2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQorKyAgICB7CisrICAgIGNoYXIgYWZuWzI1Nl0s IHJmblsyNTZdOworKyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKKysgICAgY2hh ciBpYnVmWzIwNDhdLCB0YnVmWzIwNDhdOworKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOwor KyAgICBjaGFyIGFtb2RlWzhdID0gIiI7CisrICAgIGNoYXIgYXRlc3RbMTAwXSA9ICIiOworKyAg ICBpbnQgYWtleXN6PTA7CisrICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOwor KyAgICBpbnQgZGlyID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAwOworKyAgICB1bnNpZ25lZCBjaGFy IHBsYWludGV4dFsyMDQ4XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOwor KyAgICBjaGFyICpycDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBpbnQgbnVta2V5 cz0xOworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAoIXJxZmls ZSB8fCAhKCpycWZpbGUpKQorKwl7CisrCXByaW50ZigiTm8gcmVxIGZpbGVcbiIpOworKwlyZXR1 cm4gLTE7CisrCX0KKysgICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKKysKKysgICAgaWYgKChhZnAg PSBmb3BlbihhZm4sICJyIikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBm aWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgYWZuLCBzdHJlcnJvcihlcnJubykpOworKwlyZXR1 cm4gLTE7CisrCX0KKysgICAgaWYgKCFyc3BmaWxlKQorKwl7CisrCXN0cmNweShyZm4sYWZuKTsK KysJcnA9c3Ryc3RyKHJmbiwicmVxLyIpOworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlp ZiAoIXJwKQorKwkgICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKKysjZW5kaWYKKysJYXNzZXJ0 KHJwKTsKKysJbWVtY3B5KHJwLCJyc3AiLDMpOworKwlycCA9IHN0cnN0cihyZm4sICIucmVxIik7 CisrCW1lbWNweShycCwgIi5yc3AiLCA0KTsKKysJcnNwZmlsZSA9IHJmbjsKKysJfQorKyAgICBp ZiAoKHJmcCA9IGZvcGVuKHJzcGZpbGUsICJ3IikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJD YW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgcmZuLCBzdHJlcnJvcihlcnJu bykpOworKwlmY2xvc2UoYWZwKTsKKysJYWZwID0gTlVMTDsKKysJcmV0dXJuIC0xOworKwl9Cisr ICAgIHdoaWxlICghZXJyICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9IE5V TEwpCisrCXsKKysJdGlkeV9saW5lKHRidWYsIGlidWYpOworKwlpbGVuID0gc3RybGVuKGlidWYp OworKwkvKglwcmludGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsqLworKwlpZihzdGVw ID09IDMgJiYgIXN0cmNtcChhbW9kZSwiRUNCIikpCisrCSAgICB7CisrCSAgICBtZW1zZXQoaVZl YywgMCwgc2l6ZW9mKGlWZWMpKTsKKysJICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5vIGl2 ZWMgZm9yIEVDQiAqLworKwkgICAgfQorKwlzd2l0Y2ggKHN0ZXApCisrCSAgICB7CisrCWNhc2Ug MDogIC8qIHJlYWQgcHJlYW1ibGUgKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdcbicpCisrCQl7 IC8qIGVuZCBvZiBwcmVhbWJsZSAqLworKwkJaWYgKCphbW9kZSA9PSAnXDAnKQorKwkJICAgIHsK KysJCSAgICBwcmludGYoIk1pc3NpbmcgTW9kZVxuIik7CisrCQkgICAgZXJyID0gMTsKKysJCSAg ICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAg Kysgc3RlcDsKKysJCSAgICB9CisrCQl9CisrCSAgICBlbHNlIGlmIChpYnVmWzBdICE9ICcjJykK KysJCXsKKysJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7Cisr CQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeyAvKiBwcm9jZXNzIHByZWFtYmxlICov CisrCQljaGFyICp4cCwgKnBwID0gaWJ1ZisyOworKwkJaW50IG47CisrCQlpZigqYW1vZGUpCisr CQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLworKwkJICAgIHRpbWVfdCBy dGltID0gdGltZSgwKTsKKysJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBjdGltZSgmcnRpbSkp OworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK KysJCSAgICBpZighc3RybmNtcChwcCwiSU5WRVJTRSAiLDgpIHx8ICFzdHJuY21wKHBwLCJERVMg Iiw0KQorKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJUREVTICIsNSkKKysJCSAgICAgICB8fCAh c3RybmNtcChwcCwiUEVSTVVUQVRJT04gIiwxMikKKysJCSAgICAgICB8fCAhc3RybmNtcChwcCwi U1VCU1RJVFVUSU9OICIsMTMpCisrCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlZBUklBQkxFICIs OSkpCisrCQkJeworKwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KKysJCQlpZighc3RybmNtcChwcCwi REVTICIsNCkpCisrCQkJICAgIHBwKz00OworKwkJCWVsc2UgaWYoIXN0cm5jbXAocHAsIlRERVMg Iiw1KSkKKysJCQkgICAgcHArPTU7CisrCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7CisrCQkJbiA9 IHhwLXBwOworKwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKKysJCQlhdGVzdFtuXSA9ICdcMCc7 CisrCQkJLyogZ2V0IG1vZGUgKi8KKysJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBt b2RlIiAqLworKwkJCW4gPSBzdHJsZW4oeHArMSktMTsKKysJCQlzdHJuY3B5KGFtb2RlLCB4cCsx LCBuKTsKKysJCQlhbW9kZVtuXSA9ICdcMCc7CisrCQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLwor KwkJCWlmIChWRVJCT1NFKQorKwkJCQlwcmludGYoIlRlc3Q9JXMsIE1vZGU9JXNcbiIsYXRlc3Qs YW1vZGUpOworKwkJCX0KKysJCSAgICB9CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSAx OiAgLyogW0VOQ1JZUFRdIHwgW0RFQ1JZUFRdICovCisrCSAgICBpZihpYnVmWzBdID09ICdcbicp CisrCQlicmVhazsKKysJICAgIGlmIChpYnVmWzBdID09ICdbJykKKysJCXsKKysJCWZwdXRzKGli dWYsIHJmcCk7CisrCQkrK3N0ZXA7CisrCQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBU XSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMTsKKysJCWVsc2UgaWYgKHN0cm5jYXNlY21wKGli dWYsICJbREVDUllQVF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDA7CisrCQllbHNlCisrCQkg ICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7CisrCQkg ICAgZXJyID0gMTsKKysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgaWYgKGRp ciA9PSAtMSkKKysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgRU5DUllQVC9E RUNSWVBUIGtleXdvcmRcbiIpOworKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNlIAorKwkJc3Rl cCA9IDI7CisrCisrCWNhc2UgMjogLyogS0VZID0geHh4eCAqLworKwkgICAgaWYoKmlidWYgPT0g J1xuJykKKysJCXsKKysJICAgICAgICBmcHV0cyhpYnVmLCByZnApOworKwkJYnJlYWs7CisrICAg ICAgICAgICAgICAgIH0KKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVCA9ICIsOCkp CisrCQl7CisrCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCWJyZWFrOworKyAgICAgICAg ICAgICAgICB9CisrCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQ9Iiw2KSkKKysJCXsK KysJICAgICAgICBmcHV0cyhpYnVmLCByZnApOworKwkJYnJlYWs7CisrICAgICAgICAgICAgICAg IH0KKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJOdW1LZXlzID0gIiwxMCkpCisrCQl7Cisr CQludW1rZXlzPWF0b2koaWJ1ZisxMCk7CisrCQlicmVhazsKKysJCX0KKysJICAKKysJICAgIGZw dXRzKGlidWYsIHJmcCk7CisrCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZID0gIiw2KSkK KysJCXsKKysJCWFrZXlzej02NDsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNiwgYUtl eSk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtF WVxuIik7CisrCQkgICAgZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRW YWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsKKysJCSsrc3RlcDsKKysJCX0KKysJICAgIGVsc2UgaWYo IXN0cm5jYXNlY21wKGlidWYsIktFWXMgPSAiLDcpKQorKwkJeworKwkJYWtleXN6PTY0KjM7Cisr CQlsZW49aGV4MmJpbihpYnVmKzcsYUtleSk7CisrCQlpZihsZW4gIT0gOCkKKysJCSAgICB7Cisr CQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyPTE7CisrCQkgICAgYnJl YWs7CisrCQkgICAgfQorKwkJbWVtY3B5KGFLZXkrOCxhS2V5LDgpOworKwkJbWVtY3B5KGFLZXkr MTYsYUtleSw4KTsKKysJCWlidWZbNF09J1wwJzsKKysJCVByaW50VmFsdWUoIktFWXMiLGFLZXks bGVuKTsKKysJCSsrc3RlcDsKKysJCX0KKysJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21wKGlidWYs IktFWSIsMykpCisrCQl7CisrCQlpbnQgbj1pYnVmWzNdLScxJzsKKysKKysJCWFrZXlzej02NCoz OworKwkJbGVuPWhleDJiaW4oaWJ1Zis3LGFLZXkrbio4KTsKKysJCWlmKGxlbiAhPSA4KQorKwkJ ICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnI9MTsKKysJ CSAgICBicmVhazsKKysJCSAgICB9CisrCQlpYnVmWzRdPSdcMCc7CisrCQlQcmludFZhbHVlKGli dWYsYUtleSxsZW4pOworKwkJaWYobiA9PSAyKQorKwkJICAgICsrc3RlcDsKKysJCX0KKysJICAg IGVsc2UKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJ CX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDM6IC8qIElWID0geHh4eCAqLworKwkgICAgZnB1 dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAh PSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKKysJCWVyciA9IDE7CisrCQl9 CisrCSAgICBlbHNlCisrCQl7CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMp OworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxu Iik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFs dWUoIklWIiwgaVZlYywgbGVuKTsKKysJCXN0ZXAgPSAoZGlyKT8gNDogNTsKKysJCX0KKysJICAg IGJyZWFrOworKworKwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRz KGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIs IDEyKSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7CisrCQll cnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJaW50IG5uID0gc3RybGVuKGlidWYr MTIpOworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihp YnVmKzEyLG5uLTEscGxhaW50ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW49aGV4MmJpbihpYnVm KzEyLCBwbGFpbnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50 ZigiSW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7CisrCQkgICAgZXJyID0xOworKwkJ ICAgIGJyZWFrOworKwkJICAgIH0KKysJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCisr CQkgICAgeworKwkJICAgIHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKKysJCSAgICB9Cisr CQlQcmludFZhbHVlKCJQTEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4p OworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRl c3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLGFrZXlzeixudW1rZXlzLGFLZXks aVZlYyxkaXIscGxhaW50ZXh0LGxlbixyZnApOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7 CisrCQkgICAgYXNzZXJ0KGRpciA9PSAxKTsKKysJCSAgICByZXQgPSBERVNUZXN0KCZjdHgsIGFt b2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAx ID0gZW5jcnlwdCAqLworKwkJCQkgIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKKysJCSAg ICBPdXRwdXRWYWx1ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAorKwkJCQkhc3Ry Y21wKGFtb2RlLCJDRkIxIikpOworKwkJICAgIH0KKysJCXN0ZXAgPSA2OworKwkJfQorKwkgICAg YnJlYWs7CisrCisrCWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRz KGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAi LCAxMykgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0g MTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkK KysJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0 KTsKKysJCWVsc2UKKysJCSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7Cisr CQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRF WFRcbiIpOworKwkJICAgIGVyciA9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQkKKysJ CVByaW50VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNt cChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7 CisrCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5c3osIG51bWtleXMsIGFLZXksIGlWZWMsIAorKwkJ CSAgIGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnApOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAg ICB7CisrCQkgICAgYXNzZXJ0KGRpciA9PSAwKTsKKysJCSAgICByZXQgPSBERVNUZXN0KCZjdHgs IGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0 LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKKysJ CSAgICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4dCxs ZW4scmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOworKwkJICAgIH0KKysJCXN0ZXAg PSA2OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgNjoKKysJICAgIGlmIChpYnVmWzBd ICE9ICdcbicpCisrCQl7CisrCQllcnIgPSAxOworKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1pbmF0 b3JcbiIpOworKwkJfQorKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0gMCkK KysJCXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KKysJCWZwdXRzKGli dWYsIHJmcCk7CisrCQl9CisrCSAgICBzdGVwID0gMTsKKysJICAgIGJyZWFrOworKwkgICAgfQor Kwl9CisrICAgIGlmIChyZnApCisrCWZjbG9zZShyZnApOworKyAgICBpZiAoYWZwKQorKwlmY2xv c2UoYWZwKTsKKysgICAgcmV0dXJuIGVycjsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIFByb2Nlc3NlcyBlaXRoZXIg YSBzaW5nbGUgZmlsZSBvciAKKysgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBwYXNz ZWQgaW4gYSBmaWxlLgorKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFl c190ZXN0IC1mIHh4eC5yZXEKKysgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoKKysg ICAgYWVzX3Rlc3QgLWQgeHh4eHgueHh4CisrICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4dAor Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKytp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrICAgIHsKKysgICAgY2hhciAqcnFsaXN0 ID0gInJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7CisrICAgIEZJTEUgKmZwID0gTlVMTDsKKysg ICAgY2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7CisrICAgIGludCBmX29wdCA9IDAs IGRfb3B0ID0gMTsKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmKCFGSVBTX21vZGVf c2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlFWElUKDEpOworKwl9CisrI2Vu ZGlmCisrICAgIGlmIChhcmdjID4gMSkKKysJeworKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAi LWQiKSA9PSAwKQorKwkgICAgeworKwkgICAgZF9vcHQgPSAxOworKwkgICAgfQorKwllbHNlIGlm IChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCisrCSAgICB7CisrCSAgICBmX29wdCA9 IDE7CisrCSAgICBkX29wdCA9IDA7CisrCSAgICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIHBy aW50ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKKysJICAgIHJldHVybiAw OworKwkgICAgfQorKwlpZiAoYXJnYyA8IDMpCisrCSAgICB7CisrCSAgICBwcmludGYoIk1pc3Np bmcgcGFyYW1ldGVyXG4iKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKwlpZiAoZF9vcHQp CisrCSAgICBycWxpc3QgPSBhcmd2WzJdOworKwllbHNlCisrCSAgICB7CisrCSAgICBzdHJjcHko Zm4sIGFyZ3ZbMl0pOworKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107CisrCSAgICB9CisrCX0KKysg ICAgaWYgKGRfb3B0KQorKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KKysJaWYg KCEoZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJDYW5u b3Qgb3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKKysJICAgIHJldHVybiAtMTsKKysJICAgIH0KKysJ d2hpbGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCisrCSAgICB7CisrCSAgICBzdHJ0b2so Zm4sICJcclxuIik7CisrCSAgICBzdHJjcHkocmZuLCBmbik7CisrCSAgICBwcmludGYoIlByb2Nl c3Npbmc6ICVzXG4iLCByZm4pOworKwkgICAgaWYgKHByb2NfZmlsZShyZm4sIHJzcGZpbGUpKQor KwkJeworKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJm bik7CisrCQlFWElUKDEpOworKwkJfQorKwkgICAgfQorKwlmY2xvc2UoZnApOworKwl9CisrICAg IGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KKysJeworKwlpZiAoVkVSQk9TRSkKKysJCXByaW50Zigi UHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKKysJaWYgKHByb2NfZmlsZShmbiwgcnNwZmlsZSkpCisr CSAgICB7CisrCSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxu IiwgZm4pOworKwkgICAgfQorKwl9CisrICAgIEVYSVQoMCk7CisrICAgIHJldHVybiAwOworKyAg ICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfZHNzdnMuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19k c3N2cy5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMu ZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAw MDAwMDAwICswMjAwCitAQCAtMCwwICsxLDUzNyBAQAorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2xjb25mLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3RkaW8uaD4K KysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgICBwcmludGYoIk5v IEZJUFMgRFNBIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKyNlbHNlCisrCisr I2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxjdHlw ZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyB2b2lkIHBibihjb25z dCBjaGFyICpuYW1lLCBCSUdOVU0gKmJuKQorKwl7CisrCWludCBsZW4sIGk7CisrCXVuc2lnbmVk IGNoYXIgKnRtcDsKKysJbGVuID0gQk5fbnVtX2J5dGVzKGJuKTsKKysJdG1wID0gT1BFTlNTTF9t YWxsb2MobGVuKTsKKysJaWYgKCF0bXApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9y eSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysJQk5fYm4yYmluKGJu LCB0bXApOworKwlwcmludGYoIiVzID0gIiwgbmFtZSk7CisrCWZvciAoaSA9IDA7IGkgPCBsZW47 IGkrKykKKysJCXByaW50ZigiJTAyWCIsIHRtcFtpXSk7CisrCWZwdXRzKCJcbiIsIHN0ZG91dCk7 CisrCU9QRU5TU0xfZnJlZSh0bXApOworKwlyZXR1cm47CisrCX0KKysKKyt2b2lkIHByaW1lcygp CisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNDBdOworKyAgICBjaGFyIGxidWZbMTAyNDBdOwor KyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXpl b2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWZwdXRzKGJ1ZixzdGRvdXQpOworKwlpZiAo IXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVlOwor KwlpZighc3RyY21wKGtleXdvcmQsIlByaW1lIikpCisrCSAgICB7CisrCSAgICBCSUdOVU0gKnBw OworKworKwkgICAgcHA9Qk5fbmV3KCk7CisrCSAgICBkb19oZXgyYm4oJnBwLHZhbHVlKTsKKysJ ICAgIHByaW50ZigicmVzdWx0PSAlY1xuIiwKKysJCSAgIEJOX2lzX3ByaW1lX2V4KHBwLDIwLE5V TEwsTlVMTCkgPyAnUCcgOiAnRicpOworKwkgICAgfQkgICAgCisrCX0KKysgICAgfQorKworK3Zv aWQgcHFnKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEw MjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGludCBubW9kPTA7CisrCisr ICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlm ICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1 dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3Jk LCJbbW9kIikpCisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiTiIpKQorKwkgICAgeworKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7CisrCisrCSAgICBw cmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysKKysJICAgIHdoaWxlKG4tLSkKKysJCXsK KysJCXVuc2lnbmVkIGNoYXIgc2VlZFsyMF07CisrCQlEU0EgKmRzYTsKKysJCWludCBjb3VudGVy OworKwkJdW5zaWduZWQgbG9uZyBoOworKwkJZHNhID0gRklQU19kc2FfbmV3KCk7CisrCisrCQlp ZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDAsJmNvdW50ZXIs JmgsTlVMTCkpCisrCQkJeworKwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4aXQoMSk7Cisr CQkJfQorKwkJcGJuKCJQIixkc2EtPnApOworKwkJcGJuKCJRIixkc2EtPnEpOworKwkJcGJuKCJH Iixkc2EtPmcpOworKwkJcHYoIlNlZWQiLHNlZWQsMjApOworKwkJcHJpbnRmKCJjID0gJWRcbiIs Y291bnRlcik7CisrCQlwcmludGYoIkggPSAlbHhcbiIsaCk7CisrCQlwdXRjKCdcbicsc3Rkb3V0 KTsKKysJCX0KKysJICAgIH0KKysJZWxzZQorKwkgICAgZnB1dHMoYnVmLHN0ZG91dCk7CisrCX0K KysgICAgfQorKworK3ZvaWQgcHFndmVyKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsK KysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAg IEJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTCwgKmcgPSBOVUxMOworKyAgICBpbnQgY291bnRl ciwgY291bnRlcjI7CisrICAgIHVuc2lnbmVkIGxvbmcgaCwgaDI7CisrICAgIERTQSAqZHNhPU5V TEw7CisrICAgIGludCBubW9kPTA7CisrICAgIHVuc2lnbmVkIGNoYXIgc2VlZFsxMDI0XTsKKysK KysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJ aWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlm cHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlmcHV0cyhidWYsIHN0ZG91 dCk7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgbm1vZD1hdG9pKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKKysJICAgIHA9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKKysJICAgIHE9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKKysJICAgIGc9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlNlZWQiKSkKKysJICAgIHsKKysJICAgIGlu dCBzbGVuID0gaGV4MmJpbih2YWx1ZSwgc2VlZCk7CisrCSAgICBpZiAoc2xlbiAhPSAyMCkKKysJ CXsKKysJCWZwcmludGYoc3RkZXJyLCAiU2VlZCBwYXJzZSBsZW5ndGggZXJyb3JcbiIpOworKwkJ ZXhpdCAoMSk7CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJjIikp CisrCSAgICBjb3VudGVyID1hdG9pKGJ1Zis0KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IkgiKSkKKysJICAgIHsKKysJICAgIGggPSBhdG9pKHZhbHVlKTsKKysJICAgIGlmICghcCB8fCAh cSB8fCAhZykKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgRXJyb3JcbiIpOworKwkJ ZXhpdCAoMSk7CisrCQl9CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAgIGlmICgh RFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMjAgLCZjb3VudGVyMiwm aDIsTlVMTCkpCisrCQkJeworKwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4aXQoMSk7Cisr CQkJfQorKyAgICAgICAgICAgIGlmIChCTl9jbXAoZHNhLT5wLCBwKSB8fCBCTl9jbXAoZHNhLT5x LCBxKSB8fCBCTl9jbXAoZHNhLT5nLCBnKQorKwkJfHwgKGNvdW50ZXIgIT0gY291bnRlcjIpIHx8 IChoICE9IGgyKSkKKysJICAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIpOworKwkgICAgZWxzZQor KwkgICAgCXByaW50ZigiUmVzdWx0ID0gUFxuIik7CisrCSAgICBCTl9mcmVlKHApOworKwkgICAg Qk5fZnJlZShxKTsKKysJICAgIEJOX2ZyZWUoZyk7CisrCSAgICBwID0gTlVMTDsKKysJICAgIHEg PSBOVUxMOworKwkgICAgZyA9IE5VTEw7CisrCSAgICBGSVBTX2RzYV9mcmVlKGRzYSk7CisrCSAg ICBkc2EgPSBOVUxMOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysvKiBLZXlwYWlyIHZlcmlm aWNhdGlvbiByb3V0aW5lLiBOQjogdGhpcyBpc24ndCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBGSVBT MTQwLTIKKysgKiBhbGdvcml0aG0gdGVzdHMuIEl0IGlzIGFuIGFkZGl0aW9uYWwgdGVzdCB0byBw ZXJmb3JtIHNhbml0eSBjaGVja3Mgb24gdGhlCisrICogb3V0cHV0IG9mIHRoZSBLZXlQYWlyIHRl c3QuCisrICovCisrCisrc3RhdGljIGludCBkc3NfcGFyYW1jaGVjayhpbnQgbm1vZCwgQklHTlVN ICpwLCBCSUdOVU0gKnEsIEJJR05VTSAqZywKKysJCQkJCQkJQk5fQ1RYICpjdHgpCisrICAgIHsK KysgICAgQklHTlVNICpyZW0gPSBOVUxMOworKyAgICBpZiAoQk5fbnVtX2JpdHMocCkgIT0gbm1v ZCkKKysJcmV0dXJuIDA7CisrICAgIGlmIChCTl9udW1fYml0cyhxKSAhPSAxNjApCisrCXJldHVy biAwOworKyAgICBpZiAoQk5faXNfcHJpbWVfZXgocCwgQk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5V TEwpICE9IDEpCisrCXJldHVybiAwOworKyAgICBpZiAoQk5faXNfcHJpbWVfZXgocSwgQk5fcHJp bWVfY2hlY2tzLCBjdHgsIE5VTEwpICE9IDEpCisrCXJldHVybiAwOworKyAgICByZW0gPSBCTl9u ZXcoKTsKKysgICAgaWYgKCFCTl9tb2QocmVtLCBwLCBxLCBjdHgpIHx8ICFCTl9pc19vbmUocmVt KQorKyAgICAJfHwgKEJOX2NtcChnLCBCTl92YWx1ZV9vbmUoKSkgPD0gMCkKKysJfHwgIUJOX21v ZF9leHAocmVtLCBnLCBxLCBwLCBjdHgpIHx8ICFCTl9pc19vbmUocmVtKSkKKysJeworKwlCTl9m cmVlKHJlbSk7CisrCXJldHVybiAwOworKwl9CisrICAgIC8qIFRvZG86IGNoZWNrIGcgKi8KKysg ICAgQk5fZnJlZShyZW0pOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworK3ZvaWQga2V5dmVy KCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOwor KyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIEJJR05VTSAqcCA9IE5VTEwsICpxID0g TlVMTCwgKmcgPSBOVUxMLCAqWCA9IE5VTEwsICpZID0gTlVMTDsKKysgICAgQklHTlVNICpZMjsK KysgICAgQk5fQ1RYICpjdHggPSBOVUxMOworKyAgICBpbnQgbm1vZD0wLCBwYXJhbWNoZWNrID0g MDsKKysKKysgICAgY3R4ID0gQk5fQ1RYX25ldygpOworKyAgICBZMiA9IEJOX25ldygpOworKwor KyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlp ZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZw dXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29y ZCwiW21vZCIpKQorKwkgICAgeworKwkgICAgaWYgKHApCisrCQlCTl9mcmVlKHApOworKwkgICAg cCA9IE5VTEw7CisrCSAgICBpZiAocSkKKysJCUJOX2ZyZWUocSk7CisrCSAgICBxID0gTlVMTDsK KysJICAgIGlmIChnKQorKwkJQk5fZnJlZShnKTsKKysJICAgIGcgPSBOVUxMOworKwkgICAgcGFy YW1jaGVjayA9IDA7CisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwkgICAgfQorKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgcD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgcT1oZXgyYm4odmFsdWUpOworKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgZz1oZXgyYm4odmFsdWUpOworKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiWCIpKQorKwkgICAgWD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiWSIpKQorKwkgICAgeworKwkgICAgWT1oZXgyYm4odmFsdWUpOwor KwkgICAgaWYgKCFwIHx8ICFxIHx8ICFnIHx8ICFYIHx8ICFZKQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsICJQYXJzZSBFcnJvclxuIik7CisrCQlleGl0ICgxKTsKKysJCX0KKysJICAgIHBibigi UCIscCk7CisrCSAgICBwYm4oIlEiLHEpOworKwkgICAgcGJuKCJHIixnKTsKKysJICAgIHBibigi WCIsWCk7CisrCSAgICBwYm4oIlkiLFkpOworKwkgICAgaWYgKCFwYXJhbWNoZWNrKQorKwkJewor KwkJaWYgKGRzc19wYXJhbWNoZWNrKG5tb2QsIHAsIHEsIGcsIGN0eCkpCisrCQkJcGFyYW1jaGVj ayA9IDE7CisrCQllbHNlCisrCQkJcGFyYW1jaGVjayA9IC0xOworKwkJfQorKwkgICAgaWYgKHBh cmFtY2hlY2sgIT0gMSkKKysJICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7CisrCSAgICBlbHNl CisrCQl7CisrCQlpZiAoIUJOX21vZF9leHAoWTIsIGcsIFgsIHAsIGN0eCkgfHwgQk5fY21wKFky LCBZKSkKKysJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKKysJICAgICAgICBlbHNlCisr CSAgICAJCXByaW50ZigiUmVzdWx0ID0gUFxuIik7CisrCQl9CisrCSAgICBCTl9mcmVlKFgpOwor KwkgICAgQk5fZnJlZShZKTsKKysJICAgIFggPSBOVUxMOworKwkgICAgWSA9IE5VTEw7CisrCSAg ICB9CisrCX0KKysJaWYgKHApCisrCSAgICBCTl9mcmVlKHApOworKwlpZiAocSkKKysJICAgIEJO X2ZyZWUocSk7CisrCWlmIChnKQorKwkgICAgQk5fZnJlZShnKTsKKysJaWYgKFkyKQorKwkgICAg Qk5fZnJlZShZMik7CisrICAgIH0KKysKKyt2b2lkIGtleXBhaXIoKQorKyAgICB7CisrICAgIGNo YXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQs ICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVv ZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAm dmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRp bnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIG5tb2Q9YXRv aSh2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJOIikpCisrCSAgICB7CisrCSAg ICBEU0EgKmRzYTsKKysJICAgIGludCBuPWF0b2kodmFsdWUpOworKworKwkgICAgcHJpbnRmKCJb bW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAg IGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLE5VTEwsMCxOVUxMLE5V TEwsTlVMTCkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9 CisrCSAgICBwYm4oIlAiLGRzYS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7CisrCSAgICBw Ym4oIkciLGRzYS0+Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysKKysJICAgIHdoaWxl KG4tLSkKKysJCXsKKysJCWlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKwkJCXsKKysJCQlk b19wcmludF9lcnJvcnMoKTsKKysJCQlleGl0KDEpOworKwkJCX0KKysKKysJCXBibigiWCIsZHNh LT5wcml2X2tleSk7CisrCQlwYm4oIlkiLGRzYS0+cHViX2tleSk7CisrCQlwdXRjKCdcbicsc3Rk b3V0KTsKKysJCX0KKysJICAgIH0KKysJfQorKyAgICB9CisrCisrdm9pZCBzaWdnZW4oKQorKyAg ICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNo YXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysgICAgRFNBICpkc2E9TlVM TDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisr CXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7 CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21w KGtleXdvcmQsIlttb2QiKSkKKysJICAgIHsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAg ICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysJICAgIGlmIChkc2EpCisrCQlGSVBT X2RzYV9mcmVlKGRzYSk7CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAgIGlmICgh RFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLE5VTEwsMCxOVUxMLE5VTEwsTlVM TCkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCSAg ICBwYm4oIlAiLGRzYS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7CisrCSAgICBwYm4oIkci LGRzYS0+Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJICAgIH0KKysJZWxzZSBpZigh c3RyY21wKGtleXdvcmQsIk1zZyIpKQorKwkgICAgeworKwkgICAgdW5zaWduZWQgY2hhciBtc2db MTAyNF07CisrCSAgICB1bnNpZ25lZCBjaGFyIHNidWZbNjBdOworKwkgICAgdW5zaWduZWQgaW50 IHNsZW47CisrCSAgICBpbnQgbjsKKysJICAgIEVWUF9QS0VZIHBrOworKwkgICAgRVZQX01EX0NU WCBtY3R4OworKwkgICAgRFNBX1NJRyAqc2lnOworKwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4 KTsKKysKKysJICAgIG49aGV4MmJpbih2YWx1ZSxtc2cpOworKwkgICAgcHYoIk1zZyIsbXNnLG4p OworKworKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisrCQl7CisrCQlkb19wcmlu dF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCSAgICBway50eXBlID0gRVZQX1BLRVlf RFNBOworKwkgICAgcGsucGtleS5kc2EgPSBkc2E7CisrCSAgICBwYm4oIlkiLGRzYS0+cHViX2tl eSk7CisrCisrCSAgICBFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpOwor KwkgICAgRVZQX1NpZ25VcGRhdGUoJm1jdHgsIG1zZywgbik7CisrCSAgICBFVlBfU2lnbkZpbmFs KCZtY3R4LCBzYnVmLCAmc2xlbiwgJnBrKTsKKysKKysJICAgIHNpZyA9IERTQV9TSUdfbmV3KCk7 CisrCSAgICBGSVBTX2RzYV9zaWdfZGVjb2RlKHNpZywgc2J1Ziwgc2xlbik7CisrCisrCSAgICBw Ym4oIlIiLHNpZy0+cik7CisrCSAgICBwYm4oIlMiLHNpZy0+cyk7CisrCSAgICBwdXRjKCdcbics c3Rkb3V0KTsKKysJICAgIERTQV9TSUdfZnJlZShzaWcpOworKwkgICAgRVZQX01EX0NUWF9jbGVh bnVwKCZtY3R4KTsKKysJICAgIH0KKysJfQorKwlpZiAoZHNhKQorKwkJRklQU19kc2FfZnJlZShk c2EpOworKyAgICB9CisrCisrdm9pZCBzaWd2ZXIoKQorKyAgICB7CisrICAgIERTQSAqZHNhPU5V TEw7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIHVu c2lnbmVkIGNoYXIgbXNnWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAg IGludCBubW9kPTAsIG49MDsKKysgICAgRFNBX1NJRyBzZywgKnNpZyA9ICZzZzsKKysKKysgICAg c2lnLT5yID0gTlVMTDsKKysgICAgc2lnLT5zID0gTlVMTDsKKysKKysgICAgd2hpbGUoZmdldHMo YnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZr ZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsK KysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAg IHsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAgICBpZihkc2EpCisrCQlGSVBTX2RzYV9m cmVlKGRzYSk7CisrCSAgICBkc2E9RklQU19kc2FfbmV3KCk7CisrCSAgICB9CisrCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJQIikpCisrCSAgICBkc2EtPnA9aGV4MmJuKHZhbHVlKTsKKysJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKKysJICAgIGRzYS0+cT1oZXgyYm4odmFsdWUpOwor KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgeworKwkgICAgZHNhLT5nPWhl eDJibih2YWx1ZSk7CisrCisrCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysJ ICAgIHBibigiUCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJICAgIHBibigi RyIsZHNhLT5nKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQorKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCisrCSAgICB7CisrCSAgICBuPWhleDJiaW4odmFsdWUs bXNnKTsKKysJICAgIHB2KCJNc2ciLG1zZyxuKTsKKysJICAgIH0KKysJZWxzZSBpZighc3RyY21w KGtleXdvcmQsIlkiKSkKKysJICAgIGRzYS0+cHViX2tleT1oZXgyYm4odmFsdWUpOworKwllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiUiIpKQorKwkgICAgc2lnLT5yPWhleDJibih2YWx1ZSk7Cisr CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTIikpCisrCSAgICB7CisrCSAgICBFVlBfTURfQ1RY IG1jdHg7CisrCSAgICBFVlBfUEtFWSBwazsKKysJICAgIHVuc2lnbmVkIGNoYXIgc2lnYnVmWzYw XTsKKysJICAgIHVuc2lnbmVkIGludCBzbGVuOworKwkgICAgaW50IHI7CisrCSAgICBFVlBfTURf Q1RYX2luaXQoJm1jdHgpOworKwkgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKKysJICAgIHBr LnBrZXkuZHNhID0gZHNhOworKwkgICAgc2lnLT5zPWhleDJibih2YWx1ZSk7CisrCQorKwkgICAg cGJuKCJZIixkc2EtPnB1Yl9rZXkpOworKwkgICAgcGJuKCJSIixzaWctPnIpOworKwkgICAgcGJu KCJTIixzaWctPnMpOworKworKwkgICAgc2xlbiA9IEZJUFNfZHNhX3NpZ19lbmNvZGUoc2lnYnVm LCBzaWcpOworKwkgICAgRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwp OworKwkgICAgRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKKysJICAgIHIgPSBFVlBf VmVyaWZ5RmluYWwoJm1jdHgsIHNpZ2J1Ziwgc2xlbiwgJnBrKTsKKysJICAgIEVWUF9NRF9DVFhf Y2xlYW51cCgmbWN0eCk7CisrCQorKwkgICAgcHJpbnRmKCJSZXN1bHQgPSAlY1xuIiwgciA9PSAx ID8gJ1AnIDogJ0YnKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQorKwl9Cisr ICAgIH0KKysKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgeworKyAgICBp ZihhcmdjICE9IDIpCisrCXsKKysJZnByaW50ZihzdGRlcnIsIiVzIFtwcmltZXxwcWd8cHFndmVy fGtleXBhaXJ8c2lnZ2VufHNpZ3Zlcl1cbiIsYXJndlswXSk7CisrCWV4aXQoMSk7CisrCX0KKysg ICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCWV4 aXQoMSk7CisrCX0KKysgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJwcmltZSIpKQorKwlwcmltZXMo KTsKKysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInBxZyIpKQorKwlwcWcoKTsKKysgICAg ZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInBxZ3ZlciIpKQorKwlwcWd2ZXIoKTsKKysgICAgZWxz ZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXBhaXIiKSkKKysJa2V5cGFpcigpOworKyAgICBlbHNl IGlmKCFzdHJjbXAoYXJndlsxXSwia2V5dmVyIikpCisrCWtleXZlcigpOworKyAgICBlbHNlIGlm KCFzdHJjbXAoYXJndlsxXSwic2lnZ2VuIikpCisrCXNpZ2dlbigpOworKyAgICBlbHNlIGlmKCFz dHJjbXAoYXJndlsxXSwic2lndmVyIikpCisrCXNpZ3ZlcigpOworKyAgICBlbHNlCisrCXsKKysJ ZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKKysJZXhp dCgxKTsKKysJfQorKworKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMuZmlwcyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYworLS0tIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNTox NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfcm5ndnMuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCAr MSwyMzAgQEAKKysvKgorKyAqIENydWRlIHRlc3QgZHJpdmVyIGZvciBwcm9jZXNzaW5nIHRoZSBW U1QgYW5kIE1DVCB0ZXN0dmVjdG9yIGZpbGVzCisrICogZ2VuZXJhdGVkIGJ5IHRoZSBDTVZQIFJO R1ZTIHByb2R1Y3QuCisrICoKKysgKiBOb3RlIHRoZSBpbnB1dCBmaWxlcyBhcmUgYXNzdW1lZCB0 byBoYXZlIGEgX3ZlcnlfIHNwZWNpZmljIGZvcm1hdAorKyAqIGFzIGRlc2NyaWJlZCBpbiB0aGUg TklTVCBkb2N1bWVudCAiVGhlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yCisrICogVmFsaWRhdGlv biBTeXN0ZW0gKFJOR1ZTKSIsIE1heSAyNSwgMjAwNC4KKysgKgorKyAqLworKyNpbmNsdWRlIDxv cGVuc3NsL29wZW5zc2xjb25mLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVk ZSA8c3RkaW8uaD4KKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAg ICBwcmludGYoIk5vIEZJUFMgUk5HIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4gMDsKKyt9Cisr I2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Rz YS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19y YW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrI2luY2x1ZGUgPHN0cmluZy5o PgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3Zv aWQgdnN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOworKyAgICB1 bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOwor KyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBj aGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgbG9uZyBp LCBrZXlsZW47CisrCisrICAgIGtleWxlbiA9IDA7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1Zixz aXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWZwdXRzKGJ1ZixzdGRvdXQpOworKwlp Zighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAxNjsKKysJ ZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAy NDsKKysJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykpCisrCQlrZXls ZW4gPSAzMjsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1Zikp CisrCQljb250aW51ZTsKKysJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKKysJICAgIHsKKysJ ICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0ga2V5bGVuKQorKwkJ eworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVjdGluZyAlbGRc biIsIGtleWxlbik7CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJEVCIpKQorKwkgICAgeworKwkgICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZpKTsK KysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIERU IGxlbmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJWIikpCisrCSAgICB7CisrCSAgICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7Cisr CSAgICBpZiAoaSAhPSAxNikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBWIGxl bmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBpZiAoIWtleSB8fCAhZHQpCisr CQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsKKysJCXJldHVy bjsKKysJCX0KKysKKysJICAgIEZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVuKTsKKysJICAg IEZJUFNfcmFuZF9zZWVkKHYsMTYpOworKwkgICAgRklQU19yYW5kX3NldF9kdChkdCk7CisrCSAg ICBpZiAoRklQU19yYW5kX2J5dGVzKHJldCwxNikgPD0gMCkKKysJCXsKKysJCWZwcmludGYoc3Rk ZXJyLCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKKysJICAgICAgICByZXR1cm47Cisr CSAgICAgICAgfQorKworKwkgICAgcHYoIlIiLHJldCwxNik7CisrCSAgICBPUEVOU1NMX2ZyZWUo a2V5KTsKKysJICAgIGtleSA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUoZHQpOworKwkgICAg ZHQgPSBOVUxMOworKwkgICAgT1BFTlNTTF9mcmVlKHYpOworKwkgICAgdiA9IE5VTEw7CisrCSAg ICB9CisrCX0KKysgICAgfQorKworK3ZvaWQgbWN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBj aGFyICprZXkgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKKysgICAgdW5z aWduZWQgY2hhciAqZHQgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07CisrICAg IGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdv cmQsICp2YWx1ZTsKKysgICAgbG9uZyBpLCBrZXlsZW47CisrICAgIGludCBqOworKworKyAgICBr ZXlsZW4gPSAwOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0g TlVMTCkKKysJeworKwlmcHV0cyhidWYsc3Rkb3V0KTsKKysJaWYoIXN0cm5jbXAoYnVmLCJbQUVT IDEyOC1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMTY7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVm LCJbQUVTIDE5Mi1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMjQ7CisrCWVsc2UgaWYoIXN0cm5j bXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMzI7CisrCWlmICghcGFy c2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGludWU7CisrCWlm KCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCSAgICB7CisrCSAgICBrZXk9aGV4MmJpbl9tKHZh bHVlLCZpKTsKKysJICAgIGlmIChpICE9IGtleWxlbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJy LCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOworKwkJcmV0 dXJuOworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKKysJ ICAgIHsKKysJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikK KysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOworKwkJcmV0 dXJuOworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQorKwkg ICAgeworKwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisr CQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOworKwkJcmV0dXJu OworKwkJfQorKworKwkgICAgaWYgKCFrZXkgfHwgIWR0KQorKwkJeworKwkJZnByaW50ZihzdGRl cnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBG SVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7CisrCSAgICBGSVBTX3JhbmRfc2VlZCh2LDE2 KTsKKysJICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQorKwkJeworKwkJICAgIEZJUFNf cmFuZF9zZXRfZHQoZHQpOworKwkJICAgIGlmIChGSVBTX3JhbmRfYnl0ZXMocmV0LDE2KSA8PSAw KQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxu Iik7CisrCQkgICAgICAgIHJldHVybjsKKysJCSAgICAgICAgfQorKwkJICAgIC8qIEluY3JlbWVu dCBEVCAqLworKwkJICAgIGZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKKysJCQl7CisrCQkJZHRb al0rKzsKKysJCQlpZiAoZHRbal0pCisrCQkJCWJyZWFrOworKwkJCX0KKysJCX0KKysKKysJICAg IHB2KCJSIixyZXQsMTYpOworKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7CisrCSAgICBrZXkgPSBO VUxMOworKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKKysJICAgIGR0ID0gTlVMTDsKKysJICAgIE9Q RU5TU0xfZnJlZSh2KTsKKysJICAgIHYgPSBOVUxMOworKwkgICAgfQorKwl9CisrICAgIH0KKysK KytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgeworKyAgICBpZihhcmdjICE9 IDIpCisrCXsKKysJZnByaW50ZihzdGRlcnIsIiVzIFttY3R8dnN0XVxuIixhcmd2WzBdKTsKKysJ ZXhpdCgxKTsKKysJfQorKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmlu dF9lcnJvcnMoKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBGSVBTX3JhbmRfcmVzZXQoKTsKKysg ICAgaWYgKCFGSVBTX3JhbmRfdGVzdF9tb2RlKCkpCisrCXsKKysJZnByaW50ZihzdGRlcnIsICJF cnJvciBzZXR0aW5nIFBSTkcgdGVzdCBtb2RlXG4iKTsKKysJZG9fcHJpbnRfZXJyb3JzKCk7Cisr CWV4aXQoMSk7CisrCX0KKysgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJtY3QiKSkKKysJbWN0KCk7 CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJ2c3QiKSkKKysJdnN0KCk7CisrICAgIGVs c2UKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3Zb MV0pOworKwlleGl0KDEpOworKwl9CisrCisrICAgIHJldHVybiAwOworKyAgICB9CisrI2VuZGlm CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jCist LS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlwcwky MDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAw MDAwICswMjAwCitAQCAtMCwwICsxLDM5MCBAQAorKy8qIGZpcHNfcnNhZ3Rlc3QuYyAqLworKy8q IFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0 aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAwNSwyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1l dDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3Bl blNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAg IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisr ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysg KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBo aWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29t KS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1 ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlv Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L3g1MDl2My5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxu Iik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191 dGwuaCIKKysKKytpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7Cisrc3RhdGljIGlu dCByc2FfcHJpbnRrZXkxKEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhwMSwgQklH TlVNICpYcDIsIEJJR05VTSAqWHAsCisrCQlCSUdOVU0gKmUpOworK3N0YXRpYyBpbnQgcnNhX3By aW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNhLAorKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEy LCBCSUdOVU0gKlhxKTsKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsK KysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysKKysJaW50IHJldCA9IDE7CisrCisr CWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQln b3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVs c2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJ b3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKwor KwlpZiAoIWluKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFs aXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisr CQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJv clxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFyc2FfdGVzdChvdXQsIGluKSkK KysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBR1RFU1QgZmlsZSBwcm9jZXNzaW5n IGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOworKwor KwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYgKGlu ICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQgIT0g c3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9CisrCisr I2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJzYV90ZXN0KEZJTEUg Km91dCwgRklMRSAqaW4pCisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7 CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJUlNBICpyc2EgPSBOVUxMOworKwlCSUdOVU0g KlhwMSA9IE5VTEwsICpYcDIgPSBOVUxMLCAqWHAgPSBOVUxMOworKwlCSUdOVU0gKlhxMSA9IE5V TEwsICpYcTIgPSBOVUxMLCAqWHEgPSBOVUxMOworKwlCSUdOVU0gKmUgPSBOVUxMOworKwlpbnQg cmV0ID0gMDsKKysJaW50IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9j KFJTQV9URVNUX01BWExJTkVMRU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RF U1RfTUFYTElORUxFTik7CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3Rv IGVycm9yOworKworKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4s IGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Cisr CQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysK KysJCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwor KworKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkg anVzdCBjb3B5ICovCisrCQlpZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKKysJCQl7CisrCQkJaWYg KGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51 ZTsKKysJCQl9CisrCisrCQlxID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3Bh Y2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0g MDsKKysKKysJCSpwID0gMDsKKysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVh ZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hh cikqdmFsdWUpKQorKwkJCXZhbHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2Ug ZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3 aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0t ID0gMDsKKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJ4cDEiKSkKKysJCQl7CisrCQkJaWYg KFhwMSB8fCAhZG9faGV4MmJuKCZYcDEsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwor KwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMiIpKQorKwkJCXsKKysJCQlp ZiAoWHAyIHx8ICFkb19oZXgyYm4oJlhwMix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7 CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHAiKSkKKysJCQl7CisrCQkJ aWYgKFhwIHx8ICFkb19oZXgyYm4oJlhwLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsK KysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJ4cTEiKSkKKysJCQl7CisrCQkJ aWYgKFhxMSB8fCAhZG9faGV4MmJuKCZYcTEsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMiIpKQorKwkJCXsKKysJ CQlpZiAoWHEyIHx8ICFkb19oZXgyYm4oJlhxMix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJy b3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHEiKSkKKysJCQl7Cisr CQkJaWYgKFhxIHx8ICFkb19oZXgyYm4oJlhxLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJlIikpCisrCQkJeworKwkJ CWlmIChlIHx8ICFkb19oZXgyYm4oJmUsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwor KwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAxIikpCisrCQkJY29udGludWU7 CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwMiIpKQorKwkJCWNvbnRpbnVlOworKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicCIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAicTEiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgInEyIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJxIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJuIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJk IikpCisrCQkJY29udGludWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJ CWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJaWYgKGUgJiYgWHAxICYmIFhwMiAmJiBYcCkK KysJCQl7CisrCQkJcnNhID0gRklQU19yc2FfbmV3KCk7CisrCQkJaWYgKCFyc2EpCisrCQkJCWdv dG8gZXJyb3I7CisrCQkJaWYgKCFyc2FfcHJpbnRrZXkxKG91dCwgcnNhLCBYcDEsIFhwMiwgWHAs IGUpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCUJOX2ZyZWUoWHAxKTsKKysJCQlYcDEgPSBOVUxM OworKwkJCUJOX2ZyZWUoWHAyKTsKKysJCQlYcDIgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHApOwor KwkJCVhwID0gTlVMTDsKKysJCQlCTl9mcmVlKGUpOworKwkJCWUgPSBOVUxMOworKwkJCX0KKysK KysJCWlmIChyc2EgJiYgWHExICYmIFhxMiAmJiBYcSkKKysJCQl7CisrCQkJaWYgKCFyc2FfcHJp bnRrZXkyKG91dCwgcnNhLCBYcTEsIFhxMiwgWHEpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCUJO X2ZyZWUoWHExKTsKKysJCQlYcTEgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHEyKTsKKysJCQlYcTIg PSBOVUxMOworKwkJCUJOX2ZyZWUoWHEpOworKwkJCVhxID0gTlVMTDsKKysJCQlGSVBTX3JzYV9m cmVlKHJzYSk7CisrCQkJcnNhID0gTlVMTDsKKysJCQl9CisrCQl9CisrCisrCXJldCA9IDE7Cisr CisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYp OworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysKKysJaWYgKFhw MSkKKysJCUJOX2ZyZWUoWHAxKTsKKysJaWYgKFhwMikKKysJCUJOX2ZyZWUoWHAyKTsKKysJaWYg KFhwKQorKwkJQk5fZnJlZShYcCk7CisrCWlmIChYcTEpCisrCQlCTl9mcmVlKFhxMSk7CisrCWlm IChYcTEpCisrCQlCTl9mcmVlKFhxMSk7CisrCWlmIChYcTIpCisrCQlCTl9mcmVlKFhxMik7Cisr CWlmIChYcSkKKysJCUJOX2ZyZWUoWHEpOworKwlpZiAoZSkKKysJCUJOX2ZyZWUoZSk7CisrCWlm IChyc2EpCisrCQlGSVBTX3JzYV9mcmVlKHJzYSk7CisrCisrCXJldHVybiByZXQ7CisrCisrCXBh cnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nl c3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysKKytz dGF0aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAq WHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwKKysJCUJJR05VTSAqZSkKKysJeworKwlpbnQg cmV0ID0gMDsKKysJQklHTlVNICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7CisrCXAxID0gQk5fbmV3 KCk7CisrCXAyID0gQk5fbmV3KCk7CisrCWlmICghcDEgfHwgIXAyKQorKwkJZ290byBlcnJvcjsK KysKKysJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBwMSwgcDIsIE5VTEwsIE5VTEwsIFhw MSwgWHAyLCBYcCwKKysJCQkJCQlOVUxMLCBOVUxMLCBOVUxMLCBlLCBOVUxMKSkKKysJCWdvdG8g ZXJyb3I7CisrCisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicDEiLCBwMSk7CisrCWRvX2JuX3By aW50X25hbWUob3V0LCAicDIiLCBwMik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicCIsIHJz YS0+cCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAocDEpCisrCQlCTl9mcmVl KHAxKTsKKysJaWYgKHAyKQorKwkJQk5fZnJlZShwMik7CisrCisrCXJldHVybiByZXQ7CisrCX0K KysKKytzdGF0aWMgaW50IHJzYV9wcmludGtleTIoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJ R05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklHTlVNICpYcSkKKysJeworKwlpbnQgcmV0ID0gMDsK KysJQklHTlVNICpxMSA9IE5VTEwsICpxMiA9IE5VTEw7CisrCXExID0gQk5fbmV3KCk7CisrCXEy ID0gQk5fbmV3KCk7CisrCWlmICghcTEgfHwgIXEyKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYg KCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBxMSwgcTIsIE5VTEwsIE5VTEws IE5VTEwsCisrCQkJCQkJWHExLCBYcTIsIFhxLCBOVUxMLCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7 CisrCisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicTEiLCBxMSk7CisrCWRvX2JuX3ByaW50X25h bWUob3V0LCAicTIiLCBxMik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicSIsIHJzYS0+cSk7 CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAibiIsIHJzYS0+bik7CisrCWRvX2JuX3ByaW50X25h bWUob3V0LCAiZCIsIHJzYS0+ZCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAo cTEpCisrCQlCTl9mcmVlKHExKTsKKysJaWYgKHEyKQorKwkJQk5fZnJlZShxMik7CisrCisrCXJl dHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfcnNhc3Rlc3QuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMJ MjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMzcwIEBACisr LyogZmlwc19yc2FzdGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29u IChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDA1Lgor KyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisr ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisr ICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3 cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisrICov CisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUg PHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBT CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50Zigi Tm8gRklQUyBSU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UK KysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMgaW50IHJzYV9zdGVzdChGSUxF ICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbik7Cisrc3RhdGljIGludCByc2FfcHJpbnRzaWco RklMRSAqb3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAorKwkJdW5zaWduZWQgY2hh ciAqTXNnLCBsb25nIE1zZ2xlbiwgaW50IFNhbHRsZW4pOworKworK2ludCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOworKwor KwlpbnQgcmV0ID0gMSwgU2FsdGxlbiA9IC0xOworKworKwlpZighRklQU19tb2RlX3NldCgxKSkK KysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlm ICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwgYXJndlsxXSkpCisrCQl7CisrCQlT YWx0bGVuID0gYXRvaShhcmd2WzJdKTsKKysJCWlmIChTYWx0bGVuIDwgMCkKKysJCQl7CisrCQkJ ZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0IGxlbmd0aFxuIik7CisrCQkJZ290 byBlbmQ7CisrCQkJfQorKwkJYXJnYyAtPSAyOworKwkJYXJndiArPSAyOworKwkJfQorKwllbHNl IGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwgYXJndlsxXSkpCisrCQl7CisrCQlT YWx0bGVuID0gLTI7CisrCQlhcmdjLS07CisrCQlhcmd2Kys7CisrCQl9CisrCisrCWlmIChhcmdj ID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJy Iik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0 ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmludGYo c3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBl bmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRB TCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9Cisr CisrCWlmICghcnNhX3N0ZXN0KG91dCwgaW4sIFNhbHRsZW4pKQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsICJGQVRBTCBSU0FTVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290 byBlbmQ7CisrCQl9CisrCWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJl dCkKKysJCWRvX3ByaW50X2Vycm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkK KysJCWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3Nl KG91dCk7CisrCisrCXJldHVybiByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFJTQV9URVNUX01B WExJTkVMRU4JMTAyNDAKKysKKytpbnQgcnNhX3N0ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGlu dCBTYWx0bGVuKQorKwl7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwlj aGFyICprZXl3b3JkLCAqdmFsdWU7CisrCVJTQSAqcnNhID0gTlVMTDsKKysJY29uc3QgRVZQX01E ICpkZ3N0ID0gTlVMTDsKKysJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTDsKKysJbG9uZyBNc2ds ZW4gPSAtMTsKKysJaW50IGtleWxlbiA9IC0xLCBjdXJyZW50X2tleWxlbiA9IC0xOworKwlpbnQg cmV0ID0gMDsKKysJaW50IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9j KFJTQV9URVNUX01BWExJTkVMRU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RF U1RfTUFYTElORUxFTik7CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3Rv IGVycm9yOworKworKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4s IGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Cisr CQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysK KysJCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwor KworKwkJLyogSWYgbm8gPSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCkKKysJCQl7CisrCQkJaWYg KGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51 ZTsKKysJCQl9CisrCisrCQlxID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3Bh Y2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0g MDsKKysKKysJCSpwID0gMDsKKysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVh ZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hh cikqdmFsdWUpKQorKwkJCXZhbHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2Ug ZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3 aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0t ID0gMDsKKysKKysJCS8qIExvb2sgZm9yIFttb2QgPSBYWFhdIGZvciBrZXkgbGVuZ3RoICovCisr CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiW21vZCIpKQorKwkJCXsKKysJCQlwID0gdmFsdWUg KyBzdHJsZW4odmFsdWUpIC0gMTsKKysJCQlpZiAoKnAgIT0gJ10nKQorKwkJCQlnb3RvIHBhcnNl X2Vycm9yOworKwkJCSpwID0gMDsKKysJCQlrZXlsZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAo a2V5bGVuIDwgMCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsICJTSEFBbGciKSkKKysJCQl7CisrCQkJaWYgKCFzdHJjbXAodmFsdWUs ICJTSEExIikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMSgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAo dmFsdWUsICJTSEEyMjQiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyMjQoKTsKKysJCQllbHNlIGlm ICghc3RyY21wKHZhbHVlLCAiU0hBMjU2IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7Cisr CQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTM4NCIpKQorKwkJCQlkZ3N0ID0gRVZQX3No YTM4NCgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEE1MTIiKSkKKysJCQkJZGdz dCA9IEVWUF9zaGE1MTIoKTsKKysJCQllbHNlCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIs CisrCQkJCQkiRkFUQUw6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBcIiVzXCJcbiIsCisrCQkJCQkJ CQl2YWx1ZSk7CisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJCX0KKysJCQl9CisrCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKKysJCQl7CisrCQkJaWYgKE1zZykKKysJCQkJ Z290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12 YWx1ZSkgPSAnMCc7CisrCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKKysJCQlp ZiAoIU1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCisrCQlmcHV0cyhvbGlu ZWJ1Ziwgb3V0KTsKKysKKysJCS8qIElmIGtleSBsZW5ndGggaGFzIGNoYW5nZWQsIGdlbmVyYXRl IGFuZCBvdXRwdXQgcHVibGljCisrCQkgKiBrZXkgY29tcG9uZW50cyBvZiBuZXcgUlNBIHByaXZh dGUga2V5LgorKwkJICovCisrCisrCQlpZiAoa2V5bGVuICE9IGN1cnJlbnRfa2V5bGVuKQorKwkJ CXsKKysJCQlCSUdOVU0gKmJuX2U7CisrCQkJaWYgKHJzYSkKKysJCQkJRklQU19yc2FfZnJlZShy c2EpOworKwkJCXJzYSA9IEZJUFNfcnNhX25ldygpOworKwkJCWlmICghcnNhKQorKwkJCQlnb3Rv IGVycm9yOworKwkJCWJuX2UgPSBCTl9uZXcoKTsKKysJCQlpZiAoIWJuX2UgfHwgIUJOX3NldF93 b3JkKGJuX2UsIDB4MTAwMSkpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJaWYgKCFSU0FfWDkzMV9n ZW5lcmF0ZV9rZXlfZXgocnNhLCBrZXlsZW4sIGJuX2UsIE5VTEwpKQorKwkJCQlnb3RvIGVycm9y OworKwkJCUJOX2ZyZWUoYm5fZSk7CisrCQkJZnB1dHMoIm4gPSAiLCBvdXQpOworKwkJCWRvX2Ju X3ByaW50KG91dCwgcnNhLT5uKTsKKysJCQlmcHV0cygiXG5lID0gIiwgb3V0KTsKKysJCQlkb19i bl9wcmludChvdXQsIHJzYS0+ZSk7CisrCQkJZnB1dHMoIlxuIiwgb3V0KTsKKysJCQljdXJyZW50 X2tleWxlbiA9IGtleWxlbjsKKysJCQl9CisrCisrCQlpZiAoTXNnICYmIGRnc3QpCisrCQkJewor KwkJCWlmICghcnNhX3ByaW50c2lnKG91dCwgcnNhLCBkZ3N0LCBNc2csIE1zZ2xlbiwKKysJCQkJ CQkJCVNhbHRsZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShNc2cpOwor KwkJCU1zZyA9IE5VTEw7CisrCQkJfQorKworKwkJfQorKworKwlyZXQgPSAxOworKworKwllcnJv cjoKKysKKysJaWYgKG9saW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYg KGxpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChyc2EpCisrCQlGSVBT X3JzYV9mcmVlKHJzYSk7CisrCisrCXJldHVybiByZXQ7CisrCisrCXBhcnNlX2Vycm9yOgorKwor KwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxu IiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9w cmludHNpZyhGSUxFICpvdXQsIFJTQSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNp Z25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLCBpbnQgU2FsdGxlbikKKysJeworKwlpbnQgcmV0 ID0gMDsKKysJdW5zaWduZWQgY2hhciAqc2lnYnVmID0gTlVMTDsKKysJaW50IGksIHNpZ2xlbjsK KysJLyogRVZQX1BLRVkgc3RydWN0dXJlICovCisrCUVWUF9QS0VZIHBrOworKwlFVlBfTURfQ1RY IGN0eDsKKysJcGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKKysJcGsucGtleS5yc2EgPSByc2E7Cisr CisrCXNpZ2xlbiA9IFJTQV9zaXplKHJzYSk7CisrCXNpZ2J1ZiA9IE9QRU5TU0xfbWFsbG9jKHNp Z2xlbik7CisrCWlmICghc2lnYnVmKQorKwkJZ290byBlcnJvcjsKKysKKysJRVZQX01EX0NUWF9p bml0KCZjdHgpOworKworKwlpZiAoU2FsdGxlbiA+PSAwKQorKwkJeworKwkJTV9FVlBfTURfQ1RY X3NldF9mbGFncygmY3R4LAorKwkJCUVWUF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRsZW4g PDwgMTYpKTsKKysJCX0KKysJZWxzZSBpZiAoU2FsdGxlbiA9PSAtMikKKysJCU1fRVZQX01EX0NU WF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKTsKKysJaWYgKCFFVlBf U2lnbkluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVW UF9TaWduVXBkYXRlKCZjdHgsIE1zZywgTXNnbGVuKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICgh RVZQX1NpZ25GaW5hbCgmY3R4LCBzaWdidWYsICh1bnNpZ25lZCBpbnQgKikmc2lnbGVuLCAmcGsp KQorKwkJZ290byBlcnJvcjsKKysKKysJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlm cHV0cygiUyA9ICIsIG91dCk7CisrCisrCWZvciAoaSA9IDA7IGkgPCBzaWdsZW47IGkrKykKKysJ CWZwcmludGYob3V0LCAiJTAyWCIsIHNpZ2J1ZltpXSk7CisrCisrCWZwdXRzKCJcbiIsIG91dCk7 CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKworKwlyZXR1cm4gcmV0OworKwl9CisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5j CistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMuZmlw cwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAw MDAwMDAwICswMjAwCitAQCAtMCwwICsxLDM3NyBAQAorKy8qIGZpcHNfcnNhdnRlc3QuYyAqLwor Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5T U0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGlj IHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSku ICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5o PgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wveDUwOXYzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9yc2EuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIp OworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRs LmgiCisrCisraW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBzYWx0bGVuKTsK KytzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCisrCQlCSUdOVU0gKm4sIEJJR05V TSAqZSwKKysJCWNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9u ZyBNc2dsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKTsK KysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBO VUxMLCAqb3V0ID0gTlVMTDsKKysKKysJaW50IHJldCA9IDE7CisrCWludCBTYWx0bGVuID0gLTE7 CisrCisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7 CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNh bHRsZW4iLCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOworKwkJ aWYgKFNhbHRsZW4gPCAwKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZh bGlkIHNhbHQgbGVuZ3RoXG4iKTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQlhcmdjIC09IDI7 CisrCQlhcmd2ICs9IDI7CisrCQl9CisrCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgi LXg5MzEiLCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSAtMjsKKysJCWFyZ2MtLTsKKysJ CWFyZ3YrKzsKKysJCX0KKysKKysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVs c2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJ b3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKwor KwlpZiAoIWluKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFs aXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisr CQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJv clxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFyc2FfdGVzdChvdXQsIGluLCBT YWx0bGVuKSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBVlRFU1QgZmlsZSBw cm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQg PSAwOworKworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysK KysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYm IChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKwor Kwl9CisrCisrI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJzYV90 ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQorKwl7CisrCWNoYXIgKmxpbmVi dWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCWNvbnN0 IEVWUF9NRCAqZGdzdCA9IE5VTEw7CisrCUJJR05VTSAqbiA9IE5VTEwsICplID0gTlVMTDsKKysJ dW5zaWduZWQgY2hhciAqTXNnID0gTlVMTCwgKlMgPSBOVUxMOworKwlsb25nIE1zZ2xlbiwgU2xl bjsKKysJaW50IHJldCA9IDA7CisrCWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVO U1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFs bG9jKFJTQV9URVNUX01BWExJTkVMRU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVm KQorKwkJZ290byBlcnJvcjsKKysKKysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9N QVhMSU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xp bmVidWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2Ug Ki8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3 b3JkKys7CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1 ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBi YXJdIGxpbmUpIGp1c3QgY29weSAqLworKwkJaWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCisrCQkJ eworKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7Cisr CQkJY29udGludWU7CisrCQkJfQorKworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRy YWlsaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisr CQkJKnEtLSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyog UmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWls aW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAx OworKworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkp CisrCQkJKnAtLSA9IDA7CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQorKwkJCXsK KysJCQlpZiAoIWRvX2hleDJibigmbix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQorKwkJCXsKKysJCQlpZiAo IWRvX2hleDJibigmZSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCisrCQkJeworKwkJCWlmICghc3Ry Y21wKHZhbHVlLCAiU0hBMSIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKKysJCQllbHNlIGlm ICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7Cisr CQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQorKwkJCQlkZ3N0ID0gRVZQX3No YTI1NigpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKKysJCQkJZGdz dCA9IEVWUF9zaGEzODQoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikp CisrCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCWZwcmlu dGYoc3RkZXJyLAorKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4i LAorKwkJCQkJCQkJdmFsdWUpOworKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCQl9CisrCQkJ fQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCisrCQkJeworKwkJCWlmIChN c2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQor KwkJCQkqKC0tdmFsdWUpID0gJzAnOworKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xl bik7CisrCQkJaWYgKCFNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUyIpKQorKwkJCXsKKysJCQlpZiAoUykKKysJCQkJZ290 byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1 ZSkgPSAnMCc7CisrCQkJUyA9IGhleDJiaW5fbSh2YWx1ZSwgJlNsZW4pOworKwkJCWlmICghUykK KysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJSZXN1bHQiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vy cm9yOworKworKwkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisrCQlpZiAobiAmJiBlICYmIE1z ZyAmJiBTICYmIGRnc3QpCisrCQkJeworKwkJCWlmICghcnNhX3ByaW50dmVyKG91dCwgbiwgZSwg ZGdzdCwKKysJCQkJCU1zZywgTXNnbGVuLCBTLCBTbGVuLCBTYWx0bGVuKSkKKysJCQkJZ290byBl cnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxMOworKwkJCU9QRU5T U0xfZnJlZShTKTsKKysJCQlTID0gTlVMTDsKKysJCQl9CisrCisrCQl9CisrCisrCisrCXJldCA9 IDE7CisrCisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUo b2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJ aWYgKG4pCisrCQlCTl9mcmVlKG4pOworKwlpZiAoZSkKKysJCUJOX2ZyZWUoZSk7CisrCisrCXJl dHVybiByZXQ7CisrCisrCXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJy b3I7CisrCisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCisrCQlC SUdOVU0gKm4sIEJJR05VTSAqZSwKKysJCWNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVk IGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4s IGludCBTYWx0bGVuKQorKwl7CisrCWludCByZXQgPSAwLCByOworKwkvKiBTZXR1cCBSU0EgYW5k IEVWUF9QS0VZIHN0cnVjdHVyZXMgKi8KKysJUlNBICpyc2FfcHVia2V5ID0gTlVMTDsKKysJRVZQ X1BLRVkgcGs7CisrCUVWUF9NRF9DVFggY3R4OworKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxM OworKwlyc2FfcHVia2V5ID0gRklQU19yc2FfbmV3KCk7CisrCWlmICghcnNhX3B1YmtleSkKKysJ CWdvdG8gZXJyb3I7CisrCXJzYV9wdWJrZXktPm4gPSBCTl9kdXAobik7CisrCXJzYV9wdWJrZXkt PmUgPSBCTl9kdXAoZSk7CisrCWlmICghcnNhX3B1YmtleS0+biB8fCAhcnNhX3B1YmtleS0+ZSkK KysJCWdvdG8gZXJyb3I7CisrCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7CisrCXBrLnBrZXkucnNh ID0gcnNhX3B1YmtleTsKKysKKysJRVZQX01EX0NUWF9pbml0KCZjdHgpOworKworKwlpZiAoU2Fs dGxlbiA+PSAwKQorKwkJeworKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LAorKwkJCUVW UF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKKysJCX0KKysJZWxzZSBp ZiAoU2FsdGxlbiA9PSAtMikKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01E X0NUWF9GTEFHX1BBRF9YOTMxKTsKKysJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmY3R4LCBkZ3N0 LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmY3R4LCBN c2csIE1zZ2xlbikpCisrCQlnb3RvIGVycm9yOworKworKwlyID0gRVZQX1ZlcmlmeUZpbmFsKCZj dHgsIFMsIFNsZW4sICZwayk7CisrCisrCisrCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysK KysJaWYgKHIgPCAwKQorKwkJZ290byBlcnJvcjsKKysJRVJSX2NsZWFyX2Vycm9yKCk7CisrCisr CWlmIChyID09IDApCisrCQlmcHV0cygiUmVzdWx0ID0gRlxuIiwgb3V0KTsKKysJZWxzZQorKwkJ ZnB1dHMoIlJlc3VsdCA9IFBcbiIsIG91dCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgor KwlpZiAocnNhX3B1YmtleSkKKysJCUZJUFNfcnNhX2ZyZWUocnNhX3B1YmtleSk7CisrCWlmIChi dWYpCisrCQlPUEVOU1NMX2ZyZWUoYnVmKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRp ZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMKKy0t LSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMJMjAx MC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAw ICswMjAwCitAQCAtMCwwICsxLDM4OCBAQAorKy8qIGZpcHNfc2hhdGVzdC5jICovCisrLyogV3Jp dHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBP cGVuU1NMCisrICogcHJvamVjdCAyMDA1LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgor KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwor KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcu CisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdh cmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpo QGNyeXB0c29mdC5jb20pLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2lu Y2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYz Lmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFNIQVhYWCBzdXBwb3J0XG4iKTsK KysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5o IgorKworK3N0YXRpYyBpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOworK3N0YXRp YyBpbnQgcHJpbnRfZGdzdChjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25l ZCBjaGFyICpNc2csIGludCBNc2dsZW4pOworK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3Qg RVZQX01EICptZCwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRM ZW4pOworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysJeworKwlGSUxFICpp biA9IE5VTEwsICpvdXQgPSBOVUxMOworKworKwlpbnQgcmV0ID0gMTsKKysKKysJaWYoIUZJUFNf bW9kZV9zZXQoMSkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOwor KwkJfQorKworKwlpZiAoYXJnYyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4g PSBmb3Blbihhcmd2WzFdLCAiciIpOworKworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRv dXQ7CisrCWVsc2UKKysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4p CisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVy cm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJCWZw cmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJ CWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIWRnc3RfdGVzdChvdXQsIGluKSkKKysJCXsKKysJ CWZwcmludGYoc3RkZXJyLCAiRkFUQUwgZGlnZXN0IGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7 CisrCQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKwor KwlpZiAocmV0KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0g c3RkaW4pKQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisr CQlmY2xvc2Uob3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgU0hB X1RFU1RfTUFYX0JJVFMJMTAyNDAwCisrI2RlZmluZSBTSEFfVEVTVF9NQVhMSU5FTEVOCSgoKFNI QV9URVNUX01BWF9CSVRTID4+IDMpICogMikgKyAxMDApCisrCisraW50IGRnc3RfdGVzdChGSUxF ICpvdXQsIEZJTEUgKmluKQorKwl7CisrCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOworKwljaGFy ICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOwor Kwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMLCAqU2VlZCA9IE5VTEw7CisrCWxvbmcgTXNnTGVu ID0gLTEsIExlbiA9IC0xLCBTZWVkTGVuID0gLTE7CisrCWludCByZXQgPSAwOworKwlpbnQgbG51 bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxF Tik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKKysK KysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCisrCXdo aWxlIChmZ2V0cyhvbGluZWJ1ZiwgU0hBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJ bG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5l YnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5z aWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBmb3Ig PSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9 IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbTD0yMF0gbGluZSkganVzdCBjb3B5ICovCisrCQlpZiAo IXApCisrCQkJeworKwkJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKwkJCWNvbnRpbnVlOworKwkJ CX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwor KwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKwor KwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNw YWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1 ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZh bHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysJCXdoaWxlICgqcCA9 PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKwor KwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiW0wiKSAmJiAqcD09J10nKQorKwkJCXsKKysJCQlzd2l0 Y2ggKGF0b2kodmFsdWUpKQorKwkJCQl7CisrCQkJCWNhc2UgMjA6IG1kPUVWUF9zaGExKCk7ICAg YnJlYWs7CisrCQkJCWNhc2UgMjg6IG1kPUVWUF9zaGEyMjQoKTsgYnJlYWs7CisrCQkJCWNhc2Ug MzI6IG1kPUVWUF9zaGEyNTYoKTsgYnJlYWs7CisrCQkJCWNhc2UgNDg6IG1kPUVWUF9zaGEzODQo KTsgYnJlYWs7CisrCQkJCWNhc2UgNjQ6IG1kPUVWUF9zaGE1MTIoKTsgYnJlYWs7CisrCQkJCWRl ZmF1bHQ6IGdvdG8gcGFyc2VfZXJyb3I7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJMZW4iKSkKKysJCQl7CisrCQkJaWYgKExlbiAhPSAtMSkKKysJCQkJZ290 byBwYXJzZV9lcnJvcjsKKysJCQlMZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoTGVuIDwgMCkK KysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkvKiBPbmx5IGhhbmRsZSBtdWx0aXBsZXMgb2Yg OCBiaXRzICovCisrCQkJaWYgKExlbiAmIDB4NykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJ CQlpZiAoTGVuID4gU0hBX1RFU1RfTUFYX0JJVFMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJTXNnTGVuID0gTGVuID4+IDM7CisrCQkJfQorKworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiTXNnIikpCisrCQkJeworKwkJCWxvbmcgdG1wbGVuOworKwkJCWlmIChzdHJsZW4odmFs dWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOworKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJnRtcGxlbik7CisrCQkJ aWYgKCFNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAiU2VlZCIpKQorKwkJCXsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEp CisrCQkJCSooLS12YWx1ZSkgPSAnMCc7CisrCQkJaWYgKFNlZWQpCisrCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJU2VlZCA9IGhleDJiaW5fbSh2YWx1ZSwgJlNlZWRMZW4pOworKwkJCWlmICgh U2VlZCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJNRCIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZQorKwkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCisrCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKKysKKysJCWlmIChtZCAmJiBNc2cg JiYgKE1zZ0xlbiA+PSAwKSkKKysJCQl7CisrCQkJaWYgKCFwcmludF9kZ3N0KG1kLCBvdXQsIE1z ZywgTXNnTGVuKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJ CQlNc2cgPSBOVUxMOworKwkJCU1zZ0xlbiA9IC0xOworKwkJCUxlbiA9IC0xOworKwkJCX0KKysJ CWVsc2UgaWYgKG1kICYmIFNlZWQgJiYgKFNlZWRMZW4gPiAwKSkKKysJCQl7CisrCQkJaWYgKCFw cmludF9tb250ZShtZCwgb3V0LCBTZWVkLCBTZWVkTGVuKSkKKysJCQkJZ290byBlcnJvcjsKKysJ CQlPUEVOU1NMX2ZyZWUoU2VlZCk7CisrCQkJU2VlZCA9IE5VTEw7CisrCQkJU2VlZExlbiA9IC0x OworKwkJCX0KKysJCisrCisrCQl9CisrCisrCisrCXJldCA9IDE7CisrCisrCisrCWVycm9yOgor KworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGlu ZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKE1zZykKKysJCU9QRU5TU0xf ZnJlZShNc2cpOworKwlpZiAoU2VlZCkKKysJCU9QRU5TU0xfZnJlZShTZWVkKTsKKysKKysJcmV0 dXJuIHJldDsKKysKKysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwg cGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJv cjsKKysKKysJfQorKworK3N0YXRpYyBpbnQgcHJpbnRfZGdzdChjb25zdCBFVlBfTUQgKmVtZCwg RklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuKQorKwl7CisrCWlu dCBpLCBtZGxlbjsKKysJdW5zaWduZWQgY2hhciBtZFtFVlBfTUFYX01EX1NJWkVdOworKwlpZiAo IUVWUF9EaWdlc3QoTXNnLCBNc2dsZW4sIG1kLCAodW5zaWduZWQgaW50ICopJm1kbGVuLCBlbWQs IE5VTEwpKQorKwkJeworKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIEhBU0hcbiIsIHN0ZGVy cik7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJZnB1dHMoIk1EID0gIiwgb3V0KTsKKysJZm9yIChp ID0gMDsgaSA8IG1kbGVuOyBpKyspCisrCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtZFtpXSk7Cisr CWZwdXRzKCJcbiIsIG91dCk7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBwcmlu dF9tb250ZShjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpT ZWVkLCBpbnQgU2VlZExlbikKKysJeworKwl1bnNpZ25lZCBpbnQgaSwgaiwgazsKKysJaW50IHJl dCA9IDA7CisrCUVWUF9NRF9DVFggY3R4OworKwl1bnNpZ25lZCBjaGFyICptMSwgKm0yLCAqbTMs ICpwOworKwl1bnNpZ25lZCBpbnQgbWxlbiwgbTFsZW4sIG0ybGVuLCBtM2xlbjsKKysKKysJRVZQ X01EX0NUWF9pbml0KCZjdHgpOworKworKwlpZiAoU2VlZExlbiA+IEVWUF9NQVhfTURfU0laRSkK KysJCW1sZW4gPSBTZWVkTGVuOworKwllbHNlCisrCQltbGVuID0gRVZQX01BWF9NRF9TSVpFOwor KworKwltMSA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOworKwltMiA9IE9QRU5TU0xfbWFsbG9jKG1s ZW4pOworKwltMyA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOworKworKwlpZiAoIW0xIHx8ICFtMiB8 fCAhbTMpCisrCQlnb3RvIG1jX2Vycm9yOworKworKwltMWxlbiA9IG0ybGVuID0gbTNsZW4gPSBT ZWVkTGVuOworKwltZW1jcHkobTEsIFNlZWQsIFNlZWRMZW4pOworKwltZW1jcHkobTIsIFNlZWQs IFNlZWRMZW4pOworKwltZW1jcHkobTMsIFNlZWQsIFNlZWRMZW4pOworKworKwlmcHV0cygiXG4i LCBvdXQpOworKworKwlmb3IgKGogPSAwOyBqIDwgMTAwOyBqKyspCisrCQl7CisrCQlmb3IgKGkg PSAwOyBpIDwgMTAwMDsgaSsrKQorKwkJCXsKKysJCQlFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBt ZCwgTlVMTCk7CisrCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMSwgbTFsZW4pOworKwkJCUVW UF9EaWdlc3RVcGRhdGUoJmN0eCwgbTIsIG0ybGVuKTsKKysJCQlFVlBfRGlnZXN0VXBkYXRlKCZj dHgsIG0zLCBtM2xlbik7CisrCQkJcCA9IG0xOworKwkJCW0xID0gbTI7CisrCQkJbTFsZW4gPSBt MmxlbjsKKysJCQltMiA9IG0zOworKwkJCW0ybGVuID0gbTNsZW47CisrCQkJbTMgPSBwOworKwkJ CUVWUF9EaWdlc3RGaW5hbF9leCgmY3R4LCBtMywgJm0zbGVuKTsKKysJCQl9CisrCQlmcHJpbnRm KG91dCwgIkNPVU5UID0gJWRcbiIsIGopOworKwkJZnB1dHMoIk1EID0gIiwgb3V0KTsKKysJCWZv ciAoayA9IDA7IGsgPCBtM2xlbjsgaysrKQorKwkJCWZwcmludGYob3V0LCAiJTAyeCIsIG0zW2td KTsKKysJCWZwdXRzKCJcblxuIiwgb3V0KTsKKysJCW1lbWNweShtMSwgbTMsIG0zbGVuKTsKKysJ CW1lbWNweShtMiwgbTMsIG0zbGVuKTsKKysJCW0xbGVuID0gbTJsZW4gPSBtM2xlbjsKKysJCX0K KysKKysJcmV0ID0gMTsKKysKKysJbWNfZXJyb3I6CisrCWlmIChtMSkKKysJCU9QRU5TU0xfZnJl ZShtMSk7CisrCWlmIChtMikKKysJCU9QRU5TU0xfZnJlZShtMik7CisrCWlmIChtMykKKysJCU9Q RU5TU0xfZnJlZShtMyk7CisrCisrCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJcmV0 dXJuIHJldDsKKysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX3V0bC5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3V0bC5oCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0 bC5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmgJMjAxMC0wNi0wNCAxMjoyNToxNS4w MDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMzQzIEBACisrLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBD b3B5cmlnaHQgKGMpIDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz CisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwor KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3Ns Lm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z CisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisr ICovCisrCisrdm9pZCBkb19wcmludF9lcnJvcnModm9pZCkKKysJeworKwljb25zdCBjaGFyICpm aWxlLCAqZGF0YTsKKysJaW50IGxpbmUsIGZsYWdzOworKwl1bnNpZ25lZCBsb25nIGw7CisrCXdo aWxlICgobCA9IEVSUl9nZXRfZXJyb3JfbGluZV9kYXRhKCZmaWxlLCAmbGluZSwgJmRhdGEsICZm bGFncykpKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJFUlJPUjolbHg6bGliPSVkLGZ1bmM9 JWQscmVhc29uPSVkIgorKwkJCQkiOmZpbGU9JXM6bGluZT0lZDolc1xuIiwKKysJCQlsLCBFUlJf R0VUX0xJQihsKSwgRVJSX0dFVF9GVU5DKGwpLCBFUlJfR0VUX1JFQVNPTihsKSwKKysJCQlmaWxl LCBsaW5lLCBmbGFncyAmIEVSUl9UWFRfU1RSSU5HID8gZGF0YSA6ICIiKTsKKysJCX0KKysJfQor KworK2ludCBoZXgyYmluKGNvbnN0IGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQpCisrICAg IHsKKysgICAgaW50IG4xLCBuMjsKKysgICAgdW5zaWduZWQgY2hhciBjaDsKKysKKysgICAgZm9y IChuMT0wLG4yPTAgOyBpbltuMV0gJiYgaW5bbjFdICE9ICdcbicgOyApCisrCXsgLyogZmlyc3Qg Ynl0ZSAqLworKwlpZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkKKysJICAg IGNoID0gaW5bbjErK10gLSAnMCc7CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAmJiAoaW5b bjFdIDw9ICdGJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7CisrCWVsc2UgaWYg KChpbltuMV0gPj0gJ2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCisrCSAgICBjaCA9IGluW24xKytd IC0gJ2EnICsgMTA7CisrCWVsc2UKKysJICAgIHJldHVybiAtMTsKKysJaWYoIWluW24xXSkKKysJ ICAgIHsKKysJICAgIG91dFtuMisrXT1jaDsKKysJICAgIGJyZWFrOworKwkgICAgfQorKwlvdXRb bjJdID0gY2ggPDwgNDsKKysJLyogc2Vjb25kIGJ5dGUgKi8KKysJaWYgKChpbltuMV0gPj0gJzAn KSAmJiAoaW5bbjFdIDw9ICc5JykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJzAnOworKwllbHNl IGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQorKwkgICAgY2ggPSBpbltu MSsrXSAtICdBJyArIDEwOworKwllbHNlIGlmICgoaW5bbjFdID49ICdhJykgJiYgKGluW24xXSA8 PSAnZicpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEwOworKwllbHNlCisrCSAgICBy ZXR1cm4gLTE7CisrCW91dFtuMisrXSB8PSBjaDsKKysJfQorKyAgICByZXR1cm4gbjI7CisrICAg IH0KKysKKyt1bnNpZ25lZCBjaGFyICpoZXgyYmluX20oY29uc3QgY2hhciAqaW4sIGxvbmcgKnBs ZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciAqcDsKKysJcCA9IE9QRU5TU0xfbWFsbG9jKChzdHJs ZW4oaW4pICsgMSkvMik7CisrCSpwbGVuID0gaGV4MmJpbihpbiwgcCk7CisrCXJldHVybiBwOwor Kwl9CisrCisraW50IGRvX2hleDJibihCSUdOVU0gKipwciwgY29uc3QgY2hhciAqaW4pCisrCXsK KysJdW5zaWduZWQgY2hhciAqcDsKKysJbG9uZyBwbGVuOworKwlpbnQgciA9IDA7CisrCXAgPSBo ZXgyYmluX20oaW4sICZwbGVuKTsKKysJaWYgKCFwKQorKwkJcmV0dXJuIDA7CisrCWlmICghKnBy KQorKwkJKnByID0gQk5fbmV3KCk7CisrCWlmICghKnByKQorKwkJcmV0dXJuIDA7CisrCWlmIChC Tl9iaW4yYm4ocCwgcGxlbiwgKnByKSkKKysJCXIgPSAxOworKwlPUEVOU1NMX2ZyZWUocCk7Cisr CXJldHVybiByOworKwl9CisrCisraW50IGRvX2JuX3ByaW50KEZJTEUgKm91dCwgQklHTlVNICpi bikKKysJeworKwlpbnQgbGVuLCBpOworKwl1bnNpZ25lZCBjaGFyICp0bXA7CisrCWxlbiA9IEJO X251bV9ieXRlcyhibik7CisrCWlmIChsZW4gPT0gMCkKKysJCXsKKysJCWZwdXRzKCIwMCIsIG91 dCk7CisrCQlyZXR1cm4gMTsKKysJCX0KKysKKysJdG1wID0gT1BFTlNTTF9tYWxsb2MobGVuKTsK KysJaWYgKCF0bXApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9yeSBhbGxvY2F0aW9u IGVycm9yXG4iKTsKKysJCXJldHVybiAwOworKwkJfQorKwlCTl9ibjJiaW4oYm4sIHRtcCk7Cisr CWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKysJCWZwcmludGYob3V0LCAiJTAyeCIsIHRtcFtp XSk7CisrCU9QRU5TU0xfZnJlZSh0bXApOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBkb19i bl9wcmludF9uYW1lKEZJTEUgKm91dCwgY29uc3QgY2hhciAqbmFtZSwgQklHTlVNICpibikKKysJ eworKwlpbnQgcjsKKysJZnByaW50ZihvdXQsICIlcyA9ICIsIG5hbWUpOworKwlyID0gZG9fYm5f cHJpbnQob3V0LCBibik7CisrCWlmICghcikKKysJCXJldHVybiAwOworKwlmcHV0cygiXG4iLCBv dXQpOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBwYXJzZV9saW5lKGNoYXIgKipwa3csIGNo YXIgKipwdmFsLCBjaGFyICpsaW5lYnVmLCBjaGFyICpvbGluZWJ1ZikKKysJeworKwljaGFyICpr ZXl3b3JkLCAqdmFsdWUsICpwLCAqcTsKKysJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJ a2V5d29yZCA9IGxpbmVidWY7CisrCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwl3aGlsZSAo aXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQlrZXl3b3JkKys7CisrCisrCS8q IExvb2sgZm9yID0gc2lnbiAqLworKwlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCS8q IElmIG5vICc9JyBleGl0ICovCisrCWlmICghcCkKKysJCXJldHVybiAwOworKworKwlxID0gcCAt IDE7CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqcSkpCisrCQkqcS0tID0gMDsKKysKKysJKnAgPSAwOworKwl2YWx1ZSA9 IHAgKyAxOworKworKwkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXdo aWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQl2YWx1ZSsrOworKworKwkv KiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwlwID0gdmFsdWUgKyBzdHJs ZW4odmFsdWUpIC0gMTsKKysKKysJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWdu ZWQgY2hhcikqcCkpCisrCQkqcC0tID0gMDsKKysKKysJKnBrdyA9IGtleXdvcmQ7CisrCSpwdmFs ID0gdmFsdWU7CisrCXJldHVybiAxOworKwl9CisrCisrQklHTlVNICpoZXgyYm4oY29uc3QgY2hh ciAqaW4pCisrICAgIHsKKysgICAgQklHTlVNICpwPU5VTEw7CisrCisrICAgIGlmICghZG9faGV4 MmJuKCZwLCBpbikpCisrCXJldHVybiBOVUxMOworKworKyAgICByZXR1cm4gcDsKKysgICAgfQor KworK2ludCBiaW4yaGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hhciAqb3V0 KQorKyAgICB7CisrICAgIGludCBuMSwgbjI7CisrICAgIHVuc2lnbmVkIGNoYXIgY2g7CisrCisr ICAgIGZvciAobjE9MCxuMj0wIDsgbjEgPCBsZW4gOyArK24xKQorKwl7CisrCWNoPWluW24xXSA+ PiA0OworKwlpZiAoY2ggPD0gMHgwOSkKKysJICAgIG91dFtuMisrXT1jaCsnMCc7CisrCWVsc2UK KysJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7CisrCWNoPWluW24xXSAmIDB4MGY7CisrCWlmKGNo IDw9IDB4MDkpCisrCSAgICBvdXRbbjIrK109Y2grJzAnOworKwllbHNlCisrCSAgICBvdXRbbjIr K109Y2gtMTArJ2EnOworKwl9CisrICAgIG91dFtuMl09J1wwJzsKKysgICAgcmV0dXJuIG4yOwor KyAgICB9CisrCisrdm9pZCBwdihjb25zdCBjaGFyICp0YWcsY29uc3QgdW5zaWduZWQgY2hhciAq dmFsLGludCBsZW4pCisrICAgIHsKKysgICAgY2hhciBvYnVmWzIwNDhdOworKworKyAgICBiaW4y aGV4KHZhbCxsZW4sb2J1Zik7CisrICAgIHByaW50ZigiJXMgPSAlc1xuIix0YWcsb2J1Zik7Cisr ICAgIH0KKysKKysvKiBUbyBhdm9pZCBleHRlbnNpdmUgY2hhbmdlcyB0byB0ZXN0IHByb2dyYW0g YXQgdGhpcyBzdGFnZSBqdXN0IGNvbnZlcnQKKysgKiB0aGUgaW5wdXQgbGluZSBpbnRvIGFuIGFj Y2VwdGFibGUgZm9ybS4gS2V5d29yZCBsaW5lcyBjb252ZXJ0ZWQgdG8gZm9ybQorKyAqICJrZXl3 b3JkID0gdmFsdWVcbiIgbm8gbWF0dGVyIHdoYXQgd2hpdGUgc3BhY2UgcHJlc2VudCwgYWxsIG90 aGVyIGxpbmVzCisrICoganVzdCBoYXZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlIHJlbW92 ZWQuCisrICovCisrCisraW50IHRpZHlfbGluZShjaGFyICpsaW5lYnVmLCBjaGFyICpvbGluZWJ1 ZikKKysJeworKwljaGFyICprZXl3b3JkLCAqdmFsdWUsICpwLCAqcTsKKysJc3RyY3B5KGxpbmVi dWYsIG9saW5lYnVmKTsKKysJa2V5d29yZCA9IGxpbmVidWY7CisrCS8qIFNraXAgbGVhZGluZyBz cGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQlr ZXl3b3JkKys7CisrCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwlwID0gc3RyY2hyKGxpbmVidWYs ICc9Jyk7CisrCisrCS8qIElmIG5vICc9JyBqdXN0IGNob3AgbGVhZGluZywgdHJhaWxpbmcgd3Mg Ki8KKysJaWYgKCFwKQorKwkJeworKwkJcCA9IGtleXdvcmQgKyBzdHJsZW4oa2V5d29yZCkgLSAx OworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisr CQkJKnAtLSA9IDA7CisrCQlzdHJjcHkob2xpbmVidWYsIGtleXdvcmQpOworKwkJc3RyY2F0KG9s aW5lYnVmLCAiXG4iKTsKKysJCXJldHVybiAxOworKwkJfQorKworKwlxID0gcCAtIDE7CisrCisr CS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqcSkpCisrCQkqcS0tID0gMDsKKysKKysJKnAgPSAwOworKwl2YWx1ZSA9IHAgKyAxOwor KworKwkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXdoaWxlIChpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQl2YWx1ZSsrOworKworKwkvKiBSZW1vdmUg dHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUp IC0gMTsKKysKKysJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikq cCkpCisrCQkqcC0tID0gMDsKKysKKysJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsKKysJc3Ry Y2F0KG9saW5lYnVmLCAiID0gIik7CisrCXN0cmNhdChvbGluZWJ1ZiwgdmFsdWUpOworKwlzdHJj YXQob2xpbmVidWYsICJcbiIpOworKworKwlyZXR1cm4gMTsKKysJfQorKworKy8qIE5COiB0aGlz IHJldHVybiB0aGUgbnVtYmVyIG9mIF9iaXRzXyByZWFkICovCisraW50IGJpbnQyYmluKGNvbnN0 IGNoYXIgKmluLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpvdXQpCisrICAgIHsKKysgICAgaW50 IG47CisrCisrICAgIG1lbXNldChvdXQsMCxsZW4pOworKyAgICBmb3Iobj0wIDsgbiA8IGxlbiA7 ICsrbikKKysJaWYoaW5bbl0gPT0gJzEnKQorKwkgICAgb3V0W24vOF18PSgweDgwID4+IChuJTgp KTsKKysgICAgcmV0dXJuIGxlbjsKKysgICAgfQorKworK2ludCBiaW4yYmludChjb25zdCB1bnNp Z25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQgbjsKKysK KysgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCisrCW91dFtuXT0oaW5bbi84XSYoMHg4MCA+ PiAobiU4KSkpID8gJzEnIDogJzAnOworKyAgICByZXR1cm4gbjsKKysgICAgfQorKworKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK3ZvaWQg UHJpbnRWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbikKKyt7Cisr I2lmIFZFUkJPU0UKKysgIGNoYXIgb2J1ZlsyMDQ4XTsKKysgIGludCBvbGVuOworKyAgb2xlbiA9 IGJpbjJoZXgodmFsLCBsZW4sIG9idWYpOworKyAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywg b2xlbiwgb2J1Zik7CisrI2VuZGlmCisrfQorKworK3ZvaWQgT3V0cHV0VmFsdWUoY2hhciAqdGFn LCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4sIEZJTEUgKnJmcCxpbnQgYml0bW9kZSkKKysg ICAgeworKyAgICBjaGFyIG9idWZbMjA0OF07CisrICAgIGludCBvbGVuOworKworKyAgICBpZihi aXRtb2RlKQorKwlvbGVuPWJpbjJiaW50KHZhbCxsZW4sb2J1Zik7CisrICAgIGVsc2UKKysJb2xl bj1iaW4yaGV4KHZhbCxsZW4sb2J1Zik7CisrCisrICAgIGZwcmludGYocmZwLCAiJXMgPSAlLipz XG4iLCB0YWcsIG9sZW4sIG9idWYpOworKyNpZiBWRVJCT1NFCisrICAgIHByaW50ZigiJXMgPSAl LipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOworKyNlbmRpZgorKyAgICB9CisrCitkaWZmIC11cCBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwc19lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9maXBzX2Vyci5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHNfZXJyLmMuZmlwcwky MDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9maXBzX2Vyci5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAt MCwwICsxLDcgQEAKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgImZpcHNfZXJyLmgiCisrI2Vsc2UKKytzdGF0aWMg dm9pZCAqZHVtbXk9JmR1bW15OworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2ZpcHNfZXJyLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwc19lcnIuaAorLS0t IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzX2Vyci5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNTox NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwc19lcnIuaAky MDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMzcgQEAKKysv KiBjcnlwdG8vZmlwc19lcnIuaCAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAxOTk5LTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr ICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBPcGVuU1NMLm9yZy4K KysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhA Y3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysvKiBOT1RFOiB0aGlzIGZpbGUgd2FzIGF1 dG8gZ2VuZXJhdGVkIGJ5IHRoZSBta2Vyci5wbCBzY3JpcHQ6IGFueSBjaGFuZ2VzCisrICogbWFk ZSB0byBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBuZXh0IHVwZGF0ZXMg dGhpcyBmaWxlLAorKyAqIG9ubHkgcmVhc29uIHN0cmluZ3Mgd2lsbCBiZSBwcmVzZXJ2ZWQuCisr ICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworKy8qIEJFR0lOIEVSUk9SIENPREVTICovCisr I2lmbmRlZiBPUEVOU1NMX05PX0VSUgorKworKyNkZWZpbmUgRVJSX0ZVTkMoZnVuYykgRVJSX1BB Q0soRVJSX0xJQl9GSVBTLGZ1bmMsMCkKKysjZGVmaW5lIEVSUl9SRUFTT04ocmVhc29uKSBFUlJf UEFDSyhFUlJfTElCX0ZJUFMsMCxyZWFzb24pCisrCisrc3RhdGljIEVSUl9TVFJJTkdfREFUQSBG SVBTX3N0cl9mdW5jdHNbXT0KKysJeworK3tFUlJfRlVOQyhGSVBTX0ZfREhfQlVJTFRJTl9HRU5Q QVJBTVMpLAkiREhfQlVJTFRJTl9HRU5QQVJBTVMifSwKKyt7RVJSX0ZVTkMoRklQU19GX0RTQV9C VUlMVElOX1BBUkFNR0VOKSwJIkRTQV9CVUlMVElOX1BBUkFNR0VOIn0sCisre0VSUl9GVU5DKEZJ UFNfRl9EU0FfRE9fU0lHTiksCSJEU0FfZG9fc2lnbiJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRFNB X0RPX1ZFUklGWSksCSJEU0FfZG9fdmVyaWZ5In0sCisre0VSUl9GVU5DKEZJUFNfRl9FVlBfQ0lQ SEVSSU5JVF9FWCksCSJFVlBfQ2lwaGVySW5pdF9leCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRVZQ X0RJR0VTVElOSVRfRVgpLAkiRVZQX0RpZ2VzdEluaXRfZXgifSwKKyt7RVJSX0ZVTkMoRklQU19G X0ZJUFNfQ0hFQ0tfRFNBKSwJIkZJUFNfQ0hFQ0tfRFNBIn0sCisre0VSUl9GVU5DKEZJUFNfRl9G SVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVCksCSJGSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQ UklOVCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19DSEVDS19SU0EpLAkiRklQU19DSEVDS19S U0EifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfRFNBX0NIRUNLKSwJIkZJUFNfRFNBX0NIRUNL In0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX01PREVfU0VUKSwJIkZJUFNfbW9kZV9zZXQifSwK Kyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCksCSJmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTKSwJ IkZJUFNfc2VsZnRlc3RfYWVzIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RF UyksCSJGSVBTX3NlbGZ0ZXN0X2RlcyJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVT VF9EU0EpLAkiRklQU19zZWxmdGVzdF9kc2EifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VM RlRFU1RfSE1BQyksCSJGSVBTX3NlbGZ0ZXN0X2htYWMifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJ UFNfU0VMRlRFU1RfUk5HKSwJIkZJUFNfc2VsZnRlc3Rfcm5nIn0sCisre0VSUl9GVU5DKEZJUFNf Rl9GSVBTX1NFTEZURVNUX1NIQTEpLAkiRklQU19zZWxmdGVzdF9zaGExIn0sCisre0VSUl9GVU5D KEZJUFNfRl9IQVNIX0ZJTkFMKSwJIkhBU0hfRklOQUwifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JT QV9CVUlMVElOX0tFWUdFTiksCSJSU0FfQlVJTFRJTl9LRVlHRU4ifSwKKyt7RVJSX0ZVTkMoRklQ U19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUKSwJIlJTQV9FQVlfUFJJVkFURV9ERUNSWVBUIn0s Cisre0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCksCSJSU0FfRUFZX1BS SVZBVEVfRU5DUllQVCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQ VCksCSJSU0FfRUFZX1BVQkxJQ19ERUNSWVBUIn0sCisre0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZ X1BVQkxJQ19FTkNSWVBUKSwJIlJTQV9FQVlfUFVCTElDX0VOQ1JZUFQifSwKKyt7RVJSX0ZVTkMo RklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCksCSJSU0FfWDkzMV9nZW5lcmF0ZV9rZXlf ZXgifSwKKyt7RVJSX0ZVTkMoRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5E X0JZVEVTIn0sCisrezAsTlVMTH0KKysJfTsKKysKKytzdGF0aWMgRVJSX1NUUklOR19EQVRBIEZJ UFNfc3RyX3JlYXNvbnNbXT0KKysJeworK3tFUlJfUkVBU09OKEZJUFNfUl9DQU5OT1RfUkVBRF9F WEUpICAgICAgLCJjYW5ub3QgcmVhZCBleGUifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfQ0FOTk9U X1JFQURfRVhFX0RJR0VTVCksImNhbm5vdCByZWFkIGV4ZSBkaWdlc3QifSwKKyt7RVJSX1JFQVNP TihGSVBTX1JfQ09OVFJBRElDVElOR19FVklERU5DRSksImNvbnRyYWRpY3RpbmcgZXZpZGVuY2Ui fSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfRVhFX0RJR0VTVF9ET0VTX05PVF9NQVRDSCksImV4ZSBk aWdlc3QgZG9lcyBub3QgbWF0Y2gifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfRklOR0VSUFJJTlRf RE9FU19OT1RfTUFUQ0gpLCJmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCJ9LAorK3tFUlJfUkVB U09OKEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEKSwi ZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggbm9ucGljIHJlbG9jYXRlZCJ9LAorK3tFUlJfUkVB U09OKEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HKSwi ZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggc2VnbWVudCBhbGlhc2luZyJ9LAorK3tFUlJfUkVB U09OKEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQpLCJmaXBzIG1vZGUgYWxyZWFkeSBzZXQi fSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpICwiZmlwcyBzZWxm dGVzdCBmYWlsZWQifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKSAg ICwiaW52YWxpZCBrZXkgbGVuZ3RoIn0sCisre0VSUl9SRUFTT04oRklQU19SX0tFWV9UT09fU0hP UlQpICAgICAgICAsImtleSB0b28gc2hvcnQifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfTk9OX0ZJ UFNfTUVUSE9EKSAgICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCisre0VSUl9SRUFTT04oRklQU19S X1BBSVJXSVNFX1RFU1RfRkFJTEVEKSAsInBhaXJ3aXNlIHRlc3QgZmFpbGVkIn0sCisre0VSUl9S RUFTT04oRklQU19SX1JTQV9ERUNSWVBUX0VSUk9SKSAgICAsInJzYSBkZWNyeXB0IGVycm9yIn0s Cisre0VSUl9SRUFTT04oRklQU19SX1JTQV9FTkNSWVBUX0VSUk9SKSAgICAsInJzYSBlbmNyeXB0 IGVycm9yIn0sCisre0VSUl9SRUFTT04oRklQU19SX1NFTEZURVNUX0ZBSUxFRCkgICAgICAsInNl bGZ0ZXN0IGZhaWxlZCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9URVNUX0ZBSUxVUkUpICAgICAg ICAgLCJ0ZXN0IGZhaWx1cmUifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfVU5TVVBQT1JURURfUExB VEZPUk0pICwidW5zdXBwb3J0ZWQgcGxhdGZvcm0ifSwKKyt7MCxOVUxMfQorKwl9OworKworKyNl bmRpZgorKworK3ZvaWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZvaWQpCisrCXsKKysjaWZuZGVm IE9QRU5TU0xfTk9fRVJSCisrCisrCWlmIChFUlJfZnVuY19lcnJvcl9zdHJpbmcoRklQU19zdHJf ZnVuY3RzWzBdLmVycm9yKSA9PSBOVUxMKQorKwkJeworKwkJRVJSX2xvYWRfc3RyaW5ncygwLEZJ UFNfc3RyX2Z1bmN0cyk7CisrCQlFUlJfbG9hZF9zdHJpbmdzKDAsRklQU19zdHJfcmVhc29ucyk7 CisrCQl9CisrI2VuZGlmCisrCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBz L2ZpcHNfYWVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBz X2Flc19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19hZXNf c2VsZnRlc3QuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwkyMDEwLTA2LTA0 IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMDMgQEAKKysvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFy ZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoK KysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1j b3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK KysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK KysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrc3RhdGljIHN0cnVjdAorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2 XTsKKysgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdOworKyAgICB1bnNpZ25lZCBjaGFy IGNpcGhlcnRleHRbMTZdOworKyAgICB9IHRlc3RzW109CisrCXsKKysJeworKwl7IDB4MDAsMHgw MSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKKysJICAweDA4LDB4MDksMHgwQSwweDBC LDB4MEMsMHgwRCwweDBFLDB4MEYgfSwKKysJeyAweDAwLDB4MTEsMHgyMiwweDMzLDB4NDQsMHg1 NSwweDY2LDB4NzcsCisrCSAgMHg4OCwweDk5LDB4QUEsMHhCQiwweENDLDB4REQsMHhFRSwweEZG IH0sCisrCXsgMHg2OSwweEM0LDB4RTAsMHhEOCwweDZBLDB4N0IsMHgwNCwweDMwLAorKwkgIDB4 RDgsMHhDRCwweEI3LDB4ODAsMHg3MCwweEI0LDB4QzUsMHg1QSB9LAorKwl9LAorKwl9OworKwor K3ZvaWQgRklQU19jb3JydXB0X2FlcygpCisrICAgIHsKKysgICAgdGVzdHNbMF0ua2V5WzBdKys7 CisrICAgIH0KKysKKytpbnQgRklQU19zZWxmdGVzdF9hZXMoKQorKyAgICB7CisrICAgIGludCBu OworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBf Q0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBmb3Iobj0wIDsgbiA8IDEgOyArK24pCisr CXsKKysJaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksCisrCQkJ CXRlc3RzW25dLmtleSwgTlVMTCwKKysJCQkJdGVzdHNbbl0ucGxhaW50ZXh0LAorKwkJCQl0ZXN0 c1tuXS5jaXBoZXJ0ZXh0LAorKwkJCQkxNikgPD0gMCkKKysJCWdvdG8gZXJyOworKwl9CisrICAg IHJldCA9IDE7CisrICAgIGVycjoKKysgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsK KysgICAgaWYgKHJldCA9PSAwKQorKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9B RVMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysj ZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHMuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9maXBzL2ZpcHMuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwcy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUu MDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDQxOSBAQAorKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICog Q29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysg KgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K KysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNz bC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgor KyAqLworKworKworKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvcnNhLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysj aW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKysjaWZuZGVmIFBBVEhfTUFYCisrI2RlZmluZSBQQVRI X01BWCAxMDI0CisrI2VuZGlmCisrCisrc3RhdGljIGludCBmaXBzX3NlbGZ0ZXN0X2ZhaWw7Cisr c3RhdGljIGludCBmaXBzX21vZGU7Cisrc3RhdGljIGNvbnN0IHZvaWQgKmZpcHNfcmFuZF9jaGVj azsKKysKKytzdGF0aWMgdm9pZCBmaXBzX3NldF9tb2RlKGludCBvbm9mZikKKysJeworKwlpbnQg b3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKworKwlpZiAoZmlwc19p c19zdGFydGVkKCkpCisrCQl7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd19sb2NrKCk7 CisrCQlmaXBzX21vZGUgPSBvbm9mZjsKKysJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X3Vu bG9jaygpOworKwkJfQorKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19zZXRfcmFuZF9jaGVjayhj b25zdCB2b2lkICpyYW5kX2NoZWNrKQorKwl7CisrCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19p c19vd25pbmdfdGhyZWFkKCk7CisrCisrCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJCXsKKysJ CWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X2xvY2soKTsKKysJCWZpcHNfcmFuZF9jaGVjayA9 IHJhbmRfY2hlY2s7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd191bmxvY2soKTsKKysJ CX0KKysJfQorKworK2ludCBGSVBTX21vZGUodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJ aW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysJaWYgKGZp cHNfaXNfc3RhcnRlZCgpKQorKwkJeworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9j aygpOworKwkJcmV0ID0gZmlwc19tb2RlOworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3Jf dW5sb2NrKCk7CisrCQl9CisrCXJldHVybiByZXQ7CisrCX0KKysKKytjb25zdCB2b2lkICpGSVBT X3JhbmRfY2hlY2sodm9pZCkKKysJeworKwljb25zdCB2b2lkICpyZXQgPSAwOworKwlpbnQgb3du aW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKworKwlpZiAoZmlwc19pc19z dGFydGVkKCkpCisrCQl7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7Cisr CQlyZXQgPSBmaXBzX3JhbmRfY2hlY2s7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91 bmxvY2soKTsKKysJCX0KKysJcmV0dXJuIHJldDsKKysJfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0 X2ZhaWxlZCh2b2lkKQorKyAgICB7CisrICAgIGludCByZXQgPSAwOworKyAgICBpZiAoZmlwc19p c19zdGFydGVkKCkpCisrCXsKKysJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190 aHJlYWQoKTsKKysKKysJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOworKwlyZXQg PSBmaXBzX3NlbGZ0ZXN0X2ZhaWw7CisrCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9j aygpOworKwl9CisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysKKysvKiBTZWxmdGVzdCBmYWls dXJlIGZhdGFsIGV4aXQgcm91dGluZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAorKyAqIGR1cmluZyAq YW55KiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbi4gSXQgaGFzIHRoZSBtaW5pbXVtCisrICogb3Zl cmhlYWQgcG9zc2libGUgdG8gYXZvaWQgdG9vIGJpZyBhIHBlcmZvcm1hbmNlIGhpdC4KKysgKi8K KysKKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCkKKysgICAgeworKyAgICBpZiAoZmlw c19zZWxmdGVzdF9mYWlsKQorKwl7CisrCU9wZW5TU0xEaWUoX19GSUxFX18sX19MSU5FX18sICJG QVRBTCBGSVBTIFNFTEZURVNUIEZBSUxVUkUiKTsKKysJfQorKyAgICB9CisrCisrdm9pZCBmaXBz X3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpCisrICAgIHsKKysgICAgZmlwc19zZWxmdGVzdF9mYWls ID0gMTsKKysgICAgfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0KCkKKysgICAgeworKworKyAgICBy ZXR1cm4gRklQU19zZWxmdGVzdF9zaGExKCkKKysJJiYgRklQU19zZWxmdGVzdF9obWFjKCkKKysJ JiYgRklQU19zZWxmdGVzdF9hZXMoKQorKwkmJiBGSVBTX3NlbGZ0ZXN0X2RlcygpCisrCSYmIEZJ UFNfc2VsZnRlc3RfcnNhKCkKKysJJiYgRklQU19zZWxmdGVzdF9kc2EoKTsKKysgICAgfQorKwor K2ludCBGSVBTX21vZGVfc2V0KGludCBvbm9mZikKKysgICAgeworKyAgICBpbnQgZmlwc19zZXRf b3duaW5nX3RocmVhZCgpOworKyAgICBpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKCk7Cisr ICAgIGludCByZXQgPSAwOworKworKyAgICBmaXBzX3dfbG9jaygpOworKyAgICBmaXBzX3NldF9z dGFydGVkKCk7CisrICAgIGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKKysKKysgICAgaWYob25v ZmYpCisrCXsKKysJdW5zaWduZWQgY2hhciBidWZbNDhdOworKworKwlmaXBzX3NlbGZ0ZXN0X2Zh aWwgPSAwOworKworKwkvKiBEb24ndCBnbyBpbnRvIEZJUFMgbW9kZSB0d2ljZSwganVzdCBzbyB3 ZSBjYW4gZG8gYXV0b21hZ2ljCisrCSAgIHNlZWRpbmcgKi8KKysJaWYoRklQU19tb2RlKCkpCisr CSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULEZJUFNfUl9GSVBTX01P REVfQUxSRUFEWV9TRVQpOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJl dCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysKKysjaWZkZWYgT1BFTlNTTF9JQTMy X1NTRTIKKysJaWYgKChPUEVOU1NMX2lhMzJjYXAgJiAoMTw8MjV8MTw8MjYpKSAhPSAoMTw8MjV8 MTw8MjYpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCxGSVBT X1JfVU5TVVBQT1JURURfUExBVEZPUk0pOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsK KysJICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysjZW5kaWYKKysKKysJ LyogUGVyZm9ybSBSTkcgS0FUIGJlZm9yZSBzZWVkaW5nICovCisrCWlmICghRklQU19zZWxmdGVz dF9ybmcoKSkKKysJICAgIHsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICBy ZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9CisrCisrCS8qIGF1dG9tYWdpY2FsbHkg c2VlZCBQUk5HIGlmIG5vdCBhbHJlYWR5IHNlZWRlZCAqLworKwlpZighRklQU19yYW5kX3N0YXR1 cygpKQorKwkgICAgeworKwkgICAgaWYoUkFORF9ieXRlcyhidWYsc2l6ZW9mIGJ1ZikgPD0gMCkK KysJCXsKKysJCWZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCQlyZXQgPSAwOworKwkJZ290byBl bmQ7CisrCQl9CisrCSAgICBGSVBTX3JhbmRfc2V0X2tleShidWYsMzIpOworKwkgICAgRklQU19y YW5kX3NlZWQoYnVmKzMyLDE2KTsKKysJICAgIH0KKysKKysJLyogbm93IHN3aXRjaCBpbnRvIEZJ UFMgbW9kZSAqLworKwlmaXBzX3NldF9yYW5kX2NoZWNrKEZJUFNfcmFuZF9tZXRob2QoKSk7Cisr CVJBTkRfc2V0X3JhbmRfbWV0aG9kKEZJUFNfcmFuZF9tZXRob2QoKSk7CisrCWlmKEZJUFNfc2Vs ZnRlc3QoKSkKKysJICAgIGZpcHNfc2V0X21vZGUoMSk7CisrCWVsc2UKKysJICAgIHsKKysJICAg IGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7 CisrCSAgICB9CisrCXJldCA9IDE7CisrCWdvdG8gZW5kOworKwl9CisrICAgIGZpcHNfc2V0X21v ZGUoMCk7CisrICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7CisrICAgIHJldCA9IDE7CisrZW5k OgorKyAgICBmaXBzX2NsZWFyX293bmluZ190aHJlYWQoKTsKKysgICAgZmlwc193X3VubG9jaygp OworKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrCisrdm9pZCBmaXBzX3dfbG9jayh2b2lkKQkJ eyBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9pZCBmaXBzX3dfdW5sb2Nr KHZvaWQpCXsgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9pZCBmaXBz X3JfbG9jayh2b2lkKQkJeyBDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9p ZCBmaXBzX3JfdW5sb2NrKHZvaWQpCXsgQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMp OyB9CisrCisrc3RhdGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOworK3N0YXRpYyB1bnNpZ25lZCBs b25nIGZpcHNfdGhyZWFkID0gMDsKKysKKyt2b2lkIGZpcHNfc2V0X3N0YXJ0ZWQodm9pZCkKKysJ eworKwlmaXBzX3N0YXJ0ZWQgPSAxOworKwl9CisrCisraW50IGZpcHNfaXNfc3RhcnRlZCh2b2lk KQorKwl7CisrCXJldHVybiBmaXBzX3N0YXJ0ZWQ7CisrCX0KKysKKytpbnQgZmlwc19pc19vd25p bmdfdGhyZWFkKHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCisrCWlmIChmaXBzX2lzX3N0 YXJ0ZWQoKSkKKysJCXsKKysJCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJ aWYgKGZpcHNfdGhyZWFkICE9IDAgJiYgZmlwc190aHJlYWQgPT0gQ1JZUFRPX3RocmVhZF9pZCgp KQorKwkJCXJldCA9IDE7CisrCQlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwor KwkJfQorKwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IGZpcHNfc2V0X293bmluZ190aHJlYWQo dm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysKKysJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQor KwkJeworKwkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQlpZiAoZmlwc190 aHJlYWQgPT0gMCkKKysJCQl7CisrCQkJZmlwc190aHJlYWQgPSBDUllQVE9fdGhyZWFkX2lkKCk7 CisrCQkJcmV0ID0gMTsKKysJCQl9CisrCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQ UzIpOworKwkJfQorKwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IGZpcHNfY2xlYXJfb3duaW5n X3RocmVhZCh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKworKwlpZiAoZmlwc19pc19zdGFy dGVkKCkpCisrCQl7CisrCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCWlm IChmaXBzX3RocmVhZCA9PSBDUllQVE9fdGhyZWFkX2lkKCkpCisrCQkJeworKwkJCWZpcHNfdGhy ZWFkID0gMDsKKysJCQlyZXQgPSAxOworKwkJCX0KKysJCUNSWVBUT193X3VubG9jayhDUllQVE9f TE9DS19GSVBTMik7CisrCQl9CisrCXJldHVybiByZXQ7CisrCX0KKysKKysvKiBHZW5lcmFsaXpl ZCBwdWJsaWMga2V5IHRlc3Qgcm91dGluZS4gU2lnbnMgYW5kIHZlcmlmaWVzIHRoZSBkYXRhCisr ICogc3VwcGxpZWQgaW4gdGJzIHVzaW5nIG1lc2FnZSBkaWdlc3QgbWQgYW5kIHNldHRpbmcgb3B0 aW9uIGRpZ2VzdAorKyAqIGZsYWdzIG1kX2ZsYWdzLiBJZiB0aGUgJ2thdCcgcGFyYW1ldGVyIGlz IG5vdCBOVUxMIGl0IHdpbGwKKysgKiBhZGRpdGlvbmFsbHkgY2hlY2sgdGhlIHNpZ25hdHVyZSBt YXRjaGVzIGl0OiBhIGtub3duIGFuc3dlciB0ZXN0CisrICogVGhlIHN0cmluZyAiZmFpbF9zdHIi IGlzIHVzZWQgZm9yIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIGluIGNhc2UKKysgKiBvZiBmYWls dXJlLgorKyAqLworKworK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBr ZXksCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAorKwkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKKysJCQljb25zdCBFVlBf TUQgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdzLAorKwkJCWNvbnN0IGNoYXIgKmZhaWxf c3RyKQorKwl7CQorKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBzaWd0bXBbMjU2XSwg KnNpZyA9IHNpZ3RtcDsKKysJdW5zaWduZWQgaW50IHNpZ2xlbjsKKysJRVZQX01EX0NUWCBtY3R4 OworKwlFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKworKwlpZiAoKHBrZXktPnR5cGUgPT0gRVZQ X1BLRVlfUlNBKQorKwkJJiYgKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSA+IHNpemVvZihzaWd0 bXApKSkKKysJCXsKKysJCXNpZyA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHBrZXktPnBrZXku cnNhKSk7CisrCQlpZiAoIXNpZykKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19QS0VZ X1NJR05BVFVSRV9URVNULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKysJCQlyZXR1cm4gMDsKKysJ CQl9CisrCQl9CisrCisrCWlmICh0YnNsZW4gPT0gLTEpCisrCQl0YnNsZW4gPSBzdHJsZW4oKGNo YXIgKil0YnMpOworKworKwlpZiAobWRfZmxhZ3MpCisrCQlFVlBfTURfQ1RYX3NldF9mbGFncygm bWN0eCwgbWRfZmxhZ3MpOworKworKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgZGlnZXN0 LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHRi cywgdGJzbGVuKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwg c2lnLCAmc2lnbGVuLCBwa2V5KSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmIChrYXQgJiYgKChz aWdsZW4gIT0ga2F0bGVuKSB8fCBtZW1jbXAoa2F0LCBzaWcsIGthdGxlbikpKQorKwkJZ290byBl cnJvcjsKKysKKysJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkK KysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNs ZW4pKQorKwkJZ290byBlcnJvcjsKKysJcmV0ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWcs IHNpZ2xlbiwgcGtleSk7CisrCisrCWVycm9yOgorKwlpZiAoc2lnICE9IHNpZ3RtcCkKKysJCU9Q RU5TU0xfZnJlZShzaWcpOworKwlFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKwlpZiAocmV0 ICE9IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1Qs RklQU19SX1RFU1RfRkFJTFVSRSk7CisrCQlpZiAoZmFpbF9zdHIpCisrCQkJRVJSX2FkZF9lcnJv cl9kYXRhKDIsICJUeXBlPSIsIGZhaWxfc3RyKTsKKysJCXJldHVybiAwOworKwkJfQorKwlyZXR1 cm4gMTsKKysJfQorKworKy8qIEdlbmVyYWxpemVkIHN5bW1ldHJpYyBjaXBoZXIgdGVzdCByb3V0 aW5lLiBFbmNyeXB0IGRhdGEsIHZlcmlmeSByZXN1bHQKKysgKiBhZ2FpbnN0IGtub3duIGFuc3dl ciwgZGVjcnlwdCBhbmQgY29tcGFyZSB3aXRoIG9yaWdpbmFsIHBsYWludGV4dC4KKysgKi8KKysK KytpbnQgZmlwc19jaXBoZXJfdGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBFVlBfQ0lQ SEVSICpjaXBoZXIsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKKysJ CQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4pCisrCXsKKysJ dW5zaWduZWQgY2hhciBwbHRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKKysJdW5zaWdu ZWQgY2hhciBjaXRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKKysJT1BFTlNTTF9hc3Nl cnQobGVuIDw9IEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOworKwlpZiAoRVZQX0NpcGhlcklu aXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDEpIDw9IDApCisrCQlyZXR1cm4gMDsK KysJRVZQX0NpcGhlcihjdHgsIGNpdG1wLCBwbGFpbnRleHQsIGxlbik7CisrCWlmIChtZW1jbXAo Y2l0bXAsIGNpcGhlcnRleHQsIGxlbikpCisrCQlyZXR1cm4gMDsKKysJaWYgKEVWUF9DaXBoZXJJ bml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2LCAwKSA8PSAwKQorKwkJcmV0dXJuIDA7 CisrCUVWUF9DaXBoZXIoY3R4LCBwbHRtcCwgY2l0bXAsIGxlbik7CisrCWlmIChtZW1jbXAocGx0 bXAsIHBsYWludGV4dCwgbGVuKSkKKysJCXJldHVybiAwOworKwlyZXR1cm4gMTsKKysJfQorKwor KyNpZiAwCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBlbnN1cmUgdGhlIGVycm9yIGNv ZGUgZXhpc3RzIGFuZCB0aGUgZnVuY3Rpb24KKysgKiBuYW1lIGlzIHRvIGtlZXAgdGhlIGVycm9y IGNoZWNraW5nIHNjcmlwdCBxdWlldAorKyAqLworK3ZvaWQgaGFzaF9maW5hbCh2b2lkKQorKwl7 CisrCUZJUFNlcnIoRklQU19GX0hBU0hfRklOQUwsRklQU19SX05PTl9GSVBTX01FVEhPRCk7Cisr CX0KKysjZW5kaWYKKysKKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlw cy9maXBzX2Rlc19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlw c19kZXNfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAw CisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwkyMDEw LTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMzkgQEAKKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24u CisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgor KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisr ICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs CisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0 aWMgc3RydWN0CisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdOworKyAgICB1bnNp Z25lZCBjaGFyIHBsYWludGV4dFs4XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0Wzhd OworKyAgICB9IHRlc3RzMltdPQorKwl7CisrCXsKKysJeyAweDdjLDB4NGYsMHg2ZSwweGY3LDB4 YTIsMHgwNCwweDE2LDB4ZWMsCisrCSAgMHgwYiwweDZiLDB4N2MsMHg5ZSwweDVlLDB4MTksMHhh NywweGM0IH0sCisrCXsgMHgwNiwweGE3LDB4ZDgsMHg3OSwweGFhLDB4Y2UsMHg2OSwweGVmIH0s CisrCXsgMHg0YywweDExLDB4MTcsMHg1NSwweGJmLDB4YzQsMHg0ZSwweGZkIH0KKysJfSwKKysJ eworKwl7IDB4NWQsMHg5ZSwweDAxLDB4ZDMsMHgyNSwweGM3LDB4M2UsMHgzNCwKKysJICAweDAx LDB4MTYsMHg3YywweDg1LDB4MjMsMHhkZiwweGUwLDB4NjggfSwKKysJeyAweDljLDB4NTAsMHgw OSwweDBmLDB4NWUsMHg3ZCwweDY5LDB4N2UgfSwKKysJeyAweGQyLDB4MGIsMHgxOCwweGRmLDB4 ZDksMHgwZCwweDllLDB4ZmYgfSwKKysJfQorKwl9OworKworK3N0YXRpYyBzdHJ1Y3QKKysgICAg eworKyAgICB1bnNpZ25lZCBjaGFyIGtleVsyNF07CisrICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50 ZXh0WzhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07CisrICAgIH0gdGVzdHMz W109CisrCXsKKysJeworKwl7IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwKKysJICAweEZFLDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsCisrCSAgMHgx MiwweDM0LDB4NTYsMHg3OCwweDlhLDB4YmMsMHhkZSwweGYwIH0sCisrCXsgMHg4ZiwweDhmLDB4 YmYsMHg5YiwweDVkLDB4NDgsMHhiNCwweDFjIH0sCisrCXsgMHg1OSwweDhjLDB4ZTUsMHhkMyww eDZjLDB4YTIsMHhlYSwweDFiIH0sCisrCX0sCisrCXsKKysJeyAweERDLDB4QkEsMHg5OCwweDc2 LDB4NTQsMHgzMiwweDEwLDB4RkUsCisrCSAgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIs MHhDRCwweEVGLAorKwkgIDB4RUQsMHgzOSwweEQ5LDB4NTAsMHhGQSwweDc0LDB4QkMsMHhDNCB9 LAorKwl7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiB9LAorKwl7IDB4 MTEsMHgyNSwweGIwLDB4MzUsMHhiZSwweGEwLDB4ODIsMHg4NiB9LAorKwl9LAorKwl9OworKwor K3ZvaWQgRklQU19jb3JydXB0X2RlcygpCisrICAgIHsKKysgICAgdGVzdHMyWzBdLnBsYWludGV4 dFswXSsrOworKyAgICB9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZGVzKCkKKysgICAgeworKyAg ICBpbnQgbiwgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQ SEVSX0NUWF9pbml0KCZjdHgpOworKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAyLWtleSAz REVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KKysgICAgZm9yKG49MCA7IG4gPCAy IDsgKytuKQorKwl7CisrCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZV9l Y2IoKSwKKysJCQkJdGVzdHMyW25dLmtleSwgTlVMTCwKKysJCQkJdGVzdHMyW25dLnBsYWludGV4 dCwgdGVzdHMyW25dLmNpcGhlcnRleHQsIDgpKQorKwkJZ290byBlcnI7CisrCX0KKysKKysgICAg LyogRW5jcnlwdC9kZWNyeXB0IHdpdGggM0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJz ICovCisrICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKKysJeworKwlpZiAoIWZpcHNfY2lwaGVy X3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLAorKwkJCQl0ZXN0czNbbl0ua2V5LCBOVUxM LAorKwkJCQl0ZXN0czNbbl0ucGxhaW50ZXh0LCB0ZXN0czNbbl0uY2lwaGVydGV4dCwgOCkpCisr CQlnb3RvIGVycjsKKysJfQorKyAgICByZXQgPSAxOworKyAgICBlcnI6CisrICAgIEVWUF9DSVBI RVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrICAgIGlmIChyZXQgPT0gMCkKKysJICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfU0VMRlRFU1RfREVTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKworKyAg ICByZXR1cm4gcmV0OworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBz L2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMJ MjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTg2IEBACisr LyogY3J5cHRvL2RzYS9kc2F0ZXN0LmMgKi8KKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBF cmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor KyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisr ICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBpbXBsZW1lbnRh dGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKysg KiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1l cmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFo ZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0byBhbGwgY29k ZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorKyAqIGxo YXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9j dW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJl ZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVy IGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBDb3B5cmlnaHQg cmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBp bgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBhY2th Z2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJp YnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNl ZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBw cm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVh bCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNv ZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3 cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKysgKiAg ICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVz IGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhp YyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZp YyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0aGUgYXBwcyBk aXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVk Z2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBi eSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQUkVT UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisrICogRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK KysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9u IHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorKyAqIGRlcml2 YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fu bm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0 aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorKyAq LworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisr I2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIHNlZWQsIG91dF9wLCBvdXRfcSwgb3V0X2cgYXJl IHRha2VuIHRoZSBOSVNUIHRlc3QgdmVjdG9ycyAqLworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFy IHNlZWRbMjBdID0geworKwkweDc3LCAweDhmLCAweDQwLCAweDc0LCAweDZmLCAweDY2LCAweGJl LCAweDMzLCAweGNlLCAweGJlLCAweDk5LCAweDM0LAorKwkweDRjLCAweGZjLCAweGYzLCAweDI4 LCAweGFhLCAweDcwLCAweDJkLCAweDNhCisrICAJfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hh ciBvdXRfcFtdID0geworKwkweGY3LCAweDdjLCAweDFiLCAweDgzLCAweGQ4LCAweGU4LCAweDVj LCAweDdmLCAweDg1LCAweDMwLCAweDE3LCAweDU3LAorKwkweDIxLCAweDk1LCAweGZlLCAweDI2 LCAweDA0LCAweGViLCAweDQ3LCAweDRjLCAweDNhLCAweDRhLCAweDgxLCAweDRiLAorKwkweDcx LCAweDJlLCAweGVkLCAweDZlLCAweDRmLCAweDNkLCAweDExLCAweDBmLCAweDdjLCAweGZlLCAw eDM2LCAweDQzLAorKwkweDUxLCAweGQ5LCAweDgxLCAweDM5LCAweDE3LCAweGRmLCAweDYyLCAw eGY2LCAweDljLCAweDAxLCAweGE4LCAweDY5LAorKwkweDcxLCAweGRkLCAweDI5LCAweDdmLCAw eDQ3LCAweGU2LCAweDY1LCAweGE2LCAweDIyLCAweGU4LCAweDZhLCAweDEyLAorKwkweDJiLCAw eGMyLCAweDgxLCAweGZmLCAweDMyLCAweDcwLCAweDJmLCAweDllLCAweGNhLCAweDUzLCAweDI2 LCAweDQ3LAorKwkweDBmLCAweDU5LCAweGQ3LCAweDllLCAweDJjLCAweGE1LCAweDA3LCAweGM0 LCAweDQ5LCAweDUyLCAweGEzLCAweGU0LAorKwkweDZiLCAweDA0LCAweDAwLCAweDI1LCAweDQ5 LCAweGUyLCAweGU2LCAweDdmLCAweDI4LCAweDc4LCAweDk3LCAweGI4LAorKwkweDNhLCAweDMy LCAweDE0LCAweDM4LCAweGEyLCAweDUxLCAweDMzLCAweDIyLCAweDQ0LCAweDdlLCAweGQ3LCAw eGVmLAorKwkweDQ1LCAweGRiLCAweDA2LCAweDRhLCAweGQyLCAweDgyLCAweDRhLCAweDgyLCAw eDJjLCAweGIxLCAweGQ3LCAweGQ4LAorKwkweGI2LCAweDczLCAweDAwLCAweDRkLCAweDk0LCAw eDc3LCAweDk0LCAweGVmCisrCX07CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3FbXSA9 IHsKKysJMHhkNCwgMHgwYSwgMHhhYywgMHg5ZiwgMHhiZCwgMHg4YywgMHg4MCwgMHhjMiwgMHgz OCwgMHg3ZSwgMHgyZSwgMHgwYywKKysJMHg1MiwgMHg1YywgMHhlYSwgMHgzNCwgMHhhMSwgMHg4 MywgMHgzMiwgMHhmMworKwl9OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9nW10gPSB7 CisrCTB4MzQsIDB4NzMsIDB4OGIsIDB4NTcsIDB4ODQsIDB4OGUsIDB4NTUsIDB4YmYsIDB4NTcs IDB4Y2MsIDB4NDEsIDB4YmIsCisrCTB4NWUsIDB4MmIsIDB4ZDUsIDB4NDIsIDB4ZGQsIDB4MjQs IDB4MjIsIDB4MmEsIDB4MDksIDB4ZWEsIDB4MjYsIDB4MWUsCisrCTB4MTcsIDB4NjUsIDB4Y2Is IDB4MWEsIDB4YjMsIDB4MTIsIDB4NDQsIDB4YTMsIDB4OWUsIDB4OTksIDB4ZTksIDB4NjMsCisr CTB4ZWIsIDB4MzAsIDB4YjEsIDB4NzgsIDB4N2IsIDB4MDksIDB4NDAsIDB4MzAsIDB4ZmEsIDB4 ODMsIDB4YzIsIDB4MzUsCisrCTB4ZTEsIDB4YzQsIDB4MmQsIDB4NzQsIDB4MWEsIDB4YjEsIDB4 ODMsIDB4NTQsIDB4ZDgsIDB4MjksIDB4ZjQsIDB4Y2YsCisrCTB4N2YsIDB4NmYsIDB4NjcsIDB4 MWMsIDB4MzYsIDB4NDksIDB4ZWUsIDB4NmMsIDB4YTIsIDB4M2MsIDB4MmQsIDB4NmEsCisrCTB4 ZTksIDB4ZDMsIDB4OWEsIDB4ZjYsIDB4NTcsIDB4NzgsIDB4NmYsIDB4ZmQsIDB4MzMsIDB4Y2Qs IDB4M2MsIDB4ZWQsCisrCTB4ZmQsIDB4ZDQsIDB4NDEsIDB4ZTYsIDB4NWMsIDB4OGIsIDB4ZTAs IDB4NjgsIDB4MzEsIDB4NDcsIDB4NDcsIDB4YWYsCisrCTB4MTIsIDB4YTcsIDB4ZjksIDB4MzIs IDB4MGQsIDB4OTQsIDB4MTUsIDB4NDgsIDB4ZDAsIDB4NTQsIDB4ODUsIDB4YjIsCisrCTB4MDQs IDB4YjUsIDB4NGQsIDB4ZDQsIDB4OWQsIDB4MDUsIDB4MjIsIDB4MjUsIDB4ZDksIDB4ZmQsIDB4 NmMsIDB4MzYsCisrCTB4ZWYsIDB4YmUsIDB4NjksIDB4NmMsIDB4NTUsIDB4ZjQsIDB4ZWUsIDB4 ZWMKKysJfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzdHIxW109IjEyMzQ1Njc4 OTAxMjM0NTY3ODkwIjsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9kc2EoKQorKyAgICB7CisrICAg ICsrc2VlZFswXTsKKysgICAgfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSgpCisrICAgIHsK KysgICAgRFNBICpkc2E7CisrICAgIGludCBjb3VudGVyLGksaiwgcmV0ID0gMDsKKysgICAgdW5z aWduZWQgaW50IHNsZW47CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07CisrICAgIHVuc2ln bmVkIGxvbmcgaDsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKyAgICBFVlBfUEtFWSAqcGsgPSBO VUxMOworKworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKworKyAgICBkc2EgPSBEU0Ff bmV3KCk7CisrCisrICAgIGlmKGRzYSA9PSBOVUxMKQorKwlnb3RvIGVycjsKKysgICAgaWYoIURT QV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxzZWVkLDIwLCZjb3VudGVyLCZoLE5V TEwpKQorKwlnb3RvIGVycjsKKysgICAgaWYgKGNvdW50ZXIgIT0gMzc4KSAKKysJZ290byBlcnI7 CisrICAgIGlmIChoICE9IDIpCisrCWdvdG8gZXJyOworKyAgICBpPUJOX2JuMmJpbihkc2EtPnEs YnVmKTsKKysgICAgaj1zaXplb2Yob3V0X3EpOworKyAgICBpZiAoaSAhPSBqIHx8IG1lbWNtcChi dWYsb3V0X3EsaSkgIT0gMCkKKysJZ290byBlcnI7CisrCisrICAgIGk9Qk5fYm4yYmluKGRzYS0+ cCxidWYpOworKyAgICBqPXNpemVvZihvdXRfcCk7CisrICAgIGlmIChpICE9IGogfHwgbWVtY21w KGJ1ZixvdXRfcCxpKSAhPSAwKQorKwlnb3RvIGVycjsKKysKKysgICAgaT1CTl9ibjJiaW4oZHNh LT5nLGJ1Zik7CisrICAgIGo9c2l6ZW9mKG91dF9nKTsKKysgICAgaWYgKGkgIT0gaiB8fCBtZW1j bXAoYnVmLG91dF9nLGkpICE9IDApCisrCWdvdG8gZXJyOworKyAgICBEU0FfZ2VuZXJhdGVfa2V5 KGRzYSk7CisrCisrICAgIGlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrCWdvdG8g ZXJyOworKyAgICBFVlBfUEtFWV9hc3NpZ25fRFNBKHBrLCBkc2EpOworKworKyAgICBpZiAoIUVW UF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCisrCWdvdG8gZXJyOworKyAg ICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBzdHIxLCAyMCkpCisrCWdvdG8gZXJyOworKyAg ICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sIHBrKSkKKysJZ290byBlcnI7 CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwp KQorKwlnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBzdHIxLCAy MCkpCisrCWdvdG8gZXJyOworKyAgICBpZiAoRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNs ZW4sIHBrKSAhPSAxKQorKwlnb3RvIGVycjsKKysKKysgICAgcmV0ID0gMTsKKysKKysgICAgZXJy OgorKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKyAgICBpZiAocGspCisrCUVWUF9Q S0VZX2ZyZWUocGspOworKyAgICBlbHNlIGlmIChkc2EpCisrCURTQV9mcmVlKGRzYSk7CisrICAg IGlmIChyZXQgPT0gMCkKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBLEZJ UFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrI2VuZGlm CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzLmguZmlwcyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzLmgKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlw cy9maXBzLmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHMuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAw MDAwMCArMDIwMAorQEAgLTAsMCArMSwxNjMgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHly aWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K KysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3Jn LgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisr ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8K KysKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNT TF9GSVBTCisrI2Vycm9yIEZJUFMgaXMgZGlzYWJsZWQuCisrI2VuZGlmCisrCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5k aWYKKysKKytzdHJ1Y3QgZHNhX3N0OworK3N0cnVjdCBldnBfcGtleV9zdDsKKytzdHJ1Y3QgZW52 X21kX3N0OworK3N0cnVjdCBldnBfY2lwaGVyX3N0OworK3N0cnVjdCBldnBfY2lwaGVyX2N0eF9z dDsKKysKKytpbnQgRklQU19tb2RlX3NldChpbnQgb25vZmYpOworK2ludCBGSVBTX21vZGUodm9p ZCk7CisrY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNrKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0 ZXN0X2ZhaWxlZCh2b2lkKTsKKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCk7Cisrdm9p ZCBGSVBTX2NvcnJ1cHRfc2hhMSh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9zaGExKHZvaWQp OworK3ZvaWQgRklQU19jb3JydXB0X2Flcyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXMo dm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0 X2Rlcyh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2Nv cnJ1cHRfcnNhX2tleWdlbih2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9yc2Eodm9pZCk7Cisr dm9pZCBGSVBTX2NvcnJ1cHRfZHNhKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2RzYV9rZXln ZW4odm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfZHNhKHZvaWQpOworK3ZvaWQgRklQU19jb3Jy dXB0X3JuZyh2b2lkKTsKKyt2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpOworK2ludCBGSVBTX3Nl bGZ0ZXN0X3JuZyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9obWFjKHZvaWQpOworKworK2lu dCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qoc3RydWN0IGV2cF9wa2V5X3N0ICpwa2V5LAorKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKKysJCQljb25zdCB1bnNpZ25l ZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBrYXRsZW4sCisrCQkJY29uc3Qgc3RydWN0IGVudl9t ZF9zdCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCisrCQkJY29uc3QgY2hhciAqZmFp bF9zdHIpOworKworK2ludCBmaXBzX2NpcGhlcl90ZXN0KHN0cnVjdCBldnBfY2lwaGVyX2N0eF9z dCAqY3R4LAorKwkJCWNvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpjaXBoZXIsCisrCQkJY29u c3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFy ICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4pOworKworKy8qIEJFR0lOIEVSUk9SIENPREVTICov CisrLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlw dCBta2Vyci5wbC4gQW55IGNoYW5nZXMKKysgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJl IG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KKysgKi8KKyt2b2lkIEVS Ul9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKTsKKysKKysvKiBFcnJvciBjb2RlcyBmb3IgdGhlIEZJ UFMgZnVuY3Rpb25zLiAqLworKworKy8qIEZ1bmN0aW9uIGNvZGVzLiAqLworKyNkZWZpbmUgRklQ U19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TCQkJIDEwMAorKyNkZWZpbmUgRklQU19GX0RTQV9CVUlM VElOX1BBUkFNR0VOCQkJIDEwMQorKyNkZWZpbmUgRklQU19GX0RTQV9ET19TSUdOCQkJCSAxMDIK KysjZGVmaW5lIEZJUFNfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMDMKKysjZGVmaW5lIEZJUFNfRl9F VlBfQ0lQSEVSSU5JVF9FWAkJCSAxMjQKKysjZGVmaW5lIEZJUFNfRl9FVlBfRElHRVNUSU5JVF9F WAkJCSAxMjUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0RTQQkJCQkgMTA0CisrI2RlZmlu ZSBGSVBTX0ZfRklQU19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQJCSAxMDUKKysjZGVmaW5lIEZJ UFNfRl9GSVBTX0NIRUNLX1JTQQkJCQkgMTA2CisrI2RlZmluZSBGSVBTX0ZfRklQU19EU0FfQ0hF Q0sJCQkJIDEwNworKyNkZWZpbmUgRklQU19GX0ZJUFNfTU9ERV9TRVQJCQkJIDEwOAorKyNkZWZp bmUgRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVAkJCSAxMDkKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX1NFTEZURVNUX0FFUwkJCSAxMTAKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNU X0RFUwkJCSAxMTEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RTQQkJCSAxMTIKKysj ZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMJCQkgMTEzCisrI2RlZmluZSBGSVBTX0Zf RklQU19TRUxGVEVTVF9STkcJCQkgMTE0CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9T SEExCQkJIDExNQorKyNkZWZpbmUgRklQU19GX0hBU0hfRklOQUwJCQkJIDEyMworKyNkZWZpbmUg RklQU19GX1JTQV9CVUlMVElOX0tFWUdFTgkJCSAxMTYKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZ X1BSSVZBVEVfREVDUllQVAkJCSAxMTcKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVf RU5DUllQVAkJCSAxMTgKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUCQkJ IDExOQorKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQJCQkgMTIwCisrI2Rl ZmluZSBGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYCQkJIDEyMQorKyNkZWZpbmUgRklQ U19GX1NTTEVBWV9SQU5EX0JZVEVTCQkJIDEyMgorKworKy8qIFJlYXNvbiBjb2Rlcy4gKi8KKysj ZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUJCQkJIDEwMworKyNkZWZpbmUgRklQU19SX0NB Tk5PVF9SRUFEX0VYRV9ESUdFU1QJCQkgMTA0CisrI2RlZmluZSBGSVBTX1JfQ09OVFJBRElDVElO R19FVklERU5DRQkJCSAxMTQKKysjZGVmaW5lIEZJUFNfUl9FWEVfRElHRVNUX0RPRVNfTk9UX01B VENICQkgMTA1CisrI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gJCSAx MTAKKysjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9OT05QSUNfUkVM T0NBVEVEIDExMQorKyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX1NF R01FTlRfQUxJQVNJTkcgMTEyCisrI2RlZmluZSBGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VU CQkJIDEwMgorKyNkZWZpbmUgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVECQkJIDEwNgorKyNk ZWZpbmUgRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSAkJCSAxMDkKKysjZGVmaW5lIEZJUFNfUl9L RVlfVE9PX1NIT1JUCQkJCSAxMDgKKysjZGVmaW5lIEZJUFNfUl9OT05fRklQU19NRVRIT0QJCQkJ IDEwMAorKyNkZWZpbmUgRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVECQkJIDEwNworKyNkZWZp bmUgRklQU19SX1JTQV9ERUNSWVBUX0VSUk9SCQkJIDExNQorKyNkZWZpbmUgRklQU19SX1JTQV9F TkNSWVBUX0VSUk9SCQkJIDExNgorKyNkZWZpbmUgRklQU19SX1NFTEZURVNUX0ZBSUxFRAkJCQkg MTAxCisrI2RlZmluZSBGSVBTX1JfVEVTVF9GQUlMVVJFCQkJCSAxMTcKKysjZGVmaW5lIEZJUFNf Ul9VTlNVUFBPUlRFRF9QTEFURk9STQkJCSAxMTMKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisr fQorKyNlbmRpZgorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMv Zmlwc19obWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBz X2htYWNfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfaG1h Y19zZWxmdGVzdC5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYwkyMDEwLTA2 LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMzcgQEAKKysvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAq IGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisr ICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisr ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrCisrI2lmZGVmIE9Q RU5TU0xfRklQUworK3R5cGVkZWYgc3RydWN0IHsKKysJY29uc3QgRVZQX01EICooKmFsZykodm9p ZCk7CisrCWNvbnN0IGNoYXIgKmtleSwgKml2OworKwl1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9N QVhfTURfU0laRV07CisrfSBITUFDX0tBVDsKKysKKytzdGF0aWMgY29uc3QgSE1BQ19LQVQgdmVj dG9yW10gPSB7CisrICAgIHsJRVZQX3NoYTEsCisrCS8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5n b3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5OC9maXBzLTE5OGEucGRmICovCisrCSIwMTIzNDU2 Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4MDksMHgyMiwweGQzLDB4NDAs MHg1ZiwweGFhLDB4M2QsMHgxOSwKKysJICAweDRmLDB4ODIsMHhhNCwweDU4LDB4MzAsMHg3Myww eDdkLDB4NWMsCisrCSAgMHhjNiwweGM3LDB4NWQsMHgyNCB9CisrICAgIH0sCisrICAgIHsJRVZQ X3NoYTIyNCwKKysJLyoganVzdCBrZWVwIGV4dGVuZGluZyB0aGUgYWJvdmUuLi4gKi8KKysJIjAx MjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHhkZCwweGVmLDB4MGEs MHg0MCwweGNiLDB4N2QsMHg1MCwweGZiLAorKwkgIDB4NmUsMHhlNiwweGNlLDB4YTEsMHgyMCww eGJhLDB4MjYsMHhhYSwKKysJICAweDA4LDB4ZjMsMHgwNywweDc1LDB4ODcsMHhiOCwweGFkLDB4 MWIsCisrCSAgMHg4YywweDhkLDB4MTIsMHhjNyB9CisrICAgIH0sCisrICAgIHsJRVZQX3NoYTI1 NiwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHhiOCww eGYyLDB4MGQsMHhiNSwweDQxLDB4ZWEsMHg0MywweDA5LAorKwkgIDB4Y2EsMHg0ZSwweGE5LDB4 MzgsMHgwYywweGQwLDB4ZTgsMHgzNCwKKysJICAweGY3LDB4MWYsMHhiZSwweDkxLDB4NzQsMHhh MiwweDYxLDB4MzgsCisrCSAgMHgwZCwweGMxLDB4N2UsMHhhZSwweDZhLDB4MzQsMHg1MSwweGQ5 IH0KKysgICAgfSwKKysgICAgewlFVlBfc2hhMzg0LAorKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMi LAorKwkiU2FtcGxlICMyIiwKKysJeyAweDA4LDB4YmMsMHhiMCwweGRhLDB4NDksMHgxZSwweDg3 LDB4YWQsCisrCSAgMHg5YSwweDFkLDB4NmEsMHhjZSwweDIzLDB4YzUsMHgwYiwweGY2LAorKwkg IDB4YjcsMHgxOCwweDA2LDB4YTUsMHg3NywweGNkLDB4NDksMHgwNCwKKysJICAweDg5LDB4ZjEs MHhlNiwweDIzLDB4NDQsMHg1MSwweDUxLDB4OWYsCisrCSAgMHg4NSwweDU2LDB4ODAsMHg3OSww eDBjLDB4YmQsMHg0ZCwweDUwLAorKwkgIDB4YTQsMHg1ZiwweDI5LDB4ZTMsMHg5MywweGYwLDB4 ZTgsMHg3ZiB9CisrICAgIH0sCisrICAgIHsJRVZQX3NoYTUxMiwKKysJIjAxMjM0NTY3ODk6Ozw9 Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHg4MCwweDlkLDB4NDQsMHgwNSwweDdjLDB4 NWIsMHg5NSwweDQxLAorKwkgIDB4MDUsMHhiZCwweDA0LDB4MTMsMHgxNiwweGRiLDB4MGYsMHhh YywKKysJICAweDQ0LDB4ZDUsMHhhNCwweGQ1LDB4ZDAsMHg4OSwweDJiLDB4ZDAsCisrCSAgMHg0 ZSwweDg2LDB4NjQsMHgxMiwweGMwLDB4OTAsMHg3NywweDY4LAorKwkgIDB4ZjEsMHg4NywweGI3 LDB4N2MsMHg0ZiwweGFlLDB4MmMsMHgyZiwKKysJICAweDIxLDB4YTUsMHhiNSwweDY1LDB4OWEs MHg0ZiwweDRiLDB4YTcsCisrCSAgMHg0NywweDAyLDB4YTMsMHhkZSwweDliLDB4NTEsMHhmMSww eDQ1LAorKwkgIDB4YmQsMHg0ZiwweDI1LDB4MjcsMHg0MiwweDk4LDB4OTksMHgwNSB9CisrICAg IH0sCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9obWFjKCkKKysgICAgeworKyAgICBpbnQg bjsKKysgICAgdW5zaWduZWQgaW50ICAgIG91dGxlbjsKKysgICAgdW5zaWduZWQgY2hhciAgIG91 dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICBjb25zdCBFVlBfTUQgICAqbWQ7CisrICAgIGNvbnN0 IEhNQUNfS0FUICp0OworKworKyAgICBmb3Iobj0wLHQ9dmVjdG9yOyBuPHNpemVvZih2ZWN0b3Ip L3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsrKQorKwl7CisrCW1kID0gKCp0LT5hbGcpKCk7Cisr CUhNQUMobWQsdC0+a2V5LHN0cmxlbih0LT5rZXkpLAorKwkJKGNvbnN0IHVuc2lnbmVkIGNoYXIg Kil0LT5pdixzdHJsZW4odC0+aXYpLAorKwkJb3V0LCZvdXRsZW4pOworKworKwlpZihtZW1jbXAo b3V0LHQtPmthdmFsLG91dGxlbikpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X1NFTEZURVNUX0hNQUMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gMDsK KysJICAgIH0KKysJfQorKyAgICByZXR1cm4gMTsKKysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBz L2ZpcHNfcmFuZC5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYwkyMDEwLTA2LTA0IDEyOjI1 OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0MTIgQEAKKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9w ZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAg ICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisr ICoKKysgKi8KKysKKysvKgorKyAqIFRoaXMgaXMgYSBGSVBTIGFwcHJvdmVkIEFFUyBQUk5HIGJh c2VkIG9uIEFOU0kgWDkuMzEgQS4yLjQuCisrICovCisrCisrI2luY2x1ZGUgImVfb3MuaCIKKysK KysvKiBJZiB3ZSBkb24ndCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgc3RydWN0IHRp bWV2YWwgd29uJ3QKKysgICBiZSBkZWZpbmVkIGFuZCBnZXR0aW1lb2ZkYXkoKSB3b24ndCBiZSBk ZWNsYXJlZCB3aXRoIHN0cmljdCBjb21waWxlcnMKKysgICBsaWtlIERFQyBDIGluIEFOU0kgQyBt b2RlLiAgKi8KKysjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKysjZGVmaW5lIF9YT1BF Tl9TT1VSQ0VfRVhURU5ERUQgMQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaWZuZGVmIE9QRU5TU0xfU1lTX1dJ TjMyCisrI2luY2x1ZGUgPHN5cy90aW1lLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPGFzc2VydC5o PgorKyNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysjIGlmZGVmIE9QRU5TU0xfVU5JU1RECisr IyAgaW5jbHVkZSBPUEVOU1NMX1VOSVNURAorKyMgZWxzZQorKyMgIGluY2x1ZGUgPHVuaXN0ZC5o PgorKyMgZW5kaWYKKysjZW5kaWYKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSAi Zmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworK3ZvaWQgKk9QRU5TU0xf c3RkZXJyKHZvaWQpOworKworKyNkZWZpbmUgQUVTX0JMT0NLX0xFTkdUSAkxNgorKworKworKy8q IEFFUyBGSVBTIFBSTkcgaW1wbGVtZW50YXRpb24gKi8KKysKKyt0eXBlZGVmIHN0cnVjdCAKKysJ eworKwlpbnQgc2VlZGVkOworKwlpbnQga2V5ZWQ7CisrCWludCB0ZXN0X21vZGU7CisrCWludCBz ZWNvbmQ7CisrCWludCBlcnJvcjsKKysJdW5zaWduZWQgbG9uZyBjb3VudGVyOworKwlBRVNfS0VZ IGtzOworKwlpbnQgdnBvczsKKysJLyogVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGtleSBpZiBpdCBl cXVhbHMgc2VlZCBsZW5ndGggKi8KKysJdW5zaWduZWQgY2hhciB0bXBfa2V5W0FFU19CTE9DS19M RU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIFZbQUVTX0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVk IGNoYXIgRFRbQUVTX0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgbGFzdFtBRVNfQkxP Q0tfTEVOR1RIXTsKKysJfSBGSVBTX1BSTkdfQ1RYOworKworK3N0YXRpYyBGSVBTX1BSTkdfQ1RY IHNjdHg7CisrCisrc3RhdGljIGludCBmaXBzX3BybmdfZmFpbCA9IDA7CisrCisrdm9pZCBGSVBT X3JuZ19zdGljayh2b2lkKQorKwl7CisrCWZpcHNfcHJuZ19mYWlsID0gMTsKKysJfQorKworK3Zv aWQgZmlwc19yYW5kX3BybmdfcmVzZXQoRklQU19QUk5HX0NUWCAqY3R4KQorKwl7CisrCWN0eC0+ c2VlZGVkID0gMDsKKysJY3R4LT5rZXllZCA9IDA7CisrCWN0eC0+dGVzdF9tb2RlID0gMDsKKysJ Y3R4LT5jb3VudGVyID0gMDsKKysJY3R4LT5zZWNvbmQgPSAwOworKwljdHgtPmVycm9yID0gMDsK KysJY3R4LT52cG9zID0gMDsKKysJT1BFTlNTTF9jbGVhbnNlKGN0eC0+ViwgQUVTX0JMT0NLX0xF TkdUSCk7CisrCU9QRU5TU0xfY2xlYW5zZSgmY3R4LT5rcywgc2l6ZW9mKEFFU19LRVkpKTsKKysJ fQorKwkKKysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfa2V5KEZJUFNfUFJOR19DVFggKmN0 eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVu KQorKwl7CisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysJaWYgKGtleWxlbiAhPSAxNiAmJiBr ZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMyKQorKwkJeworKwkJLyogZXJyb3I6IGludmFsaWQg a2V5IHNpemUgKi8KKysJCXJldHVybiAwOworKwkJfQorKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGtl eSwga2V5bGVuIDw8IDMsICZjdHgtPmtzKTsKKysJaWYgKGtleWxlbiA9PSAxNikKKysJCXsKKysJ CW1lbWNweShjdHgtPnRtcF9rZXksIGtleSwgMTYpOworKwkJY3R4LT5rZXllZCA9IDI7CisrCQl9 CisrCWVsc2UKKysJCWN0eC0+a2V5ZWQgPSAxOworKwljdHgtPnNlZWRlZCA9IDA7CisrCWN0eC0+ c2Vjb25kID0gMDsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3By bmdfc2VlZChGSVBTX1BSTkdfQ1RYICpjdHgsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2Vl ZCwgRklQU19SQU5EX1NJWkVfVCBzZWVkbGVuKQorKwl7CisrCWludCBpOworKwlpZiAoIWN0eC0+ a2V5ZWQpCisrCQlyZXR1cm4gMDsKKysJLyogSW4gdGVzdCBtb2RlIHNlZWQgaXMganVzdCBzdXBw bGllZCBkYXRhICovCisrCWlmIChjdHgtPnRlc3RfbW9kZSkKKysJCXsKKysJCWlmIChzZWVkbGVu ICE9IEFFU19CTE9DS19MRU5HVEgpCisrCQkJcmV0dXJuIDA7CisrCQltZW1jcHkoY3R4LT5WLCBz ZWVkLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCWN0eC0+c2VlZGVkID0gMTsKKysJCXJldHVybiAx OworKwkJfQorKwkvKiBPdXRzaWRlIHRlc3QgbW9kZSBYT1Igc3VwcGxpZWQgZGF0YSB3aXRoIGV4 aXN0aW5nIHNlZWQgKi8KKysJZm9yIChpID0gMDsgaSA8IHNlZWRsZW47IGkrKykKKysJCXsKKysJ CWN0eC0+VltjdHgtPnZwb3MrK10gXj0gc2VlZFtpXTsKKysJCWlmIChjdHgtPnZwb3MgPT0gQUVT X0JMT0NLX0xFTkdUSCkKKysJCQl7CisrCQkJY3R4LT52cG9zID0gMDsKKysJCQkvKiBTcGVjaWFs IGNhc2UgaWYgZmlyc3Qgc2VlZCBhbmQga2V5IGxlbmd0aCBlcXVhbHMKKysgCQkJICogYmxvY2sg c2l6ZSBjaGVjayBrZXkgYW5kIHNlZWQgZG8gbm90IG1hdGNoLgorKyAJCQkgKi8gCisrCQkJaWYg KGN0eC0+a2V5ZWQgPT0gMikKKysJCQkJeworKwkJCQlpZiAoIW1lbWNtcChjdHgtPnRtcF9rZXks IGN0eC0+ViwgMTYpKQorKwkJCQkJeworKwkJCQkJUkFORGVycihSQU5EX0ZfRklQU19TRVRfUFJO R19TRUVELAorKwkJCQkJCVJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZKTsKKysJ CQkJCXJldHVybiAwOworKwkJCQkJfQorKwkJCQlPUEVOU1NMX2NsZWFuc2UoY3R4LT50bXBfa2V5 LCAxNik7CisrCQkJCWN0eC0+a2V5ZWQgPSAxOworKwkJCQl9CisrCQkJY3R4LT5zZWVkZWQgPSAx OworKwkJCX0KKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgZmlwc19zZXRfdGVzdF9t b2RlKEZJUFNfUFJOR19DVFggKmN0eCkKKysJeworKwlpZiAoY3R4LT5rZXllZCkKKysJCXsKKysJ CVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSxSQU5EX1JfUFJOR19LRVlFRCk7Cisr CQlyZXR1cm4gMDsKKysJCX0KKysJY3R4LT50ZXN0X21vZGUgPSAxOworKwlyZXR1cm4gMTsKKysJ fQorKworK2ludCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpCisrCXsKKysJcmV0dXJuIGZpcHNf c2V0X3Rlc3RfbW9kZSgmc2N0eCk7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3NldF9kdCh1bnNp Z25lZCBjaGFyICpkdCkKKysJeworKwlpZiAoIXNjdHgudGVzdF9tb2RlKQorKwkJeworKwkJUkFO RGVycihSQU5EX0ZfRklQU19SQU5EX1NFVF9EVCxSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7Cisr CQlyZXR1cm4gMDsKKysJCX0KKysJbWVtY3B5KHNjdHguRFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RI KTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX2dldF9kdChGSVBTX1BS TkdfQ1RYICpjdHgpCisrICAgIHsKKysjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysJRklMRVRJ TUUgZnQ7CisrI2Vsc2UKKysJc3RydWN0IHRpbWV2YWwgdHY7CisrI2VuZGlmCisrCXVuc2lnbmVk IGNoYXIgKmJ1ZiA9IGN0eC0+RFQ7CisrCisrI2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MK KysJdW5zaWduZWQgbG9uZyBwaWQ7CisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJ TjMyCisrCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7CisrCWJ1ZlswXSA9ICh1bnNpZ25l ZCBjaGFyKSAoZnQuZHdIaWdoRGF0ZVRpbWUgJiAweGZmKTsKKysJYnVmWzFdID0gKHVuc2lnbmVk IGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKKysJYnVmWzJdID0gKHVu c2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7CisrCWJ1Zlsz XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOwor KwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKGZ0LmR3TG93RGF0ZVRpbWUgJiAweGZmKTsKKysJ YnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiA4KSAmIDB4ZmYp OworKwlidWZbNl0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDE2KSAm IDB4ZmYpOworKwlidWZbN10gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+ IDI0KSAmIDB4ZmYpOworKyNlbHNlCisrCWdldHRpbWVvZmRheSgmdHYsTlVMTCk7CisrCWJ1Zlsw XSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZfc2VjICYgMHhmZik7CisrCWJ1ZlsxXSA9ICh1bnNp Z25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiA4KSAmIDB4ZmYpOworKwlidWZbMl0gPSAodW5zaWdu ZWQgY2hhcikgKCh0di50dl9zZWMgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlszXSA9ICh1bnNpZ25l ZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAyNCkgJiAweGZmKTsKKysJYnVmWzRdID0gKHVuc2lnbmVk IGNoYXIpICh0di50dl91c2VjICYgMHhmZik7CisrCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAo KHR2LnR2X3VzZWMgPj4gOCkgJiAweGZmKTsKKysJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgo dHYudHZfdXNlYyA+PiAxNikgJiAweGZmKTsKKysJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgo dHYudHZfdXNlYyA+PiAyNCkgJiAweGZmKTsKKysjZW5kaWYKKysJYnVmWzhdID0gKHVuc2lnbmVk IGNoYXIpIChjdHgtPmNvdW50ZXIgJiAweGZmKTsKKysJYnVmWzldID0gKHVuc2lnbmVkIGNoYXIp ICgoY3R4LT5jb3VudGVyID4+IDgpICYgMHhmZik7CisrCWJ1ZlsxMF0gPSAodW5zaWduZWQgY2hh cikgKChjdHgtPmNvdW50ZXIgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlsxMV0gPSAodW5zaWduZWQg Y2hhcikgKChjdHgtPmNvdW50ZXIgPj4gMjQpICYgMHhmZik7CisrCisrCWN0eC0+Y291bnRlcisr OworKworKworKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCisrCXBpZD0odW5zaWduZWQg bG9uZylnZXRwaWQoKTsKKysJYnVmWzEyXSA9ICh1bnNpZ25lZCBjaGFyKSAocGlkICYgMHhmZik7 CisrCWJ1ZlsxM10gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gOCkgJiAweGZmKTsKKysJYnVm WzE0XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAxNikgJiAweGZmKTsKKysJYnVmWzE1XSA9 ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAyNCkgJiAweGZmKTsKKysjZW5kaWYKKysgICAgfQor KworK3N0YXRpYyBpbnQgZmlwc19yYW5kKEZJUFNfUFJOR19DVFggKmN0eCwKKysJCQl1bnNpZ25l ZCBjaGFyICpvdXQsIEZJUFNfUkFORF9TSVpFX1Qgb3V0bGVuKQorKwl7CisrCXVuc2lnbmVkIGNo YXIgUltBRVNfQkxPQ0tfTEVOR1RIXSwgSVtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQg Y2hhciB0bXBbQUVTX0JMT0NLX0xFTkdUSF07CisrCWludCBpOworKwlpZiAoY3R4LT5lcnJvcikK KysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19FUlJPUik7Cisr CQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKCFjdHgtPmtleWVkKQorKwkJeworKwkJUkFORGVycihS QU5EX0ZfRklQU19SQU5ELFJBTkRfUl9OT19LRVlfU0VUKTsKKysJCXJldHVybiAwOworKwkJfQor KwlpZiAoIWN0eC0+c2VlZGVkKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJB TkRfUl9QUk5HX05PVF9TRUVERUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWZvciAoOzspCisr CQl7CisrCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQorKwkJCWZpcHNfZ2V0X2R0KGN0eCk7CisrCQlB RVNfZW5jcnlwdChjdHgtPkRULCBJLCAmY3R4LT5rcyk7CisrCQlmb3IgKGkgPSAwOyBpIDwgQUVT X0JMT0NLX0xFTkdUSDsgaSsrKQorKwkJCXRtcFtpXSA9IElbaV0gXiBjdHgtPlZbaV07CisrCQlB RVNfZW5jcnlwdCh0bXAsIFIsICZjdHgtPmtzKTsKKysJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxP Q0tfTEVOR1RIOyBpKyspCisrCQkJdG1wW2ldID0gUltpXSBeIElbaV07CisrCQlBRVNfZW5jcnlw dCh0bXAsIGN0eC0+ViwgJmN0eC0+a3MpOworKwkJLyogQ29udGludW91cyBQUk5HIHRlc3QgKi8K KysJCWlmIChjdHgtPnNlY29uZCkKKysJCQl7CisrCQkJaWYgKGZpcHNfcHJuZ19mYWlsKQorKwkJ CQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCQlpZiAoIW1lbWNt cChSLCBjdHgtPmxhc3QsIEFFU19CTE9DS19MRU5HVEgpKQorKwkJCQl7CisrCSAgICAJCQlSQU5E ZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfU1RVQ0spOworKwkJCQljdHgtPmVycm9y ID0gMTsKKysJCQkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOworKwkJCQlyZXR1cm4gMDsKKysJ CQkJfQorKwkJCX0KKysJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOwor KwkJaWYgKCFjdHgtPnNlY29uZCkKKysJCQl7CisrCQkJY3R4LT5zZWNvbmQgPSAxOworKwkJCWlm ICghY3R4LT50ZXN0X21vZGUpCisrCQkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCWlmIChvdXRs ZW4gPD0gQUVTX0JMT0NLX0xFTkdUSCkKKysJCQl7CisrCQkJbWVtY3B5KG91dCwgUiwgb3V0bGVu KTsKKysJCQlicmVhazsKKysJCQl9CisrCisrCQltZW1jcHkob3V0LCBSLCBBRVNfQkxPQ0tfTEVO R1RIKTsKKysJCW91dCArPSBBRVNfQkxPQ0tfTEVOR1RIOworKwkJb3V0bGVuIC09IEFFU19CTE9D S19MRU5HVEg7CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCisrCisraW50IEZJUFNfcmFuZF9z ZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4p CisrCXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJ cmV0ID0gZmlwc19zZXRfcHJuZ19rZXkoJnNjdHgsIGtleSwga2V5bGVuKTsKKysJQ1JZUFRPX3df dW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IEZJ UFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbikK KysJeworKwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwly ZXQgPSBmaXBzX3NldF9wcm5nX3NlZWQoJnNjdHgsIHNlZWQsIHNlZWRsZW4pOworKwlDUllQVE9f d191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKysKKytp bnQgRklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBj b3VudCkKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQp OworKwlyZXQgPSBmaXBzX3JhbmQoJnNjdHgsIG91dCwgY291bnQpOworKwlDUllQVE9fd191bmxv Y2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKytpbnQgRklQU19y YW5kX3N0YXR1cyh2b2lkKQorKwl7CisrCWludCByZXQ7CisrCUNSWVBUT19yX2xvY2soQ1JZUFRP X0xPQ0tfUkFORCk7CisrCXJldCA9IHNjdHguc2VlZGVkOworKwlDUllQVE9fcl91bmxvY2soQ1JZ UFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKyt2b2lkIEZJUFNfcmFuZF9y ZXNldCh2b2lkKQorKwl7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCWZp cHNfcmFuZF9wcm5nX3Jlc2V0KCZzY3R4KTsKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NL X1JBTkQpOworKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19kb19yYW5kX3NlZWQoY29uc3Qgdm9p ZCAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVkbGVuKQorKwl7CisrCUZJUFNfcmFuZF9zZWVk KHNlZWQsIHNlZWRsZW4pOworKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19kb19yYW5kX2FkZChj b25zdCB2b2lkICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4sCisrCQkJCQlkb3VibGUg YWRkX2VudHJvcHkpCisrCXsKKysJRklQU19yYW5kX3NlZWQoc2VlZCwgc2VlZGxlbik7CisrCX0K KysKKytzdGF0aWMgY29uc3QgUkFORF9NRVRIT0QgcmFuZF9maXBzX21ldGg9CisrICAgIHsKKysg ICAgZmlwc19kb19yYW5kX3NlZWQsCisrICAgIEZJUFNfcmFuZF9ieXRlcywKKysgICAgRklQU19y YW5kX3Jlc2V0LAorKyAgICBmaXBzX2RvX3JhbmRfYWRkLAorKyAgICBGSVBTX3JhbmRfYnl0ZXMs CisrICAgIEZJUFNfcmFuZF9zdGF0dXMKKysgICAgfTsKKysKKytjb25zdCBSQU5EX01FVEhPRCAq RklQU19yYW5kX21ldGhvZCh2b2lkKQorK3sKKysgIHJldHVybiAmcmFuZF9maXBzX21ldGg7Cisr fQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19y YW5kLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAorLS0tIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oLmZpcHMJMjAxMC0wNi0wNCAxMjoy NToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBz X3JhbmQuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw3 NyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpZm5kZWYgSEVBREVSX0ZJUFNf UkFORF9ICisrI2RlZmluZSBIRUFERVJfRklQU19SQU5EX0gKKysKKysjaW5jbHVkZSAiZGVzLmgi CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRl cm4gIkMiIHsKKysjZW5kaWYKKysKKytpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWdu ZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbik7CisraW50IEZJUFNfcmFuZF9z ZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0pOworK2ludCBGSVBTX3Jh bmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbik7Cisr CisraW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCk7Cisrdm9pZCBGSVBTX3JhbmRfcmVzZXQo dm9pZCk7CisraW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOworKworK2lu dCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpOworKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3Jh bmRfbWV0aG9kKHZvaWQpOworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisr I2VuZGlmCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBz X3JhbmRfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfcmFu ZF9zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3Nl bGZ0ZXN0LmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCTIwMTAtMDYtMDQg MTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDM3MyBAQAorKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJl IG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgor KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNv cmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwor KyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgor KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzX3JhbmQuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrCisrCisrdHlwZWRl ZiBzdHJ1Y3QKKysJeworKwl1bnNpZ25lZCBjaGFyIERUWzE2XTsKKysJdW5zaWduZWQgY2hhciBW WzE2XTsKKysJdW5zaWduZWQgY2hhciBSWzE2XTsKKysJfSBBRVNfUFJOR19UVjsKKysKKysvKiBU aGUgZm9sbG93aW5nIHRlc3QgdmVjdG9ycyBhcmUgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUgUkdO VlMgc3BlYyAqLworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xMjhfa2V5WzE2XSA9Cisr CQl7MHhmMywweGIxLDB4NjYsMHg2ZCwweDEzLDB4NjAsMHg3MiwweDQyLAorKwkJIDB4ZWQsMHgw NiwweDFjLDB4YWIsMHhiOCwweGQ0LDB4NjIsMHgwMn07CisrCisrc3RhdGljIEFFU19QUk5HX1RW IGFlc18xMjhfdHZbXSA9IHsKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJl LDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAs MHhlOSwweDIyLDB4Zjl9LAorKwkJCQkvKiBWICovCisrCQl7MHg4MCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDU5LDB4NTMsMHgxZSwweGQxLDB4M2IsMHhi MCwweGMwLDB4NTUsCisrCQkgMHg4NCwweDc5LDB4NjYsMHg4NSwweGMxLDB4MmYsMHg3NiwweDQx fQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJh LDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIs MHhmYX0sCisrCQkJCS8qIFYgKi8KKysJCXsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwK KysJCQkJLyogUiAqLworKwkJezB4N2MsMHgyMiwweDJjLDB4ZjQsMHhjYSwweDhmLDB4YTIsMHg0 YywKKysJCSAweDFjLDB4OWMsMHhiNiwweDQxLDB4YTksMHhmMywweDIyLDB4MGR9CisrCX0sCisr CXsKKysJCQkJLyogRFQgKi8KKysJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZh LDB4NjIsCisrCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGZifSwKKysJ CQkJLyogViAqLworKwkJezB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwK KysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBS ICovCisrCQl7MHg4YSwweGFhLDB4MDAsMHgzOSwweDY2LDB4NjcsMHg1YiwweGU1LAorKwkJIDB4 MjksMHgxNCwweDI4LDB4ODEsMHhhOSwweDRkLDB4NGUsMHhjN30KKysJfSwKKysJeworKwkJCQkv KiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJ CSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmN9LAorKwkJCQkvKiBWICov CisrCQl7MHhmMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsw eDg4LDB4ZGQsMHhhNCwweDU2LDB4MzAsMHgyNCwweDIzLDB4ZTUsCisrCQkgMHhmNiwweDlkLDB4 YTUsMHg3ZSwweDdiLDB4OTUsMHhjNywweDNhfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisr CQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgx ZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmZH0sCisrCQkJCS8qIFYgKi8KKysJCXsweGY4 LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4MDUsMHgyNSww eDkyLDB4NDYsMHg2MSwweDc5LDB4ZDIsMHhjYiwKKysJCSAweDc4LDB4YzQsMHgwYiwweDE0LDB4 MGEsMHg1YSwweDlhLDB4Yzh9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGU2LDB4 YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCisrCQkgMHhkNywweDFkLDB4NGEsMHhm YiwweGIwLDB4ZTksMHgyMywweDc3fSwKKysJCQkJLyogViAqLworKwkJezB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKKysJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmV9LAorKwkJCQkvKiBSICovCisrCQl7MHgwZCwweGQ1LDB4YTAsMHgzNiww eDdhLDB4NTksMHgyNiwweGJjLAorKwkJIDB4NDgsMHhkOSwweDM4LDB4YmYsMHhmMCwweDg1LDB4 OGYsMHhlYX0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4 NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhl OSwweDIzLDB4Nzh9LAorKwkJCQkvKiBWICovCisrCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwweGZmLAorKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZn0sCisrCQkJCS8qIFIgKi8KKysJCXsweGFlLDB4NTMsMHg4NywweGVlLDB4OGMsMHhkOSww eDEyLDB4ZjUsCisrCQkgMHg3MywweDUzLDB4YWUsMHgwMywweGY5LDB4ZDUsMHgxMywweDMzfQor Kwl9LAorK307CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9rZXlbMjRdID0KKysJ CXsweDE1LDB4ZDgsMHg3OCwweDBkLDB4NjIsMHhkMywweDI1LDB4NmUsCisrCQkgMHg0NCwweDY0 LDB4MTAsMHgxMywweDYwLDB4MmIsMHhhOSwweGJjLAorKwkJIDB4NGEsMHhmYiwweGNhLDB4ZWIs MHg0YywweDhiLDB4OTksMHgzYn07CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18xOTJfdHZb XSA9IHsKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCww eDY5LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4 NGJ9LAorKwkJCQkvKiBWICovCisrCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisr CQkJCS8qIFIgKi8KKysJCXsweDE3LDB4MDcsMHhkNSwweDI4LDB4MTksMHg3OSwweDFlLDB4ZWYs CisrCQkgMHhhNSwweDBjLDB4YmYsMHgyNSwweGU1LDB4NTYsMHhiNCwweDkzfQorKwl9LAorKwl7 CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4Yiww eGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0Y30sCisrCQkJ CS8qIFYgKi8KKysJCXsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisr CQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAq LworKwkJezB4OTIsMHg4ZCwweGJlLDB4MDcsMHhkZCwweGM3LDB4NTgsMHhjMCwKKysJCSAweDZm LDB4MzUsMHg0MSwweDliLDB4MTcsMHhjOSwweGJkLDB4OWJ9CisrCX0sCisrCXsKKysJCQkJLyog RFQgKi8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkg MHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRkfSwKKysJCQkJLyogViAqLwor KwkJezB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHhk NSwweGRlLDB4ZjQsMHg1MCwweGYzLDB4YjcsMHgxMCwweDRlLAorKwkJIDB4YjgsMHhjNiwweGY4 LDB4Y2YsMHhlMiwweGIxLDB4Y2EsMHhhMn0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJ ezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTks MHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGV9LAorKwkJCQkvKiBWICovCisrCQl7MHhmMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweGNlLDB4MjksMHgw OCwweDQzLDB4ZmMsMHgzNCwweDQxLDB4ZTcsCisrCQkgMHg0NywweDhmLDB4YjMsMHg2NiwweDJi LDB4NDYsMHhiMSwweGJifQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4 LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQs MHgyNCwweDc4LDB4ZjMsMHg0Zn0sCisrCQkJCS8qIFYgKi8KKysJCXsweGY4LDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4YjMsMHgyNiwweDBmLDB4ZjUsMHhk NiwweGNhLDB4YTgsMHhiZiwKKysJCSAweDg5LDB4YjgsMHg1ZSwweDJmLDB4MjIsMHg1NiwweDky LDB4MmZ9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4 LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4Nzgs MHhmMywweGM5fSwKKysJCQkJLyogViAqLworKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiww eGZmLDB4ZmYsMHhmZiwKKysJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmV9LAorKwkJCQkvKiBSICovCisrCQl7MHgwNSwweGViLDB4MTgsMHg1MiwweDM0LDB4NDMsMHgw MCwweDQzLAorKwkJIDB4NmUsMHg1YSwweGE1LDB4ZmUsMHg3YiwweDMyLDB4YzQsMHgyZH0KKysJ fSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5 LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4Y2F9 LAorKwkJCQkvKiBWICovCisrCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiww eGZmLAorKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn0sCisrCQkJ CS8qIFIgKi8KKysJCXsweDE1LDB4M2MsMHhlOCwweGQxLDB4MDQsMHhjNywweGFkLDB4NTAsCisr CQkgMHgwYiwweGYwLDB4MDcsMHgxNiwweGU3LDB4NTYsMHg3YSwweGVhfQorKwl9LAorK307Cisr Cisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9rZXlbMzJdID0KKysJCXsweDZkLDB4MTQs MHgwNiwweDZjLDB4YjYsMHhkOCwweDIxLDB4MmQsCisrCQkgMHg4MiwweDhkLDB4ZmEsMHhmMiww eDdhLDB4MDMsMHhiNywweDlmLAorKwkJIDB4MGMsMHhjNywweDNlLDB4Y2QsMHg3NiwweGViLDB4 ZWUsMHhiNSwKKysJCSAweDIxLDB4MDUsMHg4YywweDRmLDB4MzEsMHg3YSwweDgwLDB4YmJ9Owor KworK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMjU2X3R2W10gPSB7CisrCXsKKysJCQkJLyogRFQg Ki8KKysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhm MiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDg4fSwKKysJCQkJLyogViAqLworKwkJ ezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHgzNSww eGM3LDB4ZWYsMHhhNywweDc4LDB4NGQsMHgyOSwweGJjLAorKwkJIDB4ODIsMHg3OSwweDk5LDB4 ZmIsMHhkMCwweGIzLDB4M2IsMHg3Mn0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4 ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJCSAweGYyLDB4YTksMHg0 ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4ODl9LAorKwkJCQkvKiBWICovCisrCQl7MHhjMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDZjLDB4ZjQsMHg0Miww eDVkLDB4YzcsMHgwNCwweDFhLDB4NDEsCisrCQkgMHgyOCwweDJhLDB4NzgsMHhhOSwweGIwLDB4 MTIsMHhjNCwweDk1fQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhkYSwweDNhLDB4 NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3 NCwweDhlLDB4OWUsMHg4YX0sCisrCQkJCS8qIFYgKi8KKysJCXsweGUwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4MTYsMHg5MCwweGE0LDB4ZmYsMHg3Yiww eDdlLDB4YjksMHgzMCwKKysJCSAweGRiLDB4NjcsMHg0YiwweGFjLDB4MmQsMHhlMSwweGQxLDB4 NzV9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4 MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5 ZSwweDhifSwKKysJCQkJLyogViAqLworKwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9 LAorKwkJCQkvKiBSICovCisrCQl7MHgxNCwweDZmLDB4ZjUsMHg5NSwweGExLDB4NDYsMHg2NSww eDMwLAorKwkJIDB4YmMsMHg1NywweGUyLDB4NGEsMHhmNywweDQ1LDB4NjIsMHgwNX0KKysJfSwK KysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4 YjAsMHhkNSwKKysJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4OGN9LAor KwkJCQkvKiBWICovCisrCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8q IFIgKi8KKysJCXsweDk2LDB4ZTIsMHhiNCwweDFlLDB4NjYsMHg1ZSwweDBmLDB4YTQsCisrCQkg MHhjNSwweGNkLDB4YTIsMHgwNywweGNjLDB4YjcsMHg5NCwweDQwfQorKwl9LAorKwl7CisrCQkJ CS8qIERUICovCisrCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAor KwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWYsMHgwNn0sCisrCQkJCS8qIFYg Ki8KKysJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCisrCQkgMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKKysJCQkJLyogUiAqLworKwkJ ezB4NjEsMHhjZSwweDFkLDB4NmEsMHg0OCwweDc1LDB4OTcsMHgyOCwKKysJCSAweDRiLDB4NDEs MHhkZSwweDE4LDB4NDQsMHg0ZiwweDU2LDB4ZWN9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8K KysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiww eGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZiwweDA3fSwKKysJCQkJLyogViAqLworKwkJezB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKKysJCSAweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAorKwkJCQkvKiBSICovCisrCQl7MHg1MiwweDg5 LDB4NTksMHg3OSwweDJkLDB4YWEsMHgyOCwweGIzLAorKwkJIDB4YjAsMHg4YSwweDNlLDB4NzAs MHhmYSwweDcxLDB4NTksMHg4NH0KKysJfSwKKyt9OworKworKworK3ZvaWQgRklQU19jb3JydXB0 X3JuZygpCisrICAgIHsKKysgICAgYWVzXzE5Ml90dlswXS5WWzBdKys7CisrICAgIH0KKysKKysj ZGVmaW5lIGZpcHNfcmFuZF90ZXN0KGtleSwgdHYpIFwKKysJZG9fcmFuZF90ZXN0KGtleSwgc2l6 ZW9mIGtleSwgdHYsIHNpemVvZih0dikvc2l6ZW9mKEFFU19QUk5HX1RWKSkKKysKKytzdGF0aWMg aW50IGRvX3JhbmRfdGVzdCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sCisrCQkJQUVT X1BSTkdfVFYgKnR2LCBpbnQgbnR2KQorKwl7CisrCXVuc2lnbmVkIGNoYXIgUlsxNl07CisrCWlu dCBpOworKwlpZiAoIUZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVuKSkKKysJCXJldHVybiAw OworKwlmb3IgKGkgPSAwOyBpIDwgbnR2OyBpKyspCisrCQl7CisrCQlGSVBTX3JhbmRfc2VlZCh0 dltpXS5WLCAxNik7CisrCQlGSVBTX3JhbmRfc2V0X2R0KHR2W2ldLkRUKTsKKysJCUZJUFNfcmFu ZF9ieXRlcyhSLCAxNik7CisrCQlpZiAobWVtY21wKFIsIHR2W2ldLlIsIDE2KSkKKysJCQlyZXR1 cm4gMDsKKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysJCisrCisraW50IEZJUFNfc2VsZnRlc3Rf cm5nKCkKKysJeworKwlGSVBTX3JhbmRfcmVzZXQoKTsKKysJaWYgKCFGSVBTX3JhbmRfdGVzdF9t b2RlKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORyxGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWZpcHNfcmFuZF90 ZXN0KGFlc18xMjhfa2V5LGFlc18xMjhfdHYpCisrCQl8fCAhZmlwc19yYW5kX3Rlc3QoYWVzXzE5 Ml9rZXksIGFlc18xOTJfdHYpCisrCQl8fCAhZmlwc19yYW5kX3Rlc3QoYWVzXzI1Nl9rZXksIGFl c18yNTZfdHYpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcsRklQ U19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJRklQU19yYW5kX3Jl c2V0KCk7CisrCXJldHVybiAxOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9m aXBzX3JhbmR0ZXN0LmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAor KysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYwkyMDEwLTA2LTA0 IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwyNDggQEAKKysvKiBDb3B5cmln aHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1l bnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgor KyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGgg TmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVy Y2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhl IFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wg Y29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0 cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNl cHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysg KiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBD b3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4K KysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hv dWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMg b2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRl eHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9u IChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRv Z3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlw dHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQg b3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFy ZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBh bnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAK KysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGlu Y2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICog CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBB TkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg TElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9S IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5j ZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVy c2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAg aS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVy IGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVi bGljIExpY2VuY2UuXQorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNs dWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+ CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysjaWZuZGVm IE9QRU5TU0xfRklQUworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAg ICBwcmludGYoIk5vIEZJUFMgUkFORCBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30K KysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3R5cGVkZWYgc3RydWN0 CisrCXsKKysJdW5zaWduZWQgY2hhciBEVFsxNl07CisrCXVuc2lnbmVkIGNoYXIgVlsxNl07Cisr CXVuc2lnbmVkIGNoYXIgUlsxNl07CisrCX0gQUVTX1BSTkdfTUNUOworKworK3N0YXRpYyB1bnNp Z25lZCBjaGFyIGFlc18xMjhfbWN0X2tleVsxNl0gPQorKwl7MHg5ZiwweDViLDB4NTEsMHgyMCww eDBiLDB4ZjMsMHgzNCwweGI1LAorKwkgMHhkOCwweDJiLDB4ZTgsMHhjMywweDcyLDB4NTUsMHhj OCwweDQ4fTsKKysKKytzdGF0aWMgQUVTX1BSTkdfTUNUIGFlc18xMjhfbWN0X3R2ID0geworKwkJ CS8qIERUICovCisrCXsweDYzLDB4NzYsMHhiYiwweGU1LDB4MjksMHgwMiwweGJhLDB4M2IsCisr CSAweDY3LDB4YzksMHgyNSwweGZhLDB4NzAsMHgxZiwweDExLDB4YWN9LAorKwkJCS8qIFYgKi8K KysJezB4NTcsMHgyYywweDhlLDB4NzYsMHg4NywweDI2LDB4NDcsMHg5NywKKysJIDB4N2UsMHg3 NCwweGZiLDB4ZGQsMHhjNCwweDk1LDB4MDEsMHhkMX0sCisrCQkJLyogUiAqLworKwl7MHg0OCww eGU5LDB4YmQsMHgwZCwweDA2LDB4ZWUsMHgxOCwweGZiLAorKwkgMHhlNCwweDU3LDB4OTAsMHhk NSwweGMzLDB4ZmMsMHg5YiwweDczfQorK307CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9tY3Rfa2V5WzI0XSA9CisrCXsweGI3LDB4NmMsMHgzNCwweGQxLDB4MDksMHg2NywweGFi LDB4NzMsCisrCSAweDRkLDB4NWEsMHhkNSwweDM0LDB4OTgsMHgxNiwweDBiLDB4OTEsCisrCSAw eGJjLDB4MzUsMHg1MSwweDE2LDB4NmIsMHhhZSwweDkzLDB4OGF9OworKworK3N0YXRpYyBBRVNf UFJOR19NQ1QgYWVzXzE5Ml9tY3RfdHYgPSB7CisrCQkJLyogRFQgKi8KKysJezB4ODQsMHhjZSww eDIyLDB4N2QsMHg5MSwweDVhLDB4YTMsMHhjOSwKKysJIDB4ODQsMHgzYywweDBhLDB4YjMsMHhh OSwweDYzLDB4MTUsMHg1Mn0sCisrCQkJLyogViAqLworKwl7MHhiNiwweGFmLDB4ZTYsMHg4Ziww eDk5LDB4OWUsMHg5MCwweDY0LAorKwkgMHhkZCwweGM3LDB4N2EsMHhjMSwweGJiLDB4OTAsMHgz YSwweDZkfSwKKysJCQkvKiBSICovCisrCXsweGZjLDB4ODUsMHg2MCwweDlhLDB4MjksMHg2Ziww eGVmLDB4MjEsCisrCSAweGRkLDB4ODYsMHgyMCwweDMyLDB4OGEsMHgyOSwweDZmLDB4NDd9Cisr fTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMjU2X21jdF9rZXlbMzJdID0KKysJezB4 OWIsMHgwNSwweGM4LDB4NjgsMHhmZiwweDQ3LDB4ZjgsMHgzYSwKKysJIDB4YTYsMHgzYSwweGE4 LDB4Y2IsMHg0ZSwweDcxLDB4YjIsMHhlMCwKKysJIDB4YjgsMHg3ZSwweGYxLDB4MzcsMHhiNiww eGI0LDB4ZjYsMHg2ZCwKKysJIDB4ODYsMHgzMiwweGZjLDB4MWYsMHg1ZSwweDFkLDB4MWUsMHg1 MH07CisrCisrc3RhdGljIEFFU19QUk5HX01DVCBhZXNfMjU2X21jdF90diA9IHsKKysJCQkvKiBE VCAqLworKwl7MHgzMSwweDZlLDB4MzUsMHg5YSwweGIxLDB4NDQsMHhmMCwweGVlLAorKwkgMHg2 MiwweDZkLDB4MDQsMHg0NiwweGUwLDB4YTMsMHg5MiwweDRjfSwKKysJCQkvKiBWICovCisrCXsw eDRmLDB4Y2QsMHhjMSwweDg3LDB4ODIsMHgxZiwweDRkLDB4YTEsCisrCSAweDNlLDB4MGUsMHg1 NiwweDQ0LDB4NTksMHhlOCwweDgzLDB4Y2F9LAorKwkJCS8qIFIgKi8KKysJezB4YzgsMHg4Nyww eGMyLDB4NjEsMHg1YiwweGQwLDB4YjksMHhlMSwKKysJIDB4ZTcsMHhmMywweDhiLDB4ZDcsMHg1 YiwweGQ1LDB4ZjEsMHg4ZH0KKyt9OworKworK3N0YXRpYyB2b2lkIGR1bXAoY29uc3QgdW5zaWdu ZWQgY2hhciAqYixpbnQgbikKKysgICAgeworKyAgICB3aGlsZShuLS0gPiAwKQorKwl7CisrCXBy aW50ZigiICUwMngiLCpiKyspOworKwl9CisrICAgIH0KKysKKytzdGF0aWMgdm9pZCBjb21wYXJl KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3VsdCxjb25zdCB1bnNpZ25lZCBjaGFyICpleHBlY3Rl ZCwKKysJCSAgICBpbnQgbikKKysgICAgeworKyAgICBpbnQgaTsKKysKKysgICAgZm9yKGk9MCA7 IGkgPCBuIDsgKytpKQorKwlpZihyZXN1bHRbaV0gIT0gZXhwZWN0ZWRbaV0pCisrCSAgICB7Cisr CSAgICBwdXRzKCJSYW5kb20gdGVzdCBmYWlsZWQsIGdvdDoiKTsKKysJICAgIGR1bXAocmVzdWx0 LG4pOworKwkgICAgcHV0cygiXG4gICAgICAgICAgICAgICBleHBlY3RlZDoiKTsKKysJICAgIGR1 bXAoZXhwZWN0ZWQsbik7CisrCSAgICBwdXRjaGFyKCdcbicpOworKwkgICAgRVhJVCgxKTsKKysJ ICAgIH0KKysgICAgfQorKworKworK3N0YXRpYyB2b2lkIHJ1bl90ZXN0KHVuc2lnbmVkIGNoYXIg KmtleSwgaW50IGtleWxlbiwgQUVTX1BSTkdfTUNUICp0dikKKysgICAgeworKyAgICB1bnNpZ25l ZCBjaGFyIGJ1ZlsxNl0sIGR0WzE2XTsKKysgICAgaW50IGksIGo7CisrICAgIEZJUFNfcmFuZF9y ZXNldCgpOworKyAgICBGSVBTX3JhbmRfdGVzdF9tb2RlKCk7CisrICAgIEZJUFNfcmFuZF9zZXRf a2V5KGtleSwga2V5bGVuKTsKKysgICAgRklQU19yYW5kX3NlZWQodHYtPlYsIDE2KTsKKysgICAg bWVtY3B5KGR0LCB0di0+RFQsIDE2KTsKKysgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKysp CisrCXsKKysgICAgCUZJUFNfcmFuZF9zZXRfZHQoZHQpOworKwlGSVBTX3JhbmRfYnl0ZXMoYnVm LCAxNik7CisrCS8qIEluY3JlbWVudCBEVCAqLworKwlmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0p CisrCQl7CisrCQlkdFtqXSsrOworKwkJaWYgKGR0W2pdKQorKwkJCWJyZWFrOworKwkJfQorKwl9 CisrCisrICAgIGNvbXBhcmUoYnVmLHR2LT5SLCAxNik7CisrICAgIH0KKysKKytpbnQgbWFpbigp CisrCXsKKysJcnVuX3Rlc3QoYWVzXzEyOF9tY3Rfa2V5LCAxNiwgJmFlc18xMjhfbWN0X3R2KTsK KysJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAxIGRvbmVcbiIpOworKwlydW5fdGVzdChhZXNfMTky X21jdF9rZXksIDI0LCAmYWVzXzE5Ml9tY3RfdHYpOworKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0 IDIgZG9uZVxuIik7CisrCXJ1bl90ZXN0KGFlc18yNTZfbWN0X2tleSwgMzIsICZhZXNfMjU2X21j dF90dik7CisrCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMyBkb25lXG4iKTsKKysJcmV0dXJuIDA7 CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2Zp cHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3Jz YV9zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2Vs ZnRlc3QuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwkyMDEwLTA2LTA0IDEy OjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0NDEgQEAKKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICog YXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysg KgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv b3BlbnNzbGNvbmYuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIHVuc2ln bmVkIGNoYXIgbltdID0KKysiXHgwMFx4QkJceEY4XHgyRlx4MDlceDA2XHg4Mlx4Q0VceDlDXHgy M1x4MzhceEFDXHgyQlx4OURceEE4XHg3MSIKKysiXHhGN1x4MzZceDhEXHgwN1x4RUVceEQ0XHgx MFx4NDNceEE0XHg0MFx4RDZceEI2XHhGMFx4NzRceDU0XHhGNSIKKysiXHgxRlx4QjhceERGXHhC QVx4QUZceDAzXHg1Q1x4MDJceEFCXHg2MVx4RUFceDQ4XHhDRVx4RUJceDZGXHhDRCIKKysiXHg0 OFx4NzZceEVEXHg1Mlx4MERceDYwXHhFMVx4RUNceDQ2XHgxOVx4NzFceDlEXHg4QVx4NUJceDhC XHg4MCIKKysiXHg3Rlx4QUZceEI4XHhFMFx4QTNceERGXHhDN1x4MzdceDcyXHgzRVx4RTZceEI0 XHhCN1x4RDlceDNBXHgyNSIKKysiXHg4NFx4RUVceDZBXHg2NFx4OURceDA2XHgwOVx4NTNceDc0 XHg4OFx4MzRceEIyXHg0NVx4NDVceDk4XHgzOSIKKysiXHg0RVx4RTBceEFBXHhCMVx4MkRceDdC XHg2MVx4QTVceDFGXHg1Mlx4N0FceDlBXHg0MVx4RjZceEMxXHg2OCIKKysiXHg3Rlx4RTJceDUz XHg3Mlx4OThceENBXHgyQVx4OEZceDU5XHg0Nlx4RjhceEU1XHhGRFx4MDlceDFEXHhCRCIKKysi XHhDQiI7CisrCisrCisrc3RhdGljIGludCBzZXRyc2FrZXkoUlNBICprZXkpCisrICAgIHsKKysg ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZVtdID0gIlx4MTEiOworKworKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBkW10gPQorKyJceDAwXHhBNVx4REFceEZDXHg1M1x4NDFc eEZBXHhGMlx4ODlceEM0XHhCOVx4ODhceERCXHgzMFx4QzFceENEIgorKyJceEY4XHgzRlx4MzFc eDI1XHgxRVx4MDZceDY4XHhCNFx4MjdceDg0XHg4MVx4MzhceDAxXHg1N1x4OTZceDQxIgorKyJc eEIyXHg5NFx4MTBceEIzXHhDN1x4OTlceDhEXHg2Qlx4QzRceDY1XHg3NFx4NUVceDVDXHgzOVx4 MjZceDY5IgorKyJceEQ2XHg4N1x4MERceEEyXHhDMFx4ODJceEE5XHgzOVx4RTNceDdGXHhEQ1x4 QjhceDJFXHhDOVx4M0VceERBIgorKyJceEM5XHg3Rlx4RjNceEFEXHg1OVx4NTBceEFDXHhDRlx4 QkNceDExXHgxQ1x4NzZceEYxXHhBOVx4NTJceDk0IgorKyJceDQ0XHhFNVx4NkFceEFGXHg2OFx4 QzVceDZDXHgwOVx4MkNceEQzXHg4RFx4QzNceEJFXHhGNVx4RDJceDBBIgorKyJceDkzXHg5OVx4 MjZceEVEXHg0Rlx4NzRceEExXHgzRVx4RERceEZCXHhFMVx4QTFceENFXHhDQ1x4NDhceDk0Igor KyJceEFGXHg5NFx4MjhceEMyXHhCN1x4QjhceDg4XHgzRlx4RTRceDQ2XHgzQVx4NEJceEM4XHg1 Qlx4MUNceEIzIgorKyJceEMxIjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg cFtdID0KKysiXHgwMFx4RUVceENGXHhBRVx4ODFceEIxXHhCOVx4QjNceEM5XHgwOFx4ODFceDBC XHgxMFx4QTFceEI1XHg2MCIKKysiXHgwMVx4OTlceEVCXHg5Rlx4NDRceEFFXHhGNFx4RkRceEE0 XHg5M1x4QjhceDFBXHg5RVx4M0RceDg0XHhGNiIKKysiXHgzMlx4MTJceDRFXHhGMFx4MjNceDZF XHg1RFx4MUVceDNCXHg3RVx4MjhceEZBXHhFN1x4QUFceDA0XHgwQSIKKysiXHgyRFx4NUJceDI1 XHgyMVx4NzZceDQ1XHg5RFx4MUZceDM5XHg3NVx4NDFceEJBXHgyQVx4NThceEZCXHg2NSIKKysi XHg5OSI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHFbXSA9CisrIlx4MDBc eEM5XHg3Rlx4QjFceEYwXHgyN1x4RjRceDUzXHhGNlx4MzRceDEyXHgzM1x4RUFceEFBXHhEMVx4 RDkiCisrIlx4MzVceDNGXHg2Q1x4NDJceEQwXHg4OFx4NjZceEIxXHhEMFx4NUFceDBGXHgyMFx4 MzVceDAyXHg4Qlx4OUQiCisrIlx4ODZceDk4XHg0MFx4QjRceDE2XHg2Nlx4QjRceDJFXHg5Mlx4 RUFceDBEXHhBM1x4QjRceDMyXHgwNFx4QjUiCisrIlx4Q0ZceENFXHgzM1x4NTJceDUyXHg0RFx4 MDRceDE2XHhBNVx4QTRceDQxXHhFN1x4MDBceEFGXHg0Nlx4MTUiCisrIlx4MDMiOworKworKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXAxW10gPQorKyJceDU0XHg0OVx4NENceEE2 XHgzRVx4QkFceDAzXHgzN1x4RTRceEUyXHg0MFx4MjNceEZDXHhENlx4OUFceDVBIgorKyJceEVC XHgwN1x4RERceERDXHgwMVx4ODNceEE0XHhEMFx4QUNceDlCXHg1NFx4QjBceDUxXHhGMlx4QjFc eDNFIgorKyJceEQ5XHg0OVx4MDlceDc1XHhFQVx4QjdceDc0XHgxNFx4RkZceDU5XHhDMVx4Rjdc eDY5XHgyRVx4OUFceDJFIgorKyJceDIwXHgyQlx4MzhceEZDXHg5MVx4MEFceDQ3XHg0MVx4NzRc eEFEXHhDOVx4M0NceDFGXHg2N1x4QzlceDgxIjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgZG1xMVtdID0KKysiXHg0N1x4MUVceDAyXHg5MFx4RkZceDBBXHhGMFx4NzVceDAz XHg1MVx4QjdceEY4XHg3OFx4ODZceDRDXHhBOSIKKysiXHg2MVx4QURceEJEXHgzQVx4OEFceDdF XHg5OVx4MUNceDVDXHgwNVx4NTZceEE5XHg0Q1x4MzFceDQ2XHhBNyIKKysiXHhGOVx4ODBceDNG XHg4Rlx4NkZceDhBXHhFM1x4NDJceEU5XHgzMVx4RkRceDhBXHhFNFx4N0FceDIyXHgwRCIKKysi XHgxQlx4OTlceEE0XHg5NVx4ODRceDk4XHgwN1x4RkVceDM5XHhGOVx4MjRceDVBXHg5OFx4MzZc eERBXHgzRCI7CisrICAgIAorKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpcW1wW10g PQorKyJceDAwXHhCMFx4NkNceDRGXHhEQVx4QkJceDYzXHgwMVx4MTlceDhEXHgyNlx4NUJceERC XHhBRVx4OTRceDIzIgorKyJceEIzXHg4MFx4RjJceDcxXHhGN1x4MzRceDUzXHg4OFx4NTBceDkz XHgwN1x4N0ZceENEXHgzOVx4RTJceDExIgorKyJceDlGXHhDOVx4ODZceDMyXHgxNVx4NEZceDU4 XHg4M1x4QjFceDY3XHhBOVx4NjdceEJGXHg0MFx4MkJceDRFIgorKyJceDlFXHgyRVx4MEZceDk2 XHg1Nlx4RTZceDk4XHhFQVx4MzZceDY2XHhFRFx4RkJceDI1XHg3OVx4ODBceDM5IgorKyJceEY3 IjsKKysKKysgICAga2V5LT5uID0gQk5fYmluMmJuKG4sIHNpemVvZihuKS0xLCBrZXktPm4pOwor KyAgICBrZXktPmUgPSBCTl9iaW4yYm4oZSwgc2l6ZW9mKGUpLTEsIGtleS0+ZSk7CisrICAgIGtl eS0+ZCA9IEJOX2JpbjJibihkLCBzaXplb2YoZCktMSwga2V5LT5kKTsKKysgICAga2V5LT5wID0g Qk5fYmluMmJuKHAsIHNpemVvZihwKS0xLCBrZXktPnApOworKyAgICBrZXktPnEgPSBCTl9iaW4y Ym4ocSwgc2l6ZW9mKHEpLTEsIGtleS0+cSk7CisrICAgIGtleS0+ZG1wMSA9IEJOX2JpbjJibihk bXAxLCBzaXplb2YoZG1wMSktMSwga2V5LT5kbXAxKTsKKysgICAga2V5LT5kbXExID0gQk5fYmlu MmJuKGRtcTEsIHNpemVvZihkbXExKS0xLCBrZXktPmRtcTEpOworKyAgICBrZXktPmlxbXAgPSBC Tl9iaW4yYm4oaXFtcCwgc2l6ZW9mKGlxbXApLTEsIGtleS0+aXFtcCk7CisrICAgIHJldHVybiAx OworKyAgICB9CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKCkKKysgICAgeworKyAgICBuWzBd Kys7CisrICAgIH0KKysKKysvKiBLbm93biBBbnN3ZXIgVGVzdCAoS0FUKSBkYXRhIGZvciB0aGUg YWJvdmUgUlNBIHByaXZhdGUga2V5IHNpZ25pbmcKKysgKiBrYXRfdGJzLgorKyAqLworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF90YnNbXSA9ICJPcGVuU1NMIEZJUFMgMTQwLTIg UHVibGljIEtleSBSU0EgS0FUIjsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRf UlNBX1BTU19TSEExW10gPSB7CisrICAweDJELCAweEFGLCAweDZFLCAweEMyLCAweDk4LCAweEZC LCAweDhBLCAweEExLCAweEI5LCAweDQ2LCAweERBLCAweDBGLAorKyAgMHgwMSwgMHgxRSwgMHgz NywgMHg5MywgMHhDMiwgMHg1NSwgMHgyNywgMHhFNCwgMHgxRCwgMHhEMiwgMHg5MCwgMHhCQiwK KysgIDB4RjQsIDB4QkYsIDB4NEEsIDB4NzQsIDB4MzksIDB4NTEsIDB4QkIsIDB4RTgsIDB4MEMs IDB4QjcsIDB4RjgsIDB4RDMsCisrICAweEQxLCAweERGLCAweEU3LCAweEJFLCAweDgwLCAweDA1 LCAweEMzLCAweEI1LCAweEM3LCAweDgzLCAweEQ1LCAweDRDLAorKyAgMHg3RiwgMHg0OSwgMHhG QiwgMHgzRiwgMHgyOSwgMHg5QiwgMHhFMSwgMHgxMiwgMHg1MSwgMHg2MCwgMHhEMCwgMHhBNywK KysgIDB4MEQsIDB4QTksIDB4MjgsIDB4NTYsIDB4NzMsIDB4RDksIDB4MDcsIDB4RTMsIDB4NUUs IDB4M0YsIDB4OUIsIDB4RjUsCisrICAweEI2LCAweEYzLCAweEYyLCAweDVFLCAweDc0LCAweEM5 LCAweDgzLCAweDgxLCAweDQ3LCAweEYwLCAweEM1LCAweDQ1LAorKyAgMHgwQSwgMHhFOSwgMHg4 RSwgMHgzOCwgMHhENywgMHgxOCwgMHhDNiwgMHgyQSwgMHgwRiwgMHhGOCwgMHhCNywgMHgzMSwK KysgIDB4RDYsIDB4NTUsIDB4RTQsIDB4NjYsIDB4NzgsIDB4ODEsIDB4RDQsIDB4RTYsIDB4REIs IDB4OUYsIDB4QkEsIDB4RTgsCisrICAweDIzLCAweEI1LCAweDdGLCAweERDLCAweDA4LCAweEVB LCAweEQ1LCAweDI2LCAweDFFLCAweDIwLCAweDI1LCAweDg0LAorKyAgMHgyNiwgMHhDNiwgMHg3 OSwgMHhDOSwgMHg5QiwgMHgzRCwgMHg3RSwgMHhBOQorK307CisrCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjI0W10gPSB7CisrICAweDM5LCAweDRBLCAweDZB LCAweDIwLCAweEJDLCAweEU5LCAweDMzLCAweEVELCAweEVGLCAweEM1LCAweDU4LCAweEE3LAor KyAgMHhGRSwgMHg4MSwgMHhDNCwgMHgzNiwgMHg1MCwgMHg5QSwgMHgyQywgMHg4MiwgMHg5OCwg MHgwOCwgMHg5NSwgMHhGQSwKKysgIDB4QjEsIDB4OUUsIDB4RDIsIDB4NTUsIDB4NjEsIDB4ODcs IDB4MjEsIDB4NTksIDB4ODcsIDB4N0IsIDB4MUYsIDB4NTcsCisrICAweDMwLCAweDlELCAweDBE LCAweDRBLCAweDA2LCAweEVCLCAweDUyLCAweDM3LCAweDU1LCAweDU0LCAweDFDLCAweDg5LAor KyAgMHg4MywgMHg3NSwgMHg1OSwgMHg2NSwgMHg2NCwgMHg5MCwgMHgyRSwgMHgxNiwgMHhDQywg MHg4NiwgMHgwNSwgMHhFRSwKKysgIDB4QjEsIDB4RTYsIDB4N0IsIDB4QkEsIDB4MTYsIDB4NzUs IDB4MEQsIDB4MEMsIDB4NjQsIDB4MEIsIDB4QUIsIDB4MjIsCisrICAweDE1LCAweDc4LCAweDZC LCAweDZGLCAweEE0LCAweEZCLCAweDc3LCAweDQwLCAweDY0LCAweDYyLCAweEQxLCAweEI1LAor KyAgMHgzNywgMHgxRSwgMHhFMCwgMHgzRCwgMHhBOCwgMHhGOSwgMHhEMiwgMHhCRCwgMHhBQSwg MHgzOCwgMHgyNCwgMHg0OSwKKysgIDB4NTgsIDB4RDIsIDB4NzQsIDB4ODUsIDB4RjQsIDB4QjUs IDB4OTMsIDB4OEUsIDB4RjUsIDB4MDMsIDB4RUEsIDB4MkQsCisrICAweEM4LCAweDUyLCAweEZB LCAweENGLCAweDdFLCAweDM1LCAweEIwLCAweDZBLCAweEFGLCAweDk1LCAweEMwLCAweDAwLAor KyAgMHg1NCwgMHg3NiwgMHgzRCwgMHgwQywgMHg5QywgMHhCMiwgMHhFRSwgMHhDMAorK307Cisr Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjU2W10gPSB7Cisr ICAweDZELCAweDNELCAweEJFLCAweDhGLCAweDYwLCAweDZELCAweDI1LCAweDE0LCAweEYwLCAw eDMxLCAweEUzLCAweDg5LAorKyAgMHgwMCwgMHg5NywgMHhGQSwgMHg5OSwgMHg3MSwgMHgyOCwg MHhFNSwgMHgxMCwgMHgyNSwgMHg5QSwgMHhGMywgMHg4RiwKKysgIDB4N0IsIDB4QzUsIDB4QTgs IDB4NEEsIDB4NzQsIDB4NTEsIDB4MzYsIDB4RTIsIDB4OEQsIDB4N0QsIDB4NzMsIDB4MjgsCisr ICAweEMxLCAweDc3LCAweEM2LCAweDI3LCAweDk3LCAweDAwLCAweDhCLCAweDAwLCAweEEzLCAw eDk2LCAweDczLCAweDRFLAorKyAgMHg3RCwgMHgyRSwgMHgyQywgMHgzNCwgMHg2OCwgMHg4Qywg MHg4RSwgMHhERiwgMHg5RCwgMHg0OSwgMHg0NywgMHgwNSwKKysgIDB4QUIsIDB4RjUsIDB4MDEs IDB4RDYsIDB4ODEsIDB4NDcsIDB4NzAsIDB4RjUsIDB4MUQsIDB4NkQsIDB4MjYsIDB4QkEsCisr ICAweDJGLCAweDdBLCAweDU0LCAweDUzLCAweDRFLCAweEVELCAweDcxLCAweEQ5LCAweDVBLCAw eEYzLCAweERBLCAweEI2LAorKyAgMHgwQiwgMHg0NywgMHgzNCwgMHhBRiwgMHg5MCwgMHhEQywg MHhDOCwgMHhEOSwgMHg2RiwgMHg1NiwgMHhDRCwgMHg5RiwKKysgIDB4MjEsIDB4QjcsIDB4N0Us IDB4QUQsIDB4N0MsIDB4MkYsIDB4NzUsIDB4NTAsIDB4NDcsIDB4MTIsIDB4RTQsIDB4NkQsCisr ICAweDVGLCAweEI3LCAweDAxLCAweERGLCAweEMzLCAweDExLCAweDZDLCAweEE5LCAweDlFLCAw eDQ5LCAweEI5LCAweEY2LAorKyAgMHg3MiwgMHhGNCwgMHhGNiwgMHhFRiwgMHg4OCwgMHgxRSwg MHgyRCwgMHgxQworK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9Q U1NfU0hBMzg0W10gPSB7CisrICAweDQwLCAweEZCLCAweEExLCAweDIxLCAweEY0LCAweEIyLCAw eDQwLCAweDlBLCAweEI0LCAweDMxLCAweEE4LCAweEYyLAorKyAgMHhFQywgMHgxQywgMHhDNCwg MHhDOCwgMHg3QywgMHgyMiwgMHg2NSwgMHg5QywgMHg1NywgMHg0NSwgMHhDRCwgMHg1RSwKKysg IDB4ODYsIDB4MDAsIDB4RjcsIDB4MjUsIDB4NzgsIDB4REUsIDB4REMsIDB4N0EsIDB4NzEsIDB4 NDQsIDB4OUEsIDB4Q0QsCisrICAweEFBLCAweDI1LCAweEY0LCAweEIyLCAweEZDLCAweEYwLCAw eDc1LCAweEQ5LCAweDJGLCAweDc4LCAweDIzLCAweDdGLAorKyAgMHg2RiwgMHgwMiwgMHhFRiwg MHhDMSwgMHhBRiwgMHhBNiwgMHgyOCwgMHgxNiwgMHgzMSwgMHhEQywgMHg0MiwgMHg2QywKKysg IDB4QjIsIDB4NDQsIDB4RTUsIDB4NEQsIDB4NjYsIDB4QTIsIDB4RTYsIDB4NzEsIDB4RjMsIDB4 QUMsIDB4NEYsIDB4RkIsCisrICAweDkxLCAweENBLCAweEY1LCAweDcwLCAweEVGLCAweDZCLCAw eDlELCAweEE0LCAweEVGLCAweEQ5LCAweDNELCAweDJGLAorKyAgMHgzQSwgMHhCRSwgMHg4OSwg MHgzOCwgMHg1OSwgMHgwMSwgMHhCQSwgMHhEQSwgMHgzMiwgMHhBRCwgMHg0MiwgMHg4OSwKKysg IDB4OTgsIDB4OEIsIDB4MzksIDB4NDQsIDB4RjAsIDB4RkMsIDB4MzgsIDB4QUMsIDB4ODcsIDB4 MUYsIDB4Q0EsIDB4NkYsCisrICAweDQ4LCAweEY2LCAweEFFLCAweEQ3LCAweDQ1LCAweEVFLCAw eEFFLCAweDg4LCAweDBFLCAweDYwLCAweEY0LCAweDU1LAorKyAgMHg0OCwgMHg0NCwgMHhFRSwg MHgxRiwgMHg5MCwgMHgxOCwgMHg0QiwgMHhGMQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBNTEyW10gPSB7CisrICAweDA3LCAweDFFLCAweEQ4LCAw eEQ1LCAweDA1LCAweEU4LCAweEU2LCAweEU2LCAweDU3LCAweEFFLCAweDYzLCAweDhDLAorKyAg MHhDNiwgMHg4MywgMHhCNywgMHhBMCwgMHg1OSwgMHhCQiwgMHhGMiwgMHhDNiwgMHg4RiwgMHgx MiwgMHg1MywgMHg5QSwKKysgIDB4OUIsIDB4NTQsIDB4OUUsIDB4QjMsIDB4QzEsIDB4MUQsIDB4 MjMsIDB4NEQsIDB4NTEsIDB4RUQsIDB4OUUsIDB4REQsCisrICAweDRCLCAweEYzLCAweDQ2LCAw eDlCLCAweDZCLCAweEY2LCAweDdDLCAweDI0LCAweDYwLCAweDc5LCAweDIzLCAweDM5LAorKyAg MHgwMSwgMHgxQywgMHg1MSwgMHhDQiwgMHhEOCwgMHhFOSwgMHg5QSwgMHgwMSwgMHg2NywgMHg1 RiwgMHhGRSwgMHhENywKKysgIDB4N0MsIDB4RTMsIDB4N0YsIDB4RUQsIDB4REIsIDB4ODcsIDB4 QkIsIDB4RjAsIDB4M0QsIDB4NzgsIDB4NTUsIDB4NjEsCisrICAweDU3LCAweEUzLCAweDBGLCAw eEUzLCAweEQyLCAweDlELCAweDBDLCAweDJBLCAweDIwLCAweEIwLCAweDg1LCAweDEzLAorKyAg MHhDNSwgMHg0NywgMHgzNCwgMHgwRCwgMHgzMiwgMHgxNSwgMHhDOCwgMHhBRSwgMHg5QSwgMHg2 QSwgMHgzOSwgMHg2MywKKysgIDB4MkQsIDB4NjAsIDB4RjUsIDB4NEMsIDB4REYsIDB4OEEsIDB4 NDgsIDB4NEIsIDB4QkYsIDB4RjQsIDB4QTgsIDB4RkUsCisrICAweDc2LCAweEYyLCAweDMyLCAw eDFCLCAweDlDLCAweDdDLCAweENBLCAweEZFLCAweDdGLCAweDgwLCAweEMyLCAweDg4LAorKyAg MHg1QywgMHg5NywgMHg3MCwgMHhCNCwgMHgyNiwgMHhDOSwgMHgxNCwgMHg4QgorK307CisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEExW10gPSB7CisrICAweDcxLCAw eEVFLCAweDFBLCAweEMwLCAweEZFLCAweDAxLCAweDkzLCAweDU0LCAweDc5LCAweDVDLCAweEYy LCAweDRDLAorKyAgMHg0QSwgMHhGRCwgMHgxQSwgMHgwNSwgMHg4RiwgMHg2NCwgMHhCMSwgMHg2 RCwgMHg2MSwgMHgzMywgMHg4RCwgMHg5QiwKKysgIDB4RTcsIDB4RkQsIDB4NjAsIDB4QTMsIDB4 ODMsIDB4QjUsIDB4QTMsIDB4NTEsIDB4NTUsIDB4NzcsIDB4OTAsIDB4Q0YsCisrICAweERDLCAw eDIyLCAweDM3LCAweDhFLCAweEQwLCAweEUxLCAweEFFLCAweDA5LCAweEUzLCAweDNELCAweDFF LCAweEY4LAorKyAgMHg4MCwgMHhEMSwgMHg4QiwgMHhDMiwgMHhFQywgMHgwQSwgMHhENywgMHg2 QiwgMHg4OCwgMHg4QiwgMHg4QiwgMHhBMSwKKysgIDB4MjAsIDB4MjIsIDB4QkUsIDB4NTksIDB4 NUIsIDB4RTAsIDB4MjMsIDB4MjQsIDB4QTEsIDB4NDksIDB4MzAsIDB4QkEsCisrICAweEE5LCAw eDlFLCAweEU4LCAweEIxLCAweDhBLCAweDYyLCAweDE2LCAweEJGLCAweDRFLCAweENBLCAweDJF LCAweDRFLAorKyAgMHhCQywgMHgyOSwgMHhBOCwgMHg2NywgMHgxMywgMHhCNywgMHg5RiwgMHgx RCwgMHgwNCwgMHg0NCwgMHhFNSwgMHg1RiwKKysgIDB4MzUsIDB4MDcsIDB4MTEsIDB4QkMsIDB4 RUQsIDB4MTksIDB4MzcsIDB4MjEsIDB4Q0YsIDB4MjMsIDB4NDgsIDB4MUYsCisrICAweDcyLCAw eDA1LCAweERFLCAweEU2LCAweEU4LCAweDdGLCAweDMzLCAweDhBLCAweDc2LCAweDRCLCAweDJG LCAweDk1LAorKyAgMHhERiwgMHhGMSwgMHg1RiwgMHg4NCwgMHg4MCwgMHhEOSwgMHg0NiwgMHhC NAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyMjRbXSA9 IHsKKysgIDB4NjIsIDB4QUEsIDB4NzksIDB4QTksIDB4MTgsIDB4MEUsIDB4NUYsIDB4OEMsIDB4 QkIsIDB4QjcsIDB4MTUsIDB4RjksCisrICAweDI1LCAweEJCLCAweEZBLCAweEQ0LCAweDNBLCAw eDM0LCAweEVELCAweDlFLCAweEEwLCAweEE5LCAweDE4LCAweDhELAorKyAgMHg1QiwgMHg1NSwg MHg5QSwgMHg3RSwgMHgxRSwgMHgwOCwgMHgwOCwgMHg2MCwgMHhDNSwgMHgxQSwgMHhDNSwgMHg4 OSwKKysgIDB4MDgsIDB4RTIsIDB4MUIsIDB4QkQsIDB4NjIsIDB4NTAsIDB4MTcsIDB4NzYsIDB4 MzAsIDB4MkMsIDB4OUUsIDB4Q0QsCisrICAweEE0LCAweDAyLCAweEFELCAweEIxLCAweDZELCAw eDQ0LCAweDZELCAweEQ1LCAweEM2LCAweDQ1LCAweDQxLCAweEU1LAorKyAgMHhFRSwgMHgxRiwg MHg4RCwgMHg3RSwgMHgwOCwgMHgxNiwgMHhBNiwgMHhFMSwgMHg1RSwgMHgwQiwgMHhBOSwgMHhD QywKKysgIDB4REIsIDB4NTksIDB4NTUsIDB4ODcsIDB4MDksIDB4MjUsIDB4NzAsIDB4ODYsIDB4 ODQsIDB4MDIsIDB4QzYsIDB4M0IsCisrICAweDBCLCAweDQ0LCAweDRDLCAweDQ2LCAweDk1LCAw eEY0LCAweEY4LCAweDVBLCAweDkxLCAweDI4LCAweDNFLCAweEIyLAorKyAgMHg1OCwgMHgyRSwg MHgwNiwgMHg0NSwgMHg0OSwgMHhFMCwgMHg5MiwgMHhFMiwgMHhDMCwgMHg2NiwgMHhFNiwgMHgz NSwKKysgIDB4RDksIDB4NzksIDB4N0YsIDB4MTcsIDB4NUUsIDB4MDIsIDB4NzMsIDB4MDQsIDB4 NzcsIDB4ODIsIDB4RTYsIDB4REMsCisrICAweDQwLCAweDIxLCAweDg5LCAweDhCLCAweDM3LCAw eDNFLCAweDFFLCAweDhECisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRf UlNBX1NIQTI1NltdID0geworKyAgMHgwRCwgMHg1NSwgMHhFMiwgMHhBQSwgMHg4MSwgMHhEQiwg MHg4RSwgMHg4MiwgMHgwNSwgMHgxNywgMHhBNSwgMHgyMywKKysgIDB4RTcsIDB4M0IsIDB4MUQs IDB4QUYsIDB4RkIsIDB4OEMsIDB4RDAsIDB4ODEsIDB4MjAsIDB4N0IsIDB4QUEsIDB4MjMsCisr ICAweDkyLCAweDg3LCAweDhDLCAweEQxLCAweDUzLCAweDg1LCAweDE2LCAweERDLCAweEJFLCAw eEFELCAweDZGLCAweDM1LAorKyAgMHg5OCwgMHgyRCwgMHg2OSwgMHg4NCwgMHhCRiwgMHhEOSwg MHg4QSwgMHgwMSwgMHgxNywgMHg1OCwgMHhCMiwgMHg2RSwKKysgIDB4MkMsIDB4NDQsIDB4OUIs IDB4OTAsIDB4RjEsIDB4RkIsIDB4NTEsIDB4RTgsIDB4NkEsIDB4OTAsIDB4MkQsIDB4MTgsCisr ICAweDBFLCAweEMwLCAweDkwLCAweDEwLCAweDI0LCAweEE5LCAweDFELCAweEIzLCAweDU4LCAw eDdBLCAweDkxLCAweDMwLAorKyAgMHhCRSwgMHgyMiwgMHhDNywgMHhEMywgMHhFQywgMHhDMywg MHgwOSwgMHg1RCwgMHhCRiwgMHhFMiwgMHg4MCwgMHgzQSwKKysgIDB4N0MsIDB4ODUsIDB4QjQs IDB4QkMsIDB4RDEsIDB4RTksIDB4RjAsIDB4NUMsIDB4REUsIDB4ODEsIDB4QTYsIDB4MzgsCisr ICAweEI4LCAweDQyLCAweEJCLCAweDg2LCAweEM1LCAweDlELCAweENFLCAweDdDLCAweDJDLCAw eEVFLCAweEQxLCAweERBLAorKyAgMHgyNywgMHg0OCwgMHgyQiwgMHhGNSwgMHhBQiwgMHhCOSwg MHhGNywgMHg4MCwgMHhEMSwgMHg5MCwgMHgyNywgMHg5MCwKKysgIDB4QkQsIDB4NDQsIDB4OTcs IDB4NjAsIDB4Q0QsIDB4NTcsIDB4QzAsIDB4N0EKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGthdF9SU0FfU0hBMzg0W10gPSB7CisrICAweDFELCAweEUzLCAweDZBLCAweERE LCAweDI3LCAweDRDLCAweEMwLCAweEE1LCAweDI3LCAweEVGLCAweEU2LCAweDFGLAorKyAgMHhE MiwgMHg5MSwgMHg2OCwgMHg1OSwgMHgwNCwgMHhBRSwgMHhCRCwgMHg5OSwgMHg2MywgMHg1Niwg MHg0NywgMHhDNywKKysgIDB4NkYsIDB4MjIsIDB4MTYsIDB4NDgsIDB4RDAsIDB4RjksIDB4MTgs IDB4QTksIDB4Q0EsIDB4RkEsIDB4NUQsIDB4NUMsCisrICAweEE3LCAweDY1LCAweDUyLCAweDhB LCAweEM4LCAweDQ0LCAweDdFLCAweDg2LCAweDVELCAweEE5LCAweEE2LCAweDU1LAorKyAgMHg2 NSwgMHgzRSwgMHhEOSwgMHgyRCwgMHgwMiwgMHgzOCwgMHhBOCwgMHg3OSwgMHgyOCwgMHg3Riwg MHhCNiwgMHhDRiwKKysgIDB4ODIsIDB4REQsIDB4N0UsIDB4NTUsIDB4RTEsIDB4QjEsIDB4QkMs IDB4RTIsIDB4MTksIDB4MkIsIDB4MzAsIDB4QzIsCisrICAweDFCLCAweDJCLCAweEIwLCAweDgy LCAweDQ2LCAweEFDLCAweDRCLCAweEQxLCAweEUyLCAweDdELCAweEVCLCAweDhDLAorKyAgMHhG RiwgMHg5NSwgMHhFOSwgMHg2QSwgMHgxQywgMHgzRCwgMHg0RCwgMHhCRiwgMHg4RiwgMHg4Qiwg MHg5QywgMHhDRCwKKysgIDB4RUEsIDB4ODUsIDB4RUUsIDB4MDAsIDB4REMsIDB4MUMsIDB4QTcs IDB4RUIsIDB4RDAsIDB4OEYsIDB4OTksIDB4RjEsCisrICAweDE2LCAweDI4LCAweDI0LCAweDY0 LCAweDA0LCAweDM5LCAweDJELCAweDU4LCAweDFFLCAweDM3LCAweERDLCAweDA0LAorKyAgMHhC RCwgMHgzMSwgMHhBMiwgMHgyRiwgMHhCMywgMHgzNSwgMHg1NiwgMHhCRgorK307CisrCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEE1MTJbXSA9IHsKKysgIDB4NjksIDB4 NTIsIDB4MUIsIDB4NTEsIDB4NUUsIDB4MDYsIDB4Q0EsIDB4OUIsIDB4MTYsIDB4NTEsIDB4NUQs IDB4Q0YsCisrICAweDQ5LCAweDI1LCAweDRBLCAweEExLCAweDZBLCAweDc3LCAweDRDLCAweDM2 LCAweDQwLCAweEY4LCAweEIyLCAweDlBLAorKyAgMHgxNSwgMHhFQSwgMHg1QywgMHhFNSwgMHhF NiwgMHg4MiwgMHhFMCwgMHg4NiwgMHg4MiwgMHg2QiwgMHgzMiwgMHhGMSwKKysgIDB4MDQsIDB4 QzEsIDB4NUEsIDB4MUEsIDB4RUQsIDB4MUUsIDB4OUEsIDB4QjYsIDB4NEMsIDB4NTQsIDB4OUYs IDB4RDgsCisrICAweDhELCAweENDLCAweEFDLCAweDhBLCAweEJCLCAweDlDLCAweDgyLCAweDNG LCAweEE2LCAweDUzLCAweDYyLCAweEI1LAorKyAgMHg4MCwgMHhFMiwgMHhCQywgMHhERCwgMHg2 NywgMHgyQiwgMHhEOSwgMHgzRiwgMHhFNCwgMHg3NSwgMHg5MiwgMHg2QiwKKysgIDB4QUYsIDB4 NjIsIDB4N0MsIDB4NTIsIDB4RjAsIDB4RUUsIDB4MzMsIDB4REYsIDB4MUIsIDB4MUQsIDB4NDcs IDB4RTYsCisrICAweDU5LCAweDU2LCAweEE1LCAweEI5LCAweDVDLCAweEU2LCAweDc3LCAweDc4 LCAweDE2LCAweDYzLCAweDg0LCAweDA1LAorKyAgMHg2RiwgMHgwRSwgMHgyQiwgMHgzMSwgMHg5 RCwgMHhGNywgMHg3RiwgMHhCMiwgMHg2NCwgMHg3MSwgMHhFMCwgMHgyRCwKKysgIDB4M0UsIDB4 NjIsIDB4Q0UsIDB4QjUsIDB4M0YsIDB4ODgsIDB4REYsIDB4MkQsIDB4QUIsIDB4OTgsIDB4NjUs IDB4OTEsCisrICAweERGLCAweDcwLCAweDE0LCAweEE1LCAweDNGLCAweDM2LCAweEFCLCAweDg0 CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMVtd ID0geworKyAgMHg4NiwgMHhCNCwgMHgxOCwgMHhCQSwgMHhEMSwgMHg4MCwgMHhCNiwgMHg3Qywg MHg0MiwgMHg0NSwgMHg0RCwgMHhERiwKKysgIDB4RTksIDB4MkQsIDB4RTEsIDB4ODMsIDB4NUYs IDB4QjUsIDB4MkYsIDB4QzksIDB4Q0QsIDB4QzQsIDB4QjIsIDB4NzUsCisrICAweDgwLCAweEE0 LCAweEYxLCAweDRBLCAweEU3LCAweDgzLCAweDEyLCAweDFFLCAweDFFLCAweDE0LCAweEI4LCAw eEFDLAorKyAgMHgzNSwgMHhFMiwgMHhBQSwgMHgwQiwgMHg1QywgMHhGOCwgMHgzOCwgMHg0RCwg MHgwNCwgMHhFRSwgMHhBOSwgMHg5NywKKysgIDB4NzAsIDB4RkIsIDB4NUUsIDB4RTcsIDB4Qjcs IDB4RTMsIDB4NjIsIDB4MjMsIDB4NEIsIDB4MzgsIDB4QkUsIDB4RDYsCisrICAweDUzLCAweDE1 LCAweEY3LCAweERGLCAweDg3LCAweEI0LCAweDBFLCAweENDLCAweEIxLCAweDFBLCAweDExLCAw eDE5LAorKyAgMHhFRSwgMHg1MSwgMHhDQywgMHg5MiwgMHhERCwgMHhCQywgMHg2MywgMHgyOSwg MHg2MywgMHgwQywgMHg1OSwgMHhENywKKysgIDB4NkYsIDB4NEMsIDB4M0MsIDB4MzcsIDB4NUIs IDB4MzcsIDB4MDMsIDB4NjEsIDB4N0QsIDB4MjQsIDB4MUMsIDB4OTksCisrICAweDQ4LCAweEFG LCAweDgyLCAweEZFLCAweDMyLCAweDQxLCAweDlCLCAweEIyLCAweERCLCAweEVBLCAweEVELCAw eDc2LAorKyAgMHg4RSwgMHg2RSwgMHhDQSwgMHg3RSwgMHg0RSwgMHgxNCwgMHhCQSwgMHgzMCwg MHg4NCwgMHgxQywgMHhCMywgMHg2NywKKysgIDB4QTMsIDB4MjksIDB4ODAsIDB4NzAsIDB4NTQs IDB4NjgsIDB4N0QsIDB4NDkKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGth dF9SU0FfWDkzMV9TSEEyNTZbXSA9IHsKKysgIDB4N0UsIDB4QTIsIDB4NzcsIDB4RkUsIDB4Qjgs IDB4NTQsIDB4OEEsIDB4QzcsIDB4N0YsIDB4NjQsIDB4NTQsIDB4ODksCisrICAweEU1LCAweDUy LCAweDE1LCAweDhFLCAweDUyLCAweDk2LCAweDRFLCAweEE2LCAweDU4LCAweDkyLCAweDFDLCAw eERELAorKyAgMHhFQSwgMHhBMiwgMHgyRCwgMHg1QywgMHhEMSwgMHg2MiwgMHgwMCwgMHg0OSwg MHgwNSwgMHg5NSwgMHg3MywgMHhDRiwKKysgIDB4MTYsIDB4NzYsIDB4NjgsIDB4RjYsIDB4QzYs IDB4NUUsIDB4ODAsIDB4QjgsIDB4QjgsIDB4N0IsIDB4QzgsIDB4OUIsCisrICAweEM2LCAweDUz LCAweDg4LCAweDI2LCAweDIwLCAweDg4LCAweDczLCAweEI2LCAweDEzLCAweEI4LCAweEYwLCAw eDRCLAorKyAgMHgwMCwgMHg4NSwgMHhGMywgMHhERCwgMHgwNywgMHg1MCwgMHhFQiwgMHgyMCwg MHhDNCwgMHgzOCwgMHgwRSwgMHg5OCwKKysgIDB4QUQsIDB4NEUsIDB4NDksIDB4MkMsIDB4RDcs IDB4NjUsIDB4QTUsIDB4MTksIDB4MEUsIDB4NTksIDB4MDEsIDB4RUMsCisrICAweDdFLCAweDc1 LCAweDg5LCAweDY5LCAweDJFLCAweDYzLCAweDc2LCAweDg1LCAweDQ2LCAweDhELCAweEEwLCAw eDhDLAorKyAgMHgzMywgMHgxRCwgMHg4MiwgMHg4QywgMHgwMywgMHhFQSwgMHg2OSwgMHg4OCwg MHgzNSwgMHhBMSwgMHg0MiwgMHhCRCwKKysgIDB4MjEsIDB4RUQsIDB4OEQsIDB4QkMsIDB4QkMs IDB4REIsIDB4MzAsIDB4RkYsIDB4ODYsIDB4RjAsIDB4NUIsIDB4REMsCisrICAweEUzLCAweEUy LCAweEU4LCAweDBBLCAweDBBLCAweDI5LCAweDk0LCAweDgwCisrfTsKKysKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMzg0W10gPSB7CisrICAweDVDLCAweDdE LCAweDk2LCAweDM1LCAweEVDLCAweDdFLCAweDExLCAweDM4LCAweEJCLCAweDdCLCAweEVDLCAw eDdCLAorKyAgMHhGMiwgMHg4MiwgMHg4RSwgMHg5OSwgMHhCRCwgMHhFRiwgMHhEOCwgMHhBRSwg MHhENywgMHgzOSwgMHgzNywgMHhDQiwKKysgIDB4RTYsIDB4NEYsIDB4NUUsIDB4MEEsIDB4MTMs IDB4RTQsIDB4MkUsIDB4NDAsIDB4QjksIDB4QkUsIDB4MkUsIDB4RTMsCisrICAweEVGLCAweDc4 LCAweDgzLCAweDE4LCAweDQ0LCAweDM1LCAweDlDLCAweDhFLCAweEQ3LCAweDRBLCAweDYzLCAw eEY2LAorKyAgMHg1NywgMHhDMiwgMHhCMCwgMHgwOCwgMHg1MSwgMHg3MywgMHhDRiwgMHhDQSwg MHg5OSwgMHg2NiwgMHhFRSwgMHgzMSwKKysgIDB4RDgsIDB4NjksIDB4RTksIDB4QUIsIDB4MTMs IDB4MjcsIDB4N0IsIDB4NDEsIDB4MUUsIDB4NkQsIDB4OEQsIDB4RjEsCisrICAweDNFLCAweDlD LCAweDM1LCAweDk1LCAweDU4LCAweERELCAweDJCLCAweEQ1LCAweEEwLCAweDYwLCAweDQxLCAw eDc5LAorKyAgMHgyNCwgMHgyMiwgMHhFNCwgMHhCNywgMHhCRiwgMHg0NywgMHg1MywgMHhGNiwg MHgzNCwgMHhENSwgMHg3QywgMHhGRiwKKysgIDB4MEUsIDB4MDksIDB4RUUsIDB4MkUsIDB4RTIs IDB4MzcsIDB4QjksIDB4REUsIDB4QzUsIDB4MTIsIDB4NDQsIDB4MzUsCisrICAweEVGLCAweDAx LCAweEU2LCAweDVFLCAweDM5LCAweDMxLCAweDJELCAweDcxLCAweEE1LCAweERDLCAweEM2LCAw eDZELAorKyAgMHhFMiwgMHhDRCwgMHg4NSwgMHhEQiwgMHg3MywgMHg4MiwgMHg2NSwgMHgyOAor K307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTUxMltd ID0geworKyAgMHhBNiwgMHg2NSwgMHhBMiwgMHg3NywgMHg0RiwgMHhCMywgMHg4NiwgMHhDQiwg MHg2NCwgMHgzQSwgMHhDMSwgMHg2MywKKysgIDB4RkMsIDB4QTEsIDB4QUEsIDB4Q0IsIDB4OUIs IDB4NzksIDB4REQsIDB4NEIsIDB4RTEsIDB4RDksIDB4REEsIDB4QUMsCisrICAweEU3LCAweDQ3 LCAweDA5LCAweEIyLCAweDExLCAweDRCLCAweDhBLCAweEFBLCAweDA1LCAweDlFLCAweDc3LCAw eEQ3LAorKyAgMHgzQSwgMHhCRCwgMHg1RSwgMHg1MywgMHgwOSwgMHg0QSwgMHhFNiwgMHgwRiwg MHg1RSwgMHhGOSwgMHgxNCwgMHgyOCwKKysgIDB4QTAsIDB4OTksIDB4NzQsIDB4NjQsIDB4NzAs IDB4NEUsIDB4RjIsIDB4RTMsIDB4RkEsIDB4QzcsIDB4RjgsIDB4QzUsCisrICAweDZFLCAweDJC LCAweDc5LCAweDk2LCAweDBELCAweDBDLCAweEM4LCAweDEwLCAweDM0LCAweDUzLCAweEQyLCAw eEFGLAorKyAgMHgxNywgMHgwRSwgMHhFMCwgMHhCRiwgMHg3OSwgMHhGNiwgMHgwNCwgMHg3Miwg MHgxMCwgMHhFMCwgMHhGNiwgMHhEMCwKKysgIDB4Q0UsIDB4OEEsIDB4NkYsIDB4QTEsIDB4OTUs IDB4ODksIDB4QkYsIDB4NTgsIDB4OEYsIDB4NDYsIDB4NUYsIDB4MDksCisrICAweDlGLCAweDA5 LCAweENBLCAweDg0LCAweDE1LCAweDg1LCAweEUwLCAweEVELCAweDA0LCAweDJELCAweEZCLCAw eDdDLAorKyAgMHgzNiwgMHgzNSwgMHgyMSwgMHgzMSwgMHhDMywgMHhGRCwgMHg5MiwgMHg0Miwg MHgxMSwgMHgzMCwgMHg3MSwgMHgxQiwKKysgIDB4NjAsIDB4ODMsIDB4MTgsIDB4ODgsIDB4QTMs IDB4RjUsIDB4NTksIDB4QzMKKyt9OworKworKworK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSgpCisr CXsKKysJaW50IHJldCA9IDA7CisrCVJTQSAqa2V5OworKwlFVlBfUEtFWSAqcGsgPSBOVUxMOwor KworKwlpZiAoKGtleT1SU0FfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJc2V0cnNh a2V5KGtleSk7CisrCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVy cjsKKysKKysJRVZQX1BLRVlfYXNzaWduX1JTQShwaywga2V5KTsKKysKKysJaWYgKCFmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJ CWthdF9SU0FfU0hBMSwgc2l6ZW9mKGthdF9SU0FfU0hBMSksCisrCQkJCUVWUF9zaGExKCksIEVW UF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMSBQS0NTIzEiKSkKKysJCWdv dG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEEyMjQsIHNpemVvZihrYXRfUlNBX1NI QTIyNCksCisrCQkJCUVWUF9zaGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJ CQkJIlJTQSBTSEEyMjQgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWth dF9SU0FfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9TSEEyNTYpLAorKwkJCQlFVlBfc2hhMjU2KCks IEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMjU2IFBLQ1MjMSIpKQor KwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NIQTM4NCwgc2l6ZW9mKGthdF9S U0FfU0hBMzg0KSwKKysJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1Mx LAorKwkJCQkiUlNBIFNIQTM4NCBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNf cGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJ CQkJa2F0X1JTQV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1NIQTUxMiksCisrCQkJCUVWUF9zaGE1 MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEE1MTIgUEtDUyMx IikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGss IGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTEsIHNp emVvZihrYXRfUlNBX1BTU19TSEExKSwKKysJCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFH X1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMSBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwK KysJCQkJa2F0X1JTQV9QU1NfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjI0KSwKKysJ CQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEEy MjQgUFNTIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTI1 Niwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTI1NiksCisrCQkJCUVWUF9zaGEyNTYoKSwgRVZQX01E X0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMjU2IFBTUyIpKQorKwkJZ290byBlcnI7 CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0 X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEEzODQsIHNpemVvZihrYXRfUlNBX1BTU19T SEEzODQpLAorKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJ CQkiUlNBIFNIQTM4NCBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JT QV9QU1NfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBNTEyKSwKKysJCQkJRVZQX3NoYTUx MigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEE1MTIgUFNTIikpCisr CQlnb3RvIGVycjsKKysKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGth dF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NIQTEsIHNpemVv ZihrYXRfUlNBX1g5MzFfU0hBMSksCisrCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BB RF9YOTMxLAorKwkJCSJSU0EgU0hBMSBYOTMxIikpCisrCQlnb3RvIGVycjsKKysJLyogTkI6IFNI QTIyNCBub3Qgc3VwcG9ydGVkIGluIFg5LjMxICovCisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkz MV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMjU2KSwKKysJCQlFVlBfc2hhMjU2KCks IEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKKysJCQkiUlNBIFNIQTI1NiBYOTMxIikpCisrCQln b3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NIQTM4NCwgc2l6ZW9mKGthdF9S U0FfWDkzMV9TSEEzODQpLAorKwkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9Y OTMxLAorKwkJCSJSU0EgU0hBMzg0IFg5MzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNf cGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJ CQlrYXRfUlNBX1g5MzFfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTUxMiksCisrCQkJ RVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEE1MTIg WDkzMSIpKQorKwkJZ290byBlcnI7CisrCisrCisrCXJldCA9IDE7CisrCisrCWVycjoKKysJaWYg KHBrKQorKwkJRVZQX1BLRVlfZnJlZShwayk7CisrCWVsc2UgaWYgKGtleSkKKysJCVJTQV9mcmVl KGtleSk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQ UyAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcu Yy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMKKy0tLSBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMJMjAxMC0wNi0w NCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlw cy9maXBzX3JzYV94OTMxZy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitA QCAtMCwwICsxLDI4MSBAQAorKy8qIGNyeXB0by9yc2EvcnNhX2dlbi5jICovCisrLyogQ29weXJp Z2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxs IHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVt ZW50YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4K KysgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRo IE5ldHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1l cmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisr ICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRo ZSBSQzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NM IGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlz dHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhj ZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisr ICogCisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkg Q29weXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQu CisrICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNo b3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRz IG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0 ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlv biAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0 aW9uLgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0 b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5 cHRzb2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0 IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBh cmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUg YW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20g CisrICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBp bmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAq IAorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycg QU5ECisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF IExJQUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK KysgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2Vu Y2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZl cnNpb24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4g IGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRl ciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1 YmxpYyBMaWNlbmNlLl0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrI2luY2x1ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrZXh0ZXJu IGludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSk7CisrI2VuZGlmCisrCisrLyogWDkuMzEgUlNB IGtleSBkZXJpdmF0aW9uIGFuZCBnZW5lcmF0aW9uICovCisrCisraW50IFJTQV9YOTMxX2Rlcml2 ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVN ICpxMiwKKysJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJ R05VTSAqWHAsCisrCQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25z dCBCSUdOVU0gKlhxLAorKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQorKwl7Cisr CUJJR05VTSAqcjA9TlVMTCwqcjE9TlVMTCwqcjI9TlVMTCwqcjM9TlVMTDsKKysJQk5fQ1RYICpj dHg9TlVMTCwqY3R4Mj1OVUxMOworKworKwlpZiAoIXJzYSkgCisrCQlnb3RvIGVycjsKKysKKysJ Y3R4ID0gQk5fQ1RYX25ldygpOworKwlpZiAoIWN0eCkgCisrCQlnb3RvIGVycjsKKysJQk5fQ1RY X3N0YXJ0KGN0eCk7CisrCisrCXIwID0gQk5fQ1RYX2dldChjdHgpOworKwlyMSA9IEJOX0NUWF9n ZXQoY3R4KTsKKysJcjIgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCXIzID0gQk5fQ1RYX2dldChjdHgp OworKworKwlpZiAocjMgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIXJzYS0+ZSkKKysJ CXsKKysJCXJzYS0+ZSA9IEJOX2R1cChlKTsKKysJCWlmICghcnNhLT5lKQorKwkJCWdvdG8gZXJy OworKwkJfQorKwllbHNlCisrCQllID0gcnNhLT5lOworKworKwkvKiBJZiBub3QgYWxsIHBhcmFt ZXRlcnMgcHJlc2VudCBvbmx5IGNhbGN1bGF0ZSB3aGF0IHdlIGNhbi4KKysJICogVGhpcyBhbGxv d3MgdGVzdCBwcm9ncmFtcyB0byBvdXRwdXQgc2VsZWN0aXZlIHBhcmFtZXRlcnMuCisrCSAqLwor KworKwlpZiAoWHAgJiYgIXJzYS0+cCkKKysJCXsKKysJCXJzYS0+cCA9IEJOX25ldygpOworKwkJ aWYgKCFyc2EtPnApCisrCQkJZ290byBlcnI7CisrCisrCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3By aW1lX2V4KHJzYS0+cCwgcDEsIHAyLAorKwkJCQkJWHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNiKSkK KysJCQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYgKFhxICYmICFyc2EtPnEpCisrCQl7CisrCQly c2EtPnEgPSBCTl9uZXcoKTsKKysJCWlmICghcnNhLT5xKQorKwkJCWdvdG8gZXJyOworKwkJaWYg KCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnEsIHExLCBxMiwKKysJCQkJCVhxLCBYcTEs IFhxMiwgZSwgY3R4LCBjYikpCisrCQkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICghcnNhLT5w IHx8ICFyc2EtPnEpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShj dHgpOworKwkJcmV0dXJuIDI7CisrCQl9CisrCisrCS8qIFNpbmNlIGJvdGggcHJpbWVzIGFyZSBz ZXQgd2UgY2FuIG5vdyBjYWxjdWxhdGUgYWxsIHJlbWFpbmluZyAKKysJICogY29tcG9uZW50cy4K KysJICovCisrCisrCS8qIGNhbGN1bGF0ZSBuICovCisrCXJzYS0+bj1CTl9uZXcoKTsKKysJaWYg KHJzYS0+biA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghQk5fbXVsKHJzYS0+bixyc2Et PnAscnNhLT5xLGN0eCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGQgKi8KKysJ aWYgKCFCTl9zdWIocjEscnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8gZXJyOwkvKiBw LTEgKi8KKysJaWYgKCFCTl9zdWIocjIscnNhLT5xLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8g ZXJyOwkvKiBxLTEgKi8KKysJaWYgKCFCTl9tdWwocjAscjEscjIsY3R4KSkKKysJCWdvdG8gZXJy OwkvKiAocC0xKShxLTEpICovCisrCisrCWlmICghQk5fZ2NkKHIzLCByMSwgcjIsIGN0eCkpCisr CQlnb3RvIGVycjsKKysKKysJaWYgKCFCTl9kaXYocjAsIE5VTEwsIHIwLCByMywgY3R4KSkKKysJ CWdvdG8gZXJyOwkvKiBMQ00oKHAtMSkocS0xKSkgKi8KKysKKysJY3R4MiA9IEJOX0NUWF9uZXco KTsKKysJaWYgKCFjdHgyKQorKwkJZ290byBlcnI7CisrCisrCXJzYS0+ZD1CTl9tb2RfaW52ZXJz ZShOVUxMLHJzYS0+ZSxyMCxjdHgyKTsJLyogZCAqLworKwlpZiAocnNhLT5kID09IE5VTEwpCisr CQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGQgbW9kIChwLTEpICovCisrCXJzYS0+ZG1w MT1CTl9uZXcoKTsKKysJaWYgKHJzYS0+ZG1wMSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlm ICghQk5fbW9kKHJzYS0+ZG1wMSxyc2EtPmQscjEsY3R4KSkKKysJCWdvdG8gZXJyOworKworKwkv KiBjYWxjdWxhdGUgZCBtb2QgKHEtMSkgKi8KKysJcnNhLT5kbXExPUJOX25ldygpOworKwlpZiAo cnNhLT5kbXExID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tb2QocnNhLT5kbXEx LHJzYS0+ZCxyMixjdHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0ZSBpbnZlcnNl IG9mIHEgbW9kIHAgKi8KKysJcnNhLT5pcW1wPUJOX21vZF9pbnZlcnNlKE5VTEwscnNhLT5xLHJz YS0+cCxjdHgyKTsKKysKKysJZXJyOgorKwlpZiAoY3R4KQorKwkJeworKwkJQk5fQ1RYX2VuZChj dHgpOworKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJCX0KKysJaWYgKGN0eDIpCisrCQlCTl9DVFhf ZnJlZShjdHgyKTsKKysJLyogSWYgdGhpcyBpcyBzZXQgYWxsIGNhbGxzIHN1Y2Nlc3NmdWwgKi8K KysJaWYgKHJzYSAmJiByc2EtPmlxbXAgIT0gTlVMTCkKKysJCXJldHVybiAxOworKworKwlyZXR1 cm4gMDsKKysKKysJfQorKworK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2Es IGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKKysJeworKwlpbnQgb2sg PSAwOworKwlCSUdOVU0gKlhwID0gTlVMTCwgKlhxID0gTlVMTDsKKysJQk5fQ1RYICpjdHggPSBO VUxMOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9G SVBTX01JTl9NT0RVTFVTX0JJVFMpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9SU0Ff WDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0tFWV9UT09fU0hPUlQpOworKwkgICAgcmV0dXJu IDA7CisrCSAgICB9CisrCisrCWlmIChiaXRzICYgMHhmZikKKysJICAgIHsKKysJICAgIEZJUFNl cnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfSU5WQUxJRF9LRVlfTEVO R1RIKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKworKwlpZihGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVf S0VZX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gMDsKKysJ ICAgIH0KKysjZW5kaWYKKysKKysJY3R4ID0gQk5fQ1RYX25ldygpOworKwlpZiAoIWN0eCkKKysJ CWdvdG8gZXJyb3I7CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwlYcCA9IEJOX0NUWF9nZXQo Y3R4KTsKKysJWHEgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9Y cHEoWHAsIFhxLCBiaXRzLCBjdHgpKQorKwkJZ290byBlcnJvcjsKKysKKysJcnNhLT5wID0gQk5f bmV3KCk7CisrCXJzYS0+cSA9IEJOX25ldygpOworKwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQor KwkJZ290byBlcnJvcjsKKysKKysJLyogR2VuZXJhdGUgdHdvIHByaW1lcyBmcm9tIFhwLCBYcSAq LworKworKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5wLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLCBYcCwKKysJCQkJCWUsIGN0eCwgY2IpKQorKwkJZ290byBlcnJvcjsKKysK KysJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cSwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgWHEsCisrCQkJCQllLCBjdHgsIGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCS8q IFNpbmNlIHJzYS0+cCBhbmQgcnNhLT5xIGFyZSB2YWxpZCB0aGlzIGNhbGwgd2lsbCBqdXN0IGRl cml2ZQorKwkgKiByZW1haW5pbmcgUlNBIGNvbXBvbmVudHMuCisrCSAqLworKworKwlpZiAoIVJT QV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisrCQkJCU5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGUsIGNiKSkKKysJCWdvdG8gZXJyb3I7Cisr CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZighZmlwc19jaGVja19yc2EocnNhKSkKKysJICAg IGdvdG8gZXJyb3I7CisrI2VuZGlmCisrCisrCW9rID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChj dHgpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJ fQorKworKwlpZiAob2spCisrCQlyZXR1cm4gMTsKKysKKysJcmV0dXJuIDA7CisrCisrCX0KK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfc2hhMV9zZWxmdGVzdC5jLmZp cHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMKKy0tLSBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3NoYTFfc2VsZnRlc3QuYy5maXBzCTIwMTAt MDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2ZpcHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAg KzAyMDAKK0BAIC0wLDAgKzEsOTkgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAo YykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgor KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgor KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAq CisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU CisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK KysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9Q RU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrc3RhdGljIGNoYXIgdGVzdFtdWzYwXT0KKysgICAgeworKyAgICAiIiwK KysgICAgImFiYyIsCisrICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xq a2xta2xtbmxtbm9tbm9wbm9wcSIKKysgICAgfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciByZXRbXVtTSEFfRElHRVNUX0xFTkdUSF09CisrICAgIHsKKysgICAgeyAweGRhLDB4Mzks MHhhMywweGVlLDB4NWUsMHg2YiwweDRiLDB4MGQsMHgzMiwweDU1LAorKyAgICAgIDB4YmYsMHhl ZiwweDk1LDB4NjAsMHgxOCwweDkwLDB4YWYsMHhkOCwweDA3LDB4MDkgfSwKKysgICAgeyAweGE5 LDB4OTksMHgzZSwweDM2LDB4NDcsMHgwNiwweDgxLDB4NmEsMHhiYSwweDNlLAorKyAgICAgIDB4 MjUsMHg3MSwweDc4LDB4NTAsMHhjMiwweDZjLDB4OWMsMHhkMCwweGQ4LDB4OWQgfSwKKysgICAg eyAweDg0LDB4OTgsMHgzZSwweDQ0LDB4MWMsMHgzYiwweGQyLDB4NmUsMHhiYSwweGFlLAorKyAg ICAgIDB4NGEsMHhhMSwweGY5LDB4NTEsMHgyOSwweGU1LDB4ZTUsMHg0NiwweDcwLDB4ZjEgfSwK KysgICAgfTsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9zaGExKCkKKysgICAgeworKyAgICB0ZXN0 WzJdWzBdKys7CisrICAgIH0KKysKKytpbnQgRklQU19zZWxmdGVzdF9zaGExKCkKKysgICAgewor KyAgICBpbnQgbjsKKysKKysgICAgZm9yKG49MCA7IG48c2l6ZW9mKHRlc3QpL3NpemVvZih0ZXN0 WzBdKSA7ICsrbikKKysJeworKwl1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsK KysKKysJRVZQX0RpZ2VzdCh0ZXN0W25dLHN0cmxlbih0ZXN0W25dKSxtZCwgTlVMTCwgRVZQX3No YTEoKSwgTlVMTCk7CisrCWlmKG1lbWNtcChtZCxyZXRbbl0sc2l6ZW9mIG1kKSkKKysJICAgIHsK KysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMSxGSVBTX1JfU0VMRlRFU1Rf RkFJTEVEKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKwl9CisrICAgIHJldHVybiAxOwor KyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9m aXBzX3N0YW5kYWxvbmVfc2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlw c19zdGFuZGFsb25lX3NoYTEuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNf c3RhbmRhbG9uZV9zaGExLmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIw MAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMJ MjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTczIEBACisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1 ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9v cGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2htYWMuaD4KKysKKysjaWZuZGVmIEZJUFNDQU5JU1RFUl9PCisraW50IEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkgeyByZXR1cm4gMDsgfQorK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjaygpIHt9 Cisrdm9pZCBPUEVOU1NMX2NsZWFuc2Uodm9pZCAqcCxzaXplX3QgbGVuKSB7fQorKyNlbmRpZgor KworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgdm9pZCBobWFjX2luaXQoU0hBX0NU WCAqbWRfY3R4LFNIQV9DVFggKm9fY3R4LAorKwkJICAgICAgY29uc3QgY2hhciAqa2V5KQorKyAg ICB7CisrICAgIHNpemVfdCBsZW49c3RybGVuKGtleSk7CisrICAgIGludCBpOworKyAgICB1bnNp Z25lZCBjaGFyIGtleW1kW0hNQUNfTUFYX01EX0NCTE9DS107CisrICAgIHVuc2lnbmVkIGNoYXIg cGFkW0hNQUNfTUFYX01EX0NCTE9DS107CisrCisrICAgIGlmIChsZW4gPiBTSEFfQ0JMT0NLKQor Kwl7CisrCVNIQTFfSW5pdChtZF9jdHgpOworKwlTSEExX1VwZGF0ZShtZF9jdHgsa2V5LGxlbik7 CisrCVNIQTFfRmluYWwoa2V5bWQsbWRfY3R4KTsKKysJbGVuPTIwOworKwl9CisrICAgIGVsc2UK KysJbWVtY3B5KGtleW1kLGtleSxsZW4pOworKyAgICBtZW1zZXQoJmtleW1kW2xlbl0sJ1wwJyxI TUFDX01BWF9NRF9DQkxPQ0stbGVuKTsKKysKKysgICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9N RF9DQkxPQ0sgOyBpKyspCisrCXBhZFtpXT0weDM2XmtleW1kW2ldOworKyAgICBTSEExX0luaXQo bWRfY3R4KTsKKysgICAgU0hBMV9VcGRhdGUobWRfY3R4LHBhZCxTSEFfQ0JMT0NLKTsKKysKKysg ICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCisrCXBhZFtpXT0weDVj XmtleW1kW2ldOworKyAgICBTSEExX0luaXQob19jdHgpOworKyAgICBTSEExX1VwZGF0ZShvX2N0 eCxwYWQsU0hBX0NCTE9DSyk7CisrICAgIH0KKysKKytzdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVu c2lnbmVkIGNoYXIgKm1kLFNIQV9DVFggKm1kX2N0eCxTSEFfQ1RYICpvX2N0eCkKKysgICAgewor KyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyMF07CisrCisrICAgIFNIQTFfRmluYWwoYnVmLG1kX2N0 eCk7CisrICAgIFNIQTFfVXBkYXRlKG9fY3R4LGJ1ZixzaXplb2YgYnVmKTsKKysgICAgU0hBMV9G aW5hbChtZCxvX2N0eCk7CisrICAgIH0KKysKKysjZW5kaWYKKysKKytpbnQgbWFpbihpbnQgYXJn YyxjaGFyICoqYXJndikKKysgICAgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgc3RhdGlj IGNoYXIga2V5W109ImV0YW9ucmlzaGRsY3VwZm0iOworKyAgICBpbnQgbixiaW5hcnk9MDsKKysK KysgICAgaWYoYXJnYyA8IDIpCisrCXsKKysJZnByaW50ZihzdGRlcnIsIiVzIFs8ZmlsZT5dK1xu Iixhcmd2WzBdKTsKKysJZXhpdCgxKTsKKysJfQorKworKyAgICBuPTE7CisrICAgIGlmICghc3Ry Y21wKGFyZ3Zbbl0sIi1iaW5hcnkiKSkKKysJeworKwluKys7CisrCWJpbmFyeT0xOwkvKiBlbWl0 IGJpbmFyeSBmaW5nZXJwcmludC4uLiAqLworKwl9CisrCisrICAgIGZvcig7IG4gPCBhcmdjIDsg KytuKQorKwl7CisrCUZJTEUgKmY9Zm9wZW4oYXJndltuXSwicmIiKTsKKysJU0hBX0NUWCBtZF9j dHgsb19jdHg7CisrCXVuc2lnbmVkIGNoYXIgbWRbMjBdOworKwlpbnQgaTsKKysKKysJaWYoIWYp CisrCSAgICB7CisrCSAgICBwZXJyb3IoYXJndltuXSk7CisrCSAgICBleGl0KDIpOworKwkgICAg fQorKworKwlobWFjX2luaXQoJm1kX2N0eCwmb19jdHgsa2V5KTsKKysJZm9yKCA7IDsgKQorKwkg ICAgeworKwkgICAgY2hhciBidWZbMTAyNF07CisrCSAgICBzaXplX3QgbD1mcmVhZChidWYsMSxz aXplb2YgYnVmLGYpOworKworKwkgICAgaWYobCA9PSAwKQorKwkJeworKwkJaWYoZmVycm9yKGYp KQorKwkJICAgIHsKKysJCSAgICBwZXJyb3IoYXJndltuXSk7CisrCQkgICAgZXhpdCgzKTsKKysJ CSAgICB9CisrCQllbHNlCisrCQkgICAgYnJlYWs7CisrCQl9CisrCSAgICBTSEExX1VwZGF0ZSgm bWRfY3R4LGJ1ZixsKTsKKysJICAgIH0KKysJaG1hY19maW5hbChtZCwmbWRfY3R4LCZvX2N0eCk7 CisrCisrCWlmIChiaW5hcnkpCisrCSAgICB7CisrCSAgICBmd3JpdGUobWQsMjAsMSxzdGRvdXQp OworKwkgICAgYnJlYWs7CS8qIC4uLiBmb3Igc2luZ2xlKCEpIGZpbGUgKi8KKysJICAgIH0KKysK KysJcHJpbnRmKCJITUFDLVNIQTEoJXMpPSAiLGFyZ3Zbbl0pOworKwlmb3IoaT0wIDsgaSA8IDIw IDsgKytpKQorKwkgICAgcHJpbnRmKCIlMDJ4IixtZFtpXSk7CisrCXByaW50ZigiXG4iKTsKKysJ fQorKyNlbmRpZgorKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcyBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUu YwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw1ODggQEAK KysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqCisrICogVGhpcyBjb21tYW5kIGlz IGludGVuZGVkIGFzIGEgdGVzdCBkcml2ZXIgZm9yIHRoZSBGSVBTLTE0MCB0ZXN0aW5nCisrICog bGFiIHBlcmZvcm1pbmcgRklQUy0xNDAgdmFsaWRhdGlvbi4gIEl0IGRlbW9uc3RyYXRlcyB0aGUg dXNlIG9mIHRoZQorKyAqIE9wZW5TU0wgbGlicmFyeSBpdG8gcGVyZm9ybSBhIHZhcmlldHkgb2Yg Y29tbW9uIGNyeXB0b2dyYXBoaWMKKysgKiBmdW5jdGlvbnMuICBBIHBvd2VyLXVwIHNlbGYgdGVz dCBpcyBkZW1vbnN0cmF0ZWQgYnkgZGVsaWJlcmF0ZWx5CisrICogcG9pbnRpbmcgdG8gYW4gaW52 YWxpZCBleGVjdXRhYmxlIGhhc2gKKysgKgorKyAqIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIE1hcnF1 ZXNzLgorKyAqCisrICovCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGFzc2VydC5o PgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8 c3RkbGliLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZGVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNh Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Cisr CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQorKyAgICB7CisrICAgIHByaW50ZigiTm8gRklQUyBzdXBwb3J0XG4iKTsKKysgICAgcmV0 dXJuKDApOworKyAgICB9CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrLyogQUVTOiBlbmNyeXB0IGFuZCBkZWNyeXB0IGtu b3duIHBsYWludGV4dCwgdmVyaWZ5IHJlc3VsdCBtYXRjaGVzIG9yaWdpbmFsIHBsYWludGV4dAor KyovCisrc3RhdGljIGludCBGSVBTX2Flc190ZXN0KHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7 CisrCXVuc2lnbmVkIGNoYXIgcGx0bXBbMTZdOworKwl1bnNpZ25lZCBjaGFyIGNpdG1wWzE2XTsK KysJdW5zaWduZWQgY2hhciBrZXlbMTZdID0geyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwx MywxNCwxNSwxNn07CisrCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XSA9ICJldGFvbnJpc2hk bGN1IjsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgp OworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwg a2V5LCBOVUxMLCAxKSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgY2l0 bXAsIHBsYWludGV4dCwgMTYpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Fl c18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVW UF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCAxNik7CisrCWlmIChtZW1jbXAocGx0bXAsIHBs YWludGV4dCwgMTYpKQorKwkJZ290byBlcnI7CisrCXJldCA9IDE7CisrCWVycjoKKysJRVZQX0NJ UEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysJcmV0dXJuIHJldDsKKysJfQorKworK3N0YXRpYyBp bnQgRklQU19kZXMzX3Rlc3Qodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQg Y2hhciBwbHRtcFs4XTsKKysJdW5zaWduZWQgY2hhciBjaXRtcFs4XTsKKysgICAgCXVuc2lnbmVk IGNoYXIga2V5W10gPSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3 LDE4LAorKwkJICAgICAgICAgICAgICAxOSwyMCwyMSwyMiwyMywyNH07CisrICAgIAl1bnNpZ25l ZCBjaGFyIHBsYWludGV4dFtdID0geyAnZScsICd0JywgJ2EnLCAnbycsICduJywgJ3InLCAnaScs ICdzJyB9OworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0 eCk7CisrCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVM TCwga2V5LCBOVUxMLCAxKSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwg Y2l0bXAsIHBsYWludGV4dCwgOCk7CisrCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBf ZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQorKwkJZ290byBlcnI7Cisr CUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCA4KTsKKysJaWYgKG1lbWNtcChwbHRtcCwg cGxhaW50ZXh0LCA4KSkKKysJCWdvdG8gZXJyOworKwlyZXQgPSAxOworKwllcnI6CisrCUVWUF9D SVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKysvKgorKyAq IERTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KKysg Ki8KKytzdGF0aWMgaW50IEZJUFNfZHNhX3Rlc3QoaW50IGJhZCkKKysgICAgeworKyAgICBEU0Eg KmRzYSA9IE5VTEw7CisrICAgIEVWUF9QS0VZIHBrOworKyAgICB1bnNpZ25lZCBjaGFyIGRnc3Rb XSA9ICJldGFvbnJpc2hkbGMiOworKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2MF07CisrICAgIHVu c2lnbmVkIGludCBzbGVuOworKyAgICBpbnQgciA9IDA7CisrICAgIEVWUF9NRF9DVFggbWN0eDsK KysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7 CisrICAgIGRzYSA9IERTQV9uZXcoKTsKKysgICAgaWYgKCFkc2EpCisrCWdvdG8gZW5kOworKyAg ICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxOVUxMLDAsTlVMTCxO VUxMLE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkp CisrCWdvdG8gZW5kOworKyAgICBpZiAoYmFkKQorKwkgICAgQk5fYWRkX3dvcmQoZHNhLT5wdWJf a2V5LCAxKTsKKysKKysgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKKysgICAgcGsucGtleS5k c2EgPSBkc2E7CisrCisrICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgp LCBOVUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGRn c3QsIHNpemVvZihkZ3N0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfU2lnbkZp bmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQorKwlnb3RvIGVuZDsKKysKKysgICAgaWYgKCFF VlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOwor KyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEp KQorKwlnb3RvIGVuZDsKKysgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVu LCAmcGspOworKyAgICBlbmQ6CisrICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrICAg IGlmIChkc2EpCisrICAJICBEU0FfZnJlZShkc2EpOworKyAgICBpZiAociAhPSAxKQorKwlyZXR1 cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKgorKyAqIFJTQTogZ2VuZXJhdGUg a2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KKysgKi8KKytzdGF0aWMgaW50 IEZJUFNfcnNhX3Rlc3QoaW50IGJhZCkKKysgICAgeworKyAgICBSU0EgKmtleTsKKysgICAgdW5z aWduZWQgY2hhciBpbnB1dF9wdGV4dFtdID0gImV0YW9ucmlzaGRsYyI7CisrICAgIHVuc2lnbmVk IGNoYXIgYnVmWzI1Nl07CisrICAgIHVuc2lnbmVkIGludCBzbGVuOworKyAgICBCSUdOVU0gKmJu OworKyAgICBFVlBfTURfQ1RYIG1jdHg7CisrICAgIEVWUF9QS0VZIHBrOworKyAgICBpbnQgciA9 IDA7CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1j dHgpOworKyAgICBrZXkgPSBSU0FfbmV3KCk7CisrICAgIGJuID0gQk5fbmV3KCk7CisrICAgIGlm ICgha2V5IHx8ICFibikKKysJcmV0dXJuIDA7CisrICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7 CisrICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVMTCkpCisrCXJl dHVybiAwOworKyAgICBCTl9mcmVlKGJuKTsKKysgICAgaWYgKGJhZCkKKysJICAgIEJOX2FkZF93 b3JkKGtleS0+biwgMSk7CisrCisrICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7CisrICAgIHBr LnBrZXkucnNhID0ga2V5OworKworKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQ X3NoYTEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZt Y3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQorKwlnb3RvIGVuZDsK KysgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQorKwlnb3Rv IGVuZDsKKysKKysgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwg TlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGlu cHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCisrCWdvdG8gZW5kOworKyAgICBy ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7CisrICAgIGVuZDoKKysg ICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKysgICAgaWYgKGtleSkKKysgIAkgICAgUlNB X2ZyZWUoa2V5KTsKKysgICAgaWYgKHIgIT0gMSkKKysJcmV0dXJuIDA7CisrICAgIHJldHVybiAx OworKyAgICB9CisrCisrLyogU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFs dWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysq LworK3N0YXRpYyBpbnQgRklQU19zaGExX3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNo YXIgZGlnZXN0W1NIQV9ESUdFU1RfTEVOR1RIXSA9CisrICAgICAgICB7IDB4MTEsIDB4ZjEsIDB4 OWEsIDB4M2EsIDB4ZWMsIDB4MWEsIDB4MWUsIDB4OGUsIDB4NjUsIDB4ZDQsIDB4OWEsIDB4Mzgs IDB4MGMsIDB4OGIsIDB4MWUsIDB4MmMsIDB4ZTgsIDB4YjMsIDB4YzUsIDB4MTggfTsKKysgICAg dW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKKysKKysgICAgdW5zaWduZWQgY2hh ciBtZFtTSEFfRElHRVNUX0xFTkdUSF07CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAg ICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTEo KSwgTlVMTCkpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQp KSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNI QTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8g a25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQ U19zaGEyNTZfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBMjU2 X0RJR0VTVF9MRU5HVEhdID0KKysJezB4ZjUsIDB4NTMsIDB4Y2QsIDB4YjgsIDB4Y2YsIDB4MSwg MHhlZSwgMHgxNywgMHg5YiwgMHg5MywgMHhjOSwgMHg2OCwgMHhjMCwgMHhlYSwgMHg0MCwgMHg5 MSwKKysJIDB4NiwgMHhlYywgMHg4ZSwgMHgxMSwgMHg5NiwgMHhjOCwgMHg1ZCwgMHgxYywgMHhh ZiwgMHg2NCwgMHgyMiwgMHhlNiwgMHg1MCwgMHg0ZiwgMHg0NywgMHg1N307CisrICAgIHVuc2ln bmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7CisrCisrICAgIHVuc2lnbmVkIGNoYXIgbWRb U0hBMjU2X0RJR0VTVF9MRU5HVEhdOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAg aWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGEyNTYo KSwgTlVMTCkpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQp KSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNI QTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8g a25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQ U19zaGE1MTJfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBNTEy X0RJR0VTVF9MRU5HVEhdID0KKysJezB4OTksIDB4YzksIDB4ZTksIDB4NWIsIDB4ODgsIDB4ZDQs IDB4NzgsIDB4ODgsIDB4ZGYsIDB4ODgsIDB4NWYsIDB4OTQsIDB4NzEsIDB4NjQsIDB4MjgsIDB4 Y2EsCisrCSAweDE2LCAweDFmLCAweDNkLCAweGY0LCAweDFmLCAweGYzLCAweDBmLCAweGM1LCAw eDAzLCAweDk5LCAweGIyLCAweGQwLCAweGU3LCAweDBiLCAweDk0LCAweDRhLAorKwkgMHg0NSwg MHhkMiwgMHg2YywgMHg0ZiwgMHgyMCwgMHgwNiwgMHhlZiwgMHg3MSwgMHhhOSwgMHgyNSwgMHg3 ZiwgMHgyNCwgMHhiMSwgMHhkOSwgMHg0MCwgMHgyMiwKKysJIDB4NDksIDB4NTQsIDB4MTAsIDB4 YzIsIDB4MjIsIDB4OWQsIDB4MjcsIDB4ZmUsIDB4YmQsIDB4ZDYsIDB4ZDYsIDB4ZWIsIDB4MmQs IDB4NDIsIDB4MWQsIDB4YTN9OworKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlz aGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKKysK KysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9m KHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhNTEyKCksIE5VTEwpKSByZXR1cm4gMDsKKysgICAg aWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCisrICAgICAgICByZXR1cm4gMDsKKysg ICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFDLVNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yg a25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQg Y29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGExX3Rlc3QoKQorKyAg ICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2ln bmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxb RVZQX01BWF9NRF9TSVpFXSA9CisrCXsweDczLCAweGY3LCAweGEwLCAweDQ4LCAweGY4LCAweDk0 LCAweGVkLCAweGRkLCAweDBhLCAweGVhLCAweGVhLCAweDU2LCAweDFiLCAweDYxLCAweDJlLCAw eDcwLAorKwkgMHhiMiwgMHhmYiwgMHhlYywgMHhjNn07CisrCisrICAgIHVuc2lnbmVkIGNoYXIg b3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAg IEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3NoYTEoKSxrZXksc2l6ZW9m KGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYg KG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1 cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMtU0hBMjI0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3du IGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJl Y3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKQorKyAgICB7 CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVk IGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQ X01BWF9NRF9TSVpFXSA9CisrCXsweDc1LCAweDU4LCAweGQ1LCAweGJkLCAweDU1LCAweDZkLCAw eDg3LCAweDBmLCAweDc1LCAweGZmLCAweGJlLCAweDFjLCAweGIyLCAweGYwLCAweDIwLCAweDM1 LAorKwkgMHhlNSwgMHg2MiwgMHg0OSwgMHhiNiwgMHg5NCwgMHhiOSwgMHhmYywgMHg2NSwgMHgz NCwgMHgzMywgMHgzYSwgMHgxOX07CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhf TURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9l cnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3NoYTIyNCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2 LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91 dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAg ICB9CisrCisrLyogSE1BQy1TSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZh bHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisr Ki8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpCisrICAgIHsKKysgICAgdW5z aWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltd ID0gIlNhbXBsZSB0ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJ WkVdID0KKysJezB4ZTksIDB4MTcsIDB4YzEsIDB4N2IsIDB4NGMsIDB4NmIsIDB4NzcsIDB4ZGEs IDB4ZDIsIDB4MzAsIDB4MzYsIDB4MDIsIDB4ZjUsIDB4NzIsIDB4MzMsIDB4ODcsCisrCSAweDlm LCAweGM2LCAweDZlLCAweDdiLCAweDdlLCAweGE4LCAweGVhLCAweGFhLCAweDlmLCAweGJhLCAw eGVlLCAweDUxLCAweGZmLCAweGRhLCAweDI0LCAweGY0fTsKKysKKysgICAgdW5zaWduZWQgY2hh ciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysg ICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQyhFVlBfc2hhMjU2KCksa2V5LHNp emVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAg IGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAg cmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFDLVNIQTM4NDogZ2VuZXJhdGUgaGFzaCBvZiBr bm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBj b3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTM4NF90ZXN0KCkKKysg ICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNp Z25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFs W0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHhiMiwgMHg5ZCwgMHg0MCwgMHg1OCwgMHgzMiwgMHhj NCwgMHhlMywgMHgzMSwgMHhiNiwgMHg2MywgMHgwOCwgMHgyNiwgMHg5OSwgMHhlZiwgMHgzYiwg MHgxMCwKKysJIDB4ZTIsIDB4ZGYsIDB4ZjgsIDB4ZmYsIDB4YzYsIDB4ZTEsIDB4MDMsIDB4Mjks IDB4ODEsIDB4MmEsIDB4MWIsIDB4YWMsIDB4YjAsIDB4MDcsIDB4MzksIDB4MDgsCisrCSAweGYz LCAweDkxLCAweDM1LCAweDExLCAweDc2LCAweGQ2LCAweDRjLCAweDIwLCAweGZiLCAweDRkLCAw eGMzLCAweGYzLCAweGI4LCAweDliLCAweDg4LCAweDFjfTsKKysKKysgICAgdW5zaWduZWQgY2hh ciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysg ICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQyhFVlBfc2hhMzg0KCksa2V5LHNp emVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAg IGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAg cmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFDLVNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBr bm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBj b3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTUxMl90ZXN0KCkKKysg ICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNp Z25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFs W0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHhjZCwgMHgzZSwgMHhiOSwgMHg1MSwgMHhiOCwgMHhi YywgMHg3ZiwgMHg5YSwgMHgyMywgMHhhZiwgMHhmMywgMHg3NywgMHg1OSwgMHg4NSwgMHhhOSwg MHhlNiwKKysJIDB4ZjcsIDB4ZDEsIDB4NTEsIDB4OTYsIDB4MTcsIDB4ZTAsIDB4OTIsIDB4ZDgs IDB4YTYsIDB4M2IsIDB4YzEsIDB4YWQsIDB4N2UsIDB4MjQsIDB4Y2EsIDB4YjEsCisrCSAweGQ3 LCAweDc5LCAweDBhLCAweGE1LCAweGVhLCAweDJjLCAweDAyLCAweDU4LCAweDBiLCAweGE2LCAw eDUyLCAweDZiLCAweDYxLCAweDdmLCAweGViLCAweDljLAorKwkgMHg0NywgMHg4NiwgMHg1ZCwg MHg3NCwgMHgyYiwgMHg4OCwgMHhkZiwgMHhlZSwgMHg0NiwgMHg2OSwgMHg5NiwgMHgzZCwgMHhh NiwgMHhkOSwgMHgyYSwgMHg1M307CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhf TURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9l cnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3NoYTUxMigpLGtleSxzaXplb2Yoa2V5KS0xLGl2 LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91 dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAg ICB9CisrCisrCisrLyogREg6IGdlbmVyYXRlIHNoYXJlZCBwYXJhbWV0ZXJzCisrKi8KKytzdGF0 aWMgaW50IGRoX3Rlc3QoKQorKyAgICB7CisrICAgIERIICpkaDsKKysgICAgRVJSX2NsZWFyX2Vy cm9yKCk7CisrICAgIGRoID0gRklQU19kaF9uZXcoKTsKKysgICAgaWYgKCFkaCkKKysJcmV0dXJu IDA7CisrICAgIGlmICghREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkaCwgMTAyNCwgMiwgTlVM TCkpCisrCXJldHVybiAwOworKyAgICBGSVBTX2RoX2ZyZWUoZGgpOworKyAgICByZXR1cm4gMTsK KysgICAgfQorKworKy8qIFplcm9pemUKKysqLworK3N0YXRpYyBpbnQgWmVyb2l6ZSgpCisrICAg IHsKKysgICAgUlNBICprZXk7CisrICAgIEJJR05VTSAqYm47CisrICAgIHVuc2lnbmVkIGNoYXIg dXNlcmtleVsxNl0gPSAKKysJeyAweDQ4LCAweDUwLCAweGYwLCAweGEzLCAweDNhLCAweGVkLCAw eGQzLCAweGFmLCAweDZlLCAweDQ3LCAweDdmLCAweDgzLCAweDAyLCAweGIxLCAweDA5LCAweDY4 IH07CisrICAgIGludCBpLCBuOworKworKyAgICBrZXkgPSBGSVBTX3JzYV9uZXcoKTsKKysgICAg Ym4gPSBCTl9uZXcoKTsKKysgICAgaWYgKCFrZXkgfHwgIWJuKQorKwlyZXR1cm4gMDsKKysgICAg Qk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKKysgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtl eSwgMTAyNCxibixOVUxMKSkKKysJcmV0dXJuIDA7CisrICAgIEJOX2ZyZWUoYm4pOworKyAgICAK KysgICAgbiA9IEJOX251bV9ieXRlcyhrZXktPmQpOworKyAgICBwcmludGYoIiBHZW5lcmF0ZWQg JWQgYnl0ZSBSU0EgcHJpdmF0ZSBrZXlcbiIsIG4pOworKyAgICBwcmludGYoIlx0Qk4ga2V5IGJl Zm9yZSBvdmVyd3JpdGluZzpcbiIpOworKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7 CisrICAgIEJOX3JhbmQoa2V5LT5kLG4qOCwtMSwwKTsKKysgICAgcHJpbnRmKCJcdEJOIGtleSBh ZnRlciBvdmVyd3JpdGluZzpcbiIpOworKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7 CisrCisrICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOiBc blx0XHQiKTsKKysgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspIHByaW50 ZigiJTAyeCIsIHVzZXJrZXlbaV0pOworKyAgICAgICAgcHJpbnRmKCJcbiIpOworKyAgICBSQU5E X2J5dGVzKHVzZXJrZXksIHNpemVvZiB1c2Vya2V5KTsKKysgICAgcHJpbnRmKCJcdGNoYXIgYnVm ZmVyIGtleSBhZnRlciBvdmVyd3JpdGluZzogXG5cdFx0Iik7CisrICAgIGZvcihpID0gMDsgaSA8 IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKKysgICAg ICAgIHByaW50ZigiXG4iKTsKKysKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKytzdGF0aWMg aW50IEVycm9yOworK2NvbnN0IGNoYXIgKiBGYWlsKGNvbnN0IGNoYXIgKm1zZykKKysgICAgewor KyAgICBkb19wcmludF9lcnJvcnMoKTsKKysgICAgRXJyb3IrKzsKKysgICAgcmV0dXJuIG1zZzsg CisrICAgIH0KKysKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgeworKwor KyAgICBpbnQgZG9fY29ycnVwdF9yc2Ffa2V5Z2VuID0gMCwgZG9fY29ycnVwdF9kc2Ffa2V5Z2Vu ID0gMDsKKysgICAgaW50IGJhZF9yc2EgPSAwLCBiYWRfZHNhID0gMDsKKysgICAgaW50IGRvX3Ju Z19zdGljayA9IDA7CisrICAgIGludCBub19leGl0ID0gMDsKKysKKysgICAgcHJpbnRmKCJcdEZJ UFMtbW9kZSB0ZXN0IGFwcGxpY2F0aW9uXG5cbiIpOworKworKyAgICAvKiBMb2FkIGVudHJvcHkg ZnJvbSBleHRlcm5hbCBmaWxlLCBpZiBhbnkgKi8KKysgICAgUkFORF9sb2FkX2ZpbGUoIi5ybmQi LCAxMDI0KTsKKysKKysgICAgaWYgKGFyZ3ZbMV0pIHsKKysgICAgICAgIC8qIENvcnJ1cHRlZCBL QVQgdGVzdHMgKi8KKysgICAgICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJhZXMiKSkgeworKyAg ICAgICAgICAgIEZJUFNfY29ycnVwdF9hZXMoKTsKKysgICAgICAgICAgICBwcmludGYoIkFFUyBl bmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAg IH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZGVzIikpIHsKKysgICAgICAgICAgICBGSVBT X2NvcnJ1cHRfZGVzKCk7CisrICAgICAgICAgICAgcHJpbnRmKCJERVMzLUVDQiBlbmNyeXB0aW9u L2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBp ZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNhIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRf ZHNhKCk7CisrICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25h dHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVs c2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYSIpKSB7CisrICAgICAgICAgICAgRklQU19jb3Jy dXB0X3JzYSgpOworKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBz aWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAg fSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXkiKSkgeworKyAgICAgICAgICAgIHBy aW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNv cnJ1cHRlZCBrZXkuLi5cbiIpOworKwkgICAgYmFkX3JzYSA9IDE7CisrCSAgICBub19leGl0ID0g MTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5Z2VuIikpIHsK KysJICAgIGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDE7CisrCSAgICBub19leGl0ID0gMTsKKysg ICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlk YXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAo IXN0cmNtcChhcmd2WzFdLCAiZHNha2V5IikpIHsKKysgICAgICAgICAgICBwcmludGYoIkRTQSBr ZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5 Li4uXG4iKTsKKysJICAgIGJhZF9kc2EgPSAxOworKwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAg ICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleWdlbiIpKSB7CisrCSAgICBkb19j b3JydXB0X2RzYV9rZXlnZW4gPSAxOworKwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAgICAgICAg cHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGgg Y29ycnVwdGVkIGtleWdlbi4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJn dlsxXSwgInNoYTEiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9zaGExKCk7CisrICAg ICAgICAgICAgcHJpbnRmKCJTSEEtMSBoYXNoIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Cisr CX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nIikpIHsKKysJICAgIEZJUFNfY29ycnVw dF9ybmcoKTsKKysJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJybmdzdGljayIpKSB7Cisr CSAgICBkb19ybmdfc3RpY2sgPSAxOworKwkgICAgbm9fZXhpdCA9IDE7CisrCSAgICBwcmludGYo IlJORyB0ZXN0IHdpdGggc3R1Y2sgY29udGludW91cyB0ZXN0Li4uXG4iKTsKKysgICAgICAgIH0g ZWxzZSB7CisrICAgICAgICAgICAgcHJpbnRmKCJCYWQgYXJndW1lbnQgXCIlc1wiXG4iLCBhcmd2 WzFdKTsKKysgICAgICAgICAgICBleGl0KDEpOworKyAgICAgICAgfQorKwlpZiAoIW5vX2V4aXQp IHsKKysgICAgICAgIAlpZiAoIUZJUFNfbW9kZV9zZXQoMSkpIHsKKysgCQkgICAgZG9fcHJpbnRf ZXJyb3JzKCk7CisrICAgICAgICAJICAgIHByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IGZhaWxl ZFxuIik7CisrCQkgICAgZXhpdCgxKTsKKysJCX0KKysgICAgICAgIAlwcmludGYoIlBvd2VyLXVw IHNlbGYgdGVzdCBzdWNjZXNzZnVsXG4iKTsKKysgICAgICAgIAlleGl0KDApOworKwl9CisrICAg IH0KKysKKysgICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCisrICAg ICovCisrICAgIHByaW50ZigiMS4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9u IHRlc3QuLi5cbiIpOworKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgp Li4uIik7CisrICAgIHByaW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgi RkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogUG93ZXItdXAgc2VsZiB0ZXN0CisrICAgICovCisr ICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBwcmludGYoIjIuIEF1dG9tYXRpYyBwb3dlci11 cCBzZWxmIHRlc3QuLi4iKTsKKysgICAgaWYgKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRv X3ByaW50X2Vycm9ycygpOworKyAgICAgICAgcHJpbnRmKEZhaWwoIkZBSUxFRCFcbiIpKTsKKysJ ZXhpdCgxKTsKKysJfQorKyAgICBwcmludGYoInN1Y2Nlc3NmdWxcbiIpOworKyAgICBpZiAoZG9f Y29ycnVwdF9kc2Ffa2V5Z2VuKQorKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2Vu KCk7CisrICAgIGlmIChkb19jb3JydXB0X3JzYV9rZXlnZW4pCisrICAgICAgICAgICAgRklQU19j b3JydXB0X3JzYV9rZXlnZW4oKTsKKysgICAgaWYgKGRvX3JuZ19zdGljaykKKysgICAgICAgICAg ICBGSVBTX3JuZ19zdGljaygpOworKworKyAgICAvKiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9u CisrICAgICovCisrICAgIHByaW50ZigiMy4gQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIp OworKyAgICBwcmludGYoIEZJUFNfYWVzX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwo IkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlw dGlvbi9kZWNyeXB0aW9uCisrICAgICovCisrICAgIHByaW50ZigiNC4gUlNBIGtleSBnZW5lcmF0 aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3Jz YV90ZXN0KGJhZF9yc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsK KysKKysgICAgLyogREVTLUNCQyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKysgICAgKi8KKysgICAg cHJpbnRmKCI1LiBERVMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOworKyAgICBwcmlu dGYoIEZJUFNfZGVzM190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4i KSApOworKworKyAgICAvKiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0 aW9uCisrICAgICovCisrICAgIHByaW50ZigiNi4gRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWdu YXR1cmUgdmFsaWRhdGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNfZHNhX3Rlc3QoYmFkX2Rz YSkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBT SEEtMSBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2EuIFNIQS0xIGhhc2guLi4iKTsKKysg ICAgcHJpbnRmKCBGSVBTX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJ TEVEIVxuIikgKTsKKysKKysgICAgLyogU0hBLTI1NiBoYXNoCisrICAgICovCisrICAgIHByaW50 ZigiN2IuIFNIQS0yNTYgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfc2hhMjU2X3Rlc3Qo KSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNI QS01MTIgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdjLiBTSEEtNTEyIGhhc2guLi4iKTsK KysgICAgcHJpbnRmKCBGSVBTX3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWls KCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS0xIGhhc2gKKysgICAgKi8KKysg ICAgcHJpbnRmKCI3ZC4gSE1BQy1TSEEtMSBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19o bWFjX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsK KysKKysgICAgLyogSE1BQy1TSEEtMjI0IGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3ZS4g SE1BQy1TSEEtMjI0IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMjI0X3Rl c3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8q IEhNQUMtU0hBLTI1NiBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2YuIEhNQUMtU0hBLTI1 NiBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTI1Nl90ZXN0KCkgPyAic3Vj Y2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS0z ODQgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdnLiBITUFDLVNIQS0zODQgaGFzaC4uLiIp OworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEzODRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIg OiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtNTEyIGhhc2gKKysg ICAgKi8KKysgICAgcHJpbnRmKCI3aC4gSE1BQy1TSEEtNTEyIGhhc2guLi4iKTsKKysgICAgcHJp bnRmKCBGSVBTX2htYWNfc2hhNTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZB SUxFRCFcbiIpICk7CisrCisrICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJh dGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjguIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGlj IG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKKysgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29y aXRobSAoRC1IKS4uLiIpOworKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsIGFz IGV4cGVjdGVkXG4iCisrCSAgICA6IEZhaWwoImZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7Cisr CisrICAgIC8qIFplcm9pemF0aW9uCisrICAgICovCisrICAgIHByaW50ZigiOS4gWmVyby1pemF0 aW9uLi4uXG4iKTsKKysgICAgcHJpbnRmKCBaZXJvaXplKCkgPyAiXHRzdWNjZXNzZnVsIGFzIGV4 cGVjdGVkXG4iCisrCSAgICA6IEZhaWwoIlx0ZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKKysK KysgICAgcHJpbnRmKCJcbkFsbCB0ZXN0cyBjb21wbGV0ZWQgd2l0aCAlZCBlcnJvcnNcbiIsIEVy cm9yKTsKKysgICAgcmV0dXJuIEVycm9yID8gMSA6IDA7CisrICAgIH0KKysKKysjZW5kaWYKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9maXBzX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzX2xv Y2wuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2ZpcHNfbG9jbC5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAw ICswMjAwCitAQCAtMCwwICsxLDcyIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQg KGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoK KysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K KysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysg KgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE CisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisr I2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMi IHsKKysjZW5kaWYKKysKKyt2b2lkIGZpcHNfd19sb2NrKHZvaWQpOworK3ZvaWQgZmlwc193X3Vu bG9jayh2b2lkKTsKKyt2b2lkIGZpcHNfcl9sb2NrKHZvaWQpOworK3ZvaWQgZmlwc19yX3VubG9j ayh2b2lkKTsKKytpbnQgZmlwc19pc19zdGFydGVkKHZvaWQpOworK3ZvaWQgZmlwc19zZXRfc3Rh cnRlZCh2b2lkKTsKKytpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpOworK2ludCBmaXBz X3NldF9vd25pbmdfdGhyZWFkKHZvaWQpOworK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2 b2lkKTsKKytpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKHZvaWQpOworKworKyNkZWZpbmUg RklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRQkxNgorKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9 CisrI2VuZGlmCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9N YWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL01ha2VmaWxlCistLS0gb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1 LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL01ha2VmaWxl CTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDgxIEBACisr IworKyMgT3BlblNTTC9jcnlwdG8vZmlwcy9NYWtlZmlsZQorKyMKKysKKytESVI9CWZpcHMKKytU T1A9CS4uLy4uCisrQ0M9CWNjCisrSU5DTFVERVM9CisrQ0ZMQUc9LWcKKytNQUtFRklMRT0JTWFr ZWZpbGUKKytBUj0JCWFyIHIKKysKKytDRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCisrCisr R0VORVJBTD1NYWtlZmlsZQorK1RFU1Q9Zmlwc190ZXN0X3N1aXRlLmMgZmlwc19yYW5kdGVzdC5j CisrQVBQUz0KKysKKytMSUI9JChUT1ApL2xpYmNyeXB0by5hCisrTElCU1JDPWZpcHNfYWVzX3Nl bGZ0ZXN0LmMgZmlwc19kZXNfc2VsZnRlc3QuYyBmaXBzX2htYWNfc2VsZnRlc3QuYyBmaXBzX3Jh bmRfc2VsZnRlc3QuYyBcCisrICAgIGZpcHNfcnNhX3NlbGZ0ZXN0LmMgZmlwc19zaGExX3NlbGZ0 ZXN0LmMgZmlwcy5jIGZpcHNfZHNhX3NlbGZ0ZXN0LmMgIGZpcHNfcmFuZC5jIFwKKysgICAgZmlw c19yc2FfeDkzMWcuYworKworK0xJQk9CSj1maXBzX2Flc19zZWxmdGVzdC5vIGZpcHNfZGVzX3Nl bGZ0ZXN0Lm8gZmlwc19obWFjX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX3NlbGZ0ZXN0Lm8gXAorKyAg ICBmaXBzX3JzYV9zZWxmdGVzdC5vIGZpcHNfc2hhMV9zZWxmdGVzdC5vIGZpcHMubyBmaXBzX2Rz YV9zZWxmdGVzdC5vICBmaXBzX3JhbmQubyBcCisrICAgIGZpcHNfcnNhX3g5MzFnLm8KKysKKytT UkM9ICQoTElCU1JDKSBmaXBzX3N0YW5kYWxvbmVfc2hhMS5jCisrCisrRVhIRUFERVI9IGZpcHMu aCBmaXBzX3JhbmQuaAorK0hFQURFUj0JJChFWEhFQURFUikKKysKKytBTEw9ICAgICQoR0VORVJB TCkgJChTUkMpICQoSEVBREVSKQorKworK3RvcDoKKysJKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9 Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQorKworK2FsbDoJbGliCisrCisrbGliOgkkKExJ Qk9CSikKKysJJChBUikgJChMSUIpICQoTElCT0JKKQorKwkkKFJBTkxJQikgJChMSUIpIHx8IGVj aG8gTmV2ZXIgbWluZC4KKysJQHRvdWNoIGxpYgorKworK2ZpbGVzOgorKwkkKFBFUkwpICQoVE9Q KS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTworKworK2xpbmtzOgorKwlA JChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhI RUFERVIpCisrCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVT VCkKKysJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQor KworK2luc3RhbGw6CisrCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBi eSB0b3AgTWFrZWZpbGUuLi4KKysJQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4g JCRoZWFkZXJsaXN0IDsgXAorKwlkbyAgXAorKwkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJ TlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCisrCWNobW9kIDY0NCAkKElOU1RBTExf UFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCisrCWRvbmU7Cisr CisrdGFnczoKKysJY3RhZ3MgJChTUkMpCisrCisrdGVzdHM6CisrCisrbGludDoKKysJbGludCAt RExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCisrCisrZGVwZW5kOgorKwlAWyAtbiAiJChN QUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KKysJJChN QUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1Mp ICQoTElCU1JDKQorKworK2RjbGVhbjoKKysJJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERF TEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxl Lm5ldworKwltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKKysKKytjbGVhbjoKKysJcm0g LWYgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYK KysKKysjIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24g aXQuCisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vaG1hYy9obWFjLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vaG1hYy9obWFjLmMuZmlwcwkyMDEwLTAxLTI2IDE1OjMzOjUyLjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9obWFjL2htYWMuYwkyMDEwLTA2LTA0IDEyOjI1OjE1 LjAwMDAwMDAwMCArMDIwMAorQEAgLTc3LDYgKzc3LDEzIEBAIGludCBITUFDX0luaXRfZXgoSE1B Q19DVFggKmN0eCwgY29uc3Qgdm8KKyAKKyAJaWYgKGtleSAhPSBOVUxMKQorIAkJeworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSAmJiAhKG1kLT5mbGFncyAmIEVWUF9N RF9GTEFHX0ZJUFMpCisrCQkmJiAoIShjdHgtPm1kX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxB R19OT05fRklQU19BTExPVykKKysJCSB8fCAhKGN0eC0+aV9jdHguZmxhZ3MgJiBFVlBfTURfQ1RY X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQkgfHwgIShjdHgtPm9fY3R4LmZsYWdzICYgRVZQX01E X0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkpCisrCQkJZ290byBlcnI7CisrI2VuZGlmCisgCQly ZXNldD0xOworIAkJaj1FVlBfTURfYmxvY2tfc2l6ZShtZCk7CisgCQlPUEVOU1NMX2Fzc2VydChq IDw9IChpbnQpc2l6ZW9mKGN0eC0+a2V5KSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vTWFrZWZpbGUKKy0tLSBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vTWFrZWZpbGUuZmlwcwkyMDA5LTA0LTA2IDE2OjMxOjM1LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9NYWtlZmlsZQkyMDEwLTA2LTA0 IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTM0LDE0ICszNCwxNCBAQCBHRU5FUkFMPU1h a2VmaWxlIFJFQURNRSBjcnlwdG8tbGliLmNvbSBpCisgCisgTElCPSAkKFRPUCkvbGliY3J5cHRv LmEKKyBTSEFSRURfTElCPSBsaWJjcnlwdG8kKFNITElCX0VYVCkKKy1MSUJTUkM9CWNyeXB0bGli LmMgbWVtLmMgbWVtX2Nsci5jIG1lbV9kYmcuYyBjdmVyc2lvbi5jIGV4X2RhdGEuYyBjcHRfZXJy LmMgZWJjZGljLmMgdWlkLmMgb190aW1lLmMgb19zdHIuYyBvX2Rpci5jCistTElCT0JKPSBjcnlw dGxpYi5vIG1lbS5vIG1lbV9kYmcubyBjdmVyc2lvbi5vIGV4X2RhdGEubyBjcHRfZXJyLm8gZWJj ZGljLm8gdWlkLm8gb190aW1lLm8gb19zdHIubyBvX2Rpci5vICQoQ1BVSURfT0JKKQorK0xJQlNS Qz0JY3J5cHRsaWIuYyBtZW0uYyBtZW1fY2xyLmMgbWVtX2RiZy5jIGN2ZXJzaW9uLmMgZXhfZGF0 YS5jIGNwdF9lcnIuYyBlYmNkaWMuYyB1aWQuYyBvX3RpbWUuYyBvX3N0ci5jIG9fZGlyLmMgb19p bml0LmMgZmlwc19lcnIuYworK0xJQk9CSj0gY3J5cHRsaWIubyBtZW0ubyBtZW1fZGJnLm8gY3Zl cnNpb24ubyBleF9kYXRhLm8gY3B0X2Vyci5vIGViY2RpYy5vIHVpZC5vIG9fdGltZS5vIG9fc3Ry Lm8gb19kaXIubyBvX2luaXQubyBmaXBzX2Vyci5vICQoQ1BVSURfT0JKKQorIAorIFNSQz0gJChM SUJTUkMpCisgCisgRVhIRUFERVI9IGNyeXB0by5oIG9wZW5zc2x2Lmggb3BlbnNzbGNvbmYuaCBl YmNkaWMuaCBzeW1oYWNrcy5oIFwKKyAJb3NzbF90eXAuaAorLUhFQURFUj0JY3J5cHRsaWIuaCBi dWlsZGluZi5oIG1kMzJfY29tbW9uLmggb190aW1lLmggb19zdHIuaCBvX2Rpci5oICQoRVhIRUFE RVIpCisrSEVBREVSPQljcnlwdGxpYi5oIGJ1aWxkaW5mLmggZmlwc19sb2NsLmggbWQzMl9jb21t b24uaCBvX3RpbWUuaCBvX3N0ci5oIG9fZGlyLmggJChFWEhFQURFUikKKyAKKyBBTEw9ICAgICQo R0VORVJBTCkgJChTUkMpICQoSEVBREVSKQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZGMyL21kYzJk Z3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMJMjAw NC0wNy0yNSAyMToxMDo0MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vbWRjMi9tZGMyZGdzdC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitA QCAtNjEsNiArNjEsMTEgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPG9wZW5z c2wvZGVzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvbWRjMi5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2VuZGlmCisrCisgCisgI3VuZGVmIGMybAorICNkZWZpbmUgYzJsKGMsbCkJKGwgPSgoREVT X0xPTkcpKCooKGMpKyspKSkgICAgLCBcCitAQCAtNzUsNyArODAsNyBAQAorIAkJCSooKGMpKysp PSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4ZmYpKQorIAorIHN0YXRpYyB2b2lkIG1kYzJf Ym9keShNREMyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pOwor LWludCBNREMyX0luaXQoTURDMl9DVFggKmMpCisrRklQU19OT05fRklQU19NRF9Jbml0KE1EQzIp CisgCXsKKyAJYy0+bnVtPTA7CisgCWMtPnBhZF90eXBlPTE7CitkaWZmIC11cCBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vbWRjMi9tZGMyLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWRjMi9t ZGMyLmgKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWRjMi9tZGMyLmguZmlwcwkyMDEwLTA2 LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9t ZGMyL21kYzIuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTgwLDcg KzgwLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgbWRjMl9jdHhfc3QKKyAJaW50IHBhZF90eXBlOyAvKiBl aXRoZXIgMSBvciAyLCBkZWZhdWx0IDEgKi8KKyAJfSBNREMyX0NUWDsKKyAKKy0KKysjaWZkZWYg T1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfTURDMl9Jbml0KE1EQzJfQ1RYICpjKTsKKysjZW5k aWYKKyBpbnQgTURDMl9Jbml0KE1EQzJfQ1RYICpjKTsKKyBpbnQgTURDMl9VcGRhdGUoTURDMl9D VFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBNREMy X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNREMyX0NUWCAqYyk7CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v bWQyL21kMl9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQyL21kMl9kZ3N0LmMu ZmlwcwkyMDA3LTA4LTMxIDEyOjEyOjM1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9tZDIvbWQyX2Rnc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAorQEAgLTYyLDYgKzYyLDExIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvbWQyLmg+CisgI2lu Y2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4K KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRp ZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorIAorIGNvbnN0IGNoYXIgTUQyX3ZlcnNp b25bXT0iTUQyIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitAQCAtMTE2LDcgKzEyMSw3IEBA IGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQpCisgCQlyZXR1cm4oIm1kMihpbnQpIik7Cisg CX0KKyAKKy1pbnQgTUQyX0luaXQoTUQyX0NUWCAqYykKKytGSVBTX05PTl9GSVBTX01EX0luaXQo TUQyKQorIAl7CisgCWMtPm51bT0wOworIAltZW1zZXQoYy0+c3RhdGUsMCxzaXplb2YgYy0+c3Rh dGUpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21kMi9tZDIuaC5maXBzIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9tZDIvbWQyLmgKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQy L21kMi5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vbWQyL21kMi5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAw ICswMjAwCitAQCAtODEsNiArODEsOSBAQCB0eXBlZGVmIHN0cnVjdCBNRDJzdGF0ZV9zdAorIAl9 IE1EMl9DVFg7CisgCisgY29uc3QgY2hhciAqTUQyX29wdGlvbnModm9pZCk7CisrI2lmZGVmIE9Q RU5TU0xfRklQUworK2ludCBwcml2YXRlX01EMl9Jbml0KE1EMl9DVFggKmMpOworKyNlbmRpZgor IGludCBNRDJfSW5pdChNRDJfQ1RYICpjKTsKKyBpbnQgTUQyX1VwZGF0ZShNRDJfQ1RYICpjLCBj b25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgTUQyX0ZpbmFsKHVu c2lnbmVkIGNoYXIgKm1kLCBNRDJfQ1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZDQvbWQ0X2Rn c3QuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzCTIwMDct MDEtMjEgMTQ6MDc6MTEuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L21kNC9tZDRfZGdzdC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAt NTksNiArNTksMTEgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAibWQ0X2xvY2wu aCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2VuZGlmCisrCisgCisgY29uc3QgY2hhciBNRDRfdmVyc2lvbltdPSJNRDQiIE9QRU5TU0xfVkVS U0lPTl9QVEVYVDsKKyAKK0BAIC03MCw3ICs3NSw3IEBAIGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25b XT0iTUQ0IiBPUEVOU1NMX1YKKyAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4 OThiYWRjZmVMCisgI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2 TAorIAorLWludCBNRDRfSW5pdChNRDRfQ1RYICpjKQorK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChN RDQpCisgCXsKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPkE9SU5JVF9EQVRBX0E7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQ0L21kNC5oLmZpcHMgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL21kNC9tZDQuaAorLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZDQvbWQ0 LmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9tZDQvbWQ0LmgJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAy MDAKK0BAIC0xMDUsNiArMTA1LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTUQ0c3RhdGVfc3QKKyAJdW5z aWduZWQgaW50IG51bTsKKyAJfSBNRDRfQ1RYOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytp bnQgcHJpdmF0ZV9NRDRfSW5pdChNRDRfQ1RYICpjKTsKKysjZW5kaWYKKyBpbnQgTUQ0X0luaXQo TUQ0X0NUWCAqYyk7CisgaW50IE1ENF9VcGRhdGUoTUQ0X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0 YSwgc2l6ZV90IGxlbik7CisgaW50IE1ENF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgTUQ0X0NU WCAqYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlw cyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjExLjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYwkyMDEwLTA2 LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTU5LDYgKzU5LDExIEBACisgI2luY2x1 ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgIm1kNV9sb2NsLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wv b3BlbnNzbHYuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworIAorIGNvbnN0IGNo YXIgTUQ1X3ZlcnNpb25bXT0iTUQ1IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitAQCAtNzAs NyArNzUsNyBAQCBjb25zdCBjaGFyIE1ENV92ZXJzaW9uW109Ik1ENSIgT1BFTlNTTF9WCisgI2Rl ZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAorICNkZWZpbmUgSU5J VF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKyAKKy1pbnQgTUQ1X0luaXQoTUQ1 X0NUWCAqYykKKytGSVBTX05PTl9GSVBTX01EX0luaXQoTUQ1KQorIAl7CisgCW1lbXNldCAoYyww LHNpemVvZigqYykpOworIAljLT5BPUlOSVRfREFUQV9BOworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL21kNS9tZDUuaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZDUvbWQ1LmgK Ky0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQ1L21kNS5oLmZpcHMJMjAxMC0wNi0wNCAxMjoy NToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQ1L21kNS5o CTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMTA1LDYgKzEwNSw5IEBA IHR5cGVkZWYgc3RydWN0IE1ENXN0YXRlX3N0CisgCXVuc2lnbmVkIGludCBudW07CisgCX0gTUQ1 X0NUWDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfTUQ1X0luaXQoTUQ1 X0NUWCAqYyk7CisrI2VuZGlmCisgaW50IE1ENV9Jbml0KE1ENV9DVFggKmMpOworIGludCBNRDVf VXBkYXRlKE1ENV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBN RDVfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1ENV9DVFggKmMpOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL21lbS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21lbS5jCist LS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21lbS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1Nzo0Ny4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWVtLmMJMjAxMC0wNi0w NCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIHZv aWQgKCpmcmVlX2xvY2tlZF9mdW5jKSh2b2lkICopIAorIAorIC8qIG1heSBiZSBjaGFuZ2VkIGFz IGxvbmcgYXMgJ2FsbG93X2N1c3RvbWl6ZV9kZWJ1ZycgaXMgc2V0ICovCisgLyogWFhYIHVzZSBj b3JyZWN0IGZ1bmN0aW9uIHBvaW50ZXIgdHlwZXMgKi8KKy0jaWZkZWYgQ1JZUFRPX01ERUJVRwor KyNpZiBkZWZpbmVkKENSWVBUT19NREVCVUcpICYmICFkZWZpbmVkKE9QRU5TU0xfRklQUykKKyAv KiB1c2UgZGVmYXVsdCBmdW5jdGlvbnMgZnJvbSBtZW1fZGJnLmMgKi8KKyBzdGF0aWMgdm9pZCAo Km1hbGxvY19kZWJ1Z19mdW5jKSh2b2lkICosaW50LGNvbnN0IGNoYXIgKixpbnQsaW50KQorIAk9 IENSWVBUT19kYmdfbWFsbG9jOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL29faW5p dC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL29faW5pdC5jCistLS0gb3BlbnNzbC0xLjAu MGEvY3J5cHRvL29faW5pdC5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vb19pbml0LmMJMjAxMC0wNi0wNCAxMjoyNTox NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsODAgQEAKKysvKiBvX2luaXQuYyAqLworKy8q IFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0 aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5 cmlnaHQgKGMpIDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisr ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisr ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9y Zy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisr ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0 amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8ZV9vcy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKworKy8qIFBlcmZvcm0gYW55IGVzc2VudGlhbCBPcGVu U1NMIGluaXRpYWxpemF0aW9uIG9wZXJhdGlvbnMuCisrICogQ3VycmVudGx5IG9ubHkgc2V0cyBG SVBTIGNhbGxiYWNrcworKyAqLworKworK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCkK KysJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJc3RhdGljIGludCBkb25lID0gMDsKKysJaWYg KCFkb25lKQorKwkJeworKyNpZmRlZiBDUllQVE9fTURFQlVHCisrCQlDUllQVE9fbWFsbG9jX2Rl YnVnX2luaXQoKTsKKysjZW5kaWYKKysJCWRvbmUgPSAxOworKwkJfQorKyNlbmRpZgorKwl9Cisr CQkKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZp cHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL29wZW5zc2xjb25mLmguaW4KKy0tLSBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzCTIwMDUtMTItMTYgMTE6Mzc6MjMuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL29wZW5zc2xjb25mLmguaW4J MjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDUgKzEsMjAgQEAKKyAv KiBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbiAqLworIAorKyNpZmRlZiBPUEVOU1NMX0RPSU5HX01B S0VERVBFTkQKKysKKysvKiBJbmNsdWRlIGFueSBzeW1ib2xzIGhlcmUgdGhhdCBoYXZlIHRvIGJl IGV4cGxpY2l0bHkgc2V0IHRvIGVuYWJsZSBhIGZlYXR1cmUKKysgKiB0aGF0IHNob3VsZCBiZSB2 aXNpYmxlIHRvIG1ha2VkZXBlbmQuCisrICoKKysgKiBbT3VyICJtYWtlIGRlcGVuZCIgZG9lc24n dCBhY3R1YWxseSBsb29rIGF0IHRoaXMsIHdlIHVzZSBhY3R1YWwgYnVpbGQgc2V0dGluZ3MKKysg KiBpbnN0ZWFkOyB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSB0byByZW1vdmUgc3ViZGlyZWN0b3Jp ZXMgd2l0aCBkaXNhYmxlZCBhbGdvcml0aG1zLl0KKysgKi8KKysKKysjaWZuZGVmIE9QRU5TU0xf RklQUworKyNkZWZpbmUgT1BFTlNTTF9GSVBTCisrI2VuZGlmCisrCisrI2VuZGlmCisrCisgLyog R2VuZXJhdGUgODAzODYgY29kZT8gKi8KKyAjdW5kZWYgSTM4Nl9PTkxZCisgCitkaWZmIC11cCBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYy5maXBzIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3BrY3Mx Mi9wMTJfY3J0LmMuZmlwcwkyMDA5LTAzLTA5IDE0OjA4OjA0LjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCTIwMTAtMDYtMDQgMTI6MjU6 MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNTksNiArNTksMTAgQEAKKyAjaW5jbHVkZSA8c3RkaW8u aD4KKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4K KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRp ZgorKworIAorIAorIHN0YXRpYyBpbnQgcGtjczEyX2FkZF9iYWcoU1RBQ0tfT0YoUEtDUzEyX1NB RkVCQUcpICoqcGJhZ3MsIFBLQ1MxMl9TQUZFQkFHICpiYWcpOworQEAgLTkwLDcgKzk0LDE0IEBA IFBLQ1MxMiAqUEtDUzEyX2NyZWF0ZShjaGFyICpwYXNzLCBjaGFyICoKKyAKKyAJLyogU2V0IGRl ZmF1bHRzICovCisgCWlmICghbmlkX2NlcnQpCisrCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwkJaWYgKEZJUFNfbW9kZSgpKQorKwkJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNf S2V5X1RyaXBsZURFU19DQkM7CisrCQllbHNlCisrI2VuZGlmCisgCQluaWRfY2VydCA9IE5JRF9w YmVfV2l0aFNIQTFBbmQ0MEJpdFJDMl9DQkM7CisrCQl9CisgCWlmICghbmlkX2tleSkKKyAJCW5p ZF9rZXkgPSBOSURfcGJlX1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKKyAJaWYgKCFp dGVyKQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMJMjAwOS0wMS0wMyAxMDoyNTozMi4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmFuZC9tZF9yYW5kLmMJMjAxMC0wNi0w NCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjYsNiArMTI2LDEwIEBACisgCisgI2lu Y2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysK KyAKKyAjaWZkZWYgQk5fREVCVUcKKyAjIGRlZmluZSBQUkVESUNUCitAQCAtMzQyLDYgKzM0Niwx NCBAQCBzdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoCisgI2VuZGlmCisg CWludCBkb19zdGlyX3Bvb2wgPSAwOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQ U19tb2RlKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9TU0xFQVlfUkFORF9CWVRF UyxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKyNl bmRpZgorKworICNpZmRlZiBQUkVESUNUCisgCWlmIChyYW5kX3ByZWRpY3RhYmxlKQorIAkJewor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYy5maXBzIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9yYW5kL3JhbmRfZXJyLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vcmFuZC9yYW5kX2Vyci5jLmZpcHMJMjAwNi0xMS0yMSAyMjoyOTo0MS4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jCTIwMTAtMDYtMDQg MTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNzAsNiArNzAsMTMgQEAKKyAKKyBzdGF0aWMg RVJSX1NUUklOR19EQVRBIFJBTkRfc3RyX2Z1bmN0c1tdPQorIAl7Cisre0VSUl9GVU5DKFJBTkRf Rl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QpLAkiRU5HX1JBTkRfR0VUX1JBTkRfTUVUSE9EIn0s Cisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkQpLAkiRklQU19SQU5EIn0sCisre0VSUl9GVU5D KFJBTkRfRl9GSVBTX1JBTkRfQllURVMpLAkiRklQU19SQU5EX0JZVEVTIn0sCisre0VSUl9GVU5D KFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RUKSwJIkZJUFNfUkFORF9TRVRfRFQifSwKKyt7RVJSX0ZV TkMoUkFORF9GX0ZJUFNfU0VUX0RUKSwJIkZJUFNfU0VUX0RUIn0sCisre0VSUl9GVU5DKFJBTkRf Rl9GSVBTX1NFVF9QUk5HX1NFRUQpLAkiRklQU19TRVRfUFJOR19TRUVEIn0sCisre0VSUl9GVU5D KFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUpLAkiRklQU19TRVRfVEVTVF9NT0RFIn0sCisge0VS Ul9GVU5DKFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRCksCSJSQU5EX2dldF9yYW5kX21ldGhv ZCJ9LAorIHtFUlJfRlVOQyhSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMpLAkiU1NMRUFZX1JBTkRf QllURVMifSwKKyB7MCxOVUxMfQorQEAgLTc3LDcgKzg0LDE3IEBAIHN0YXRpYyBFUlJfU1RSSU5H X0RBVEEgUkFORF9zdHJfZnVuY3RzW10KKyAKKyBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJBTkRf c3RyX3JlYXNvbnNbXT0KKyAJeworK3tFUlJfUkVBU09OKFJBTkRfUl9OT05fRklQU19NRVRIT0Qp ICAgICAgLCJub24gZmlwcyBtZXRob2QifSwKKyt7RVJSX1JFQVNPTihSQU5EX1JfTk9UX0lOX1RF U1RfTU9ERSkgICAgICwibm90IGluIHRlc3QgbW9kZSJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9O T19LRVlfU0VUKSAgICAgICAgICAgLCJubyBrZXkgc2V0In0sCisre0VSUl9SRUFTT04oUkFORF9S X1BSTkdfQVNLSU5HX0ZPUl9UT09fTVVDSCksInBybmcgYXNraW5nIGZvciB0b28gbXVjaCJ9LAor K3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0VSUk9SKSAgICAgICAgICAgLCJwcm5nIGVycm9yIn0s Cisre0VSUl9SRUFTT04oUkFORF9SX1BSTkdfS0VZRUQpICAgICAgICAgICAsInBybmcga2V5ZWQi fSwKKyt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19OT1RfUkVLRVlFRCkgICAgICwicHJuZyBub3Qg cmVrZXllZCJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRCkgICAgLCJw cm5nIG5vdCByZXNlZWRlZCJ9LAorIHtFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9TRUVERUQp ICAgICAgLCJQUk5HIG5vdCBzZWVkZWQifSwKKyt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19TRUVE X01VU1RfTk9UX01BVENIX0tFWSksInBybmcgc2VlZCBtdXN0IG5vdCBtYXRjaCBrZXkifSwKKyt7 RVJSX1JFQVNPTihSQU5EX1JfUFJOR19TVFVDSykgICAgICAgICAgICwicHJuZyBzdHVjayJ9LAor IHswLE5VTEx9CisgCX07CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmFuZC9y YW5kLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmFuZC9yYW5kLmgKKy0tLSBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE0LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYW5kL3JhbmQuaAkyMDEwLTA2 LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTEyOCwxMSArMTI4LDI4IEBAIHZvaWQg RVJSX2xvYWRfUkFORF9zdHJpbmdzKHZvaWQpOworIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgUkFO RCBmdW5jdGlvbnMuICovCisgCisgLyogRnVuY3Rpb24gY29kZXMuICovCisrI2RlZmluZSBSQU5E X0ZfRU5HX1JBTkRfR0VUX1JBTkRfTUVUSE9ECQkJIDEwOAorKyNkZWZpbmUgUkFORF9GX0ZJUFNf UkFORAkJCQkgMTAzCisrI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMDIKKysj ZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RUCQkJCSAxMDYKKysjZGVmaW5lIFJBTkRfRl9G SVBTX1NFVF9EVAkJCQkgMTA0CisrI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVECQkJ IDEwNworKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERQkJCSAxMDUKKyAjZGVmaW5l IFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRAkJCSAxMDEKKyAjZGVmaW5lIFJBTkRfRl9TU0xF QVlfUkFORF9CWVRFUwkJCSAxMDAKKyAKKyAvKiBSZWFzb24gY29kZXMuICovCisrI2RlZmluZSBS QU5EX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDUKKysjZGVmaW5lIFJBTkRfUl9OT1RfSU5fVEVT VF9NT0RFCQkJCSAxMDYKKysjZGVmaW5lIFJBTkRfUl9OT19LRVlfU0VUCQkJCSAxMDcKKysjZGVm aW5lIFJBTkRfUl9QUk5HX0FTS0lOR19GT1JfVE9PX01VQ0gJCQkgMTAxCisrI2RlZmluZSBSQU5E X1JfUFJOR19FUlJPUgkJCQkgMTA4CisrI2RlZmluZSBSQU5EX1JfUFJOR19LRVlFRAkJCQkgMTA5 CisrI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVLRVlFRAkJCQkgMTAyCisrI2RlZmluZSBSQU5E X1JfUFJOR19OT1RfUkVTRUVERUQJCQkgMTAzCisgI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfU0VF REVECQkJCSAxMDAKKysjZGVmaW5lIFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZ CQkgMTEwCisrI2RlZmluZSBSQU5EX1JfUFJOR19TVFVDSwkJCQkgMTA0CisgCisgI2lmZGVmICBf X2NwbHVzcGx1cworIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYW5kL3JhbmRf bGliLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jCistLS0gb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL3JhbmQvcmFuZF9saWIuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6 MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JhbmQvcmFuZF9s aWIuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTYwLDYgKzYwLDEy IEBACisgI2luY2x1ZGUgPHRpbWUuaD4KKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVk ZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgInJhbmRfbGNsLmgiCisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzX3JhbmQuaD4KKysjZW5kaWYKKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgI2lu Y2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+CisgI2VuZGlmCitAQCAtMTAyLDggKzEwOCwxOSBAQCBj b25zdCBSQU5EX01FVEhPRCAqUkFORF9nZXRfcmFuZF9tZXRob2QoCisgCQkJZnVuY3RfcmVmID0g ZTsKKyAJCWVsc2UKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQkJZGVmYXVsdF9S QU5EX21ldGggPSBGSVBTX21vZGUoKSA/IEZJUFNfcmFuZF9tZXRob2QoKSA6IFJBTkRfU1NMZWF5 KCk7CisrCQl9CisrCWlmIChGSVBTX21vZGUoKQorKwkJJiYgZGVmYXVsdF9SQU5EX21ldGggIT0g RklQU19yYW5kX2NoZWNrKCkpCisrCSAgICB7CisrCSAgICBSQU5EZXJyKFJBTkRfRl9SQU5EX0dF VF9SQU5EX01FVEhPRCxSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJICAgIHJldHVybiAwOwor KwkgICAgfQorKyNlbHNlCisgCQkJZGVmYXVsdF9SQU5EX21ldGggPSBSQU5EX1NTTGVheSgpOwor IAkJfQorKyNlbmRpZgorIAlyZXR1cm4gZGVmYXVsdF9SQU5EX21ldGg7CisgCX0KKyAKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzIvcmMyLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vcmMyL3JjMi5oCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjMi9yYzIuaC5maXBz CTIwMTAtMDYtMDQgMTI6MjU6MTQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL3JjMi9yYzIuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAg LTc5LDcgKzc5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgcmMyX2tleV9zdAorIAlSQzJfSU5UIGRhdGFb NjRdOworIAl9IFJDMl9LRVk7CisgCistIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMgCisrdm9pZCBw cml2YXRlX1JDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQg Y2hhciAqZGF0YSxpbnQgYml0cyk7CisrI2VuZGlmCisgdm9pZCBSQzJfc2V0X2tleShSQzJfS0VZ ICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsaW50IGJpdHMpOworIHZv aWQgUkMyX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIg Km91dCxSQzJfS0VZICprZXksCisgCQkgICAgIGludCBlbmMpOworZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL3JjMi9yYzJfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3Jj Mi9yYzJfc2tleS5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjMi9yYzJfc2tleS5jLmZp cHMJMjAwNy0wOS0xOCAyMzoxMDozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vcmMyL3JjMl9za2V5LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAy MDAKK0BAIC01Nyw2ICs1NywxMSBAQAorICAqLworIAorICNpbmNsdWRlIDxvcGVuc3NsL3JjMi5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInJjMl9sb2Ns LmgiCisgCisgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5X3RhYmxlWzI1Nl09eworQEAg LTk0LDggKzk5LDIwIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtleV90YWJsZVsyNTYK KyAgKiBCU0FGRSB1c2VzIHRoZSAncmV0YXJkZWQnIHZlcnNpb24uICBXaGF0IEkgcHJldmlvdXNs eSBzaGlwcGVkIGlzCisgICogdGhlIHNhbWUgYXMgc3BlY2lmeWluZyAxMDI0IGZvciB0aGUgJ2Jp dHMnIHBhcmFtZXRlci4gIEJzYWZlIHVzZXMKKyAgKiBhIHZlcnNpb24gd2hlcmUgdGhlIGJpdHMg cGFyYW1ldGVyIGlzIHRoZSBzYW1lIGFzIGxlbio4ICovCisrCisrI2lmZGVmIE9QRU5TU0xfRklQ UworIHZvaWQgUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25l ZCBjaGFyICpkYXRhLCBpbnQgYml0cykKKyAJeworKwlpZiAoRklQU19tb2RlKCkpCisrCQlGSVBT X0JBRF9BQk9SVChSQzIpCisrCXByaXZhdGVfUkMyX3NldF9rZXkoa2V5LCBsZW4sIGRhdGEsIGJp dHMpOworKwl9Cisrdm9pZCBwcml2YXRlX1JDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxl biwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKKysJCQkJCQkJCWludCBiaXRzKQorKyNlbHNl Cisrdm9pZCBSQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmRhdGEsIGludCBiaXRzKQorKyNlbmRpZgorKwl7CisgCWludCBpLGo7CisgCXVuc2ln bmVkIGNoYXIgKms7CisgCVJDMl9JTlQgKmtpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9h c20vcmM0LXMzOTB4LnBsCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9hc20vcmM0LXMz OTB4LnBsLmZpcHMJMjAwOS0wMi0xMiAxNTo0ODo0OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vcmM0L2FzbS9yYzQtczM5MHgucGwJMjAxMC0wNi0wNCAxMjoyNTox NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMDIsNCArMjAyLDYgQEAgUkM0X29wdGlvbnM6CisgLnN0 cmluZwkicmM0KDh4LGNoYXIpIgorIF9fXworIAorKyRjb2RlID1+IHMvUkM0X3NldF9rZXkvcHJp dmF0ZV9SQzRfc2V0X2tleS9nIGlmICgkRU5We0ZJUFN9IG5lICIiKTsKKysKKyBwcmludCAkY29k ZTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwu ZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L2FzbS9yYzQteDg2XzY0LnBsCistLS0gb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbC5maXBzCTIwMDktMDQtMjcg MjE6MzE6MDQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9h c20vcmM0LXg4Nl82NC5wbAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAg LTQ5OSw2ICs0OTksOCBAQCBfX18KKyAKKyAkY29kZSA9fiBzLyMoW2J3ZF0pLyQxL2dtOworIAor KyRjb2RlID1+IHMvUkM0X3NldF9rZXkvcHJpdmF0ZV9SQzRfc2V0X2tleS9nIGlmICgkRU5We0ZJ UFN9IG5lICIiKTsKKysKKyBwcmludCAkY29kZTsKKyAKKyBjbG9zZSBTVERPVVQ7CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsLmZpcHMgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbAorLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9yYzQvYXNtL3JjNC01ODYucGwuZmlwcwkyMDA3LTEyLTAyIDIyOjMyOjAzLjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvYXNtL3JjNC01ODYucGwJMjAxMC0w Ni0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNjYsOCArMTY2LDEyIEBAICRpZHg9 ImVkeCI7CisgCisgJmV4dGVybmFsX2xhYmVsKCJPUEVOU1NMX2lhMzJjYXBfUCIpOworIAorKyRz ZXRrZXlmdW5jID0gIlJDNF9zZXRfa2V5IjsKKyskc2V0a2V5ZnVuYyA9ICJwcml2YXRlX1JDNF9z ZXRfa2V5IiBpZiAoJEVOVntGSVBTfSBuZSAiIik7CisrCisrCisgIyB2b2lkIFJDNF9zZXRfa2V5 KFJDNF9LRVkgKmtleSxpbnQgbGVuLGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworLSZmdW5j dGlvbl9iZWdpbigiUkM0X3NldF9rZXkiKTsKKysmZnVuY3Rpb25fYmVnaW4oJHNldGtleWZ1bmMp OworIAkmbW92CSgkb3V0LCZ3cGFyYW0oMCkpOwkJIyBsb2FkIGtleQorIAkmbW92CSgkaWRpLCZ3 cGFyYW0oMSkpOwkJIyBsb2FkIGxlbgorIAkmbW92CSgkaW5wLCZ3cGFyYW0oMikpOwkJIyBsb2Fk IGRhdGEKK0BAIC0yNDUsNyArMjQ5LDcgQEAgJGlkeD0iZWR4IjsKKyAJJnhvcgkoImVheCIsImVh eCIpOworIAkmbW92CSgmRFdQKC04LCRvdXQpLCJlYXgiKTsJCSMga2V5LT54PTA7CisgCSZtb3YJ KCZEV1AoLTQsJG91dCksImVheCIpOwkJIyBrZXktPnk9MDsKKy0mZnVuY3Rpb25fZW5kKCJSQzRf c2V0X2tleSIpOworKyZmdW5jdGlvbl9lbmQoJHNldGtleWZ1bmMpOworIAorICMgY29uc3QgY2hh ciAqUkM0X29wdGlvbnModm9pZCk7CisgJmZ1bmN0aW9uX2JlZ2luX0IoIlJDNF9vcHRpb25zIik7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L01ha2VmaWxlLmZpcHMgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL3JjNC9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9y YzQvTWFrZWZpbGUuZmlwcwkyMDA5LTAyLTExIDExOjAxOjM2LjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvTWFrZWZpbGUJMjAxMC0wNi0wNCAxMjoyNToxNS4w MDAwMDAwMDAgKzAyMDAKK0BAIC0yMSw4ICsyMSw4IEBAIFRFU1Q9cmM0dGVzdC5jCisgQVBQUz0K KyAKKyBMSUI9JChUT1ApL2xpYmNyeXB0by5hCistTElCU1JDPXJjNF9za2V5LmMgcmM0X2VuYy5j CistTElCT0JKPSQoUkM0X0VOQykKKytMSUJTUkM9cmM0X3NrZXkuYyByYzRfZW5jLmMgcmM0X2Zi bGsuYworK0xJQk9CSj0kKFJDNF9FTkMpIHJjNF9mYmxrLm8KKyAKKyBTUkM9ICQoTElCU1JDKQor IAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9yYzRfZmJsay5jLmZpcHMgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9yYzRfZmJsay5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL3JjNC9yYzRfZmJsay5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L3JjNF9mYmxrLmMJMjAxMC0wNi0wNCAx MjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNzUgQEAKKysvKiBjcnlwdG8vcmM0 L3JjNF9mYmxrLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZl QG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisr ICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4K KysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNl bnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKworKyNpbmNsdWRlIDxvcGVuc3NsL3Jj NC5oPgorKyNpbmNsdWRlICJyYzRfbG9jbC5oIgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2 Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKysvKiBGSVBTIG1vZGUgYmxv Y2tpbmcgZm9yIFJDNCBoYXMgdG8gYmUgZG9uZSBzZXBhcmF0ZWx5IHNpbmNlIFJDNF9zZXRfa2V5 CisrICogbWF5IGJlIGltcGxlbWVudGVkIGluIGFuIGFzc2VtYmx5IGxhbmd1YWdlIGZpbGUuCisr ICovCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3ZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAq a2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKwl7CisrCWlmIChGSVBT X21vZGUoKSkKKysJCUZJUFNfQkFEX0FCT1JUKFJDNCkKKysJcHJpdmF0ZV9SQzRfc2V0X2tleShr ZXksIGxlbiwgZGF0YSk7CisrCX0KKysjZW5kaWYKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9yYzQvcmM0LmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L3JjNC5oCist LS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9yYzQuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6 MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9yYzQuaAky MDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTc4LDYgKzc4LDkgQEAgdHlw ZWRlZiBzdHJ1Y3QgcmM0X2tleV9zdAorIAorICAKKyBjb25zdCBjaGFyICpSQzRfb3B0aW9ucyh2 b2lkKTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrdm9pZCBwcml2YXRlX1JDNF9zZXRfa2V5KFJD NF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisrI2VuZGlm Cisgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmRhdGEpOworIHZvaWQgUkM0KFJDNF9LRVkgKmtleSwgc2l6ZV90IGxlbiwgY29uc3Qg dW5zaWduZWQgY2hhciAqaW5kYXRhLAorIAkJdW5zaWduZWQgY2hhciAqb3V0ZGF0YSk7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L3JjNF9za2V5LmMuZmlwcyBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vcmM0L3JjNF9za2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0 L3JjNF9za2V5LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjEzLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvcmM0X3NrZXkuYwkyMDEwLTA2LTA0IDEyOjI1OjE1 LjAwMDAwMDAwMCArMDIwMAorQEAgLTU5LDYgKzU5LDExIEBACisgI2luY2x1ZGUgPG9wZW5zc2wv cmM0Lmg+CisgI2luY2x1ZGUgInJjNF9sb2NsLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNz bHYuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworIAorIGNvbnN0IGNoYXIg UkM0X3ZlcnNpb25bXT0iUkM0IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitAQCAtODUsNyAr OTAsMTEgQEAgY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9pZCkKKyAgKiBEYXRlOiBXZWQsIDE0 IFNlcCAxOTk0IDA2OjM1OjMxIEdNVAorICAqLworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt2 b2lkIHByaXZhdGVfUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNp Z25lZCBjaGFyICpkYXRhKQorKyNlbHNlCisgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXks IGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCisrI2VuZGlmCisgCXsKKyAgICAg ICAgIHJlZ2lzdGVyIFJDNF9JTlQgdG1wOworICAgICAgICAgcmVnaXN0ZXIgaW50IGlkMSxpZDI7 CitAQCAtMTI2LDcgKzEzNSwxMiBAQCB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50 IGxlbiwgCisgCQkgKiBtb2R1bGUuLi4KKyAJCSAqCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4K KyAJCSAqLworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCXVuc2lnbmVkIGxvbmcgKmlhMzJjYXBf cHRyID0gT1BFTlNTTF9pYTMyY2FwX2xvYygpOworKwkJaWYgKGlhMzJjYXBfcHRyICYmICgqaWEz MmNhcF9wdHIgJiAoMTw8MjgpKSkgeworKyNlbHNlCisgCQlpZiAoT1BFTlNTTF9pYTMyY2FwX1Ag JiAoMTw8MjgpKSB7CisrI2VuZGlmCisgCQkJdW5zaWduZWQgY2hhciAqY3A9KHVuc2lnbmVkIGNo YXIgKilkOworIAorIAkJCWZvciAoaT0wO2k8MjU2O2krKykgY3BbaV09aTsKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9yaXBlbWQvcmlwZW1kLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vcmlwZW1kL3JpcGVtZC5oCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JpcGVtZC9y aXBlbWQuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAw MDAwMDAwMCArMDIwMAorQEAgLTkxLDYgKzkxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUklQRU1EMTYw c3RhdGVfc3QKKyAJdW5zaWduZWQgaW50ICAgbnVtOworIAl9IFJJUEVNRDE2MF9DVFg7CisgCisr I2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBwcml2YXRlX1JJUEVNRDE2MF9Jbml0KFJJUEVNRDE2 MF9DVFggKmMpOworKyNlbmRpZgorIGludCBSSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpj KTsKKyBpbnQgUklQRU1EMTYwX1VwZGF0ZShSSVBFTUQxNjBfQ1RYICpjLCBjb25zdCB2b2lkICpk YXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgUklQRU1EMTYwX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1k LCBSSVBFTUQxNjBfQ1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yaXBl bWQvcm1kX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3Qu YworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYy5maXBzCTIwMDct MDEtMjEgMTQ6MDc6MTMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L3JpcGVtZC9ybWRfZGdzdC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitA QCAtNTksNiArNTksMTEgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAicm1kX2xv Y2wuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2VuZGlmCisrCisgCisgY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYw IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitAQCAtNjksNyArNzQsNyBAQCBjb25zdCBjaGFy IFJNRDE2MF92ZXJzaW9uW109IlJJUEUtTUQxNjAiCisgICAgICB2b2lkIHJpcGVtZDE2MF9ibG9j ayhSSVBFTUQxNjBfQ1RYICpjLCB1bnNpZ25lZCBsb25nICpwLHNpemVfdCBudW0pOworICMgIGVu ZGlmCisgCistaW50IFJJUEVNRDE2MF9Jbml0KFJJUEVNRDE2MF9DVFggKmMpCisrRklQU19OT05f RklQU19NRF9Jbml0KFJJUEVNRDE2MCkKKyAJeworIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsK KyAJYy0+QT1SSVBFTUQxNjBfQTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2Ev cnNhX2VheS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2FfZWF5LmMKKy0tLSBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzCTIwMDgtMDktMTQgMTU6NTE6 NDQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2FfZWF5 LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMTQsNiArMTE0LDEw IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4K KyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cisr I2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYK KyAKKyAjaWZuZGVmIFJTQV9OVUxMCisgCitAQCAtMTM4LDcgKzE0Miw3IEBAIHN0YXRpYyBSU0Ff TUVUSE9EIHJzYV9wa2NzMV9lYXlfbWV0aD17CisgCUJOX21vZF9leHBfbW9udCwgLyogWFhYIHBy b2JhYmx5IHdlIHNob3VsZCBub3QgdXNlIE1vbnRnb21lcnkgaWYgIGUgPT0gMyAqLworIAlSU0Ff ZWF5X2luaXQsCisgCVJTQV9lYXlfZmluaXNoLAorLQkwLCAvKiBmbGFncyAqLworKwlSU0FfRkxB R19GSVBTX01FVEhPRCwgLyogZmxhZ3MgKi8KKyAJTlVMTCwKKyAJMCwgLyogcnNhX3NpZ24gKi8K KyAJMCwgLyogcnNhX3ZlcmlmeSAqLworQEAgLTE1MCw2ICsxNTQsMTYgQEAgY29uc3QgUlNBX01F VEhPRCAqUlNBX1BLQ1MxX1NTTGVheSh2b2lkKQorIAlyZXR1cm4oJnJzYV9wa2NzMV9lYXlfbWV0 aCk7CisgCX0KKyAKKysvKiBVc2FnZSBleGFtcGxlOworKyAqICAgIE1PTlRfSEVMUEVSKHJzYSwg Ym5fY3R4LCBwLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSwgZ290byBlcnIp OworKyAqLworKyNkZWZpbmUgTU9OVF9IRUxQRVIocnNhLCBjdHgsIG0sIHByZV9jb25kLCBlcnJf aW5zdHIpIFwKKysJaWYoKHByZV9jb25kKSAmJiAoKHJzYSktPl9tZXRob2RfbW9kXyMjbSA9PSBO VUxMKSAmJiBcCisrCQkJIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJigocnNhKS0+X21ldGhvZF9t b2RfIyNtKSwgXAorKwkJCQlDUllQVE9fTE9DS19SU0EsIFwKKysJCQkJKHJzYSktPm0sIChjdHgp KSkgXAorKwkJZXJyX2luc3RyCisrCisgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19lbmNyeXB0 KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLAorIAkgICAgIHVuc2lnbmVkIGNo YXIgKnRvLCBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCisgCXsKK0BAIC0xNTgsNiArMTcyLDIzIEBA IHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmwKKyAJdW5zaWduZWQgY2hh ciAqYnVmPU5VTEw7CisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQ UworKwlpZihGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgp KQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULEZJUFNf Ul9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJaWYg KEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMp CisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9L RVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAtMTsKKysJCQl9CisrCQl9CisrI2VuZGlm CisrCisgCWlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNf QklUUykKKyAJCXsKKyAJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0Ff Ul9NT0RVTFVTX1RPT19MQVJHRSk7CitAQCAtMjIzLDkgKzI1NCw3IEBAIHN0YXRpYyBpbnQgUlNB X2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmwKKyAJCWdvdG8gZXJyOworIAkJfQorIAorLQlpZiAo cnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykKKy0JCWlmICghQk5fTU9OVF9DVFhf c2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwg Y3R4KSkKKy0JCQlnb3RvIGVycjsKKysJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+Zmxh Z3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKKyAKKyAJaWYgKCFyc2EtPm1l dGgtPmJuX21vZF9leHAocmV0LGYscnNhLT5lLHJzYS0+bixjdHgsCisgCQlyc2EtPl9tZXRob2Rf bW9kX24pKSBnb3RvIGVycjsKK0BAIC0zNTUsNiArMzg0LDIzIEBAIHN0YXRpYyBpbnQgUlNBX2Vh eV9wcml2YXRlX2VuY3J5cHQoaW50IGYKKyAJaW50IGxvY2FsX2JsaW5kaW5nID0gMDsKKyAJQk5f QkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlm IChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJ eworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRCk7CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJaWYgKEJOX251 bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCisrCQkJ eworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfS0VZX1NJ WkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJfQorKwkJfQorKyNlbmRpZgorKwor IAlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOworIAlCTl9DVFhfc3Rh cnQoY3R4KTsKKyAJZiAgID0gQk5fQ1RYX2dldChjdHgpOworQEAgLTQzMiw5ICs0NzgsNyBAQCBz dGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGludCBmCisgCQllbHNlCisgCQkJZD0g cnNhLT5kOworIAorLQkJaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCist CQkJaWYoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRP X0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCistCQkJCWdvdG8gZXJyOworKwkJTU9OVF9IRUxQRVIo cnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdvdG8gZXJy KTsKKyAKKyAJCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLGQscnNhLT5uLGN0eCwK KyAJCQkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290byBlcnI7CitAQCAtNDg4LDYgKzUzMiwyMyBA QCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9kZWNyeXB0KGludCBmCisgCWludCBsb2NhbF9i bGluZGluZyA9IDA7CisgCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7CisgCisrI2lmZGVm IE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisrCQl7CisrCQlpZihGSVBTX3NlbGZ0 ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVf REVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJCWdvdG8gZXJyOworKwkJ CX0KKysKKysJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5f TU9EVUxVU19CSVRTKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0RF Q1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0K KysJCX0KKysjZW5kaWYKKysKKyAJaWYoKGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290 byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworIAlmICAgPSBCTl9DVFhfZ2V0KGN0eCk7CitA QCAtNTU1LDkgKzYxNiw3IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2RlY3J5cHQoaW50 IGYKKyAJCWVsc2UKKyAJCQlkID0gcnNhLT5kOworIAorLQkJaWYgKHJzYS0+ZmxhZ3MgJiBSU0Ff RkxBR19DQUNIRV9QVUJMSUMpCistCQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2Et Pl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQorLQkJCQlnb3Rv IGVycjsKKysJCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdf Q0FDSEVfUFVCTElDLCBnb3RvIGVycik7CisgCQlpZiAoIXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChy ZXQsZixkLHJzYS0+bixjdHgsCisgCQkJCXJzYS0+X21ldGhvZF9tb2RfbikpCisgCQkgIGdvdG8g ZXJyOworQEAgLTYxNyw2ICs2NzYsMjMgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19kZWNy eXB0KGludCBmbAorIAl1bnNpZ25lZCBjaGFyICpidWY9TlVMTDsKKyAJQk5fQ1RYICpjdHg9TlVM TDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJ CWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JT QV9FQVlfUFVCTElDX0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQln b3RvIGVycjsKKysJCQl9CisrCisrCQlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xf UlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9F QVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJu IC0xOworKwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKEJOX251bV9iaXRzKHJzYS0+bikg PiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTKQorIAkJeworIAkJUlNBZXJyKFJTQV9GX1JT QV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKK0BAIC02Njcs OSArNzQzLDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19kZWNyeXB0KGludCBmbAorIAkJ Z290byBlcnI7CisgCQl9CisgCistCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVC TElDKQorLQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24s IENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQorLQkJCWdvdG8gZXJyOworKwlNT05UX0hF TFBFUihyc2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290 byBlcnIpOworIAorIAlpZiAoIXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChyZXQsZixyc2EtPmUscnNh LT5uLGN0eCwKKyAJCXJzYS0+X21ldGhvZF9tb2RfbikpIGdvdG8gZXJyOworQEAgLTcxNyw2ICs3 OTEsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfbW9kX2V4cChCSUdOVU0gKnIwLCBjCisgCUJJR05V TSAqcjEsKm0xLCp2cmZ5OworIAlCSUdOVU0gbG9jYWxfZG1wMSxsb2NhbF9kbXExLGxvY2FsX2Ms bG9jYWxfcjE7CisgCUJJR05VTSAqZG1wMSwqZG1xMSwqYywqcHIxOworKwlpbnQgYm5fZmxhZ3M7 CisgCWludCByZXQ9MDsKKyAKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CitAQCAtNzI0LDQxICs3OTks MzEgQEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9leHAoQklHTlVNICpyMCwgYworIAltMSA9IEJO X0NUWF9nZXQoY3R4KTsKKyAJdnJmeSA9IEJOX0NUWF9nZXQoY3R4KTsKKyAKKy0JeworLQkJQklH TlVNIGxvY2FsX3AsIGxvY2FsX3E7CistCQlCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEw7Cist CistCQkvKiBNYWtlIHN1cmUgQk5fbW9kX2ludmVyc2UgaW4gTW9udGdvbWVyeSBpbnRpYWxpemF0 aW9uIHVzZXMgdGhlCistCQkgKiBCTl9GTEdfQ09OU1RUSU1FIGZsYWcgKHVubGVzcyBSU0FfRkxB R19OT19DT05TVFRJTUUgaXMgc2V0KQorLQkJICovCistCQlpZiAoIShyc2EtPmZsYWdzICYgUlNB X0ZMQUdfTk9fQ09OU1RUSU1FKSkKKy0JCQl7CistCQkJQk5faW5pdCgmbG9jYWxfcCk7CistCQkJ cCA9ICZsb2NhbF9wOworLQkJCUJOX3dpdGhfZmxhZ3MocCwgcnNhLT5wLCBCTl9GTEdfQ09OU1RU SU1FKTsKKy0KKy0JCQlCTl9pbml0KCZsb2NhbF9xKTsKKy0JCQlxID0gJmxvY2FsX3E7CistCQkJ Qk5fd2l0aF9mbGFncyhxLCByc2EtPnEsIEJOX0ZMR19DT05TVFRJTUUpOworLQkJCX0KKy0JCWVs c2UKKy0JCQl7CistCQkJcCA9IHJzYS0+cDsKKy0JCQlxID0gcnNhLT5xOworLQkJCX0KKysJLyog TWFrZSBzdXJlIG1vZF9pbnZlcnNlIGluIG1vbnRnb21lcmV5IGludGlhbGl6YXRpb24gdXNlIGNv cnJlY3QgCisrCSAqIEJOX0ZMR19DT05TVFRJTUUgZmxhZy4KKysJICovCisrCWJuX2ZsYWdzID0g cnNhLT5wLT5mbGFnczsKKysJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElN RSkpCisrCQl7CisrCQlyc2EtPnAtPmZsYWdzIHw9IEJOX0ZMR19DT05TVFRJTUU7CisrCQl9Cisr CU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBwLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJ VkFURSwgZ290byBlcnIpOworKwkvKiBXZSByZXN0b3JlIGJuX2ZsYWdzIGJhY2sgKi8KKysJcnNh LT5wLT5mbGFncyA9IGJuX2ZsYWdzOworIAorLQkJaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19D QUNIRV9QUklWQVRFKQorLQkJCXsKKy0JCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJz YS0+X21ldGhvZF9tb2RfcCwgQ1JZUFRPX0xPQ0tfUlNBLCBwLCBjdHgpKQorLQkJCQlnb3RvIGVy cjsKKy0JCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfcSwg Q1JZUFRPX0xPQ0tfUlNBLCBxLCBjdHgpKQorLQkJCQlnb3RvIGVycjsKKy0JCQl9CistCX0KKysg ICAgICAgIC8qIE1ha2Ugc3VyZSBtb2RfaW52ZXJzZSBpbiBtb250Z29tZXJleSBpbnRpYWxpemF0 aW9uIHVzZSBjb3JyZWN0CisrICAgICAgICAgKiBCTl9GTEdfQ09OU1RUSU1FIGZsYWcuCisrICAg ICAgICAgKi8KKysJYm5fZmxhZ3MgPSByc2EtPnEtPmZsYWdzOworKwlpZiAoIShyc2EtPmZsYWdz ICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKKysJCXsKKysJCXJzYS0+cS0+ZmxhZ3MgfD0gQk5f RkxHX0NPTlNUVElNRTsKKysJCX0KKysJTU9OVF9IRUxQRVIocnNhLCBjdHgsIHEsIHJzYS0+Zmxh Z3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFLCBnb3RvIGVycik7CisrCS8qIFdlIHJlc3RvcmUg Ym5fZmxhZ3MgYmFjayAqLworKwlyc2EtPnEtPmZsYWdzID0gYm5fZmxhZ3M7CQorIAorLQlpZiAo cnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykKKy0JCWlmICghQk5fTU9OVF9DVFhf c2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwg Y3R4KSkKKy0JCQlnb3RvIGVycjsKKysJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+Zmxh Z3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKKyAKKyAJLyogY29tcHV0ZSBJ IG1vZCBxICovCisgCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQor QEAgLTg3NSw2ICs5NDAsOSBAQCBlcnI6CisgCisgc3RhdGljIGludCBSU0FfZWF5X2luaXQoUlNB ICpyc2EpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2so KTsKKysjZW5kaWYKKyAJcnNhLT5mbGFnc3w9UlNBX0ZMQUdfQ0FDSEVfUFVCTElDfFJTQV9GTEFH X0NBQ0hFX1BSSVZBVEU7CisgCXJldHVybigxKTsKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3Jz YV9lcnIuYworLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMJMjAw OC0xMi0yOSAxNzoxMTo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vcnNhL3JzYV9lcnIuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAg LTExMSw4ICsxMTEsMTIgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1td PQorIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFJJTlRfRlApLAkiUlNBX3ByaW50X2ZwIn0sCisge0VS Ul9GVU5DKFJTQV9GX1JTQV9QUklWX0RFQ09ERSksCSJSU0FfUFJJVl9ERUNPREUifSwKKyB7RVJS X0ZVTkMoUlNBX0ZfUlNBX1BSSVZfRU5DT0RFKSwJIlJTQV9QUklWX0VOQ09ERSJ9LAorK3tFUlJf RlVOQyhSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUKSwJIlJTQV9wcml2YXRlX2VuY3J5cHQifSwK KyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQl9ERUNPREUpLAkiUlNBX1BVQl9ERUNPREUifSwKKyt7 RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUKSwJIlJTQV9wdWJsaWNfZGVjcnlwdCJ9 LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5k aW5nIn0sCisre0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QpLAkiUlNBX3Nl dF9kZWZhdWx0X21ldGhvZCJ9LAorK3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX01FVEhPRCksCSJS U0Ffc2V0X21ldGhvZCJ9LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksCSJSU0Ffc2lnbiJ9 LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORyksCSJSU0Ffc2ln bl9BU04xX09DVEVUX1NUUklORyJ9LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfVkVSSUZZKSwJIlJT QV92ZXJpZnkifSwKK0BAIC0xNTUsMTAgKzE1OSwxMiBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRB IFJTQV9zdHJfcmVhc29uc1tdCisge0VSUl9SRUFTT04oUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxM KSAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX0xBU1RfT0NU RVRfSU5WQUxJRCkgICAgLCJsYXN0IG9jdGV0IGludmFsaWQifSwKKyB7RVJSX1JFQVNPTihSU0Ff Ul9NT0RVTFVTX1RPT19MQVJHRSkgICAgICwibW9kdWx1cyB0b28gbGFyZ2UifSwKKyt7RVJSX1JF QVNPTihSU0FfUl9OT05fRklQU19NRVRIT0QpICAgICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCisg e0VSUl9SRUFTT04oUlNBX1JfTk9fUFVCTElDX0VYUE9ORU5UKSAgICAsIm5vIHB1YmxpYyBleHBv bmVudCJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcpLCJu dWxsIGJlZm9yZSBibG9jayBtaXNzaW5nIn0sCisge0VSUl9SRUFTT04oUlNBX1JfTl9ET0VTX05P VF9FUVVBTF9QX1EpICAsIm4gZG9lcyBub3QgZXF1YWwgcCBxIn0sCisge0VSUl9SRUFTT04oUlNB X1JfT0FFUF9ERUNPRElOR19FUlJPUikgICAsIm9hZXAgZGVjb2RpbmcgZXJyb3IifSwKKyt7RVJS X1JFQVNPTihSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKSwib3BlcmF0 aW9uIG5vdCBhbGxvd2VkIGluIGZpcHMgbW9kZSJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX09QRVJB VElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpLCJvcGVyYXRpb24gbm90IHN1cHBv cnRlZCBmb3IgdGhpcyBrZXl0eXBlIn0sCisge0VSUl9SRUFTT04oUlNBX1JfUEFERElOR19DSEVD S19GQUlMRUQpICAsInBhZGRpbmcgY2hlY2sgZmFpbGVkIn0sCisge0VSUl9SRUFTT04oUlNBX1Jf UF9OT1RfUFJJTUUpICAgICAgICAgICAsInAgbm90IHByaW1lIn0sCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9y c2EvcnNhX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlw cwkyMDA3LTAzLTI4IDAyOjE1OjI3LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9yc2EvcnNhX2dlbi5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAw CitAQCAtNjcsNiArNjcsODIgQEAKKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSA8 b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgor KworK3N0YXRpYyBpbnQgZmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDA7CisrCisrdm9pZCBGSVBT X2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKQorKwl7CisrCWZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwg PSAxOworKwl9CisrCisraW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKQorKwl7CisrCWNvbnN0 IHVuc2lnbmVkIGNoYXIgdGJzW10gPSAiUlNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOworKwl1bnNp Z25lZCBjaGFyICpjdGJ1ZiA9IE5VTEwsICpwdGJ1ZiA9IE5VTEw7CisrCWludCBsZW4sIHJldCA9 IDA7CisrCUVWUF9QS0VZICpwazsKKysKKysJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVM TCkKKysJCWdvdG8gZXJyOworKworKwlFVlBfUEtFWV9zZXQxX1JTQShwaywgcnNhKTsKKysKKysJ LyogUGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5jeSBzaWduYXR1cmUgdGVzdCAqLworKwlpZiAo IWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKKysJCQlOVUxMLCAwLCBFVlBf c2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLCBOVUxMKQorKwkJfHwgIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKKysJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBF VlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsIE5VTEwpCisrCQl8fCAhZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhf RkxBR19QQURfUFNTLCBOVUxMKSkKKysJCWdvdG8gZXJyOworKwkvKiBOb3cgcGVyZm9ybSBwYWly d2lzZSBjb25zaXN0ZW5jeSBlbmNyeXB0L2RlY3J5cHQgdGVzdCAqLworKwljdGJ1ZiA9IE9QRU5T U0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOworKwlpZiAoIWN0YnVmKQorKwkJZ290byBlcnI7Cisr CisrCWxlbiA9IFJTQV9wdWJsaWNfZW5jcnlwdChzaXplb2YodGJzKSAtIDEsIHRicywgY3RidWYs IHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOworKwlpZiAobGVuIDw9IDApCisrCQlnb3RvIGVycjsK KysJLyogQ2hlY2sgY2lwaGVydGV4dCBkb2Vzbid0IG1hdGNoIHBsYWludGV4dCAqLworKwlpZiAo KGxlbiA9PSAoc2l6ZW9mKHRicykgLSAxKSkgJiYgIW1lbWNtcCh0YnMsIGN0YnVmLCBsZW4pKQor KwkJZ290byBlcnI7CisrCXB0YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7Cisr CisrCWlmICghcHRidWYpCisrCQlnb3RvIGVycjsKKysJbGVuID0gUlNBX3ByaXZhdGVfZGVjcnlw dChsZW4sIGN0YnVmLCBwdGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7CisrCWlmIChsZW4g IT0gKHNpemVvZih0YnMpIC0gMSkpCisrCQlnb3RvIGVycjsKKysJaWYgKG1lbWNtcChwdGJ1Ziwg dGJzLCBsZW4pKQorKwkJZ290byBlcnI7CisrCisrCXJldCA9IDE7CisrCisrCWlmICghcHRidWYp CisrCQlnb3RvIGVycjsKKysJCisrCWVycjoKKysJaWYgKHJldCA9PSAwKQorKwkJeworKwkJZmlw c19zZXRfc2VsZnRlc3RfZmFpbCgpOworKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19SU0Es RklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKKysJCX0KKysKKysJaWYgKGN0YnVmKQorKwkJ T1BFTlNTTF9mcmVlKGN0YnVmKTsKKysJaWYgKHB0YnVmKQorKwkJT1BFTlNTTF9mcmVlKHB0YnVm KTsKKysJaWYgKHBrKQorKwkJRVZQX1BLRVlfZnJlZShwayk7CisrCisrCXJldHVybiByZXQ7Cisr CX0KKysjZW5kaWYKKyAKKyBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwg aW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwgQk5fR0VOQ0IgKmNiKTsKKyAKK0BAIC05MCw2ICsx NjYsMjMgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIAorIAlpbnQg Yml0c3AsYml0c3Esb2s9IC0xLG49MDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpCisrCSAgICAJeworKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElO X0tFWUdFTixGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgCXJldHVybiAwOwor KwkgICAgCX0KKysKKysJCWlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19C SVRTKQorKwkJICAgIHsKKysJCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4s RklQU19SX0tFWV9UT09fU0hPUlQpOworKwkJICAgIHJldHVybiAwOworKwkJCX0KKysJCX0KKysj ZW5kaWYKKysKKyAJY3R4PUJOX0NUWF9uZXcoKTsKKyAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVy cjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CitAQCAtMjAxLDYgKzI5NCwxNyBAQCBzdGF0aWMgaW50 IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwgCisgCQlwID0gcnNhLT5wOworIAlpZiAoIUJO X21vZF9pbnZlcnNlKHJzYS0+aXFtcCxyc2EtPnEscCxjdHgpKSBnb3RvIGVycjsKKyAKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmIChmaXBzX3Jz YV9wYWlyd2lzZV9mYWlsKQorKwkJCUJOX2FkZF93b3JkKHJzYS0+biwgMSk7CisrCisrCQlpZigh Zmlwc19jaGVja19yc2EocnNhKSkKKysJCSAgICBnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysK KyAJb2s9MTsKKyBlcnI6CisgCWlmIChvayA9PSAtMSkKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9yc2EvcnNhLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYS5oCist LS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2EuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6 MTQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2EuaAky MDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTc0LDYgKzc0LDIxIEBACisg I2Vycm9yIFJTQSBpcyBkaXNhYmxlZC4KKyAjZW5kaWYKKyAKKysvKiBJZiB0aGlzIGZsYWcgaXMg c2V0IHRoZSBSU0EgbWV0aG9kIGlzIEZJUFMgY29tcGxpYW50IGFuZCBjYW4gYmUgdXNlZAorKyAq IGluIEZJUFMgbW9kZS4gVGhpcyBpcyBzZXQgaW4gdGhlIHZhbGlkYXRlZCBtb2R1bGUgbWV0aG9k LiBJZiBhbgorKyAqIGFwcGxpY2F0aW9uIHNldHMgdGhpcyBmbGFnIGluIGl0cyBvd24gbWV0aG9k cyBpdCBpcyBpdHMgcmVwb3NpYmlsaXR5CisrICogdG8gZW5zdXJlIHRoZSByZXN1bHQgaXMgY29t cGxpYW50LgorKyAqLworKworKyNkZWZpbmUgUlNBX0ZMQUdfRklQU19NRVRIT0QJCQkweDA0MDAK KysKKysvKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBvcGVyYXRpb25zIG5vcm1hbGx5IGRpc2Fi bGVkIGluIEZJUFMgbW9kZSBhcmUKKysgKiBwZXJtaXR0ZWQgaXQgaXMgdGhlbiB0aGUgYXBwbGlj YXRpb25zIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZQorKyAqIHVzYWdlIGlzIGNv bXBsaWFudC4KKysgKi8KKysKKysjZGVmaW5lIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XCQkJMHgw NDAwCisrCisgI2lmZGVmICBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAg LTE2NCw2ICsxNzksOCBAQCBzdHJ1Y3QgcnNhX3N0CisgIyBkZWZpbmUgT1BFTlNTTF9SU0FfTUFY X01PRFVMVVNfQklUUwkxNjM4NAorICNlbmRpZgorIAorKyNkZWZpbmUgT1BFTlNTTF9SU0FfRklQ U19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAjaWZuZGVmIE9QRU5TU0xfUlNBX1NNQUxMX01P RFVMVVNfQklUUworICMgZGVmaW5lIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUwkzMDcy CisgI2VuZGlmCitAQCAtMjY3LDYgKzI4NCwxMSBAQCBSU0EgKglSU0FfZ2VuZXJhdGVfa2V5KGlu dCBiaXRzLCB1bnNpZ25lCisgCisgLyogTmV3IHZlcnNpb24gKi8KKyBpbnQJUlNBX2dlbmVyYXRl X2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKKytp bnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBC SUdOVU0gKnExLCBCSUdOVU0gKnEyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdO VU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwKKysJCQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3Qg QklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCisrCQkJY29uc3QgQklHTlVNICplLCBCTl9H RU5DQiAqY2IpOworK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBi aXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7CisgCisgaW50CVJTQV9jaGVja19r ZXkoY29uc3QgUlNBICopOworIAkvKiBuZXh0IDQgcmV0dXJuIC0xIG9uIGVycm9yICovCitAQCAt NDM4LDggKzQ2MCwxMiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOworICNkZWZp bmUgUlNBX0ZfUlNBX1BSSU5UX0ZQCQkJCSAxMTYKKyAjZGVmaW5lIFJTQV9GX1JTQV9QUklWX0RF Q09ERQkJCQkgMTM3CisgI2RlZmluZSBSU0FfRl9SU0FfUFJJVl9FTkNPREUJCQkJIDEzOAorKyNk ZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxNDgKKyAjZGVmaW5lIFJTQV9GX1JT QV9QVUJfREVDT0RFCQkJCSAxMzkKKysjZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVAkJ CSAxNDkKKyAjZGVmaW5lIFJTQV9GX1JTQV9TRVRVUF9CTElORElORwkJCSAxMzYKKysjZGVmaW5l IFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QJCQkgMTUwCisrI2RlZmluZSBSU0FfRl9SU0Ff U0VUX01FVEhPRAkJCQkgMTUxCisgI2RlZmluZSBSU0FfRl9SU0FfU0lHTgkJCQkJIDExNworICNk ZWZpbmUgUlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcJCSAxMTgKKyAjZGVmaW5lIFJT QV9GX1JTQV9WRVJJRlkJCQkJIDExOQorQEAgLTQ3OSwxMCArNTA1LDEyIEBAIHZvaWQgRVJSX2xv YWRfUlNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwJ CQkgMTIwCisgI2RlZmluZSBSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQJCQkgMTM0CisgI2RlZmlu ZSBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRQkJCQkgMTA1CisrI2RlZmluZSBSU0FfUl9OT05fRklQ U19NRVRIT0QJCQkJIDE0OQorICNkZWZpbmUgUlNBX1JfTk9fUFVCTElDX0VYUE9ORU5UCQkJIDE0 MAorICNkZWZpbmUgUlNBX1JfTlVMTF9CRUZPUkVfQkxPQ0tfTUlTU0lORwkJCSAxMTMKKyAjZGVm aW5lIFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9RCQkJIDEyNworICNkZWZpbmUgUlNBX1JfT0FF UF9ERUNPRElOR19FUlJPUgkJCSAxMjEKKysjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfQUxM T1dFRF9JTl9GSVBTX01PREUJIDE1MAorICNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQ T1JURURfRk9SX1RISVNfS0VZVFlQRQkgMTQ4CisgI2RlZmluZSBSU0FfUl9QQURESU5HX0NIRUNL X0ZBSUxFRAkJCSAxMTQKKyAjZGVmaW5lIFJTQV9SX1BfTk9UX1BSSU1FCQkJCSAxMjgKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL3JzYS9yc2FfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3Jz YV9saWIuYy5maXBzCTIwMDktMTItMDkgMTQ6Mzg6MjAuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2FfbGliLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAw MDAwMDAgKzAyMDAKK0BAIC04MCw2ICs4MCwxMyBAQCBSU0EgKlJTQV9uZXcodm9pZCkKKyAKKyB2 b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKKyAJewor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3Mg JiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9E RUZBVUxUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybjsKKysJCX0K KysjZW5kaWYKKyAJZGVmYXVsdF9SU0FfbWV0aCA9IG1ldGg7CisgCX0KKyAKK0BAIC0xMTEsNiAr MTE4LDEzIEBAIGludCBSU0Ffc2V0X21ldGhvZChSU0EgKnJzYSwgY29uc3QgUlNBX00KKyAJLyog TkI6IFRoZSBjYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHNldHRpbmcgYSBtZXRob2QsIHNvIGl0J3Mg bm90IHVwIHRvIHVzCisgCSAqIHRvIGRlYWwgd2l0aCB3aGljaCBFTkdJTkUgaXQgY29tZXMgZnJv bS4gKi8KKyAJY29uc3QgUlNBX01FVEhPRCAqbXRtcDsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CWlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0Qp KQorKwkJeworKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19N RVRIT0QpOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgCW10bXAgPSByc2EtPm1ldGg7 CisgCWlmIChtdG1wLT5maW5pc2gpIG10bXAtPmZpbmlzaChyc2EpOworICNpZm5kZWYgT1BFTlNT TF9OT19FTkdJTkUKK0BAIC0xNjMsNiArMTc3LDE4IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5H SU5FICplbmdpbmUpCisgCQkJfQorIAkJfQorICNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJaWYgKEZJUFNfbW9kZSgpICYmICEocmV0LT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNf TUVUSE9EKSkKKysJCXsKKysJCVJTQWVycihSU0FfRl9SU0FfTkVXX01FVEhPRCwgUlNBX1JfTk9O X0ZJUFNfTUVUSE9EKTsKKysjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisrCQlpZiAocmV0LT5l bmdpbmUpCisrCQkJRU5HSU5FX2ZpbmlzaChyZXQtPmVuZ2luZSk7CisrI2VuZGlmCisrCQlPUEVO U1NMX2ZyZWUocmV0KTsKKysJCXJldHVybiBOVUxMOworKwkJfQorKyNlbmRpZgorIAorIAlyZXQt PnBhZD0wOworIAlyZXQtPnZlcnNpb249MDsKK0BAIC0yOTQsNiArMzIwLDEzIEBAIGludCBSU0Ff cHVibGljX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHUKKyBpbnQgUlNBX3ByaXZhdGVfZW5jcnlw dChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8s CisgCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19B TExPVykpCisrCQl7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1Jf T1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisrCQlyZXR1cm4gMDsKKysJCX0K KysjZW5kaWYKKyAJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGZsZW4sIGZyb20sIHRv LCByc2EsIHBhZGRpbmcpKTsKKyAJfQorIAorQEAgLTMwNiw2ICszMzksMTMgQEAgaW50IFJTQV9w cml2YXRlX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IAorIGludCBSU0FfcHVibGljX2RlY3J5cHQo aW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAor IAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpKQorKwkJeworKwkJUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfT1BF UkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysj ZW5kaWYKKyAJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoZmxlbiwgZnJvbSwgdG8sIHJz YSwgcGFkZGluZykpOworIAl9CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNh L3JzYV9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9zaWduLmMKKy0t LSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDA3LTA0LTI0IDAz OjA1OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2EvcnNh X3NpZ24uYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTEzMCw3ICsx MzAsOCBAQCBpbnQgUlNBX3NpZ24oaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoCisgCQlpMmRf WDUwOV9TSUcoJnNpZywmcCk7CisgCQlzPXRtcHM7CisgCX0KKy0JaT1SU0FfcHJpdmF0ZV9lbmNy eXB0KGkscyxzaWdyZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKKysJLyogTkI6IGNhbGwgdW5k ZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLworKwlpID0g cnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMgPyByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhpLHMsc2ln cmV0LHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAwOworIAlpZiAoaSA8PSAwKQorIAkJcmV0PTA7 CisgCWVsc2UKK0BAIC0xNjEsOCArMTYyLDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlw ZSwgY29uc3QgdW5zaQorIAorIAlpZigoZHR5cGUgPT0gTklEX21kNV9zaGExKSAmJiBybSkKKyAJ CXsKKy0JCWkgPSBSU0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sCistCQkJCQlzaWdidWYs cm0scnNhLFJTQV9QS0NTMV9QQURESU5HKTsKKysJCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVj ID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbiwKKysJCQkJCXNpZ2J1ZixybSxy c2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKKyAJCWlmIChpIDw9IDApCisgCQkJcmV0dXJuIDA7 CisgCQkqcHJtX2xlbiA9IGk7CitAQCAtMTc5LDcgKzE4MCw4IEBAIGludCBpbnRfcnNhX3Zlcmlm eShpbnQgZHR5cGUsIGNvbnN0IHVuc2kKKyAJCQlSU0FlcnIoUlNBX0ZfSU5UX1JTQV9WRVJJRlks UlNBX1JfSU5WQUxJRF9NRVNTQUdFX0xFTkdUSCk7CisgCQkJZ290byBlcnI7CisgCX0KKy0JaT1S U0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURE SU5HKTsKKysJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQg RklQUyBibG9ja2luZyAqLworKwlpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0 aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5H KSA6IDA7CisgCisgCWlmIChpIDw9IDApIGdvdG8gZXJyOworIAorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL3NlZWQvc2VlZC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NlZWQv c2VlZC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NlZWQvc2VlZC5jLmZpcHMJMjAwOC0x Mi0xNiAwODo0MToyMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v c2VlZC9zZWVkLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNCw2 ICszNCw5IEBACisgCisgI2luY2x1ZGUgPG9wZW5zc2wvc2VlZC5oPgorICNpbmNsdWRlICJzZWVk X2xvY2wuaCIKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNlbmRpZgorIAorIHN0YXRpYyBjb25zdCBzZWVkX3dvcmQgU1NbNF1bMjU2XSA9IHsJewor IAkweDI5ODlhMWE4LCAweDA1ODU4MTg0LCAweDE2YzZkMmQ0LCAweDEzYzNkM2QwLCAweDE0NDQ1 MDU0LCAweDFkMGQxMTFjLCAweDJjOGNhMGFjLCAweDI1MDUyMTI0LAorQEAgLTE5Myw3ICsxOTYs MTggQEAgc3RhdGljIGNvbnN0IHNlZWRfd29yZCBLQ1tdID0geworIAlLQzgsCUtDOSwJS0MxMCwJ S0MxMSwJS0MxMiwJS0MxMywJS0MxNCwJS0MxNQl9OworICNlbmRpZgorIAorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKyB2b2lkIFNFRURfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyIHJhd2tleVtT RUVEX0tFWV9MRU5HVEhdLCBTRUVEX0tFWV9TQ0hFRFVMRSAqa3MpCisrICAgICAgICB7CisrICAg ICAgICBpZiAoRklQU19tb2RlKCkpCisrICAgICAgICAgICAgICAgIEZJUFNfQkFEX0FCT1JUKFNF RUQpCisrICAgICAgICBwcml2YXRlX1NFRURfc2V0X2tleShyYXdrZXksIGtzKTsKKysgICAgICAg IH0KKysKKyt2b2lkIHByaXZhdGVfU0VFRF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgcmF3 a2V5W1NFRURfS0VZX0xFTkdUSF0sIFNFRURfS0VZX1NDSEVEVUxFICprcykKKysjZWxzZQorK3Zv aWQgU0VFRF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgcmF3a2V5W1NFRURfS0VZX0xFTkdU SF0sIFNFRURfS0VZX1NDSEVEVUxFICprcykKKysjZW5kaWYKKyB7CisgCXNlZWRfd29yZCB4MSwg eDIsIHgzLCB4NDsKKyAJc2VlZF93b3JkIHQwLCB0MTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9zZWVkL3NlZWQuaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zZWVkL3NlZWQu aAorLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zZWVkL3NlZWQuaC5maXBzCTIwMTAtMDYtMDQg MTI6MjU6MTQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NlZWQv c2VlZC5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMTE3LDYgKzEx Nyw5IEBAIHR5cGVkZWYgc3RydWN0IHNlZWRfa2V5X3N0IHsKKyB9IFNFRURfS0VZX1NDSEVEVUxF OworIAorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt2b2lkIHByaXZhdGVfU0VFRF9zZXRfa2V5 KGNvbnN0IHVuc2lnbmVkIGNoYXIgcmF3a2V5W1NFRURfS0VZX0xFTkdUSF0sIFNFRURfS0VZX1ND SEVEVUxFICprcyk7CisrI2VuZGlmCisgdm9pZCBTRUVEX3NldF9rZXkoY29uc3QgdW5zaWduZWQg Y2hhciByYXdrZXlbU0VFRF9LRVlfTEVOR1RIXSwgU0VFRF9LRVlfU0NIRURVTEUgKmtzKTsKKyAK KyB2b2lkIFNFRURfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyIHNbU0VFRF9CTE9DS19TSVpF XSwgdW5zaWduZWQgY2hhciBkW1NFRURfQkxPQ0tfU0laRV0sIGNvbnN0IFNFRURfS0VZX1NDSEVE VUxFICprcyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMu ZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zaGEvc2hhX2Rnc3QuYwkyMDEw LTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTU3LDYgKzU3LDEyIEBACisgICov CisgCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorICNpZiAhZGVmaW5l ZChPUEVOU1NMX05PX1NIQTApICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKQorIAorICN1bmRl ZiAgU0hBXzEKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zaGEvc2hhLmguZmlwcyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYS5oCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRv L3NoYS9zaGEuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGEuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAw MDAwMCArMDIwMAorQEAgLTEwNiw2ICsxMDYsOSBAQCB0eXBlZGVmIHN0cnVjdCBTSEFzdGF0ZV9z dAorIAl9IFNIQV9DVFg7CisgCisgI2lmbmRlZiBPUEVOU1NMX05PX1NIQTAKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisraW50IHByaXZhdGVfU0hBX0luaXQoU0hBX0NUWCAqYyk7CisrI2VuZGlmCisg aW50IFNIQV9Jbml0KFNIQV9DVFggKmMpOworIGludCBTSEFfVXBkYXRlKFNIQV9DVFggKmMsIGNv bnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBTSEFfRmluYWwodW5zaWduZWQgY2hh ciAqbWQsIFNIQV9DVFggKmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9z aGFfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCistLS0g b3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMJMjAxMC0wNi0wNCAxMjoy NToxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYV9s b2NsLmgJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjIsOCArMTIy LDE1IEBAIHZvaWQgc2hhMV9ibG9ja19kYXRhX29yZGVyIChTSEFfQ1RYICpjLCAKKyAjZGVmaW5l IElOSVRfREFUQV9oMyAweDEwMzI1NDc2VUwKKyAjZGVmaW5lIElOSVRfREFUQV9oNCAweGMzZDJl MWYwVUwKKyAKKysjaWYgZGVmaW5lZChTSEFfMCkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisr RklQU19OT05fRklQU19NRF9Jbml0KFNIQSkKKysjZWxzZQorIGludCBIQVNIX0lOSVQgKFNIQV9D VFggKmMpCisrI2VuZGlmCisgCXsKKysjaWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVO U1NMX0ZJUFMpCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVtc2V0IChj LDAsc2l6ZW9mKCpjKSk7CisgCWMtPmgwPUlOSVRfREFUQV9oMDsKKyAJYy0+aDE9SU5JVF9EQVRB X2gxOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGExZGdzdC5jLmZpcHMg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGExZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL3NoYS9zaGExZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMJMjAxMC0wNi0w NCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02Myw2ICs2MywxMCBAQAorICNkZWZpbmUg U0hBXzEKKyAKKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgCisgY29uc3Qg Y2hhciBTSEExX3ZlcnNpb25bXT0iU0hBMSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9zaGEvc2hhMjU2LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3No YTI1Ni5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYTI1Ni5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAw MDAwICswMjAwCitAQCAtMTIsMTIgKzEyLDE5IEBACisgCisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8b3BlbnNz bC9vcGVuc3Nsdi5oPgorIAorIGNvbnN0IGNoYXIgU0hBMjU2X3ZlcnNpb25bXT0iU0hBLTI1NiIg T1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorIGludCBTSEEyMjRfSW5pdCAoU0hBMjU2X0NUWCAq YykKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOwor KyNlbmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+aFswXT0weGMxMDU5ZWQ4 VUw7CWMtPmhbMV09MHgzNjdjZDUwN1VMOworIAljLT5oWzJdPTB4MzA3MGRkMTdVTDsJYy0+aFsz XT0weGY3MGU1OTM5VUw7CitAQCAtMjksNiArMzYsOSBAQCBpbnQgU0hBMjI0X0luaXQgKFNIQTI1 Nl9DVFggKmMpCisgCisgaW50IFNIQTI1Nl9Jbml0IChTSEEyNTZfQ1RYICpjKQorIAl7CisrI2lm ZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1l bXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5oWzBdPTB4NmEwOWU2NjdVTDsJYy0+aFsxXT0w eGJiNjdhZTg1VUw7CisgCWMtPmhbMl09MHgzYzZlZjM3MlVMOwljLT5oWzNdPTB4YTU0ZmY1M2FV TDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYTUxMi5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRv L3NoYS9zaGE1MTIuYy5maXBzCTIwMDktMTItMzAgMTI6NTM6MzMuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGE1MTIuYwkyMDEwLTA2LTA0IDEyOjI1OjE1 LjAwMDAwMDAwMCArMDIwMAorQEAgLTUsNiArNSwxMCBAQAorICAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICov CisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworICNpZiAhZGVmaW5lZChP UEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEE1MTIpCisgLyoKKyAgKiBJ TVBMRU1FTlRBVElPTiBOT1RFUy4KK0BAIC02MSw2ICs2NSw5IEBAIGNvbnN0IGNoYXIgU0hBNTEy X3ZlcnNpb25bXT0iU0hBLTUxMiIgT1AKKyAKKyBpbnQgU0hBMzg0X0luaXQgKFNIQTUxMl9DVFgg KmMpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsK KysjZW5kaWYKKyAjaWYgZGVmaW5lZChTSEE1MTJfQVNNKSAmJiAoZGVmaW5lZChfX2FybV9fKSB8 fCBkZWZpbmVkKF9fYXJtKSkKKyAJLyogbWFpbnRhaW4gZHdvcmQgb3JkZXIgcmVxdWlyZWQgYnkg YXNzZW1ibGVyIG1vZHVsZSAqLworIAl1bnNpZ25lZCBpbnQgKmggPSAodW5zaWduZWQgaW50ICop Yy0+aDsKK0BAIC05MCw2ICs5Nyw5IEBAIGludCBTSEEzODRfSW5pdCAoU0hBNTEyX0NUWCAqYykK KyAKKyBpbnQgU0hBNTEyX0luaXQgKFNIQTUxMl9DVFggKmMpCisgCXsKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAjaWYgZGVmaW5lZChT SEE1MTJfQVNNKSAmJiAoZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSkKKyAJLyog bWFpbnRhaW4gZHdvcmQgb3JkZXIgcmVxdWlyZWQgYnkgYXNzZW1ibGVyIG1vZHVsZSAqLworIAl1 bnNpZ25lZCBpbnQgKmggPSAodW5zaWduZWQgaW50ICopYy0+aDsKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjBhL2NyeXB0by93aHJscG9vbC93aHJscG9vbC5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL3docmxwb29sL3docmxwb29sLmgKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vd2hybHBv b2wvd2hybHBvb2wuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3docmxwb29sL3docmxwb29sLmgJMjAxMC0wNi0wNCAx MjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNCw2ICsyNCw5IEBAIHR5cGVkZWYgc3RydWN0 CXsKKyAJfSBXSElSTFBPT0xfQ1RYOworIAorICNpZm5kZWYgT1BFTlNTTF9OT19XSElSTFBPT0wK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfV0hJUkxQT09MX0luaXQoV0hJUkxQ T09MX0NUWCAqYyk7CisrI2VuZGlmCisgaW50IFdISVJMUE9PTF9Jbml0CShXSElSTFBPT0xfQ1RY ICpjKTsKKyBpbnQgV0hJUkxQT09MX1VwZGF0ZQkoV0hJUkxQT09MX0NUWCAqYyxjb25zdCB2b2lk ICppbnAsc2l6ZV90IGJ5dGVzKTsKKyB2b2lkIFdISVJMUE9PTF9CaXRVcGRhdGUoV0hJUkxQT09M X0NUWCAqYyxjb25zdCB2b2lkICppbnAsc2l6ZV90IGJpdHMpOworZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by93aHJscG9vbC93cF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vd2hybHBvb2wv d3BfZGdzdC5jLmZpcHMJMjAwOC0xMi0yOSAxMzozNTo0OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jCTIwMTAtMDYtMDQgMTI6MjU6 MTUuMDAwMDAwMDAwICswMjAwCitAQCAtNTMsOCArNTMsMTIgQEAKKyAKKyAjaW5jbHVkZSAid3Bf bG9jbC5oIgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRp ZgorIAorLWludCBXSElSTFBPT0xfSW5pdAkoV0hJUkxQT09MX0NUWCAqYykKKytGSVBTX05PTl9G SVBTX01EX0luaXQoV0hJUkxQT09MKQorIAl7CisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOwor IAlyZXR1cm4oMSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9NYWtlZmlsZS5vcmcuZmlwcyBv cGVuc3NsLTEuMC4wYS9NYWtlZmlsZS5vcmcKKy0tLSBvcGVuc3NsLTEuMC4wYS9NYWtlZmlsZS5v cmcuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjBhL01ha2VmaWxlLm9yZwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAor QEAgLTExMCw2ICsxMTAsOSBAQCBMSUJLUkI1PQorIFpMSUJfSU5DTFVERT0KKyBMSUJaTElCPQor IAorKyMgTm9uLWVtcHR5IGlmIEZJUFMgZW5hYmxlZAorK0ZJUFM9CisrCisgRElSUz0gICBjcnlw dG8gc3NsIGVuZ2luZXMgYXBwcyB0ZXN0IHRvb2xzCisgRU5HRElSUz0gY2Nnb3N0CisgU0hMSUJE SVJTPSBjcnlwdG8gc3NsCitAQCAtMTIyLDcgKzEyNSw3IEBAIFNESVJTPSAgXAorIAlibiBlYyBy c2EgZHNhIGVjZHNhIGRoIGVjZGggZHNvIGVuZ2luZSBcCisgCWJ1ZmZlciBiaW8gc3RhY2sgbGhh c2ggcmFuZCBlcnIgXAorIAlldnAgYXNuMSBwZW0geDUwOSB4NTA5djMgY29uZiB0eHRfZGIgcGtj czcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1IFwKKy0JY21zIHBxdWV1ZSB0cyBqcGFrZSBzdG9y ZQorKwljbXMgcHF1ZXVlIHRzIGpwYWtlIHN0b3JlIGZpcHMKKyAjIGtlZXAgaW4gbWluZCB0aGF0 IHRoZSBhYm92ZSBsaXN0IGlzIGFkanVzdGVkIGJ5IC4vQ29uZmlndXJlCisgIyBhY2NvcmRpbmcg dG8gbm8teHh4IGFyZ3VtZW50cy4uLgorIAorQEAgLTIwNiw2ICsyMDksNyBAQCBCVUlMREVOVj0J UExBVEZPUk09JyQoUExBVEZPUk0pJyBQUk9DRVNTCisgCQlSTUQxNjBfQVNNX09CSj0nJChSTUQx NjBfQVNNX09CSiknCQlcCisgCQlXUF9BU01fT0JKPSckKFdQX0FTTV9PQkopJwkJCVwKKyAJCVBF UkxBU01fU0NIRU1FPSckKFBFUkxBU01fU0NIRU1FKScJCVwKKysJCUZJUFM9IiQke0ZJUFM6LSQo RklQUyl9IglcCisgCQlUSElTPSQke1RISVM6LSRAfSBNQUtFRklMRT1NYWtlZmlsZSBNQUtFT1ZF UlJJREVTPQorICMgTUFLRU9WRVJSSURFUz0gZWZmZWN0aXZlbHkgImVxdWFsaXplcyIgR05VLWlz aCBhbmQgU3lzVi1pc2ggbWFrZSBmbGF2b3JzLAorICMgd2hpY2ggaW4gdHVybiBlbGltaW5hdGVz IGFtYmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0bWVudCB3aXRoIC1lLgorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGEvc3NsL3NzbF9jaXBoLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9zc2wvc3NsX2Np cGguYworLS0tIG9wZW5zc2wtMS4wLjBhL3NzbC9zc2xfY2lwaC5jLmZpcHMJMjAwOS0wOS0xMyAw MToxODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9zc2wvc3NsX2NpcGgu YwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTcyNyw2ICs3MjcsOSBA QCBzdGF0aWMgdm9pZCBzc2xfY2lwaGVyX2NvbGxlY3RfY2lwaGVycyhjCisgCQkgICAgIShjLT5h bGdvcml0aG1fYXV0aCAmIGRpc2FibGVkX2F1dGgpICYmCisgCQkgICAgIShjLT5hbGdvcml0aG1f ZW5jICYgZGlzYWJsZWRfZW5jKSAmJgorIAkJICAgICEoYy0+YWxnb3JpdGhtX21hYyAmIGRpc2Fi bGVkX21hYykgJiYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQkJKCFGSVBTX21vZGUoKSB8fCAo Yy0+YWxnb19zdHJlbmd0aCAmIFNTTF9GSVBTKSkgJiYKKysjZW5kaWYKKyAJCSAgICAhKGMtPmFs Z29yaXRobV9zc2wgJiBkaXNhYmxlZF9zc2wpKQorIAkJCXsKKyAJCQljb19saXN0W2NvX2xpc3Rf bnVtXS5jaXBoZXIgPSBjOworQEAgLTE0MjMsNyArMTQyNiwxMSBAQCBTVEFDS19PRihTU0xfQ0lQ SEVSKSAqc3NsX2NyZWF0ZV9jaXBoZXJfCisgCSAqLworIAlmb3IgKGN1cnIgPSBoZWFkOyBjdXJy ICE9IE5VTEw7IGN1cnIgPSBjdXJyLT5uZXh0KQorIAkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJCWlmIChjdXJyLT5hY3RpdmUgJiYgKCFGSVBTX21vZGUoKSB8fCBjdXJyLT5jaXBoZXItPmFs Z29fc3RyZW5ndGggJiBTU0xfRklQUykpCisrI2Vsc2UKKyAJCWlmIChjdXJyLT5hY3RpdmUpCisr I2VuZGlmCisgCQkJeworIAkJCXNrX1NTTF9DSVBIRVJfcHVzaChjaXBoZXJzdGFjaywgY3Vyci0+ Y2lwaGVyKTsKKyAjaWZkZWYgQ0lQSEVSX0RFQlVHCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9z c2wvc3NsX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvc3NsL3NzbF9saWIuYworLS0tIG9wZW5z c2wtMS4wLjBhL3NzbC9zc2xfbGliLmMuZmlwcwkyMDEwLTAyLTE3IDIwOjQzOjQ2LjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL3NzbC9zc2xfbGliLmMJMjAxMC0wNi0wNCAxMjoy NToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNTIxLDYgKzE1MjEsMTQgQEAgU1NMX0NUWCAqU1NM X0NUWF9uZXcoY29uc3QgU1NMX01FVEhPRCAqbQorIAkJcmV0dXJuKE5VTEwpOworIAkJfQorIAor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChtZXRoLT52ZXJzaW9u IDwgVExTMV9WRVJTSU9OKSkJCisrCQl7CisrCQlTU0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsIFNT TF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCXJldHVybiBOVUxMOworKwkJ fQorKyNlbmRpZgorKworIAlpZiAoU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeCgp IDwgMCkKKyAJCXsKKyAJCVNTTGVycihTU0xfRl9TU0xfQ1RYX05FVyxTU0xfUl9YNTA5X1ZFUklG SUNBVElPTl9TRVRVUF9QUk9CTEVNUyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9zc2wvc3Ns dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvc3NsL3NzbHRlc3QuYworLS0tIG9wZW5zc2wtMS4w LjBhL3NzbC9zc2x0ZXN0LmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIw MAorKysrIG9wZW5zc2wtMS4wLjBhL3NzbC9zc2x0ZXN0LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4w MDAwMDAwMDAgKzAyMDAKK0BAIC0yNjgsNiArMjY4LDkgQEAgc3RhdGljIHZvaWQgc3ZfdXNhZ2Uo dm9pZCkKKyAJeworIAlmcHJpbnRmKHN0ZGVyciwidXNhZ2U6IHNzbHRlc3QgW2FyZ3MgLi4uXVxu Iik7CisgCWZwcmludGYoc3RkZXJyLCJcbiIpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJZnBy aW50ZihzdGRlcnIsIi1GICAgICAgICAgICAgIC0gcnVuIHRlc3QgaW4gRklQUyBtb2RlXG4iKTsK KysjZW5kaWYKKyAJZnByaW50ZihzdGRlcnIsIiAtc2VydmVyX2F1dGggIC0gY2hlY2sgc2VydmVy IGNlcnRpZmljYXRlXG4iKTsKKyAJZnByaW50ZihzdGRlcnIsIiAtY2xpZW50X2F1dGggIC0gZG8g Y2xpZW50IGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAJZnByaW50ZihzdGRlcnIsIiAtcHJveHkgICAg ICAgIC0gYWxsb3cgcHJveHkgY2VydGlmaWNhdGVzXG4iKTsKK0BAIC00ODcsNiArNDkwLDkgQEAg aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAjZW5kaWYKKyAJU1RBQ0tfT0YoU1NM X0NPTVApICpzc2xfY29tcF9tZXRob2RzID0gTlVMTDsKKyAJaW50IHRlc3RfY2lwaGVybGlzdCA9 IDA7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpbnQgZmlwc19tb2RlPTA7CisrI2VuZGlmCisg CisgCXZlcmJvc2UgPSAwOworIAlkZWJ1ZyA9IDA7CitAQCAtNTE4LDcgKzUyNCwxNiBAQCBpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorIAl3aGlsZSAoYXJnYyA+PSAxKQorIAkJ eworLQkJaWYJKHN0cmNtcCgqYXJndiwiLXNlcnZlcl9hdXRoIikgPT0gMCkKKysJCWlmKCFzdHJj bXAoKmFyZ3YsIi1GIikpCisrCQkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQlmaXBzX21v ZGU9MTsKKysjZWxzZQorKwkJCWZwcmludGYoc3RkZXJyLCJub3QgY29tcGlsZWQgd2l0aCBGSVBT IHN1cHBvcnQsIHNvIGV4aXR0aW5nIHdpdGhvdXQgcnVubmluZy5cbiIpOworKwkJCUVYSVQoMCk7 CisrI2VuZGlmCisrCQkJfQorKwkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItc2VydmVyX2F1dGgi KSA9PSAwKQorIAkJCXNlcnZlcl9hdXRoPTE7CisgCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1j bGllbnRfYXV0aCIpID09IDApCisgCQkJY2xpZW50X2F1dGg9MTsKK0BAIC03MTQsNiArNzI5LDIw IEBAIGJhZDoKKyAJCUVYSVQoMSk7CisgCQl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlp ZihmaXBzX21vZGUpCisrCQl7CisrCQlpZighRklQU19tb2RlX3NldCgxKSkKKysJCQl7CisrCQkJ RVJSX2xvYWRfY3J5cHRvX3N0cmluZ3MoKTsKKysJCQlFUlJfcHJpbnRfZXJyb3JzKEJJT19uZXdf ZnAoc3RkZXJyLEJJT19OT0NMT1NFKSk7CisrCQkJRVhJVCgxKTsKKysJCQl9CisrCQllbHNlCisr CQkJZnByaW50ZihzdGRlcnIsIioqKiBJTiBGSVBTIE1PREUgKioqXG4iKTsKKysJCX0KKysjZW5k aWYKKysKKyAJaWYgKHByaW50X3RpbWUpCisgCQl7CisgCQlpZiAoIWJpb19wYWlyKQorQEAgLTIx NTYsMTIgKzIxODUsMTIgQEAgc3RhdGljIGludCBNU19DQUxMQkFDSyBhcHBfdmVyaWZ5X2NhbGxi YQorIAkJfQorIAorICNpZm5kZWYgT1BFTlNTTF9OT19YNTA5X1ZFUklGWQorLSMgaWZkZWYgT1BF TlNTTF9GSVBTCisrIyBpZiAwCisgCWlmKHMtPnZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQorIAkJ RklQU19hbGxvd19tZDUoMSk7CisgIyBlbmRpZgorIAlvayA9IFg1MDlfdmVyaWZ5X2NlcnQoY3R4 KTsKKy0jIGlmZGVmIE9QRU5TU0xfRklQUworKyMgaWYgMAorIAlpZihzLT52ZXJzaW9uID09IFRM UzFfVkVSU0lPTikKKyAJCUZJUFNfYWxsb3dfbWQ1KDApOworICMgZW5kaWYKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjBhL3NzbC9zMjNfY2xudC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvc3NsL3MyM19j bG50LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9zc2wvczIzX2NsbnQuYy5maXBzCTIwMTAtMDItMTYg MTU6MjA6NDAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGEvc3NsL3MyM19jbG50 LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMzQsNiArMzM0LDE0 IEBAIHN0YXRpYyBpbnQgc3NsMjNfY2xpZW50X2hlbGxvKFNTTCAqcykKKyAJCQl2ZXJzaW9uX21h am9yID0gVExTMV9WRVJTSU9OX01BSk9SOworIAkJCXZlcnNpb25fbWlub3IgPSBUTFMxX1ZFUlNJ T05fTUlOT1I7CisgCQkJfQorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWVsc2UgaWYoRklQU19t b2RlKCkpCisrCQkJeworKwkJCVNTTGVycihTU0xfRl9TU0wyM19DTElFTlRfSEVMTE8sCisrCQkJ CQlTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisrCQkJcmV0dXJuIC0xOwor KwkJCX0KKysjZW5kaWYKKyAJCWVsc2UgaWYgKHZlcnNpb24gPT0gU1NMM19WRVJTSU9OKQorIAkJ CXsKKyAJCQl2ZXJzaW9uX21ham9yID0gU1NMM19WRVJTSU9OX01BSk9SOworQEAgLTYxNyw2ICs2 MjUsMTQgQEAgc3RhdGljIGludCBzc2wyM19nZXRfc2VydmVyX2hlbGxvKFNTTCAqcworIAkJaWYg KChwWzJdID09IFNTTDNfVkVSU0lPTl9NSU5PUikgJiYKKyAJCQkhKHMtPm9wdGlvbnMgJiBTU0xf T1BfTk9fU1NMdjMpKQorIAkJCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQkJaWYoRklQU19t b2RlKCkpCisrCQkJCXsKKysJCQkJU1NMZXJyKFNTTF9GX1NTTDIzX0dFVF9TRVJWRVJfSEVMTE8s CisrCQkJCQlTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisrCQkJCWdvdG8g ZXJyOworKwkJCQl9CisrI2VuZGlmCisgCQkJcy0+dmVyc2lvbj1TU0wzX1ZFUlNJT047CisgCQkJ cy0+bWV0aG9kPVNTTHYzX2NsaWVudF9tZXRob2QoKTsKKyAJCQl9CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wYS9zc2wvczIzX3NydnIuYy5maXBzIG9wZW5zc2wtMS4wLjBhL3NzbC9zMjNfc3J2ci5j CistLS0gb3BlbnNzbC0xLjAuMGEvc3NsL3MyM19zcnZyLmMuZmlwcwkyMDEwLTAyLTE2IDE1OjIw OjQwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBhL3NzbC9zMjNfc3J2ci5jCTIw MTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMzkzLDYgKzM5MywxNSBAQCBp bnQgc3NsMjNfZ2V0X2NsaWVudF9oZWxsbyhTU0wgKnMpCisgCQkJfQorIAkJfQorIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChzLT52ZXJzaW9uIDwgVExTMV9W RVJTSU9OKSkKKysJCXsKKysJCVNTTGVycihTU0xfRl9TU0wyM19HRVRfQ0xJRU5UX0hFTExPLAor KwkJCQkJU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOworKwkJZ290byBlcnI7 CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChzLT5zdGF0ZSA9PSBTU0wyM19TVF9TUl9DTE5UX0hF TExPX0IpCisgCQl7CisgCQkvKiB3ZSBoYXZlIFNTTHYzL1RMU3YxIGluIGFuIFNTTHYyIGhlYWRl cgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvc3NsL3MzX2NsbnQuYy5maXBzIG9wZW5zc2wtMS4w LjBhL3NzbC9zM19jbG50LmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9zc2wvczNfY2xudC5jLmZpcHMJ MjAxMC0wMi0yOCAwMToyNDoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9z c2wvczNfY2xudC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMTU2 LDYgKzE1NiwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9tZDUuaD4KKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworICNpZm5kZWYg T1BFTlNTTF9OT19ESAorICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisgI2VuZGlmCitAQCAtMTU0 Niw2ICsxNTUwLDggQEAgaW50IHNzbDNfZ2V0X2tleV9leGNoYW5nZShTU0wgKnMpCisgCQkJcT1t ZF9idWY7CisgCQkJZm9yIChudW09MjsgbnVtID4gMDsgbnVtLS0pCisgCQkJCXsKKysJCQkJRVZQ X01EX0NUWF9zZXRfZmxhZ3MoJm1kX2N0eCwKKysJCQkJCUVWUF9NRF9DVFhfRkxBR19OT05fRklQ U19BTExPVyk7CisgCQkJCUVWUF9EaWdlc3RJbml0X2V4KCZtZF9jdHgsKG51bSA9PSAyKQorIAkJ CQkJP3MtPmN0eC0+bWQ1OnMtPmN0eC0+c2hhMSwgTlVMTCk7CisgCQkJCUVWUF9EaWdlc3RVcGRh dGUoJm1kX2N0eCwmKHMtPnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL3NzbC9zM19lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjBh L3NzbC9zM19lbmMuYworLS0tIG9wZW5zc2wtMS4wLjBhL3NzbC9zM19lbmMuYy5maXBzCTIwMDkt MDQtMTYgMTk6MjI6NTAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGEvc3NsL3Mz X2VuYy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMTcwLDYgKzE3 MCw3IEBAIHN0YXRpYyBpbnQgc3NsM19nZW5lcmF0ZV9rZXlfYmxvY2soU1NMICoKKyAjZW5kaWYK KyAJaz0wOworIAlFVlBfTURfQ1RYX2luaXQoJm01KTsKKysJRVZQX01EX0NUWF9zZXRfZmxhZ3Mo Jm01LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworIAlFVlBfTURfQ1RYX2luaXQo JnMxKTsKKyAJZm9yIChpPTA7IChpbnQpaTxudW07IGkrPU1ENV9ESUdFU1RfTEVOR1RIKQorIAkJ eworQEAgLTYxNCw2ICs2MTUsOCBAQCBpbnQgc3NsM19kaWdlc3RfY2FjaGVkX3JlY29yZHMoU1NM ICpzKQorIAkJaWYgKChtYXNrICYgcy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG0yKSAm JiBtZCkgCisgCQkJeworIAkJCXMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXT1FVlBfTURfQ1RYX2Ny ZWF0ZSgpOworKwkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKHMtPnMzLT5oYW5kc2hha2VfZGdzdFtp XSwKKysJCQkJRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKyAJCQlFVlBfRGlnZXN0 SW5pdF9leChzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0sbWQsTlVMTCk7CisgCQkJRVZQX0RpZ2Vz dFVwZGF0ZShzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0saGRhdGEsaGRhdGFsZW4pOworIAkJCX0g CitAQCAtNjcwLDYgKzY3Myw3IEBAIHN0YXRpYyBpbnQgc3NsM19oYW5kc2hha2VfbWFjKFNTTCAq cywgaW4KKyAJCXJldHVybiAwOworIAl9CQorIAlFVlBfTURfQ1RYX2luaXQoJmN0eCk7CisrCUVW UF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7 CisgCUVWUF9NRF9DVFhfY29weV9leCgmY3R4LGQpOworIAluPUVWUF9NRF9DVFhfc2l6ZSgmY3R4 KTsKKyAJaWYgKG4gPCAwKQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvc3NsL3MzX3NydnIuYy5m aXBzIG9wZW5zc2wtMS4wLjBhL3NzbC9zM19zcnZyLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9zc2wv czNfc3J2ci5jLmZpcHMJMjAxMC0wMi0yOCAwMDowNDoxMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4wYS9zc2wvczNfc3J2ci5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAw ICswMjAwCitAQCAtMTc1Miw2ICsxNzUyLDggQEAgaW50IHNzbDNfc2VuZF9zZXJ2ZXJfa2V5X2V4 Y2hhbmdlKFNTTCAqcworIAkJCQlqPTA7CisgCQkJCWZvciAobnVtPTI7IG51bSA+IDA7IG51bS0t KQorIAkJCQkJeworKwkJCQkJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1kX2N0eCwKKysJCQkJCQlF VlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworIAkJCQkJRVZQX0RpZ2VzdEluaXRfZXgo Jm1kX2N0eCwobnVtID09IDIpCisgCQkJCQkJP3MtPmN0eC0+bWQ1OnMtPmN0eC0+c2hhMSwgTlVM TCk7CisgCQkJCQlFVlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsJihzLT5zMy0+Y2xpZW50X3JhbmRv bVswXSksU1NMM19SQU5ET01fU0laRSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9zc2wvdDFf ZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9zc2wvdDFfZW5jLmMKKy0tLSBvcGVuc3NsLTEuMC4w YS9zc2wvdDFfZW5jLmMuZmlwcwkyMDEwLTA1LTE3IDEzOjI2OjU2LjAwMDAwMDAwMCArMDIwMAor KysrIG9wZW5zc2wtMS4wLjBhL3NzbC90MV9lbmMuYwkyMDEwLTA2LTA0IDEzOjI4OjAxLjAwMDAw MDAwMCArMDIwMAorQEAgLTE3MCw2ICsxNzAsOCBAQCBzdGF0aWMgaW50IHRsczFfUF9oYXNoKGNv bnN0IEVWUF9NRCAqbWQsCisgCisgCUhNQUNfQ1RYX2luaXQoJmN0eCk7CisgCUhNQUNfQ1RYX2lu aXQoJmN0eF90bXApOworKwlITUFDX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFH X05PTl9GSVBTX0FMTE9XKTsKKysJSE1BQ19DVFhfc2V0X2ZsYWdzKCZjdHhfdG1wLCBFVlBfTURf Q1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworIAlpZiAoIUhNQUNfSW5pdF9leCgmY3R4LHNlYyxz ZWNfbGVuLG1kLCBOVUxMKSkKKyAJCWdvdG8gZXJyOworIAlpZiAoIUhNQUNfSW5pdF9leCgmY3R4 X3RtcCxzZWMsc2VjX2xlbixtZCwgTlVMTCkpCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMGEt Zmlwc21vZGUucGF0Y2ggYi9vcGVuc3NsLTEuMC4wYS1maXBzbW9kZS5wYXRjaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTJlNzRlCi0tLSAvZGV2L251bGwKKysrIGIvb3Bl bnNzbC0xLjAuMGEtZmlwc21vZGUucGF0Y2gKQEAgLTAsMCArMSwyNzIgQEAKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jLmZpcHNtb2RlIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCistLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Vu Z2luZS9lbmdfYWxsLmMuZmlwc21vZGUJMjAwOS0wNy0wMSAxNjo1NTo1OC4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYwkyMDEwLTA2LTA0 IDEzOjMyOjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTU4LDkgKzU4LDIzIEBACisgCisgI2luY2x1 ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUgImVuZ19pbnQuaCIKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHZvaWQgRU5HSU5F X2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrCWlmIChGSVBTX21vZGUoKSkgeworKwkJLyogV2Ug YWxsb3cgbG9hZGluZyBkeW5hbWljIGVuZ2luZSBhcyBhIHRoaXJkIHBhcnR5CisrCQkgICBlbmdp bmUgbWlnaHQgYmUgRklQUyB2YWxpZGF0ZWQuCisrCQkgICBVc2VyIGlzIGRpc2FsbG93ZWQgdG8g bG9hZCBub24tdmFsaWRhdGVkIGVuZ2luZXMKKysJCSAgIGJ5IHNlY3VyaXR5IHBvbGljeS4gKi8K KysJCUVOR0lORV9sb2FkX2R5bmFtaWMoKTsKKysJCXJldHVybjsKKysJfQorKyNlbmRpZgorICNp ZiAwCisgCS8qIFRoZXJlJ3Mgbm8gbG9uZ2VyIGFueSBuZWVkIGZvciBhbiAib3BlbnNzbCIgRU5H SU5FIHVubGVzcywgb25lIGRheSwKKyAJICogaXQgaXMgdGhlICpvbmx5KiB3YXkgZm9yIHN0YW5k YXJkIGJ1aWx0aW4gaW1wbGVtZW50YXRpb25zIHRvIGJlIGJlCitkaWZmIC11cCBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHNtb2RlIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9l dnAvY19hbGxjLmMKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHNt b2RlCTIwMDktMTItMjUgMTU6MTI6MjQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDEwLTA2LTA0IDEzOjMyOjEzLjAwMDAwMDAwMCArMDIw MAorQEAgLTY1LDYgKzY1LDExIEBACisgdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2b2lk KQorIAl7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlPUEVOU1NMX2luaXRfbGlicmFyeSgp OworKwlpZighRklQU19tb2RlKCkpIAorKwkJeworKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9O T19ERVMKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIoKSk7CisgCUVWUF9hZGRfY2lwaGVy KEVWUF9kZXNfY2ZiMSgpKTsKK0BAIC0yMjEsNCArMjI2LDYxIEBAIHZvaWQgT3BlblNTTF9hZGRf YWxsX2NpcGhlcnModm9pZCkKKyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2 X2NiYywiQ0FNRUxMSUEyNTYiKTsKKyAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFf MjU2X2NiYywiY2FtZWxsaWEyNTYiKTsKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CQl9CisrCWVsc2UKKysJCXsKKysjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisrCUVWUF9hZGRfY2lw aGVyKEVWUF9kZXNfZWRlX2NmYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2Nm YigpKTsKKysKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfb2ZiKCkpOworKwlFVlBfYWRk X2NpcGhlcihFVlBfZGVzX2VkZTNfb2ZiKCkpOworKworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZV9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7CisrCUVW UF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2NiYywiREVTMyIpOworKwlFVlBfYWRkX2Np cGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMsImRlczMiKTsKKysKKysJRVZQX2FkZF9jaXBoZXIo RVZQX2Rlc19lZGUoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlMygpKTsKKysjZW5k aWYKKysKKysjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTI4X2VjYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOworKwlFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTI4X2NmYjEoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjgoKSk7CisrCUVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X29mYigpKTsKKysjaWYgMAorKwlFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzEyOF9jdHIoKSk7CisrI2VuZGlmCisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNO X2Flc18xMjhfY2JjLCJBRVMxMjgiKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEy OF9jYmMsImFlczEyOCIpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7Cisr CUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18xOTJfY2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmIxKCkpOwor KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmI4KCkpOworKwlFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzE5Ml9vZmIoKSk7CisrI2lmIDAKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJf Y3RyKCkpOworKyNlbmRpZgorKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywi QUVTMTkyIik7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCJhZXMxOTIi KTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZWNiKCkpOworKwlFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzI1Nl9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYigp KTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiMSgpKTsKKysJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18yNTZfY2ZiOCgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfb2Zi KCkpOworKyNpZiAwCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2N0cigpKTsKKysjZW5k aWYKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsIkFFUzI1NiIpOworKwlF VlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywiYWVzMjU2Iik7CisrI2VuZGlmCisr CQl9CisrI2VuZGlmCisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvY19h bGxkLmMuZmlwc21vZGUgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9jX2FsbGQuYworLS0tIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvY19hbGxkLmMuZmlwc21vZGUJMjAwOS0wNy0wOCAxMDo1 MDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2NfYWxs ZC5jCTIwMTAtMDYtMDQgMTM6MzI6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtNjQsNiArNjQsMTEg QEAKKyAKKyB2b2lkIE9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzKHZvaWQpCisgCXsKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrCWlmICghRklQU19tb2Rl KCkpCisrCQl7CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX01ENAorIAlFVlBfYWRkX2Rp Z2VzdChFVlBfbWQ0KCkpOworICNlbmRpZgorQEAgLTExMSw0ICsxMTYsMzIgQEAgdm9pZCBPcGVu U1NMX2FkZF9hbGxfZGlnZXN0cyh2b2lkKQorICNpZm5kZWYgT1BFTlNTTF9OT19XSElSTFBPT0wK KyAJRVZQX2FkZF9kaWdlc3QoRVZQX3doaXJscG9vbCgpKTsKKyAjZW5kaWYKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCQl9CisrCWVsc2UKKysJCXsKKysjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19T SEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMSkKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3No YTEoKSk7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEsInNzbDMtc2hhMSIpOworKwlF VlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExV2l0aFJTQUVuY3J5cHRpb24sU05fc2hhMVdpdGhS U0EpOworKyNpZm5kZWYgT1BFTlNTTF9OT19EU0EKKysJRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEo KSk7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLFNOX2RzYVdpdGhTSEEx XzIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiRFNTMSIpOworKwlF VlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiZHNzMSIpOworKyNlbmRpZgorKyNp Zm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorKwlFVlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7Cisr I2VuZGlmCisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgorKwlFVlBfYWRkX2Rp Z2VzdChFVlBfc2hhMjI0KCkpOworKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOworKyNl bmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3No YTM4NCgpKTsKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKKysjZW5kaWYKKysJCX0K KysjZW5kaWYKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL29faW5pdC5jLmZp cHNtb2RlIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9vX2luaXQuYworLS0tIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9vX2luaXQuYy5maXBzbW9kZQkyMDEwLTA2LTA0IDEzOjMyOjEzLjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9vX2luaXQuYwkyMDEwLTA2LTA0IDEzOjMy OjEzLjAwMDAwMDAwMCArMDIwMAorQEAgLTU5LDYgKzU5LDQzIEBACisgI2luY2x1ZGUgPGVfb3Mu aD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRl IDxmY250bC5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysj aW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworKyNkZWZp bmUgRklQU19NT0RFX1NXSVRDSF9GSUxFICIvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxlZCIK KysKKytzdGF0aWMgdm9pZCBpbml0X2ZpcHNfbW9kZSh2b2lkKQorKwl7CisrCWNoYXIgYnVmWzJd ID0gIjAiOworKwlpbnQgZmQ7CisrCQorKwlpZiAoZ2V0ZW52KCJPUEVOU1NMX0ZPUkNFX0ZJUFNf TU9ERSIpICE9IE5VTEwpCisrCQl7CisrCQlidWZbMF0gPSAnMSc7CisrCQl9CisrCWVsc2UgaWYg KChmZCA9IG9wZW4oRklQU19NT0RFX1NXSVRDSF9GSUxFLCBPX1JET05MWSkpID49IDApCisrCQl7 CisrCQl3aGlsZSAocmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPCAwICYmIGVycm5vID09IEVJ TlRSKTsKKysJCWNsb3NlKGZkKTsKKysJCX0KKysJLyogRmFpbHVyZSByZWFkaW5nIHRoZSBmaXBz IG1vZGUgc3dpdGNoIGZpbGUgbWVhbnMganVzdCBub3QKKysJICogc3dpdGNoaW5nIGludG8gRklQ UyBtb2RlLiBXZSB3b3VsZCBicmVhayB0b28gbWFueSB0aGluZ3MKKysJICogb3RoZXJ3aXNlLiAK KysJICovCisrCQorKwlpZiAoYnVmWzBdID09ICcxJykKKysJCXsKKysJCUZJUFNfbW9kZV9zZXQo MSk7CisrCQl9CisrCX0KKysjZW5kaWYKKysKKyAvKiBQZXJmb3JtIGFueSBlc3NlbnRpYWwgT3Bl blNTTCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zLgorICAqIEN1cnJlbnRseSBvbmx5IHNldHMg RklQUyBjYWxsYmFja3MKKyAgKi8KK0BAIC03Miw2ICsxMDksNyBAQCB2b2lkIE9QRU5TU0xfaW5p dF9saWJyYXJ5KHZvaWQpCisgI2lmZGVmIENSWVBUT19NREVCVUcKKyAJCUNSWVBUT19tYWxsb2Nf ZGVidWdfaW5pdCgpOworICNlbmRpZgorKwkJaW5pdF9maXBzX21vZGUoKTsKKyAJCWRvbmUgPSAx OworIAkJfQorICNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvc3NsL3NzbF9hbGdzLmMu Zmlwc21vZGUgb3BlbnNzbC0xLjAuMGEvc3NsL3NzbF9hbGdzLmMKKy0tLSBvcGVuc3NsLTEuMC4w YS9zc2wvc3NsX2FsZ3MuYy5maXBzbW9kZQkyMDEwLTA0LTA3IDE1OjE4OjMwLjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjBhL3NzbC9zc2xfYWxncy5jCTIwMTAtMDYtMDQgMTM6MzI6 NDguMDAwMDAwMDAwICswMjAwCitAQCAtNjQsNiArNjQsMTIgQEAKKyBpbnQgU1NMX2xpYnJhcnlf aW5pdCh2b2lkKQorIAl7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlPUEVOU1NMX2luaXRf bGlicmFyeSgpOworKwlpZiAoIUZJUFNfbW9kZSgpKQorKwkJeworKyNlbmRpZgorKworICNpZm5k ZWYgT1BFTlNTTF9OT19ERVMKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jYmMoKSk7CisgCUVW UF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7CitAQCAtMTI3LDYgKzEzMyw0OCBAQCBp bnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQorIAlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhKCkpOwor IAlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkpOworICNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJCX0KKysJZWxzZQorKwkJeworKyNpZm5kZWYgT1BFTlNTTF9OT19ERVMKKysJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xf Tk9fQUVTCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NiYygpKTsKKysJRVZQX2FkZF9j aXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9j YmMoKSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX01ENQorKwkvKiBuZWVkZWQgZXZl biBpbiB0aGUgRklQUyBtb2RlIGZvciBUTFMgTUFDICovCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9t ZDUoKSk7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwic3NsMi1tZDUiKTsKKysJRVZQ X2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wzLW1kNSIpOworKyNlbmRpZgorKyNpZm5kZWYg T1BFTlNTTF9OT19TSEEKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7IC8qIFJTQSB3aXRo IHNoYTEgKi8KKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwic3NsMy1zaGExIik7Cisr CUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlvbixTTl9zaGExV2l0 aFJTQSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgorKwlFVlBfYWRkX2Rp Z2VzdChFVlBfc2hhMjI0KCkpOworKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOworKyNl bmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3No YTM4NCgpKTsKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKKysjZW5kaWYKKysjaWYg IWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fRFNBKQorKwlF VlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsgLyogRFNBIHdpdGggc2hhMSAqLworKwlFVlBfYWRk X2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSxTTl9kc2FXaXRoU0hBMV8yKTsKKysJRVZQX2Fk ZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIkRTUzEiKTsKKysJRVZQX2FkZF9kaWdlc3Rf YWxpYXMoU05fZHNhV2l0aFNIQTEsImRzczEiKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xf Tk9fRUNEU0EKKysJRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkpOworKyNlbmRpZgorKwkJfQor KyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCisgCS8qIFRoaXMgd2lsbCBpbml0aWFs aXNlIHRoZSBidWlsdC1pbiBjb21wcmVzc2lvbiBhbGdvcml0aG1zLgorIAkgICBUaGUgdmFsdWUg cmV0dXJuZWQgaXMgYSBTVEFDS19PRihTU0xfQ09NUCksIGJ1dCB0aGF0IGNhbgoKZGlmZiAtLWdp dCBhL29wZW5zc2wtMS4wLjBhLXZlcnNpb24ucGF0Y2ggYi9vcGVuc3NsLTEuMC4wYS12ZXJzaW9u LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YTAyMzMKLS0tIC9k ZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4wYS12ZXJzaW9uLnBhdGNoCkBAIC0wLDAgKzEsMTMg QEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9vcGVuc3Nsdi5oLnZlcnNpb24gb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL29wZW5zc2x2LmgKKy0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v b3BlbnNzbHYuaC52ZXJzaW9uCTIwMTAtMDYtMDQgMTM6Mjg6NTIuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL29wZW5zc2x2LmgJMjAxMC0wNi0wNCAxMzoyOTo0Mi4w MDAwMDAwMDAgKzAyMDAKK0BAIC0yNSw3ICsyNSw4IEBACisgICogKFByaW9yIHRvIDAuOS41YSBi ZXRhMSwgYSBkaWZmZXJlbnQgc2NoZW1lIHdhcyB1c2VkOiBNTU5ORkZSQkIgZm9yCisgICogIG1h am9yIG1pbm9yIGZpeCBmaW5hbCBwYXRjaC9iZXRhKQorICAqLworLSNkZWZpbmUgT1BFTlNTTF9W RVJTSU9OX05VTUJFUgkweDEwMDAwMDFmTAorKy8qIHdlIGhhdmUgdG8ga2VlcCB0aGUgdmVyc2lv biBudW1iZXIgdG8gbm90IGJyZWFrIHRoZSBhYmkgKi8KKysjZGVmaW5lIE9QRU5TU0xfVkVSU0lP Tl9OVU1CRVIJMHgxMDAwMDAwM0wKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCisgI2RlZmluZSBPUEVO U1NMX1ZFUlNJT05fVEVYVAkiT3BlblNTTCAxLjAuMGEtZmlwcyAxIEp1biAyMDEwIgorICNlbHNl CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC5zcGVjIGIvb3BlbnNzbC5zcGVjCmluZGV4IDlhNzJmZDQu LmJkMjY4YzIgMTAwNjQ0Ci0tLSBhL29wZW5zc2wuc3BlYworKysgYi9vcGVuc3NsLnNwZWMKQEAg LTIwLDggKzIwLDggQEAKIAogU3VtbWFyeTogQSBnZW5lcmFsIHB1cnBvc2UgY3J5cHRvZ3JhcGh5 IGxpYnJhcnkgd2l0aCBUTFMgaW1wbGVtZW50YXRpb24KIE5hbWU6IG9wZW5zc2wKLVZlcnNpb246 IDEuMC4wCi1SZWxlYXNlOiA0JXs/ZGlzdH0KK1ZlcnNpb246IDEuMC4wYQorUmVsZWFzZTogMSV7 P2Rpc3R9CiAjIFdlIHJlbW92ZSBjZXJ0YWluIHBhdGVudGVkIGFsZ29yaXRobXMgZnJvbSB0aGUg b3BlbnNzbCBzb3VyY2UgdGFyYmFsbAogIyB3aXRoIHRoZSBob2JibGUtb3BlbnNzbCBzY3JpcHQg d2hpY2ggaXMgaW5jbHVkZWQgYmVsb3cuCiBTb3VyY2U6IG9wZW5zc2wtJXt2ZXJzaW9ufS11c2Eu dGFyLmJ6MgpAQCAtNTAsMjAgKzUwLDE4IEBAIFBhdGNoMzQ6IG9wZW5zc2wtMC45LjYteDUwOS5w YXRjaAogUGF0Y2gzNTogb3BlbnNzbC0wLjkuOGotdmVyc2lvbi1hZGQtZW5naW5lcy5wYXRjaAog UGF0Y2gzODogb3BlbnNzbC0xLjAuMC1iZXRhNS1jaXBoZXItY2hhbmdlLnBhdGNoCiBQYXRjaDM5 OiBvcGVuc3NsLTEuMC4wLWJldGE1LWlwdjYtYXBwcy5wYXRjaAotUGF0Y2g0MDogb3BlbnNzbC0x LjAuMC1maXBzLnBhdGNoCitQYXRjaDQwOiBvcGVuc3NsLTEuMC4wYS1maXBzLnBhdGNoCiBQYXRj aDQxOiBvcGVuc3NsLTEuMC4wLWJldGEzLWZpcHNjaGVjay5wYXRjaAotUGF0Y2g0Mzogb3BlbnNz bC0xLjAuMC1iZXRhMy1maXBzbW9kZS5wYXRjaAorUGF0Y2g0Mzogb3BlbnNzbC0xLjAuMGEtZmlw c21vZGUucGF0Y2gKIFBhdGNoNDQ6IG9wZW5zc2wtMS4wLjAtYmV0YTMtZmlwc3JuZy5wYXRjaAog UGF0Y2g0NTogb3BlbnNzbC0wLjkuOGotZW52LW5vemxpYi5wYXRjaAogUGF0Y2g0Nzogb3BlbnNz bC0xLjAuMC1iZXRhNS1yZWFkbWUtd2FybmluZy5wYXRjaAogUGF0Y2g0OTogb3BlbnNzbC0xLjAu MC1iZXRhNC1hbGdvLWRvYy5wYXRjaAogUGF0Y2g1MDogb3BlbnNzbC0xLjAuMC1iZXRhNC1kdGxz MS1hYmkucGF0Y2gKLVBhdGNoNTE6IG9wZW5zc2wtMS4wLjAtdmVyc2lvbi5wYXRjaAorUGF0Y2g1 MTogb3BlbnNzbC0xLjAuMGEtdmVyc2lvbi5wYXRjaAogUGF0Y2g1Mjogb3BlbnNzbC0xLjAuMC1i ZXRhNC1hZXNuaS5wYXRjaAogUGF0Y2g1Mzogb3BlbnNzbC0xLjAuMC1uYW1lLWhhc2gucGF0Y2gK ICMgQmFja3BvcnRlZCBmaXhlcyBpbmNsdWRpbmcgc2VjdXJpdHkgZml4ZXMKLVBhdGNoNjA6IG9w ZW5zc2wtMS4wLjAtZHRsczEtYmFja3BvcnRzLnBhdGNoCi1QYXRjaDYxOiBvcGVuc3NsLTEuMC4w LWluaXQtc2hhMjU2LnBhdGNoCiAKIExpY2Vuc2U6IE9wZW5TU0wKIEdyb3VwOiBTeXN0ZW0gRW52 aXJvbm1lbnQvTGlicmFyaWVzCkBAIC0xNDUsOCArMTQzLDYgQEAgZnJvbSBvdGhlciBmb3JtYXRz IHRvIHRoZSBmb3JtYXRzIHVzZWQgYnkgdGhlIE9wZW5TU0wgdG9vbGtpdC4KICVwYXRjaDUyIC1w MSAtYiAuYWVzbmkKICVwYXRjaDUzIC1wMSAtYiAubmFtZS1oYXNoCiAKLSVwYXRjaDYwIC1wMSAt YiAuZHRsczEKLSVwYXRjaDYxIC1wMSAtYiAuc2hhMjU2CiAjIE1vZGlmeSB0aGUgdmFyaW91cyBw ZXJsIHNjcmlwdHMgdG8gcmVmZXJlbmNlIHBlcmwgaW4gdGhlIHJpZ2h0IGxvY2F0aW9uLgogcGVy bCB1dGlsL3BlcmxwYXRoLnBsIGBkaXJuYW1lICV7X19wZXJsfWAKIApAQCAtMjk5LDE2ICsyOTUs NiBAQCBta2RpciAtbTc1NSAkUlBNX0JVSUxEX1JPT1Qle19zeXNjb25mZGlyfS9wa2kvQ0EvbmV3 Y2VydHMKICMgbXVsaXRsaWIgY29uZmxpY3RzIGFuZCB1bm5lY2Vzc2FyeSByZW5hbWVzIG9uIHVw Z3JhZGUKIHRvdWNoIC1yICV7U09VUkNFMn0gJFJQTV9CVUlMRF9ST09UJXtfc3lzY29uZmRpcn0v cGtpL3Rscy9vcGVuc3NsLmNuZgogCi0jIEZpeCBsaWJkaXIuCi1wdXNoZCAkUlBNX0JVSUxEX1JP T1QvJXtfbGliZGlyfS9wa2djb25maWcKLWZvciBpIGluICoucGMgOyBkbwotCXNlZCAncyxebGli ZGlyPSR7ZXhlY19wcmVmaXh9L2xpYixsaWJkaXI9JHtleGVjX3ByZWZpeH0vJXtfbGlifSxnJyBc Ci0JCSRpID4kaS50bXAgJiYgXAotCWNhdCAkaS50bXAgPiRpICYmIFwKLQlybSAtZiAkaS50bXAK LWRvbmUKLXBvcGQKLQogIyBEZXRlcm1pbmUgd2hpY2ggYXJjaCBvcGVuc3NsY29uZi5oIGlzIGdv aW5nIHRvIHRyeSB0byAjaW5jbHVkZS4KIGJhc2VhcmNoPSV7X2FyY2h9CiAlaWZhcmNoICV7aXg4 Nn0KQEAgLTM5Nyw2ICszODMsMTMgQEAgcm0gLXJmICRSUE1fQlVJTERfUk9PVC8le19saWJkaXJ9 L2ZpcHNjYW5pc3Rlci4qCiAlcG9zdHVuIC1wIC9zYmluL2xkY29uZmlnCiAKICVjaGFuZ2Vsb2cK KyogRnJpIEp1biAgNCAyMDEwIFRvbWFzIE1yYXogPHRtcmF6QHJlZGhhdC5jb20+IDEuMC4wYS0x CistIG5ldyB1cHN0cmVhbSBwYXRjaCByZWxlYXNlLCBmaXhlcyBDVkUtMjAxMC0wNzQyICgjNTk4 NzM4KQorICBhbmQgQ1ZFLTIwMTAtMTYzMyAoIzU5ODczMikKKworKiBXZWQgTWF5IDE5IDIwMTAg VG9tYXMgTXJheiA8dG1yYXpAcmVkaGF0LmNvbT4gMS4wLjAtNQorLSBwa2djb25maWcgZmlsZXMg bm93IGNvbnRhaW4gdGhlIGNvcnJlY3QgbGliZGlyICgjNTkzNzIzKQorCiAqIFR1ZSBNYXkgMTgg MjAxMCBUb21hcyBNcmF6IDx0bXJhekByZWRoYXQuY29tPiAxLjAuMC00CiAtIG1ha2UgQ0EgZGly IHJlYWRhYmxlIC0gdGhlIHByaXZhdGUga2V5cyBhcmUgaW4gcHJpdmF0ZSBzdWJkaXIgKCM1ODQ4 MTApCiAtIGRvIG5vdCBtb3ZlIHRoZSBsaWJjcnlwdG8gdG8gL2xpYiBpbiB0aGUgRjEyIHBhY2th Z2UKCmRpZmYgLS1naXQgYS9zb3VyY2VzIGIvc291cmNlcwppbmRleCBkYWRhZTJjLi5mNDJiNjhk IDEwMDY0NAotLS0gYS9zb3VyY2VzCisrKyBiL3NvdXJjZXMKQEAgLTEgKzEgQEAKLWYxZDBkNzMz MjdkNzRiMzAyZjUwMzc2M2JkZGYxY2Y4ICBvcGVuc3NsLTEuMC4wLXVzYS50YXIuYnoyCiszNmE5 OTM2ZTE3OTE1NjZiMjA1ZGFhN2NiNGJlYTA3NCAgb3BlbnNzbC0xLjAuMGEtdXNhLnRhci5iejIK