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: - update to new upstream version, no soname bump needed Date: Tue, 09 Jun 2026 12:41:55 GMT Message-ID: <178100891540.1.231807814996400392.rpms-openssl-aabbc9ad89c5@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: aabbc9ad89c55d298f05a8d63680aeac152a9308 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvb3BlbnNzbAogICAgICAgICAgICBCcmFuY2ggOiByZWJhc2VfNDBiZXRhCiAg ICAgICAgICAgIENvbW1pdCA6IGFhYmJjOWFkODljNTVkMjk4ZjA1YThkNjM2ODBhZWFjMTUyYTkz MDgKICAgICAgICAgICAgQXV0aG9yIDogVG9tw6HFoSBNcsOheiA8dG1yYXpAZmVkb3JhcHJvamVj dC5vcmc+CiAgICAgICAgICAgIERhdGUgICA6IDIwMDktMTEtMTJUMTU6NTE6NDArMDA6MDAKICAg ICAgICAgICAgU3RhdHMgIDogKzEyNjgyLy0xNDYwOCBpbiAyOSBmaWxlKHMpCiAgICAgICAgICAg IFVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMvb3BlbnNzbC9jL2Fh YmJjOWFkODljNTVkMjk4ZjA1YThkNjM2ODBhZWFjMTUyYTkzMDg/YnJhbmNoPXJlYmFzZV80MGJl dGEKCiAgICAgICAgICAgIExvZzoKICAgICAgICAgICAgLSB1cGRhdGUgdG8gbmV3IHVwc3RyZWFt IHZlcnNpb24sIG5vIHNvbmFtZSBidW1wIG5lZWRlZAotIGZpeCBDVkUtMjAwOS0zNTU1IC0gbm90 ZSB0aGF0IHRoZSBmaXggaXMgYnlwYXNzZWQgaWYgU1NMX09QX0FMTCBpcyB1c2VkCiAgICBzbyB0 aGUgY29tcGF0aWJpbGl0eSB3aXRoIHVuZml4ZWQgY2xpZW50cyBpcyBub3QgYnJva2VuLiBUaGUg cHJvdG9jb2wKICAgIGV4dGVuc2lvbiBpcyBhbHNvIG5vdCBmaW5hbC4KCi0tLQpkaWZmIC0tZ2l0 IGEvLmN2c2lnbm9yZSBiLy5jdnNpZ25vcmUKaW5kZXggMzdlMjcyMi4uMzgxOTY0NyAxMDA2NDQK LS0tIGEvLmN2c2lnbm9yZQorKysgYi8uY3ZzaWdub3JlCkBAIC0xICsxIEBACi1vcGVuc3NsLTEu MC4wLWJldGEzLXVzYS50YXIuYnoyCitvcGVuc3NsLTEuMC4wLWJldGE0LXVzYS50YXIuYnoyCgpk aWZmIC0tZ2l0IGEvb3BlbnNzbC0wLjkuOGItYWxpYXNpbmctYnVnLnBhdGNoIGIvb3BlbnNzbC0w LjkuOGItYWxpYXNpbmctYnVnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4 ZDNiMzZhLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMC45LjhiLWFsaWFzaW5nLWJ1Zy5wYXRjaAor KysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLQotVGhpcyBwYXRjaCBmaXhlcyBhIHZpb2xh dGlvbiBvZiB0aGUgQyBhbGlhc2luZyBydWxlcyB0aGF0IGNhbiBjYXVzZQotbWlzY29tcGlsYXRp b24gd2l0aCBzb21lIGNvbXBpbGVyIHZlcnNpb25zLgotCi0tLS0gb3BlbnNzbC0wLjkuOGIvY3J5 cHRvL2Rzby9kc29fZGxmY24uYy5vcmlnCTIwMDYtMTAtMzAgMTg6MjE6MzUuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0wLjkuOGIvY3J5cHRvL2Rzby9kc29fZGxmY24uYwkyMDA2LTEwLTMw IDE4OjIxOjM3LjAwMDAwMDAwMCArMDEwMAotQEAgLTIzNyw3ICsyMzcsNyBAQCBzdGF0aWMgdm9p ZCAqZGxmY25fYmluZF92YXIoRFNPICpkc28sIGNvCi0gc3RhdGljIERTT19GVU5DX1RZUEUgZGxm Y25fYmluZF9mdW5jKERTTyAqZHNvLCBjb25zdCBjaGFyICpzeW1uYW1lKQotIAl7Ci0gCXZvaWQg KnB0cjsKLS0JRFNPX0ZVTkNfVFlQRSBzeW0sICp0c3ltID0gJnN5bTsKLSsJRFNPX0ZVTkNfVFlQ RSBzeW07Ci0gCi0gCWlmKChkc28gPT0gTlVMTCkgfHwgKHN5bW5hbWUgPT0gTlVMTCkpCi0gCQl7 Ci1AQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyBEU09fRlVOQ19UWVBFIGRsZmNuX2JpbmRfZnVu YyhEU08KLSAJCURTT2VycihEU09fRl9ETEZDTl9CSU5EX0ZVTkMsRFNPX1JfTlVMTF9IQU5ETEUp OwotIAkJcmV0dXJuKE5VTEwpOwotIAkJfQotLQkqKHZvaWQgKiopKHRzeW0pID0gZGxzeW0ocHRy LCBzeW1uYW1lKTsKLSsJc3ltID0gZGxzeW0ocHRyLCBzeW1uYW1lKTsKLSAJaWYoc3ltID09IE5V TEwpCi0gCQl7Ci0gCQlEU09lcnIoRFNPX0ZfRExGQ05fQklORF9GVU5DLERTT19SX1NZTV9GQUlM VVJFKTsKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTAuOS44ai1jYS1kaXIucGF0Y2ggYi9vcGVuc3Ns LTAuOS44ai1jYS1kaXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3Y2Qz ZjkuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0wLjkuOGotY2EtZGlyLnBhdGNoCisrKyAvZGV2L251 bGwKQEAgLTEsMzYgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0wLjkuOGovYXBwcy9vcGVuc3Ns LmNuZi5jYS1kaXIgb3BlbnNzbC0wLjkuOGovYXBwcy9vcGVuc3NsLmNuZgotLS0tIG9wZW5zc2wt MC45LjhqL2FwcHMvb3BlbnNzbC5jbmYuY2EtZGlyCTIwMDktMDEtMTMgMjM6MjA6MTAuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0wLjkuOGovYXBwcy9vcGVuc3NsLmNuZgkyMDA5LTAxLTEz IDIzOjIwOjEwLjAwMDAwMDAwMCArMDEwMAotQEAgLTM0LDcgKzM0LDcgQEAgZGVmYXVsdF9jYQk9 IENBX2RlZmF1bHQJCSMgVGhlIGRlZmF1bHQgYwotICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gWyBDQV9kZWZhdWx0 IF0KLSAKLS1kaXIJCT0gLi9kZW1vQ0EJCSMgV2hlcmUgZXZlcnl0aGluZyBpcyBrZXB0Ci0rZGly CQk9IC9ldGMvcGtpL0NBCQkjIFdoZXJlIGV2ZXJ5dGhpbmcgaXMga2VwdAotIGNlcnRzCQk9ICRk aXIvY2VydHMJCSMgV2hlcmUgdGhlIGlzc3VlZCBjZXJ0cyBhcmUga2VwdAotIGNybF9kaXIJCT0g JGRpci9jcmwJCSMgV2hlcmUgdGhlIGlzc3VlZCBjcmwgYXJlIGtlcHQKLSBkYXRhYmFzZQk9ICRk aXIvaW5kZXgudHh0CSMgZGF0YWJhc2UgaW5kZXggZmlsZS4KLWRpZmYgLXVwIG9wZW5zc2wtMC45 LjhqL2FwcHMvQ0Euc2guY2EtZGlyIG9wZW5zc2wtMC45LjhqL2FwcHMvQ0Euc2gKLS0tLSBvcGVu c3NsLTAuOS44ai9hcHBzL0NBLnNoLmNhLWRpcgkyMDA1LTA3LTA0IDIzOjQ0OjIyLjAwMDAwMDAw MCArMDIwMAotKysrIG9wZW5zc2wtMC45LjhqL2FwcHMvQ0Euc2gJMjAwOS0wMS0xMyAyMzoyMDox MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0zOSw3ICszOSw3IEBAIENBPSIkT1BFTlNTTCBjYSAkU1NM RUFZX0NPTkZJRyIKLSBWRVJJRlk9IiRPUEVOU1NMIHZlcmlmeSIKLSBYNTA5PSIkT1BFTlNTTCB4 NTA5IgotIAotLUNBVE9QPS4vZGVtb0NBCi0rQ0FUT1A9L2V0Yy9wa2kvQ0EKLSBDQUtFWT0uL2Nh a2V5LnBlbQotIENBUkVRPS4vY2FyZXEucGVtCi0gQ0FDRVJUPS4vY2FjZXJ0LnBlbQotZGlmZiAt dXAgb3BlbnNzbC0wLjkuOGovYXBwcy9DQS5wbC5pbi5jYS1kaXIgb3BlbnNzbC0wLjkuOGovYXBw cy9DQS5wbC5pbgotLS0tIG9wZW5zc2wtMC45LjhqL2FwcHMvQ0EucGwuaW4uY2EtZGlyCTIwMDYt MDQtMjggMDI6Mjg6NTEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0wLjkuOGovYXBwcy9D QS5wbC5pbgkyMDA5LTAxLTEzIDIzOjIwOjEwLjAwMDAwMDAwMCArMDEwMAotQEAgLTUzLDcgKzUz LDcgQEAgJFZFUklGWT0iJG9wZW5zc2wgdmVyaWZ5IjsKLSAkWDUwOT0iJG9wZW5zc2wgeDUwOSI7 Ci0gJFBLQ1MxMj0iJG9wZW5zc2wgcGtjczEyIjsKLSAKLS0kQ0FUT1A9Ii4vZGVtb0NBIjsKLSsk Q0FUT1A9Ii9ldGMvcGtpL0NBIjsKLSAkQ0FLRVk9ImNha2V5LnBlbSI7Ci0gJENBUkVRPSJjYXJl cS5wZW0iOwotICRDQUNFUlQ9ImNhY2VydC5wZW0iOwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMC45 LjhrLWFsZ28tZG9jLnBhdGNoIGIvb3BlbnNzbC0wLjkuOGstYWxnby1kb2MucGF0Y2gKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NTIxYTQuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0w LjkuOGstYWxnby1kb2MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotZGlm ZiAtdXAgb3BlbnNzbC0wLjkuOGsvZG9jL2NyeXB0by9FVlBfRGlnZXN0SW5pdC5wb2QuYWxnby1k b2Mgb3BlbnNzbC0wLjkuOGsvZG9jL2NyeXB0by9FVlBfRGlnZXN0SW5pdC5wb2QKLS0tLSBvcGVu c3NsLTAuOS44ay9kb2MvY3J5cHRvL0VWUF9EaWdlc3RJbml0LnBvZC5hbGdvLWRvYwkyMDA0LTA1 LTIwIDIzOjM5OjUwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMC45LjhrL2RvYy9jcnlw dG8vRVZQX0RpZ2VzdEluaXQucG9kCTIwMDktMDYtMzAgMTI6MDQ6NDcuMDAwMDAwMDAwICswMjAw Ci1AQCAtNiw3ICs2LDggQEAgRVZQX01EX0NUWF9pbml0LCBFVlBfTURfQ1RYX2NyZWF0ZSwgRVZQ XwotIEVWUF9EaWdlc3RGaW5hbF9leCwgRVZQX01EX0NUWF9jbGVhbnVwLCBFVlBfTURfQ1RYX2Rl c3Ryb3ksIEVWUF9NQVhfTURfU0laRSwKLSBFVlBfTURfQ1RYX2NvcHlfZXgsIEVWUF9NRF9DVFhf Y29weSwgRVZQX01EX3R5cGUsIEVWUF9NRF9wa2V5X3R5cGUsIEVWUF9NRF9zaXplLAotIEVWUF9N RF9ibG9ja19zaXplLCBFVlBfTURfQ1RYX21kLCBFVlBfTURfQ1RYX3NpemUsIEVWUF9NRF9DVFhf YmxvY2tfc2l6ZSwgRVZQX01EX0NUWF90eXBlLAotLUVWUF9tZF9udWxsLCBFVlBfbWQyLCBFVlBf bWQ1LCBFVlBfc2hhLCBFVlBfc2hhMSwgRVZQX2RzcywgRVZQX2RzczEsIEVWUF9tZGMyLAotK0VW UF9tZF9udWxsLCBFVlBfbWQyLCBFVlBfbWQ1LCBFVlBfc2hhLCBFVlBfc2hhMSwgRVZQX3NoYTIy NCwKLStFVlBfc2hhMjU2LCBFVlBfc2hhMzg0LCBFVlBfc2hhNTEyLCBFVlBfZHNzLCBFVlBfZHNz MSwgRVZQX21kYzIsCi0gRVZQX3JpcGVtZDE2MCwgRVZQX2dldF9kaWdlc3RieW5hbWUsIEVWUF9n ZXRfZGlnZXN0YnluaWQsIEVWUF9nZXRfZGlnZXN0YnlvYmogLQotIEVWUCBkaWdlc3Qgcm91dGlu ZXMKLSAKLUBAIC01MSw2ICs1MiwxMCBAQCBFVlAgZGlnZXN0IHJvdXRpbmVzCi0gIGNvbnN0IEVW UF9NRCAqRVZQX21kNSh2b2lkKTsKLSAgY29uc3QgRVZQX01EICpFVlBfc2hhKHZvaWQpOwotICBj b25zdCBFVlBfTUQgKkVWUF9zaGExKHZvaWQpOwotKyBjb25zdCBFVlBfTUQgKkVWUF9zaGEyMjQo dm9pZCk7Ci0rIGNvbnN0IEVWUF9NRCAqRVZQX3NoYTI1Nih2b2lkKTsKLSsgY29uc3QgRVZQX01E ICpFVlBfc2hhMzg0KHZvaWQpOwotKyBjb25zdCBFVlBfTUQgKkVWUF9zaGE1MTIodm9pZCk7Ci0g IGNvbnN0IEVWUF9NRCAqRVZQX2Rzcyh2b2lkKTsKLSAgY29uc3QgRVZQX01EICpFVlBfZHNzMSh2 b2lkKTsKLSAgY29uc3QgRVZQX01EICpFVlBfbWRjMih2b2lkKTsKLUBAIC03MCw3ICs3NSw3IEBA IEVWUF9NRF9DVFhfY3JlYXRlKCkgYWxsb2NhdGVzLCBpbml0aWFsaXoKLSAKLSBFVlBfRGlnZXN0 SW5pdF9leCgpIHNldHMgdXAgZGlnZXN0IGNvbnRleHQgQjxjdHg+IHRvIHVzZSBhIGRpZ2VzdAot IEI8dHlwZT4gZnJvbSBFTkdJTkUgQjxpbXBsPi4gQjxjdHg+IG11c3QgYmUgaW5pdGlhbGl6ZWQg YmVmb3JlIGNhbGxpbmcgdGhpcwotLWZ1bmN0aW9uLiBCPHR5cGU+IHdpbGwgdHlwaWNhbGx5IGJl IHN1cHBsaWVkIGJ5IGEgZnVuY3Rpb25zdWNoIGFzIEVWUF9zaGExKCkuCi0rZnVuY3Rpb24uIEI8 dHlwZT4gd2lsbCB0eXBpY2FsbHkgYmUgc3VwcGxpZWQgYnkgYSBmdW5jdGlvbiBzdWNoIGFzIEVW UF9zaGExKCkuCi0gSWYgQjxpbXBsPiBpcyBOVUxMIHRoZW4gdGhlIGRlZmF1bHQgaW1wbGVtZW50 YXRpb24gb2YgZGlnZXN0IEI8dHlwZT4gaXMgdXNlZC4KLSAKLSBFVlBfRGlnZXN0VXBkYXRlKCkg aGFzaGVzIEI8Y250PiBieXRlcyBvZiBkYXRhIGF0IEI8ZD4gaW50byB0aGUKLUBAIC0xMjcsOSAr MTMyLDExIEBAIHdpdGggdGhpcyBkaWdlc3QuIEZvciBleGFtcGxlIEVWUF9zaGExKCkKLSByZXR1 cm4gQjxOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uPi4gVGhpcyAibGluayIgYmV0d2VlbiBkaWdl c3RzIGFuZCBzaWduYXR1cmUKLSBhbGdvcml0aG1zIG1heSBub3QgYmUgcmV0YWluZWQgaW4gZnV0 dXJlIHZlcnNpb25zIG9mIE9wZW5TU0wuCi0gCi0tRVZQX21kMigpLCBFVlBfbWQ1KCksIEVWUF9z aGEoKSwgRVZQX3NoYTEoKSwgRVZQX21kYzIoKSBhbmQgRVZQX3JpcGVtZDE2MCgpCi0tcmV0dXJu IEI8RVZQX01EPiBzdHJ1Y3R1cmVzIGZvciB0aGUgTUQyLCBNRDUsIFNIQSwgU0hBMSwgTURDMiBh bmQgUklQRU1EMTYwIGRpZ2VzdAotLWFsZ29yaXRobXMgcmVzcGVjdGl2ZWx5LiBUaGUgYXNzb2Np YXRlZCBzaWduYXR1cmUgYWxnb3JpdGhtIGlzIFJTQSBpbiBlYWNoIGNhc2UuCi0rRVZQX21kMigp LCBFVlBfbWQ1KCksIEVWUF9zaGEoKSwgRVZQX3NoYTEoKSwgRVZQX3NoYTIyNCgpLCBFVlBfc2hh MjU2KCksCi0rRVZQX3NoYTM4NCgpLCBFVlBfc2hhNTEyKCksIEVWUF9tZGMyKCkgYW5kIEVWUF9y aXBlbWQxNjAoKQotK3JldHVybiBCPEVWUF9NRD4gc3RydWN0dXJlcyBmb3IgdGhlIE1EMiwgTUQ1 LCBTSEEsIFNIQTEsIFNIQTIyNCwgU0hBMjU2LCBTSEEzODQsCi0rU0hBNTEyLCBNREMyIGFuZCBS SVBFTUQxNjAgZGlnZXN0IGFsZ29yaXRobXMgcmVzcGVjdGl2ZWx5LiBUaGUgYXNzb2NpYXRlZAot K3NpZ25hdHVyZSBhbGdvcml0aG0gaXMgUlNBIGluIGVhY2ggY2FzZS4KLSAKLSBFVlBfZHNzKCkg YW5kIEVWUF9kc3MxKCkgcmV0dXJuIEI8RVZQX01EPiBzdHJ1Y3R1cmVzIGZvciBTSEEgYW5kIFNI QTEgZGlnZXN0Ci0gYWxnb3JpdGhtcyBidXQgdXNpbmcgRFNTIChEU0EpIGZvciB0aGUgc2lnbmF0 dXJlIGFsZ29yaXRobS4KLUBAIC0xNTYsNyArMTYzLDggQEAgRVZQX01EX3NpemUoKSwgRVZQX01E X2Jsb2NrX3NpemUoKSwgRVZQXwotIEVWUF9NRF9DVFhfYmxvY2tfc2l6ZSgpCWFuZCBFVlBfTURf YmxvY2tfc2l6ZSgpIHJldHVybiB0aGUgZGlnZXN0IG9yIGJsb2NrCi0gc2l6ZSBpbiBieXRlcy4K LSAKLS1FVlBfbWRfbnVsbCgpLCBFVlBfbWQyKCksIEVWUF9tZDUoKSwgRVZQX3NoYSgpLCBFVlBf c2hhMSgpLCBFVlBfZHNzKCksCi0rRVZQX21kX251bGwoKSwgRVZQX21kMigpLCBFVlBfbWQ1KCks IEVWUF9zaGEoKSwgRVZQX3NoYTEoKSwKLStFVlBfc2hhMjI0KCksIEVWUF9zaGEyNTYoKSwgRVZQ X3NoYTM4NCgpLCBFVlBfc2hhNTEyKCksIEVWUF9kc3MoKSwKLSBFVlBfZHNzMSgpLCBFVlBfbWRj MigpIGFuZCBFVlBfcmlwZW1kMTYwKCkgcmV0dXJuIHBvaW50ZXJzIHRvIHRoZQotIGNvcnJlc3Bv bmRpbmcgRVZQX01EIHN0cnVjdHVyZXMuCi0gCi1kaWZmIC11cCBvcGVuc3NsLTAuOS44ay9kb2Mv Y3J5cHRvL0VWUF9FbmNyeXB0SW5pdC5wb2QuYWxnby1kb2Mgb3BlbnNzbC0wLjkuOGsvZG9jL2Ny eXB0by9FVlBfRW5jcnlwdEluaXQucG9kCi0tLS0gb3BlbnNzbC0wLjkuOGsvZG9jL2NyeXB0by9F VlBfRW5jcnlwdEluaXQucG9kLmFsZ28tZG9jCTIwMDUtMDQtMTUgMTg6MDE6MzUuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0wLjkuOGsvZG9jL2NyeXB0by9FVlBfRW5jcnlwdEluaXQucG9k CTIwMDktMDYtMzAgMTI6MDQ6NDcuMDAwMDAwMDAwICswMjAwCi1AQCAtOTEsNiArOTEsMzIgQEAg RVZQX0NJUEhFUl9DVFhfc2V0X3BhZGRpbmcgLSBFVlAgY2lwaGVyIAotICBpbnQgRVZQX0NJUEhF Ul9wYXJhbV90b19hc24xKEVWUF9DSVBIRVJfQ1RYICpjLCBBU04xX1RZUEUgKnR5cGUpOwotICBp bnQgRVZQX0NJUEhFUl9hc24xX3RvX3BhcmFtKEVWUF9DSVBIRVJfQ1RYICpjLCBBU04xX1RZUEUg KnR5cGUpOwotIAotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZTModm9pZCk7Ci0rIGNv bnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlM19lY2Iodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBI RVIgKkVWUF9kZXNfZWRlM19jZmI2NCh2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rl c19lZGUzX2NmYjEodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlM19jZmI4 KHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZTNfb2ZiKHZvaWQpOwotKyBj b25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZTNfY2JjKHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQ SEVSICpFVlBfYWVzXzEyOF9lY2Iodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNf MTI4X2NiYyh2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY2ZiMSh2b2lk KTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY2ZiOCh2b2lkKTsKLSsgY29uc3Qg RVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY2ZiMTI4KHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVS ICpFVlBfYWVzXzEyOF9vZmIodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTky X2VjYih2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfY2JjKHZvaWQpOwot KyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9jZmIxKHZvaWQpOwotKyBjb25zdCBFVlBf Q0lQSEVSICpFVlBfYWVzXzE5Ml9jZmI4KHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBf YWVzXzE5Ml9jZmIxMjgodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX29m Yih2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfZWNiKHZvaWQpOwotKyBj b25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jYmModm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBI RVIgKkVWUF9hZXNfMjU2X2NmYjEodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNf MjU2X2NmYjgodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NmYjEyOCh2 b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfb2ZiKHZvaWQpOwotKwotID1o ZWFkMSBERVNDUklQVElPTgotIAotIFRoZSBFVlAgY2lwaGVyIHJvdXRpbmVzIGFyZSBhIGhpZ2gg bGV2ZWwgaW50ZXJmYWNlIHRvIGNlcnRhaW4KLUBAIC0yOTcsNiArMzIzLDE4IEBAIFRocmVlIGtl eSB0cmlwbGUgREVTIGluIENCQywgRUNCLCBDRkIgYW4KLSAKLSBERVNYIGFsZ29yaXRobSBpbiBD QkMgbW9kZS4KLSAKLSs9aXRlbSBFVlBfYWVzXzEyOF9jYmModm9pZCksIEVWUF9hZXNfMTI4X2Vj YigpLCBFVlBfYWVzXzEyOF9vZmIodm9pZCksIEVWUF9hZXNfMTI4X2NmYjEodm9pZCksIEVWUF9h ZXNfMTI4X2NmYjgodm9pZCksIEVWUF9hZXNfMTI4X2NmYjEyOCh2b2lkKQotKwotK0FFUyB3aXRo IDEyOCBiaXQga2V5IGxlbmd0aCBpbiBDQkMsIEVDQiwgT0ZCIGFuZCBDRkIgbW9kZXMgcmVzcGVj dGl2ZWx5LgotKwotKz1pdGVtIEVWUF9hZXNfMTkyX2NiYyh2b2lkKSwgRVZQX2Flc18xOTJfZWNi KCksIEVWUF9hZXNfMTkyX29mYih2b2lkKSwgRVZQX2Flc18xOTJfY2ZiMSh2b2lkKSwgRVZQX2Fl c18xOTJfY2ZiOCh2b2lkKSwgRVZQX2Flc18xOTJfY2ZiMTI4KHZvaWQpCi0rCi0rQUVTIHdpdGgg MTkyIGJpdCBrZXkgbGVuZ3RoIGluIENCQywgRUNCLCBPRkIgYW5kIENGQiBtb2RlcyByZXNwZWN0 aXZlbHkuCi0rCi0rPWl0ZW0gRVZQX2Flc18yNTZfY2JjKHZvaWQpLCBFVlBfYWVzXzI1Nl9lY2Io KSwgRVZQX2Flc18yNTZfb2ZiKHZvaWQpLCBFVlBfYWVzXzI1Nl9jZmIxKHZvaWQpLCBFVlBfYWVz XzI1Nl9jZmI4KHZvaWQpLCBFVlBfYWVzXzI1Nl9jZmIxMjgodm9pZCkKLSsKLStBRVMgd2l0aCAy NTYgYml0IGtleSBsZW5ndGggaW4gQ0JDLCBFQ0IsIE9GQiBhbmQgQ0ZCIG1vZGVzIHJlc3BlY3Rp dmVseS4KLSsKLSA9aXRlbSBFVlBfcmM0KHZvaWQpCi0gCi0gUkM0IHN0cmVhbSBjaXBoZXIuIFRo aXMgaXMgYSB2YXJpYWJsZSBrZXkgbGVuZ3RoIGNpcGhlciB3aXRoIGRlZmF1bHQga2V5IGxlbmd0 aCAxMjggYml0cy4KCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGEzLWNhbWVsbGlhLXJv dW5kcy5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTMtY2FtZWxsaWEtcm91bmRzLnBhdGNoCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDNiNjAyLi4wMDAwMDAwCi0tLSBhL29wZW5z c2wtMS4wLjAtYmV0YTMtY2FtZWxsaWEtcm91bmRzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEs MTIgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2FtZWxsaWEv YXNtL2NtbGwteDg2XzY0LnBsLnJvdW5kcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9jYW1l bGxpYS9hc20vY21sbC14ODZfNjQucGwKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9j YW1lbGxpYS9hc20vY21sbC14ODZfNjQucGwucm91bmRzCTIwMDktMDktMTUgMTI6MDk6MDguMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2FtZWxsaWEvYXNt L2NtbGwteDg2XzY0LnBsCTIwMDktMDktMTUgMTI6MDk6NDguMDAwMDAwMDAwICswMjAwCi1AQCAt NjU2LDcgKzY1Niw3IEBAIENhbWVsbGlhX2NiY19lbmNyeXB0OgotIAltb3YJJXJzaSwkb3V0CQkj IG91dCBhcmd1bWVudAotIAltb3YJJXI4LCVyYngJCSMgaXZwIGFyZ3VtZW50Ci0gCW1vdgklcmN4 LCRrZXkJCSMga2V5IGFyZ3VtZW50Ci0tCW1vdgkyNzIoJXJjeCksJGtleWVuZAkjIGdyYW5kUm91 bmRzCi0rCW1vdgkyNzIoJXJjeCksJHtrZXllbmR9ZAkjIGdyYW5kUm91bmRzCi0gCi0gCW1vdgkl cjgsJF9pdnAKLSAJbW92CSVyYnAsJF9yc3AKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJl dGEzLWNvbnN0LnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhMy1jb25zdC5wYXRjaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdjMWM5NS4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEu MC4wLWJldGEzLWNvbnN0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9kb2Mvc3NsL1NTTF9DSVBIRVJfZ2V0X25hbWUucG9k LmNvbnN0IG9wZW5zc2wtMS4wLjAtYmV0YTMvZG9jL3NzbC9TU0xfQ0lQSEVSX2dldF9uYW1lLnBv ZAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvZG9jL3NzbC9TU0xfQ0lQSEVSX2dldF9uYW1lLnBv ZC5jb25zdAkyMDA5LTAyLTE0IDIyOjQ5OjM3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTMvZG9jL3NzbC9TU0xfQ0lQSEVSX2dldF9uYW1lLnBvZAkyMDA5LTA4LTIyIDE2 OjE1OjMyLjAwMDAwMDAwMCArMDIwMAotQEAgLTExLDcgKzExLDcgQEAgU1NMX0NJUEhFUl9nZXRf bmFtZSwgU1NMX0NJUEhFUl9nZXRfYml0cwotICBjb25zdCBjaGFyICpTU0xfQ0lQSEVSX2dldF9u YW1lKGNvbnN0IFNTTF9DSVBIRVIgKmNpcGhlcik7Ci0gIGludCBTU0xfQ0lQSEVSX2dldF9iaXRz KGNvbnN0IFNTTF9DSVBIRVIgKmNpcGhlciwgaW50ICphbGdfYml0cyk7Ci0gIGNoYXIgKlNTTF9D SVBIRVJfZ2V0X3ZlcnNpb24oY29uc3QgU1NMX0NJUEhFUiAqY2lwaGVyKTsKLS0gY2hhciAqU1NM X0NJUEhFUl9kZXNjcmlwdGlvbihTU0xfQ0lQSEVSICpjaXBoZXIsIGNoYXIgKmJ1ZiwgaW50IHNp emUpOwotKyBjaGFyICpTU0xfQ0lQSEVSX2Rlc2NyaXB0aW9uKGNvbnN0IFNTTF9DSVBIRVIgKmNp cGhlciwgY2hhciAqYnVmLCBpbnQgc2l6ZSk7Ci0gCi0gPWhlYWQxIERFU0NSSVBUSU9OCi0gCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2xfY2lwaC5jLmNvbnN0IG9wZW5zc2wt MS4wLjAtYmV0YTMvc3NsL3NzbF9jaXBoLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9z c2xfY2lwaC5jLmNvbnN0CTIwMDktMDgtMjIgMTU6NTY6MTIuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3NsX2NpcGguYwkyMDA5LTA4LTIyIDE1OjU2OjEyLjAw MDAwMDAwMCArMDIwMAotQEAgLTE0NTgsNyArMTQ1OCw3IEBAIFNUQUNLX09GKFNTTF9DSVBIRVIp ICpzc2xfY3JlYXRlX2NpcGhlcl8KLSAJcmV0dXJuKGNpcGhlcnN0YWNrKTsKLSAJfQotIAotLWNo YXIgKlNTTF9DSVBIRVJfZGVzY3JpcHRpb24oU1NMX0NJUEhFUiAqY2lwaGVyLCBjaGFyICpidWYs IGludCBsZW4pCi0rY2hhciAqU1NMX0NJUEhFUl9kZXNjcmlwdGlvbihjb25zdCBTU0xfQ0lQSEVS ICpjaXBoZXIsIGNoYXIgKmJ1ZiwgaW50IGxlbikKLSAJewotIAlpbnQgaXNfZXhwb3J0LHBrbCxr bDsKLSAJY29uc3QgY2hhciAqdmVyLCpleHBfc3RyOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhMy9zc2wvc3NsLmguY29uc3Qgb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3NsLmgKLS0tLSBv cGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2wuaC5jb25zdAkyMDA5LTA4LTIyIDE1OjU2OjExLjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3NzbC5oCTIwMDktMDgt MjIgMTU6NTY6MTIuMDAwMDAwMDAwICswMjAwCi1AQCAtMTYzOCw3ICsxNjM4LDcgQEAgbG9uZyBT U0xfZ2V0X2RlZmF1bHRfdGltZW91dChjb25zdCBTU0wgKgotIAotIGludCBTU0xfbGlicmFyeV9p bml0KHZvaWQgKTsKLSAKLS1jaGFyICpTU0xfQ0lQSEVSX2Rlc2NyaXB0aW9uKFNTTF9DSVBIRVIg KixjaGFyICpidWYsaW50IHNpemUpOwotK2NoYXIgKlNTTF9DSVBIRVJfZGVzY3JpcHRpb24oY29u c3QgU1NMX0NJUEhFUiAqLGNoYXIgKmJ1ZixpbnQgc2l6ZSk7Ci0gU1RBQ0tfT0YoWDUwOV9OQU1F KSAqU1NMX2R1cF9DQV9saXN0KFNUQUNLX09GKFg1MDlfTkFNRSkgKnNrKTsKLSAKLSBTU0wgKlNT TF9kdXAoU1NMICpzc2wpOwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTMtY3VybC5w YXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTMtY3VybC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggNjE0MWMwZS4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wLWJldGEzLWN1 cmwucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGEzL2FwcHMvdHNnZXQuY3VybCBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvdHNn ZXQKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvdHNnZXQuY3VybAkyMDA2LTAyLTEzIDAw OjExOjIxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvYXBwcy90c2dl dAkyMDA5LTA4LTIxIDE1OjM3OjI0LjAwMDAwMDAwMCArMDIwMAotQEAgLTcsNyArNyw3IEBAIHVz ZSBzdHJpY3Q7Ci0gdXNlIElPOjpIYW5kbGU7Ci0gdXNlIEdldG9wdDo6U3RkOwotIHVzZSBGaWxl OjpCYXNlbmFtZTsKLS11c2UgV1dXOjpDdXJsOjplYXN5OwotK3VzZSBXV1c6OkN1cmw6OkVhc3k7 Ci0gCi0gdXNlIHZhcnMgcXcoJW9wdGlvbnMpOwotIAotQEAgLTM3LDcgKzM3LDcgQEAgc3ViIGNy ZWF0ZV9jdXJsIHsKLSAgICAgbXkgJHVybCA9IHNoaWZ0OwotIAotICAgICAjIENyZWF0ZSBDdXJs IG9iamVjdC4KLS0gICAgbXkgJGN1cmwgPSBXV1c6OkN1cmw6OmVhc3k6Om5ldygpOwotKyAgICBt eSAkY3VybCA9IFdXVzo6Q3VybDo6RWFzeTo6bmV3KCk7Ci0gCi0gICAgICMgRXJyb3ItaGFuZGxp bmcgcmVsYXRlZCBvcHRpb25zLgotICAgICAkY3VybC0+c2V0b3B0KENVUkxPUFRfVkVSQk9TRSwg MSkgaWYgJG9wdGlvbnN7ZH07Ci1AQCAtMTkyLDQgKzE5Miw0IEBAIFJFUVVFU1Q6IGZvcmVhY2gg KEBBUkdWKSB7Ci0gICAgIFNUREVSUi0+cHJpbnRmbHVzaCgiLCAkb3V0cHV0IHdyaXR0ZW4uXG4i KSBpZiAkb3B0aW9uc3t2fTsKLSB9Ci0gJGN1cmwtPmNsZWFudXAoKTsKLS1XV1c6OkN1cmw6OmVh c3k6Omdsb2JhbF9jbGVhbnVwKCk7Ci0rV1dXOjpDdXJsOjpFYXN5OjpnbG9iYWxfY2xlYW51cCgp OwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTMtZGVmYXVsdC1wYXRocy5wYXRjaCBi L29wZW5zc2wtMS4wLjAtYmV0YTMtZGVmYXVsdC1wYXRocy5wYXRjaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNGVkMDJlMC4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wLWJldGEz LWRlZmF1bHQtcGF0aHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi1kaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvc19jbGllbnQuYy5kZWZhdWx0LXBhdGhzIG9w ZW5zc2wtMS4wLjAtYmV0YTMvYXBwcy9zX2NsaWVudC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRh My9hcHBzL3NfY2xpZW50LmMuZGVmYXVsdC1wYXRocwkyMDA5LTA2LTMwIDE4OjEwOjI0LjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvYXBwcy9zX2NsaWVudC5jCTIwMDkt MDgtMDUgMTg6MTc6NTIuMDAwMDAwMDAwICswMjAwCi1AQCAtODg4LDEyICs4ODgsMTMgQEAgYmFk OgotIAlpZiAoIXNldF9jZXJ0X2tleV9zdHVmZihjdHgsY2VydCxrZXkpKQotIAkJZ290byBlbmQ7 Ci0gCi0tCWlmICgoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGN0eCxDQWZpbGUsQ0Fw YXRoKSkgfHwKLS0JCSghU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoY3R4KSkpCi0r CWlmICghU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY3R4LENBZmlsZSxDQXBhdGgpKQot KwkJewotKwkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKLSsJCX0KLSsJaWYgKCFTU0xfQ1RY X3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhjdHgpKQotIAkJewotLQkJLyogQklPX3ByaW50Zihi aW9fZXJyLCJlcnJvciBzZXR0aW5nIGRlZmF1bHQgdmVyaWZ5IGxvY2F0aW9uc1xuIik7ICovCi0g CQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwotLQkJLyogZ290byBlbmQ7ICovCi0gCQl9Ci0g Ci0gI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh My9hcHBzL3Nfc2VydmVyLmMuZGVmYXVsdC1wYXRocyBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMv c19zZXJ2ZXIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvYXBwcy9zX3NlcnZlci5jLmRlZmF1 bHQtcGF0aHMJMjAwOS0wNi0zMCAxODoxMDoyNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGEzL2FwcHMvc19zZXJ2ZXIuYwkyMDA5LTA4LTA1IDE4OjE4OjQwLjAwMDAwMDAw MCArMDIwMAotQEAgLTE0MDMsMTIgKzE0MDMsMTMgQEAgYmFkOgotIAkJfQotICNlbmRpZgotIAot LQlpZiAoKCFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjdHgsQ0FmaWxlLENBcGF0aCkp IHx8Ci0tCQkoIVNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKGN0eCkpKQotKwlpZiAo IVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGN0eCxDQWZpbGUsQ0FwYXRoKSkKLSsJCXsK LSsJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0rCQl9Ci0rCWlmICghU1NMX0NUWF9zZXRf ZGVmYXVsdF92ZXJpZnlfcGF0aHMoY3R4KSkKLSAJCXsKLS0JCS8qIEJJT19wcmludGYoYmlvX2Vy ciwiWDUwOV9sb2FkX3ZlcmlmeV9sb2NhdGlvbnNcbiIpOyAqLwotIAkJRVJSX3ByaW50X2Vycm9y cyhiaW9fZXJyKTsKLS0JCS8qIGdvdG8gZW5kOyAqLwotIAkJfQotIAlpZiAodnBtKQotIAkJU1NM X0NUWF9zZXQxX3BhcmFtKGN0eCwgdnBtKTsKLUBAIC0xNDU3LDggKzE0NTgsMTEgQEAgYmFkOgot IAotIAkJU1NMX0NUWF9zZXNzX3NldF9jYWNoZV9zaXplKGN0eDIsMTI4KTsKLSAKLS0JCWlmICgo IVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGN0eDIsQ0FmaWxlLENBcGF0aCkpIHx8Ci0t CQkJKCFTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhjdHgyKSkpCi0rCQlpZiAoIVNT TF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGN0eDIsQ0FmaWxlLENBcGF0aCkpCi0rCQkJewot KwkJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0rCQkJfQotKwkJaWYgKCFTU0xfQ1RYX3Nl dF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhjdHgyKSkKLSAJCQl7Ci0gCQkJRVJSX3ByaW50X2Vycm9y cyhiaW9fZXJyKTsKLSAJCQl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvc190 aW1lLmMuZGVmYXVsdC1wYXRocyBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvc190aW1lLmMKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvc190aW1lLmMuZGVmYXVsdC1wYXRocwkyMDA2LTA0 LTE3IDE0OjIyOjEzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvYXBw cy9zX3RpbWUuYwkyMDA5LTA4LTA1IDE4OjAwOjM1LjAwMDAwMDAwMCArMDIwMAotQEAgLTM3Mywx MiArMzczLDEzIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAKLSAJU1NMX2xv YWRfZXJyb3Jfc3RyaW5ncygpOwotIAotLQlpZiAoKCFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0 aW9ucyh0bV9jdHgsQ0FmaWxlLENBcGF0aCkpIHx8Ci0tCQkoIVNTTF9DVFhfc2V0X2RlZmF1bHRf dmVyaWZ5X3BhdGhzKHRtX2N0eCkpKQotKwlpZiAoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRp b25zKHRtX2N0eCxDQWZpbGUsQ0FwYXRoKSkKLSsJCXsKLSsJCUVSUl9wcmludF9lcnJvcnMoYmlv X2Vycik7Ci0rCQl9Ci0rCWlmICghU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHModG1f Y3R4KSkKLSAJCXsKLS0JCS8qIEJJT19wcmludGYoYmlvX2VyciwiZXJyb3Igc2V0dGluZyBkZWZh dWx0IHZlcmlmeSBsb2NhdGlvbnNcbiIpOyAqLwotIAkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJy KTsKLS0JCS8qIGdvdG8gZW5kOyAqLwotIAkJfQotIAotIAlpZiAodG1fY2lwaGVyID09IE5VTEwp CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1kc3MxLnBhdGNoIGIvb3BlbnNzbC0x LjAuMC1iZXRhMy1kc3MxLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODNk ZGM4Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTMtZHNzMS5wYXRjaAorKysgL2Rl di9udWxsCkBAIC0xLDExICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5 cHRvL2RzYS9kc2FfcG1ldGguYy5kc3MxIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2RzYS9k c2FfcG1ldGguYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2RzYS9kc2FfcG1ldGgu Yy5kc3MxCTIwMDgtMTEtMDUgMTk6Mzg6NTYuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMC1iZXRhMy9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jCTIwMDktMDgtMzEgMTI6NTM6NDcuMDAw MDAwMDAwICswMjAwCi1AQCAtMTg2LDYgKzE4Niw3IEBAIHN0YXRpYyBpbnQgcGtleV9kc2FfY3Ry bChFVlBfUEtFWV9DVFggKmMKLSAKLSAJCWNhc2UgRVZQX1BLRVlfQ1RSTF9NRDoKLSAJCWlmIChF VlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9zaGExICAgJiYKLSsJCSAgICBF VlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9kc2EgICAgJiYKLSAJCSAgICBF VlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9zaGEyMjQgJiYKLSAJCSAgICBF VlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9zaGEyNTYpCi0gCQkJewoKZGlm ZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTMtZHRsczEtZml4LnBhdGNoIGIvb3BlbnNzbC0x LjAuMC1iZXRhMy1kdGxzMS1maXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDMyZTdiNTYuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1kdGxzMS1maXgucGF0 Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1JbmRleDogb3BlbnNzbC9zc2wvZDFf Y2xudC5jCi1SQ1MgRmlsZTogL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9zc2wvZDFfY2xudC5jLHYK LXJjc2RpZmYgLXEgLWtrICctcjEuMTYuMi4xMCcgJy1yMS4xNi4yLjExJyAtdSAnL3Yvb3BlbnNz bC9jdnMvb3BlbnNzbC9zc2wvZDFfY2xudC5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9z c2wvZDFfY2xudC5jIDIwMDkvMDcvMTUgMTE6MzI6NTcgMS4xNi4yLjEwCi0rKysgb3BlbnNzbC9z c2wvZDFfY2xudC5jIDIwMDkvMDcvMjQgMTE6NTI6MzIgMS4xNi4yLjExCi1AQCAtMjIzLDYgKzIy Myw4IEBACi0gCQkJcy0+aW5pdF9udW09MDsKLSAJCQkvKiBtYXJrIGNsaWVudF9yYW5kb20gdW5p bml0aWFsaXplZCAqLwotIAkJCW1lbXNldChzLT5zMy0+Y2xpZW50X3JhbmRvbSwwLHNpemVvZihz LT5zMy0+Y2xpZW50X3JhbmRvbSkpOwotKwkJCXMtPmQxLT5zZW5kX2Nvb2tpZSA9IDA7Ci0rCQkJ cy0+aGl0ID0gMDsKLSAJCQlicmVhazsKLSAKLSAJCWNhc2UgU1NMM19TVF9DV19DTE5UX0hFTExP X0E6Ci1JbmRleDogb3BlbnNzbC9zc2wvZDFfcGt0LmMKLVJDUyBGaWxlOiAvdi9vcGVuc3NsL2N2 cy9vcGVuc3NsL3NzbC9kMV9wa3QuYyx2Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjI3LjIuMTMnICct cjEuMjcuMi4xNCcgLXUgJy92L29wZW5zc2wvY3ZzL29wZW5zc2wvc3NsL2QxX3BrdC5jLHYnIDI+ L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9zc2wvZDFfcGt0LmMgMjAwOS8wNy8xMyAxMTo0NDowNCAx LjI3LjIuMTMKLSsrKyBvcGVuc3NsL3NzbC9kMV9wa3QuYyAyMDA5LzA3LzI0IDExOjUyOjMyIDEu MjcuMi4xNAotQEAgLTc3NSw3ICs3NzUsNyBAQAotIAkvKiBDaGVjayBmb3IgdGltZW91dCAqLwot IAlpZiAoZHRsczFfaXNfdGltZXJfZXhwaXJlZChzKSkKLSAJCXsKLS0JCWlmIChkdGxzMV9yZWFk X2ZhaWxlZChzLCAtMSkgPiAwKTsKLSsJCWlmIChkdGxzMV9yZWFkX2ZhaWxlZChzLCAtMSkgPiAw KQotIAkJCWdvdG8gc3RhcnQ7Ci0gCQl9Ci0gCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1i ZXRhMy1lbmdpbmVzZGlyLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhMy1lbmdpbmVzZGlyLnBh dGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGEzYzUwLi4wMDAwMDAwCi0tLSBh L29wZW5zc2wtMS4wLjAtYmV0YTMtZW5naW5lc2Rpci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0x LDUyICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvQ29uZmlndXJlLmVuZ2lu ZXNkaXIgb3BlbnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGEzL0NvbmZpZ3VyZS5lbmdpbmVzZGlyCTIwMDktMDgtMTAgMTk6NDY6MzIuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUJMjAwOS0wOC0xMCAxOTo0Njoz Mi4wMDAwMDAwMDAgKzAyMDAKLUBAIC02MTYsNiArNjE2LDcgQEAgbXkgJGlkeF9tdWx0aWxpYiA9 ICRpZHgrKzsKLSAKLSBteSAkcHJlZml4PSIiOwotIG15ICRvcGVuc3NsZGlyPSIiOwotK215ICRl bmdpbmVzZGlyPSIiOwotIG15ICRleGVfZXh0PSIiOwotIG15ICRpbnN0YWxsX3ByZWZpeD0iIjsK LSBteSAkY3Jvc3NfY29tcGlsZV9wcmVmaXg9IiI7Ci1AQCAtODIwLDYgKzgyMSwxMCBAQCBQUk9D RVNTX0FSR1M6Ci0gCQkJCXsKLSAJCQkJJG9wZW5zc2xkaXI9JDE7Ci0gCQkJCX0KLSsJCQllbHNp ZiAoL14tLWVuZ2luZXNkaXI9KC4qKSQvKQotKwkJCQl7Ci0rCQkJCSRlbmdpbmVzZGlyPSQxOwot KwkJCQl9Ci0gCQkJZWxzaWYgKC9eLS1pbnN0YWxsLnByZWZpeD0oLiopJC8pCi0gCQkJCXsKLSAJ CQkJJGluc3RhbGxfcHJlZml4PSQxOwotQEAgLTEwMzcsNyArMTA0Miw3IEBAIGNob3AgJHByZWZp eCBpZiAkcHJlZml4ID1+IC8uXC8kLzsKLSAKLSAkb3BlbnNzbGRpcj0kcHJlZml4IC4gIi9zc2wi IGlmICRvcGVuc3NsZGlyIGVxICIiOwotICRvcGVuc3NsZGlyPSRwcmVmaXggLiAiLyIgLiAkb3Bl bnNzbGRpciBpZiAkb3BlbnNzbGRpciAhfiAvKF5cL3xeW2EtekEtWl06W1xcXC9dKS87Ci0tCi0r JGVuZ2luZXNkaXI9IiRwcmVmaXgvbGliL2VuZ2luZXMiIGlmICRlbmdpbmVzZGlyIGVxICIiOwot IAotIHByaW50ICJJc01LMU1GPSRJc01LMU1GXG4iOwotIAotQEAgLTE2NDUsNyArMTY1MCw3IEBA IHdoaWxlICg8SU4+KQotIAkJIyAkZm9vIGlzIHRvIGJlY29tZSAiJHByZWZpeC9saWIkbXVsdGls aWIvZW5naW5lcyI7Ci0gCQkjIGFzIE1ha2VmaWxlLm9yZyBhbmQgZW5naW5lcy9NYWtlZmlsZSBh cmUgYWRhcHRlZCBmb3IKLSAJCSMgJG11bHRpbGliIHN1ZmZpeC4KLS0JCW15ICRmb28gPSAiJHBy ZWZpeC9saWIvZW5naW5lcyI7Ci0rCQlteSAkZm9vID0gIiRlbmdpbmVzZGlyIjsKLSAJCSRmb28g PX4gcy9cXC9cXFxcL2c7Ci0gCQlwcmludCBPVVQgIiNkZWZpbmUgRU5HSU5FU0RJUiBcIiRmb29c IlxuIjsKLSAJCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvZW5naW5lcy9NYWtlZmls ZS5lbmdpbmVzZGlyIG9wZW5zc2wtMS4wLjAtYmV0YTMvZW5naW5lcy9NYWtlZmlsZQotLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTMvZW5naW5lcy9NYWtlZmlsZS5lbmdpbmVzZGlyCTIwMDktMDYtMTQg MDQ6Mzc6MjIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9lbmdpbmVz L01ha2VmaWxlCTIwMDktMDgtMTAgMTk6NDY6NDguMDAwMDAwMDAwICswMjAwCi1AQCAtMTIzLDcg KzEyMyw3IEBAIGluc3RhbGw6Ci0gCQkJCXNmeD0iLnNvIjsgXAotIAkJCQljcCBjeWckJGwuZGxs ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9saWIvZW5naW5lcy8kJHBmeCQkbCQkc2Z4 Lm5ldzsgXAotIAkJCSAgZmk7IFwKLS0JCQkgIGNobW9kIDU1NSAkKElOU1RBTExfUFJFRklYKSQo SU5TVEFMTFRPUCkvbGliL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwKLSsJCQkgIGNobW9k IDc1NSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvbGliL2VuZ2luZXMvJCRwZngkJGwk JHNmeC5uZXc7IFwKLSAJCQkgIG12IC1mICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9s aWIvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldyAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRP UCkvbGliL2VuZ2luZXMvJCRwZngkJGwkJHNmeCApOyBcCi0gCQlkb25lOyBcCi0gCWZpCgpkaWZm IC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1maXBzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1i ZXRhMy1maXBzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTQwNGU2Li4w MDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTMtZmlwcy5wYXRjaAorKysgL2Rldi9udWxs CkBAIC0xLDEyMTEzICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvQ29uZmln dXJlLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUKLS0tLSBvcGVuc3NsLTEuMC4w LWJldGEzL0NvbmZpZ3VyZS5maXBzCTIwMDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUJMjAwOS0wOS0zMCAxMzoyNTo1OC4w MDAwMDAwMDAgKzAyMDAKLUBAIC02NTQsNiArNjU0LDcgQEAgbXkgJGNtbGxfZW5jPSJjYW1lbGxp YS5vIGNtbGxfbWlzYy5vIGNtbAotIG15ICRwcm9jZXNzb3I9IiI7Ci0gbXkgJGRlZmF1bHRfcmFu bGliOwotIG15ICRwZXJsOwotK215ICRmaXBzPTA7Ci0gCi0gCi0gIyBBbGwgb2YgdGhlIGZvbGxv d2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IChSQzUgd2FzIGVuYWJsZWQgYmVmb3JlIDAuOS44 KToKLUBAIC03OTcsNiArNzk4LDEwIEBAIFBST0NFU1NfQVJHUzoKLSAJCQl9Ci0gCQllbHNpZiAo L14zODYkLykKLSAJCQl7ICRwcm9jZXNzb3I9Mzg2OyB9Ci0rCQllbHNpZiAoL15maXBzJC8pCi0r CQkJewotKwkJCSRmaXBzPTE7Ci0rCQkgICAgICAgIH0KLSAJCWVsc2lmICgvXnJzYXJlZiQvKQot IAkJCXsKLSAJCQkjIE5vIFJTQXJlZiBzdXBwb3J0IGFueSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5l ZWRlZC4KLUBAIC0xMzQ5LDYgKzEzNTQsMTEgQEAgJGNmbGFncy49IiAtRE9QRU5TU0xfSUEzMl9T U0UyIiBpZiAoISRubwotIAotICRjZmxhZ3MuPSIgLURPUEVOU1NMX0JOX0FTTV9NT05UIiBpZiAo JGJuX29iaiA9fiAvLW1vbnQvKTsKLSAKLStpZiAoJGZpcHMpCi0rCXsKLSsJJG9wZW5zc2xfb3Ro ZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBTXG4iOwotKwl9Ci0rCi0gJGNwdWlkX29i aj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVpZF9vYmogPX4gL1wubyQvKTsKLSAkZGVzX29iaj0k ZGVzX2VuYwl1bmxlc3MgKCRkZXNfb2JqID1+IC9cLm8kLyk7Ci0gJGJmX29iaj0kYmZfZW5jCQl1 bmxlc3MgKCRiZl9vYmogPX4gL1wubyQvKTsKLUBAIC0xNTA0LDYgKzE1MTQsMTAgQEAgd2hpbGUg KDxJTj4pCi0gCXMvXkxJQktSQjU9LiovTElCS1JCNT0kd2l0aGFyZ3N7ImtyYjUtbGliIn0vOwot IAlzL15MSUJaTElCPS4qL0xJQlpMSUI9JHdpdGhhcmdzeyJ6bGliLWxpYiJ9LzsKLSAJcy9eWkxJ Ql9JTkNMVURFPS4qL1pMSUJfSU5DTFVERT0kd2l0aGFyZ3N7InpsaWItaW5jbHVkZSJ9LzsKLSsJ aWYgKCRmaXBzKQotKwkJewotKwkJcy9eRklQUz0uKi9GSVBTPXllcy87Ci0rCQl9Ci0gCXMvXlNI TElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9JHNoYXJlZF90YXJnZXQvOwotIAlzL15TSExJQl9N QVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9tYXJrLzsKLSAJcy9eU0hBUkVEX0xJQlM9LiovU0hB UkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykgXCQoU0hBUkVEX1NTTCkvIGlmICghJG5vX3NoYXJl ZCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9iZi9iZl9za2V5LmMuZmlw cyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9iZi9iZl9za2V5LmMKLS0tLSBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9iZi9iZl9za2V5LmMuZmlwcwkyMDA4LTExLTEyIDA0OjU3OjUyLjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2JmL2JmX3NrZXku YwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTU5LDEwICs1OSwxNSBA QAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8 b3BlbnNzbC9ibG93ZmlzaC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0g I2luY2x1ZGUgImJmX2xvY2wuaCIKLSAjaW5jbHVkZSAiYmZfcGkuaCIKLSAKLS12b2lkIEJGX3Nl dF9rZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0r RklQU19OT05fRklQU19WQ0lQSEVSX0luaXQoQkYpCi0gCXsKLSAJaW50IGk7Ci0gCUJGX0xPTkcg KnAscmksaW5bMl07Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9iZi9ibG93 ZmlzaC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vYmYvYmxvd2Zpc2guaAotLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2JmL2Jsb3dmaXNoLmguZmlwcwkyMDA5LTA5LTMw IDEzOjI1OjU3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L2JmL2Jsb3dmaXNoLmgJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0x MDQsNyArMTA0LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgYmZfa2V5X3N0Ci0gCUJGX0xPTkcgU1s0KjI1 Nl07Ci0gCX0gQkZfS0VZOwotIAotLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTIAotK3ZvaWQgcHJp dmF0ZV9CRl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpkYXRhKTsKLSsjZW5kaWYKLSB2b2lkIEJGX3NldF9rZXkoQkZfS0VZICprZXksIGludCBsZW4s IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotIAotIHZvaWQgQkZfZW5jcnlwdChCRl9MT05H ICpkYXRhLGNvbnN0IEJGX0tFWSAqa2V5KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2JuL2JuLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ibi9ibi5oCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vYm4vYm4uaC5maXBzCTIwMDktMDktMzAgMTM6 MjU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vYm4v Ym4uaAkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTU0MCw2ICs1NDAs MTcgQEAgaW50CUJOX2lzX3ByaW1lX2V4KGNvbnN0IEJJR05VTSAqcCxpbnQgbgotIGludAlCTl9p c19wcmltZV9mYXN0dGVzdF9leChjb25zdCBCSUdOVU0gKnAsaW50IG5jaGVja3MsIEJOX0NUWCAq Y3R4LAotIAkJaW50IGRvX3RyaWFsX2RpdmlzaW9uLCBCTl9HRU5DQiAqY2IpOwotIAotK2ludCBC Tl9YOTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhwLCBCSUdOVU0gKlhxLCBpbnQgbmJpdHMsIEJO X0NUWCAqY3R4KTsKLSsKLStpbnQgQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgoQklHTlVNICpwLCBC SUdOVU0gKnAxLCBCSUdOVU0gKnAyLAotKwkJCWNvbnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05V TSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAq Y3R4LCBCTl9HRU5DQiAqY2IpOwotK2ludCBCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KEJJR05V TSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwKLSsJCQlCSUdOVU0gKlhwMSwgQklHTlVNICpY cDIsCi0rCQkJY29uc3QgQklHTlVNICpYcCwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAq Y3R4LAotKwkJCUJOX0dFTkNCICpjYik7Ci0rCi0gQk5fTU9OVF9DVFggKkJOX01PTlRfQ1RYX25l dyh2b2lkICk7Ci0gdm9pZCBCTl9NT05UX0NUWF9pbml0KEJOX01PTlRfQ1RYICpjdHgpOwotIGlu dCBCTl9tb2RfbXVsX21vbnRnb21lcnkoQklHTlVNICpyLGNvbnN0IEJJR05VTSAqYSxjb25zdCBC SUdOVU0gKmIsCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v Ym4vYm5feDkzMXAuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0ODAwMTc1 MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2JuL2JuX3g5MzFwLmMJMjAw OS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMjcyIEBACi0rLyog Ym5feDkzMXAuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVA b3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRp b24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0r ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAg bGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRl cyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlA Y3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBi eSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNp bmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rLyogWDkuMzEg cm91dGluZXMgZm9yIHByaW1lIGRlcml2YXRpb24gKi8KLSsKLSsvKiBYOS4zMSBwcmltZSBkZXJp dmF0aW9uLiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHByaW1lcyBwaQotKyAqIChwMSwg cDIsIHExLCBxMikgZnJvbSBhIHBhcmFtZXRlciBYcGkgYnkgY2hlY2tpbmcgc3VjY2Vzc2l2ZSBv ZGQKLSsgKiBpbnRlZ2Vycy4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGJuX3g5MzFfZGVyaXZlX3Bp KEJJR05VTSAqcGksIGNvbnN0IEJJR05VTSAqWHBpLCBCTl9DVFggKmN0eCwKLSsJCQlCTl9HRU5D QiAqY2IpCi0rCXsKLSsJaW50IGkgPSAwOwotKwlpZiAoIUJOX2NvcHkocGksIFhwaSkpCi0rCQly ZXR1cm4gMDsKLSsJaWYgKCFCTl9pc19vZGQocGkpICYmICFCTl9hZGRfd29yZChwaSwgMSkpCi0r CQlyZXR1cm4gMDsKLSsJZm9yKDs7KQotKwkJewotKwkJaSsrOwotKwkJQk5fR0VOQ0JfY2FsbChj YiwgMCwgaSk7Ci0rCQkvKiBOQiAyNyBNUiBpcyBzcGVjaWZpY2VkIGluIFg5LjMxICovCi0rCQlp ZiAoQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocGksIDI3LCBjdHgsIDEsIGNiKSkKLSsJCQlicmVh azsKLSsJCWlmICghQk5fYWRkX3dvcmQocGksIDIpKQotKwkJCXJldHVybiAwOwotKwkJfQotKwlC Tl9HRU5DQl9jYWxsKGNiLCAyLCBpKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBUaGlzIGlz IHRoZSBtYWluIFg5LjMxIHByaW1lIGRlcml2YXRpb24gZnVuY3Rpb24uIEZyb20gcGFyYW1ldGVy cwotKyAqIFhwMSwgWHAyIGFuZCBYcCBkZXJpdmUgdGhlIHByaW1lIHAuIElmIHRoZSBwYXJhbWV0 ZXJzIHAxIG9yIHAyIGFyZQotKyAqIG5vdCBOVUxMIHRoZXkgd2lsbCBiZSByZXR1cm5lZCB0b286 IHRoaXMgaXMgbmVlZGVkIGZvciB0ZXN0aW5nLgotKyAqLwotKwotK2ludCBCTl9YOTMxX2Rlcml2 ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCi0rCQkJY29uc3Qg QklHTlVNICpYcCwgY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLAotKwkJCWNv bnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsIEJOX0dFTkNCICpjYikKLSsJewotKwlpbnQgcmV0 ID0gMDsKLSsKLSsJQklHTlVNICp0LCAqcDFwMiwgKnBtMTsKLSsKLSsJLyogT25seSBldmVuIGUg c3VwcG9ydGVkICovCi0rCWlmICghQk5faXNfb2RkKGUpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCUJO X0NUWF9zdGFydChjdHgpOwotKwlpZiAoIXAxKQotKwkJcDEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0r Ci0rCWlmICghcDIpCi0rCQlwMiA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJdCA9IEJOX0NUWF9n ZXQoY3R4KTsKLSsKLSsJcDFwMiA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJcG0xID0gQk5fQ1RY X2dldChjdHgpOwotKwotKwlpZiAoIWJuX3g5MzFfZGVyaXZlX3BpKHAxLCBYcDEsIGN0eCwgY2Ip KQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghYm5feDkzMV9kZXJpdmVfcGkocDIsIFhwMiwgY3R4 LCBjYikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9tdWwocDFwMiwgcDEsIHAyLCBjdHgp KQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIEZpcnN0IHNldCBwIHRvIHZhbHVlIG9mIFJwICovCi0r Ci0rCWlmICghQk5fbW9kX2ludmVyc2UocCwgcDIsIHAxLCBjdHgpKQotKwkJZ290byBlcnI7Ci0r Ci0rCWlmICghQk5fbXVsKHAsIHAsIHAyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICgh Qk5fbW9kX2ludmVyc2UodCwgcDEsIHAyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICgh Qk5fbXVsKHQsIHQsIHAxLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fc3ViKHAs IHAsIHQpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmIChwLT5uZWcgJiYgIUJOX2FkZChwLCBwLCBw MXAyKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBwIG5vdyBlcXVhbHMgUnAgKi8KLSsKLSsJaWYg KCFCTl9tb2Rfc3ViKHAsIHAsIFhwLCBwMXAyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlm ICghQk5fYWRkKHAsIHAsIFhwKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBwIG5vdyBlcXVhbHMg WXAwICovCi0rCi0rCWZvciAoOzspCi0rCQl7Ci0rCQlpbnQgaSA9IDE7Ci0rCQlCTl9HRU5DQl9j YWxsKGNiLCAwLCBpKyspOwotKwkJaWYgKCFCTl9jb3B5KHBtMSwgcCkpCi0rCQkJZ290byBlcnI7 Ci0rCQlpZiAoIUJOX3N1Yl93b3JkKHBtMSwgMSkpCi0rCQkJZ290byBlcnI7Ci0rCQlpZiAoIUJO X2djZCh0LCBwbTEsIGUsIGN0eCkpCi0rCQkJZ290byBlcnI7Ci0rCQlpZiAoQk5faXNfb25lKHQp Ci0rCQkvKiBYOS4zMSBzcGVjaWZpZXMgOCBNUiBhbmQgMSBMdWNhcyB0ZXN0IG9yIGFueSBwcmlt ZSB0ZXN0Ci0rCQkgKiBvZmZlcmluZyBzaW1pbGFyIG9yIGJldHRlciBndWFyYW50ZWVzIDUwIE1S IGlzIGNvbnNpZGVyYWJseSAKLSsJCSAqIGJldHRlci4KLSsJCSAqLwotKwkJCSYmIEJOX2lzX3By aW1lX2Zhc3R0ZXN0X2V4KHAsIDUwLCBjdHgsIDEsIGNiKSkKLSsJCQlicmVhazsKLSsJCWlmICgh Qk5fYWRkKHAsIHAsIHAxcDIpKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwotKwlCTl9HRU5DQl9j YWxsKGNiLCAzLCAwKTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyOgotKwotKwlCTl9DVFhfZW5k KGN0eCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsvKiBHZW5lcmF0ZSBwYWlyIG9mIHBh cmFtdGVycyBYcCwgWHEgZm9yIFg5LjMxIHByaW1lIGdlbmVyYXRpb24uCi0rICogTm90ZTogbmJp dHMgcGFyYW10ZXIgaXMgc3VtIG9mIG51bWJlciBvZiBiaXRzIGluIGJvdGguCi0rICovCi0rCi0r aW50IEJOX1g5MzFfZ2VuZXJhdGVfWHBxKEJJR05VTSAqWHAsIEJJR05VTSAqWHEsIGludCBuYml0 cywgQk5fQ1RYICpjdHgpCi0rCXsKLSsJQklHTlVNICp0OwotKwlpbnQgaTsKLSsJLyogTnVtYmVy IG9mIGJpdHMgZm9yIGVhY2ggcHJpbWUgaXMgb2YgdGhlIGZvcm0KLSsJICogNTEyKzEyOHMgZm9y IHMgPSAwLCAxLCAuLi4KLSsJICovCi0rCWlmICgobmJpdHMgPCAxMDI0KSB8fCAobmJpdHMgJiAw eGZmKSkKLSsJCXJldHVybiAwOwotKwluYml0cyA+Pj0gMTsKLSsJLyogVGhlIHJhbmRvbSB2YWx1 ZSBYcCBtdXN0IGJlIGJldHdlZW4gc3FydCgyKSAqIDJeKG5iaXRzLTEpIGFuZAotKwkgKiAyXm5i aXRzIC0gMS4gQnkgc2V0dGluZyB0aGUgdG9wIHR3byBiaXRzIHdlIGVuc3VyZSB0aGF0IHRoZSBs b3dlcgotKwkgKiBib3VuZCBpcyBleGNlZWRlZC4KLSsJICovCi0rCWlmICghQk5fcmFuZChYcCwg bmJpdHMsIDEsIDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwotKwl0 ID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQotKwkJ ewotKwkJaWYgKCFCTl9yYW5kKFhxLCBuYml0cywgMSwgMCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQkv KiBDaGVjayB0aGF0IHxYcCAtIFhxfCA+IDJeKG5iaXRzIC0gMTAwKSAqLwotKwkJQk5fc3ViKHQs IFhwLCBYcSk7Ci0rCQlpZiAoQk5fbnVtX2JpdHModCkgPiAobmJpdHMgLSAxMDApKQotKwkJCWJy ZWFrOwotKwkJfQotKwotKwlCTl9DVFhfZW5kKGN0eCk7Ci0rCi0rCWlmIChpIDwgMTAwMCkKLSsJ CXJldHVybiAxOwotKwotKwlyZXR1cm4gMDsKLSsKLSsJfQotKwotKy8qIEdlbmVyYXRlIHByaW1l cyB1c2luZyBYOS4zMSBhbGdvcml0aG0uIE9mIHRoZSB2YWx1ZXMgcCwgcDEsIHAyLCBYcDEKLSsg KiBhbmQgWHAyIG9ubHkgJ3AnIG5lZWRzIHRvIGJlIG5vbi1OVUxMLiBJZiBhbnkgb2YgdGhlIG90 aGVycyBhcmUgbm90IE5VTEwKLSsgKiB0aGUgcmVsZXZhbnQgcGFyYW1ldGVyIHdpbGwgYmUgc3Rv cmVkIGluIGl0LgotKyAqCi0rICogRHVlIHRvIHRoZSBmYWN0IHRoYXQgfFhwIC0gWHF8ID4gMl4o bmJpdHMgLSAxMDApIG11c3QgYmUgc2F0aXNmaWVkIFhwIGFuZCBYcQotKyAqIGFyZSBnZW5lcmF0 ZWQgdXNpbmcgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGFuZCBzdXBwbGllZCBhcyBpbnB1dC4KLSsg Ki8KLSsKLStpbnQgQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAq cDEsIEJJR05VTSAqcDIsCi0rCQkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLAotKwkJCWNvbnN0 IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwKLSsJCQlCTl9H RU5DQiAqY2IpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwot KwlpZiAoIVhwMSkKLSsJCVhwMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJaWYgKCFYcDIpCi0rCQlY cDIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0rCWlmICghQk5fcmFuZChYcDEsIDEwMSwgMCwgMCkp Ci0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUJOX3JhbmQoWHAyLCAxMDEsIDAsIDApKQotKwkJZ290 byBlcnJvcjsKLSsJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChwLCBwMSwgcDIsIFhwLCBY cDEsIFhwMiwgZSwgY3R4LCBjYikpCi0rCQlnb3RvIGVycm9yOwotKwotKwlyZXQgPSAxOwotKwot KwllcnJvcjoKLSsJQk5fQ1RYX2VuZChjdHgpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0r Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ibi9NYWtlZmlsZS5maXBzIG9w ZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2JuL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC1i ZXRhMy9jcnlwdG8vYm4vTWFrZWZpbGUuZmlwcwkyMDA4LTExLTEyIDA5OjE5OjAyLjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2JuL01ha2VmaWxlCTIwMDkt MDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMjYsMTMgKzI2LDEzIEBAIExJQlNS Qz0JYm5fYWRkLmMgYm5fZGl2LmMgYm5fZXhwLmMgYm5fbGkKLSAJYm5fcHJpbnQuYyBibl9yYW5k LmMgYm5fc2hpZnQuYyBibl93b3JkLmMgYm5fYmxpbmQuYyBcCi0gCWJuX2tyb24uYyBibl9zcXJ0 LmMgYm5fZ2NkLmMgYm5fcHJpbWUuYyBibl9lcnIuYyBibl9zcXIuYyBibl9hc20uYyBcCi0gCWJu X3JlY3AuYyBibl9tb250LmMgYm5fbXBpLmMgYm5fZXhwMi5jIGJuX2dmMm0uYyBibl9uaXN0LmMg XAotLQlibl9kZXByLmMgYm5fY29uc3QuYwotKwlibl9kZXByLmMgYm5fY29uc3QuYyBibl94OTMx cC5jCi0gCi0gTElCT0JKPQlibl9hZGQubyBibl9kaXYubyBibl9leHAubyBibl9saWIubyBibl9j dHgubyBibl9tdWwubyBibl9tb2QubyBcCi0gCWJuX3ByaW50Lm8gYm5fcmFuZC5vIGJuX3NoaWZ0 Lm8gYm5fd29yZC5vIGJuX2JsaW5kLm8gXAotIAlibl9rcm9uLm8gYm5fc3FydC5vIGJuX2djZC5v IGJuX3ByaW1lLm8gYm5fZXJyLm8gYm5fc3FyLm8gJChCTl9BU00pIFwKLSAJYm5fcmVjcC5vIGJu X21vbnQubyBibl9tcGkubyBibl9leHAyLm8gYm5fZ2YybS5vIGJuX25pc3QubyBcCi0tCWJuX2Rl cHIubyBibl9jb25zdC5vCi0rCWJuX2RlcHIubyBibl9jb25zdC5vIGJuX3g5MzFwLm8KLSAKLSBT UkM9ICQoTElCU1JDKQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2Ft ZWxsaWEvYXNtL2NtbGwteDg2LnBsLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2Ft ZWxsaWEvYXNtL2NtbGwteDg2LnBsCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2Ft ZWxsaWEvYXNtL2NtbGwteDg2LnBsLmZpcHMJMjAwOS0wNC0wNiAxNjoyNTowMi4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9jYW1lbGxpYS9hc20vY21sbC14 ODYucGwJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC03MjIsMTIgKzcy MiwxNSBAQCBteSAkYmlhcz1pbnQoQFRbMF0pP3NoaWZ0KEBUKTowOwotIH0KLSAmZnVuY3Rpb25f ZW5kKCJDYW1lbGxpYV9Fa2V5Z2VuIik7Ci0gCi0rJHNldGtleWZ1bmMgPSAiQ2FtZWxsaWFfc2V0 X2tleSI7Ci0rJHNldGtleWZ1bmMgPSAicHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5IiBpZiAoJEVO VntGSVBTfSBuZSAiIik7Ci0rCi0gaWYgKCRPUEVOU1NMKSB7Ci0gIyBpbnQgQ2FtZWxsaWFfc2V0 X2tleSAoCi0gIwkJY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwKLSAjCQlpbnQgYml0cywK LSAjCQlDQU1FTExJQV9LRVkgKmtleSkKLS0mZnVuY3Rpb25fYmVnaW5fQigiQ2FtZWxsaWFfc2V0 X2tleSIpOwotKyZmdW5jdGlvbl9iZWdpbl9CKCRzZXRrZXlmdW5jKTsKLSAJJnB1c2gJKCJlYngi KTsKLSAJJm1vdgkoImVjeCIsJndwYXJhbSgwKSk7CSMgcHVsbCBhcmd1bWVudHMKLSAJJm1vdgko ImVieCIsJndwYXJhbSgxKSk7Ci1AQCAtNzYwLDcgKzc2Myw3IEBAIGlmICgkT1BFTlNTTCkgewot ICZzZXRfbGFiZWwoImRvbmUiLDQpOwotIAkmcG9wCSgiZWJ4Iik7Ci0gCSZyZXQJKCk7Ci0tJmZ1 bmN0aW9uX2VuZF9CKCJDYW1lbGxpYV9zZXRfa2V5Iik7Ci0rJmZ1bmN0aW9uX2VuZF9CKCRzZXRr ZXlmdW5jKTsKLSB9Ci0gCi0gQFNCT1g9KAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9j cnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L2NhbWVsbGlhL2NhbWVsbGlhLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9jYW1l bGxpYS9jYW1lbGxpYS5oLmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ni4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oCTIwMDkt MDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtODgsNiArODgsMTEgQEAgc3RydWN0 IGNhbWVsbGlhX2tleV9zdCAKLSAJfTsKLSB0eXBlZGVmIHN0cnVjdCBjYW1lbGxpYV9rZXlfc3Qg Q0FNRUxMSUFfS0VZOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9DYW1l bGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRz LAotKwlDQU1FTExJQV9LRVkgKmtleSk7Ci0rI2VuZGlmCi0rCi0gaW50IENhbWVsbGlhX3NldF9r ZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0gCUNBTUVM TElBX0tFWSAqa2V5KTsKLSAKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEw OjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Nh bWVsbGlhL2NtbGxfZmJsay5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1A QCAtMCwwICsxLDY4IEBACi0rLyogY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhX21pc2MuYyAtKi0g bW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLwotKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICog Q29weXJpZ2h0IChjKSAyMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K LSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNz bC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqCi0rICovCi0rIAotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY2FtZWxsaWEuaD4KLSsjaW5jbHVkZSAiY21sbF9sb2NsLmgi Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0raW50IENhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29u c3QgaW50IGJpdHMsCi0rCUNBTUVMTElBX0tFWSAqa2V5KQotKwl7Ci0rCWlmIChGSVBTX21vZGUo KSkKLSsJCUZJUFNfQkFEX0FCT1JUKENBTUVMTElBKQotKwlyZXR1cm4gcHJpdmF0ZV9DYW1lbGxp YV9zZXRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2NhbWVsbGlhL2NtbGxfbWlzYy5jLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMKLS0tLSBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYy5maXBzCTIwMDgtMTAtMjggMTM6 MTM6NTIuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2Ft ZWxsaWEvY21sbF9taXNjLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBA IC01MiwxMSArNTIsMjAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotICNpbmNs dWRlIDxvcGVuc3NsL2NhbWVsbGlhLmg+Ci0gI2luY2x1ZGUgImNtbGxfbG9jbC5oIgotKyNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gY29uc3QgY2hhciBDQU1FTExJQV92ZXJzaW9u W109IkNBTUVMTElBIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotK2ludCBwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAq dXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0rCUNBTUVMTElBX0tFWSAqa2V5KQotKyNlbHNlCi0g aW50IENhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3Qg aW50IGJpdHMsCi0gCUNBTUVMTElBX0tFWSAqa2V5KQotKyNlbmRpZgotIAl7Ci0gCWlmKCF1c2Vy S2V5IHx8ICFrZXkpCi0gCQlyZXR1cm4gLTE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L2NhbWVsbGlhL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2FtZWxs aWEvTWFrZWZpbGUuZmlwcwkyMDA4LTEyLTIzIDEyOjMzOjAwLjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlCTIwMDktMDktMzAg MTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMjMsOSArMjMsOSBAQCBBUFBTPQotIAotIExJ Qj0kKFRPUCkvbGliY3J5cHRvLmEKLSBMSUJTUkM9Y2FtZWxsaWEuYyBjbWxsX21pc2MuYyBjbWxs X2VjYi5jIGNtbGxfY2JjLmMgY21sbF9vZmIuYyBcCi0tCSAgIGNtbGxfY2ZiLmMgY21sbF9jdHIu YyAKLSsJICAgY21sbF9jZmIuYyBjbWxsX2N0ci5jIGNtbGxfZmJsay5jCi0gCi0tTElCT0JKPSBj bWxsX2VjYi5vIGNtbGxfb2ZiLm8gY21sbF9jZmIubyBjbWxsX2N0ci5vICQoQ01MTF9FTkMpCi0r TElCT0JKPSBjbWxsX2VjYi5vIGNtbGxfb2ZiLm8gY21sbF9jZmIubyBjbWxsX2N0ci5vICQoQ01M TF9FTkMpIGNtbGxfZmJsay5vCi0gCi0gU1JDPSAkKExJQlNSQykKLSAKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Nhc3QvY2FzdC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh My9jcnlwdG8vY2FzdC9jYXN0LmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9jYXN0 L2Nhc3QuaC5maXBzCTIwMDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2FzdC9jYXN0LmgJMjAwOS0wOS0zMCAxMzoyNTo1OC4w MDAwMDAwMDAgKzAyMDAKLUBAIC04Myw3ICs4Myw5IEBAIHR5cGVkZWYgc3RydWN0IGNhc3Rfa2V5 X3N0Ci0gCWludCBzaG9ydF9rZXk7CS8qIFVzZSByZWR1Y2VkIHJvdW5kcyBmb3Igc2hvcnQga2V5 ICovCi0gCX0gQ0FTVF9LRVk7Ci0gCi0tIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMgCi0rdm9pZCBw cml2YXRlX0NBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25l ZCBjaGFyICpkYXRhKTsKLSsjZW5kaWYKLSB2b2lkIENBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5 LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSB2b2lkIENBU1RfZWNiX2Vu Y3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LENBU1RfS0VZ ICprZXksCi0gCQkgICAgICBpbnQgZW5jKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2Nhc3QvY19za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9jYXN0 L2Nfc2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2FzdC9jX3NrZXkuYy5m aXBzCTIwMDAtMDYtMDMgMTY6MTM6MzUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vY2FzdC9jX3NrZXkuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAw MCArMDIwMAotQEAgLTU3LDYgKzU3LDExIEBACi0gICovCi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wv Y2FzdC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgImNh c3RfbGNsLmgiCi0gI2luY2x1ZGUgImNhc3Rfcy5oIgotIAotQEAgLTcyLDcgKzc3LDcgQEAKLSAj ZGVmaW5lIFM2IENBU1RfU190YWJsZTYKLSAjZGVmaW5lIFM3IENBU1RfU190YWJsZTcKLSAKLS12 b2lkIENBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBj aGFyICpkYXRhKQotK0ZJUFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0KENBU1QpCi0gCXsKLSAJQ0FT VF9MT05HIHhbMTZdOwotIAlDQVNUX0xPTkcgelsxNl07Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9jcnlwdG8uaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Ny eXB0by5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY3J5cHRvLmguZmlwcwkyMDA5 LTA5LTMwIDEzOjI1OjU3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2NyeXB0by5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAt NTQ2LDEyICs1NDYsNjkgQEAgdm9pZCBPcGVuU1NMRGllKGNvbnN0IGNoYXIgKmZpbGUsaW50IGxp bgotIHVuc2lnbmVkIGxvbmcgKk9QRU5TU0xfaWEzMmNhcF9sb2Modm9pZCk7Ci0gI2RlZmluZSBP UEVOU1NMX2lhMzJjYXAgKCooT1BFTlNTTF9pYTMyY2FwX2xvYygpKSkKLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rI2RlZmluZSBGSVBTX0VSUk9SX0lHTk9SRUQoYWxnKSBPcGVuU1NMRGllKF9f RklMRV9fLCBfX0xJTkVfXywgXAotKwkJYWxnICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxn b3JpdGhtIGVycm9yIGlnbm9yZWQiKTsKLSsKLSsjZGVmaW5lIEZJUFNfQkFEX0FCT1JUKGFsZykg T3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKLSsJCSNhbGcgIiBBbGdvcml0aG0gZm9y YmlkZGVuIGluIEZJUFMgbW9kZSIpOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFNfU1RSSUNUCi0r I2RlZmluZSBGSVBTX0JBRF9BTEdPUklUSE0oYWxnKSBGSVBTX0JBRF9BQk9SVChhbGcpCi0rI2Vs c2UKLSsjZGVmaW5lIEZJUFNfQkFEX0FMR09SSVRITShhbGcpIFwKLSsJeyBcCi0rCUZJUFNlcnIo RklQU19GX0hBU0hfRklOQUwsRklQU19SX05PTl9GSVBTX01FVEhPRCk7IFwKLSsJRVJSX2FkZF9l cnJvcl9kYXRhKDIsICJBbGdvcml0aG09IiwgI2FsZyk7IFwKLSsJcmV0dXJuIDA7IFwKLSsJfQot KyNlbmRpZgotKwotKy8qIExvdyBsZXZlbCBkaWdlc3QgQVBJIGJsb2NraW5nIG1hY3JvICovCi0r Ci0rI2RlZmluZSBGSVBTX05PTl9GSVBTX01EX0luaXQoYWxnKSBcCi0rCWludCBhbGcjI19Jbml0 KGFsZyMjX0NUWCAqYykgXAotKwkJeyBcCi0rCQlpZiAoRklQU19tb2RlKCkpIFwKLSsJCQlGSVBT X0JBRF9BTEdPUklUSE0oYWxnKSBcCi0rCQlyZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7 IFwKLSsJCX0gXAotKwlpbnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQoYWxnIyNfQ1RYICpjKQotKwot Ky8qIEZvciBjaXBoZXJzIHRoZSBBUEkgb2Z0ZW4gdmFyaWVzIGZyb20gY2lwaGVyIHRvIGNpcGhl ciBhbmQgZWFjaCBuZWVkcyB0bwotKyAqIGJlIHRyZWF0ZWQgYXMgYSBzcGVjaWFsIGNhc2UuIFZh cmlhYmxlIGtleSBsZW5ndGggY2lwaGVycyAoQmxvd2Zpc2gsIFJDNCwKLSsgKiBDQVNUKSBob3dl dmVyIGFyZSB2ZXJ5IHNpbWlsYXIgYW5kIGNhbiB1c2UgYSBibG9ja2luZyBtYWNyby4KLSsgKi8K LSsKLSsjZGVmaW5lIEZJUFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0KGFsZykgXAotKwl2b2lkIGFs ZyMjX3NldF9rZXkoYWxnIyNfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmRhdGEpIFwKLSsJCXsgXAotKwkJaWYgKEZJUFNfbW9kZSgpKSBcCi0rCQkJRklQU19CQURfQUJP UlQoYWxnKSBcCi0rCQlwcml2YXRlXyMjYWxnIyNfc2V0X2tleShrZXksIGxlbiwgZGF0YSk7IFwK LSsJCX0gXAotKwl2b2lkIHByaXZhdGVfIyNhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBp bnQgbGVuLCBcCi0rCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQotKwotKyNlbHNlCi0r Ci0rI2RlZmluZSBGSVBTX05PTl9GSVBTX1ZDSVBIRVJfSW5pdChhbGcpIFwKLSsJdm9pZCBhbGcj I19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpk YXRhKQotKwotKyNkZWZpbmUgRklQU19OT05fRklQU19NRF9Jbml0KGFsZykgXAotKwlpbnQgYWxn IyNfSW5pdChhbGcjI19DVFggKmMpIAotKwotKyNlbmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBTICov Ci0rCi0gLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KLSAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFy ZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwotICAq IG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0 IGlzIG5leHQgcnVuLgotICAqLwotIHZvaWQgRVJSX2xvYWRfQ1JZUFRPX3N0cmluZ3Modm9pZCk7 Ci0gCi0rI2RlZmluZSBPUEVOU1NMX0hBVkVfSU5JVAkxCi0rdm9pZCBPUEVOU1NMX2luaXRfbGli cmFyeSh2b2lkKTsKLSsKLSAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIENSWVBUTyBmdW5jdGlvbnMu ICovCi0gCi0gLyogRnVuY3Rpb24gY29kZXMuICovCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9kaC9kaF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Ro L2RoX2Vyci5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZGgvZGhfZXJyLmMuZmlw cwkyMDA2LTExLTIxIDIyOjI5OjM3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTMvY3J5cHRvL2RoL2RoX2Vyci5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICsw MjAwCi1AQCAtNzMsNiArNzMsOCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERIX3N0cl9mdW5j dHNbXT0KLSB7RVJSX0ZVTkMoREhfRl9DT01QVVRFX0tFWSksCSJDT01QVVRFX0tFWSJ9LAotIHtF UlJfRlVOQyhESF9GX0RIUEFSQU1TX1BSSU5UX0ZQKSwJIkRIcGFyYW1zX3ByaW50X2ZwIn0sCi0g e0VSUl9GVU5DKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMpLAkiREhfQlVJTFRJTl9HRU5QQVJB TVMifSwKLSt7RVJSX0ZVTkMoREhfRl9ESF9DT01QVVRFX0tFWSksCSJESF9jb21wdXRlX2tleSJ9 LAotK3tFUlJfRlVOQyhESF9GX0RIX0dFTkVSQVRFX0tFWSksCSJESF9nZW5lcmF0ZV9rZXkifSwK LSB7RVJSX0ZVTkMoREhfRl9ESF9ORVdfTUVUSE9EKSwJIkRIX25ld19tZXRob2QifSwKLSB7RVJS X0ZVTkMoREhfRl9ESF9QQVJBTV9ERUNPREUpLAkiREhfUEFSQU1fREVDT0RFIn0sCi0ge0VSUl9G VU5DKERIX0ZfREhfUFJJVl9ERUNPREUpLAkiREhfUFJJVl9ERUNPREUifSwKLUBAIC05NCw2ICs5 Niw3IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgREhfc3RyX3JlYXNvbnNbXT0KLSB7RVJSX1JF QVNPTihESF9SX0JOX0VSUk9SKSAgICAgICAgICAgICAgICwiYm4gZXJyb3IifSwKLSB7RVJSX1JF QVNPTihESF9SX0RFQ09ERV9FUlJPUikgICAgICAgICAgICwiZGVjb2RlIGVycm9yIn0sCi0ge0VS Ul9SRUFTT04oREhfUl9JTlZBTElEX1BVQktFWSkgICAgICAgICAsImludmFsaWQgcHVibGljIGtl eSJ9LAotK3tFUlJfUkVBU09OKERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAgLCJrZXkgc2l6 ZSB0b28gc21hbGwifSwKLSB7RVJSX1JFQVNPTihESF9SX0tFWVNfTk9UX1NFVCkgICAgICAgICAg ICwia2V5cyBub3Qgc2V0In0sCi0ge0VSUl9SRUFTT04oREhfUl9NT0RVTFVTX1RPT19MQVJHRSkg ICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0sCi0ge0VSUl9SRUFTT04oREhfUl9OT19QQVJBTUVU RVJTX1NFVCkgICAgICAsIm5vIHBhcmFtZXRlcnMgc2V0In0sCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5 cHRvL2RoL2RoX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZGgvZGhfZ2Vu LmMuZmlwcwkyMDA1LTA0LTI2IDIwOjUzOjE1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTMvY3J5cHRvL2RoL2RoX2dlbi5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAw MDAwICswMjAwCi1AQCAtNjUsNiArNjUsMTAgQEAKLSAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSAj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1z KERIICpyZXQsIGludCBwcmltZV9sZW4sIGludCBnZW5lcmF0b3IsIEJOX0dFTkNCICpjYik7Ci0g Ci1AQCAtMTA2LDYgKzExMCwyMCBAQCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERI ICpyZXQsCi0gCWludCBnLG9rPSAtMTsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBT ZXJyKEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVf bGVuIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIo REhfRl9ESF9CVUlMVElOX0dFTlBBUkFNUywgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJ Z290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWN0eD1CTl9DVFhfbmV3KCk7Ci0gCWlmIChj dHggPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZGgvZGguaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2RoL2RoLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9kaC9kaC5oLmZp cHMJMjAwOS0wOS0zMCAxMzoyNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9kaC9kaC5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAw Ci1AQCAtNzcsNiArNzcsOCBAQAotICMgZGVmaW5lIE9QRU5TU0xfREhfTUFYX01PRFVMVVNfQklU UwkxMDAwMAotICNlbmRpZgotIAotKyNkZWZpbmUgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVT X0JJVFMgMTAyNAotKwotICNkZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKLSAj ZGVmaW5lIERIX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsg dGhlIGJ1aWx0LWluIERICi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCi1AQCAtMjQwLDYgKzI0Miw4 IEBAIHZvaWQgRVJSX2xvYWRfREhfc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIERIX0ZfR0VORVJB VEVfUEFSQU1FVEVSUwkJCSAxMDQKLSAjZGVmaW5lIERIX0ZfUEtFWV9ESF9ERVJJVkUJCQkJIDEx MgotICNkZWZpbmUgREhfRl9QS0VZX0RIX0tFWUdFTgkJCQkgMTEzCi0rI2RlZmluZSBESF9GX0RI X0NPTVBVVEVfS0VZCQkJCSAxMTQKLSsjZGVmaW5lIERIX0ZfREhfR0VORVJBVEVfS0VZCQkJIDEx NQotIAotIC8qIFJlYXNvbiBjb2Rlcy4gKi8KLSAjZGVmaW5lIERIX1JfQkFEX0dFTkVSQVRPUgkJ CQkgMTAxCi1AQCAtMjUyLDYgKzI1Niw3IEBAIHZvaWQgRVJSX2xvYWRfREhfc3RyaW5ncyh2b2lk KTsKLSAjZGVmaW5lIERIX1JfTk9fUEFSQU1FVEVSU19TRVQJCQkJIDEwNwotICNkZWZpbmUgREhf Ul9OT19QUklWQVRFX1ZBTFVFCQkJCSAxMDAKLSAjZGVmaW5lIERIX1JfUEFSQU1FVEVSX0VOQ09E SU5HX0VSUk9SCQkJIDEwNQotKyNkZWZpbmUgREhfUl9LRVlfU0laRV9UT09fU01BTEwJCQkJIDEx MAotIAotICNpZmRlZiAgX19jcGx1c3BsdXMKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9kaC9kaF9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Ro L2RoX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZGgvZGhfa2V5LmMuZmlw cwkyMDA3LTAzLTI4IDAyOjE1OjIzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTMvY3J5cHRvL2RoL2RoX2tleS5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICsw MjAwCi1AQCAtNjEsNiArNjEsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1 ZGUgPG9wZW5zc2wvcmFuZC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBzdGF0 aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpOwotIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5z aWduZWQgY2hhciAqa2V5LCBjb25zdCBCSUdOVU0gKnB1Yl9rZXksIERIICpkaCk7Ci1AQCAtMTA3 LDYgKzExMCwxNCBAQCBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpCi0gCUJOX01PTlRf Q1RYICptb250PU5VTEw7Ci0gCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxMOwot IAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0 cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlE SGVycihESF9GX0dFTkVSQVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJcmV0 dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0 eCA9PSBOVUxMKSBnb3RvIGVycjsKLSAKLUBAIC0xODQsNiArMTk1LDEzIEBAIHN0YXRpYyBpbnQg Y29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2UKLSAJCURIZXJyKERIX0ZfQ09NUFVURV9LRVks REhfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci0gCQlnb3RvIGVycjsKLSAJCX0KLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BF TlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIoREhfRl9DT01Q VVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0r I2VuZGlmCi0gCi0gCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3Rv IGVycjsKLUBAIC0yNTEsNiArMjY5LDkgQEAgc3RhdGljIGludCBkaF9ibl9tb2RfZXhwKGNvbnN0 IERIICpkaCwgQgotIAotIHN0YXRpYyBpbnQgZGhfaW5pdChESCAqZGgpCi0gCXsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJZGgtPmZs YWdzIHw9IERIX0ZMQUdfQ0FDSEVfTU9OVF9QOwotIAlyZXR1cm4oMSk7Ci0gCX0KLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9kc2EvZHNhX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9j cnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzCTIwMDgtMTItMjYgMTg6MTc6MjEuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZHNhL2RzYV9nZW4uYwkyMDA5LTA5 LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTc3LDggKzc3LDEyIEBACi0gI2luY2x1 ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNz bC9yYW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAjaW5jbHVkZSAiZHNhX2xv Y2wuaCIKLSAKLSBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBi aXRzLAotQEAgLTEyNiw2ICsxMzAsMjEgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAq cmV0LCBzaXplXwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAl1bnNpZ25lZCBpbnQgaD0yOwotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAg IHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOLAotKwkJICAgIEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICBnb3RvIGVycjsKLSsJICAgIH0KLSsK LSsJaWYgKEZJUFNfbW9kZSgpICYmIChiaXRzIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxV U19CSVRTKSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwgRFNB X1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwot IAlpZiAocXNpemUgIT0gU0hBX0RJR0VTVF9MRU5HVEggJiYgcXNpemUgIT0gU0hBMjI0X0RJR0VT VF9MRU5HVEggJiYKLSAJICAgIHFzaXplICE9IFNIQTI1Nl9ESUdFU1RfTEVOR1RIKQotIAkJLyog aW52YWxpZCBxIHNpemUgKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Rz YS9kc2EuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2RzYS9kc2EuaAotLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2RzYS9kc2EuaC5maXBzCTIwMDktMDktMzAgMTM6MjU6 NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZHNhL2Rz YS5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtODgsNiArODgsOCBA QAotICMgZGVmaW5lIE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKLSAjZW5kaWYK LSAKLSsjZGVmaW5lIE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0rCi0g I2RlZmluZSBEU0FfRkxBR19DQUNIRV9NT05UX1AJMHgwMQotICNkZWZpbmUgRFNBX0ZMQUdfTk9f RVhQX0NPTlNUVElNRSAgICAgICAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWlu IERTQQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlt cGxlbWVudGF0aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKLUBAIC05Nyw2ICs5OSwyMSBAQAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlIHVzZWQg Zm9yIGFsbCBleHBvbmVudHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCi0gCi0rLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgRFNBIG1ldGhvZCBp cyBGSVBTIGNvbXBsaWFudCBhbmQgY2FuIGJlIHVzZWQKLSsgKiBpbiBGSVBTIG1vZGUuIFRoaXMg aXMgc2V0IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1ldGhvZC4gSWYgYW4KLSsgKiBhcHBsaWNh dGlvbiBzZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3duIG1ldGhvZHMgaXQgaXMgaXRzIHJlcG9zaWJp bGl0eQotKyAqIHRvIGVuc3VyZSB0aGUgcmVzdWx0IGlzIGNvbXBsaWFudC4KLSsgKi8KLSsKLSsj ZGVmaW5lIERTQV9GTEFHX0ZJUFNfTUVUSE9ECQkJMHgwNDAwCi0rCi0rLyogSWYgdGhpcyBmbGFn IGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJl Ci0rICogcGVybWl0dGVkIGl0IGlzIHRoZW4gdGhlIGFwcGxpY2F0aW9ucyByZXNwb25zaWJpbGl0 eSB0byBlbnN1cmUgdGhhdCB0aGUKLSsgKiB1c2FnZSBpcyBjb21wbGlhbnQuCi0rICovCi0rCi0r I2RlZmluZSBEU0FfRkxBR19OT05fRklQU19BTExPVwkJCTB4MDQwMAotKwotICNpZmRlZiAgX19j cGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKLSAjZW5kaWYKLUBAIC0yNzAsOCArMjg3LDExIEBAIHZv aWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBEU0FfRl9ET19EU0FfUFJJ TlQJCQkJIDEwNAotICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5UCQkJCSAxMDAKLSAjZGVm aW5lIERTQV9GX0RTQVBBUkFNU19QUklOVF9GUAkJCSAxMDEKLSsjZGVmaW5lIERTQV9GX0RTQV9C VUlMVElOX0tFWUdFTgkJCSAxMjQKLSsjZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VO CQkJIDEyMwotICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1NJR04JCQkJIDExMgotICNkZWZpbmUgRFNB X0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTEzCi0rI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFS QU1FVEVSUwkJCSAxMjUKLSAjZGVmaW5lIERTQV9GX0RTQV9ORVdfTUVUSE9ECQkJCSAxMDMKLSAj ZGVmaW5lIERTQV9GX0RTQV9QQVJBTV9ERUNPREUJCQkJIDExOQotICNkZWZpbmUgRFNBX0ZfRFNB X1BSSU5UX0ZQCQkJCSAxMDUKLUBAIC0yOTYsOSArMzE2LDEyIEBAIHZvaWQgRVJSX2xvYWRfRFNB X3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBEU0FfUl9EQVRBX1RPT19MQVJHRV9GT1JfS0VZX1NJ WkUJCSAxMDAKLSAjZGVmaW5lIERTQV9SX0RFQ09ERV9FUlJPUgkJCQkgMTA0Ci0gI2RlZmluZSBE U0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFCQkJIDEwNgotKyNkZWZpbmUgRFNBX1JfS0VZX1NJWkVf VE9PX1NNQUxMCQkJIDExMAotICNkZWZpbmUgRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTCQkJIDEw MQotICNkZWZpbmUgRFNBX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwMwotKyNkZWZpbmUgRFNB X1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMTEKLSAjZGVmaW5lIERTQV9SX05PX1BBUkFNRVRFUlNf U0VUCQkJCSAxMDcKLSsjZGVmaW5lIERTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBT X01PREUJIDExMgotICNkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJIDEw NQotIAotICNpZmRlZiAgX19jcGx1c3BsdXMKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9kc2Ev ZHNhX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZHNhL2RzYV9rZXkuYy5m aXBzCTIwMDctMDMtMjggMDI6MTU6MjUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vZHNhL2RzYV9rZXkuYwkyMDA5LTA5LTMwIDE3OjAxOjM0LjAwMDAwMDAw MCArMDIwMAotQEAgLTYzLDkgKzYzLDUzIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSAKLSBzdGF0aWMg aW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSk7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwotK3N0YXRpYyBpbnQgZmlwc19kc2FfcGFpcndpc2VfZmFpbCA9IDA7Ci0rCi0rdm9pZCBG SVBTX2NvcnJ1cHRfZHNhX2tleWdlbih2b2lkKQotKwl7Ci0rCWZpcHNfZHNhX3BhaXJ3aXNlX2Zh aWwgPSAxOwotKwl9Ci0rCi0raW50IGZpcHNfY2hlY2tfZHNhKERTQSAqZHNhKQotKwl7Ci0rCUVW UF9QS0VZICpwazsKLSsJdW5zaWduZWQgY2hhciB0YnNbXSA9ICJEU0EgUGFpcndpc2UgQ2hlY2sg RGF0YSI7Ci0rCWludCByZXQgPSAwOwotKwotKyAgICAJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkg PT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9zZXQxX0RTQShwaywgZHNhKTsK LSsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJCQlO VUxMLCAwLCBFVlBfc2hhMSgpLCAwLCBOVUxMKSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQgPSAx OwotKwotK2VycjoKLSsJaWYgKHJldCA9PSAwKQotKwkJewotKwkJZmlwc19zZXRfc2VsZnRlc3Rf ZmFpbCgpOwotKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19EU0EsRklQU19SX1BBSVJXSVNF X1RFU1RfRkFJTEVEKTsKLSsJCX0KLSsKLSsJaWYgKHBrKQotKwkJRVZQX1BLRVlfZnJlZShwayk7 Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLSsKLSBpbnQgRFNBX2dlbmVyYXRlX2tl eShEU0EgKmRzYSkKLSAJewotIAlpZihkc2EtPm1ldGgtPmRzYV9rZXlnZW4pCi1AQCAtNzksNiAr MTIzLDE0IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQotIAlCTl9D VFggKmN0eD1OVUxMOwotIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMo ZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlE U0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwp OwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmICgoY3R4PUJOX0NUWF9uZXco KSkgPT0gTlVMTCkgZ290byBlcnI7Ci0gCi0gCWlmIChkc2EtPnByaXZfa2V5ID09IE5VTEwpCi1A QCAtMTE3LDYgKzE2OSwxNSBAQCBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRz YSkKLSAKLSAJZHNhLT5wcml2X2tleT1wcml2X2tleTsKLSAJZHNhLT5wdWJfa2V5PXB1Yl9rZXk7 Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAo Zmlwc19kc2FfcGFpcndpc2VfZmFpbCkKLSsJCQlCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEp OwotKwkJaWYoIWZpcHNfY2hlY2tfZHNhKGRzYSkpCi0rCQkgICAgZ290byBlcnI7Ci0rCQl9Ci0r I2VuZGlmCi0gCW9rPTE7Ci0gCi0gZXJyOgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9j cnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9kc2Ev ZHNhX29zc2wuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2RzYS9kc2Ffb3NzbC5j LmZpcHMJMjAwNy0wMy0yOCAwMjoxNToyNi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9kc2EvZHNhX29zc2wuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAw MDAwMCArMDIwMAotQEAgLTY1LDYgKzY1LDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4K LSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlm Ci0gCi0gc3RhdGljIERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRn c3QsIGludCBkbGVuLCBEU0EgKmRzYSk7Ci0gc3RhdGljIGludCBkc2Ffc2lnbl9zZXR1cChEU0Eg KmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJR05VTSAqKmtpbnZwLCBCSUdOVU0gKipycCk7Ci1AQCAt ODIsNyArODUsNyBAQCBOVUxMLCAvKiBkc2FfbW9kX2V4cCwgKi8KLSBOVUxMLCAvKiBkc2FfYm5f bW9kX2V4cCwgKi8KLSBkc2FfaW5pdCwKLSBkc2FfZmluaXNoLAotLTAsCi0rRFNBX0ZMQUdfRklQ U19NRVRIT0QsCi0gTlVMTCwKLSBOVUxMLAotIE5VTEwKLUBAIC0xMzcsNiArMTQwLDIwIEBAIHN0 YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ24KLSAJaW50IHJlYXNvbj1FUlJf Ul9CTl9MSUI7Ci0gCURTQV9TSUcgKnJldD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQ U19GX0RTQV9ET19TSUdOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1 cm4gTlVMTDsKLSsJICAgIH0KLSsKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhk c2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJCURT QWVycihEU0FfRl9EU0FfRE9fU0lHTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCXJl dHVybiBOVUxMOwotKwkJfQotKyNlbmRpZgotKwotIAlCTl9pbml0KCZtKTsKLSAJQk5faW5pdCgm eHIpOwotIAotQEAgLTMxMiw2ICszMjksMjAgQEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNv bnN0IHVuc2lnbmVkIAotIAkJcmV0dXJuIC0xOwotIAkJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIo RklQU19GX0RTQV9ET19WRVJJRlksRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAg IHJldHVybiAtMTsKLSsJICAgIH0KLSsKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0 cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJ CURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwot KwkJcmV0dXJuIC0xOwotKwkJfQotKyNlbmRpZgotKwotIAlpID0gQk5fbnVtX2JpdHMoZHNhLT5x KTsKLSAJLyogZmlwcyAxODYtMyBhbGxvd3Mgb25seSBkaWZmZXJlbnQgc2l6ZXMgZm9yIHEgKi8K LSAJaWYgKGkgIT0gMTYwICYmIGkgIT0gMjI0ICYmIGkgIT0gMjU2KQotQEAgLTQwMyw2ICs0MzQs OSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQgCi0gCi0gc3RhdGlj IGludCBkc2FfaW5pdChEU0EgKmRzYSkKLSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBT X3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCWRzYS0+ZmxhZ3N8PURTQV9GTEFHX0NBQ0hF X01PTlRfUDsKLSAJcmV0dXJuKDEpOwotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2Vyci9lcnJfYWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9lcnIv ZXJyX2FsbC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXJyL2Vycl9hbGwuYy5m aXBzCTIwMDgtMTEtMjQgMTg6Mjc6MDYuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vZXJyL2Vycl9hbGwuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAw MCArMDIwMAotQEAgLTk2LDYgKzk2LDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vY3NwLmg+Ci0g I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvdHMuaD4KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotICNp Zm5kZWYgT1BFTlNTTF9OT19DTVMKLSAjaW5jbHVkZSA8b3BlbnNzbC9jbXMuaD4KLSAjZW5kaWYK LUBAIC0xNDgsNiArMTUxLDkgQEAgdm9pZCBFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncyh2b2lkKQot ICNlbmRpZgotIAlFUlJfbG9hZF9PQ1NQX3N0cmluZ3MoKTsKLSAJRVJSX2xvYWRfVUlfc3RyaW5n cygpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRVJSX2xvYWRfRklQU19zdHJpbmdzKCk7Ci0r I2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0NNUwotIAlFUlJfbG9hZF9DTVNfc3RyaW5ncygp OwotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2RpZ2Vz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2RpZ2VzdC5jCi0tLS0gb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZpcHMJMjAwOC0xMS0wNCAxMzow NjowOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAv ZGlnZXN0LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMTYsNiAr MTE2LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gI2luY2x1ZGUgPG9wZW5zc2wv ZW5naW5lLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gdm9pZCBFVlBf TURfQ1RYX2luaXQoRVZQX01EX0NUWCAqY3R4KQotIAl7Ci1AQCAtMTM3LDkgKzEzOCw1MCBAQCBp bnQgRVZQX0RpZ2VzdEluaXQoRVZQX01EX0NUWCAqY3R4LCBjb25zCi0gCXJldHVybiBFVlBfRGln ZXN0SW5pdF9leChjdHgsIHR5cGUsIE5VTEwpOwotIAl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwotKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBh dHRlbXB0IHRvIHVzZSBub24gRklQUwotKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBp Z25vcmUgdGhlIGVycm9ycy4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9NRF9D VFggKmN0eCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBpbml0Iik7IHJldHVybiAw O30KLSsKLStzdGF0aWMgaW50IGJhZF91cGRhdGUoRVZQX01EX0NUWCAqY3R4LGNvbnN0IHZvaWQg KmRhdGEsc2l6ZV90IGNvdW50KQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IHVwZGF0 ZSIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRfZmluYWwoRVZQX01EX0NUWCAqY3R4 LHVuc2lnbmVkIGNoYXIgKm1kKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IEZpbmFs Iik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgY29uc3QgRVZQX01EIGJhZF9tZCA9Ci0rCXsKLSsJ MCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJYmFkX2luaXQsCi0rCWJhZF91cGRhdGUsCi0rCWJhZF9m aW5hbCwKLSsJTlVMTCwKLSsJTlVMTCwKLSsJTlVMTCwKLSsJMCwKLSsJezAsMCwwLDB9LAotKwl9 OwotKwotKyNlbmRpZgotKwotIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgs IGNvbnN0IEVWUF9NRCAqdHlwZSwgRU5HSU5FICppbXBsKQotIAl7Ci0gCUVWUF9NRF9DVFhfY2xl YXJfZmxhZ3MoY3R4LEVWUF9NRF9DVFhfRkxBR19DTEVBTkVEKTsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNf Rl9FVlBfRElHRVNUSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJY3R4 LT5kaWdlc3QgPSAmYmFkX21kOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gI2lmbmRl ZiBPUEVOU1NMX05PX0VOR0lORQotIAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0 cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCi0gCSAqIHNvIHRoaXMgY29udGV4 dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZwotQEAg LTE5NSw2ICsyMzcsMTggQEAgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwg YwotICNlbmRpZgotIAlpZiAoY3R4LT5kaWdlc3QgIT0gdHlwZSkKLSAJCXsKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkpCi0rCQkJewotKwkJCWlmICghKHR5cGUtPmZs YWdzICYgRVZQX01EX0ZMQUdfRklQUykgCi0rCQkJICYmICEoY3R4LT5mbGFncyAmIEVWUF9NRF9D VFhfRkxBR19OT05fRklQU19BTExPVykpCi0rCQkJCXsKLSsJCQkJRVZQZXJyKEVWUF9GX0VWUF9E SUdFU1RJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0rCQkJCWN0eC0+ZGlnZXN0 ID0gJmJhZF9tZDsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJCQl9Ci0rI2VuZGlmCi0gCQlp ZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3QtPmN0eF9zaXplKQotIAkJCU9QRU5TU0xfZnJl ZShjdHgtPm1kX2RhdGEpOwotIAkJY3R4LT5kaWdlc3Q9dHlwZTsKLUBAIC0yMjIsNiArMjc2LDkg QEAgc2tpcF90b19pbml0OgotIAotIGludCBFVlBfRGlnZXN0VXBkYXRlKEVWUF9NRF9DVFggKmN0 eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCXJldHVybiBjdHgtPnVw ZGF0ZShjdHgsZGF0YSxjb3VudCk7Ci0gCX0KLSAKLUBAIC0yMzgsNiArMjk1LDkgQEAgaW50IEVW UF9EaWdlc3RGaW5hbChFVlBfTURfQ1RYICpjdHgsIHVucwotIGludCBFVlBfRGlnZXN0RmluYWxf ZXgoRVZQX01EX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpzaXpl KQotIAl7Ci0gCWludCByZXQ7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0 X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCi0gCU9QRU5TU0xfYXNzZXJ0KGN0eC0+ZGlnZXN0LT5tZF9z aXplIDw9IEVWUF9NQVhfTURfU0laRSk7Ci0gCXJldD1jdHgtPmRpZ2VzdC0+ZmluYWwoY3R4LG1k KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2VfYWVzLmMKLS0tLSBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9ldnAvZV9hZXMuYy5maXBzCTIwMDQtMDEtMjggMjA6MDU6MzMuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2VfYWVzLmMJMjAw OS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC02OSwzMiArNjksMjkgQEAgdHlw ZWRlZiBzdHJ1Y3QKLSAKLSBJTVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGFlc18xMjgsIGtzLCBBRVMs IEVWUF9BRVNfS0VZLAotIAkJICAgICAgIE5JRF9hZXNfMTI4LCAxNiwgMTYsIDE2LCAxMjgsCi0t CQkgICAgICAgMCwgYWVzX2luaXRfa2V5LCBOVUxMLCAKLS0JCSAgICAgICBFVlBfQ0lQSEVSX3Nl dF9hc24xX2l2LAotLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0tCQkgICAgICAg TlVMTCkKLSsJCSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxU X0FTTjEsCi0rCQkgICAgICAgYWVzX2luaXRfa2V5LAotKwkJICAgICAgIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpCi0gSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihhZXNfMTkyLCBrcywgQUVTLCBFVlBf QUVTX0tFWSwKLSAJCSAgICAgICBOSURfYWVzXzE5MiwgMTYsIDI0LCAxNiwgMTI4LAotLQkJICAg ICAgIDAsIGFlc19pbml0X2tleSwgTlVMTCwgCi0tCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNu MV9pdiwKLS0JCSAgICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotLQkJICAgICAgIE5VTEwp Ci0rCQkgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04x LAotKwkJICAgICAgIGFlc19pbml0X2tleSwKLSsJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMKQotIElNUExFTUVOVF9CTE9DS19DSVBIRVIoYWVzXzI1Niwga3MsIEFFUywgRVZQX0FFU19L RVksCi0gCQkgICAgICAgTklEX2Flc18yNTYsIDE2LCAzMiwgMTYsIDEyOCwKLS0JCSAgICAgICAw LCBhZXNfaW5pdF9rZXksIE5VTEwsIAotLQkJICAgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYs Ci0tCQkgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKLS0JCSAgICAgICBOVUxMKQotLQot LSNkZWZpbmUgSU1QTEVNRU5UX0FFU19DRkJSKGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihh ZXMsQUVTLEVWUF9BRVNfS0VZLGtzLGtzaXplLGNiaXRzLDE2KQotLQotLUlNUExFTUVOVF9BRVNf Q0ZCUigxMjgsMSkKLS1JTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDEpCi0tSU1QTEVNRU5UX0FFU19D RkJSKDI1NiwxKQotLQotLUlNUExFTUVOVF9BRVNfQ0ZCUigxMjgsOCkKLS1JTVBMRU1FTlRfQUVT X0NGQlIoMTkyLDgpCi0tSU1QTEVNRU5UX0FFU19DRkJSKDI1Niw4KQotKwkJICAgICAgIEVWUF9D SVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJCSAgICAgICBhZXNf aW5pdF9rZXksCi0rCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKLSsKLSsjZGVmaW5l IElNUExFTUVOVF9BRVNfQ0ZCUihrc2l6ZSxjYml0cyxmbGFncykJSU1QTEVNRU5UX0NGQlIoYWVz LEFFUyxFVlBfQUVTX0tFWSxrcyxrc2l6ZSxjYml0cywxNixmbGFncykKLSsKLStJTVBMRU1FTlRf QUVTX0NGQlIoMTI4LDEsRVZQX0NJUEhfRkxBR19GSVBTKQotK0lNUExFTUVOVF9BRVNfQ0ZCUigx OTIsMSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rSU1QTEVNRU5UX0FFU19DRkJSKDI1NiwxLEVWUF9D SVBIX0ZMQUdfRklQUykKLSsKLStJTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDgsRVZQX0NJUEhfRkxB R19GSVBTKQotK0lNUExFTUVOVF9BRVNfQ0ZCUigxOTIsOCxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0r SU1QTEVNRU5UX0FFU19DRkJSKDI1Niw4LEVWUF9DSVBIX0ZMQUdfRklQUykKLSAKLSBzdGF0aWMg aW50IGFlc19pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFy ICprZXksCi0gCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZV9jYW1lbGxpYS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1i ZXRhMy9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYy5maXBzCTIwMDYtMDgtMzEgMjI6NTY6MjAuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2VfY2FtZWxs aWEuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTkzLDcgKzkzLDcg QEAgSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihjYW1lbGxpYV8yNTYsIGtzLAotIAlFVlBfQ0lQSEVS X2dldF9hc24xX2l2LAotIAlOVUxMKQotIAotLSNkZWZpbmUgSU1QTEVNRU5UX0NBTUVMTElBX0NG QlIoa3NpemUsY2JpdHMpCUlNUExFTUVOVF9DRkJSKGNhbWVsbGlhLENhbWVsbGlhLEVWUF9DQU1F TExJQV9LRVksa3Msa3NpemUsY2JpdHMsMTYpCi0rI2RlZmluZSBJTVBMRU1FTlRfQ0FNRUxMSUFf Q0ZCUihrc2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoY2FtZWxsaWEsQ2FtZWxsaWEsRVZQX0NB TUVMTElBX0tFWSxrcyxrc2l6ZSxjYml0cywxNiwwKQotIAotIElNUExFTUVOVF9DQU1FTExJQV9D RkJSKDEyOCwxKQotIElNUExFTUVOVF9DQU1FTExJQV9DRkJSKDE5MiwxKQotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhMy9jcnlwdG8vZXZwL2VfZGVzMy5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v ZXZwL2VfZGVzMy5jLmZpcHMJMjAwOC0xMi0yOSAxMzozNTo0Ny4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZV9kZXMzLmMJMjAwOS0wOS0zMCAxMzoy NTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0yMDYsOSArMjA2LDkgQEAgc3RhdGljIGludCBkZXNf ZWRlM19jZmI4X2NpcGhlcihFVlBfQ0lQSAotICAgICB9Ci0gCi0gQkxPQ0tfQ0lQSEVSX2RlZnMo ZGVzX2VkZSwgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlLCA4LCAxNiwgOCwgNjQsCi0tCQkJRVZQ X0NJUEhfUkFORF9LRVksIGRlc19lZGVfaW5pdF9rZXksIE5VTEwsIAotLQkJCUVWUF9DSVBIRVJf c2V0X2FzbjFfaXYsCi0tCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKLSsJCUVWUF9DSVBIX1JB TkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJ CQlkZXNfZWRlX2luaXRfa2V5LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJs KQotIAotICNkZWZpbmUgZGVzX2VkZTNfY2ZiNjRfY2lwaGVyIGRlc19lZGVfY2ZiNjRfY2lwaGVy Ci1AQCAtMjE3LDIxICsyMTcsMjEgQEAgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VE RV9LRVksIAotICNkZWZpbmUgZGVzX2VkZTNfZWNiX2NpcGhlciBkZXNfZWRlX2VjYl9jaXBoZXIK LSAKLSBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlMywgREVTX0VERV9LRVksIE5JRF9kZXNfZWRl MywgOCwgMjQsIDgsIDY0LAotLQkJCUVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tl eSwgTlVMTCwgCi0tCQkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKLS0JCQlFVlBfQ0lQSEVSX2dl dF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9D SVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJCWRlc19lZGUzX2luaXRfa2V5LAotKwkJCU5VTEws IE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAotIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRl c19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNfZWRlMywyNCw4LDEsCi0tCQkgICAgIEVWUF9DSVBI X1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSxOVUxMLAotLQkJICAgICBFVlBfQ0lQSEVSX3Nl dF9hc24xX2l2LAotLQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhf UkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAot KwkJICAgICBkZXNfZWRlM19pbml0X2tleSwKLSsJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKLSAJ CSAgICAgZGVzM19jdHJsKQotIAotIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19F REVfS0VZLE5JRF9kZXNfZWRlMywyNCw4LDgsCi0tCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBk ZXNfZWRlM19pbml0X2tleSxOVUxMLAotLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAot LQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQ X0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICBkZXNf ZWRlM19pbml0X2tleSwKLSsJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKLSAJCSAgICAgZGVzM19j dHJsKQotIAotIHN0YXRpYyBpbnQgZGVzX2VkZV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4 LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAv ZV9udWxsLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZV9udWxsLmMuZmlw cwkyMDA4LTEwLTMxIDIwOjQ4OjI0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTMvY3J5cHRvL2V2cC9lX251bGwuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCAr MDIwMAotQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgbl9jaXBoZXI9 Ci0gCXsKLSAJTklEX3VuZGVmLAotIAkxLDAsMCwKLS0JMCwKLSsJRVZQX0NJUEhfRkxBR19GSVBT LAotIAludWxsX2luaXRfa2V5LAotIAludWxsX2NpcGhlciwKLSAJTlVMTCwKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9ldnAvZXZwX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlw dG8vZXZwL2V2cF9lbmMuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDAuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2V2cF9lbmMuYwkyMDA5LTA5LTMw IDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTY4LDggKzY4LDUzIEBACi0gCi0gY29uc3Qg Y2hhciBFVlBfdmVyc2lvbltdPSJFVlAiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCi0rLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBw cm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCi0rICogYWxnb3JpdGhtcyBpbiBG SVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgotKyAqLwotKwotK3N0YXRpYyBpbnQgYmFk X2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKwkJ ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQotKwl7IEZJUFNfRVJST1JfSUdO T1JFRCgiQ2lwaGVyIGluaXQiKTsgcmV0dXJuIDA7fQotKwotK3N0YXRpYyBpbnQgYmFkX2RvX2Np cGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0rCQkJIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQotKwl7IEZJUFNfRVJST1JfSUdO T1JFRCgiQ2lwaGVyIHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0rCi0rLyogTkI6IG5vIGNsZWFudXAg YmVjYXVzZSBpdCBpcyBhbGxvd2VkIGFmdGVyIGZhaWxlZCBpbml0ICovCi0rCi0rc3RhdGljIGlu dCBiYWRfc2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCi0rCXsg RklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgc2V0X2FzbjEiKTsgcmV0dXJuIDA7fQotK3N0YXRp YyBpbnQgYmFkX2dldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQot Kwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGdldF9hc24xIik7IHJldHVybiAwO30KLStz dGF0aWMgaW50IGJhZF9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCB0eXBlLCBpbnQgYXJn LCB2b2lkICpwdHIpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgY3RybCIpOyByZXR1 cm4gMDt9Ci0rCi0rc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYmFkX2NpcGhlciA9Ci0rCXsKLSsJ MCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJYmFkX2luaXQsCi0rCWJhZF9kb19jaXBoZXIs Ci0rCU5VTEwsCi0rCTAsCi0rCWJhZF9zZXRfYXNuMSwKLSsJYmFkX2dldF9hc24xLAotKwliYWRf Y3RybCwKLSsJTlVMTAotKwl9OwotKwotKyNlbmRpZgotKwotIHZvaWQgRVZQX0NJUEhFUl9DVFhf aW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldChjdHgsMCxzaXplb2YoRVZQ X0NJUEhFUl9DVFgpKTsKLSAJLyogY3R4LT5jaXBoZXI9TlVMTDsgKi8KLSAJfQotQEAgLTEwMSw2 ICsxNDYsMTQgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAotIAkJ CWVuYyA9IDE7Ci0gCQljdHgtPmVuY3J5cHQgPSBlbmM7Ci0gCQl9Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewotKwkJRklQU2VycihGSVBT X0ZfRVZQX0NJUEhFUklOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCWN0 eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAj aWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwg IkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKLSAJICogc28gdGhpcyBj b250ZXh0IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5n Ci1AQCAtMjE5LDYgKzI3MiwyMiBAQCBza2lwX3RvX2luaXQ6Ci0gCQl9Ci0gCX0KLSAKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCS8qIEFmdGVyICdrZXknIGlzIHNldCBubyBmdXJ0aGVyIHBhcmFt ZXRlcnMgY2hhbmdlcyBhcmUgcGVybWlzc2libGUuCi0rCSAqIFNvIG9ubHkgY2hlY2sgZm9yIG5v biBGSVBTIGVuYWJsaW5nIGF0IHRoaXMgcG9pbnQuCi0rCSAqLwotKwlpZiAoa2V5ICYmIEZJUFNf bW9kZSgpKQotKwkJewotKwkJaWYgKCEoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxB R19GSVBTKQotKwkJCSYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExP VykpCi0rCQkJewotKwkJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfRElT QUJMRURfRk9SX0ZJUFMpOwotKwkJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0rCQkJcmV0 dXJuIDA7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZihrZXkgfHwgKGN0eC0+Y2lwaGVy LT5mbGFncyAmIEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQpKSB7Ci0gCQlpZighY3R4LT5jaXBo ZXItPmluaXQoY3R4LGtleSxpdixlbmMpKSByZXR1cm4gMDsKLSAJfQotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2V2cF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL2V2cC9ldnBfZXJyLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9l dnAvZXZwX2Vyci5jLmZpcHMJMjAwOC0xMi0yOSAxNzoxMTo1NC4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZXZwX2Vyci5jCTIwMDktMDktMzAgMTM6 MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMTU0LDYgKzE1NCw3IEBAIHN0YXRpYyBFUlJfU1RS SU5HX0RBVEEgRVZQX3N0cl9yZWFzb25zW10KLSB7RVJSX1JFQVNPTihFVlBfUl9ERUNPREVfRVJS T1IpICAgICAgICAgICwiZGVjb2RlIGVycm9yIn0sCi0ge0VSUl9SRUFTT04oRVZQX1JfRElGRkVS RU5UX0tFWV9UWVBFUykgICAsImRpZmZlcmVudCBrZXkgdHlwZXMifSwKLSB7RVJSX1JFQVNPTihF VlBfUl9ESUZGRVJFTlRfUEFSQU1FVEVSUykgICwiZGlmZmVyZW50IHBhcmFtZXRlcnMifSwKLSt7 RVJSX1JFQVNPTihFVlBfUl9ESVNBQkxFRF9GT1JfRklQUykgICAgICwiZGlzYWJsZWQgZm9yIGZp cHMifSwKLSB7RVJSX1JFQVNPTihFVlBfUl9FTkNPREVfRVJST1IpICAgICAgICAgICwiZW5jb2Rl IGVycm9yIn0sCi0ge0VSUl9SRUFTT04oRVZQX1JfRVZQX1BCRV9DSVBIRVJJTklUX0VSUk9SKSwi ZXZwIHBiZSBjaXBoZXJpbml0IGVycm9yIn0sCi0ge0VSUl9SRUFTT04oRVZQX1JfRVhQRUNUSU5H X0FOX1JTQV9LRVkpICAsImV4cGVjdGluZyBhbiByc2Ega2V5In0sCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZXZwLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2Ny eXB0by9ldnAvZXZwLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZXZwLmgu ZmlwcwkyMDA5LTA5LTMwIDEzOjI1OjU3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTMvY3J5cHRvL2V2cC9ldnAuaAkyMDA5LTA5LTMwIDE0OjQwOjU0LjAwMDAwMDAwMCAr MDIwMAotQEAgLTc1LDYgKzc1LDEwIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0gI2Vu ZGlmCi0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjZW5kaWYKLSsKLSAvKgotICNkZWZpbmUgRVZQX1JDMl9LRVlfU0laRQkJMTYKLSAjZGVmaW5l IEVWUF9SQzRfS0VZX1NJWkUJCTE2Ci1AQCAtMTk3LDYgKzIwMSw4IEBAIHR5cGVkZWYgaW50IGV2 cF92ZXJpZnlfbWV0aG9kKGludCB0eXBlLGMKLSAKLSAjZGVmaW5lIEVWUF9NRF9GTEFHX1BLRVlf TUVUSE9EX1NJR05BVFVSRQkweDAwMDQKLSAKLSsjZGVmaW5lIEVWUF9NRF9GTEFHX0ZJUFMJMHgw NDAwIC8qIE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBGSVBTIG1vZGUgKi8KLSsKLSAvKiBE aWdlc3RBbGdvcml0aG1JZGVudGlmaWVyIGZsYWdzLi4uICovCi0gCi0gI2RlZmluZSBFVlBfTURf RkxBR19ESUdBTEdJRF9NQVNLCQkweDAwMTgKLUBAIC0yNjksMTAgKzI3NSw2IEBAIHN0cnVjdCBl bnZfbWRfY3R4X3N0Ci0gCQkJCQkJKiBjbGVhbmVkICovCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZM QUdfUkVVU0UJCTB4MDAwNCAvKiBEb24ndCBmcmVlIHVwIGN0eC0+bWRfZGF0YQotIAkJCQkJCSog aW4gRVZQX01EX0NUWF9jbGVhbnVwICovCi0tLyogRklQUyBhbmQgcGFkIG9wdGlvbnMgYXJlIGln bm9yZWQgaW4gMS4wLjAsIGRlZmluaXRpb25zIGFyZSBoZXJlCi0tICogc28gd2UgZG9uJ3QgYWNj aWRlbnRhbGx5IHJldXNlIHRoZSB2YWx1ZXMgZm9yIG90aGVyIHB1cnBvc2VzLgotLSAqLwotLQot ICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4MDAwOAkvKiBBbGxvdyB1 c2Ugb2Ygbm9uIEZJUFMgZGlnZXN0Ci0gCQkJCQkJICogaW4gRklQUyBtb2RlICovCi0gCi1AQCAt Mjg0LDYgKzI4NiwxMCBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAotICNkZWZpbmUgRVZQX01EX0NU WF9GTEFHX1BBRF9QS0NTMQkweDAwCS8qIFBLQ1MjMSB2MS41IG1vZGUgKi8KLSAjZGVmaW5lIEVW UF9NRF9DVFhfRkxBR19QQURfWDkzMQkweDEwCS8qIFg5LjMxIG1vZGUgKi8KLSAjZGVmaW5lIEVW UF9NRF9DVFhfRkxBR19QQURfUFNTCQkweDIwCS8qIFBTUyBtb2RlICovCi0rI2RlZmluZSBNX0VW UF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpIFwKLSsJCSgoY3R4LT5mbGFncz4+MTYpICYweEZG RkYpIC8qIHNlZWQgbGVuZ3RoICovCi0rI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVO CTB4RkZGRgkvKiBzYWx0IGxlbiBzYW1lIGFzIGRpZ2VzdCAqLwotKyNkZWZpbmUgRVZQX01EX0NU WF9GTEFHX1BTU19NUkVDCTB4RkZGRQkvKiBzYWx0IG1heCBvciBhdXRvIHJlY292ZXJlZCAqLwot IAotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQJCTB4MDEwMCAvKiBEb24ndCBpbml0 aWFsaXplIG1kX2RhdGEgKi8KLSAKLUBAIC0zMzAsNiArMzM2LDE0IEBAIHN0cnVjdCBldnBfY2lw aGVyX3N0Ci0gI2RlZmluZSAJRVZQX0NJUEhfTk9fUEFERElORwkJMHgxMDAKLSAvKiBjaXBoZXIg aGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRpb24gKi8KLSAjZGVmaW5lIAlFVlBfQ0lQSF9SQU5E X0tFWQkJMHgyMDAKLSsvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICov Ci0rI2RlZmluZQkJRVZQX0NJUEhfRkxBR19GSVBTCQkweDQwMAotKy8qIEFsbG93IG5vbiBGSVBT IGNpcGhlciBpbiBGSVBTIG1vZGUgKi8KLSsjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBT X0FMTE9XCTB4ODAwCi0rLyogQWxsb3cgdXNlIGRlZmF1bHQgQVNOMSBnZXQvc2V0IGl2ICovCi0r I2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEJMHgxMDAwCi0rLyogQnVmZmVyIGxl bmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZCMSBtb2RlIG9ubHkgKi8KLSsjZGVmaW5lCQlFVlBf Q0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAwMAotIAotIC8qIGN0cmwoKSB2YWx1ZXMgKi8KLSAK LUBAIC01MDcsNiArNTIxLDEwIEBAIGludAlFVlBfQnl0ZXNUb0tleShjb25zdCBFVlBfQ0lQSEVS ICp0eXAKLSAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmRhdGEsCi0gCQlpbnQgZGF0YWwsIGludCBjb3VudCwgdW5zaWduZWQgY2hhciAqa2V5LHVuc2ln bmVkIGNoYXIgKml2KTsKLSAKLSt2b2lkCUVWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhFVlBfQ0lQ SEVSX0NUWCAqY3R4LCBpbnQgZmxhZ3MpOwotK3ZvaWQJRVZQX0NJUEhFUl9DVFhfY2xlYXJfZmxh Z3MoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IGZsYWdzKTsKLStpbnQgCUVWUF9DSVBIRVJfQ1RY X3Rlc3RfZmxhZ3MoY29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCxpbnQgZmxhZ3MpOwotKwotIGlu dAlFVlBfRW5jcnlwdEluaXQoRVZQX0NJUEhFUl9DVFggKmN0eCxjb25zdCBFVlBfQ0lQSEVSICpj aXBoZXIsCi0gCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIg Kml2KTsKLSBpbnQJRVZQX0VuY3J5cHRJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdHgsY29uc3Qg RVZQX0NJUEhFUiAqY2lwaGVyLCBFTkdJTkUgKmltcGwsCi1AQCAtMTIyNSw2ICsxMjQzLDcgQEAg dm9pZCBFUlJfbG9hZF9FVlBfc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIEVWUF9SX0RFQ09ERV9F UlJPUgkJCQkgMTE0Ci0gI2RlZmluZSBFVlBfUl9ESUZGRVJFTlRfS0VZX1RZUEVTCQkJIDEwMQot ICNkZWZpbmUgRVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMJCQkgMTUzCi0rI2RlZmluZSBFVlBf Ul9ESVNBQkxFRF9GT1JfRklQUwkJCQkgMTYwCi0gI2RlZmluZSBFVlBfUl9FTkNPREVfRVJST1IJ CQkJIDExNQotICNkZWZpbmUgRVZQX1JfRVZQX1BCRV9DSVBIRVJJTklUX0VSUk9SCQkJIDExOQot ICNkZWZpbmUgRVZQX1JfRVhQRUNUSU5HX0FOX1JTQV9LRVkJCQkgMTI3Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhMy9jcnlwdG8vZXZwL2V2cF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L2V2cC9ldnBfbGliLmMuZmlwcwkyMDA5LTA0LTEwIDEyOjMwOjI3LjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9ldnBfbGliLmMJMjAwOS0wOS0zMCAx MzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC02Nyw2ICs2Nyw4IEBAIGludCBFVlBfQ0lQSEVS X3BhcmFtX3RvX2FzbjEoRVZQX0NJUEhFUl8KLSAKLSAJaWYgKGMtPmNpcGhlci0+c2V0X2FzbjFf cGFyYW1ldGVycyAhPSBOVUxMKQotIAkJcmV0PWMtPmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVy cyhjLHR5cGUpOwotKwllbHNlIGlmIChjLT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19E RUZBVUxUX0FTTjEpCi0rCQlyZXQ9RVZQX0NJUEhFUl9zZXRfYXNuMV9pdihjLCB0eXBlKTsKLSAJ ZWxzZQotIAkJcmV0PS0xOwotIAlyZXR1cm4ocmV0KTsKLUBAIC03OCw2ICs4MCw4IEBAIGludCBF VlBfQ0lQSEVSX2FzbjFfdG9fcGFyYW0oRVZQX0NJUEhFUl8KLSAKLSAJaWYgKGMtPmNpcGhlci0+ Z2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxMKQotIAkJcmV0PWMtPmNpcGhlci0+Z2V0X2FzbjFf cGFyYW1ldGVycyhjLHR5cGUpOwotKwllbHNlIGlmIChjLT5jaXBoZXItPmZsYWdzICYgRVZQX0NJ UEhfRkxBR19ERUZBVUxUX0FTTjEpCi0rCQlyZXQ9RVZQX0NJUEhFUl9nZXRfYXNuMV9pdihjLCB0 eXBlKTsKLSAJZWxzZQotIAkJcmV0PS0xOwotIAlyZXR1cm4ocmV0KTsKLUBAIC0xODAsNiArMTg0 LDkgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemUoY29uc3QgRVZQXwotIAotIGludCBF VlBfQ2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3Qg dW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCi0gCXsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJcmV0dXJuIGN0eC0+ Y2lwaGVyLT5kb19jaXBoZXIoY3R4LG91dCxpbixpbmwpOwotIAl9Ci0gCi1AQCAtMjg5LDMgKzI5 NiwxOCBAQCBpbnQgRVZQX01EX0NUWF90ZXN0X2ZsYWdzKGNvbnN0IEVWUF9NRF9DCi0gCXsKLSAJ cmV0dXJuIChjdHgtPmZsYWdzICYgZmxhZ3MpOwotIAl9Ci0rCi0rdm9pZCBFVlBfQ0lQSEVSX0NU WF9zZXRfZmxhZ3MoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IGZsYWdzKQotKwl7Ci0rCWN0eC0+ ZmxhZ3MgfD0gZmxhZ3M7Ci0rCX0KLSsKLSt2b2lkIEVWUF9DSVBIRVJfQ1RYX2NsZWFyX2ZsYWdz KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCBmbGFncykKLSsJewotKwljdHgtPmZsYWdzICY9IH5m bGFnczsKLSsJfQotKwotK2ludCBFVlBfQ0lQSEVSX0NUWF90ZXN0X2ZsYWdzKGNvbnN0IEVWUF9D SVBIRVJfQ1RYICpjdHgsIGludCBmbGFncykKLSsJewotKwlyZXR1cm4gKGN0eC0+ZmxhZ3MgJiBm bGFncyk7Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9ldnBf bG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2V2cF9sb2NsLmgKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzCTIwMDktMDkt MzAgMTM6MjU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlw dG8vZXZwL2V2cF9sb2NsLmgJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBA IC0xMTEsMTEgKzExMSwxMSBAQCBzdGF0aWMgaW50IGNuYW1lIyNfY2JjX2NpcGhlcihFVlBfQ0lQ SEVSCi0gc3RhdGljIGludCBjbmFtZSMjX2NmYiMjY2JpdHMjI19jaXBoZXIoRVZQX0NJUEhFUl9D VFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6 ZV90IGlubCkgXAotIHtcCi0gCXNpemVfdCBjaHVuaz1FVlBfTUFYQ0hVTks7XAotLQlpZiAoY2Jp dHM9PTEpICBjaHVuaz4+PTM7XAotKwlpZiAoY2JpdHM9PTEgJiYgIShjdHgtPmZsYWdzICYgRVZQ X0NJUEhfRkxBR19MRU5HVEhfQklUUykpICBjaHVuaz4+PTM7XAotIAlpZiAoaW5sPGNodW5rKSBj aHVuaz1pbmw7XAotIAl3aGlsZShpbmwgJiYgaW5sPj1jaHVuaylcCi0gCSAgICB7XAotLQkgICAg Y3ByZWZpeCMjX2NmYiMjY2JpdHMjI19lbmNyeXB0KGluLCBvdXQsIChsb25nKShjYml0cz09MT9j aHVuayo4OmNodW5rKSwgJigoa3N0cnVjdCAqKWN0eC0+Y2lwaGVyX2RhdGEpLT5rc2NoZWQsIGN0 eC0+aXYsICZjdHgtPm51bSwgY3R4LT5lbmNyeXB0KTtcCi0rCSAgICBjcHJlZml4IyNfY2ZiIyNj Yml0cyMjX2VuY3J5cHQoaW4sIG91dCwgKGxvbmcpKGNiaXRzPT0xICYmICEoY3R4LT5mbGFncyAm IEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpP2NodW5rKjg6Y2h1bmspLCAmKChrc3RydWN0ICop Y3R4LT5jaXBoZXJfZGF0YSktPmtzY2hlZCwgY3R4LT5pdiwgJmN0eC0+bnVtLCBjdHgtPmVuY3J5 cHQpO1wKLSAJICAgIGlubC09Y2h1bms7XAotIAkgICAgaW4gKz1jaHVuaztcCi0gCSAgICBvdXQr PWNodW5rO1wKLUBAIC0yNTQsMTQgKzI1NCwyOSBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfIyNj bmFtZSMjX2VjYih2b2lkCi0gCi0gI2RlZmluZSBFVlBfQ19EQVRBKGtzdHJ1Y3QsIGN0eCkJKChr c3RydWN0ICopKGN0eCktPmNpcGhlcl9kYXRhKQotIAotLSNkZWZpbmUgSU1QTEVNRU5UX0NGQlIo Y2lwaGVyLGNwcmVmaXgsa3N0cnVjdCxrc2NoZWQsa2V5c2l6ZSxjYml0cyxpdl9sZW4pIFwKLSsj ZGVmaW5lIElNUExFTUVOVF9DRkJSKGNpcGhlcixjcHJlZml4LGtzdHJ1Y3Qsa3NjaGVkLGtleXNp emUsY2JpdHMsaXZfbGVuLGZsKSBcCi0gCUJMT0NLX0NJUEhFUl9mdW5jX2NmYihjaXBoZXIjI18j I2tleXNpemUsY3ByZWZpeCxjYml0cyxrc3RydWN0LGtzY2hlZCkgXAotIAlCTE9DS19DSVBIRVJf ZGVmX2NmYihjaXBoZXIjI18jI2tleXNpemUsa3N0cnVjdCwgXAotIAkJCSAgICAgTklEXyMjY2lw aGVyIyNfIyNrZXlzaXplLCBrZXlzaXplLzgsIGl2X2xlbiwgY2JpdHMsIFwKLS0JCQkgICAgIDAs IGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBcCi0tCQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24x X2l2LCBcCi0tCQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LCBcCi0tCQkJICAgICBOVUxM KQotKwkJCSAgICAgKGZsKXxFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwgXAotKwkJCSAgICAg Y2lwaGVyIyNfaW5pdF9rZXksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCi0rCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQotKyNk ZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tleQotKyNkZWZpbmUgQ0FTVF9zZXRf a2V5CXByaXZhdGVfQ0FTVF9zZXRfa2V5Ci0rI2RlZmluZSBSQzVfMzJfc2V0X2tleQlwcml2YXRl X1JDNV8zMl9zZXRfa2V5Ci0rI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tleQot KyNkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleSBwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkKLSsjZGVm aW5lIGlkZWFfc2V0X2VuY3J5cHRfa2V5IHByaXZhdGVfaWRlYV9zZXRfZW5jcnlwdF9rZXkKLSsK LSsjZGVmaW5lIE1ENV9Jbml0CXByaXZhdGVfTUQ1X0luaXQKLSsjZGVmaW5lIE1ENF9Jbml0CXBy aXZhdGVfTUQ0X0luaXQKLSsjZGVmaW5lIE1EMl9Jbml0CXByaXZhdGVfTUQyX0luaXQKLSsjZGVm aW5lIE1EQzJfSW5pdAlwcml2YXRlX01EQzJfSW5pdAotKyNkZWZpbmUgU0hBX0luaXQJcHJpdmF0 ZV9TSEFfSW5pdAotKwotKyNlbmRpZgotIAotIHN0cnVjdCBldnBfcGtleV9jdHhfc3QKLSAJewot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcyBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvbV9kc3MuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJMjAwNi0wNC0xOSAxOTowNTo1Ny4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvbV9kc3MuYwkyMDA5LTA5 LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIGNv bnN0IEVWUF9NRCBkc2FfbWQ9Ci0gCU5JRF9kc2FXaXRoU0hBLAotIAlOSURfZHNhV2l0aFNIQSwK LSAJU0hBX0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAotKwlFVlBf TURfRkxBR19QS0VZX0RJR0VTVHxFVlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUs Ci0gCWZpbmFsLAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL21fZHNz MS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL21fZHNzMS5jCi0tLS0gb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMJMjAwNi0wNC0xOSAxOTow NTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAv bV9kc3MxLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC04Miw3ICs4 Miw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNzMV9tZD0KLSAJTklEX2RzYSwKLSAJTklEX2Rz YVdpdGhTSEExLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9ESUdF U1QsCi0rCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQs Ci0gCXVwZGF0ZSwKLSAJZmluYWwsCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0 by9ldnAvbV9zaGExLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvbV9zaGEx LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcwkyMDA4 LTAzLTEyIDIyOjE0OjI0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2V2cC9tX3NoYTEuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAot QEAgLTgyLDcgKzgyLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGExX21kPQotIAlOSURfc2hh MSwKLSAJTklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBX0RJR0VTVF9MRU5HVEgsCi0t CUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9B QlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19E SUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUs Ci0gCWZpbmFsLAotQEAgLTExOSw3ICsxMjAsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTIy NF9tZD0KLSAJTklEX3NoYTIyNCwKLSAJTklEX3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uLAotIAlT SEEyMjRfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJF fEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0Rf U0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJ UFMsCi0gCWluaXQyMjQsCi0gCXVwZGF0ZTI1NiwKLSAJZmluYWwyNTYsCi1AQCAtMTM4LDcgKzE0 MCw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjU2X21kPQotIAlOSURfc2hhMjU2LAotIAlO SURfc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTI1Nl9ESUdFU1RfTEVOR1RILAotLQlF VlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJT RU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElH QUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdDI1NiwKLSAJdXBkYXRl MjU2LAotIAlmaW5hbDI1NiwKLUBAIC0xNjksNyArMTcyLDggQEAgc3RhdGljIGNvbnN0IEVWUF9N RCBzaGEzODRfbWQ9Ci0gCU5JRF9zaGEzODQsCi0gCU5JRF9zaGEzODRXaXRoUlNBRW5jcnlwdGlv biwKLSAJU0hBMzg0X0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJ R05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlf TUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURf RkxBR19GSVBTLAotIAlpbml0Mzg0LAotIAl1cGRhdGU1MTIsCi0gCWZpbmFsNTEyLAotQEAgLTE4 OCw3ICsxOTIsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTUxMl9tZD0KLSAJTklEX3NoYTUx MiwKLSAJTklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEE1MTJfRElHRVNUX0xFTkdU SCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FM R0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9G TEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQ1MTIsCi0g CXVwZGF0ZTUxMiwKLSAJZmluYWw1MTIsCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2Ny eXB0by9ldnAvbmFtZXMuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9uYW1l cy5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL25hbWVzLmMuZmlwcwkyMDA5 LTA0LTEwIDEyOjMwOjI3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2V2cC9uYW1lcy5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1A QCAtNjYsNiArNjYsMTAgQEAgaW50IEVWUF9hZGRfY2lwaGVyKGNvbnN0IEVWUF9DSVBIRVIgKmMp Ci0gCXsKLSAJaW50IHI7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRf bGlicmFyeSgpOwotKyNlbmRpZgotKwotIAlyPU9CSl9OQU1FX2FkZChPQkpfbmlkMnNuKGMtPm5p ZCksT0JKX05BTUVfVFlQRV9DSVBIRVJfTUVUSCwoY29uc3QgY2hhciAqKWMpOwotIAlpZiAociA9 PSAwKSByZXR1cm4oMCk7Ci0gCWNoZWNrX2RlZmVyKGMtPm5pZCk7Ci1AQCAtNzksNiArODMsMTAg QEAgaW50IEVWUF9hZGRfZGlnZXN0KGNvbnN0IEVWUF9NRCAqbWQpCi0gCWludCByOwotIAljb25z dCBjaGFyICpuYW1lOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJT1BFTlNTTF9pbml0X2xp YnJhcnkoKTsKLSsjZW5kaWYKLSsKLSAJbmFtZT1PQkpfbmlkMnNuKG1kLT50eXBlKTsKLSAJcj1P QkpfTkFNRV9hZGQobmFtZSxPQkpfTkFNRV9UWVBFX01EX01FVEgsKGNvbnN0IGNoYXIgKiltZCk7 Ci0gCWlmIChyID09IDApIHJldHVybigwKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9w X3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9wX3NpZ24uYy5maXBz CTIwMDYtMDUtMjQgMTU6Mjk6MzAuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1i ZXRhMy9jcnlwdG8vZXZwL3Bfc2lnbi5jCTIwMDktMDktMzAgMTU6MDc6MTQuMDAwMDAwMDAwICsw MjAwCi1AQCAtNjEsNiArNjEsNyBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotICNpbmNs dWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gCi0gI2lmZGVmIHVuZGVmCi0gdm9pZCBFVlBfU2lnbklu aXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfTUQgKnR5cGUpCi1AQCAtMTAxLDYgKzEwMiwyMiBAQCBp bnQgRVZQX1NpZ25GaW5hbChFVlBfTURfQ1RYICpjdHgsIHVuc2lnCi0gCQkJZ290byBlcnI7Ci0g CQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8 PSAwKQotIAkJCWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdf UEFEX1g5MzEpCi0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJT QV9YOTMxX1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3Mg JiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKLSsJCQl7Ci0rCQkJaW50IHNhbHRsZW47Ci0rCQkJ aWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFE RElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJc2FsdGxlbiA9IE1fRVZQX01EX0NUWF9G TEFHX1BTU19TQUxUKGN0eCk7Ci0rCQkJaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BT U19NRExFTikKLSsJCQkJc2FsdGxlbiA9IC0xOwotKwkJCWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQ X01EX0NUWF9GTEFHX1BTU19NUkVDKQotKwkJCQlzYWx0bGVuID0gLTI7Ci0rCQkJaWYgKEVWUF9Q S0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQotKwkJCQln b3RvIGVycjsKLSsJCQl9Ci0gCQlpZiAoRVZQX1BLRVlfc2lnbihwa2N0eCwgc2lncmV0LCAmc2x0 bXAsIG0sIG1fbGVuKSA8PSAwKQotIAkJCWdvdG8gZXJyOwotIAkJKnNpZ2xlbiA9IHNsdG1wOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvcF92ZXJpZnkuYwotLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTMvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1ODowMS4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvcF92ZXJp ZnkuYwkyMDA5LTA5LTMwIDE1OjA3OjI3LjAwMDAwMDAwMCArMDIwMAotQEAgLTYxLDYgKzYxLDcg QEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3Rz Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5o PgotIAotIGludCBFVlBfVmVyaWZ5RmluYWwoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25l ZCBjaGFyICpzaWdidWYsCi0gCSAgICAgdW5zaWduZWQgaW50IHNpZ2xlbiwgRVZQX1BLRVkgKnBr ZXkpCi1AQCAtODYsNiArODcsMjIgQEAgaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpj dHgsIGNvbgotIAkJCWdvdG8gZXJyOwotIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJl X21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKLSAJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgt PmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQotKwkJCWlmIChFVlBfUEtFWV9DVFhf c2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQotKwkJCQlnb3Rv IGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCi0rCQkJ ewotKwkJCWludCBzYWx0bGVuOwotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5n KHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJ CXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOwotKwkJCWlmIChzYWx0 bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCi0rCQkJCXNhbHRsZW4gPSAtMTsKLSsJ CQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKLSsJCQkJc2Fs dGxlbiA9IC0yOwotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0 eCwgc2FsdGxlbikgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJfQotIAkJaSA9IEVWUF9QS0VZ X3ZlcmlmeShwa2N0eCwgc2lnYnVmLCBzaWdsZW4sIG0sIG1fbGVuKTsKLSAJCWVycjoKLSAJCUVW UF9QS0VZX0NUWF9mcmVlKHBrY3R4KTsKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYwotLS0tIC9kZXYvbnVsbAkyMDA5 LTA5LTIzIDEwOjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAw MDAwICswMjAwCi1AQCAtMCwwICsxLDkzOSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJp Z2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot KyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcu Ci0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwot Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBOSVNU IEFFUyBBbGdvcml0aG0gVmFsaWRhdGlvbiBTdWl0ZQotKyAgVGVzdCBQcm9ncmFtCi0rCi0rICBE b25hdGVkIHRvIE9wZW5TU0wgYnk6Ci0rICBWLU9ORSBDb3Jwb3JhdGlvbgotKyAgMjAyNTAgQ2Vu dHVyeSBCbHZkLCBTdWl0ZSAzMDAKLSsgIEdlcm1hbnRvd24sIE1EIDIwODc0Ci0rICBVLlMuQS4K LSsgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwot KyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPGVycm5vLmg+Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNs dWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+Ci0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwot KwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5v IEZJUFMgQUVTIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0r Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwot KyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUgMTYKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotK2lu dCBBRVNUZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFr ZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAK LSsJICAgIGludCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVu c2lnbmVkIGNoYXIgKnBsYWludGV4dCwgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwgaW50IGxl bikKLSsgICAgewotKyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOwotKwotKyAg ICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5 c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOwot KwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygp OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2Ni YygpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0rCX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChh bW9kZSwgIkVDQiIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNl IDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQlj YXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2VjYigpOwotKwkJYnJlYWs7Ci0rCi0r CQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2VjYigpOwotKwkJYnJlYWs7Ci0r CQl9Ci0rCX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjEyOCIpID09IDAp Ci0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9 IEVWUF9hZXNfMTI4X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNp cGhlciA9IEVWUF9hZXNfMTkyX2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoK LSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0r CX0KLSsgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQotKwl7 Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBf YWVzXzEyOF9vZmIoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBF VlBfYWVzXzE5Ml9vZmIoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIg PSBFVlBfYWVzXzI1Nl9vZmIoKTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UgaWYo IXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsK LSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMSgpOwotKwkJYnJlYWs7 Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjEoKTsKLSsJCWJy ZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxKCk7Ci0r CQlicmVhazsKLSsJCX0KLSsJfQotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4 IikpCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhl ciA9IEVWUF9hZXNfMTI4X2NmYjgoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQlj aXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmI4KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2Ogot KwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsg ICAgZWxzZQotKwl7Ci0rCXByaW50ZigiVW5rbm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwly ZXR1cm4gMDsKLSsJfQotKyAgICBpZiAoIWNpcGhlcikKLSsJewotKwlwcmludGYoIkludmFsaWQg a2V5IHNpemU6ICVkXG4iLCBha2V5c3opOwotKwlyZXR1cm4gMDsgCi0rCX0KLSsgICAgaWYgKEVW UF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDAp Ci0rCXJldHVybiAwOwotKyAgICBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwlNX0VW UF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOwot KyAgICBpZiAoZGlyKQotKwkJRVZQX0NpcGhlcihjdHgsIGNpcGhlcnRleHQsIHBsYWludGV4dCwg bGVuKTsKLSsJZWxzZQotKwkJRVZQX0NpcGhlcihjdHgsIHBsYWludGV4dCwgY2lwaGVydGV4dCwg bGVuKTsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5U RVhUIiwgIkNJUEhFUlRFWFQifTsKLStjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9G QiIsIkNGQjEiLCJDRkI4IiwiQ0ZCMTI4In07Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBD RkIxLCBDRkI4LCBDRkIxMjh9OwotK2VudW0gWENyeXB0IHtYREVDUllQVCwgWEVOQ1JZUFR9Owot KwotKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotKy8qICBNb250ZSBDYXJsbyBU ZXN0cyAgICAgICAgICAqLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwot Ky8qI2RlZmluZSBnYihhLGIpICgoKGEpWyhiKS84XSA+PiAoKGIpJTgpKSYxKSovCi0rLyojZGVm aW5lIHNiKGEsYix2KSAoKGEpWyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKChiKSU4KSkpfCgh ISh2KSA8PCAoKGIpJTgpKSkqLwotKwotKyNkZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4g KDctKGIpJTgpKSYxKQotKyNkZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhd Jn4oMSA8PCAoNy0oYiklOCkpKXwoISEodikgPDwgKDctKGIpJTgpKSkKLSsKLStpbnQgZG9fbWN0 KGNoYXIgKmFtb2RlLCAKLSsJICAgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSx1bnNp Z25lZCBjaGFyICppVmVjLAotKwkgICBpbnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQg bGVuLAotKwkgICBGSUxFICpyZnApCi0rICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVu c2lnbmVkIGNoYXIga2V5WzEwMV1bMzJdOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2WzEwMV1bQUVT X0JMT0NLX1NJWkVdOwotKyAgICB1bnNpZ25lZCBjaGFyIHB0ZXh0WzEwMDFdWzMyXTsKLSsgICAg dW5zaWduZWQgY2hhciBjdGV4dFsxMDAxXVszMl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVy dGV4dFs2NCs0XTsKLSsgICAgaW50IGksIGosIG4sIG4xLCBuMjsKLSsgICAgaW50IGltb2RlID0g MCwgbmtleXN6ID0gYWtleXN6Lzg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQ X0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKGxlbiA+IDMyKQotKwl7Ci0rCXBy aW50ZigiXG4+Pj4+IExlbmd0aCBleGNlZWRzIDMyIGZvciAlcyAlZCA8PDw8XG5cbiIsIAotKwkg ICAgICAgYW1vZGUsIGFrZXlzeik7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBmb3IgKGltb2Rl ID0gMDsgaW1vZGUgPCA2OyArK2ltb2RlKQotKwlpZiAoc3RyY21wKGFtb2RlLCB0X21vZGVbaW1v ZGVdKSA9PSAwKQotKwkgICAgYnJlYWs7Ci0rICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlw cmludGYoIlVucmVjb2duaXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gLTE7Ci0r CX0KLSsKLSsgICAgbWVtY3B5KGtleVswXSwgYUtleSwgbmtleXN6KTsKLSsgICAgaWYgKGlWZWMp Ci0rCW1lbWNweShpdlswXSwgaVZlYywgQUVTX0JMT0NLX1NJWkUpOwotKyAgICBpZiAoZGlyID09 IFhFTkNSWVBUKQotKwltZW1jcHkocHRleHRbMF0sIHRleHQsIGxlbik7Ci0rICAgIGVsc2UKLSsJ bWVtY3B5KGN0ZXh0WzBdLCB0ZXh0LCBsZW4pOwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwOyAr K2kpCi0rCXsKLSsJLyogcHJpbnRmKCJJdGVyYXRpb24gJWRcbiIsIGkpOyAqLwotKwlpZiAoaSA+ IDApCi0rCSAgICB7Ci0rCSAgICBmcHJpbnRmKHJmcCwiQ09VTlQgPSAlZFxuIixpKTsKLSsJICAg IE91dHB1dFZhbHVlKCJLRVkiLGtleVtpXSxua2V5c3oscmZwLDApOwotKwkgICAgaWYgKGltb2Rl ICE9IEVDQikgIC8qIEVDQiAqLwotKwkJT3V0cHV0VmFsdWUoIklWIixpdltpXSxBRVNfQkxPQ0tf U0laRSxyZnAsMCk7Ci0rCSAgICAvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLwot KwkgICAgT3V0cHV0VmFsdWUodF90YWdbZGlyXjFdLGRpciA/IHB0ZXh0WzBdIDogY3RleHRbMF0s bGVuLHJmcCwKLSsJCQlpbW9kZSA9PSBDRkIxKTsKLSsJICAgIH0KLSsJZm9yIChqID0gMDsgaiA8 IDEwMDA7ICsraikKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBj YXNlIEVDQjoKLSsJCWlmIChqID09IDApCi0rCQkgICAgeyAvKiBzZXQgdXAgZW5jcnlwdGlvbiAq LwotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBOVUxM LCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBw dGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJ CQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1l bWNweShjdGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkg ICAgewotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJewotKwkJCUVWUF9DaXBoZXIo JmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBj dGV4dFtqXSwgbGVuKTsKLSsJCQl9Ci0rCQkgICAgZWxzZQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVy KCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCQltZW1jcHkoY3RleHRbaisxXSwg cHRleHRbal0sIGxlbik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2Fz ZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjogIAotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQlpZiAoaiA9 PSAwKQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3os IGtleVtpXSwgaXZbaV0sIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLwotKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICBpZiAoZGlyID09 IFhFTkNSWVBUKQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBpdltpXSwgbGVuKTsKLSsJCSAgICBl bHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIGl2W2ldLCBsZW4pOwotKwkJICAgIH0KLSsJCWVs c2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQl7Ci0rCQkJRVZQ X0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KHB0ZXh0 W2orMV0sIGN0ZXh0W2otMV0sIGxlbik7Ci0rCQkJfQotKwkJICAgIGVsc2UKLSsJCQl7Ci0rCQkJ RVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KGN0 ZXh0W2orMV0sIHB0ZXh0W2otMV0sIGxlbik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwot KwotKwkgICAgY2FzZSBDRkI4OgotKwkJaWYgKGogPT0gMCkKLSsJCSAgICB7Ci0rCQkgICAgcmV0 ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKLSsJCQkJICBk aXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3Rl eHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGly ID09IFhFTkNSWVBUKQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBs ZW4pOwotKwkJICAgIGVsc2UKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtq XSwgbGVuKTsKLSsJCSAgICB9Ci0rCQlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJICAgIHsKLSsJ CSAgICBpZiAoaiA8IDE2KQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7 Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqLTE2XSwgbGVuKTsK LSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChqIDwgMTYpCi0rCQkJbWVt Y3B5KGN0ZXh0W2orMV0sICZpdltpXVtqXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5 KGN0ZXh0W2orMV0sIHB0ZXh0W2otMTZdLCBsZW4pOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwot KwkgICAgY2FzZSBDRkIxOgotKwkJaWYoaiA9PSAwKQotKwkJICAgIHsKLSsjaWYgMAotKwkJICAg IC8qIGNvbXBlbnNhdGUgZm9yIHdyb25nIGVuZGlhbm5lc3Mgb2YgaW5wdXQgZmlsZSAqLwotKwkJ ICAgIGlmKGkgPT0gMCkKLSsJCQlwdGV4dFswXVswXTw8PTc7Ci0rI2VuZGlmCi0rCQkgICAgcmV0 ID0gQUVTVGVzdCgmY3R4LGFtb2RlLGFrZXlzeixrZXlbaV0saXZbaV0sZGlyLAotKwkJCQlwdGV4 dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAg ICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0 ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pd LCBjdGV4dFtqXSwgbGVuKTsKLSsKLSsJCSAgICB9Ci0rCQlpZihkaXIgPT0gWEVOQ1JZUFQpCi0r CQkgICAgewotKwkJICAgIGlmKGogPCAxMjgpCi0rCQkJc2IocHRleHRbaisxXSwwLGdiKGl2W2ld LGopKTsKLSsJCSAgICBlbHNlCi0rCQkJc2IocHRleHRbaisxXSwwLGdiKGN0ZXh0W2otMTI4XSww KSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZihqIDwgMTI4KQotKwkJ CXNiKGN0ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7Ci0rCQkgICAgZWxzZQotKwkJCXNiKGN0ZXh0 W2orMV0sMCxnYihwdGV4dFtqLTEyOF0sMCkpOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQot KwkgICAgfQotKwktLWo7IC8qIHJlc2V0IHRvIGxhc3Qgb2YgcmFuZ2UgKi8KLSsJLyogT3V0cHV0 IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8KLSsJT3V0cHV0VmFsdWUodF90YWdbZGlyXSxkaXIg PyBjdGV4dFtqXSA6IHB0ZXh0W2pdLGxlbixyZnAsCi0rCQkgICAgaW1vZGUgPT0gQ0ZCMSk7Ci0r CWZwcmludGYocmZwLCAiXG4iKTsgIC8qIGFkZCBzZXBhcmF0b3IgKi8KLSsKLSsJLyogQ29tcHV0 ZSBuZXh0IEtFWSAqLwotKwlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgaWYg KGltb2RlID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4u IHx8IENUW2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7 ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtuMV0gPSBjdGV4dFtqLW4yXVswXTsKLSsJ CX0KLSsJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0wLG4yPWFr ZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIpCi0rCQkgICAgc2IoY2lwaGVydGV4dCxu MSxnYihjdGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlz eikKLSsJCSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3Rl eHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMTkyOgotKwkJICAgIG1lbWNweShj aXBoZXJ0ZXh0LCBjdGV4dFtqLTFdKzgsIDgpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0Kzgs IGN0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAgICBtZW1j cHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSwgMTYpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0 KzE2LCBjdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJICAgIH0KLSsJ ZWxzZQotKwkgICAgewotKwkgICAgaWYgKGltb2RlID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rb ai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIg PSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtu MV0gPSBwdGV4dFtqLW4yXVswXTsKLSsJCX0KLSsJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkK LSsJCXsKLSsJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIp Ci0rCQkgICAgc2IoY2lwaGVydGV4dCxuMSxnYihwdGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAg ICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlzeikKLSsJCSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAg ICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNh c2UgMTkyOgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqLTFdKzgsIDgpOwotKwkJ ICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIHB0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0r CQljYXNlIDI1NjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbai0xXSwgMTYpOwot KwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBwdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFr OwotKwkJICAgIH0KLSsJICAgIH0KLSsJLyogQ29tcHV0ZSBuZXh0IGtleTogS2V5W2krMV0gPSBL ZXlbaV0geG9yIGN0ICovCi0rCWZvciAobiA9IDA7IG4gPCBua2V5c3o7ICsrbikKLSsJICAgIGtl eVtpKzFdW25dID0ga2V5W2ldW25dIF4gY2lwaGVydGV4dFtuXTsKLSsJCi0rCS8qIENvbXB1dGUg bmV4dCBJViBhbmQgdGV4dCAqLwotKwlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkg ICAgc3dpdGNoIChpbW9kZSkKLSsJCXsKLSsJICAgIGNhc2UgRUNCOgotKwkJbWVtY3B5KHB0ZXh0 WzBdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENC QzoKLSsJICAgIGNhc2UgT0ZCOgotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQltZW1jcHkoaXZbaSsx XSwgY3RleHRbal0sIEFFU19CTE9DS19TSVpFKTsKLSsJCW1lbWNweShwdGV4dFswXSwgY3RleHRb ai0xXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjg6Ci0rCQkv KiBJVltpKzFdID0gY3QgKi8KLSsJCWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24x LCAtLW4yKQotKwkJICAgIGl2W2krMV1bbjFdID0gY3RleHRbai1uMl1bMF07Ci0rCQlwdGV4dFsw XVswXSA9IGN0ZXh0W2otMTZdWzBdOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjE6Ci0rCQlm b3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikKLSsJCSAgICBzYihpdltpKzFd LG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKLSsJCXB0ZXh0WzBdWzBdPWN0ZXh0W2otMTI4XVswXSYw eDgwOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN3 aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJCW1lbWNweShjdGV4dFswXSwg cHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDQkM6Ci0r CSAgICBjYXNlIE9GQjoKLSsJICAgIGNhc2UgQ0ZCMTI4OgotKwkJbWVtY3B5KGl2W2krMV0sIHB0 ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2otMV0s IEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkI4OgotKwkJZm9yIChu MSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsrbjEsIC0tbjIpCi0rCQkgICAgaXZbaSsxXVtuMV0g PSBwdGV4dFtqLW4yXVswXTsKLSsJCWN0ZXh0WzBdWzBdID0gcHRleHRbai0xNl1bMF07Ci0rCQli cmVhazsKLSsJICAgIGNhc2UgQ0ZCMToKLSsJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsg KytuMSwtLW4yKQotKwkJICAgIHNiKGl2W2krMV0sbjEsZ2IocHRleHRbai1uMl0sMCkpOwotKwkJ Y3RleHRbMF1bMF09cHRleHRbai0xMjhdWzBdJjB4ODA7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAg IH0KLSsJfQotKyAgICAKLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8qPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSsvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLSsgICMgQ29uZmlnIGluZm8gZm9yIHYtb25lCi0rICAjIEFFU1ZT IE1NVCB0ZXN0IGRhdGEgZm9yIEVDQgotKyAgIyBTdGF0ZSA6IEVuY3J5cHQgYW5kIERlY3J5cHQK LSsgICMgS2V5IExlbmd0aCA6IDI1NgotKyAgIyBGcmkgQXVnIDMwIDA0OjA3OjIyIFBNCi0rICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLStpbnQgcHJvY19maWxlKGNoYXIgKnJx ZmlsZSwgY2hhciAqcnNwZmlsZSkKLSsgICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2 XTsKLSsgICAgRklMRSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1Zlsy MDQ4XTsKLSsgICAgY2hhciB0YnVmWzIwNDhdOwotKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAw OwotKyAgICBjaGFyIGFsZ29bOF0gPSAiIjsKLSsgICAgY2hhciBhbW9kZVs4XSA9ICIiOwotKyAg ICBjaGFyIGF0ZXN0WzhdID0gIiI7Ci0rICAgIGludCBha2V5c3ogPSAwOwotKyAgICB1bnNpZ25l ZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKLSsgICAgaW50IGRpciA9IC0xLCBlcnIgPSAwLCBz dGVwID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07Ci0rICAgIHVuc2ln bmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKLSsgICAgY2hhciAqcnA7Ci0rICAgIEVWUF9DSVBI RVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYg KCFycWZpbGUgfHwgISgqcnFmaWxlKSkKLSsJewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsK LSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIHN0cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlm ICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90 IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsK LSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIGlmICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZu LGFmbik7Ci0rCXJwPXN0cnN0cihyZm4sInJlcS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lO MzIKLSsJaWYgKCFycCkKLSsJICAgIHJwPXN0cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0r CWFzc2VydChycCk7Ci0rCW1lbWNweShycCwicnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAi LnJlcSIpOwotKwltZW1jcHkocnAsICIucnNwIiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0K LSsgICAgaWYgKChyZnAgPSBmb3Blbihyc3BmaWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXBy aW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJy b3IoZXJybm8pKTsKLSsJZmNsb3NlKGFmcCk7Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsK LSsJfQotKyAgICB3aGlsZSAoIWVyciAmJiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnAp KSAhPSBOVUxMKQotKwl7Ci0rCXRpZHlfbGluZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxl bihpYnVmKTsKLSsJLyogICAgICBwcmludGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsg Ki8KLSsJc3dpdGNoIChzdGVwKQotKwkgICAgewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxl ICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUg Ki8KLSsJCWlmICgoKmFsZ28gPT0gJ1wwJykgfHwKLSsJCSAgICAoKmFtb2RlID09ICdcMCcpIHx8 Ci0rCQkgICAgKGFrZXlzeiA9PSAwKSkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJNaXNzaW5n IEFsZ29yaXRobSwgTW9kZSBvciBLZXlTaXplICglcy8lcy8lZClcbiIsCi0rCQkJICAgYWxnbyxh bW9kZSxha2V5c3opOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAg IHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAgfQot KwkJfQotKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYoIklu dmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJ ICAgIGVsc2UKLSsJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpwcCA9 IGlidWYrMjsKLSsJCWludCBuOwotKwkJaWYgKGFrZXlzeikKLSsJCSAgICB7IC8qIGluc2VydCBj dXJyZW50IHRpbWUgJiBkYXRlICovCi0rCQkgICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOwotKwkJ ICAgIGZwcmludGYocmZwLCAiIyAlcyIsIGN0aW1lKCZydGltKSk7Ci0rCQkgICAgfQotKwkJZWxz ZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgIGlmIChzdHJuY21w KHBwLCAiQUVTVlMgIiwgNikgPT0gMCkKLSsJCQl7Ci0rCQkJc3RyY3B5KGFsZ28sICJBRVMiKTsK LSsJCQkvKiBnZXQgdGVzdCB0eXBlICovCi0rCQkJcHAgKz0gNjsKLSsJCQl4cCA9IHN0cmNocihw cCwgJyAnKTsKLSsJCQluID0geHAtcHA7Ci0rCQkJc3RybmNweShhdGVzdCwgcHAsIG4pOwotKwkJ CWF0ZXN0W25dID0gJ1wwJzsKLSsJCQkvKiBnZXQgbW9kZSAqLwotKwkJCXhwID0gc3RycmNocihw cCwgJyAnKTsgLyogZ2V0IG1vZGUiICovCi0rCQkJbiA9IHN0cmxlbih4cCsxKS0xOwotKwkJCXN0 cm5jcHkoYW1vZGUsIHhwKzEsIG4pOwotKwkJCWFtb2RlW25dID0gJ1wwJzsKLSsJCQkvKiBhbW9k ZVszXSA9ICdcMCc7ICovCi0rCQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50ZigiVGVzdCA9ICVz LCBNb2RlID0gJXNcbiIsIGF0ZXN0LCBhbW9kZSk7Ci0rCQkJfQotKwkJICAgIGVsc2UgaWYgKHN0 cm5jYXNlY21wKHBwLCAiS2V5IExlbmd0aCA6ICIsIDEzKSA9PSAwKQotKwkJCXsKLSsJCQlha2V5 c3ogPSBhdG9pKHBwKzEzKTsKLSsJCQlpZiAoVkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJLZXkgc2l6 ZSA9ICVkXG4iLCBha2V5c3opOwotKwkJCX0KLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBicmVhazsK LSsKLSsJY2FzZSAxOiAgLyogW0VOQ1JZUFRdIHwgW0RFQ1JZUFRdICovCi0rCSAgICBpZiAoaWJ1 ZlswXSA9PSAnWycpCi0rCQl7Ci0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJKytzdGVwOwotKwkJ aWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9 IDE7Ci0rCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkK LSsJCSAgICBkaXIgPSAwOwotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFs aWQga2V5d29yZDogJXNcbiIsIGlidWYpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJ YnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCi0rCQl7Ci0rCQllcnIgPSAx OwotKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsKLSsJCWJy ZWFrOwotKwkJfQotKwkgICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwotKwotKwljYXNlIDI6IC8qIEtF WSA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZigqaWJ1ZiA9PSAn XG4nKQotKwkJYnJlYWs7Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgp KQotKwkJYnJlYWs7Ci0rCi0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIktFWSA9ICIsIDYp ICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0r CQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFL ZXkpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBL RVlcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmlu dFZhbHVlKCJLRVkiLCBhS2V5LCBsZW4pOwotKwkJaWYgKHN0cmNtcChhbW9kZSwgIkVDQiIpID09 IDApCi0rCQkgICAgewotKwkJICAgIG1lbXNldChpVmVjLCAwLCBzaXplb2YoaVZlYykpOwotKwkJ ICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAqLwotKwkJICAgIH0K LSsJCWVsc2UKLSsJCSAgICArK3N0ZXA7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAz OiAvKiBJViA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3Ry bmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2lu ZyBJVlxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJbGVuID0g aGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsK LSsJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBi cmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7Ci0rCQlzdGVw ID0gKGRpcik/IDQ6IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA0OiAvKiBQTEFJ TlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5j YXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKLSsJCXsKLSsJCXByaW50Zigi TWlzc2luZyBQTEFJTlRFWFRcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJ CXsKLSsJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNG QjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4dCk7Ci0rCQll bHNlCi0rCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKLSsJCWlmIChsZW4g PCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIsIGli dWYrMTIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlpZiAo bGVuID49IHNpemVvZihwbGFpbnRleHQpKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkJ1ZmZl ciBvdmVyZmxvd1xuIik7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwgKHVu c2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1Qi KSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBpZihkb19t Y3QoYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJICAgICAgZGlyLCAodW5zaWduZWQg Y2hhciopcGxhaW50ZXh0LCBsZW4sIAotKwkJCSAgICAgIHJmcCkgPCAwKQotKwkJCUVYSVQoMSk7 Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgs IGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0 LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJ CSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAotKwkJCQkh c3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkg ICAgYnJlYWs7Ci0rCi0rCWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KLSsJICAgIGZw dXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQg PSAiLCAxMykgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJy ID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEi KSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0 ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7 Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhF UlRFWFRcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCi0r CQlQcmludFZhbHVlKCJDSVBIRVJURVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJj bXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsK LSsJCSAgICBkb19tY3QoYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJICAgZGlyLCBj aXBoZXJ0ZXh0LCBsZW4sIHJmcCk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAg ICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkg IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwg Y2lwaGVydGV4dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWdu ZWQgY2hhciAqKXBsYWludGV4dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikp OwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2Ug NjoKLSsJICAgIGlmIChpYnVmWzBdICE9ICdcbicpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJp bnRmKCJNaXNzaW5nIHRlcm1pbmF0b3JcbiIpOwotKwkJfQotKwkgICAgZWxzZSBpZiAoc3RyY21w KGF0ZXN0LCAiTUNUIikgIT0gMCkKLSsJCXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRp bmcgbmwgKi8KLSsJCWZwdXRzKGlidWYsIHJmcCk7Ci0rCQl9Ci0rCSAgICBzdGVwID0gMTsKLSsJ ICAgIGJyZWFrOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChyZnApCi0rCWZjbG9zZShyZnApOwot KyAgICBpZiAoYWZwKQotKwlmY2xvc2UoYWZwKTsKLSsgICAgcmV0dXJuIGVycjsKLSsgICAgfQot KwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSsgIFByb2Nlc3NlcyBlaXRoZXIgYSBzaW5nbGUgZmlsZSBvciAKLSsgIGEgc2V0IG9mIGZpbGVz IHdob3NlIG5hbWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxlLgotKyAgQSBzaW5nbGUgZmlsZSBpcyBz cGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1mIHh4eC5yZXEKLSsgIEEgc2V0IG9mIGZpbGVz IGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVzX3Rlc3QgLWQgeHh4eHgueHh4Ci0rICBUaGUgZGVm YXVsdCBpczogLWQgcmVxLnR4dAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rICAg IHsKLSsgICAgY2hhciAqcnFsaXN0ID0gInJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7Ci0rICAg IEZJTEUgKmZwID0gTlVMTDsKLSsgICAgY2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7 Ci0rICAgIGludCBmX29wdCA9IDAsIGRfb3B0ID0gMTsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwot KwlFWElUKDEpOwotKwl9Ci0rI2VuZGlmCi0rICAgIGlmIChhcmdjID4gMSkKLSsJewotKwlpZiAo c3RyY2FzZWNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKQotKwkgICAgewotKwkgICAgZF9vcHQgPSAx OwotKwkgICAgfQotKwllbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCi0r CSAgICB7Ci0rCSAgICBmX29wdCA9IDE7Ci0rCSAgICBkX29wdCA9IDA7Ci0rCSAgICB9Ci0rCWVs c2UKLSsJICAgIHsKLSsJICAgIHByaW50ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2 WzFdKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwlpZiAoYXJnYyA8IDMpCi0rCSAgICB7 Ci0rCSAgICBwcmludGYoIk1pc3NpbmcgcGFyYW1ldGVyXG4iKTsKLSsJICAgIHJldHVybiAwOwot KwkgICAgfQotKwlpZiAoZF9vcHQpCi0rCSAgICBycWxpc3QgPSBhcmd2WzJdOwotKwllbHNlCi0r CSAgICB7Ci0rCSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0pOwotKwkgICAgcnNwZmlsZSA9IGFyZ3Zb M107Ci0rCSAgICB9Ci0rCX0KLSsgICAgaWYgKGRfb3B0KQotKwl7IC8qIGxpc3Qgb2YgZmlsZXMg KGRpcmVjdG9yeSkgKi8KLSsJaWYgKCEoZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQotKwkgICAg ewotKwkgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKLSsJICAgIHJl dHVybiAtMTsKLSsJICAgIH0KLSsJd2hpbGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCi0r CSAgICB7Ci0rCSAgICBzdHJ0b2soZm4sICJcclxuIik7Ci0rCSAgICBzdHJjcHkocmZuLCBmbik7 Ci0rCSAgICBpZiAoVkVSQk9TRSkKLSsJCXByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7 Ci0rCSAgICBpZiAocHJvY19maWxlKHJmbiwgcnNwZmlsZSkpCi0rCQl7Ci0rCQlwcmludGYoIj4+ PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgcmZuKTsKLSsJCUVYSVQoMSk7Ci0r CQl9Ci0rCSAgICB9Ci0rCWZjbG9zZShmcCk7Ci0rCX0KLSsgICAgZWxzZSAvKiBzaW5nbGUgZmls ZSAqLwotKwl7Ci0rCWlmIChWRVJCT1NFKQotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xu IiwgZm4pOwotKwlpZiAocHJvY19maWxlKGZuLCByc3BmaWxlKSkKLSsJICAgIHsKLSsJICAgIHBy aW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCBmbik7Ci0rCSAgICB9 Ci0rCX0KLSsgICAgRVhJVCgwKTsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYK LWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2NhdnMv Zmlwc19kZXNtb3ZzLmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3 NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19k ZXNtb3ZzLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEs NzAyIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAg ZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgot KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0r ICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0r ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgIE5JU1QgREVTIE1vZGVzIG9mIE9wZXJhdGlv biBWYWxpZGF0aW9uIFN5c3RlbQotKyAgVGVzdCBQcm9ncmFtCi0rCi0rICBCYXNlZCBvbiB0aGUg QUVTIFZhbGlkYXRpb24gU3VpdGUsIHdoaWNoIHdhczoKLSsgIERvbmF0ZWQgdG8gT3BlblNTTCBi eToKLSsgIFYtT05FIENvcnBvcmF0aW9uCi0rICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMw MAotKyAgR2VybWFudG93biwgTUQgMjA4NzQKLSsgIFUuUy5BLgotKyAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+ Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8 ZXJybm8uaD4KLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVk ZSAiZV9vcy5oIgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBERVMgc3VwcG9ydFxu Iik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rI2RlZmluZSBERVNfQkxPQ0tf U0laRSA4Ci0rCi0rI2RlZmluZSBWRVJCT1NFIDAKLSsKLStpbnQgREVTVGVzdChFVlBfQ0lQSEVS X0NUWCAqY3R4LAotKwkgICAgY2hhciAqYW1vZGUsIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIg KmFLZXksIAotKwkgICAgdW5zaWduZWQgY2hhciAqaVZlYywgCi0rCSAgICBpbnQgZGlyLCAgLyog MCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCSAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVu c2lnbmVkIGNoYXIgKmluLCBpbnQgbGVuKQotKyAgICB7Ci0rICAgIGNvbnN0IEVWUF9DSVBIRVIg KmNpcGhlciA9IE5VTEw7Ci0rCi0rICAgIGlmIChha2V5c3ogIT0gMTkyKQotKwl7Ci0rCXByaW50 ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlzeik7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsK LSsgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDQkMiKSA9PSAwKQotKwljaXBoZXIgPSBFVlBf ZGVzX2VkZTNfY2JjKCk7Ci0rICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9 PSAwKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfZWNiKCk7Ci0rICAgIGVsc2UgaWYgKHN0cmNh c2VjbXAoYW1vZGUsICJDRkI2NCIpID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI2 NCgpOwotKyAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChhbW9kZSwgIk9GQiIsIDMpID09IDApCi0r CWNpcGhlciA9IEVWUF9kZXNfZWRlM19vZmIoKTsKLSsgICAgZWxzZSBpZighc3RyY2FzZWNtcChh bW9kZSwiQ0ZCOCIpKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiOCgpOwotKyAgICBlbHNl IGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19j ZmIxKCk7Ci0rICAgIGVsc2UKLSsJewotKwlwcmludGYoIlVua25vd24gbW9kZTogJXNcbiIsIGFt b2RlKTsKLSsJRVhJVCgxKTsKLSsJfQotKwotKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4 LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlWZWMsIGRpcikgPD0gMCkKLSsJcmV0dXJuIDA7Ci0rICAg IGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCi0rCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2Zs YWdzKGN0eCwgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyk7Ci0rICAgIEVWUF9DaXBoZXIoY3R4 LCBvdXQsIGluLCBsZW4pOwotKwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotK3ZvaWQgRGVi dWdWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbikKLSsgICAgewot KyAgICBjaGFyIG9idWZbMjA0OF07Ci0rICAgIGludCBvbGVuOwotKyAgICBvbGVuID0gYmluMmhl eCh2YWwsIGxlbiwgb2J1Zik7Ci0rICAgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4s IG9idWYpOwotKyAgICB9Ci0rCi0rdm9pZCBzaGlmdGluKHVuc2lnbmVkIGNoYXIgKmRzdCx1bnNp Z25lZCBjaGFyICpzcmMsaW50IG5iaXRzKQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAgICAv KiBtb3ZlIHRoZSBieXRlcy4uLiAqLwotKyAgICBtZW1tb3ZlKGRzdCxkc3QrbmJpdHMvOCwzKjgt bmJpdHMvOCk7Ci0rICAgIC8qIGFwcGVuZCBuZXcgZGF0YSAqLwotKyAgICBtZW1jcHkoZHN0KzMq OC1uYml0cy84LHNyYywobmJpdHMrNykvOCk7Ci0rICAgIC8qIGxlZnQgc2hpZnQgdGhlIGJpdHMg Ki8KLSsgICAgaWYobmJpdHMlOCkKLSsJZm9yKG49MCA7IG4gPCAzKjggOyArK24pCi0rCSAgICBk c3Rbbl09KGRzdFtuXSA8PCAobmJpdHMlOCkpfChkc3RbbisxXSA+PiAoOC1uYml0cyU4KSk7Ci0r ICAgIH0JCi0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovCi0rY2hhciAqdF90YWdbMl0gPSB7IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07Ci0r Y2hhciAqdF9tb2RlWzZdID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjY0 In07Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBDRkI4LCBDRkI2NH07Ci0raW50 IFNpemVzWzZdPXs2NCw2NCw2NCwxLDgsNjR9OwotKwotK3ZvaWQgZG9fbWN0KGNoYXIgKmFtb2Rl LCAKLSsJICAgIGludCBha2V5c3osIGludCBudW1rZXlzLCB1bnNpZ25lZCBjaGFyICpha2V5LHVu c2lnbmVkIGNoYXIgKml2ZWMsCi0rCSAgICBpbnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBp bnQgbGVuLAotKwkgICAgRklMRSAqcmZwKQotKyAgICB7Ci0rICAgIGludCBpLGltb2RlOwotKyAg ICB1bnNpZ25lZCBjaGFyIG5rWzQqOF07IC8qIGxvbmdlc3Qga2V5KzggKi8KLSsgICAgdW5zaWdu ZWQgY2hhciB0ZXh0MFs4XTsKLSsKLSsgICAgZm9yIChpbW9kZT0wIDsgaW1vZGUgPCA2IDsgKytp bW9kZSkKLSsJaWYoIXN0cmNtcChhbW9kZSx0X21vZGVbaW1vZGVdKSkKLSsJICAgIGJyZWFrOwot KyAgICBpZiAoaW1vZGUgPT0gNikKLSsJeyAKLSsJcHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTog JXNcbiIsIGFtb2RlKTsKLSsJRVhJVCgxKTsKLSsJfQotKwotKyAgICBmb3IoaT0wIDsgaSA8IDQw MCA7ICsraSkKLSsJewotKwlpbnQgajsKLSsJaW50IG47Ci0rCWludCBrcD1ha2V5c3ovNjQ7Ci0r CXVuc2lnbmVkIGNoYXIgb2xkX2l2WzhdOwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9D SVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rCWZwcmludGYocmZwLCJcbkNPVU5UID0gJWRcbiIs aSk7Ci0rCWlmKGtwID09IDEpCi0rCSAgICBPdXRwdXRWYWx1ZSgiS0VZIixha2V5LDgscmZwLDAp OwotKwllbHNlCi0rCSAgICBmb3Iobj0wIDsgbiA8IGtwIDsgKytuKQotKwkJewotKwkJZnByaW50 ZihyZnAsIktFWSVkIixuKzEpOwotKwkJT3V0cHV0VmFsdWUoIiIsYWtleStuKjgsOCxyZnAsMCk7 Ci0rCQl9Ci0rCi0rCWlmKGltb2RlICE9IEVDQikKLSsJICAgIE91dHB1dFZhbHVlKCJJViIsaXZl Yyw4LHJmcCwwKTsKLSsJT3V0cHV0VmFsdWUodF90YWdbZGlyXjFdLHRleHQsbGVuLHJmcCxpbW9k ZSA9PSBDRkIxKTsKLSsjaWYgMAotKwkvKiBjb21wZW5zYXRlIGZvciBlbmRpYW5uZXNzICovCi0r CWlmKGltb2RlID09IENGQjEpCi0rCSAgICB0ZXh0WzBdPDw9NzsKLSsjZW5kaWYKLSsJbWVtY3B5 KHRleHQwLHRleHQsOCk7Ci0rCi0rCWZvcihqPTAgOyBqIDwgMTAwMDAgOyArK2opCi0rCSAgICB7 Ci0rCSAgICB1bnNpZ25lZCBjaGFyIG9sZF90ZXh0WzhdOwotKwotKwkgICAgbWVtY3B5KG9sZF90 ZXh0LHRleHQsOCk7Ci0rCSAgICBpZihqID09IDApCi0rCQl7Ci0rCQltZW1jcHkob2xkX2l2LGl2 ZWMsOCk7Ci0rCQlERVNUZXN0KCZjdHgsYW1vZGUsYWtleXN6LGFrZXksaXZlYyxkaXIsdGV4dCx0 ZXh0LGxlbik7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQltZW1jcHkob2xkX2l2LGN0eC5p diw4KTsKLSsJCUVWUF9DaXBoZXIoJmN0eCx0ZXh0LHRleHQsbGVuKTsKLSsJCX0KLSsJICAgIGlm KGogPT0gOTk5OSkKLSsJCXsKLSsJCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl0sdGV4dCxsZW4scmZw LGltb2RlID09IENGQjEpOwotKwkJLyoJCW1lbWNweShpdmVjLHRleHQsOCk7ICovCi0rCQl9Ci0r CSAgICAvKgkgICAgRGVidWdWYWx1ZSgiaXYiLGN0eC5pdiw4KTsgKi8KLSsJICAgIC8qIGFjY3Vt dWxhdGUgbWF0ZXJpYWwgZm9yIHRoZSBuZXh0IGtleSAqLwotKwkgICAgc2hpZnRpbihuayx0ZXh0 LFNpemVzW2ltb2RlXSk7Ci0rCSAgICAvKgkgICAgRGVidWdWYWx1ZSgibmsiLG5rLDI0KTsqLwot KwkgICAgaWYoKGRpciAmJiAoaW1vZGUgPT0gQ0ZCMSB8fCBpbW9kZSA9PSBDRkI4IHx8IGltb2Rl ID09IENGQjY0Ci0rCQkJfHwgaW1vZGUgPT0gQ0JDKSkgfHwgaW1vZGUgPT0gT0ZCKQotKwkJbWVt Y3B5KHRleHQsb2xkX2l2LDgpOwotKwotKwkgICAgaWYoIWRpciAmJiAoaW1vZGUgPT0gQ0ZCMSB8 fCBpbW9kZSA9PSBDRkI4IHx8IGltb2RlID09IENGQjY0KSkKLSsJCXsKLSsJCS8qIHRoZSB0ZXN0 IHNwZWNpZmllcyB1c2luZyB0aGUgb3V0cHV0IG9mIHRoZSByYXcgREVTIG9wZXJhdGlvbgotKwkJ ICAgd2hpY2ggd2UgZG9uJ3QgaGF2ZSwgc28gcmVjb25zdHJ1Y3QgaXQuLi4gKi8KLSsJCWZvcihu PTAgOyBuIDwgOCA7ICsrbikKLSsJCSAgICB0ZXh0W25dXj1vbGRfdGV4dFtuXTsKLSsJCX0KLSsJ ICAgIH0KLSsJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkgICAgYWtleVtuXV49bmtbMTYrbl07 Ci0rCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKLSsJICAgIGFrZXlbOCtuXV49bmtbOCtuXTsKLSsJ Zm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkgICAgYWtleVsxNituXV49bmtbbl07Ci0rCWlmKG51 bWtleXMgPCAzKQotKwkgICAgbWVtY3B5KCZha2V5WzIqOF0sYWtleSw4KTsKLSsJaWYobnVta2V5 cyA8IDIpCi0rCSAgICBtZW1jcHkoJmFrZXlbOF0sYWtleSw4KTsKLSsJREVTX3NldF9vZGRfcGFy aXR5KChERVNfY2Jsb2NrICopYWtleSk7Ci0rCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9j ayAqKShha2V5KzgpKTsKLSsJREVTX3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopKGFrZXkr MTYpKTsKLSsJbWVtY3B5KGl2ZWMsY3R4Lml2LDgpOwotKwotKwkvKiBwb2ludGxlc3MgZXhlcmNp c2UgLSB0aGUgZmluYWwgdGV4dCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUKLSsJICAgaW5pdGlhbCB0 ZXh0IGluIE9GQiBtb2RlLCBzbyB3aG8gY2FyZXMgd2hhdCBpdCBpcz8gKFdobwotKwkgICBkZXNp Z25lZCB0aGVzZSB0ZXN0cz8pICovCi0rCWlmKGltb2RlID09IE9GQikKLSsJICAgIGZvcihuPTAg OyBuIDwgOCA7ICsrbikKLSsJCXRleHRbbl09dGV4dDBbbl1eb2xkX2l2W25dOwotKwl9Ci0rICAg IH0KLSsgICAgCi0raW50IHByb2NfZmlsZShjaGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUpCi0r ICAgIHsKLSsgICAgY2hhciBhZm5bMjU2XSwgcmZuWzI1Nl07Ci0rICAgIEZJTEUgKmFmcCA9IE5V TEwsICpyZnAgPSBOVUxMOwotKyAgICBjaGFyIGlidWZbMjA0OF0sIHRidWZbMjA0OF07Ci0rICAg IGludCBpbGVuLCBsZW4sIHJldCA9IDA7Ci0rICAgIGNoYXIgYW1vZGVbOF0gPSAiIjsKLSsgICAg Y2hhciBhdGVzdFsxMDBdID0gIiI7Ci0rICAgIGludCBha2V5c3o9MDsKLSsgICAgdW5zaWduZWQg Y2hhciBpVmVjWzIwXSwgYUtleVs0MF07Ci0rICAgIGludCBkaXIgPSAtMSwgZXJyID0gMCwgc3Rl cCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzIwNDhdOwotKyAgICB1bnNpZ25l ZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07Ci0rICAgIGNoYXIgKnJwOwotKyAgICBFVlBfQ0lQSEVS X0NUWCBjdHg7Ci0rICAgIGludCBudW1rZXlzPTE7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQo JmN0eCk7Ci0rCi0rICAgIGlmICghcnFmaWxlIHx8ICEoKnJxZmlsZSkpCi0rCXsKLSsJcHJpbnRm KCJObyByZXEgZmlsZVxuIik7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBzdHJjcHkoYWZuLCBy cWZpbGUpOwotKwotKyAgICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwgInIiKSkgPT0gTlVMTCkKLSsJ ewotKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICBhZm4s IHN0cmVycm9yKGVycm5vKSk7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBpZiAoIXJzcGZpbGUp Ci0rCXsKLSsJc3RyY3B5KHJmbixhZm4pOwotKwlycD1zdHJzdHIocmZuLCJyZXEvIik7Ci0rI2lm ZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCWlmICghcnApCi0rCSAgICBycD1zdHJzdHIocmZuLCJy ZXFcXCIpOwotKyNlbmRpZgotKwlhc3NlcnQocnApOwotKwltZW1jcHkocnAsInJzcCIsMyk7Ci0r CXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsKLSsJbWVtY3B5KHJwLCAiLnJzcCIsIDQpOwotKwly c3BmaWxlID0gcmZuOwotKwl9Ci0rICAgIGlmICgocmZwID0gZm9wZW4ocnNwZmlsZSwgInciKSkg PT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCi0r CSAgICAgICByZm4sIHN0cmVycm9yKGVycm5vKSk7Ci0rCWZjbG9zZShhZnApOwotKwlhZnAgPSBO VUxMOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgd2hpbGUgKCFlcnIgJiYgKGZnZXRzKGlidWYs IHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVMTCkKLSsJewotKwl0aWR5X2xpbmUodGJ1ZiwgaWJ1 Zik7Ci0rCWlsZW4gPSBzdHJsZW4oaWJ1Zik7Ci0rCS8qCXByaW50Zigic3RlcD0lZCBpYnVmPSVz IixzdGVwLGlidWYpOyovCi0rCWlmKHN0ZXAgPT0gMyAmJiAhc3RyY21wKGFtb2RlLCJFQ0IiKSkK LSsJICAgIHsKLSsJICAgIG1lbXNldChpVmVjLCAwLCBzaXplb2YoaVZlYykpOwotKwkgICAgc3Rl cCA9IChkaXIpPyA0OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNCICovCi0rCSAgICB9Ci0rCXN3aXRj aCAoc3RlcCkKLSsJICAgIHsKLSsJY2FzZSAwOiAgLyogcmVhZCBwcmVhbWJsZSAqLwotKwkgICAg aWYgKGlidWZbMF0gPT0gJ1xuJykKLSsJCXsgLyogZW5kIG9mIHByZWFtYmxlICovCi0rCQlpZiAo KmFtb2RlID09ICdcMCcpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiTWlzc2luZyBNb2RlXG4i KTsKLSsJCSAgICBlcnIgPSAxOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAg ZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSAgICArKyBzdGVwOwotKwkJICAgIH0KLSsJCX0KLSsJICAg IGVsc2UgaWYgKGlidWZbMF0gIT0gJyMnKQotKwkJewotKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFt YmxlIGl0ZW06ICVzXG4iLCBpYnVmKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0r CQl7IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8KLSsJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7Ci0r CQlpbnQgbjsKLSsJCWlmKCphbW9kZSkKLSsJCSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUg JiBkYXRlICovCi0rCQkgICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOwotKwkJICAgIGZwcmludGYo cmZwLCAiIyAlcyIsIGN0aW1lKCZydGltKSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsK LSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgIGlmKCFzdHJuY21wKHBwLCJJTlZFUlNF ICIsOCkgfHwgIXN0cm5jbXAocHAsIkRFUyAiLDQpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAs IlRERVMgIiw1KQotKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJQRVJNVVRBVElPTiAiLDEyKQot KwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJTVUJTVElUVVRJT04gIiwxMykKLSsJCSAgICAgICB8 fCAhc3RybmNtcChwcCwiVkFSSUFCTEUgIiw5KSkKLSsJCQl7Ci0rCQkJLyogZ2V0IHRlc3QgdHlw ZSAqLwotKwkJCWlmKCFzdHJuY21wKHBwLCJERVMgIiw0KSkKLSsJCQkgICAgcHArPTQ7Ci0rCQkJ ZWxzZSBpZighc3RybmNtcChwcCwiVERFUyAiLDUpKQotKwkJCSAgICBwcCs9NTsKLSsJCQl4cCA9 IHN0cmNocihwcCwgJyAnKTsKLSsJCQluID0geHAtcHA7Ci0rCQkJc3RybmNweShhdGVzdCwgcHAs IG4pOwotKwkJCWF0ZXN0W25dID0gJ1wwJzsKLSsJCQkvKiBnZXQgbW9kZSAqLwotKwkJCXhwID0g c3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1vZGUiICovCi0rCQkJbiA9IHN0cmxlbih4cCsxKS0x OwotKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEsIG4pOwotKwkJCWFtb2RlW25dID0gJ1wwJzsKLSsJ CQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCi0rCQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50Zigi VGVzdD0lcywgTW9kZT0lc1xuIixhdGVzdCxhbW9kZSk7Ci0rCQkJfQotKwkJICAgIH0KLSsJCX0K LSsJICAgIGJyZWFrOwotKwotKwljYXNlIDE6ICAvKiBbRU5DUllQVF0gfCBbREVDUllQVF0gKi8K LSsJICAgIGlmKGlidWZbMF0gPT0gJ1xuJykKLSsJCWJyZWFrOwotKwkgICAgaWYgKGlidWZbMF0g PT0gJ1snKQotKwkJewotKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSsrc3RlcDsKLSsJCWlmIChz dHJuY2FzZWNtcChpYnVmLCAiW0VOQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAxOwot KwkJZWxzZSBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltERUNSWVBUXSIsIDkpID09IDApCi0rCQkg ICAgZGlyID0gMDsKLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIGtl eXdvcmQ6ICVzXG4iLCBpYnVmKTsKLSsJCSAgICBlcnIgPSAxOwotKwkJICAgIH0KLSsJCWJyZWFr OwotKwkJfQotKwkgICAgZWxzZSBpZiAoZGlyID09IC0xKQotKwkJewotKwkJZXJyID0gMTsKLSsJ CXByaW50ZigiTWlzc2luZyBFTkNSWVBUL0RFQ1JZUFQga2V5d29yZFxuIik7Ci0rCQlicmVhazsK LSsJCX0KLSsJICAgIGVsc2UgCi0rCQlzdGVwID0gMjsKLSsKLSsJY2FzZSAyOiAvKiBLRVkgPSB4 eHh4ICovCi0rCSAgICBpZigqaWJ1ZiA9PSAnXG4nKQotKwkJewotKwkgICAgICAgIGZwdXRzKGli dWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAgICAgICAgICAgICAgfQotKwkgICAgaWYoIXN0cm5j YXNlY21wKGlidWYsIkNPVU5UID0gIiw4KSkKLSsJCXsKLSsJICAgICAgICBmcHV0cyhpYnVmLCBy ZnApOwotKwkJYnJlYWs7Ci0rICAgICAgICAgICAgICAgIH0KLSsJICAgIGlmKCFzdHJuY2FzZWNt cChpYnVmLCJDT1VOVD0iLDYpKQotKwkJewotKwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0r CQlicmVhazsKLSsgICAgICAgICAgICAgICAgfQotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYs Ik51bUtleXMgPSAiLDEwKSkKLSsJCXsKLSsJCW51bWtleXM9YXRvaShpYnVmKzEwKTsKLSsJCWJy ZWFrOwotKwkJfQotKwkgIAotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmKCFzdHJu Y2FzZWNtcChpYnVmLCJLRVkgPSAiLDYpKQotKwkJewotKwkJYWtleXN6PTY0OwotKwkJbGVuID0g aGV4MmJpbigoY2hhciopaWJ1Zis2LCBhS2V5KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsK LSsJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKLSsJCSAgICBlcnI9MTsKLSsJCSAgICBi cmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJLRVkiLCBhS2V5LCBsZW4pOwotKwkJKytz dGVwOwotKwkJfQotKwkgICAgZWxzZSBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZcyA9ICIsNykp Ci0rCQl7Ci0rCQlha2V5c3o9NjQqMzsKLSsJCWxlbj1oZXgyYmluKGlidWYrNyxhS2V5KTsKLSsJ CWlmKGxlbiAhPSA4KQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsK LSsJCSAgICBlcnI9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQltZW1jcHkoYUtleSs4 LGFLZXksOCk7Ci0rCQltZW1jcHkoYUtleSsxNixhS2V5LDgpOwotKwkJaWJ1Zls0XT0nXDAnOwot KwkJUHJpbnRWYWx1ZSgiS0VZcyIsYUtleSxsZW4pOwotKwkJKytzdGVwOwotKwkJfQotKwkgICAg ZWxzZSBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZIiwzKSkKLSsJCXsKLSsJCWludCBuPWlidWZb M10tJzEnOwotKwotKwkJYWtleXN6PTY0KjM7Ci0rCQlsZW49aGV4MmJpbihpYnVmKzcsYUtleStu KjgpOwotKwkJaWYobGVuICE9IDgpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBL RVlcbiIpOwotKwkJICAgIGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCWlidWZb NF09J1wwJzsKLSsJCVByaW50VmFsdWUoaWJ1ZixhS2V5LGxlbik7Ci0rCQlpZihuID09IDIpCi0r CQkgICAgKytzdGVwOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5n IEtFWVxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMzog LyogSVYgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5j YXNlY21wKGlidWYsICJJViA9ICIsIDUpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3Npbmcg SVZcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWxlbiA9IGhl eDJiaW4oKGNoYXIqKWlidWYrNSwgaVZlYyk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0r CQkgICAgcHJpbnRmKCJJbnZhbGlkIElWXG4iKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJl YWs7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiSVYiLCBpVmVjLCBsZW4pOwotKwkJc3RlcCA9 IChkaXIpPyA0OiA1OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNDogLyogUExBSU5U RVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2Fz ZWNtcChpYnVmLCAiUExBSU5URVhUID0gIiwgMTIpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1p c3NpbmcgUExBSU5URVhUXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7 Ci0rCQlpbnQgbm4gPSBzdHJsZW4oaWJ1ZisxMik7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIx IikpCi0rCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTIsbm4tMSxwbGFpbnRleHQpOwotKwkJZWxz ZQotKwkJICAgIGxlbj1oZXgyYmluKGlidWYrMTIsIHBsYWludGV4dCk7Ci0rCQlpZiAobGVuIDwg MCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIFBMQUlOVEVYVDogJXMiLCBpYnVm KzEyKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJaWYgKGxl biA+PSBzaXplb2YocGxhaW50ZXh0KSkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJCdWZmZXIg b3ZlcmZsb3dcbiIpOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIlBMQUlOVEVYVCIsICh1bnNp Z25lZCBjaGFyKilwbGFpbnRleHQsIGxlbik7Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTW9udGUi KSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19tY3Qo YW1vZGUsYWtleXN6LG51bWtleXMsYUtleSxpVmVjLGRpcixwbGFpbnRleHQsbGVuLHJmcCk7Ci0r CQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBhc3NlcnQoZGlyID09IDEpOwotKwkJ ICAgIHJldCA9IERFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJ CSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgY2lwaGVydGV4 dCwgcGxhaW50ZXh0LCBsZW4pOwotKwkJICAgIE91dHB1dFZhbHVlKCJDSVBIRVJURVhUIixjaXBo ZXJ0ZXh0LGxlbixyZnAsCi0rCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAgfQot KwkJc3RlcCA9IDY7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA1OiAvKiBDSVBIRVJU RVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2Fz ZWNtcChpYnVmLCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJN aXNzaW5nIEtFWVxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJ aWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQotKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEzLHN0 cmxlbihpYnVmKzEzKS0xLGNpcGhlcnRleHQpOwotKwkJZWxzZQotKwkJICAgIGxlbiA9IGhleDJi aW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAg ICBwcmludGYoIkludmFsaWQgQ0lQSEVSVEVYVFxuIik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAg IGJyZWFrOwotKwkJICAgIH0KLSsJCQotKwkJUHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIsIGNpcGhl cnRleHQsIGxlbik7Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTW9udGUiKSA9PSAwKSAgLyogTW9u dGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19tY3QoYW1vZGUsIGFrZXlzeiwg bnVta2V5cywgYUtleSwgaVZlYywgCi0rCQkJICAgZGlyLCBjaXBoZXJ0ZXh0LCBsZW4sIHJmcCk7 Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBhc3NlcnQoZGlyID09IDApOwot KwkJICAgIHJldCA9IERFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0r CQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcGxhaW50 ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOwotKwkJICAgIE91dHB1dFZhbHVlKCJQTEFJTlRFWFQiLCh1 bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxlbixyZnAsCi0rCQkJCSFzdHJjbXAoYW1vZGUsIkNG QjEiKSk7Ci0rCQkgICAgfQotKwkJc3RlcCA9IDY7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJ Y2FzZSA2OgotKwkgICAgaWYgKGlidWZbMF0gIT0gJ1xuJykKLSsJCXsKLSsJCWVyciA9IDE7Ci0r CQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRvclxuIik7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChz dHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQotKwkJeyAvKiBNQ1QgYWxyZWFkeSBhZGRlZCB0ZXJt aW5hdGluZyBubCAqLwotKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCX0KLSsJICAgIHN0ZXAgPSAx OwotKwkgICAgYnJlYWs7Ci0rCSAgICB9Ci0rCX0KLSsgICAgaWYgKHJmcCkKLSsJZmNsb3NlKHJm cCk7Ci0rICAgIGlmIChhZnApCi0rCWZjbG9zZShhZnApOwotKyAgICByZXR1cm4gZXJyOwotKyAg ICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotKyAgUHJvY2Vzc2VzIGVpdGhlciBhIHNpbmdsZSBmaWxlIG9yIAotKyAgYSBzZXQgb2Yg ZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3NlZCBpbiBhIGZpbGUuCi0rICBBIHNpbmdsZSBmaWxl IGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVzX3Rlc3QgLWYgeHh4LnJlcQotKyAgQSBzZXQgb2Yg ZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAtZCB4eHh4eC54eHgKLSsgIFRo ZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK LSsgICAgewotKyAgICBjaGFyICpycWxpc3QgPSAicmVxLnR4dCIsICpyc3BmaWxlID0gTlVMTDsK LSsgICAgRklMRSAqZnAgPSBOVUxMOwotKyAgICBjaGFyIGZuWzI1MF0gPSAiIiwgcmZuWzI1Nl0g PSAiIjsKLSsgICAgaW50IGZfb3B0ID0gMCwgZF9vcHQgPSAxOwotKwotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3Jz KCk7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsjZW5kaWYKLSsgICAgaWYgKGFyZ2MgPiAxKQotKwl7Ci0r CWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZCIpID09IDApCi0rCSAgICB7Ci0rCSAgICBkX29w dCA9IDE7Ci0rCSAgICB9Ci0rCWVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1mIikgPT0g MCkKLSsJICAgIHsKLSsJICAgIGZfb3B0ID0gMTsKLSsJICAgIGRfb3B0ID0gMDsKLSsJICAgIH0K LSsJZWxzZQotKwkgICAgewotKwkgICAgcHJpbnRmKCJJbnZhbGlkIHBhcmFtZXRlcjogJXNcbiIs IGFyZ3ZbMV0pOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCWlmIChhcmdjIDwgMykKLSsJ ICAgIHsKLSsJICAgIHByaW50ZigiTWlzc2luZyBwYXJhbWV0ZXJcbiIpOwotKwkgICAgcmV0dXJu IDA7Ci0rCSAgICB9Ci0rCWlmIChkX29wdCkKLSsJICAgIHJxbGlzdCA9IGFyZ3ZbMl07Ci0rCWVs c2UKLSsJICAgIHsKLSsJICAgIHN0cmNweShmbiwgYXJndlsyXSk7Ci0rCSAgICByc3BmaWxlID0g YXJndlszXTsKLSsJICAgIH0KLSsJfQotKyAgICBpZiAoZF9vcHQpCi0rCXsgLyogbGlzdCBvZiBm aWxlcyAoZGlyZWN0b3J5KSAqLwotKwlpZiAoIShmcCA9IGZvcGVuKHJxbGlzdCwgInIiKSkpCi0r CSAgICB7Ci0rCSAgICBwcmludGYoIkNhbm5vdCBvcGVuIHJlcSBsaXN0IGZpbGVcbiIpOwotKwkg ICAgcmV0dXJuIC0xOwotKwkgICAgfQotKwl3aGlsZSAoZmdldHMoZm4sIHNpemVvZihmbiksIGZw KSkKLSsJICAgIHsKLSsJICAgIHN0cnRvayhmbiwgIlxyXG4iKTsKLSsJICAgIHN0cmNweShyZm4s IGZuKTsKLSsJICAgIHByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7Ci0rCSAgICBpZiAo cHJvY19maWxlKHJmbiwgcnNwZmlsZSkpCi0rCQl7Ci0rCQlwcmludGYoIj4+PiBQcm9jZXNzaW5n IGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgcmZuKTsKLSsJCUVYSVQoMSk7Ci0rCQl9Ci0rCSAgICB9 Ci0rCWZjbG9zZShmcCk7Ci0rCX0KLSsgICAgZWxzZSAvKiBzaW5nbGUgZmlsZSAqLwotKwl7Ci0r CWlmIChWRVJCT1NFKQotKwkJcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgZm4pOwotKwlpZiAo cHJvY19maWxlKGZuLCByc3BmaWxlKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiPj4+IFByb2Nl c3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCBmbik7Ci0rCSAgICB9Ci0rCX0KLSsgICAgRVhJ VCgwKTsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYv bnVsbCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jCi0t LS0gL2Rldi9udWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUyICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYwkyMDA5LTA5LTMw IDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw1MzcgQEAKLSsjaW5jbHVkZSA8 b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1 ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sKLSsg ICAgcHJpbnRmKCJObyBGSVBTIERTQSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30K LSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMg dm9pZCBwYm4oY29uc3QgY2hhciAqbmFtZSwgQklHTlVNICpibikKLSsJewotKwlpbnQgbGVuLCBp OwotKwl1bnNpZ25lZCBjaGFyICp0bXA7Ci0rCWxlbiA9IEJOX251bV9ieXRlcyhibik7Ci0rCXRt cCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCWlmICghdG1wKQotKwkJewotKwkJZnByaW50Zihz dGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0r CUJOX2JuMmJpbihibiwgdG1wKTsKLSsJcHJpbnRmKCIlcyA9ICIsIG5hbWUpOwotKwlmb3IgKGkg PSAwOyBpIDwgbGVuOyBpKyspCi0rCQlwcmludGYoIiUwMlgiLCB0bXBbaV0pOwotKwlmcHV0cygi XG4iLCBzdGRvdXQpOwotKwlPUEVOU1NMX2ZyZWUodG1wKTsKLSsJcmV0dXJuOwotKwl9Ci0rCi0r dm9pZCBwcmltZXMoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjQwXTsKLSsgICAgY2hhciBs YnVmWzEwMjQwXTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwotKyAgICB3aGlsZShm Z2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rk b3V0KTsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0r CQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJQcmltZSIpKQotKwkgICAgewotKwkg ICAgQklHTlVNICpwcDsKLSsKLSsJICAgIHBwPUJOX25ldygpOwotKwkgICAgZG9faGV4MmJuKCZw cCx2YWx1ZSk7Ci0rCSAgICBwcmludGYoInJlc3VsdD0gJWNcbiIsCi0rCQkgICBCTl9pc19wcmlt ZV9leChwcCwyMCxOVUxMLE5VTEwpID8gJ1AnIDogJ0YnKTsKLSsJICAgIH0JICAgIAotKwl9Ci0r ICAgIH0KLSsKLSt2b2lkIHBxZygpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAg IGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQg bm1vZD0wOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVM TCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkK LSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFz dHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIk4iKSkKLSsJICAgIHsKLSsJICAgIGludCBuPWF0b2kodmFsdWUp OwotKwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7Ci0rCi0rCSAgICB3aGls ZShuLS0pCi0rCQl7Ci0rCQl1bnNpZ25lZCBjaGFyIHNlZWRbMjBdOwotKwkJRFNBICpkc2E7Ci0r CQlpbnQgY291bnRlcjsKLSsJCXVuc2lnbmVkIGxvbmcgaDsKLSsJCWRzYSA9IEZJUFNfZHNhX25l dygpOwotKwotKwkJaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2Vl ZCwwLCZjb3VudGVyLCZoLE5VTEwpKQotKwkJCXsKLSsJCQlkb19wcmludF9lcnJvcnMoKTsKLSsJ CQlleGl0KDEpOwotKwkJCX0KLSsJCXBibigiUCIsZHNhLT5wKTsKLSsJCXBibigiUSIsZHNhLT5x KTsKLSsJCXBibigiRyIsZHNhLT5nKTsKLSsJCXB2KCJTZWVkIixzZWVkLDIwKTsKLSsJCXByaW50 ZigiYyA9ICVkXG4iLGNvdW50ZXIpOwotKwkJcHJpbnRmKCJIID0gJWx4XG4iLGgpOwotKwkJcHV0 YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIGZwdXRzKGJ1Zixz dGRvdXQpOwotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHBxZ3ZlcigpCi0rICAgIHsKLSsgICAgY2hh ciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOwotKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTDsKLSsg ICAgaW50IGNvdW50ZXIsIGNvdW50ZXIyOwotKyAgICB1bnNpZ25lZCBsb25nIGgsIGgyOwotKyAg ICBEU0EgKmRzYT1OVUxMOwotKyAgICBpbnQgbm1vZD0wOwotKyAgICB1bnNpZ25lZCBjaGFyIHNl ZWRbMTAyNF07Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBO VUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYp KQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJZnB1 dHMoYnVmLCBzdGRvdXQpOwotKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIG5t b2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCi0rCSAgICBw PWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCi0rCSAgICBx PWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICBn PWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTZWVkIikpCi0rCSAg ICB7Ci0rCSAgICBpbnQgc2xlbiA9IGhleDJiaW4odmFsdWUsIHNlZWQpOwotKwkgICAgaWYgKHNs ZW4gIT0gMjApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIlNlZWQgcGFyc2UgbGVuZ3RoIGVy cm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiYyIpKQotKwkgICAgY291bnRlciA9YXRvaShidWYrNCk7Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJIIikpCi0rCSAgICB7Ci0rCSAgICBoID0gYXRvaSh2YWx1ZSk7Ci0rCSAg ICBpZiAoIXAgfHwgIXEgfHwgIWcpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVy cm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7 Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDIw ICwmY291bnRlcjIsJmgyLE5VTEwpKQotKwkJCXsKLSsJCQlkb19wcmludF9lcnJvcnMoKTsKLSsJ CQlleGl0KDEpOwotKwkJCX0KLSsgICAgICAgICAgICBpZiAoQk5fY21wKGRzYS0+cCwgcCkgfHwg Qk5fY21wKGRzYS0+cSwgcSkgfHwgQk5fY21wKGRzYS0+ZywgZykKLSsJCXx8IChjb3VudGVyICE9 IGNvdW50ZXIyKSB8fCAoaCAhPSBoMikpCi0rCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsK LSsJICAgIGVsc2UKLSsJICAgIAlwcmludGYoIlJlc3VsdCA9IFBcbiIpOwotKwkgICAgQk5fZnJl ZShwKTsKLSsJICAgIEJOX2ZyZWUocSk7Ci0rCSAgICBCTl9mcmVlKGcpOwotKwkgICAgcCA9IE5V TEw7Ci0rCSAgICBxID0gTlVMTDsKLSsJICAgIGcgPSBOVUxMOwotKwkgICAgRklQU19kc2FfZnJl ZShkc2EpOwotKwkgICAgZHNhID0gTlVMTDsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0rLyog S2V5cGFpciB2ZXJpZmljYXRpb24gcm91dGluZS4gTkI6IHRoaXMgaXNuJ3QgcGFydCBvZiB0aGUg c3RhbmRhcmQgRklQUzE0MC0yCi0rICogYWxnb3JpdGhtIHRlc3RzLiBJdCBpcyBhbiBhZGRpdGlv bmFsIHRlc3QgdG8gcGVyZm9ybSBzYW5pdHkgY2hlY2tzIG9uIHRoZQotKyAqIG91dHB1dCBvZiB0 aGUgS2V5UGFpciB0ZXN0LgotKyAqLwotKwotK3N0YXRpYyBpbnQgZHNzX3BhcmFtY2hlY2soaW50 IG5tb2QsIEJJR05VTSAqcCwgQklHTlVNICpxLCBCSUdOVU0gKmcsCi0rCQkJCQkJCUJOX0NUWCAq Y3R4KQotKyAgICB7Ci0rICAgIEJJR05VTSAqcmVtID0gTlVMTDsKLSsgICAgaWYgKEJOX251bV9i aXRzKHApICE9IG5tb2QpCi0rCXJldHVybiAwOwotKyAgICBpZiAoQk5fbnVtX2JpdHMocSkgIT0g MTYwKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKEJOX2lzX3ByaW1lX2V4KHAsIEJOX3ByaW1lX2No ZWNrcywgY3R4LCBOVUxMKSAhPSAxKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKEJOX2lzX3ByaW1l X2V4KHEsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSAhPSAxKQotKwlyZXR1cm4gMDsKLSsg ICAgcmVtID0gQk5fbmV3KCk7Ci0rICAgIGlmICghQk5fbW9kKHJlbSwgcCwgcSwgY3R4KSB8fCAh Qk5faXNfb25lKHJlbSkKLSsgICAgCXx8IChCTl9jbXAoZywgQk5fdmFsdWVfb25lKCkpIDw9IDAp Ci0rCXx8ICFCTl9tb2RfZXhwKHJlbSwgZywgcSwgcCwgY3R4KSB8fCAhQk5faXNfb25lKHJlbSkp Ci0rCXsKLSsJQk5fZnJlZShyZW0pOwotKwlyZXR1cm4gMDsKLSsJfQotKyAgICAvKiBUb2RvOiBj aGVjayBnICovCi0rICAgIEJOX2ZyZWUocmVtKTsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsK LSt2b2lkIGtleXZlcigpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIg bGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBCSUdOVU0gKnAg PSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTCwgKlggPSBOVUxMLCAqWSA9IE5VTEw7Ci0rICAg IEJJR05VTSAqWTI7Ci0rICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLSsgICAgaW50IG5tb2Q9MCwg cGFyYW1jaGVjayA9IDA7Ci0rCi0rICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKLSsgICAgWTIgPSBC Tl9uZXcoKTsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5V TEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1Zikp Ci0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZigh c3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIHsKLSsJICAgIGlmIChwKQotKwkJQk5fZnJl ZShwKTsKLSsJICAgIHAgPSBOVUxMOwotKwkgICAgaWYgKHEpCi0rCQlCTl9mcmVlKHEpOwotKwkg ICAgcSA9IE5VTEw7Ci0rCSAgICBpZiAoZykKLSsJCUJOX2ZyZWUoZyk7Ci0rCSAgICBnID0gTlVM TDsKLSsJICAgIHBhcmFtY2hlY2sgPSAwOwotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJICAg IH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKLSsJICAgIHA9aGV4MmJuKHZhbHVl KTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKLSsJICAgIHE9aGV4MmJuKHZhbHVl KTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKLSsJICAgIGc9aGV4MmJuKHZhbHVl KTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlgiKSkKLSsJICAgIFg9aGV4MmJuKHZhbHVl KTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlkiKSkKLSsJICAgIHsKLSsJICAgIFk9aGV4 MmJuKHZhbHVlKTsKLSsJICAgIGlmICghcCB8fCAhcSB8fCAhZyB8fCAhWCB8fCAhWSkKLSsJCXsK LSsJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgRXJyb3JcbiIpOwotKwkJZXhpdCAoMSk7Ci0rCQl9 Ci0rCSAgICBwYm4oIlAiLHApOwotKwkgICAgcGJuKCJRIixxKTsKLSsJICAgIHBibigiRyIsZyk7 Ci0rCSAgICBwYm4oIlgiLFgpOwotKwkgICAgcGJuKCJZIixZKTsKLSsJICAgIGlmICghcGFyYW1j aGVjaykKLSsJCXsKLSsJCWlmIChkc3NfcGFyYW1jaGVjayhubW9kLCBwLCBxLCBnLCBjdHgpKQot KwkJCXBhcmFtY2hlY2sgPSAxOwotKwkJZWxzZQotKwkJCXBhcmFtY2hlY2sgPSAtMTsKLSsJCX0K LSsJICAgIGlmIChwYXJhbWNoZWNrICE9IDEpCi0rCSAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIp OwotKwkgICAgZWxzZQotKwkJewotKwkJaWYgKCFCTl9tb2RfZXhwKFkyLCBnLCBYLCBwLCBjdHgp IHx8IEJOX2NtcChZMiwgWSkpCi0rCSAgICAJCXByaW50ZigiUmVzdWx0ID0gRlxuIik7Ci0rCSAg ICAgICAgZWxzZQotKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IFBcbiIpOwotKwkJfQotKwkgICAg Qk5fZnJlZShYKTsKLSsJICAgIEJOX2ZyZWUoWSk7Ci0rCSAgICBYID0gTlVMTDsKLSsJICAgIFkg PSBOVUxMOwotKwkgICAgfQotKwl9Ci0rCWlmIChwKQotKwkgICAgQk5fZnJlZShwKTsKLSsJaWYg KHEpCi0rCSAgICBCTl9mcmVlKHEpOwotKwlpZiAoZykKLSsJICAgIEJOX2ZyZWUoZyk7Ci0rCWlm IChZMikKLSsJICAgIEJOX2ZyZWUoWTIpOwotKyAgICB9Ci0rCi0rdm9pZCBrZXlwYWlyKCkKLSsg ICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBj aGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGludCBubW9kPTA7Ci0rCi0rICAgIHdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91 dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0r CSAgICBubW9kPWF0b2kodmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTiIpKQot KwkgICAgewotKwkgICAgRFNBICpkc2E7Ci0rCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKLSsKLSsJ ICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwkgICAgZHNhID0gRklQU19kc2Ff bmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxO VUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQll eGl0KDEpOwotKwkJfQotKwkgICAgcGJuKCJQIixkc2EtPnApOwotKwkgICAgcGJuKCJRIixkc2Et PnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0r Ci0rCSAgICB3aGlsZShuLS0pCi0rCQl7Ci0rCQlpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkK LSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCi0r CQlwYm4oIlgiLGRzYS0+cHJpdl9rZXkpOwotKwkJcGJuKCJZIixkc2EtPnB1Yl9rZXkpOwotKwkJ cHV0YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQg c2lnZ2VuKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEw MjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGludCBubW9kPTA7Ci0rICAg IERTQSAqZHNhPU5VTEw7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGlu KSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVm LCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0K LSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICB7Ci0rCSAgICBubW9kPWF0b2ko dmFsdWUpOwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7Ci0rCSAgICBpZiAo ZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2EpOwotKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7 Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAs TlVMTCxOVUxMLE5VTEwpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlleGl0KDEp OwotKwkJfQotKwkgICAgcGJuKCJQIixkc2EtPnApOwotKwkgICAgcGJuKCJRIixkc2EtPnEpOwot KwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKLSsJICAgIHsKLSsJICAgIHVuc2ln bmVkIGNoYXIgbXNnWzEwMjRdOwotKwkgICAgdW5zaWduZWQgY2hhciBzYnVmWzYwXTsKLSsJICAg IHVuc2lnbmVkIGludCBzbGVuOwotKwkgICAgaW50IG47Ci0rCSAgICBFVlBfUEtFWSBwazsKLSsJ ICAgIEVWUF9NRF9DVFggbWN0eDsKLSsJICAgIERTQV9TSUcgKnNpZzsKLSsJICAgIEVWUF9NRF9D VFhfaW5pdCgmbWN0eCk7Ci0rCi0rCSAgICBuPWhleDJiaW4odmFsdWUsbXNnKTsKLSsJICAgIHB2 KCJNc2ciLG1zZyxuKTsKLSsKLSsJICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQotKwkJ ewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwkgICAgcGsudHlw ZSA9IEVWUF9QS0VZX0RTQTsKLSsJICAgIHBrLnBrZXkuZHNhID0gZHNhOwotKwkgICAgcGJuKCJZ Iixkc2EtPnB1Yl9rZXkpOwotKwotKwkgICAgRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNz MSgpLCBOVUxMKTsKLSsJICAgIEVWUF9TaWduVXBkYXRlKCZtY3R4LCBtc2csIG4pOwotKwkgICAg RVZQX1NpZ25GaW5hbCgmbWN0eCwgc2J1ZiwgJnNsZW4sICZwayk7Ci0rCi0rCSAgICBzaWcgPSBE U0FfU0lHX25ldygpOwotKwkgICAgRklQU19kc2Ffc2lnX2RlY29kZShzaWcsIHNidWYsIHNsZW4p OwotKwotKwkgICAgcGJuKCJSIixzaWctPnIpOwotKwkgICAgcGJuKCJTIixzaWctPnMpOwotKwkg ICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICBEU0FfU0lHX2ZyZWUoc2lnKTsKLSsJICAgIEVW UF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rCSAgICB9Ci0rCX0KLSsJaWYgKGRzYSkKLSsJCUZJ UFNfZHNhX2ZyZWUoZHNhKTsKLSsgICAgfQotKwotK3ZvaWQgc2lndmVyKCkKLSsgICAgewotKyAg ICBEU0EgKmRzYT1OVUxMOwotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEw MjRdOwotKyAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOwotKyAgICBpbnQgbm1vZD0wLCBuPTA7Ci0rICAgIERTQV9TSUcgc2csICpzaWcgPSAm c2c7Ci0rCi0rICAgIHNpZy0+ciA9IE5VTEw7Ci0rICAgIHNpZy0+cyA9IE5VTEw7Ci0rCi0rICAg IHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICgh cGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMo YnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJb bW9kIikpCi0rCSAgICB7Ci0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwkgICAgaWYoZHNhKQot KwkJRklQU19kc2FfZnJlZShkc2EpOwotKwkgICAgZHNhPUZJUFNfZHNhX25ldygpOwotKwkgICAg fQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQotKwkgICAgZHNhLT5wPWhleDJibih2 YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCi0rCSAgICBkc2EtPnE9aGV4 MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKLSsJICAgIHsKLSsJ ICAgIGRzYS0+Zz1oZXgyYm4odmFsdWUpOwotKwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5c biIsbm1vZCk7Ci0rCSAgICBwYm4oIlAiLGRzYS0+cCk7Ci0rCSAgICBwYm4oIlEiLGRzYS0+cSk7 Ci0rCSAgICBwYm4oIkciLGRzYS0+Zyk7Ci0rCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsJICAg IH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk1zZyIpKQotKwkgICAgewotKwkgICAgbj1o ZXgyYmluKHZhbHVlLG1zZyk7Ci0rCSAgICBwdigiTXNnIixtc2csbik7Ci0rCSAgICB9Ci0rCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCi0rCSAgICBkc2EtPnB1Yl9rZXk9aGV4MmJuKHZh bHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlIiKSkKLSsJICAgIHNpZy0+cj1oZXgy Ym4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUyIpKQotKwkgICAgewotKwkg ICAgRVZQX01EX0NUWCBtY3R4OwotKwkgICAgRVZQX1BLRVkgcGs7Ci0rCSAgICB1bnNpZ25lZCBj aGFyIHNpZ2J1Zls2MF07Ci0rCSAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsJICAgIGludCByOwot KwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9E U0E7Ci0rCSAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsJICAgIHNpZy0+cz1oZXgyYm4odmFsdWUp OwotKwkKLSsJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5KTsKLSsJICAgIHBibigiUiIsc2lnLT5y KTsKLSsJICAgIHBibigiUyIsc2lnLT5zKTsKLSsKLSsJICAgIHNsZW4gPSBGSVBTX2RzYV9zaWdf ZW5jb2RlKHNpZ2J1Ziwgc2lnKTsKLSsJICAgIEVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBf ZHNzMSgpLCBOVUxMKTsKLSsJICAgIEVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIG1zZywgbik7Ci0r CSAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWdidWYsIHNsZW4sICZwayk7Ci0rCSAg ICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKwkKLSsJICAgIHByaW50ZigiUmVzdWx0ID0g JWNcbiIsIHIgPT0gMSA/ICdQJyA6ICdGJyk7Ci0rCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsJ ICAgIH0KLSsJfQotKyAgICB9Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0r ICAgIHsKLSsgICAgaWYoYXJnYyAhPSAyKQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbcHJp bWV8cHFnfHBxZ3ZlcnxrZXlwYWlyfHNpZ2dlbnxzaWd2ZXJdXG4iLGFyZ3ZbMF0pOwotKwlleGl0 KDEpOwotKwl9Ci0rICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vy cm9ycygpOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFzdHJjbXAoYXJndlsxXSwicHJpbWUi KSkKLSsJcHJpbWVzKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWciKSkKLSsJ cHFnKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWd2ZXIiKSkKLSsJcHFndmVy KCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXlwYWlyIikpCi0rCWtleXBhaXIo KTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXZlciIpKQotKwlrZXl2ZXIoKTsK LSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNpZ2dlbiIpKQotKwlzaWdnZW4oKTsKLSsg ICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNpZ3ZlciIpKQotKwlzaWd2ZXIoKTsKLSsgICAg ZWxzZQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCJEb24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJn dlsxXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsj ZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBz L2NhdnMvZmlwc19ybmd2cy5jCi0tLS0gL2Rldi9udWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4 MDAxNzUyICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfcm5ndnMuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCAr MSwyMzAgQEAKLSsvKgotKyAqIENydWRlIHRlc3QgZHJpdmVyIGZvciBwcm9jZXNzaW5nIHRoZSBW U1QgYW5kIE1DVCB0ZXN0dmVjdG9yIGZpbGVzCi0rICogZ2VuZXJhdGVkIGJ5IHRoZSBDTVZQIFJO R1ZTIHByb2R1Y3QuCi0rICoKLSsgKiBOb3RlIHRoZSBpbnB1dCBmaWxlcyBhcmUgYXNzdW1lZCB0 byBoYXZlIGEgX3ZlcnlfIHNwZWNpZmljIGZvcm1hdAotKyAqIGFzIGRlc2NyaWJlZCBpbiB0aGUg TklTVCBkb2N1bWVudCAiVGhlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yCi0rICogVmFsaWRhdGlv biBTeXN0ZW0gKFJOR1ZTKSIsIE1heSAyNSwgMjAwNC4KLSsgKgotKyAqLwotKyNpbmNsdWRlIDxv cGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVk ZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rewotKyAg ICBwcmludGYoIk5vIEZJUFMgUk5HIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0r I2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Rz YS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19y YW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3Zv aWQgdnN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOwotKyAgICB1 bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOwot KyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBj aGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgbG9uZyBp LCBrZXlsZW47Ci0rCi0rICAgIGtleWxlbiA9IDA7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1Zixz aXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwlp Zighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAxNjsKLSsJ ZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAy NDsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykpCi0rCQlrZXls ZW4gPSAzMjsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1Zikp Ci0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKLSsJICAgIHsKLSsJ ICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0ga2V5bGVuKQotKwkJ ewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVjdGluZyAlbGRc biIsIGtleWxlbik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJEVCIpKQotKwkgICAgewotKwkgICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZpKTsK LSsJICAgIGlmIChpICE9IDE2KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIERU IGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJWIikpCi0rCSAgICB7Ci0rCSAgICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0r CSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBWIGxl bmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBpZiAoIWtleSB8fCAhZHQpCi0r CQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsKLSsJCXJldHVy bjsKLSsJCX0KLSsKLSsJICAgIEZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVuKTsKLSsJICAg IEZJUFNfcmFuZF9zZWVkKHYsMTYpOwotKwkgICAgRklQU19yYW5kX3NldF9kdChkdCk7Ci0rCSAg ICBpZiAoRklQU19yYW5kX2J5dGVzKHJldCwxNikgPD0gMCkKLSsJCXsKLSsJCWZwcmludGYoc3Rk ZXJyLCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKLSsJICAgICAgICByZXR1cm47Ci0r CSAgICAgICAgfQotKwotKwkgICAgcHYoIlIiLHJldCwxNik7Ci0rCSAgICBPUEVOU1NMX2ZyZWUo a2V5KTsKLSsJICAgIGtleSA9IE5VTEw7Ci0rCSAgICBPUEVOU1NMX2ZyZWUoZHQpOwotKwkgICAg ZHQgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKHYpOwotKwkgICAgdiA9IE5VTEw7Ci0rCSAg ICB9Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgbWN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBj aGFyICprZXkgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKLSsgICAgdW5z aWduZWQgY2hhciAqZHQgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07Ci0rICAg IGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdv cmQsICp2YWx1ZTsKLSsgICAgbG9uZyBpLCBrZXlsZW47Ci0rICAgIGludCBqOwotKwotKyAgICBr ZXlsZW4gPSAwOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0g TlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJaWYoIXN0cm5jbXAoYnVmLCJbQUVT IDEyOC1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMTY7Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVm LCJbQUVTIDE5Mi1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMjQ7Ci0rCWVsc2UgaWYoIXN0cm5j bXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMzI7Ci0rCWlmICghcGFy c2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJY29udGludWU7Ci0rCWlm KCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCSAgICB7Ci0rCSAgICBrZXk9aGV4MmJpbl9tKHZh bHVlLCZpKTsKLSsJICAgIGlmIChpICE9IGtleWxlbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJy LCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOwotKwkJcmV0 dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKLSsJ ICAgIHsKLSsJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAxNikK LSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOwotKwkJcmV0 dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQotKwkg ICAgewotKwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0r CQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOwotKwkJcmV0dXJu OwotKwkJfQotKwotKwkgICAgaWYgKCFrZXkgfHwgIWR0KQotKwkJewotKwkJZnByaW50ZihzdGRl cnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBG SVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7Ci0rCSAgICBGSVBTX3JhbmRfc2VlZCh2LDE2 KTsKLSsJICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQotKwkJewotKwkJICAgIEZJUFNf cmFuZF9zZXRfZHQoZHQpOwotKwkJICAgIGlmIChGSVBTX3JhbmRfYnl0ZXMocmV0LDE2KSA8PSAw KQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxu Iik7Ci0rCQkgICAgICAgIHJldHVybjsKLSsJCSAgICAgICAgfQotKwkJICAgIC8qIEluY3JlbWVu dCBEVCAqLwotKwkJICAgIGZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKLSsJCQl7Ci0rCQkJZHRb al0rKzsKLSsJCQlpZiAoZHRbal0pCi0rCQkJCWJyZWFrOwotKwkJCX0KLSsJCX0KLSsKLSsJICAg IHB2KCJSIixyZXQsMTYpOwotKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7Ci0rCSAgICBrZXkgPSBO VUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKLSsJICAgIGR0ID0gTlVMTDsKLSsJICAgIE9Q RU5TU0xfZnJlZSh2KTsKLSsJICAgIHYgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsK LStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAgewotKyAgICBpZihhcmdjICE9 IDIpCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsIiVzIFttY3R8dnN0XVxuIixhcmd2WzBdKTsKLSsJ ZXhpdCgxKTsKLSsJfQotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmlu dF9lcnJvcnMoKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBGSVBTX3JhbmRfcmVzZXQoKTsKLSsg ICAgaWYgKCFGSVBTX3JhbmRfdGVzdF9tb2RlKCkpCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsICJF cnJvciBzZXR0aW5nIFBSTkcgdGVzdCBtb2RlXG4iKTsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0r CWV4aXQoMSk7Ci0rCX0KLSsgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJtY3QiKSkKLSsJbWN0KCk7 Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJ2c3QiKSkKLSsJdnN0KCk7Ci0rICAgIGVs c2UKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3Zb MV0pOwotKwlleGl0KDEpOwotKwl9Ci0rCi0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rI2VuZGlm Ci1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfcnNhZ3Rlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0ODAw MTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X3JzYWd0ZXN0LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAg KzEsMzkwIEBACi0rLyogZmlwc19yc2FndGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVw aGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJv amVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1 LDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoK LSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVu IGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0 LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5 cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rCi0rI2lm bmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQot K3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDAp OwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK2ludCByc2Ff dGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKLStzdGF0aWMgaW50IHJzYV9wcmludGtleTEoRklM RSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpY cCwKLSsJCUJJR05VTSAqZSk7Ci0rc3RhdGljIGludCByc2FfcHJpbnRrZXkyKEZJTEUgKm91dCwg UlNBICpyc2EsCi0rCQlCSUdOVU0gKlhxMSwgQklHTlVNICpYcTIsIEJJR05VTSAqWHEpOwotKwot K2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxFICppbiA9IE5VTEws ICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0ID0gMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQo MSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwot KwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihh cmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVs c2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0r CQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsK LSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5k OwotKwkJfQotKwotKwlpZiAoIXJzYV90ZXN0KG91dCwgaW4pKQotKwkJewotKwkJZnByaW50Zihz dGRlcnIsICJGQVRBTCBSU0FHVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290 byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJl dCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkK LSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3Nl KG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFJTQV9URVNUX01B WExJTkVMRU4JMTAyNDAKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikKLSsJ ewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwg KnZhbHVlOwotKwlSU0EgKnJzYSA9IE5VTEw7Ci0rCUJJR05VTSAqWHAxID0gTlVMTCwgKlhwMiA9 IE5VTEwsICpYcCA9IE5VTEw7Ci0rCUJJR05VTSAqWHExID0gTlVMTCwgKlhxMiA9IE5VTEwsICpY cSA9IE5VTEw7Ci0rCUJJR05VTSAqZSA9IE5VTEw7Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51 bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxF Tik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsK LSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXdoaWxl IChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJbG51 bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVm OwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWdu ZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9vayBmb3IgPSBz aWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IG9y IHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8KLSsJCWlm ICghcCB8fCAqa2V5d29yZD09J1snKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91 dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCXEg PSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAwOwot KwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFs dWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFs dWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQlw ID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8 IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJaWYgKCFz dHJjbXAoa2V5d29yZCwgInhwMSIpKQotKwkJCXsKLSsJCQlpZiAoWHAxIHx8ICFkb19oZXgyYm4o JlhwMSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAieHAyIikpCi0rCQkJewotKwkJCWlmIChYcDIgfHwgIWRvX2hleDJi bigmWHAyLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJYcCIpKQotKwkJCXsKLSsJCQlpZiAoWHAgfHwgIWRvX2hleDJi bigmWHAsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgInhxMSIpKQotKwkJCXsKLSsJCQlpZiAoWHExIHx8ICFkb19oZXgy Ym4oJlhxMSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAieHEyIikpCi0rCQkJewotKwkJCWlmIChYcTIgfHwgIWRvX2hl eDJibigmWHEyLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJYcSIpKQotKwkJCXsKLSsJCQlpZiAoWHEgfHwgIWRvX2hl eDJibigmWHEsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKLSsJCQl7Ci0rCQkJaWYgKGUgfHwgIWRvX2hleDJi bigmZSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAicDEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgInAyIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJwIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJxMSIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTIi KSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInEiKSkKLSsJ CQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKLSsJCQljb250 aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImQiKSkKLSsJCQljb250aW51ZTsK LSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91 dCk7Ci0rCi0rCQlpZiAoZSAmJiBYcDEgJiYgWHAyICYmIFhwKQotKwkJCXsKLSsJCQlyc2EgPSBG SVBTX3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJzYSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlpZiAo IXJzYV9wcmludGtleTEob3V0LCByc2EsIFhwMSwgWHAyLCBYcCwgZSkpCi0rCQkJCWdvdG8gZXJy b3I7Ci0rCQkJQk5fZnJlZShYcDEpOwotKwkJCVhwMSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcDIp OwotKwkJCVhwMiA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcCk7Ci0rCQkJWHAgPSBOVUxMOwotKwkJ CUJOX2ZyZWUoZSk7Ci0rCQkJZSA9IE5VTEw7Ci0rCQkJfQotKwotKwkJaWYgKHJzYSAmJiBYcTEg JiYgWHEyICYmIFhxKQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludGtleTIob3V0LCByc2EsIFhx MSwgWHEyLCBYcSkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShYcTEpOwotKwkJCVhx MSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcTIpOwotKwkJCVhxMiA9IE5VTEw7Ci0rCQkJQk5fZnJl ZShYcSk7Ci0rCQkJWHEgPSBOVUxMOwotKwkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsJCQlyc2Eg PSBOVUxMOwotKwkJCX0KLSsJCX0KLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlm IChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQot KwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwotKwlpZiAoWHAxKQotKwkJQk5fZnJlZShYcDEp OwotKwlpZiAoWHAyKQotKwkJQk5fZnJlZShYcDIpOwotKwlpZiAoWHApCi0rCQlCTl9mcmVlKFhw KTsKLSsJaWYgKFhxMSkKLSsJCUJOX2ZyZWUoWHExKTsKLSsJaWYgKFhxMSkKLSsJCUJOX2ZyZWUo WHExKTsKLSsJaWYgKFhxMikKLSsJCUJOX2ZyZWUoWHEyKTsKLSsJaWYgKFhxKQotKwkJQk5fZnJl ZShYcSk7Ci0rCWlmIChlKQotKwkJQk5fZnJlZShlKTsKLSsJaWYgKHJzYSkKLSsJCUZJUFNfcnNh X2ZyZWUocnNhKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZw cmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBs bnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50 a2V5MShGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBC SUdOVU0gKlhwLAotKwkJQklHTlVNICplKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlCSUdOVU0g KnAxID0gTlVMTCwgKnAyID0gTlVMTDsKLSsJcDEgPSBCTl9uZXcoKTsKLSsJcDIgPSBCTl9uZXco KTsKLSsJaWYgKCFwMSB8fCAhcDIpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIVJTQV9YOTMx X2Rlcml2ZV9leChyc2EsIHAxLCBwMiwgTlVMTCwgTlVMTCwgWHAxLCBYcDIsIFhwLAotKwkJCQkJ CU5VTEwsIE5VTEwsIE5VTEwsIGUsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJZG9fYm5f cHJpbnRfbmFtZShvdXQsICJwMSIsIHAxKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMiIs IHAyKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwIiwgcnNhLT5wKTsKLSsKLSsJcmV0ID0g MTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChwMSkKLSsJCUJOX2ZyZWUocDEpOwotKwlpZiAocDIpCi0r CQlCTl9mcmVlKHAyKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNh X3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcTEsIEJJR05VTSAq WHEyLCBCSUdOVU0gKlhxKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlCSUdOVU0gKnExID0gTlVM TCwgKnEyID0gTlVMTDsKLSsJcTEgPSBCTl9uZXcoKTsKLSsJcTIgPSBCTl9uZXcoKTsKLSsJaWYg KCFxMSB8fCAhcTIpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9l eChyc2EsIE5VTEwsIE5VTEwsIHExLCBxMiwgTlVMTCwgTlVMTCwgTlVMTCwKLSsJCQkJCQlYcTEs IFhxMiwgWHEsIE5VTEwsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJZG9fYm5fcHJpbnRf bmFtZShvdXQsICJxMSIsIHExKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMiIsIHEyKTsK LSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxIiwgcnNhLT5xKTsKLSsJZG9fYm5fcHJpbnRfbmFt ZShvdXQsICJuIiwgcnNhLT5uKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJkIiwgcnNhLT5k KTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChxMSkKLSsJCUJOX2ZyZWUocTEp OwotKwlpZiAocTIpCi0rCQlCTl9mcmVlKHEyKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwot KyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1Njow Mi4xNDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2Nh dnMvZmlwc19yc2FzdGVzdC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1A QCAtMCwwICsxLDM3MCBAQAotKy8qIGZpcHNfcnNhc3Rlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkg RHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAot KyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAo YykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0r ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0r ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg KgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNv ZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxj dHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsKLSsj aWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p Ci0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4o MCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGlj IGludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRsZW4pOwotK3N0YXRp YyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdz dCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKTsKLSsK LStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxM LCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDEsIFNhbHRsZW4gPSAtMTsKLSsKLSsJaWYo IUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8g ZW5kOwotKwkJfQotKwotKwlpZiAoKGFyZ2MgPiAyKSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFy Z3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IGF0b2koYXJndlsyXSk7Ci0rCQlpZiAoU2FsdGxl biA8IDApCi0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBs ZW5ndGhcbiIpOwotKwkJCWdvdG8gZW5kOwotKwkJCX0KLSsJCWFyZ2MgLT0gMjsKLSsJCWFyZ3Yg Kz0gMjsKLSsJCX0KLSsJZWxzZSBpZiAoKGFyZ2MgPiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFy Z3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IC0yOwotKwkJYXJnYy0tOwotKwkJYXJndisrOwot KwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4g PSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRv dXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4p Ci0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVy cm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZw cmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJ CWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIXJzYV9zdGVzdChvdXQsIGluLCBTYWx0bGVuKSkK LSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBU1RFU1QgZmlsZSBwcm9jZXNzaW5n IGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwot KwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGlu ICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0g c3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0r I2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0raW50IHJzYV9zdGVzdChGSUxF ICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xp bmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwlSU0EgKnJzYSA9IE5V TEw7Ci0rCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKk1zZyA9 IE5VTEw7Ci0rCWxvbmcgTXNnbGVuID0gLTE7Ci0rCWludCBrZXlsZW4gPSAtMSwgY3VycmVudF9r ZXlsZW4gPSAtMTsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVi dWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9Q RU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwg IW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBS U0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGlu ZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRp bmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkK LSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJj aHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0ganVzdCBjb3B5ICovCi0rCQlpZiAo IXApCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8g ZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyog UmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hh cikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwot KwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVt b3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2 YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQkvKiBMb29rIGZvciBbbW9kID0gWFhYXSBm b3Iga2V5IGxlbmd0aCAqLwotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlttb2QiKSkKLSsJ CQl7Ci0rCQkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCQkJaWYgKCpwICE9ICdd JykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkqcCA9IDA7Ci0rCQkJa2V5bGVuID0gYXRv aSh2YWx1ZSk7Ci0rCQkJaWYgKGtleWxlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCi0rCQkJewotKwkJ CWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKLSsJ CQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hh MjI0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQotKwkJCQlkZ3N0 ID0gRVZQX3NoYTI1NigpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkK LSsJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAi U0hBNTEyIikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0r CQkJCWZwcmludGYoc3RkZXJyLAotKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0g XCIlc1wiXG4iLAotKwkJCQkJCQkJdmFsdWUpOwotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJ CQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCi0rCQkJewot KwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1 ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1 ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ fQotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQkvKiBJZiBrZXkgbGVuZ3RoIGhh cyBjaGFuZ2VkLCBnZW5lcmF0ZSBhbmQgb3V0cHV0IHB1YmxpYwotKwkJICoga2V5IGNvbXBvbmVu dHMgb2YgbmV3IFJTQSBwcml2YXRlIGtleS4KLSsJCSAqLwotKwotKwkJaWYgKGtleWxlbiAhPSBj dXJyZW50X2tleWxlbikKLSsJCQl7Ci0rCQkJQklHTlVNICpibl9lOwotKwkJCWlmIChyc2EpCi0r CQkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsJCQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsKLSsJCQlp ZiAoIXJzYSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlibl9lID0gQk5fbmV3KCk7Ci0rCQkJaWYg KCFibl9lIHx8ICFCTl9zZXRfd29yZChibl9lLCAweDEwMDEpKQotKwkJCQlnb3RvIGVycm9yOwot KwkJCWlmICghUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KHJzYSwga2V5bGVuLCBibl9lLCBOVUxM KSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlCTl9mcmVlKGJuX2UpOwotKwkJCWZwdXRzKCJuID0g Iiwgb3V0KTsKLSsJCQlkb19ibl9wcmludChvdXQsIHJzYS0+bik7Ci0rCQkJZnB1dHMoIlxuZSA9 ICIsIG91dCk7Ci0rCQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPmUpOwotKwkJCWZwdXRzKCJcbiIs IG91dCk7Ci0rCQkJY3VycmVudF9rZXlsZW4gPSBrZXlsZW47Ci0rCQkJfQotKwotKwkJaWYgKE1z ZyAmJiBkZ3N0KQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludHNpZyhvdXQsIHJzYSwgZGdzdCwg TXNnLCBNc2dsZW4sCi0rCQkJCQkJCQlTYWx0bGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlP UEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxMOwotKwkJCX0KLSsKLSsJCX0KLSsKLSsJ cmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJl ZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwot KwlpZiAocnNhKQotKwkJRklQU19yc2FfZnJlZShyc2EpOwotKwotKwlyZXR1cm4gcmV0OwotKwot KwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBw cm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0r Ci0rc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAqb3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQ X01EICpkZ3N0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwgaW50IFNhbHRs ZW4pCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiA9IE5VTEw7 Ci0rCWludCBpLCBzaWdsZW47Ci0rCS8qIEVWUF9QS0VZIHN0cnVjdHVyZSAqLwotKwlFVlBfUEtF WSBwazsKLSsJRVZQX01EX0NUWCBjdHg7Ci0rCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rCXBr LnBrZXkucnNhID0gcnNhOwotKwotKwlzaWdsZW4gPSBSU0Ffc2l6ZShyc2EpOwotKwlzaWdidWYg PSBPUEVOU1NMX21hbGxvYyhzaWdsZW4pOwotKwlpZiAoIXNpZ2J1ZikKLSsJCWdvdG8gZXJyb3I7 Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKFNhbHRsZW4gPj0gMCkKLSsJ CXsKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKLSsJCQlFVlBfTURfQ1RYX0ZMQUdf UEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7Ci0rCQl9Ci0rCWVsc2UgaWYgKFNhbHRsZW4gPT0g LTIpCi0rCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURf WDkzMSk7Ci0rCWlmICghRVZQX1NpZ25Jbml0X2V4KCZjdHgsIGRnc3QsIE5VTEwpKQotKwkJZ290 byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnblVwZGF0ZSgmY3R4LCBNc2csIE1zZ2xlbikpCi0rCQln b3RvIGVycm9yOwotKwlpZiAoIUVWUF9TaWduRmluYWwoJmN0eCwgc2lnYnVmLCAodW5zaWduZWQg aW50ICopJnNpZ2xlbiwgJnBrKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUVWUF9NRF9DVFhfY2xl YW51cCgmY3R4KTsKLSsKLSsJZnB1dHMoIlMgPSAiLCBvdXQpOwotKwotKwlmb3IgKGkgPSAwOyBp IDwgc2lnbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMlgiLCBzaWdidWZbaV0pOwotKwot KwlmcHV0cygiXG4iLCBvdXQpOwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsKLSsJcmV0 dXJuIHJldDsKLSsJfQotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAt YmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMKLS0tLSAvZGV2L251bGwJMjAw OS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAw MDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDM3NyBAQAotKy8qIGZpcHNfcnNhdnRlc3QuYyAqLwot Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot KyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6 Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5T U0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGlj IHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSku ICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5o PgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wveDUwOXYzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9yc2EuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIp OwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRs LmgiCi0rCi0raW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBzYWx0bGVuKTsK LStzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCi0rCQlCSUdOVU0gKm4sIEJJR05V TSAqZSwKLSsJCWNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9u ZyBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKTsK LSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBO VUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCWludCBTYWx0bGVuID0gLTE7 Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7 Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNh bHRsZW4iLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOwotKwkJ aWYgKFNhbHRsZW4gPCAwKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZh bGlkIHNhbHQgbGVuZ3RoXG4iKTsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQlhcmdjIC09IDI7 Ci0rCQlhcmd2ICs9IDI7Ci0rCQl9Ci0rCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgi LXg5MzEiLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSAtMjsKLSsJCWFyZ2MtLTsKLSsJ CWFyZ3YrKzsKLSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVs c2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJ b3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwot KwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFs aXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0r CQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJv clxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFyc2FfdGVzdChvdXQsIGluLCBT YWx0bGVuKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBVlRFU1QgZmlsZSBw cm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQg PSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsK LSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYm IChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwot Kwl9Ci0rCi0rI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0raW50IHJzYV90 ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQotKwl7Ci0rCWNoYXIgKmxpbmVi dWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCWNvbnN0 IEVWUF9NRCAqZGdzdCA9IE5VTEw7Ci0rCUJJR05VTSAqbiA9IE5VTEwsICplID0gTlVMTDsKLSsJ dW5zaWduZWQgY2hhciAqTXNnID0gTlVMTCwgKlMgPSBOVUxMOwotKwlsb25nIE1zZ2xlbiwgU2xl bjsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVO U1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFs bG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVm KQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9N QVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xp bmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2Ug Ki8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3 b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1 ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBi YXJdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCi0rCQkJ ewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0r CQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRy YWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0r CQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyog UmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWls aW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAx OwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkp Ci0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQotKwkJCXsK LSsJCQlpZiAoIWRvX2hleDJibigmbix2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQotKwkJCXsKLSsJCQlpZiAo IWRvX2hleDJibigmZSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCi0rCQkJewotKwkJCWlmICghc3Ry Y21wKHZhbHVlLCAiU0hBMSIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKLSsJCQllbHNlIGlm ICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7Ci0r CQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQotKwkJCQlkZ3N0ID0gRVZQX3No YTI1NigpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKLSsJCQkJZGdz dCA9IEVWUF9zaGEzODQoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikp Ci0rCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmlu dGYoc3RkZXJyLAotKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4i LAotKwkJCQkJCQkJdmFsdWUpOwotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJ fQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChN c2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQot KwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xl bik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUyIpKQotKwkJCXsKLSsJCQlpZiAoUykKLSsJCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12YWx1 ZSkgPSAnMCc7Ci0rCQkJUyA9IGhleDJiaW5fbSh2YWx1ZSwgJlNsZW4pOwotKwkJCWlmICghUykK LSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJSZXN1bHQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vy cm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAobiAmJiBlICYmIE1z ZyAmJiBTICYmIGRnc3QpCi0rCQkJewotKwkJCWlmICghcnNhX3ByaW50dmVyKG91dCwgbiwgZSwg ZGdzdCwKLSsJCQkJCU1zZywgTXNnbGVuLCBTLCBTbGVuLCBTYWx0bGVuKSkKLSsJCQkJZ290byBl cnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxMOwotKwkJCU9QRU5T U0xfZnJlZShTKTsKLSsJCQlTID0gTlVMTDsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCi0rCXJldCA9 IDE7Ci0rCi0rCi0rCWVycm9yOgotKwotKwlpZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUo b2xpbmVidWYpOwotKwlpZiAobGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsJ aWYgKG4pCi0rCQlCTl9mcmVlKG4pOwotKwlpZiAoZSkKLSsJCUJOX2ZyZWUoZSk7Ci0rCi0rCXJl dHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJy b3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCi0rCQlC SUdOVU0gKm4sIEJJR05VTSAqZSwKLSsJCWNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVk IGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4s IGludCBTYWx0bGVuKQotKwl7Ci0rCWludCByZXQgPSAwLCByOwotKwkvKiBTZXR1cCBSU0EgYW5k IEVWUF9QS0VZIHN0cnVjdHVyZXMgKi8KLSsJUlNBICpyc2FfcHVia2V5ID0gTlVMTDsKLSsJRVZQ X1BLRVkgcGs7Ci0rCUVWUF9NRF9DVFggY3R4OwotKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxM OwotKwlyc2FfcHVia2V5ID0gRklQU19yc2FfbmV3KCk7Ci0rCWlmICghcnNhX3B1YmtleSkKLSsJ CWdvdG8gZXJyb3I7Ci0rCXJzYV9wdWJrZXktPm4gPSBCTl9kdXAobik7Ci0rCXJzYV9wdWJrZXkt PmUgPSBCTl9kdXAoZSk7Ci0rCWlmICghcnNhX3B1YmtleS0+biB8fCAhcnNhX3B1YmtleS0+ZSkK LSsJCWdvdG8gZXJyb3I7Ci0rCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rCXBrLnBrZXkucnNh ID0gcnNhX3B1YmtleTsKLSsKLSsJRVZQX01EX0NUWF9pbml0KCZjdHgpOwotKwotKwlpZiAoU2Fs dGxlbiA+PSAwKQotKwkJewotKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LAotKwkJCUVW UF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKLSsJCX0KLSsJZWxzZSBp ZiAoU2FsdGxlbiA9PSAtMikKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01E X0NUWF9GTEFHX1BBRF9YOTMxKTsKLSsJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmY3R4LCBkZ3N0 LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmY3R4LCBN c2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwotKwlyID0gRVZQX1ZlcmlmeUZpbmFsKCZj dHgsIFMsIFNsZW4sICZwayk7Ci0rCi0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsK LSsJaWYgKHIgPCAwKQotKwkJZ290byBlcnJvcjsKLSsJRVJSX2NsZWFyX2Vycm9yKCk7Ci0rCi0r CWlmIChyID09IDApCi0rCQlmcHV0cygiUmVzdWx0ID0gRlxuIiwgb3V0KTsKLSsJZWxzZQotKwkJ ZnB1dHMoIlJlc3VsdCA9IFBcbiIsIG91dCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgot KwlpZiAocnNhX3B1YmtleSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNhX3B1YmtleSk7Ci0rCWlmIChi dWYpCi0rCQlPUEVOU1NMX2ZyZWUoYnVmKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRp ZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3NoYXRlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0ODAw MTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X3NoYXRlc3QuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCAr MSwzODggQEAKLSsvKiBmaXBzX3NoYXRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhl biBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2pl Y3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK LSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0r ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRo aXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJp YyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4K LSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgotKwotKyNpZm5kZWYg T1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0r ICAgIHByaW50ZigiTm8gRklQUyBTSEFYWFggc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsK LSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgaW50 IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKLStzdGF0aWMgaW50IHByaW50X2Rnc3Qo Y29uc3QgRVZQX01EICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQg TXNnbGVuKTsKLStzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUg Km91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKTsKLSsKLStpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0g TlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJ ewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKGFy Z2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwg InIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlv dXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3Rv IGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZB VEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0K LSsKLSsJaWYgKCFkZ3N0X3Rlc3Qob3V0LCBpbikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwg IkZBVEFMIGRpZ2VzdCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0r CQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRv X3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9z ZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0r Ci0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFNIQV9URVNUX01BWF9CSVRTCTEw MjQwMAotKyNkZWZpbmUgU0hBX1RFU1RfTUFYTElORUxFTgkoKChTSEFfVEVTVF9NQVhfQklUUyA+ PiAzKSAqIDIpICsgMTAwKQotKwotK2ludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikK LSsJewotKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5l YnVmLCAqcCwgKnE7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJdW5zaWduZWQgY2hhciAq TXNnID0gTlVMTCwgKlNlZWQgPSBOVUxMOwotKwlsb25nIE1zZ0xlbiA9IC0xLCBMZW4gPSAtMSwg U2VlZExlbiA9IC0xOwotKwlpbnQgcmV0ID0gMDsKLSsJaW50IGxudW0gPSAwOwotKwotKwlvbGlu ZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0g T1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8 fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwotKwl3aGlsZSAoZmdldHMob2xpbmVi dWYsIFNIQV9URVNUX01BWExJTkVMRU4sIGluKSkKLSsJCXsKLSsJCWxudW0rKzsKLSsJCXN0cmNw eShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAg bGVhZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdv cmQpKQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwkJcCA9 IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBb IChmb3IgW0w9MjBdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYgKCFwKQotKwkJCXsKLSsJCQlm cHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlxID0gcCAt IDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsKLSsJCSpwID0gMDsKLSsJCXZh bHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICov Ci0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJCXZhbHVlKys7 Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJcCA9IHZh bHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsKLSsJCWlmICghc3RyY21wKGtl eXdvcmQsIltMIikgJiYgKnA9PSddJykKLSsJCQl7Ci0rCQkJc3dpdGNoIChhdG9pKHZhbHVlKSkK LSsJCQkJewotKwkJCQljYXNlIDIwOiBtZD1FVlBfc2hhMSgpOyAgIGJyZWFrOwotKwkJCQljYXNl IDI4OiBtZD1FVlBfc2hhMjI0KCk7IGJyZWFrOwotKwkJCQljYXNlIDMyOiBtZD1FVlBfc2hhMjU2 KCk7IGJyZWFrOwotKwkJCQljYXNlIDQ4OiBtZD1FVlBfc2hhMzg0KCk7IGJyZWFrOwotKwkJCQlj YXNlIDY0OiBtZD1FVlBfc2hhNTEyKCk7IGJyZWFrOwotKwkJCQlkZWZhdWx0OiBnb3RvIHBhcnNl X2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTGVu IikpCi0rCQkJewotKwkJCWlmIChMZW4gIT0gLTEpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJTGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKExlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJLyogT25seSBoYW5kbGUgbXVsdGlwbGVzIG9mIDggYml0cyAqLwotKwkJCWlm IChMZW4gJiAweDcpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKExlbiA+IFNIQV9U RVNUX01BWF9CSVRTKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCU1zZ0xlbiA9IExlbiA+ PiAzOwotKwkJCX0KLSsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQotKwkJ CXsKLSsJCQlsb25nIHRtcGxlbjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSoo LS12YWx1ZSkgPSAnMCc7Ci0rCQkJaWYgKE1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJ CQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZ0bXBsZW4pOwotKwkJCWlmICghTXNnKQotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNl ZWQiKSkKLSsJCQl7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUp ID0gJzAnOwotKwkJCWlmIChTZWVkKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCVNlZWQg PSBoZXgyYmluX20odmFsdWUsICZTZWVkTGVuKTsKLSsJCQlpZiAoIVNlZWQpCi0rCQkJCWdvdG8g cGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTUQiKSkK LSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1 dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAobWQgJiYgTXNnICYmIChNc2dMZW4gPj0gMCkp Ci0rCQkJewotKwkJCWlmICghcHJpbnRfZGdzdChtZCwgb3V0LCBNc2csIE1zZ0xlbikpCi0rCQkJ CWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJ CQlNc2dMZW4gPSAtMTsKLSsJCQlMZW4gPSAtMTsKLSsJCQl9Ci0rCQllbHNlIGlmIChtZCAmJiBT ZWVkICYmIChTZWVkTGVuID4gMCkpCi0rCQkJewotKwkJCWlmICghcHJpbnRfbW9udGUobWQsIG91 dCwgU2VlZCwgU2VlZExlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKFNl ZWQpOwotKwkJCVNlZWQgPSBOVUxMOwotKwkJCVNlZWRMZW4gPSAtMTsKLSsJCQl9Ci0rCQotKwot KwkJfQotKwotKwotKwlyZXQgPSAxOwotKwotKwotKwllcnJvcjoKLSsKLSsJaWYgKG9saW5lYnVm KQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxpbmVidWYpCi0rCQlPUEVOU1NM X2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChNc2cpCi0rCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJaWYg KFNlZWQpCi0rCQlPUEVOU1NMX2ZyZWUoU2VlZCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBh cnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nl c3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStz dGF0aWMgaW50IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICplbWQsIEZJTEUgKm91dCwKLSsJCXVu c2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbikKLSsJewotKwlpbnQgaSwgbWRsZW47Ci0rCXVu c2lnbmVkIGNoYXIgbWRbRVZQX01BWF9NRF9TSVpFXTsKLSsJaWYgKCFFVlBfRGlnZXN0KE1zZywg TXNnbGVuLCBtZCwgKHVuc2lnbmVkIGludCAqKSZtZGxlbiwgZW1kLCBOVUxMKSkKLSsJCXsKLSsJ CWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBIQVNIXG4iLCBzdGRlcnIpOwotKwkJcmV0dXJuIDA7 Ci0rCQl9Ci0rCWZwdXRzKCJNRCA9ICIsIG91dCk7Ci0rCWZvciAoaSA9IDA7IGkgPCBtZGxlbjsg aSsrKQotKwkJZnByaW50ZihvdXQsICIlMDJ4IiwgbWRbaV0pOwotKwlmcHV0cygiXG4iLCBvdXQp OwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQ X01EICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4p Ci0rCXsKLSsJdW5zaWduZWQgaW50IGksIGosIGs7Ci0rCWludCByZXQgPSAwOwotKwlFVlBfTURf Q1RYIGN0eDsKLSsJdW5zaWduZWQgY2hhciAqbTEsICptMiwgKm0zLCAqcDsKLSsJdW5zaWduZWQg aW50IG1sZW4sIG0xbGVuLCBtMmxlbiwgbTNsZW47Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4 KTsKLSsKLSsJaWYgKFNlZWRMZW4gPiBFVlBfTUFYX01EX1NJWkUpCi0rCQltbGVuID0gU2VlZExl bjsKLSsJZWxzZQotKwkJbWxlbiA9IEVWUF9NQVhfTURfU0laRTsKLSsKLSsJbTEgPSBPUEVOU1NM X21hbGxvYyhtbGVuKTsKLSsJbTIgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKLSsJbTMgPSBPUEVO U1NMX21hbGxvYyhtbGVuKTsKLSsKLSsJaWYgKCFtMSB8fCAhbTIgfHwgIW0zKQotKwkJZ290byBt Y19lcnJvcjsKLSsKLSsJbTFsZW4gPSBtMmxlbiA9IG0zbGVuID0gU2VlZExlbjsKLSsJbWVtY3B5 KG0xLCBTZWVkLCBTZWVkTGVuKTsKLSsJbWVtY3B5KG0yLCBTZWVkLCBTZWVkTGVuKTsKLSsJbWVt Y3B5KG0zLCBTZWVkLCBTZWVkTGVuKTsKLSsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsKLSsJZm9y IChqID0gMDsgaiA8IDEwMDsgaisrKQotKwkJewotKwkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkr KykKLSsJCQl7Ci0rCQkJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwgbWQsIE5VTEwpOwotKwkJCUVW UF9EaWdlc3RVcGRhdGUoJmN0eCwgbTEsIG0xbGVuKTsKLSsJCQlFVlBfRGlnZXN0VXBkYXRlKCZj dHgsIG0yLCBtMmxlbik7Ci0rCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMywgbTNsZW4pOwot KwkJCXAgPSBtMTsKLSsJCQltMSA9IG0yOwotKwkJCW0xbGVuID0gbTJsZW47Ci0rCQkJbTIgPSBt MzsKLSsJCQltMmxlbiA9IG0zbGVuOwotKwkJCW0zID0gcDsKLSsJCQlFVlBfRGlnZXN0RmluYWxf ZXgoJmN0eCwgbTMsICZtM2xlbik7Ci0rCQkJfQotKwkJZnByaW50ZihvdXQsICJDT1VOVCA9ICVk XG4iLCBqKTsKLSsJCWZwdXRzKCJNRCA9ICIsIG91dCk7Ci0rCQlmb3IgKGsgPSAwOyBrIDwgbTNs ZW47IGsrKykKLSsJCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtM1trXSk7Ci0rCQlmcHV0cygiXG5c biIsIG91dCk7Ci0rCQltZW1jcHkobTEsIG0zLCBtM2xlbik7Ci0rCQltZW1jcHkobTIsIG0zLCBt M2xlbik7Ci0rCQltMWxlbiA9IG0ybGVuID0gbTNsZW47Ci0rCQl9Ci0rCi0rCXJldCA9IDE7Ci0r Ci0rCW1jX2Vycm9yOgotKwlpZiAobTEpCi0rCQlPUEVOU1NMX2ZyZWUobTEpOwotKwlpZiAobTIp Ci0rCQlPUEVOU1NMX2ZyZWUobTIpOwotKwlpZiAobTMpCi0rCQlPUEVOU1NMX2ZyZWUobTMpOwot KwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsK LSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9m aXBzL2NhdnMvZmlwc191dGwuaAotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0 ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX3V0bC5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsx LDM0MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0r ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAg IGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK LSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgot KyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotK3ZvaWQgZG9fcHJpbnRfZXJy b3JzKHZvaWQpCi0rCXsKLSsJY29uc3QgY2hhciAqZmlsZSwgKmRhdGE7Ci0rCWludCBsaW5lLCBm bGFnczsKLSsJdW5zaWduZWQgbG9uZyBsOwotKwl3aGlsZSAoKGwgPSBFUlJfZ2V0X2Vycm9yX2xp bmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRhLCAmZmxhZ3MpKSkKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiRVJST1I6JWx4OmxpYj0lZCxmdW5jPSVkLHJlYXNvbj0lZCIKLSsJCQkJIjpmaWxl PSVzOmxpbmU9JWQ6JXNcbiIsCi0rCQkJbCwgRVJSX0dFVF9MSUIobCksIEVSUl9HRVRfRlVOQyhs KSwgRVJSX0dFVF9SRUFTT04obCksCi0rCQkJZmlsZSwgbGluZSwgZmxhZ3MgJiBFUlJfVFhUX1NU UklORyA/IGRhdGEgOiAiIik7Ci0rCQl9Ci0rCX0KLSsKLStpbnQgaGV4MmJpbihjb25zdCBjaGFy ICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuMSwgbjI7Ci0rICAg IHVuc2lnbmVkIGNoYXIgY2g7Ci0rCi0rICAgIGZvciAobjE9MCxuMj0wIDsgaW5bbjFdICYmIGlu W24xXSAhPSAnXG4nIDsgKQotKwl7IC8qIGZpcnN0IGJ5dGUgKi8KLSsJaWYgKChpbltuMV0gPj0g JzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJzAnOwotKwll bHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQotKwkgICAgY2ggPSBp bltuMSsrXSAtICdBJyArIDEwOwotKwllbHNlIGlmICgoaW5bbjFdID49ICdhJykgJiYgKGluW24x XSA8PSAnZicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEwOwotKwllbHNlCi0rCSAg ICByZXR1cm4gLTE7Ci0rCWlmKCFpbltuMV0pCi0rCSAgICB7Ci0rCSAgICBvdXRbbjIrK109Y2g7 Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJb3V0W24yXSA9IGNoIDw8IDQ7Ci0rCS8qIHNlY29u ZCBieXRlICovCi0rCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScpKQotKwkg ICAgY2ggPSBpbltuMSsrXSAtICcwJzsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnQScpICYmIChp bltuMV0gPD0gJ0YnKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKLSsJZWxzZSBp ZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKLSsJICAgIGNoID0gaW5bbjEr K10gLSAnYScgKyAxMDsKLSsJZWxzZQotKwkgICAgcmV0dXJuIC0xOwotKwlvdXRbbjIrK10gfD0g Y2g7Ci0rCX0KLSsgICAgcmV0dXJuIG4yOwotKyAgICB9Ci0rCi0rdW5zaWduZWQgY2hhciAqaGV4 MmJpbl9tKGNvbnN0IGNoYXIgKmluLCBsb25nICpwbGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIg KnA7Ci0rCXAgPSBPUEVOU1NMX21hbGxvYygoc3RybGVuKGluKSArIDEpLzIpOwotKwkqcGxlbiA9 IGhleDJiaW4oaW4sIHApOwotKwlyZXR1cm4gcDsKLSsJfQotKwotK2ludCBkb19oZXgyYm4oQklH TlVNICoqcHIsIGNvbnN0IGNoYXIgKmluKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgKnA7Ci0rCWxv bmcgcGxlbjsKLSsJaW50IHIgPSAwOwotKwlwID0gaGV4MmJpbl9tKGluLCAmcGxlbik7Ci0rCWlm ICghcCkKLSsJCXJldHVybiAwOwotKwlpZiAoISpwcikKLSsJCSpwciA9IEJOX25ldygpOwotKwlp ZiAoISpwcikKLSsJCXJldHVybiAwOwotKwlpZiAoQk5fYmluMmJuKHAsIHBsZW4sICpwcikpCi0r CQlyID0gMTsKLSsJT1BFTlNTTF9mcmVlKHApOwotKwlyZXR1cm4gcjsKLSsJfQotKwotK2ludCBk b19ibl9wcmludChGSUxFICpvdXQsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IGxlbiwgaTsKLSsJ dW5zaWduZWQgY2hhciAqdG1wOwotKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOwotKwlpZiAobGVu ID09IDApCi0rCQl7Ci0rCQlmcHV0cygiMDAiLCBvdXQpOwotKwkJcmV0dXJuIDE7Ci0rCQl9Ci0r Ci0rCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCWlmICghdG1wKQotKwkJewotKwkJZnBy aW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0rCQlyZXR1cm4gMDsK LSsJCX0KLSsJQk5fYm4yYmluKGJuLCB0bXApOwotKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKysp Ci0rCQlmcHJpbnRmKG91dCwgIiUwMngiLCB0bXBbaV0pOwotKwlPUEVOU1NMX2ZyZWUodG1wKTsK LSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZG9fYm5fcHJpbnRfbmFtZShGSUxFICpvdXQsIGNv bnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IHI7Ci0rCWZwcmludGYob3V0 LCAiJXMgPSAiLCBuYW1lKTsKLSsJciA9IGRvX2JuX3ByaW50KG91dCwgYm4pOwotKwlpZiAoIXIp Ci0rCQlyZXR1cm4gMDsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsK LStpbnQgcGFyc2VfbGluZShjaGFyICoqcGt3LCBjaGFyICoqcHZhbCwgY2hhciAqbGluZWJ1Ziwg Y2hhciAqb2xpbmVidWYpCi0rCXsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7Ci0r CXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCWtleXdvcmQgPSBsaW5lYnVmOwotKwkvKiBT a2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtl eXdvcmQpKQotKwkJa2V5d29yZCsrOwotKwotKwkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJcCA9 IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkvKiBJZiBubyAnPScgZXhpdCAqLwotKwlpZiAo IXApCi0rCQlyZXR1cm4gMDsKLSsKLSsJcSA9IHAgLSAxOwotKwotKwkvKiBSZW1vdmUgdHJhaWxp bmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJKnEt LSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsgMTsKLSsKLSsJLyogUmVtb3ZlIGxl YWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hh cikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZy b20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCXdoaWxl ICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJKnAtLSA9IDA7 Ci0rCi0rCSpwa3cgPSBrZXl3b3JkOwotKwkqcHZhbCA9IHZhbHVlOwotKwlyZXR1cm4gMTsKLSsJ fQotKwotK0JJR05VTSAqaGV4MmJuKGNvbnN0IGNoYXIgKmluKQotKyAgICB7Ci0rICAgIEJJR05V TSAqcD1OVUxMOwotKwotKyAgICBpZiAoIWRvX2hleDJibigmcCwgaW4pKQotKwlyZXR1cm4gTlVM TDsKLSsKLSsgICAgcmV0dXJuIHA7Ci0rICAgIH0KLSsKLStpbnQgYmluMmhleChjb25zdCB1bnNp Z25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKLSsgICAgewotKyAgICBpbnQgbjEsIG4y OwotKyAgICB1bnNpZ25lZCBjaGFyIGNoOwotKwotKyAgICBmb3IgKG4xPTAsbjI9MCA7IG4xIDwg bGVuIDsgKytuMSkKLSsJewotKwljaD1pbltuMV0gPj4gNDsKLSsJaWYgKGNoIDw9IDB4MDkpCi0r CSAgICBvdXRbbjIrK109Y2grJzAnOwotKwllbHNlCi0rCSAgICBvdXRbbjIrK109Y2gtMTArJ2En OwotKwljaD1pbltuMV0gJiAweDBmOwotKwlpZihjaCA8PSAweDA5KQotKwkgICAgb3V0W24yKytd PWNoKycwJzsKLSsJZWxzZQotKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsKLSsJfQotKyAgICBv dXRbbjJdPSdcMCc7Ci0rICAgIHJldHVybiBuMjsKLSsgICAgfQotKwotK3ZvaWQgcHYoY29uc3Qg Y2hhciAqdGFnLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCxpbnQgbGVuKQotKyAgICB7Ci0rICAg IGNoYXIgb2J1ZlsyMDQ4XTsKLSsKLSsgICAgYmluMmhleCh2YWwsbGVuLG9idWYpOwotKyAgICBw cmludGYoIiVzID0gJXNcbiIsdGFnLG9idWYpOwotKyAgICB9Ci0rCi0rLyogVG8gYXZvaWQgZXh0 ZW5zaXZlIGNoYW5nZXMgdG8gdGVzdCBwcm9ncmFtIGF0IHRoaXMgc3RhZ2UganVzdCBjb252ZXJ0 Ci0rICogdGhlIGlucHV0IGxpbmUgaW50byBhbiBhY2NlcHRhYmxlIGZvcm0uIEtleXdvcmQgbGlu ZXMgY29udmVydGVkIHRvIGZvcm0KLSsgKiAia2V5d29yZCA9IHZhbHVlXG4iIG5vIG1hdHRlciB3 aGF0IHdoaXRlIHNwYWNlIHByZXNlbnQsIGFsbCBvdGhlciBsaW5lcwotKyAqIGp1c3QgaGF2ZSBs ZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSByZW1vdmVkLgotKyAqLwotKwotK2ludCB0aWR5X2xp bmUoY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0rCXsKLSsJY2hhciAqa2V5d29yZCwg KnZhbHVlLCAqcCwgKnE7Ci0rCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCWtleXdvcmQg PSBsaW5lYnVmOwotKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJa2V5d29yZCsrOwotKwkvKiBMb29rIGZvciA9 IHNpZ24gKi8KLSsJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkvKiBJZiBubyAnPScg anVzdCBjaG9wIGxlYWRpbmcsIHRyYWlsaW5nIHdzICovCi0rCWlmICghcCkKLSsJCXsKLSsJCXAg PSBrZXl3b3JkICsgc3RybGVuKGtleXdvcmQpIC0gMTsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8 IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwkJc3RyY3B5KG9s aW5lYnVmLCBrZXl3b3JkKTsKLSsJCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7Ci0rCQlyZXR1cm4g MTsKLSsJCX0KLSsKLSsJcSA9IHAgLSAxOwotKwotKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2Ug Ki8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJKnEtLSA9IDA7Ci0r Ci0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsgMTsKLSsKLSsJLyogUmVtb3ZlIGxlYWRpbmcgc3Bh Y2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUp KQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUg Ki8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCXdoaWxlICgqcCA9PSAn XG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJKnAtLSA9IDA7Ci0rCi0rCXN0 cmNweShvbGluZWJ1Ziwga2V5d29yZCk7Ci0rCXN0cmNhdChvbGluZWJ1ZiwgIiA9ICIpOwotKwlz dHJjYXQob2xpbmVidWYsIHZhbHVlKTsKLSsJc3RyY2F0KG9saW5lYnVmLCAiXG4iKTsKLSsKLSsJ cmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBOQjogdGhpcyByZXR1cm4gdGhlIG51bWJlciBvZiBfYml0 c18gcmVhZCAqLwotK2ludCBiaW50MmJpbihjb25zdCBjaGFyICppbiwgaW50IGxlbiwgdW5zaWdu ZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAgICBtZW1zZXQob3V0LDAs bGVuKTsKLSsgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCi0rCWlmKGluW25dID09ICcxJykK LSsJICAgIG91dFtuLzhdfD0oMHg4MCA+PiAobiU4KSk7Ci0rICAgIHJldHVybiBsZW47Ci0rICAg IH0KLSsKLStpbnQgYmluMmJpbnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxlbixjaGFy ICpvdXQpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rCi0rICAgIGZvcihuPTAgOyBuIDwgbGVuIDsg KytuKQotKwlvdXRbbl09KGluW24vOF0mKDB4ODAgPj4gKG4lOCkpKSA/ICcxJyA6ICcwJzsKLSsg ICAgcmV0dXJuIG47Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSt2b2lkIFByaW50VmFsdWUoY2hhciAqdGFnLCB1bnNp Z25lZCBjaGFyICp2YWwsIGludCBsZW4pCi0rewotKyNpZiBWRVJCT1NFCi0rICBjaGFyIG9idWZb MjA0OF07Ci0rICBpbnQgb2xlbjsKLSsgIG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsK LSsgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwotKyNlbmRpZgotK30K LSsKLSt2b2lkIE91dHB1dFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQg bGVuLCBGSUxFICpyZnAsaW50IGJpdG1vZGUpCi0rICAgIHsKLSsgICAgY2hhciBvYnVmWzIwNDhd OwotKyAgICBpbnQgb2xlbjsKLSsKLSsgICAgaWYoYml0bW9kZSkKLSsJb2xlbj1iaW4yYmludCh2 YWwsbGVuLG9idWYpOwotKyAgICBlbHNlCi0rCW9sZW49YmluMmhleCh2YWwsbGVuLG9idWYpOwot KwotKyAgICBmcHJpbnRmKHJmcCwgIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsj aWYgVkVSQk9TRQotKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsK LSsjZW5kaWYKLSsgICAgfQotKwotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL2ZpcHNfZXJyLmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4x NDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzX2Vyci5j CTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDcgQEAKLSsj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsjIGluY2x1ZGUgImZpcHNfZXJyLmgiCi0rI2Vsc2UKLStzdGF0aWMgdm9pZCAqZHVtbXk9JmR1 bW15OwotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5 cHRvL2ZpcHNfZXJyLmgKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3 NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzX2Vyci5oCTIwMDkt MDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDEzNyBAQAotKy8qIGNy eXB0by9maXBzX2Vyci5oICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDE5 OTktMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQE9wZW5TU0wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlw dHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKy8qIE5PVEU6IHRoaXMgZmlsZSB3YXMgYXV0byBn ZW5lcmF0ZWQgYnkgdGhlIG1rZXJyLnBsIHNjcmlwdDogYW55IGNoYW5nZXMKLSsgKiBtYWRlIHRv IGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IG5leHQgdXBkYXRlcyB0aGlz IGZpbGUsCi0rICogb25seSByZWFzb24gc3RyaW5ncyB3aWxsIGJlIHByZXNlcnZlZC4KLSsgKi8K LSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KLSsjaWZu ZGVmIE9QRU5TU0xfTk9fRVJSCi0rCi0rI2RlZmluZSBFUlJfRlVOQyhmdW5jKSBFUlJfUEFDSyhF UlJfTElCX0ZJUFMsZnVuYywwKQotKyNkZWZpbmUgRVJSX1JFQVNPTihyZWFzb24pIEVSUl9QQUNL KEVSUl9MSUJfRklQUywwLHJlYXNvbikKLSsKLStzdGF0aWMgRVJSX1NUUklOR19EQVRBIEZJUFNf c3RyX2Z1bmN0c1tdPQotKwl7Ci0re0VSUl9GVU5DKEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFN UyksCSJESF9CVUlMVElOX0dFTlBBUkFNUyJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0JVSUxU SU5fUEFSQU1HRU4pLAkiRFNBX0JVSUxUSU5fUEFSQU1HRU4ifSwKLSt7RVJSX0ZVTkMoRklQU19G X0RTQV9ET19TSUdOKSwJIkRTQV9kb19zaWduIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9EU0FfRE9f VkVSSUZZKSwJIkRTQV9kb192ZXJpZnkifSwKLSt7RVJSX0ZVTkMoRklQU19GX0VWUF9DSVBIRVJJ TklUX0VYKSwJIkVWUF9DaXBoZXJJbml0X2V4In0sCi0re0VSUl9GVU5DKEZJUFNfRl9FVlBfRElH RVNUSU5JVF9FWCksCSJFVlBfRGlnZXN0SW5pdF9leCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQ U19DSEVDS19EU0EpLAkiRklQU19DSEVDS19EU0EifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNf Q0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5UKSwJIkZJUFNfQ0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5U In0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSksCSJGSVBTX0NIRUNLX1JTQSJ9 LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19EU0FfQ0hFQ0spLAkiRklQU19EU0FfQ0hFQ0sifSwK LSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfTU9ERV9TRVQpLAkiRklQU19tb2RlX3NldCJ9LAotK3tF UlJfRlVOQyhGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNUKSwJImZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMpLAkiRklQ U19zZWxmdGVzdF9hZXMifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTKSwJ IkZJUFNfc2VsZnRlc3RfZGVzIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RT QSksCSJGSVBTX3NlbGZ0ZXN0X2RzYSJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVT VF9ITUFDKSwJIkZJUFNfc2VsZnRlc3RfaG1hYyJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19T RUxGVEVTVF9STkcpLAkiRklQU19zZWxmdGVzdF9ybmcifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJ UFNfU0VMRlRFU1RfU0hBMSksCSJGSVBTX3NlbGZ0ZXN0X3NoYTEifSwKLSt7RVJSX0ZVTkMoRklQ U19GX0hBU0hfRklOQUwpLAkiSEFTSF9GSU5BTCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0JV SUxUSU5fS0VZR0VOKSwJIlJTQV9CVUlMVElOX0tFWUdFTiJ9LAotK3tFUlJfRlVOQyhGSVBTX0Zf UlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQpLAkiUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQifSwKLSt7 RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBUKSwJIlJTQV9FQVlfUFJJVkFU RV9FTkNSWVBUIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUKSwJ IlJTQV9FQVlfUFVCTElDX0RFQ1JZUFQifSwKLSt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFVC TElDX0VOQ1JZUFQpLAkiUlNBX0VBWV9QVUJMSUNfRU5DUllQVCJ9LAotK3tFUlJfRlVOQyhGSVBT X0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYKSwJIlJTQV9YOTMxX2dlbmVyYXRlX2tleV9leCJ9 LAotK3tFUlJfRlVOQyhGSVBTX0ZfU1NMRUFZX1JBTkRfQllURVMpLAkiU1NMRUFZX1JBTkRfQllU RVMifSwKLSt7MCxOVUxMfQotKwl9OwotKwotK3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRklQU19z dHJfcmVhc29uc1tdPQotKwl7Ci0re0VSUl9SRUFTT04oRklQU19SX0NBTk5PVF9SRUFEX0VYRSkg ICAgICAsImNhbm5vdCByZWFkIGV4ZSJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9DQU5OT1RfUkVB RF9FWEVfRElHRVNUKSwiY2Fubm90IHJlYWQgZXhlIGRpZ2VzdCJ9LAotK3tFUlJfUkVBU09OKEZJ UFNfUl9DT05UUkFESUNUSU5HX0VWSURFTkNFKSwiY29udHJhZGljdGluZyBldmlkZW5jZSJ9LAot K3tFUlJfUkVBU09OKEZJUFNfUl9FWEVfRElHRVNUX0RPRVNfTk9UX01BVENIKSwiZXhlIGRpZ2Vz dCBkb2VzIG5vdCBtYXRjaCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9GSU5HRVJQUklOVF9ET0VT X05PVF9NQVRDSCksImZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIn0sCi0re0VSUl9SRUFTT04o RklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQpLCJmaW5n ZXJwcmludCBkb2VzIG5vdCBtYXRjaCBub25waWMgcmVsb2NhdGVkIn0sCi0re0VSUl9SRUFTT04o RklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcpLCJmaW5n ZXJwcmludCBkb2VzIG5vdCBtYXRjaCBzZWdtZW50IGFsaWFzaW5nIn0sCi0re0VSUl9SRUFTT04o RklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCksImZpcHMgbW9kZSBhbHJlYWR5IHNldCJ9LAot K3tFUlJfUkVBU09OKEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCkgLCJmaXBzIHNlbGZ0ZXN0 IGZhaWxlZCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgpICAgLCJp bnZhbGlkIGtleSBsZW5ndGgifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfS0VZX1RPT19TSE9SVCkg ICAgICAgICwia2V5IHRvbyBzaG9ydCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9OT05fRklQU19N RVRIT0QpICAgICAgLCJub24gZmlwcyBtZXRob2QifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfUEFJ UldJU0VfVEVTVF9GQUlMRUQpICwicGFpcndpc2UgdGVzdCBmYWlsZWQifSwKLSt7RVJSX1JFQVNP TihGSVBTX1JfUlNBX0RFQ1JZUFRfRVJST1IpICAgICwicnNhIGRlY3J5cHQgZXJyb3IifSwKLSt7 RVJSX1JFQVNPTihGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IpICAgICwicnNhIGVuY3J5cHQgZXJy b3IifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKSAgICAgICwic2VsZnRl c3QgZmFpbGVkIn0sCi0re0VSUl9SRUFTT04oRklQU19SX1RFU1RfRkFJTFVSRSkgICAgICAgICAs InRlc3QgZmFpbHVyZSJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9S TSkgLCJ1bnN1cHBvcnRlZCBwbGF0Zm9ybSJ9LAotK3swLE5VTEx9Ci0rCX07Ci0rCi0rI2VuZGlm Ci0rCi0rdm9pZCBFUlJfbG9hZF9GSVBTX3N0cmluZ3Modm9pZCkKLSsJewotKyNpZm5kZWYgT1BF TlNTTF9OT19FUlIKLSsKLSsJaWYgKEVSUl9mdW5jX2Vycm9yX3N0cmluZyhGSVBTX3N0cl9mdW5j dHNbMF0uZXJyb3IpID09IE5VTEwpCi0rCQl7Ci0rCQlFUlJfbG9hZF9zdHJpbmdzKDAsRklQU19z dHJfZnVuY3RzKTsKLSsJCUVSUl9sb2FkX3N0cmluZ3MoMCxGSVBTX3N0cl9yZWFzb25zKTsKLSsJ CX0KLSsjZW5kaWYKLSsJfQotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIz IDEwOjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCAr MDIwMAotQEAgLTAsMCArMSwxMDEgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAo YykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLStzdGF0aWMgc3RydWN0Ci0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBr ZXlbMTZdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl07Ci0rICAgIHVuc2lnbmVk IGNoYXIgY2lwaGVydGV4dFsxNl07Ci0rICAgIH0gdGVzdHNbXT0KLSsJewotKwl7Ci0rCXsgMHgw MCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LAotKwkgIDB4MDgsMHgwOSwweDBB LDB4MEIsMHgwQywweDBELDB4MEUsMHgwRiB9LAotKwl7IDB4MDAsMHgxMSwweDIyLDB4MzMsMHg0 NCwweDU1LDB4NjYsMHg3NywKLSsJICAweDg4LDB4OTksMHhBQSwweEJCLDB4Q0MsMHhERCwweEVF LDB4RkYgfSwKLSsJeyAweDY5LDB4QzQsMHhFMCwweEQ4LDB4NkEsMHg3QiwweDA0LDB4MzAsCi0r CSAgMHhEOCwweENELDB4QjcsMHg4MCwweDcwLDB4QjQsMHhDNSwweDVBIH0sCi0rCX0sCi0rCX07 Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKCkKLSsgICAgewotKyAgICB0ZXN0c1swXS5rZXlb MF0rKzsKLSsgICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2FlcygpCi0rICAgIHsKLSsgICAg aW50IG47Ci0rICAgIGludCByZXQgPSAwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAg IEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAgIGZvcihuPTAgOyBuIDwgMSA7ICsr bikKLSsJewotKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwK LSsJCQkJdGVzdHNbbl0ua2V5LCBOVUxMLAotKwkJCQl0ZXN0c1tuXS5wbGFpbnRleHQsCi0rCQkJ CXRlc3RzW25dLmNpcGhlcnRleHQsCi0rCQkJCTE2KSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCX0K LSsgICAgcmV0ID0gMTsKLSsgICAgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZj dHgpOwotKyAgICBpZiAocmV0ID09IDApCi0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZU RVNUX0FFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgcmV0dXJuIHJldDsKLSsgICAg fQotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L2ZpcHMvZmlwcy5jCi0tLS0gL2Rldi9udWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUy ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzLmMJMjAwOS0w OS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsNDE5IEBACi0rLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsg KiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgot KyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAot KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgotKyAqCi0rICovCi0rCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUg PGxpbWl0cy5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotKyNpZm5kZWYgUEFUSF9NQVgK LSsjZGVmaW5lIFBBVEhfTUFYIDEwMjQKLSsjZW5kaWYKLSsKLStzdGF0aWMgaW50IGZpcHNfc2Vs ZnRlc3RfZmFpbDsKLStzdGF0aWMgaW50IGZpcHNfbW9kZTsKLStzdGF0aWMgY29uc3Qgdm9pZCAq Zmlwc19yYW5kX2NoZWNrOwotKwotK3N0YXRpYyB2b2lkIGZpcHNfc2V0X21vZGUoaW50IG9ub2Zm KQotKwl7Ci0rCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0r Ci0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJCXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkg Zmlwc193X2xvY2soKTsKLSsJCWZpcHNfbW9kZSA9IG9ub2ZmOwotKwkJaWYgKCFvd25pbmdfdGhy ZWFkKSBmaXBzX3dfdW5sb2NrKCk7Ci0rCQl9Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBmaXBzX3Nl dF9yYW5kX2NoZWNrKGNvbnN0IHZvaWQgKnJhbmRfY2hlY2spCi0rCXsKLSsJaW50IG93bmluZ190 aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRl ZCgpKQotKwkJewotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfbG9jaygpOwotKwkJZmlw c19yYW5kX2NoZWNrID0gcmFuZF9jaGVjazsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193 X3VubG9jaygpOwotKwkJfQotKwl9Ci0rCi0raW50IEZJUFNfbW9kZSh2b2lkKQotKwl7Ci0rCWlu dCByZXQgPSAwOwotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgp OwotKwotKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCi0rCQl7Ci0rCQlpZiAoIW93bmluZ190aHJl YWQpIGZpcHNfcl9sb2NrKCk7Ci0rCQlyZXQgPSBmaXBzX21vZGU7Ci0rCQlpZiAoIW93bmluZ190 aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2Nv bnN0IHZvaWQgKkZJUFNfcmFuZF9jaGVjayh2b2lkKQotKwl7Ci0rCWNvbnN0IHZvaWQgKnJldCA9 IDA7Ci0rCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0r CWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJCXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlw c19yX2xvY2soKTsKLSsJCXJldCA9IGZpcHNfcmFuZF9jaGVjazsKLSsJCWlmICghb3duaW5nX3Ro cmVhZCkgZmlwc19yX3VubG9jaygpOwotKwkJfQotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50 IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpCi0rICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0r ICAgIGlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJewotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZp cHNfaXNfb3duaW5nX3RocmVhZCgpOwotKwotKwlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9s b2NrKCk7Ci0rCXJldCA9IGZpcHNfc2VsZnRlc3RfZmFpbDsKLSsJaWYgKCFvd25pbmdfdGhyZWFk KSBmaXBzX3JfdW5sb2NrKCk7Ci0rCX0KLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8q IFNlbGZ0ZXN0IGZhaWx1cmUgZmF0YWwgZXhpdCByb3V0aW5lLiBUaGlzIHdpbGwgYmUgY2FsbGVk Ci0rICogZHVyaW5nICphbnkqIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uLiBJdCBoYXMgdGhlIG1p bmltdW0KLSsgKiBvdmVyaGVhZCBwb3NzaWJsZSB0byBhdm9pZCB0b28gYmlnIGEgcGVyZm9ybWFu Y2UgaGl0LgotKyAqLwotKwotK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lkKQotKyAgICB7 Ci0rICAgIGlmIChmaXBzX3NlbGZ0ZXN0X2ZhaWwpCi0rCXsKLSsJT3BlblNTTERpZShfX0ZJTEVf XyxfX0xJTkVfXywgIkZBVEFMIEZJUFMgU0VMRlRFU1QgRkFJTFVSRSIpOwotKwl9Ci0rICAgIH0K LSsKLSt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCkKLSsgICAgewotKyAgICBmaXBz X3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3QoKQotKyAg ICB7Ci0rCi0rICAgIHJldHVybiBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQotKwkmJiBGSVBTX3NlbGZ0 ZXN0X2htYWMoKQotKwkmJiBGSVBTX3NlbGZ0ZXN0X2FlcygpCi0rCSYmIEZJUFNfc2VsZnRlc3Rf ZGVzKCkKLSsJJiYgRklQU19zZWxmdGVzdF9yc2EoKQotKwkmJiBGSVBTX3NlbGZ0ZXN0X2RzYSgp OwotKyAgICB9Ci0rCi0raW50IEZJUFNfbW9kZV9zZXQoaW50IG9ub2ZmKQotKyAgICB7Ci0rICAg IGludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKCk7Ci0rICAgIGludCBmaXBzX2NsZWFyX293bmlu Z190aHJlYWQoKTsKLSsgICAgaW50IHJldCA9IDA7Ci0rCi0rICAgIGZpcHNfd19sb2NrKCk7Ci0r ICAgIGZpcHNfc2V0X3N0YXJ0ZWQoKTsKLSsgICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOwot KwotKyAgICBpZihvbm9mZikKLSsJewotKwl1bnNpZ25lZCBjaGFyIGJ1Zls0OF07Ci0rCi0rCWZp cHNfc2VsZnRlc3RfZmFpbCA9IDA7Ci0rCi0rCS8qIERvbid0IGdvIGludG8gRklQUyBtb2RlIHR3 aWNlLCBqdXN0IHNvIHdlIGNhbiBkbyBhdXRvbWFnaWMKLSsJICAgc2VlZGluZyAqLwotKwlpZihG SVBTX21vZGUoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQs RklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCk7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwg PSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwotKyNpZmRl ZiBPUEVOU1NMX0lBMzJfU1NFMgotKwlpZiAoKE9QRU5TU0xfaWEzMmNhcCAmICgxPDwyNXwxPDwy NikpICE9ICgxPDwyNXwxPDwyNikpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X01PREVfU0VULEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STSk7Ci0rCSAgICBmaXBzX3NlbGZ0 ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQot KyNlbmRpZgotKwotKwkvKiBQZXJmb3JtIFJORyBLQVQgYmVmb3JlIHNlZWRpbmcgKi8KLSsJaWYg KCFGSVBTX3NlbGZ0ZXN0X3JuZygpKQotKwkgICAgewotKwkgICAgZmlwc19zZWxmdGVzdF9mYWls ID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsKLSsJLyog YXV0b21hZ2ljYWxseSBzZWVkIFBSTkcgaWYgbm90IGFscmVhZHkgc2VlZGVkICovCi0rCWlmKCFG SVBTX3JhbmRfc3RhdHVzKCkpCi0rCSAgICB7Ci0rCSAgICBpZihSQU5EX2J5dGVzKGJ1ZixzaXpl b2YgYnVmKSA8PSAwKQotKwkJewotKwkJZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJCXJldCA9 IDA7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJICAgIEZJUFNfcmFuZF9zZXRfa2V5KGJ1ZiwzMik7 Ci0rCSAgICBGSVBTX3JhbmRfc2VlZChidWYrMzIsMTYpOwotKwkgICAgfQotKwotKwkvKiBub3cg c3dpdGNoIGludG8gRklQUyBtb2RlICovCi0rCWZpcHNfc2V0X3JhbmRfY2hlY2soRklQU19yYW5k X21ldGhvZCgpKTsKLSsJUkFORF9zZXRfcmFuZF9tZXRob2QoRklQU19yYW5kX21ldGhvZCgpKTsK LSsJaWYoRklQU19zZWxmdGVzdCgpKQotKwkgICAgZmlwc19zZXRfbW9kZSgxKTsKLSsJZWxzZQot KwkgICAgewotKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0r CSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsJcmV0ID0gMTsKLSsJZ290byBlbmQ7Ci0rCX0KLSsg ICAgZmlwc19zZXRfbW9kZSgwKTsKLSsgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsgICAg cmV0ID0gMTsKLStlbmQ6Ci0rICAgIGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOwotKyAgICBm aXBzX3dfdW5sb2NrKCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsKLSt2b2lkIGZpcHNf d19sb2NrKHZvaWQpCQl7IENSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUyk7IH0KLSt2b2lk IGZpcHNfd191bmxvY2sodm9pZCkJeyBDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUyk7 IH0KLSt2b2lkIGZpcHNfcl9sb2NrKHZvaWQpCQl7IENSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tf RklQUyk7IH0KLSt2b2lkIGZpcHNfcl91bmxvY2sodm9pZCkJeyBDUllQVE9fcl91bmxvY2soQ1JZ UFRPX0xPQ0tfRklQUyk7IH0KLSsKLStzdGF0aWMgaW50IGZpcHNfc3RhcnRlZCA9IDA7Ci0rc3Rh dGljIHVuc2lnbmVkIGxvbmcgZmlwc190aHJlYWQgPSAwOwotKwotK3ZvaWQgZmlwc19zZXRfc3Rh cnRlZCh2b2lkKQotKwl7Ci0rCWZpcHNfc3RhcnRlZCA9IDE7Ci0rCX0KLSsKLStpbnQgZmlwc19p c19zdGFydGVkKHZvaWQpCi0rCXsKLSsJcmV0dXJuIGZpcHNfc3RhcnRlZDsKLSsJfQotKwotK2lu dCBmaXBzX2lzX293bmluZ190aHJlYWQodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJ aWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewotKwkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9D S19GSVBTMik7Ci0rCQlpZiAoZmlwc190aHJlYWQgIT0gMCAmJiBmaXBzX3RocmVhZCA9PSBDUllQ VE9fdGhyZWFkX2lkKCkpCi0rCQkJcmV0ID0gMTsKLSsJCUNSWVBUT19yX3VubG9jayhDUllQVE9f TE9DS19GSVBTMik7Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgZmlwc19zZXRf b3duaW5nX3RocmVhZCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19p c19zdGFydGVkKCkpCi0rCQl7Ci0rCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsK LSsJCWlmIChmaXBzX3RocmVhZCA9PSAwKQotKwkJCXsKLSsJCQlmaXBzX3RocmVhZCA9IENSWVBU T190aHJlYWRfaWQoKTsKLSsJCQlyZXQgPSAxOwotKwkJCX0KLSsJCUNSWVBUT193X3VubG9jayhD UllQVE9fTE9DS19GSVBTMik7Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgZmlw c19jbGVhcl9vd25pbmdfdGhyZWFkKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCWlm IChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJCXsKLSsJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tf RklQUzIpOwotKwkJaWYgKGZpcHNfdGhyZWFkID09IENSWVBUT190aHJlYWRfaWQoKSkKLSsJCQl7 Ci0rCQkJZmlwc190aHJlYWQgPSAwOwotKwkJCXJldCA9IDE7Ci0rCQkJfQotKwkJQ1JZUFRPX3df dW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwot Ky8qIEdlbmVyYWxpemVkIHB1YmxpYyBrZXkgdGVzdCByb3V0aW5lLiBTaWducyBhbmQgdmVyaWZp ZXMgdGhlIGRhdGEKLSsgKiBzdXBwbGllZCBpbiB0YnMgdXNpbmcgbWVzYWdlIGRpZ2VzdCBtZCBh bmQgc2V0dGluZyBvcHRpb24gZGlnZXN0Ci0rICogZmxhZ3MgbWRfZmxhZ3MuIElmIHRoZSAna2F0 JyBwYXJhbWV0ZXIgaXMgbm90IE5VTEwgaXQgd2lsbAotKyAqIGFkZGl0aW9uYWxseSBjaGVjayB0 aGUgc2lnbmF0dXJlIG1hdGNoZXMgaXQ6IGEga25vd24gYW5zd2VyIHRlc3QKLSsgKiBUaGUgc3Ry aW5nICJmYWlsX3N0ciIgaXMgdXNlZCBmb3IgaWRlbnRpZmljYXRpb24gcHVycG9zZXMgaW4gY2Fz ZQotKyAqIG9mIGZhaWx1cmUuCi0rICovCi0rCi0raW50IGZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChFVlBfUEtFWSAqcGtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNs ZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVuLAot KwkJCWNvbnN0IEVWUF9NRCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCi0rCQkJY29u c3QgY2hhciAqZmFpbF9zdHIpCi0rCXsJCi0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFy IHNpZ3RtcFsyNTZdLCAqc2lnID0gc2lndG1wOwotKwl1bnNpZ25lZCBpbnQgc2lnbGVuOwotKwlF VlBfTURfQ1RYIG1jdHg7Ci0rCUVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCi0rCWlmICgocGtl eS0+dHlwZSA9PSBFVlBfUEtFWV9SU0EpCi0rCQkmJiAoUlNBX3NpemUocGtleS0+cGtleS5yc2Ep ID4gc2l6ZW9mKHNpZ3RtcCkpKQotKwkJewotKwkJc2lnID0gT1BFTlNTTF9tYWxsb2MoUlNBX3Np emUocGtleS0+cGtleS5yc2EpKTsKLSsJCWlmICghc2lnKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotKwkJ CXJldHVybiAwOwotKwkJCX0KLSsJCX0KLSsKLSsJaWYgKHRic2xlbiA9PSAtMSkKLSsJCXRic2xl biA9IHN0cmxlbigoY2hhciAqKXRicyk7Ci0rCi0rCWlmIChtZF9mbGFncykKLSsJCUVWUF9NRF9D VFhfc2V0X2ZsYWdzKCZtY3R4LCBtZF9mbGFncyk7Ci0rCi0rCWlmICghRVZQX1NpZ25Jbml0X2V4 KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnblVw ZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2ln bkZpbmFsKCZtY3R4LCBzaWcsICZzaWdsZW4sIHBrZXkpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJ aWYgKGthdCAmJiAoKHNpZ2xlbiAhPSBrYXRsZW4pIHx8IG1lbWNtcChrYXQsIHNpZywga2F0bGVu KSkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBk aWdlc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZt Y3R4LCB0YnMsIHRic2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlyZXQgPSBFVlBfVmVyaWZ5Rmlu YWwoJm1jdHgsIHNpZywgc2lnbGVuLCBwa2V5KTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChzaWcgIT0g c2lndG1wKQotKwkJT1BFTlNTTF9mcmVlKHNpZyk7Ci0rCUVWUF9NRF9DVFhfY2xlYW51cCgmbWN0 eCk7Ci0rCWlmIChyZXQgIT0gMSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9T SUdOQVRVUkVfVEVTVCxGSVBTX1JfVEVTVF9GQUlMVVJFKTsKLSsJCWlmIChmYWlsX3N0cikKLSsJ CQlFUlJfYWRkX2Vycm9yX2RhdGEoMiwgIlR5cGU9IiwgZmFpbF9zdHIpOwotKwkJcmV0dXJuIDA7 Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rLyogR2VuZXJhbGl6ZWQgc3ltbWV0cmljIGNp cGhlciB0ZXN0IHJvdXRpbmUuIEVuY3J5cHQgZGF0YSwgdmVyaWZ5IHJlc3VsdAotKyAqIGFnYWlu c3Qga25vd24gYW5zd2VyLCBkZWNyeXB0IGFuZCBjb21wYXJlIHdpdGggb3JpZ2luYWwgcGxhaW50 ZXh0LgotKyAqLwotKwotK2ludCBmaXBzX2NpcGhlcl90ZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgs IGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXks Ci0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAq cGxhaW50ZXh0LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCi0rCQkJaW50 IGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIHBsdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJ WkVdOwotKwl1bnNpZ25lZCBjaGFyIGNpdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOwot KwlPUEVOU1NMX2Fzc2VydChsZW4gPD0gRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rCWlm IChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMSkgPD0gMCkK LSsJCXJldHVybiAwOwotKwlFVlBfQ2lwaGVyKGN0eCwgY2l0bXAsIHBsYWludGV4dCwgbGVuKTsK LSsJaWYgKG1lbWNtcChjaXRtcCwgY2lwaGVydGV4dCwgbGVuKSkKLSsJCXJldHVybiAwOwotKwlp ZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDApIDw9IDAp Ci0rCQlyZXR1cm4gMDsKLSsJRVZQX0NpcGhlcihjdHgsIHBsdG1wLCBjaXRtcCwgbGVuKTsKLSsJ aWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCBsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCXJldHVy biAxOwotKwl9Ci0rCi0rI2lmIDAKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGlzIGlzIHRvIGVuc3Vy ZSB0aGUgZXJyb3IgY29kZSBleGlzdHMgYW5kIHRoZSBmdW5jdGlvbgotKyAqIG5hbWUgaXMgdG8g a2VlcCB0aGUgZXJyb3IgY2hlY2tpbmcgc2NyaXB0IHF1aWV0Ci0rICovCi0rdm9pZCBoYXNoX2Zp bmFsKHZvaWQpCi0rCXsKLSsJRklQU2VycihGSVBTX0ZfSEFTSF9GSU5BTCxGSVBTX1JfTk9OX0ZJ UFNfTUVUSE9EKTsKLSsJfQotKyNlbmRpZgotKwotKwotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9u dWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwot LS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwkyMDA5LTA5 LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwxMzcgQEAKLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoK LSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0r ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyBzdHJ1Y3QKLSsgICAgewotKyAgICB1bnNpZ25lZCBj aGFyIGtleVsxNl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOwotKyAgICB1bnNp Z25lZCBjaGFyIGNpcGhlcnRleHRbOF07Ci0rICAgIH0gdGVzdHMyW109Ci0rCXsKLSsJewotKwl7 IDB4N2MsMHg0ZiwweDZlLDB4ZjcsMHhhMiwweDA0LDB4MTYsMHhlYywKLSsJICAweDBiLDB4NmIs MHg3YywweDllLDB4NWUsMHgxOSwweGE3LDB4YzQgfSwKLSsJeyAweDA2LDB4YTcsMHhkOCwweDc5 LDB4YWEsMHhjZSwweDY5LDB4ZWYgfSwKLSsJeyAweDRjLDB4MTEsMHgxNywweDU1LDB4YmYsMHhj NCwweDRlLDB4ZmQgfQotKwl9LAotKwl7Ci0rCXsgMHg1ZCwweDllLDB4MDEsMHhkMywweDI1LDB4 YzcsMHgzZSwweDM0LAotKwkgIDB4MDEsMHgxNiwweDdjLDB4ODUsMHgyMywweGRmLDB4ZTAsMHg2 OCB9LAotKwl7IDB4OWMsMHg1MCwweDA5LDB4MGYsMHg1ZSwweDdkLDB4NjksMHg3ZSB9LAotKwl7 IDB4ZDIsMHgwYiwweDE4LDB4ZGYsMHhkOSwweDBkLDB4OWUsMHhmZiB9LAotKwl9Ci0rCX07Ci0r Ci0rc3RhdGljIHN0cnVjdAotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5WzI0XTsKLSsg ICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVy dGV4dFs4XTsKLSsgICAgfSB0ZXN0czNbXT0KLSsJewotKwl7Ci0rCXsgMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkgIDB4RkUsMHhEQywweEJBLDB4OTgsMHg3Niww eDU0LDB4MzIsMHgxMCwKLSsJICAweDEyLDB4MzQsMHg1NiwweDc4LDB4OWEsMHhiYywweGRlLDB4 ZjAgfSwKLSsJeyAweDhmLDB4OGYsMHhiZiwweDliLDB4NWQsMHg0OCwweGI0LDB4MWMgfSwKLSsJ eyAweDU5LDB4OGMsMHhlNSwweGQzLDB4NmMsMHhhMiwweGVhLDB4MWIgfSwKLSsJfSwKLSsJewot Kwl7IDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsMHhGRSwKLSsJICAweDAxLDB4 MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYsCi0rCSAgMHhFRCwweDM5LDB4RDksMHg1 MCwweEZBLDB4NzQsMHhCQywweEM0IH0sCi0rCXsgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4 QUIsMHhDRCwweEVGIH0sCi0rCXsgMHgxMSwweDI1LDB4YjAsMHgzNSwweGJlLDB4YTAsMHg4Miww eDg2IH0sCi0rCX0sCi0rCX07Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKCkKLSsgICAgewot KyAgICB0ZXN0czJbMF0ucGxhaW50ZXh0WzBdKys7Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxm dGVzdF9kZXMoKQotKyAgICB7Ci0rICAgIGludCBuLCByZXQgPSAwOwotKyAgICBFVlBfQ0lQSEVS X0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rICAgIC8qIEVuY3J5 cHQvZGVjcnlwdCB3aXRoIDIta2V5IDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAq LwotKyAgICBmb3Iobj0wIDsgbiA8IDIgOyArK24pCi0rCXsKLSsJaWYgKCFmaXBzX2NpcGhlcl90 ZXN0KCZjdHgsIEVWUF9kZXNfZWRlX2VjYigpLAotKwkJCQl0ZXN0czJbbl0ua2V5LCBOVUxMLAot KwkJCQl0ZXN0czJbbl0ucGxhaW50ZXh0LCB0ZXN0czJbbl0uY2lwaGVydGV4dCwgOCkpCi0rCQln b3RvIGVycjsKLSsJfQotKwotKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAzREVTIGFuZCBj b21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KLSsgICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQot Kwl7Ci0rCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksCi0r CQkJCXRlc3RzM1tuXS5rZXksIE5VTEwsCi0rCQkJCXRlc3RzM1tuXS5wbGFpbnRleHQsIHRlc3Rz M1tuXS5jaXBoZXJ0ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwl9Ci0rICAgIHJldCA9IDE7Ci0r ICAgIGVycjoKLSsgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsgICAgaWYgKHJl dCA9PSAwKQotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMsRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCi0rICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsjZW5kaWYKLWRp ZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZHNh X3NlbGZ0ZXN0LmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3NTIg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0 ZXN0LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMTg0 IEBACi0rLyogY3J5cHRvL2RzYS9kc2F0ZXN0LmMgKi8KLSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUt MTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0 dGVuCi0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBpbXBs ZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNT TC4KLSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9u LWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg YXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0byBh bGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAot KyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBT U0wgZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMg Y292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0aGUg aG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5 cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90 aWNlcyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlz IHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVu IGF0dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJh cnkgdXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2Fn ZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3Ig dGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzIHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0 d2FyZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIK LSsgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSBy b3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRv Z3JhcGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBz cGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0aGUg YXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNr bm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3Jp dHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICog Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJp YnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotKyAq IGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNv ZGUgY2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlz dHJpYnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2Uu XQotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlw dG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0r Lyogc2VlZCwgb3V0X3AsIG91dF9xLCBvdXRfZyBhcmUgdGFrZW4gdGhlIE5JU1QgdGVzdCB2ZWN0 b3JzICovCi0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VlZFsyMF0gPSB7Ci0rCTB4NzcsIDB4 OGYsIDB4NDAsIDB4NzQsIDB4NmYsIDB4NjYsIDB4YmUsIDB4MzMsIDB4Y2UsIDB4YmUsIDB4OTks IDB4MzQsCi0rCTB4NGMsIDB4ZmMsIDB4ZjMsIDB4MjgsIDB4YWEsIDB4NzAsIDB4MmQsIDB4M2EK LSsgIAl9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9wW10gPSB7Ci0rCTB4ZjcsIDB4 N2MsIDB4MWIsIDB4ODMsIDB4ZDgsIDB4ZTgsIDB4NWMsIDB4N2YsIDB4ODUsIDB4MzAsIDB4MTcs IDB4NTcsCi0rCTB4MjEsIDB4OTUsIDB4ZmUsIDB4MjYsIDB4MDQsIDB4ZWIsIDB4NDcsIDB4NGMs IDB4M2EsIDB4NGEsIDB4ODEsIDB4NGIsCi0rCTB4NzEsIDB4MmUsIDB4ZWQsIDB4NmUsIDB4NGYs IDB4M2QsIDB4MTEsIDB4MGYsIDB4N2MsIDB4ZmUsIDB4MzYsIDB4NDMsCi0rCTB4NTEsIDB4ZDks IDB4ODEsIDB4MzksIDB4MTcsIDB4ZGYsIDB4NjIsIDB4ZjYsIDB4OWMsIDB4MDEsIDB4YTgsIDB4 NjksCi0rCTB4NzEsIDB4ZGQsIDB4MjksIDB4N2YsIDB4NDcsIDB4ZTYsIDB4NjUsIDB4YTYsIDB4 MjIsIDB4ZTgsIDB4NmEsIDB4MTIsCi0rCTB4MmIsIDB4YzIsIDB4ODEsIDB4ZmYsIDB4MzIsIDB4 NzAsIDB4MmYsIDB4OWUsIDB4Y2EsIDB4NTMsIDB4MjYsIDB4NDcsCi0rCTB4MGYsIDB4NTksIDB4 ZDcsIDB4OWUsIDB4MmMsIDB4YTUsIDB4MDcsIDB4YzQsIDB4NDksIDB4NTIsIDB4YTMsIDB4ZTQs Ci0rCTB4NmIsIDB4MDQsIDB4MDAsIDB4MjUsIDB4NDksIDB4ZTIsIDB4ZTYsIDB4N2YsIDB4Mjgs IDB4NzgsIDB4OTcsIDB4YjgsCi0rCTB4M2EsIDB4MzIsIDB4MTQsIDB4MzgsIDB4YTIsIDB4NTEs IDB4MzMsIDB4MjIsIDB4NDQsIDB4N2UsIDB4ZDcsIDB4ZWYsCi0rCTB4NDUsIDB4ZGIsIDB4MDYs IDB4NGEsIDB4ZDIsIDB4ODIsIDB4NGEsIDB4ODIsIDB4MmMsIDB4YjEsIDB4ZDcsIDB4ZDgsCi0r CTB4YjYsIDB4NzMsIDB4MDAsIDB4NGQsIDB4OTQsIDB4NzcsIDB4OTQsIDB4ZWYKLSsJfTsKLSsK LStzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcVtdID0gewotKwkweGQ0LCAweDBhLCAweGFjLCAw eDlmLCAweGJkLCAweDhjLCAweDgwLCAweGMyLCAweDM4LCAweDdlLCAweDJlLCAweDBjLAotKwkw eDUyLCAweDVjLCAweGVhLCAweDM0LCAweGExLCAweDgzLCAweDMyLCAweGYzCi0rCX07Ci0rCi0r c3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X2dbXSA9IHsKLSsJMHgzNCwgMHg3MywgMHg4YiwgMHg1 NywgMHg4NCwgMHg4ZSwgMHg1NSwgMHhiZiwgMHg1NywgMHhjYywgMHg0MSwgMHhiYiwKLSsJMHg1 ZSwgMHgyYiwgMHhkNSwgMHg0MiwgMHhkZCwgMHgyNCwgMHgyMiwgMHgyYSwgMHgwOSwgMHhlYSwg MHgyNiwgMHgxZSwKLSsJMHgxNywgMHg2NSwgMHhjYiwgMHgxYSwgMHhiMywgMHgxMiwgMHg0NCwg MHhhMywgMHg5ZSwgMHg5OSwgMHhlOSwgMHg2MywKLSsJMHhlYiwgMHgzMCwgMHhiMSwgMHg3OCwg MHg3YiwgMHgwOSwgMHg0MCwgMHgzMCwgMHhmYSwgMHg4MywgMHhjMiwgMHgzNSwKLSsJMHhlMSwg MHhjNCwgMHgyZCwgMHg3NCwgMHgxYSwgMHhiMSwgMHg4MywgMHg1NCwgMHhkOCwgMHgyOSwgMHhm NCwgMHhjZiwKLSsJMHg3ZiwgMHg2ZiwgMHg2NywgMHgxYywgMHgzNiwgMHg0OSwgMHhlZSwgMHg2 YywgMHhhMiwgMHgzYywgMHgyZCwgMHg2YSwKLSsJMHhlOSwgMHhkMywgMHg5YSwgMHhmNiwgMHg1 NywgMHg3OCwgMHg2ZiwgMHhmZCwgMHgzMywgMHhjZCwgMHgzYywgMHhlZCwKLSsJMHhmZCwgMHhk NCwgMHg0MSwgMHhlNiwgMHg1YywgMHg4YiwgMHhlMCwgMHg2OCwgMHgzMSwgMHg0NywgMHg0Nywg MHhhZiwKLSsJMHgxMiwgMHhhNywgMHhmOSwgMHgzMiwgMHgwZCwgMHg5NCwgMHgxNSwgMHg0OCwg MHhkMCwgMHg1NCwgMHg4NSwgMHhiMiwKLSsJMHgwNCwgMHhiNSwgMHg0ZCwgMHhkNCwgMHg5ZCwg MHgwNSwgMHgyMiwgMHgyNSwgMHhkOSwgMHhmZCwgMHg2YywgMHgzNiwKLSsJMHhlZiwgMHhiZSwg MHg2OSwgMHg2YywgMHg1NSwgMHhmNCwgMHhlZSwgMHhlYwotKwl9OwotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHN0cjFbXT0iMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOwotKwotK3ZvaWQg RklQU19jb3JydXB0X2RzYSgpCi0rICAgIHsKLSsgICAgKytzZWVkWzBdOwotKyAgICB9Ci0rCi0r aW50IEZJUFNfc2VsZnRlc3RfZHNhKCkKLSsgICAgewotKyAgICBEU0EgKmRzYTsKLSsgICAgaW50 IGNvdW50ZXIsaSxqLCByZXQgPSAwOwotKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgdW5z aWduZWQgY2hhciBidWZbMjU2XTsKLSsgICAgdW5zaWduZWQgbG9uZyBoOwotKyAgICBFVlBfTURf Q1RYIG1jdHg7Ci0rICAgIEVWUF9QS0VZICpwayA9IE5VTEw7Ci0rCi0rICAgIEVWUF9NRF9DVFhf aW5pdCgmbWN0eCk7Ci0rCi0rICAgIGRzYSA9IERTQV9uZXcoKTsKLSsKLSsgICAgaWYoZHNhID09 IE5VTEwpCi0rCWdvdG8gZXJyOwotKyAgICBpZighRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgo ZHNhLCAxMDI0LHNlZWQsMjAsJmNvdW50ZXIsJmgsTlVMTCkpCi0rCWdvdG8gZXJyOwotKyAgICBp ZiAoY291bnRlciAhPSAzNzgpIAotKwlnb3RvIGVycjsKLSsgICAgaWYgKGggIT0gMikKLSsJZ290 byBlcnI7Ci0rICAgIGk9Qk5fYm4yYmluKGRzYS0+cSxidWYpOwotKyAgICBqPXNpemVvZihvdXRf cSk7Ci0rICAgIGlmIChpICE9IGogfHwgbWVtY21wKGJ1ZixvdXRfcSxpKSAhPSAwKQotKwlnb3Rv IGVycjsKLSsKLSsgICAgaT1CTl9ibjJiaW4oZHNhLT5wLGJ1Zik7Ci0rICAgIGo9c2l6ZW9mKG91 dF9wKTsKLSsgICAgaWYgKGkgIT0gaiB8fCBtZW1jbXAoYnVmLG91dF9wLGkpICE9IDApCi0rCWdv dG8gZXJyOwotKwotKyAgICBpPUJOX2JuMmJpbihkc2EtPmcsYnVmKTsKLSsgICAgaj1zaXplb2Yo b3V0X2cpOwotKyAgICBpZiAoaSAhPSBqIHx8IG1lbWNtcChidWYsb3V0X2csaSkgIT0gMCkKLSsJ Z290byBlcnI7Ci0rICAgIERTQV9nZW5lcmF0ZV9rZXkoZHNhKTsKLSsKLSsgICAgaWYgKChwaz1F VlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJZ290byBlcnI7Ci0rICAgIEVWUF9QS0VZX2Fzc2ln bl9EU0EocGssIGRzYSk7Ci0rCi0rICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBf ZHNzMSgpLCBOVUxMKSkKLSsJZ290byBlcnI7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1j dHgsIHN0cjEsIDIwKSkKLSsJZ290byBlcnI7Ci0rICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0 eCwgYnVmLCAmc2xlbiwgcGspKQotKwlnb3RvIGVycjsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5 SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rCWdvdG8gZXJyOwotKyAgICBpZiAo IUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIHN0cjEsIDIwKSkKLSsJZ290byBlcnI7Ci0rICAgIGlm IChFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgcGspICE9IDEpCi0rCWdvdG8gZXJy OwotKwotKyAgICByZXQgPSAxOwotKwotKyAgICBlcnI6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51 cCgmbWN0eCk7Ci0rICAgIGlmIChwaykKLSsJRVZQX1BLRVlfZnJlZShwayk7Ci0rICAgIGVsc2Ug aWYgKGRzYSkKLSsJRFNBX2ZyZWUoZHNhKTsKLSsgICAgaWYgKHJldCA9PSAwKQotKwkgICAgRklQ U2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0r ICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHMuaAotLS0tIC9kZXYvbnVsbAkyMDA5LTA5 LTIzIDEwOjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5 cHRvL2ZpcHMvZmlwcy5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAt MCwwICsxLDE2MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxv cGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjZXJyb3Ig RklQUyBpcyBkaXNhYmxlZC4KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0r I2lmZGVmICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotK3N0cnVjdCBk c2Ffc3Q7Ci0rc3RydWN0IGV2cF9wa2V5X3N0OwotK3N0cnVjdCBlbnZfbWRfc3Q7Ci0rc3RydWN0 IGV2cF9jaXBoZXJfc3Q7Ci0rc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0OwotKwotK2ludCBGSVBT X21vZGVfc2V0KGludCBvbm9mZik7Ci0raW50IEZJUFNfbW9kZSh2b2lkKTsKLStjb25zdCB2b2lk ICpGSVBTX3JhbmRfY2hlY2sodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQp OwotK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9z aGExKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEodm9pZCk7Ci0rdm9pZCBGSVBTX2Nv cnJ1cHRfYWVzKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flcyh2b2lkKTsKLSt2b2lkIEZJ UFNfY29ycnVwdF9kZXModm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZGVzKHZvaWQpOwotK3Zv aWQgRklQU19jb3JydXB0X3JzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2Vu KHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVw dF9kc2Eodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbih2b2lkKTsKLStpbnQg RklQU19zZWxmdGVzdF9kc2Eodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKHZvaWQpOwot K3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQp OwotK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWModm9pZCk7Ci0rCi0raW50IGZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChzdHJ1Y3QgZXZwX3BrZXlfc3QgKnBrZXksCi0rCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqdGJzLCBpbnQgdGJzbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5z aWduZWQgaW50IGthdGxlbiwKLSsJCQljb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpkaWdlc3QsIHVu c2lnbmVkIGludCBtZF9mbGFncywKLSsJCQljb25zdCBjaGFyICpmYWlsX3N0cik7Ci0rCi0raW50 IGZpcHNfY2lwaGVyX3Rlc3Qoc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0ICpjdHgsCi0rCQkJY29u c3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKmNpcGhlciwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICprZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqcGxhaW50ZXh0LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCi0r CQkJaW50IGxlbik7Ci0rCi0rLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KLSsvKiBUaGUgZm9sbG93 aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkg Y2hhbmdlcwotKyAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hl biB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgotKyAqLwotK3ZvaWQgRVJSX2xvYWRfRklQU19zdHJp bmdzKHZvaWQpOwotKwotKy8qIEVycm9yIGNvZGVzIGZvciB0aGUgRklQUyBmdW5jdGlvbnMuICov Ci0rCi0rLyogRnVuY3Rpb24gY29kZXMuICovCi0rI2RlZmluZSBGSVBTX0ZfREhfQlVJTFRJTl9H RU5QQVJBTVMJCQkgMTAwCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkg MTAxCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1NJR04JCQkJIDEwMgotKyNkZWZpbmUgRklQU19G X0RTQV9ET19WRVJJRlkJCQkJIDEwMwotKyNkZWZpbmUgRklQU19GX0VWUF9DSVBIRVJJTklUX0VY CQkJIDEyNAotKyNkZWZpbmUgRklQU19GX0VWUF9ESUdFU1RJTklUX0VYCQkJIDEyNQotKyNkZWZp bmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBCQkJCSAxMDQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NI RUNLX0lOQ09SRV9GSU5HRVJQUklOVAkJIDEwNQotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tf UlNBCQkJCSAxMDYKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9DSEVDSwkJCQkgMTA3Ci0rI2Rl ZmluZSBGSVBTX0ZfRklQU19NT0RFX1NFVAkJCQkgMTA4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19Q S0VZX1NJR05BVFVSRV9URVNUCQkJIDEwOQotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1Rf QUVTCQkJIDExMAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTCQkJIDExMQotKyNk ZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBCQkJIDExMgotKyNkZWZpbmUgRklQU19GX0ZJ UFNfU0VMRlRFU1RfSE1BQwkJCSAxMTMKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1JO RwkJCSAxMTQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEJCQkgMTE1Ci0rI2Rl ZmluZSBGSVBTX0ZfSEFTSF9GSU5BTAkJCQkgMTIzCi0rI2RlZmluZSBGSVBTX0ZfUlNBX0JVSUxU SU5fS0VZR0VOCQkJIDExNgotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBU CQkJIDExNwotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBUCQkJIDExOAot KyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQJCQkgMTE5Ci0rI2RlZmluZSBG SVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVAkJCSAxMjAKLSsjZGVmaW5lIEZJUFNfRl9SU0Ff WDkzMV9HRU5FUkFURV9LRVlfRVgJCQkgMTIxCi0rI2RlZmluZSBGSVBTX0ZfU1NMRUFZX1JBTkRf QllURVMJCQkgMTIyCi0rCi0rLyogUmVhc29uIGNvZGVzLiAqLwotKyNkZWZpbmUgRklQU19SX0NB Tk5PVF9SRUFEX0VYRQkJCQkgMTAzCi0rI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJ R0VTVAkJCSAxMDQKLSsjZGVmaW5lIEZJUFNfUl9DT05UUkFESUNUSU5HX0VWSURFTkNFCQkJIDEx NAotKyNkZWZpbmUgRklQU19SX0VYRV9ESUdFU1RfRE9FU19OT1RfTUFUQ0gJCSAxMDUKLSsjZGVm aW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSAkJIDExMAotKyNkZWZpbmUgRklQ U19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQgMTExCi0rI2Rl ZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyAx MTIKLSsjZGVmaW5lIEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQJCQkgMTAyCi0rI2RlZmlu ZSBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQJCQkgMTA2Ci0rI2RlZmluZSBGSVBTX1JfSU5W QUxJRF9LRVlfTEVOR1RICQkJIDEwOQotKyNkZWZpbmUgRklQU19SX0tFWV9UT09fU0hPUlQJCQkJ IDEwOAotKyNkZWZpbmUgRklQU19SX05PTl9GSVBTX01FVEhPRAkJCQkgMTAwCi0rI2RlZmluZSBG SVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQJCQkgMTA3Ci0rI2RlZmluZSBGSVBTX1JfUlNBX0RF Q1JZUFRfRVJST1IJCQkgMTE1Ci0rI2RlZmluZSBGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IJCQkg MTE2Ci0rI2RlZmluZSBGSVBTX1JfU0VMRlRFU1RfRkFJTEVECQkJCSAxMDEKLSsjZGVmaW5lIEZJ UFNfUl9URVNUX0ZBSUxVUkUJCQkJIDExNwotKyNkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVEX1BM QVRGT1JNCQkJIDExMwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0rI2VuZGlmCi0rI2Vu ZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9m aXBzX2htYWNfc2VsZnRlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0 ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19o bWFjX3NlbGZ0ZXN0LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0w LDAgKzEsMTM1IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhl 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 cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotK3R5cGVkZWYgc3RydWN0IHsKLSsJY29uc3QgRVZQX01EICooKmFsZykodm9pZCk7Ci0rCWNv bnN0IGNoYXIgKmtleSwgKml2OwotKwl1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0la RV07Ci0rfSBITUFDX0tBVDsKLSsKLStzdGF0aWMgY29uc3QgSE1BQ19LQVQgdmVjdG9yW10gPSB7 Ci0rICAgIHsJRVZQX3NoYTEsCi0rCS8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGlj YXRpb25zL2ZpcHMvZmlwczE5OC9maXBzLTE5OGEucGRmICovCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/ QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4MDksMHgyMiwweGQzLDB4NDAsMHg1ZiwweGFh LDB4M2QsMHgxOSwKLSsJICAweDRmLDB4ODIsMHhhNCwweDU4LDB4MzAsMHg3MywweDdkLDB4NWMs Ci0rCSAgMHhjNiwweGM3LDB4NWQsMHgyNCB9Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTIyNCwK LSsJLyoganVzdCBrZWVwIGV4dGVuZGluZyB0aGUgYWJvdmUuLi4gKi8KLSsJIjAxMjM0NTY3ODk6 Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHhkZCwweGVmLDB4MGEsMHg0MCwweGNi LDB4N2QsMHg1MCwweGZiLAotKwkgIDB4NmUsMHhlNiwweGNlLDB4YTEsMHgyMCwweGJhLDB4MjYs MHhhYSwKLSsJICAweDA4LDB4ZjMsMHgwNywweDc1LDB4ODcsMHhiOCwweGFkLDB4MWIsCi0rCSAg MHg4YywweDhkLDB4MTIsMHhjNyB9Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTI1NiwKLSsJIjAx MjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHhiOCwweGYyLDB4MGQs MHhiNSwweDQxLDB4ZWEsMHg0MywweDA5LAotKwkgIDB4Y2EsMHg0ZSwweGE5LDB4MzgsMHgwYyww eGQwLDB4ZTgsMHgzNCwKLSsJICAweGY3LDB4MWYsMHhiZSwweDkxLDB4NzQsMHhhMiwweDYxLDB4 MzgsCi0rCSAgMHgwZCwweGMxLDB4N2UsMHhhZSwweDZhLDB4MzQsMHg1MSwweGQ5IH0KLSsgICAg fSwKLSsgICAgewlFVlBfc2hhMzg0LAotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwkiU2Ft cGxlICMyIiwKLSsJeyAweDA4LDB4YmMsMHhiMCwweGRhLDB4NDksMHgxZSwweDg3LDB4YWQsCi0r CSAgMHg5YSwweDFkLDB4NmEsMHhjZSwweDIzLDB4YzUsMHgwYiwweGY2LAotKwkgIDB4YjcsMHgx OCwweDA2LDB4YTUsMHg3NywweGNkLDB4NDksMHgwNCwKLSsJICAweDg5LDB4ZjEsMHhlNiwweDIz LDB4NDQsMHg1MSwweDUxLDB4OWYsCi0rCSAgMHg4NSwweDU2LDB4ODAsMHg3OSwweDBjLDB4YmQs MHg0ZCwweDUwLAotKwkgIDB4YTQsMHg1ZiwweDI5LDB4ZTMsMHg5MywweGYwLDB4ZTgsMHg3ZiB9 Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTUxMiwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwK LSsJIlNhbXBsZSAjMiIsCi0rCXsgMHg4MCwweDlkLDB4NDQsMHgwNSwweDdjLDB4NWIsMHg5NSww eDQxLAotKwkgIDB4MDUsMHhiZCwweDA0LDB4MTMsMHgxNiwweGRiLDB4MGYsMHhhYywKLSsJICAw eDQ0LDB4ZDUsMHhhNCwweGQ1LDB4ZDAsMHg4OSwweDJiLDB4ZDAsCi0rCSAgMHg0ZSwweDg2LDB4 NjQsMHgxMiwweGMwLDB4OTAsMHg3NywweDY4LAotKwkgIDB4ZjEsMHg4NywweGI3LDB4N2MsMHg0 ZiwweGFlLDB4MmMsMHgyZiwKLSsJICAweDIxLDB4YTUsMHhiNSwweDY1LDB4OWEsMHg0ZiwweDRi LDB4YTcsCi0rCSAgMHg0NywweDAyLDB4YTMsMHhkZSwweDliLDB4NTEsMHhmMSwweDQ1LAotKwkg IDB4YmQsMHg0ZiwweDI1LDB4MjcsMHg0MiwweDk4LDB4OTksMHgwNSB9Ci0rICAgIH0sCi0rfTsK LSsKLStpbnQgRklQU19zZWxmdGVzdF9obWFjKCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsgICAg dW5zaWduZWQgaW50ICAgIG91dGxlbjsKLSsgICAgdW5zaWduZWQgY2hhciAgIG91dFtFVlBfTUFY X01EX1NJWkVdOwotKyAgICBjb25zdCBFVlBfTUQgICAqbWQ7Ci0rICAgIGNvbnN0IEhNQUNfS0FU ICp0OwotKwotKyAgICBmb3Iobj0wLHQ9dmVjdG9yOyBuPHNpemVvZih2ZWN0b3IpL3NpemVvZih2 ZWN0b3JbMF0pOyBuKyssdCsrKQotKwl7Ci0rCW1kID0gKCp0LT5hbGcpKCk7Ci0rCUhNQUMobWQs dC0+a2V5LHN0cmxlbih0LT5rZXkpLAotKwkJKGNvbnN0IHVuc2lnbmVkIGNoYXIgKil0LT5pdixz dHJsZW4odC0+aXYpLAotKwkJb3V0LCZvdXRsZW4pOwotKwotKwlpZihtZW1jbXAob3V0LHQtPmth dmFsLG91dGxlbikpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNU X0hNQUMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0K LSsJfQotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxs IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMKLS0tLSAvZGV2L251 bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAw MDAwICswMjAwCi1AQCAtMCwwICsxLDQxMCBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJp Z2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot KyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcu Ci0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwot KwotKy8qCi0rICogVGhpcyBpcyBhIEZJUFMgYXBwcm92ZWQgQUVTIFBSTkcgYmFzZWQgb24gQU5T SSBYOS4zMSBBLjIuNC4KLSsgKi8KLSsKLSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKy8qIElmIHdl IGRvbid0IGRlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVELCBzdHJ1Y3QgdGltZXZhbCB3b24n dAotKyAgIGJlIGRlZmluZWQgYW5kIGdldHRpbWVvZmRheSgpIHdvbid0IGJlIGRlY2xhcmVkIHdp dGggc3RyaWN0IGNvbXBpbGVycwotKyAgIGxpa2UgREVDIEMgaW4gQU5TSSBDIG1vZGUuICAqLwot KyNpZm5kZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAotKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9F WFRFTkRFRCAxCi0rI2VuZGlmCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsjaW5j bHVkZSA8c3lzL3RpbWUuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2lmbmRl ZiBPUEVOU1NMX1NZU19XSU4zMgotKyMgaWZkZWYgT1BFTlNTTF9VTklTVEQKLSsjICBpbmNsdWRl IE9QRU5TU0xfVU5JU1RECi0rIyBlbHNlCi0rIyAgaW5jbHVkZSA8dW5pc3RkLmg+Ci0rIyBlbmRp ZgotKyNlbmRpZgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsK LSt2b2lkICpPUEVOU1NMX3N0ZGVycih2b2lkKTsKLSsKLSsjZGVmaW5lIEFFU19CTE9DS19MRU5H VEgJMTYKLSsKLSsKLSsvKiBBRVMgRklQUyBQUk5HIGltcGxlbWVudGF0aW9uICovCi0rCi0rdHlw ZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJaW50IHNlZWRlZDsKLSsJaW50IGtleWVkOwotKwlpbnQgdGVz dF9tb2RlOwotKwlpbnQgc2Vjb25kOwotKwlpbnQgZXJyb3I7Ci0rCXVuc2lnbmVkIGxvbmcgY291 bnRlcjsKLSsJQUVTX0tFWSBrczsKLSsJaW50IHZwb3M7Ci0rCS8qIFRlbXBvcmFyeSBzdG9yYWdl IGZvciBrZXkgaWYgaXQgZXF1YWxzIHNlZWQgbGVuZ3RoICovCi0rCXVuc2lnbmVkIGNoYXIgdG1w X2tleVtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5zaWduZWQgY2hhciBWW0FFU19CTE9DS19MRU5H VEhdOwotKwl1bnNpZ25lZCBjaGFyIERUW0FFU19CTE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBj aGFyIGxhc3RbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCX0gRklQU19QUk5HX0NUWDsKLSsKLStzdGF0 aWMgRklQU19QUk5HX0NUWCBzY3R4OwotKwotK3N0YXRpYyBpbnQgZmlwc19wcm5nX2ZhaWwgPSAw OwotKwotK3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCkKLSsJewotKwlmaXBzX3BybmdfZmFpbCA9 IDE7Ci0rCX0KLSsKLSt2b2lkIGZpcHNfcmFuZF9wcm5nX3Jlc2V0KEZJUFNfUFJOR19DVFggKmN0 eCkKLSsJewotKwljdHgtPnNlZWRlZCA9IDA7Ci0rCWN0eC0+a2V5ZWQgPSAwOwotKwljdHgtPnRl c3RfbW9kZSA9IDA7Ci0rCWN0eC0+Y291bnRlciA9IDA7Ci0rCWN0eC0+c2Vjb25kID0gMDsKLSsJ Y3R4LT5lcnJvciA9IDA7Ci0rCWN0eC0+dnBvcyA9IDA7Ci0rCU9QRU5TU0xfY2xlYW5zZShjdHgt PlYsIEFFU19CTE9DS19MRU5HVEgpOwotKwlPUEVOU1NMX2NsZWFuc2UoJmN0eC0+a3MsIHNpemVv ZihBRVNfS0VZKSk7Ci0rCX0KLSsJCi0rCi0rc3RhdGljIGludCBmaXBzX3NldF9wcm5nX2tleShG SVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JB TkRfU0laRV9UIGtleWxlbikKLSsJewotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rCWlmIChr ZXlsZW4gIT0gMTYgJiYga2V5bGVuICE9IDI0ICYmIGtleWxlbiAhPSAzMikKLSsJCXsKLSsJCS8q IGVycm9yOiBpbnZhbGlkIGtleSBzaXplICovCi0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJQUVTX3Nl dF9lbmNyeXB0X2tleShrZXksIGtleWxlbiA8PCAzLCAmY3R4LT5rcyk7Ci0rCWlmIChrZXlsZW4g PT0gMTYpCi0rCQl7Ci0rCQltZW1jcHkoY3R4LT50bXBfa2V5LCBrZXksIDE2KTsKLSsJCWN0eC0+ a2V5ZWQgPSAyOwotKwkJfQotKwllbHNlCi0rCQljdHgtPmtleWVkID0gMTsKLSsJY3R4LT5zZWVk ZWQgPSAwOwotKwljdHgtPnNlY29uZCA9IDA7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGlj IGludCBmaXBzX3NldF9wcm5nX3NlZWQoRklQU19QUk5HX0NUWCAqY3R4LAotKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbikKLSsJewotKwlpbnQg aTsKLSsJaWYgKCFjdHgtPmtleWVkKQotKwkJcmV0dXJuIDA7Ci0rCS8qIEluIHRlc3QgbW9kZSBz ZWVkIGlzIGp1c3Qgc3VwcGxpZWQgZGF0YSAqLwotKwlpZiAoY3R4LT50ZXN0X21vZGUpCi0rCQl7 Ci0rCQlpZiAoc2VlZGxlbiAhPSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXJldHVybiAwOwotKwkJ bWVtY3B5KGN0eC0+Viwgc2VlZCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQljdHgtPnNlZWRlZCA9 IDE7Ci0rCQlyZXR1cm4gMTsKLSsJCX0KLSsJLyogT3V0c2lkZSB0ZXN0IG1vZGUgWE9SIHN1cHBs aWVkIGRhdGEgd2l0aCBleGlzdGluZyBzZWVkICovCi0rCWZvciAoaSA9IDA7IGkgPCBzZWVkbGVu OyBpKyspCi0rCQl7Ci0rCQljdHgtPlZbY3R4LT52cG9zKytdIF49IHNlZWRbaV07Ci0rCQlpZiAo Y3R4LT52cG9zID09IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJewotKwkJCWN0eC0+dnBvcyA9IDA7 Ci0rCQkJLyogU3BlY2lhbCBjYXNlIGlmIGZpcnN0IHNlZWQgYW5kIGtleSBsZW5ndGggZXF1YWxz Ci0rIAkJCSAqIGJsb2NrIHNpemUgY2hlY2sga2V5IGFuZCBzZWVkIGRvIG5vdCBtYXRjaC4KLSsg CQkJICovIAotKwkJCWlmIChjdHgtPmtleWVkID09IDIpCi0rCQkJCXsKLSsJCQkJaWYgKCFtZW1j bXAoY3R4LT50bXBfa2V5LCBjdHgtPlYsIDE2KSkKLSsJCQkJCXsKLSsJCQkJCVJBTkRlcnIoUkFO RF9GX0ZJUFNfU0VUX1BSTkdfU0VFRCwKLSsJCQkJCQlSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9U X01BVENIX0tFWSk7Ci0rCQkJCQlyZXR1cm4gMDsKLSsJCQkJCX0KLSsJCQkJT1BFTlNTTF9jbGVh bnNlKGN0eC0+dG1wX2tleSwgMTYpOwotKwkJCQljdHgtPmtleWVkID0gMTsKLSsJCQkJfQotKwkJ CWN0eC0+c2VlZGVkID0gMTsKLSsJCQl9Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50 IGZpcHNfc2V0X3Rlc3RfbW9kZShGSVBTX1BSTkdfQ1RYICpjdHgpCi0rCXsKLSsJaWYgKGN0eC0+ a2V5ZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUsUkFORF9S X1BSTkdfS0VZRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWN0eC0+dGVzdF9tb2RlID0gMTsK LSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgRklQU19yYW5kX3Rlc3RfbW9kZSh2b2lkKQotKwl7 Ci0rCXJldHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNjdHgpOwotKwl9Ci0rCi0raW50IEZJUFNf cmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCi0rCXsKLSsJaWYgKCFzY3R4LnRlc3RfbW9k ZSkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQsUkFORF9SX05PVF9J Tl9URVNUX01PREUpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCW1lbWNweShzY3R4LkRULCBkdCwg QUVTX0JMT0NLX0xFTkdUSCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIHZvaWQgZmlw c19nZXRfZHQoRklQU19QUk5HX0NUWCAqY3R4KQotKyAgICB7Ci0rI2lmZGVmIE9QRU5TU0xfU1lT X1dJTjMyCi0rCUZJTEVUSU1FIGZ0OwotKyNlbHNlCi0rCXN0cnVjdCB0aW1ldmFsIHR2OwotKyNl bmRpZgotKwl1bnNpZ25lZCBjaGFyICpidWYgPSBjdHgtPkRUOwotKwotKyNpZm5kZWYgR0VUUElE X0lTX01FQU5JTkdMRVNTCi0rCXVuc2lnbmVkIGxvbmcgcGlkOwotKyNlbmRpZgotKwotKyNpZmRl ZiBPUEVOU1NMX1NZU19XSU4zMgotKwlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOwotKwli dWZbMF0gPSAodW5zaWduZWQgY2hhcikgKGZ0LmR3SGlnaERhdGVUaW1lICYgMHhmZik7Ci0rCWJ1 ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDgpICYgMHhmZik7 Ci0rCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDE2KSAm IDB4ZmYpOwotKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+ PiAyNCkgJiAweGZmKTsKLSsJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpIChmdC5kd0xvd0RhdGVU aW1lICYgMHhmZik7Ci0rCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRp bWUgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dE YXRlVGltZSA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgoZnQu ZHdMb3dEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsKLSsjZWxzZQotKwlnZXR0aW1lb2ZkYXkoJnR2 LE5VTEwpOwotKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKHR2LnR2X3NlYyAmIDB4ZmYpOwot KwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gOCkgJiAweGZmKTsKLSsJ YnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDE2KSAmIDB4ZmYpOwotKwli dWZbM10gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gMjQpICYgMHhmZik7Ci0rCWJ1 Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZfdXNlYyAmIDB4ZmYpOwotKwlidWZbNV0gPSAo dW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDgpICYgMHhmZik7Ci0rCWJ1Zls2XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gMTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gMjQpICYgMHhmZik7Ci0rI2VuZGlmCi0rCWJ1 Zls4XSA9ICh1bnNpZ25lZCBjaGFyKSAoY3R4LT5jb3VudGVyICYgMHhmZik7Ci0rCWJ1Zls5XSA9 ICh1bnNpZ25lZCBjaGFyKSAoKGN0eC0+Y291bnRlciA+PiA4KSAmIDB4ZmYpOwotKwlidWZbMTBd ID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4LT5jb3VudGVyID4+IDE2KSAmIDB4ZmYpOwotKwlidWZb MTFdID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4LT5jb3VudGVyID4+IDI0KSAmIDB4ZmYpOwotKwot KwljdHgtPmNvdW50ZXIrKzsKLSsKLSsKLSsjaWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUwot KwlwaWQ9KHVuc2lnbmVkIGxvbmcpZ2V0cGlkKCk7Ci0rCWJ1ZlsxMl0gPSAodW5zaWduZWQgY2hh cikgKHBpZCAmIDB4ZmYpOwotKwlidWZbMTNdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDgp ICYgMHhmZik7Ci0rCWJ1ZlsxNF0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMTYpICYgMHhm Zik7Ci0rCWJ1ZlsxNV0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMjQpICYgMHhmZik7Ci0r I2VuZGlmCi0rICAgIH0KLSsKLStzdGF0aWMgaW50IGZpcHNfcmFuZChGSVBTX1BSTkdfQ1RYICpj dHgsCi0rCQkJdW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbikKLSsJ ewotKwl1bnNpZ25lZCBjaGFyIFJbQUVTX0JMT0NLX0xFTkdUSF0sIElbQUVTX0JMT0NLX0xFTkdU SF07Ci0rCXVuc2lnbmVkIGNoYXIgdG1wW0FFU19CTE9DS19MRU5HVEhdOwotKwlpbnQgaTsKLSsJ aWYgKGN0eC0+ZXJyb3IpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9S X1BSTkdfRVJST1IpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmICghY3R4LT5rZXllZCkKLSsJ CXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfTk9fS0VZX1NFVCk7Ci0rCQly ZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFjdHgtPnNlZWRlZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFO RF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19OT1RfU0VFREVEKTsKLSsJCXJldHVybiAwOwotKwkJ fQotKwlmb3IgKDs7KQotKwkJewotKwkJaWYgKCFjdHgtPnRlc3RfbW9kZSkKLSsJCQlmaXBzX2dl dF9kdChjdHgpOwotKwkJQUVTX2VuY3J5cHQoY3R4LT5EVCwgSSwgJmN0eC0+a3MpOwotKwkJZm9y IChpID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKLSsJCQl0bXBbaV0gPSBJW2ldIF4g Y3R4LT5WW2ldOwotKwkJQUVTX2VuY3J5cHQodG1wLCBSLCAmY3R4LT5rcyk7Ci0rCQlmb3IgKGkg PSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQotKwkJCXRtcFtpXSA9IFJbaV0gXiBJW2ld OwotKwkJQUVTX2VuY3J5cHQodG1wLCBjdHgtPlYsICZjdHgtPmtzKTsKLSsJCS8qIENvbnRpbnVv dXMgUFJORyB0ZXN0ICovCi0rCQlpZiAoY3R4LT5zZWNvbmQpCi0rCQkJewotKwkJCWlmIChmaXBz X3BybmdfZmFpbCkKLSsJCQkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7 Ci0rCQkJaWYgKCFtZW1jbXAoUiwgY3R4LT5sYXN0LCBBRVNfQkxPQ0tfTEVOR1RIKSkKLSsJCQkJ ewotKwkgICAgCQkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX1NUVUNLKTsK LSsJCQkJY3R4LT5lcnJvciA9IDE7Ci0rCQkJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJ CQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJCQl9Ci0rCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNf QkxPQ0tfTEVOR1RIKTsKLSsJCWlmICghY3R4LT5zZWNvbmQpCi0rCQkJewotKwkJCWN0eC0+c2Vj b25kID0gMTsKLSsJCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQotKwkJCQljb250aW51ZTsKLSsJCQl9 Ci0rCi0rCQlpZiAob3V0bGVuIDw9IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJewotKwkJCW1lbWNw eShvdXQsIFIsIG91dGxlbik7Ci0rCQkJYnJlYWs7Ci0rCQkJfQotKwotKwkJbWVtY3B5KG91dCwg UiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQlvdXQgKz0gQUVTX0JMT0NLX0xFTkdUSDsKLSsJCW91 dGxlbiAtPSBBRVNfQkxPQ0tfTEVOR1RIOwotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotKwot K2ludCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFO RF9TSVpFX1Qga2V5bGVuKQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRP X0xPQ0tfUkFORCk7Ci0rCXJldCA9IGZpcHNfc2V0X3Bybmdfa2V5KCZzY3R4LCBrZXksIGtleWxl bik7Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJldDsK LSsJfQotKwotK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpzZWVkLCBGSVBTX1JBTkRf U0laRV9UIHNlZWRsZW4pCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9f TE9DS19SQU5EKTsKLSsJcmV0ID0gZmlwc19zZXRfcHJuZ19zZWVkKCZzY3R4LCBzZWVkLCBzZWVk bGVuKTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0 OwotKwl9Ci0rCi0rCi0raW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIEZJ UFNfUkFORF9TSVpFX1QgY291bnQpCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhD UllQVE9fTE9DS19SQU5EKTsKLSsJcmV0ID0gZmlwc19yYW5kKCZzY3R4LCBvdXQsIGNvdW50KTsK LSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9 Ci0rCi0raW50IEZJUFNfcmFuZF9zdGF0dXModm9pZCkKLSsJewotKwlpbnQgcmV0OwotKwlDUllQ VE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXQgPSBzY3R4LnNlZWRlZDsKLSsJQ1JZ UFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0r dm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCkKLSsJewotKwlDUllQVE9fd19sb2NrKENSWVBUT19M T0NLX1JBTkQpOwotKwlmaXBzX3JhbmRfcHJuZ19yZXNldCgmc2N0eCk7Ci0rCUNSWVBUT193X3Vu bG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJfQotKwotK3N0YXRpYyB2b2lkIGZpcHNfZG9fcmFu ZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbikKLSsJewot KwlGSVBTX3JhbmRfc2VlZChzZWVkLCBzZWVkbGVuKTsKLSsJfQotKwotK3N0YXRpYyB2b2lkIGZp cHNfZG9fcmFuZF9hZGQoY29uc3Qgdm9pZCAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVkbGVu LAotKwkJCQkJZG91YmxlIGFkZF9lbnRyb3B5KQotKwl7Ci0rCUZJUFNfcmFuZF9zZWVkKHNlZWQs IHNlZWRsZW4pOwotKwl9Ci0rCi0rc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfZmlwc19t ZXRoPQotKyAgICB7Ci0rICAgIGZpcHNfZG9fcmFuZF9zZWVkLAotKyAgICBGSVBTX3JhbmRfYnl0 ZXMsCi0rICAgIEZJUFNfcmFuZF9yZXNldCwKLSsgICAgZmlwc19kb19yYW5kX2FkZCwKLSsgICAg RklQU19yYW5kX2J5dGVzLAotKyAgICBGSVBTX3JhbmRfc3RhdHVzCi0rICAgIH07Ci0rCi0rY29u c3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9pZCkKLSt7Ci0rICByZXR1cm4gJnJh bmRfZmlwc19tZXRoOwotK30KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3Ns LTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCi0tLS0gL2Rldi9udWxsCTIwMDkt MDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUyICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9j cnlwdG8vZmlwcy9maXBzX3JhbmQuaAkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIw MAotQEAgLTAsMCArMSw3NyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAy MDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAot KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpZm5k ZWYgSEVBREVSX0ZJUFNfUkFORF9ICi0rI2RlZmluZSBIRUFERVJfRklQU19SQU5EX0gKLSsKLSsj aW5jbHVkZSAiZGVzLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKyNpZmRlZiAgX19j cGx1c3BsdXMKLStleHRlcm4gIkMiIHsKLSsjZW5kaWYKLSsKLStpbnQgRklQU19yYW5kX3NldF9r ZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbik7Ci0r aW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0p OwotK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0la RV9UIG91dGxlbik7Ci0rCi0raW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCk7Ci0rdm9pZCBG SVBTX3JhbmRfcmVzZXQodm9pZCk7Ci0raW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hh ciAqZHQpOwotKwotK2ludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpOwotKwotK2NvbnN0IFJBTkRf TUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpOwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMK LSt9Ci0rI2VuZGlmCi0rI2VuZGlmCi0rI2VuZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwotLS0tIC9kZXYv bnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMJMjAwOS0wOS0zMCAxMzoy NTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMzcxIEBACi0rLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0 OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBv cGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICog ICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK LSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot KyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5k Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwotKwotKwotK3R5cGVkZWYgc3RydWN0Ci0rCXsKLSsJdW5zaWduZWQgY2hhciBEVFsx Nl07Ci0rCXVuc2lnbmVkIGNoYXIgVlsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgUlsxNl07Ci0rCX0g QUVTX1BSTkdfVFY7Ci0rCi0rLyogVGhlIGZvbGxvd2luZyB0ZXN0IHZlY3RvcnMgYXJlIHRha2Vu IGRpcmVjdGx5IGZyb20gdGhlIFJHTlZTIHNwZWMgKi8KLSsKLStzdGF0aWMgdW5zaWduZWQgY2hh ciBhZXNfMTI4X2tleVsxNl0gPQotKwkJezB4ZjMsMHhiMSwweDY2LDB4NmQsMHgxMywweDYwLDB4 NzIsMHg0MiwKLSsJCSAweGVkLDB4MDYsMHgxYywweGFiLDB4YjgsMHhkNCwweDYyLDB4MDJ9Owot KwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTI4X3R2W10gPSB7Ci0rCXsKLSsJCQkJLyogRFQg Ki8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhk NywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGY5fSwKLSsJCQkJLyogViAqLwotKwkJ ezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg1OSww eDUzLDB4MWUsMHhkMSwweDNiLDB4YjAsMHhjMCwweDU1LAotKwkJIDB4ODQsMHg3OSwweDY2LDB4 ODUsMHhjMSwweDJmLDB4NzYsMHg0MX0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4 ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0 YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmF9LAotKwkJCQkvKiBWICovCi0rCQl7MHhjMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDdjLDB4MjIsMHgyYyww eGY0LDB4Y2EsMHg4ZiwweGEyLDB4NGMsCi0rCQkgMHgxYywweDljLDB4YjYsMHg0MSwweGE5LDB4 ZjMsMHgyMiwweDBkfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhlNiwweGIzLDB4 YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhi MCwweGU5LDB4MjIsMHhmYn0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGUwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4OGEsMHhhYSwweDAwLDB4MzksMHg2Niww eDY3LDB4NWIsMHhlNSwKLSsJCSAweDI5LDB4MTQsMHgyOCwweDgxLDB4YTksMHg0ZCwweDRlLDB4 Yzd9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4 MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgy MiwweGZjfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9 LAotKwkJCQkvKiBSICovCi0rCQl7MHg4OCwweGRkLDB4YTQsMHg1NiwweDMwLDB4MjQsMHgyMyww eGU1LAotKwkJIDB4ZjYsMHg5ZCwweGE1LDB4N2UsMHg3YiwweDk1LDB4YzcsMHgzYX0KLSsJfSwK LSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4 ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmR9LAot KwkJCQkvKiBWICovCi0rCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8q IFIgKi8KLSsJCXsweDA1LDB4MjUsMHg5MiwweDQ2LDB4NjEsMHg3OSwweGQyLDB4Y2IsCi0rCQkg MHg3OCwweGM0LDB4MGIsMHgxNCwweDBhLDB4NWEsMHg5YSwweGM4fQotKwl9LAotKwl7Ci0rCQkJ CS8qIERUICovCi0rCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAot KwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjMsMHg3N30sCi0rCQkJCS8qIFYg Ki8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkgMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKLSsJCQkJLyogUiAqLwotKwkJ ezB4MGQsMHhkNSwweGEwLDB4MzYsMHg3YSwweDU5LDB4MjYsMHhiYywKLSsJCSAweDQ4LDB4ZDks MHgzOCwweGJmLDB4ZjAsMHg4NSwweDhmLDB4ZWF9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8K LSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhkNyww eDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMywweDc4fSwKLSsJCQkJLyogViAqLwotKwkJezB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkvKiBSICovCi0rCQl7MHhhZSwweDUz LDB4ODcsMHhlZSwweDhjLDB4ZDksMHgxMiwweGY1LAotKwkJIDB4NzMsMHg1MywweGFlLDB4MDMs MHhmOSwweGQ1LDB4MTMsMHgzM30KLSsJfSwKLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFy IGFlc18xOTJfa2V5WzI0XSA9Ci0rCQl7MHgxNSwweGQ4LDB4NzgsMHgwZCwweDYyLDB4ZDMsMHgy NSwweDZlLAotKwkJIDB4NDQsMHg2NCwweDEwLDB4MTMsMHg2MCwweDJiLDB4YTksMHhiYywKLSsJ CSAweDRhLDB4ZmIsMHhjYSwweGViLDB4NGMsMHg4YiwweDk5LDB4M2J9OwotKwotK3N0YXRpYyBB RVNfUFJOR19UViBhZXNfMTkyX3R2W10gPSB7Ci0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNm LDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2Qs MHhhNCwweDI0LDB4NzgsMHhmMywweDRifSwKLSsJCQkJLyogViAqLwotKwkJezB4ODAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHgxNywweDA3LDB4ZDUsMHgy OCwweDE5LDB4NzksMHgxZSwweGVmLAotKwkJIDB4YTUsMHgwYywweGJmLDB4MjUsMHhlNSwweDU2 LDB4YjQsMHg5M30KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZm LDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQs MHg3OCwweGYzLDB4NGN9LAotKwkJCQkvKiBWICovCi0rCQl7MHhjMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDkyLDB4OGQsMHhiZSwweDA3LDB4ZGQsMHhj NywweDU4LDB4YzAsCi0rCQkgMHg2ZiwweDM1LDB4NDEsMHg5YiwweDE3LDB4YzksMHhiZCwweDli fQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgw LDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMs MHg0ZH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwK LSsJCQkJLyogUiAqLwotKwkJezB4ZDUsMHhkZSwweGY0LDB4NTAsMHhmMywweGI3LDB4MTAsMHg0 ZSwKLSsJCSAweGI4LDB4YzYsMHhmOCwweGNmLDB4ZTIsMHhiMSwweGNhLDB4YTJ9Ci0rCX0sCi0r CXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhi LDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRlfSwKLSsJ CQkJLyogViAqLwotKwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwK LSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBS ICovCi0rCQl7MHhjZSwweDI5LDB4MDgsMHg0MywweGZjLDB4MzQsMHg0MSwweGU3LAotKwkJIDB4 NDcsMHg4ZiwweGIzLDB4NjYsMHgyYiwweDQ2LDB4YjEsMHhiYn0KLSsJfSwKLSsJewotKwkJCQkv KiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJ CSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGZ9LAotKwkJCQkvKiBWICov Ci0rCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsw eGIzLDB4MjYsMHgwZiwweGY1LDB4ZDYsMHhjYSwweGE4LDB4YmYsCi0rCQkgMHg4OSwweGI4LDB4 NWUsMHgyZiwweDIyLDB4NTYsMHg5MiwweDJmfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0r CQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYsMHg5 OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHhjOX0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MDUsMHhlYiww eDE4LDB4NTIsMHgzNCwweDQzLDB4MDAsMHg0MywKLSsJCSAweDZlLDB4NWEsMHhhNSwweGZlLDB4 N2IsMHgzMiwweGM0LDB4MmR9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4 ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhh NCwweDI0LDB4NzgsMHhmMywweGNhfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkvKiBSICovCi0rCQl7MHgxNSwweDNjLDB4ZTgsMHhkMSww eDA0LDB4YzcsMHhhZCwweDUwLAotKwkJIDB4MGIsMHhmMCwweDA3LDB4MTYsMHhlNywweDU2LDB4 N2EsMHhlYX0KLSsJfSwKLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfa2V5 WzMyXSA9Ci0rCQl7MHg2ZCwweDE0LDB4MDYsMHg2YywweGI2LDB4ZDgsMHgyMSwweDJkLAotKwkJ IDB4ODIsMHg4ZCwweGZhLDB4ZjIsMHg3YSwweDAzLDB4YjcsMHg5ZiwKLSsJCSAweDBjLDB4Yzcs MHgzZSwweGNkLDB4NzYsMHhlYiwweGVlLDB4YjUsCi0rCQkgMHgyMSwweDA1LDB4OGMsMHg0Ziww eDMxLDB4N2EsMHg4MCwweGJifTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzI1Nl90dltd ID0gewotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4 YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4 OH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJ CQkJLyogUiAqLwotKwkJezB4MzUsMHhjNywweGVmLDB4YTcsMHg3OCwweDRkLDB4MjksMHhiYywK LSsJCSAweDgyLDB4NzksMHg5OSwweGZiLDB4ZDAsMHhiMywweDNiLDB4NzJ9Ci0rCX0sCi0rCXsK LSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4 ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDg5fSwKLSsJCQkJ LyogViAqLwotKwkJezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJ CSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICov Ci0rCQl7MHg2YywweGY0LDB4NDIsMHg1ZCwweGM3LDB4MDQsMHgxYSwweDQxLAotKwkJIDB4Mjgs MHgyYSwweDc4LDB4YTksMHhiMCwweDEyLDB4YzQsMHg5NX0KLSsJfSwKLSsJewotKwkJCQkvKiBE VCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJCSAw eGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4OGF9LAotKwkJCQkvKiBWICovCi0r CQl7MHhlMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDE2 LDB4OTAsMHhhNCwweGZmLDB4N2IsMHg3ZSwweGI5LDB4MzAsCi0rCQkgMHhkYiwweDY3LDB4NGIs MHhhYywweDJkLDB4ZTEsMHhkMSwweDc1fQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7 MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSww eDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4Yn0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGYwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MTQsMHg2ZiwweGY1 LDB4OTUsMHhhMSwweDQ2LDB4NjUsMHgzMCwKLSsJCSAweGJjLDB4NTcsMHhlMiwweDRhLDB4Zjcs MHg0NSwweDYyLDB4MDV9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4M2Es MHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgzNCww eDc0LDB4OGUsMHg5ZSwweDhjfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjgsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg5NiwweGUyLDB4YjQsMHgxZSwweDY2 LDB4NWUsMHgwZiwweGE0LAotKwkJIDB4YzUsMHhjZCwweGEyLDB4MDcsMHhjYywweGI3LDB4OTQs MHg0MH0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMs MHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSww eDlmLDB4MDZ9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLAotKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZX0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDYxLDB4Y2UsMHgxZCwweDZhLDB4NDgsMHg3NSwweDk3 LDB4MjgsCi0rCQkgMHg0YiwweDQxLDB4ZGUsMHgxOCwweDQ0LDB4NGYsMHg1NiwweGVjfQotKwl9 LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMs MHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWYsMHgwN30s Ci0rCQkJCS8qIFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmfSwKLSsJCQkJ LyogUiAqLwotKwkJezB4NTIsMHg4OSwweDU5LDB4NzksMHgyZCwweGFhLDB4MjgsMHhiMywKLSsJ CSAweGIwLDB4OGEsMHgzZSwweDcwLDB4ZmEsMHg3MSwweDU5LDB4ODR9Ci0rCX0sCi0rfTsKLSsK LSsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcoKQotKyAgICB7Ci0rICAgIGFlc18xOTJfdHZbMF0u VlswXSsrOwotKyAgICB9Ci0rCi0rI2RlZmluZSBmaXBzX3JhbmRfdGVzdChrZXksIHR2KSBcCi0r CWRvX3JhbmRfdGVzdChrZXksIHNpemVvZiBrZXksIHR2LCBzaXplb2YodHYpL3NpemVvZihBRVNf UFJOR19UVikpCi0rCi0rc3RhdGljIGludCBkb19yYW5kX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5 LCBpbnQga2V5bGVuLAotKwkJCUFFU19QUk5HX1RWICp0diwgaW50IG50dikKLSsJewotKwl1bnNp Z25lZCBjaGFyIFJbMTZdOwotKwlpbnQgaTsKLSsJaWYgKCFGSVBTX3JhbmRfc2V0X2tleShrZXks IGtleWxlbikpCi0rCQlyZXR1cm4gMDsKLSsJZm9yIChpID0gMDsgaSA8IG50djsgaSsrKQotKwkJ ewotKwkJRklQU19yYW5kX3NlZWQodHZbaV0uViwgMTYpOwotKwkJRklQU19yYW5kX3NldF9kdCh0 dltpXS5EVCk7Ci0rCQlGSVBTX3JhbmRfYnl0ZXMoUiwgMTYpOwotKwkJaWYgKG1lbWNtcChSLCB0 dltpXS5SLCAxNikpCi0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCQot KwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZygpCi0rCXsKLSsJRklQU19yYW5kX3Jlc2V0KCk7Ci0r CWlmICghRklQU19yYW5kX3Rlc3RfbW9kZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQ U19TRUxGVEVTVF9STkcsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJ CX0KLSsJaWYgKCFmaXBzX3JhbmRfdGVzdChhZXNfMTI4X2tleSxhZXNfMTI4X3R2KQotKwkJfHwg IWZpcHNfcmFuZF90ZXN0KGFlc18xOTJfa2V5LCBhZXNfMTkyX3R2KQotKwkJfHwgIWZpcHNfcmFu ZF90ZXN0KGFlc18yNTZfa2V5LCBhZXNfMjU2X3R2KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19G X0ZJUFNfU0VMRlRFU1RfUk5HLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7 Ci0rCQl9Ci0rCUZJUFNfcmFuZF9yZXNldCgpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotKyNlbmRp ZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlw c19yYW5kdGVzdC5jCi0tLS0gL2Rldi9udWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUy ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0 LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMjQ4IEBA Ci0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5j b20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBh biBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlw dHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8g Y29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZy ZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICog dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRp b24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3Qg anVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3 aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRl cm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRz b2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQg YXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRv IGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBF cmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Ig b2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhl IGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4g ZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2th Z2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsg KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlv dW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMn IGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAg YmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYg eW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRo ZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2Rl KSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29m dC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VO RyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK LSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O VFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H IElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0r ICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkg YXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3Qg YmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQg YW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGlu ZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENv cHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoK LSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK LSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0r ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsg Ki8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1 ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlICJlX29zLmgi Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJBTkQgc3VwcG9ydFxuIik7Ci0rICAgIHJl dHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSt0 eXBlZGVmIHN0cnVjdAotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgRFRbMTZdOwotKwl1bnNpZ25lZCBj aGFyIFZbMTZdOwotKwl1bnNpZ25lZCBjaGFyIFJbMTZdOwotKwl9IEFFU19QUk5HX01DVDsKLSsK LStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4X21jdF9rZXlbMTZdID0KLSsJezB4OWYsMHg1 YiwweDUxLDB4MjAsMHgwYiwweGYzLDB4MzQsMHhiNSwKLSsJIDB4ZDgsMHgyYiwweGU4LDB4YzMs MHg3MiwweDU1LDB4YzgsMHg0OH07Ci0rCi0rc3RhdGljIEFFU19QUk5HX01DVCBhZXNfMTI4X21j dF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7MHg2MywweDc2LDB4YmIsMHhlNSwweDI5LDB4MDIs MHhiYSwweDNiLAotKwkgMHg2NywweGM5LDB4MjUsMHhmYSwweDcwLDB4MWYsMHgxMSwweGFjfSwK LSsJCQkvKiBWICovCi0rCXsweDU3LDB4MmMsMHg4ZSwweDc2LDB4ODcsMHgyNiwweDQ3LDB4OTcs Ci0rCSAweDdlLDB4NzQsMHhmYiwweGRkLDB4YzQsMHg5NSwweDAxLDB4ZDF9LAotKwkJCS8qIFIg Ki8KLSsJezB4NDgsMHhlOSwweGJkLDB4MGQsMHgwNiwweGVlLDB4MTgsMHhmYiwKLSsJIDB4ZTQs MHg1NywweDkwLDB4ZDUsMHhjMywweGZjLDB4OWIsMHg3M30KLSt9OwotKwotK3N0YXRpYyB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbWN0X2tleVsyNF0gPQotKwl7MHhiNywweDZjLDB4MzQsMHhkMSww eDA5LDB4NjcsMHhhYiwweDczLAotKwkgMHg0ZCwweDVhLDB4ZDUsMHgzNCwweDk4LDB4MTYsMHgw YiwweDkxLAotKwkgMHhiYywweDM1LDB4NTEsMHgxNiwweDZiLDB4YWUsMHg5MywweDhhfTsKLSsK LStzdGF0aWMgQUVTX1BSTkdfTUNUIGFlc18xOTJfbWN0X3R2ID0gewotKwkJCS8qIERUICovCi0r CXsweDg0LDB4Y2UsMHgyMiwweDdkLDB4OTEsMHg1YSwweGEzLDB4YzksCi0rCSAweDg0LDB4M2Ms MHgwYSwweGIzLDB4YTksMHg2MywweDE1LDB4NTJ9LAotKwkJCS8qIFYgKi8KLSsJezB4YjYsMHhh ZiwweGU2LDB4OGYsMHg5OSwweDllLDB4OTAsMHg2NCwKLSsJIDB4ZGQsMHhjNywweDdhLDB4YzEs MHhiYiwweDkwLDB4M2EsMHg2ZH0sCi0rCQkJLyogUiAqLwotKwl7MHhmYywweDg1LDB4NjAsMHg5 YSwweDI5LDB4NmYsMHhlZiwweDIxLAotKwkgMHhkZCwweDg2LDB4MjAsMHgzMiwweDhhLDB4Mjks MHg2ZiwweDQ3fQotK307Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9tY3Rfa2V5 WzMyXSA9Ci0rCXsweDliLDB4MDUsMHhjOCwweDY4LDB4ZmYsMHg0NywweGY4LDB4M2EsCi0rCSAw eGE2LDB4M2EsMHhhOCwweGNiLDB4NGUsMHg3MSwweGIyLDB4ZTAsCi0rCSAweGI4LDB4N2UsMHhm MSwweDM3LDB4YjYsMHhiNCwweGY2LDB4NmQsCi0rCSAweDg2LDB4MzIsMHhmYywweDFmLDB4NWUs MHgxZCwweDFlLDB4NTB9OwotKwotK3N0YXRpYyBBRVNfUFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYg PSB7Ci0rCQkJLyogRFQgKi8KLSsJezB4MzEsMHg2ZSwweDM1LDB4OWEsMHhiMSwweDQ0LDB4ZjAs MHhlZSwKLSsJIDB4NjIsMHg2ZCwweDA0LDB4NDYsMHhlMCwweGEzLDB4OTIsMHg0Y30sCi0rCQkJ LyogViAqLwotKwl7MHg0ZiwweGNkLDB4YzEsMHg4NywweDgyLDB4MWYsMHg0ZCwweGExLAotKwkg MHgzZSwweDBlLDB4NTYsMHg0NCwweDU5LDB4ZTgsMHg4MywweGNhfSwKLSsJCQkvKiBSICovCi0r CXsweGM4LDB4ODcsMHhjMiwweDYxLDB4NWIsMHhkMCwweGI5LDB4ZTEsCi0rCSAweGU3LDB4ZjMs MHg4YiwweGQ3LDB4NWIsMHhkNSwweGYxLDB4OGR9Ci0rfTsKLSsKLStzdGF0aWMgdm9pZCBkdW1w KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIsaW50IG4pCi0rICAgIHsKLSsgICAgd2hpbGUobi0tID4g MCkKLSsJewotKwlwcmludGYoIiAlMDJ4IiwqYisrKTsKLSsJfQotKyAgICB9Ci0rCi0rc3RhdGlj IHZvaWQgY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsY29uc3QgdW5zaWduZWQg Y2hhciAqZXhwZWN0ZWQsCi0rCQkgICAgaW50IG4pCi0rICAgIHsKLSsgICAgaW50IGk7Ci0rCi0r ICAgIGZvcihpPTAgOyBpIDwgbiA7ICsraSkKLSsJaWYocmVzdWx0W2ldICE9IGV4cGVjdGVkW2ld KQotKwkgICAgewotKwkgICAgcHV0cygiUmFuZG9tIHRlc3QgZmFpbGVkLCBnb3Q6Iik7Ci0rCSAg ICBkdW1wKHJlc3VsdCxuKTsKLSsJICAgIHB1dHMoIlxuICAgICAgICAgICAgICAgZXhwZWN0ZWQ6 Iik7Ci0rCSAgICBkdW1wKGV4cGVjdGVkLG4pOwotKwkgICAgcHV0Y2hhcignXG4nKTsKLSsJICAg IEVYSVQoMSk7Ci0rCSAgICB9Ci0rICAgIH0KLSsKLSsKLStzdGF0aWMgdm9pZCBydW5fdGVzdCh1 bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIEFFU19QUk5HX01DVCAqdHYpCi0rICAgIHsK LSsgICAgdW5zaWduZWQgY2hhciBidWZbMTZdLCBkdFsxNl07Ci0rICAgIGludCBpLCBqOwotKyAg ICBGSVBTX3JhbmRfcmVzZXQoKTsKLSsgICAgRklQU19yYW5kX3Rlc3RfbW9kZSgpOwotKyAgICBG SVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7Ci0rICAgIEZJUFNfcmFuZF9zZWVkKHR2LT5W LCAxNik7Ci0rICAgIG1lbWNweShkdCwgdHYtPkRULCAxNik7Ci0rICAgIGZvciAoaSA9IDA7IGkg PCAxMDAwMDsgaSsrKQotKwl7Ci0rICAgIAlGSVBTX3JhbmRfc2V0X2R0KGR0KTsKLSsJRklQU19y YW5kX2J5dGVzKGJ1ZiwgMTYpOwotKwkvKiBJbmNyZW1lbnQgRFQgKi8KLSsJZm9yIChqID0gMTU7 IGogPj0gMDsgai0tKQotKwkJewotKwkJZHRbal0rKzsKLSsJCWlmIChkdFtqXSkKLSsJCQlicmVh azsKLSsJCX0KLSsJfQotKwotKyAgICBjb21wYXJlKGJ1Zix0di0+UiwgMTYpOwotKyAgICB9Ci0r Ci0raW50IG1haW4oKQotKwl7Ci0rCXJ1bl90ZXN0KGFlc18xMjhfbWN0X2tleSwgMTYsICZhZXNf MTI4X21jdF90dik7Ci0rCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMSBkb25lXG4iKTsKLSsJcnVu X3Rlc3QoYWVzXzE5Ml9tY3Rfa2V5LCAyNCwgJmFlc18xOTJfbWN0X3R2KTsKLSsJcHJpbnRmKCJG SVBTIFBSTkcgdGVzdCAyIGRvbmVcbiIpOwotKwlydW5fdGVzdChhZXNfMjU2X21jdF9rZXksIDMy LCAmYWVzXzI1Nl9tY3RfdHYpOwotKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDMgZG9uZVxuIik7 Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCi0tLS0gL2Rldi9u dWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUyICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCTIwMDktMDktMzAgMTM6MjU6 NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDQzOSBAQAotKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo 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 LgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG5bXSA9Ci0rIlx4MDBceEJCXHhGOFx4MkZc eDA5XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4XHhBQ1x4MkJceDlEXHhBOFx4NzEiCi0rIlx4Rjdc eDM2XHg4RFx4MDdceEVFXHhENFx4MTBceDQzXHhBNFx4NDBceEQ2XHhCNlx4RjBceDc0XHg1NFx4 RjUiCi0rIlx4MUZceEI4XHhERlx4QkFceEFGXHgwM1x4NUNceDAyXHhBQlx4NjFceEVBXHg0OFx4 Q0VceEVCXHg2Rlx4Q0QiCi0rIlx4NDhceDc2XHhFRFx4NTJceDBEXHg2MFx4RTFceEVDXHg0Nlx4 MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCi0rIlx4N0ZceEFGXHhCOFx4RTBceEEzXHhERlx4 QzdceDM3XHg3Mlx4M0VceEU2XHhCNFx4QjdceEQ5XHgzQVx4MjUiCi0rIlx4ODRceEVFXHg2QVx4 NjRceDlEXHgwNlx4MDlceDUzXHg3NFx4ODhceDM0XHhCMlx4NDVceDQ1XHg5OFx4MzkiCi0rIlx4 NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgxRlx4NTJceDdBXHg5QVx4NDFceEY2XHhD MVx4NjgiCi0rIlx4N0ZceEUyXHg1M1x4NzJceDk4XHhDQVx4MkFceDhGXHg1OVx4NDZceEY4XHhF NVx4RkRceDA5XHgxRFx4QkQiCi0rIlx4Q0IiOwotKwotKwotK3N0YXRpYyBpbnQgc2V0cnNha2V5 KFJTQSAqa2V5KQotKyAgICB7Ci0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9 ICJceDExIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZFtdID0KLSsiXHgw MFx4QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4RjJceDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMx XHhDRCIKLSsiXHhGOFx4M0ZceDMxXHgyNVx4MUVceDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4 XHgwMVx4NTdceDk2XHg0MSIKLSsiXHhCMlx4OTRceDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0 XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIKLSsiXHhENlx4ODdceDBEXHhBMlx4QzBceDgy XHhBOVx4MzlceEUzXHg3Rlx4RENceEI4XHgyRVx4QzlceDNFXHhEQSIKLSsiXHhDOVx4N0ZceEYz XHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKLSsi XHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVc eEQyXHgwQSIKLSsiXHg5M1x4OTlceDI2XHhFRFx4NEZceDc0XHhBMVx4M0VceEREXHhGQlx4RTFc eEExXHhDRVx4Q0NceDQ4XHg5NCIKLSsiXHhBRlx4OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0Zc eEU0XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhCMyIKLSsiXHhDMSI7Ci0rCi0rICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9Ci0rIlx4MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4 QjlceEIzXHhDOVx4MDhceDgxXHgwQlx4MTBceEExXHhCNVx4NjAiCi0rIlx4MDFceDk5XHhFQlx4 OUZceDQ0XHhBRVx4RjRceEZEXHhBNFx4OTNceEI4XHgxQVx4OUVceDNEXHg4NFx4RjYiCi0rIlx4 MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURceDFFXHgzQlx4N0VceDI4XHhGQVx4RTdceEFBXHgw NFx4MEEiCi0rIlx4MkRceDVCXHgyNVx4MjFceDc2XHg0NVx4OURceDFGXHgzOVx4NzVceDQxXHhC QVx4MkFceDU4XHhGQlx4NjUiCi0rIlx4OTkiOwotKwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBxW10gPQotKyJceDAwXHhDOVx4N0ZceEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0 XHgxMlx4MzNceEVBXHhBQVx4RDFceEQ5IgotKyJceDM1XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2 XHhCMVx4RDBceDVBXHgwRlx4MjBceDM1XHgwMlx4OEJceDlEIgotKyJceDg2XHg5OFx4NDBceEI0 XHgxNlx4NjZceEI0XHgyRVx4OTJceEVBXHgwRFx4QTNceEI0XHgzMlx4MDRceEI1IgotKyJceENG XHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4QTVceEE0XHg0MVx4RTdceDAwXHhBRlx4NDZc eDE1IgotKyJceDAzIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1wMVtd ID0KLSsiXHg1NFx4NDlceDRDXHhBNlx4M0VceEJBXHgwM1x4MzdceEU0XHhFMlx4NDBceDIzXHhG Q1x4RDZceDlBXHg1QSIKLSsiXHhFQlx4MDdceEREXHhEQ1x4MDFceDgzXHhBNFx4RDBceEFDXHg5 Qlx4NTRceEIwXHg1MVx4RjJceEIxXHgzRSIKLSsiXHhEOVx4NDlceDA5XHg3NVx4RUFceEI3XHg3 NFx4MTRceEZGXHg1OVx4QzFceEY3XHg2OVx4MkVceDlBXHgyRSIKLSsiXHgyMFx4MkJceDM4XHhG Q1x4OTFceDBBXHg0N1x4NDFceDc0XHhBRFx4QzlceDNDXHgxRlx4NjdceEM5XHg4MSI7Ci0rCi0r ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcTFbXSA9Ci0rIlx4NDdceDFFXHgwMlx4 OTBceEZGXHgwQVx4RjBceDc1XHgwM1x4NTFceEI3XHhGOFx4NzhceDg2XHg0Q1x4QTkiCi0rIlx4 NjFceEFEXHhCRFx4M0FceDhBXHg3RVx4OTlceDFDXHg1Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0 Nlx4QTciCi0rIlx4RjlceDgwXHgzRlx4OEZceDZGXHg4QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4 QVx4RTRceDdBXHgyMlx4MEQiCi0rIlx4MUJceDk5XHhBNFx4OTVceDg0XHg5OFx4MDdceEZFXHgz OVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4M0QiOwotKyAgICAKLSsgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaXFtcFtdID0KLSsiXHgwMFx4QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4 MDFceDE5XHg4RFx4MjZceDVCXHhEQlx4QUVceDk0XHgyMyIKLSsiXHhCM1x4ODBceEYyXHg3MVx4 RjdceDM0XHg1M1x4ODhceDUwXHg5M1x4MDdceDdGXHhDRFx4MzlceEUyXHgxMSIKLSsiXHg5Rlx4 QzlceDg2XHgzMlx4MTVceDRGXHg1OFx4ODNceEIxXHg2N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0 RSIKLSsiXHg5RVx4MkVceDBGXHg5Nlx4NTZceEU2XHg5OFx4RUFceDM2XHg2Nlx4RURceEZCXHgy NVx4NzlceDgwXHgzOSIKLSsiXHhGNyI7Ci0rCi0rICAgIGtleS0+biA9IEJOX2JpbjJibihuLCBz aXplb2YobiktMSwga2V5LT5uKTsKLSsgICAga2V5LT5lID0gQk5fYmluMmJuKGUsIHNpemVvZihl KS0xLCBrZXktPmUpOwotKyAgICBrZXktPmQgPSBCTl9iaW4yYm4oZCwgc2l6ZW9mKGQpLTEsIGtl eS0+ZCk7Ci0rICAgIGtleS0+cCA9IEJOX2JpbjJibihwLCBzaXplb2YocCktMSwga2V5LT5wKTsK LSsgICAga2V5LT5xID0gQk5fYmluMmJuKHEsIHNpemVvZihxKS0xLCBrZXktPnEpOwotKyAgICBr ZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwgc2l6ZW9mKGRtcDEpLTEsIGtleS0+ZG1wMSk7Ci0r ICAgIGtleS0+ZG1xMSA9IEJOX2JpbjJibihkbXExLCBzaXplb2YoZG1xMSktMSwga2V5LT5kbXEx KTsKLSsgICAga2V5LT5pcW1wID0gQk5fYmluMmJuKGlxbXAsIHNpemVvZihpcW1wKS0xLCBrZXkt PmlxbXApOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotK3ZvaWQgRklQU19jb3JydXB0X3Jz YSgpCi0rICAgIHsKLSsgICAgblswXSsrOwotKyAgICB9Ci0rCi0rLyogS25vd24gQW5zd2VyIFRl c3QgKEtBVCkgZGF0YSBmb3IgdGhlIGFib3ZlIFJTQSBwcml2YXRlIGtleSBzaWduaW5nCi0rICog a2F0X3Ricy4KLSsgKi8KLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfdGJzW10g PSAiT3BlblNTTCBGSVBTIDE0MC0yIFB1YmxpYyBLZXkgUlNBIEtBVCI7Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMVtdID0gewotKyAgMHgyRCwgMHhBRiwg MHg2RSwgMHhDMiwgMHg5OCwgMHhGQiwgMHg4QSwgMHhBMSwgMHhCOSwgMHg0NiwgMHhEQSwgMHgw RiwKLSsgIDB4MDEsIDB4MUUsIDB4MzcsIDB4OTMsIDB4QzIsIDB4NTUsIDB4MjcsIDB4RTQsIDB4 MUQsIDB4RDIsIDB4OTAsIDB4QkIsCi0rICAweEY0LCAweEJGLCAweDRBLCAweDc0LCAweDM5LCAw eDUxLCAweEJCLCAweEU4LCAweDBDLCAweEI3LCAweEY4LCAweEQzLAotKyAgMHhEMSwgMHhERiwg MHhFNywgMHhCRSwgMHg4MCwgMHgwNSwgMHhDMywgMHhCNSwgMHhDNywgMHg4MywgMHhENSwgMHg0 QywKLSsgIDB4N0YsIDB4NDksIDB4RkIsIDB4M0YsIDB4MjksIDB4OUIsIDB4RTEsIDB4MTIsIDB4 NTEsIDB4NjAsIDB4RDAsIDB4QTcsCi0rICAweDBELCAweEE5LCAweDI4LCAweDU2LCAweDczLCAw eEQ5LCAweDA3LCAweEUzLCAweDVFLCAweDNGLCAweDlCLCAweEY1LAotKyAgMHhCNiwgMHhGMywg MHhGMiwgMHg1RSwgMHg3NCwgMHhDOSwgMHg4MywgMHg4MSwgMHg0NywgMHhGMCwgMHhDNSwgMHg0 NSwKLSsgIDB4MEEsIDB4RTksIDB4OEUsIDB4MzgsIDB4RDcsIDB4MTgsIDB4QzYsIDB4MkEsIDB4 MEYsIDB4RjgsIDB4QjcsIDB4MzEsCi0rICAweEQ2LCAweDU1LCAweEU0LCAweDY2LCAweDc4LCAw eDgxLCAweEQ0LCAweEU2LCAweERCLCAweDlGLCAweEJBLCAweEU4LAotKyAgMHgyMywgMHhCNSwg MHg3RiwgMHhEQywgMHgwOCwgMHhFQSwgMHhENSwgMHgyNiwgMHgxRSwgMHgyMCwgMHgyNSwgMHg4 NCwKLSsgIDB4MjYsIDB4QzYsIDB4NzksIDB4QzksIDB4OUIsIDB4M0QsIDB4N0UsIDB4QTkKLSt9 OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTIyNFtdID0g ewotKyAgMHgzOSwgMHg0QSwgMHg2QSwgMHgyMCwgMHhCQywgMHhFOSwgMHgzMywgMHhFRCwgMHhF RiwgMHhDNSwgMHg1OCwgMHhBNywKLSsgIDB4RkUsIDB4ODEsIDB4QzQsIDB4MzYsIDB4NTAsIDB4 OUEsIDB4MkMsIDB4ODIsIDB4OTgsIDB4MDgsIDB4OTUsIDB4RkEsCi0rICAweEIxLCAweDlFLCAw eEQyLCAweDU1LCAweDYxLCAweDg3LCAweDIxLCAweDU5LCAweDg3LCAweDdCLCAweDFGLCAweDU3 LAotKyAgMHgzMCwgMHg5RCwgMHgwRCwgMHg0QSwgMHgwNiwgMHhFQiwgMHg1MiwgMHgzNywgMHg1 NSwgMHg1NCwgMHgxQywgMHg4OSwKLSsgIDB4ODMsIDB4NzUsIDB4NTksIDB4NjUsIDB4NjQsIDB4 OTAsIDB4MkUsIDB4MTYsIDB4Q0MsIDB4ODYsIDB4MDUsIDB4RUUsCi0rICAweEIxLCAweEU2LCAw eDdCLCAweEJBLCAweDE2LCAweDc1LCAweDBELCAweDBDLCAweDY0LCAweDBCLCAweEFCLCAweDIy LAotKyAgMHgxNSwgMHg3OCwgMHg2QiwgMHg2RiwgMHhBNCwgMHhGQiwgMHg3NywgMHg0MCwgMHg2 NCwgMHg2MiwgMHhEMSwgMHhCNSwKLSsgIDB4MzcsIDB4MUUsIDB4RTAsIDB4M0QsIDB4QTgsIDB4 RjksIDB4RDIsIDB4QkQsIDB4QUEsIDB4MzgsIDB4MjQsIDB4NDksCi0rICAweDU4LCAweEQyLCAw eDc0LCAweDg1LCAweEY0LCAweEI1LCAweDkzLCAweDhFLCAweEY1LCAweDAzLCAweEVBLCAweDJE LAotKyAgMHhDOCwgMHg1MiwgMHhGQSwgMHhDRiwgMHg3RSwgMHgzNSwgMHhCMCwgMHg2QSwgMHhB RiwgMHg5NSwgMHhDMCwgMHgwMCwKLSsgIDB4NTQsIDB4NzYsIDB4M0QsIDB4MEMsIDB4OUMsIDB4 QjIsIDB4RUUsIDB4QzAKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9S U0FfUFNTX1NIQTI1NltdID0gewotKyAgMHg2RCwgMHgzRCwgMHhCRSwgMHg4RiwgMHg2MCwgMHg2 RCwgMHgyNSwgMHgxNCwgMHhGMCwgMHgzMSwgMHhFMywgMHg4OSwKLSsgIDB4MDAsIDB4OTcsIDB4 RkEsIDB4OTksIDB4NzEsIDB4MjgsIDB4RTUsIDB4MTAsIDB4MjUsIDB4OUEsIDB4RjMsIDB4OEYs Ci0rICAweDdCLCAweEM1LCAweEE4LCAweDRBLCAweDc0LCAweDUxLCAweDM2LCAweEUyLCAweDhE LCAweDdELCAweDczLCAweDI4LAotKyAgMHhDMSwgMHg3NywgMHhDNiwgMHgyNywgMHg5NywgMHgw MCwgMHg4QiwgMHgwMCwgMHhBMywgMHg5NiwgMHg3MywgMHg0RSwKLSsgIDB4N0QsIDB4MkUsIDB4 MkMsIDB4MzQsIDB4NjgsIDB4OEMsIDB4OEUsIDB4REYsIDB4OUQsIDB4NDksIDB4NDcsIDB4MDUs Ci0rICAweEFCLCAweEY1LCAweDAxLCAweEQ2LCAweDgxLCAweDQ3LCAweDcwLCAweEY1LCAweDFE LCAweDZELCAweDI2LCAweEJBLAotKyAgMHgyRiwgMHg3QSwgMHg1NCwgMHg1MywgMHg0RSwgMHhF RCwgMHg3MSwgMHhEOSwgMHg1QSwgMHhGMywgMHhEQSwgMHhCNiwKLSsgIDB4MEIsIDB4NDcsIDB4 MzQsIDB4QUYsIDB4OTAsIDB4REMsIDB4QzgsIDB4RDksIDB4NkYsIDB4NTYsIDB4Q0QsIDB4OUYs Ci0rICAweDIxLCAweEI3LCAweDdFLCAweEFELCAweDdDLCAweDJGLCAweDc1LCAweDUwLCAweDQ3 LCAweDEyLCAweEU0LCAweDZELAotKyAgMHg1RiwgMHhCNywgMHgwMSwgMHhERiwgMHhDMywgMHgx MSwgMHg2QywgMHhBOSwgMHg5RSwgMHg0OSwgMHhCOSwgMHhGNiwKLSsgIDB4NzIsIDB4RjQsIDB4 RjYsIDB4RUYsIDB4ODgsIDB4MUUsIDB4MkQsIDB4MUMKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTM4NFtdID0gewotKyAgMHg0MCwgMHhGQiwgMHhB MSwgMHgyMSwgMHhGNCwgMHhCMiwgMHg0MCwgMHg5QSwgMHhCNCwgMHgzMSwgMHhBOCwgMHhGMiwK LSsgIDB4RUMsIDB4MUMsIDB4QzQsIDB4QzgsIDB4N0MsIDB4MjIsIDB4NjUsIDB4OUMsIDB4NTcs IDB4NDUsIDB4Q0QsIDB4NUUsCi0rICAweDg2LCAweDAwLCAweEY3LCAweDI1LCAweDc4LCAweERF LCAweERDLCAweDdBLCAweDcxLCAweDQ0LCAweDlBLCAweENELAotKyAgMHhBQSwgMHgyNSwgMHhG NCwgMHhCMiwgMHhGQywgMHhGMCwgMHg3NSwgMHhEOSwgMHgyRiwgMHg3OCwgMHgyMywgMHg3RiwK LSsgIDB4NkYsIDB4MDIsIDB4RUYsIDB4QzEsIDB4QUYsIDB4QTYsIDB4MjgsIDB4MTYsIDB4MzEs IDB4REMsIDB4NDIsIDB4NkMsCi0rICAweEIyLCAweDQ0LCAweEU1LCAweDRELCAweDY2LCAweEEy LCAweEU2LCAweDcxLCAweEYzLCAweEFDLCAweDRGLCAweEZCLAotKyAgMHg5MSwgMHhDQSwgMHhG NSwgMHg3MCwgMHhFRiwgMHg2QiwgMHg5RCwgMHhBNCwgMHhFRiwgMHhEOSwgMHgzRCwgMHgyRiwK LSsgIDB4M0EsIDB4QkUsIDB4ODksIDB4MzgsIDB4NTksIDB4MDEsIDB4QkEsIDB4REEsIDB4MzIs IDB4QUQsIDB4NDIsIDB4ODksCi0rICAweDk4LCAweDhCLCAweDM5LCAweDQ0LCAweEYwLCAweEZD LCAweDM4LCAweEFDLCAweDg3LCAweDFGLCAweENBLCAweDZGLAotKyAgMHg0OCwgMHhGNiwgMHhB RSwgMHhENywgMHg0NSwgMHhFRSwgMHhBRSwgMHg4OCwgMHgwRSwgMHg2MCwgMHhGNCwgMHg1NSwK LSsgIDB4NDgsIDB4NDQsIDB4RUUsIDB4MUYsIDB4OTAsIDB4MTgsIDB4NEIsIDB4RjEKLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTUxMltdID0gewot KyAgMHgwNywgMHgxRSwgMHhEOCwgMHhENSwgMHgwNSwgMHhFOCwgMHhFNiwgMHhFNiwgMHg1Nywg MHhBRSwgMHg2MywgMHg4QywKLSsgIDB4QzYsIDB4ODMsIDB4QjcsIDB4QTAsIDB4NTksIDB4QkIs IDB4RjIsIDB4QzYsIDB4OEYsIDB4MTIsIDB4NTMsIDB4OUEsCi0rICAweDlCLCAweDU0LCAweDlF LCAweEIzLCAweEMxLCAweDFELCAweDIzLCAweDRELCAweDUxLCAweEVELCAweDlFLCAweERELAot KyAgMHg0QiwgMHhGMywgMHg0NiwgMHg5QiwgMHg2QiwgMHhGNiwgMHg3QywgMHgyNCwgMHg2MCwg MHg3OSwgMHgyMywgMHgzOSwKLSsgIDB4MDEsIDB4MUMsIDB4NTEsIDB4Q0IsIDB4RDgsIDB4RTks IDB4OUEsIDB4MDEsIDB4NjcsIDB4NUYsIDB4RkUsIDB4RDcsCi0rICAweDdDLCAweEUzLCAweDdG LCAweEVELCAweERCLCAweDg3LCAweEJCLCAweEYwLCAweDNELCAweDc4LCAweDU1LCAweDYxLAot KyAgMHg1NywgMHhFMywgMHgwRiwgMHhFMywgMHhEMiwgMHg5RCwgMHgwQywgMHgyQSwgMHgyMCwg MHhCMCwgMHg4NSwgMHgxMywKLSsgIDB4QzUsIDB4NDcsIDB4MzQsIDB4MEQsIDB4MzIsIDB4MTUs IDB4QzgsIDB4QUUsIDB4OUEsIDB4NkEsIDB4MzksIDB4NjMsCi0rICAweDJELCAweDYwLCAweEY1 LCAweDRDLCAweERGLCAweDhBLCAweDQ4LCAweDRCLCAweEJGLCAweEY0LCAweEE4LCAweEZFLAot KyAgMHg3NiwgMHhGMiwgMHgzMiwgMHgxQiwgMHg5QywgMHg3QywgMHhDQSwgMHhGRSwgMHg3Riwg MHg4MCwgMHhDMiwgMHg4OCwKLSsgIDB4NUMsIDB4OTcsIDB4NzAsIDB4QjQsIDB4MjYsIDB4Qzks IDB4MTQsIDB4OEIKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff U0hBMVtdID0gewotKyAgMHg3MSwgMHhFRSwgMHgxQSwgMHhDMCwgMHhGRSwgMHgwMSwgMHg5Mywg MHg1NCwgMHg3OSwgMHg1QywgMHhGMiwgMHg0QywKLSsgIDB4NEEsIDB4RkQsIDB4MUEsIDB4MDUs IDB4OEYsIDB4NjQsIDB4QjEsIDB4NkQsIDB4NjEsIDB4MzMsIDB4OEQsIDB4OUIsCi0rICAweEU3 LCAweEZELCAweDYwLCAweEEzLCAweDgzLCAweEI1LCAweEEzLCAweDUxLCAweDU1LCAweDc3LCAw eDkwLCAweENGLAotKyAgMHhEQywgMHgyMiwgMHgzNywgMHg4RSwgMHhEMCwgMHhFMSwgMHhBRSwg MHgwOSwgMHhFMywgMHgzRCwgMHgxRSwgMHhGOCwKLSsgIDB4ODAsIDB4RDEsIDB4OEIsIDB4QzIs IDB4RUMsIDB4MEEsIDB4RDcsIDB4NkIsIDB4ODgsIDB4OEIsIDB4OEIsIDB4QTEsCi0rICAweDIw LCAweDIyLCAweEJFLCAweDU5LCAweDVCLCAweEUwLCAweDIzLCAweDI0LCAweEExLCAweDQ5LCAw eDMwLCAweEJBLAotKyAgMHhBOSwgMHg5RSwgMHhFOCwgMHhCMSwgMHg4QSwgMHg2MiwgMHgxNiwg MHhCRiwgMHg0RSwgMHhDQSwgMHgyRSwgMHg0RSwKLSsgIDB4QkMsIDB4MjksIDB4QTgsIDB4Njcs IDB4MTMsIDB4QjcsIDB4OUYsIDB4MUQsIDB4MDQsIDB4NDQsIDB4RTUsIDB4NUYsCi0rICAweDM1 LCAweDA3LCAweDExLCAweEJDLCAweEVELCAweDE5LCAweDM3LCAweDIxLCAweENGLCAweDIzLCAw eDQ4LCAweDFGLAotKyAgMHg3MiwgMHgwNSwgMHhERSwgMHhFNiwgMHhFOCwgMHg3RiwgMHgzMywg MHg4QSwgMHg3NiwgMHg0QiwgMHgyRiwgMHg5NSwKLSsgIDB4REYsIDB4RjEsIDB4NUYsIDB4ODQs IDB4ODAsIDB4RDksIDB4NDYsIDB4QjQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfU0hBMjI0W10gPSB7Ci0rICAweDYyLCAweEFBLCAweDc5LCAweEE5LCAweDE4 LCAweDBFLCAweDVGLCAweDhDLCAweEJCLCAweEI3LCAweDE1LCAweEY5LAotKyAgMHgyNSwgMHhC QiwgMHhGQSwgMHhENCwgMHgzQSwgMHgzNCwgMHhFRCwgMHg5RSwgMHhBMCwgMHhBOSwgMHgxOCwg MHg4RCwKLSsgIDB4NUIsIDB4NTUsIDB4OUEsIDB4N0UsIDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAs IDB4QzUsIDB4MUEsIDB4QzUsIDB4ODksCi0rICAweDA4LCAweEUyLCAweDFCLCAweEJELCAweDYy LCAweDUwLCAweDE3LCAweDc2LCAweDMwLCAweDJDLCAweDlFLCAweENELAotKyAgMHhBNCwgMHgw MiwgMHhBRCwgMHhCMSwgMHg2RCwgMHg0NCwgMHg2RCwgMHhENSwgMHhDNiwgMHg0NSwgMHg0MSwg MHhFNSwKLSsgIDB4RUUsIDB4MUYsIDB4OEQsIDB4N0UsIDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEs IDB4NUUsIDB4MEIsIDB4QTksIDB4Q0MsCi0rICAweERCLCAweDU5LCAweDU1LCAweDg3LCAweDA5 LCAweDI1LCAweDcwLCAweDg2LCAweDg0LCAweDAyLCAweEM2LCAweDNCLAotKyAgMHgwQiwgMHg0 NCwgMHg0QywgMHg0NiwgMHg5NSwgMHhGNCwgMHhGOCwgMHg1QSwgMHg5MSwgMHgyOCwgMHgzRSwg MHhCMiwKLSsgIDB4NTgsIDB4MkUsIDB4MDYsIDB4NDUsIDB4NDksIDB4RTAsIDB4OTIsIDB4RTIs IDB4QzAsIDB4NjYsIDB4RTYsIDB4MzUsCi0rICAweEQ5LCAweDc5LCAweDdGLCAweDE3LCAweDVF LCAweDAyLCAweDczLCAweDA0LCAweDc3LCAweDgyLCAweEU2LCAweERDLAotKyAgMHg0MCwgMHgy MSwgMHg4OSwgMHg4QiwgMHgzNywgMHgzRSwgMHgxRSwgMHg4RAotK307Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyNTZbXSA9IHsKLSsgIDB4MEQsIDB4NTUsIDB4 RTIsIDB4QUEsIDB4ODEsIDB4REIsIDB4OEUsIDB4ODIsIDB4MDUsIDB4MTcsIDB4QTUsIDB4MjMs Ci0rICAweEU3LCAweDNCLCAweDFELCAweEFGLCAweEZCLCAweDhDLCAweEQwLCAweDgxLCAweDIw LCAweDdCLCAweEFBLCAweDIzLAotKyAgMHg5MiwgMHg4NywgMHg4QywgMHhEMSwgMHg1MywgMHg4 NSwgMHgxNiwgMHhEQywgMHhCRSwgMHhBRCwgMHg2RiwgMHgzNSwKLSsgIDB4OTgsIDB4MkQsIDB4 NjksIDB4ODQsIDB4QkYsIDB4RDksIDB4OEEsIDB4MDEsIDB4MTcsIDB4NTgsIDB4QjIsIDB4NkUs Ci0rICAweDJDLCAweDQ0LCAweDlCLCAweDkwLCAweEYxLCAweEZCLCAweDUxLCAweEU4LCAweDZB LCAweDkwLCAweDJELCAweDE4LAotKyAgMHgwRSwgMHhDMCwgMHg5MCwgMHgxMCwgMHgyNCwgMHhB OSwgMHgxRCwgMHhCMywgMHg1OCwgMHg3QSwgMHg5MSwgMHgzMCwKLSsgIDB4QkUsIDB4MjIsIDB4 QzcsIDB4RDMsIDB4RUMsIDB4QzMsIDB4MDksIDB4NUQsIDB4QkYsIDB4RTIsIDB4ODAsIDB4M0Es Ci0rICAweDdDLCAweDg1LCAweEI0LCAweEJDLCAweEQxLCAweEU5LCAweEYwLCAweDVDLCAweERF LCAweDgxLCAweEE2LCAweDM4LAotKyAgMHhCOCwgMHg0MiwgMHhCQiwgMHg4NiwgMHhDNSwgMHg5 RCwgMHhDRSwgMHg3QywgMHgyQywgMHhFRSwgMHhEMSwgMHhEQSwKLSsgIDB4MjcsIDB4NDgsIDB4 MkIsIDB4RjUsIDB4QUIsIDB4QjksIDB4RjcsIDB4ODAsIDB4RDEsIDB4OTAsIDB4MjcsIDB4OTAs Ci0rICAweEJELCAweDQ0LCAweDk3LCAweDYwLCAweENELCAweDU3LCAweEMwLCAweDdBCi0rfTsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTM4NFtdID0gewotKyAg MHgxRCwgMHhFMywgMHg2QSwgMHhERCwgMHgyNywgMHg0QywgMHhDMCwgMHhBNSwgMHgyNywgMHhF RiwgMHhFNiwgMHgxRiwKLSsgIDB4RDIsIDB4OTEsIDB4NjgsIDB4NTksIDB4MDQsIDB4QUUsIDB4 QkQsIDB4OTksIDB4NjMsIDB4NTYsIDB4NDcsIDB4QzcsCi0rICAweDZGLCAweDIyLCAweDE2LCAw eDQ4LCAweEQwLCAweEY5LCAweDE4LCAweEE5LCAweENBLCAweEZBLCAweDVELCAweDVDLAotKyAg MHhBNywgMHg2NSwgMHg1MiwgMHg4QSwgMHhDOCwgMHg0NCwgMHg3RSwgMHg4NiwgMHg1RCwgMHhB OSwgMHhBNiwgMHg1NSwKLSsgIDB4NjUsIDB4M0UsIDB4RDksIDB4MkQsIDB4MDIsIDB4MzgsIDB4 QTgsIDB4NzksIDB4MjgsIDB4N0YsIDB4QjYsIDB4Q0YsCi0rICAweDgyLCAweERELCAweDdFLCAw eDU1LCAweEUxLCAweEIxLCAweEJDLCAweEUyLCAweDE5LCAweDJCLCAweDMwLCAweEMyLAotKyAg MHgxQiwgMHgyQiwgMHhCMCwgMHg4MiwgMHg0NiwgMHhBQywgMHg0QiwgMHhEMSwgMHhFMiwgMHg3 RCwgMHhFQiwgMHg4QywKLSsgIDB4RkYsIDB4OTUsIDB4RTksIDB4NkEsIDB4MUMsIDB4M0QsIDB4 NEQsIDB4QkYsIDB4OEYsIDB4OEIsIDB4OUMsIDB4Q0QsCi0rICAweEVBLCAweDg1LCAweEVFLCAw eDAwLCAweERDLCAweDFDLCAweEE3LCAweEVCLCAweEQwLCAweDhGLCAweDk5LCAweEYxLAotKyAg MHgxNiwgMHgyOCwgMHgyNCwgMHg2NCwgMHgwNCwgMHgzOSwgMHgyRCwgMHg1OCwgMHgxRSwgMHgz NywgMHhEQywgMHgwNCwKLSsgIDB4QkQsIDB4MzEsIDB4QTIsIDB4MkYsIDB4QjMsIDB4MzUsIDB4 NTYsIDB4QkYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hB NTEyW10gPSB7Ci0rICAweDY5LCAweDUyLCAweDFCLCAweDUxLCAweDVFLCAweDA2LCAweENBLCAw eDlCLCAweDE2LCAweDUxLCAweDVELCAweENGLAotKyAgMHg0OSwgMHgyNSwgMHg0QSwgMHhBMSwg MHg2QSwgMHg3NywgMHg0QywgMHgzNiwgMHg0MCwgMHhGOCwgMHhCMiwgMHg5QSwKLSsgIDB4MTUs IDB4RUEsIDB4NUMsIDB4RTUsIDB4RTYsIDB4ODIsIDB4RTAsIDB4ODYsIDB4ODIsIDB4NkIsIDB4 MzIsIDB4RjEsCi0rICAweDA0LCAweEMxLCAweDVBLCAweDFBLCAweEVELCAweDFFLCAweDlBLCAw eEI2LCAweDRDLCAweDU0LCAweDlGLCAweEQ4LAotKyAgMHg4RCwgMHhDQywgMHhBQywgMHg4QSwg MHhCQiwgMHg5QywgMHg4MiwgMHgzRiwgMHhBNiwgMHg1MywgMHg2MiwgMHhCNSwKLSsgIDB4ODAs IDB4RTIsIDB4QkMsIDB4REQsIDB4NjcsIDB4MkIsIDB4RDksIDB4M0YsIDB4RTQsIDB4NzUsIDB4 OTIsIDB4NkIsCi0rICAweEFGLCAweDYyLCAweDdDLCAweDUyLCAweEYwLCAweEVFLCAweDMzLCAw eERGLCAweDFCLCAweDFELCAweDQ3LCAweEU2LAotKyAgMHg1OSwgMHg1NiwgMHhBNSwgMHhCOSwg MHg1QywgMHhFNiwgMHg3NywgMHg3OCwgMHgxNiwgMHg2MywgMHg4NCwgMHgwNSwKLSsgIDB4NkYs IDB4MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4RjcsIDB4N0YsIDB4QjIsIDB4NjQsIDB4NzEsIDB4 RTAsIDB4MkQsCi0rICAweDNFLCAweDYyLCAweENFLCAweEI1LCAweDNGLCAweDg4LCAweERGLCAw eDJELCAweEFCLCAweDk4LCAweDY1LCAweDkxLAotKyAgMHhERiwgMHg3MCwgMHgxNCwgMHhBNSwg MHgzRiwgMHgzNiwgMHhBQiwgMHg4NAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIga2F0X1JTQV9YOTMxX1NIQTFbXSA9IHsKLSsgIDB4ODYsIDB4QjQsIDB4MTgsIDB4QkEsIDB4 RDEsIDB4ODAsIDB4QjYsIDB4N0MsIDB4NDIsIDB4NDUsIDB4NEQsIDB4REYsCi0rICAweEU5LCAw eDJELCAweEUxLCAweDgzLCAweDVGLCAweEI1LCAweDJGLCAweEM5LCAweENELCAweEM0LCAweEIy LCAweDc1LAotKyAgMHg4MCwgMHhBNCwgMHhGMSwgMHg0QSwgMHhFNywgMHg4MywgMHgxMiwgMHgx RSwgMHgxRSwgMHgxNCwgMHhCOCwgMHhBQywKLSsgIDB4MzUsIDB4RTIsIDB4QUEsIDB4MEIsIDB4 NUMsIDB4RjgsIDB4MzgsIDB4NEQsIDB4MDQsIDB4RUUsIDB4QTksIDB4OTcsCi0rICAweDcwLCAw eEZCLCAweDVFLCAweEU3LCAweEI3LCAweEUzLCAweDYyLCAweDIzLCAweDRCLCAweDM4LCAweEJF LCAweEQ2LAotKyAgMHg1MywgMHgxNSwgMHhGNywgMHhERiwgMHg4NywgMHhCNCwgMHgwRSwgMHhD QywgMHhCMSwgMHgxQSwgMHgxMSwgMHgxOSwKLSsgIDB4RUUsIDB4NTEsIDB4Q0MsIDB4OTIsIDB4 REQsIDB4QkMsIDB4NjMsIDB4MjksIDB4NjMsIDB4MEMsIDB4NTksIDB4RDcsCi0rICAweDZGLCAw eDRDLCAweDNDLCAweDM3LCAweDVCLCAweDM3LCAweDAzLCAweDYxLCAweDdELCAweDI0LCAweDFD LCAweDk5LAotKyAgMHg0OCwgMHhBRiwgMHg4MiwgMHhGRSwgMHgzMiwgMHg0MSwgMHg5QiwgMHhC MiwgMHhEQiwgMHhFQSwgMHhFRCwgMHg3NiwKLSsgIDB4OEUsIDB4NkUsIDB4Q0EsIDB4N0UsIDB4 NEUsIDB4MTQsIDB4QkEsIDB4MzAsIDB4ODQsIDB4MUMsIDB4QjMsIDB4NjcsCi0rICAweEEzLCAw eDI5LCAweDgwLCAweDcwLCAweDU0LCAweDY4LCAweDdELCAweDQ5Ci0rfTsKLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMjU2W10gPSB7Ci0rICAweDdFLCAw eEEyLCAweDc3LCAweEZFLCAweEI4LCAweDU0LCAweDhBLCAweEM3LCAweDdGLCAweDY0LCAweDU0 LCAweDg5LAotKyAgMHhFNSwgMHg1MiwgMHgxNSwgMHg4RSwgMHg1MiwgMHg5NiwgMHg0RSwgMHhB NiwgMHg1OCwgMHg5MiwgMHgxQywgMHhERCwKLSsgIDB4RUEsIDB4QTIsIDB4MkQsIDB4NUMsIDB4 RDEsIDB4NjIsIDB4MDAsIDB4NDksIDB4MDUsIDB4OTUsIDB4NzMsIDB4Q0YsCi0rICAweDE2LCAw eDc2LCAweDY4LCAweEY2LCAweEM2LCAweDVFLCAweDgwLCAweEI4LCAweEI4LCAweDdCLCAweEM4 LCAweDlCLAotKyAgMHhDNiwgMHg1MywgMHg4OCwgMHgyNiwgMHgyMCwgMHg4OCwgMHg3MywgMHhC NiwgMHgxMywgMHhCOCwgMHhGMCwgMHg0QiwKLSsgIDB4MDAsIDB4ODUsIDB4RjMsIDB4REQsIDB4 MDcsIDB4NTAsIDB4RUIsIDB4MjAsIDB4QzQsIDB4MzgsIDB4MEUsIDB4OTgsCi0rICAweEFELCAw eDRFLCAweDQ5LCAweDJDLCAweEQ3LCAweDY1LCAweEE1LCAweDE5LCAweDBFLCAweDU5LCAweDAx LCAweEVDLAotKyAgMHg3RSwgMHg3NSwgMHg4OSwgMHg2OSwgMHgyRSwgMHg2MywgMHg3NiwgMHg4 NSwgMHg0NiwgMHg4RCwgMHhBMCwgMHg4QywKLSsgIDB4MzMsIDB4MUQsIDB4ODIsIDB4OEMsIDB4 MDMsIDB4RUEsIDB4NjksIDB4ODgsIDB4MzUsIDB4QTEsIDB4NDIsIDB4QkQsCi0rICAweDIxLCAw eEVELCAweDhELCAweEJDLCAweEJDLCAweERCLCAweDMwLCAweEZGLCAweDg2LCAweEYwLCAweDVC LCAweERDLAotKyAgMHhFMywgMHhFMiwgMHhFOCwgMHgwQSwgMHgwQSwgMHgyOSwgMHg5NCwgMHg4 MAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTM4 NFtdID0gewotKyAgMHg1QywgMHg3RCwgMHg5NiwgMHgzNSwgMHhFQywgMHg3RSwgMHgxMSwgMHgz OCwgMHhCQiwgMHg3QiwgMHhFQywgMHg3QiwKLSsgIDB4RjIsIDB4ODIsIDB4OEUsIDB4OTksIDB4 QkQsIDB4RUYsIDB4RDgsIDB4QUUsIDB4RDcsIDB4MzksIDB4MzcsIDB4Q0IsCi0rICAweEU2LCAw eDRGLCAweDVFLCAweDBBLCAweDEzLCAweEU0LCAweDJFLCAweDQwLCAweEI5LCAweEJFLCAweDJF LCAweEUzLAotKyAgMHhFRiwgMHg3OCwgMHg4MywgMHgxOCwgMHg0NCwgMHgzNSwgMHg5QywgMHg4 RSwgMHhENywgMHg0QSwgMHg2MywgMHhGNiwKLSsgIDB4NTcsIDB4QzIsIDB4QjAsIDB4MDgsIDB4 NTEsIDB4NzMsIDB4Q0YsIDB4Q0EsIDB4OTksIDB4NjYsIDB4RUUsIDB4MzEsCi0rICAweEQ4LCAw eDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3LCAweDdCLCAweDQxLCAweDFFLCAweDZELCAweDhE LCAweEYxLAotKyAgMHgzRSwgMHg5QywgMHgzNSwgMHg5NSwgMHg1OCwgMHhERCwgMHgyQiwgMHhE NSwgMHhBMCwgMHg2MCwgMHg0MSwgMHg3OSwKLSsgIDB4MjQsIDB4MjIsIDB4RTQsIDB4QjcsIDB4 QkYsIDB4NDcsIDB4NTMsIDB4RjYsIDB4MzQsIDB4RDUsIDB4N0MsIDB4RkYsCi0rICAweDBFLCAw eDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3LCAweEI5LCAweERFLCAweEM1LCAweDEyLCAweDQ0 LCAweDM1LAotKyAgMHhFRiwgMHgwMSwgMHhFNiwgMHg1RSwgMHgzOSwgMHgzMSwgMHgyRCwgMHg3 MSwgMHhBNSwgMHhEQywgMHhDNiwgMHg2RCwKLSsgIDB4RTIsIDB4Q0QsIDB4ODUsIDB4REIsIDB4 NzMsIDB4ODIsIDB4NjUsIDB4MjgKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGthdF9SU0FfWDkzMV9TSEE1MTJbXSA9IHsKLSsgIDB4QTYsIDB4NjUsIDB4QTIsIDB4NzcsIDB4 NEYsIDB4QjMsIDB4ODYsIDB4Q0IsIDB4NjQsIDB4M0EsIDB4QzEsIDB4NjMsCi0rICAweEZDLCAw eEExLCAweEFBLCAweENCLCAweDlCLCAweDc5LCAweERELCAweDRCLCAweEUxLCAweEQ5LCAweERB LCAweEFDLAotKyAgMHhFNywgMHg0NywgMHgwOSwgMHhCMiwgMHgxMSwgMHg0QiwgMHg4QSwgMHhB QSwgMHgwNSwgMHg5RSwgMHg3NywgMHhENywKLSsgIDB4M0EsIDB4QkQsIDB4NUUsIDB4NTMsIDB4 MDksIDB4NEEsIDB4RTYsIDB4MEYsIDB4NUUsIDB4RjksIDB4MTQsIDB4MjgsCi0rICAweEEwLCAw eDk5LCAweDc0LCAweDY0LCAweDcwLCAweDRFLCAweEYyLCAweEUzLCAweEZBLCAweEM3LCAweEY4 LCAweEM1LAotKyAgMHg2RSwgMHgyQiwgMHg3OSwgMHg5NiwgMHgwRCwgMHgwQywgMHhDOCwgMHgx MCwgMHgzNCwgMHg1MywgMHhEMiwgMHhBRiwKLSsgIDB4MTcsIDB4MEUsIDB4RTAsIDB4QkYsIDB4 NzksIDB4RjYsIDB4MDQsIDB4NzIsIDB4MTAsIDB4RTAsIDB4RjYsIDB4RDAsCi0rICAweENFLCAw eDhBLCAweDZGLCAweEExLCAweDk1LCAweDg5LCAweEJGLCAweDU4LCAweDhGLCAweDQ2LCAweDVG LCAweDA5LAotKyAgMHg5RiwgMHgwOSwgMHhDQSwgMHg4NCwgMHgxNSwgMHg4NSwgMHhFMCwgMHhF RCwgMHgwNCwgMHgyRCwgMHhGQiwgMHg3QywKLSsgIDB4MzYsIDB4MzUsIDB4MjEsIDB4MzEsIDB4 QzMsIDB4RkQsIDB4OTIsIDB4NDIsIDB4MTEsIDB4MzAsIDB4NzEsIDB4MUIsCi0rICAweDYwLCAw eDgzLCAweDE4LCAweDg4LCAweEEzLCAweEY1LCAweDU5LCAweEMzCi0rfTsKLSsKLSsKLStpbnQg RklQU19zZWxmdGVzdF9yc2EoKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlSU0EgKmtleTsKLSsJ RVZQX1BLRVkgKnBrID0gTlVMTDsKLSsKLSsJaWYgKChrZXk9UlNBX25ldygpKSA9PSBOVUxMKQot KwkJZ290byBlcnI7Ci0rCXNldHJzYWtleShrZXkpOwotKwlpZiAoKHBrPUVWUF9QS0VZX25ldygp KSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVWUF9QS0VZX2Fzc2lnbl9SU0EocGssIGtl eSk7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXpl b2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTEsIHNpemVvZihrYXRfUlNBX1NIQTEp LAotKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNB IFNIQTEgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hB MjI0LCBzaXplb2Yoa2F0X1JTQV9TSEEyMjQpLAotKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9D VFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBMjI0IFBLQ1MjMSIpKQotKwkJZ290byBl cnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yo a2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfU0hBMjU2 KSwKLSsJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQki UlNBIFNIQTI1NiBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JT QV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1NIQTM4NCksCi0rCQkJCUVWUF9zaGEzODQoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBTSEEzODQgUEtDUyMxIikpCi0rCQln b3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9T SEE1MTIpLAotKwkJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0r CQkJCSJSU0EgU0hBNTEyIFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJ CQlrYXRfUlNBX1BTU19TSEExLCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMSksCi0rCQkJCUVWUF9z aGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTEgUFNTIikpCi0r CQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMs IHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NIQTIyNCwgc2l6ZW9mKGth dF9SU0FfUFNTX1NIQTIyNCksCi0rCQkJCUVWUF9zaGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BB RF9QU1MsCi0rCQkJCSJSU0EgU0hBMjI0IFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAot KwkJCQlrYXRfUlNBX1BTU19TSEEyNTYsIHNpemVvZihrYXRfUlNBX1BTU19TSEEyNTYpLAotKwkJ CQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTI1 NiBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9QU1NfU0hBMzg0 LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMzg0KSwKLSsJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEEzODQgUFNTIikpCi0rCQlnb3RvIGVycjsK LSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRf dGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfUFNTX1NI QTUxMiksCi0rCQkJCUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJ CSJSU0EgU0hBNTEyIFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCi0rCi0rCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCWth dF9SU0FfWDkzMV9TSEExLCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTEpLAotKwkJCUVWUF9zaGEx KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQkiUlNBIFNIQTEgWDkzMSIpKQotKwkJ Z290byBlcnI7Ci0rCS8qIE5COiBTSEEyMjQgbm90IHN1cHBvcnRlZCBpbiBYOS4zMSAqLwotKwlp ZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMp IC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTI1 NiksCi0rCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJT QSBTSEEyNTYgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkz MV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMzg0KSwKLSsJCQlFVlBfc2hhMzg0KCks IEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQkiUlNBIFNIQTM4NCBYOTMxIikpCi0rCQln b3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0X1JTQV9YOTMxX1NIQTUxMiwgc2l6ZW9mKGthdF9S U0FfWDkzMV9TSEE1MTIpLAotKwkJCUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9Y OTMxLAotKwkJCSJSU0EgU0hBNTEyIFg5MzEiKSkKLSsJCWdvdG8gZXJyOwotKwotKwotKwlyZXQg PSAxOwotKwotKwllcnI6Ci0rCWlmIChwaykKLSsJCUVWUF9QS0VZX2ZyZWUocGspOwotKwllbHNl IGlmIChrZXkpCi0rCQlSU0FfZnJlZShrZXkpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2Vu ZGlmIC8qIGRlZiBPUEVOU1NMX0ZJUFMgKi8KLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMKLS0tLSAvZGV2L251bGwJMjAw OS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAw MDAgKzAyMDAKLUBAIC0wLDAgKzEsMjgxIEBACi0rLyogY3J5cHRvL3JzYS9yc2FfZ2VuLmMgKi8K LSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNv bSkKLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFu IFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0 c29mdC5jb20pLgotKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBj b25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJl ZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKLSsgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlv biwgYmUgaXQgdGhlIFJDNCwgUlNBLAotKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBq dXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdp dGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVy bXMKLSsgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNv ZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBh cyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8g YmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVy aWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBv ZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUg Zm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBk b2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2Fn ZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAq ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91 bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSsgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycg Y2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBi ZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5 b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhl cmVvZikgZnJvbSAKLSsgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUp IHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0 LmNvbSkiCi0rICogCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5H IGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQot KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCi0rICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUwotKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsg KiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBh dmFpbGFibGUgdmVyc2lvbiBvcgotKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBi ZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBh bmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5n IHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8dGltZS5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv cnNhLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsKLStleHRlcm4gaW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKTsKLSsjZW5kaWYKLSsKLSsv KiBYOS4zMSBSU0Ega2V5IGRlcml2YXRpb24gYW5kIGdlbmVyYXRpb24gKi8KLSsKLStpbnQgUlNB X1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0g KnExLCBCSUdOVU0gKnEyLAotKwkJCWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhw MiwgY29uc3QgQklHTlVNICpYcCwKLSsJCQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVN ICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCi0rCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAq Y2IpCi0rCXsKLSsJQklHTlVNICpyMD1OVUxMLCpyMT1OVUxMLCpyMj1OVUxMLCpyMz1OVUxMOwot KwlCTl9DVFggKmN0eD1OVUxMLCpjdHgyPU5VTEw7Ci0rCi0rCWlmICghcnNhKSAKLSsJCWdvdG8g ZXJyOwotKwotKwljdHggPSBCTl9DVFhfbmV3KCk7Ci0rCWlmICghY3R4KSAKLSsJCWdvdG8gZXJy OwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsKLSsJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXIx ID0gQk5fQ1RYX2dldChjdHgpOwotKwlyMiA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjMgPSBCTl9D VFhfZ2V0KGN0eCk7Ci0rCi0rCWlmIChyMyA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICgh cnNhLT5lKQotKwkJewotKwkJcnNhLT5lID0gQk5fZHVwKGUpOwotKwkJaWYgKCFyc2EtPmUpCi0r CQkJZ290byBlcnI7Ci0rCQl9Ci0rCWVsc2UKLSsJCWUgPSByc2EtPmU7Ci0rCi0rCS8qIElmIG5v dCBhbGwgcGFyYW1ldGVycyBwcmVzZW50IG9ubHkgY2FsY3VsYXRlIHdoYXQgd2UgY2FuLgotKwkg KiBUaGlzIGFsbG93cyB0ZXN0IHByb2dyYW1zIHRvIG91dHB1dCBzZWxlY3RpdmUgcGFyYW1ldGVy cy4KLSsJICovCi0rCi0rCWlmIChYcCAmJiAhcnNhLT5wKQotKwkJewotKwkJcnNhLT5wID0gQk5f bmV3KCk7Ci0rCQlpZiAoIXJzYS0+cCkKLSsJCQlnb3RvIGVycjsKLSsKLSsJCWlmICghQk5fWDkz MV9kZXJpdmVfcHJpbWVfZXgocnNhLT5wLCBwMSwgcDIsCi0rCQkJCQlYcCwgWHAxLCBYcDIsIGUs IGN0eCwgY2IpKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoWHEgJiYgIXJzYS0+cSkK LSsJCXsKLSsJCXJzYS0+cSA9IEJOX25ldygpOwotKwkJaWYgKCFyc2EtPnEpCi0rCQkJZ290byBl cnI7Ci0rCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cSwgcTEsIHEyLAotKwkJ CQkJWHEsIFhxMSwgWHEyLCBlLCBjdHgsIGNiKSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJ aWYgKCFyc2EtPnAgfHwgIXJzYS0+cSkKLSsJCXsKLSsJCUJOX0NUWF9lbmQoY3R4KTsKLSsJCUJO X0NUWF9mcmVlKGN0eCk7Ci0rCQlyZXR1cm4gMjsKLSsJCX0KLSsKLSsJLyogU2luY2UgYm90aCBw cmltZXMgYXJlIHNldCB3ZSBjYW4gbm93IGNhbGN1bGF0ZSBhbGwgcmVtYWluaW5nIAotKwkgKiBj b21wb25lbnRzLgotKwkgKi8KLSsKLSsJLyogY2FsY3VsYXRlIG4gKi8KLSsJcnNhLT5uPUJOX25l dygpOwotKwlpZiAocnNhLT5uID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFCTl9tdWwo cnNhLT5uLHJzYS0+cCxyc2EtPnEsY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxh dGUgZCAqLwotKwlpZiAoIUJOX3N1YihyMSxyc2EtPnAsQk5fdmFsdWVfb25lKCkpKQotKwkJZ290 byBlcnI7CS8qIHAtMSAqLwotKwlpZiAoIUJOX3N1YihyMixyc2EtPnEsQk5fdmFsdWVfb25lKCkp KQotKwkJZ290byBlcnI7CS8qIHEtMSAqLwotKwlpZiAoIUJOX211bChyMCxyMSxyMixjdHgpKQot KwkJZ290byBlcnI7CS8qIChwLTEpKHEtMSkgKi8KLSsKLSsJaWYgKCFCTl9nY2QocjMsIHIxLCBy MiwgY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX2RpdihyMCwgTlVMTCwgcjAsIHIz LCBjdHgpKQotKwkJZ290byBlcnI7CS8qIExDTSgocC0xKShxLTEpKSAqLwotKwotKwljdHgyID0g Qk5fQ1RYX25ldygpOwotKwlpZiAoIWN0eDIpCi0rCQlnb3RvIGVycjsKLSsKLSsJcnNhLT5kPUJO X21vZF9pbnZlcnNlKE5VTEwscnNhLT5lLHIwLGN0eDIpOwkvKiBkICovCi0rCWlmIChyc2EtPmQg PT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHAtMSkgKi8K LSsJcnNhLT5kbXAxPUJOX25ldygpOwotKwlpZiAocnNhLT5kbXAxID09IE5VTEwpCi0rCQlnb3Rv IGVycjsKLSsJaWYgKCFCTl9tb2QocnNhLT5kbXAxLHJzYS0+ZCxyMSxjdHgpKQotKwkJZ290byBl cnI7Ci0rCi0rCS8qIGNhbGN1bGF0ZSBkIG1vZCAocS0xKSAqLwotKwlyc2EtPmRtcTE9Qk5fbmV3 KCk7Ci0rCWlmIChyc2EtPmRtcTEgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUJOX21v ZChyc2EtPmRtcTEscnNhLT5kLHIyLGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3Vs YXRlIGludmVyc2Ugb2YgcSBtb2QgcCAqLwotKwlyc2EtPmlxbXA9Qk5fbW9kX2ludmVyc2UoTlVM TCxyc2EtPnEscnNhLT5wLGN0eDIpOwotKwotKwllcnI6Ci0rCWlmIChjdHgpCi0rCQl7Ci0rCQlC Tl9DVFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShjdHgpOwotKwkJfQotKwlpZiAoY3R4MikK LSsJCUJOX0NUWF9mcmVlKGN0eDIpOwotKwkvKiBJZiB0aGlzIGlzIHNldCBhbGwgY2FsbHMgc3Vj Y2Vzc2Z1bCAqLwotKwlpZiAocnNhICYmIHJzYS0+aXFtcCAhPSBOVUxMKQotKwkJcmV0dXJuIDE7 Ci0rCi0rCXJldHVybiAwOwotKwotKwl9Ci0rCi0raW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9l eChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQotKwl7 Ci0rCWludCBvayA9IDA7Ci0rCUJJR05VTSAqWHAgPSBOVUxMLCAqWHEgPSBOVUxMOwotKwlCTl9D VFggKmN0eCA9IE5VTEw7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoYml0cyA8IE9Q RU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIo RklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfS0VZX1RPT19TSE9SVCk7Ci0r CSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsKLSsJaWYgKGJpdHMgJiAweGZmKQotKwkgICAgewot KwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9JTlZB TElEX0tFWV9MRU5HVEgpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCi0rCWlmKEZJUFNf c2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkz MV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJl dHVybiAwOwotKwkgICAgfQotKyNlbmRpZgotKwotKwljdHggPSBCTl9DVFhfbmV3KCk7Ci0rCWlm ICghY3R4KQotKwkJZ290byBlcnJvcjsKLSsKLSsJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCVhwID0g Qk5fQ1RYX2dldChjdHgpOwotKwlYcSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJaWYgKCFCTl9YOTMx X2dlbmVyYXRlX1hwcShYcCwgWHEsIGJpdHMsIGN0eCkpCi0rCQlnb3RvIGVycm9yOwotKwotKwly c2EtPnAgPSBCTl9uZXcoKTsKLSsJcnNhLT5xID0gQk5fbmV3KCk7Ci0rCWlmICghcnNhLT5wIHx8 ICFyc2EtPnEpCi0rCQlnb3RvIGVycm9yOwotKwotKwkvKiBHZW5lcmF0ZSB0d28gcHJpbWVzIGZy b20gWHAsIFhxICovCi0rCi0rCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnAs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhwLAotKwkJCQkJZSwgY3R4LCBjYikpCi0rCQlnb3Rv IGVycm9yOwotKwotKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5xLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCBYcSwKLSsJCQkJCWUsIGN0eCwgY2IpKQotKwkJZ290byBlcnJv cjsKLSsKLSsJLyogU2luY2UgcnNhLT5wIGFuZCByc2EtPnEgYXJlIHZhbGlkIHRoaXMgY2FsbCB3 aWxsIGp1c3QgZGVyaXZlCi0rCSAqIHJlbWFpbmluZyBSU0EgY29tcG9uZW50cy4KLSsJICovCi0r Ci0rCWlmICghUlNBX1g5MzFfZGVyaXZlX2V4KHJzYSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwK LSsJCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgZSwgY2IpKQotKwkJZ290 byBlcnJvcjsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKCFmaXBzX2NoZWNrX3JzYShy c2EpKQotKwkgICAgZ290byBlcnJvcjsKLSsjZW5kaWYKLSsKLSsJb2sgPSAxOwotKwotKwllcnJv cjoKLSsJaWYgKGN0eCkKLSsJCXsKLSsJCUJOX0NUWF9lbmQoY3R4KTsKLSsJCUJOX0NUWF9mcmVl KGN0eCk7Ci0rCQl9Ci0rCi0rCWlmIChvaykKLSsJCXJldHVybiAxOwotKwotKwlyZXR1cm4gMDsK LSsKLSsJfQotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Zp cHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1Njow Mi4xNDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2Zp cHNfc2hhMV9zZWxmdGVzdC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1A QCAtMCwwICsxLDk3IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl Ci0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUg PHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9z aGEuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rc3RhdGljIGNoYXIgdGVzdFtdWzYwXT0K LSsgICAgewotKyAgICAiIiwKLSsgICAgImFiYyIsCi0rICAgICJhYmNkYmNkZWNkZWZkZWZnZWZn aGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIKLSsgICAgfTsKLSsKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXRbXVtTSEFfRElHRVNUX0xFTkdUSF09Ci0rICAgIHsK LSsgICAgeyAweGRhLDB4MzksMHhhMywweGVlLDB4NWUsMHg2YiwweDRiLDB4MGQsMHgzMiwweDU1 LAotKyAgICAgIDB4YmYsMHhlZiwweDk1LDB4NjAsMHgxOCwweDkwLDB4YWYsMHhkOCwweDA3LDB4 MDkgfSwKLSsgICAgeyAweGE5LDB4OTksMHgzZSwweDM2LDB4NDcsMHgwNiwweDgxLDB4NmEsMHhi YSwweDNlLAotKyAgICAgIDB4MjUsMHg3MSwweDc4LDB4NTAsMHhjMiwweDZjLDB4OWMsMHhkMCww eGQ4LDB4OWQgfSwKLSsgICAgeyAweDg0LDB4OTgsMHgzZSwweDQ0LDB4MWMsMHgzYiwweGQyLDB4 NmUsMHhiYSwweGFlLAotKyAgICAgIDB4NGEsMHhhMSwweGY5LDB4NTEsMHgyOSwweGU1LDB4ZTUs MHg0NiwweDcwLDB4ZjEgfSwKLSsgICAgfTsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9zaGExKCkK LSsgICAgewotKyAgICB0ZXN0WzJdWzBdKys7Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxmdGVz dF9zaGExKCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsKLSsgICAgZm9yKG49MCA7IG48c2l6ZW9m KHRlc3QpL3NpemVvZih0ZXN0WzBdKSA7ICsrbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIG1kW1NI QV9ESUdFU1RfTEVOR1RIXTsKLSsKLSsJRVZQX0RpZ2VzdCh0ZXN0W25dLHN0cmxlbih0ZXN0W25d KSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCk7Ci0rCWlmKG1lbWNtcChtZCxyZXRbbl0sc2l6 ZW9mIG1kKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hB MSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwl9 Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCAvZGV2L251bGwg b3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jCi0t LS0gL2Rldi9udWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUyICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jCTIwMDkt MDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDE3MyBAQAotKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBB 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 IERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxz dGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNz bGNvbmYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9o bWFjLmg+Ci0rCi0rI2lmbmRlZiBGSVBTQ0FOSVNURVJfTwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpIHsgcmV0dXJuIDA7IH0KLSt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2soKSB7fQotK3Zv aWQgT1BFTlNTTF9jbGVhbnNlKHZvaWQgKnAsc2l6ZV90IGxlbikge30KLSsjZW5kaWYKLSsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQV9DVFggKm1k X2N0eCxTSEFfQ1RYICpvX2N0eCwKLSsJCSAgICAgIGNvbnN0IGNoYXIgKmtleSkKLSsgICAgewot KyAgICBzaXplX3QgbGVuPXN0cmxlbihrZXkpOwotKyAgICBpbnQgaTsKLSsgICAgdW5zaWduZWQg Y2hhciBrZXltZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBhZFtI TUFDX01BWF9NRF9DQkxPQ0tdOwotKwotKyAgICBpZiAobGVuID4gU0hBX0NCTE9DSykKLSsJewot KwlTSEExX0luaXQobWRfY3R4KTsKLSsJU0hBMV9VcGRhdGUobWRfY3R4LGtleSxsZW4pOwotKwlT SEExX0ZpbmFsKGtleW1kLG1kX2N0eCk7Ci0rCWxlbj0yMDsKLSsJfQotKyAgICBlbHNlCi0rCW1l bWNweShrZXltZCxrZXksbGVuKTsKLSsgICAgbWVtc2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19N QVhfTURfQ0JMT0NLLWxlbik7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JM T0NLIDsgaSsrKQotKwlwYWRbaV09MHgzNl5rZXltZFtpXTsKLSsgICAgU0hBMV9Jbml0KG1kX2N0 eCk7Ci0rICAgIFNIQTFfVXBkYXRlKG1kX2N0eCxwYWQsU0hBX0NCTE9DSyk7Ci0rCi0rICAgIGZv cihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQotKwlwYWRbaV09MHg1Y15rZXlt ZFtpXTsKLSsgICAgU0hBMV9Jbml0KG9fY3R4KTsKLSsgICAgU0hBMV9VcGRhdGUob19jdHgscGFk LFNIQV9DQkxPQ0spOwotKyAgICB9Ci0rCi0rc3RhdGljIHZvaWQgaG1hY19maW5hbCh1bnNpZ25l ZCBjaGFyICptZCxTSEFfQ1RYICptZF9jdHgsU0hBX0NUWCAqb19jdHgpCi0rICAgIHsKLSsgICAg dW5zaWduZWQgY2hhciBidWZbMjBdOwotKwotKyAgICBTSEExX0ZpbmFsKGJ1ZixtZF9jdHgpOwot KyAgICBTSEExX1VwZGF0ZShvX2N0eCxidWYsc2l6ZW9mIGJ1Zik7Ci0rICAgIFNIQTFfRmluYWwo bWQsb19jdHgpOwotKyAgICB9Ci0rCi0rI2VuZGlmCi0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hh ciAqKmFyZ3YpCi0rICAgIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIHN0YXRpYyBjaGFy IGtleVtdPSJldGFvbnJpc2hkbGN1cGZtIjsKLSsgICAgaW50IG4sYmluYXJ5PTA7Ci0rCi0rICAg IGlmKGFyZ2MgPCAyKQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJn dlswXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsKLSsgICAgbj0xOwotKyAgICBpZiAoIXN0cmNtcChh cmd2W25dLCItYmluYXJ5IikpCi0rCXsKLSsJbisrOwotKwliaW5hcnk9MTsJLyogZW1pdCBiaW5h cnkgZmluZ2VycHJpbnQuLi4gKi8KLSsJfQotKwotKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikK LSsJewotKwlGSUxFICpmPWZvcGVuKGFyZ3Zbbl0sInJiIik7Ci0rCVNIQV9DVFggbWRfY3R4LG9f Y3R4OwotKwl1bnNpZ25lZCBjaGFyIG1kWzIwXTsKLSsJaW50IGk7Ci0rCi0rCWlmKCFmKQotKwkg ICAgewotKwkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkgICAgZXhpdCgyKTsKLSsJICAgIH0KLSsK LSsJaG1hY19pbml0KCZtZF9jdHgsJm9fY3R4LGtleSk7Ci0rCWZvciggOyA7ICkKLSsJICAgIHsK LSsJICAgIGNoYXIgYnVmWzEwMjRdOwotKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6ZW9m IGJ1ZixmKTsKLSsKLSsJICAgIGlmKGwgPT0gMCkKLSsJCXsKLSsJCWlmKGZlcnJvcihmKSkKLSsJ CSAgICB7Ci0rCQkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkJICAgIGV4aXQoMyk7Ci0rCQkgICAg fQotKwkJZWxzZQotKwkJICAgIGJyZWFrOwotKwkJfQotKwkgICAgU0hBMV9VcGRhdGUoJm1kX2N0 eCxidWYsbCk7Ci0rCSAgICB9Ci0rCWhtYWNfZmluYWwobWQsJm1kX2N0eCwmb19jdHgpOwotKwot KwlpZiAoYmluYXJ5KQotKwkgICAgewotKwkgICAgZndyaXRlKG1kLDIwLDEsc3Rkb3V0KTsKLSsJ ICAgIGJyZWFrOwkvKiAuLi4gZm9yIHNpbmdsZSghKSBmaWxlICovCi0rCSAgICB9Ci0rCi0rCXBy aW50ZigiSE1BQy1TSEExKCVzKT0gIixhcmd2W25dKTsKLSsJZm9yKGk9MCA7IGkgPCAyMCA7ICsr aSkKLSsJICAgIHByaW50ZigiJTAyeCIsbWRbaV0pOwotKwlwcmludGYoIlxuIik7Ci0rCX0KLSsj ZW5kaWYKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsKLWRpZmYgLXVwIC9kZXYvbnVsbCBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCi0tLS0gL2Rl di9udWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUyICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwkyMDA5LTA5LTMwIDEzOjI1 OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw1ODggQEAKLSsvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot KyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSsgKgotKyAqCi0rICogVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGFzIGEgdGVz dCBkcml2ZXIgZm9yIHRoZSBGSVBTLTE0MCB0ZXN0aW5nCi0rICogbGFiIHBlcmZvcm1pbmcgRklQ Uy0xNDAgdmFsaWRhdGlvbi4gIEl0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZQotKyAqIE9w ZW5TU0wgbGlicmFyeSBpdG8gcGVyZm9ybSBhIHZhcmlldHkgb2YgY29tbW9uIGNyeXB0b2dyYXBo aWMKLSsgKiBmdW5jdGlvbnMuICBBIHBvd2VyLXVwIHNlbGYgdGVzdCBpcyBkZW1vbnN0cmF0ZWQg YnkgZGVsaWJlcmF0ZWx5Ci0rICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBleGVjdXRhYmxlIGhh c2gKLSsgKgotKyAqIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIE1hcnF1ZXNzLgotKyAqCi0rICovCi0r I2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlw ZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZGguaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rCi0rCi0rI2lmbmRlZiBPUEVO U1NMX0ZJUFMKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotKyAgICB7Ci0rICAg IHByaW50ZigiTm8gRklQUyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotKyAgICB9Ci0r I2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRs LmgiCi0rCi0rLyogQUVTOiBlbmNyeXB0IGFuZCBkZWNyeXB0IGtub3duIHBsYWludGV4dCwgdmVy aWZ5IHJlc3VsdCBtYXRjaGVzIG9yaWdpbmFsIHBsYWludGV4dAotKyovCi0rc3RhdGljIGludCBG SVBTX2Flc190ZXN0KHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIg cGx0bXBbMTZdOwotKwl1bnNpZ25lZCBjaGFyIGNpdG1wWzE2XTsKLSsJdW5zaWduZWQgY2hhciBr ZXlbMTZdID0geyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNn07Ci0rCXVu c2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XSA9ICJldGFvbnJpc2hkbGN1IjsKLSsJRVZQX0NJUEhF Ul9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwlpZiAoRVZQX0NpcGhl ckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAw KQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgMTYp OwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwg a2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgcGx0 bXAsIGNpdG1wLCAxNik7Ci0rCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgMTYpKQotKwkJ Z290byBlcnI7Ci0rCXJldCA9IDE7Ci0rCWVycjoKLSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgm Y3R4KTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3N0YXRpYyBpbnQgRklQU19kZXMzX3Rlc3Qo dm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciBwbHRtcFs4XTsKLSsJ dW5zaWduZWQgY2hhciBjaXRtcFs4XTsKLSsgICAgCXVuc2lnbmVkIGNoYXIga2V5W10gPSB7IDEs MiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LAotKwkJICAgICAgICAg ICAgICAxOSwyMCwyMSwyMiwyMywyNH07Ci0rICAgIAl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtd ID0geyAnZScsICd0JywgJ2EnLCAnbycsICduJywgJ3InLCAnaScsICdzJyB9OwotKwlFVlBfQ0lQ SEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCWlmIChFVlBfQ2lw aGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8 PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwg OCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVM TCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwg cGx0bXAsIGNpdG1wLCA4KTsKLSsJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCA4KSkKLSsJ CWdvdG8gZXJyOwotKwlyZXQgPSAxOwotKwllcnI6Ci0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAo JmN0eCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsvKgotKyAqIERTQTogZ2VuZXJhdGUga2V5 cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KLSsgKi8KLStzdGF0aWMgaW50IEZJ UFNfZHNhX3Rlc3QoaW50IGJhZCkKLSsgICAgewotKyAgICBEU0EgKmRzYSA9IE5VTEw7Ci0rICAg IEVWUF9QS0VZIHBrOwotKyAgICB1bnNpZ25lZCBjaGFyIGRnc3RbXSA9ICJldGFvbnJpc2hkbGMi OwotKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2MF07Ci0rICAgIHVuc2lnbmVkIGludCBzbGVuOwot KyAgICBpbnQgciA9IDA7Ci0rICAgIEVWUF9NRF9DVFggbWN0eDsKLSsKLSsgICAgRVJSX2NsZWFy X2Vycm9yKCk7Ci0rICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rICAgIGRzYSA9IERTQV9u ZXcoKTsKLSsgICAgaWYgKCFkc2EpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIURTQV9nZW5lcmF0 ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwlnb3Rv IGVuZDsKLSsgICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCi0rCWdvdG8gZW5kOwotKyAg ICBpZiAoYmFkKQotKwkgICAgQk5fYWRkX3dvcmQoZHNhLT5wdWJfa2V5LCAxKTsKLSsKLSsgICAg cGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsgICAgcGsucGtleS5kc2EgPSBkc2E7Ci0rCi0rICAg IGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKLSsJZ290byBl bmQ7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAt IDEpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZz bGVuLCAmcGspKQotKwlnb3RvIGVuZDsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgm bWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9WZXJp ZnlVcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsg ICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOwotKyAgICBlbmQ6 Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rICAgIGlmIChkc2EpCi0rICAJICBE U0FfZnJlZShkc2EpOwotKyAgICBpZiAociAhPSAxKQotKwlyZXR1cm4gMDsKLSsgICAgcmV0dXJu IDE7Ci0rICAgIH0KLSsKLSsvKgotKyAqIFJTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVy aWZ5IGlucHV0IHBsYWludGV4dC4KLSsgKi8KLStzdGF0aWMgaW50IEZJUFNfcnNhX3Rlc3QoaW50 IGJhZCkKLSsgICAgewotKyAgICBSU0EgKmtleTsKLSsgICAgdW5zaWduZWQgY2hhciBpbnB1dF9w dGV4dFtdID0gImV0YW9ucmlzaGRsYyI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07Ci0r ICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAgICBCSUdOVU0gKmJuOwotKyAgICBFVlBfTURfQ1RY IG1jdHg7Ci0rICAgIEVWUF9QS0VZIHBrOwotKyAgICBpbnQgciA9IDA7Ci0rCi0rICAgIEVSUl9j bGVhcl9lcnJvcigpOwotKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKyAgICBrZXkgPSBS U0FfbmV3KCk7Ci0rICAgIGJuID0gQk5fbmV3KCk7Ci0rICAgIGlmICgha2V5IHx8ICFibikKLSsJ cmV0dXJuIDA7Ci0rICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7Ci0rICAgIGlmICghUlNBX2dl bmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVMTCkpCi0rCXJldHVybiAwOwotKyAgICBCTl9m cmVlKGJuKTsKLSsgICAgaWYgKGJhZCkKLSsJICAgIEJOX2FkZF93b3JkKGtleS0+biwgMSk7Ci0r Ci0rICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rICAgIHBrLnBrZXkucnNhID0ga2V5Owot KwotKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCi0r CWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwg c2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2ln bkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQotKwlnb3RvIGVuZDsKLSsKLSsgICAgaWYg KCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCi0rCWdvdG8gZW5k OwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2Yo aW5wdXRfcHRleHQpIC0gMSkpCi0rCWdvdG8gZW5kOwotKyAgICByID0gRVZQX1ZlcmlmeUZpbmFs KCZtY3R4LCBidWYsIHNsZW4sICZwayk7Ci0rICAgIGVuZDoKLSsgICAgRVZQX01EX0NUWF9jbGVh bnVwKCZtY3R4KTsKLSsgICAgaWYgKGtleSkKLSsgIAkgICAgUlNBX2ZyZWUoa2V5KTsKLSsgICAg aWYgKHIgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyog U0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8g a25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQ U19zaGExX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdF U1RfTEVOR1RIXSA9Ci0rICAgICAgICB7IDB4MTEsIDB4ZjEsIDB4OWEsIDB4M2EsIDB4ZWMsIDB4 MWEsIDB4MWUsIDB4OGUsIDB4NjUsIDB4ZDQsIDB4OWEsIDB4MzgsIDB4MGMsIDB4OGIsIDB4MWUs IDB4MmMsIDB4ZTgsIDB4YjMsIDB4YzUsIDB4MTggfTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJb XSA9ICJldGFvbnJpc2hkIjsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xF TkdUSF07Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qo c3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCkpIHJldHVybiAw OwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVy biAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFNIQTI1NjogZ2VuZXJhdGUgaGFz aCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21w dXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGEyNTZfdGVzdCgpCi0r ICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBMjU2X0RJR0VTVF9MRU5HVEhdID0K LSsJezB4ZjUsIDB4NTMsIDB4Y2QsIDB4YjgsIDB4Y2YsIDB4MSwgMHhlZSwgMHgxNywgMHg5Yiwg MHg5MywgMHhjOSwgMHg2OCwgMHhjMCwgMHhlYSwgMHg0MCwgMHg5MSwKLSsJIDB4NiwgMHhlYywg MHg4ZSwgMHgxMSwgMHg5NiwgMHhjOCwgMHg1ZCwgMHgxYywgMHhhZiwgMHg2NCwgMHgyMiwgMHhl NiwgMHg1MCwgMHg0ZiwgMHg0NywgMHg1N307Ci0rICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAi ZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5H VEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0 cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVMTCkpIHJldHVybiAw OwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVy biAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFNIQTUxMjogZ2VuZXJhdGUgaGFz aCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21w dXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGE1MTJfdGVzdCgpCi0r ICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBNTEyX0RJR0VTVF9MRU5HVEhdID0K LSsJezB4OTksIDB4YzksIDB4ZTksIDB4NWIsIDB4ODgsIDB4ZDQsIDB4NzgsIDB4ODgsIDB4ZGYs IDB4ODgsIDB4NWYsIDB4OTQsIDB4NzEsIDB4NjQsIDB4MjgsIDB4Y2EsCi0rCSAweDE2LCAweDFm LCAweDNkLCAweGY0LCAweDFmLCAweGYzLCAweDBmLCAweGM1LCAweDAzLCAweDk5LCAweGIyLCAw eGQwLCAweGU3LCAweDBiLCAweDk0LCAweDRhLAotKwkgMHg0NSwgMHhkMiwgMHg2YywgMHg0Ziwg MHgyMCwgMHgwNiwgMHhlZiwgMHg3MSwgMHhhOSwgMHgyNSwgMHg3ZiwgMHgyNCwgMHhiMSwgMHhk OSwgMHg0MCwgMHgyMiwKLSsJIDB4NDksIDB4NTQsIDB4MTAsIDB4YzIsIDB4MjIsIDB4OWQsIDB4 MjcsIDB4ZmUsIDB4YmQsIDB4ZDYsIDB4ZDYsIDB4ZWIsIDB4MmQsIDB4NDIsIDB4MWQsIDB4YTN9 OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNp Z25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vy cm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxM LCBFVlBfc2hhNTEyKCksIE5VTEwpKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCxkaWdl c3Qsc2l6ZW9mKG1kKSkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAg IH0KLSsKLSsvKiBITUFDLVNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVl IGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8K LStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGExX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVk IGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJT YW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9 Ci0rCXsweDczLCAweGY3LCAweGEwLCAweDQ4LCAweGY4LCAweDk0LCAweGVkLCAweGRkLCAweDBh LCAweGVhLCAweGVhLCAweDU2LCAweDFiLCAweDYxLCAweDJlLCAweDcwLAotKwkgMHhiMiwgMHhm YiwgMHhlYywgMHhjNn07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0la RV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigp OwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTEoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2Yo aXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWws b3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwot Ky8qIEhNQUMtU0hBMjI0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQg Y29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3Rh dGljIGludCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNo YXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1w bGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0r CXsweDc1LCAweDU4LCAweGQ1LCAweGJkLCAweDU1LCAweDZkLCAweDg3LCAweDBmLCAweDc1LCAw eGZmLCAweGJlLCAweDFjLCAweGIyLCAweGYwLCAweDIwLCAweDM1LAotKwkgMHhlNSwgMHg2Miwg MHg0OSwgMHhiNiwgMHg5NCwgMHhiOSwgMHhmYywgMHg2NSwgMHgzNCwgMHgzMywgMHgzYSwgMHgx OX07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVu c2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAo IUhNQUMoRVZQX3NoYTIyNCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQs Jm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogSE1BQy1T SEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRv IGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJ UFNfaG1hY19zaGEyNTZfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9 ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsK LSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsJezB4ZTksIDB4 MTcsIDB4YzEsIDB4N2IsIDB4NGMsIDB4NmIsIDB4NzcsIDB4ZGEsIDB4ZDIsIDB4MzAsIDB4MzYs IDB4MDIsIDB4ZjUsIDB4NzIsIDB4MzMsIDB4ODcsCi0rCSAweDlmLCAweGM2LCAweDZlLCAweDdi LCAweDdlLCAweGE4LCAweGVhLCAweGFhLCAweDlmLCAweGJhLCAweGVlLCAweDUxLCAweGZmLCAw eGRhLCAweDI0LCAweGY0fTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9T SVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9y KCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhMjU2KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6 ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGth dmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0K LSsKLSsvKiBITUFDLVNIQTM4NDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUg YW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwot K3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTM4NF90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25l ZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAi U2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0g PQotKwl7MHhiMiwgMHg5ZCwgMHg0MCwgMHg1OCwgMHgzMiwgMHhjNCwgMHhlMywgMHgzMSwgMHhi NiwgMHg2MywgMHgwOCwgMHgyNiwgMHg5OSwgMHhlZiwgMHgzYiwgMHgxMCwKLSsJIDB4ZTIsIDB4 ZGYsIDB4ZjgsIDB4ZmYsIDB4YzYsIDB4ZTEsIDB4MDMsIDB4MjksIDB4ODEsIDB4MmEsIDB4MWIs IDB4YWMsIDB4YjAsIDB4MDcsIDB4MzksIDB4MDgsCi0rCSAweGYzLCAweDkxLCAweDM1LCAweDEx LCAweDc2LCAweGQ2LCAweDRjLCAweDIwLCAweGZiLCAweDRkLCAweGMzLCAweGYzLCAweGI4LCAw eDliLCAweDg4LCAweDFjfTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9T SVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9y KCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhMzg0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6 ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGth dmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0K LSsKLSsvKiBITUFDLVNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUg YW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwot K3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTUxMl90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25l ZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAi U2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0g PQotKwl7MHhjZCwgMHgzZSwgMHhiOSwgMHg1MSwgMHhiOCwgMHhiYywgMHg3ZiwgMHg5YSwgMHgy MywgMHhhZiwgMHhmMywgMHg3NywgMHg1OSwgMHg4NSwgMHhhOSwgMHhlNiwKLSsJIDB4ZjcsIDB4 ZDEsIDB4NTEsIDB4OTYsIDB4MTcsIDB4ZTAsIDB4OTIsIDB4ZDgsIDB4YTYsIDB4M2IsIDB4YzEs IDB4YWQsIDB4N2UsIDB4MjQsIDB4Y2EsIDB4YjEsCi0rCSAweGQ3LCAweDc5LCAweDBhLCAweGE1 LCAweGVhLCAweDJjLCAweDAyLCAweDU4LCAweDBiLCAweGE2LCAweDUyLCAweDZiLCAweDYxLCAw eDdmLCAweGViLCAweDljLAotKwkgMHg0NywgMHg4NiwgMHg1ZCwgMHg3NCwgMHgyYiwgMHg4OCwg MHhkZiwgMHhlZSwgMHg0NiwgMHg2OSwgMHg5NiwgMHgzZCwgMHhhNiwgMHhkOSwgMHgyYSwgMHg1 M307Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVu c2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAo IUhNQUMoRVZQX3NoYTUxMigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQs Jm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rCi0rLyogREg6 IGdlbmVyYXRlIHNoYXJlZCBwYXJhbWV0ZXJzCi0rKi8KLStzdGF0aWMgaW50IGRoX3Rlc3QoKQot KyAgICB7Ci0rICAgIERIICpkaDsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGRoID0g RklQU19kaF9uZXcoKTsKLSsgICAgaWYgKCFkaCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmICghREhf Z2VuZXJhdGVfcGFyYW1ldGVyc19leChkaCwgMTAyNCwgMiwgTlVMTCkpCi0rCXJldHVybiAwOwot KyAgICBGSVBTX2RoX2ZyZWUoZGgpOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFpl cm9pemUKLSsqLwotK3N0YXRpYyBpbnQgWmVyb2l6ZSgpCi0rICAgIHsKLSsgICAgUlNBICprZXk7 Ci0rICAgIEJJR05VTSAqYm47Ci0rICAgIHVuc2lnbmVkIGNoYXIgdXNlcmtleVsxNl0gPSAKLSsJ eyAweDQ4LCAweDUwLCAweGYwLCAweGEzLCAweDNhLCAweGVkLCAweGQzLCAweGFmLCAweDZlLCAw eDQ3LCAweDdmLCAweDgzLCAweDAyLCAweGIxLCAweDA5LCAweDY4IH07Ci0rICAgIGludCBpLCBu OwotKwotKyAgICBrZXkgPSBGSVBTX3JzYV9uZXcoKTsKLSsgICAgYm4gPSBCTl9uZXcoKTsKLSsg ICAgaWYgKCFrZXkgfHwgIWJuKQotKwlyZXR1cm4gMDsKLSsgICAgQk5fc2V0X3dvcmQoYm4sIDY1 NTM3KTsKLSsgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkK LSsJcmV0dXJuIDA7Ci0rICAgIEJOX2ZyZWUoYm4pOwotKyAgICAKLSsgICAgbiA9IEJOX251bV9i eXRlcyhrZXktPmQpOwotKyAgICBwcmludGYoIiBHZW5lcmF0ZWQgJWQgYnl0ZSBSU0EgcHJpdmF0 ZSBrZXlcbiIsIG4pOwotKyAgICBwcmludGYoIlx0Qk4ga2V5IGJlZm9yZSBvdmVyd3JpdGluZzpc biIpOwotKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7Ci0rICAgIEJOX3JhbmQoa2V5 LT5kLG4qOCwtMSwwKTsKLSsgICAgcHJpbnRmKCJcdEJOIGtleSBhZnRlciBvdmVyd3JpdGluZzpc biIpOwotKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7Ci0rCi0rICAgIHByaW50Zigi XHRjaGFyIGJ1ZmZlciBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOiBcblx0XHQiKTsKLSsgICAgZm9y KGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspIHByaW50ZigiJTAyeCIsIHVzZXJrZXlb aV0pOwotKyAgICAgICAgcHJpbnRmKCJcbiIpOwotKyAgICBSQU5EX2J5dGVzKHVzZXJrZXksIHNp emVvZiB1c2Vya2V5KTsKLSsgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVyIGtleSBhZnRlciBvdmVy d3JpdGluZzogXG5cdFx0Iik7Ci0rICAgIGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsg aSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKLSsgICAgICAgIHByaW50ZigiXG4iKTsK LSsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLStzdGF0aWMgaW50IEVycm9yOwotK2NvbnN0 IGNoYXIgKiBGYWlsKGNvbnN0IGNoYXIgKm1zZykKLSsgICAgewotKyAgICBkb19wcmludF9lcnJv cnMoKTsKLSsgICAgRXJyb3IrKzsKLSsgICAgcmV0dXJuIG1zZzsgCi0rICAgIH0KLSsKLStpbnQg bWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAgewotKwotKyAgICBpbnQgZG9fY29ycnVw dF9yc2Ffa2V5Z2VuID0gMCwgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMDsKLSsgICAgaW50IGJh ZF9yc2EgPSAwLCBiYWRfZHNhID0gMDsKLSsgICAgaW50IGRvX3JuZ19zdGljayA9IDA7Ci0rICAg IGludCBub19leGl0ID0gMDsKLSsKLSsgICAgcHJpbnRmKCJcdEZJUFMtbW9kZSB0ZXN0IGFwcGxp Y2F0aW9uXG5cbiIpOwotKwotKyAgICAvKiBMb2FkIGVudHJvcHkgZnJvbSBleHRlcm5hbCBmaWxl LCBpZiBhbnkgKi8KLSsgICAgUkFORF9sb2FkX2ZpbGUoIi5ybmQiLCAxMDI0KTsKLSsKLSsgICAg aWYgKGFyZ3ZbMV0pIHsKLSsgICAgICAgIC8qIENvcnJ1cHRlZCBLQVQgdGVzdHMgKi8KLSsgICAg ICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJhZXMiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29y cnVwdF9hZXMoKTsKLSsgICAgICAgICAgICBwcmludGYoIkFFUyBlbmNyeXB0aW9uL2RlY3J5cHRp b24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNt cChhcmd2WzFdLCAiZGVzIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZGVzKCk7Ci0r ICAgICAgICAgICAgcHJpbnRmKCJERVMzLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBj b3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFd LCAiZHNhIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhKCk7Ci0rICAgICAgICAg ICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdp dGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJn dlsxXSwgInJzYSIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYSgpOwotKyAgICAg ICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlv biB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21w KGFyZ3ZbMV0sICJyc2FrZXkiKSkgewotKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5l cmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIp OwotKwkgICAgYmFkX3JzYSA9IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsgICAgICAgIH0gZWxz ZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5Z2VuIikpIHsKLSsJICAgIGRvX2NvcnJ1cHRf cnNhX2tleWdlbiA9IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsgICAgICAgICAgICBwcmludGYo IlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0 ZWQga2V5Z2VuLi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAi ZHNha2V5IikpIHsKLSsgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQg c2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKLSsJICAgIGJh ZF9kc2EgPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJj bXAoYXJndlsxXSwgImRzYWtleWdlbiIpKSB7Ci0rCSAgICBkb19jb3JydXB0X2RzYV9rZXlnZW4g PSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdl bmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4u LlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInNoYTEiKSkgewot KyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9zaGExKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJT SEEtMSBoYXNoIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rCX0gZWxzZSBpZiAoIXN0cmNt cChhcmd2WzFdLCAicm5nIikpIHsKLSsJICAgIEZJUFNfY29ycnVwdF9ybmcoKTsKLSsJfSBlbHNl IGlmICghc3RyY21wKGFyZ3ZbMV0sICJybmdzdGljayIpKSB7Ci0rCSAgICBkb19ybmdfc3RpY2sg PSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rCSAgICBwcmludGYoIlJORyB0ZXN0IHdpdGggc3R1 Y2sgY29udGludW91cyB0ZXN0Li4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAg ICAgcHJpbnRmKCJCYWQgYXJndW1lbnQgXCIlc1wiXG4iLCBhcmd2WzFdKTsKLSsgICAgICAgICAg ICBleGl0KDEpOwotKyAgICAgICAgfQotKwlpZiAoIW5vX2V4aXQpIHsKLSsgICAgICAgIAlpZiAo IUZJUFNfbW9kZV9zZXQoMSkpIHsKLSsgCQkgICAgZG9fcHJpbnRfZXJyb3JzKCk7Ci0rICAgICAg ICAJICAgIHByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IGZhaWxlZFxuIik7Ci0rCQkgICAgZXhp dCgxKTsKLSsJCX0KLSsgICAgICAgIAlwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBzdWNjZXNz ZnVsXG4iKTsKLSsgICAgICAgIAlleGl0KDApOwotKwl9Ci0rICAgIH0KLSsKLSsgICAgLyogTm9u LUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCi0rICAgICovCi0rICAgIHByaW50Zigi MS4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOwotKyAg ICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7Ci0rICAgIHByaW50 ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsK LSsgICAgLyogUG93ZXItdXAgc2VsZiB0ZXN0Ci0rICAgICovCi0rICAgIEVSUl9jbGVhcl9lcnJv cigpOwotKyAgICBwcmludGYoIjIuIEF1dG9tYXRpYyBwb3dlci11cCBzZWxmIHRlc3QuLi4iKTsK LSsgICAgaWYgKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwot KyAgICAgICAgcHJpbnRmKEZhaWwoIkZBSUxFRCFcbiIpKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAg ICBwcmludGYoInN1Y2Nlc3NmdWxcbiIpOwotKyAgICBpZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2Vu KQotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKCk7Ci0rICAgIGlmIChkb19j b3JydXB0X3JzYV9rZXlnZW4pCi0rICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYV9rZXlnZW4o KTsKLSsgICAgaWYgKGRvX3JuZ19zdGljaykKLSsgICAgICAgICAgICBGSVBTX3JuZ19zdGljaygp OwotKwotKyAgICAvKiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHBy aW50ZigiMy4gQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJ UFNfYWVzX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0r Ci0rICAgIC8qIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0r ICAgICovCi0rICAgIHByaW50ZigiNC4gUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9u L2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3JzYV90ZXN0KGJhZF9yc2EpID8g InN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogREVTLUNC QyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRmKCI1LiBERVMtRUNC IGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfZGVzM190ZXN0 KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBE U0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uCi0rICAgICovCi0rICAg IHByaW50ZigiNi4gRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbi4u LiIpOwotKyAgICBwcmludGYoIEZJUFNfZHNhX3Rlc3QoYmFkX2RzYSkgPyAic3VjY2Vzc2Z1bFxu IiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBTSEEtMSBoYXNoCi0rICAgICov Ci0rICAgIHByaW50ZigiN2EuIFNIQS0xIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3No YTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsg ICAgLyogU0hBLTI1NiBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2IuIFNIQS0yNTYgaGFz aC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4i IDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFNIQS01MTIgaGFzaAotKyAgICAq LwotKyAgICBwcmludGYoIjdjLiBTSEEtNTEyIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBT X3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwot KwotKyAgICAvKiBITUFDLVNIQS0xIGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3ZC4gSE1B Qy1TSEEtMSBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTFfdGVzdCgpID8g InN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1T SEEtMjI0IGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3ZS4gSE1BQy1TSEEtMjI0IGhhc2gu Li4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKSA/ICJzdWNjZXNzZnVs XG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTI1NiBoYXNo Ci0rICAgICovCi0rICAgIHByaW50ZigiN2YuIEhNQUMtU0hBLTI1NiBoYXNoLi4uIik7Ci0rICAg IHByaW50ZiggRklQU19obWFjX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWls KCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0zODQgaGFzaAotKyAgICAqLwot KyAgICBwcmludGYoIjdnLiBITUFDLVNIQS0zODQgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJ UFNfaG1hY19zaGEzODRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxu IikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtNTEyIGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRm KCI3aC4gSE1BQy1TSEEtNTEyIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hh NTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0r ICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgotKyAgICAqLwotKyAg ICBwcmludGYoIjguIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4u XG4iKTsKLSsgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOwot KyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCi0rCSAg ICA6IEZhaWwoImZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7Ci0rCi0rICAgIC8qIFplcm9pemF0 aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiOS4gWmVyby1pemF0aW9uLi4uXG4iKTsKLSsgICAg cHJpbnRmKCBaZXJvaXplKCkgPyAiXHRzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCi0rCSAgICA6 IEZhaWwoIlx0ZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKLSsKLSsgICAgcHJpbnRmKCJcbkFs bCB0ZXN0cyBjb21wbGV0ZWQgd2l0aCAlZCBlcnJvcnNcbiIsIEVycm9yKTsKLSsgICAgcmV0dXJu IEVycm9yID8gMSA6IDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzX2xvY2wuaAotLS0tIC9kZXYvbnVsbAkyMDA5 LTA5LTIzIDEwOjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2ZpcHNfbG9jbC5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1A QCAtMCwwICsxLDcyIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl Ci0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLStleHRlcm4gIkMiIHsKLSsjZW5k aWYKLSsKLSt2b2lkIGZpcHNfd19sb2NrKHZvaWQpOwotK3ZvaWQgZmlwc193X3VubG9jayh2b2lk KTsKLSt2b2lkIGZpcHNfcl9sb2NrKHZvaWQpOwotK3ZvaWQgZmlwc19yX3VubG9jayh2b2lkKTsK LStpbnQgZmlwc19pc19zdGFydGVkKHZvaWQpOwotK3ZvaWQgZmlwc19zZXRfc3RhcnRlZCh2b2lk KTsKLStpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpOwotK2ludCBmaXBzX3NldF9vd25p bmdfdGhyZWFkKHZvaWQpOwotK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKLStp bnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKHZvaWQpOwotKwotKyNkZWZpbmUgRklQU19NQVhf Q0lQSEVSX1RFU1RfU0laRQkxNgotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0rI2VuZGlm Ci0rI2VuZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v Zmlwcy9NYWtlZmlsZQotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0ODAwMTc1 MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAw OS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsODEgQEAKLSsjCi0r IyBPcGVuU1NML2NyeXB0by9maXBzL01ha2VmaWxlCi0rIwotKwotK0RJUj0JZmlwcwotK1RPUD0J Li4vLi4KLStDQz0JY2MKLStJTkNMVURFUz0KLStDRkxBRz0tZwotK01BS0VGSUxFPQlNYWtlZmls ZQotK0FSPQkJYXIgcgotKwotK0NGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKLSsKLStHRU5F UkFMPU1ha2VmaWxlCi0rVEVTVD1maXBzX3Rlc3Rfc3VpdGUuYyBmaXBzX3JhbmR0ZXN0LmMKLStB UFBTPQotKwotK0xJQj0kKFRPUCkvbGliY3J5cHRvLmEKLStMSUJTUkM9Zmlwc19hZXNfc2VsZnRl c3QuYyBmaXBzX2Rlc19zZWxmdGVzdC5jIGZpcHNfaG1hY19zZWxmdGVzdC5jIGZpcHNfcmFuZF9z ZWxmdGVzdC5jIFwKLSsgICAgZmlwc19yc2Ffc2VsZnRlc3QuYyBmaXBzX3NoYTFfc2VsZnRlc3Qu YyBmaXBzLmMgZmlwc19kc2Ffc2VsZnRlc3QuYyAgZmlwc19yYW5kLmMgXAotKyAgICBmaXBzX3Jz YV94OTMxZy5jCi0rCi0rTElCT0JKPWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNfc2VsZnRl c3QubyBmaXBzX2htYWNfc2VsZnRlc3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCi0rICAgIGZp cHNfcnNhX3NlbGZ0ZXN0Lm8gZmlwc19zaGExX3NlbGZ0ZXN0Lm8gZmlwcy5vIGZpcHNfZHNhX3Nl bGZ0ZXN0Lm8gIGZpcHNfcmFuZC5vIFwKLSsgICAgZmlwc19yc2FfeDkzMWcubwotKwotK1NSQz0g JChMSUJTUkMpIGZpcHNfc3RhbmRhbG9uZV9zaGExLmMKLSsKLStFWEhFQURFUj0gZmlwcy5oIGZp cHNfcmFuZC5oCi0rSEVBREVSPQkkKEVYSEVBREVSKQotKwotK0FMTD0gICAgJChHRU5FUkFMKSAk KFNSQykgJChIRUFERVIpCi0rCi0rdG9wOgotKwkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlw dG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0rCi0rYWxsOglsaWIKLSsKLStsaWI6CSQoTElCT0JK KQotKwkkKEFSKSAkKExJQikgJChMSUJPQkopCi0rCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBO ZXZlciBtaW5kLgotKwlAdG91Y2ggbGliCi0rCi0rZmlsZXM6Ci0rCSQoUEVSTCkgJChUT1ApL3V0 aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0rCi0rbGlua3M6Ci0rCUAkKFBF UkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURF UikKLSsJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQot KwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0rCi0r aW5zdGFsbDoKLSsJQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRv cCBNYWtlZmlsZS4uLgotKwlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhl YWRlcmxpc3QgOyBcCi0rCWRvICBcCi0rCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RB TExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLSsJY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVG SVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLSsJZG9uZTsKLSsKLSt0 YWdzOgotKwljdGFncyAkKFNSQykKLSsKLSt0ZXN0czoKLSsKLStsaW50OgotKwlsaW50IC1ETElO VCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLSsKLStkZXBlbmQ6Ci0rCUBbIC1uICIkKE1BS0VE RVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotKwkkKE1BS0VE RVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChM SUJTUkMpCi0rCi0rZGNsZWFuOgotKwkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRF IFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3 Ci0rCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotKwotK2NsZWFuOgotKwlybSAtZiAq Lm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotKwot KyMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4K LSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vaG1hYy9obWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9obWFjL2htYWMuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDIuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vaG1hYy9obWFjLmMJMjAw OS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC03Nyw2ICs3NywxMyBAQCBpbnQg SE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvCi0gCi0gCWlmIChrZXkgIT0gTlVM TCkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkgJiYgISht ZC0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKQotKwkJJiYgKCEoY3R4LT5tZF9jdHguZmxhZ3Mg JiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkgfHwgIShjdHgtPmlfY3R4LmZs YWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJIHx8ICEoY3R4LT5vX2N0 eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpKQotKwkJCWdvdG8gZXJy OwotKyNlbmRpZgotIAkJcmVzZXQ9MTsKLSAJCWo9RVZQX01EX2Jsb2NrX3NpemUobWQpOwotIAkJ T1BFTlNTTF9hc3NlcnQoaiA8PSAoaW50KXNpemVvZihjdHgtPmtleSkpOwotQEAgLTIwOSwzICsy MTYsMTAgQEAgdW5zaWduZWQgY2hhciAqSE1BQyhjb25zdCBFVlBfTUQgKmV2cF9tZAotIAlyZXR1 cm4gTlVMTDsKLSAJfQotIAotK3ZvaWQgSE1BQ19DVFhfc2V0X2ZsYWdzKEhNQUNfQ1RYICpjdHgs IHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi0rCXsKLSsJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eC0+ aV9jdHgsIGZsYWdzKTsKLSsJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eC0+b19jdHgsIGZsYWdz KTsKLSsJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eC0+bWRfY3R4LCBmbGFncyk7Ci0rCX0KLSsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2htYWMvaG1hYy5oLmZpcHMgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vaG1hYy9obWFjLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9obWFjL2htYWMuaC5maXBzCTIwMDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vaG1hYy9obWFjLmgJMjAwOS0w OS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMDEsNiArMTAxLDcgQEAgdW5zaWdu ZWQgY2hhciAqSE1BQyhjb25zdCBFVlBfTUQgKmV2cF9tZAotIAkJICAgIHVuc2lnbmVkIGludCAq bWRfbGVuKTsKLSBpbnQgSE1BQ19DVFhfY29weShITUFDX0NUWCAqZGN0eCwgSE1BQ19DVFggKnNj dHgpOwotIAotK3ZvaWQgSE1BQ19DVFhfc2V0X2ZsYWdzKEhNQUNfQ1RYICpjdHgsIHVuc2lnbmVk IGxvbmcgZmxhZ3MpOwotIAotICNpZmRlZiAgX19jcGx1c3BsdXMKLSB9Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vTWFrZWZpbGUu ZmlwcwkyMDA5LTA0LTA2IDE2OjMxOjM1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTMvY3J5cHRvL01ha2VmaWxlCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICsw MjAwCi1AQCAtMzQsMTQgKzM0LDE0IEBAIEdFTkVSQUw9TWFrZWZpbGUgUkVBRE1FIGNyeXB0by1s aWIuY29tIGkKLSAKLSBMSUI9ICQoVE9QKS9saWJjcnlwdG8uYQotIFNIQVJFRF9MSUI9IGxpYmNy eXB0byQoU0hMSUJfRVhUKQotLUxJQlNSQz0JY3J5cHRsaWIuYyBtZW0uYyBtZW1fY2xyLmMgbWVt X2RiZy5jIGN2ZXJzaW9uLmMgZXhfZGF0YS5jIGNwdF9lcnIuYyBlYmNkaWMuYyB1aWQuYyBvX3Rp bWUuYyBvX3N0ci5jIG9fZGlyLmMKLS1MSUJPQko9IGNyeXB0bGliLm8gbWVtLm8gbWVtX2RiZy5v IGN2ZXJzaW9uLm8gZXhfZGF0YS5vIGNwdF9lcnIubyBlYmNkaWMubyB1aWQubyBvX3RpbWUubyBv X3N0ci5vIG9fZGlyLm8gJChDUFVJRF9PQkopCi0rTElCU1JDPQljcnlwdGxpYi5jIG1lbS5jIG1l bV9jbHIuYyBtZW1fZGJnLmMgY3ZlcnNpb24uYyBleF9kYXRhLmMgY3B0X2Vyci5jIGViY2RpYy5j IHVpZC5jIG9fdGltZS5jIG9fc3RyLmMgb19kaXIuYyBvX2luaXQuYyBmaXBzX2Vyci5jCi0rTElC T0JKPSBjcnlwdGxpYi5vIG1lbS5vIG1lbV9kYmcubyBjdmVyc2lvbi5vIGV4X2RhdGEubyBjcHRf ZXJyLm8gZWJjZGljLm8gdWlkLm8gb190aW1lLm8gb19zdHIubyBvX2Rpci5vIG9faW5pdC5vIGZp cHNfZXJyLm8gJChDUFVJRF9PQkopCi0gCi0gU1JDPSAkKExJQlNSQykKLSAKLSBFWEhFQURFUj0g Y3J5cHRvLmggb3BlbnNzbHYuaCBvcGVuc3NsY29uZi5oIGViY2RpYy5oIHN5bWhhY2tzLmggXAot IAlvc3NsX3R5cC5oCi0tSEVBREVSPQljcnlwdGxpYi5oIGJ1aWxkaW5mLmggbWQzMl9jb21tb24u aCBvX3RpbWUuaCBvX3N0ci5oIG9fZGlyLmggJChFWEhFQURFUikKLStIRUFERVI9CWNyeXB0bGli LmggYnVpbGRpbmYuaCBmaXBzX2xvY2wuaCBtZDMyX2NvbW1vbi5oIG9fdGltZS5oIG9fc3RyLmgg b19kaXIuaCAkKEVYSEVBREVSKQotIAotIEFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFE RVIpCi0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZGMyL21kYzJkZ3N0 LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKLS0tLSBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcwkyMDA0LTA3LTI1 IDIxOjEwOjQxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L21kYzIvbWRjMmRnc3QuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAg LTYxLDYgKzYxLDExIEBACi0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxvcGVuc3Ns L2Rlcy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL21kYzIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgot KyNlbmRpZgotKwotIAotICN1bmRlZiBjMmwKLSAjZGVmaW5lIGMybChjLGwpCShsID0oKERFU19M T05HKSgqKChjKSsrKSkpICAgICwgXAotQEAgLTc1LDcgKzgwLDcgQEAKLSAJCQkqKChjKSsrKT0o dW5zaWduZWQgY2hhcikoKChsKT4+MjRMKSYweGZmKSkKLSAKLSBzdGF0aWMgdm9pZCBtZGMyX2Jv ZHkoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgbGVuKTsKLS1p bnQgTURDMl9Jbml0KE1EQzJfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNREMyKQot IAl7Ci0gCWMtPm51bT0wOwotIAljLT5wYWRfdHlwZT0xOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vbWRjMi9tZGMyLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0 by9tZGMyL21kYzIuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL21kYzIvbWRjMi5o LmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9tZGMyL21kYzIuaAkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAw MCArMDIwMAotQEAgLTgwLDcgKzgwLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgbWRjMl9jdHhfc3QKLSAJ aW50IHBhZF90eXBlOyAvKiBlaXRoZXIgMSBvciAyLCBkZWZhdWx0IDEgKi8KLSAJfSBNREMyX0NU WDsKLSAKLS0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfTURDMl9Jbml0KE1E QzJfQ1RYICpjKTsKLSsjZW5kaWYKLSBpbnQgTURDMl9Jbml0KE1EQzJfQ1RYICpjKTsKLSBpbnQg TURDMl9VcGRhdGUoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVf dCBsZW4pOwotIGludCBNREMyX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNREMyX0NUWCAqYyk7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL21kMi9tZDJfZGdzdC5jCi0tLS0gb3BlbnNzbC0x LjAuMC1iZXRhMy9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcwkyMDA3LTA4LTMxIDEyOjEyOjM1 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL21kMi9tZDJf ZGdzdC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtNjIsNiArNjIs MTEgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9tZDIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3Nsdi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0gCi0gY29uc3QgY2hhciBNRDJfdmVyc2lvbltdPSJNRDIiIE9QRU5TU0xf VkVSU0lPTl9QVEVYVDsKLSAKLUBAIC0xMTYsNyArMTIxLDcgQEAgY29uc3QgY2hhciAqTUQyX29w dGlvbnModm9pZCkKLSAJCXJldHVybigibWQyKGludCkiKTsKLSAJfQotIAotLWludCBNRDJfSW5p dChNRDJfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNRDIpCi0gCXsKLSAJYy0+bnVt PTA7Ci0gCW1lbXNldChjLT5zdGF0ZSwwLHNpemVvZiBjLT5zdGF0ZSk7Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZDIvbWQyLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9tZDIvbWQyLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZDIvbWQy LmguZmlwcwkyMDA5LTA5LTMwIDEzOjI1OjU3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTMvY3J5cHRvL21kMi9tZDIuaAkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAw MCArMDIwMAotQEAgLTgxLDYgKzgxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTUQyc3RhdGVfc3QKLSAJ fSBNRDJfQ1RYOwotIAotIGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQpOwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9NRDJfSW5pdChNRDJfQ1RYICpjKTsKLSsjZW5kaWYK LSBpbnQgTUQyX0luaXQoTUQyX0NUWCAqYyk7Ci0gaW50IE1EMl9VcGRhdGUoTUQyX0NUWCAqYywg Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IE1EMl9GaW5hbCh1 bnNpZ25lZCBjaGFyICptZCwgTUQyX0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L21kNC9tZDRfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vbWQ0L21kNF9k Z3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjExLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4wLjAtYmV0YTMvY3J5cHRvL21kNC9tZDRfZGdzdC5jCTIwMDktMDktMzAgMTM6MjU6NTgu MDAwMDAwMDAwICswMjAwCi1AQCAtNTksNiArNTksMTEgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4K LSAjaW5jbHVkZSAibWQ0X2xvY2wuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gY29uc3QgY2hhciBNRDRfdmVyc2lv bltdPSJNRDQiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLUBAIC03MCw3ICs3NSw3IEBAIGNv bnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0IiBPUEVOU1NMX1YKLSAjZGVmaW5lIElOSVRfREFU QV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVMCi0gI2RlZmluZSBJTklUX0RBVEFfRCAodW5z aWduZWQgbG9uZykweDEwMzI1NDc2TAotIAotLWludCBNRDRfSW5pdChNRDRfQ1RYICpjKQotK0ZJ UFNfTk9OX0ZJUFNfTURfSW5pdChNRDQpCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7 Ci0gCWMtPkE9SU5JVF9EQVRBX0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0 by9tZDQvbWQ0LmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZDQvbWQ0LmgKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZDQvbWQ0LmguZmlwcwkyMDA5LTA5LTMwIDEz OjI1OjU3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL21k NC9tZDQuaAkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTEwNSw2ICsx MDUsOSBAQCB0eXBlZGVmIHN0cnVjdCBNRDRzdGF0ZV9zdAotIAl1bnNpZ25lZCBpbnQgbnVtOwot IAl9IE1ENF9DVFg7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBwcml2YXRlX01ENF9J bml0KE1ENF9DVFggKmMpOwotKyNlbmRpZgotIGludCBNRDRfSW5pdChNRDRfQ1RYICpjKTsKLSBp bnQgTUQ0X1VwZGF0ZShNRDRfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsK LSBpbnQgTUQ0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDRfQ1RYICpjKTsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMC1iZXRhMy9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTEuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMJMjAw OS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC01OSw2ICs1OSwxMSBAQAotICNp bmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlICJtZDVfbG9jbC5oIgotICNpbmNsdWRlIDxvcGVu c3NsL29wZW5zc2x2Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSBjb25z dCBjaGFyIE1ENV92ZXJzaW9uW109Ik1ENSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAg LTcwLDcgKzc1LDcgQEAgY29uc3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVgot ICNkZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKLSAjZGVmaW5l IElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCi0gCi0taW50IE1ENV9Jbml0 KE1ENV9DVFggKmMpCi0rRklQU19OT05fRklQU19NRF9Jbml0KE1ENSkKLSAJewotIAltZW1zZXQg KGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+QT1JTklUX0RBVEFfQTsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTMvY3J5cHRvL21kNS9tZDUuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5 cHRvL21kNS9tZDUuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL21kNS9tZDUuaC5m aXBzCTIwMDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vbWQ1L21kNS5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICsw MjAwCi1AQCAtMTA1LDYgKzEwNSw5IEBAIHR5cGVkZWYgc3RydWN0IE1ENXN0YXRlX3N0Ci0gCXVu c2lnbmVkIGludCBudW07Ci0gCX0gTUQ1X0NUWDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r aW50IHByaXZhdGVfTUQ1X0luaXQoTUQ1X0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IE1ENV9Jbml0 KE1ENV9DVFggKmMpOwotIGludCBNRDVfVXBkYXRlKE1ENV9DVFggKmMsIGNvbnN0IHZvaWQgKmRh dGEsIHNpemVfdCBsZW4pOwotIGludCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1ENV9D VFggKmMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vbWVtLmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZW0uYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL21lbS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1Nzo0Ny4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZW0uYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAw MDAwMDAwMCArMDIwMAotQEAgLTEwMSw3ICsxMDEsNyBAQCBzdGF0aWMgdm9pZCAoKmZyZWVfbG9j a2VkX2Z1bmMpKHZvaWQgKikgCi0gCi0gLyogbWF5IGJlIGNoYW5nZWQgYXMgbG9uZyBhcyAnYWxs b3dfY3VzdG9taXplX2RlYnVnJyBpcyBzZXQgKi8KLSAvKiBYWFggdXNlIGNvcnJlY3QgZnVuY3Rp b24gcG9pbnRlciB0eXBlcyAqLwotLSNpZmRlZiBDUllQVE9fTURFQlVHCi0rI2lmIGRlZmluZWQo Q1JZUFRPX01ERUJVRykgJiYgIWRlZmluZWQoT1BFTlNTTF9GSVBTKQotIC8qIHVzZSBkZWZhdWx0 IGZ1bmN0aW9ucyBmcm9tIG1lbV9kYmcuYyAqLwotIHN0YXRpYyB2b2lkICgqbWFsbG9jX2RlYnVn X2Z1bmMpKHZvaWQgKixpbnQsY29uc3QgY2hhciAqLGludCxpbnQpCi0gCT0gQ1JZUFRPX2RiZ19t YWxsb2M7Ci1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vb19p bml0LmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3NTIgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9vX2luaXQuYwkyMDA5LTA5LTMwIDEzOjI1 OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw4MCBAQAotKy8qIG9faW5pdC5jICovCi0r LyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9y IHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENv cHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoK LSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK LSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0r ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24g KHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxlX29zLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rCi0rLyogUGVyZm9ybSBhbnkgZXNzZW50aWFsIE9w ZW5TU0wgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucy4KLSsgKiBDdXJyZW50bHkgb25seSBzZXRz IEZJUFMgY2FsbGJhY2tzCi0rICovCi0rCi0rdm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lk KQotKwl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlzdGF0aWMgaW50IGRvbmUgPSAwOwotKwlp ZiAoIWRvbmUpCi0rCQl7Ci0rI2lmZGVmIENSWVBUT19NREVCVUcKLSsJCUNSWVBUT19tYWxsb2Nf ZGVidWdfaW5pdCgpOwotKyNlbmRpZgotKwkJZG9uZSA9IDE7Ci0rCQl9Ci0rI2VuZGlmCi0rCX0K LSsJCQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vb3BlbnNzbGNvbmYu aC5pbi5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL29wZW5zc2xjb25mLmguaW4KLS0t LSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMJMjAwNS0x Mi0xNiAxMTozNzoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2Ny eXB0by9vcGVuc3NsY29uZi5oLmluCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAw Ci1AQCAtMSw1ICsxLDIwIEBACi0gLyogY3J5cHRvL29wZW5zc2xjb25mLmguaW4gKi8KLSAKLSsj aWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECi0rCi0rLyogSW5jbHVkZSBhbnkgc3ltYm9s cyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBleHBsaWNpdGx5IHNldCB0byBlbmFibGUgYSBmZWF0dXJl Ci0rICogdGhhdCBzaG91bGQgYmUgdmlzaWJsZSB0byBtYWtlZGVwZW5kLgotKyAqCi0rICogW091 ciAibWFrZSBkZXBlbmQiIGRvZXNuJ3QgYWN0dWFsbHkgbG9vayBhdCB0aGlzLCB3ZSB1c2UgYWN0 dWFsIGJ1aWxkIHNldHRpbmdzCi0rICogaW5zdGVhZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kg dG8gcmVtb3ZlIHN1YmRpcmVjdG9yaWVzIHdpdGggZGlzYWJsZWQgYWxnb3JpdGhtcy5dCi0rICov Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjZGVmaW5lIE9QRU5TU0xfRklQUwotKyNlbmRp ZgotKwotKyNlbmRpZgotKwotIC8qIEdlbmVyYXRlIDgwMzg2IGNvZGU/ICovCi0gI3VuZGVmIEkz ODZfT05MWQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcGtjczEyL3Ax Ml9jcnQuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMK LS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jLmZpcHMJMjAw OS0wMy0wOSAxNDowODowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICsw MjAwCi1AQCAtNTksNiArNTksMTAgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSAi Y3J5cHRsaWIuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotIAotIHN0 YXRpYyBpbnQgcGtjczEyX2FkZF9iYWcoU1RBQ0tfT0YoUEtDUzEyX1NBRkVCQUcpICoqcGJhZ3Ms IFBLQ1MxMl9TQUZFQkFHICpiYWcpOwotQEAgLTkwLDcgKzk0LDE0IEBAIFBLQ1MxMiAqUEtDUzEy X2NyZWF0ZShjaGFyICpwYXNzLCBjaGFyICoKLSAKLSAJLyogU2V0IGRlZmF1bHRzICovCi0gCWlm ICghbmlkX2NlcnQpCi0rCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJaWYgKEZJUFNfbW9k ZSgpKQotKwkJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBsZURFU19D QkM7Ci0rCQllbHNlCi0rI2VuZGlmCi0gCQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQ0 MEJpdFJDMl9DQkM7Ci0rCQl9Ci0gCWlmICghbmlkX2tleSkKLSAJCW5pZF9rZXkgPSBOSURfcGJl X1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKLSAJaWYgKCFpdGVyKQotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcyBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9yYW5kL21kX3JhbmQuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMJMjAwOS0wMS0wMyAxMDoyNTozMi4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYW5kL21kX3JhbmQuYwkyMDA5 LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTEyNiw2ICsxMjYsMTAgQEAKLSAK LSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRp ZgotKwotIAotICNpZmRlZiBCTl9ERUJVRwotICMgZGVmaW5lIFBSRURJQ1QKLUBAIC0zNDIsNiAr MzQ2LDE0IEBAIHN0YXRpYyBpbnQgc3NsZWF5X3JhbmRfYnl0ZXModW5zaWduZWQgY2gKLSAjZW5k aWYKLSAJaW50IGRvX3N0aXJfcG9vbCA9IDA7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlp ZihGSVBTX21vZGUoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX1NTTEVBWV9SQU5E X0JZVEVTLEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9 Ci0rI2VuZGlmCi0rCi0gI2lmZGVmIFBSRURJQ1QKLSAJaWYgKHJhbmRfcHJlZGljdGFibGUpCi0g CQl7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYW5kL3JhbmRfZXJyLmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYW5kL3JhbmRfZXJyLmMKLS0tLSBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYW5kL3JhbmRfZXJyLmMuZmlwcwkyMDA2LTExLTIxIDIy OjI5OjQxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3Jh bmQvcmFuZF9lcnIuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTcw LDYgKzcwLDEzIEBACi0gCi0gc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0cl9mdW5jdHNb XT0KLSAJewotK3tFUlJfRlVOQyhSQU5EX0ZfRU5HX1JBTkRfR0VUX1JBTkRfTUVUSE9EKSwJIkVO R19SQU5EX0dFVF9SQU5EX01FVEhPRCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19SQU5EKSwJ IkZJUFNfUkFORCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19SQU5EX0JZVEVTKSwJIkZJUFNf UkFORF9CWVRFUyJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19SQU5EX1NFVF9EVCksCSJGSVBT X1JBTkRfU0VUX0RUIn0sCi0re0VSUl9GVU5DKFJBTkRfRl9GSVBTX1NFVF9EVCksCSJGSVBTX1NF VF9EVCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVEKSwJIkZJUFNfU0VU X1BSTkdfU0VFRCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFKSwJIkZJ UFNfU0VUX1RFU1RfTU9ERSJ9LAotIHtFUlJfRlVOQyhSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRI T0QpLAkiUkFORF9nZXRfcmFuZF9tZXRob2QifSwKLSB7RVJSX0ZVTkMoUkFORF9GX1NTTEVBWV9S QU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCi0gezAsTlVMTH0KLUBAIC03Nyw3ICs4 NCwxNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJBTkRfc3RyX2Z1bmN0c1tdCi0gCi0gc3Rh dGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0cl9yZWFzb25zW109Ci0gCXsKLSt7RVJSX1JFQVNP TihSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EKSAgICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCi0re0VS Ul9SRUFTT04oUkFORF9SX05PVF9JTl9URVNUX01PREUpICAgICAsIm5vdCBpbiB0ZXN0IG1vZGUi fSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfTk9fS0VZX1NFVCkgICAgICAgICAgICwibm8ga2V5IHNl dCJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0FTS0lOR19GT1JfVE9PX01VQ0gpLCJwcm5n IGFza2luZyBmb3IgdG9vIG11Y2gifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19FUlJPUikg ICAgICAgICAgICwicHJuZyBlcnJvciJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0tFWUVE KSAgICAgICAgICAgLCJwcm5nIGtleWVkIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX1BSTkdfTk9U X1JFS0VZRUQpICAgICAsInBybmcgbm90IHJla2V5ZWQifSwKLSt7RVJSX1JFQVNPTihSQU5EX1Jf UFJOR19OT1RfUkVTRUVERUQpICAgICwicHJuZyBub3QgcmVzZWVkZWQifSwKLSB7RVJSX1JFQVNP TihSQU5EX1JfUFJOR19OT1RfU0VFREVEKSAgICAgICwiUFJORyBub3Qgc2VlZGVkIn0sCi0re0VS Ul9SRUFTT04oUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkpLCJwcm5nIHNlZWQg bXVzdCBub3QgbWF0Y2gga2V5In0sCi0re0VSUl9SRUFTT04oUkFORF9SX1BSTkdfU1RVQ0spICAg ICAgICAgICAsInBybmcgc3R1Y2sifSwKLSB7MCxOVUxMfQotIAl9OwotIAotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9yYW5kL3JhbmQuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3Jh bmQvcmFuZC5oLmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYW5kL3JhbmQuaAkyMDA5LTA5LTMwIDEzOjI1OjU4 LjAwMDAwMDAwMCArMDIwMAotQEAgLTEyOCwxMSArMTI4LDI4IEBAIHZvaWQgRVJSX2xvYWRfUkFO RF9zdHJpbmdzKHZvaWQpOwotIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgUkFORCBmdW5jdGlvbnMu ICovCi0gCi0gLyogRnVuY3Rpb24gY29kZXMuICovCi0rI2RlZmluZSBSQU5EX0ZfRU5HX1JBTkRf R0VUX1JBTkRfTUVUSE9ECQkJIDEwOAotKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORAkJCQkgMTAz Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMDIKLSsjZGVmaW5lIFJBTkRf Rl9GSVBTX1JBTkRfU0VUX0RUCQkJCSAxMDYKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9EVAkJ CQkgMTA0Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVECQkJIDEwNwotKyNkZWZp bmUgUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERQkJCSAxMDUKLSAjZGVmaW5lIFJBTkRfRl9SQU5E X0dFVF9SQU5EX01FVEhPRAkJCSAxMDEKLSAjZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRF UwkJCSAxMDAKLSAKLSAvKiBSZWFzb24gY29kZXMuICovCi0rI2RlZmluZSBSQU5EX1JfTk9OX0ZJ UFNfTUVUSE9ECQkJCSAxMDUKLSsjZGVmaW5lIFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFCQkJCSAx MDYKLSsjZGVmaW5lIFJBTkRfUl9OT19LRVlfU0VUCQkJCSAxMDcKLSsjZGVmaW5lIFJBTkRfUl9Q Uk5HX0FTS0lOR19GT1JfVE9PX01VQ0gJCQkgMTAxCi0rI2RlZmluZSBSQU5EX1JfUFJOR19FUlJP UgkJCQkgMTA4Ci0rI2RlZmluZSBSQU5EX1JfUFJOR19LRVlFRAkJCQkgMTA5Ci0rI2RlZmluZSBS QU5EX1JfUFJOR19OT1RfUkVLRVlFRAkJCQkgMTAyCi0rI2RlZmluZSBSQU5EX1JfUFJOR19OT1Rf UkVTRUVERUQJCQkgMTAzCi0gI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfU0VFREVECQkJCSAxMDAK LSsjZGVmaW5lIFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZCQkgMTEwCi0rI2Rl ZmluZSBSQU5EX1JfUFJOR19TVFVDSwkJCQkgMTA0Ci0gCi0gI2lmZGVmICBfX2NwbHVzcGx1cwot IH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JhbmQvcmFuZF9saWIuYy5m aXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JhbmQvcmFuZF9saWIuYwotLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JhbmQvcmFuZF9saWIuYy5maXBzCTIwMDgtMTEtMTIgMDQ6 NTg6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmFu ZC9yYW5kX2xpYi5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtNjAs NiArNjAsMTIgQEAKLSAjaW5jbHVkZSA8dGltZS5oPgotICNpbmNsdWRlICJjcnlwdGxpYi5oIgot ICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSAicmFuZF9sY2wuaCIKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNlbmRpZgotKwotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJ TkUKLSAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KLSAjZW5kaWYKLUBAIC0xMDIsOCArMTA4 LDE5IEBAIGNvbnN0IFJBTkRfTUVUSE9EICpSQU5EX2dldF9yYW5kX21ldGhvZCgKLSAJCQlmdW5j dF9yZWYgPSBlOwotIAkJZWxzZQotICNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQlk ZWZhdWx0X1JBTkRfbWV0aCA9IEZJUFNfbW9kZSgpID8gRklQU19yYW5kX21ldGhvZCgpIDogUkFO RF9TU0xlYXkoKTsKLSsJCX0KLSsJaWYgKEZJUFNfbW9kZSgpCi0rCQkmJiBkZWZhdWx0X1JBTkRf bWV0aCAhPSBGSVBTX3JhbmRfY2hlY2soKSkKLSsJICAgIHsKLSsJICAgIFJBTkRlcnIoUkFORF9G X1JBTkRfR0VUX1JBTkRfTUVUSE9ELFJBTkRfUl9OT05fRklQU19NRVRIT0QpOwotKwkgICAgcmV0 dXJuIDA7Ci0rCSAgICB9Ci0rI2Vsc2UKLSAJCQlkZWZhdWx0X1JBTkRfbWV0aCA9IFJBTkRfU1NM ZWF5KCk7Ci0gCQl9Ci0rI2VuZGlmCi0gCXJldHVybiBkZWZhdWx0X1JBTkRfbWV0aDsKLSAJfQot IAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmMyL3JjMi5oLmZpcHMgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmMyL3JjMi5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRh My9jcnlwdG8vcmMyL3JjMi5oLmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ny4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzIvcmMyLmgJMjAwOS0wOS0zMCAx MzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC03OSw3ICs3OSw5IEBAIHR5cGVkZWYgc3RydWN0 IHJjMl9rZXlfc3QKLSAJUkMyX0lOVCBkYXRhWzY0XTsKLSAJfSBSQzJfS0VZOwotIAotLSAKLSsj aWZkZWYgT1BFTlNTTF9GSVBTIAotK3ZvaWQgcHJpdmF0ZV9SQzJfc2V0X2tleShSQzJfS0VZICpr ZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsaW50IGJpdHMpOwotKyNlbmRp ZgotIHZvaWQgUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25l ZCBjaGFyICpkYXRhLGludCBiaXRzKTsKLSB2b2lkIFJDMl9lY2JfZW5jcnlwdChjb25zdCB1bnNp Z25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsUkMyX0tFWSAqa2V5LAotIAkJICAgICBp bnQgZW5jKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JjMi9yYzJfc2tl eS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmMyL3JjMl9za2V5LmMKLS0tLSBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzIvcmMyX3NrZXkuYy5maXBzCTIwMDctMDktMTgg MjM6MTA6MzIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v cmMyL3JjMl9za2V5LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC01 Nyw2ICs1NywxMSBAQAotICAqLwotIAotICNpbmNsdWRlIDxvcGVuc3NsL3JjMi5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgInJjMl9sb2NsLmgiCi0gCi0g c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5X3RhYmxlWzI1Nl09ewotQEAgLTk0LDggKzk5 LDIwIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtleV90YWJsZVsyNTYKLSAgKiBCU0FG RSB1c2VzIHRoZSAncmV0YXJkZWQnIHZlcnNpb24uICBXaGF0IEkgcHJldmlvdXNseSBzaGlwcGVk IGlzCi0gICogdGhlIHNhbWUgYXMgc3BlY2lmeWluZyAxMDI0IGZvciB0aGUgJ2JpdHMnIHBhcmFt ZXRlci4gIEJzYWZlIHVzZXMKLSAgKiBhIHZlcnNpb24gd2hlcmUgdGhlIGJpdHMgcGFyYW1ldGVy IGlzIHRoZSBzYW1lIGFzIGxlbio4ICovCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotIHZvaWQg UkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpk YXRhLCBpbnQgYml0cykKLSAJewotKwlpZiAoRklQU19tb2RlKCkpCi0rCQlGSVBTX0JBRF9BQk9S VChSQzIpCi0rCXByaXZhdGVfUkMyX3NldF9rZXkoa2V5LCBsZW4sIGRhdGEsIGJpdHMpOwotKwl9 Ci0rdm9pZCBwcml2YXRlX1JDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3Qg dW5zaWduZWQgY2hhciAqZGF0YSwKLSsJCQkJCQkJCWludCBiaXRzKQotKyNlbHNlCi0rdm9pZCBS QzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRh dGEsIGludCBiaXRzKQotKyNlbmRpZgotKwl7Ci0gCWludCBpLGo7Ci0gCXVuc2lnbmVkIGNoYXIg Kms7Ci0gCVJDMl9JTlQgKmtpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v cmM0L2FzbS9yYzQtczM5MHgucGwuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQv YXNtL3JjNC1zMzkweC5wbAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JjNC9hc20v cmM0LXMzOTB4LnBsLmZpcHMJMjAwOS0wMi0xMiAxNTo0ODo0OS4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvYXNtL3JjNC1zMzkweC5wbAkyMDA5LTA5 LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTIwMiw0ICsyMDIsNiBAQCBSQzRfb3B0 aW9uczoKLSAuc3RyaW5nCSJyYzQoOHgsY2hhcikiCi0gX19fCi0gCi0rJGNvZGUgPX4gcy9SQzRf c2V0X2tleS9wcml2YXRlX1JDNF9zZXRfa2V5L2cgaWYgKCRFTlZ7RklQU30gbmUgIiIpOwotKwot IHByaW50ICRjb2RlOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmM0L2Fz bS9yYzQteDg2XzY0LnBsLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmM0L2FzbS9y YzQteDg2XzY0LnBsCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmM0L2FzbS9yYzQt eDg2XzY0LnBsLmZpcHMJMjAwOS0wNC0yNyAyMTozMTowNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwJMjAwOS0wOS0z MCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC00OTksNiArNDk5LDggQEAgX19fCi0gCi0g JGNvZGUgPX4gcy8jKFtid2RdKS8kMS9nbTsKLSAKLSskY29kZSA9fiBzL1JDNF9zZXRfa2V5L3By aXZhdGVfUkM0X3NldF9rZXkvZyBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0rCi0gcHJpbnQgJGNv ZGU7Ci0gCi0gY2xvc2UgU1RET1VUOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlw dG8vcmM0L2FzbS9yYzQtNTg2LnBsLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmM0 L2FzbS9yYzQtNTg2LnBsCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmM0L2FzbS9y YzQtNTg2LnBsLmZpcHMJMjAwNy0xMi0wMiAyMjozMjowMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvYXNtL3JjNC01ODYucGwJMjAwOS0wOS0zMCAx MzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xNjYsOCArMTY2LDEyIEBAICRpZHg9ImVkeCI7 Ci0gCi0gJmV4dGVybmFsX2xhYmVsKCJPUEVOU1NMX2lhMzJjYXBfUCIpOwotIAotKyRzZXRrZXlm dW5jID0gIlJDNF9zZXRfa2V5IjsKLSskc2V0a2V5ZnVuYyA9ICJwcml2YXRlX1JDNF9zZXRfa2V5 IiBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0rCi0rCi0gIyB2b2lkIFJDNF9zZXRfa2V5KFJDNF9L RVkgKmtleSxpbnQgbGVuLGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotLSZmdW5jdGlvbl9i ZWdpbigiUkM0X3NldF9rZXkiKTsKLSsmZnVuY3Rpb25fYmVnaW4oJHNldGtleWZ1bmMpOwotIAkm bW92CSgkb3V0LCZ3cGFyYW0oMCkpOwkJIyBsb2FkIGtleQotIAkmbW92CSgkaWRpLCZ3cGFyYW0o MSkpOwkJIyBsb2FkIGxlbgotIAkmbW92CSgkaW5wLCZ3cGFyYW0oMikpOwkJIyBsb2FkIGRhdGEK LUBAIC0yNDUsNyArMjQ5LDcgQEAgJGlkeD0iZWR4IjsKLSAJJnhvcgkoImVheCIsImVheCIpOwot IAkmbW92CSgmRFdQKC04LCRvdXQpLCJlYXgiKTsJCSMga2V5LT54PTA7Ci0gCSZtb3YJKCZEV1Ao LTQsJG91dCksImVheCIpOwkJIyBrZXktPnk9MDsKLS0mZnVuY3Rpb25fZW5kKCJSQzRfc2V0X2tl eSIpOwotKyZmdW5jdGlvbl9lbmQoJHNldGtleWZ1bmMpOwotIAotICMgY29uc3QgY2hhciAqUkM0 X29wdGlvbnModm9pZCk7Ci0gJmZ1bmN0aW9uX2JlZ2luX0IoIlJDNF9vcHRpb25zIik7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvTWFrZWZpbGUuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGEzL2NyeXB0by9yYzQvTWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9yYzQvTWFrZWZpbGUuZmlwcwkyMDA5LTAyLTExIDExOjAxOjM2LjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JjNC9NYWtlZmlsZQkyMDA5LTA5 LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTIxLDggKzIxLDggQEAgVEVTVD1yYzR0 ZXN0LmMKLSBBUFBTPQotIAotIExJQj0kKFRPUCkvbGliY3J5cHRvLmEKLS1MSUJTUkM9cmM0X3Nr ZXkuYyByYzRfZW5jLmMKLS1MSUJPQko9JChSQzRfRU5DKQotK0xJQlNSQz1yYzRfc2tleS5jIHJj NF9lbmMuYyByYzRfZmJsay5jCi0rTElCT0JKPSQoUkM0X0VOQykgcmM0X2ZibGsubwotIAotIFNS Qz0gJChMSUJTUkMpCi0gCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhMy9j cnlwdG8vcmM0L3JjNF9mYmxrLmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4x NDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvcmM0X2Zi bGsuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw3NSBA QAotKy8qIGNyeXB0by9yYzQvcmM0X2ZibGsuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhl biBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2pl Y3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICog ICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgot KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0r ICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0r ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvcmM0Lmg+Ci0rI2luY2x1ZGUgInJjNF9sb2NsLmgiCi0rI2luY2x1ZGUg PG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwot Ky8qIEZJUFMgbW9kZSBibG9ja2luZyBmb3IgUkM0IGhhcyB0byBiZSBkb25lIHNlcGFyYXRlbHkg c2luY2UgUkM0X3NldF9rZXkKLSsgKiBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW4gYXNzZW1ibHkg bGFuZ3VhZ2UgZmlsZS4KLSsgKi8KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdm9pZCBSQzRf c2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEp Ci0rCXsKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJRklQU19CQURfQUJPUlQoUkM0KQotKwlwcml2 YXRlX1JDNF9zZXRfa2V5KGtleSwgbGVuLCBkYXRhKTsKLSsJfQotKyNlbmRpZgotKwotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmM0L3JjNC5oLmZpcHMgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vcmM0L3JjNC5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v cmM0L3JjNC5oLmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvcmM0LmgJMjAwOS0wOS0zMCAxMzoyNTo1OC4w MDAwMDAwMDAgKzAyMDAKLUBAIC03OCw2ICs3OCw5IEBAIHR5cGVkZWYgc3RydWN0IHJjNF9rZXlf c3QKLSAKLSAgCi0gY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9pZCk7Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotK3ZvaWQgcHJpdmF0ZV9SQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4s IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotKyNlbmRpZgotIHZvaWQgUkM0X3NldF9rZXko UkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSB2b2lk IFJDNChSQzRfS0VZICprZXksIHNpemVfdCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGF0 YSwKLSAJCXVuc2lnbmVkIGNoYXIgKm91dGRhdGEpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhMy9jcnlwdG8vcmM0L3JjNF9za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0 by9yYzQvcmM0X3NrZXkuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JjNC9yYzRf c2tleS5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvcmM0X3NrZXkuYwkyMDA5LTA5LTMwIDEzOjI1OjU4 LjAwMDAwMDAwMCArMDIwMAotQEAgLTU5LDYgKzU5LDExIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wv cmM0Lmg+Ci0gI2luY2x1ZGUgInJjNF9sb2NsLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNz bHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotIGNvbnN0IGNoYXIg UkM0X3ZlcnNpb25bXT0iUkM0IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi1AQCAtODUsNyAr OTAsMTEgQEAgY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9pZCkKLSAgKiBEYXRlOiBXZWQsIDE0 IFNlcCAxOTk0IDA2OjM1OjMxIEdNVAotICAqLwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSt2 b2lkIHByaXZhdGVfUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNp Z25lZCBjaGFyICpkYXRhKQotKyNlbHNlCi0gdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXks IGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0rI2VuZGlmCi0gCXsKLSAgICAg ICAgIHJlZ2lzdGVyIFJDNF9JTlQgdG1wOwotICAgICAgICAgcmVnaXN0ZXIgaW50IGlkMSxpZDI7 Ci1AQCAtMTI2LDcgKzEzNSwxMiBAQCB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50 IGxlbiwgCi0gCQkgKiBtb2R1bGUuLi4KLSAJCSAqCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4K LSAJCSAqLwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCXVuc2lnbmVkIGxvbmcgKmlhMzJjYXBf cHRyID0gT1BFTlNTTF9pYTMyY2FwX2xvYygpOwotKwkJaWYgKGlhMzJjYXBfcHRyICYmICgqaWEz MmNhcF9wdHIgJiAoMTw8MjgpKSkgewotKyNlbHNlCi0gCQlpZiAoT1BFTlNTTF9pYTMyY2FwX1Ag JiAoMTw8MjgpKSB7Ci0rI2VuZGlmCi0gCQkJdW5zaWduZWQgY2hhciAqY3A9KHVuc2lnbmVkIGNo YXIgKilkOwotIAotIAkJCWZvciAoaT0wO2k8MjU2O2krKykgY3BbaV09aTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaC5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTMvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL3JpcGVtZC9yaXBlbWQuaC5maXBzCTIwMDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmlwZW1kL3JpcGVtZC5oCTIw MDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtOTEsNiArOTEsOSBAQCB0eXBl ZGVmIHN0cnVjdCBSSVBFTUQxNjBzdGF0ZV9zdAotIAl1bnNpZ25lZCBpbnQgICBudW07Ci0gCX0g UklQRU1EMTYwX0NUWDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfUklQ RU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IFJJUEVNRDE2MF9J bml0KFJJUEVNRDE2MF9DVFggKmMpOwotIGludCBSSVBFTUQxNjBfVXBkYXRlKFJJUEVNRDE2MF9D VFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwotIGludCBSSVBFTUQxNjBfRmlu YWwodW5zaWduZWQgY2hhciAqbWQsIFJJUEVNRDE2MF9DVFggKmMpOwotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxMy4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3Qu YwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTU5LDYgKzU5LDExIEBA Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgInJtZF9sb2NsLmgiCi0gI2luY2x1ZGUg PG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAot IGNvbnN0IGNoYXIgUk1EMTYwX3ZlcnNpb25bXT0iUklQRS1NRDE2MCIgT1BFTlNTTF9WRVJTSU9O X1BURVhUOwotIAotQEAgLTY5LDcgKzc0LDcgQEAgY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltd PSJSSVBFLU1EMTYwIgotICAgICAgdm9pZCByaXBlbWQxNjBfYmxvY2soUklQRU1EMTYwX0NUWCAq YywgdW5zaWduZWQgbG9uZyAqcCxzaXplX3QgbnVtKTsKLSAjICBlbmRpZgotIAotLWludCBSSVBF TUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChSSVBF TUQxNjApCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPkE9UklQRU1EMTYw X0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yc2EvcnNhX2VheS5jLmZp cHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3JzYV9lYXkuYwotLS0tIG9wZW5zc2wt MS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9yc2FfZWF5LmMuZmlwcwkyMDA4LTA5LTE0IDE1OjUxOjQ0 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9yc2Ff ZWF5LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMTQsNiArMTE0 LDggQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5o PgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0gCi0gI2lmbmRlZiBSU0FfTlVMTAotIAotQEAg LTEzOCw3ICsxNDAsNyBAQCBzdGF0aWMgUlNBX01FVEhPRCByc2FfcGtjczFfZWF5X21ldGg9ewot IAlCTl9tb2RfZXhwX21vbnQsIC8qIFhYWCBwcm9iYWJseSB3ZSBzaG91bGQgbm90IHVzZSBNb250 Z29tZXJ5IGlmICBlID09IDMgKi8KLSAJUlNBX2VheV9pbml0LAotIAlSU0FfZWF5X2ZpbmlzaCwK LS0JMCwgLyogZmxhZ3MgKi8KLSsJUlNBX0ZMQUdfRklQU19NRVRIT0QsIC8qIGZsYWdzICovCi0g CU5VTEwsCi0gCTAsIC8qIHJzYV9zaWduICovCi0gCTAsIC8qIHJzYV92ZXJpZnkgKi8KLUBAIC0x NTAsNiArMTUyLDE2IEBAIGNvbnN0IFJTQV9NRVRIT0QgKlJTQV9QS0NTMV9TU0xlYXkodm9pZCkK LSAJcmV0dXJuKCZyc2FfcGtjczFfZWF5X21ldGgpOwotIAl9Ci0gCi0rLyogVXNhZ2UgZXhhbXBs ZTsKLSsgKiAgICBNT05UX0hFTFBFUihyc2EsIGJuX2N0eCwgcCwgcnNhLT5mbGFncyAmIFJTQV9G TEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJyKTsKLSsgKi8KLSsjZGVmaW5lIE1PTlRfSEVMUEVS KHJzYSwgY3R4LCBtLCBwcmVfY29uZCwgZXJyX2luc3RyKSBcCi0rCWlmKChwcmVfY29uZCkgJiYg KChyc2EpLT5fbWV0aG9kX21vZF8jI20gPT0gTlVMTCkgJiYgXAotKwkJCSFCTl9NT05UX0NUWF9z ZXRfbG9ja2VkKCYoKHJzYSktPl9tZXRob2RfbW9kXyMjbSksIFwKLSsJCQkJQ1JZUFRPX0xPQ0tf UlNBLCBcCi0rCQkJCShyc2EpLT5tLCAoY3R4KSkpIFwKLSsJCWVycl9pbnN0cgotKwotIHN0YXRp YyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hh ciAqZnJvbSwKLSAJICAgICB1bnNpZ25lZCBjaGFyICp0bywgUlNBICpyc2EsIGludCBwYWRkaW5n KQotIAl7Ci1AQCAtMTU4LDYgKzE3MCwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2Vu Y3J5cHQoaW50IGZsCi0gCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOwotIAlCTl9DVFggKmN0eD1O VUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19tb2RlKCkpCi0rCQl7Ci0r CQlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0Zf UlNBX0VBWV9QVUJMSUNfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJ CWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNT TF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNB X0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1 cm4gLTE7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5u KSA+IE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0gCQlSU0FlcnIoUlNBX0Zf UlNBX0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOwotQEAgLTIy Myw5ICsyNTIsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsCi0g CQlnb3RvIGVycjsKLSAJCX0KLSAKLS0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9Q VUJMSUMpCi0tCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2Rf biwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCi0tCQkJZ290byBlcnI7Ci0rCU1PTlRf SEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBn b3RvIGVycik7Ci0gCi0gCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLHJzYS0+ZSxy c2EtPm4sY3R4LAotIAkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290byBlcnI7Ci1AQCAtMzU1LDYg KzM4MiwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGludCBmCi0gCWlu dCBsb2NhbF9ibGluZGluZyA9IDA7Ci0gCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7Ci0g Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihG SVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZ X1BSSVZBVEVfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCWdvdG8g ZXJyOwotKwkJCX0KLSsKLSsJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0Ff RklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9Q UklWQVRFX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQkJcmV0dXJuIC0x OwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBO VUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0gCWYgICA9IEJOX0NUWF9nZXQo Y3R4KTsKLUBAIC00MzIsOSArNDc2LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5j cnlwdChpbnQgZgotIAkJZWxzZQotIAkJCWQ9IHJzYS0+ZDsKLSAKLS0JCWlmIChyc2EtPmZsYWdz ICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQotLQkJCWlmKCFCTl9NT05UX0NUWF9zZXRfbG9ja2Vk KCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQotLQkJ CQlnb3RvIGVycjsKLSsJCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNB X0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7Ci0gCi0gCQlpZiAoIXJzYS0+bWV0aC0+Ym5f bW9kX2V4cChyZXQsZixkLHJzYS0+bixjdHgsCi0gCQkJCXJzYS0+X21ldGhvZF9tb2RfbikpIGdv dG8gZXJyOwotQEAgLTQ4OCw2ICs1MzAsMjMgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVf ZGVjcnlwdChpbnQgZgotIAlpbnQgbG9jYWxfYmxpbmRpbmcgPSAwOwotIAlCTl9CTElORElORyAq YmxpbmRpbmcgPSBOVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9k ZSgpKQotKwkJewotKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQ U2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlpZiAoQk5fbnVtX2JpdHMocnNh LT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKLSsJCQl7Ci0rCQkJUlNB ZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01B TEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmKChjdHgg PSBCTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsK LSAJZiAgID0gQk5fQ1RYX2dldChjdHgpOwotQEAgLTU1NSw5ICs2MTQsNyBAQCBzdGF0aWMgaW50 IFJTQV9lYXlfcHJpdmF0ZV9kZWNyeXB0KGludCBmCi0gCQllbHNlCi0gCQkJZCA9IHJzYS0+ZDsK LSAKLS0JCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQotLQkJCWlmICgh Qk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19S U0EsIHJzYS0+biwgY3R4KSkKLS0JCQkJZ290byBlcnI7Ci0rCQlNT05UX0hFTFBFUihyc2EsIGN0 eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOwotIAkJ aWYgKCFyc2EtPm1ldGgtPmJuX21vZF9leHAocmV0LGYsZCxyc2EtPm4sY3R4LAotIAkJCQlyc2Et Pl9tZXRob2RfbW9kX24pKQotIAkJICBnb3RvIGVycjsKLUBAIC02MTcsNiArNjc0LDIzIEBAIHN0 YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKLSAJdW5zaWduZWQgY2hhciAq YnVmPU5VTEw7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQot KwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULEZJUFNfUl9G SVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJaWYgKEJO X251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCi0r CQkJewotKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9LRVlf U0laRV9UT09fU01BTEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0r Ci0gCWlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklU UykKLSAJCXsKLSAJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9N T0RVTFVTX1RPT19MQVJHRSk7Ci1AQCAtNjY3LDkgKzc0MSw3IEBAIHN0YXRpYyBpbnQgUlNBX2Vh eV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKLSAJCWdvdG8gZXJyOwotIAkJfQotIAotLQlpZiAocnNh LT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykKLS0JCWlmICghQk5fTU9OVF9DVFhfc2V0 X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4 KSkKLS0JCQlnb3RvIGVycjsKLSsJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3Mg JiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKLSAKLSAJaWYgKCFyc2EtPm1ldGgt PmJuX21vZF9leHAocmV0LGYscnNhLT5lLHJzYS0+bixjdHgsCi0gCQlyc2EtPl9tZXRob2RfbW9k X24pKSBnb3RvIGVycjsKLUBAIC03MTcsNiArNzg5LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X21v ZF9leHAoQklHTlVNICpyMCwgYwotIAlCSUdOVU0gKnIxLCptMSwqdnJmeTsKLSAJQklHTlVNIGxv Y2FsX2RtcDEsbG9jYWxfZG1xMSxsb2NhbF9jLGxvY2FsX3IxOwotIAlCSUdOVU0gKmRtcDEsKmRt cTEsKmMsKnByMTsKLSsJaW50IGJuX2ZsYWdzOwotIAlpbnQgcmV0PTA7Ci0gCi0gCUJOX0NUWF9z dGFydChjdHgpOwotQEAgLTcyNCw0MSArNzk3LDMxIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9tb2Rf ZXhwKEJJR05VTSAqcjAsIGMKLSAJbTEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gCXZyZnkgPSBCTl9D VFhfZ2V0KGN0eCk7Ci0gCi0tCXsKLS0JCUJJR05VTSBsb2NhbF9wLCBsb2NhbF9xOwotLQkJQklH TlVNICpwID0gTlVMTCwgKnEgPSBOVUxMOwotLQotLQkJLyogTWFrZSBzdXJlIEJOX21vZF9pbnZl cnNlIGluIE1vbnRnb21lcnkgaW50aWFsaXphdGlvbiB1c2VzIHRoZQotLQkJICogQk5fRkxHX0NP TlNUVElNRSBmbGFnICh1bmxlc3MgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FIGlzIHNldCkKLS0JCSAq LwotLQkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCi0tCQkJewot LQkJCUJOX2luaXQoJmxvY2FsX3ApOwotLQkJCXAgPSAmbG9jYWxfcDsKLS0JCQlCTl93aXRoX2Zs YWdzKHAsIHJzYS0+cCwgQk5fRkxHX0NPTlNUVElNRSk7Ci0tCi0tCQkJQk5faW5pdCgmbG9jYWxf cSk7Ci0tCQkJcSA9ICZsb2NhbF9xOwotLQkJCUJOX3dpdGhfZmxhZ3MocSwgcnNhLT5xLCBCTl9G TEdfQ09OU1RUSU1FKTsKLS0JCQl9Ci0tCQllbHNlCi0tCQkJewotLQkJCXAgPSByc2EtPnA7Ci0t CQkJcSA9IHJzYS0+cTsKLS0JCQl9Ci0rCS8qIE1ha2Ugc3VyZSBtb2RfaW52ZXJzZSBpbiBtb250 Z29tZXJleSBpbnRpYWxpemF0aW9uIHVzZSBjb3JyZWN0IAotKwkgKiBCTl9GTEdfQ09OU1RUSU1F IGZsYWcuCi0rCSAqLwotKwlibl9mbGFncyA9IHJzYS0+cC0+ZmxhZ3M7Ci0rCWlmICghKHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQotKwkJewotKwkJcnNhLT5wLT5mbGFncyB8 PSBCTl9GTEdfQ09OU1RUSU1FOwotKwkJfQotKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgcCwgcnNh LT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJyKTsKLSsJLyogV2UgcmVz dG9yZSBibl9mbGFncyBiYWNrICovCi0rCXJzYS0+cC0+ZmxhZ3MgPSBibl9mbGFnczsKLSAKLS0J CWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSkKLS0JCQl7Ci0tCQkJaWYg KCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX3AsIENSWVBUT19MT0NL X1JTQSwgcCwgY3R4KSkKLS0JCQkJZ290byBlcnI7Ci0tCQkJaWYgKCFCTl9NT05UX0NUWF9zZXRf bG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX3EsIENSWVBUT19MT0NLX1JTQSwgcSwgY3R4KSkKLS0J CQkJZ290byBlcnI7Ci0tCQkJfQotLQl9Ci0rICAgICAgICAvKiBNYWtlIHN1cmUgbW9kX2ludmVy c2UgaW4gbW9udGdvbWVyZXkgaW50aWFsaXphdGlvbiB1c2UgY29ycmVjdAotKyAgICAgICAgICog Qk5fRkxHX0NPTlNUVElNRSBmbGFnLgotKyAgICAgICAgICovCi0rCWJuX2ZsYWdzID0gcnNhLT5x LT5mbGFnczsKLSsJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCi0r CQl7Ci0rCQlyc2EtPnEtPmZsYWdzIHw9IEJOX0ZMR19DT05TVFRJTUU7Ci0rCQl9Ci0rCU1PTlRf SEVMUEVSKHJzYSwgY3R4LCBxLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSwg Z290byBlcnIpOwotKwkvKiBXZSByZXN0b3JlIGJuX2ZsYWdzIGJhY2sgKi8KLSsJcnNhLT5xLT5m bGFncyA9IGJuX2ZsYWdzOwkKLSAKLS0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9Q VUJMSUMpCi0tCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2Rf biwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCi0tCQkJZ290byBlcnI7Ci0rCU1PTlRf SEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBn b3RvIGVycik7Ci0gCi0gCS8qIGNvbXB1dGUgSSBtb2QgcSAqLwotIAlpZiAoIShyc2EtPmZsYWdz ICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKLUBAIC04NzUsNiArOTM4LDkgQEAgZXJyOgotIAot IHN0YXRpYyBpbnQgUlNBX2VheV9pbml0KFJTQSAqcnNhKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCXJzYS0+ZmxhZ3N8PVJT QV9GTEFHX0NBQ0hFX1BVQkxJQ3xSU0FfRkxBR19DQUNIRV9QUklWQVRFOwotIAlyZXR1cm4oMSk7 Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9yc2FfZXJyLmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yc2EvcnNhX2Vyci5jCi0tLS0gb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzCTIwMDgtMTItMjkgMTc6MTE6 NTYuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3Jz YV9lcnIuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTExMSw4ICsx MTEsMTIgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1tdPQotIHtFUlJf RlVOQyhSU0FfRl9SU0FfUFJJTlRfRlApLAkiUlNBX3ByaW50X2ZwIn0sCi0ge0VSUl9GVU5DKFJT QV9GX1JTQV9QUklWX0RFQ09ERSksCSJSU0FfUFJJVl9ERUNPREUifSwKLSB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1BSSVZfRU5DT0RFKSwJIlJTQV9QUklWX0VOQ09ERSJ9LAotK3tFUlJfRlVOQyhSU0Ff Rl9SU0FfUFJJVkFURV9FTkNSWVBUKSwJIlJTQV9wcml2YXRlX2VuY3J5cHQifSwKLSB7RVJSX0ZV TkMoUlNBX0ZfUlNBX1BVQl9ERUNPREUpLAkiUlNBX1BVQl9ERUNPREUifSwKLSt7RVJSX0ZVTkMo UlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUKSwJIlJTQV9wdWJsaWNfZGVjcnlwdCJ9LAotIHtFUlJf RlVOQyhSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCi0r e0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QpLAkiUlNBX3NldF9kZWZhdWx0 X21ldGhvZCJ9LAotK3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX01FVEhPRCksCSJSU0Ffc2V0X21l dGhvZCJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksCSJSU0Ffc2lnbiJ9LAotIHtFUlJf RlVOQyhSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORyksCSJSU0Ffc2lnbl9BU04xX09D VEVUX1NUUklORyJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfVkVSSUZZKSwJIlJTQV92ZXJpZnki fSwKLUBAIC0xNTUsMTAgKzE1OSwxMiBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJf cmVhc29uc1tdCi0ge0VSUl9SRUFTT04oUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAsImtl eSBzaXplIHRvbyBzbWFsbCJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJ RCkgICAgLCJsYXN0IG9jdGV0IGludmFsaWQifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9NT0RVTFVT X1RPT19MQVJHRSkgICAgICwibW9kdWx1cyB0b28gbGFyZ2UifSwKLSt7RVJSX1JFQVNPTihSU0Ff Ul9OT05fRklQU19NRVRIT0QpICAgICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCi0ge0VSUl9SRUFT T04oUlNBX1JfTk9fUFVCTElDX0VYUE9ORU5UKSAgICAsIm5vIHB1YmxpYyBleHBvbmVudCJ9LAot IHtFUlJfUkVBU09OKFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcpLCJudWxsIGJlZm9y ZSBibG9jayBtaXNzaW5nIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9Q X1EpICAsIm4gZG9lcyBub3QgZXF1YWwgcCBxIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfT0FFUF9E RUNPRElOR19FUlJPUikgICAsIm9hZXAgZGVjb2RpbmcgZXJyb3IifSwKLSt7RVJSX1JFQVNPTihS U0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKSwib3BlcmF0aW9uIG5vdCBh bGxvd2VkIGluIGZpcHMgbW9kZSJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX09QRVJBVElPTl9OT1Rf U1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpLCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3Ig dGhpcyBrZXl0eXBlIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQp ICAsInBhZGRpbmcgY2hlY2sgZmFpbGVkIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfUF9OT1RfUFJJ TUUpICAgICAgICAgICAsInAgbm90IHByaW1lIn0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v cnNhL3JzYV9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9yc2FfZ2Vu LmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjI3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9yc2FfZ2VuLmMJMjAwOS0wOS0zMCAxNjo1NToyNi4wMDAw MDAwMDAgKzAyMDAKLUBAIC02Nyw2ICs2Nyw4MiBAQAotICNpbmNsdWRlICJjcnlwdGxpYi5oIgot ICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlw c19sb2NsLmgiCi0rCi0rc3RhdGljIGludCBmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsKLSsK LSt2b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKHZvaWQpCi0rCXsKLSsJZmlwc19yc2FfcGFp cndpc2VfZmFpbCA9IDE7Ci0rCX0KLSsKLStpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpCi0r CXsKLSsJY29uc3QgdW5zaWduZWQgY2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0 YSI7Ci0rCXVuc2lnbmVkIGNoYXIgKmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKLSsJaW50 IGxlbiwgcmV0ID0gMDsKLSsJRVZQX1BLRVkgKnBrOwotKwotKwlpZiAoKHBrPUVWUF9QS0VZX25l dygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVWUF9QS0VZX3NldDFfUlNBKHBrLCBy c2EpOwotKwotKwkvKiBQZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0 ICovCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKwkJCU5V TEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCi0rCQl8 fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKwkJCU5VTEwsIDAsIEVW UF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwgTlVMTCkKLSsJCXx8ICFmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsIE5VTEwpKQotKwkJZ290byBlcnI7Ci0rCS8qIE5vdyBw ZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCi0rCWN0 YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7Ci0rCWlmICghY3RidWYpCi0rCQln b3RvIGVycjsKLSsKLSsJbGVuID0gUlNBX3B1YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwg dGJzLCBjdGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7Ci0rCWlmIChsZW4gPD0gMCkKLSsJ CWdvdG8gZXJyOwotKwkvKiBDaGVjayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0 ICovCi0rCWlmICgobGVuID09IChzaXplb2YodGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3Ri dWYsIGxlbikpCi0rCQlnb3RvIGVycjsKLSsJcHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6 ZShyc2EpKTsKLSsKLSsJaWYgKCFwdGJ1ZikKLSsJCWdvdG8gZXJyOwotKwlsZW4gPSBSU0FfcHJp dmF0ZV9kZWNyeXB0KGxlbiwgY3RidWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsK LSsJaWYgKGxlbiAhPSAoc2l6ZW9mKHRicykgLSAxKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAobWVt Y21wKHB0YnVmLCB0YnMsIGxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJ aWYgKCFwdGJ1ZikKLSsJCWdvdG8gZXJyOwotKwkKLSsJZXJyOgotKwlpZiAocmV0ID09IDApCi0r CQl7Ci0rCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0NIRUNLX1JTQSxGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOwotKwkJfQotKwotKwlpZiAo Y3RidWYpCi0rCQlPUEVOU1NMX2ZyZWUoY3RidWYpOwotKwlpZiAocHRidWYpCi0rCQlPUEVOU1NM X2ZyZWUocHRidWYpOwotKwlpZiAocGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsKLSsJcmV0 dXJuIHJldDsKLSsJfQotKyNlbmRpZgotIAotIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2Vu KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOwotIAot QEAgLTkwLDYgKzE2NiwyMyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJz YSwgCi0gCWludCBiaXRzcCxiaXRzcSxvaz0gLTEsbj0wOwotIAlCTl9DVFggKmN0eD1OVUxMOwot IAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYo RklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIAl7Ci0rCQkgICAgRklQU2VycihGSVBTX0Zf UlNBX0JVSUxUSU5fS0VZR0VOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICAJ cmV0dXJuIDA7Ci0rCSAgICAJfQotKwotKwkJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01J Tl9NT0RVTFVTX0JJVFMpCi0rCQkgICAgewotKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlM VElOX0tFWUdFTixGSVBTX1JfS0VZX1RPT19TSE9SVCk7Ci0rCQkgICAgcmV0dXJuIDA7Ci0rCQkJ fQotKwkJfQotKyNlbmRpZgotKwotIAljdHg9Qk5fQ1RYX25ldygpOwotIAlpZiAoY3R4ID09IE5V TEwpIGdvdG8gZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsKLUBAIC0yMDEsNiArMjk0LDE3IEBA IHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCAKLSAJCXAgPSByc2EtPnA7 Ci0gCWlmICghQk5fbW9kX2ludmVyc2UocnNhLT5pcW1wLHJzYS0+cSxwLGN0eCkpIGdvdG8gZXJy OwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJ aWYgKGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwpCi0rCQkJQk5fYWRkX3dvcmQocnNhLT5uLCAxKTsK LSsKLSsJCWlmKCFmaXBzX2NoZWNrX3JzYShyc2EpKQotKwkJICAgIGdvdG8gZXJyOwotKwkJfQot KyNlbmRpZgotKwotIAlvaz0xOwotIGVycjoKLSAJaWYgKG9rID09IC0xKQotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3JzYS5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh My9jcnlwdG8vcnNhL3JzYS5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3Jz YS5oLmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGEzL2NyeXB0by9yc2EvcnNhLmgJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAw MDAgKzAyMDAKLUBAIC03NCw2ICs3NCwyMSBAQAotICNlcnJvciBSU0EgaXMgZGlzYWJsZWQuCi0g I2VuZGlmCi0gCi0rLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgUlNBIG1ldGhvZCBpcyBGSVBT IGNvbXBsaWFudCBhbmQgY2FuIGJlIHVzZWQKLSsgKiBpbiBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0 IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1ldGhvZC4gSWYgYW4KLSsgKiBhcHBsaWNhdGlvbiBz ZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3duIG1ldGhvZHMgaXQgaXMgaXRzIHJlcG9zaWJpbGl0eQot KyAqIHRvIGVuc3VyZSB0aGUgcmVzdWx0IGlzIGNvbXBsaWFudC4KLSsgKi8KLSsKLSsjZGVmaW5l IFJTQV9GTEFHX0ZJUFNfTUVUSE9ECQkJMHgwNDAwCi0rCi0rLyogSWYgdGhpcyBmbGFnIGlzIHNl dCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCi0rICog cGVybWl0dGVkIGl0IGlzIHRoZW4gdGhlIGFwcGxpY2F0aW9ucyByZXNwb25zaWJpbGl0eSB0byBl bnN1cmUgdGhhdCB0aGUKLSsgKiB1c2FnZSBpcyBjb21wbGlhbnQuCi0rICovCi0rCi0rI2RlZmlu ZSBSU0FfRkxBR19OT05fRklQU19BTExPVwkJCTB4MDQwMAotKwotICNpZmRlZiAgX19jcGx1c3Bs dXMKLSBleHRlcm4gIkMiIHsKLSAjZW5kaWYKLUBAIC0xNjQsNiArMTc5LDggQEAgc3RydWN0IHJz YV9zdAotICMgZGVmaW5lIE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMJMTYzODQKLSAjZW5k aWYKLSAKLSsjZGVmaW5lIE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0r Ci0gI2lmbmRlZiBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMKLSAjIGRlZmluZSBPUEVO U1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMJMzA3MgotICNlbmRpZgotQEAgLTI2Nyw2ICsyODQs MTEgQEAgUlNBICoJUlNBX2dlbmVyYXRlX2tleShpbnQgYml0cywgdW5zaWduZQotIAotIC8qIE5l dyB2ZXJzaW9uICovCi0gaW50CVJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRz LCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7Ci0raW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0Eg KnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKLSsJ CQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAs Ci0rCQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0g KlhxLAotKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKLStpbnQgUlNBX1g5MzFf Z2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9H RU5DQiAqY2IpOwotIAotIGludAlSU0FfY2hlY2tfa2V5KGNvbnN0IFJTQSAqKTsKLSAJLyogbmV4 dCA0IHJldHVybiAtMSBvbiBlcnJvciAqLwotQEAgLTQzOCw4ICs0NjAsMTIgQEAgdm9pZCBFUlJf bG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIFJTQV9GX1JTQV9QUklOVF9GUAkJCQkg MTE2Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFJJVl9ERUNPREUJCQkJIDEzNwotICNkZWZpbmUgUlNB X0ZfUlNBX1BSSVZfRU5DT0RFCQkJCSAxMzgKLSsjZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VO Q1JZUFQJCQkgMTQ4Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFVCX0RFQ09ERQkJCQkgMTM5Ci0rI2Rl ZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQJCQkgMTQ5Ci0gI2RlZmluZSBSU0FfRl9SU0Ff U0VUVVBfQkxJTkRJTkcJCQkgMTM2Ci0rI2RlZmluZSBSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVU SE9ECQkJIDE1MAotKyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9NRVRIT0QJCQkJIDE1MQotICNkZWZp bmUgUlNBX0ZfUlNBX1NJR04JCQkJCSAxMTcKLSAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFf T0NURVRfU1RSSU5HCQkgMTE4Ci0gI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZCQkJCSAxMTkKLUBA IC00NzksMTAgKzUwNSwxMiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICNk ZWZpbmUgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDEyMAotICNkZWZpbmUgUlNBX1JfTEFT VF9PQ1RFVF9JTlZBTElECQkJIDEzNAotICNkZWZpbmUgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UJ CQkJIDEwNQotKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxNDkKLSAjZGVmaW5l IFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVAkJCSAxNDAKLSAjZGVmaW5lIFJTQV9SX05VTExfQkVG T1JFX0JMT0NLX01JU1NJTkcJCQkgMTEzCi0gI2RlZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFM X1BfUQkJCSAxMjcKLSAjZGVmaW5lIFJTQV9SX09BRVBfREVDT0RJTkdfRVJST1IJCQkgMTIxCi0r I2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTAKLSAj ZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0 OAotICNkZWZpbmUgUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQJCQkgMTE0Ci0gI2RlZmluZSBS U0FfUl9QX05PVF9QUklNRQkJCQkgMTI4Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2Ny eXB0by9yc2EvcnNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3Jz YV9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlw cwkyMDA4LTA4LTA2IDE3OjU0OjE0LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTMvY3J5cHRvL3JzYS9yc2FfbGliLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAg KzAyMDAKLUBAIC04MCw2ICs4MCwxMyBAQCBSU0EgKlJTQV9uZXcodm9pZCkKLSAKLSB2b2lkIFJT QV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKLSAJewotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0Ff RkxBR19GSVBTX01FVEhPRCkpCi0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxU X01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybjsKLSsJCX0KLSsjZW5k aWYKLSAJZGVmYXVsdF9SU0FfbWV0aCA9IG1ldGg7Ci0gCX0KLSAKLUBAIC0xMTEsNiArMTE4LDEz IEBAIGludCBSU0Ffc2V0X21ldGhvZChSU0EgKnJzYSwgY29uc3QgUlNBX00KLSAJLyogTkI6IFRo ZSBjYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHNldHRpbmcgYSBtZXRob2QsIHNvIGl0J3Mgbm90IHVw IHRvIHVzCi0gCSAqIHRvIGRlYWwgd2l0aCB3aGljaCBFTkdJTkUgaXQgY29tZXMgZnJvbS4gKi8K LSAJY29uc3QgUlNBX01FVEhPRCAqbXRtcDsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChG SVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQotKwkJ ewotKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0Qp OwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gCW10bXAgPSByc2EtPm1ldGg7Ci0gCWlm IChtdG1wLT5maW5pc2gpIG10bXAtPmZpbmlzaChyc2EpOwotICNpZm5kZWYgT1BFTlNTTF9OT19F TkdJTkUKLUBAIC0xNjMsNiArMTc3LDE4IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICpl bmdpbmUpCi0gCQkJfQotIAkJfQotICNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYg KEZJUFNfbW9kZSgpICYmICEocmV0LT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9E KSkKLSsJCXsKLSsJCVJTQWVycihSU0FfRl9SU0FfTkVXX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNf TUVUSE9EKTsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0rCQlpZiAocmV0LT5lbmdpbmUp Ci0rCQkJRU5HSU5FX2ZpbmlzaChyZXQtPmVuZ2luZSk7Ci0rI2VuZGlmCi0rCQlPUEVOU1NMX2Zy ZWUocmV0KTsKLSsJCXJldHVybiBOVUxMOwotKwkJfQotKyNlbmRpZgotIAotIAlyZXQtPnBhZD0w OwotIAlyZXQtPnZlcnNpb249MDsKLUBAIC0yODUsNiArMzExLDEzIEBAIGludCBSU0FfcHVibGlj X2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHUKLSBpbnQgUlNBX3ByaXZhdGVfZW5jcnlwdChpbnQg ZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8sCi0gCSAg ICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlp ZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykp Ci0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfT1BFUkFU SU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5k aWYKLSAJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGZsZW4sIGZyb20sIHRvLCByc2Es IHBhZGRpbmcpKTsKLSAJfQotIAotQEAgLTI5Nyw2ICszMzAsMTMgQEAgaW50IFJTQV9wcml2YXRl X2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IAotIGludCBSU0FfcHVibGljX2RlY3J5cHQoaW50IGZs ZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAotIAkgICAg IFJTQSAqcnNhLCBpbnQgcGFkZGluZykKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYo RklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQot KwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfT1BFUkFUSU9O X05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYK LSAJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoZmxlbiwgZnJvbSwgdG8sIHJzYSwgcGFk ZGluZykpOwotIAl9Ci0gCi1AQCAtNDIyLDUxICs0NjIsOCBAQCBlcnI6Ci0gCUJOX0NUWF9lbmQo Y3R4KTsKLSAJaWYgKGluX2N0eCA9PSBOVUxMKQotIAkJQk5fQ1RYX2ZyZWUoY3R4KTsKLSsJaWYo cnNhLT5lID09IE5VTEwpCi0rCQlCTl9mcmVlKGUpOwotIAotIAlyZXR1cm4gcmV0OwotIH0KLS0K LS1pbnQgUlNBX21lbW9yeV9sb2NrKFJTQSAqcikKLS0JewotLQlpbnQgaSxqLGssb2ZmOwotLQlj aGFyICpwOwotLQlCSUdOVU0gKmJuLCoqdFs2XSwqYjsKLS0JQk5fVUxPTkcgKnVsOwotLQotLQlp ZiAoci0+ZCA9PSBOVUxMKSByZXR1cm4oMSk7Ci0tCXRbMF09ICZyLT5kOwotLQl0WzFdPSAmci0+ cDsKLS0JdFsyXT0gJnItPnE7Ci0tCXRbM109ICZyLT5kbXAxOwotLQl0WzRdPSAmci0+ZG1xMTsK LS0JdFs1XT0gJnItPmlxbXA7Ci0tCWs9c2l6ZW9mKEJJR05VTSkqNjsKLS0Jb2ZmPWsvc2l6ZW9m KEJOX1VMT05HKSsxOwotLQlqPTE7Ci0tCWZvciAoaT0wOyBpPDY7IGkrKykKLS0JCWorPSAoKnRb aV0pLT50b3A7Ci0tCWlmICgocD1PUEVOU1NMX21hbGxvY19sb2NrZWQoKG9mZitqKSpzaXplb2Yo Qk5fVUxPTkcpKSkgPT0gTlVMTCkKLS0JCXsKLS0JCVJTQWVycihSU0FfRl9SU0FfTUVNT1JZX0xP Q0ssRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotLQkJcmV0dXJuKDApOwotLQkJfQotLQlibj0oQklH TlVNICopcDsKLS0JdWw9KEJOX1VMT05HICopJihwW29mZl0pOwotLQlmb3IgKGk9MDsgaTw2OyBp KyspCi0tCQl7Ci0tCQliPSAqKHRbaV0pOwotLQkJKih0W2ldKT0gJihibltpXSk7Ci0tCQltZW1j cHkoKGNoYXIgKikmKGJuW2ldKSwoY2hhciAqKWIsc2l6ZW9mKEJJR05VTSkpOwotLQkJYm5baV0u ZmxhZ3M9Qk5fRkxHX1NUQVRJQ19EQVRBOwotLQkJYm5baV0uZD11bDsKLS0JCW1lbWNweSgoY2hh ciAqKXVsLGItPmQsc2l6ZW9mKEJOX1VMT05HKSpiLT50b3ApOwotLQkJdWwrPWItPnRvcDsKLS0J CUJOX2NsZWFyX2ZyZWUoYik7Ci0tCQl9Ci0tCQotLQkvKiBJIHNob3VsZCBmaXggdGhpcyBzbyBp dCBjYW4gc3RpbGwgYmUgZG9uZSAqLwotLQlyLT5mbGFncyY9IH4oUlNBX0ZMQUdfQ0FDSEVfUFJJ VkFURXxSU0FfRkxBR19DQUNIRV9QVUJMSUMpOwotLQotLQlyLT5iaWdudW1fZGF0YT1wOwotLQly ZXR1cm4oMSk7Ci0tCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9y c2Ffc2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3JzYV9zaWduLmMK LS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzCTIwMDct MDQtMjQgMDM6MDU6NDIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9j cnlwdG8vcnNhL3JzYV9zaWduLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAK LUBAIC0xMzAsNyArMTMwLDggQEAgaW50IFJTQV9zaWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25l ZCBjaAotIAkJaTJkX1g1MDlfU0lHKCZzaWcsJnApOwotIAkJcz10bXBzOwotIAl9Ci0tCWk9UlNB X3ByaXZhdGVfZW5jcnlwdChpLHMsc2lncmV0LHJzYSxSU0FfUEtDUzFfUEFERElORyk7Ci0rCS8q IE5COiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tp bmcgKi8KLSsJaSA9IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jID8gcnNhLT5tZXRoLT5yc2FfcHJp dl9lbmMoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKLSAJaWYgKGkgPD0g MCkKLSAJCXJldD0wOwotIAllbHNlCi1AQCAtMTYxLDggKzE2Miw4IEBAIGludCBpbnRfcnNhX3Zl cmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2kKLSAKLSAJaWYoKGR0eXBlID09IE5JRF9tZDVfc2hh MSkgJiYgcm0pCi0gCQl7Ci0tCQlpID0gUlNBX3B1YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLAot LQkJCQkJc2lnYnVmLHJtLHJzYSxSU0FfUEtDUzFfUEFERElORyk7Ci0rCQlpID0gcnNhLT5tZXRo LT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sCi0rCQkJ CQlzaWdidWYscm0scnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7Ci0gCQlpZiAoaSA8PSAwKQot IAkJCXJldHVybiAwOwotIAkJKnBybV9sZW4gPSBpOwotQEAgLTE3OSw3ICsxODAsOCBAQCBpbnQg aW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBjb25zdCB1bnNpCi0gCQkJUlNBZXJyKFJTQV9GX0lO VF9SU0FfVkVSSUZZLFJTQV9SX0lOVkFMSURfTUVTU0FHRV9MRU5HVEgpOwotIAkJCWdvdG8gZXJy OwotIAl9Ci0tCWk9UlNBX3B1YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxS U0FfUEtDUzFfUEFERElORyk7Ci0rCS8qIE5COiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVj dGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tpbmcgKi8KLSsJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9k ZWMgPyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxSU0Ff UEtDUzFfUEFERElORykgOiAwOwotIAotIAlpZiAoaSA8PSAwKSBnb3RvIGVycjsKLSAKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGFfZGdzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9zaGEvc2hhX2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTQuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMJ MjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC01Nyw2ICs1NywxMiBAQAot ICAqLwotIAotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaWYgIWRl ZmluZWQoT1BFTlNTTF9OT19TSEEwKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkKLSAKLSAj dW5kZWYgIFNIQV8xCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9zaGEvc2hh LmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9zaGEvc2hhLmgKLS0tLSBvcGVuc3Ns LTEuMC4wLWJldGEzL2NyeXB0by9zaGEvc2hhLmguZmlwcwkyMDA5LTA5LTMwIDEzOjI1OjU3LjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGEuaAky MDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTEwNiw2ICsxMDYsOSBAQCB0 eXBlZGVmIHN0cnVjdCBTSEFzdGF0ZV9zdAotIAl9IFNIQV9DVFg7Ci0gCi0gI2lmbmRlZiBPUEVO U1NMX05PX1NIQTAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfU0hBX0luaXQo U0hBX0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IFNIQV9Jbml0KFNIQV9DVFggKmMpOwotIGludCBT SEFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwotIGlu dCBTSEFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFggKmMpOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9zaGEvc2hhX2xvY2wuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5 cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ny4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9zaGEvc2hhX2xvY2wuaAkyMDA5LTA5 LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTEyMiw4ICsxMjIsMTUgQEAgdm9pZCBz aGExX2Jsb2NrX2RhdGFfb3JkZXIgKFNIQV9DVFggKmMsIAotICNkZWZpbmUgSU5JVF9EQVRBX2gz IDB4MTAzMjU0NzZVTAotICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBVTAotIAotKyNp ZiBkZWZpbmVkKFNIQV8wKSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykKLStGSVBTX05PTl9GSVBT X01EX0luaXQoU0hBKQotKyNlbHNlCi0gaW50IEhBU0hfSU5JVCAoU0hBX0NUWCAqYykKLSsjZW5k aWYKLSAJewotKyNpZiBkZWZpbmVkKFNIQV8xKSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykKLSsJ RklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMp KTsKLSAJYy0+aDA9SU5JVF9EQVRBX2gwOwotIAljLT5oMT1JTklUX0RBVEFfaDE7Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9zaGEvc2hhMWRnc3QuYy5maXBzIG9wZW5zc2wt MS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGExZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRh My9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGExZGdzdC5jCTIw MDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtNjMsNiArNjMsMTAgQEAKLSAj ZGVmaW5lIFNIQV8xCi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAot IGNvbnN0IGNoYXIgU0hBMV92ZXJzaW9uW109IlNIQTEiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsK LSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGEyNTYuYwotLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTMvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTQuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vc2hhL3NoYTI1Ni5j CTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMTIsMTIgKzEyLDE5IEBA Ci0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvc2hh Lmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj ZW5kaWYKLSsKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotIAotIGNvbnN0IGNoYXIg U0hBMjU2X3ZlcnNpb25bXT0iU0hBLTI1NiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotIGlu dCBTSEEyMjRfSW5pdCAoU0hBMjU2X0NUWCAqYykKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQgKGMsMCxzaXplb2Yo KmMpKTsKLSAJYy0+aFswXT0weGMxMDU5ZWQ4VUw7CWMtPmhbMV09MHgzNjdjZDUwN1VMOwotIAlj LT5oWzJdPTB4MzA3MGRkMTdVTDsJYy0+aFszXT0weGY3MGU1OTM5VUw7Ci1AQCAtMjksNiArMzYs OSBAQCBpbnQgU0hBMjI0X0luaXQgKFNIQTI1Nl9DVFggKmMpCi0gCi0gaW50IFNIQTI1Nl9Jbml0 IChTSEEyNTZfQ1RYICpjKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0 ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwotIAljLT5o WzBdPTB4NmEwOWU2NjdVTDsJYy0+aFsxXT0weGJiNjdhZTg1VUw7Ci0gCWMtPmhbMl09MHgzYzZl ZjM3MlVMOwljLT5oWzNdPTB4YTU0ZmY1M2FVTDsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3No YS9zaGE1MTIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGE1MTIuYy5m aXBzCTIwMDgtMTItMjkgMTM6MzU6NDguMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vc2hhL3NoYTUxMi5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAw ICswMjAwCi1AQCAtNSw2ICs1LDEwIEBACi0gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgKi8KLSAjaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9f U0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTUxMikKLSAvKgotICAqIElNUExFTUVOVEFU SU9OIE5PVEVTLgotQEAgLTYxLDYgKzY1LDkgQEAgY29uc3QgY2hhciBTSEE1MTJfdmVyc2lvbltd PSJTSEEtNTEyIiBPUAotIAotIGludCBTSEEzODRfSW5pdCAoU0hBNTEyX0NUWCAqYykKLSAJewot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgot ICNpZiBkZWZpbmVkKFNIQTUxMl9BU00pICYmIChkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQo X19hcm0pKQotIAkvKiBtYWludGFpbiBkd29yZCBvcmRlciByZXF1aXJlZCBieSBhc3NlbWJsZXIg bW9kdWxlICovCi0gCXVuc2lnbmVkIGludCAqaCA9ICh1bnNpZ25lZCBpbnQgKiljLT5oOwotQEAg LTkwLDYgKzk3LDkgQEAgaW50IFNIQTM4NF9Jbml0IChTSEE1MTJfQ1RYICpjKQotIAotIGludCBT SEE1MTJfSW5pdCAoU0hBNTEyX0NUWCAqYykKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJ RklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotICNpZiBkZWZpbmVkKFNIQTUxMl9BU00p ICYmIChkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hcm0pKQotIAkvKiBtYWludGFpbiBk d29yZCBvcmRlciByZXF1aXJlZCBieSBhc3NlbWJsZXIgbW9kdWxlICovCi0gCXVuc2lnbmVkIGlu dCAqaCA9ICh1bnNpZ25lZCBpbnQgKiljLT5oOwotQEAgLTM4MCw3ICszOTAsNyBAQCBzdGF0aWMg Y29uc3QgU0hBX0xPTkc2NCBLNTEyWzgwXSA9IHsKLSAJCQkJKChTSEFfTE9ORzY0KWhpKTw8MzJ8 bG87CX0pCi0gIyAgIGVuZGlmCi0gIyAgZWxpZiAoZGVmaW5lZChfQVJDSF9QUEMpICYmIGRlZmlu ZWQoX182NEJJVF9fKSkgfHwgZGVmaW5lZChfQVJDSF9QUEM2NCkKLS0jICAgZGVmaW5lIFJPVFIo YSxuKQkoeyB1bnNpZ25lZCBsb25nIHJldDsJCVwKLSsjICAgZGVmaW5lIFJPVFIoYSxuKQkoeyBT SEFfTE9ORzY0IHJldDsJCVwKLSAJCQkJYXNtICgicm90cmRpICUwLCUxLCUyIglcCi0gCQkJCTog Ij1yIihyZXQpCQlcCi0gCQkJCTogInIiKGEpLCJLIihuKSk7IHJldDsJfSkKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTMvTWFrZWZpbGUub3JnLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9N YWtlZmlsZS5vcmcKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL01ha2VmaWxlLm9yZy5maXBzCTIw MDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRh My9NYWtlZmlsZS5vcmcJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0x MDksNiArMTA5LDkgQEAgTElCS1JCNT0KLSBaTElCX0lOQ0xVREU9Ci0gTElCWkxJQj0KLSAKLSsj IE5vbi1lbXB0eSBpZiBGSVBTIGVuYWJsZWQKLStGSVBTPQotKwotIERJUlM9ICAgY3J5cHRvIHNz bCBlbmdpbmVzIGFwcHMgdGVzdCB0b29scwotIEVOR0RJUlM9IGNjZ29zdAotIFNITElCRElSUz0g Y3J5cHRvIHNzbAotQEAgLTEyMSw3ICsxMjQsNyBAQCBTRElSUz0gIFwKLSAJYm4gZWMgcnNhIGRz YSBlY2RzYSBkaCBlY2RoIGRzbyBlbmdpbmUgXAotIAlidWZmZXIgYmlvIHN0YWNrIGxoYXNoIHJh bmQgZXJyIFwKLSAJZXZwIGFzbjEgcGVtIHg1MDkgeDUwOXYzIGNvbmYgdHh0X2RiIHBrY3M3IHBr Y3MxMiBjb21wIG9jc3AgdWkga3JiNSBcCi0tCWNtcyBwcXVldWUgdHMganBha2Ugc3RvcmUKLSsJ Y21zIHBxdWV1ZSB0cyBqcGFrZSBzdG9yZSBmaXBzCi0gIyBrZWVwIGluIG1pbmQgdGhhdCB0aGUg YWJvdmUgbGlzdCBpcyBhZGp1c3RlZCBieSAuL0NvbmZpZ3VyZQotICMgYWNjb3JkaW5nIHRvIG5v LXh4eCBhcmd1bWVudHMuLi4KLSAKLUBAIC0yMDQsNiArMjA3LDcgQEAgQlVJTERFTlY9CVBMQVRG T1JNPSckKFBMQVRGT1JNKScgUFJPQ0VTUwotIAkJUk1EMTYwX0FTTV9PQko9JyQoUk1EMTYwX0FT TV9PQkopJwkJXAotIAkJV1BfQVNNX09CSj0nJChXUF9BU01fT0JKKScJCQlcCi0gCQlQRVJMQVNN X1NDSEVNRT0nJChQRVJMQVNNX1NDSEVNRSknCQlcCi0rCQlGSVBTPSIkJHtGSVBTOi0kKEZJUFMp fSIJXAotIAkJVEhJUz0kJHtUSElTOi0kQH0gTUFLRUZJTEU9TWFrZWZpbGUgTUFLRU9WRVJSSURF Uz0KLSAjIE1BS0VPVkVSUklERVM9IGVmZmVjdGl2ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2ggYW5k IFN5c1YtaXNoIG1ha2UgZmxhdm9ycywKLSAjIHdoaWNoIGluIHR1cm4gZWxpbWluYXRlcyBhbWJp Z3VpdGllcyBpbiB2YXJpYWJsZSB0cmVhdG1lbnQgd2l0aCAtZS4KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTMvc3NsL3NzbF9jaXBoLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9z c2xfY2lwaC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3NsX2NpcGguYy5maXBzCTIw MDktMDQtMDcgMTQ6MTA6NTkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRh My9zc2wvc3NsX2NpcGguYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAg LTcyNyw2ICs3MjcsOSBAQCBzdGF0aWMgdm9pZCBzc2xfY2lwaGVyX2NvbGxlY3RfY2lwaGVycyhj Ci0gCQkgICAgIShjLT5hbGdvcml0aG1fYXV0aCAmIGRpc2FibGVkX2F1dGgpICYmCi0gCQkgICAg IShjLT5hbGdvcml0aG1fZW5jICYgZGlzYWJsZWRfZW5jKSAmJgotIAkJICAgICEoYy0+YWxnb3Jp dGhtX21hYyAmIGRpc2FibGVkX21hYykgJiYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQkJKCFG SVBTX21vZGUoKSB8fCAoYy0+YWxnb19zdHJlbmd0aCAmIFNTTF9GSVBTKSkgJiYKLSsjZW5kaWYK LSAJCSAgICAhKGMtPmFsZ29yaXRobV9zc2wgJiBkaXNhYmxlZF9zc2wpKQotIAkJCXsKLSAJCQlj b19saXN0W2NvX2xpc3RfbnVtXS5jaXBoZXIgPSBjOwotQEAgLTE0MjMsNyArMTQyNiwxMSBAQCBT VEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2NyZWF0ZV9jaXBoZXJfCi0gCSAqLwotIAlmb3IgKGN1 cnIgPSBoZWFkOyBjdXJyICE9IE5VTEw7IGN1cnIgPSBjdXJyLT5uZXh0KQotIAkJewotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJCWlmIChjdXJyLT5hY3RpdmUgJiYgKCFGSVBTX21vZGUoKSB8fCBj dXJyLT5jaXBoZXItPmFsZ29fc3RyZW5ndGggJiBTU0xfRklQUykpCi0rI2Vsc2UKLSAJCWlmIChj dXJyLT5hY3RpdmUpCi0rI2VuZGlmCi0gCQkJewotIAkJCXNrX1NTTF9DSVBIRVJfcHVzaChjaXBo ZXJzdGFjaywgY3Vyci0+Y2lwaGVyKTsKLSAjaWZkZWYgQ0lQSEVSX0RFQlVHCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2xfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEz L3NzbC9zc2xfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2xfbGliLmMuZmlw cwkyMDA5LTA2LTMwIDEzOjU3OjI0LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTMvc3NsL3NzbF9saWIuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAot QEAgLTE0NzAsNiArMTQ3MCwxNCBAQCBTU0xfQ1RYICpTU0xfQ1RYX25ldyhjb25zdCBTU0xfTUVU SE9EICptCi0gCQlyZXR1cm4oTlVMTCk7Ci0gCQl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwlpZiAoRklQU19tb2RlKCkgJiYgKG1ldGgtPnZlcnNpb24gPCBUTFMxX1ZFUlNJT04pKQkKLSsJ CXsKLSsJCVNTTGVycihTU0xfRl9TU0xfQ1RYX05FVywgU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9J Tl9GSVBTX01PREUpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChT U0xfZ2V0X2V4X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4KCkgPCAwKQotIAkJewotIAkJU1NMZXJy KFNTTF9GX1NTTF9DVFhfTkVXLFNTTF9SX1g1MDlfVkVSSUZJQ0FUSU9OX1NFVFVQX1BST0JMRU1T KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3NzbHRlc3QuYy5maXBzIG9wZW5z c2wtMS4wLjAtYmV0YTMvc3NsL3NzbHRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3Ns L3NzbHRlc3QuYy5maXBzCTIwMDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3NsdGVzdC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAw MDAwMDAwICswMjAwCi1AQCAtMjY1LDYgKzI2NSw5IEBAIHN0YXRpYyB2b2lkIHN2X3VzYWdlKHZv aWQpCi0gCXsKLSAJZnByaW50ZihzdGRlcnIsInVzYWdlOiBzc2x0ZXN0IFthcmdzIC4uLl1cbiIp OwotIAlmcHJpbnRmKHN0ZGVyciwiXG4iKTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWZwcmlu dGYoc3RkZXJyLCItRiAgICAgICAgICAgICAtIHJ1biB0ZXN0IGluIEZJUFMgbW9kZVxuIik7Ci0r I2VuZGlmCi0gCWZwcmludGYoc3RkZXJyLCIgLXNlcnZlcl9hdXRoICAtIGNoZWNrIHNlcnZlciBj ZXJ0aWZpY2F0ZVxuIik7Ci0gCWZwcmludGYoc3RkZXJyLCIgLWNsaWVudF9hdXRoICAtIGRvIGNs aWVudCBhdXRoZW50aWNhdGlvblxuIik7Ci0gCWZwcmludGYoc3RkZXJyLCIgLXByb3h5ICAgICAg ICAtIGFsbG93IHByb3h5IGNlcnRpZmljYXRlc1xuIik7Ci1AQCAtNDg0LDYgKzQ4Nyw5IEBAIGlu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gI2VuZGlmCi0gCVNUQUNLX09GKFNTTF9D T01QKSAqc3NsX2NvbXBfbWV0aG9kcyA9IE5VTEw7Ci0gCWludCB0ZXN0X2NpcGhlcmxpc3QgPSAw OwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaW50IGZpcHNfbW9kZT0wOwotKyNlbmRpZgotIAot IAl2ZXJib3NlID0gMDsKLSAJZGVidWcgPSAwOwotQEAgLTUxNSw3ICs1MjEsMTYgQEAgaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAKLSAJd2hpbGUgKGFyZ2MgPj0gMSkKLSAJCXsK LS0JCWlmCShzdHJjbXAoKmFyZ3YsIi1zZXJ2ZXJfYXV0aCIpID09IDApCi0rCQlpZighc3RyY21w KCphcmd2LCItRiIpKQotKwkJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQkJZmlwc19tb2Rl PTE7Ci0rI2Vsc2UKLSsJCQlmcHJpbnRmKHN0ZGVyciwibm90IGNvbXBpbGVkIHdpdGggRklQUyBz dXBwb3J0LCBzbyBleGl0dGluZyB3aXRob3V0IHJ1bm5pbmcuXG4iKTsKLSsJCQlFWElUKDApOwot KyNlbmRpZgotKwkJCX0KLSsJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXNlcnZlcl9hdXRoIikg PT0gMCkKLSAJCQlzZXJ2ZXJfYXV0aD0xOwotIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItY2xp ZW50X2F1dGgiKSA9PSAwKQotIAkJCWNsaWVudF9hdXRoPTE7Ci1AQCAtNzExLDYgKzcyNiwyMCBA QCBiYWQ6Ci0gCQlFWElUKDEpOwotIAkJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYo Zmlwc19tb2RlKQotKwkJewotKwkJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQkJewotKwkJCUVS Ul9sb2FkX2NyeXB0b19zdHJpbmdzKCk7Ci0rCQkJRVJSX3ByaW50X2Vycm9ycyhCSU9fbmV3X2Zw KHN0ZGVycixCSU9fTk9DTE9TRSkpOwotKwkJCUVYSVQoMSk7Ci0rCQkJfQotKwkJZWxzZQotKwkJ CWZwcmludGYoc3RkZXJyLCIqKiogSU4gRklQUyBNT0RFICoqKlxuIik7Ci0rCQl9Ci0rI2VuZGlm Ci0rCi0gCWlmIChwcmludF90aW1lKQotIAkJewotIAkJaWYgKCFiaW9fcGFpcikKLUBAIC0yMTUz LDEyICsyMTgyLDEyIEBAIHN0YXRpYyBpbnQgTVNfQ0FMTEJBQ0sgYXBwX3ZlcmlmeV9jYWxsYmEK LSAJCX0KLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fWDUwOV9WRVJJRlkKLS0jIGlmZGVmIE9QRU5T U0xfRklQUwotKyMgaWYgMAotIAlpZihzLT52ZXJzaW9uID09IFRMUzFfVkVSU0lPTikKLSAJCUZJ UFNfYWxsb3dfbWQ1KDEpOwotICMgZW5kaWYKLSAJb2sgPSBYNTA5X3ZlcmlmeV9jZXJ0KGN0eCk7 Ci0tIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGlmIDAKLSAJaWYocy0+dmVyc2lvbiA9PSBUTFMx X1ZFUlNJT04pCi0gCQlGSVBTX2FsbG93X21kNSgwKTsKLSAjIGVuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGEzL3NzbC9zMjNfY2xudC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9z c2wvczIzX2NsbnQuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3MyM19jbG50LmMuZmlw cwkyMDA5LTA0LTA3IDE5OjAxOjA3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTMvc3NsL3MyM19jbG50LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAK LUBAIC0zMzIsNiArMzMyLDE0IEBAIHN0YXRpYyBpbnQgc3NsMjNfY2xpZW50X2hlbGxvKFNTTCAq cykKLSAJCQl2ZXJzaW9uX21ham9yID0gVExTMV9WRVJTSU9OX01BSk9SOwotIAkJCXZlcnNpb25f bWlub3IgPSBUTFMxX1ZFUlNJT05fTUlOT1I7Ci0gCQkJfQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJCWVsc2UgaWYoRklQU19tb2RlKCkpCi0rCQkJewotKwkJCVNTTGVycihTU0xfRl9TU0wyM19D TElFTlRfSEVMTE8sCi0rCQkJCQlTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7 Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsjZW5kaWYKLSAJCWVsc2UgaWYgKHZlcnNpb24gPT0g U1NMM19WRVJTSU9OKQotIAkJCXsKLSAJCQl2ZXJzaW9uX21ham9yID0gU1NMM19WRVJTSU9OX01B Sk9SOwotQEAgLTYxNSw2ICs2MjMsMTQgQEAgc3RhdGljIGludCBzc2wyM19nZXRfc2VydmVyX2hl bGxvKFNTTCAqcwotIAkJaWYgKChwWzJdID09IFNTTDNfVkVSU0lPTl9NSU5PUikgJiYKLSAJCQkh KHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fU1NMdjMpKQotIAkJCXsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCQkJaWYoRklQU19tb2RlKCkpCi0rCQkJCXsKLSsJCQkJU1NMZXJyKFNTTF9GX1NTTDIz X0dFVF9TRVJWRVJfSEVMTE8sCi0rCQkJCQlTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNf TU9ERSk7Ci0rCQkJCWdvdG8gZXJyOwotKwkJCQl9Ci0rI2VuZGlmCi0gCQkJcy0+dmVyc2lvbj1T U0wzX1ZFUlNJT047Ci0gCQkJcy0+bWV0aG9kPVNTTHYzX2NsaWVudF9tZXRob2QoKTsKLSAJCQl9 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zMjNfc3J2ci5jLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhMy9zc2wvczIzX3NydnIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3Ns L3MyM19zcnZyLmMuZmlwcwkyMDA4LTA2LTAzIDA0OjQ4OjM0LjAwMDAwMDAwMCArMDIwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3MyM19zcnZyLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4w MDAwMDAwMDAgKzAyMDAKLUBAIC0zODYsNiArMzg2LDE1IEBAIGludCBzc2wyM19nZXRfY2xpZW50 X2hlbGxvKFNTTCAqcykKLSAJCQl9Ci0gCQl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlp ZiAoRklQU19tb2RlKCkgJiYgKHMtPnZlcnNpb24gPCBUTFMxX1ZFUlNJT04pKQotKwkJewotKwkJ U1NMZXJyKFNTTF9GX1NTTDIzX0dFVF9DTElFTlRfSEVMTE8sCi0rCQkJCQlTU0xfUl9PTkxZX1RM U19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsK LSAJaWYgKHMtPnN0YXRlID09IFNTTDIzX1NUX1NSX0NMTlRfSEVMTE9fQikKLSAJCXsKLSAJCS8q IHdlIGhhdmUgU1NMdjMvVExTdjEgaW4gYW4gU1NMdjIgaGVhZGVyCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGEzL3NzbC9zM19jbG50LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9z M19jbG50LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zM19jbG50LmMuZmlwcwkyMDA5 LTA2LTE2IDE4OjM5OjIwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMv c3NsL3MzX2NsbnQuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTE1 Niw2ICsxNTYsMTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAjaWZuZGVm IE9QRU5TU0xfTk9fREgKLSAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotICNlbmRpZgotQEAgLTE1 MjQsNiArMTUyOCw4IEBAIGludCBzc2wzX2dldF9rZXlfZXhjaGFuZ2UoU1NMICpzKQotIAkJCXE9 bWRfYnVmOwotIAkJCWZvciAobnVtPTI7IG51bSA+IDA7IG51bS0tKQotIAkJCQl7Ci0rCQkJCUVW UF9NRF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgsCi0rCQkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpOwotIAkJCQlFVlBfRGlnZXN0SW5pdF9leCgmbWRfY3R4LChudW0gPT0gMikKLSAJ CQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNoYTEsIE5VTEwpOwotIAkJCQlFVlBfRGlnZXN0VXBk YXRlKCZtZF9jdHgsJihzLT5zMy0+Y2xpZW50X3JhbmRvbVswXSksU1NMM19SQU5ET01fU0laRSk7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zM19lbmMuYy5maXBzIG9wZW5zc2wt MS4wLjAtYmV0YTMvc3NsL3MzX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvczNf ZW5jLmMuZmlwcwkyMDA5LTA0LTE2IDE5OjIyOjUwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjAtYmV0YTMvc3NsL3MzX2VuYy5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAw ICswMjAwCi1AQCAtMTcwLDYgKzE3MCw3IEBAIHN0YXRpYyBpbnQgc3NsM19nZW5lcmF0ZV9rZXlf YmxvY2soU1NMICoKLSAjZW5kaWYKLSAJaz0wOwotIAlFVlBfTURfQ1RYX2luaXQoJm01KTsKLSsJ RVZQX01EX0NUWF9zZXRfZmxhZ3MoJm01LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cp OwotIAlFVlBfTURfQ1RYX2luaXQoJnMxKTsKLSAJZm9yIChpPTA7IChpbnQpaTxudW07IGkrPU1E NV9ESUdFU1RfTEVOR1RIKQotIAkJewotQEAgLTYxNCw2ICs2MTUsOCBAQCBpbnQgc3NsM19kaWdl c3RfY2FjaGVkX3JlY29yZHMoU1NMICpzKQotIAkJaWYgKChtYXNrICYgcy0+czMtPnRtcC5uZXdf Y2lwaGVyLT5hbGdvcml0aG0yKSAmJiBtZCkgCi0gCQkJewotIAkJCXMtPnMzLT5oYW5kc2hha2Vf ZGdzdFtpXT1FVlBfTURfQ1RYX2NyZWF0ZSgpOwotKwkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKHMt PnMzLT5oYW5kc2hha2VfZGdzdFtpXSwKLSsJCQkJRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FM TE9XKTsKLSAJCQlFVlBfRGlnZXN0SW5pdF9leChzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0sbWQs TlVMTCk7Ci0gCQkJRVZQX0RpZ2VzdFVwZGF0ZShzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0saGRh dGEsaGRhdGFsZW4pOwotIAkJCX0gCi1AQCAtNjcwLDYgKzY3Myw3IEBAIHN0YXRpYyBpbnQgc3Ns M19oYW5kc2hha2VfbWFjKFNTTCAqcywgaW4KLSAJCXJldHVybiAwOwotIAl9CQotIAlFVlBfTURf Q1RYX2luaXQoJmN0eCk7Ci0rCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhf RkxBR19OT05fRklQU19BTExPVyk7Ci0gCUVWUF9NRF9DVFhfY29weV9leCgmY3R4LGQpOwotIAlu PUVWUF9NRF9DVFhfc2l6ZSgmY3R4KTsKLSAJaWYgKG4gPCAwKQotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhMy9zc2wvczNfc3J2ci5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvczNf c3J2ci5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvczNfc3J2ci5jLmZpcHMJMjAwOS0w Ni0yNiAxNzowNDoyMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL3Nz bC9zM19zcnZyLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xNjc0 LDYgKzE2NzQsOCBAQCBpbnQgc3NsM19zZW5kX3NlcnZlcl9rZXlfZXhjaGFuZ2UoU1NMICpzCi0g CQkJCWo9MDsKLSAJCQkJZm9yIChudW09MjsgbnVtID4gMDsgbnVtLS0pCi0gCQkJCQl7Ci0rCQkJ CQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWRfY3R4LAotKwkJCQkJCUVWUF9NRF9DVFhfRkxBR19O T05fRklQU19BTExPVyk7Ci0gCQkJCQlFVlBfRGlnZXN0SW5pdF9leCgmbWRfY3R4LChudW0gPT0g MikKLSAJCQkJCQk/cy0+Y3R4LT5tZDU6cy0+Y3R4LT5zaGExLCBOVUxMKTsKLSAJCQkJCUVWUF9E aWdlc3RVcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRP TV9TSVpFKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3QxX2VuYy5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvdDFfZW5jLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEz L3NzbC90MV9lbmMuYy5maXBzCTIwMDktMDQtMTkgMjA6MDM6MTMuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvdDFfZW5jLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4w MDAwMDAwMDAgKzAyMDAKLUBAIC0xNjksNiArMTY5LDggQEAgc3RhdGljIHZvaWQgdGxzMV9QX2hh c2goY29uc3QgRVZQX01EICptZAotIAotIAlITUFDX0NUWF9pbml0KCZjdHgpOwotIAlITUFDX0NU WF9pbml0KCZjdHhfdG1wKTsKLSsJSE1BQ19DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhf RkxBR19OT05fRklQU19BTExPVyk7Ci0rCUhNQUNfQ1RYX3NldF9mbGFncygmY3R4X3RtcCwgRVZQ X01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJSE1BQ19Jbml0X2V4KCZjdHgsc2VjLHNl Y19sZW4sbWQsIE5VTEwpOwotIAlITUFDX0luaXRfZXgoJmN0eF90bXAsc2VjLHNlY19sZW4sbWQs IE5VTEwpOwotIAlpZiAoc2VlZDEgIT0gTlVMTCkgSE1BQ19VcGRhdGUoJmN0eCxzZWVkMSxzZWVk MV9sZW4pOwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTMtZmlwc21vZGUucGF0Y2gg Yi9vcGVuc3NsLTEuMC4wLWJldGEzLWZpcHNtb2RlLnBhdGNoCmluZGV4IDY0MzY1NGUuLjJmYmYw YTYgMTAwNjQ0Ci0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTMtZmlwc21vZGUucGF0Y2gKKysrIGIv b3BlbnNzbC0xLjAuMC1iZXRhMy1maXBzbW9kZS5wYXRjaApAQCAtMjIyLDcgKzIyMiw3IEBAIGRp ZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3NzbF9hbGdzLmMuZmlwc21vZGUgb3BlbnNz bC0xLjAuMC1iZXRhMy9zc2wvc3NsCiAgI2lmbmRlZiBPUEVOU1NMX05PX0RFUwogIAlFVlBfYWRk X2NpcGhlcihFVlBfZGVzX2NiYygpKTsKICAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2Ni YygpKTsKLUBAIC0xMTUsNiArMTIxLDM4IEBAIGludCBTU0xfbGlicmFyeV9pbml0KHZvaWQpCitA QCAtMTE1LDYgKzEyMSw0MCBAQCBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQogIAlFVlBfYWRk X2RpZ2VzdChFVlBfc2hhKCkpOwogIAlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkpOwogICNlbmRp ZgpAQCAtMjQxLDYgKzI0MSw4IEBAIGRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3Nz bF9hbGdzLmMuZmlwc21vZGUgb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3NsCiArI2lmbmRlZiBP UEVOU1NMX05PX01ENQogKwkvKiBuZWVkZWQgZXZlbiBpbiB0aGUgRklQUyBtb2RlIGZvciBUTFMg TUFDICovCiArCUVWUF9hZGRfZGlnZXN0KEVWUF9tZDUoKSk7CisrCUVWUF9hZGRfZGlnZXN0X2Fs aWFzKFNOX21kNSwic3NsMi1tZDUiKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJz c2wzLW1kNSIpOwogKyNlbmRpZgogKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEKICsJRVZQX2FkZF9k aWdlc3QoRVZQX3NoYTEoKSk7IC8qIFJTQSB3aXRoIHNoYTEgKi8KCmRpZmYgLS1naXQgYS9vcGVu c3NsLTEuMC4wLWJldGEzLWtyYjUucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGEzLWtyYjUucGF0 Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmN2NjZGUuLjAwMDAwMDAKLS0tIGEv b3BlbnNzbC0xLjAuMC1iZXRhMy1rcmI1LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAs MCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9NYWtlZmlsZS5vcmcua3JiNSBvcGVu c3NsLTEuMC4wLWJldGEzL01ha2VmaWxlLm9yZwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvTWFr ZWZpbGUub3JnLmtyYjUJMjAwOS0wNC0yMyAxODoxMjowOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGEzL01ha2VmaWxlLm9yZwkyMDA5LTA4LTA0IDIzOjAxOjE2LjAwMDAw MDAwMCArMDIwMAotQEAgLTI5OSw3ICsyOTksNyBAQCBidWlsZC1zaGFyZWQ6IGRvXyQoU0hMSUJf VEFSR0VUKSBsaW5rLXNoCi0gCi0gZG9fJChTSExJQl9UQVJHRVQpOgotIAlAIHNldCAtZTsgbGli cz0nLUwuICQoU0hMSUJERVBTKSc7IGZvciBpIGluICQoU0hMSUJESVJTKTsgZG8gXAotLQkJaWYg WyAiJChTSExJQkRJUlMpIiA9ICJzc2wiIC1hIC1uICIkKExJQktSQjUpIiBdOyB0aGVuIFwKLSsJ CWlmIFsgIiQkaSIgPSAic3NsIiAtYSAtbiAiJChMSUJLUkI1KSIgXTsgdGhlbiBcCi0gCQkJbGli cz0iJChMSUJLUkI1KSAkJGxpYnMiOyBcCi0gCQlmaTsgXAotIAkJJChDTEVBUkVOVikgJiYgJChN QUtFKSAtZiBNYWtlZmlsZS5zaGFyZWQgLWUgJChCVUlMREVOVikgXAoKZGlmZiAtLWdpdCBhL29w ZW5zc2wtMS4wLjAtYmV0YTMtbmFtaW5nYmxrLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhMy1u YW1pbmdibGsucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0M2U1NmMuLjAw MDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1uYW1pbmdibGsucGF0Y2gKKysrIC9kZXYv bnVsbApAQCAtMSwyNTMgKzAsMCBAQAotSW5kZXg6IG9wZW5zc2wvY3J5cHRvL2FzbjEvYV9zZXQu YwotUkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5zc2wvY3J5cHRvL2FzbjEvYV9zZXQuYyx2 Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjIwJyAnLXIxLjIwLjIuMScgLXUgJy92L29wZW5zc2wvY3Zz L29wZW5zc2wvY3J5cHRvL2FzbjEvYV9zZXQuYyx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5zc2wv Y3J5cHRvL2FzbjEvYV9zZXQuYyAyMDA5LzAxLzAxIDE4OjMwOjUwIDEuMjAKLSsrKyBvcGVuc3Ns L2NyeXB0by9hc24xL2Ffc2V0LmMgMjAwOS8wNy8yNyAyMToyMToyNSAxLjIwLjIuMQotQEAgLTg1 LDcgKzg1LDcgQEAKLSAgICAgfQotIAotIC8qIGludCBpc19zZXQ6ICBpZiBUUlVFLCB0aGVuIHNv cnQgdGhlIGNvbnRlbnRzIChpLmUuIGl0IGlzbid0IGEgU0VRVUVOQ0UpICAgICovCi0taW50IGky ZF9BU04xX1NFVChTVEFDS19PRihCTE9DSykgKmEsIHVuc2lnbmVkIGNoYXIgKipwcCwKLStpbnQg aTJkX0FTTjFfU0VUKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICphLCB1bnNpZ25lZCBjaGFyICoq cHAsCi0gCQkgaTJkX29mX3ZvaWQgKmkyZCwgaW50IGV4X3RhZywgaW50IGV4X2NsYXNzLAotIAkJ IGludCBpc19zZXQpCi0gCXsKLUBAIC05Nyw4ICs5Nyw4IEBACi0gICAgICAgICBpbnQgdG90U2l6 ZTsKLSAKLSAJaWYgKGEgPT0gTlVMTCkgcmV0dXJuKDApOwotLQlmb3IgKGk9c2tfQkxPQ0tfbnVt KGEpLTE7IGk+PTA7IGktLSkKLS0JCXJldCs9aTJkKHNrX0JMT0NLX3ZhbHVlKGEsaSksTlVMTCk7 Ci0rCWZvciAoaT1za19PUEVOU1NMX0JMT0NLX251bShhKS0xOyBpPj0wOyBpLS0pCi0rCQlyZXQr PWkyZChza19PUEVOU1NMX0JMT0NLX3ZhbHVlKGEsaSksTlVMTCk7Ci0gCXI9QVNOMV9vYmplY3Rf c2l6ZSgxLHJldCxleF90YWcpOwotIAlpZiAocHAgPT0gTlVMTCkgcmV0dXJuKHIpOwotIAotQEAg LTEwOSwxMCArMTA5LDEwIEBACi0gCS8qIEFuZCB0aGVuIGFnYWluIGJ5IEJlbiAqLwotIAkvKiBB bmQgYWdhaW4gYnkgU3RldmUgKi8KLSAKLS0JaWYoIWlzX3NldCB8fCAoc2tfQkxPQ0tfbnVtKGEp IDwgMikpCi0rCWlmKCFpc19zZXQgfHwgKHNrX09QRU5TU0xfQkxPQ0tfbnVtKGEpIDwgMikpCi0g CQl7Ci0tCQlmb3IgKGk9MDsgaTxza19CTE9DS19udW0oYSk7IGkrKykKLS0gICAgICAgICAgICAg ICAgCWkyZChza19CTE9DS192YWx1ZShhLGkpLCZwKTsKLSsJCWZvciAoaT0wOyBpPHNrX09QRU5T U0xfQkxPQ0tfbnVtKGEpOyBpKyspCi0rICAgICAgICAgICAgICAgIAlpMmQoc2tfT1BFTlNTTF9C TE9DS192YWx1ZShhLGkpLCZwKTsKLSAKLSAJCSpwcD1wOwotIAkJcmV0dXJuKHIpOwotQEAgLTEy MCwxNyArMTIwLDE3IEBACi0gCi0gICAgICAgICBwU3RhcnQgID0gcDsgLyogQ2F0Y2ggdGhlIGJl ZyBvZiBTZXRibG9icyovCi0gCQkvKiBJbiB0aGlzIGFycmF5IHdlIHdpbGwgc3RvcmUgdGhlIFNF VCBibG9icyAqLwotLQkJcmdTZXRCbG9iID0gT1BFTlNTTF9tYWxsb2Moc2tfQkxPQ0tfbnVtKGEp ICogc2l6ZW9mKE1ZQkxPQikpOwotKwkJcmdTZXRCbG9iID0gT1BFTlNTTF9tYWxsb2Moc2tfT1BF TlNTTF9CTE9DS19udW0oYSkgKiBzaXplb2YoTVlCTE9CKSk7Ci0gCQlpZiAocmdTZXRCbG9iID09 IE5VTEwpCi0gCQkJewotIAkJCUFTTjFlcnIoQVNOMV9GX0kyRF9BU04xX1NFVCxFUlJfUl9NQUxM T0NfRkFJTFVSRSk7Ci0gCQkJcmV0dXJuKDApOwotIAkJCX0KLSAKLS0gICAgICAgIGZvciAoaT0w OyBpPHNrX0JMT0NLX251bShhKTsgaSsrKQotKyAgICAgICAgZm9yIChpPTA7IGk8c2tfT1BFTlNT TF9CTE9DS19udW0oYSk7IGkrKykKLSAJICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIHJnU2V0 QmxvYltpXS5wYkRhdGEgPSBwOyAgLyogY2F0Y2ggZWFjaCBzZXQgZW5jb2RlIGJsb2IgKi8KLS0g ICAgICAgICAgICAgICAgaTJkKHNrX0JMT0NLX3ZhbHVlKGEsaSksJnApOwotKyAgICAgICAgICAg ICAgICBpMmQoc2tfT1BFTlNTTF9CTE9DS192YWx1ZShhLGkpLCZwKTsKLSAgICAgICAgICAgICAg ICAgcmdTZXRCbG9iW2ldLmNiRGF0YSA9IHAgLSByZ1NldEJsb2JbaV0ucGJEYXRhOyAvKiBMZW5n dGggb2YgdGhpcwotIFNldEJsb2IKLSAqLwotQEAgLTE0MCw3ICsxNDAsNyBAQAotIAotICAvKiBO b3cgd2UgaGF2ZSB0byBzb3J0IHRoZSBibG9icy4gSSBhbSB1c2luZyBhIHNpbXBsZSBhbGdvLgot ICAgICAqU29ydCBwdHJzICpDb3B5IHRvIHRlbXAtbWVtICpDb3B5IGZyb20gdGVtcC1tZW0gdG8g dXNlci1tZW0qLwotLSAgICAgICAgcXNvcnQoIHJnU2V0QmxvYiwgc2tfQkxPQ0tfbnVtKGEpLCBz aXplb2YoTVlCTE9CKSwgU2V0QmxvYkNtcCk7Ci0rICAgICAgICBxc29ydCggcmdTZXRCbG9iLCBz a19PUEVOU1NMX0JMT0NLX251bShhKSwgc2l6ZW9mKE1ZQkxPQiksIFNldEJsb2JDbXApOwotIAkJ aWYgKCEocFRlbXBNZW0gPSBPUEVOU1NMX21hbGxvYyh0b3RTaXplKSkpCi0gCQkJewotIAkJCUFT TjFlcnIoQVNOMV9GX0kyRF9BU04xX1NFVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci1AQCAtMTQ5 LDcgKzE0OSw3IEBACi0gCi0gLyogQ29weSB0byB0ZW1wIG1lbSAqLwotICAgICAgICAgcCA9IHBU ZW1wTWVtOwotLSAgICAgICAgZm9yKGk9MDsgaTxza19CTE9DS19udW0oYSk7ICsraSkKLSsgICAg ICAgIGZvcihpPTA7IGk8c2tfT1BFTlNTTF9CTE9DS19udW0oYSk7ICsraSkKLSAJCXsKLSAgICAg ICAgICAgICAgICAgbWVtY3B5KHAsIHJnU2V0QmxvYltpXS5wYkRhdGEsIHJnU2V0QmxvYltpXS5j YkRhdGEpOwotICAgICAgICAgICAgICAgICBwICs9IHJnU2V0QmxvYltpXS5jYkRhdGE7Ci1AQCAt MTYzLDE3ICsxNjMsMTggQEAKLSAgICAgICAgIHJldHVybihyKTsKLSAgICAgICAgIH0KLSAKLS1T VEFDS19PRihCTE9DSykgKmQyaV9BU04xX1NFVChTVEFDS19PRihCTE9DSykgKiphLCBjb25zdCB1 bnNpZ25lZCBjaGFyICoqcHAsCi0rU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSykgKmQyaV9BU04xX1NF VChTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqKmEsCi0rCQkJICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqKnBwLAotIAkJCSAgICAgIGxvbmcgbGVuZ3RoLCBkMmlfb2Zfdm9pZCAqZDJpLAotLQkJ CSAgICAgIHZvaWQgKCpmcmVlX2Z1bmMpKEJMT0NLKSwgaW50IGV4X3RhZywKLSsJCQkgICAgICB2 b2lkICgqZnJlZV9mdW5jKShPUEVOU1NMX0JMT0NLKSwgaW50IGV4X3RhZywKLSAJCQkgICAgICBp bnQgZXhfY2xhc3MpCi0gCXsKLSAJQVNOMV9jb25zdF9DVFggYzsKLS0JU1RBQ0tfT0YoQkxPQ0sp ICpyZXQ9TlVMTDsKLSsJU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSykgKnJldD1OVUxMOwotIAotIAlp ZiAoKGEgPT0gTlVMTCkgfHwgKCgqYSkgPT0gTlVMTCkpCi0gCQl7Ci0tCQlpZiAoKHJldD1za19C TE9DS19uZXdfbnVsbCgpKSA9PSBOVUxMKQotKwkJaWYgKChyZXQ9c2tfT1BFTlNTTF9CTE9DS19u ZXdfbnVsbCgpKSA9PSBOVUxMKQotIAkJCXsKLSAJCQlBU04xZXJyKEFTTjFfRl9EMklfQVNOMV9T RVQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotIAkJCWdvdG8gZXJyOwotQEAgLTIyMSw3ICsyMjIs NyBAQAotIAkJCWFzbjFfYWRkX2Vycm9yKCpwcCwoaW50KShjLnAtICpwcCkpOwotIAkJCWdvdG8g ZXJyOwotIAkJCX0KLS0JCWlmICghc2tfQkxPQ0tfcHVzaChyZXQscykpIGdvdG8gZXJyOwotKwkJ aWYgKCFza19PUEVOU1NMX0JMT0NLX3B1c2gocmV0LHMpKSBnb3RvIGVycjsKLSAJCX0KLSAJaWYg KGEgIT0gTlVMTCkgKCphKT1yZXQ7Ci0gCSpwcD1jLnA7Ci1AQCAtMjMwLDkgKzIzMSw5IEBACi0g CWlmICgocmV0ICE9IE5VTEwpICYmICgoYSA9PSBOVUxMKSB8fCAoKmEgIT0gcmV0KSkpCi0gCQl7 Ci0gCQlpZiAoZnJlZV9mdW5jICE9IE5VTEwpCi0tCQkJc2tfQkxPQ0tfcG9wX2ZyZWUocmV0LGZy ZWVfZnVuYyk7Ci0rCQkJc2tfT1BFTlNTTF9CTE9DS19wb3BfZnJlZShyZXQsZnJlZV9mdW5jKTsK LSAJCWVsc2UKLS0JCQlza19CTE9DS19mcmVlKHJldCk7Ci0rCQkJc2tfT1BFTlNTTF9CTE9DS19m cmVlKHJldCk7Ci0gCQl9Ci0gCXJldHVybihOVUxMKTsKLSAJfQotSW5kZXg6IG9wZW5zc2wvY3J5 cHRvL2FzbjEvYXNuMS5oCi1SQ1MgRmlsZTogL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9jcnlwdG8v YXNuMS9hc24xLmgsdgotcmNzZGlmZiAtcSAta2sgJy1yMS4xNjYuMi4zJyAnLXIxLjE2Ni4yLjQn IC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2NyeXB0by9hc24xL2FzbjEuaCx2JyAyPi9kZXYv bnVsbAotLS0tIG9wZW5zc2wvY3J5cHRvL2FzbjEvYXNuMS5oIDIwMDkvMDcvMjQgMTE6MTU6NTUg MS4xNjYuMi4zCi0rKysgb3BlbnNzbC9jcnlwdG8vYXNuMS9hc24xLmggMjAwOS8wNy8yNyAyMToy MToyNSAxLjE2Ni4yLjQKLUBAIC04ODcsMTIgKzg4NywxMyBAQAotIEFTTjFfR0VORVJBTElaRURU SU1FICpBU04xX1RJTUVfdG9fZ2VuZXJhbGl6ZWR0aW1lKEFTTjFfVElNRSAqdCwgQVNOMV9HRU5F UkFMSVpFRFRJTUUgKipvdXQpOwotIGludCBBU04xX1RJTUVfc2V0X3N0cmluZyhBU04xX1RJTUUg KnMsIGNvbnN0IGNoYXIgKnN0cik7Ci0gCi0taW50IGkyZF9BU04xX1NFVChTVEFDS19PRihCTE9D SykgKmEsIHVuc2lnbmVkIGNoYXIgKipwcCwKLStpbnQgaTJkX0FTTjFfU0VUKFNUQUNLX09GKE9Q RU5TU0xfQkxPQ0spICphLCB1bnNpZ25lZCBjaGFyICoqcHAsCi0gCQkgaTJkX29mX3ZvaWQgKmky ZCwgaW50IGV4X3RhZywgaW50IGV4X2NsYXNzLAotIAkJIGludCBpc19zZXQpOwotLVNUQUNLX09G KEJMT0NLKSAqZDJpX0FTTjFfU0VUKFNUQUNLX09GKEJMT0NLKSAqKmEsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKipwcCwKLStTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqZDJpX0FTTjFfU0VUKFNUQUNL X09GKE9QRU5TU0xfQkxPQ0spICoqYSwKLSsJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoq cHAsCi0gCQkJICAgICAgbG9uZyBsZW5ndGgsIGQyaV9vZl92b2lkICpkMmksCi0tCQkJICAgICAg dm9pZCAoKmZyZWVfZnVuYykoQkxPQ0spLCBpbnQgZXhfdGFnLAotKwkJCSAgICAgIHZvaWQgKCpm cmVlX2Z1bmMpKE9QRU5TU0xfQkxPQ0spLCBpbnQgZXhfdGFnLAotIAkJCSAgICAgIGludCBleF9j bGFzcyk7Ci0gCi0gI2lmbmRlZiBPUEVOU1NMX05PX0JJTwotQEAgLTEwNDUsOSArMTA0Niw5IEBA Ci0gaW50IEFTTjFfVFlQRV9nZXRfaW50X29jdGV0c3RyaW5nKEFTTjFfVFlQRSAqYSxsb25nICpu dW0sCi0gCXVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBtYXhfbGVuKTsKLSAKLS1TVEFDS19PRihC TE9DSykgKkFTTjFfc2VxX3VucGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4s Ci0tCQkJCSBkMmlfb2Zfdm9pZCAqZDJpLCB2b2lkICgqZnJlZV9mdW5jKShCTE9DSykpOwotLXVu c2lnbmVkIGNoYXIgKkFTTjFfc2VxX3BhY2soU1RBQ0tfT0YoQkxPQ0spICpzYWZlcywgaTJkX29m X3ZvaWQgKmkyZCwKLStTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqQVNOMV9zZXFfdW5wYWNrKGNv bnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwKLSsJCQkJIGQyaV9vZl92b2lkICpkMmks IHZvaWQgKCpmcmVlX2Z1bmMpKE9QRU5TU0xfQkxPQ0spKTsKLSt1bnNpZ25lZCBjaGFyICpBU04x X3NlcV9wYWNrKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICpzYWZlcywgaTJkX29mX3ZvaWQgKmky ZCwKLSAJCQkgICAgIHVuc2lnbmVkIGNoYXIgKipidWYsIGludCAqbGVuICk7Ci0gdm9pZCAqQVNO MV91bnBhY2tfc3RyaW5nKEFTTjFfU1RSSU5HICpvY3QsIGQyaV9vZl92b2lkICpkMmkpOwotIHZv aWQgKkFTTjFfaXRlbV91bnBhY2soQVNOMV9TVFJJTkcgKm9jdCwgY29uc3QgQVNOMV9JVEVNICpp dCk7Ci1JbmRleDogb3BlbnNzbC9jcnlwdG8vYXNuMS9hc25fcGFjay5jCi1SQ1MgRmlsZTogL3Yv b3BlbnNzbC9jdnMvb3BlbnNzbC9jcnlwdG8vYXNuMS9hc25fcGFjay5jLHYKLXJjc2RpZmYgLXEg LWtrICctcjEuMTknICctcjEuMTkuMi4xJyAtdSAnL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9jcnlw dG8vYXNuMS9hc25fcGFjay5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9jcnlwdG8vYXNu MS9hc25fcGFjay5jIDIwMDgvMTEvMTIgMDM6NTc6NDkgMS4xOQotKysrIG9wZW5zc2wvY3J5cHRv L2FzbjEvYXNuX3BhY2suYyAyMDA5LzA3LzI3IDIxOjIxOjI1IDEuMTkuMi4xCi1AQCAtNjYsMTAg KzY2LDEwIEBACi0gCi0gLyogVHVybiBhbiBBU04xIGVuY29kZWQgU0VRVUVOQ0UgT0YgaW50byBh IFNUQUNLIG9mIHN0cnVjdHVyZXMgKi8KLSAKLS1TVEFDS19PRihCTE9DSykgKkFTTjFfc2VxX3Vu cGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCi0tCQkJCSBkMmlfb2Zfdm9p ZCAqZDJpLCB2b2lkICgqZnJlZV9mdW5jKShCTE9DSykpCi0rU1RBQ0tfT0YoT1BFTlNTTF9CTE9D SykgKkFTTjFfc2VxX3VucGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCi0r CQkJIGQyaV9vZl92b2lkICpkMmksIHZvaWQgKCpmcmVlX2Z1bmMpKE9QRU5TU0xfQkxPQ0spKQot IHsKLS0gICAgU1RBQ0tfT0YoQkxPQ0spICpzazsKLSsgICAgU1RBQ0tfT0YoT1BFTlNTTF9CTE9D SykgKnNrOwotICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwYnVmOwotICAgICBwYnVmID0gIGJ1 ZjsKLSAgICAgaWYgKCEoc2sgPSBkMmlfQVNOMV9TRVQoTlVMTCwgJnBidWYsIGxlbiwgZDJpLCBm cmVlX2Z1bmMsCi1AQCAtODIsNyArODIsNyBAQAotICAqIE9QRU5TU0xfbWFsbG9jJ2VkIGJ1ZmZl cgotICAqLwotIAotLXVuc2lnbmVkIGNoYXIgKkFTTjFfc2VxX3BhY2soU1RBQ0tfT0YoQkxPQ0sp ICpzYWZlcywgaTJkX29mX3ZvaWQgKmkyZCwKLSt1bnNpZ25lZCBjaGFyICpBU04xX3NlcV9wYWNr KFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICpzYWZlcywgaTJkX29mX3ZvaWQgKmkyZCwKLSAJCQkg ICAgIHVuc2lnbmVkIGNoYXIgKipidWYsIGludCAqbGVuKQotIHsKLSAJaW50IHNhZmVsZW47Ci1J bmRleDogb3BlbnNzbC9jcnlwdG8vc3RhY2svc2FmZXN0YWNrLmgKLVJDUyBGaWxlOiAvdi9vcGVu c3NsL2N2cy9vcGVuc3NsL2NyeXB0by9zdGFjay9zYWZlc3RhY2suaCx2Ci1yY3NkaWZmIC1xIC1r ayAnLXIxLjcyLjIuNCcgJy1yMS43Mi4yLjUnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2Ny eXB0by9zdGFjay9zYWZlc3RhY2suaCx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5zc2wvY3J5cHRv L3N0YWNrL3NhZmVzdGFjay5oIDIwMDkvMDcvMjcgMjE6MDg6NTAgMS43Mi4yLjQKLSsrKyBvcGVu c3NsL2NyeXB0by9zdGFjay9zYWZlc3RhY2suaCAyMDA5LzA3LzI3IDIxOjIxOjI1IDEuNzIuMi41 Ci1AQCAtMTI4LDggKzEyOCw4IEBACi0gICogbnVsLXRlcm1pbmF0ZWQuIFRoZXNlIHNob3VsZCBh bHNvIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSAibm9ybWFsIgotICAqIHN0YWNrcy4gKi8KLSAKLS10 eXBlZGVmIHZvaWQgKkJMT0NLOwotLURFQ0xBUkVfU1BFQ0lBTF9TVEFDS19PRihCTE9DSywgdm9p ZCkKLSt0eXBlZGVmIHZvaWQgKk9QRU5TU0xfQkxPQ0s7Ci0rREVDTEFSRV9TUEVDSUFMX1NUQUNL X09GKE9QRU5TU0xfQkxPQ0ssIHZvaWQpCi0gCi0gLyogU0tNX3NrXy4uLiBzdGFjayBtYWNyb3Mg YXJlIGludGVybmFsIHRvIHNhZmVzdGFjay5oOgotICAqIG5ldmVyIHVzZSB0aGVtIGRpcmVjdGx5 LCB1c2Ugc2tfPHR5cGU+Xy4uLiBpbnN0ZWFkICovCi1AQCAtMjA1NSwyOSArMjA1NSwyOSBAQAot ICNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVk KE9QRU5TU0xfU1RSSU5HLCAoc3QpKQotIAotIAotLSNkZWZpbmUgc2tfQkxPQ0tfbmV3KGNtcCkg KChTVEFDS19PRihCTE9DSykgKilza19uZXcoQ0hFQ0tFRF9TS19DTVBfRlVOQyh2b2lkLCBjbXAp KSkKLS0jZGVmaW5lIHNrX0JMT0NLX25ld19udWxsKCkgKChTVEFDS19PRihCTE9DSykgKilza19u ZXdfbnVsbCgpKQotLSNkZWZpbmUgc2tfQkxPQ0tfcHVzaChzdCwgdmFsKSBza19wdXNoKENIRUNL RURfUFRSX09GKFNUQUNLX09GKEJMT0NLKSwgc3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwp KQotLSNkZWZpbmUgc2tfQkxPQ0tfZmluZChzdCwgdmFsKSBza19maW5kKENIRUNLRURfUFRSX09G KFNUQUNLX09GKEJMT0NLKSwgc3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwpKQotLSNkZWZp bmUgc2tfQkxPQ0tfdmFsdWUoc3QsIGkpICgoQkxPQ0spc2tfdmFsdWUoQ0hFQ0tFRF9QVFJfT0Yo U1RBQ0tfT0YoQkxPQ0spLCBzdCksIGkpKQotLSNkZWZpbmUgc2tfQkxPQ0tfbnVtKHN0KSBTS01f c2tfbnVtKEJMT0NLLCBzdCkKLS0jZGVmaW5lIHNrX0JMT0NLX3BvcF9mcmVlKHN0LCBmcmVlX2Z1 bmMpIHNrX3BvcF9mcmVlKENIRUNLRURfUFRSX09GKFNUQUNLX09GKEJMT0NLKSwgc3QpLCBDSEVD S0VEX1NLX0ZSRUVfRlVOQzIoQkxPQ0ssIGZyZWVfZnVuYykpCi0tI2RlZmluZSBza19CTE9DS19p bnNlcnQoc3QsIHZhbCwgaSkgc2tfaW5zZXJ0KENIRUNLRURfUFRSX09GKFNUQUNLX09GKEJMT0NL KSwgc3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwpLCBpKQotLSNkZWZpbmUgc2tfQkxPQ0tf ZnJlZShzdCkgU0tNX3NrX2ZyZWUoQkxPQ0ssIHN0KQotLSNkZWZpbmUgc2tfQkxPQ0tfc2V0KHN0 LCBpLCB2YWwpIHNrX3NldCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoQkxPQ0sp LCBzdCksIGksIENIRUNLRURfUFRSX09GKHZvaWQsIHZhbCkpCi0tI2RlZmluZSBza19CTE9DS196 ZXJvKHN0KSBTS01fc2tfemVybyhCTE9DSywgKHN0KSkKLS0jZGVmaW5lIHNrX0JMT0NLX3Vuc2hp ZnQoc3QsIHZhbCkgc2tfdW5zaGlmdCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0Yo QkxPQ0spLCBzdCksIENIRUNLRURfUFRSX09GKHZvaWQsIHZhbCkpCi0tI2RlZmluZSBza19CTE9D S19maW5kX2V4KHN0LCB2YWwpIHNrX2ZpbmRfZXgoKF9TVEFDSyAqKUNIRUNLRURfQ09OU1RfUFRS X09GKFNUQUNLX09GKEJMT0NLKSwgc3QpLCBDSEVDS0VEX0NPTlNUX1BUUl9PRih2b2lkLCB2YWwp KQotLSNkZWZpbmUgc2tfQkxPQ0tfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKEJMT0NLLCAo c3QpLCAoaSkpCi0tI2RlZmluZSBza19CTE9DS19kZWxldGVfcHRyKHN0LCBwdHIpIChCTE9DSyAq KXNrX2RlbGV0ZV9wdHIoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKEJMT0NLKSwg c3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCBwdHIpKQotLSNkZWZpbmUgc2tfQkxPQ0tfc2V0X2Nt cF9mdW5jKHN0LCBjbXApICBcCi0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX25ldyhjbXApICgo U1RBQ0tfT0YoT1BFTlNTTF9CTE9DSykgKilza19uZXcoQ0hFQ0tFRF9TS19DTVBfRlVOQyh2b2lk LCBjbXApKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfbmV3X251bGwoKSAoKFNUQUNLX09G KE9QRU5TU0xfQkxPQ0spICopc2tfbmV3X251bGwoKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfQkxP Q0tfcHVzaChzdCwgdmFsKSBza19wdXNoKENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xf QkxPQ0spLCBzdCksIENIRUNLRURfUFRSX09GKHZvaWQsIHZhbCkpCi0rI2RlZmluZSBza19PUEVO U1NMX0JMT0NLX2ZpbmQoc3QsIHZhbCkgc2tfZmluZChDSEVDS0VEX1BUUl9PRihTVEFDS19PRihP UEVOU1NMX0JMT0NLKSwgc3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwpKQotKyNkZWZpbmUg c2tfT1BFTlNTTF9CTE9DS192YWx1ZShzdCwgaSkgKChPUEVOU1NMX0JMT0NLKXNrX3ZhbHVlKENI RUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIGkpKQotKyNkZWZpbmUg c2tfT1BFTlNTTF9CTE9DS19udW0oc3QpIFNLTV9za19udW0oT1BFTlNTTF9CTE9DSywgc3QpCi0r I2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIHNrX3BvcF9m cmVlKENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIENIRUNLRURf U0tfRlJFRV9GVU5DMihPUEVOU1NMX0JMT0NLLCBmcmVlX2Z1bmMpKQotKyNkZWZpbmUgc2tfT1BF TlNTTF9CTE9DS19pbnNlcnQoc3QsIHZhbCwgaSkgc2tfaW5zZXJ0KENIRUNLRURfUFRSX09GKFNU QUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIENIRUNLRURfUFRSX09GKHZvaWQsIHZhbCksIGkp Ci0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX2ZyZWUoc3QpIFNLTV9za19mcmVlKE9QRU5TU0xf QkxPQ0ssIHN0KQotKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19zZXQoc3QsIGksIHZhbCkgc2tf c2V0KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX0JMT0NLKSwgc3Qp LCBpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9D S196ZXJvKHN0KSBTS01fc2tfemVybyhPUEVOU1NMX0JMT0NLLCAoc3QpKQotKyNkZWZpbmUgc2tf T1BFTlNTTF9CTE9DS191bnNoaWZ0KHN0LCB2YWwpIHNrX3Vuc2hpZnQoKF9TVEFDSyAqKUNIRUNL RURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIENIRUNLRURfUFRSX09GKHZv aWQsIHZhbCkpCi0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX2ZpbmRfZXgoc3QsIHZhbCkgc2tf ZmluZF9leCgoX1NUQUNLICopQ0hFQ0tFRF9DT05TVF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9C TE9DSyksIHN0KSwgQ0hFQ0tFRF9DT05TVF9QVFJfT0Yodm9pZCwgdmFsKSkKLSsjZGVmaW5lIHNr X09QRU5TU0xfQkxPQ0tfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKE9QRU5TU0xfQkxPQ0ss IChzdCksIChpKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfZGVsZXRlX3B0cihzdCwgcHRy KSAoT1BFTlNTTF9CTE9DSyAqKXNrX2RlbGV0ZV9wdHIoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09G KFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIENIRUNLRURfUFRSX09GKHZvaWQsIHB0cikp Ci0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3NldF9jbXBfZnVuYyhzdCwgY21wKSAgXAotIAko KGludCAoKikoY29uc3Qgdm9pZCAqIGNvbnN0ICosY29uc3Qgdm9pZCAqIGNvbnN0ICopKSBcCi0t CXNrX3NldF9jbXBfZnVuYygoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoQkxPQ0sp LCBzdCksIENIRUNLRURfU0tfQ01QX0ZVTkModm9pZCwgY21wKSkpCi0tI2RlZmluZSBza19CTE9D S19kdXAoc3QpIFNLTV9za19kdXAoQkxPQ0ssIHN0KQotLSNkZWZpbmUgc2tfQkxPQ0tfc2hpZnQo c3QpIFNLTV9za19zaGlmdChCTE9DSywgKHN0KSkKLS0jZGVmaW5lIHNrX0JMT0NLX3BvcChzdCkg KHZvaWQgKilza19wb3AoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKEJMT0NLKSwg c3QpKQotLSNkZWZpbmUgc2tfQkxPQ0tfc29ydChzdCkgU0tNX3NrX3NvcnQoQkxPQ0ssIChzdCkp Ci0tI2RlZmluZSBza19CTE9DS19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQkxPQ0ss IChzdCkpCi0rCXNrX3NldF9jbXBfZnVuYygoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tf T0YoT1BFTlNTTF9CTE9DSyksIHN0KSwgQ0hFQ0tFRF9TS19DTVBfRlVOQyh2b2lkLCBjbXApKSkK LSsjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfZHVwKHN0KSBTS01fc2tfZHVwKE9QRU5TU0xfQkxP Q0ssIHN0KQotKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19zaGlmdChzdCkgU0tNX3NrX3NoaWZ0 KE9QRU5TU0xfQkxPQ0ssIChzdCkpCi0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3BvcChzdCkg KHZvaWQgKilza19wb3AoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xf QkxPQ0spLCBzdCkpCi0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3NvcnQoc3QpIFNLTV9za19z b3J0KE9QRU5TU0xfQkxPQ0ssIChzdCkpCi0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX2lzX3Nv cnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChPUEVOU1NMX0JMT0NLLCAoc3QpKQotIAotIAotICNk ZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX25ldyhjbXApICgoU1RBQ0tfT0YoT1BFTlNTTF9QU1RS SU5HKSAqKXNrX25ldyhDSEVDS0VEX1NLX0NNUF9GVU5DKE9QRU5TU0xfU1RSSU5HLCBjbXApKSkK CmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGEzLW5hbWluZ3N0ci5wYXRjaCBiL29wZW5z c2wtMS4wLjAtYmV0YTMtbmFtaW5nc3RyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA0NGRlZTk1Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTMtbmFtaW5nc3Ry LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTY2MyArMCwwIEBACi1JbmRleDogb3BlbnNzbC9h cHBzL2FwcHMuYwotUkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5zc2wvYXBwcy9hcHBzLmMs dgotcmNzZGlmZiAtcSAta2sgJy1yMS4xMzMuMi42JyAnLXIxLjEzMy4yLjcnIC11ICcvdi9vcGVu c3NsL2N2cy9vcGVuc3NsL2FwcHMvYXBwcy5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9h cHBzL2FwcHMuYyAyMDA5LzA2LzI5IDE2OjA5OjU4IDEuMTMzLjIuNgotKysrIG9wZW5zc2wvYXBw cy9hcHBzLmMgMjAwOS8wNy8yNyAyMTowODo0MyAxLjEzMy4yLjcKLUBAIC0xNDg4LDcgKzE0ODgs NyBAQAotIAlyZXR1cm4gcDsKLSAJfQotIAotLXN0YXRpYyB1bnNpZ25lZCBsb25nIGluZGV4X3Nl cmlhbF9oYXNoKGNvbnN0IENTVFJJTkcgKmEpCi0rc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5kZXhf c2VyaWFsX2hhc2goY29uc3QgT1BFTlNTTF9DU1RSSU5HICphKQotIAl7Ci0gCWNvbnN0IGNoYXIg Km47Ci0gCi1AQCAtMTQ5Nyw3ICsxNDk3LDcgQEAKLSAJcmV0dXJuKGxoX3N0cmhhc2gobikpOwot IAl9Ci0gCi0tc3RhdGljIGludCBpbmRleF9zZXJpYWxfY21wKGNvbnN0IENTVFJJTkcgKmEsIGNv bnN0IENTVFJJTkcgKmIpCi0rc3RhdGljIGludCBpbmRleF9zZXJpYWxfY21wKGNvbnN0IE9QRU5T U0xfQ1NUUklORyAqYSwgY29uc3QgT1BFTlNTTF9DU1RSSU5HICpiKQotIAl7Ci0gCWNvbnN0IGNo YXIgKmFhLCpiYjsKLSAKLUBAIC0xNTA5LDE2ICsxNTA5LDE2IEBACi0gc3RhdGljIGludCBpbmRl eF9uYW1lX3F1YWwoY2hhciAqKmEpCi0gCXsgcmV0dXJuKGFbMF1bMF0gPT0gJ1YnKTsgfQotIAot LXN0YXRpYyB1bnNpZ25lZCBsb25nIGluZGV4X25hbWVfaGFzaChjb25zdCBDU1RSSU5HICphKQot K3N0YXRpYyB1bnNpZ25lZCBsb25nIGluZGV4X25hbWVfaGFzaChjb25zdCBPUEVOU1NMX0NTVFJJ TkcgKmEpCi0gCXsgcmV0dXJuKGxoX3N0cmhhc2goYVtEQl9uYW1lXSkpOyB9Ci0gCi0taW50IGlu ZGV4X25hbWVfY21wKGNvbnN0IENTVFJJTkcgKmEsIGNvbnN0IENTVFJJTkcgKmIpCi0raW50IGlu ZGV4X25hbWVfY21wKGNvbnN0IE9QRU5TU0xfQ1NUUklORyAqYSwgY29uc3QgT1BFTlNTTF9DU1RS SU5HICpiKQotIAl7IHJldHVybihzdHJjbXAoYVtEQl9uYW1lXSwgYltEQl9uYW1lXSkpOyB9Ci0g Ci0tc3RhdGljIElNUExFTUVOVF9MSEFTSF9IQVNIX0ZOKGluZGV4X3NlcmlhbCwgQ1NUUklORykK LS1zdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4oaW5kZXhfc2VyaWFsLCBDU1RSSU5HKQot LXN0YXRpYyBJTVBMRU1FTlRfTEhBU0hfSEFTSF9GTihpbmRleF9uYW1lLCBDU1RSSU5HKQotLXN0 YXRpYyBJTVBMRU1FTlRfTEhBU0hfQ09NUF9GTihpbmRleF9uYW1lLCBDU1RSSU5HKQotK3N0YXRp YyBJTVBMRU1FTlRfTEhBU0hfSEFTSF9GTihpbmRleF9zZXJpYWwsIE9QRU5TU0xfQ1NUUklORykK LStzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4oaW5kZXhfc2VyaWFsLCBPUEVOU1NMX0NT VFJJTkcpCi0rc3RhdGljIElNUExFTUVOVF9MSEFTSF9IQVNIX0ZOKGluZGV4X25hbWUsIE9QRU5T U0xfQ1NUUklORykKLStzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4oaW5kZXhfbmFtZSwg T1BFTlNTTF9DU1RSSU5HKQotIAotICN1bmRlZiBCU0laRQotICNkZWZpbmUgQlNJWkUgMjU2Ci1J bmRleDogb3BlbnNzbC9hcHBzL2FwcHMuaAotUkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5z c2wvYXBwcy9hcHBzLmgsdgotcmNzZGlmZiAtcSAta2sgJy1yMS45MScgJy1yMS45MS4yLjEnIC11 ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvYXBwcy5oLHYnIDI+L2Rldi9udWxsCi0tLS0g b3BlbnNzbC9hcHBzL2FwcHMuaCAyMDA4LzExLzI0IDE3OjI3OjA1IDEuOTEKLSsrKyBvcGVuc3Ns L2FwcHMvYXBwcy5oIDIwMDkvMDcvMjcgMjE6MDg6NDQgMS45MS4yLjEKLUBAIC0yOTUsOSArMjk1 LDkgQEAKLSBpbnQgcm90YXRlX2luZGV4KGNvbnN0IGNoYXIgKmRiZmlsZSwgY29uc3QgY2hhciAq bmV3X3N1ZmZpeCwgY29uc3QgY2hhciAqb2xkX3N1ZmZpeCk7Ci0gdm9pZCBmcmVlX2luZGV4KENB X0RCICpkYik7Ci0gI2RlZmluZSBpbmRleF9uYW1lX2NtcF9ub2NvbnN0KGEsIGIpIFwKLS0JaW5k ZXhfbmFtZV9jbXAoKGNvbnN0IENTVFJJTkcgKilDSEVDS0VEX1BUUl9PRihTVFJJTkcsIGEpLCBc Ci0tCShjb25zdCBDU1RSSU5HICopQ0hFQ0tFRF9QVFJfT0YoU1RSSU5HLCBiKSkKLS1pbnQgaW5k ZXhfbmFtZV9jbXAoY29uc3QgQ1NUUklORyAqYSwgY29uc3QgQ1NUUklORyAqYik7Ci0rCWluZGV4 X25hbWVfY21wKChjb25zdCBPUEVOU1NMX0NTVFJJTkcgKilDSEVDS0VEX1BUUl9PRihPUEVOU1NM X1NUUklORywgYSksIFwKLSsJKGNvbnN0IE9QRU5TU0xfQ1NUUklORyAqKUNIRUNLRURfUFRSX09G KE9QRU5TU0xfU1RSSU5HLCBiKSkKLStpbnQgaW5kZXhfbmFtZV9jbXAoY29uc3QgT1BFTlNTTF9D U1RSSU5HICphLCBjb25zdCBPUEVOU1NMX0NTVFJJTkcgKmIpOwotIGludCBwYXJzZV95ZXNubyhj b25zdCBjaGFyICpzdHIsIGludCBkZWYpOwotIAotIFg1MDlfTkFNRSAqcGFyc2VfbmFtZShjaGFy ICpzdHIsIGxvbmcgY2h0eXBlLCBpbnQgbXVsdGlyZG4pOwotSW5kZXg6IG9wZW5zc2wvYXBwcy9h c24xcGFycy5jCi1SQ1MgRmlsZTogL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9hcHBzL2FzbjFwYXJz LmMsdgotcmNzZGlmZiAtcSAta2sgJy1yMS4yNicgJy1yMS4yNi4yLjEnIC11ICcvdi9vcGVuc3Ns L2N2cy9vcGVuc3NsL2FwcHMvYXNuMXBhcnMuYyx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5zc2wv YXBwcy9hc24xcGFycy5jIDIwMDgvMTEvMDUgMTg6Mzg6NTEgMS4yNgotKysrIG9wZW5zc2wvYXBw cy9hc24xcGFycy5jIDIwMDkvMDcvMjcgMjE6MDg6NDQgMS4yNi4yLjEKLUBAIC05Niw3ICs5Niw3 IEBACi0gCXVuc2lnbmVkIGNoYXIgKnRtcGJ1ZjsKLSAJY29uc3QgdW5zaWduZWQgY2hhciAqY3Rt cGJ1ZjsKLSAJQlVGX01FTSAqYnVmPU5VTEw7Ci0tCVNUQUNLX09GKFNUUklORykgKm9zaz1OVUxM OwotKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKm9zaz1OVUxMOwotIAlBU04xX1RZUEUgKmF0 PU5VTEw7Ci0gCi0gCWluZm9ybWF0PUZPUk1BVF9QRU07Ci1AQCAtMTEzLDcgKzExMyw3IEBACi0g CXByb2c9YXJndlswXTsKLSAJYXJnYy0tOwotIAlhcmd2Kys7Ci0tCWlmICgob3NrPXNrX1NUUklO R19uZXdfbnVsbCgpKSA9PSBOVUxMKQotKwlpZiAoKG9zaz1za19PUEVOU1NMX1NUUklOR19uZXdf bnVsbCgpKSA9PSBOVUxMKQotIAkJewotIAkJQklPX3ByaW50ZihiaW9fZXJyLCJNZW1vcnkgYWxs b2NhdGlvbiBmYWlsdXJlXG4iKTsKLSAJCWdvdG8gZW5kOwotQEAgLTE2OSw3ICsxNjksNyBAQAot IAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItc3RycGFyc2UiKSA9PSAwKQotIAkJCXsKLSAJCQlp ZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7Ci0tCQkJc2tfU1RSSU5HX3B1c2gob3NrLCooKythcmd2 KSk7Ci0rCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChvc2ssKigrK2FyZ3YpKTsKLSAJCQl9Ci0g CQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1nZW5zdHIiKSA9PSAwKQotIAkJCXsKLUBAIC0zMDIs MTggKzMwMiwxOCBAQAotIAotIAkvKiBJZiBhbnkgc3RydWN0cyB0byBwYXJzZSBnbyB0aHJvdWdo IGluIHNlcXVlbmNlICovCi0gCi0tCWlmIChza19TVFJJTkdfbnVtKG9zaykpCi0rCWlmIChza19P UEVOU1NMX1NUUklOR19udW0ob3NrKSkKLSAJCXsKLSAJCXRtcGJ1Zj0odW5zaWduZWQgY2hhciAq KXN0cjsKLSAJCXRtcGxlbj1udW07Ci0tCQlmb3IgKGk9MDsgaTxza19TVFJJTkdfbnVtKG9zayk7 IGkrKykKLSsJCWZvciAoaT0wOyBpPHNrX09QRU5TU0xfU1RSSU5HX251bShvc2spOyBpKyspCi0g CQkJewotIAkJCUFTTjFfVFlQRSAqYXRtcDsKLSAJCQlpbnQgdHlwOwotLQkJCWo9YXRvaShza19T VFJJTkdfdmFsdWUob3NrLGkpKTsKLSsJCQlqPWF0b2koc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUo b3NrLGkpKTsKLSAJCQlpZiAoaiA9PSAwKQotIAkJCQl7Ci0tCQkJCUJJT19wcmludGYoYmlvX2Vy ciwiJyVzJyBpcyBhbiBpbnZhbGlkIG51bWJlclxuIixza19TVFJJTkdfdmFsdWUob3NrLGkpKTsK LSsJCQkJQklPX3ByaW50ZihiaW9fZXJyLCInJXMnIGlzIGFuIGludmFsaWQgbnVtYmVyXG4iLHNr X09QRU5TU0xfU1RSSU5HX3ZhbHVlKG9zayxpKSk7Ci0gCQkJCWNvbnRpbnVlOwotIAkJCQl9Ci0g CQkJdG1wYnVmKz1qOwotQEAgLTM3OCw3ICszNzgsNyBAQAotIAkJRVJSX3ByaW50X2Vycm9ycyhi aW9fZXJyKTsKLSAJaWYgKGJ1ZiAhPSBOVUxMKSBCVUZfTUVNX2ZyZWUoYnVmKTsKLSAJaWYgKGF0 ICE9IE5VTEwpIEFTTjFfVFlQRV9mcmVlKGF0KTsKLS0JaWYgKG9zayAhPSBOVUxMKSBza19TVFJJ TkdfZnJlZShvc2spOwotKwlpZiAob3NrICE9IE5VTEwpIHNrX09QRU5TU0xfU1RSSU5HX2ZyZWUo b3NrKTsKLSAJT0JKX2NsZWFudXAoKTsKLSAJYXBwc19zaHV0ZG93bigpOwotIAlPUEVOU1NMX0VY SVQocmV0KTsKLUluZGV4OiBvcGVuc3NsL2FwcHMvY2EuYwotUkNTIEZpbGU6IC92L29wZW5zc2wv Y3ZzL29wZW5zc2wvYXBwcy9jYS5jLHYKLXJjc2RpZmYgLXEgLWtrICctcjEuMTY3JyAnLXIxLjE2 Ny4yLjEnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvY2EuYyx2JyAyPi9kZXYvbnVs bAotLS0tIG9wZW5zc2wvYXBwcy9jYS5jIDIwMDkvMDMvMDkgMTM6NTk6MDcgMS4xNjcKLSsrKyBv cGVuc3NsL2FwcHMvY2EuYyAyMDA5LzA3LzI3IDIxOjA4OjQ0IDEuMTY3LjIuMQotQEAgLTg4Myw5 ICs4ODMsOSBAQAotIAlpZiAoZGIgPT0gTlVMTCkgZ290byBlcnI7Ci0gCi0gCS8qIExldHMgY2hl Y2sgc29tZSBmaWVsZHMgKi8KLS0JZm9yIChpPTA7IGk8c2tfUFNUUklOR19udW0oZGItPmRiLT5k YXRhKTsgaSsrKQotKwlmb3IgKGk9MDsgaTxza19PUEVOU1NMX1BTVFJJTkdfbnVtKGRiLT5kYi0+ ZGF0YSk7IGkrKykKLSAJCXsKLS0JCXBwPXNrX1BTVFJJTkdfdmFsdWUoZGItPmRiLT5kYXRhLGkp OwotKwkJcHA9c2tfT1BFTlNTTF9QU1RSSU5HX3ZhbHVlKGRiLT5kYi0+ZGF0YSxpKTsKLSAJCWlm ICgocHBbREJfdHlwZV1bMF0gIT0gREJfVFlQRV9SRVYpICYmCi0gCQkJKHBwW0RCX3Jldl9kYXRl XVswXSAhPSAnXDAnKSkKLSAJCQl7Ci1AQCAtOTM4LDcgKzkzOCw3IEBACi0gI2VuZGlmCi0gCQlU WFRfREJfd3JpdGUob3V0LGRiLT5kYik7Ci0gCQlCSU9fcHJpbnRmKGJpb19lcnIsIiVkIGVudHJp ZXMgbG9hZGVkIGZyb20gdGhlIGRhdGFiYXNlXG4iLAotLQkJCSAgIHNrX1BTVFJJTkdfbnVtKGRi LT5kYi0+ZGF0YSkpOwotKwkJCSAgIHNrX09QRU5TU0xfUFNUUklOR19udW0oZGItPmRiLT5kYXRh KSk7Ci0gCQlCSU9fcHJpbnRmKGJpb19lcnIsImdlbmVyYXRpbmcgaW5kZXhcbiIpOwotIAkJfQot IAkKLUBAIC0xNDA4LDkgKzE0MDgsOSBAQAotIAotIAkJQVNOMV9USU1FX2ZyZWUodG1wdG0pOwot IAotLQkJZm9yIChpPTA7IGk8c2tfUFNUUklOR19udW0oZGItPmRiLT5kYXRhKTsgaSsrKQotKwkJ Zm9yIChpPTA7IGk8c2tfT1BFTlNTTF9QU1RSSU5HX251bShkYi0+ZGItPmRhdGEpOyBpKyspCi0g CQkJewotLQkJCXBwPXNrX1BTVFJJTkdfdmFsdWUoZGItPmRiLT5kYXRhLGkpOwotKwkJCXBwPXNr X09QRU5TU0xfUFNUUklOR192YWx1ZShkYi0+ZGItPmRhdGEsaSk7Ci0gCQkJaWYgKHBwW0RCX3R5 cGVdWzBdID09IERCX1RZUEVfUkVWKQotIAkJCQl7Ci0gCQkJCWlmICgocj1YNTA5X1JFVk9LRURf bmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOwotQEAgLTE2ODUsOSArMTY4NSw5IEBACi0gCWludCBv az0gLTEsaSxqLGxhc3QsbmlkOwotIAljb25zdCBjaGFyICpwOwotIAlDT05GX1ZBTFVFICpjdjsK LS0JU1RSSU5HIHJvd1tEQl9OVU1CRVJdOwotLQlTVFJJTkcgKmlyb3c9TlVMTDsKLS0JU1RSSU5H ICpycm93PU5VTEw7Ci0rCU9QRU5TU0xfU1RSSU5HIHJvd1tEQl9OVU1CRVJdOwotKwlPUEVOU1NM X1NUUklORyAqaXJvdz1OVUxMOwotKwlPUEVOU1NMX1NUUklORyAqcnJvdz1OVUxMOwotIAljaGFy IGJ1ZlsyNV07Ci0gCi0gCXRtcHRtPUFTTjFfVVRDVElNRV9uZXcoKTsKLUBAIC0xOTI5LDcgKzE5 MjksNyBAQAotIAotIAlpZiAoZGItPmF0dHJpYnV0ZXMudW5pcXVlX3N1YmplY3QpCi0gCQl7Ci0t CQlTVFJJTkcgKmNyb3c9cm93OwotKwkJT1BFTlNTTF9TVFJJTkcgKmNyb3c9cm93OwotIAotIAkJ cnJvdz1UWFRfREJfZ2V0X2J5X2luZGV4KGRiLT5kYixEQl9uYW1lLGNyb3cpOwotIAkJaWYgKHJy b3cgIT0gTlVMTCkKLUBAIC0yNjMyLDkgKzI2MzIsOSBAQAotIAllbHNlCi0gCQlhX3kyayA9IDA7 Ci0gCi0tCWZvciAoaSA9IDA7IGkgPCBza19QU1RSSU5HX251bShkYi0+ZGItPmRhdGEpOyBpKysp Ci0rCWZvciAoaSA9IDA7IGkgPCBza19PUEVOU1NMX1BTVFJJTkdfbnVtKGRiLT5kYi0+ZGF0YSk7 IGkrKykKLSAJCXsKLS0JCXJyb3cgPSBza19QU1RSSU5HX3ZhbHVlKGRiLT5kYi0+ZGF0YSwgaSk7 Ci0rCQlycm93ID0gc2tfT1BFTlNTTF9QU1RSSU5HX3ZhbHVlKGRiLT5kYi0+ZGF0YSwgaSk7Ci0g Ci0gCQlpZiAocnJvd1tEQl90eXBlXVswXSA9PSAnVicpCi0gCQkgCXsKLUluZGV4OiBvcGVuc3Ns L2FwcHMvY21zLmMKLVJDUyBGaWxlOiAvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvY21zLmMs dgotcmNzZGlmZiAtcSAta2sgJy1yMS4yMy4yLjEnICctcjEuMjMuMi4yJyAtdSAnL3Yvb3BlbnNz bC9jdnMvb3BlbnNzbC9hcHBzL2Ntcy5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9hcHBz L2Ntcy5jIDIwMDkvMDQvMTYgMTc6MjI6NDcgMS4yMy4yLjEKLSsrKyBvcGVuc3NsL2FwcHMvY21z LmMgMjAwOS8wNy8yNyAyMTowODo0NCAxLjIzLjIuMgotQEAgLTcxLDkgKzcxLDkgQEAKLSBzdGF0 aWMgaW50IHNhdmVfY2VydHMoY2hhciAqc2lnbmVyZmlsZSwgU1RBQ0tfT0YoWDUwOSkgKnNpZ25l cnMpOwotIHN0YXRpYyBpbnQgY21zX2NiKGludCBvaywgWDUwOV9TVE9SRV9DVFggKmN0eCk7Ci0g c3RhdGljIHZvaWQgcmVjZWlwdF9yZXF1ZXN0X3ByaW50KEJJTyAqb3V0LCBDTVNfQ29udGVudElu Zm8gKmNtcyk7Ci0tc3RhdGljIENNU19SZWNlaXB0UmVxdWVzdCAqbWFrZV9yZWNlaXB0X3JlcXVl c3QoU1RBQ0tfT0YoU1RSSU5HKSAqcnJfdG8sCi0rc3RhdGljIENNU19SZWNlaXB0UmVxdWVzdCAq bWFrZV9yZWNlaXB0X3JlcXVlc3QoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpycl90bywKLSAJ CQkJCQlpbnQgcnJfYWxsb3JmaXJzdCwKLS0JCQkJCQlTVEFDS19PRihTVFJJTkcpICpycl9mcm9t KTsKLSsJCQkJCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqcnJfZnJvbSk7Ci0gCi0gI2RlZmlu ZSBTTUlNRV9PUAkweDEwCi0gI2RlZmluZSBTTUlNRV9JUAkweDIwCi1AQCAtMTA4LDcgKzEwOCw3 IEBACi0gCWNvbnN0IGNoYXIgKmlubW9kZSA9ICJyIiwgKm91dG1vZGUgPSAidyI7Ci0gCWNoYXIg KmluZmlsZSA9IE5VTEwsICpvdXRmaWxlID0gTlVMTCwgKnJjdGZpbGUgPSBOVUxMOwotIAljaGFy ICpzaWduZXJmaWxlID0gTlVMTCwgKnJlY2lwZmlsZSA9IE5VTEw7Ci0tCVNUQUNLX09GKFNUUklO RykgKnNrc2lnbmVycyA9IE5VTEwsICpza2tleXMgPSBOVUxMOwotKwlTVEFDS19PRihPUEVOU1NM X1NUUklORykgKnNrc2lnbmVycyA9IE5VTEwsICpza2tleXMgPSBOVUxMOwotIAljaGFyICpjZXJ0 ZmlsZSA9IE5VTEwsICprZXlmaWxlID0gTlVMTCwgKmNvbnRmaWxlPU5VTEw7Ci0gCWNoYXIgKmNl cnRzb3V0ZmlsZSA9IE5VTEw7Ci0gCWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7Ci1A QCAtMTIyLDcgKzEyMiw3IEBACi0gCWludCBmbGFncyA9IENNU19ERVRBQ0hFRCwgbm9vdXQgPSAw LCBwcmludCA9IDA7Ci0gCWludCB2ZXJpZnlfcmV0Y29kZSA9IDA7Ci0gCWludCBycl9wcmludCA9 IDAsIHJyX2FsbG9yZmlyc3QgPSAtMTsKLS0JU1RBQ0tfT0YoU1RSSU5HKSAqcnJfdG8gPSBOVUxM LCAqcnJfZnJvbSA9IE5VTEw7Ci0rCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqcnJfdG8gPSBO VUxMLCAqcnJfZnJvbSA9IE5VTEw7Ci0gCUNNU19SZWNlaXB0UmVxdWVzdCAqcnIgPSBOVUxMOwot IAljaGFyICp0byA9IE5VTEwsICpmcm9tID0gTlVMTCwgKnN1YmplY3QgPSBOVUxMOwotIAljaGFy ICpDQWZpbGUgPSBOVUxMLCAqQ0FwYXRoID0gTlVMTDsKLUBAIC0yODEsOCArMjgxLDggQEAKLSAJ CQkJZ290byBhcmdlcnI7Ci0gCQkJYXJncysrOwotIAkJCWlmICghcnJfZnJvbSkKLS0JCQkJcnJf ZnJvbSA9IHNrX1NUUklOR19uZXdfbnVsbCgpOwotLQkJCXNrX1NUUklOR19wdXNoKHJyX2Zyb20s ICphcmdzKTsKLSsJCQkJcnJfZnJvbSA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7Ci0r CQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChycl9mcm9tLCAqYXJncyk7Ci0gCQkJfQotIAkJZWxz ZSBpZiAoIXN0cmNtcCgqYXJncywiLXJlY2VpcHRfcmVxdWVzdF90byIpKQotIAkJCXsKLUBAIC0y OTAsOCArMjkwLDggQEAKLSAJCQkJZ290byBhcmdlcnI7Ci0gCQkJYXJncysrOwotIAkJCWlmICgh cnJfdG8pCi0tCQkJCXJyX3RvID0gc2tfU1RSSU5HX25ld19udWxsKCk7Ci0tCQkJc2tfU1RSSU5H X3B1c2gocnJfdG8sICphcmdzKTsKLSsJCQkJcnJfdG8gPSBza19PUEVOU1NMX1NUUklOR19uZXdf bnVsbCgpOwotKwkJCXNrX09QRU5TU0xfU1RSSU5HX3B1c2gocnJfdG8sICphcmdzKTsKLSAJCQl9 Ci0gCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi1wcmludCIpKQotIAkJCQl7Ci1AQCAtMzg3 LDEzICszODcsMTMgQEAKLSAJCQlpZiAoc2lnbmVyZmlsZSkKLSAJCQkJewotIAkJCQlpZiAoIXNr c2lnbmVycykKLS0JCQkJCXNrc2lnbmVycyA9IHNrX1NUUklOR19uZXdfbnVsbCgpOwotLQkJCQlz a19TVFJJTkdfcHVzaChza3NpZ25lcnMsIHNpZ25lcmZpbGUpOwotKwkJCQkJc2tzaWduZXJzID0g c2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKLSsJCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVz aChza3NpZ25lcnMsIHNpZ25lcmZpbGUpOwotIAkJCQlpZiAoIWtleWZpbGUpCi0gCQkJCQlrZXlm aWxlID0gc2lnbmVyZmlsZTsKLSAJCQkJaWYgKCFza2tleXMpCi0tCQkJCQlza2tleXMgPSBza19T VFJJTkdfbmV3X251bGwoKTsKLS0JCQkJc2tfU1RSSU5HX3B1c2goc2trZXlzLCBrZXlmaWxlKTsK LSsJCQkJCXNra2V5cyA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7Ci0rCQkJCXNrX09Q RU5TU0xfU1RSSU5HX3B1c2goc2trZXlzLCBrZXlmaWxlKTsKLSAJCQkJa2V5ZmlsZSA9IE5VTEw7 Ci0gCQkJCX0KLSAJCQlzaWduZXJmaWxlID0gKisrYXJnczsKLUBAIC00MzUsMTIgKzQzNSwxMiBA QAotIAkJCQkJZ290byBhcmdlcnI7Ci0gCQkJCQl9Ci0gCQkJCWlmICghc2tzaWduZXJzKQotLQkJ CQkJc2tzaWduZXJzID0gc2tfU1RSSU5HX25ld19udWxsKCk7Ci0tCQkJCXNrX1NUUklOR19wdXNo KHNrc2lnbmVycywgc2lnbmVyZmlsZSk7Ci0rCQkJCQlza3NpZ25lcnMgPSBza19PUEVOU1NMX1NU UklOR19uZXdfbnVsbCgpOwotKwkJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKHNrc2lnbmVycywg c2lnbmVyZmlsZSk7Ci0gCQkJCXNpZ25lcmZpbGUgPSBOVUxMOwotIAkJCQlpZiAoIXNra2V5cykK LS0JCQkJCXNra2V5cyA9IHNrX1NUUklOR19uZXdfbnVsbCgpOwotLQkJCQlza19TVFJJTkdfcHVz aChza2tleXMsIGtleWZpbGUpOwotKwkJCQkJc2trZXlzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3 X251bGwoKTsKLSsJCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChza2tleXMsIGtleWZpbGUpOwot IAkJCQl9Ci0gCQkJa2V5ZmlsZSA9ICorK2FyZ3M7Ci0gCQkJfQotQEAgLTUzOSwxMyArNTM5LDEz IEBACi0gCQlpZiAoc2lnbmVyZmlsZSkKLSAJCQl7Ci0gCQkJaWYgKCFza3NpZ25lcnMpCi0tCQkJ CXNrc2lnbmVycyA9IHNrX1NUUklOR19uZXdfbnVsbCgpOwotLQkJCXNrX1NUUklOR19wdXNoKHNr c2lnbmVycywgc2lnbmVyZmlsZSk7Ci0rCQkJCXNrc2lnbmVycyA9IHNrX09QRU5TU0xfU1RSSU5H X25ld19udWxsKCk7Ci0rCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChza3NpZ25lcnMsIHNpZ25l cmZpbGUpOwotIAkJCWlmICghc2trZXlzKQotLQkJCQlza2tleXMgPSBza19TVFJJTkdfbmV3X251 bGwoKTsKLSsJCQkJc2trZXlzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKLSAJCQlp ZiAoIWtleWZpbGUpCi0gCQkJCWtleWZpbGUgPSBzaWduZXJmaWxlOwotLQkJCXNrX1NUUklOR19w dXNoKHNra2V5cywga2V5ZmlsZSk7Ci0rCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChza2tleXMs IGtleWZpbGUpOwotIAkJCX0KLSAJCWlmICghc2tzaWduZXJzKQotIAkJCXsKLUBAIC05ODAsMTEg Kzk4MCwxMSBAQAotIAkJCX0KLSAJCWVsc2UKLSAJCQlmbGFncyB8PSBDTVNfUkVVU0VfRElHRVNU OwotLQkJZm9yIChpID0gMDsgaSA8IHNrX1NUUklOR19udW0oc2tzaWduZXJzKTsgaSsrKQotKwkJ Zm9yIChpID0gMDsgaSA8IHNrX09QRU5TU0xfU1RSSU5HX251bShza3NpZ25lcnMpOyBpKyspCi0g CQkJewotIAkJCUNNU19TaWduZXJJbmZvICpzaTsKLS0JCQlzaWduZXJmaWxlID0gc2tfU1RSSU5H X3ZhbHVlKHNrc2lnbmVycywgaSk7Ci0tCQkJa2V5ZmlsZSA9IHNrX1NUUklOR192YWx1ZShza2tl eXMsIGkpOwotKwkJCXNpZ25lcmZpbGUgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShza3NpZ25l cnMsIGkpOwotKwkJCWtleWZpbGUgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShza2tleXMsIGkp OwotIAkJCXNpZ25lciA9IGxvYWRfY2VydChiaW9fZXJyLCBzaWduZXJmaWxlLEZPUk1BVF9QRU0s IE5VTEwsCi0gCQkJCQllLCAic2lnbmVyIGNlcnRpZmljYXRlIik7Ci0gCQkJaWYgKCFzaWduZXIp Ci1AQCAtMTE2MCw5ICsxMTYwLDkgQEAKLSAJaWYgKHZwbSkKLSAJCVg1MDlfVkVSSUZZX1BBUkFN X2ZyZWUodnBtKTsKLSAJaWYgKHNrc2lnbmVycykKLS0JCXNrX1NUUklOR19mcmVlKHNrc2lnbmVy cyk7Ci0rCQlza19PUEVOU1NMX1NUUklOR19mcmVlKHNrc2lnbmVycyk7Ci0gCWlmIChza2tleXMp Ci0tCQlza19TVFJJTkdfZnJlZShza2tleXMpOwotKwkJc2tfT1BFTlNTTF9TVFJJTkdfZnJlZShz a2tleXMpOwotIAlpZiAoc2VjcmV0X2tleSkKLSAJCU9QRU5TU0xfZnJlZShzZWNyZXRfa2V5KTsK LSAJaWYgKHNlY3JldF9rZXlpZCkKLUBAIC0xMTcyLDkgKzExNzIsOSBAQAotIAlpZiAocnIpCi0g CQlDTVNfUmVjZWlwdFJlcXVlc3RfZnJlZShycik7Ci0gCWlmIChycl90bykKLS0JCXNrX1NUUklO R19mcmVlKHJyX3RvKTsKLSsJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUocnJfdG8pOwotIAlpZiAo cnJfZnJvbSkKLS0JCXNrX1NUUklOR19mcmVlKHJyX2Zyb20pOwotKwkJc2tfT1BFTlNTTF9TVFJJ TkdfZnJlZShycl9mcm9tKTsKLSAJWDUwOV9TVE9SRV9mcmVlKHN0b3JlKTsKLSAJWDUwOV9mcmVl KGNlcnQpOwotIAlYNTA5X2ZyZWUocmVjaXApOwotQEAgLTEyOTYsNyArMTI5Niw3IEBACi0gCQl9 Ci0gCX0KLSAKLS1zdGF0aWMgU1RBQ0tfT0YoR0VORVJBTF9OQU1FUykgKm1ha2VfbmFtZXNfc3Rh Y2soU1RBQ0tfT0YoU1RSSU5HKSAqbnMpCi0rc3RhdGljIFNUQUNLX09GKEdFTkVSQUxfTkFNRVMp ICptYWtlX25hbWVzX3N0YWNrKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqbnMpCi0gCXsKLSAJ aW50IGk7Ci0gCVNUQUNLX09GKEdFTkVSQUxfTkFNRVMpICpyZXQ7Ci1AQCAtMTMwNSw5ICsxMzA1 LDkgQEAKLSAJcmV0ID0gc2tfR0VORVJBTF9OQU1FU19uZXdfbnVsbCgpOwotIAlpZiAoIXJldCkK LSAJCWdvdG8gZXJyOwotLQlmb3IgKGkgPSAwOyBpIDwgc2tfU1RSSU5HX251bShucyk7IGkrKykK LSsJZm9yIChpID0gMDsgaSA8IHNrX09QRU5TU0xfU1RSSU5HX251bShucyk7IGkrKykKLSAJCXsK LS0JCWNoYXIgKnN0ciA9IHNrX1NUUklOR192YWx1ZShucywgaSk7Ci0rCQljaGFyICpzdHIgPSBz a19PUEVOU1NMX1NUUklOR192YWx1ZShucywgaSk7Ci0gCQlnZW4gPSBhMmlfR0VORVJBTF9OQU1F KE5VTEwsIE5VTEwsIE5VTEwsIEdFTl9FTUFJTCwgc3RyLCAwKTsKLSAJCWlmICghZ2VuKQotIAkJ CWdvdG8gZXJyOwotQEAgLTEzMzUsOSArMTMzNSw5IEBACi0gCX0KLSAKLSAKLS1zdGF0aWMgQ01T X1JlY2VpcHRSZXF1ZXN0ICptYWtlX3JlY2VpcHRfcmVxdWVzdChTVEFDS19PRihTVFJJTkcpICpy cl90bywKLStzdGF0aWMgQ01TX1JlY2VpcHRSZXF1ZXN0ICptYWtlX3JlY2VpcHRfcmVxdWVzdChT VEFDS19PRihPUEVOU1NMX1NUUklORykgKnJyX3RvLAotIAkJCQkJCWludCBycl9hbGxvcmZpcnN0 LAotLQkJCQkJCVNUQUNLX09GKFNUUklORykgKnJyX2Zyb20pCi0rCQkJCQkJU1RBQ0tfT0YoT1BF TlNTTF9TVFJJTkcpICpycl9mcm9tKQotIAl7Ci0gCVNUQUNLX09GKEdFTkVSQUxfTkFNRVMpICpy Y3RfdG8sICpyY3RfZnJvbTsKLSAJQ01TX1JlY2VpcHRSZXF1ZXN0ICpycjsKLUluZGV4OiBvcGVu c3NsL2FwcHMvY3JsMnA3LmMKLVJDUyBGaWxlOiAvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMv Y3JsMnA3LmMsdgotcmNzZGlmZiAtcSAta2sgJy1yMS4xOScgJy1yMS4xOS4yLjEnIC11ICcvdi9v cGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvY3JsMnA3LmMsdicgMj4vZGV2L251bGwKLS0tLSBvcGVu c3NsL2FwcHMvY3JsMnA3LmMgMjAwOC8wNi8wNCAxMTowMDo0NSAxLjE5Ci0rKysgb3BlbnNzbC9h cHBzL2NybDJwNy5jIDIwMDkvMDcvMjcgMjE6MDg6NDUgMS4xOS4yLjEKLUBAIC05Miw3ICs5Miw3 IEBACi0gCVBLQ1M3ICpwNyA9IE5VTEw7Ci0gCVBLQ1M3X1NJR05FRCAqcDdzID0gTlVMTDsKLSAJ WDUwOV9DUkwgKmNybD1OVUxMOwotLQlTVEFDS19PRihTVFJJTkcpICpjZXJ0ZmxzdD1OVUxMOwot KwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKmNlcnRmbHN0PU5VTEw7Ci0gCVNUQUNLX09GKFg1 MDlfQ1JMKSAqY3JsX3N0YWNrPU5VTEw7Ci0gCVNUQUNLX09GKFg1MDkpICpjZXJ0X3N0YWNrPU5V TEw7Ci0gCWludCByZXQ9MSxub2NybD0wOwotQEAgLTE0MCw4ICsxNDAsOCBAQAotIAkJZWxzZSBp ZiAoc3RyY21wKCphcmd2LCItY2VydGZpbGUiKSA9PSAwKQotIAkJCXsKLSAJCQlpZiAoLS1hcmdj IDwgMSkgZ290byBiYWQ7Ci0tCQkJaWYoIWNlcnRmbHN0KSBjZXJ0ZmxzdCA9IHNrX1NUUklOR19u ZXdfbnVsbCgpOwotLQkJCXNrX1NUUklOR19wdXNoKGNlcnRmbHN0LCooKythcmd2KSk7Ci0rCQkJ aWYoIWNlcnRmbHN0KSBjZXJ0ZmxzdCA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7Ci0r CQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChjZXJ0ZmxzdCwqKCsrYXJndikpOwotIAkJCX0KLSAJ CWVsc2UKLSAJCQl7Ci1AQCAtMjI2LDggKzIyNiw4IEBACi0gCWlmICgoY2VydF9zdGFjaz1za19Y NTA5X25ld19udWxsKCkpID09IE5VTEwpIGdvdG8gZW5kOwotIAlwN3MtPmNlcnQ9Y2VydF9zdGFj azsKLSAKLS0JaWYoY2VydGZsc3QpIGZvcihpID0gMDsgaSA8IHNrX1NUUklOR19udW0oY2VydGZs c3QpOyBpKyspIHsKLS0JCWNlcnRmaWxlID0gc2tfU1RSSU5HX3ZhbHVlKGNlcnRmbHN0LCBpKTsK LSsJaWYoY2VydGZsc3QpIGZvcihpID0gMDsgaSA8IHNrX09QRU5TU0xfU1RSSU5HX251bShjZXJ0 ZmxzdCk7IGkrKykgewotKwkJY2VydGZpbGUgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShjZXJ0 ZmxzdCwgaSk7Ci0gCQlpZiAoYWRkX2NlcnRzX2Zyb21fZmlsZShjZXJ0X3N0YWNrLGNlcnRmaWxl KSA8IDApCi0gCQkJewotIAkJCUJJT19wcmludGYoYmlvX2VyciwgImVycm9yIGxvYWRpbmcgY2Vy dGlmaWNhdGVzXG4iKTsKLUBAIC0yMzYsNyArMjM2LDcgQEAKLSAJCQl9Ci0gCX0KLSAKLS0Jc2tf U1RSSU5HX2ZyZWUoY2VydGZsc3QpOwotKwlza19PUEVOU1NMX1NUUklOR19mcmVlKGNlcnRmbHN0 KTsKLSAKLSAJaWYgKG91dGZpbGUgPT0gTlVMTCkKLSAJCXsKLUluZGV4OiBvcGVuc3NsL2FwcHMv ZGdzdC5jCi1SQ1MgRmlsZTogL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9hcHBzL2Rnc3QuYyx2Ci1y Y3NkaWZmIC1xIC1rayAnLXIxLjU0LjIuMycgJy1yMS41NC4yLjQnIC11ICcvdi9vcGVuc3NsL2N2 cy9vcGVuc3NsL2FwcHMvZGdzdC5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9hcHBzL2Rn c3QuYyAyMDA5LzA0LzI2IDEyOjE2OjEyIDEuNTQuMi4zCi0rKysgb3BlbnNzbC9hcHBzL2Rnc3Qu YyAyMDA5LzA3LzI3IDIxOjA4OjQ1IDEuNTQuMi40Ci1AQCAtMTI3LDcgKzEyNyw3IEBACi0gI2Vu ZGlmCi0gCWNoYXIgKmhtYWNfa2V5PU5VTEw7Ci0gCWNoYXIgKm1hY19uYW1lPU5VTEw7Ci0tCVNU QUNLX09GKFNUUklORykgKnNpZ29wdHMgPSBOVUxMLCAqbWFjb3B0cyA9IE5VTEw7Ci0rCVNUQUNL X09GKE9QRU5TU0xfU1RSSU5HKSAqc2lnb3B0cyA9IE5VTEwsICptYWNvcHRzID0gTlVMTDsKLSAK LSAJYXBwc19zdGFydHVwKCk7Ci0gCi1AQCAtMjMwLDggKzIzMCw4IEBACi0gCQkJaWYgKC0tYXJn YyA8IDEpCi0gCQkJCWJyZWFrOwotIAkJCWlmICghc2lnb3B0cykKLS0JCQkJc2lnb3B0cyA9IHNr X1NUUklOR19uZXdfbnVsbCgpOwotLQkJCWlmICghc2lnb3B0cyB8fCAhc2tfU1RSSU5HX3B1c2go c2lnb3B0cywgKigrK2FyZ3YpKSkKLSsJCQkJc2lnb3B0cyA9IHNrX09QRU5TU0xfU1RSSU5HX25l d19udWxsKCk7Ci0rCQkJaWYgKCFzaWdvcHRzIHx8ICFza19PUEVOU1NMX1NUUklOR19wdXNoKHNp Z29wdHMsICooKythcmd2KSkpCi0gCQkJCWJyZWFrOwotIAkJCX0KLSAJCWVsc2UgaWYgKHN0cmNt cCgqYXJndiwiLW1hY29wdCIpID09IDApCi1AQCAtMjM5LDggKzIzOSw4IEBACi0gCQkJaWYgKC0t YXJnYyA8IDEpCi0gCQkJCWJyZWFrOwotIAkJCWlmICghbWFjb3B0cykKLS0JCQkJbWFjb3B0cyA9 IHNrX1NUUklOR19uZXdfbnVsbCgpOwotLQkJCWlmICghbWFjb3B0cyB8fCAhc2tfU1RSSU5HX3B1 c2gobWFjb3B0cywgKigrK2FyZ3YpKSkKLSsJCQkJbWFjb3B0cyA9IHNrX09QRU5TU0xfU1RSSU5H X25ld19udWxsKCk7Ci0rCQkJaWYgKCFtYWNvcHRzIHx8ICFza19PUEVOU1NMX1NUUklOR19wdXNo KG1hY29wdHMsICooKythcmd2KSkpCi0gCQkJCWJyZWFrOwotIAkJCX0KLSAJCWVsc2UgaWYgKCht PUVWUF9nZXRfZGlnZXN0YnluYW1lKCYoKCphcmd2KVsxXSkpKSAhPSBOVUxMKQotQEAgLTM2NSw5 ICszNjUsOSBAQAotIAkJaWYgKG1hY29wdHMpCi0gCQkJewotIAkJCWNoYXIgKm1hY29wdDsKLS0J CQlmb3IgKGkgPSAwOyBpIDwgc2tfU1RSSU5HX251bShtYWNvcHRzKTsgaSsrKQotKwkJCWZvciAo aSA9IDA7IGkgPCBza19PUEVOU1NMX1NUUklOR19udW0obWFjb3B0cyk7IGkrKykKLSAJCQkJewot LQkJCQltYWNvcHQgPSBza19TVFJJTkdfdmFsdWUobWFjb3B0cywgaSk7Ci0rCQkJCW1hY29wdCA9 IHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKG1hY29wdHMsIGkpOwotIAkJCQlpZiAocGtleV9jdHJs X3N0cmluZyhtYWNfY3R4LCBtYWNvcHQpIDw9IDApCi0gCQkJCQl7Ci0gCQkJCQlCSU9fcHJpbnRm KGJpb19lcnIsCi1AQCAtNDI0LDkgKzQyNCw5IEBACi0gCQlpZiAoc2lnb3B0cykKLSAJCQl7Ci0g CQkJY2hhciAqc2lnb3B0OwotLQkJCWZvciAoaSA9IDA7IGkgPCBza19TVFJJTkdfbnVtKHNpZ29w dHMpOyBpKyspCi0rCQkJZm9yIChpID0gMDsgaSA8IHNrX09QRU5TU0xfU1RSSU5HX251bShzaWdv cHRzKTsgaSsrKQotIAkJCQl7Ci0tCQkJCXNpZ29wdCA9IHNrX1NUUklOR192YWx1ZShzaWdvcHRz LCBpKTsKLSsJCQkJc2lnb3B0ID0gc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUoc2lnb3B0cywgaSk7 Ci0gCQkJCWlmIChwa2V5X2N0cmxfc3RyaW5nKHBjdHgsIHNpZ29wdCkgPD0gMCkKLSAJCQkJCXsK LSAJCQkJCUJJT19wcmludGYoYmlvX2VyciwKLUBAIC01MzEsOSArNTMxLDkgQEAKLSAJQklPX2Zy ZWVfYWxsKG91dCk7Ci0gCUVWUF9QS0VZX2ZyZWUoc2lna2V5KTsKLSAJaWYgKHNpZ29wdHMpCi0t CQlza19TVFJJTkdfZnJlZShzaWdvcHRzKTsKLSsJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUoc2ln b3B0cyk7Ci0gCWlmIChtYWNvcHRzKQotLQkJc2tfU1RSSU5HX2ZyZWUobWFjb3B0cyk7Ci0rCQlz a19PUEVOU1NMX1NUUklOR19mcmVlKG1hY29wdHMpOwotIAlpZihzaWdidWYpIE9QRU5TU0xfZnJl ZShzaWdidWYpOwotIAlpZiAoYm1kICE9IE5VTEwpIEJJT19mcmVlKGJtZCk7Ci0gCWFwcHNfc2h1 dGRvd24oKTsKLUluZGV4OiBvcGVuc3NsL2FwcHMvZW5naW5lLmMKLVJDUyBGaWxlOiAvdi9vcGVu c3NsL2N2cy9vcGVuc3NsL2FwcHMvZW5naW5lLmMsdgotcmNzZGlmZiAtcSAta2sgJy1yMS4zNCcg Jy1yMS4zNC4yLjEnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvZW5naW5lLmMsdicg Mj4vZGV2L251bGwKLS0tLSBvcGVuc3NsL2FwcHMvZW5naW5lLmMgMjAwOS8wMi8xNSAxNToyOTo1 OSAxLjM0Ci0rKysgb3BlbnNzbC9hcHBzL2VuZ2luZS5jIDIwMDkvMDcvMjcgMjE6MDg6NDUgMS4z NC4yLjEKLUBAIC0yMDAsNyArMjAwLDcgQEAKLSAJY2hhciAqZGVzYyA9IE5VTEw7Ci0gCWludCBm bGFnczsKLSAJaW50IHhwb3MgPSAwOwotLQlTVEFDS19PRihTVFJJTkcpICpjbWRzID0gTlVMTDsK LSsJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpjbWRzID0gTlVMTDsKLSAJaWYoIUVOR0lORV9j dHJsKGUsIEVOR0lORV9DVFJMX0hBU19DVFJMX0ZVTkNUSU9OLCAwLCBOVUxMLCBOVUxMKSB8fAot IAkJCSgobnVtID0gRU5HSU5FX2N0cmwoZSwgRU5HSU5FX0NUUkxfR0VUX0ZJUlNUX0NNRF9UWVBF LAotIAkJCQkJMCwgTlVMTCwgTlVMTCkpIDw9IDApKQotQEAgLTIxMSw3ICsyMTEsNyBAQAotIAkJ cmV0dXJuIDE7Ci0gCQl9Ci0gCi0tCWNtZHMgPSBza19TVFJJTkdfbmV3X251bGwoKTsKLSsJY21k cyA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7Ci0gCi0gCWlmKCFjbWRzKQotIAkJZ290 byBlcnI7Ci1AQCAtMjg0LDE2ICsyODQsMTYgQEAKLSAJCUJJT19wcmludGYoYmlvX291dCwgIlxu Iik7Ci0gCXJldCA9IDE7Ci0gZXJyOgotLQlpZihjbWRzKSBza19TVFJJTkdfcG9wX2ZyZWUoY21k cywgaWRlbnRpdHkpOwotKwlpZihjbWRzKSBza19PUEVOU1NMX1NUUklOR19wb3BfZnJlZShjbWRz LCBpZGVudGl0eSk7Ci0gCWlmKG5hbWUpIE9QRU5TU0xfZnJlZShuYW1lKTsKLSAJaWYoZGVzYykg T1BFTlNTTF9mcmVlKGRlc2MpOwotIAlyZXR1cm4gcmV0OwotIAl9Ci0gCi0tc3RhdGljIHZvaWQg dXRpbF9kb19jbWRzKEVOR0lORSAqZSwgU1RBQ0tfT0YoU1RSSU5HKSAqY21kcywgQklPICpiaW9f b3V0LAotLQkJCSBjb25zdCBjaGFyICppbmRlbnQpCi0rc3RhdGljIHZvaWQgdXRpbF9kb19jbWRz KEVOR0lORSAqZSwgU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpjbWRzLAotKwkJCUJJTyAqYmlv X291dCwgY29uc3QgY2hhciAqaW5kZW50KQotIAl7Ci0tCWludCBsb29wLCByZXMsIG51bSA9IHNr X1NUUklOR19udW0oY21kcyk7Ci0rCWludCBsb29wLCByZXMsIG51bSA9IHNrX09QRU5TU0xfU1RS SU5HX251bShjbWRzKTsKLSAKLSAJaWYobnVtIDwgMCkKLSAJCXsKLUBAIC0zMDQsNyArMzA0LDcg QEAKLSAJCXsKLSAJCWNoYXIgYnVmWzI1Nl07Ci0gCQljb25zdCBjaGFyICpjbWQsICphcmc7Ci0t CQljbWQgPSBza19TVFJJTkdfdmFsdWUoY21kcywgbG9vcCk7Ci0rCQljbWQgPSBza19PUEVOU1NM X1NUUklOR192YWx1ZShjbWRzLCBsb29wKTsKLSAJCXJlcyA9IDE7IC8qIGFzc3VtZSBzdWNjZXNz ICovCi0gCQkvKiBDaGVjayBpZiB0aGlzIGNvbW1hbmQgaGFzIG5vICI6YXJnIiAqLwotIAkJaWYo KGFyZyA9IHN0cnN0cihjbWQsICI6IikpID09IE5VTEwpCi1AQCAtMzQ0LDkgKzM0NCw5IEBACi0g CWNvbnN0IGNoYXIgKipwcDsKLSAJaW50IHZlcmJvc2U9MCwgbGlzdF9jYXA9MCwgdGVzdF9hdmFp bD0wLCB0ZXN0X2F2YWlsX25vaXNlID0gMDsKLSAJRU5HSU5FICplOwotLQlTVEFDS19PRihTVFJJ TkcpICplbmdpbmVzID0gc2tfU1RSSU5HX25ld19udWxsKCk7Ci0tCVNUQUNLX09GKFNUUklORykg KnByZV9jbWRzID0gc2tfU1RSSU5HX25ld19udWxsKCk7Ci0tCVNUQUNLX09GKFNUUklORykgKnBv c3RfY21kcyA9IHNrX1NUUklOR19uZXdfbnVsbCgpOwotKwlTVEFDS19PRihPUEVOU1NMX1NUUklO RykgKmVuZ2luZXMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOwotKwlTVEFDS19PRihP UEVOU1NMX1NUUklORykgKnByZV9jbWRzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsK LSsJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpwb3N0X2NtZHMgPSBza19PUEVOU1NMX1NUUklO R19uZXdfbnVsbCgpOwotIAlpbnQgYmFkb3BzPTE7Ci0gCUJJTyAqYmlvX291dD1OVUxMOwotIAlj b25zdCBjaGFyICppbmRlbnQgPSAiICAgICAiOwotQEAgLTM5MywyMCArMzkzLDIwIEBACi0gCQkJ YXJnYy0tOyBhcmd2Kys7Ci0gCQkJaWYgKGFyZ2MgPT0gMCkKLSAJCQkJZ290byBza2lwX2FyZ19s b29wOwotLQkJCXNrX1NUUklOR19wdXNoKHByZV9jbWRzLCphcmd2KTsKLSsJCQlza19PUEVOU1NM X1NUUklOR19wdXNoKHByZV9jbWRzLCphcmd2KTsKLSAJCQl9Ci0gCQllbHNlIGlmIChzdHJjbXAo KmFyZ3YsIi1wb3N0IikgPT0gMCkKLSAJCQl7Ci0gCQkJYXJnYy0tOyBhcmd2Kys7Ci0gCQkJaWYg KGFyZ2MgPT0gMCkKLSAJCQkJZ290byBza2lwX2FyZ19sb29wOwotLQkJCXNrX1NUUklOR19wdXNo KHBvc3RfY21kcywqYXJndik7Ci0rCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChwb3N0X2NtZHMs KmFyZ3YpOwotIAkJCX0KLSAJCWVsc2UgaWYgKChzdHJuY21wKCphcmd2LCItaCIsMikgPT0gMCkg fHwKLSAJCQkJKHN0cmNtcCgqYXJndiwiLT8iKSA9PSAwKSkKLSAJCQlnb3RvIHNraXBfYXJnX2xv b3A7Ci0gCQllbHNlCi0tCQkJc2tfU1RSSU5HX3B1c2goZW5naW5lcywqYXJndik7Ci0rCQkJc2tf T1BFTlNTTF9TVFJJTkdfcHVzaChlbmdpbmVzLCphcmd2KTsKLSAJCWFyZ2MtLTsKLSAJCWFyZ3Yr KzsKLSAJCX0KLUBAIC00MjEsMTcgKzQyMSwxNyBAQAotIAkJZ290byBlbmQ7Ci0gCQl9Ci0gCi0t CWlmIChza19TVFJJTkdfbnVtKGVuZ2luZXMpID09IDApCi0rCWlmIChza19PUEVOU1NMX1NUUklO R19udW0oZW5naW5lcykgPT0gMCkKLSAJCXsKLSAJCWZvcihlID0gRU5HSU5FX2dldF9maXJzdCgp OyBlICE9IE5VTEw7IGUgPSBFTkdJTkVfZ2V0X25leHQoZSkpCi0gCQkJewotLQkJCXNrX1NUUklO R19wdXNoKGVuZ2luZXMsKGNoYXIgKilFTkdJTkVfZ2V0X2lkKGUpKTsKLSsJCQlza19PUEVOU1NM X1NUUklOR19wdXNoKGVuZ2luZXMsKGNoYXIgKilFTkdJTkVfZ2V0X2lkKGUpKTsKLSAJCQl9Ci0g CQl9Ci0gCi0tCWZvciAoaT0wOyBpPHNrX1NUUklOR19udW0oZW5naW5lcyk7IGkrKykKLSsJZm9y IChpPTA7IGk8c2tfT1BFTlNTTF9TVFJJTkdfbnVtKGVuZ2luZXMpOyBpKyspCi0gCQl7Ci0tCQlj b25zdCBjaGFyICppZCA9IHNrX1NUUklOR192YWx1ZShlbmdpbmVzLGkpOwotKwkJY29uc3QgY2hh ciAqaWQgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShlbmdpbmVzLGkpOwotIAkJaWYgKChlID0g RU5HSU5FX2J5X2lkKGlkKSkgIT0gTlVMTCkKLSAJCQl7Ci0gCQkJY29uc3QgY2hhciAqbmFtZSA9 IEVOR0lORV9nZXRfbmFtZShlKTsKLUBAIC01MzMsOSArNTMzLDkgQEAKLSBlbmQ6Ci0gCi0gCUVS Ul9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0tCXNrX1NUUklOR19wb3BfZnJlZShlbmdpbmVzLCBp ZGVudGl0eSk7Ci0tCXNrX1NUUklOR19wb3BfZnJlZShwcmVfY21kcywgaWRlbnRpdHkpOwotLQlz a19TVFJJTkdfcG9wX2ZyZWUocG9zdF9jbWRzLCBpZGVudGl0eSk7Ci0rCXNrX09QRU5TU0xfU1RS SU5HX3BvcF9mcmVlKGVuZ2luZXMsIGlkZW50aXR5KTsKLSsJc2tfT1BFTlNTTF9TVFJJTkdfcG9w X2ZyZWUocHJlX2NtZHMsIGlkZW50aXR5KTsKLSsJc2tfT1BFTlNTTF9TVFJJTkdfcG9wX2ZyZWUo cG9zdF9jbWRzLCBpZGVudGl0eSk7Ci0gCWlmIChiaW9fb3V0ICE9IE5VTEwpIEJJT19mcmVlX2Fs bChiaW9fb3V0KTsKLSAJYXBwc19zaHV0ZG93bigpOwotIAlPUEVOU1NMX0VYSVQocmV0KTsKLUlu ZGV4OiBvcGVuc3NsL2FwcHMvb2NzcC5jCi1SQ1MgRmlsZTogL3Yvb3BlbnNzbC9jdnMvb3BlbnNz bC9hcHBzL29jc3AuYyx2Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjU0LjIuMScgJy1yMS41NC4yLjIn IC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvb2NzcC5jLHYnIDI+L2Rldi9udWxsCi0t LS0gb3BlbnNzbC9hcHBzL29jc3AuYyAyMDA5LzA0LzAyIDE1OjE5OjAzIDEuNTQuMi4xCi0rKysg b3BlbnNzbC9hcHBzL29jc3AuYyAyMDA5LzA3LzI3IDIxOjA4OjQ1IDEuNTQuMi4yCi1AQCAtOTks NyArOTksNyBAQAotIHN0YXRpYyBpbnQgYWRkX29jc3Bfc2VyaWFsKE9DU1BfUkVRVUVTVCAqKnJl cSwgY2hhciAqc2VyaWFsLCBjb25zdCBFVlBfTUQgKiBjZXJ0X2lkX21kLCBYNTA5ICppc3N1ZXIs Ci0gCQkJCVNUQUNLX09GKE9DU1BfQ0VSVElEKSAqaWRzKTsKLSBzdGF0aWMgaW50IHByaW50X29j c3Bfc3VtbWFyeShCSU8gKm91dCwgT0NTUF9CQVNJQ1JFU1AgKmJzLCBPQ1NQX1JFUVVFU1QgKnJl cSwKLS0JCQkgICAgICBTVEFDS19PRihTVFJJTkcpICpuYW1lcywKLSsJCQkgICAgICBTVEFDS19P RihPUEVOU1NMX1NUUklORykgKm5hbWVzLAotIAkJCSAgICAgIFNUQUNLX09GKE9DU1BfQ0VSVElE KSAqaWRzLCBsb25nIG5zZWMsCi0gCQkJICAgICAgbG9uZyBtYXhhZ2UpOwotIAotQEAgLTE1Myw3 ICsxNTMsNyBAQAotIAlpbnQgYmFkYXJnID0gMDsKLSAJaW50IGk7Ci0gCWludCBpZ25vcmVfZXJy ID0gMDsKLS0JU1RBQ0tfT0YoU1RSSU5HKSAqcmVxbmFtZXMgPSBOVUxMOwotKwlTVEFDS19PRihP UEVOU1NMX1NUUklORykgKnJlcW5hbWVzID0gTlVMTDsKLSAJU1RBQ0tfT0YoT0NTUF9DRVJUSUQp ICppZHMgPSBOVUxMOwotIAotIAlYNTA5ICpyY2FfY2VydCA9IE5VTEw7Ci1AQCAtMTcwLDcgKzE3 MCw3IEBACi0gCVNTTF9sb2FkX2Vycm9yX3N0cmluZ3MoKTsKLSAJT3BlblNTTF9hZGRfc3NsX2Fs Z29yaXRobXMoKTsKLSAJYXJncyA9IGFyZ3YgKyAxOwotLQlyZXFuYW1lcyA9IHNrX1NUUklOR19u ZXdfbnVsbCgpOwotKwlyZXFuYW1lcyA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7Ci0g CWlkcyA9IHNrX09DU1BfQ0VSVElEX25ld19udWxsKCk7Ci0gCXdoaWxlICghYmFkYXJnICYmICph cmdzICYmICphcmdzWzBdID09ICctJykKLSAJCXsKLUBAIC00MzIsNyArNDMyLDcgQEAKLSAJCQkJ aWYgKCFjZXJ0X2lkX21kKSBjZXJ0X2lkX21kID0gRVZQX3NoYTEoKTsKLSAJCQkJaWYoIWFkZF9v Y3NwX2NlcnQoJnJlcSwgY2VydCwgY2VydF9pZF9tZCwgaXNzdWVyLCBpZHMpKQotIAkJCQkJZ290 byBlbmQ7Ci0tCQkJCWlmKCFza19TVFJJTkdfcHVzaChyZXFuYW1lcywgKmFyZ3MpKQotKwkJCQlp Zighc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChyZXFuYW1lcywgKmFyZ3MpKQotIAkJCQkJZ290byBl bmQ7Ci0gCQkJCX0KLSAJCQllbHNlIGJhZGFyZyA9IDE7Ci1AQCAtNDQ1LDcgKzQ0NSw3IEBACi0g CQkJCWlmICghY2VydF9pZF9tZCkgY2VydF9pZF9tZCA9IEVWUF9zaGExKCk7Ci0gCQkJCWlmKCFh ZGRfb2NzcF9zZXJpYWwoJnJlcSwgKmFyZ3MsIGNlcnRfaWRfbWQsIGlzc3VlciwgaWRzKSkKLSAJ CQkJCWdvdG8gZW5kOwotLQkJCQlpZighc2tfU1RSSU5HX3B1c2gocmVxbmFtZXMsICphcmdzKSkK LSsJCQkJaWYoIXNrX09QRU5TU0xfU1RSSU5HX3B1c2gocmVxbmFtZXMsICphcmdzKSkKLSAJCQkJ CWdvdG8gZW5kOwotIAkJCQl9Ci0gCQkJZWxzZSBiYWRhcmcgPSAxOwotQEAgLTkwMSw3ICs5MDEs NyBAQAotIAlPQ1NQX1JFUVVFU1RfZnJlZShyZXEpOwotIAlPQ1NQX1JFU1BPTlNFX2ZyZWUocmVz cCk7Ci0gCU9DU1BfQkFTSUNSRVNQX2ZyZWUoYnMpOwotLQlza19TVFJJTkdfZnJlZShyZXFuYW1l cyk7Ci0rCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUocmVxbmFtZXMpOwotIAlza19PQ1NQX0NFUlRJ RF9mcmVlKGlkcyk7Ci0gCXNrX1g1MDlfcG9wX2ZyZWUoc2lnbl9vdGhlciwgWDUwOV9mcmVlKTsK LSAJc2tfWDUwOV9wb3BfZnJlZSh2ZXJpZnlfb3RoZXIsIFg1MDlfZnJlZSk7Ci1AQCAtOTcxLDcg Kzk3MSw3IEBACi0gCX0KLSAKLSBzdGF0aWMgaW50IHByaW50X29jc3Bfc3VtbWFyeShCSU8gKm91 dCwgT0NTUF9CQVNJQ1JFU1AgKmJzLCBPQ1NQX1JFUVVFU1QgKnJlcSwKLS0JCQkgICAgICBTVEFD S19PRihTVFJJTkcpICpuYW1lcywKLSsJCQkgICAgICBTVEFDS19PRihPUEVOU1NMX1NUUklORykg Km5hbWVzLAotIAkJCSAgICAgIFNUQUNLX09GKE9DU1BfQ0VSVElEKSAqaWRzLCBsb25nIG5zZWMs Ci0gCQkJICAgICAgbG9uZyBtYXhhZ2UpCi0gCXsKLUBAIC05ODMsMTMgKzk4MywxMyBAQAotIAot IAlBU04xX0dFTkVSQUxJWkVEVElNRSAqcmV2LCAqdGhpc3VwZCwgKm5leHR1cGQ7Ci0gCi0tCWlm ICghYnMgfHwgIXJlcSB8fCAhc2tfU1RSSU5HX251bShuYW1lcykgfHwgIXNrX09DU1BfQ0VSVElE X251bShpZHMpKQotKwlpZiAoIWJzIHx8ICFyZXEgfHwgIXNrX09QRU5TU0xfU1RSSU5HX251bShu YW1lcykgfHwgIXNrX09DU1BfQ0VSVElEX251bShpZHMpKQotIAkJcmV0dXJuIDE7Ci0gCi0gCWZv ciAoaSA9IDA7IGkgPCBza19PQ1NQX0NFUlRJRF9udW0oaWRzKTsgaSsrKQotIAkJewotIAkJaWQg PSBza19PQ1NQX0NFUlRJRF92YWx1ZShpZHMsIGkpOwotLQkJbmFtZSA9IHNrX1NUUklOR192YWx1 ZShuYW1lcywgaSk7Ci0rCQluYW1lID0gc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUobmFtZXMsIGkp OwotIAkJQklPX3ByaW50ZihvdXQsICIlczogIiwgbmFtZSk7Ci0gCi0gCQlpZighT0NTUF9yZXNw X2ZpbmRfc3RhdHVzKGJzLCBpZCwgJnN0YXR1cywgJnJlYXNvbiwKLUluZGV4OiBvcGVuc3NsL2Fw cHMvcGtjczEyLmMKLVJDUyBGaWxlOiAvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvcGtjczEy LmMsdgotcmNzZGlmZiAtcSAta2sgJy1yMS45Mi4yLjEnICctcjEuOTIuMi4yJyAtdSAnL3Yvb3Bl bnNzbC9jdnMvb3BlbnNzbC9hcHBzL3BrY3MxMi5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNz bC9hcHBzL3BrY3MxMi5jIDIwMDkvMDYvMTcgMTI6MDU6NDkgMS45Mi4yLjEKLSsrKyBvcGVuc3Ns L2FwcHMvcGtjczEyLmMgMjAwOS8wNy8yNyAyMTowODo0NSAxLjkyLjIuMgotQEAgLTExNyw3ICsx MTcsNyBAQAotICAgICBpbnQgcmV0ID0gMTsKLSAgICAgaW50IG1hY3ZlciA9IDE7Ci0gICAgIGlu dCBub3Byb21wdCA9IDA7Ci0tICAgIFNUQUNLX09GKFNUUklORykgKmNhbmFtZXMgPSBOVUxMOwot KyAgICBTVEFDS19PRihPUEVOU1NMX1NUUklORykgKmNhbmFtZXMgPSBOVUxMOwotICAgICBjaGFy ICpjcGFzcyA9IE5VTEwsICptcGFzcyA9IE5VTEw7Ci0gICAgIGNoYXIgKnBhc3NhcmdpbiA9IE5V TEwsICpwYXNzYXJnb3V0ID0gTlVMTCwgKnBhc3NhcmcgPSBOVUxMOwotICAgICBjaGFyICpwYXNz aW4gPSBOVUxMLCAqcGFzc291dCA9IE5VTEw7Ci1AQCAtMjIyLDggKzIyMiw4IEBACi0gCQl9IGVs c2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLWNhbmFtZSIpKSB7Ci0gCQkgICAgaWYgKGFyZ3NbMV0p IHsKLSAJCQlhcmdzKys7CQotLQkJCWlmICghY2FuYW1lcykgY2FuYW1lcyA9IHNrX1NUUklOR19u ZXdfbnVsbCgpOwotLQkJCXNrX1NUUklOR19wdXNoKGNhbmFtZXMsICphcmdzKTsKLSsJCQlpZiAo IWNhbmFtZXMpIGNhbmFtZXMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOwotKwkJCXNr X09QRU5TU0xfU1RSSU5HX3B1c2goY2FuYW1lcywgKmFyZ3MpOwotIAkJICAgIH0gZWxzZSBiYWRh cmcgPSAxOwotIAkJfSBlbHNlIGlmICghc3RyY21wICgqYXJncywgIi1pbiIpKSB7Ci0gCQkgICAg aWYgKGFyZ3NbMV0pIHsKLUBAIC01NDksOSArNTQ5LDkgQEAKLSAKLSAJLyogQWRkIGFueSBDQSBu YW1lcyAqLwotIAotLQlmb3IgKGkgPSAwOyBpIDwgc2tfU1RSSU5HX251bShjYW5hbWVzKTsgaSsr KQotKwlmb3IgKGkgPSAwOyBpIDwgc2tfT1BFTlNTTF9TVFJJTkdfbnVtKGNhbmFtZXMpOyBpKysp Ci0gCQl7Ci0tCQljYXRtcCA9ICh1bnNpZ25lZCBjaGFyICopc2tfU1RSSU5HX3ZhbHVlKGNhbmFt ZXMsIGkpOwotKwkJY2F0bXAgPSAodW5zaWduZWQgY2hhciAqKXNrX09QRU5TU0xfU1RSSU5HX3Zh bHVlKGNhbmFtZXMsIGkpOwotIAkJWDUwOV9hbGlhc19zZXQxKHNrX1g1MDlfdmFsdWUoY2VydHMs IGkpLCBjYXRtcCwgLTEpOwotIAkJfQotIAotQEAgLTY4Nyw3ICs2ODcsNyBAQAotICNlbmRpZgot ICAgICBCSU9fZnJlZShpbik7Ci0gICAgIEJJT19mcmVlX2FsbChvdXQpOwotLSAgICBpZiAoY2Fu YW1lcykgc2tfU1RSSU5HX2ZyZWUoY2FuYW1lcyk7Ci0rICAgIGlmIChjYW5hbWVzKSBza19PUEVO U1NMX1NUUklOR19mcmVlKGNhbmFtZXMpOwotICAgICBpZihwYXNzaW4pIE9QRU5TU0xfZnJlZShw YXNzaW4pOwotICAgICBpZihwYXNzb3V0KSBPUEVOU1NMX2ZyZWUocGFzc291dCk7Ci0gICAgIGFw cHNfc2h1dGRvd24oKTsKLUluZGV4OiBvcGVuc3NsL2FwcHMvcmVxLmMKLVJDUyBGaWxlOiAvdi9v cGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvcmVxLmMsdgotcmNzZGlmZiAtcSAta2sgJy1yMS4xMzku Mi4yJyAnLXIxLjEzOS4yLjMnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvcmVxLmMs dicgMj4vZGV2L251bGwKLS0tLSBvcGVuc3NsL2FwcHMvcmVxLmMgMjAwOS8wNC8yMyAxNzoxNjoz OCAxLjEzOS4yLjIKLSsrKyBvcGVuc3NsL2FwcHMvcmVxLmMgMjAwOS8wNy8yNyAyMTowODo0NSAx LjEzOS4yLjMKLUBAIC0xNjUsNyArMTY1LDcgQEAKLSAJRVZQX1BLRVlfQ1RYICpnZW5jdHggPSBO VUxMOwotIAljb25zdCBjaGFyICprZXlhbGcgPSBOVUxMOwotIAljaGFyICprZXlhbGdzdHIgPSBO VUxMOwotLQlTVEFDS19PRihTVFJJTkcpICpwa2V5b3B0cyA9IE5VTEw7Ci0rCVNUQUNLX09GKE9Q RU5TU0xfU1RSSU5HKSAqcGtleW9wdHMgPSBOVUxMOwotIAlFVlBfUEtFWSAqcGtleT1OVUxMOwot IAlpbnQgaT0wLGJhZG9wcz0wLG5ld3JlcT0wLHZlcmJvc2U9MCxwa2V5X3R5cGU9LTE7Ci0gCWxv bmcgbmV3a2V5ID0gLTE7Ci1AQCAtMzA2LDggKzMwNiw4IEBACi0gCQkJaWYgKC0tYXJnYyA8IDEp Ci0gCQkJCWdvdG8gYmFkOwotIAkJCWlmICghcGtleW9wdHMpCi0tCQkJCXBrZXlvcHRzID0gc2tf U1RSSU5HX25ld19udWxsKCk7Ci0tCQkJaWYgKCFwa2V5b3B0cyB8fCAhc2tfU1RSSU5HX3B1c2go cGtleW9wdHMsICooKythcmd2KSkpCi0rCQkJCXBrZXlvcHRzID0gc2tfT1BFTlNTTF9TVFJJTkdf bmV3X251bGwoKTsKLSsJCQlpZiAoIXBrZXlvcHRzIHx8ICFza19PUEVOU1NMX1NUUklOR19wdXNo KHBrZXlvcHRzLCAqKCsrYXJndikpKQotIAkJCQlnb3RvIGJhZDsKLSAJCQl9Ci0gCQllbHNlIGlm IChzdHJjbXAoKmFyZ3YsIi1iYXRjaCIpID09IDApCi1AQCAtNjY3LDkgKzY2Nyw5IEBACi0gCQlp ZiAocGtleW9wdHMpCi0gCQkJewotIAkJCWNoYXIgKmdlbm9wdDsKLS0JCQlmb3IgKGkgPSAwOyBp IDwgc2tfU1RSSU5HX251bShwa2V5b3B0cyk7IGkrKykKLSsJCQlmb3IgKGkgPSAwOyBpIDwgc2tf T1BFTlNTTF9TVFJJTkdfbnVtKHBrZXlvcHRzKTsgaSsrKQotIAkJCQl7Ci0tCQkJCWdlbm9wdCA9 IHNrX1NUUklOR192YWx1ZShwa2V5b3B0cywgaSk7Ci0rCQkJCWdlbm9wdCA9IHNrX09QRU5TU0xf U1RSSU5HX3ZhbHVlKHBrZXlvcHRzLCBpKTsKLSAJCQkJaWYgKHBrZXlfY3RybF9zdHJpbmcoZ2Vu Y3R4LCBnZW5vcHQpIDw9IDApCi0gCQkJCQl7Ci0gCQkJCQlCSU9fcHJpbnRmKGJpb19lcnIsCi1A QCAtMTA4Myw3ICsxMDgzLDcgQEAKLSAJaWYgKGdlbmN0eCkKLSAJCUVWUF9QS0VZX0NUWF9mcmVl KGdlbmN0eCk7Ci0gCWlmIChwa2V5b3B0cykKLS0JCXNrX1NUUklOR19mcmVlKHBrZXlvcHRzKTsK LSsJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUocGtleW9wdHMpOwotICNpZm5kZWYgT1BFTlNTTF9O T19FTkdJTkUKLSAJaWYgKGdlbl9lbmcpCi0gCQlFTkdJTkVfZnJlZShnZW5fZW5nKTsKLUluZGV4 OiBvcGVuc3NsL2FwcHMvc19zZXJ2ZXIuYwotUkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5z c2wvYXBwcy9zX3NlcnZlci5jLHYKLXJjc2RpZmYgLXEgLWtrICctcjEuMTM2LjIuNCcgJy1yMS4x MzYuMi41JyAtdSAnL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9hcHBzL3Nfc2VydmVyLmMsdicgMj4v ZGV2L251bGwKLS0tLSBvcGVuc3NsL2FwcHMvc19zZXJ2ZXIuYyAyMDA5LzA2LzMwIDE2OjEwOjI0 IDEuMTM2LjIuNAotKysrIG9wZW5zc2wvYXBwcy9zX3NlcnZlci5jIDIwMDkvMDcvMjcgMjE6MDg6 NDYgMS4xMzYuMi41Ci1AQCAtNzEyLDcgKzcxMiw3IEBACi0gCWludCB1c2Vfc3NsOwotIAl1bnNp Z25lZCBjaGFyICpyc3BkZXIgPSBOVUxMOwotIAlpbnQgcnNwZGVybGVuOwotLQlTVEFDS19PRihT VFJJTkcpICphaWEgPSBOVUxMOwotKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKmFpYSA9IE5V TEw7Ci0gCVg1MDkgKnggPSBOVUxMOwotIAlYNTA5X1NUT1JFX0NUWCBpbmN0eDsKLSAJWDUwOV9P QkpFQ1Qgb2JqOwotQEAgLTczNCw3ICs3MzQsNyBAQAotIAlhaWEgPSBYNTA5X2dldDFfb2NzcCh4 KTsKLSAJaWYgKGFpYSkKLSAJCXsKLS0JCWlmICghT0NTUF9wYXJzZV91cmwoc2tfU1RSSU5HX3Zh bHVlKGFpYSwgMCksCi0rCQlpZiAoIU9DU1BfcGFyc2VfdXJsKHNrX09QRU5TU0xfU1RSSU5HX3Zh bHVlKGFpYSwgMCksCi0gCQkJJmhvc3QsICZwb3J0LCAmcGF0aCwgJnVzZV9zc2wpKQotIAkJCXsK LSAJCQlCSU9fcHV0cyhlcnIsICJjZXJ0X3N0YXR1czogY2FuJ3QgcGFyc2UgQUlBIFVSTFxuIik7 Ci1AQCAtNzQyLDcgKzc0Miw3IEBACi0gCQkJfQotIAkJaWYgKHNyY3R4LT52ZXJib3NlKQotIAkJ CUJJT19wcmludGYoZXJyLCAiY2VydF9zdGF0dXM6IEFJQSBVUkw6ICVzXG4iLAotLQkJCQkJc2tf U1RSSU5HX3ZhbHVlKGFpYSwgMCkpOwotKwkJCQkJc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUoYWlh LCAwKSk7Ci0gCQl9Ci0gCWVsc2UKLSAJCXsKLUluZGV4OiBvcGVuc3NsL2FwcHMvc21pbWUuYwot UkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5zc2wvYXBwcy9zbWltZS5jLHYKLXJjc2RpZmYg LXEgLWtrICctcjEuNjknICctcjEuNjkuMi4xJyAtdSAnL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9h cHBzL3NtaW1lLmMsdicgMj4vZGV2L251bGwKLS0tLSBvcGVuc3NsL2FwcHMvc21pbWUuYyAyMDA4 LzExLzA1IDE4OjM4OjUxIDEuNjkKLSsrKyBvcGVuc3NsL2FwcHMvc21pbWUuYyAyMDA5LzA3LzI3 IDIxOjA4OjQ2IDEuNjkuMi4xCi1AQCAtOTMsNyArOTMsNyBAQAotIAljb25zdCBjaGFyICppbm1v ZGUgPSAiciIsICpvdXRtb2RlID0gInciOwotIAljaGFyICppbmZpbGUgPSBOVUxMLCAqb3V0Zmls ZSA9IE5VTEw7Ci0gCWNoYXIgKnNpZ25lcmZpbGUgPSBOVUxMLCAqcmVjaXBmaWxlID0gTlVMTDsK LS0JU1RBQ0tfT0YoU1RSSU5HKSAqc2tzaWduZXJzID0gTlVMTCwgKnNra2V5cyA9IE5VTEw7Ci0r CVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2tzaWduZXJzID0gTlVMTCwgKnNra2V5cyA9IE5V TEw7Ci0gCWNoYXIgKmNlcnRmaWxlID0gTlVMTCwgKmtleWZpbGUgPSBOVUxMLCAqY29udGZpbGU9 TlVMTDsKLSAJY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKLSAJUEtDUzcgKnA3ID0g TlVMTDsKLUBAIC0yNjAsMTMgKzI2MCwxMyBAQAotIAkJCWlmIChzaWduZXJmaWxlKQotIAkJCQl7 Ci0gCQkJCWlmICghc2tzaWduZXJzKQotLQkJCQkJc2tzaWduZXJzID0gc2tfU1RSSU5HX25ld19u dWxsKCk7Ci0tCQkJCXNrX1NUUklOR19wdXNoKHNrc2lnbmVycywgc2lnbmVyZmlsZSk7Ci0rCQkJ CQlza3NpZ25lcnMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOwotKwkJCQlza19PUEVO U1NMX1NUUklOR19wdXNoKHNrc2lnbmVycywgc2lnbmVyZmlsZSk7Ci0gCQkJCWlmICgha2V5Zmls ZSkKLSAJCQkJCWtleWZpbGUgPSBzaWduZXJmaWxlOwotIAkJCQlpZiAoIXNra2V5cykKLS0JCQkJ CXNra2V5cyA9IHNrX1NUUklOR19uZXdfbnVsbCgpOwotLQkJCQlza19TVFJJTkdfcHVzaChza2tl eXMsIGtleWZpbGUpOwotKwkJCQkJc2trZXlzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwo KTsKLSsJCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChza2tleXMsIGtleWZpbGUpOwotIAkJCQlr ZXlmaWxlID0gTlVMTDsKLSAJCQkJfQotIAkJCXNpZ25lcmZpbGUgPSAqKythcmdzOwotQEAgLTMw MiwxMiArMzAyLDEyIEBACi0gCQkJCQlnb3RvIGFyZ2VycjsKLSAJCQkJCX0KLSAJCQkJaWYgKCFz a3NpZ25lcnMpCi0tCQkJCQlza3NpZ25lcnMgPSBza19TVFJJTkdfbmV3X251bGwoKTsKLS0JCQkJ c2tfU1RSSU5HX3B1c2goc2tzaWduZXJzLCBzaWduZXJmaWxlKTsKLSsJCQkJCXNrc2lnbmVycyA9 IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7Ci0rCQkJCXNrX09QRU5TU0xfU1RSSU5HX3B1 c2goc2tzaWduZXJzLCBzaWduZXJmaWxlKTsKLSAJCQkJc2lnbmVyZmlsZSA9IE5VTEw7Ci0gCQkJ CWlmICghc2trZXlzKQotLQkJCQkJc2trZXlzID0gc2tfU1RSSU5HX25ld19udWxsKCk7Ci0tCQkJ CXNrX1NUUklOR19wdXNoKHNra2V5cywga2V5ZmlsZSk7Ci0rCQkJCQlza2tleXMgPSBza19PUEVO U1NMX1NUUklOR19uZXdfbnVsbCgpOwotKwkJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKHNra2V5 cywga2V5ZmlsZSk7Ci0gCQkJCX0KLSAJCQlrZXlmaWxlID0gKisrYXJnczsKLSAJCQl9Ci1AQCAt Mzg5LDEzICszODksMTMgQEAKLSAJCWlmIChzaWduZXJmaWxlKQotIAkJCXsKLSAJCQlpZiAoIXNr c2lnbmVycykKLS0JCQkJc2tzaWduZXJzID0gc2tfU1RSSU5HX25ld19udWxsKCk7Ci0tCQkJc2tf U1RSSU5HX3B1c2goc2tzaWduZXJzLCBzaWduZXJmaWxlKTsKLSsJCQkJc2tzaWduZXJzID0gc2tf T1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKLSsJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKHNr c2lnbmVycywgc2lnbmVyZmlsZSk7Ci0gCQkJaWYgKCFza2tleXMpCi0tCQkJCXNra2V5cyA9IHNr X1NUUklOR19uZXdfbnVsbCgpOwotKwkJCQlza2tleXMgPSBza19PUEVOU1NMX1NUUklOR19uZXdf bnVsbCgpOwotIAkJCWlmICgha2V5ZmlsZSkKLSAJCQkJa2V5ZmlsZSA9IHNpZ25lcmZpbGU7Ci0t CQkJc2tfU1RSSU5HX3B1c2goc2trZXlzLCBrZXlmaWxlKTsKLSsJCQlza19PUEVOU1NMX1NUUklO R19wdXNoKHNra2V5cywga2V5ZmlsZSk7Ci0gCQkJfQotIAkJaWYgKCFza3NpZ25lcnMpCi0gCQkJ ewotQEAgLTcwNywxMCArNzA3LDEwIEBACi0gCQkJfQotIAkJZWxzZQotIAkJCWZsYWdzIHw9IFBL Q1M3X1JFVVNFX0RJR0VTVDsKLS0JCWZvciAoaSA9IDA7IGkgPCBza19TVFJJTkdfbnVtKHNrc2ln bmVycyk7IGkrKykKLSsJCWZvciAoaSA9IDA7IGkgPCBza19PUEVOU1NMX1NUUklOR19udW0oc2tz aWduZXJzKTsgaSsrKQotIAkJCXsKLS0JCQlzaWduZXJmaWxlID0gc2tfU1RSSU5HX3ZhbHVlKHNr c2lnbmVycywgaSk7Ci0tCQkJa2V5ZmlsZSA9IHNrX1NUUklOR192YWx1ZShza2tleXMsIGkpOwot KwkJCXNpZ25lcmZpbGUgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShza3NpZ25lcnMsIGkpOwot KwkJCWtleWZpbGUgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShza2tleXMsIGkpOwotIAkJCXNp Z25lciA9IGxvYWRfY2VydChiaW9fZXJyLCBzaWduZXJmaWxlLEZPUk1BVF9QRU0sIE5VTEwsCi0g CQkJCQllLCAic2lnbmVyIGNlcnRpZmljYXRlIik7Ci0gCQkJaWYgKCFzaWduZXIpCi1AQCAtODA3 LDkgKzgwNyw5IEBACi0gCWlmICh2cG0pCi0gCQlYNTA5X1ZFUklGWV9QQVJBTV9mcmVlKHZwbSk7 Ci0gCWlmIChza3NpZ25lcnMpCi0tCQlza19TVFJJTkdfZnJlZShza3NpZ25lcnMpOwotKwkJc2tf T1BFTlNTTF9TVFJJTkdfZnJlZShza3NpZ25lcnMpOwotIAlpZiAoc2trZXlzKQotLQkJc2tfU1RS SU5HX2ZyZWUoc2trZXlzKTsKLSsJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUoc2trZXlzKTsKLSAJ WDUwOV9TVE9SRV9mcmVlKHN0b3JlKTsKLSAJWDUwOV9mcmVlKGNlcnQpOwotIAlYNTA5X2ZyZWUo cmVjaXApOwotSW5kZXg6IG9wZW5zc2wvYXBwcy94NTA5LmMKLVJDUyBGaWxlOiAvdi9vcGVuc3Ns L2N2cy9vcGVuc3NsL2FwcHMveDUwOS5jLHYKLXJjc2RpZmYgLXEgLWtrICctcjEuMTAyLjIuMycg Jy1yMS4xMDIuMi40JyAtdSAnL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9hcHBzL3g1MDkuYyx2JyAy Pi9kZXYvbnVsbAotLS0tIG9wZW5zc2wvYXBwcy94NTA5LmMgMjAwOS8wNy8xNCAxNToxNDozOSAx LjEwMi4yLjMKLSsrKyBvcGVuc3NsL2FwcHMveDUwOS5jIDIwMDkvMDcvMjcgMjE6MDg6NDYgMS4x MDIuMi40Ci1AQCAtNzM4LDE0ICs3MzgsMTQgQEAKLSAJCQllbHNlIGlmICgoZW1haWwgPT0gaSkg fHwgKG9jc3BfdXJpID09IGkpKQotIAkJCQl7Ci0gCQkJCWludCBqOwotLQkJCQlTVEFDS19PRihT VFJJTkcpICplbWxzdDsKLSsJCQkJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICplbWxzdDsKLSAJ CQkJaWYgKGVtYWlsID09IGkpCi0gCQkJCQllbWxzdCA9IFg1MDlfZ2V0MV9lbWFpbCh4KTsKLSAJ CQkJZWxzZQotIAkJCQkJZW1sc3QgPSBYNTA5X2dldDFfb2NzcCh4KTsKLS0JCQkJZm9yIChqID0g MDsgaiA8IHNrX1NUUklOR19udW0oZW1sc3QpOyBqKyspCi0rCQkJCWZvciAoaiA9IDA7IGogPCBz a19PUEVOU1NMX1NUUklOR19udW0oZW1sc3QpOyBqKyspCi0gCQkJCQlCSU9fcHJpbnRmKFNURG91 dCwgIiVzXG4iLAotLQkJCQkJCSAgIHNrX1NUUklOR192YWx1ZShlbWxzdCwgaikpOwotKwkJCQkJ CSAgIHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKGVtbHN0LCBqKSk7Ci0gCQkJCVg1MDlfZW1haWxf ZnJlZShlbWxzdCk7Ci0gCQkJCX0KLSAJCQllbHNlIGlmIChhbGlhc291dCA9PSBpKQotSW5kZXg6 IG9wZW5zc2wvY3J5cHRvL2NyeXB0bGliLmMKLVJDUyBGaWxlOiAvdi9vcGVuc3NsL2N2cy9vcGVu c3NsL2NyeXB0by9jcnlwdGxpYi5jLHYKLXJjc2RpZmYgLXEgLWtrICctcjEuNzUuMi4yJyAnLXIx Ljc1LjIuMycgLXUgJy92L29wZW5zc2wvY3ZzL29wZW5zc2wvY3J5cHRvL2NyeXB0bGliLmMsdicg Mj4vZGV2L251bGwKLS0tLSBvcGVuc3NsL2NyeXB0by9jcnlwdGxpYi5jIDIwMDkvMDUvMDUgMTk6 MjM6MTQgMS43NS4yLjIKLSsrKyBvcGVuc3NsL2NyeXB0by9jcnlwdGxpYi5jIDIwMDkvMDcvMjcg MjE6MDg6NDggMS43NS4yLjMKLUBAIC0xNzQsNyArMTc0LDcgQEAKLSAKLSAvKiBUaGlzIGlzIGZv ciBhcHBsaWNhdGlvbnMgdG8gYWxsb2NhdGUgbmV3IHR5cGUgbmFtZXMgaW4gdGhlIG5vbi1keW5h bWljCi0gICAgYXJyYXkgb2YgbG9jayBuYW1lcy4gIFRoZXNlIGFyZSBudW1iZXJlZCB3aXRoIHBv c2l0aXZlIG51bWJlcnMuICAqLwotLXN0YXRpYyBTVEFDS19PRihTVFJJTkcpICphcHBfbG9ja3M9 TlVMTDsKLStzdGF0aWMgU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICphcHBfbG9ja3M9TlVMTDsK LSAKLSAvKiBGb3IgYXBwbGljYXRpb25zIHRoYXQgd2FudCBhIG1vcmUgZHluYW1pYyB3YXkgb2Yg aGFuZGxpbmcgdGhyZWFkcywgdGhlCi0gICAgZm9sbG93aW5nIHN0YWNrIGlzIHVzZWQuICBUaGVz ZSBhcmUgZXh0ZXJuYWxseSBudW1iZXJlZCB3aXRoIG5lZ2F0aXZlCi1AQCAtMjEwLDcgKzIxMCw3 IEBACi0gCVNTTGVheV9NU1ZDNV9oYWNrPShkb3VibGUpbmFtZVswXSooZG91YmxlKW5hbWVbMV07 Ci0gI2VuZGlmCi0gCi0tCWlmICgoYXBwX2xvY2tzID09IE5VTEwpICYmICgoYXBwX2xvY2tzPXNr X1NUUklOR19uZXdfbnVsbCgpKSA9PSBOVUxMKSkKLSsJaWYgKChhcHBfbG9ja3MgPT0gTlVMTCkg JiYgKChhcHBfbG9ja3M9c2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKSkgPT0gTlVMTCkpCi0g CQl7Ci0gCQlDUllQVE9lcnIoQ1JZUFRPX0ZfQ1JZUFRPX0dFVF9ORVdfTE9DS0lELEVSUl9SX01B TExPQ19GQUlMVVJFKTsKLSAJCXJldHVybigwKTsKLUBAIC0yMjAsNyArMjIwLDcgQEAKLSAJCUNS WVBUT2VycihDUllQVE9fRl9DUllQVE9fR0VUX05FV19MT0NLSUQsRVJSX1JfTUFMTE9DX0ZBSUxV UkUpOwotIAkJcmV0dXJuKDApOwotIAkJfQotLQlpPXNrX1NUUklOR19wdXNoKGFwcF9sb2Nrcyxz dHIpOwotKwlpPXNrX09QRU5TU0xfU1RSSU5HX3B1c2goYXBwX2xvY2tzLHN0cik7Ci0gCWlmICgh aSkKLSAJCU9QRU5TU0xfZnJlZShzdHIpOwotIAllbHNlCi1AQCAtNjUxLDEwICs2NTEsMTAgQEAK LSAJCXJldHVybigiZHluYW1pYyIpOwotIAllbHNlIGlmICh0eXBlIDwgQ1JZUFRPX05VTV9MT0NL UykKLSAJCXJldHVybihsb2NrX25hbWVzW3R5cGVdKTsKLS0JZWxzZSBpZiAodHlwZS1DUllQVE9f TlVNX0xPQ0tTID4gc2tfU1RSSU5HX251bShhcHBfbG9ja3MpKQotKwllbHNlIGlmICh0eXBlLUNS WVBUT19OVU1fTE9DS1MgPiBza19PUEVOU1NMX1NUUklOR19udW0oYXBwX2xvY2tzKSkKLSAJCXJl dHVybigiRVJST1IiKTsKLSAJZWxzZQotLQkJcmV0dXJuKHNrX1NUUklOR192YWx1ZShhcHBfbG9j a3MsdHlwZS1DUllQVE9fTlVNX0xPQ0tTKSk7Ci0rCQlyZXR1cm4oc2tfT1BFTlNTTF9TVFJJTkdf dmFsdWUoYXBwX2xvY2tzLHR5cGUtQ1JZUFRPX05VTV9MT0NLUykpOwotIAl9Ci0gCi0gI2lmCWRl ZmluZWQoX19pMzg2KSAgIHx8IGRlZmluZWQoX19pMzg2X18pICAgfHwgZGVmaW5lZChfTV9JWDg2 KSB8fCBcCi1JbmRleDogb3BlbnNzbC9jcnlwdG8vZW5naW5lL2VuZ19keW4uYwotUkNTIEZpbGU6 IC92L29wZW5zc2wvY3ZzL29wZW5zc2wvY3J5cHRvL2VuZ2luZS9lbmdfZHluLmMsdgotcmNzZGlm ZiAtcSAta2sgJy1yMS4xNCcgJy1yMS4xNC4yLjEnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3Ns L2NyeXB0by9lbmdpbmUvZW5nX2R5bi5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9jcnlw dG8vZW5naW5lL2VuZ19keW4uYyAyMDA4LzA2LzA0IDExOjAxOjI5IDEuMTQKLSsrKyBvcGVuc3Ns L2NyeXB0by9lbmdpbmUvZW5nX2R5bi5jIDIwMDkvMDcvMjcgMjE6MDg6NDkgMS4xNC4yLjEKLUBA IC0xNDYsNyArMTQ2LDcgQEAKLSAJICogJ2RpcnMnIGZvciBsb2FkaW5nLiBEZWZhdWx0IGlzIHRv IHVzZSAnZGlycycgYXMgYSBmYWxsYmFjay4gKi8KLSAJaW50IGRpcl9sb2FkOwotIAkvKiBBIHN0 YWNrIG9mIGRpcmVjdG9yaWVzIGZyb20gd2hpY2ggRU5HSU5FcyBjb3VsZCBiZSBsb2FkZWQgKi8K LS0JU1RBQ0tfT0YoU1RSSU5HKSAqZGlyczsKLSsJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpk aXJzOwotIAl9OwotIAotIC8qIFRoaXMgaXMgdGhlICJleF9kYXRhIiBpbmRleCB3ZSBvYnRhaW4g YW5kIHJlc2VydmUgZm9yIHVzZSB3aXRoIG91ciBjb250ZXh0Ci1AQCAtMTc0LDcgKzE3NCw3IEBA Ci0gCQlpZihjdHgtPmVuZ2luZV9pZCkKLSAJCQlPUEVOU1NMX2ZyZWUoKHZvaWQqKWN0eC0+ZW5n aW5lX2lkKTsKLSAJCWlmKGN0eC0+ZGlycykKLS0JCQlza19TVFJJTkdfcG9wX2ZyZWUoY3R4LT5k aXJzLCBpbnRfZnJlZV9zdHIpOwotKwkJCXNrX09QRU5TU0xfU1RSSU5HX3BvcF9mcmVlKGN0eC0+ ZGlycywgaW50X2ZyZWVfc3RyKTsKLSAJCU9QRU5TU0xfZnJlZShjdHgpOwotIAkJfQotIAl9Ci1A QCAtMjAzLDcgKzIwMyw3IEBACi0gCWMtPkRZTkFNSUNfRjEgPSAidl9jaGVjayI7Ci0gCWMtPkRZ TkFNSUNfRjIgPSAiYmluZF9lbmdpbmUiOwotIAljLT5kaXJfbG9hZCA9IDE7Ci0tCWMtPmRpcnMg PSBza19TVFJJTkdfbmV3X251bGwoKTsKLSsJYy0+ZGlycyA9IHNrX09QRU5TU0xfU1RSSU5HX25l d19udWxsKCk7Ci0gCWlmKCFjLT5kaXJzKQotIAkJewotIAkJRU5HSU5FZXJyKEVOR0lORV9GX0RZ TkFNSUNfU0VUX0RBVEFfQ1RYLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLUBAIC0zOTMsNyArMzkz LDcgQEAKLSAJCQkJRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotIAkJCXJldHVybiAwOwotIAkJCX0K LS0JCXNrX1NUUklOR19pbnNlcnQoY3R4LT5kaXJzLCB0bXBfc3RyLCAtMSk7Ci0rCQlza19PUEVO U1NMX1NUUklOR19pbnNlcnQoY3R4LT5kaXJzLCB0bXBfc3RyLCAtMSk7Ci0gCQl9Ci0gCQlyZXR1 cm4gMTsKLSAJZGVmYXVsdDoKLUBAIC00MTEsMTEgKzQxMSwxMSBAQAotIAkJCQljdHgtPkRZTkFN SUNfTElCTkFNRSwgTlVMTCwgMCkpICE9IE5VTEwpCi0gCQlyZXR1cm4gMTsKLSAJLyogSWYgd2Un cmUgbm90IGFsbG93ZWQgdG8gdXNlICdkaXJzJyBvciB3ZSBoYXZlIG5vbmUsIGZhaWwgKi8KLS0J aWYoIWN0eC0+ZGlyX2xvYWQgfHwgKG51bSA9IHNrX1NUUklOR19udW0oY3R4LT5kaXJzKSkgPCAx KQotKwlpZighY3R4LT5kaXJfbG9hZCB8fCAobnVtID0gc2tfT1BFTlNTTF9TVFJJTkdfbnVtKGN0 eC0+ZGlycykpIDwgMSkKLSAJCXJldHVybiAwOwotIAlmb3IobG9vcCA9IDA7IGxvb3AgPCBudW07 IGxvb3ArKykKLSAJCXsKLS0JCWNvbnN0IGNoYXIgKnMgPSBza19TVFJJTkdfdmFsdWUoY3R4LT5k aXJzLCBsb29wKTsKLSsJCWNvbnN0IGNoYXIgKnMgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShj dHgtPmRpcnMsIGxvb3ApOwotIAkJY2hhciAqbWVyZ2UgPSBEU09fbWVyZ2UoY3R4LT5keW5hbWlj X2RzbywgY3R4LT5EWU5BTUlDX0xJQk5BTUUsIHMpOwotIAkJaWYoIW1lcmdlKQotIAkJCXJldHVy biAwOwotSW5kZXg6IG9wZW5zc2wvY3J5cHRvL2xoYXNoL2xoYXNoLmgKLVJDUyBGaWxlOiAvdi9v cGVuc3NsL2N2cy9vcGVuc3NsL2NyeXB0by9saGFzaC9saGFzaC5oLHYKLXJjc2RpZmYgLXEgLWtr ICctcjEuMjMnICctcjEuMjMuMi4xJyAtdSAnL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9jcnlwdG8v bGhhc2gvbGhhc2guaCx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5zc2wvY3J5cHRvL2xoYXNoL2xo YXNoLmggMjAwOC8wNi8wNCAxMTowMTozMSAxLjIzCi0rKysgb3BlbnNzbC9jcnlwdG8vbGhhc2gv bGhhc2guaCAyMDA5LzA3LzI3IDIxOjA4OjUwIDEuMjMuMi4xCi1AQCAtMjMwLDggKzIzMCw4IEBA Ci0gICBsaF9zdGF0c19iaW8oQ0hFQ0tFRF9MSEFTSF9PRih0eXBlLCBsaCksIG91dCkKLSAjZGVm aW5lIExITV9saF9mcmVlKHR5cGUsIGxoKSBsaF9mcmVlKENIRUNLRURfTEhBU0hfT0YodHlwZSwg bGgpKQotIAotLURFQ0xBUkVfTEhBU0hfT0YoU1RSSU5HKTsKLS1ERUNMQVJFX0xIQVNIX09GKENT VFJJTkcpOwotK0RFQ0xBUkVfTEhBU0hfT0YoT1BFTlNTTF9TVFJJTkcpOwotK0RFQ0xBUkVfTEhB U0hfT0YoT1BFTlNTTF9DU1RSSU5HKTsKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi0gfQotSW5k ZXg6IG9wZW5zc2wvY3J5cHRvL3N0YWNrL3NhZmVzdGFjay5oCi1SQ1MgRmlsZTogL3Yvb3BlbnNz bC9jdnMvb3BlbnNzbC9jcnlwdG8vc3RhY2svc2FmZXN0YWNrLmgsdgotcmNzZGlmZiAtcSAta2sg Jy1yMS43Mi4yLjMnICctcjEuNzIuMi40JyAtdSAnL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9jcnlw dG8vc3RhY2svc2FmZXN0YWNrLmgsdicgMj4vZGV2L251bGwKLS0tLSBvcGVuc3NsL2NyeXB0by9z dGFjay9zYWZlc3RhY2suaCAyMDA5LzA0LzI4IDIxOjU2OjA0IDEuNzIuMi4zCi0rKysgb3BlbnNz bC9jcnlwdG8vc3RhY2svc2FmZXN0YWNrLmggMjAwOS8wNy8yNyAyMTowODo1MCAxLjcyLjIuNAot QEAgLTExMCw5ICsxMTAsOSBAQAotICAqIHN0cmluZy4gRm9yIG5vdywgSSdtIHNldHRsaW5nIGZv ciBkZWFsaW5nIHdpdGggdGhlIGZhY3QgaXQgaXMgYQotICAqIHN0cmluZyBhdCBhbGwuCi0gICov Ci0tdHlwZWRlZiBjaGFyICpTVFJJTkc7Ci0rdHlwZWRlZiBjaGFyICpPUEVOU1NMX1NUUklORzsK LSAKLS10eXBlZGVmIGNvbnN0IGNoYXIgKkNTVFJJTkc7Ci0rdHlwZWRlZiBjb25zdCBjaGFyICpP UEVOU1NMX0NTVFJJTkc7Ci0gCi0gLyogQ29uZnVzaW5nbHksIExIQVNIX09GKFNUUklORykgZGVh bHMgd2l0aCBjaGFyICoqIHRocm91Z2hvdXQsIGJ1dAotICAqIFNUQUNLX09GKFNUUklORykgaXMg cmVhbGx5IG1vcmUgbGlrZSBTVEFDS19PRihjaGFyKSwgb25seSwgYXMKLUBAIC0xMjIsNyArMTIy LDcgQEAKLSAgKiBtYWNyb3MgYmVsb3cuCi0gICovCi0gCi0tREVDTEFSRV9TUEVDSUFMX1NUQUNL X09GKFNUUklORywgY2hhcikKLStERUNMQVJFX1NQRUNJQUxfU1RBQ0tfT0YoT1BFTlNTTF9TVFJJ TkcsIGNoYXIpCi0gCi0gLyogU2ltaWxhcmx5LCB3ZSBzb21ldGltZXMgdXNlIGEgYmxvY2sgb2Yg Y2hhcmFjdGVycywgTk9UCi0gICogbnVsLXRlcm1pbmF0ZWQuIFRoZXNlIHNob3VsZCBhbHNvIGJl IGRpc3Rpbmd1aXNoZWQgZnJvbSAibm9ybWFsIgotQEAgLTIwMzAsMjkgKzIwMzAsMjkgQEAKLSAj ZGVmaW5lIHNrX3ZvaWRfc29ydChzdCkgU0tNX3NrX3NvcnQodm9pZCwgKHN0KSkKLSAjZGVmaW5l IHNrX3ZvaWRfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKHZvaWQsIChzdCkpCi0gCi0t I2RlZmluZSBza19TVFJJTkdfbmV3KGNtcCkgKChTVEFDS19PRihTVFJJTkcpICopc2tfbmV3KENI RUNLRURfU0tfQ01QX0ZVTkMoY2hhciwgY21wKSkpCi0tI2RlZmluZSBza19TVFJJTkdfbmV3X251 bGwoKSAoKFNUQUNLX09GKFNUUklORykgKilza19uZXdfbnVsbCgpKQotLSNkZWZpbmUgc2tfU1RS SU5HX3B1c2goc3QsIHZhbCkgc2tfcHVzaChDSEVDS0VEX1BUUl9PRihTVEFDS19PRihTVFJJTkcp LCBzdCksIENIRUNLRURfUFRSX09GKGNoYXIsIHZhbCkpCi0tI2RlZmluZSBza19TVFJJTkdfZmlu ZChzdCwgdmFsKSBza19maW5kKENIRUNLRURfUFRSX09GKFNUQUNLX09GKFNUUklORyksIHN0KSwg Q0hFQ0tFRF9QVFJfT0YoY2hhciwgdmFsKSkKLS0jZGVmaW5lIHNrX1NUUklOR192YWx1ZShzdCwg aSkgKChTVFJJTkcpc2tfdmFsdWUoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoU1RSSU5HKSwgc3Qp LCBpKSkKLS0jZGVmaW5lIHNrX1NUUklOR19udW0oc3QpIFNLTV9za19udW0oU1RSSU5HLCBzdCkK LS0jZGVmaW5lIHNrX1NUUklOR19wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBza19wb3BfZnJlZShD SEVDS0VEX1BUUl9PRihTVEFDS19PRihTVFJJTkcpLCBzdCksIENIRUNLRURfU0tfRlJFRV9GVU5D MihTVFJJTkcsIGZyZWVfZnVuYykpCi0tI2RlZmluZSBza19TVFJJTkdfaW5zZXJ0KHN0LCB2YWws IGkpIHNrX2luc2VydChDSEVDS0VEX1BUUl9PRihTVEFDS19PRihTVFJJTkcpLCBzdCksIENIRUNL RURfUFRSX09GKGNoYXIsIHZhbCksIGkpCi0tI2RlZmluZSBza19TVFJJTkdfZnJlZShzdCkgU0tN X3NrX2ZyZWUoU1RSSU5HLCBzdCkKLS0jZGVmaW5lIHNrX1NUUklOR19zZXQoc3QsIGksIHZhbCkg c2tfc2V0KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihTVFJJTkcpLCBzdCksIGks IENIRUNLRURfUFRSX09GKGNoYXIsIHZhbCkpCi0tI2RlZmluZSBza19TVFJJTkdfemVybyhzdCkg U0tNX3NrX3plcm8oU1RSSU5HLCAoc3QpKQotLSNkZWZpbmUgc2tfU1RSSU5HX3Vuc2hpZnQoc3Qs IHZhbCkgc2tfdW5zaGlmdCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoU1RSSU5H KSwgc3QpLCBDSEVDS0VEX1BUUl9PRihjaGFyLCB2YWwpKQotLSNkZWZpbmUgc2tfU1RSSU5HX2Zp bmRfZXgoc3QsIHZhbCkgc2tfZmluZF9leCgoX1NUQUNLICopQ0hFQ0tFRF9DT05TVF9QVFJfT0Yo U1RBQ0tfT0YoU1RSSU5HKSwgc3QpLCBDSEVDS0VEX0NPTlNUX1BUUl9PRihjaGFyLCB2YWwpKQot LSNkZWZpbmUgc2tfU1RSSU5HX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShTVFJJTkcsIChz dCksIChpKSkKLS0jZGVmaW5lIHNrX1NUUklOR19kZWxldGVfcHRyKHN0LCBwdHIpIChTVFJJTkcg Kilza19kZWxldGVfcHRyKChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihTVFJJTkcp LCBzdCksIENIRUNLRURfUFRSX09GKGNoYXIsIHB0cikpCi0tI2RlZmluZSBza19TVFJJTkdfc2V0 X2NtcF9mdW5jKHN0LCBjbXApICBcCi0rI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19uZXcoY21w KSAoKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqKXNrX25ldyhDSEVDS0VEX1NLX0NNUF9GVU5D KGNoYXIsIGNtcCkpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKSAoKFNU QUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqKXNrX25ld19udWxsKCkpCi0rI2RlZmluZSBza19PUEVO U1NMX1NUUklOR19wdXNoKHN0LCB2YWwpIHNrX3B1c2goQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0Yo T1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKGNoYXIsIHZhbCkpCi0rI2RlZmlu ZSBza19PUEVOU1NMX1NUUklOR19maW5kKHN0LCB2YWwpIHNrX2ZpbmQoQ0hFQ0tFRF9QVFJfT0Yo U1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKGNoYXIsIHZhbCkp Ci0rI2RlZmluZSBza19PUEVOU1NMX1NUUklOR192YWx1ZShzdCwgaSkgKChPUEVOU1NMX1NUUklO Rylza192YWx1ZShDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1NUUklORyksIHN0KSwg aSkpCi0rI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19udW0oc3QpIFNLTV9za19udW0oT1BFTlNT TF9TVFJJTkcsIHN0KQotKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfcG9wX2ZyZWUoc3QsIGZy ZWVfZnVuYykgc2tfcG9wX2ZyZWUoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJ TkcpLCBzdCksIENIRUNLRURfU0tfRlJFRV9GVU5DMihPUEVOU1NMX1NUUklORywgZnJlZV9mdW5j KSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX2luc2VydChzdCwgdmFsLCBpKSBza19pbnNl cnQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURf UFRSX09GKGNoYXIsIHZhbCksIGkpCi0rI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19mcmVlKHN0 KSBTS01fc2tfZnJlZShPUEVOU1NMX1NUUklORywgc3QpCi0rI2RlZmluZSBza19PUEVOU1NMX1NU UklOR19zZXQoc3QsIGksIHZhbCkgc2tfc2V0KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFD S19PRihPUEVOU1NMX1NUUklORyksIHN0KSwgaSwgQ0hFQ0tFRF9QVFJfT0YoY2hhciwgdmFsKSkK LSsjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX3plcm8oc3QpIFNLTV9za196ZXJvKE9QRU5TU0xf U1RSSU5HLCAoc3QpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfdW5zaGlmdChzdCwgdmFs KSBza191bnNoaWZ0KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1NU UklORyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoY2hhciwgdmFsKSkKLSsjZGVmaW5lIHNrX09QRU5T U0xfU1RSSU5HX2ZpbmRfZXgoc3QsIHZhbCkgc2tfZmluZF9leCgoX1NUQUNLICopQ0hFQ0tFRF9D T05TVF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURfQ09OU1Rf UFRSX09GKGNoYXIsIHZhbCkpCi0rI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19kZWxldGUoc3Qs IGkpIFNLTV9za19kZWxldGUoT1BFTlNTTF9TVFJJTkcsIChzdCksIChpKSkKLSsjZGVmaW5lIHNr X09QRU5TU0xfU1RSSU5HX2RlbGV0ZV9wdHIoc3QsIHB0cikgKE9QRU5TU0xfU1RSSU5HICopc2tf ZGVsZXRlX3B0cigoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJ TkcpLCBzdCksIENIRUNLRURfUFRSX09GKGNoYXIsIHB0cikpCi0rI2RlZmluZSBza19PUEVOU1NM X1NUUklOR19zZXRfY21wX2Z1bmMoc3QsIGNtcCkgIFwKLSAJKChpbnQgKCopKGNvbnN0IGNoYXIg KiBjb25zdCAqLGNvbnN0IGNoYXIgKiBjb25zdCAqKSkgXAotLQlza19zZXRfY21wX2Z1bmMoKF9T VEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKFNUUklORyksIHN0KSwgQ0hFQ0tFRF9TS19D TVBfRlVOQyhjaGFyLCBjbXApKSkKLS0jZGVmaW5lIHNrX1NUUklOR19kdXAoc3QpIFNLTV9za19k dXAoU1RSSU5HLCBzdCkKLS0jZGVmaW5lIHNrX1NUUklOR19zaGlmdChzdCkgU0tNX3NrX3NoaWZ0 KFNUUklORywgKHN0KSkKLS0jZGVmaW5lIHNrX1NUUklOR19wb3Aoc3QpIChjaGFyICopc2tfcG9w KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihTVFJJTkcpLCBzdCkpCi0tI2RlZmlu ZSBza19TVFJJTkdfc29ydChzdCkgU0tNX3NrX3NvcnQoU1RSSU5HLCAoc3QpKQotLSNkZWZpbmUg c2tfU1RSSU5HX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChTVFJJTkcsIChzdCkpCi0r CXNrX3NldF9jbXBfZnVuYygoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNT TF9TVFJJTkcpLCBzdCksIENIRUNLRURfU0tfQ01QX0ZVTkMoY2hhciwgY21wKSkpCi0rI2RlZmlu ZSBza19PUEVOU1NMX1NUUklOR19kdXAoc3QpIFNLTV9za19kdXAoT1BFTlNTTF9TVFJJTkcsIHN0 KQotKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfc2hpZnQoc3QpIFNLTV9za19zaGlmdChPUEVO U1NMX1NUUklORywgKHN0KSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX3BvcChzdCkgKGNo YXIgKilza19wb3AoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfU1RS SU5HKSwgc3QpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfc29ydChzdCkgU0tNX3NrX3Nv cnQoT1BFTlNTTF9TVFJJTkcsIChzdCkpCi0rI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19pc19z b3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoT1BFTlNTTF9TVFJJTkcsIChzdCkpCi0gCi0gCi0g I2RlZmluZSBza19CTE9DS19uZXcoY21wKSAoKFNUQUNLX09GKEJMT0NLKSAqKXNrX25ldyhDSEVD S0VEX1NLX0NNUF9GVU5DKHZvaWQsIGNtcCkpKQotQEAgLTIwODAsMjkgKzIwODAsMjkgQEAKLSAj ZGVmaW5lIHNrX0JMT0NLX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChCTE9DSywgKHN0 KSkKLSAKLSAKLS0jZGVmaW5lIHNrX1BTVFJJTkdfbmV3KGNtcCkgKChTVEFDS19PRihQU1RSSU5H KSAqKXNrX25ldyhDSEVDS0VEX1NLX0NNUF9GVU5DKFNUUklORywgY21wKSkpCi0tI2RlZmluZSBz a19QU1RSSU5HX25ld19udWxsKCkgKChTVEFDS19PRihQU1RSSU5HKSAqKXNrX25ld19udWxsKCkp Ci0tI2RlZmluZSBza19QU1RSSU5HX3B1c2goc3QsIHZhbCkgc2tfcHVzaChDSEVDS0VEX1BUUl9P RihTVEFDS19PRihQU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9PRihTVFJJTkcsIHZhbCkpCi0t I2RlZmluZSBza19QU1RSSU5HX2ZpbmQoc3QsIHZhbCkgc2tfZmluZChDSEVDS0VEX1BUUl9PRihT VEFDS19PRihQU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9PRihTVFJJTkcsIHZhbCkpCi0tI2Rl ZmluZSBza19QU1RSSU5HX3ZhbHVlKHN0LCBpKSAoKFBTVFJJTkcpc2tfdmFsdWUoQ0hFQ0tFRF9Q VFJfT0YoU1RBQ0tfT0YoUFNUUklORyksIHN0KSwgaSkpCi0tI2RlZmluZSBza19QU1RSSU5HX251 bShzdCkgU0tNX3NrX251bShQU1RSSU5HLCBzdCkKLS0jZGVmaW5lIHNrX1BTVFJJTkdfcG9wX2Zy ZWUoc3QsIGZyZWVfZnVuYykgc2tfcG9wX2ZyZWUoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoUFNU UklORyksIHN0KSwgQ0hFQ0tFRF9TS19GUkVFX0ZVTkMyKFBTVFJJTkcsIGZyZWVfZnVuYykpCi0t I2RlZmluZSBza19QU1RSSU5HX2luc2VydChzdCwgdmFsLCBpKSBza19pbnNlcnQoQ0hFQ0tFRF9Q VFJfT0YoU1RBQ0tfT0YoUFNUUklORyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoU1RSSU5HLCB2YWwp LCBpKQotLSNkZWZpbmUgc2tfUFNUUklOR19mcmVlKHN0KSBTS01fc2tfZnJlZShQU1RSSU5HLCBz dCkKLS0jZGVmaW5lIHNrX1BTVFJJTkdfc2V0KHN0LCBpLCB2YWwpIHNrX3NldCgoX1NUQUNLICop Q0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoUFNUUklORyksIHN0KSwgaSwgQ0hFQ0tFRF9QVFJfT0Yo U1RSSU5HLCB2YWwpKQotLSNkZWZpbmUgc2tfUFNUUklOR196ZXJvKHN0KSBTS01fc2tfemVybyhQ U1RSSU5HLCAoc3QpKQotLSNkZWZpbmUgc2tfUFNUUklOR191bnNoaWZ0KHN0LCB2YWwpIHNrX3Vu c2hpZnQoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKFBTVFJJTkcpLCBzdCksIENI RUNLRURfUFRSX09GKFNUUklORywgdmFsKSkKLS0jZGVmaW5lIHNrX1BTVFJJTkdfZmluZF9leChz dCwgdmFsKSBza19maW5kX2V4KChfU1RBQ0sgKilDSEVDS0VEX0NPTlNUX1BUUl9PRihTVEFDS19P RihQU1RSSU5HKSwgc3QpLCBDSEVDS0VEX0NPTlNUX1BUUl9PRihTVFJJTkcsIHZhbCkpCi0tI2Rl ZmluZSBza19QU1RSSU5HX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShQU1RSSU5HLCAoc3Qp LCAoaSkpCi0tI2RlZmluZSBza19QU1RSSU5HX2RlbGV0ZV9wdHIoc3QsIHB0cikgKFBTVFJJTkcg Kilza19kZWxldGVfcHRyKChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihQU1RSSU5H KSwgc3QpLCBDSEVDS0VEX1BUUl9PRihTVFJJTkcsIHB0cikpCi0tI2RlZmluZSBza19QU1RSSU5H X3NldF9jbXBfZnVuYyhzdCwgY21wKSAgXAotLQkoKGludCAoKikoY29uc3QgU1RSSU5HICogY29u c3QgKixjb25zdCBTVFJJTkcgKiBjb25zdCAqKSkgXAotLQlza19zZXRfY21wX2Z1bmMoKF9TVEFD SyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKFBTVFJJTkcpLCBzdCksIENIRUNLRURfU0tfQ01Q X0ZVTkMoU1RSSU5HLCBjbXApKSkKLS0jZGVmaW5lIHNrX1BTVFJJTkdfZHVwKHN0KSBTS01fc2tf ZHVwKFBTVFJJTkcsIHN0KQotLSNkZWZpbmUgc2tfUFNUUklOR19zaGlmdChzdCkgU0tNX3NrX3No aWZ0KFBTVFJJTkcsIChzdCkpCi0tI2RlZmluZSBza19QU1RSSU5HX3BvcChzdCkgKFNUUklORyAq KXNrX3BvcCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoUFNUUklORyksIHN0KSkK LS0jZGVmaW5lIHNrX1BTVFJJTkdfc29ydChzdCkgU0tNX3NrX3NvcnQoUFNUUklORywgKHN0KSkK LS0jZGVmaW5lIHNrX1BTVFJJTkdfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFBTVFJJ TkcsIChzdCkpCi0rI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfbmV3KGNtcCkgKChTVEFDS19P RihPUEVOU1NMX1BTVFJJTkcpICopc2tfbmV3KENIRUNLRURfU0tfQ01QX0ZVTkMoT1BFTlNTTF9T VFJJTkcsIGNtcCkpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX25ld19udWxsKCkgKChT VEFDS19PRihPUEVOU1NMX1BTVFJJTkcpICopc2tfbmV3X251bGwoKSkKLSsjZGVmaW5lIHNrX09Q RU5TU0xfUFNUUklOR19wdXNoKHN0LCB2YWwpIHNrX3B1c2goQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tf T0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9PRihPUEVOU1NMX1NUUklORywg dmFsKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19maW5kKHN0LCB2YWwpIHNrX2ZpbmQo Q0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BU Ul9PRihPUEVOU1NMX1NUUklORywgdmFsKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR192 YWx1ZShzdCwgaSkgKChPUEVOU1NMX1BTVFJJTkcpc2tfdmFsdWUoQ0hFQ0tFRF9QVFJfT0YoU1RB Q0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBpKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNU UklOR19udW0oc3QpIFNLTV9za19udW0oT1BFTlNTTF9QU1RSSU5HLCBzdCkKLSsjZGVmaW5lIHNr X09QRU5TU0xfUFNUUklOR19wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBza19wb3BfZnJlZShDSEVD S0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpLCBzdCksIENIRUNLRURfU0tfRlJF RV9GVU5DMihPUEVOU1NMX1BTVFJJTkcsIGZyZWVfZnVuYykpCi0rI2RlZmluZSBza19PUEVOU1NM X1BTVFJJTkdfaW5zZXJ0KHN0LCB2YWwsIGkpIHNrX2luc2VydChDSEVDS0VEX1BUUl9PRihTVEFD S19PRihPUEVOU1NMX1BTVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5H LCB2YWwpLCBpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX2ZyZWUoc3QpIFNLTV9za19m cmVlKE9QRU5TU0xfUFNUUklORywgc3QpCi0rI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfc2V0 KHN0LCBpLCB2YWwpIHNrX3NldCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BF TlNTTF9QU1RSSU5HKSwgc3QpLCBpLCBDSEVDS0VEX1BUUl9PRihPUEVOU1NMX1NUUklORywgdmFs KSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR196ZXJvKHN0KSBTS01fc2tfemVybyhPUEVO U1NMX1BTVFJJTkcsIChzdCkpCi0rI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfdW5zaGlmdChz dCwgdmFsKSBza191bnNoaWZ0KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVO U1NMX1BTVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpKQot KyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX2ZpbmRfZXgoc3QsIHZhbCkgc2tfZmluZF9leCgo X1NUQUNLICopQ0hFQ0tFRF9DT05TVF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwg c3QpLCBDSEVDS0VEX0NPTlNUX1BUUl9PRihPUEVOU1NMX1NUUklORywgdmFsKSkKLSsjZGVmaW5l IHNrX09QRU5TU0xfUFNUUklOR19kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoT1BFTlNTTF9Q U1RSSU5HLCAoc3QpLCAoaSkpCi0rI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZGVsZXRlX3B0 cihzdCwgcHRyKSAoT1BFTlNTTF9QU1RSSU5HICopc2tfZGVsZXRlX3B0cigoX1NUQUNLICopQ0hF Q0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9P RihPUEVOU1NMX1NUUklORywgcHRyKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19zZXRf Y21wX2Z1bmMoc3QsIGNtcCkgIFwKLSsJKChpbnQgKCopKGNvbnN0IE9QRU5TU0xfU1RSSU5HICog Y29uc3QgKixjb25zdCBPUEVOU1NMX1NUUklORyAqIGNvbnN0ICopKSBcCi0rCXNrX3NldF9jbXBf ZnVuYygoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwg c3QpLCBDSEVDS0VEX1NLX0NNUF9GVU5DKE9QRU5TU0xfU1RSSU5HLCBjbXApKSkKLSsjZGVmaW5l IHNrX09QRU5TU0xfUFNUUklOR19kdXAoc3QpIFNLTV9za19kdXAoT1BFTlNTTF9QU1RSSU5HLCBz dCkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KE9Q RU5TU0xfUFNUUklORywgKHN0KSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19wb3Aoc3Qp IChPUEVOU1NMX1NUUklORyAqKXNrX3BvcCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tf T0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3Nv cnQoc3QpIFNLTV9za19zb3J0KE9QRU5TU0xfUFNUUklORywgKHN0KSkKLSsjZGVmaW5lIHNrX09Q RU5TU0xfUFNUUklOR19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoT1BFTlNTTF9QU1RS SU5HLCAoc3QpKQotIAotIAotICNkZWZpbmUgZDJpX0FTTjFfU0VUX09GX0FDQ0VTU19ERVNDUklQ VElPTihzdCwgcHAsIGxlbmd0aCwgZDJpX2Z1bmMsIGZyZWVfZnVuYywgZXhfdGFnLCBleF9jbGFz cykgXAotQEAgLTIzOTAsMjQgKzIzOTAsNiBAQAotICAgTEhNX2xoX3N0YXRzX2JpbyhDT05GX1ZB TFVFLGxoLG91dCkKLSAjZGVmaW5lIGxoX0NPTkZfVkFMVUVfZnJlZShsaCkgTEhNX2xoX2ZyZWUo Q09ORl9WQUxVRSxsaCkKLSAKLS0jZGVmaW5lIGxoX0NTVFJJTkdfbmV3KCkgTEhNX2xoX25ldyhD U1RSSU5HLGNzdHJpbmcpCi0tI2RlZmluZSBsaF9DU1RSSU5HX2luc2VydChsaCxpbnN0KSBMSE1f bGhfaW5zZXJ0KENTVFJJTkcsbGgsaW5zdCkKLS0jZGVmaW5lIGxoX0NTVFJJTkdfcmV0cmlldmUo bGgsaW5zdCkgTEhNX2xoX3JldHJpZXZlKENTVFJJTkcsbGgsaW5zdCkKLS0jZGVmaW5lIGxoX0NT VFJJTkdfZGVsZXRlKGxoLGluc3QpIExITV9saF9kZWxldGUoQ1NUUklORyxsaCxpbnN0KQotLSNk ZWZpbmUgbGhfQ1NUUklOR19kb2FsbChsaCxmbikgTEhNX2xoX2RvYWxsKENTVFJJTkcsbGgsZm4p Ci0tI2RlZmluZSBsaF9DU1RSSU5HX2RvYWxsX2FyZyhsaCxmbixhcmdfdHlwZSxhcmcpIFwKLS0g IExITV9saF9kb2FsbF9hcmcoQ1NUUklORyxsaCxmbixhcmdfdHlwZSxhcmcpCi0tI2RlZmluZSBs aF9DU1RSSU5HX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoQ1NUUklORyxsaCkKLS0jZGVmaW5lIGxo X0NTVFJJTkdfbnVtX2l0ZW1zKGxoKSBMSE1fbGhfbnVtX2l0ZW1zKENTVFJJTkcsbGgpCi0tI2Rl ZmluZSBsaF9DU1RSSU5HX2Rvd25fbG9hZChsaCkgTEhNX2xoX2Rvd25fbG9hZChDU1RSSU5HLGxo KQotLSNkZWZpbmUgbGhfQ1NUUklOR19ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKLS0gIExITV9s aF9ub2RlX3N0YXRzX2JpbyhDU1RSSU5HLGxoLG91dCkKLS0jZGVmaW5lIGxoX0NTVFJJTkdfbm9k ZV91c2FnZV9zdGF0c19iaW8obGgsb3V0KSBcCi0tICBMSE1fbGhfbm9kZV91c2FnZV9zdGF0c19i aW8oQ1NUUklORyxsaCxvdXQpCi0tI2RlZmluZSBsaF9DU1RSSU5HX3N0YXRzX2JpbyhsaCxvdXQp IFwKLS0gIExITV9saF9zdGF0c19iaW8oQ1NUUklORyxsaCxvdXQpCi0tI2RlZmluZSBsaF9DU1RS SU5HX2ZyZWUobGgpIExITV9saF9mcmVlKENTVFJJTkcsbGgpCi0tCi0gI2RlZmluZSBsaF9FTkdJ TkVfUElMRV9uZXcoKSBMSE1fbGhfbmV3KEVOR0lORV9QSUxFLGVuZ2luZV9waWxlKQotICNkZWZp bmUgbGhfRU5HSU5FX1BJTEVfaW5zZXJ0KGxoLGluc3QpIExITV9saF9pbnNlcnQoRU5HSU5FX1BJ TEUsbGgsaW5zdCkKLSAjZGVmaW5lIGxoX0VOR0lORV9QSUxFX3JldHJpZXZlKGxoLGluc3QpIExI TV9saF9yZXRyaWV2ZShFTkdJTkVfUElMRSxsaCxpbnN0KQotQEAgLTI1MzQsNiArMjUxNiw0MiBA QAotICAgTEhNX2xoX3N0YXRzX2JpbyhPQkpfTkFNRSxsaCxvdXQpCi0gI2RlZmluZSBsaF9PQkpf TkFNRV9mcmVlKGxoKSBMSE1fbGhfZnJlZShPQkpfTkFNRSxsaCkKLSAKLSsjZGVmaW5lIGxoX09Q RU5TU0xfQ1NUUklOR19uZXcoKSBMSE1fbGhfbmV3KE9QRU5TU0xfQ1NUUklORyxvcGVuc3NsX2Nz dHJpbmcpCi0rI2RlZmluZSBsaF9PUEVOU1NMX0NTVFJJTkdfaW5zZXJ0KGxoLGluc3QpIExITV9s aF9pbnNlcnQoT1BFTlNTTF9DU1RSSU5HLGxoLGluc3QpCi0rI2RlZmluZSBsaF9PUEVOU1NMX0NT VFJJTkdfcmV0cmlldmUobGgsaW5zdCkgTEhNX2xoX3JldHJpZXZlKE9QRU5TU0xfQ1NUUklORyxs aCxpbnN0KQotKyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX2RlbGV0ZShsaCxpbnN0KSBMSE1f bGhfZGVsZXRlKE9QRU5TU0xfQ1NUUklORyxsaCxpbnN0KQotKyNkZWZpbmUgbGhfT1BFTlNTTF9D U1RSSU5HX2RvYWxsKGxoLGZuKSBMSE1fbGhfZG9hbGwoT1BFTlNTTF9DU1RSSU5HLGxoLGZuKQot KyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX2RvYWxsX2FyZyhsaCxmbixhcmdfdHlwZSxhcmcp IFwKLSsgIExITV9saF9kb2FsbF9hcmcoT1BFTlNTTF9DU1RSSU5HLGxoLGZuLGFyZ190eXBlLGFy ZykKLSsjZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19lcnJvcihsaCkgTEhNX2xoX2Vycm9yKE9Q RU5TU0xfQ1NUUklORyxsaCkKLSsjZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19udW1faXRlbXMo bGgpIExITV9saF9udW1faXRlbXMoT1BFTlNTTF9DU1RSSU5HLGxoKQotKyNkZWZpbmUgbGhfT1BF TlNTTF9DU1RSSU5HX2Rvd25fbG9hZChsaCkgTEhNX2xoX2Rvd25fbG9hZChPUEVOU1NMX0NTVFJJ TkcsbGgpCi0rI2RlZmluZSBsaF9PUEVOU1NMX0NTVFJJTkdfbm9kZV9zdGF0c19iaW8obGgsb3V0 KSBcCi0rICBMSE1fbGhfbm9kZV9zdGF0c19iaW8oT1BFTlNTTF9DU1RSSU5HLGxoLG91dCkKLSsj ZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19ub2RlX3VzYWdlX3N0YXRzX2JpbyhsaCxvdXQpIFwK LSsgIExITV9saF9ub2RlX3VzYWdlX3N0YXRzX2JpbyhPUEVOU1NMX0NTVFJJTkcsbGgsb3V0KQot KyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX3N0YXRzX2JpbyhsaCxvdXQpIFwKLSsgIExITV9s aF9zdGF0c19iaW8oT1BFTlNTTF9DU1RSSU5HLGxoLG91dCkKLSsjZGVmaW5lIGxoX09QRU5TU0xf Q1NUUklOR19mcmVlKGxoKSBMSE1fbGhfZnJlZShPUEVOU1NMX0NTVFJJTkcsbGgpCi0rCi0rI2Rl ZmluZSBsaF9PUEVOU1NMX1NUUklOR19uZXcoKSBMSE1fbGhfbmV3KE9QRU5TU0xfU1RSSU5HLG9w ZW5zc2xfc3RyaW5nKQotKyNkZWZpbmUgbGhfT1BFTlNTTF9TVFJJTkdfaW5zZXJ0KGxoLGluc3Qp IExITV9saF9pbnNlcnQoT1BFTlNTTF9TVFJJTkcsbGgsaW5zdCkKLSsjZGVmaW5lIGxoX09QRU5T U0xfU1RSSU5HX3JldHJpZXZlKGxoLGluc3QpIExITV9saF9yZXRyaWV2ZShPUEVOU1NMX1NUUklO RyxsaCxpbnN0KQotKyNkZWZpbmUgbGhfT1BFTlNTTF9TVFJJTkdfZGVsZXRlKGxoLGluc3QpIExI TV9saF9kZWxldGUoT1BFTlNTTF9TVFJJTkcsbGgsaW5zdCkKLSsjZGVmaW5lIGxoX09QRU5TU0xf U1RSSU5HX2RvYWxsKGxoLGZuKSBMSE1fbGhfZG9hbGwoT1BFTlNTTF9TVFJJTkcsbGgsZm4pCi0r I2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19kb2FsbF9hcmcobGgsZm4sYXJnX3R5cGUsYXJnKSBc Ci0rICBMSE1fbGhfZG9hbGxfYXJnKE9QRU5TU0xfU1RSSU5HLGxoLGZuLGFyZ190eXBlLGFyZykK LSsjZGVmaW5lIGxoX09QRU5TU0xfU1RSSU5HX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoT1BFTlNT TF9TVFJJTkcsbGgpCi0rI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19udW1faXRlbXMobGgpIExI TV9saF9udW1faXRlbXMoT1BFTlNTTF9TVFJJTkcsbGgpCi0rI2RlZmluZSBsaF9PUEVOU1NMX1NU UklOR19kb3duX2xvYWQobGgpIExITV9saF9kb3duX2xvYWQoT1BFTlNTTF9TVFJJTkcsbGgpCi0r I2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKLSsgIExI TV9saF9ub2RlX3N0YXRzX2JpbyhPUEVOU1NMX1NUUklORyxsaCxvdXQpCi0rI2RlZmluZSBsaF9P UEVOU1NMX1NUUklOR19ub2RlX3VzYWdlX3N0YXRzX2JpbyhsaCxvdXQpIFwKLSsgIExITV9saF9u b2RlX3VzYWdlX3N0YXRzX2JpbyhPUEVOU1NMX1NUUklORyxsaCxvdXQpCi0rI2RlZmluZSBsaF9P UEVOU1NMX1NUUklOR19zdGF0c19iaW8obGgsb3V0KSBcCi0rICBMSE1fbGhfc3RhdHNfYmlvKE9Q RU5TU0xfU1RSSU5HLGxoLG91dCkKLSsjZGVmaW5lIGxoX09QRU5TU0xfU1RSSU5HX2ZyZWUobGgp IExITV9saF9mcmVlKE9QRU5TU0xfU1RSSU5HLGxoKQotKwotICNkZWZpbmUgbGhfU1NMX1NFU1NJ T05fbmV3KCkgTEhNX2xoX25ldyhTU0xfU0VTU0lPTixzc2xfc2Vzc2lvbikKLSAjZGVmaW5lIGxo X1NTTF9TRVNTSU9OX2luc2VydChsaCxpbnN0KSBMSE1fbGhfaW5zZXJ0KFNTTF9TRVNTSU9OLGxo LGluc3QpCi0gI2RlZmluZSBsaF9TU0xfU0VTU0lPTl9yZXRyaWV2ZShsaCxpbnN0KSBMSE1fbGhf cmV0cmlldmUoU1NMX1NFU1NJT04sbGgsaW5zdCkKLUBAIC0yNTUxLDI0ICsyNTY5LDYgQEAKLSAj ZGVmaW5lIGxoX1NTTF9TRVNTSU9OX3N0YXRzX2JpbyhsaCxvdXQpIFwKLSAgIExITV9saF9zdGF0 c19iaW8oU1NMX1NFU1NJT04sbGgsb3V0KQotICNkZWZpbmUgbGhfU1NMX1NFU1NJT05fZnJlZShs aCkgTEhNX2xoX2ZyZWUoU1NMX1NFU1NJT04sbGgpCi0tCi0tI2RlZmluZSBsaF9TVFJJTkdfbmV3 KCkgTEhNX2xoX25ldyhTVFJJTkcsc3RyaW5nKQotLSNkZWZpbmUgbGhfU1RSSU5HX2luc2VydChs aCxpbnN0KSBMSE1fbGhfaW5zZXJ0KFNUUklORyxsaCxpbnN0KQotLSNkZWZpbmUgbGhfU1RSSU5H X3JldHJpZXZlKGxoLGluc3QpIExITV9saF9yZXRyaWV2ZShTVFJJTkcsbGgsaW5zdCkKLS0jZGVm aW5lIGxoX1NUUklOR19kZWxldGUobGgsaW5zdCkgTEhNX2xoX2RlbGV0ZShTVFJJTkcsbGgsaW5z dCkKLS0jZGVmaW5lIGxoX1NUUklOR19kb2FsbChsaCxmbikgTEhNX2xoX2RvYWxsKFNUUklORyxs aCxmbikKLS0jZGVmaW5lIGxoX1NUUklOR19kb2FsbF9hcmcobGgsZm4sYXJnX3R5cGUsYXJnKSBc Ci0tICBMSE1fbGhfZG9hbGxfYXJnKFNUUklORyxsaCxmbixhcmdfdHlwZSxhcmcpCi0tI2RlZmlu ZSBsaF9TVFJJTkdfZXJyb3IobGgpIExITV9saF9lcnJvcihTVFJJTkcsbGgpCi0tI2RlZmluZSBs aF9TVFJJTkdfbnVtX2l0ZW1zKGxoKSBMSE1fbGhfbnVtX2l0ZW1zKFNUUklORyxsaCkKLS0jZGVm aW5lIGxoX1NUUklOR19kb3duX2xvYWQobGgpIExITV9saF9kb3duX2xvYWQoU1RSSU5HLGxoKQot LSNkZWZpbmUgbGhfU1RSSU5HX25vZGVfc3RhdHNfYmlvKGxoLG91dCkgXAotLSAgTEhNX2xoX25v ZGVfc3RhdHNfYmlvKFNUUklORyxsaCxvdXQpCi0tI2RlZmluZSBsaF9TVFJJTkdfbm9kZV91c2Fn ZV9zdGF0c19iaW8obGgsb3V0KSBcCi0tICBMSE1fbGhfbm9kZV91c2FnZV9zdGF0c19iaW8oU1RS SU5HLGxoLG91dCkKLS0jZGVmaW5lIGxoX1NUUklOR19zdGF0c19iaW8obGgsb3V0KSBcCi0tICBM SE1fbGhfc3RhdHNfYmlvKFNUUklORyxsaCxvdXQpCi0tI2RlZmluZSBsaF9TVFJJTkdfZnJlZShs aCkgTEhNX2xoX2ZyZWUoU1RSSU5HLGxoKQotIC8qIEVuZCBvZiB1dGlsL21rc3RhY2sucGwgYmxv Y2ssIHlvdSBtYXkgbm93IGVkaXQgOi0pICovCi0gCi0gI2VuZGlmIC8qICFkZWZpbmVkIEhFQURF Ul9TQUZFU1RBQ0tfSCAqLwotSW5kZXg6IG9wZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuYwot UkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuYyx2 Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjI1JyAnLXIxLjI1LjIuMScgLXUgJy92L29wZW5zc2wvY3Zz L29wZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuYyx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5z c2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuYyAyMDA4LzA3LzA0IDIzOjEyOjUxIDEuMjUKLSsrKyBv cGVuc3NsL2NyeXB0by90eHRfZGIvdHh0X2RiLmMgMjAwOS8wNy8yNyAyMTowODo1MSAxLjI1LjIu MQotQEAgLTc4LDcgKzc4LDcgQEAKLSAJaW50IHNpemU9QlVGU0laRTsKLSAJaW50IG9mZnNldD0w OwotIAljaGFyICpwLCpmOwotLQlTVFJJTkcgKnBwOwotKwlPUEVOU1NMX1NUUklORyAqcHA7Ci0g CUJVRl9NRU0gKmJ1Zj1OVUxMOwotIAotIAlpZiAoKGJ1Zj1CVUZfTUVNX25ldygpKSA9PSBOVUxM KSBnb3RvIGVycjsKLUBAIC04OSw3ICs4OSw3IEBACi0gCXJldC0+bnVtX2ZpZWxkcz1udW07Ci0g CXJldC0+aW5kZXg9TlVMTDsKLSAJcmV0LT5xdWFsPU5VTEw7Ci0tCWlmICgocmV0LT5kYXRhPXNr X1BTVFJJTkdfbmV3X251bGwoKSkgPT0gTlVMTCkKLSsJaWYgKChyZXQtPmRhdGE9c2tfT1BFTlNT TF9QU1RSSU5HX25ld19udWxsKCkpID09IE5VTEwpCi0gCQlnb3RvIGVycjsKLSAJaWYgKChyZXQt PmluZGV4PU9QRU5TU0xfbWFsbG9jKHNpemVvZigqcmV0LT5pbmRleCkqbnVtKSkgPT0gTlVMTCkK LSAJCWdvdG8gZXJyOwotQEAgLTE2Myw3ICsxNjMsNyBAQAotIAkJCWdvdG8gZXJyOwotIAkJCX0K LSAJCXBwW25dPXA7Ci0tCQlpZiAoIXNrX1BTVFJJTkdfcHVzaChyZXQtPmRhdGEscHApKQotKwkJ aWYgKCFza19PUEVOU1NMX1BTVFJJTkdfcHVzaChyZXQtPmRhdGEscHApKQotIAkJCXsKLSAjaWYg IWRlZmluZWQoT1BFTlNTTF9OT19TVERJTykgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMTYp CS8qIHRlbXBvcmFyeSBmaXggOi0oICovCi0gCQkJZnByaW50ZihzdGRlcnIsImZhaWx1cmUgaW4g c2tfcHVzaFxuIik7Ci1AQCAtMTgyLDcgKzE4Miw3IEBACi0gI2VuZGlmCi0gCQlpZiAocmV0ICE9 IE5VTEwpCi0gCQkJewotLQkJCWlmIChyZXQtPmRhdGEgIT0gTlVMTCkgc2tfUFNUUklOR19mcmVl KHJldC0+ZGF0YSk7Ci0rCQkJaWYgKHJldC0+ZGF0YSAhPSBOVUxMKSBza19PUEVOU1NMX1BTVFJJ TkdfZnJlZShyZXQtPmRhdGEpOwotIAkJCWlmIChyZXQtPmluZGV4ICE9IE5VTEwpIE9QRU5TU0xf ZnJlZShyZXQtPmluZGV4KTsKLSAJCQlpZiAocmV0LT5xdWFsICE9IE5VTEwpIE9QRU5TU0xfZnJl ZShyZXQtPnF1YWwpOwotIAkJCWlmIChyZXQgIT0gTlVMTCkgT1BFTlNTTF9mcmVlKHJldCk7Ci1A QCAtMTkzLDEwICsxOTMsMTAgQEAKLSAJCXJldHVybihyZXQpOwotIAl9Ci0gCi0tU1RSSU5HICpU WFRfREJfZ2V0X2J5X2luZGV4KFRYVF9EQiAqZGIsIGludCBpZHgsIFNUUklORyAqdmFsdWUpCi0r T1BFTlNTTF9TVFJJTkcgKlRYVF9EQl9nZXRfYnlfaW5kZXgoVFhUX0RCICpkYiwgaW50IGlkeCwg T1BFTlNTTF9TVFJJTkcgKnZhbHVlKQotIAl7Ci0tCVNUUklORyAqcmV0OwotLQlMSEFTSF9PRihT VFJJTkcpICpsaDsKLSsJT1BFTlNTTF9TVFJJTkcgKnJldDsKLSsJTEhBU0hfT0YoT1BFTlNTTF9T VFJJTkcpICpsaDsKLSAKLSAJaWYgKGlkeCA+PSBkYi0+bnVtX2ZpZWxkcykKLSAJCXsKLUBAIC0y MDksMTYgKzIwOSwxNiBAQAotIAkJZGItPmVycm9yPURCX0VSUk9SX05PX0lOREVYOwotIAkJcmV0 dXJuKE5VTEwpOwotIAkJfQotLQlyZXQ9bGhfU1RSSU5HX3JldHJpZXZlKGxoLHZhbHVlKTsKLSsJ cmV0PWxoX09QRU5TU0xfU1RSSU5HX3JldHJpZXZlKGxoLHZhbHVlKTsKLSAJZGItPmVycm9yPURC X0VSUk9SX09LOwotIAlyZXR1cm4ocmV0KTsKLSAJfQotIAotLWludCBUWFRfREJfY3JlYXRlX2lu ZGV4KFRYVF9EQiAqZGIsIGludCBmaWVsZCwgaW50ICgqcXVhbCkoU1RSSU5HICopLAotK2ludCBU WFRfREJfY3JlYXRlX2luZGV4KFRYVF9EQiAqZGIsIGludCBmaWVsZCwgaW50ICgqcXVhbCkoT1BF TlNTTF9TVFJJTkcgKiksCi0gCQkJTEhBU0hfSEFTSF9GTl9UWVBFIGhhc2gsIExIQVNIX0NPTVBf Rk5fVFlQRSBjbXApCi0gCXsKLS0JTEhBU0hfT0YoU1RSSU5HKSAqaWR4OwotLQlTVFJJTkcgKnI7 Ci0rCUxIQVNIX09GKE9QRU5TU0xfU1RSSU5HKSAqaWR4OwotKwlPUEVOU1NMX1NUUklORyAqcjsK LSAJaW50IGksbjsKLSAKLSAJaWYgKGZpZWxkID49IGRiLT5udW1fZmllbGRzKQotQEAgLTIyNywy NiArMjI3LDI2IEBACi0gCQlyZXR1cm4oMCk7Ci0gCQl9Ci0gCS8qIEZJWE1FOiB3ZSBsb3NlIHR5 cGUgY2hlY2tpbmcgYXQgdGhpcyBwb2ludCAqLwotLQlpZiAoKGlkeD0oTEhBU0hfT0YoU1RSSU5H KSAqKWxoX25ldyhoYXNoLGNtcCkpID09IE5VTEwpCi0rCWlmICgoaWR4PShMSEFTSF9PRihPUEVO U1NMX1NUUklORykgKilsaF9uZXcoaGFzaCxjbXApKSA9PSBOVUxMKQotIAkJewotIAkJZGItPmVy cm9yPURCX0VSUk9SX01BTExPQzsKLSAJCXJldHVybigwKTsKLSAJCX0KLS0Jbj1za19QU1RSSU5H X251bShkYi0+ZGF0YSk7Ci0rCW49c2tfT1BFTlNTTF9QU1RSSU5HX251bShkYi0+ZGF0YSk7Ci0g CWZvciAoaT0wOyBpPG47IGkrKykKLSAJCXsKLS0JCXI9c2tfUFNUUklOR192YWx1ZShkYi0+ZGF0 YSxpKTsKLSsJCXI9c2tfT1BFTlNTTF9QU1RSSU5HX3ZhbHVlKGRiLT5kYXRhLGkpOwotIAkJaWYg KChxdWFsICE9IE5VTEwpICYmIChxdWFsKHIpID09IDApKSBjb250aW51ZTsKLS0JCWlmICgocj1s aF9TVFJJTkdfaW5zZXJ0KGlkeCxyKSkgIT0gTlVMTCkKLSsJCWlmICgocj1saF9PUEVOU1NMX1NU UklOR19pbnNlcnQoaWR4LHIpKSAhPSBOVUxMKQotIAkJCXsKLSAJCQlkYi0+ZXJyb3I9REJfRVJS T1JfSU5ERVhfQ0xBU0g7Ci0tCQkJZGItPmFyZzE9c2tfUFNUUklOR19maW5kKGRiLT5kYXRhLHIp OwotKwkJCWRiLT5hcmcxPXNrX09QRU5TU0xfUFNUUklOR19maW5kKGRiLT5kYXRhLHIpOwotIAkJ CWRiLT5hcmcyPWk7Ci0tCQkJbGhfU1RSSU5HX2ZyZWUoaWR4KTsKLSsJCQlsaF9PUEVOU1NMX1NU UklOR19mcmVlKGlkeCk7Ci0gCQkJcmV0dXJuKDApOwotIAkJCX0KLSAJCX0KLS0JaWYgKGRiLT5p bmRleFtmaWVsZF0gIT0gTlVMTCkgbGhfU1RSSU5HX2ZyZWUoZGItPmluZGV4W2ZpZWxkXSk7Ci0r CWlmIChkYi0+aW5kZXhbZmllbGRdICE9IE5VTEwpIGxoX09QRU5TU0xfU1RSSU5HX2ZyZWUoZGIt PmluZGV4W2ZpZWxkXSk7Ci0gCWRiLT5pbmRleFtmaWVsZF09aWR4OwotIAlkYi0+cXVhbFtmaWVs ZF09cXVhbDsKLSAJcmV0dXJuKDEpOwotQEAgLTI2MSwxMSArMjYxLDExIEBACi0gCi0gCWlmICgo YnVmPUJVRl9NRU1fbmV3KCkpID09IE5VTEwpCi0gCQlnb3RvIGVycjsKLS0Jbj1za19QU1RSSU5H X251bShkYi0+ZGF0YSk7Ci0rCW49c2tfT1BFTlNTTF9QU1RSSU5HX251bShkYi0+ZGF0YSk7Ci0g CW5uPWRiLT5udW1fZmllbGRzOwotIAlmb3IgKGk9MDsgaTxuOyBpKyspCi0gCQl7Ci0tCQlwcD1z a19QU1RSSU5HX3ZhbHVlKGRiLT5kYXRhLGkpOwotKwkJcHA9c2tfT1BFTlNTTF9QU1RSSU5HX3Zh bHVlKGRiLT5kYXRhLGkpOwotIAotIAkJbD0wOwotIAkJZm9yIChqPTA7IGo8bm47IGorKykKLUBA IC0zMDAsMTAgKzMwMCwxMCBAQAotIAlyZXR1cm4ocmV0KTsKLSAJfQotIAotLWludCBUWFRfREJf aW5zZXJ0KFRYVF9EQiAqZGIsIFNUUklORyAqcm93KQotK2ludCBUWFRfREJfaW5zZXJ0KFRYVF9E QiAqZGIsIE9QRU5TU0xfU1RSSU5HICpyb3cpCi0gCXsKLSAJaW50IGk7Ci0tCVNUUklORyAqcjsK LSsJT1BFTlNTTF9TVFJJTkcgKnI7Ci0gCi0gCWZvciAoaT0wOyBpPGRiLT5udW1fZmllbGRzOyBp KyspCi0gCQl7Ci1AQCAtMzExLDcgKzMxMSw3IEBACi0gCQkJewotIAkJCWlmICgoZGItPnF1YWxb aV0gIT0gTlVMTCkgJiYKLSAJCQkJKGRiLT5xdWFsW2ldKHJvdykgPT0gMCkpIGNvbnRpbnVlOwot LQkJCXI9bGhfU1RSSU5HX3JldHJpZXZlKGRiLT5pbmRleFtpXSxyb3cpOwotKwkJCXI9bGhfT1BF TlNTTF9TVFJJTkdfcmV0cmlldmUoZGItPmluZGV4W2ldLHJvdyk7Ci0gCQkJaWYgKHIgIT0gTlVM TCkKLSAJCQkJewotIAkJCQlkYi0+ZXJyb3I9REJfRVJST1JfSU5ERVhfQ0xBU0g7Ci1AQCAtMzIy LDcgKzMyMiw3IEBACi0gCQkJfQotIAkJfQotIAkvKiBXZSBoYXZlIHBhc3NlZCB0aGUgaW5kZXgg Y2hlY2tzLCBub3cganVzdCBhcHBlbmQgYW5kIGluc2VydCAqLwotLQlpZiAoIXNrX1BTVFJJTkdf cHVzaChkYi0+ZGF0YSxyb3cpKQotKwlpZiAoIXNrX09QRU5TU0xfUFNUUklOR19wdXNoKGRiLT5k YXRhLHJvdykpCi0gCQl7Ci0gCQlkYi0+ZXJyb3I9REJfRVJST1JfTUFMTE9DOwotIAkJZ290byBl cnI7Ci1AQCAtMzM0LDcgKzMzNCw3IEBACi0gCQkJewotIAkJCWlmICgoZGItPnF1YWxbaV0gIT0g TlVMTCkgJiYKLSAJCQkJKGRiLT5xdWFsW2ldKHJvdykgPT0gMCkpIGNvbnRpbnVlOwotLQkJCSh2 b2lkKWxoX1NUUklOR19pbnNlcnQoZGItPmluZGV4W2ldLHJvdyk7Ci0rCQkJKHZvaWQpbGhfT1BF TlNTTF9TVFJJTkdfaW5zZXJ0KGRiLT5pbmRleFtpXSxyb3cpOwotIAkJCX0KLSAJCX0KLSAJcmV0 dXJuKDEpOwotQEAgLTM1MywxOCArMzUzLDE4IEBACi0gCWlmIChkYi0+aW5kZXggIT0gTlVMTCkK LSAJCXsKLSAJCWZvciAoaT1kYi0+bnVtX2ZpZWxkcy0xOyBpPj0wOyBpLS0pCi0tCQkJaWYgKGRi LT5pbmRleFtpXSAhPSBOVUxMKSBsaF9TVFJJTkdfZnJlZShkYi0+aW5kZXhbaV0pOwotKwkJCWlm IChkYi0+aW5kZXhbaV0gIT0gTlVMTCkgbGhfT1BFTlNTTF9TVFJJTkdfZnJlZShkYi0+aW5kZXhb aV0pOwotIAkJT1BFTlNTTF9mcmVlKGRiLT5pbmRleCk7Ci0gCQl9Ci0gCWlmIChkYi0+cXVhbCAh PSBOVUxMKQotIAkJT1BFTlNTTF9mcmVlKGRiLT5xdWFsKTsKLSAJaWYgKGRiLT5kYXRhICE9IE5V TEwpCi0gCQl7Ci0tCQlmb3IgKGk9c2tfUFNUUklOR19udW0oZGItPmRhdGEpLTE7IGk+PTA7IGkt LSkKLSsJCWZvciAoaT1za19PUEVOU1NMX1BTVFJJTkdfbnVtKGRiLT5kYXRhKS0xOyBpPj0wOyBp LS0pCi0gCQkJewotIAkJCS8qIGNoZWNrIGlmIGFueSAnZmllbGRzJyBoYXZlIGJlZW4gYWxsb2Nh dGVkCi0gCQkJICogZnJvbSBvdXRzaWRlIG9mIHRoZSBpbml0aWFsIGJsb2NrICovCi0tCQkJcD1z a19QU1RSSU5HX3ZhbHVlKGRiLT5kYXRhLGkpOwotKwkJCXA9c2tfT1BFTlNTTF9QU1RSSU5HX3Zh bHVlKGRiLT5kYXRhLGkpOwotIAkJCW1heD1wW2RiLT5udW1fZmllbGRzXTsgLyogbGFzdCBhZGRy ZXNzICovCi0gCQkJaWYgKG1heCA9PSBOVUxMKSAvKiBuZXcgcm93ICovCi0gCQkJCXsKLUBAIC0z ODAsOSArMzgwLDkgQEAKLSAJCQkJCQlPUEVOU1NMX2ZyZWUocFtuXSk7Ci0gCQkJCQl9Ci0gCQkJ CX0KLS0JCQlPUEVOU1NMX2ZyZWUoc2tfUFNUUklOR192YWx1ZShkYi0+ZGF0YSxpKSk7Ci0rCQkJ T1BFTlNTTF9mcmVlKHNrX09QRU5TU0xfUFNUUklOR192YWx1ZShkYi0+ZGF0YSxpKSk7Ci0gCQkJ fQotLQkJc2tfUFNUUklOR19mcmVlKGRiLT5kYXRhKTsKLSsJCXNrX09QRU5TU0xfUFNUUklOR19m cmVlKGRiLT5kYXRhKTsKLSAJCX0KLSAJT1BFTlNTTF9mcmVlKGRiKTsKLSAJfQotSW5kZXg6IG9w ZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuaAotUkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29w ZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuaCx2Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjExJyAn LXIxLjExLjIuMScgLXUgJy92L29wZW5zc2wvY3ZzL29wZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRf ZGIuaCx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuaCAy MDA4LzA2LzA0IDExOjAxOjM4IDEuMTEKLSsrKyBvcGVuc3NsL2NyeXB0by90eHRfZGIvdHh0X2Ri LmggMjAwOS8wNy8yNyAyMTowODo1MSAxLjExLjIuMQotQEAgLTc3LDE5ICs3NywxOSBAQAotIGV4 dGVybiAiQyIgewotICNlbmRpZgotIAotLXR5cGVkZWYgU1RSSU5HICpQU1RSSU5HOwotLURFQ0xB UkVfU1BFQ0lBTF9TVEFDS19PRihQU1RSSU5HLCBTVFJJTkcpCi0rdHlwZWRlZiBPUEVOU1NMX1NU UklORyAqT1BFTlNTTF9QU1RSSU5HOwotK0RFQ0xBUkVfU1BFQ0lBTF9TVEFDS19PRihPUEVOU1NM X1BTVFJJTkcsIE9QRU5TU0xfU1RSSU5HKQotIAotIHR5cGVkZWYgc3RydWN0IHR4dF9kYl9zdAot IAl7Ci0gCWludCBudW1fZmllbGRzOwotLQlTVEFDS19PRihQU1RSSU5HKSAqZGF0YTsKLS0JTEhB U0hfT0YoU1RSSU5HKSAqKmluZGV4OwotLQlpbnQgKCoqcXVhbCkoU1RSSU5HICopOwotKwlTVEFD S19PRihPUEVOU1NMX1BTVFJJTkcpICpkYXRhOwotKwlMSEFTSF9PRihPUEVOU1NMX1NUUklORykg KippbmRleDsKLSsJaW50ICgqKnF1YWwpKE9QRU5TU0xfU1RSSU5HICopOwotIAlsb25nIGVycm9y OwotIAlsb25nIGFyZzE7Ci0gCWxvbmcgYXJnMjsKLS0JU1RSSU5HICphcmdfcm93OwotKwlPUEVO U1NMX1NUUklORyAqYXJnX3JvdzsKLSAJfSBUWFRfREI7Ci0gCi0gI2lmbmRlZiBPUEVOU1NMX05P X0JJTwotQEAgLTk5LDExICs5OSwxMSBAQAotIFRYVF9EQiAqVFhUX0RCX3JlYWQoY2hhciAqaW4s IGludCBudW0pOwotIGxvbmcgVFhUX0RCX3dyaXRlKGNoYXIgKm91dCwgVFhUX0RCICpkYik7Ci0g I2VuZGlmCi0taW50IFRYVF9EQl9jcmVhdGVfaW5kZXgoVFhUX0RCICpkYixpbnQgZmllbGQsaW50 ICgqcXVhbCkoU1RSSU5HICopLAotK2ludCBUWFRfREJfY3JlYXRlX2luZGV4KFRYVF9EQiAqZGIs aW50IGZpZWxkLGludCAoKnF1YWwpKE9QRU5TU0xfU1RSSU5HICopLAotIAkJCUxIQVNIX0hBU0hf Rk5fVFlQRSBoYXNoLCBMSEFTSF9DT01QX0ZOX1RZUEUgY21wKTsKLSB2b2lkIFRYVF9EQl9mcmVl KFRYVF9EQiAqZGIpOwotLVNUUklORyAqVFhUX0RCX2dldF9ieV9pbmRleChUWFRfREIgKmRiLCBp bnQgaWR4LCBTVFJJTkcgKnZhbHVlKTsKLS1pbnQgVFhUX0RCX2luc2VydChUWFRfREIgKmRiLCBT VFJJTkcgKnZhbHVlKTsKLStPUEVOU1NMX1NUUklORyAqVFhUX0RCX2dldF9ieV9pbmRleChUWFRf REIgKmRiLCBpbnQgaWR4LCBPUEVOU1NMX1NUUklORyAqdmFsdWUpOwotK2ludCBUWFRfREJfaW5z ZXJ0KFRYVF9EQiAqZGIsIE9QRU5TU0xfU1RSSU5HICp2YWx1ZSk7Ci0gCi0gI2lmZGVmICBfX2Nw bHVzcGx1cwotIH0KLUluZGV4OiBvcGVuc3NsL2NyeXB0by94NTA5djMvdjNfdXRsLmMKLVJDUyBG aWxlOiAvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2NyeXB0by94NTA5djMvdjNfdXRsLmMsdgotcmNz ZGlmZiAtcSAta2sgJy1yMS40NCcgJy1yMS40NC4yLjEnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVu c3NsL2NyeXB0by94NTA5djMvdjNfdXRsLmMsdicgMj4vZGV2L251bGwKLS0tLSBvcGVuc3NsL2Ny eXB0by94NTA5djMvdjNfdXRsLmMgMjAwOS8wMi8xNCAyMTo0OTozNiAxLjQ0Ci0rKysgb3BlbnNz bC9jcnlwdG8veDUwOXYzL3YzX3V0bC5jIDIwMDkvMDcvMjcgMjE6MDg6NTMgMS40NC4yLjEKLUBA IC02Nyw5ICs2Nyw5IEBACi0gCi0gc3RhdGljIGNoYXIgKnN0cmlwX3NwYWNlcyhjaGFyICpuYW1l KTsKLSBzdGF0aWMgaW50IHNrX3N0cmNtcChjb25zdCBjaGFyICogY29uc3QgKmEsIGNvbnN0IGNo YXIgKiBjb25zdCAqYik7Ci0tc3RhdGljIFNUQUNLX09GKFNUUklORykgKmdldF9lbWFpbChYNTA5 X05BTUUgKm5hbWUsIEdFTkVSQUxfTkFNRVMgKmdlbnMpOwotLXN0YXRpYyB2b2lkIHN0cl9mcmVl KFNUUklORyBzdHIpOwotLXN0YXRpYyBpbnQgYXBwZW5kX2lhNShTVEFDS19PRihTVFJJTkcpICoq c2ssIEFTTjFfSUE1U1RSSU5HICplbWFpbCk7Ci0rc3RhdGljIFNUQUNLX09GKE9QRU5TU0xfU1RS SU5HKSAqZ2V0X2VtYWlsKFg1MDlfTkFNRSAqbmFtZSwgR0VORVJBTF9OQU1FUyAqZ2Vucyk7Ci0r c3RhdGljIHZvaWQgc3RyX2ZyZWUoT1BFTlNTTF9TVFJJTkcgc3RyKTsKLStzdGF0aWMgaW50IGFw cGVuZF9pYTUoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICoqc2ssIEFTTjFfSUE1U1RSSU5HICpl bWFpbCk7Ci0gCi0gc3RhdGljIGludCBpcHY0X2Zyb21fYXNjKHVuc2lnbmVkIGNoYXIgKnY0LCBj b25zdCBjaGFyICppbik7Ci0gc3RhdGljIGludCBpcHY2X2Zyb21fYXNjKHVuc2lnbmVkIGNoYXIg KnY2LCBjb25zdCBjaGFyICppbik7Ci1AQCAtNDYzLDEwICs0NjMsMTAgQEAKLSAJcmV0dXJuIHN0 cmNtcCgqYSwgKmIpOwotIH0KLSAKLS1TVEFDS19PRihTVFJJTkcpICpYNTA5X2dldDFfZW1haWwo WDUwOSAqeCkKLStTVEFDS19PRihPUEVOU1NMX1NUUklORykgKlg1MDlfZ2V0MV9lbWFpbChYNTA5 ICp4KQotIHsKLSAJR0VORVJBTF9OQU1FUyAqZ2VuczsKLS0JU1RBQ0tfT0YoU1RSSU5HKSAqcmV0 OwotKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnJldDsKLSAKLSAJZ2VucyA9IFg1MDlfZ2V0 X2V4dF9kMmkoeCwgTklEX3N1YmplY3RfYWx0X25hbWUsIE5VTEwsIE5VTEwpOwotIAlyZXQgPSBn ZXRfZW1haWwoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHgpLCBnZW5zKTsKLUBAIC00NzQsMTAgKzQ3 NCwxMCBAQAotIAlyZXR1cm4gcmV0OwotIH0KLSAKLS1TVEFDS19PRihTVFJJTkcpICpYNTA5X2dl dDFfb2NzcChYNTA5ICp4KQotK1NUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqWDUwOV9nZXQxX29j c3AoWDUwOSAqeCkKLSB7Ci0gCUFVVEhPUklUWV9JTkZPX0FDQ0VTUyAqaW5mbzsKLS0JU1RBQ0tf T0YoU1RSSU5HKSAqcmV0ID0gTlVMTDsKLSsJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpyZXQg PSBOVUxMOwotIAlpbnQgaTsKLSAKLSAJaW5mbyA9IFg1MDlfZ2V0X2V4dF9kMmkoeCwgTklEX2lu Zm9fYWNjZXNzLCBOVUxMLCBOVUxMKTsKLUBAIC00OTksMTEgKzQ5OSwxMSBAQAotIAlyZXR1cm4g cmV0OwotIH0KLSAKLS1TVEFDS19PRihTVFJJTkcpICpYNTA5X1JFUV9nZXQxX2VtYWlsKFg1MDlf UkVRICp4KQotK1NUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqWDUwOV9SRVFfZ2V0MV9lbWFpbChY NTA5X1JFUSAqeCkKLSB7Ci0gCUdFTkVSQUxfTkFNRVMgKmdlbnM7Ci0gCVNUQUNLX09GKFg1MDlf RVhURU5TSU9OKSAqZXh0czsKLS0JU1RBQ0tfT0YoU1RSSU5HKSAqcmV0OwotKwlTVEFDS19PRihP UEVOU1NMX1NUUklORykgKnJldDsKLSAKLSAJZXh0cyA9IFg1MDlfUkVRX2dldF9leHRlbnNpb25z KHgpOwotIAlnZW5zID0gWDUwOVYzX2dldF9kMmkoZXh0cywgTklEX3N1YmplY3RfYWx0X25hbWUs IE5VTEwsIE5VTEwpOwotQEAgLTUxNCw5ICs1MTQsOSBAQAotIH0KLSAKLSAKLS1zdGF0aWMgU1RB Q0tfT0YoU1RSSU5HKSAqZ2V0X2VtYWlsKFg1MDlfTkFNRSAqbmFtZSwgR0VORVJBTF9OQU1FUyAq Z2VucykKLStzdGF0aWMgU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpnZXRfZW1haWwoWDUwOV9O QU1FICpuYW1lLCBHRU5FUkFMX05BTUVTICpnZW5zKQotIHsKLS0JU1RBQ0tfT0YoU1RSSU5HKSAq cmV0ID0gTlVMTDsKLSsJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpyZXQgPSBOVUxMOwotIAlY NTA5X05BTUVfRU5UUlkgKm5lOwotIAlBU04xX0lBNVNUUklORyAqZW1haWw7Ci0gCUdFTkVSQUxf TkFNRSAqZ2VuOwotQEAgLTUzOSwyMyArNTM5LDIzIEBACi0gCXJldHVybiByZXQ7Ci0gfQotIAot LXN0YXRpYyB2b2lkIHN0cl9mcmVlKFNUUklORyBzdHIpCi0rc3RhdGljIHZvaWQgc3RyX2ZyZWUo T1BFTlNTTF9TVFJJTkcgc3RyKQotIHsKLSAJT1BFTlNTTF9mcmVlKHN0cik7Ci0gfQotIAotLXN0 YXRpYyBpbnQgYXBwZW5kX2lhNShTVEFDS19PRihTVFJJTkcpICoqc2ssIEFTTjFfSUE1U1RSSU5H ICplbWFpbCkKLStzdGF0aWMgaW50IGFwcGVuZF9pYTUoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcp ICoqc2ssIEFTTjFfSUE1U1RSSU5HICplbWFpbCkKLSB7Ci0gCWNoYXIgKmVtdG1wOwotIAkvKiBG aXJzdCBzb21lIHNhbml0eSBjaGVja3MgKi8KLSAJaWYoZW1haWwtPnR5cGUgIT0gVl9BU04xX0lB NVNUUklORykgcmV0dXJuIDE7Ci0gCWlmKCFlbWFpbC0+ZGF0YSB8fCAhZW1haWwtPmxlbmd0aCkg cmV0dXJuIDE7Ci0tCWlmKCEqc2spICpzayA9IHNrX1NUUklOR19uZXcoc2tfc3RyY21wKTsKLSsJ aWYoISpzaykgKnNrID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3KHNrX3N0cmNtcCk7Ci0gCWlmKCEq c2spIHJldHVybiAwOwotIAkvKiBEb24ndCBhZGQgZHVwbGljYXRlcyAqLwotLQlpZihza19TVFJJ TkdfZmluZCgqc2ssIChjaGFyICopZW1haWwtPmRhdGEpICE9IC0xKSByZXR1cm4gMTsKLSsJaWYo c2tfT1BFTlNTTF9TVFJJTkdfZmluZCgqc2ssIChjaGFyICopZW1haWwtPmRhdGEpICE9IC0xKSBy ZXR1cm4gMTsKLSAJZW10bXAgPSBCVUZfc3RyZHVwKChjaGFyICopZW1haWwtPmRhdGEpOwotLQlp ZighZW10bXAgfHwgIXNrX1NUUklOR19wdXNoKCpzaywgZW10bXApKSB7Ci0rCWlmKCFlbXRtcCB8 fCAhc2tfT1BFTlNTTF9TVFJJTkdfcHVzaCgqc2ssIGVtdG1wKSkgewotIAkJWDUwOV9lbWFpbF9m cmVlKCpzayk7Ci0gCQkqc2sgPSBOVUxMOwotIAkJcmV0dXJuIDA7Ci1AQCAtNTYzLDkgKzU2Myw5 IEBACi0gCXJldHVybiAxOwotIH0KLSAKLS12b2lkIFg1MDlfZW1haWxfZnJlZShTVEFDS19PRihT VFJJTkcpICpzaykKLSt2b2lkIFg1MDlfZW1haWxfZnJlZShTVEFDS19PRihPUEVOU1NMX1NUUklO RykgKnNrKQotIHsKLS0Jc2tfU1RSSU5HX3BvcF9mcmVlKHNrLCBzdHJfZnJlZSk7Ci0rCXNrX09Q RU5TU0xfU1RSSU5HX3BvcF9mcmVlKHNrLCBzdHJfZnJlZSk7Ci0gfQotIAotIC8qIENvbnZlcnQg SVAgYWRkcmVzc2VzIGJvdGggSVB2NCBhbmQgSVB2NiBpbnRvIGFuIAotSW5kZXg6IG9wZW5zc2wv Y3J5cHRvL3g1MDl2My94NTA5djMuaAotUkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5zc2wv Y3J5cHRvL3g1MDl2My94NTA5djMuaCx2Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjEyNi4yLjEnICct cjEuMTI2LjIuMicgLXUgJy92L29wZW5zc2wvY3ZzL29wZW5zc2wvY3J5cHRvL3g1MDl2My94NTA5 djMuaCx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5zc2wvY3J5cHRvL3g1MDl2My94NTA5djMuaCAy MDA5LzA0LzE5IDE3OjU4OjAxIDEuMTI2LjIuMQotKysrIG9wZW5zc2wvY3J5cHRvL3g1MDl2My94 NTA5djMuaCAyMDA5LzA3LzI3IDIxOjA4OjUzIDEuMTI2LjIuMgotQEAgLTY5MywxMCArNjkzLDEw IEBACi0gdm9pZCBYNTA5X1BVUlBPU0VfY2xlYW51cCh2b2lkKTsKLSBpbnQgWDUwOV9QVVJQT1NF X2dldF9pZChYNTA5X1BVUlBPU0UgKik7Ci0gCi0tU1RBQ0tfT0YoU1RSSU5HKSAqWDUwOV9nZXQx X2VtYWlsKFg1MDkgKngpOwotLVNUQUNLX09GKFNUUklORykgKlg1MDlfUkVRX2dldDFfZW1haWwo WDUwOV9SRVEgKngpOwotLXZvaWQgWDUwOV9lbWFpbF9mcmVlKFNUQUNLX09GKFNUUklORykgKnNr KTsKLS1TVEFDS19PRihTVFJJTkcpICpYNTA5X2dldDFfb2NzcChYNTA5ICp4KTsKLStTVEFDS19P RihPUEVOU1NMX1NUUklORykgKlg1MDlfZ2V0MV9lbWFpbChYNTA5ICp4KTsKLStTVEFDS19PRihP UEVOU1NMX1NUUklORykgKlg1MDlfUkVRX2dldDFfZW1haWwoWDUwOV9SRVEgKngpOwotK3ZvaWQg WDUwOV9lbWFpbF9mcmVlKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2spOwotK1NUQUNLX09G KE9QRU5TU0xfU1RSSU5HKSAqWDUwOV9nZXQxX29jc3AoWDUwOSAqeCk7Ci0gCi0gQVNOMV9PQ1RF VF9TVFJJTkcgKmEyaV9JUEFERFJFU1MoY29uc3QgY2hhciAqaXBhc2MpOwotIEFTTjFfT0NURVRf U1RSSU5HICphMmlfSVBBRERSRVNTX05DKGNvbnN0IGNoYXIgKmlwYXNjKTsKCmRpZmYgLS1naXQg YS9vcGVuc3NsLTEuMC4wLWJldGEzLXJlZGhhdC5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTMt cmVkaGF0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDZiOWFmLi4wMDAw MDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTMtcmVkaGF0LnBhdGNoCisrKyAvZGV2L251bGwK QEAgLTEsNTkgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUu cmVkaGF0IG9wZW5zc2wtMS4wLjAtYmV0YTMvQ29uZmlndXJlCi0tLS0gb3BlbnNzbC0xLjAuMC1i ZXRhMy9Db25maWd1cmUucmVkaGF0CTIwMDktMDctMDggMTA6NTA6NTIuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUJMjAwOS0wOC0wNCAyMjo0Njo1OS4w MDAwMDAwMDAgKzAyMDAKLUBAIC0zMzEsMzIgKzMzMSwzMiBAQCBteSAldGFibGU9KAotICMjIyMK LSAjICotZ2VuZXJpYyogaXMgZW5kaWFuLW5ldXRyYWwgdGFyZ2V0LCBidXQgLi9jb25maWcgaXMg ZnJlZSB0bwotICMgdGhyb3cgaW4gLURbQkxdX0VORElBTiwgd2hpY2hldmVyIGFwcHJvcHJpYXRl Li4uCi0tImxpbnV4LWdlbmVyaWMzMiIsImdjYzotRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBv aW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hV TksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVk Oi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCi0tImxpbnV4LXBw YyIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxk bDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGMz Ml9hc219OmxpbnV4MzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFK T1IpLlwkKFNITElCX01JTk9SKSIsCi0rImxpbnV4LWdlbmVyaWMzMiIsImdjYzotRFRFUk1JTyAt V2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9D SEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjps aW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZF UikiLAotKyJsaW51eC1wcGMiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBN X09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hV TksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxmY246bGludXgt c2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwK LSAjIEl0J3MgYmVsaWV2ZWQgdGhhdCBtYWpvcml0eSBvZiBBUk0gdG9vbGNoYWlucyBwcmVkZWZp bmUgYXBwcm9wcmlhdGUgLW1hcmNoLgotICMgSWYgeW91IGNvbXBpbGVyIGRvZXMgbm90LCBkbyBj b21wbGVtZW50IGNvbmZpZyBjb21tYW5kIGxpbmUgd2l0aCBvbmUhCi0tImxpbnV4LWFybXY0IiwJ ImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRf Q0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke2FybXY0X2FzbX06ZGxm Y246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9S KSIsCi0rImxpbnV4LWFybXY0IiwJImdjYzotRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdT KTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5U IERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6 XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUikiLAotICMjIyMgSUEtMzIg dGFyZ2V0cy4uLgotICJsaW51eC1pYTMyLWljYyIsCSJpY2M6LURMX0VORElBTiAtRFRFUk1JTyAt TzIgLW5vX2NwcHJ0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30g JHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotS1BJQzo6 LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotLSJsaW51eC1lbGYiLAkiZ2Nj Oi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9S RUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7 eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9S KS5cJChTSExJQl9NSU5PUikiLAotKyJsaW51eC1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJN SU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAk e3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgt c2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwK LSAibGludXgtYW91dCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1l LXBvaW50ZXIgLW1hcmNoPWk0ODYgLVdhbGw6Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2dj Y19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEub3V0IiwKLSAjIyMjCi0tImxpbnV4 LWdlbmVyaWM2NCIsImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpT SVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwg QkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9N QUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLS0ibGludXgtcHBjNjQiLAkiZ2NjOi1tNjQgLURCX0VO RElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJ VF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzY0X2Fz bX06bGludXg2NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFK T1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKLS0ibGludXgtaWE2NCIsCSJnY2M6LURMX0VORElB TiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9M T05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgt c2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCi0rImxp bnV4LWdlbmVyaWM2NCIsImdjYzotRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURf UkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERF U19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJ QzpcJChSUE1fT1BUX0ZMQUdTKTpcJChTSExJQl9TT05BTUVWRVIpIiwKLSsibGludXgtcHBjNjQi LAkiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6 LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5L IERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0OmRsZmNuOmxpbnV4LXNo YXJlZDotZlBJQzotbTY0IFwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIp Ojo6NjQiLAotKyJsaW51eC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwk KFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBS QzRfQ0hVTksgREVTX1VOUk9MTCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJl ZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIsCi0gImxp bnV4LWlhNjQtZWNjIiwiZWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBy dDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19J TlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFK T1IpLlwkKFNITElCX01JTk9SKSIsCi0gImxpbnV4LWlhNjQtaWNjIiwiaWNjOi1ETF9FTkRJQU4g LURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZP VVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNu OmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUiki LAotLSJsaW51eC14ODZfNjQiLAkiZ2NjOi1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAtTzMgLVdh bGwgLURNRDMyX1JFR19UPWludDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xP TkcgUkM0X0NIVU5LIEJGX1BUUjIgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxm OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hM SUJfTUlOT1IpOjo6NjQiLAotLSJsaW51eC1zMzkweCIsCSJnY2M6LW02NCAtREJfRU5ESUFOIC1E VEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcg UkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3MzOTB4X2FzbX06ZGxmY246 bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5P Uik6Ojo2NCIsCi0rImxpbnV4LXg4Nl82NCIsCSJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlP IC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpIC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6 LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBCRl9QVFIyIERFU19JTlQgREVTX1VO Uk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NCBcJChS UE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKTo6OjY0IiwKLSsibGludXgtczM5 MHgiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdT KTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NI VU5LIERFU19JTlQgREVTX1VOUk9MTDoke3MzOTB4X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1m UElDOi1tNjQgXCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUik6Ojo2NCIs Ci0gIyMjIyBTUEFSQyBMaW51eCBzZXR1cHMKLSAjIFJheSBNaWxsZXIgPHJheS5taWxsZXJAY29t cHV0aW5nLXNlcnZpY2VzLm94Zm9yZC5hYy51az4gaGFzIHBhdGllbnRseQotICMgYXNzaXN0ZWQg d2l0aCBkZWJ1Z2dpbmcgb2YgZm9sbG93aW5nIHR3byBjb25maWdzLgotLSJsaW51eC1zcGFyY3Y4 IiwiZ2NjOi1tdjggLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIg LVdhbGwgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJD NF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpsaW51eC1zaGFy ZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSsibGludXgt c3BhcmN2OCIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1Mp IC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hV TksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1m UElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKLSAjIGl0J3Mg YSByZWFsIG1lc3Mgd2l0aCAtbWNwdT11bHRyYXNwYXJjIG9wdGlvbiB1bmRlciBMaW51eCwgYnV0 Ci0gIyAtV2EsLUF2OHBsdXMgc2hvdWxkIGRvIHRoZSB0cmljayBubyBtYXR0ZXIgd2hhdC4KLS0i bGludXgtc3BhcmN2OSIsImdjYzotbTMyIC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtRFRF Uk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLVdhLC1BdjhwbHVzIC1EQk5fRElW Mlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NI VU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDot ZlBJQzotbTMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSsibGludXgt c3BhcmN2OSIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1Mp IC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NI QVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4 LXNoYXJlZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIs Ci0gIyBHQ0MgMy4xIGlzIGEgcmVxdWlyZW1lbnQKLS0ibGludXg2NC1zcGFyY3Y5IiwiZ2NjOi1t NjQgLW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUt cG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRf Q0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BU Ujoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hM SUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKLSsibGludXg2NC1zcGFyY3Y5IiwiZ2Nj Oi1EQl9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFO VDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVT X1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGlu dXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIp Ojo6NjQiLAotICMjIyMgQWxwaGEgTGludXggd2l0aCBHTlUgQyBhbmQgQ29tcGFxIEMgc2V0dXBz Ci0gIyBTcGVjaWFsIG5vdGVzOgotICMgLSBsaW51eC1hbHBoYStid3gtZ2NjIGlzIG1lbnQgdG8g YmUgdXNlZCBmcm9tIC4vY29uZmlnIG9ubHkuIElmIHlvdQotQEAgLTM3MCw4ICszNzAsOCBAQCBt eSAldGFibGU9KAotICMKLSAjCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+Ci0gIwotLSJsaW51 eC1hbHBoYS1nY2MiLCJnY2M6LU8zIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6 LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDok e2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1Ip LlwkKFNITElCX01JTk9SKSIsCi0tImxpbnV4LWFscGhhK2J3eC1nY2MiLCJnY2M6LU8zIC1ETF9F TkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJD NF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246 bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIs Ci0rImxpbnV4LWFscGhhLWdjYyIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQ TV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRf Q0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJl ZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIsCi0rImxp bnV4LWFscGhhK2J3eC1nY2MiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1f T1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NI QVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51 eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUiki LAotICJsaW51eC1hbHBoYS1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VO RElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hV TksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfSIsCi0g ImxpbnV4LWFscGhhK2J3eC1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VO RElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hB UiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFf YXNtfSIsCi0gCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1zc2wtZnJlZS5wYXRj aCBiL29wZW5zc2wtMS4wLjAtYmV0YTMtc3NsLWZyZWUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDYxZjU2ZWEuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1z c2wtZnJlZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3NzbF9saWIuYy5jdHgtZnJlZSBvcGVuc3NsLTEuMC4wLWJl dGEzL3NzbC9zc2xfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2xfbGliLmMu Y3R4LWZyZWUJMjAwOS0xMC0wOCAyMDo0NDoyNi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGEzL3NzbC9zc2xfbGliLmMJMjAwOS0xMC0xNiAxMTo1Njo1My4wMDAwMDAwMDAg KzAyMDAKLUBAIC01NTYsNyArNTU2LDYgQEAgdm9pZCBTU0xfZnJlZShTU0wgKnMpCi0gCWlmIChz LT5jZXJ0ICE9IE5VTEwpIHNzbF9jZXJ0X2ZyZWUocy0+Y2VydCk7Ci0gCS8qIEZyZWUgdXAgaWYg YWxsb2NhdGVkICovCi0gCi0tCWlmIChzLT5jdHgpIFNTTF9DVFhfZnJlZShzLT5jdHgpOwotICNp Zm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKLSAJaWYgKHMtPnRsc2V4dF9ob3N0bmFtZSkKLSAJCU9Q RU5TU0xfZnJlZShzLT50bHNleHRfaG9zdG5hbWUpOwotQEAgLTU4MCw2ICs1NzksOCBAQCB2b2lk IFNTTF9mcmVlKFNTTCAqcykKLSAKLSAJaWYgKHMtPm1ldGhvZCAhPSBOVUxMKSBzLT5tZXRob2Qt PnNzbF9mcmVlKHMpOwotIAotKwlpZiAocy0+Y3R4KSBTU0xfQ1RYX2ZyZWUocy0+Y3R4KTsKLSsK LSAjaWZuZGVmCU9QRU5TU0xfTk9fS1JCNQotIAlpZiAocy0+a3NzbF9jdHggIT0gTlVMTCkKLSAJ CWtzc2xfY3R4X2ZyZWUocy0+a3NzbF9jdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh My9zc2wvczNfbGliLmMuaGJ1Zi1jbGVhciBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zM19saWIu YwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3MzX2xpYi5jLmhidWYtY2xlYXIJMjAwOS0w NS0yOCAyMDoxMDo0Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL3Nz bC9zM19saWIuYwkyMDA5LTEwLTE2IDA5OjUwOjI0LjAwMDAwMDAwMCArMDIwMAotQEAgLTIyMTEs NiArMjIxMSw3IEBAIHZvaWQgc3NsM19jbGVhcihTU0wgKnMpCi0gIAl3bGVuID0gcy0+czMtPndi dWYubGVuOwotIAlpZiAocy0+czMtPmhhbmRzaGFrZV9idWZmZXIpIHsKLSAJCUJJT19mcmVlKHMt PnMzLT5oYW5kc2hha2VfYnVmZmVyKTsKLSsJCXMtPnMzLT5oYW5kc2hha2VfYnVmZmVyID0gTlVM TDsKLSAJfQotIAlpZiAocy0+czMtPmhhbmRzaGFrZV9kZ3N0KSB7Ci0gCQlzc2wzX2ZyZWVfZGln ZXN0X2xpc3Qocyk7CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1zc2wtc2Vzc2lv bi5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTMtc3NsLXNlc3Npb24ucGF0Y2gKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyM2I4NzEuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAu MC1iZXRhMy1zc2wtc2Vzc2lvbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAK LUluZGV4OiBvcGVuc3NsL3NzbC9zc2xfYXNuMS5jCi1SQ1MgRmlsZTogL3Yvb3BlbnNzbC9jdnMv b3BlbnNzbC9zc2wvc3NsX2FzbjEuYyx2Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjM2LjIuMicgJy1y MS4zNi4yLjMnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL3NzbC9zc2xfYXNuMS5jLHYnIDI+ L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9zc2wvc3NsX2FzbjEuYyAyMDA5LzA4LzA1IDE1OjI5OjE0 IDEuMzYuMi4yCi0rKysgb3BlbnNzbC9zc2wvc3NsX2FzbjEuYyAyMDA5LzA5LzAyIDEzOjIwOjIy IDEuMzYuMi4zCi1AQCAtNDEzLDggKzQxMyw4IEBACi0gCQl9Ci0gCWVsc2UKLSAJCXsKLS0JCVNT TGVycihTU0xfRl9EMklfU1NMX1NFU1NJT04sU1NMX1JfVU5LTk9XTl9TU0xfVkVSU0lPTik7Ci0t CQlyZXR1cm4oTlVMTCk7Ci0rCQljLmVycm9yPVNTTF9SX1VOS05PV05fU1NMX1ZFUlNJT047Ci0r CQlnb3RvIGVycjsKLSAJCX0KLSAJCi0gCXJldC0+Y2lwaGVyPU5VTEw7Ci1AQCAtNTA1LDggKzUw NSw4IEBACi0gCSAgICB7Ci0gCSAgICBpZiAob3MubGVuZ3RoID4gU1NMX01BWF9TSURfQ1RYX0xF TkdUSCkKLSAJCXsKLS0JCXJldC0+c2lkX2N0eF9sZW5ndGg9b3MubGVuZ3RoOwotLQkJU1NMZXJy KFNTTF9GX0QySV9TU0xfU0VTU0lPTixTU0xfUl9CQURfTEVOR1RIKTsKLSsJCWMuZXJyb3I9U1NM X1JfQkFEX0xFTkdUSDsKLSsJCWdvdG8gZXJyOwotIAkJfQotIAkgICAgZWxzZQotIAkJewoKZGlm ZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTQtYWxnby1kb2MucGF0Y2ggYi9vcGVuc3NsLTEu MC4wLWJldGE0LWFsZ28tZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjJmMThmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4wLWJldGE0LWFsZ28t ZG9jLnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0 L2RvYy9jcnlwdG8vRVZQX0RpZ2VzdEluaXQucG9kLmFsZ28tZG9jIG9wZW5zc2wtMS4wLjAtYmV0 YTQvZG9jL2NyeXB0by9FVlBfRGlnZXN0SW5pdC5wb2QKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0 L2RvYy9jcnlwdG8vRVZQX0RpZ2VzdEluaXQucG9kLmFsZ28tZG9jCTIwMDktMTAtMTYgMTc6Mjk6 MzQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9kb2MvY3J5cHRvL0VW UF9EaWdlc3RJbml0LnBvZAkyMDA5LTExLTEyIDE0OjEzOjIxLjAwMDAwMDAwMCArMDEwMAorQEAg LTYsNyArNiw4IEBAIEVWUF9NRF9DVFhfaW5pdCwgRVZQX01EX0NUWF9jcmVhdGUsIEVWUF8KKyBF VlBfRGlnZXN0RmluYWxfZXgsIEVWUF9NRF9DVFhfY2xlYW51cCwgRVZQX01EX0NUWF9kZXN0cm95 LCBFVlBfTUFYX01EX1NJWkUsCisgRVZQX01EX0NUWF9jb3B5X2V4LCBFVlBfTURfQ1RYX2NvcHks IEVWUF9NRF90eXBlLCBFVlBfTURfcGtleV90eXBlLCBFVlBfTURfc2l6ZSwKKyBFVlBfTURfYmxv Y2tfc2l6ZSwgRVZQX01EX0NUWF9tZCwgRVZQX01EX0NUWF9zaXplLCBFVlBfTURfQ1RYX2Jsb2Nr X3NpemUsIEVWUF9NRF9DVFhfdHlwZSwKKy1FVlBfbWRfbnVsbCwgRVZQX21kMiwgRVZQX21kNSwg RVZQX3NoYSwgRVZQX3NoYTEsIEVWUF9kc3MsIEVWUF9kc3MxLCBFVlBfbWRjMiwKKytFVlBfbWRf bnVsbCwgRVZQX21kMiwgRVZQX21kNSwgRVZQX3NoYSwgRVZQX3NoYTEsIEVWUF9zaGEyMjQsCisr RVZQX3NoYTI1NiwgRVZQX3NoYTM4NCwgRVZQX3NoYTUxMiwgRVZQX2RzcywgRVZQX2RzczEsIEVW UF9tZGMyLAorIEVWUF9yaXBlbWQxNjAsIEVWUF9nZXRfZGlnZXN0YnluYW1lLCBFVlBfZ2V0X2Rp Z2VzdGJ5bmlkLCBFVlBfZ2V0X2RpZ2VzdGJ5b2JqIC0KKyBFVlAgZGlnZXN0IHJvdXRpbmVzCisg CitAQCAtNTEsNiArNTIsMTAgQEAgRVZQIGRpZ2VzdCByb3V0aW5lcworICBjb25zdCBFVlBfTUQg KkVWUF9tZDUodm9pZCk7CisgIGNvbnN0IEVWUF9NRCAqRVZQX3NoYSh2b2lkKTsKKyAgY29uc3Qg RVZQX01EICpFVlBfc2hhMSh2b2lkKTsKKysgY29uc3QgRVZQX01EICpFVlBfc2hhMjI0KHZvaWQp OworKyBjb25zdCBFVlBfTUQgKkVWUF9zaGEyNTYodm9pZCk7CisrIGNvbnN0IEVWUF9NRCAqRVZQ X3NoYTM4NCh2b2lkKTsKKysgY29uc3QgRVZQX01EICpFVlBfc2hhNTEyKHZvaWQpOworICBjb25z dCBFVlBfTUQgKkVWUF9kc3Modm9pZCk7CisgIGNvbnN0IEVWUF9NRCAqRVZQX2RzczEodm9pZCk7 CisgIGNvbnN0IEVWUF9NRCAqRVZQX21kYzIodm9pZCk7CitAQCAtNzAsNyArNzUsNyBAQCBFVlBf TURfQ1RYX2NyZWF0ZSgpIGFsbG9jYXRlcywgaW5pdGlhbGl6CisgCisgRVZQX0RpZ2VzdEluaXRf ZXgoKSBzZXRzIHVwIGRpZ2VzdCBjb250ZXh0IEI8Y3R4PiB0byB1c2UgYSBkaWdlc3QKKyBCPHR5 cGU+IGZyb20gRU5HSU5FIEI8aW1wbD4uIEI8Y3R4PiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9y ZSBjYWxsaW5nIHRoaXMKKy1mdW5jdGlvbi4gQjx0eXBlPiB3aWxsIHR5cGljYWxseSBiZSBzdXBw bGllZCBieSBhIGZ1bmN0aW9uc3VjaCBhcyBFVlBfc2hhMSgpLgorK2Z1bmN0aW9uLiBCPHR5cGU+ IHdpbGwgdHlwaWNhbGx5IGJlIHN1cHBsaWVkIGJ5IGEgZnVuY3Rpb24gc3VjaCBhcyBFVlBfc2hh MSgpLgorIElmIEI8aW1wbD4gaXMgTlVMTCB0aGVuIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9u IG9mIGRpZ2VzdCBCPHR5cGU+IGlzIHVzZWQuCisgCisgRVZQX0RpZ2VzdFVwZGF0ZSgpIGhhc2hl cyBCPGNudD4gYnl0ZXMgb2YgZGF0YSBhdCBCPGQ+IGludG8gdGhlCitAQCAtMTI3LDkgKzEzMiwx MSBAQCB3aXRoIHRoaXMgZGlnZXN0LiBGb3IgZXhhbXBsZSBFVlBfc2hhMSgpCisgcmV0dXJuIEI8 TklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbj4uIFRoaXMgImxpbmsiIGJldHdlZW4gZGlnZXN0cyBh bmQgc2lnbmF0dXJlCisgYWxnb3JpdGhtcyBtYXkgbm90IGJlIHJldGFpbmVkIGluIGZ1dHVyZSB2 ZXJzaW9ucyBvZiBPcGVuU1NMLgorIAorLUVWUF9tZDIoKSwgRVZQX21kNSgpLCBFVlBfc2hhKCks IEVWUF9zaGExKCksIEVWUF9tZGMyKCkgYW5kIEVWUF9yaXBlbWQxNjAoKQorLXJldHVybiBCPEVW UF9NRD4gc3RydWN0dXJlcyBmb3IgdGhlIE1EMiwgTUQ1LCBTSEEsIFNIQTEsIE1EQzIgYW5kIFJJ UEVNRDE2MCBkaWdlc3QKKy1hbGdvcml0aG1zIHJlc3BlY3RpdmVseS4gVGhlIGFzc29jaWF0ZWQg c2lnbmF0dXJlIGFsZ29yaXRobSBpcyBSU0EgaW4gZWFjaCBjYXNlLgorK0VWUF9tZDIoKSwgRVZQ X21kNSgpLCBFVlBfc2hhKCksIEVWUF9zaGExKCksIEVWUF9zaGEyMjQoKSwgRVZQX3NoYTI1Nigp LAorK0VWUF9zaGEzODQoKSwgRVZQX3NoYTUxMigpLCBFVlBfbWRjMigpIGFuZCBFVlBfcmlwZW1k MTYwKCkKKytyZXR1cm4gQjxFVlBfTUQ+IHN0cnVjdHVyZXMgZm9yIHRoZSBNRDIsIE1ENSwgU0hB LCBTSEExLCBTSEEyMjQsIFNIQTI1NiwgU0hBMzg0LAorK1NIQTUxMiwgTURDMiBhbmQgUklQRU1E MTYwIGRpZ2VzdCBhbGdvcml0aG1zIHJlc3BlY3RpdmVseS4gVGhlIGFzc29jaWF0ZWQKKytzaWdu YXR1cmUgYWxnb3JpdGhtIGlzIFJTQSBpbiBlYWNoIGNhc2UuCisgCisgRVZQX2RzcygpIGFuZCBF VlBfZHNzMSgpIHJldHVybiBCPEVWUF9NRD4gc3RydWN0dXJlcyBmb3IgU0hBIGFuZCBTSEExIGRp Z2VzdAorIGFsZ29yaXRobXMgYnV0IHVzaW5nIERTUyAoRFNBKSBmb3IgdGhlIHNpZ25hdHVyZSBh bGdvcml0aG0uIE5vdGU6IHRoZXJlIGlzIAorQEAgLTE1OCw3ICsxNjUsOCBAQCBFVlBfTURfc2l6 ZSgpLCBFVlBfTURfYmxvY2tfc2l6ZSgpLCBFVlBfCisgRVZQX01EX0NUWF9ibG9ja19zaXplKCkJ YW5kIEVWUF9NRF9ibG9ja19zaXplKCkgcmV0dXJuIHRoZSBkaWdlc3Qgb3IgYmxvY2sKKyBzaXpl IGluIGJ5dGVzLgorIAorLUVWUF9tZF9udWxsKCksIEVWUF9tZDIoKSwgRVZQX21kNSgpLCBFVlBf c2hhKCksIEVWUF9zaGExKCksIEVWUF9kc3MoKSwKKytFVlBfbWRfbnVsbCgpLCBFVlBfbWQyKCks IEVWUF9tZDUoKSwgRVZQX3NoYSgpLCBFVlBfc2hhMSgpLAorK0VWUF9zaGEyMjQoKSwgRVZQX3No YTI1NigpLCBFVlBfc2hhMzg0KCksIEVWUF9zaGE1MTIoKSwgRVZQX2RzcygpLAorIEVWUF9kc3Mx KCksIEVWUF9tZGMyKCkgYW5kIEVWUF9yaXBlbWQxNjAoKSByZXR1cm4gcG9pbnRlcnMgdG8gdGhl CisgY29ycmVzcG9uZGluZyBFVlBfTUQgc3RydWN0dXJlcy4KKyAKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTQvZG9jL2NyeXB0by9FVlBfRW5jcnlwdEluaXQucG9kLmFsZ28tZG9jIG9wZW5z c2wtMS4wLjAtYmV0YTQvZG9jL2NyeXB0by9FVlBfRW5jcnlwdEluaXQucG9kCistLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9kb2MvY3J5cHRvL0VWUF9FbmNyeXB0SW5pdC5wb2QuYWxnby1kb2MJMjAw NS0wNC0xNSAxODowMTozNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0 L2RvYy9jcnlwdG8vRVZQX0VuY3J5cHRJbml0LnBvZAkyMDA5LTExLTEyIDE0OjExOjAzLjAwMDAw MDAwMCArMDEwMAorQEAgLTkxLDYgKzkxLDMyIEBAIEVWUF9DSVBIRVJfQ1RYX3NldF9wYWRkaW5n IC0gRVZQIGNpcGhlciAKKyAgaW50IEVWUF9DSVBIRVJfcGFyYW1fdG9fYXNuMShFVlBfQ0lQSEVS X0NUWCAqYywgQVNOMV9UWVBFICp0eXBlKTsKKyAgaW50IEVWUF9DSVBIRVJfYXNuMV90b19wYXJh bShFVlBfQ0lQSEVSX0NUWCAqYywgQVNOMV9UWVBFICp0eXBlKTsKKyAKKysgY29uc3QgRVZQX0NJ UEhFUiAqRVZQX2Rlc19lZGUzKHZvaWQpOworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2Vk ZTNfZWNiKHZvaWQpOworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZTNfY2ZiNjQodm9p ZCk7CisrIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlM19jZmIxKHZvaWQpOworKyBjb25z dCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZTNfY2ZiOCh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhF UiAqRVZQX2Rlc19lZGUzX29mYih2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19l ZGUzX2NiYyh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfZWNiKHZvaWQp OworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9jYmModm9pZCk7CisrIGNvbnN0IEVW UF9DSVBIRVIgKkVWUF9hZXNfMTI4X2NmYjEodm9pZCk7CisrIGNvbnN0IEVWUF9DSVBIRVIgKkVW UF9hZXNfMTI4X2NmYjgodm9pZCk7CisrIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2Nm YjEyOCh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfb2ZiKHZvaWQpOwor KyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9lY2Iodm9pZCk7CisrIGNvbnN0IEVWUF9D SVBIRVIgKkVWUF9hZXNfMTkyX2NiYyh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Fl c18xOTJfY2ZiMSh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfY2ZiOCh2 b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfY2ZiMTI4KHZvaWQpOworKyBj b25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9vZmIodm9pZCk7CisrIGNvbnN0IEVWUF9DSVBI RVIgKkVWUF9hZXNfMjU2X2VjYih2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18y NTZfY2JjKHZvaWQpOworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jZmIxKHZvaWQp OworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jZmI4KHZvaWQpOworKyBjb25zdCBF VlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jZmIxMjgodm9pZCk7CisrIGNvbnN0IEVWUF9DSVBIRVIg KkVWUF9hZXNfMjU2X29mYih2b2lkKTsKKysKKyA9aGVhZDEgREVTQ1JJUFRJT04KKyAKKyBUaGUg RVZQIGNpcGhlciByb3V0aW5lcyBhcmUgYSBoaWdoIGxldmVsIGludGVyZmFjZSB0byBjZXJ0YWlu CitAQCAtMjk3LDYgKzMyMywxOCBAQCBUaHJlZSBrZXkgdHJpcGxlIERFUyBpbiBDQkMsIEVDQiwg Q0ZCIGFuCisgCisgREVTWCBhbGdvcml0aG0gaW4gQ0JDIG1vZGUuCisgCisrPWl0ZW0gRVZQX2Fl c18xMjhfY2JjKHZvaWQpLCBFVlBfYWVzXzEyOF9lY2IoKSwgRVZQX2Flc18xMjhfb2ZiKHZvaWQp LCBFVlBfYWVzXzEyOF9jZmIxKHZvaWQpLCBFVlBfYWVzXzEyOF9jZmI4KHZvaWQpLCBFVlBfYWVz XzEyOF9jZmIxMjgodm9pZCkKKysKKytBRVMgd2l0aCAxMjggYml0IGtleSBsZW5ndGggaW4gQ0JD LCBFQ0IsIE9GQiBhbmQgQ0ZCIG1vZGVzIHJlc3BlY3RpdmVseS4KKysKKys9aXRlbSBFVlBfYWVz XzE5Ml9jYmModm9pZCksIEVWUF9hZXNfMTkyX2VjYigpLCBFVlBfYWVzXzE5Ml9vZmIodm9pZCks IEVWUF9hZXNfMTkyX2NmYjEodm9pZCksIEVWUF9hZXNfMTkyX2NmYjgodm9pZCksIEVWUF9hZXNf MTkyX2NmYjEyOCh2b2lkKQorKworK0FFUyB3aXRoIDE5MiBiaXQga2V5IGxlbmd0aCBpbiBDQkMs IEVDQiwgT0ZCIGFuZCBDRkIgbW9kZXMgcmVzcGVjdGl2ZWx5LgorKworKz1pdGVtIEVWUF9hZXNf MjU2X2NiYyh2b2lkKSwgRVZQX2Flc18yNTZfZWNiKCksIEVWUF9hZXNfMjU2X29mYih2b2lkKSwg RVZQX2Flc18yNTZfY2ZiMSh2b2lkKSwgRVZQX2Flc18yNTZfY2ZiOCh2b2lkKSwgRVZQX2Flc18y NTZfY2ZiMTI4KHZvaWQpCisrCisrQUVTIHdpdGggMjU2IGJpdCBrZXkgbGVuZ3RoIGluIENCQywg RUNCLCBPRkIgYW5kIENGQiBtb2RlcyByZXNwZWN0aXZlbHkuCisrCisgPWl0ZW0gRVZQX3JjNCh2 b2lkKQorIAorIFJDNCBzdHJlYW0gY2lwaGVyLiBUaGlzIGlzIGEgdmFyaWFibGUga2V5IGxlbmd0 aCBjaXBoZXIgd2l0aCBkZWZhdWx0IGtleSBsZW5ndGggMTI4IGJpdHMuCgpkaWZmIC0tZ2l0IGEv b3BlbnNzbC0xLjAuMC1iZXRhNC1jYS1kaXIucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE0LWNh LWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTFjYWJkCi0t LSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1jYS1kaXIucGF0Y2gKQEAgLTAs MCArMSwzNiBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBzL0NBLnBsLmluLmNh LWRpciBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvQ0EucGwuaW4KKy0tLSBvcGVuc3NsLTEuMC4w LWJldGE0L2FwcHMvQ0EucGwuaW4uY2EtZGlyCTIwMDYtMDQtMjggMDI6MzA6NDkuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBzL0NBLnBsLmluCTIwMDktMTEtMTIg MTI6MzM6MTMuMDAwMDAwMDAwICswMTAwCitAQCAtNTMsNyArNTMsNyBAQCAkVkVSSUZZPSIkb3Bl bnNzbCB2ZXJpZnkiOworICRYNTA5PSIkb3BlbnNzbCB4NTA5IjsKKyAkUEtDUzEyPSIkb3BlbnNz bCBwa2NzMTIiOworIAorLSRDQVRPUD0iLi9kZW1vQ0EiOworKyRDQVRPUD0iL2V0Yy9wa2kvQ0Ei OworICRDQUtFWT0iY2FrZXkucGVtIjsKKyAkQ0FSRVE9ImNhcmVxLnBlbSI7CisgJENBQ0VSVD0i Y2FjZXJ0LnBlbSI7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvQ0Euc2guY2Et ZGlyIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9DQS5zaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTQvYXBwcy9DQS5zaC5jYS1kaXIJMjAwOS0xMC0xNSAxOToyNzo0Ny4wMDAwMDAwMDAgKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvQ0Euc2gJMjAwOS0xMS0xMiAxMjozNToxNC4w MDAwMDAwMDAgKzAxMDAKK0BAIC02OCw3ICs2OCw3IEBAIFZFUklGWT0iJE9QRU5TU0wgdmVyaWZ5 IgorIFg1MDk9IiRPUEVOU1NMIHg1MDkiCisgUEtDUzEyPSJvcGVuc3NsIHBrY3MxMiIKKyAKKy1p ZiBbIC16ICIkQ0FUT1AiIF0gOyB0aGVuIENBVE9QPS4vZGVtb0NBIDsgZmkKKytpZiBbIC16ICIk Q0FUT1AiIF0gOyB0aGVuIENBVE9QPS9ldGMvcGtpL0NBIDsgZmkKKyBDQUtFWT0uL2Nha2V5LnBl bQorIENBUkVRPS4vY2FyZXEucGVtCisgQ0FDRVJUPS4vY2FjZXJ0LnBlbQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhNC9hcHBzL29wZW5zc2wuY25mLmNhLWRpciBvcGVuc3NsLTEuMC4wLWJl dGE0L2FwcHMvb3BlbnNzbC5jbmYKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvb3BlbnNz bC5jbmYuY2EtZGlyCTIwMDktMTEtMTIgMTI6MzM6MTMuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMC1iZXRhNC9hcHBzL29wZW5zc2wuY25mCTIwMDktMTEtMTIgMTI6MzM6MTMuMDAw MDAwMDAwICswMTAwCitAQCAtMzksNyArMzksNyBAQCBkZWZhdWx0X2NhCT0gQ0FfZGVmYXVsdAkJ IyBUaGUgZGVmYXVsdCBjCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyBbIENBX2RlZmF1bHQgXQorIAorLWRpcgkJ PSAuL2RlbW9DQQkJIyBXaGVyZSBldmVyeXRoaW5nIGlzIGtlcHQKKytkaXIJCT0gL2V0Yy9wa2kv Q0EJCSMgV2hlcmUgZXZlcnl0aGluZyBpcyBrZXB0CisgY2VydHMJCT0gJGRpci9jZXJ0cwkJIyBX aGVyZSB0aGUgaXNzdWVkIGNlcnRzIGFyZSBrZXB0CisgY3JsX2RpcgkJPSAkZGlyL2NybAkJIyBX aGVyZSB0aGUgaXNzdWVkIGNybCBhcmUga2VwdAorIGRhdGFiYXNlCT0gJGRpci9pbmRleC50eHQJ IyBkYXRhYmFzZSBpbmRleCBmaWxlLgoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTQt ZGVmYXVsdC1wYXRocy5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTQtZGVmYXVsdC1wYXRocy5w YXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjQ4YTI3Ci0tLSAvZGV2 L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1kZWZhdWx0LXBhdGhzLnBhdGNoCkBAIC0w LDAgKzEsNzcgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX2NsaWVudC5j LmRlZmF1bHQtcGF0aHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBzL3NfY2xpZW50LmMKKy0tLSBv cGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19jbGllbnQuYy5kZWZhdWx0LXBhdGhzCTIwMDktMDgt MTIgMTU6MjE6MjYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBz L3NfY2xpZW50LmMJMjAwOS0xMS0xMiAxMjoyNjozMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC04ODks MTIgKzg4OSwxMyBAQCBiYWQ6CisgCWlmICghc2V0X2NlcnRfa2V5X3N0dWZmKGN0eCxjZXJ0LGtl eSkpCisgCQlnb3RvIGVuZDsKKyAKKy0JaWYgKCghU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlv bnMoY3R4LENBZmlsZSxDQXBhdGgpKSB8fAorLQkJKCFTU0xfQ1RYX3NldF9kZWZhdWx0X3Zlcmlm eV9wYXRocyhjdHgpKSkKKysJaWYgKCFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjdHgs Q0FmaWxlLENBcGF0aCkpCisrCQl7CisrCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworKwkJ fQorKwlpZiAoIVNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKGN0eCkpCisgCQl7Cist CQkvKiBCSU9fcHJpbnRmKGJpb19lcnIsImVycm9yIHNldHRpbmcgZGVmYXVsdCB2ZXJpZnkgbG9j YXRpb25zXG4iKTsgKi8KKyAJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CistCQkvKiBnb3Rv IGVuZDsgKi8KKyAJCX0KKyAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCitkaWZmIC11cCBv cGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19zZXJ2ZXIuYy5kZWZhdWx0LXBhdGhzIG9wZW5zc2wt MS4wLjAtYmV0YTQvYXBwcy9zX3NlcnZlci5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBz L3Nfc2VydmVyLmMuZGVmYXVsdC1wYXRocwkyMDA5LTEwLTI4IDE4OjQ5OjM3LjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX3NlcnZlci5jCTIwMDktMTEtMTIg MTI6MzE6MjMuMDAwMDAwMDAwICswMTAwCitAQCAtMTQwOCwxMiArMTQwOCwxMyBAQCBiYWQ6Cisg CQl9CisgI2VuZGlmCisgCistCWlmICgoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGN0 eCxDQWZpbGUsQ0FwYXRoKSkgfHwKKy0JCSghU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0 aHMoY3R4KSkpCisrCWlmICghU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY3R4LENBZmls ZSxDQXBhdGgpKQorKwkJeworKwkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKysJCX0KKysJ aWYgKCFTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhjdHgpKQorIAkJeworLQkJLyog QklPX3ByaW50ZihiaW9fZXJyLCJYNTA5X2xvYWRfdmVyaWZ5X2xvY2F0aW9uc1xuIik7ICovCisg CQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworLQkJLyogZ290byBlbmQ7ICovCisgCQl9Cisg CWlmICh2cG0pCisgCQlTU0xfQ1RYX3NldDFfcGFyYW0oY3R4LCB2cG0pOworQEAgLTE0NjUsOCAr MTQ2NiwxMSBAQCBiYWQ6CisgCQllbHNlCisgCQkJU1NMX0NUWF9zZXNzX3NldF9jYWNoZV9zaXpl KGN0eDIsMTI4KTsKKyAKKy0JCWlmICgoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGN0 eDIsQ0FmaWxlLENBcGF0aCkpIHx8CistCQkJKCFTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9w YXRocyhjdHgyKSkpCisrCQlpZiAoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGN0eDIs Q0FmaWxlLENBcGF0aCkpCisrCQkJeworKwkJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Cisr CQkJfQorKwkJaWYgKCFTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhjdHgyKSkKKyAJ CQl7CisgCQkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKyAJCQl9CitkaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGE0L2FwcHMvc190aW1lLmMuZGVmYXVsdC1wYXRocyBvcGVuc3NsLTEuMC4w LWJldGE0L2FwcHMvc190aW1lLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc190aW1l LmMuZGVmYXVsdC1wYXRocwkyMDA2LTA0LTE3IDE0OjIyOjEzLjAwMDAwMDAwMCArMDIwMAorKysr IG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX3RpbWUuYwkyMDA5LTExLTEyIDEyOjI2OjMyLjAw MDAwMDAwMCArMDEwMAorQEAgLTM3MywxMiArMzczLDEzIEBAIGludCBNQUlOKGludCBhcmdjLCBj aGFyICoqYXJndikKKyAKKyAJU1NMX2xvYWRfZXJyb3Jfc3RyaW5ncygpOworIAorLQlpZiAoKCFT U0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bV9jdHgsQ0FmaWxlLENBcGF0aCkpIHx8Cist CQkoIVNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKHRtX2N0eCkpKQorKwlpZiAoIVNT TF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRtX2N0eCxDQWZpbGUsQ0FwYXRoKSkKKysJCXsK KysJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CisrCQl9CisrCWlmICghU1NMX0NUWF9zZXRf ZGVmYXVsdF92ZXJpZnlfcGF0aHModG1fY3R4KSkKKyAJCXsKKy0JCS8qIEJJT19wcmludGYoYmlv X2VyciwiZXJyb3Igc2V0dGluZyBkZWZhdWx0IHZlcmlmeSBsb2NhdGlvbnNcbiIpOyAqLworIAkJ RVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKy0JCS8qIGdvdG8gZW5kOyAqLworIAkJfQorIAor IAlpZiAodG1fY2lwaGVyID09IE5VTEwpCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRh NC1kdGxzMS1hYmkucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE0LWR0bHMxLWFiaS5wYXRjaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTBmNTVkCi0tLSAvZGV2L251bGwK KysrIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1kdGxzMS1hYmkucGF0Y2gKQEAgLTAsMCArMSwyNSBA QAorQWRkaW5nIHN0cnVjdCBtZW1iZXIgaXMgQUJJIGJyZWFrZXIgaG93ZXZlciBhcyB0aGUgc3Ry dWN0dXJlIGlzIGFsd2F5cyBhbGxvY2F0ZWQgYnkKK3RoZSBsaWJyYXJ5IGNhbGxzIHdlIGp1c3Qg bW92ZSBpdCB0byB0aGUgZW5kIGFuZCBpdCBzaG91bGQgYmUgcmVhc29uYWJseSBzYWZlLgorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvZHRsczEuaC5kdGxzMS1hYmkgb3BlbnNzbC0x LjAuMC1iZXRhNC9zc2wvZHRsczEuaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL2R0bHMx LmguZHRsczEtYWJpCTIwMDktMTEtMTIgMTQ6MzQ6MzcuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMC1iZXRhNC9zc2wvZHRsczEuaAkyMDA5LTExLTEyIDE0OjQ3OjU3LjAwMDAwMDAw MCArMDEwMAorQEAgLTIxNiw5ICsyMTYsNiBAQCB0eXBlZGVmIHN0cnVjdCBkdGxzMV9zdGF0ZV9z dAorIAkgKi8KKyAJcmVjb3JkX3BxdWV1ZSBidWZmZXJlZF9hcHBfZGF0YTsKKyAKKy0JLyogSXMg c2V0IHdoZW4gbGlzdGVuaW5nIGZvciBuZXcgY29ubmVjdGlvbnMgd2l0aCBkdGxzMV9saXN0ZW4o KSAqLworLQl1bnNpZ25lZCBpbnQgbGlzdGVuOworLQorIAl1bnNpZ25lZCBpbnQgbXR1OyAvKiBt YXggRFRMUyBwYWNrZXQgc2l6ZSAqLworIAorIAlzdHJ1Y3QgaG1faGVhZGVyX3N0IHdfbXNnX2hk cjsKK0BAIC0yNDIsNiArMjM5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgZHRsczFfc3RhdGVfc3QKKyAJ dW5zaWduZWQgaW50IHJldHJhbnNtaXR0aW5nOworIAl1bnNpZ25lZCBpbnQgY2hhbmdlX2NpcGhl cl9zcGVjX29rOworIAorKwkvKiBJcyBzZXQgd2hlbiBsaXN0ZW5pbmcgZm9yIG5ldyBjb25uZWN0 aW9ucyB3aXRoIGR0bHMxX2xpc3RlbigpICovCisrCXVuc2lnbmVkIGludCBsaXN0ZW47CisrCisg CX0gRFRMUzFfU1RBVEU7CisgCisgdHlwZWRlZiBzdHJ1Y3QgZHRsczFfcmVjb3JkX2RhdGFfc3QK CmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGE0LWVuZ2luZXNkaXIucGF0Y2ggYi9vcGVu c3NsLTEuMC4wLWJldGE0LWVuZ2luZXNkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMGEzMDRjZQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4wLjAtYmV0 YTQtZW5naW5lc2Rpci5wYXRjaApAQCAtMCwwICsxLDUyIEBACitkaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGE0L0NvbmZpZ3VyZS5lbmdpbmVzZGlyIG9wZW5zc2wtMS4wLjAtYmV0YTQvQ29uZmln dXJlCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9Db25maWd1cmUuZW5naW5lc2RpcgkyMDA5LTEx LTEyIDEyOjE3OjU5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvQ29u ZmlndXJlCTIwMDktMTEtMTIgMTI6MTk6NDUuMDAwMDAwMDAwICswMTAwCitAQCAtNjIyLDYgKzYy Miw3IEBAIG15ICRpZHhfbXVsdGlsaWIgPSAkaWR4Kys7CisgbXkgJHByZWZpeD0iIjsKKyBteSAk bGliZGlyPSIiOworIG15ICRvcGVuc3NsZGlyPSIiOworK215ICRlbmdpbmVzZGlyPSIiOworIG15 ICRleGVfZXh0PSIiOworIG15ICRpbnN0YWxsX3ByZWZpeD0gIiRFTlZ7J0lOU1RBTExfUFJFRklY J30iOworIG15ICRjcm9zc19jb21waWxlX3ByZWZpeD0iIjsKK0BAIC04MzMsNiArODM0LDEwIEBA IFBST0NFU1NfQVJHUzoKKyAJCQkJeworIAkJCQkkb3BlbnNzbGRpcj0kMTsKKyAJCQkJfQorKwkJ CWVsc2lmICgvXi0tZW5naW5lc2Rpcj0oLiopJC8pCisrCQkJCXsKKysJCQkJJGVuZ2luZXNkaXI9 JDE7CisrCQkJCX0KKyAJCQllbHNpZiAoL14tLWluc3RhbGwucHJlZml4PSguKikkLykKKyAJCQkJ eworIAkJCQkkaW5zdGFsbF9wcmVmaXg9JDE7CitAQCAtMTA1NSw3ICsxMDYwLDcgQEAgY2hvcCAk cHJlZml4IGlmICRwcmVmaXggPX4gLy5cLyQvOworIAorICRvcGVuc3NsZGlyPSRwcmVmaXggLiAi L3NzbCIgaWYgJG9wZW5zc2xkaXIgZXEgIiI7CisgJG9wZW5zc2xkaXI9JHByZWZpeCAuICIvIiAu ICRvcGVuc3NsZGlyIGlmICRvcGVuc3NsZGlyICF+IC8oXlwvfF5bYS16QS1aXTpbXFxcL10pLzsK Ky0KKyskZW5naW5lc2Rpcj0iJHByZWZpeC9saWIvZW5naW5lcyIgaWYgJGVuZ2luZXNkaXIgZXEg IiI7CisgCisgcHJpbnQgIklzTUsxTUY9JElzTUsxTUZcbiI7CisgCitAQCAtMTY3Niw3ICsxNjgx LDcgQEAgd2hpbGUgKDxJTj4pCisgCQkjICRmb28gaXMgdG8gYmVjb21lICIkcHJlZml4L2xpYiRt dWx0aWxpYi9lbmdpbmVzIjsKKyAJCSMgYXMgTWFrZWZpbGUub3JnIGFuZCBlbmdpbmVzL01ha2Vm aWxlIGFyZSBhZGFwdGVkIGZvcgorIAkJIyAkbXVsdGlsaWIgc3VmZml4LgorLQkJbXkgJGZvbyA9 ICIkcHJlZml4L2xpYi9lbmdpbmVzIjsKKysJCW15ICRmb28gPSAiJGVuZ2luZXNkaXIiOworIAkJ JGZvbyA9fiBzL1xcL1xcXFwvZzsKKyAJCXByaW50IE9VVCAiI2RlZmluZSBFTkdJTkVTRElSIFwi JGZvb1wiXG4iOworIAkJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9lbmdpbmVzL01h a2VmaWxlLmVuZ2luZXNkaXIgb3BlbnNzbC0xLjAuMC1iZXRhNC9lbmdpbmVzL01ha2VmaWxlCist LS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9lbmdpbmVzL01ha2VmaWxlLmVuZ2luZXNkaXIJMjAwOS0x MS0xMCAwMjo1Mjo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2Vu Z2luZXMvTWFrZWZpbGUJMjAwOS0xMS0xMiAxMjoyMzowNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0x MjQsNyArMTI0LDcgQEAgaW5zdGFsbDoKKyAJCQkJc2Z4PSIuc28iOyBcCisgCQkJCWNwIGN5ZyQk bC5kbGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQk cGZ4JCRsJCRzZngubmV3OyBcCisgCQkJICBmaTsgXAorLQkJCSAgY2htb2QgNTU1ICQoSU5TVEFM TF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5l dzsgXAorKwkJCSAgY2htb2QgNzU1ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJ QkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorIAkJCSAgbXYgLWYgJChJTlNUQUxM X1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3 ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQk bCQkc2Z4ICk7IFwKKyAJCWRvbmU7IFwKKyAJZmkKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4w LWJldGE0LWZpcHMucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE0LWZpcHMucGF0Y2gKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4MWQ3MQotLS0gL2Rldi9udWxsCisrKyBi L29wZW5zc2wtMS4wLjAtYmV0YTQtZmlwcy5wYXRjaApAQCAtMCwwICsxLDEyMDU5IEBACitkaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L0NvbmZpZ3VyZS5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTQvQ29uZmlndXJlCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9Db25maWd1cmUuZmlwcwkyMDA5 LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Q29uZmlndXJlCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNjYwLDYg KzY2MCw3IEBAIG15ICRjbWxsX2VuYz0iY2FtZWxsaWEubyBjbWxsX21pc2MubyBjbWwKKyBteSAk cHJvY2Vzc29yPSIiOworIG15ICRkZWZhdWx0X3JhbmxpYjsKKyBteSAkcGVybDsKKytteSAkZmlw cz0wOworIAorIAorICMgQWxsIG9mIHRoZSBmb2xsb3dpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVs dCAoUkM1IHdhcyBlbmFibGVkIGJlZm9yZSAwLjkuOCk6CitAQCAtODA2LDYgKzgwNywxMCBAQCBQ Uk9DRVNTX0FSR1M6CisgCQkJfQorIAkJZWxzaWYgKC9eMzg2JC8pCisgCQkJeyAkcHJvY2Vzc29y PTM4NjsgfQorKwkJZWxzaWYgKC9eZmlwcyQvKQorKwkJCXsKKysJCQkkZmlwcz0xOworKwkJICAg ICAgICB9CisgCQllbHNpZiAoL15yc2FyZWYkLykKKyAJCQl7CisgCQkJIyBObyBSU0FyZWYgc3Vw cG9ydCBhbnkgbW9yZSBzaW5jZSBpdCdzIG5vdCBuZWVkZWQuCitAQCAtMTM2OCw2ICsxMzczLDEx IEBAICRjZmxhZ3MuPSIgLURPUEVOU1NMX0lBMzJfU1NFMiIgaWYgKCEkbm8KKyAKKyAkY2ZsYWdz Lj0iIC1ET1BFTlNTTF9CTl9BU01fTU9OVCIgaWYgKCRibl9vYmogPX4gLy1tb250Lyk7CisgCisr aWYgKCRmaXBzKQorKwl7CisrCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5T U0xfRklQU1xuIjsKKysJfQorKworICRjcHVpZF9vYmo9Im1lbV9jbHIubyIJdW5sZXNzICgkY3B1 aWRfb2JqID1+IC9cLm8kLyk7CisgJGRlc19vYmo9JGRlc19lbmMJdW5sZXNzICgkZGVzX29iaiA9 fiAvXC5vJC8pOworICRiZl9vYmo9JGJmX2VuYwkJdW5sZXNzICgkYmZfb2JqID1+IC9cLm8kLyk7 CitAQCAtMTUzNSw2ICsxNTQ1LDEwIEBAIHdoaWxlICg8SU4+KQorIAlzL15MSUJLUkI1PS4qL0xJ QktSQjU9JHdpdGhhcmdzeyJrcmI1LWxpYiJ9LzsKKyAJcy9eTElCWkxJQj0uKi9MSUJaTElCPSR3 aXRoYXJnc3siemxpYi1saWIifS87CisgCXMvXlpMSUJfSU5DTFVERT0uKi9aTElCX0lOQ0xVREU9 JHdpdGhhcmdzeyJ6bGliLWluY2x1ZGUifS87CisrCWlmICgkZmlwcykKKysJCXsKKysJCXMvXkZJ UFM9LiovRklQUz15ZXMvOworKwkJfQorIAlzL15TSExJQl9UQVJHRVQ9LiovU0hMSUJfVEFSR0VU PSRzaGFyZWRfdGFyZ2V0LzsKKyAJcy9eU0hMSUJfTUFSSz0uKi9TSExJQl9NQVJLPSRzaGFyZWRf bWFyay87CisgCXMvXlNIQVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJTPVwkKFNIQVJFRF9DUllQVE8p IFwkKFNIQVJFRF9TU0wpLyBpZiAoISRub19zaGFyZWQpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vYmYvYmZfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vYmYvYmZfc2tleS5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYmYvYmZfc2tl eS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1Nzo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9iZi9iZl9za2V5LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAw MDAwMDAgKzAxMDAKK0BAIC01OSwxMCArNTksMTUgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAj aW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvYmxvd2Zpc2guaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJiZl9sb2NsLmgiCisgI2lu Y2x1ZGUgImJmX3BpLmgiCisgCistdm9pZCBCRl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBpbnQgbGVu LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorK0ZJUFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0 KEJGKQorIAl7CisgCWludCBpOworIAlCRl9MT05HICpwLHJpLGluWzJdOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYmYvYmxvd2Zpc2guaC5maXBzIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2JmL2Jsb3dmaXNoLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9iZi9ibG93ZmlzaC5oLmZpcHMJMjAwOS0xMS0xMiAxMjozNjo0OS4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9iZi9ibG93ZmlzaC5oCTIwMDktMTEtMTIg MTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTA0LDcgKzEwNCw5IEBAIHR5cGVkZWYgc3Ry dWN0IGJmX2tleV9zdAorIAlCRl9MT05HIFNbNCoyNTZdOworIAl9IEJGX0tFWTsKKyAKKy0gCisr I2lmZGVmIE9QRU5TU0xfRklQUyAKKyt2b2lkIHByaXZhdGVfQkZfc2V0X2tleShCRl9LRVkgKmtl eSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisrI2VuZGlmCisgdm9pZCBC Rl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRh KTsKKyAKKyB2b2lkIEJGX2VuY3J5cHQoQkZfTE9ORyAqZGF0YSxjb25zdCBCRl9LRVkgKmtleSk7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ibi9ibi5oLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vYm4vYm4uaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2JuL2JuLmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2JuL2JuLmgJMjAwOS0xMS0xMiAxMjozNjo1MC4w MDAwMDAwMDAgKzAxMDAKK0BAIC01NDAsNiArNTQwLDE3IEBAIGludAlCTl9pc19wcmltZV9leChj b25zdCBCSUdOVU0gKnAsaW50IG4KKyBpbnQJQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgoY29uc3Qg QklHTlVNICpwLGludCBuY2hlY2tzLCBCTl9DVFggKmN0eCwKKyAJCWludCBkb190cmlhbF9kaXZp c2lvbiwgQk5fR0VOQ0IgKmNiKTsKKyAKKytpbnQgQk5fWDkzMV9nZW5lcmF0ZV9YcHEoQklHTlVN ICpYcCwgQklHTlVNICpYcSwgaW50IG5iaXRzLCBCTl9DVFggKmN0eCk7CisrCisraW50IEJOX1g5 MzFfZGVyaXZlX3ByaW1lX2V4KEJJR05VTSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwKKysJ CQljb25zdCBCSUdOVU0gKlhwLCBjb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIs CisrCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwgQk5fR0VOQ0IgKmNiKTsKKytpbnQg Qk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAq cDIsCisrCQkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAs CisrCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwKKysJCQlCTl9HRU5DQiAqY2IpOwor KworIEJOX01PTlRfQ1RYICpCTl9NT05UX0NUWF9uZXcodm9pZCApOworIHZvaWQgQk5fTU9OVF9D VFhfaW5pdChCTl9NT05UX0NUWCAqY3R4KTsKKyBpbnQgQk5fbW9kX211bF9tb250Z29tZXJ5KEJJ R05VTSAqcixjb25zdCBCSUdOVU0gKmEsY29uc3QgQklHTlVNICpiLAorZGlmZiAtdXAgL2Rldi9u dWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2JuL2JuX3g5MzFwLmMKKy0tLSAvZGV2L251 bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9ibi9ibl94OTMxcC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAw ICswMTAwCitAQCAtMCwwICsxLDI3MiBAQAorKy8qIGJuX3g5MzFwLmMgKi8KKysvKiBXcml0dGVu IGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5T U0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmln aHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr ICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysg KgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE CisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3 cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5 cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgorKworKy8qIFg5LjMxIHJvdXRpbmVzIGZvciBwcmltZSBkZXJpdmF0 aW9uICovCisrCisrLyogWDkuMzEgcHJpbWUgZGVyaXZhdGlvbi4gVGhpcyBpcyB1c2VkIHRvIGdl bmVyYXRlIHRoZSBwcmltZXMgcGkKKysgKiAocDEsIHAyLCBxMSwgcTIpIGZyb20gYSBwYXJhbWV0 ZXIgWHBpIGJ5IGNoZWNraW5nIHN1Y2Nlc3NpdmUgb2RkCisrICogaW50ZWdlcnMuCisrICovCisr Cisrc3RhdGljIGludCBibl94OTMxX2Rlcml2ZV9waShCSUdOVU0gKnBpLCBjb25zdCBCSUdOVU0g KlhwaSwgQk5fQ1RYICpjdHgsCisrCQkJQk5fR0VOQ0IgKmNiKQorKwl7CisrCWludCBpID0gMDsK KysJaWYgKCFCTl9jb3B5KHBpLCBYcGkpKQorKwkJcmV0dXJuIDA7CisrCWlmICghQk5faXNfb2Rk KHBpKSAmJiAhQk5fYWRkX3dvcmQocGksIDEpKQorKwkJcmV0dXJuIDA7CisrCWZvcig7OykKKysJ CXsKKysJCWkrKzsKKysJCUJOX0dFTkNCX2NhbGwoY2IsIDAsIGkpOworKwkJLyogTkIgMjcgTVIg aXMgc3BlY2lmaWNlZCBpbiBYOS4zMSAqLworKwkJaWYgKEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4 KHBpLCAyNywgY3R4LCAxLCBjYikpCisrCQkJYnJlYWs7CisrCQlpZiAoIUJOX2FkZF93b3JkKHBp LCAyKSkKKysJCQlyZXR1cm4gMDsKKysJCX0KKysJQk5fR0VOQ0JfY2FsbChjYiwgMiwgaSk7Cisr CXJldHVybiAxOworKwl9CisrCisrLyogVGhpcyBpcyB0aGUgbWFpbiBYOS4zMSBwcmltZSBkZXJp dmF0aW9uIGZ1bmN0aW9uLiBGcm9tIHBhcmFtZXRlcnMKKysgKiBYcDEsIFhwMiBhbmQgWHAgZGVy aXZlIHRoZSBwcmltZSBwLiBJZiB0aGUgcGFyYW1ldGVycyBwMSBvciBwMiBhcmUKKysgKiBub3Qg TlVMTCB0aGV5IHdpbGwgYmUgcmV0dXJuZWQgdG9vOiB0aGlzIGlzIG5lZWRlZCBmb3IgdGVzdGlu Zy4KKysgKi8KKysKKytpbnQgQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdO VU0gKnAxLCBCSUdOVU0gKnAyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05VTSAq WHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKKysJCQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4 LCBCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50IHJldCA9IDA7CisrCisrCUJJR05VTSAqdCwgKnAx cDIsICpwbTE7CisrCisrCS8qIE9ubHkgZXZlbiBlIHN1cHBvcnRlZCAqLworKwlpZiAoIUJOX2lz X29kZChlKSkKKysJCXJldHVybiAwOworKworKwlCTl9DVFhfc3RhcnQoY3R4KTsKKysJaWYgKCFw MSkKKysJCXAxID0gQk5fQ1RYX2dldChjdHgpOworKworKwlpZiAoIXAyKQorKwkJcDIgPSBCTl9D VFhfZ2V0KGN0eCk7CisrCisrCXQgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCXAxcDIgPSBCTl9D VFhfZ2V0KGN0eCk7CisrCisrCXBtMSA9IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJaWYgKCFibl94 OTMxX2Rlcml2ZV9waShwMSwgWHAxLCBjdHgsIGNiKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAo IWJuX3g5MzFfZGVyaXZlX3BpKHAyLCBYcDIsIGN0eCwgY2IpKQorKwkJZ290byBlcnI7CisrCisr CWlmICghQk5fbXVsKHAxcDIsIHAxLCBwMiwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBG aXJzdCBzZXQgcCB0byB2YWx1ZSBvZiBScCAqLworKworKwlpZiAoIUJOX21vZF9pbnZlcnNlKHAs IHAyLCBwMSwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJOX211bChwLCBwLCBwMiwg Y3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJOX21vZF9pbnZlcnNlKHQsIHAxLCBwMiwg Y3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJOX211bCh0LCB0LCBwMSwgY3R4KSkKKysJ CWdvdG8gZXJyOworKworKwlpZiAoIUJOX3N1YihwLCBwLCB0KSkKKysJCWdvdG8gZXJyOworKwor KwlpZiAocC0+bmVnICYmICFCTl9hZGQocCwgcCwgcDFwMikpCisrCQlnb3RvIGVycjsKKysKKysJ LyogcCBub3cgZXF1YWxzIFJwICovCisrCisrCWlmICghQk5fbW9kX3N1YihwLCBwLCBYcCwgcDFw MiwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJOX2FkZChwLCBwLCBYcCkpCisrCQln b3RvIGVycjsKKysKKysJLyogcCBub3cgZXF1YWxzIFlwMCAqLworKworKwlmb3IgKDs7KQorKwkJ eworKwkJaW50IGkgPSAxOworKwkJQk5fR0VOQ0JfY2FsbChjYiwgMCwgaSsrKTsKKysJCWlmICgh Qk5fY29weShwbTEsIHApKQorKwkJCWdvdG8gZXJyOworKwkJaWYgKCFCTl9zdWJfd29yZChwbTEs IDEpKQorKwkJCWdvdG8gZXJyOworKwkJaWYgKCFCTl9nY2QodCwgcG0xLCBlLCBjdHgpKQorKwkJ CWdvdG8gZXJyOworKwkJaWYgKEJOX2lzX29uZSh0KQorKwkJLyogWDkuMzEgc3BlY2lmaWVzIDgg TVIgYW5kIDEgTHVjYXMgdGVzdCBvciBhbnkgcHJpbWUgdGVzdAorKwkJICogb2ZmZXJpbmcgc2lt aWxhciBvciBiZXR0ZXIgZ3VhcmFudGVlcyA1MCBNUiBpcyBjb25zaWRlcmFibHkgCisrCQkgKiBi ZXR0ZXIuCisrCQkgKi8KKysJCQkmJiBCTl9pc19wcmltZV9mYXN0dGVzdF9leChwLCA1MCwgY3R4 LCAxLCBjYikpCisrCQkJYnJlYWs7CisrCQlpZiAoIUJOX2FkZChwLCBwLCBwMXAyKSkKKysJCQln b3RvIGVycjsKKysJCX0KKysKKysJQk5fR0VOQ0JfY2FsbChjYiwgMywgMCk7CisrCisrCXJldCA9 IDE7CisrCisrCWVycjoKKysKKysJQk5fQ1RYX2VuZChjdHgpOworKworKwlyZXR1cm4gcmV0Owor Kwl9CisrCisrLyogR2VuZXJhdGUgcGFpciBvZiBwYXJhbXRlcnMgWHAsIFhxIGZvciBYOS4zMSBw cmltZSBnZW5lcmF0aW9uLgorKyAqIE5vdGU6IG5iaXRzIHBhcmFtdGVyIGlzIHN1bSBvZiBudW1i ZXIgb2YgYml0cyBpbiBib3RoLgorKyAqLworKworK2ludCBCTl9YOTMxX2dlbmVyYXRlX1hwcShC SUdOVU0gKlhwLCBCSUdOVU0gKlhxLCBpbnQgbmJpdHMsIEJOX0NUWCAqY3R4KQorKwl7CisrCUJJ R05VTSAqdDsKKysJaW50IGk7CisrCS8qIE51bWJlciBvZiBiaXRzIGZvciBlYWNoIHByaW1lIGlz IG9mIHRoZSBmb3JtCisrCSAqIDUxMisxMjhzIGZvciBzID0gMCwgMSwgLi4uCisrCSAqLworKwlp ZiAoKG5iaXRzIDwgMTAyNCkgfHwgKG5iaXRzICYgMHhmZikpCisrCQlyZXR1cm4gMDsKKysJbmJp dHMgPj49IDE7CisrCS8qIFRoZSByYW5kb20gdmFsdWUgWHAgbXVzdCBiZSBiZXR3ZWVuIHNxcnQo MikgKiAyXihuYml0cy0xKSBhbmQKKysJICogMl5uYml0cyAtIDEuIEJ5IHNldHRpbmcgdGhlIHRv cCB0d28gYml0cyB3ZSBlbnN1cmUgdGhhdCB0aGUgbG93ZXIKKysJICogYm91bmQgaXMgZXhjZWVk ZWQuCisrCSAqLworKwlpZiAoIUJOX3JhbmQoWHAsIG5iaXRzLCAxLCAwKSkKKysJCXJldHVybiAw OworKworKwlCTl9DVFhfc3RhcnQoY3R4KTsKKysJdCA9IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJ Zm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKKysJCXsKKysJCWlmICghQk5fcmFuZChYcSwgbmJp dHMsIDEsIDApKQorKwkJCXJldHVybiAwOworKwkJLyogQ2hlY2sgdGhhdCB8WHAgLSBYcXwgPiAy XihuYml0cyAtIDEwMCkgKi8KKysJCUJOX3N1Yih0LCBYcCwgWHEpOworKwkJaWYgKEJOX251bV9i aXRzKHQpID4gKG5iaXRzIC0gMTAwKSkKKysJCQlicmVhazsKKysJCX0KKysKKysJQk5fQ1RYX2Vu ZChjdHgpOworKworKwlpZiAoaSA8IDEwMDApCisrCQlyZXR1cm4gMTsKKysKKysJcmV0dXJuIDA7 CisrCisrCX0KKysKKysvKiBHZW5lcmF0ZSBwcmltZXMgdXNpbmcgWDkuMzEgYWxnb3JpdGhtLiBP ZiB0aGUgdmFsdWVzIHAsIHAxLCBwMiwgWHAxCisrICogYW5kIFhwMiBvbmx5ICdwJyBuZWVkcyB0 byBiZSBub24tTlVMTC4gSWYgYW55IG9mIHRoZSBvdGhlcnMgYXJlIG5vdCBOVUxMCisrICogdGhl IHJlbGV2YW50IHBhcmFtZXRlciB3aWxsIGJlIHN0b3JlZCBpbiBpdC4KKysgKgorKyAqIER1ZSB0 byB0aGUgZmFjdCB0aGF0IHxYcCAtIFhxfCA+IDJeKG5iaXRzIC0gMTAwKSBtdXN0IGJlIHNhdGlz ZmllZCBYcCBhbmQgWHEKKysgKiBhcmUgZ2VuZXJhdGVkIHVzaW5nIHRoZSBwcmV2aW91cyBmdW5j dGlvbiBhbmQgc3VwcGxpZWQgYXMgaW5wdXQuCisrICovCisrCisraW50IEJOX1g5MzFfZ2VuZXJh dGVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAorKwkJCUJJR05V TSAqWHAxLCBCSUdOVU0gKlhwMiwKKysJCQljb25zdCBCSUdOVU0gKlhwLAorKwkJCWNvbnN0IEJJ R05VTSAqZSwgQk5fQ1RYICpjdHgsCisrCQkJQk5fR0VOQ0IgKmNiKQorKwl7CisrCWludCByZXQg PSAwOworKworKwlCTl9DVFhfc3RhcnQoY3R4KTsKKysJaWYgKCFYcDEpCisrCQlYcDEgPSBCTl9D VFhfZ2V0KGN0eCk7CisrCWlmICghWHAyKQorKwkJWHAyID0gQk5fQ1RYX2dldChjdHgpOworKwor KwlpZiAoIUJOX3JhbmQoWHAxLCAxMDEsIDAsIDApKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFC Tl9yYW5kKFhwMiwgMTAxLCAwLCAwKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghQk5fWDkzMV9k ZXJpdmVfcHJpbWVfZXgocCwgcDEsIHAyLCBYcCwgWHAxLCBYcDIsIGUsIGN0eCwgY2IpKQorKwkJ Z290byBlcnJvcjsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCUJOX0NUWF9lbmQoY3R4 KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vYm4vTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9i bi9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2JuL01ha2VmaWxlLmZp cHMJMjAwOC0xMS0xMiAwOToxOTowMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9ibi9NYWtlZmlsZQkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCAr MDEwMAorQEAgLTI2LDEzICsyNiwxMyBAQCBMSUJTUkM9CWJuX2FkZC5jIGJuX2Rpdi5jIGJuX2V4 cC5jIGJuX2xpCisgCWJuX3ByaW50LmMgYm5fcmFuZC5jIGJuX3NoaWZ0LmMgYm5fd29yZC5jIGJu X2JsaW5kLmMgXAorIAlibl9rcm9uLmMgYm5fc3FydC5jIGJuX2djZC5jIGJuX3ByaW1lLmMgYm5f ZXJyLmMgYm5fc3FyLmMgYm5fYXNtLmMgXAorIAlibl9yZWNwLmMgYm5fbW9udC5jIGJuX21waS5j IGJuX2V4cDIuYyBibl9nZjJtLmMgYm5fbmlzdC5jIFwKKy0JYm5fZGVwci5jIGJuX2NvbnN0LmMK KysJYm5fZGVwci5jIGJuX2NvbnN0LmMgYm5feDkzMXAuYworIAorIExJQk9CSj0JYm5fYWRkLm8g Ym5fZGl2Lm8gYm5fZXhwLm8gYm5fbGliLm8gYm5fY3R4Lm8gYm5fbXVsLm8gYm5fbW9kLm8gXAor IAlibl9wcmludC5vIGJuX3JhbmQubyBibl9zaGlmdC5vIGJuX3dvcmQubyBibl9ibGluZC5vIFwK KyAJYm5fa3Jvbi5vIGJuX3NxcnQubyBibl9nY2QubyBibl9wcmltZS5vIGJuX2Vyci5vIGJuX3Nx ci5vICQoQk5fQVNNKSBcCisgCWJuX3JlY3AubyBibl9tb250Lm8gYm5fbXBpLm8gYm5fZXhwMi5v IGJuX2dmMm0ubyBibl9uaXN0Lm8gXAorLQlibl9kZXByLm8gYm5fY29uc3QubworKwlibl9kZXBy Lm8gYm5fY29uc3QubyBibl94OTMxcC5vCisgCisgU1JDPSAkKExJQlNSQykKKyAKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbC5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbAorLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbC5maXBz CTIwMDktMDQtMDYgMTY6MjU6MDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwteDg2LnBsCTIwMDktMTEtMTIgMTI6MzY6NTAu MDAwMDAwMDAwICswMTAwCitAQCAtNzIyLDEyICs3MjIsMTUgQEAgbXkgJGJpYXM9aW50KEBUWzBd KT9zaGlmdChAVCk6MDsKKyB9CisgJmZ1bmN0aW9uX2VuZCgiQ2FtZWxsaWFfRWtleWdlbiIpOwor IAorKyRzZXRrZXlmdW5jID0gIkNhbWVsbGlhX3NldF9rZXkiOworKyRzZXRrZXlmdW5jID0gInBy aXZhdGVfQ2FtZWxsaWFfc2V0X2tleSIgaWYgKCRFTlZ7RklQU30gbmUgIiIpOworKworIGlmICgk T1BFTlNTTCkgeworICMgaW50IENhbWVsbGlhX3NldF9rZXkgKAorICMJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKnVzZXJLZXksCisgIwkJaW50IGJpdHMsCisgIwkJQ0FNRUxMSUFfS0VZICprZXkpCist JmZ1bmN0aW9uX2JlZ2luX0IoIkNhbWVsbGlhX3NldF9rZXkiKTsKKysmZnVuY3Rpb25fYmVnaW5f Qigkc2V0a2V5ZnVuYyk7CisgCSZwdXNoCSgiZWJ4Iik7CisgCSZtb3YJKCJlY3giLCZ3cGFyYW0o MCkpOwkjIHB1bGwgYXJndW1lbnRzCisgCSZtb3YJKCJlYngiLCZ3cGFyYW0oMSkpOworQEAgLTc2 MCw3ICs3NjMsNyBAQCBpZiAoJE9QRU5TU0wpIHsKKyAmc2V0X2xhYmVsKCJkb25lIiw0KTsKKyAJ JnBvcAkoImVieCIpOworIAkmcmV0CSgpOworLSZmdW5jdGlvbl9lbmRfQigiQ2FtZWxsaWFfc2V0 X2tleSIpOworKyZmdW5jdGlvbl9lbmRfQigkc2V0a2V5ZnVuYyk7CisgfQorIAorIEBTQk9YPSgK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhLmgu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oCistLS0g b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaC5maXBzCTIwMDkt MTEtMTIgMTI6MzY6NDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaAkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCAr MDEwMAorQEAgLTg4LDYgKzg4LDExIEBAIHN0cnVjdCBjYW1lbGxpYV9rZXlfc3QgCisgCX07Cisg dHlwZWRlZiBzdHJ1Y3QgY2FtZWxsaWFfa2V5X3N0IENBTUVMTElBX0tFWTsKKyAKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25l ZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKysJQ0FNRUxMSUFfS0VZICprZXkpOwor KyNlbmRpZgorKworIGludCBDYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVz ZXJLZXksIGNvbnN0IGludCBiaXRzLAorIAlDQU1FTExJQV9LRVkgKmtleSk7CisgCitkaWZmIC11 cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvY21sbF9mYmxr LmMKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYwkyMDA5LTEx LTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw2OCBAQAorKy8qIGNyeXB0 by9jYW1lbGxpYS9jYW1lbGxpYV9taXNjLmMgLSotIG1vZGU6QzsgYy1maWxlLXN0eWxlOiAiZWF5 IiAtKi0gKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNiBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAg ICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi CisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K KysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqLworKyAK KysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NhbWVs bGlhLmg+CisrI2luY2x1ZGUgImNtbGxfbG9jbC5oIgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0 by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBDYW1lbGxpYV9zZXRfa2V5KGNv bnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorKwlDQU1FTExJQV9L RVkgKmtleSkKKysJeworKwlpZiAoRklQU19tb2RlKCkpCisrCQlGSVBTX0JBRF9BQk9SVChDQU1F TExJQSkKKysJcmV0dXJuIHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleSh1c2VyS2V5LCBiaXRzLCBr ZXkpOworKwl9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9j YW1lbGxpYS9jbWxsX21pc2MuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVs bGlhL2NtbGxfbWlzYy5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEv Y21sbF9taXNjLmMuZmlwcwkyMDA4LTEwLTI4IDEzOjEzOjUyLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2NtbGxfbWlzYy5jCTIwMDktMTEt MTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNTIsMTEgKzUyLDIwIEBACisgI2luY2x1 ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9jYW1lbGxpYS5oPgor ICNpbmNsdWRlICJjbWxsX2xvY2wuaCIKKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgor IAorIGNvbnN0IGNoYXIgQ0FNRUxMSUFfdmVyc2lvbltdPSJDQU1FTExJQSIgT1BFTlNTTF9WRVJT SU9OX1BURVhUOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9DYW1lbGxp YV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAor KwlDQU1FTExJQV9LRVkgKmtleSkKKysjZWxzZQorIGludCBDYW1lbGxpYV9zZXRfa2V5KGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorIAlDQU1FTExJQV9LRVkg KmtleSkKKysjZW5kaWYKKyAJeworIAlpZighdXNlcktleSB8fCAha2V5KQorIAkJcmV0dXJuIC0x OworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvTWFrZWZpbGUu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZQorLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlLmZpcHMJMjAwOC0xMi0y MyAxMjozMzowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9jYW1lbGxpYS9NYWtlZmlsZQkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAor QEAgLTIzLDkgKzIzLDkgQEAgQVBQUz0KKyAKKyBMSUI9JChUT1ApL2xpYmNyeXB0by5hCisgTElC U1JDPWNhbWVsbGlhLmMgY21sbF9taXNjLmMgY21sbF9lY2IuYyBjbWxsX2NiYy5jIGNtbGxfb2Zi LmMgXAorLQkgICBjbWxsX2NmYi5jIGNtbGxfY3RyLmMgCisrCSAgIGNtbGxfY2ZiLmMgY21sbF9j dHIuYyBjbWxsX2ZibGsuYworIAorLUxJQk9CSj0gY21sbF9lY2IubyBjbWxsX29mYi5vIGNtbGxf Y2ZiLm8gY21sbF9jdHIubyAkKENNTExfRU5DKQorK0xJQk9CSj0gY21sbF9lY2IubyBjbWxsX29m Yi5vIGNtbGxfY2ZiLm8gY21sbF9jdHIubyAkKENNTExfRU5DKSBjbWxsX2ZibGsubworIAorIFNS Qz0gJChMSUJTUkMpCisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYXN0 L2Nhc3QuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Nhc3QvY2FzdC5oCistLS0g b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FzdC9jYXN0LmguZmlwcwkyMDA5LTExLTEyIDEy OjM2OjQ5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Nh c3QvY2FzdC5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtODMsNyAr ODMsOSBAQCB0eXBlZGVmIHN0cnVjdCBjYXN0X2tleV9zdAorIAlpbnQgc2hvcnRfa2V5OwkvKiBV c2UgcmVkdWNlZCByb3VuZHMgZm9yIHNob3J0IGtleSAqLworIAl9IENBU1RfS0VZOworIAorLSAK KysjaWZkZWYgT1BFTlNTTF9GSVBTIAorK3ZvaWQgcHJpdmF0ZV9DQVNUX3NldF9rZXkoQ0FTVF9L RVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisrI2VuZGlmCisg dm9pZCBDQVNUX3NldF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQg Y2hhciAqZGF0YSk7Cisgdm9pZCBDQVNUX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIg KmluLHVuc2lnbmVkIGNoYXIgKm91dCxDQVNUX0tFWSAqa2V5LAorIAkJICAgICAgaW50IGVuYyk7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYXN0L2Nfc2tleS5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FzdC9jX3NrZXkuYworLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2Nhc3QvY19za2V5LmMuZmlwcwkyMDAwLTA2LTAzIDE2OjEzOjM1LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Nhc3QvY19za2V5 LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01Nyw2ICs1NywxMSBA QAorICAqLworIAorICNpbmNsdWRlIDxvcGVuc3NsL2Nhc3QuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJjYXN0X2xjbC5oIgorICNpbmNsdWRlICJjYXN0 X3MuaCIKKyAKK0BAIC03Miw3ICs3Nyw3IEBACisgI2RlZmluZSBTNiBDQVNUX1NfdGFibGU2Cisg I2RlZmluZSBTNyBDQVNUX1NfdGFibGU3CisgCistdm9pZCBDQVNUX3NldF9rZXkoQ0FTVF9LRVkg KmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKytGSVBTX05PTl9GSVBT X1ZDSVBIRVJfSW5pdChDQVNUKQorIAl7CisgCUNBU1RfTE9ORyB4WzE2XTsKKyAJQ0FTVF9MT05H IHpbMTZdOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY3J5cHRvLmguZmlw cyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jcnlwdG8uaAorLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2NyeXB0by5oLmZpcHMJMjAwOS0xMS0xMiAxMjozNjo0OS4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jcnlwdG8uaAkyMDA5LTExLTEy IDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTU0NiwxMiArNTQ2LDY5IEBAIHZvaWQgT3Bl blNTTERpZShjb25zdCBjaGFyICpmaWxlLGludCBsaW4KKyB1bnNpZ25lZCBsb25nICpPUEVOU1NM X2lhMzJjYXBfbG9jKHZvaWQpOworICNkZWZpbmUgT1BFTlNTTF9pYTMyY2FwICgqKE9QRU5TU0xf aWEzMmNhcF9sb2MoKSkpCisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNkZWZpbmUgRklQU19F UlJPUl9JR05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKysJCWFs ZyAiIHByZXZpb3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBlcnJvciBpZ25vcmVkIik7Cisr CisrI2RlZmluZSBGSVBTX0JBRF9BQk9SVChhbGcpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElO RV9fLCBcCisrCQkjYWxnICIgQWxnb3JpdGhtIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUiKTsKKysK KysjaWZkZWYgT1BFTlNTTF9GSVBTX1NUUklDVAorKyNkZWZpbmUgRklQU19CQURfQUxHT1JJVEhN KGFsZykgRklQU19CQURfQUJPUlQoYWxnKQorKyNlbHNlCisrI2RlZmluZSBGSVBTX0JBRF9BTEdP UklUSE0oYWxnKSBcCisrCXsgXAorKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLEZJUFNfUl9O T05fRklQU19NRVRIT0QpOyBcCisrCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiQWxnb3JpdGhtPSIs ICNhbGcpOyBcCisrCXJldHVybiAwOyBcCisrCX0KKysjZW5kaWYKKysKKysvKiBMb3cgbGV2ZWwg ZGlnZXN0IEFQSSBibG9ja2luZyBtYWNybyAqLworKworKyNkZWZpbmUgRklQU19OT05fRklQU19N RF9Jbml0KGFsZykgXAorKwlpbnQgYWxnIyNfSW5pdChhbGcjI19DVFggKmMpIFwKKysJCXsgXAor KwkJaWYgKEZJUFNfbW9kZSgpKSBcCisrCQkJRklQU19CQURfQUxHT1JJVEhNKGFsZykgXAorKwkJ cmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMpOyBcCisrCQl9IFwKKysJaW50IHByaXZhdGVf IyNhbGcjI19Jbml0KGFsZyMjX0NUWCAqYykKKysKKysvKiBGb3IgY2lwaGVycyB0aGUgQVBJIG9m dGVuIHZhcmllcyBmcm9tIGNpcGhlciB0byBjaXBoZXIgYW5kIGVhY2ggbmVlZHMgdG8KKysgKiBi ZSB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjYXNlLiBWYXJpYWJsZSBrZXkgbGVuZ3RoIGNpcGhlcnMg KEJsb3dmaXNoLCBSQzQsCisrICogQ0FTVCkgaG93ZXZlciBhcmUgdmVyeSBzaW1pbGFyIGFuZCBj YW4gdXNlIGEgYmxvY2tpbmcgbWFjcm8uCisrICovCisrCisrI2RlZmluZSBGSVBTX05PTl9GSVBT X1ZDSVBIRVJfSW5pdChhbGcpIFwKKysJdm9pZCBhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5 LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKSBcCisrCQl7IFwKKysJCWlmIChG SVBTX21vZGUoKSkgXAorKwkJCUZJUFNfQkFEX0FCT1JUKGFsZykgXAorKwkJcHJpdmF0ZV8jI2Fs ZyMjX3NldF9rZXkoa2V5LCBsZW4sIGRhdGEpOyBcCisrCQl9IFwKKysJdm9pZCBwcml2YXRlXyMj YWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtleSwgaW50IGxlbiwgXAorKwkJCQkJY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSkKKysKKysjZWxzZQorKworKyNkZWZpbmUgRklQU19OT05fRklQU19W Q0lQSEVSX0luaXQoYWxnKSBcCisrCXZvaWQgYWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtleSwg aW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKysKKysjZGVmaW5lIEZJUFNfTk9O X0ZJUFNfTURfSW5pdChhbGcpIFwKKysJaW50IGFsZyMjX0luaXQoYWxnIyNfQ1RYICpjKSAKKysK KysjZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQUyAqLworKworIC8qIEJFR0lOIEVSUk9SIENPREVT ICovCisgLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNj cmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKKyAgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5 IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KKyAgKi8KKyB2b2lk IEVSUl9sb2FkX0NSWVBUT19zdHJpbmdzKHZvaWQpOworIAorKyNkZWZpbmUgT1BFTlNTTF9IQVZF X0lOSVQJMQorK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7CisrCisgLyogRXJyb3Ig Y29kZXMgZm9yIHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLworIAorIC8qIEZ1bmN0aW9uIGNvZGVz LiAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZGgvZGhfZXJyLmMuZmlw cyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9lcnIuYworLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2RoL2RoX2Vyci5jLmZpcHMJMjAwNi0xMS0yMSAyMjoyOTozNy4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9lcnIuYwky MDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTczLDYgKzczLDggQEAgc3Rh dGljIEVSUl9TVFJJTkdfREFUQSBESF9zdHJfZnVuY3RzW109Cisge0VSUl9GVU5DKERIX0ZfQ09N UFVURV9LRVkpLAkiQ09NUFVURV9LRVkifSwKKyB7RVJSX0ZVTkMoREhfRl9ESFBBUkFNU19QUklO VF9GUCksCSJESHBhcmFtc19wcmludF9mcCJ9LAorIHtFUlJfRlVOQyhESF9GX0RIX0JVSUxUSU5f R0VOUEFSQU1TKSwJIkRIX0JVSUxUSU5fR0VOUEFSQU1TIn0sCisre0VSUl9GVU5DKERIX0ZfREhf Q09NUFVURV9LRVkpLAkiREhfY29tcHV0ZV9rZXkifSwKKyt7RVJSX0ZVTkMoREhfRl9ESF9HRU5F UkFURV9LRVkpLAkiREhfZ2VuZXJhdGVfa2V5In0sCisge0VSUl9GVU5DKERIX0ZfREhfTkVXX01F VEhPRCksCSJESF9uZXdfbWV0aG9kIn0sCisge0VSUl9GVU5DKERIX0ZfREhfUEFSQU1fREVDT0RF KSwJIkRIX1BBUkFNX0RFQ09ERSJ9LAorIHtFUlJfRlVOQyhESF9GX0RIX1BSSVZfREVDT0RFKSwJ IkRIX1BSSVZfREVDT0RFIn0sCitAQCAtOTQsNiArOTYsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19E QVRBIERIX3N0cl9yZWFzb25zW109Cisge0VSUl9SRUFTT04oREhfUl9CTl9FUlJPUikgICAgICAg ICAgICAgICAsImJuIGVycm9yIn0sCisge0VSUl9SRUFTT04oREhfUl9ERUNPREVfRVJST1IpICAg ICAgICAgICAsImRlY29kZSBlcnJvciJ9LAorIHtFUlJfUkVBU09OKERIX1JfSU5WQUxJRF9QVUJL RVkpICAgICAgICAgLCJpbnZhbGlkIHB1YmxpYyBrZXkifSwKKyt7RVJSX1JFQVNPTihESF9SX0tF WV9TSVpFX1RPT19TTUFMTCkgICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCisge0VSUl9SRUFT T04oREhfUl9LRVlTX05PVF9TRVQpICAgICAgICAgICAsImtleXMgbm90IHNldCJ9LAorIHtFUlJf UkVBU09OKERIX1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9 LAorIHtFUlJfUkVBU09OKERIX1JfTk9fUEFSQU1FVEVSU19TRVQpICAgICAgLCJubyBwYXJhbWV0 ZXJzIHNldCJ9LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZGgvZGhfZ2Vu LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9nZW4uYworLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJMjAwNS0wNC0yNiAyMDo1Mzox NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9n ZW4uYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTY1LDYgKzY1LDEw IEBACisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAj aW5jbHVkZSA8b3BlbnNzbC9kaC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisg c3RhdGljIGludCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LCBpbnQgcHJpbWVfbGVuLCBp bnQgZ2VuZXJhdG9yLCBCTl9HRU5DQiAqY2IpOworIAorQEAgLTEwNiw2ICsxMTAsMjAgQEAgc3Rh dGljIGludCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LAorIAlpbnQgZyxvaz0gLTE7Cisg CUJOX0NUWCAqY3R4PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3Nl bGZ0ZXN0X2ZhaWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfREhfQlVJTFRJTl9HRU5Q QVJBTVMsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQor KworKwlpZiAoRklQU19tb2RlKCkgJiYgKHByaW1lX2xlbiA8IE9QRU5TU0xfREhfRklQU19NSU5f TU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURIZXJyKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMs IERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgor KworIAljdHg9Qk5fQ1RYX25ldygpOworIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOworIAlC Tl9DVFhfc3RhcnQoY3R4KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Ro L2RoLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaC5oCistLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZGgvZGguaC5maXBzCTIwMDktMTEtMTIgMTI6MzY6NDkuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZGgvZGguaAkyMDA5 LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTc3LDYgKzc3LDggQEAKKyAjIGRl ZmluZSBPUEVOU1NMX0RIX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKKyAjZW5kaWYKKyAKKysjZGVm aW5lIE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAjZGVmaW5lIERI X0ZMQUdfQ0FDSEVfTU9OVF9QICAgICAweDAxCisgI2RlZmluZSBESF9GTEFHX05PX0VYUF9DT05T VFRJTUUgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBESAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMg Y29uc3RhbnQgdGltZQorQEAgLTI0MSw2ICsyNDMsOCBAQCB2b2lkIEVSUl9sb2FkX0RIX3N0cmlu Z3Modm9pZCk7CisgI2RlZmluZSBESF9GX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTA0CisgI2Rl ZmluZSBESF9GX1BLRVlfREhfREVSSVZFCQkJCSAxMTIKKyAjZGVmaW5lIERIX0ZfUEtFWV9ESF9L RVlHRU4JCQkJIDExMworKyNkZWZpbmUgREhfRl9ESF9DT01QVVRFX0tFWQkJCQkgMTE0CisrI2Rl ZmluZSBESF9GX0RIX0dFTkVSQVRFX0tFWQkJCSAxMTUKKyAKKyAvKiBSZWFzb24gY29kZXMuICov CisgI2RlZmluZSBESF9SX0JBRF9HRU5FUkFUT1IJCQkJIDEwMQorQEAgLTI1Myw2ICsyNTcsNyBA QCB2b2lkIEVSUl9sb2FkX0RIX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBESF9SX05PX1BBUkFN RVRFUlNfU0VUCQkJCSAxMDcKKyAjZGVmaW5lIERIX1JfTk9fUFJJVkFURV9WQUxVRQkJCQkgMTAw CisgI2RlZmluZSBESF9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUgkJCSAxMDUKKysjZGVmaW5l IERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJCSAxMTAKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVz CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZGgvZGhfa2V5LmMuZmlw cyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9rZXkuYworLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMJMjAwNy0wMy0yOCAwMjoxNToyMy4wMDAw MDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9rZXkuYwky MDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTYxLDYgKzYxLDkgQEAKKyAj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAjaW5j bHVkZSA8b3BlbnNzbC9kaC5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRo KTsKKyBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgQklH TlVNICpwdWJfa2V5LCBESCAqZGgpOworQEAgLTEwNyw2ICsxMTAsMTQgQEAgc3RhdGljIGludCBn ZW5lcmF0ZV9rZXkoREggKmRoKQorIAlCTl9NT05UX0NUWCAqbW9udD1OVUxMOworIAlCSUdOVU0g KnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIoREhfRl9HRU5FUkFURV9LRVksIERI X1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgorKwor IAljdHggPSBCTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7CisgCitA QCAtMTg0LDYgKzE5NSwxMyBAQCBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIg KmtlCisgCQlESGVycihESF9GX0NPTVBVVEVfS0VZLERIX1JfTU9EVUxVU19UT09fTEFSR0UpOwor IAkJZ290byBlcnI7CisgCQl9CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2Rl KCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19C SVRTKSkKKysJCXsKKysJCURIZXJyKERIX0ZfQ09NUFVURV9LRVksIERIX1JfS0VZX1NJWkVfVE9P X1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorIAorIAljdHggPSBCTl9DVFhf bmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7CitAQCAtMjUxLDYgKzI2OSw5IEBA IHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25zdCBESCAqZGgsIEIKKyAKKyBzdGF0aWMgaW50 IGRoX2luaXQoREggKmRoKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0 ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWRoLT5mbGFncyB8PSBESF9GTEFHX0NBQ0hFX01PTlRf UDsKKyAJcmV0dXJuKDEpOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9kc2EvZHNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2RzYV9n ZW4uYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwky MDA4LTEyLTI2IDE4OjE3OjIxLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2RzYS9kc2FfZ2VuLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAx MDAKK0BAIC03Nyw4ICs3NywxMiBAQAorICNpbmNsdWRlICJjcnlwdGxpYi5oIgorICNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZHNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorICNpbmNsdWRlIDxvcGVu c3NsL3NoYS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrI2VuZGlmCisgI2luY2x1ZGUgImRzYV9sb2NsLmgiCisgCisgaW50IERTQV9nZW5lcmF0 ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0LCBpbnQgYml0cywKK0BAIC0xMjYsNiArMTMwLDIxIEBA IGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJQk5fQ1RYICpjdHg9 TlVMTDsKKyAJdW5zaWduZWQgaW50IGg9MjsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlm KEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9E U0FfQlVJTFRJTl9QQVJBTUdFTiwKKysJCSAgICBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQp OworKwkgICAgZ290byBlcnI7CisrCSAgICB9CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAoYml0 cyA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlEU0FlcnIo RFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Cisr CQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKHFzaXplICE9IFNIQV9ESUdFU1Rf TEVOR1RIICYmIHFzaXplICE9IFNIQTIyNF9ESUdFU1RfTEVOR1RIICYmCisgCSAgICBxc2l6ZSAh PSBTSEEyNTZfRElHRVNUX0xFTkdUSCkKKyAJCS8qIGludmFsaWQgcSBzaXplICovCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9kc2EvZHNhLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9k c2EvZHNhLmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjQ5LjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RzYS9kc2EuaAkyMDA5LTExLTEyIDEyOjM2OjUwLjAw MDAwMDAwMCArMDEwMAorQEAgLTg4LDYgKzg4LDggQEAKKyAjIGRlZmluZSBPUEVOU1NMX0RTQV9N QVhfTU9EVUxVU19CSVRTCTEwMDAwCisgI2VuZGlmCisgCisrI2RlZmluZSBPUEVOU1NMX0RTQV9G SVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAorKworICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9O VF9QCTB4MDEKKyAjZGVmaW5lIERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgwMiAv KiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBEU0EKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25z dGFudCB0aW1lCitAQCAtOTcsNiArOTksMjEgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiBiZSB1c2VkIGZvciBhbGwgZXhwb25lbnRzLgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIAorKy8qIElmIHRo aXMgZmxhZyBpcyBzZXQgdGhlIERTQSBtZXRob2QgaXMgRklQUyBjb21wbGlhbnQgYW5kIGNhbiBi ZSB1c2VkCisrICogaW4gRklQUyBtb2RlLiBUaGlzIGlzIHNldCBpbiB0aGUgdmFsaWRhdGVkIG1v ZHVsZSBtZXRob2QuIElmIGFuCisrICogYXBwbGljYXRpb24gc2V0cyB0aGlzIGZsYWcgaW4gaXRz IG93biBtZXRob2RzIGl0IGlzIGl0cyByZXBvc2liaWxpdHkKKysgKiB0byBlbnN1cmUgdGhlIHJl c3VsdCBpcyBjb21wbGlhbnQuCisrICovCisrCisrI2RlZmluZSBEU0FfRkxBR19GSVBTX01FVEhP RAkJCTB4MDQwMAorKworKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIG9wZXJhdGlvbnMgbm9y bWFsbHkgZGlzYWJsZWQgaW4gRklQUyBtb2RlIGFyZQorKyAqIHBlcm1pdHRlZCBpdCBpcyB0aGVu IHRoZSBhcHBsaWNhdGlvbnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlCisrICog dXNhZ2UgaXMgY29tcGxpYW50LgorKyAqLworKworKyNkZWZpbmUgRFNBX0ZMQUdfTk9OX0ZJUFNf QUxMT1cJCQkweDA0MDAKKysKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7Cisg I2VuZGlmCitAQCAtMjcwLDggKzI4NywxMSBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZv aWQpOworICNkZWZpbmUgRFNBX0ZfRE9fRFNBX1BSSU5UCQkJCSAxMDQKKyAjZGVmaW5lIERTQV9G X0RTQVBBUkFNU19QUklOVAkJCQkgMTAwCisgI2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlRf RlAJCQkgMTAxCisrI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTI0CisrI2Rl ZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMjMKKyAjZGVmaW5lIERTQV9GX0RT QV9ET19TSUdOCQkJCSAxMTIKKyAjZGVmaW5lIERTQV9GX0RTQV9ET19WRVJJRlkJCQkJIDExMwor KyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTI1CisgI2RlZmluZSBE U0FfRl9EU0FfTkVXX01FVEhPRAkJCQkgMTAzCisgI2RlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVD T0RFCQkJCSAxMTkKKyAjZGVmaW5lIERTQV9GX0RTQV9QUklOVF9GUAkJCQkgMTA1CitAQCAtMjk2 LDkgKzMxNiwxMiBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUg RFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFCQkgMTAwCisgI2RlZmluZSBEU0FfUl9E RUNPREVfRVJST1IJCQkJIDEwNAorICNkZWZpbmUgRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRQkJ CSAxMDYKKysjZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMTAKKyAjZGVmaW5l IERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKKyAjZGVmaW5lIERTQV9SX01PRFVMVVNf VE9PX0xBUkdFCQkJCSAxMDMKKysjZGVmaW5lIERTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTEx CisgI2RlZmluZSBEU0FfUl9OT19QQVJBTUVURVJTX1NFVAkJCQkgMTA3CisrI2RlZmluZSBEU0Ff Ul9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxMTIKKyAjZGVmaW5lIERTQV9S X1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUgkJCSAxMDUKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVz CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2RzYV9rZXkuYworLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjI1LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RzYS9kc2Ffa2V5 LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02Myw5ICs2Myw1MyBA QAorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Cisg I2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5j bHVkZSAiZmlwc19sb2NsLmgiCisgCisgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNB ICpkc2EpOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgaW50IGZpcHNfZHNh X3BhaXJ3aXNlX2ZhaWwgPSAwOworKworK3ZvaWQgRklQU19jb3JydXB0X2RzYV9rZXlnZW4odm9p ZCkKKysJeworKwlmaXBzX2RzYV9wYWlyd2lzZV9mYWlsID0gMTsKKysJfQorKworK2ludCBmaXBz X2NoZWNrX2RzYShEU0EgKmRzYSkKKysJeworKwlFVlBfUEtFWSAqcGs7CisrCXVuc2lnbmVkIGNo YXIgdGJzW10gPSAiRFNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOworKwlpbnQgcmV0ID0gMDsKKysK KysgICAgCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysK KysJRVZQX1BLRVlfc2V0MV9EU0EocGssIGRzYSk7CisrCisrCWlmICghZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgMCwgTlVM TCkpCisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0gMTsKKysKKytlcnI6CisrCWlmIChyZXQgPT0g MCkKKysJCXsKKysJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJCUZJUFNlcnIoRklQU19G X0ZJUFNfQ0hFQ0tfRFNBLEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7CisrCQl9CisrCisr CWlmIChwaykKKysJCUVWUF9QS0VZX2ZyZWUocGspOworKworKwlyZXR1cm4gcmV0OworKwl9Cisr I2VuZGlmCisrCisgaW50IERTQV9nZW5lcmF0ZV9rZXkoRFNBICpkc2EpCisgCXsKKyAJaWYoZHNh LT5tZXRoLT5kc2Ffa2V5Z2VuKQorQEAgLTc5LDYgKzEyMywxNCBAQCBzdGF0aWMgaW50IGRzYV9i dWlsdGluX2tleWdlbihEU0EgKmRzYSkKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAJQklHTlVNICpw dWJfa2V5PU5VTEwsKnByaXZfa2V5PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlp ZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX0tF WUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNl bmRpZgorKworIAlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOworIAor IAlpZiAoZHNhLT5wcml2X2tleSA9PSBOVUxMKQorQEAgLTExNyw2ICsxNjksMTUgQEAgc3RhdGlj IGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCisgCisgCWRzYS0+cHJpdl9rZXk9cHJp dl9rZXk7CisgCWRzYS0+cHViX2tleT1wdWJfa2V5OworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ aWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYgKGZpcHNfZHNhX3BhaXJ3aXNlX2ZhaWwpCisr CQkJQk5fYWRkX3dvcmQoZHNhLT5wdWJfa2V5LCAxKTsKKysJCWlmKCFmaXBzX2NoZWNrX2RzYShk c2EpKQorKwkJICAgIGdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorIAlvaz0xOworIAorIGVycjoK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2RzYV9vc3NsLmMKKy0tLSBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzCTIwMDctMDMtMjggMDI6MTU6MjYu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2RzYV9v c3NsLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02NSw2ICs2NSw5 IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5o PgorICNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHN0YXRpYyBEU0FfU0lHICpkc2Ff ZG9fc2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgRFNBICpkc2EpOwor IHN0YXRpYyBpbnQgZHNhX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJOX0NUWCAqY3R4X2luLCBCSUdO VU0gKipraW52cCwgQklHTlVNICoqcnApOworQEAgLTgyLDcgKzg1LDcgQEAgTlVMTCwgLyogZHNh X21vZF9leHAsICovCisgTlVMTCwgLyogZHNhX2JuX21vZF9leHAsICovCisgZHNhX2luaXQsCisg ZHNhX2ZpbmlzaCwKKy0wLAorK0RTQV9GTEFHX0ZJUFNfTUVUSE9ELAorIE5VTEwsCisgTlVMTCwK KyBOVUxMCitAQCAtMTM3LDYgKzE0MCwyMCBAQCBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24o Y29uc3QgdW5zaWduCisgCWludCByZWFzb249RVJSX1JfQk5fTElCOworIAlEU0FfU0lHICpyZXQ9 TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVk KCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fU0lHTixGSVBTX1JfRklQ U19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIE5VTEw7CisrCSAgICB9CisrCisrCWlm IChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1NJR04sIERT QV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlyZXR1cm4gTlVMTDsKKysJCX0KKysjZW5kaWYK KysKKyAJQk5faW5pdCgmbSk7CisgCUJOX2luaXQoJnhyKTsKKyAKK0BAIC0zMTIsNiArMzI5LDIw IEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZCAKKyAJCXJldHVybiAt MTsKKyAJCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFp bGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fVkVSSUZZLEZJUFNf Ul9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gLTE7CisrCSAgICB9CisrCisr CWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJ UFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklG WSwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVybiAtMTsKKysJCX0KKysjZW5k aWYKKysKKyAJaSA9IEJOX251bV9iaXRzKGRzYS0+cSk7CisgCS8qIGZpcHMgMTg2LTMgYWxsb3dz IG9ubHkgZGlmZmVyZW50IHNpemVzIGZvciBxICovCisgCWlmIChpICE9IDE2MCAmJiBpICE9IDIy NCAmJiBpICE9IDI1NikKK0BAIC00MDMsNiArNDM0LDkgQEAgc3RhdGljIGludCBkc2FfZG9fdmVy aWZ5KGNvbnN0IHVuc2lnbmVkIAorIAorIHN0YXRpYyBpbnQgZHNhX2luaXQoRFNBICpkc2EpCisg eworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRp ZgorIAlkc2EtPmZsYWdzfD1EU0FfRkxBR19DQUNIRV9NT05UX1A7CisgCXJldHVybigxKTsKKyB9 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9lcnIvZXJyX2FsbC5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXJyL2Vycl9hbGwuYworLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2Vyci9lcnJfYWxsLmMuZmlwcwkyMDA5LTA4LTA5IDE2OjU4OjA1LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Vyci9lcnJfYWxs LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC05Niw2ICs5Niw5IEBA CisgI2luY2x1ZGUgPG9wZW5zc2wvb2NzcC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgor ICNpbmNsdWRlIDxvcGVuc3NsL3RzLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCisgI2lu Y2x1ZGUgPG9wZW5zc2wvY21zLmg+CisgI2VuZGlmCitAQCAtMTQ5LDYgKzE1Miw5IEBAIHZvaWQg RVJSX2xvYWRfY3J5cHRvX3N0cmluZ3Modm9pZCkKKyAjZW5kaWYKKyAJRVJSX2xvYWRfT0NTUF9z dHJpbmdzKCk7CisgCUVSUl9sb2FkX1VJX3N0cmluZ3MoKTsKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCUVSUl9sb2FkX0ZJUFNfc3RyaW5ncygpOworKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9O T19DTVMKKyAJRVJSX2xvYWRfQ01TX3N0cmluZ3MoKTsKKyAjZW5kaWYKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2V2cC9kaWdlc3QuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2 cC9kaWdlc3QuYy5maXBzCTIwMDgtMTEtMDQgMTM6MDY6MDkuMDAwMDAwMDAwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2RpZ2VzdC5jCTIwMDktMTEtMTIgMTI6MzY6 NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTE2LDYgKzExNiw3IEBACisgI2lmbmRlZiBPUEVOU1NM X05PX0VOR0lORQorICNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgorICNlbmRpZgorKyNpbmNs dWRlICJldnBfbG9jbC5oIgorIAorIHZvaWQgRVZQX01EX0NUWF9pbml0KEVWUF9NRF9DVFggKmN0 eCkKKyAJeworQEAgLTEzNyw5ICsxMzgsNTAgQEAgaW50IEVWUF9EaWdlc3RJbml0KEVWUF9NRF9D VFggKmN0eCwgY29ucworIAlyZXR1cm4gRVZQX0RpZ2VzdEluaXRfZXgoY3R4LCB0eXBlLCBOVUxM KTsKKyAJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysvKiBUaGUgcHVycG9zZSBvZiB0 aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKKysg KiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCisrICovCisr Cisrc3RhdGljIGludCBiYWRfaW5pdChFVlBfTURfQ1RYICpjdHgpCisrCXsgRklQU19FUlJPUl9J R05PUkVEKCJEaWdlc3QgaW5pdCIpOyByZXR1cm4gMDt9CisrCisrc3RhdGljIGludCBiYWRfdXBk YXRlKEVWUF9NRF9DVFggKmN0eCxjb25zdCB2b2lkICpkYXRhLHNpemVfdCBjb3VudCkKKysJeyBG SVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCB1cGRhdGUiKTsgcmV0dXJuIDA7fQorKworK3N0YXRp YyBpbnQgYmFkX2ZpbmFsKEVWUF9NRF9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICptZCkKKysJeyBG SVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBGaW5hbCIpOyByZXR1cm4gMDt9CisrCisrc3RhdGlj IGNvbnN0IEVWUF9NRCBiYWRfbWQgPQorKwl7CisrCTAsCisrCTAsCisrCTAsCisrCTAsCisrCWJh ZF9pbml0LAorKwliYWRfdXBkYXRlLAorKwliYWRfZmluYWwsCisrCU5VTEwsCisrCU5VTEwsCisr CU5VTEwsCisrCTAsCisrCXswLDAsMCwwfSwKKysJfTsKKysKKysjZW5kaWYKKysKKyBpbnQgRVZQ X0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjb25zdCBFVlBfTUQgKnR5cGUsIEVOR0lO RSAqaW1wbCkKKyAJeworIAlFVlBfTURfQ1RYX2NsZWFyX2ZsYWdzKGN0eCxFVlBfTURfQ1RYX0ZM QUdfQ0xFQU5FRCk7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgsRklQU19S X0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKKysJCXJl dHVybiAwOworKwkJfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAJLyog V2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCIn ZCBjb250ZXh0cworIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJ TkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKK0BAIC0xOTUsNiArMjM3LDE4IEBAIGludCBFVlBf RGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKKyAjZW5kaWYKKyAJaWYgKGN0eC0+ZGln ZXN0ICE9IHR5cGUpCisgCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYgKEZJUFNfbW9k ZSgpKQorKwkJCXsKKysJCQlpZiAoISh0eXBlLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpIAor KwkJCSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQor KwkJCQl7CisrCQkJCUVWUGVycihFVlBfRl9FVlBfRElHRVNUSU5JVF9FWCwgRVZQX1JfRElTQUJM RURfRk9SX0ZJUFMpOworKwkJCQljdHgtPmRpZ2VzdCA9ICZiYWRfbWQ7CisrCQkJCXJldHVybiAw OworKwkJCQl9CisrCQkJfQorKyNlbmRpZgorIAkJaWYgKGN0eC0+ZGlnZXN0ICYmIGN0eC0+ZGln ZXN0LT5jdHhfc2l6ZSkKKyAJCQlPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKKyAJCWN0eC0+ ZGlnZXN0PXR5cGU7CitAQCAtMjIyLDYgKzI3Niw5IEBAIHNraXBfdG9faW5pdDoKKyAKKyBpbnQg RVZQX0RpZ2VzdFVwZGF0ZShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVf dCBjb3VudCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVj aygpOworKyNlbmRpZgorIAlyZXR1cm4gY3R4LT51cGRhdGUoY3R4LGRhdGEsY291bnQpOworIAl9 CisgCitAQCAtMjM4LDYgKzI5NSw5IEBAIGludCBFVlBfRGlnZXN0RmluYWwoRVZQX01EX0NUWCAq Y3R4LCB1bnMKKyBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVWUF9NRF9DVFggKmN0eCwgdW5zaWdu ZWQgY2hhciAqbWQsIHVuc2lnbmVkIGludCAqc2l6ZSkKKyAJeworIAlpbnQgcmV0OworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAorIAlP UEVOU1NMX2Fzc2VydChjdHgtPmRpZ2VzdC0+bWRfc2l6ZSA8PSBFVlBfTUFYX01EX1NJWkUpOwor IAlyZXQ9Y3R4LT5kaWdlc3QtPmZpbmFsKGN0eCxtZCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9ldnAvZV9hZXMuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2V2cC9lX2Flcy5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfYWVzLmMu ZmlwcwkyMDA0LTAxLTI4IDIwOjA1OjMzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2V2cC9lX2Flcy5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAw ICswMTAwCitAQCAtNjksMzIgKzY5LDI5IEBAIHR5cGVkZWYgc3RydWN0CisgCisgSU1QTEVNRU5U X0JMT0NLX0NJUEhFUihhZXNfMTI4LCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKKyAJCSAgICAgICBO SURfYWVzXzEyOCwgMTYsIDE2LCAxNiwgMTI4LAorLQkJICAgICAgIDAsIGFlc19pbml0X2tleSwg TlVMTCwgCistCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAgICAgICBFVlBf Q0lQSEVSX2dldF9hc24xX2l2LAorLQkJICAgICAgIE5VTEwpCisrCQkgICAgICAgRVZQX0NJUEhf RkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJICAgICAgIGFlc19pbml0 X2tleSwKKysJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorIElNUExFTUVOVF9CTE9D S19DSVBIRVIoYWVzXzE5Miwga3MsIEFFUywgRVZQX0FFU19LRVksCisgCQkgICAgICAgTklEX2Fl c18xOTIsIDE2LCAyNCwgMTYsIDEyOCwKKy0JCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEws IAorLQkJICAgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkgICAgICAgRVZQX0NJUEhF Ul9nZXRfYXNuMV9pdiwKKy0JCSAgICAgICBOVUxMKQorKwkJICAgICAgIEVWUF9DSVBIX0ZMQUdf RklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAgICBhZXNfaW5pdF9rZXks CisrCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKKyBJTVBMRU1FTlRfQkxPQ0tfQ0lQ SEVSKGFlc18yNTYsIGtzLCBBRVMsIEVWUF9BRVNfS0VZLAorIAkJICAgICAgIE5JRF9hZXNfMjU2 LCAxNiwgMzIsIDE2LCAxMjgsCistCQkgICAgICAgMCwgYWVzX2luaXRfa2V5LCBOVUxMLCAKKy0J CSAgICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0 X2FzbjFfaXYsCistCQkgICAgICAgTlVMTCkKKy0KKy0jZGVmaW5lIElNUExFTUVOVF9BRVNfQ0ZC Uihrc2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoYWVzLEFFUyxFVlBfQUVTX0tFWSxrcyxrc2l6 ZSxjYml0cywxNikKKy0KKy1JTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDEpCistSU1QTEVNRU5UX0FF U19DRkJSKDE5MiwxKQorLUlNUExFTUVOVF9BRVNfQ0ZCUigyNTYsMSkKKy0KKy1JTVBMRU1FTlRf QUVTX0NGQlIoMTI4LDgpCistSU1QTEVNRU5UX0FFU19DRkJSKDE5Miw4KQorLUlNUExFTUVOVF9B RVNfQ0ZCUigyNTYsOCkKKysJCSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxB R19ERUZBVUxUX0FTTjEsCisrCQkgICAgICAgYWVzX2luaXRfa2V5LAorKwkJICAgICAgIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwpCisrCisrI2RlZmluZSBJTVBMRU1FTlRfQUVTX0NGQlIoa3NpemUs Y2JpdHMsZmxhZ3MpCUlNUExFTUVOVF9DRkJSKGFlcyxBRVMsRVZQX0FFU19LRVksa3Msa3NpemUs Y2JpdHMsMTYsZmxhZ3MpCisrCisrSU1QTEVNRU5UX0FFU19DRkJSKDEyOCwxLEVWUF9DSVBIX0ZM QUdfRklQUykKKytJTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDEsRVZQX0NJUEhfRkxBR19GSVBTKQor K0lNUExFTUVOVF9BRVNfQ0ZCUigyNTYsMSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrCisrSU1QTEVN RU5UX0FFU19DRkJSKDEyOCw4LEVWUF9DSVBIX0ZMQUdfRklQUykKKytJTVBMRU1FTlRfQUVTX0NG QlIoMTkyLDgsRVZQX0NJUEhfRkxBR19GSVBTKQorK0lNUExFTUVOVF9BRVNfQ0ZCUigyNTYsOCxF VlBfQ0lQSF9GTEFHX0ZJUFMpCisgCisgc3RhdGljIGludCBhZXNfaW5pdF9rZXkoRVZQX0NJUEhF Ul9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorIAkJICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqaXYsIGludCBlbmMpCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9ldnAvZV9jYW1lbGxpYS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2Vf Y2FtZWxsaWEuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9lX2NhbWVsbGlh LmMuZmlwcwkyMDA2LTA4LTMxIDIyOjU2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4w MDAwMDAwMDAgKzAxMDAKK0BAIC05Myw3ICs5Myw3IEBAIElNUExFTUVOVF9CTE9DS19DSVBIRVIo Y2FtZWxsaWFfMjU2LCBrcywKKyAJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKyAJTlVMTCkKKyAK Ky0jZGVmaW5lIElNUExFTUVOVF9DQU1FTExJQV9DRkJSKGtzaXplLGNiaXRzKQlJTVBMRU1FTlRf Q0ZCUihjYW1lbGxpYSxDYW1lbGxpYSxFVlBfQ0FNRUxMSUFfS0VZLGtzLGtzaXplLGNiaXRzLDE2 KQorKyNkZWZpbmUgSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIoa3NpemUsY2JpdHMpCUlNUExFTUVO VF9DRkJSKGNhbWVsbGlhLENhbWVsbGlhLEVWUF9DQU1FTExJQV9LRVksa3Msa3NpemUsY2JpdHMs MTYsMCkKKyAKKyBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUigxMjgsMSkKKyBJTVBMRU1FTlRfQ0FN RUxMSUFfQ0ZCUigxOTIsMSkKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2 cC9lX2RlczMuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9lX2RlczMuYwor LS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9lX2RlczMuYy5maXBzCTIwMDgtMTIt MjkgMTM6MzU6NDcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vZXZwL2VfZGVzMy5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAt MjA2LDkgKzIwNiw5IEBAIHN0YXRpYyBpbnQgZGVzX2VkZTNfY2ZiOF9jaXBoZXIoRVZQX0NJUEgK KyAgICAgfQorIAorIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUsIERFU19FREVfS0VZLCBOSURf ZGVzX2VkZSwgOCwgMTYsIDgsIDY0LAorLQkJCUVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlX2lu aXRfa2V5LCBOVUxMLCAKKy0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJCUVWUF9DSVBI RVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8 RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkJZGVzX2VkZV9pbml0X2tleSwKKysJCQlO VUxMLCBOVUxMLCBOVUxMLAorIAkJCWRlczNfY3RybCkKKyAKKyAjZGVmaW5lIGRlc19lZGUzX2Nm YjY0X2NpcGhlciBkZXNfZWRlX2NmYjY0X2NpcGhlcgorQEAgLTIxNywyMSArMjE3LDIxIEBAIEJM T0NLX0NJUEhFUl9kZWZzKGRlc19lZGUsIERFU19FREVfS0VZLCAKKyAjZGVmaW5lIGRlc19lZGUz X2VjYl9jaXBoZXIgZGVzX2VkZV9lY2JfY2lwaGVyCisgCisgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVz X2VkZTMsIERFU19FREVfS0VZLCBOSURfZGVzX2VkZTMsIDgsIDI0LCA4LCA2NCwKKy0JCQlFVlBf Q0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNfaW5pdF9rZXksIE5VTEwsIAorLQkJCUVWUF9DSVBIRVJf c2V0X2FzbjFfaXYsCistCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKysJCUVWUF9DSVBIX1JB TkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJ CQlkZXNfZWRlM19pbml0X2tleSwKKysJCQlOVUxMLCBOVUxMLCBOVUxMLAorIAkJCWRlczNfY3Ry bCkKKyAKKyBCTE9DS19DSVBIRVJfZGVmX2NmYihkZXNfZWRlMyxERVNfRURFX0tFWSxOSURfZGVz X2VkZTMsMjQsOCwxLAorLQkJICAgICBFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNfaW5pdF9r ZXksTlVMTCwKKy0JCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAgICAgRVZQX0NJ UEhFUl9nZXRfYXNuMV9pdiwKKysJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQ U3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAgZGVzX2VkZTNfaW5pdF9rZXks CisrCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwsCisgCQkgICAgIGRlczNfY3RybCkKKyAKKyBCTE9D S19DSVBIRVJfZGVmX2NmYihkZXNfZWRlMyxERVNfRURFX0tFWSxOSURfZGVzX2VkZTMsMjQsOCw4 LAorLQkJICAgICBFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNfaW5pdF9rZXksTlVMTCwKKy0J CSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAgICAgRVZQX0NJUEhFUl9nZXRfYXNu MV9pdiwKKysJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9G TEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAgZGVzX2VkZTNfaW5pdF9rZXksCisrCQkgICAgIE5V TEwsIE5VTEwsIE5VTEwsCisgCQkgICAgIGRlczNfY3RybCkKKyAKKyBzdGF0aWMgaW50IGRlc19l ZGVfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5 LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfbnVsbC5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfbnVsbC5jCistLS0gb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZXZwL2VfbnVsbC5jLmZpcHMJMjAwOC0xMC0zMSAyMDo0ODoyNC4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZV9udWxsLmMJ MjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02OSw3ICs2OSw3IEBAIHN0 YXRpYyBjb25zdCBFVlBfQ0lQSEVSIG5fY2lwaGVyPQorIAl7CisgCU5JRF91bmRlZiwKKyAJMSww LDAsCistCTAsCisrCUVWUF9DSVBIX0ZMQUdfRklQUywKKyAJbnVsbF9pbml0X2tleSwKKyAJbnVs bF9jaXBoZXIsCisgCU5VTEwsCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9l dnAvZXZwX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9lbmMu YworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcwkyMDA4 LTExLTEyIDA0OjU4OjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL2V2cC9ldnBfZW5jLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAK K0BAIC02OCw4ICs2OCw1MyBAQAorIAorIGNvbnN0IGNoYXIgRVZQX3ZlcnNpb25bXT0iRVZQIiBP UEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIFRo ZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVz ZSBub24gRklQUworKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVy cm9ycy4KKysgKi8KKysKKytzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgs IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKysJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpp diwgaW50IGVuYykKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBpbml0Iik7IHJldHVy biAwO30KKysKKytzdGF0aWMgaW50IGJhZF9kb19jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwg dW5zaWduZWQgY2hhciAqb3V0LAorKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWdu ZWQgaW50IGlubCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciB1cGRhdGUiKTsgcmV0 dXJuIDA7fQorKworKy8qIE5COiBubyBjbGVhbnVwIGJlY2F1c2UgaXQgaXMgYWxsb3dlZCBhZnRl ciBmYWlsZWQgaW5pdCAqLworKworK3N0YXRpYyBpbnQgYmFkX3NldF9hc24xKEVWUF9DSVBIRVJf Q1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVy IHNldF9hc24xIik7IHJldHVybiAwO30KKytzdGF0aWMgaW50IGJhZF9nZXRfYXNuMShFVlBfQ0lQ SEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNp cGhlciBnZXRfYXNuMSIpOyByZXR1cm4gMDt9Cisrc3RhdGljIGludCBiYWRfY3RybChFVlBfQ0lQ SEVSX0NUWCAqY3R4LCBpbnQgdHlwZSwgaW50IGFyZywgdm9pZCAqcHRyKQorKwl7IEZJUFNfRVJS T1JfSUdOT1JFRCgiQ2lwaGVyIGN0cmwiKTsgcmV0dXJuIDA7fQorKworK3N0YXRpYyBjb25zdCBF VlBfQ0lQSEVSIGJhZF9jaXBoZXIgPQorKwl7CisrCTAsCisrCTAsCisrCTAsCisrCTAsCisrCTAs CisrCWJhZF9pbml0LAorKwliYWRfZG9fY2lwaGVyLAorKwlOVUxMLAorKwkwLAorKwliYWRfc2V0 X2FzbjEsCisrCWJhZF9nZXRfYXNuMSwKKysJYmFkX2N0cmwsCisrCU5VTEwKKysJfTsKKysKKysj ZW5kaWYKKysKKyB2b2lkIEVWUF9DSVBIRVJfQ1RYX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCkK KyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNl bmRpZgorIAltZW1zZXQoY3R4LDAsc2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7CisgCS8qIGN0eC0+ Y2lwaGVyPU5VTEw7ICovCisgCX0KK0BAIC0xMDEsNiArMTQ2LDE0IEBAIGludCBFVlBfQ2lwaGVy SW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAJCQllbmMgPSAxOworIAkJY3R4LT5lbmNyeXB0 ID0gZW5jOworIAkJfQorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9m YWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0VWUF9DSVBIRVJJTklUX0VYLEZJUFNf Ul9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQljdHgtPmNpcGhlciA9ICZiYWRfY2lwaGVyOwor KwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQor IAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZp bmFsIidkIGNvbnRleHRzCisgCSAqIHNvIHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFu IEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZworQEAgLTIxOSw2ICsyNzIsMjIgQEAgc2tp cF90b19pbml0OgorIAkJfQorIAl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkvKiBBZnRl ciAna2V5JyBpcyBzZXQgbm8gZnVydGhlciBwYXJhbWV0ZXJzIGNoYW5nZXMgYXJlIHBlcm1pc3Np YmxlLgorKwkgKiBTbyBvbmx5IGNoZWNrIGZvciBub24gRklQUyBlbmFibGluZyBhdCB0aGlzIHBv aW50LgorKwkgKi8KKysJaWYgKGtleSAmJiBGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmICghKGN0 eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfRklQUykKKysJCQkmICEoY3R4LT5mbGFn cyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwkJCXsKKysJCQlFVlBlcnIoRVZQ X0ZfRVZQX0NJUEhFUklOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKysJCQljdHgt PmNpcGhlciA9ICZiYWRfY2lwaGVyOworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0KKysjZW5k aWYKKysKKyAJaWYoa2V5IHx8IChjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9BTFdBWVNf Q0FMTF9JTklUKSkgeworIAkJaWYoIWN0eC0+Y2lwaGVyLT5pbml0KGN0eCxrZXksaXYsZW5jKSkg cmV0dXJuIDA7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9l dnBfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2Vyci5jCist LS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9lcnIuYy5maXBzCTIwMDgtMTIt MjkgMTc6MTE6NTQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vZXZwL2V2cF9lcnIuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAg LTE1NCw2ICsxNTQsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIEVWUF9zdHJfcmVhc29uc1td Cisge0VSUl9SRUFTT04oRVZQX1JfREVDT0RFX0VSUk9SKSAgICAgICAgICAsImRlY29kZSBlcnJv ciJ9LAorIHtFUlJfUkVBU09OKEVWUF9SX0RJRkZFUkVOVF9LRVlfVFlQRVMpICAgLCJkaWZmZXJl bnQga2V5IHR5cGVzIn0sCisge0VSUl9SRUFTT04oRVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMp ICAsImRpZmZlcmVudCBwYXJhbWV0ZXJzIn0sCisre0VSUl9SRUFTT04oRVZQX1JfRElTQUJMRURf Rk9SX0ZJUFMpICAgICAsImRpc2FibGVkIGZvciBmaXBzIn0sCisge0VSUl9SRUFTT04oRVZQX1Jf RU5DT0RFX0VSUk9SKSAgICAgICAgICAsImVuY29kZSBlcnJvciJ9LAorIHtFUlJfUkVBU09OKEVW UF9SX0VWUF9QQkVfQ0lQSEVSSU5JVF9FUlJPUiksImV2cCBwYmUgY2lwaGVyaW5pdCBlcnJvciJ9 LAorIHtFUlJfUkVBU09OKEVWUF9SX0VYUEVDVElOR19BTl9SU0FfS0VZKSAgLCJleHBlY3Rpbmcg YW4gcnNhIGtleSJ9LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2 cC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cC5oCistLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cC5oLmZpcHMJMjAwOS0xMS0xMiAxMjozNjo0OS4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwLmgJ MjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC03NSw2ICs3NSwxMCBAQAor ICNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorICNlbmRpZgorIAorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgLyoKKyAjZGVmaW5l IEVWUF9SQzJfS0VZX1NJWkUJCTE2CisgI2RlZmluZSBFVlBfUkM0X0tFWV9TSVpFCQkxNgorQEAg LTE5Nyw2ICsyMDEsOCBAQCB0eXBlZGVmIGludCBldnBfdmVyaWZ5X21ldGhvZChpbnQgdHlwZSxj CisgCisgI2RlZmluZSBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUJMHgwMDA0Cisg CisrI2RlZmluZSBFVlBfTURfRkxBR19GSVBTCTB4MDQwMCAvKiBOb3RlIGlmIHN1aXRhYmxlIGZv ciB1c2UgaW4gRklQUyBtb2RlICovCisrCisgLyogRGlnZXN0QWxnb3JpdGhtSWRlbnRpZmllciBm bGFncy4uLiAqLworIAorICNkZWZpbmUgRVZQX01EX0ZMQUdfRElHQUxHSURfTUFTSwkJMHgwMDE4 CitAQCAtMjY5LDEwICsyNzUsNiBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAorIAkJCQkJCSogY2xl YW5lZCAqLworICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1JFVVNFCQkweDAwMDQgLyogRG9uJ3Qg ZnJlZSB1cCBjdHgtPm1kX2RhdGEKKyAJCQkJCQkqIGluIEVWUF9NRF9DVFhfY2xlYW51cCAqLwor LS8qIEZJUFMgYW5kIHBhZCBvcHRpb25zIGFyZSBpZ25vcmVkIGluIDEuMC4wLCBkZWZpbml0aW9u cyBhcmUgaGVyZQorLSAqIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSByZXVzZSB0aGUgdmFsdWVz IGZvciBvdGhlciBwdXJwb3Nlcy4KKy0gKi8KKy0KKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19O T05fRklQU19BTExPVwkweDAwMDgJLyogQWxsb3cgdXNlIG9mIG5vbiBGSVBTIGRpZ2VzdAorIAkJ CQkJCSAqIGluIEZJUFMgbW9kZSAqLworIAorQEAgLTI4NCw2ICsyODYsMTAgQEAgc3RydWN0IGVu dl9tZF9jdHhfc3QKKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEJMHgwMAkvKiBQ S0NTIzEgdjEuNSBtb2RlICovCisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEJMHgx MAkvKiBYOS4zMSBtb2RlICovCisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUwkJMHgy MAkvKiBQU1MgbW9kZSAqLworKyNkZWZpbmUgTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4 KSBcCisrCQkoKGN0eC0+ZmxhZ3M+PjE2KSAmMHhGRkZGKSAvKiBzZWVkIGxlbmd0aCAqLworKyNk ZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTgkweEZGRkYJLyogc2FsdCBsZW4gc2FtZSBh cyBkaWdlc3QgKi8KKysjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQwkweEZGRkUJLyog c2FsdCBtYXggb3IgYXV0byByZWNvdmVyZWQgKi8KKyAKKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxB R19OT19JTklUCQkweDAxMDAgLyogRG9uJ3QgaW5pdGlhbGl6ZSBtZF9kYXRhICovCisgCitAQCAt MzMwLDYgKzMzNiwxNCBAQCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdAorICNkZWZpbmUgCUVWUF9DSVBI X05PX1BBRERJTkcJCTB4MTAwCisgLyogY2lwaGVyIGhhbmRsZXMgcmFuZG9tIGtleSBnZW5lcmF0 aW9uICovCisgI2RlZmluZSAJRVZQX0NJUEhfUkFORF9LRVkJCTB4MjAwCisrLyogTm90ZSBpZiBz dWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLworKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdf RklQUwkJMHg0MDAKKysvKiBBbGxvdyBub24gRklQUyBjaXBoZXIgaW4gRklQUyBtb2RlICovCisr I2RlZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgwMAorKy8qIEFsbG93IHVz ZSBkZWZhdWx0IEFTTjEgZ2V0L3NldCBpdiAqLworKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfREVG QVVMVF9BU04xCTB4MTAwMAorKy8qIEJ1ZmZlciBsZW5ndGggaW4gYml0cyBub3QgYnl0ZXM6IENG QjEgbW9kZSBvbmx5ICovCisrI2RlZmluZQkJRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUwkweDIw MDAKKyAKKyAvKiBjdHJsKCkgdmFsdWVzICovCisgCitAQCAtNTA3LDYgKzUyMSwxMCBAQCBpbnQJ RVZQX0J5dGVzVG9LZXkoY29uc3QgRVZQX0NJUEhFUiAqdHlwCisgCQljb25zdCB1bnNpZ25lZCBj aGFyICpzYWx0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorIAkJaW50IGRhdGFsLCBpbnQg Y291bnQsIHVuc2lnbmVkIGNoYXIgKmtleSx1bnNpZ25lZCBjaGFyICppdik7CisgCisrdm9pZAlF VlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IGZsYWdzKTsK Kyt2b2lkCUVWUF9DSVBIRVJfQ1RYX2NsZWFyX2ZsYWdzKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGlu dCBmbGFncyk7CisraW50IAlFVlBfQ0lQSEVSX0NUWF90ZXN0X2ZsYWdzKGNvbnN0IEVWUF9DSVBI RVJfQ1RYICpjdHgsaW50IGZsYWdzKTsKKysKKyBpbnQJRVZQX0VuY3J5cHRJbml0KEVWUF9DSVBI RVJfQ1RYICpjdHgsY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAorIAkJY29uc3QgdW5zaWduZWQg Y2hhciAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICppdik7CisgaW50CUVWUF9FbmNyeXB0SW5p dF9leChFVlBfQ0lQSEVSX0NUWCAqY3R4LGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRU5HSU5F ICppbXBsLAorQEAgLTEyMjUsNiArMTI0Myw3IEBAIHZvaWQgRVJSX2xvYWRfRVZQX3N0cmluZ3Mo dm9pZCk7CisgI2RlZmluZSBFVlBfUl9ERUNPREVfRVJST1IJCQkJIDExNAorICNkZWZpbmUgRVZQ X1JfRElGRkVSRU5UX0tFWV9UWVBFUwkJCSAxMDEKKyAjZGVmaW5lIEVWUF9SX0RJRkZFUkVOVF9Q QVJBTUVURVJTCQkJIDE1MworKyNkZWZpbmUgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMJCQkJIDE2 MAorICNkZWZpbmUgRVZQX1JfRU5DT0RFX0VSUk9SCQkJCSAxMTUKKyAjZGVmaW5lIEVWUF9SX0VW UF9QQkVfQ0lQSEVSSU5JVF9FUlJPUgkJCSAxMTkKKyAjZGVmaW5lIEVWUF9SX0VYUEVDVElOR19B Tl9SU0FfS0VZCQkJIDEyNworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZw L2V2cF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfbGliLmMK Ky0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMJMjAwOS0w NC0xMCAxMjozMDoyNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9ldnAvZXZwX2xpYi5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitA QCAtNjcsNiArNjcsOCBAQCBpbnQgRVZQX0NJUEhFUl9wYXJhbV90b19hc24xKEVWUF9DSVBIRVJf CisgCisgCWlmIChjLT5jaXBoZXItPnNldF9hc24xX3BhcmFtZXRlcnMgIT0gTlVMTCkKKyAJCXJl dD1jLT5jaXBoZXItPnNldF9hc24xX3BhcmFtZXRlcnMoYyx0eXBlKTsKKysJZWxzZSBpZiAoYy0+ Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xKQorKwkJcmV0PUVWUF9D SVBIRVJfc2V0X2FzbjFfaXYoYywgdHlwZSk7CisgCWVsc2UKKyAJCXJldD0tMTsKKyAJcmV0dXJu KHJldCk7CitAQCAtNzgsNiArODAsOCBAQCBpbnQgRVZQX0NJUEhFUl9hc24xX3RvX3BhcmFtKEVW UF9DSVBIRVJfCisgCisgCWlmIChjLT5jaXBoZXItPmdldF9hc24xX3BhcmFtZXRlcnMgIT0gTlVM TCkKKyAJCXJldD1jLT5jaXBoZXItPmdldF9hc24xX3BhcmFtZXRlcnMoYyx0eXBlKTsKKysJZWxz ZSBpZiAoYy0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xKQorKwkJ cmV0PUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYoYywgdHlwZSk7CisgCWVsc2UKKyAJCXJldD0tMTsK KyAJcmV0dXJuKHJldCk7CitAQCAtMTgwLDYgKzE4NCw5IEBAIGludCBFVlBfQ0lQSEVSX0NUWF9i bG9ja19zaXplKGNvbnN0IEVWUF8KKyAKKyBpbnQgRVZQX0NpcGhlcihFVlBfQ0lQSEVSX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25l ZCBpbnQgaW5sKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2No ZWNrKCk7CisrI2VuZGlmCisgCXJldHVybiBjdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCxvdXQs aW4saW5sKTsKKyAJfQorIAorQEAgLTI4OSwzICsyOTYsMTggQEAgaW50IEVWUF9NRF9DVFhfdGVz dF9mbGFncyhjb25zdCBFVlBfTURfQworIAl7CisgCXJldHVybiAoY3R4LT5mbGFncyAmIGZsYWdz KTsKKyAJfQorKworK3ZvaWQgRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKEVWUF9DSVBIRVJfQ1RY ICpjdHgsIGludCBmbGFncykKKysJeworKwljdHgtPmZsYWdzIHw9IGZsYWdzOworKwl9CisrCisr dm9pZCBFVlBfQ0lQSEVSX0NUWF9jbGVhcl9mbGFncyhFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQg ZmxhZ3MpCisrCXsKKysJY3R4LT5mbGFncyAmPSB+ZmxhZ3M7CisrCX0KKysKKytpbnQgRVZQX0NJ UEhFUl9DVFhfdGVzdF9mbGFncyhjb25zdCBFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgZmxhZ3Mp CisrCXsKKysJcmV0dXJuIChjdHgtPmZsYWdzICYgZmxhZ3MpOworKwl9CitkaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vZXZwL2V2cF9sb2NsLmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjQ5LjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCTIwMDktMTEt MTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTExLDExICsxMTEsMTEgQEAgc3RhdGlj IGludCBjbmFtZSMjX2NiY19jaXBoZXIoRVZQX0NJUEhFUgorIHN0YXRpYyBpbnQgY25hbWUjI19j ZmIjI2NiaXRzIyNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91 dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpIFwKKyB7XAorIAlzaXplX3Qg Y2h1bms9RVZQX01BWENIVU5LO1wKKy0JaWYgKGNiaXRzPT0xKSAgY2h1bms+Pj0zO1wKKysJaWYg KGNiaXRzPT0xICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpKSAg Y2h1bms+Pj0zO1wKKyAJaWYgKGlubDxjaHVuaykgY2h1bms9aW5sO1wKKyAJd2hpbGUoaW5sICYm IGlubD49Y2h1bmspXAorIAkgICAge1wKKy0JICAgIGNwcmVmaXgjI19jZmIjI2NiaXRzIyNfZW5j cnlwdChpbiwgb3V0LCAobG9uZykoY2JpdHM9PTE/Y2h1bmsqODpjaHVuayksICYoKGtzdHJ1Y3Qg KiljdHgtPmNpcGhlcl9kYXRhKS0+a3NjaGVkLCBjdHgtPml2LCAmY3R4LT5udW0sIGN0eC0+ZW5j cnlwdCk7XAorKwkgICAgY3ByZWZpeCMjX2NmYiMjY2JpdHMjI19lbmNyeXB0KGluLCBvdXQsIChs b25nKShjYml0cz09MSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRT KT9jaHVuayo4OmNodW5rKSwgJigoa3N0cnVjdCAqKWN0eC0+Y2lwaGVyX2RhdGEpLT5rc2NoZWQs IGN0eC0+aXYsICZjdHgtPm51bSwgY3R4LT5lbmNyeXB0KTtcCisgCSAgICBpbmwtPWNodW5rO1wK KyAJICAgIGluICs9Y2h1bms7XAorIAkgICAgb3V0Kz1jaHVuaztcCitAQCAtMjU0LDE0ICsyNTQs MjkgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQXyMjY25hbWUjI19lY2Iodm9pZAorIAorICNkZWZp bmUgRVZQX0NfREFUQShrc3RydWN0LCBjdHgpCSgoa3N0cnVjdCAqKShjdHgpLT5jaXBoZXJfZGF0 YSkKKyAKKy0jZGVmaW5lIElNUExFTUVOVF9DRkJSKGNpcGhlcixjcHJlZml4LGtzdHJ1Y3Qsa3Nj aGVkLGtleXNpemUsY2JpdHMsaXZfbGVuKSBcCisrI2RlZmluZSBJTVBMRU1FTlRfQ0ZCUihjaXBo ZXIsY3ByZWZpeCxrc3RydWN0LGtzY2hlZCxrZXlzaXplLGNiaXRzLGl2X2xlbixmbCkgXAorIAlC TE9DS19DSVBIRVJfZnVuY19jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGNwcmVmaXgsY2JpdHMsa3N0 cnVjdCxrc2NoZWQpIFwKKyAJQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNfIyNrZXlzaXpl LGtzdHJ1Y3QsIFwKKyAJCQkgICAgIE5JRF8jI2NpcGhlciMjXyMja2V5c2l6ZSwga2V5c2l6ZS84 LCBpdl9sZW4sIGNiaXRzLCBcCistCQkJICAgICAwLCBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwg XAorLQkJCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAorLQkJCSAgICAgRVZQX0NJUEhF Ul9nZXRfYXNuMV9pdiwgXAorLQkJCSAgICAgTlVMTCkKKysJCQkgICAgIChmbCl8RVZQX0NJUEhf RkxBR19ERUZBVUxUX0FTTjEsIFwKKysJCQkgICAgIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKQorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjZGVmaW5lIFJDMl9z ZXRfa2V5CXByaXZhdGVfUkMyX3NldF9rZXkKKysjZGVmaW5lIFJDNF9zZXRfa2V5CXByaXZhdGVf UkM0X3NldF9rZXkKKysjZGVmaW5lIENBU1Rfc2V0X2tleQlwcml2YXRlX0NBU1Rfc2V0X2tleQor KyNkZWZpbmUgUkM1XzMyX3NldF9rZXkJcHJpdmF0ZV9SQzVfMzJfc2V0X2tleQorKyNkZWZpbmUg QkZfc2V0X2tleQlwcml2YXRlX0JGX3NldF9rZXkKKysjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkg cHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5CisrI2RlZmluZSBpZGVhX3NldF9lbmNyeXB0X2tleSBw cml2YXRlX2lkZWFfc2V0X2VuY3J5cHRfa2V5CisrCisrI2RlZmluZSBNRDVfSW5pdAlwcml2YXRl X01ENV9Jbml0CisrI2RlZmluZSBNRDRfSW5pdAlwcml2YXRlX01ENF9Jbml0CisrI2RlZmluZSBN RDJfSW5pdAlwcml2YXRlX01EMl9Jbml0CisrI2RlZmluZSBNREMyX0luaXQJcHJpdmF0ZV9NREMy X0luaXQKKysjZGVmaW5lIFNIQV9Jbml0CXByaXZhdGVfU0hBX0luaXQKKysKKysjZW5kaWYKKyAK KyBzdHJ1Y3QgZXZwX3BrZXlfY3R4X3N0CisgCXsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZw L21fZHNzLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvbV9kc3MuYy5maXBz CTIwMDYtMDQtMTkgMTk6MDU6NTcuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vZXZwL21fZHNzLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAx MDAKK0BAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNhX21kPQorIAlOSURf ZHNhV2l0aFNIQSwKKyAJTklEX2RzYVdpdGhTSEEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlF VlBfTURfRkxBR19QS0VZX0RJR0VTVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01E X0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2V2cC9tX2RzczEuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2 cC9tX2RzczEuYy5maXBzCTIwMDYtMDQtMTkgMTk6MDU6NTcuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL21fZHNzMS5jCTIwMDktMTEtMTIgMTI6MzY6 NTAuMDAwMDAwMDAwICswMTAwCitAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01E IGRzczFfbWQ9CisgCU5JRF9kc2EsCisgCU5JRF9kc2FXaXRoU0hBMSwKKyAJU0hBX0RJR0VTVF9M RU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAorKwlFVlBfTURfRkxBR19QS0VZX0RJ R0VTVHxFVlBfTURfRkxBR19GSVBTLAorIAlpbml0LAorIAl1cGRhdGUsCisgCWZpbmFsLAorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL21fc2hhMS5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAwOC0wMy0xMiAyMjoxNDoyNC4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvbV9zaGExLmMJMjAwOS0x MS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC04Miw3ICs4Miw4IEBAIHN0YXRpYyBj b25zdCBFVlBfTUQgc2hhMV9tZD0KKyAJTklEX3NoYTEsCisgCU5JRF9zaGExV2l0aFJTQUVuY3J5 cHRpb24sCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9T SUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZ X01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01E X0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK0BAIC0xMTksNyArMTIw LDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyMjRfbWQ9CisgCU5JRF9zaGEyMjQsCisgCU5J RF9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBMjI0X0RJR0VTVF9MRU5HVEgsCistCUVW UF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNF TlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdB TEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0MjI0LAorIAl1cGRhdGUy NTYsCisgCWZpbmFsMjU2LAorQEAgLTEzOCw3ICsxNDAsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01E IHNoYTI1Nl9tZD0KKyAJTklEX3NoYTI1NiwKKyAJTklEX3NoYTI1NldpdGhSU0FFbmNyeXB0aW9u LAorIAlTSEEyNTZfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lH TkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9N RVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9G TEFHX0ZJUFMsCisgCWluaXQyNTYsCisgCXVwZGF0ZTI1NiwKKyAJZmluYWwyNTYsCitAQCAtMTY5 LDcgKzE3Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMzg0X21kPQorIAlOSURfc2hhMzg0 LAorIAlOSURfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQTM4NF9ESUdFU1RfTEVOR1RI LAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxH SURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZM QUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdDM4NCwKKyAJ dXBkYXRlNTEyLAorIAlmaW5hbDUxMiwKK0BAIC0xODgsNyArMTkyLDggQEAgc3RhdGljIGNvbnN0 IEVWUF9NRCBzaGE1MTJfbWQ9CisgCU5JRF9zaGE1MTIsCisgCU5JRF9zaGE1MTJXaXRoUlNBRW5j cnlwdGlvbiwKKyAJU0hBNTEyX0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVU SE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFH X1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlF VlBfTURfRkxBR19GSVBTLAorIAlpbml0NTEyLAorIAl1cGRhdGU1MTIsCisgCWZpbmFsNTEyLAor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL25hbWVzLmMuZmlwcyBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvbmFtZXMuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2V2cC9uYW1lcy5jLmZpcHMJMjAwOS0wNC0xMCAxMjozMDoyNy4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvbmFtZXMuYwkyMDA5LTEx LTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTY2LDYgKzY2LDEwIEBAIGludCBFVlBf YWRkX2NpcGhlcihjb25zdCBFVlBfQ0lQSEVSICpjKQorIAl7CisgCWludCByOworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysjZW5kaWYKKysKKyAJ cj1PQkpfTkFNRV9hZGQoT0JKX25pZDJzbihjLT5uaWQpLE9CSl9OQU1FX1RZUEVfQ0lQSEVSX01F VEgsKGNvbnN0IGNoYXIgKiljKTsKKyAJaWYgKHIgPT0gMCkgcmV0dXJuKDApOworIAljaGVja19k ZWZlcihjLT5uaWQpOworQEAgLTc5LDYgKzgzLDEwIEBAIGludCBFVlBfYWRkX2RpZ2VzdChjb25z dCBFVlBfTUQgKm1kKQorIAlpbnQgcjsKKyAJY29uc3QgY2hhciAqbmFtZTsKKyAKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrI2VuZGlmCisrCisgCW5h bWU9T0JKX25pZDJzbihtZC0+dHlwZSk7CisgCXI9T0JKX05BTUVfYWRkKG5hbWUsT0JKX05BTUVf VFlQRV9NRF9NRVRILChjb25zdCBjaGFyICopbWQpOworIAlpZiAociA9PSAwKSByZXR1cm4oMCk7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvcF9zaWduLmMKKy0tLSBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcwkyMDA2LTA1LTI0IDE1OjI5OjMwLjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9wX3NpZ24uYwky MDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTYxLDYgKzYxLDcgQEAKKyAj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Cisg I2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorIAor ICNpZmRlZiB1bmRlZgorIHZvaWQgRVZQX1NpZ25Jbml0KEVWUF9NRF9DVFggKmN0eCwgRVZQX01E ICp0eXBlKQorQEAgLTEwMSw2ICsxMDIsMjIgQEAgaW50IEVWUF9TaWduRmluYWwoRVZQX01EX0NU WCAqY3R4LCB1bnNpZworIAkJCWdvdG8gZXJyOworIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2ln bmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKKyAJCQlnb3RvIGVycjsKKysJCWlm IChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQorKwkJCWlmIChFVlBfUEtF WV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQorKwkJ CQlnb3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1Mp CisrCQkJeworKwkJCWludCBzYWx0bGVuOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9w YWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJy OworKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOworKwkJCWlm IChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCisrCQkJCXNhbHRsZW4gPSAt MTsKKysJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKKysJ CQkJc2FsdGxlbiA9IC0yOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxl bihwa2N0eCwgc2FsdGxlbikgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJfQorIAkJaWYgKEVW UF9QS0VZX3NpZ24ocGtjdHgsIHNpZ3JldCwgJnNsdG1wLCBtLCBtX2xlbikgPD0gMCkKKyAJCQln b3RvIGVycjsKKyAJCSpzaWdsZW4gPSBzbHRtcDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v ZXZwL3BfdmVyaWZ5LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvcF92ZXJp ZnkuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDEuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4w MDAwMDAwMDAgKzAxMDAKK0BAIC02MSw2ICs2MSw3IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZXZw Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3g1 MDkuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAKKyBpbnQgRVZQX1ZlcmlmeUZpbmFs KEVWUF9NRF9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnYnVmLAorIAkgICAgIHVu c2lnbmVkIGludCBzaWdsZW4sIEVWUF9QS0VZICpwa2V5KQorQEAgLTg2LDYgKzg3LDIyIEBAIGlu dCBFVlBfVmVyaWZ5RmluYWwoRVZQX01EX0NUWCAqY3R4LCBjb24KKyAJCQlnb3RvIGVycjsKKyAJ CWlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9 IDApCisgCQkJZ290byBlcnI7CisrCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19Q QURfWDkzMSkKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNB X1g5MzFfUEFERElORykgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQlpZiAoY3R4LT5mbGFncyAm IEVWUF9NRF9DVFhfRkxBR19QQURfUFNTKQorKwkJCXsKKysJCQlpbnQgc2FsdGxlbjsKKysJCQlp ZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURE SU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZM QUdfUFNTX1NBTFQoY3R4KTsKKysJCQlpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNT X01ETEVOKQorKwkJCQlzYWx0bGVuID0gLTE7CisrCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBf TURfQ1RYX0ZMQUdfUFNTX01SRUMpCisrCQkJCXNhbHRsZW4gPSAtMjsKKysJCQlpZiAoRVZQX1BL RVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCisrCQkJCWdv dG8gZXJyOworKwkJCX0KKyAJCWkgPSBFVlBfUEtFWV92ZXJpZnkocGtjdHgsIHNpZ2J1Ziwgc2ln bGVuLCBtLCBtX2xlbik7CisgCQllcnI6CisgCQlFVlBfUEtFWV9DVFhfZnJlZShwa2N0eCk7Citk aWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfYWVzYXZzLmMKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNh dnMuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw5Mzkg QEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisr ICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0 cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Cisr ICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgor KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS CisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgTklTVCBBRVMgQWxnb3JpdGhtIFZhbGlkYXRpb24g U3VpdGUKKysgIFRlc3QgUHJvZ3JhbQorKworKyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5OgorKyAg Vi1PTkUgQ29ycG9yYXRpb24KKysgIDIwMjUwIENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAwCisrICBH ZXJtYW50b3duLCBNRCAyMDg3NAorKyAgVS5TLkEuCisrICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5j bHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxlcnJuby5o PgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlICJlX29z LmgiCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIEFFUyBzdXBwb3J0XG4iKTsKKysg ICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKysjZGVmaW5lIEFFU19CTE9DS19TSVpFIDE2 CisrCisrI2RlZmluZSBWRVJCT1NFIDAKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKytpbnQgQUVTVGVzdChFVlBfQ0lQSEVSX0NUWCAq Y3R4LAorKwkgICAgY2hhciAqYW1vZGUsIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXks IAorKwkgICAgdW5zaWduZWQgY2hhciAqaVZlYywgCisrCSAgICBpbnQgZGlyLCAgLyogMCA9IGRl Y3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCSAgICB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsIHVu c2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsIGludCBsZW4pCisrICAgIHsKKysgICAgY29uc3QgRVZQ X0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKKysKKysgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJD QkMiKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6Cisr CQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jYmMoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6 CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jYmMoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAy NTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jYmMoKTsKKysJCWJyZWFrOworKwkJfQorKwor Kwl9CisrICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwl7Cisr CXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVz XzEyOF9lY2IoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBf YWVzXzE5Ml9lY2IoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBF VlBfYWVzXzI1Nl9lY2IoKTsKKysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UgaWYgKHN0 cmNhc2VjbXAoYW1vZGUsICJDRkIxMjgiKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQor KwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKKysJ CWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmIxMjgo KTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9j ZmIxMjgoKTsKKysJCWJyZWFrOworKwkJfQorKworKwl9CisrICAgIGVsc2UgaWYgKHN0cm5jYXNl Y21wKGFtb2RlLCAiT0ZCIiwgMykgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsK KysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfb2ZiKCk7CisrCQlicmVhazsK KysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfb2ZiKCk7CisrCQlicmVh azsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfb2ZiKCk7CisrCQli cmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikp CisrCXsKKysJc3dpdGNoIChha2V5c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9 IEVWUF9hZXNfMTI4X2NmYjEoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBo ZXIgPSBFVlBfYWVzXzE5Ml9jZmIxKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJ Y2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiMSgpOworKwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAg ZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQorKwl7CisrCXN3aXRjaCAoYWtleXN6 KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmI4KCk7Cisr CQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiOCgp OworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2Nm YjgoKTsKKysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UKKysJeworKwlwcmludGYoIlVu a25vd24gbW9kZTogJXNcbiIsIGFtb2RlKTsKKysJcmV0dXJuIDA7CisrCX0KKysgICAgaWYgKCFj aXBoZXIpCisrCXsKKysJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsK KysJcmV0dXJuIDA7IAorKwl9CisrICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhl ciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQorKwlyZXR1cm4gMDsKKysgICAgaWYoIXN0 cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKKysJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4 LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKKysgICAgaWYgKGRpcikKKysJCUVWUF9DaXBo ZXIoY3R4LCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7CisrCWVsc2UKKysJCUVWUF9DaXBo ZXIoY3R4LCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrICAgIHJldHVybiAxOworKyAg ICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCisrY2hhciAqdF90YWdbMl0gPSB7IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07CisrY2hh ciAqdF9tb2RlWzZdID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjEyOCJ9 OworK2VudW0gTW9kZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCMTI4fTsKKytlbnVt IFhDcnlwdCB7WERFQ1JZUFQsIFhFTkNSWVBUfTsKKysKKysvKj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ki8KKysvKiAgTW9udGUgQ2FybG8gVGVzdHMgICAgICAgICAgKi8KKysvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysvKiNkZWZpbmUgZ2IoYSxiKSAoKChhKVso YikvOF0gPj4gKChiKSU4KSkmMSkqLworKy8qI2RlZmluZSBzYihhLGIsdikgKChhKVsoYikvOF09 KChhKVsoYikvOF0mfigxIDw8ICgoYiklOCkpKXwoISEodikgPDwgKChiKSU4KSkpKi8KKysKKysj ZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIpLzhdID4+ICg3LShiKSU4KSkmMSkKKysjZGVmaW5lIHNi KGEsYix2KSAoKGEpWyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKDctKGIpJTgpKSl8KCEhKHYp IDw8ICg3LShiKSU4KSkpCisrCisraW50IGRvX21jdChjaGFyICphbW9kZSwgCisrCSAgIGludCBh a2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksdW5zaWduZWQgY2hhciAqaVZlYywKKysJICAgaW50 IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKKysJICAgRklMRSAqcmZwKQorKyAg ICB7CisrICAgIGludCByZXQgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxMDFdWzMyXTsK KysgICAgdW5zaWduZWQgY2hhciBpdlsxMDFdW0FFU19CTE9DS19TSVpFXTsKKysgICAgdW5zaWdu ZWQgY2hhciBwdGV4dFsxMDAxXVszMl07CisrICAgIHVuc2lnbmVkIGNoYXIgY3RleHRbMTAwMV1b MzJdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbNjQrNF07CisrICAgIGludCBpLCBq LCBuLCBuMSwgbjI7CisrICAgIGludCBpbW9kZSA9IDAsIG5rZXlzeiA9IGFrZXlzei84OworKyAg ICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Cisr CisrICAgIGlmIChsZW4gPiAzMikKKysJeworKwlwcmludGYoIlxuPj4+PiBMZW5ndGggZXhjZWVk cyAzMiBmb3IgJXMgJWQgPDw8PFxuXG4iLCAKKysJICAgICAgIGFtb2RlLCBha2V5c3opOworKwly ZXR1cm4gLTE7CisrCX0KKysgICAgZm9yIChpbW9kZSA9IDA7IGltb2RlIDwgNjsgKytpbW9kZSkK KysJaWYgKHN0cmNtcChhbW9kZSwgdF9tb2RlW2ltb2RlXSkgPT0gMCkKKysJICAgIGJyZWFrOwor KyAgICBpZiAoaW1vZGUgPT0gNikKKysJeyAKKysJcHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTog JXNcbiIsIGFtb2RlKTsKKysJcmV0dXJuIC0xOworKwl9CisrCisrICAgIG1lbWNweShrZXlbMF0s IGFLZXksIG5rZXlzeik7CisrICAgIGlmIChpVmVjKQorKwltZW1jcHkoaXZbMF0sIGlWZWMsIEFF U19CTE9DS19TSVpFKTsKKysgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJbWVtY3B5KHB0ZXh0 WzBdLCB0ZXh0LCBsZW4pOworKyAgICBlbHNlCisrCW1lbWNweShjdGV4dFswXSwgdGV4dCwgbGVu KTsKKysgICAgZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKQorKwl7CisrCS8qIHByaW50ZigiSXRl cmF0aW9uICVkXG4iLCBpKTsgKi8KKysJaWYgKGkgPiAwKQorKwkgICAgeworKwkgICAgZnByaW50 ZihyZnAsIkNPVU5UID0gJWRcbiIsaSk7CisrCSAgICBPdXRwdXRWYWx1ZSgiS0VZIixrZXlbaV0s bmtleXN6LHJmcCwwKTsKKysJICAgIGlmIChpbW9kZSAhPSBFQ0IpICAvKiBFQ0IgKi8KKysJCU91 dHB1dFZhbHVlKCJJViIsaXZbaV0sQUVTX0JMT0NLX1NJWkUscmZwLDApOworKwkgICAgLyogT3V0 cHV0IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8KKysJICAgIE91dHB1dFZhbHVlKHRfdGFnW2Rp cl4xXSxkaXIgPyBwdGV4dFswXSA6IGN0ZXh0WzBdLGxlbixyZnAsCisrCQkJaW1vZGUgPT0gQ0ZC MSk7CisrCSAgICB9CisrCWZvciAoaiA9IDA7IGogPCAxMDAwOyArK2opCisrCSAgICB7CisrCSAg ICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAgY2FzZSBFQ0I6CisrCQlpZiAoaiA9PSAwKQor KwkJICAgIHsgLyogc2V0IHVwIGVuY3J5cHRpb24gKi8KKysJCSAgICByZXQgPSBBRVNUZXN0KCZj dHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgTlVMTCwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRl Y3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwor KwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0 W2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0s IGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhF TkNSWVBUKQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwg bGVuKTsKKysJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbal0sIGxlbik7CisrCQkJfQorKwkJ ICAgIGVsc2UKKysJCQl7CisrCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0s IGxlbik7CisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4pOworKwkJCX0KKysJ CSAgICB9CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6ICAK KysJICAgIGNhc2UgQ0ZCMTI4OgorKwkJaWYgKGogPT0gMCkKKysJCSAgICB7CisrCQkgICAgcmV0 ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKKysJCQkJICBk aXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBwdGV4dFtqXSwgY3Rl eHRbal0sIGxlbik7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQltZW1jcHkocHRl eHRbaisxXSwgaXZbaV0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCW1lbWNweShjdGV4dFtqKzFd LCBpdltpXSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChk aXIgPT0gWEVOQ1JZUFQpCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0 ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqLTFdLCBsZW4pOwor KwkJCX0KKysJCSAgICBlbHNlCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0s IGN0ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTFdLCBsZW4p OworKwkJCX0KKysJCSAgICB9CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0ZCODoKKysJCWlm IChqID09IDApCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFr ZXlzeiwga2V5W2ldLCBpdltpXSwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBl bmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJ CWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQlFVlBfQ2lw aGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJRVZQ X0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkgICAgfQorKwkJaWYg KGRpciA9PSBYRU5DUllQVCkKKysJCSAgICB7CisrCQkgICAgaWYgKGogPCAxNikKKysJCQltZW1j cHkocHRleHRbaisxXSwgJml2W2ldW2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHko cHRleHRbaisxXSwgY3RleHRbai0xNl0sIGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAg IHsKKysJCSAgICBpZiAoaiA8IDE2KQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCAmaXZbaV1bal0s IGxlbik7CisrCQkgICAgZWxzZQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTE2XSwg bGVuKTsKKysJCSAgICB9CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0ZCMToKKysJCWlmKGog PT0gMCkKKysJCSAgICB7CisrI2lmIDAKKysJCSAgICAvKiBjb21wZW5zYXRlIGZvciB3cm9uZyBl bmRpYW5uZXNzIG9mIGlucHV0IGZpbGUgKi8KKysJCSAgICBpZihpID09IDApCisrCQkJcHRleHRb MF1bMF08PD03OworKyNlbmRpZgorKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCxhbW9kZSxha2V5 c3osa2V5W2ldLGl2W2ldLGRpciwKKysJCQkJcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJ ICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJ CQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNl CisrCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCisrCQkg ICAgfQorKwkJaWYoZGlyID09IFhFTkNSWVBUKQorKwkJICAgIHsKKysJCSAgICBpZihqIDwgMTI4 KQorKwkJCXNiKHB0ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7CisrCQkgICAgZWxzZQorKwkJCXNi KHB0ZXh0W2orMV0sMCxnYihjdGV4dFtqLTEyOF0sMCkpOworKwkJICAgIH0KKysJCWVsc2UKKysJ CSAgICB7CisrCQkgICAgaWYoaiA8IDEyOCkKKysJCQlzYihjdGV4dFtqKzFdLDAsZ2IoaXZbaV0s aikpOworKwkJICAgIGVsc2UKKysJCQlzYihjdGV4dFtqKzFdLDAsZ2IocHRleHRbai0xMjhdLDAp KTsKKysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIH0KKysJLS1qOyAvKiByZXNldCB0 byBsYXN0IG9mIHJhbmdlICovCisrCS8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICov CisrCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl0sZGlyID8gY3RleHRbal0gOiBwdGV4dFtqXSxsZW4s cmZwLAorKwkJICAgIGltb2RlID09IENGQjEpOworKwlmcHJpbnRmKHJmcCwgIlxuIik7ICAvKiBh ZGQgc2VwYXJhdG9yICovCisrCisrCS8qIENvbXB1dGUgbmV4dCBLRVkgKi8KKysJaWYgKGRpciA9 PSBYRU5DUllQVCkKKysJICAgIHsKKysJICAgIGlmIChpbW9kZSA9PSBDRkI4KQorKwkJeyAvKiBj dCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLworKwkJZm9yIChuMSA9 IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQorKwkJICAgIGNpcGhl cnRleHRbbjFdID0gY3RleHRbai1uMl1bMF07CisrCQl9CisrCSAgICBlbHNlIGlmKGltb2RlID09 IENGQjEpCisrCQl7CisrCQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwgYWtleXN6IDsgKytu MSwtLW4yKQorKwkJICAgIHNiKGNpcGhlcnRleHQsbjEsZ2IoY3RleHRbai1uMl0sMCkpOworKwkJ fQorKwkgICAgZWxzZQorKwkJc3dpdGNoIChha2V5c3opCisrCQkgICAgeworKwkJY2FzZSAxMjg6 CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7 CisrCQljYXNlIDE5MjoKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSs4LCA4 KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBjdGV4dFtqXSwgMTYpOworKwkJICAgIGJy ZWFrOworKwkJY2FzZSAyNTY6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0s IDE2KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsxNiwgY3RleHRbal0sIDE2KTsKKysJCSAg ICBicmVhazsKKysJCSAgICB9CisrCSAgICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIGlmIChp bW9kZSA9PSBDRkI4KQorKwkJeyAvKiBjdCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8 fCBDVFtqXSAqLworKwkJZm9yIChuMSA9IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyAr K24xLCAtLW4yKQorKwkJICAgIGNpcGhlcnRleHRbbjFdID0gcHRleHRbai1uMl1bMF07CisrCQl9 CisrCSAgICBlbHNlIGlmKGltb2RlID09IENGQjEpCisrCQl7CisrCQlmb3IobjE9MCxuMj1ha2V5 c3otMSA7IG4xIDwgYWtleXN6IDsgKytuMSwtLW4yKQorKwkJICAgIHNiKGNpcGhlcnRleHQsbjEs Z2IocHRleHRbai1uMl0sMCkpOworKwkJfQorKwkgICAgZWxzZQorKwkJc3dpdGNoIChha2V5c3op CisrCQkgICAgeworKwkJY2FzZSAxMjg6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0 W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQljYXNlIDE5MjoKKysJCSAgICBtZW1jcHkoY2lw aGVydGV4dCwgcHRleHRbai0xXSs4LCA4KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBw dGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAyNTY6CisrCQkgICAgbWVtY3B5 KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0sIDE2KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsx NiwgcHRleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCSAgICB9CisrCS8q IENvbXB1dGUgbmV4dCBrZXk6IEtleVtpKzFdID0gS2V5W2ldIHhvciBjdCAqLworKwlmb3IgKG4g PSAwOyBuIDwgbmtleXN6OyArK24pCisrCSAgICBrZXlbaSsxXVtuXSA9IGtleVtpXVtuXSBeIGNp cGhlcnRleHRbbl07CisrCQorKwkvKiBDb21wdXRlIG5leHQgSVYgYW5kIHRleHQgKi8KKysJaWYg KGRpciA9PSBYRU5DUllQVCkKKysJICAgIHsKKysJICAgIHN3aXRjaCAoaW1vZGUpCisrCQl7Cisr CSAgICBjYXNlIEVDQjoKKysJCW1lbWNweShwdGV4dFswXSwgY3RleHRbal0sIEFFU19CTE9DS19T SVpFKTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDQkM6CisrCSAgICBjYXNlIE9GQjoKKysJICAg IGNhc2UgQ0ZCMTI4OgorKwkJbWVtY3B5KGl2W2krMV0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0la RSk7CisrCQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsKKysJ CWJyZWFrOworKwkgICAgY2FzZSBDRkI4OgorKwkJLyogSVZbaSsxXSA9IGN0ICovCisrCQlmb3Ig KG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikKKysJCSAgICBpdltpKzFdW24x XSA9IGN0ZXh0W2otbjJdWzBdOworKwkJcHRleHRbMF1bMF0gPSBjdGV4dFtqLTE2XVswXTsKKysJ CWJyZWFrOworKwkgICAgY2FzZSBDRkIxOgorKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjgg OyArK24xLC0tbjIpCisrCQkgICAgc2IoaXZbaSsxXSxuMSxnYihjdGV4dFtqLW4yXSwwKSk7Cisr CQlwdGV4dFswXVswXT1jdGV4dFtqLTEyOF1bMF0mMHg4MDsKKysJCWJyZWFrOworKwkJfQorKwkg ICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAg Y2FzZSBFQ0I6CisrCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7 CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6CisrCSAgICBjYXNl IENGQjEyODoKKysJCW1lbWNweShpdltpKzFdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwor KwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVh azsKKysJICAgIGNhc2UgQ0ZCODoKKysJCWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyAr K24xLCAtLW4yKQorKwkJICAgIGl2W2krMV1bbjFdID0gcHRleHRbai1uMl1bMF07CisrCQljdGV4 dFswXVswXSA9IHB0ZXh0W2otMTZdWzBdOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENGQjE6Cisr CQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikKKysJCSAgICBzYihpdltp KzFdLG4xLGdiKHB0ZXh0W2otbjJdLDApKTsKKysJCWN0ZXh0WzBdWzBdPXB0ZXh0W2otMTI4XVsw XSYweDgwOworKwkJYnJlYWs7CisrCQl9CisrCSAgICB9CisrCX0KKysgICAgCisrICAgIHJldHVy biByZXQ7CisrICAgIH0KKysKKysvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PSovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICAjIENv bmZpZyBpbmZvIGZvciB2LW9uZQorKyAgIyBBRVNWUyBNTVQgdGVzdCBkYXRhIGZvciBFQ0IKKysg ICMgU3RhdGUgOiBFbmNyeXB0IGFuZCBEZWNyeXB0CisrICAjIEtleSBMZW5ndGggOiAyNTYKKysg ICMgRnJpIEF1ZyAzMCAwNDowNzoyMiBQTQorKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCisrCisraW50IHByb2NfZmlsZShjaGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUpCisrICAg IHsKKysgICAgY2hhciBhZm5bMjU2XSwgcmZuWzI1Nl07CisrICAgIEZJTEUgKmFmcCA9IE5VTEws ICpyZnAgPSBOVUxMOworKyAgICBjaGFyIGlidWZbMjA0OF07CisrICAgIGNoYXIgdGJ1ZlsyMDQ4 XTsKKysgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKKysgICAgY2hhciBhbGdvWzhdID0gIiI7 CisrICAgIGNoYXIgYW1vZGVbOF0gPSAiIjsKKysgICAgY2hhciBhdGVzdFs4XSA9ICIiOworKyAg ICBpbnQgYWtleXN6ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBpVmVjWzIwXSwgYUtleVs0MF07 CisrICAgIGludCBkaXIgPSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7CisrICAgIHVuc2lnbmVkIGNo YXIgcGxhaW50ZXh0WzIwNDhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07 CisrICAgIGNoYXIgKnJwOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBI RVJfQ1RYX2luaXQoJmN0eCk7CisrCisrICAgIGlmICghcnFmaWxlIHx8ICEoKnJxZmlsZSkpCisr CXsKKysJcHJpbnRmKCJObyByZXEgZmlsZVxuIik7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBz dHJjcHkoYWZuLCBycWZpbGUpOworKworKyAgICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwgInIiKSkg PT0gTlVMTCkKKysJeworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCisr CSAgICAgICBhZm4sIHN0cmVycm9yKGVycm5vKSk7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBp ZiAoIXJzcGZpbGUpCisrCXsKKysJc3RyY3B5KHJmbixhZm4pOworKwlycD1zdHJzdHIocmZuLCJy ZXEvIik7CisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrCWlmICghcnApCisrCSAgICBycD1z dHJzdHIocmZuLCJyZXFcXCIpOworKyNlbmRpZgorKwlhc3NlcnQocnApOworKwltZW1jcHkocnAs InJzcCIsMyk7CisrCXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsKKysJbWVtY3B5KHJwLCAiLnJz cCIsIDQpOworKwlyc3BmaWxlID0gcmZuOworKwl9CisrICAgIGlmICgocmZwID0gZm9wZW4ocnNw ZmlsZSwgInciKSkgPT0gTlVMTCkKKysJeworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVz LCAlc1xuIiwgCisrCSAgICAgICByZm4sIHN0cmVycm9yKGVycm5vKSk7CisrCWZjbG9zZShhZnAp OworKwlhZnAgPSBOVUxMOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgd2hpbGUgKCFlcnIgJiYg KGZnZXRzKGlidWYsIHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVMTCkKKysJeworKwl0aWR5X2xp bmUodGJ1ZiwgaWJ1Zik7CisrCWlsZW4gPSBzdHJsZW4oaWJ1Zik7CisrCS8qICAgICAgcHJpbnRm KCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7ICovCisrCXN3aXRjaCAoc3RlcCkKKysJICAg IHsKKysJY2FzZSAwOiAgLyogcmVhZCBwcmVhbWJsZSAqLworKwkgICAgaWYgKGlidWZbMF0gPT0g J1xuJykKKysJCXsgLyogZW5kIG9mIHByZWFtYmxlICovCisrCQlpZiAoKCphbGdvID09ICdcMCcp IHx8CisrCQkgICAgKCphbW9kZSA9PSAnXDAnKSB8fAorKwkJICAgIChha2V5c3ogPT0gMCkpCisr CQkgICAgeworKwkJICAgIHByaW50ZigiTWlzc2luZyBBbGdvcml0aG0sIE1vZGUgb3IgS2V5U2l6 ZSAoJXMvJXMvJWQpXG4iLAorKwkJCSAgIGFsZ28sYW1vZGUsYWtleXN6KTsKKysJCSAgICBlcnIg PSAxOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKKysJCSAgICArKyBzdGVwOworKwkJICAgIH0KKysJCX0KKysJICAgIGVsc2UgaWYgKGlidWZb MF0gIT0gJyMnKQorKwkJeworKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4i LCBpYnVmKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7IC8qIHByb2Nlc3Mg cHJlYW1ibGUgKi8KKysJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7CisrCQlpbnQgbjsKKysJCWlm IChha2V5c3opCisrCQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLworKwkJ ICAgIHRpbWVfdCBydGltID0gdGltZSgwKTsKKysJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBj dGltZSgmcnRpbSkpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMo aWJ1ZiwgcmZwKTsKKysJCSAgICBpZiAoc3RybmNtcChwcCwgIkFFU1ZTICIsIDYpID09IDApCisr CQkJeworKwkJCXN0cmNweShhbGdvLCAiQUVTIik7CisrCQkJLyogZ2V0IHRlc3QgdHlwZSAqLwor KwkJCXBwICs9IDY7CisrCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7CisrCQkJbiA9IHhwLXBwOwor KwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKKysJCQlhdGVzdFtuXSA9ICdcMCc7CisrCQkJLyog Z2V0IG1vZGUgKi8KKysJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLwor KwkJCW4gPSBzdHJsZW4oeHArMSktMTsKKysJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKKysJ CQlhbW9kZVtuXSA9ICdcMCc7CisrCQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLworKwkJCWlmIChW RVJCT1NFKQorKwkJCQlwcmludGYoIlRlc3QgPSAlcywgTW9kZSA9ICVzXG4iLCBhdGVzdCwgYW1v ZGUpOworKwkJCX0KKysJCSAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChwcCwgIktleSBMZW5ndGgg OiAiLCAxMykgPT0gMCkKKysJCQl7CisrCQkJYWtleXN6ID0gYXRvaShwcCsxMyk7CisrCQkJaWYg KFZFUkJPU0UpCisrCQkJCXByaW50ZigiS2V5IHNpemUgPSAlZFxuIiwgYWtleXN6KTsKKysJCQl9 CisrCQkgICAgfQorKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMTogIC8qIFtFTkNSWVBU XSB8IFtERUNSWVBUXSAqLworKwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQorKwkJeworKwkJZnB1 dHMoaWJ1ZiwgcmZwKTsKKysJCSsrc3RlcDsKKysJCWlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0VO Q1JZUFRdIiwgOSkgPT0gMCkKKysJCSAgICBkaXIgPSAxOworKwkJZWxzZSBpZiAoc3RybmNhc2Vj bXAoaWJ1ZiwgIltERUNSWVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMDsKKysJCWVsc2UK KysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBpYnVmKTsK KysJCSAgICBlcnIgPSAxOworKwkJICAgIH0KKysJCWJyZWFrOworKwkJfQorKwkgICAgZWxzZSBp ZiAoZGlyID09IC0xKQorKwkJeworKwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyBFTkNS WVBUL0RFQ1JZUFQga2V5d29yZFxuIik7CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgCisr CQlzdGVwID0gMjsKKysKKysJY2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCisrCSAgICBmcHV0cyhp YnVmLCByZnApOworKwkgICAgaWYoKmlidWYgPT0gJ1xuJykKKysJCWJyZWFrOworKwkgICAgaWYo IXN0cm5jYXNlY21wKGlidWYsIkNPVU5UID0gIiw4KSkKKysJCWJyZWFrOworKworKwkgICAgaWYg KHN0cm5jYXNlY21wKGlidWYsICJLRVkgPSAiLCA2KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJN aXNzaW5nIEtFWVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJ bGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis2LCBhS2V5KTsKKysJCWlmIChsZW4gPCAwKQorKwkJ ICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnIgPTE7Cisr CQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsK KysJCWlmIChzdHJjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwkJICAgIHsKKysJCSAgICBtZW1z ZXQoaVZlYywgMCwgc2l6ZW9mKGlWZWMpKTsKKysJCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAv KiBubyBpdmVjIGZvciBFQ0IgKi8KKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgKytzdGVwOwor KwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMzogLyogSVYgPSB4eHh4ICovCisrCSAgICBm cHV0cyhpYnVmLCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJJViA9ICIsIDUp ICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOworKwkJZXJyID0gMTsKKysJ CX0KKysJICAgIGVsc2UKKysJCXsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNSwgaVZl Yyk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIElW XG4iKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRW YWx1ZSgiSVYiLCBpVmVjLCBsZW4pOworKwkJc3RlcCA9IChkaXIpPyA0OiA1OworKwkJfQorKwkg ICAgYnJlYWs7CisrCisrCWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAqLworKwkgICAgZnB1 dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiUExBSU5URVhUID0g IiwgMTIpICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgUExBSU5URVhUXG4iKTsKKysJ CWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlpbnQgbm4gPSBzdHJsZW4oaWJ1 ZisxMik7CisrCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmlu KGlidWYrMTIsbm4tMSxwbGFpbnRleHQpOworKwkJZWxzZQorKwkJICAgIGxlbj1oZXgyYmluKGli dWYrMTIsIHBsYWludGV4dCk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJp bnRmKCJJbnZhbGlkIFBMQUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKKysJCSAgICBlcnIgPTE7Cisr CQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJaWYgKGxlbiA+PSBzaXplb2YocGxhaW50ZXh0KSkK KysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIpOworKwkJICAgIH0K KysJCVByaW50VmFsdWUoIlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxl bik7CisrCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRl c3QgKi8KKysJCSAgICB7CisrCQkgICAgaWYoZG9fbWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlW ZWMsIAorKwkJCSAgICAgIGRpciwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuLCAKKysJ CQkgICAgICByZnApIDwgMCkKKysJCQlFWElUKDEpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAg ICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVj LCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBw bGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhFUlRF WFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJ CSAgICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDU6IC8q IENJUEhFUlRFWFQgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYg KHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCisrCQl7CisrCQlw cmludGYoIk1pc3NpbmcgS0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisr CQl7CisrCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmluKGli dWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7CisrCQllbHNlCisrCQkgICAgbGVu ID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAg eworKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKKysJCSAgICBlcnIgPTE7 CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKworKwkJUHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIs IGNpcGhlcnRleHQsIGxlbik7CisrCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8q IE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5 c3osIGFLZXksIGlWZWMsIAorKwkJCSAgIGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnApOworKwkJ ICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9k ZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9 IGVuY3J5cHQgKi8KKysJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAg T3V0cHV0VmFsdWUoIlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJm cCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsK KysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDY6CisrCSAgICBpZiAoaWJ1ZlswXSAhPSAn XG4nKQorKwkJeworKwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4i KTsKKysJCX0KKysJICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCisrCQl7 IC8qIE1DVCBhbHJlYWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCisrCQlmcHV0cyhpYnVmLCBy ZnApOworKwkJfQorKwkgICAgc3RlcCA9IDE7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJfQor KyAgICBpZiAocmZwKQorKwlmY2xvc2UocmZwKTsKKysgICAgaWYgKGFmcCkKKysJZmNsb3NlKGFm cCk7CisrICAgIHJldHVybiBlcnI7CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICBQcm9jZXNzZXMgZWl0aGVyIGEgc2lu Z2xlIGZpbGUgb3IgCisrICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGlu IGEgZmlsZS4KKysgIEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVz dCAtZiB4eHgucmVxCisrICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFl c190ZXN0IC1kIHh4eHh4Lnh4eAorKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKKystLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisraW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyAgICB7CisrICAgIGNoYXIgKnJxbGlzdCA9ICJy ZXEudHh0IiwgKnJzcGZpbGUgPSBOVUxMOworKyAgICBGSUxFICpmcCA9IE5VTEw7CisrICAgIGNo YXIgZm5bMjUwXSA9ICIiLCByZm5bMjU2XSA9ICIiOworKyAgICBpbnQgZl9vcHQgPSAwLCBkX29w dCA9IDE7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZighRklQU19tb2RlX3NldCgx KSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysJRVhJVCgxKTsKKysJfQorKyNlbmRpZgor KyAgICBpZiAoYXJnYyA+IDEpCisrCXsKKysJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikg PT0gMCkKKysJICAgIHsKKysJICAgIGRfb3B0ID0gMTsKKysJICAgIH0KKysJZWxzZSBpZiAoc3Ry Y2FzZWNtcChhcmd2WzFdLCAiLWYiKSA9PSAwKQorKwkgICAgeworKwkgICAgZl9vcHQgPSAxOwor KwkgICAgZF9vcHQgPSAwOworKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBwcmludGYo IkludmFsaWQgcGFyYW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7CisrCSAgICByZXR1cm4gMDsKKysJ ICAgIH0KKysJaWYgKGFyZ2MgPCAzKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBh cmFtZXRlclxuIik7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGRfb3B0KQorKwkg ICAgcnFsaXN0ID0gYXJndlsyXTsKKysJZWxzZQorKwkgICAgeworKwkgICAgc3RyY3B5KGZuLCBh cmd2WzJdKTsKKysJICAgIHJzcGZpbGUgPSBhcmd2WzNdOworKwkgICAgfQorKwl9CisrICAgIGlm IChkX29wdCkKKysJeyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCisrCWlmICghKGZw ID0gZm9wZW4ocnFsaXN0LCAiciIpKSkKKysJICAgIHsKKysJICAgIHByaW50ZigiQ2Fubm90IG9w ZW4gcmVxIGxpc3QgZmlsZVxuIik7CisrCSAgICByZXR1cm4gLTE7CisrCSAgICB9CisrCXdoaWxl IChmZ2V0cyhmbiwgc2l6ZW9mKGZuKSwgZnApKQorKwkgICAgeworKwkgICAgc3RydG9rKGZuLCAi XHJcbiIpOworKwkgICAgc3RyY3B5KHJmbiwgZm4pOworKwkgICAgaWYgKFZFUkJPU0UpCisrCQlw cmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCByZm4pOworKwkgICAgaWYgKHByb2NfZmlsZShyZm4s IHJzcGZpbGUpKQorKwkJeworKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAl cyA8PDxcbiIsIHJmbik7CisrCQlFWElUKDEpOworKwkJfQorKwkgICAgfQorKwlmY2xvc2UoZnAp OworKwl9CisrICAgIGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KKysJeworKwlpZiAoVkVSQk9TRSkK KysJICAgIHByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKKysJaWYgKHByb2NfZmlsZShm biwgcnNwZmlsZSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxl ZCBmb3I6ICVzIDw8PFxuIiwgZm4pOworKwkgICAgfQorKwl9CisrICAgIEVYSVQoMCk7CisrICAg IHJldHVybiAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCistLS0gL2Rldi9u dWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCisrKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCTIwMDktMTEtMTIgMTI6MzY6 NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDcwMiBAQAorKy8qID09PT09PT09PT09PT09 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 ICB9CisrCisrI2VuZGlmCitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYworLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEy OjAwOjU4LjgwMTAwMjI3NiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2Rzc3ZzLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAK K0BAIC0wLDAgKzEsNTM3IEBACisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysK KysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBEU0Egc3Vw cG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2lu Y2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIHZvaWQgcGJuKGNvbnN0IGNoYXIgKm5hbWUs IEJJR05VTSAqYm4pCisrCXsKKysJaW50IGxlbiwgaTsKKysJdW5zaWduZWQgY2hhciAqdG1wOwor KwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOworKwl0bXAgPSBPUEVOU1NMX21hbGxvYyhsZW4pOwor KwlpZiAoIXRtcCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24g ZXJyb3JcbiIpOworKwkJcmV0dXJuOworKwkJfQorKwlCTl9ibjJiaW4oYm4sIHRtcCk7CisrCXBy aW50ZigiJXMgPSAiLCBuYW1lKTsKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorKwkJcHJp bnRmKCIlMDJYIiwgdG1wW2ldKTsKKysJZnB1dHMoIlxuIiwgc3Rkb3V0KTsKKysJT1BFTlNTTF9m cmVlKHRtcCk7CisrCXJldHVybjsKKysJfQorKworK3ZvaWQgcHJpbWVzKCkKKysgICAgeworKyAg ICBjaGFyIGJ1ZlsxMDI0MF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0MF07CisrICAgIGNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4p ICE9IE5VTEwpCisrCXsKKysJZnB1dHMoYnVmLHN0ZG91dCk7CisrCWlmICghcGFyc2VfbGluZSgm a2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGludWU7CisrCWlmKCFzdHJjbXAo a2V5d29yZCwiUHJpbWUiKSkKKysJICAgIHsKKysJICAgIEJJR05VTSAqcHA7CisrCisrCSAgICBw cD1CTl9uZXcoKTsKKysJICAgIGRvX2hleDJibigmcHAsdmFsdWUpOworKwkgICAgcHJpbnRmKCJy ZXN1bHQ9ICVjXG4iLAorKwkJICAgQk5faXNfcHJpbWVfZXgocHAsMjAsTlVMTCxOVUxMKSA/ICdQ JyA6ICdGJyk7CisrCSAgICB9CSAgICAKKysJfQorKyAgICB9CisrCisrdm9pZCBwcWcoKQorKyAg ICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNo YXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysKKysgICAgd2hpbGUoZmdl dHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5l KCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0 KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJ ICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJOIikpCisr CSAgICB7CisrCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKKysKKysJICAgIHByaW50ZigiW21vZCA9 ICVkXVxuXG4iLG5tb2QpOworKworKwkgICAgd2hpbGUobi0tKQorKwkJeworKwkJdW5zaWduZWQg Y2hhciBzZWVkWzIwXTsKKysJCURTQSAqZHNhOworKwkJaW50IGNvdW50ZXI7CisrCQl1bnNpZ25l ZCBsb25nIGg7CisrCQlkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysKKysJCWlmICghRFNBX2dlbmVy YXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMCwmY291bnRlciwmaCxOVUxMKSkKKysJ CQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCQlwYm4o IlAiLGRzYS0+cCk7CisrCQlwYm4oIlEiLGRzYS0+cSk7CisrCQlwYm4oIkciLGRzYS0+Zyk7Cisr CQlwdigiU2VlZCIsc2VlZCwyMCk7CisrCQlwcmludGYoImMgPSAlZFxuIixjb3VudGVyKTsKKysJ CXByaW50ZigiSCA9ICVseFxuIixoKTsKKysJCXB1dGMoJ1xuJyxzdGRvdXQpOworKwkJfQorKwkg ICAgfQorKwllbHNlCisrCSAgICBmcHV0cyhidWYsc3Rkb3V0KTsKKysJfQorKyAgICB9CisrCisr dm9pZCBwcWd2ZXIoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxi dWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgQklHTlVNICpwID0g TlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEw7CisrICAgIGludCBjb3VudGVyLCBjb3VudGVyMjsK KysgICAgdW5zaWduZWQgbG9uZyBoLCBoMjsKKysgICAgRFNBICpkc2E9TlVMTDsKKysgICAgaW50 IG5tb2Q9MDsKKysgICAgdW5zaWduZWQgY2hhciBzZWVkWzEwMjRdOworKworKyAgICB3aGlsZShm Z2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xp bmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRv dXQpOworKwkJY29udGludWU7CisrCQl9CisrCWZwdXRzKGJ1Ziwgc3Rkb3V0KTsKKysJaWYoIXN0 cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgcD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgcT1oZXgyYm4odmFsdWUpOworKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgZz1oZXgyYm4odmFsdWUpOworKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiU2VlZCIpKQorKwkgICAgeworKwkgICAgaW50IHNsZW4gPSBoZXgy YmluKHZhbHVlLCBzZWVkKTsKKysJICAgIGlmIChzbGVuICE9IDIwKQorKwkJeworKwkJZnByaW50 ZihzdGRlcnIsICJTZWVkIHBhcnNlIGxlbmd0aCBlcnJvclxuIik7CisrCQlleGl0ICgxKTsKKysJ CX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsImMiKSkKKysJICAgIGNvdW50 ZXIgPWF0b2koYnVmKzQpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiSCIpKQorKwkgICAg eworKwkgICAgaCA9IGF0b2kodmFsdWUpOworKwkgICAgaWYgKCFwIHx8ICFxIHx8ICFnKQorKwkJ eworKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxuIik7CisrCQlleGl0ICgxKTsKKysJ CX0KKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOworKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVf cGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwyMCAsJmNvdW50ZXIyLCZoMixOVUxMKSkKKysJ CQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrICAgICAg ICAgICAgaWYgKEJOX2NtcChkc2EtPnAsIHApIHx8IEJOX2NtcChkc2EtPnEsIHEpIHx8IEJOX2Nt cChkc2EtPmcsIGcpCisrCQl8fCAoY291bnRlciAhPSBjb3VudGVyMikgfHwgKGggIT0gaDIpKQor KwkgICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7CisrCSAgICBlbHNlCisrCSAgICAJcHJpbnRm KCJSZXN1bHQgPSBQXG4iKTsKKysJICAgIEJOX2ZyZWUocCk7CisrCSAgICBCTl9mcmVlKHEpOwor KwkgICAgQk5fZnJlZShnKTsKKysJICAgIHAgPSBOVUxMOworKwkgICAgcSA9IE5VTEw7CisrCSAg ICBnID0gTlVMTDsKKysJICAgIEZJUFNfZHNhX2ZyZWUoZHNhKTsKKysJICAgIGRzYSA9IE5VTEw7 CisrCSAgICB9CisrCX0KKysgICAgfQorKworKy8qIEtleXBhaXIgdmVyaWZpY2F0aW9uIHJvdXRp bmUuIE5COiB0aGlzIGlzbid0IHBhcnQgb2YgdGhlIHN0YW5kYXJkIEZJUFMxNDAtMgorKyAqIGFs Z29yaXRobSB0ZXN0cy4gSXQgaXMgYW4gYWRkaXRpb25hbCB0ZXN0IHRvIHBlcmZvcm0gc2FuaXR5 IGNoZWNrcyBvbiB0aGUKKysgKiBvdXRwdXQgb2YgdGhlIEtleVBhaXIgdGVzdC4KKysgKi8KKysK KytzdGF0aWMgaW50IGRzc19wYXJhbWNoZWNrKGludCBubW9kLCBCSUdOVU0gKnAsIEJJR05VTSAq cSwgQklHTlVNICpnLAorKwkJCQkJCQlCTl9DVFggKmN0eCkKKysgICAgeworKyAgICBCSUdOVU0g KnJlbSA9IE5VTEw7CisrICAgIGlmIChCTl9udW1fYml0cyhwKSAhPSBubW9kKQorKwlyZXR1cm4g MDsKKysgICAgaWYgKEJOX251bV9iaXRzKHEpICE9IDE2MCkKKysJcmV0dXJuIDA7CisrICAgIGlm IChCTl9pc19wcmltZV9leChwLCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0gMSkKKysJ cmV0dXJuIDA7CisrICAgIGlmIChCTl9pc19wcmltZV9leChxLCBCTl9wcmltZV9jaGVja3MsIGN0 eCwgTlVMTCkgIT0gMSkKKysJcmV0dXJuIDA7CisrICAgIHJlbSA9IEJOX25ldygpOworKyAgICBp ZiAoIUJOX21vZChyZW0sIHAsIHEsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pCisrICAgIAl8fCAo Qk5fY21wKGcsIEJOX3ZhbHVlX29uZSgpKSA8PSAwKQorKwl8fCAhQk5fbW9kX2V4cChyZW0sIGcs IHEsIHAsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pKQorKwl7CisrCUJOX2ZyZWUocmVtKTsKKysJ cmV0dXJuIDA7CisrCX0KKysgICAgLyogVG9kbzogY2hlY2sgZyAqLworKyAgICBCTl9mcmVlKHJl bSk7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrdm9pZCBrZXl2ZXIoKQorKyAgICB7Cisr ICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKKysgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5V TEwsICpYID0gTlVMTCwgKlkgPSBOVUxMOworKyAgICBCSUdOVU0gKlkyOworKyAgICBCTl9DVFgg KmN0eCA9IE5VTEw7CisrICAgIGludCBubW9kPTAsIHBhcmFtY2hlY2sgPSAwOworKworKyAgICBj dHggPSBCTl9DVFhfbmV3KCk7CisrICAgIFkyID0gQk5fbmV3KCk7CisrCisrICAgIHdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91 dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisr CSAgICB7CisrCSAgICBpZiAocCkKKysJCUJOX2ZyZWUocCk7CisrCSAgICBwID0gTlVMTDsKKysJ ICAgIGlmIChxKQorKwkJQk5fZnJlZShxKTsKKysJICAgIHEgPSBOVUxMOworKwkgICAgaWYgKGcp CisrCQlCTl9mcmVlKGcpOworKwkgICAgZyA9IE5VTEw7CisrCSAgICBwYXJhbWNoZWNrID0gMDsK KysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJQIikpCisrCSAgICBwPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJRIikpCisrCSAgICBxPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJHIikpCisrCSAgICBnPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJYIikpCisrCSAgICBYPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJZIikpCisrCSAgICB7CisrCSAgICBZPWhleDJibih2YWx1ZSk7CisrCSAgICBpZiAoIXAg fHwgIXEgfHwgIWcgfHwgIVggfHwgIVkpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNl IEVycm9yXG4iKTsKKysJCWV4aXQgKDEpOworKwkJfQorKwkgICAgcGJuKCJQIixwKTsKKysJICAg IHBibigiUSIscSk7CisrCSAgICBwYm4oIkciLGcpOworKwkgICAgcGJuKCJYIixYKTsKKysJICAg IHBibigiWSIsWSk7CisrCSAgICBpZiAoIXBhcmFtY2hlY2spCisrCQl7CisrCQlpZiAoZHNzX3Bh cmFtY2hlY2sobm1vZCwgcCwgcSwgZywgY3R4KSkKKysJCQlwYXJhbWNoZWNrID0gMTsKKysJCWVs c2UKKysJCQlwYXJhbWNoZWNrID0gLTE7CisrCQl9CisrCSAgICBpZiAocGFyYW1jaGVjayAhPSAx KQorKwkgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKKysJICAgIGVsc2UKKysJCXsKKysJCWlm ICghQk5fbW9kX2V4cChZMiwgZywgWCwgcCwgY3R4KSB8fCBCTl9jbXAoWTIsIFkpKQorKwkgICAg CQlwcmludGYoIlJlc3VsdCA9IEZcbiIpOworKwkgICAgICAgIGVsc2UKKysJICAgIAkJcHJpbnRm KCJSZXN1bHQgPSBQXG4iKTsKKysJCX0KKysJICAgIEJOX2ZyZWUoWCk7CisrCSAgICBCTl9mcmVl KFkpOworKwkgICAgWCA9IE5VTEw7CisrCSAgICBZID0gTlVMTDsKKysJICAgIH0KKysJfQorKwlp ZiAocCkKKysJICAgIEJOX2ZyZWUocCk7CisrCWlmIChxKQorKwkgICAgQk5fZnJlZShxKTsKKysJ aWYgKGcpCisrCSAgICBCTl9mcmVlKGcpOworKwlpZiAoWTIpCisrCSAgICBCTl9mcmVlKFkyKTsK KysgICAgfQorKworK3ZvaWQga2V5cGFpcigpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07 CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAg ICBpbnQgbm1vZD0wOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikg IT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1Ziwg YnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9Cisr CWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJ ZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKKysJICAgIHsKKysJICAgIERTQSAqZHNhOwor KwkgICAgaW50IG49YXRvaSh2YWx1ZSk7CisrCisrCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxu IixubW9kKTsKKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOworKwkgICAgaWYgKCFEU0FfZ2Vu ZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKKysJ CXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsKKysJCX0KKysJICAgIHBibigi UCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJICAgIHBibigiRyIsZHNhLT5n KTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKworKwkgICAgd2hpbGUobi0tKQorKwkJewor KwkJaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisrCQkJeworKwkJCWRvX3ByaW50X2Vycm9y cygpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKworKwkJcGJuKCJYIixkc2EtPnByaXZfa2V5KTsK KysJCXBibigiWSIsZHNhLT5wdWJfa2V5KTsKKysJCXB1dGMoJ1xuJyxzdGRvdXQpOworKwkJfQor KwkgICAgfQorKwl9CisrICAgIH0KKysKKyt2b2lkIHNpZ2dlbigpCisrICAgIHsKKysgICAgY2hh ciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOworKyAgICBpbnQgbm1vZD0wOworKyAgICBEU0EgKmRzYT1OVUxMOworKworKyAgICB3 aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBh cnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1 ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21v ZCIpKQorKwkgICAgeworKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJICAgIHByaW50ZigiW21v ZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAgaWYgKGRzYSkKKysJCUZJUFNfZHNhX2ZyZWUoZHNh KTsKKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOworKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVf cGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKKysJCXsKKysJ CWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsKKysJCX0KKysJICAgIHBibigiUCIsZHNh LT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJICAgIHBibigiRyIsZHNhLT5nKTsKKysJ ICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29y ZCwiTXNnIikpCisrCSAgICB7CisrCSAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0XTsKKysJICAg IHVuc2lnbmVkIGNoYXIgc2J1Zls2MF07CisrCSAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysJICAg IGludCBuOworKwkgICAgRVZQX1BLRVkgcGs7CisrCSAgICBFVlBfTURfQ1RYIG1jdHg7CisrCSAg ICBEU0FfU0lHICpzaWc7CisrCSAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKworKwkgICAg bj1oZXgyYmluKHZhbHVlLG1zZyk7CisrCSAgICBwdigiTXNnIixtc2csbik7CisrCisrCSAgICBp ZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOwor KwkJZXhpdCgxKTsKKysJCX0KKysJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7CisrCSAgICBw ay5wa2V5LmRzYSA9IGRzYTsKKysJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5KTsKKysKKysJICAg IEVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7CisrCSAgICBFVlBfU2ln blVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKKysJICAgIEVWUF9TaWduRmluYWwoJm1jdHgsIHNidWYs ICZzbGVuLCAmcGspOworKworKwkgICAgc2lnID0gRFNBX1NJR19uZXcoKTsKKysJICAgIEZJUFNf ZHNhX3NpZ19kZWNvZGUoc2lnLCBzYnVmLCBzbGVuKTsKKysKKysJICAgIHBibigiUiIsc2lnLT5y KTsKKysJICAgIHBibigiUyIsc2lnLT5zKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkg ICAgRFNBX1NJR19mcmVlKHNpZyk7CisrCSAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwor KwkgICAgfQorKwl9CisrCWlmIChkc2EpCisrCQlGSVBTX2RzYV9mcmVlKGRzYSk7CisrICAgIH0K KysKKyt2b2lkIHNpZ3ZlcigpCisrICAgIHsKKysgICAgRFNBICpkc2E9TlVMTDsKKysgICAgY2hh ciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgdW5zaWduZWQgY2hhciBt c2dbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MCwg bj0wOworKyAgICBEU0FfU0lHIHNnLCAqc2lnID0gJnNnOworKworKyAgICBzaWctPnIgPSBOVUxM OworKyAgICBzaWctPnMgPSBOVUxMOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1 ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1 ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7 CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgeworKwkgICAgbm1v ZD1hdG9pKHZhbHVlKTsKKysJICAgIGlmKGRzYSkKKysJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKKysJ ICAgIGRzYT1GSVBTX2RzYV9uZXcoKTsKKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIlAiKSkKKysJICAgIGRzYS0+cD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiUSIpKQorKwkgICAgZHNhLT5xPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICB7CisrCSAgICBkc2EtPmc9aGV4MmJuKHZhbHVlKTsK KysKKysJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAgcGJuKCJQIixk c2EtPnApOworKwkgICAgcGJuKCJRIixkc2EtPnEpOworKwkgICAgcGJuKCJHIixkc2EtPmcpOwor KwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJNc2ciKSkKKysJICAgIHsKKysJICAgIG49aGV4MmJpbih2YWx1ZSxtc2cpOworKwkgICAg cHYoIk1zZyIsbXNnLG4pOworKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWSIp KQorKwkgICAgZHNhLT5wdWJfa2V5PWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJSIikpCisrCSAgICBzaWctPnI9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsIlMiKSkKKysJICAgIHsKKysJICAgIEVWUF9NRF9DVFggbWN0eDsKKysJICAg IEVWUF9QS0VZIHBrOworKwkgICAgdW5zaWduZWQgY2hhciBzaWdidWZbNjBdOworKwkgICAgdW5z aWduZWQgaW50IHNsZW47CisrCSAgICBpbnQgcjsKKysJICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0 eCk7CisrCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOworKwkgICAgcGsucGtleS5kc2EgPSBk c2E7CisrCSAgICBzaWctPnM9aGV4MmJuKHZhbHVlKTsKKysJCisrCSAgICBwYm4oIlkiLGRzYS0+ cHViX2tleSk7CisrCSAgICBwYm4oIlIiLHNpZy0+cik7CisrCSAgICBwYm4oIlMiLHNpZy0+cyk7 CisrCisrCSAgICBzbGVuID0gRklQU19kc2Ffc2lnX2VuY29kZShzaWdidWYsIHNpZyk7CisrCSAg ICBFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7CisrCSAgICBFVlBf VmVyaWZ5VXBkYXRlKCZtY3R4LCBtc2csIG4pOworKwkgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgm bWN0eCwgc2lnYnVmLCBzbGVuLCAmcGspOworKwkgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4 KTsKKysJCisrCSAgICBwcmludGYoIlJlc3VsdCA9ICVjXG4iLCByID09IDEgPyAnUCcgOiAnRicp OworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9CisrCX0KKysgICAgfQorKworK2lu dCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorKyAgICB7CisrICAgIGlmKGFyZ2MgIT0gMikK KysJeworKwlmcHJpbnRmKHN0ZGVyciwiJXMgW3ByaW1lfHBxZ3xwcWd2ZXJ8a2V5cGFpcnxzaWdn ZW58c2lndmVyXVxuIixhcmd2WzBdKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBpZighRklQU19t b2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysJZXhpdCgxKTsKKysJfQor KyAgICBpZighc3RyY21wKGFyZ3ZbMV0sInByaW1lIikpCisrCXByaW1lcygpOworKyAgICBlbHNl IGlmKCFzdHJjbXAoYXJndlsxXSwicHFnIikpCisrCXBxZygpOworKyAgICBlbHNlIGlmKCFzdHJj bXAoYXJndlsxXSwicHFndmVyIikpCisrCXBxZ3ZlcigpOworKyAgICBlbHNlIGlmKCFzdHJjbXAo YXJndlsxXSwia2V5cGFpciIpKQorKwlrZXlwYWlyKCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChh cmd2WzFdLCJrZXl2ZXIiKSkKKysJa2V5dmVyKCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2 WzFdLCJzaWdnZW4iKSkKKysJc2lnZ2VuKCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFd LCJzaWd2ZXIiKSkKKysJc2lndmVyKCk7CisrICAgIGVsc2UKKysJeworKwlmcHJpbnRmKHN0ZGVy ciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOworKwlleGl0KDEpOworKwl9Cisr CisrICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCAvZGV2L251bGwg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYworLS0tIC9k ZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAorKysrIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMJMjAwOS0xMS0xMiAxMjoz Njo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMjMwIEBACisrLyoKKysgKiBDcnVkZSB0 ZXN0IGRyaXZlciBmb3IgcHJvY2Vzc2luZyB0aGUgVlNUIGFuZCBNQ1QgdGVzdHZlY3RvciBmaWxl cworKyAqIGdlbmVyYXRlZCBieSB0aGUgQ01WUCBSTkdWUyBwcm9kdWN0LgorKyAqCisrICogTm90 ZSB0aGUgaW5wdXQgZmlsZXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhIF92ZXJ5XyBzcGVjaWZpYyBm b3JtYXQKKysgKiBhcyBkZXNjcmliZWQgaW4gdGhlIE5JU1QgZG9jdW1lbnQgIlRoZSBSYW5kb20g TnVtYmVyIEdlbmVyYXRvcgorKyAqIFZhbGlkYXRpb24gU3lzdGVtIChSTkdWUykiLCBNYXkgMjUs IDIwMDQuCisrICoKKysgKi8KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKwor KyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJORyBzdXBw b3J0XG4iKTsKKysgICAgcmV0dXJuIDA7CisrfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFu ZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L3g1MDl2My5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysK KysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKyt2b2lkIHZzdCgpCisrICAgIHsKKysgICAgdW5z aWduZWQgY2hhciAqa2V5ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7Cisr ICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciByZXRbMTZd OworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFy ICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGxvbmcgaSwga2V5bGVuOworKworKyAgICBrZXlsZW4g PSAwOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkK KysJeworKwlmcHV0cyhidWYsc3Rkb3V0KTsKKysJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1L ZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMTY7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVT IDE5Mi1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMjQ7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVm LCJbQUVTIDI1Ni1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMzI7CisrCWlmICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGludWU7CisrCWlmKCFzdHJj bXAoa2V5d29yZCwiS2V5IikpCisrCSAgICB7CisrCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZp KTsKKysJICAgIGlmIChpICE9IGtleWxlbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52 YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOworKwkJcmV0dXJuOwor KwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKKysJICAgIHsK KysJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikKKysJCXsK KysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOworKwkJcmV0dXJuOwor KwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQorKwkgICAgewor KwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7Cisr CQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJ fQorKworKwkgICAgaWYgKCFrZXkgfHwgIWR0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJN aXNzaW5nIGtleSBvciBEVFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBGSVBTX3Jh bmRfc2V0X2tleShrZXksIGtleWxlbik7CisrCSAgICBGSVBTX3JhbmRfc2VlZCh2LDE2KTsKKysJ ICAgIEZJUFNfcmFuZF9zZXRfZHQoZHQpOworKwkgICAgaWYgKEZJUFNfcmFuZF9ieXRlcyhyZXQs MTYpIDw9IDApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2 YWx1ZVxuIik7CisrCSAgICAgICAgcmV0dXJuOworKwkgICAgICAgIH0KKysKKysJICAgIHB2KCJS IixyZXQsMTYpOworKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7CisrCSAgICBrZXkgPSBOVUxMOwor KwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKKysJICAgIGR0ID0gTlVMTDsKKysJICAgIE9QRU5TU0xf ZnJlZSh2KTsKKysJICAgIHYgPSBOVUxMOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKyt2b2lk IG1jdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsKKysgICAgdW5z aWduZWQgY2hhciAqdiA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKKysg ICAgdW5zaWduZWQgY2hhciByZXRbMTZdOworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hh ciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGxvbmcgaSwg a2V5bGVuOworKyAgICBpbnQgajsKKysKKysgICAga2V5bGVuID0gMDsKKysKKysgICAgd2hpbGUo ZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJZnB1dHMoYnVmLHN0 ZG91dCk7CisrCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5XSIsIDEzKSkKKysJCWtleWxl biA9IDE2OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxOTItS2V5XSIsIDEzKSkKKysJ CWtleWxlbiA9IDI0OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAyNTYtS2V5XSIsIDEz KSkKKysJCWtleWxlbiA9IDMyOworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwg bGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVlOworKwlpZighc3RyY21wKGtleXdvcmQsIktleSIpKQor KwkgICAgeworKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSBr ZXlsZW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQga2V5IGxlbmd0aCwgZXhw ZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKKysJCXJldHVybjsKKysJCX0KKysJICAgIH0KKysJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikpCisrCSAgICB7CisrCSAgICBkdD1oZXgyYmluX20o dmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwg IkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysJICAgIH0KKysJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkKKysJICAgIHsKKysJICAgIHY9aGV4MmJpbl9tKHZh bHVlLCZpKTsKKysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJ bnZhbGlkIFYgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysKKysJICAgIGlmICgha2V5 IHx8ICFkdCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWlzc2luZyBrZXkgb3IgRFRcbiIp OworKwkJcmV0dXJuOworKwkJfQorKworKwkgICAgRklQU19yYW5kX3NldF9rZXkoa2V5LCBrZXls ZW4pOworKwkgICAgRklQU19yYW5kX3NlZWQodiwxNik7CisrCSAgICBmb3IgKGkgPSAwOyBpIDwg MTAwMDA7IGkrKykKKysJCXsKKysJCSAgICBGSVBTX3JhbmRfc2V0X2R0KGR0KTsKKysJCSAgICBp ZiAoRklQU19yYW5kX2J5dGVzKHJldCwxNikgPD0gMCkKKysJCQl7CisrCQkJZnByaW50ZihzdGRl cnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFsdWVcbiIpOworKwkJICAgICAgICByZXR1cm47Cisr CQkgICAgICAgIH0KKysJCSAgICAvKiBJbmNyZW1lbnQgRFQgKi8KKysJCSAgICBmb3IgKGogPSAx NTsgaiA+PSAwOyBqLS0pCisrCQkJeworKwkJCWR0W2pdKys7CisrCQkJaWYgKGR0W2pdKQorKwkJ CQlicmVhazsKKysJCQl9CisrCQl9CisrCisrCSAgICBwdigiUiIscmV0LDE2KTsKKysJICAgIE9Q RU5TU0xfZnJlZShrZXkpOworKwkgICAga2V5ID0gTlVMTDsKKysJICAgIE9QRU5TU0xfZnJlZShk dCk7CisrCSAgICBkdCA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUodik7CisrCSAgICB2ID0g TlVMTDsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAq KmFyZ3YpCisrICAgIHsKKysgICAgaWYoYXJnYyAhPSAyKQorKwl7CisrCWZwcmludGYoc3RkZXJy LCIlcyBbbWN0fHZzdF1cbiIsYXJndlswXSk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgaWYoIUZJ UFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCWV4aXQoMSk7Cisr CX0KKysgICAgRklQU19yYW5kX3Jlc2V0KCk7CisrICAgIGlmICghRklQU19yYW5kX3Rlc3RfbW9k ZSgpKQorKwl7CisrCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igc2V0dGluZyBQUk5HIHRlc3QgbW9k ZVxuIik7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlleGl0KDEpOworKwl9CisrICAgIGlmKCFz dHJjbXAoYXJndlsxXSwibWN0IikpCisrCW1jdCgpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJn dlsxXSwidnN0IikpCisrCXZzdCgpOworKyAgICBlbHNlCisrCXsKKysJZnByaW50ZihzdGRlcnIs IkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKKysJZXhpdCgxKTsKKysJfQorKwor KyAgICByZXR1cm4gMDsKKysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMKKy0tLSAvZGV2 L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jCTIwMDktMTEtMTIgMTI6 MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDM5MCBAQAorKy8qIGZpcHNfcnNhZ3Rl c3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNz bC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSwyMDA3IFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlv bi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBs aWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisr ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysg KgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK KysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVz IGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBj cnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisrICovCisrCisrI2lu Y2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBS U0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5j bHVkZSAiZmlwc191dGwuaCIKKysKKytpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7 Cisrc3RhdGljIGludCByc2FfcHJpbnRrZXkxKEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdO VU0gKlhwMSwgQklHTlVNICpYcDIsIEJJR05VTSAqWHAsCisrCQlCSUdOVU0gKmUpOworK3N0YXRp YyBpbnQgcnNhX3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNhLAorKwkJQklHTlVNICpYcTEs IEJJR05VTSAqWHEyLCBCSUdOVU0gKlhxKTsKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysKKysJaW50IHJl dCA9IDE7CisrCisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJy b3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0g c3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFy Z2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJd LCAidyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBp bnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJ aWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFs aXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFyc2FfdGVz dChvdXQsIGluKSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBR1RFU1QgZmls ZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQly ZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsK KysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0 ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0Owor KworKwl9CisrCisrI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJz YV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pCisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5l YnVmLCAqcCwgKnE7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJUlNBICpyc2EgPSBOVUxM OworKwlCSUdOVU0gKlhwMSA9IE5VTEwsICpYcDIgPSBOVUxMLCAqWHAgPSBOVUxMOworKwlCSUdO VU0gKlhxMSA9IE5VTEwsICpYcTIgPSBOVUxMLCAqWHEgPSBOVUxMOworKwlCSUdOVU0gKmUgPSBO VUxMOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9Q RU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9t YWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVi dWYpCisrCQlnb3RvIGVycm9yOworKworKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNU X01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBv bGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFj ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtl eXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwkJcCA9IHN0cmNocihsaW5l YnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9 IGJhcl0gbGluZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKKysJ CQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsK KysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlxID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUg dHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkK KysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsKKysJCXZhbHVlID0gcCArIDE7CisrCisrCQkv KiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZhbHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJh aWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAt IDE7CisrCisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpw KSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJ4cDEiKSkKKysJ CQl7CisrCQkJaWYgKFhwMSB8fCAhZG9faGV4MmJuKCZYcDEsdmFsdWUpKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMiIpKQor KwkJCXsKKysJCQlpZiAoWHAyIHx8ICFkb19oZXgyYm4oJlhwMix2YWx1ZSkpCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHAiKSkK KysJCQl7CisrCQkJaWYgKFhwIHx8ICFkb19oZXgyYm4oJlhwLHZhbHVlKSkKKysJCQkJZ290byBw YXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJ4cTEiKSkK KysJCQl7CisrCQkJaWYgKFhxMSB8fCAhZG9faGV4MmJuKCZYcTEsdmFsdWUpKQorKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMiIp KQorKwkJCXsKKysJCQlpZiAoWHEyIHx8ICFkb19oZXgyYm4oJlhxMix2YWx1ZSkpCisrCQkJCWdv dG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHEi KSkKKysJCQl7CisrCQkJaWYgKFhxIHx8ICFkb19oZXgyYm4oJlhxLHZhbHVlKSkKKysJCQkJZ290 byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJlIikp CisrCQkJeworKwkJCWlmIChlIHx8ICFkb19oZXgyYm4oJmUsdmFsdWUpKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAxIikpCisr CQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwMiIpKQorKwkJCWNv bnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicCIpKQorKwkJCWNvbnRpbnVl OworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTEiKSkKKysJCQljb250aW51ZTsKKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInEyIikpCisrCQkJY29udGludWU7CisrCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJxIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsICJuIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJkIikpCisrCQkJY29udGludWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9l cnJvcjsKKysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJaWYgKGUgJiYgWHAxICYm IFhwMiAmJiBYcCkKKysJCQl7CisrCQkJcnNhID0gRklQU19yc2FfbmV3KCk7CisrCQkJaWYgKCFy c2EpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJaWYgKCFyc2FfcHJpbnRrZXkxKG91dCwgcnNhLCBY cDEsIFhwMiwgWHAsIGUpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCUJOX2ZyZWUoWHAxKTsKKysJ CQlYcDEgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHAyKTsKKysJCQlYcDIgPSBOVUxMOworKwkJCUJO X2ZyZWUoWHApOworKwkJCVhwID0gTlVMTDsKKysJCQlCTl9mcmVlKGUpOworKwkJCWUgPSBOVUxM OworKwkJCX0KKysKKysJCWlmIChyc2EgJiYgWHExICYmIFhxMiAmJiBYcSkKKysJCQl7CisrCQkJ aWYgKCFyc2FfcHJpbnRrZXkyKG91dCwgcnNhLCBYcTEsIFhxMiwgWHEpKQorKwkJCQlnb3RvIGVy cm9yOworKwkJCUJOX2ZyZWUoWHExKTsKKysJCQlYcTEgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHEy KTsKKysJCQlYcTIgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHEpOworKwkJCVhxID0gTlVMTDsKKysJ CQlGSVBTX3JzYV9mcmVlKHJzYSk7CisrCQkJcnNhID0gTlVMTDsKKysJCQl9CisrCQl9CisrCisr CXJldCA9IDE7CisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2Zy ZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsK KysKKysJaWYgKFhwMSkKKysJCUJOX2ZyZWUoWHAxKTsKKysJaWYgKFhwMikKKysJCUJOX2ZyZWUo WHAyKTsKKysJaWYgKFhwKQorKwkJQk5fZnJlZShYcCk7CisrCWlmIChYcTEpCisrCQlCTl9mcmVl KFhxMSk7CisrCWlmIChYcTEpCisrCQlCTl9mcmVlKFhxMSk7CisrCWlmIChYcTIpCisrCQlCTl9m cmVlKFhxMik7CisrCWlmIChYcSkKKysJCUJOX2ZyZWUoWHEpOworKwlpZiAoZSkKKysJCUJOX2Zy ZWUoZSk7CisrCWlmIChyc2EpCisrCQlGSVBTX3JzYV9mcmVlKHJzYSk7CisrCisrCXJldHVybiBy ZXQ7CisrCisrCXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNl IGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7Cisr CisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwK KysJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwKKysJCUJJR05VTSAqZSkK KysJeworKwlpbnQgcmV0ID0gMDsKKysJQklHTlVNICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7Cisr CXAxID0gQk5fbmV3KCk7CisrCXAyID0gQk5fbmV3KCk7CisrCWlmICghcDEgfHwgIXAyKQorKwkJ Z290byBlcnJvcjsKKysKKysJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBwMSwgcDIsIE5V TEwsIE5VTEwsIFhwMSwgWHAyLCBYcCwKKysJCQkJCQlOVUxMLCBOVUxMLCBOVUxMLCBlLCBOVUxM KSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicDEiLCBwMSk7 CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicDIiLCBwMik7CisrCWRvX2JuX3ByaW50X25hbWUo b3V0LCAicCIsIHJzYS0+cCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAocDEp CisrCQlCTl9mcmVlKHAxKTsKKysJaWYgKHAyKQorKwkJQk5fZnJlZShwMik7CisrCisrCXJldHVy biByZXQ7CisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmludGtleTIoRklMRSAqb3V0LCBSU0Eg KnJzYSwKKysJCUJJR05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklHTlVNICpYcSkKKysJeworKwlp bnQgcmV0ID0gMDsKKysJQklHTlVNICpxMSA9IE5VTEwsICpxMiA9IE5VTEw7CisrCXExID0gQk5f bmV3KCk7CisrCXEyID0gQk5fbmV3KCk7CisrCWlmICghcTEgfHwgIXEyKQorKwkJZ290byBlcnJv cjsKKysKKysJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBxMSwgcTIs IE5VTEwsIE5VTEwsIE5VTEwsCisrCQkJCQkJWHExLCBYcTIsIFhxLCBOVUxMLCBOVUxMKSkKKysJ CWdvdG8gZXJyb3I7CisrCisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicTEiLCBxMSk7CisrCWRv X2JuX3ByaW50X25hbWUob3V0LCAicTIiLCBxMik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAi cSIsIHJzYS0+cSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAibiIsIHJzYS0+bik7CisrCWRv X2JuX3ByaW50X25hbWUob3V0LCAiZCIsIHJzYS0+ZCk7CisrCisrCXJldCA9IDE7CisrCisrCWVy cm9yOgorKwlpZiAocTEpCisrCQlCTl9mcmVlKHExKTsKKysJaWYgKHEyKQorKwkJQk5fZnJlZShx Mik7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIC9kZXYvbnVs bCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCist LS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYwkyMDA5LTEx LTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwzNzAgQEAKKysvKiBmaXBz X3JzYXN0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZl QG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K KysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgor KyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5 QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4g YnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysj aW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5n Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBT IFJTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNp bmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyBpbnQgcnNhX3N0ZXN0KEZJTEUgKm91dCwg RklMRSAqaW4sIGludCBTYWx0bGVuKTsKKytzdGF0aWMgaW50IHJzYV9wcmludHNpZyhGSUxFICpv dXQsIFJTQSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2cs IGxvbmcgTXNnbGVuLCBpbnQgU2FsdGxlbik7CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCisrCWludCBy ZXQgPSAxLCBTYWx0bGVuID0gLTE7CisrCisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJewor KwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKChhcmdj ID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4g PSBhdG9pKGFyZ3ZbMl0pOworKwkJaWYgKFNhbHRsZW4gPCAwKQorKwkJCXsKKysJCQlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4iKTsKKysJCQlnb3RvIGVuZDsK KysJCQl9CisrCQlhcmdjIC09IDI7CisrCQlhcmd2ICs9IDI7CisrCQl9CisrCWVsc2UgaWYgKChh cmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4g PSAtMjsKKysJCWFyZ2MtLTsKKysJCWFyZ3YrKzsKKysJCX0KKysKKysJaWYgKGFyZ2MgPT0gMSkK KysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKysK KysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBmb3Bl bihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIs ICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJ CX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1 dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYg KCFyc2Ffc3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwg IkZBVEFMIFJTQVNURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsK KysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAocmV0KQorKwkJ ZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJZmNs b3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0KTsK KysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgUlNBX1RFU1RfTUFYTElORUxF TgkxMDI0MAorKworK2ludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRs ZW4pCisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKKysJUlNBICpyc2EgPSBOVUxMOworKwljb25zdCBFVlBfTUQgKmRnc3Qg PSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMOworKwlsb25nIE1zZ2xlbiA9IC0x OworKwlpbnQga2V5bGVuID0gLTEsIGN1cnJlbnRfa2V5bGVuID0gLTE7CisrCWludCByZXQgPSAw OworKwlpbnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RF U1RfTUFYTElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhM SU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7 CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQor KwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdv cmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNz cGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyog TG9vayBmb3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkv KiBJZiBubyA9IGp1c3QgY29weSAqLworKwkJaWYgKCFwKQorKwkJCXsKKysJCQlpZiAoZnB1dHMo b2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWNvbnRpbnVlOworKwkJ CX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwor KwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKwor KwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNw YWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1 ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZh bHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJCXdoaWxlICgq cCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOwor KworKwkJLyogTG9vayBmb3IgW21vZCA9IFhYWF0gZm9yIGtleSBsZW5ndGggKi8KKysKKysJCWlm ICghc3RyY21wKGtleXdvcmQsICJbbW9kIikpCisrCQkJeworKwkJCXAgPSB2YWx1ZSArIHN0cmxl bih2YWx1ZSkgLSAxOworKwkJCWlmICgqcCAhPSAnXScpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7 CisrCQkJKnAgPSAwOworKwkJCWtleWxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChrZXlsZW4g PCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgIlNIQUFsZyIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTEi KSkKKysJCQkJZGdzdCA9IEVWUF9zaGExKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwg IlNIQTIyNCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOworKwkJCWVsc2UgaWYgKCFzdHJj bXAodmFsdWUsICJTSEEyNTYiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKKysJCQllbHNl IGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMzg0KCk7 CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQorKwkJCQlkZ3N0ID0gRVZQ X3NoYTUxMigpOworKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwKKysJCQkJ CSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKKysJCQkJCQkJCXZhbHVl KTsKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9 ICcwJzsKKysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOworKwkJCWlmICghTXNn KQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysKKysJCWZwdXRzKG9saW5lYnVmLCBv dXQpOworKworKwkJLyogSWYga2V5IGxlbmd0aCBoYXMgY2hhbmdlZCwgZ2VuZXJhdGUgYW5kIG91 dHB1dCBwdWJsaWMKKysJCSAqIGtleSBjb21wb25lbnRzIG9mIG5ldyBSU0EgcHJpdmF0ZSBrZXku CisrCQkgKi8KKysKKysJCWlmIChrZXlsZW4gIT0gY3VycmVudF9rZXlsZW4pCisrCQkJeworKwkJ CUJJR05VTSAqYm5fZTsKKysJCQlpZiAocnNhKQorKwkJCQlGSVBTX3JzYV9mcmVlKHJzYSk7Cisr CQkJcnNhID0gRklQU19yc2FfbmV3KCk7CisrCQkJaWYgKCFyc2EpCisrCQkJCWdvdG8gZXJyb3I7 CisrCQkJYm5fZSA9IEJOX25ldygpOworKwkJCWlmICghYm5fZSB8fCAhQk5fc2V0X3dvcmQoYm5f ZSwgMHgxMDAxKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlpZiAoIVJTQV9YOTMxX2dlbmVyYXRl X2tleV9leChyc2EsIGtleWxlbiwgYm5fZSwgTlVMTCkpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJ Qk5fZnJlZShibl9lKTsKKysJCQlmcHV0cygibiA9ICIsIG91dCk7CisrCQkJZG9fYm5fcHJpbnQo b3V0LCByc2EtPm4pOworKwkJCWZwdXRzKCJcbmUgPSAiLCBvdXQpOworKwkJCWRvX2JuX3ByaW50 KG91dCwgcnNhLT5lKTsKKysJCQlmcHV0cygiXG4iLCBvdXQpOworKwkJCWN1cnJlbnRfa2V5bGVu ID0ga2V5bGVuOworKwkJCX0KKysKKysJCWlmIChNc2cgJiYgZGdzdCkKKysJCQl7CisrCQkJaWYg KCFyc2FfcHJpbnRzaWcob3V0LCByc2EsIGRnc3QsIE1zZywgTXNnbGVuLAorKwkJCQkJCQkJU2Fs dGxlbikpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCQkJTXNn ID0gTlVMTDsKKysJCQl9CisrCisrCQl9CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwor KwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1 ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKHJzYSkKKysJCUZJUFNfcnNhX2Zy ZWUocnNhKTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVt KTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQorKworK3N0YXRpYyBpbnQgcnNhX3ByaW50c2ln KEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNo YXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKQorKwl7CisrCWludCByZXQgPSAwOwor Kwl1bnNpZ25lZCBjaGFyICpzaWdidWYgPSBOVUxMOworKwlpbnQgaSwgc2lnbGVuOworKwkvKiBF VlBfUEtFWSBzdHJ1Y3R1cmUgKi8KKysJRVZQX1BLRVkgcGs7CisrCUVWUF9NRF9DVFggY3R4Owor Kwlway50eXBlID0gRVZQX1BLRVlfUlNBOworKwlway5wa2V5LnJzYSA9IHJzYTsKKysKKysJc2ln bGVuID0gUlNBX3NpemUocnNhKTsKKysJc2lnYnVmID0gT1BFTlNTTF9tYWxsb2Moc2lnbGVuKTsK KysJaWYgKCFzaWdidWYpCisrCQlnb3RvIGVycm9yOworKworKwlFVlBfTURfQ1RYX2luaXQoJmN0 eCk7CisrCisrCWlmIChTYWx0bGVuID49IDApCisrCQl7CisrCQlNX0VWUF9NRF9DVFhfc2V0X2Zs YWdzKCZjdHgsCisrCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgfCAoU2FsdGxlbiA8PCAxNikp OworKwkJfQorKwllbHNlIGlmIChTYWx0bGVuID09IC0yKQorKwkJTV9FVlBfTURfQ1RYX3NldF9m bGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOworKwlpZiAoIUVWUF9TaWduSW5p dF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25V cGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBfU2ln bkZpbmFsKCZjdHgsIHNpZ2J1ZiwgKHVuc2lnbmVkIGludCAqKSZzaWdsZW4sICZwaykpCisrCQln b3RvIGVycm9yOworKworKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWZwdXRzKCJT ID0gIiwgb3V0KTsKKysKKysJZm9yIChpID0gMDsgaSA8IHNpZ2xlbjsgaSsrKQorKwkJZnByaW50 ZihvdXQsICIlMDJYIiwgc2lnYnVmW2ldKTsKKysKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysKKysJ cmV0ID0gMTsKKysKKysJZXJyb3I6CisrCisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2Rp ZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlw c19yc2F2dGVzdC5jCistLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2 ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNh dnRlc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwz NzcgQEAKKysvKiBmaXBzX3JzYXZ0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g TiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0 IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisr ICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu CisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlz IHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMg WW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisr ICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrCisrI2lmbmRlZiBPUEVO U1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAg cHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysK KysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK2ludCByc2FfdGVzdChGSUxF ICpvdXQsIEZJTEUgKmluLCBpbnQgc2FsdGxlbik7Cisrc3RhdGljIGludCByc2FfcHJpbnR2ZXIo RklMRSAqb3V0LAorKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCisrCQljb25zdCBFVlBfTUQgKmRn c3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLAorKwkJdW5zaWduZWQgY2hh ciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbik7CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCisrCWlu dCByZXQgPSAxOworKwlpbnQgU2FsdGxlbiA9IC0xOworKworKwlpZighRklQU19tb2RlX3NldCgx KSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisr CWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwgYXJndlsxXSkpCisrCQl7Cisr CQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKKysJCWlmIChTYWx0bGVuIDwgMCkKKysJCQl7Cisr CQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0IGxlbmd0aFxuIik7CisrCQkJ Z290byBlbmQ7CisrCQkJfQorKwkJYXJnYyAtPSAyOworKwkJYXJndiArPSAyOworKwkJfQorKwll bHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwgYXJndlsxXSkpCisrCQl7Cisr CQlTYWx0bGVuID0gLTI7CisrCQlhcmdjLS07CisrCQlhcmd2Kys7CisrCQl9CisrCisrCWlmIChh cmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0s ICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJ b3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290 byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJG QVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9 CisrCisrCWlmICghcnNhX3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIFJTQVZURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQln b3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAo cmV0KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4p KQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xv c2Uob3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgUlNBX1RFU1Rf TUFYTElORUxFTgkxMDI0MAorKworK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBp bnQgU2FsdGxlbikKKysJeworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJ Y2hhciAqa2V5d29yZCwgKnZhbHVlOworKwljb25zdCBFVlBfTUQgKmRnc3QgPSBOVUxMOworKwlC SUdOVU0gKm4gPSBOVUxMLCAqZSA9IE5VTEw7CisrCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEws ICpTID0gTlVMTDsKKysJbG9uZyBNc2dsZW4sIFNsZW47CisrCWludCByZXQgPSAwOworKwlpbnQg bG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElO RUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsK KysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCXdo aWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJ bG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5l YnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5z aWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBmb3Ig PSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9 IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8KKysJ CWlmICghcCB8fCAqa2V5d29yZD09J1snKQorKwkJCXsKKysJCQlpZiAoZnB1dHMob2xpbmVidWYs IG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJ CXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUg KGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAw OworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20g dmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJ dmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisr CQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJCXdoaWxlICgqcCA9PSAnXG4n IHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJaWYg KCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJm4sdmFs dWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgImUiKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJmUsdmFsdWUpKQorKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg IlNIQUFsZyIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTEiKSkKKysJCQkJ ZGdzdCA9IEVWUF9zaGExKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTIyNCIp KQorKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUs ICJTSEEyNTYiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKKysJCQllbHNlIGlmICghc3Ry Y21wKHZhbHVlLCAiU0hBMzg0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMzg0KCk7CisrCQkJZWxz ZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTUxMigp OworKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwKKysJCQkJCSJGQVRBTDog dW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKKysJCQkJCQkJCXZhbHVlKTsKKysJCQkJ Z290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJ CQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOworKwkJCWlmICghTXNnKQorKwkJCQln b3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlMi KSkKKysJCQl7CisrCQkJaWYgKFMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKHN0 cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOworKwkJCVMgPSBoZXgyYmlu X20odmFsdWUsICZTbGVuKTsKKysJCQlpZiAoIVMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUmVzdWx0IikpCisrCQkJY29udGlu dWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5lYnVm LCBvdXQpOworKworKwkJaWYgKG4gJiYgZSAmJiBNc2cgJiYgUyAmJiBkZ3N0KQorKwkJCXsKKysJ CQlpZiAoIXJzYV9wcmludHZlcihvdXQsIG4sIGUsIGRnc3QsCisrCQkJCQlNc2csIE1zZ2xlbiwg UywgU2xlbiwgU2FsdGxlbikpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVlKE1z Zyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQlPUEVOU1NMX2ZyZWUoUyk7CisrCQkJUyA9IE5VTEw7 CisrCQkJfQorKworKwkJfQorKworKworKwlyZXQgPSAxOworKworKworKwllcnJvcjoKKysKKysJ aWYgKG9saW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYp CisrCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChuKQorKwkJQk5fZnJlZShuKTsKKysJ aWYgKGUpCisrCQlCTl9mcmVlKGUpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJv cjoKKysKKysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxp bmUgJWRcbiIsIGxudW0pOworKworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGlu dCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAorKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCisrCQlj b25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLAor KwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbikKKysJeworKwlpbnQg cmV0ID0gMCwgcjsKKysJLyogU2V0dXAgUlNBIGFuZCBFVlBfUEtFWSBzdHJ1Y3R1cmVzICovCisr CVJTQSAqcnNhX3B1YmtleSA9IE5VTEw7CisrCUVWUF9QS0VZIHBrOworKwlFVlBfTURfQ1RYIGN0 eDsKKysJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKysJcnNhX3B1YmtleSA9IEZJUFNfcnNh X25ldygpOworKwlpZiAoIXJzYV9wdWJrZXkpCisrCQlnb3RvIGVycm9yOworKwlyc2FfcHVia2V5 LT5uID0gQk5fZHVwKG4pOworKwlyc2FfcHVia2V5LT5lID0gQk5fZHVwKGUpOworKwlpZiAoIXJz YV9wdWJrZXktPm4gfHwgIXJzYV9wdWJrZXktPmUpCisrCQlnb3RvIGVycm9yOworKwlway50eXBl ID0gRVZQX1BLRVlfUlNBOworKwlway5wa2V5LnJzYSA9IHJzYV9wdWJrZXk7CisrCisrCUVWUF9N RF9DVFhfaW5pdCgmY3R4KTsKKysKKysJaWYgKFNhbHRsZW4gPj0gMCkKKysJCXsKKysJCU1fRVZQ X01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKKysJCQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChT YWx0bGVuIDw8IDE2KSk7CisrCQl9CisrCWVsc2UgaWYgKFNhbHRsZW4gPT0gLTIpCisrCQlNX0VW UF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSk7CisrCWlm ICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOwor KwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQorKwkJZ290byBlcnJv cjsKKysKKysJciA9IEVWUF9WZXJpZnlGaW5hbCgmY3R4LCBTLCBTbGVuLCAmcGspOworKworKwor KwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWlmIChyIDwgMCkKKysJCWdvdG8gZXJy b3I7CisrCUVSUl9jbGVhcl9lcnJvcigpOworKworKwlpZiAociA9PSAwKQorKwkJZnB1dHMoIlJl c3VsdCA9IEZcbiIsIG91dCk7CisrCWVsc2UKKysJCWZwdXRzKCJSZXN1bHQgPSBQXG4iLCBvdXQp OworKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysJaWYgKHJzYV9wdWJrZXkpCisrCQlGSVBT X3JzYV9mcmVlKHJzYV9wdWJrZXkpOworKwlpZiAoYnVmKQorKwkJT1BFTlNTTF9mcmVlKGJ1Zik7 CisrCisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIC9kZXYvbnVsbCBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMKKy0tLSAvZGV2 L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMJMjAwOS0xMS0xMiAxMjoz Njo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMzg4IEBACisrLyogZmlwc19zaGF0ZXN0 LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wu b3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBh cmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAq CisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2lu Z0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisr ICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisr ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRv Z3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29m dC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisr ICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8 c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC94NTA5djMuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgU0hBWFhY IHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1 ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIGludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxF ICppbik7Cisrc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91 dCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbik7Cisrc3RhdGljIGludCBwcmlu dF9tb250ZShjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpT ZWVkLCBpbnQgU2VlZExlbik7CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor Kwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCisrCWludCByZXQgPSAxOwor KworKwlpZighRklQU19tb2RlX3NldCgxKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOwor KwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOwor KwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikK KysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsK KysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5p dGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0 KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24g ZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghZGdzdF90ZXN0KG91dCwg aW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBkaWdlc3QgZmlsZSBwcm9jZXNz aW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOwor KworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYg KGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQg IT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9Cisr CisrI2RlZmluZSBTSEFfVEVTVF9NQVhfQklUUwkxMDI0MDAKKysjZGVmaW5lIFNIQV9URVNUX01B WExJTkVMRU4JKCgoU0hBX1RFU1RfTUFYX0JJVFMgPj4gMykgKiAyKSArIDEwMCkKKysKKytpbnQg ZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pCisrCXsKKysJY29uc3QgRVZQX01EICptZCA9 IE5VTEw7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3 b3JkLCAqdmFsdWU7CisrCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEwsICpTZWVkID0gTlVMTDsK KysJbG9uZyBNc2dMZW4gPSAtMSwgTGVuID0gLTEsIFNlZWRMZW4gPSAtMTsKKysJaW50IHJldCA9 IDA7CisrCWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhTSEFf VEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01B WExJTkVMRU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJv cjsKKysKKysKKysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBTSEFfVEVTVF9NQVhMSU5FTEVOLCBp bikpCisrCQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJ a2V5d29yZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisr CQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysK KysJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtMPTIwXSBsaW5lKSBqdXN0IGNv cHkgKi8KKysJCWlmICghcCkKKysJCQl7CisrCQkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCQkJ Y29udGludWU7CisrCQkJfQorKworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWls aW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJ KnEtLSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVt b3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5n IHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwor KwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJ KnAtLSA9IDA7CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJbTCIpICYmICpwPT0nXScpCisr CQkJeworKwkJCXN3aXRjaCAoYXRvaSh2YWx1ZSkpCisrCQkJCXsKKysJCQkJY2FzZSAyMDogbWQ9 RVZQX3NoYTEoKTsgICBicmVhazsKKysJCQkJY2FzZSAyODogbWQ9RVZQX3NoYTIyNCgpOyBicmVh azsKKysJCQkJY2FzZSAzMjogbWQ9RVZQX3NoYTI1NigpOyBicmVhazsKKysJCQkJY2FzZSA0ODog bWQ9RVZQX3NoYTM4NCgpOyBicmVhazsKKysJCQkJY2FzZSA2NDogbWQ9RVZQX3NoYTUxMigpOyBi cmVhazsKKysJCQkJZGVmYXVsdDogZ290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkxlbiIpKQorKwkJCXsKKysJCQlpZiAoTGVuICE9 IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCUxlbiA9IGF0b2kodmFsdWUpOworKwkJ CWlmIChMZW4gPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCS8qIE9ubHkgaGFuZGxl IG11bHRpcGxlcyBvZiA4IGJpdHMgKi8KKysJCQlpZiAoTGVuICYgMHg3KQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCWlmIChMZW4gPiBTSEFfVEVTVF9NQVhfQklUUykKKysJCQkJZ290byBw YXJzZV9lcnJvcjsKKysJCQlNc2dMZW4gPSBMZW4gPj4gMzsKKysJCQl9CisrCisrCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKKysJCQl7CisrCQkJbG9uZyB0bXBsZW47CisrCQkJ aWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOworKwkJCWlmIChN c2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAm dG1wbGVuKTsKKysJCQlpZiAoIU1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9Cisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTZWVkIikpCisrCQkJeworKwkJCWlmIChzdHJs ZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlpZiAoU2VlZCkKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlTZWVkID0gaGV4MmJpbl9tKHZhbHVlLCAmU2VlZExl bik7CisrCQkJaWYgKCFTZWVkKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1EIikpCisrCQkJY29udGludWU7CisrCQllbHNlCisr CQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJ aWYgKG1kICYmIE1zZyAmJiAoTXNnTGVuID49IDApKQorKwkJCXsKKysJCQlpZiAoIXByaW50X2Rn c3QobWQsIG91dCwgTXNnLCBNc2dMZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xf ZnJlZShNc2cpOworKwkJCU1zZyA9IE5VTEw7CisrCQkJTXNnTGVuID0gLTE7CisrCQkJTGVuID0g LTE7CisrCQkJfQorKwkJZWxzZSBpZiAobWQgJiYgU2VlZCAmJiAoU2VlZExlbiA+IDApKQorKwkJ CXsKKysJCQlpZiAoIXByaW50X21vbnRlKG1kLCBvdXQsIFNlZWQsIFNlZWRMZW4pKQorKwkJCQln b3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShTZWVkKTsKKysJCQlTZWVkID0gTlVMTDsKKysJ CQlTZWVkTGVuID0gLTE7CisrCQkJfQorKwkKKysKKysJCX0KKysKKysKKysJcmV0ID0gMTsKKysK KysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShvbGluZWJ1 Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOworKwlpZiAoTXNn KQorKwkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCWlmIChTZWVkKQorKwkJT1BFTlNTTF9mcmVlKFNl ZWQpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50Zihz dGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwor KworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0 IEVWUF9NRCAqZW1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2ds ZW4pCisrCXsKKysJaW50IGksIG1kbGVuOworKwl1bnNpZ25lZCBjaGFyIG1kW0VWUF9NQVhfTURf U0laRV07CisrCWlmICghRVZQX0RpZ2VzdChNc2csIE1zZ2xlbiwgbWQsICh1bnNpZ25lZCBpbnQg KikmbWRsZW4sIGVtZCwgTlVMTCkpCisrCQl7CisrCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcg SEFTSFxuIiwgc3RkZXJyKTsKKysJCXJldHVybiAwOworKwkJfQorKwlmcHV0cygiTUQgPSAiLCBv dXQpOworKwlmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKKysJCWZwcmludGYob3V0LCAiJTAy eCIsIG1kW2ldKTsKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytz dGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKKysJCXVu c2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKQorKwl7CisrCXVuc2lnbmVkIGludCBpLCBq LCBrOworKwlpbnQgcmV0ID0gMDsKKysJRVZQX01EX0NUWCBjdHg7CisrCXVuc2lnbmVkIGNoYXIg Km0xLCAqbTIsICptMywgKnA7CisrCXVuc2lnbmVkIGludCBtbGVuLCBtMWxlbiwgbTJsZW4sIG0z bGVuOworKworKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7CisrCisrCWlmIChTZWVkTGVuID4gRVZQ X01BWF9NRF9TSVpFKQorKwkJbWxlbiA9IFNlZWRMZW47CisrCWVsc2UKKysJCW1sZW4gPSBFVlBf TUFYX01EX1NJWkU7CisrCisrCW0xID0gT1BFTlNTTF9tYWxsb2MobWxlbik7CisrCW0yID0gT1BF TlNTTF9tYWxsb2MobWxlbik7CisrCW0zID0gT1BFTlNTTF9tYWxsb2MobWxlbik7CisrCisrCWlm ICghbTEgfHwgIW0yIHx8ICFtMykKKysJCWdvdG8gbWNfZXJyb3I7CisrCisrCW0xbGVuID0gbTJs ZW4gPSBtM2xlbiA9IFNlZWRMZW47CisrCW1lbWNweShtMSwgU2VlZCwgU2VlZExlbik7CisrCW1l bWNweShtMiwgU2VlZCwgU2VlZExlbik7CisrCW1lbWNweShtMywgU2VlZCwgU2VlZExlbik7Cisr CisrCWZwdXRzKCJcbiIsIG91dCk7CisrCisrCWZvciAoaiA9IDA7IGogPCAxMDA7IGorKykKKysJ CXsKKysJCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspCisrCQkJeworKwkJCUVWUF9EaWdlc3RJ bml0X2V4KCZjdHgsIG1kLCBOVUxMKTsKKysJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0xLCBt MWxlbik7CisrCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMiwgbTJsZW4pOworKwkJCUVWUF9E aWdlc3RVcGRhdGUoJmN0eCwgbTMsIG0zbGVuKTsKKysJCQlwID0gbTE7CisrCQkJbTEgPSBtMjsK KysJCQltMWxlbiA9IG0ybGVuOworKwkJCW0yID0gbTM7CisrCQkJbTJsZW4gPSBtM2xlbjsKKysJ CQltMyA9IHA7CisrCQkJRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgsIG0zLCAmbTNsZW4pOworKwkJ CX0KKysJCWZwcmludGYob3V0LCAiQ09VTlQgPSAlZFxuIiwgaik7CisrCQlmcHV0cygiTUQgPSAi LCBvdXQpOworKwkJZm9yIChrID0gMDsgayA8IG0zbGVuOyBrKyspCisrCQkJZnByaW50ZihvdXQs ICIlMDJ4IiwgbTNba10pOworKwkJZnB1dHMoIlxuXG4iLCBvdXQpOworKwkJbWVtY3B5KG0xLCBt MywgbTNsZW4pOworKwkJbWVtY3B5KG0yLCBtMywgbTNsZW4pOworKwkJbTFsZW4gPSBtMmxlbiA9 IG0zbGVuOworKwkJfQorKworKwlyZXQgPSAxOworKworKwltY19lcnJvcjoKKysJaWYgKG0xKQor KwkJT1BFTlNTTF9mcmVlKG0xKTsKKysJaWYgKG0yKQorKwkJT1BFTlNTTF9mcmVlKG0yKTsKKysJ aWYgKG0zKQorKwkJT1BFTlNTTF9mcmVlKG0zKTsKKysKKysJRVZQX01EX0NUWF9jbGVhbnVwKCZj dHgpOworKworKwlyZXR1cm4gcmV0OworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCAvZGV2L251 bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmgKKy0tLSAv ZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaAkyMDA5LTExLTEyIDEyOjM2 OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwzNDMgQEAKKysvKiA9PT09PT09PT09PT09 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 ICoKKysgKi8KKysKKyt2b2lkIGRvX3ByaW50X2Vycm9ycyh2b2lkKQorKwl7CisrCWNvbnN0IGNo YXIgKmZpbGUsICpkYXRhOworKwlpbnQgbGluZSwgZmxhZ3M7CisrCXVuc2lnbmVkIGxvbmcgbDsK KysJd2hpbGUgKChsID0gRVJSX2dldF9lcnJvcl9saW5lX2RhdGEoJmZpbGUsICZsaW5lLCAmZGF0 YSwgJmZsYWdzKSkpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiVseDpsaWI9JWQs ZnVuYz0lZCxyZWFzb249JWQiCisrCQkJCSI6ZmlsZT0lczpsaW5lPSVkOiVzXG4iLAorKwkJCWws IEVSUl9HRVRfTElCKGwpLCBFUlJfR0VUX0ZVTkMobCksIEVSUl9HRVRfUkVBU09OKGwpLAorKwkJ CWZpbGUsIGxpbmUsIGZsYWdzICYgRVJSX1RYVF9TVFJJTkcgPyBkYXRhIDogIiIpOworKwkJfQor Kwl9CisrCisraW50IGhleDJiaW4oY29uc3QgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCkK KysgICAgeworKyAgICBpbnQgbjEsIG4yOworKyAgICB1bnNpZ25lZCBjaGFyIGNoOworKworKyAg ICBmb3IgKG4xPTAsbjI9MCA7IGluW24xXSAmJiBpbltuMV0gIT0gJ1xuJyA7ICkKKysJeyAvKiBm aXJzdCBieXRlICovCisrCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScpKQor KwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAnQScpICYm IChpbltuMV0gPD0gJ0YnKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKKysJZWxz ZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKKysJICAgIGNoID0gaW5b bjErK10gLSAnYScgKyAxMDsKKysJZWxzZQorKwkgICAgcmV0dXJuIC0xOworKwlpZighaW5bbjFd KQorKwkgICAgeworKwkgICAgb3V0W24yKytdPWNoOworKwkgICAgYnJlYWs7CisrCSAgICB9Cisr CW91dFtuMl0gPSBjaCA8PCA0OworKwkvKiBzZWNvbmQgYnl0ZSAqLworKwlpZiAoKGluW24xXSA+ PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnMCc7Cisr CWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAmJiAoaW5bbjFdIDw9ICdGJykpCisrCSAgICBjaCA9 IGluW24xKytdIC0gJ0EnICsgMTA7CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ2EnKSAmJiAoaW5b bjFdIDw9ICdmJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ2EnICsgMTA7CisrCWVsc2UKKysJ ICAgIHJldHVybiAtMTsKKysJb3V0W24yKytdIHw9IGNoOworKwl9CisrICAgIHJldHVybiBuMjsK KysgICAgfQorKworK3Vuc2lnbmVkIGNoYXIgKmhleDJiaW5fbShjb25zdCBjaGFyICppbiwgbG9u ZyAqcGxlbikKKysJeworKwl1bnNpZ25lZCBjaGFyICpwOworKwlwID0gT1BFTlNTTF9tYWxsb2Mo KHN0cmxlbihpbikgKyAxKS8yKTsKKysJKnBsZW4gPSBoZXgyYmluKGluLCBwKTsKKysJcmV0dXJu IHA7CisrCX0KKysKKytpbnQgZG9faGV4MmJuKEJJR05VTSAqKnByLCBjb25zdCBjaGFyICppbikK KysJeworKwl1bnNpZ25lZCBjaGFyICpwOworKwlsb25nIHBsZW47CisrCWludCByID0gMDsKKysJ cCA9IGhleDJiaW5fbShpbiwgJnBsZW4pOworKwlpZiAoIXApCisrCQlyZXR1cm4gMDsKKysJaWYg KCEqcHIpCisrCQkqcHIgPSBCTl9uZXcoKTsKKysJaWYgKCEqcHIpCisrCQlyZXR1cm4gMDsKKysJ aWYgKEJOX2JpbjJibihwLCBwbGVuLCAqcHIpKQorKwkJciA9IDE7CisrCU9QRU5TU0xfZnJlZShw KTsKKysJcmV0dXJuIHI7CisrCX0KKysKKytpbnQgZG9fYm5fcHJpbnQoRklMRSAqb3V0LCBCSUdO VU0gKmJuKQorKwl7CisrCWludCBsZW4sIGk7CisrCXVuc2lnbmVkIGNoYXIgKnRtcDsKKysJbGVu ID0gQk5fbnVtX2J5dGVzKGJuKTsKKysJaWYgKGxlbiA9PSAwKQorKwkJeworKwkJZnB1dHMoIjAw Iiwgb3V0KTsKKysJCXJldHVybiAxOworKwkJfQorKworKwl0bXAgPSBPUEVOU1NMX21hbGxvYyhs ZW4pOworKwlpZiAoIXRtcCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFsbG9j YXRpb24gZXJyb3JcbiIpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCUJOX2JuMmJpbihibiwgdG1w KTsKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorKwkJZnByaW50ZihvdXQsICIlMDJ4Iiwg dG1wW2ldKTsKKysJT1BFTlNTTF9mcmVlKHRtcCk7CisrCXJldHVybiAxOworKwl9CisrCisraW50 IGRvX2JuX3ByaW50X25hbWUoRklMRSAqb3V0LCBjb25zdCBjaGFyICpuYW1lLCBCSUdOVU0gKmJu KQorKwl7CisrCWludCByOworKwlmcHJpbnRmKG91dCwgIiVzID0gIiwgbmFtZSk7CisrCXIgPSBk b19ibl9wcmludChvdXQsIGJuKTsKKysJaWYgKCFyKQorKwkJcmV0dXJuIDA7CisrCWZwdXRzKCJc biIsIG91dCk7CisrCXJldHVybiAxOworKwl9CisrCisraW50IHBhcnNlX2xpbmUoY2hhciAqKnBr dywgY2hhciAqKnB2YWwsIGNoYXIgKmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQorKwl7CisrCWNo YXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOworKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYp OworKwlrZXl3b3JkID0gbGluZWJ1ZjsKKysJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCXdo aWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCWtleXdvcmQrKzsKKysK KysJLyogTG9vayBmb3IgPSBzaWduICovCisrCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysK KysJLyogSWYgbm8gJz0nIGV4aXQgKi8KKysJaWYgKCFwKQorKwkJcmV0dXJuIDA7CisrCisrCXEg PSBwIC0gMTsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCSpxLS0gPSAwOworKworKwkqcCA9IDA7CisrCXZh bHVlID0gcCArIDE7CisrCisrCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8K KysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCXZhbHVlKys7Cisr CisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXAgPSB2YWx1ZSAr IHN0cmxlbih2YWx1ZSkgLSAxOworKworKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSpwKSkKKysJCSpwLS0gPSAwOworKworKwkqcGt3ID0ga2V5d29yZDsKKysJ KnB2YWwgPSB2YWx1ZTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytCSUdOVU0gKmhleDJibihjb25z dCBjaGFyICppbikKKysgICAgeworKyAgICBCSUdOVU0gKnA9TlVMTDsKKysKKysgICAgaWYgKCFk b19oZXgyYm4oJnAsIGluKSkKKysJcmV0dXJuIE5VTEw7CisrCisrICAgIHJldHVybiBwOworKyAg ICB9CisrCisraW50IGJpbjJoZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxlbixjaGFy ICpvdXQpCisrICAgIHsKKysgICAgaW50IG4xLCBuMjsKKysgICAgdW5zaWduZWQgY2hhciBjaDsK KysKKysgICAgZm9yIChuMT0wLG4yPTAgOyBuMSA8IGxlbiA7ICsrbjEpCisrCXsKKysJY2g9aW5b bjFdID4+IDQ7CisrCWlmIChjaCA8PSAweDA5KQorKwkgICAgb3V0W24yKytdPWNoKycwJzsKKysJ ZWxzZQorKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsKKysJY2g9aW5bbjFdICYgMHgwZjsKKysJ aWYoY2ggPD0gMHgwOSkKKysJICAgIG91dFtuMisrXT1jaCsnMCc7CisrCWVsc2UKKysJICAgIG91 dFtuMisrXT1jaC0xMCsnYSc7CisrCX0KKysgICAgb3V0W24yXT0nXDAnOworKyAgICByZXR1cm4g bjI7CisrICAgIH0KKysKKyt2b2lkIHB2KGNvbnN0IGNoYXIgKnRhZyxjb25zdCB1bnNpZ25lZCBj aGFyICp2YWwsaW50IGxlbikKKysgICAgeworKyAgICBjaGFyIG9idWZbMjA0OF07CisrCisrICAg IGJpbjJoZXgodmFsLGxlbixvYnVmKTsKKysgICAgcHJpbnRmKCIlcyA9ICVzXG4iLHRhZyxvYnVm KTsKKysgICAgfQorKworKy8qIFRvIGF2b2lkIGV4dGVuc2l2ZSBjaGFuZ2VzIHRvIHRlc3QgcHJv Z3JhbSBhdCB0aGlzIHN0YWdlIGp1c3QgY29udmVydAorKyAqIHRoZSBpbnB1dCBsaW5lIGludG8g YW4gYWNjZXB0YWJsZSBmb3JtLiBLZXl3b3JkIGxpbmVzIGNvbnZlcnRlZCB0byBmb3JtCisrICog ImtleXdvcmQgPSB2YWx1ZVxuIiBubyBtYXR0ZXIgd2hhdCB3aGl0ZSBzcGFjZSBwcmVzZW50LCBh bGwgb3RoZXIgbGluZXMKKysgKiBqdXN0IGhhdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2Ug cmVtb3ZlZC4KKysgKi8KKysKKytpbnQgdGlkeV9saW5lKGNoYXIgKmxpbmVidWYsIGNoYXIgKm9s aW5lYnVmKQorKwl7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOworKwlzdHJjcHko bGluZWJ1Ziwgb2xpbmVidWYpOworKwlrZXl3b3JkID0gbGluZWJ1ZjsKKysJLyogU2tpcCBsZWFk aW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkK KysJCWtleXdvcmQrKzsKKysJLyogTG9vayBmb3IgPSBzaWduICovCisrCXAgPSBzdHJjaHIobGlu ZWJ1ZiwgJz0nKTsKKysKKysJLyogSWYgbm8gJz0nIGp1c3QgY2hvcCBsZWFkaW5nLCB0cmFpbGlu ZyB3cyAqLworKwlpZiAoIXApCisrCQl7CisrCQlwID0ga2V5d29yZCArIHN0cmxlbihrZXl3b3Jk KSAtIDE7CisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpw KSkKKysJCQkqcC0tID0gMDsKKysJCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7CisrCQlzdHJj YXQob2xpbmVidWYsICJcbiIpOworKwkJcmV0dXJuIDE7CisrCQl9CisrCisrCXEgPSBwIC0gMTsK KysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSpxKSkKKysJCSpxLS0gPSAwOworKworKwkqcCA9IDA7CisrCXZhbHVlID0gcCAr IDE7CisrCisrCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJd2hpbGUg KGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCXZhbHVlKys7CisrCisrCS8qIFJl bW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXAgPSB2YWx1ZSArIHN0cmxlbih2 YWx1ZSkgLSAxOworKworKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBj aGFyKSpwKSkKKysJCSpwLS0gPSAwOworKworKwlzdHJjcHkob2xpbmVidWYsIGtleXdvcmQpOwor KwlzdHJjYXQob2xpbmVidWYsICIgPSAiKTsKKysJc3RyY2F0KG9saW5lYnVmLCB2YWx1ZSk7Cisr CXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7CisrCisrCXJldHVybiAxOworKwl9CisrCisrLyogTkI6 IHRoaXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgX2JpdHNfIHJlYWQgKi8KKytpbnQgYmludDJiaW4o Y29uc3QgY2hhciAqaW4sIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKKysgICAgeworKyAg ICBpbnQgbjsKKysKKysgICAgbWVtc2V0KG91dCwwLGxlbik7CisrICAgIGZvcihuPTAgOyBuIDwg bGVuIDsgKytuKQorKwlpZihpbltuXSA9PSAnMScpCisrCSAgICBvdXRbbi84XXw9KDB4ODAgPj4g KG4lOCkpOworKyAgICByZXR1cm4gbGVuOworKyAgICB9CisrCisraW50IGJpbjJiaW50KGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hhciAqb3V0KQorKyAgICB7CisrICAgIGludCBu OworKworKyAgICBmb3Iobj0wIDsgbiA8IGxlbiA7ICsrbikKKysJb3V0W25dPShpbltuLzhdJigw eDgwID4+IChuJTgpKSkgPyAnMScgOiAnMCc7CisrICAgIHJldHVybiBuOworKyAgICB9CisrCisr LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisr dm9pZCBQcmludFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVuKQor K3sKKysjaWYgVkVSQk9TRQorKyAgY2hhciBvYnVmWzIwNDhdOworKyAgaW50IG9sZW47CisrICBv bGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1Zik7CisrICBwcmludGYoIiVzID0gJS4qc1xuIiwg dGFnLCBvbGVuLCBvYnVmKTsKKysjZW5kaWYKKyt9CisrCisrdm9pZCBPdXRwdXRWYWx1ZShjaGFy ICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbiwgRklMRSAqcmZwLGludCBiaXRtb2Rl KQorKyAgICB7CisrICAgIGNoYXIgb2J1ZlsyMDQ4XTsKKysgICAgaW50IG9sZW47CisrCisrICAg IGlmKGJpdG1vZGUpCisrCW9sZW49YmluMmJpbnQodmFsLGxlbixvYnVmKTsKKysgICAgZWxzZQor KwlvbGVuPWJpbjJoZXgodmFsLGxlbixvYnVmKTsKKysKKysgICAgZnByaW50ZihyZnAsICIlcyA9 ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7CisrI2lmIFZFUkJPU0UKKysgICAgcHJpbnRmKCIl cyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7CisrI2VuZGlmCisrICAgIH0KKysKK2RpZmYg LXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzX2Vyci5jCistLS0g L2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCisrKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwc19lcnIuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAw MDAwMCArMDEwMAorQEAgLTAsMCArMSw3IEBACisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNv bmYuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrIyBpbmNsdWRlICJmaXBzX2Vyci5oIgor KyNlbHNlCisrc3RhdGljIHZvaWQgKmR1bW15PSZkdW1teTsKKysjZW5kaWYKK2RpZmYgLXVwIC9k ZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzX2Vyci5oCistLS0gL2Rldi9u dWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCisrKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZmlwc19lcnIuaAkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCAr MDEwMAorQEAgLTAsMCArMSwxMzcgQEAKKysvKiBjcnlwdG8vZmlwc19lcnIuaCAqLworKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IG9wZW5zc2wtY29yZUBPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5j bHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAo ZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysK KysvKiBOT1RFOiB0aGlzIGZpbGUgd2FzIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBta2Vyci5wbCBz Y3JpcHQ6IGFueSBjaGFuZ2VzCisrICogbWFkZSB0byBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdo ZW4gdGhlIHNjcmlwdCBuZXh0IHVwZGF0ZXMgdGhpcyBmaWxlLAorKyAqIG9ubHkgcmVhc29uIHN0 cmluZ3Mgd2lsbCBiZSBwcmVzZXJ2ZWQuCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKwor Ky8qIEJFR0lOIEVSUk9SIENPREVTICovCisrI2lmbmRlZiBPUEVOU1NMX05PX0VSUgorKworKyNk ZWZpbmUgRVJSX0ZVTkMoZnVuYykgRVJSX1BBQ0soRVJSX0xJQl9GSVBTLGZ1bmMsMCkKKysjZGVm aW5lIEVSUl9SRUFTT04ocmVhc29uKSBFUlJfUEFDSyhFUlJfTElCX0ZJUFMsMCxyZWFzb24pCisr Cisrc3RhdGljIEVSUl9TVFJJTkdfREFUQSBGSVBTX3N0cl9mdW5jdHNbXT0KKysJeworK3tFUlJf RlVOQyhGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMpLAkiREhfQlVJTFRJTl9HRU5QQVJBTVMi fSwKKyt7RVJSX0ZVTkMoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOKSwJIkRTQV9CVUlMVElO X1BBUkFNR0VOIn0sCisre0VSUl9GVU5DKEZJUFNfRl9EU0FfRE9fU0lHTiksCSJEU0FfZG9fc2ln biJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0RPX1ZFUklGWSksCSJEU0FfZG9fdmVyaWZ5In0s Cisre0VSUl9GVU5DKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCksCSJFVlBfQ2lwaGVySW5pdF9l eCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgpLAkiRVZQX0RpZ2VzdElu aXRfZXgifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfQ0hFQ0tfRFNBKSwJIkZJUFNfQ0hFQ0tf RFNBIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVCks CSJGSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRklQ U19DSEVDS19SU0EpLAkiRklQU19DSEVDS19SU0EifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNf RFNBX0NIRUNLKSwJIkZJUFNfRFNBX0NIRUNLIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX01P REVfU0VUKSwJIkZJUFNfbW9kZV9zZXQifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfUEtFWV9T SUdOQVRVUkVfVEVTVCksCSJmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QifSwKKyt7RVJSX0ZVTkMo RklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTKSwJIkZJUFNfc2VsZnRlc3RfYWVzIn0sCisre0VSUl9G VU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUyksCSJGSVBTX3NlbGZ0ZXN0X2RlcyJ9LAorK3tF UlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EpLAkiRklQU19zZWxmdGVzdF9kc2EifSwK Kyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQyksCSJGSVBTX3NlbGZ0ZXN0X2ht YWMifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HKSwJIkZJUFNfc2VsZnRl c3Rfcm5nIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEpLAkiRklQU19z ZWxmdGVzdF9zaGExIn0sCisre0VSUl9GVU5DKEZJUFNfRl9IQVNIX0ZJTkFMKSwJIkhBU0hfRklO QUwifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTiksCSJSU0FfQlVJTFRJ Tl9LRVlHRU4ifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUKSwJ IlJTQV9FQVlfUFJJVkFURV9ERUNSWVBUIn0sCisre0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BS SVZBVEVfRU5DUllQVCksCSJSU0FfRUFZX1BSSVZBVEVfRU5DUllQVCJ9LAorK3tFUlJfRlVOQyhG SVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCksCSJSU0FfRUFZX1BVQkxJQ19ERUNSWVBUIn0s Cisre0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUKSwJIlJTQV9FQVlfUFVC TElDX0VOQ1JZUFQifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9F WCksCSJSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgifSwKKyt7RVJSX0ZVTkMoRklQU19GX1NTTEVB WV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCisrezAsTlVMTH0KKysJfTsKKysK KytzdGF0aWMgRVJSX1NUUklOR19EQVRBIEZJUFNfc3RyX3JlYXNvbnNbXT0KKysJeworK3tFUlJf UkVBU09OKEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUpICAgICAgLCJjYW5ub3QgcmVhZCBleGUifSwK Kyt7RVJSX1JFQVNPTihGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJR0VTVCksImNhbm5vdCByZWFk IGV4ZSBkaWdlc3QifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfQ09OVFJBRElDVElOR19FVklERU5D RSksImNvbnRyYWRpY3RpbmcgZXZpZGVuY2UifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfRVhFX0RJ R0VTVF9ET0VTX05PVF9NQVRDSCksImV4ZSBkaWdlc3QgZG9lcyBub3QgbWF0Y2gifSwKKyt7RVJS X1JFQVNPTihGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpLCJmaW5nZXJwcmludCBk b2VzIG5vdCBtYXRjaCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05P VF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEKSwiZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggbm9u cGljIHJlbG9jYXRlZCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05P VF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HKSwiZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggc2Vn bWVudCBhbGlhc2luZyJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9T RVQpLCJmaXBzIG1vZGUgYWxyZWFkeSBzZXQifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfRklQU19T RUxGVEVTVF9GQUlMRUQpICwiZmlwcyBzZWxmdGVzdCBmYWlsZWQifSwKKyt7RVJSX1JFQVNPTihG SVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKSAgICwiaW52YWxpZCBrZXkgbGVuZ3RoIn0sCisre0VS Ul9SRUFTT04oRklQU19SX0tFWV9UT09fU0hPUlQpICAgICAgICAsImtleSB0b28gc2hvcnQifSwK Kyt7RVJSX1JFQVNPTihGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKSAgICAgICwibm9uIGZpcHMgbWV0 aG9kIn0sCisre0VSUl9SRUFTT04oRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKSAsInBhaXJ3 aXNlIHRlc3QgZmFpbGVkIn0sCisre0VSUl9SRUFTT04oRklQU19SX1JTQV9ERUNSWVBUX0VSUk9S KSAgICAsInJzYSBkZWNyeXB0IGVycm9yIn0sCisre0VSUl9SRUFTT04oRklQU19SX1JTQV9FTkNS WVBUX0VSUk9SKSAgICAsInJzYSBlbmNyeXB0IGVycm9yIn0sCisre0VSUl9SRUFTT04oRklQU19S X1NFTEZURVNUX0ZBSUxFRCkgICAgICAsInNlbGZ0ZXN0IGZhaWxlZCJ9LAorK3tFUlJfUkVBU09O KEZJUFNfUl9URVNUX0ZBSUxVUkUpICAgICAgICAgLCJ0ZXN0IGZhaWx1cmUifSwKKyt7RVJSX1JF QVNPTihGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0pICwidW5zdXBwb3J0ZWQgcGxhdGZvcm0i fSwKKyt7MCxOVUxMfQorKwl9OworKworKyNlbmRpZgorKworK3ZvaWQgRVJSX2xvYWRfRklQU19z dHJpbmdzKHZvaWQpCisrCXsKKysjaWZuZGVmIE9QRU5TU0xfTk9fRVJSCisrCisrCWlmIChFUlJf ZnVuY19lcnJvcl9zdHJpbmcoRklQU19zdHJfZnVuY3RzWzBdLmVycm9yKSA9PSBOVUxMKQorKwkJ eworKwkJRVJSX2xvYWRfc3RyaW5ncygwLEZJUFNfc3RyX2Z1bmN0cyk7CisrCQlFUlJfbG9hZF9z dHJpbmdzKDAsRklQU19zdHJfcmVhc29ucyk7CisrCQl9CisrI2VuZGlmCisrCX0KK2RpZmYgLXVw IC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0 ZXN0LmMKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMJ MjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTAxIEBACisr 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 IFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljIHN0cnVj dAorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKysgICAgdW5zaWduZWQgY2hh ciBwbGFpbnRleHRbMTZdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMTZdOworKyAg ICB9IHRlc3RzW109CisrCXsKKysJeworKwl7IDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1 LDB4MDYsMHgwNywKKysJICAweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwweDBFLDB4MEYg fSwKKysJeyAweDAwLDB4MTEsMHgyMiwweDMzLDB4NDQsMHg1NSwweDY2LDB4NzcsCisrCSAgMHg4 OCwweDk5LDB4QUEsMHhCQiwweENDLDB4REQsMHhFRSwweEZGIH0sCisrCXsgMHg2OSwweEM0LDB4 RTAsMHhEOCwweDZBLDB4N0IsMHgwNCwweDMwLAorKwkgIDB4RDgsMHhDRCwweEI3LDB4ODAsMHg3 MCwweEI0LDB4QzUsMHg1QSB9LAorKwl9LAorKwl9OworKworK3ZvaWQgRklQU19jb3JydXB0X2Fl cygpCisrICAgIHsKKysgICAgdGVzdHNbMF0ua2V5WzBdKys7CisrICAgIH0KKysKKytpbnQgRklQ U19zZWxmdGVzdF9hZXMoKQorKyAgICB7CisrICAgIGludCBuOworKyAgICBpbnQgcmV0ID0gMDsK KysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgp OworKworKyAgICBmb3Iobj0wIDsgbiA8IDEgOyArK24pCisrCXsKKysJaWYgKGZpcHNfY2lwaGVy X3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksCisrCQkJCXRlc3RzW25dLmtleSwgTlVMTCwK KysJCQkJdGVzdHNbbl0ucGxhaW50ZXh0LAorKwkJCQl0ZXN0c1tuXS5jaXBoZXJ0ZXh0LAorKwkJ CQkxNikgPD0gMCkKKysJCWdvdG8gZXJyOworKwl9CisrICAgIHJldCA9IDE7CisrICAgIGVycjoK KysgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysgICAgaWYgKHJldCA9PSAwKQor KwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMsRklQU19SX1NFTEZURVNUX0ZB SUxFRCk7CisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIC9kZXYv bnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHMuYworLS0tIC9kZXYvbnVs bAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2ZpcHMvZmlwcy5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICsw MTAwCitAQCAtMCwwICsxLDQxOSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisr ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoK KysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK KysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAor KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKwor KyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSAiZmlw c19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysKKysjaWZuZGVmIFBBVEhfTUFYCisrI2RlZmluZSBQQVRIX01BWCAxMDI0Cisr I2VuZGlmCisrCisrc3RhdGljIGludCBmaXBzX3NlbGZ0ZXN0X2ZhaWw7Cisrc3RhdGljIGludCBm aXBzX21vZGU7Cisrc3RhdGljIGNvbnN0IHZvaWQgKmZpcHNfcmFuZF9jaGVjazsKKysKKytzdGF0 aWMgdm9pZCBmaXBzX3NldF9tb2RlKGludCBvbm9mZikKKysJeworKwlpbnQgb3duaW5nX3RocmVh ZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkp CisrCQl7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd19sb2NrKCk7CisrCQlmaXBzX21v ZGUgPSBvbm9mZjsKKysJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X3VubG9jaygpOworKwkJ fQorKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19zZXRfcmFuZF9jaGVjayhjb25zdCB2b2lkICpy YW5kX2NoZWNrKQorKwl7CisrCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhy ZWFkKCk7CisrCisrCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJCXsKKysJCWlmICghb3duaW5n X3RocmVhZCkgZmlwc193X2xvY2soKTsKKysJCWZpcHNfcmFuZF9jaGVjayA9IHJhbmRfY2hlY2s7 CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd191bmxvY2soKTsKKysJCX0KKysJfQorKwor K2ludCBGSVBTX21vZGUodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJaW50IG93bmluZ190 aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysJaWYgKGZpcHNfaXNfc3RhcnRl ZCgpKQorKwkJeworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOworKwkJcmV0 ID0gZmlwc19tb2RlOworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7Cisr CQl9CisrCXJldHVybiByZXQ7CisrCX0KKysKKytjb25zdCB2b2lkICpGSVBTX3JhbmRfY2hlY2so dm9pZCkKKysJeworKwljb25zdCB2b2lkICpyZXQgPSAwOworKwlpbnQgb3duaW5nX3RocmVhZCA9 IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCisr CQl7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7CisrCQlyZXQgPSBmaXBz X3JhbmRfY2hlY2s7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKKysJ CX0KKysJcmV0dXJuIHJldDsKKysJfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lk KQorKyAgICB7CisrICAgIGludCByZXQgPSAwOworKyAgICBpZiAoZmlwc19pc19zdGFydGVkKCkp CisrCXsKKysJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysK KysJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOworKwlyZXQgPSBmaXBzX3NlbGZ0 ZXN0X2ZhaWw7CisrCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOworKwl9Cisr ICAgIHJldHVybiByZXQ7CisrICAgIH0KKysKKysvKiBTZWxmdGVzdCBmYWlsdXJlIGZhdGFsIGV4 aXQgcm91dGluZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAorKyAqIGR1cmluZyAqYW55KiBjcnlwdG9n cmFwaGljIG9wZXJhdGlvbi4gSXQgaGFzIHRoZSBtaW5pbXVtCisrICogb3ZlcmhlYWQgcG9zc2li bGUgdG8gYXZvaWQgdG9vIGJpZyBhIHBlcmZvcm1hbmNlIGhpdC4KKysgKi8KKysKKyt2b2lkIEZJ UFNfc2VsZnRlc3RfY2hlY2sodm9pZCkKKysgICAgeworKyAgICBpZiAoZmlwc19zZWxmdGVzdF9m YWlsKQorKwl7CisrCU9wZW5TU0xEaWUoX19GSUxFX18sX19MSU5FX18sICJGQVRBTCBGSVBTIFNF TEZURVNUIEZBSUxVUkUiKTsKKysJfQorKyAgICB9CisrCisrdm9pZCBmaXBzX3NldF9zZWxmdGVz dF9mYWlsKHZvaWQpCisrICAgIHsKKysgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysgICAg fQorKworK2ludCBGSVBTX3NlbGZ0ZXN0KCkKKysgICAgeworKworKyAgICByZXR1cm4gRklQU19z ZWxmdGVzdF9zaGExKCkKKysJJiYgRklQU19zZWxmdGVzdF9obWFjKCkKKysJJiYgRklQU19zZWxm dGVzdF9hZXMoKQorKwkmJiBGSVBTX3NlbGZ0ZXN0X2RlcygpCisrCSYmIEZJUFNfc2VsZnRlc3Rf cnNhKCkKKysJJiYgRklQU19zZWxmdGVzdF9kc2EoKTsKKysgICAgfQorKworK2ludCBGSVBTX21v ZGVfc2V0KGludCBvbm9mZikKKysgICAgeworKyAgICBpbnQgZmlwc19zZXRfb3duaW5nX3RocmVh ZCgpOworKyAgICBpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKCk7CisrICAgIGludCByZXQg PSAwOworKworKyAgICBmaXBzX3dfbG9jaygpOworKyAgICBmaXBzX3NldF9zdGFydGVkKCk7Cisr ICAgIGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKKysKKysgICAgaWYob25vZmYpCisrCXsKKysJ dW5zaWduZWQgY2hhciBidWZbNDhdOworKworKwlmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOworKwor KwkvKiBEb24ndCBnbyBpbnRvIEZJUFMgbW9kZSB0d2ljZSwganVzdCBzbyB3ZSBjYW4gZG8gYXV0 b21hZ2ljCisrCSAgIHNlZWRpbmcgKi8KKysJaWYoRklQU19tb2RlKCkpCisrCSAgICB7CisrCSAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9T RVQpOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAg ICBnb3RvIGVuZDsKKysJICAgIH0KKysKKysjaWZkZWYgT1BFTlNTTF9JQTMyX1NTRTIKKysJaWYg KChPUEVOU1NMX2lhMzJjYXAgJiAoMTw8MjV8MTw8MjYpKSAhPSAoMTw8MjV8MTw8MjYpKQorKwkg ICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCxGSVBTX1JfVU5TVVBQT1JU RURfUExBVEZPUk0pOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9 IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysjZW5kaWYKKysKKysJLyogUGVyZm9ybSBS TkcgS0FUIGJlZm9yZSBzZWVkaW5nICovCisrCWlmICghRklQU19zZWxmdGVzdF9ybmcoKSkKKysJ ICAgIHsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkg ICAgZ290byBlbmQ7CisrCSAgICB9CisrCisrCS8qIGF1dG9tYWdpY2FsbHkgc2VlZCBQUk5HIGlm IG5vdCBhbHJlYWR5IHNlZWRlZCAqLworKwlpZighRklQU19yYW5kX3N0YXR1cygpKQorKwkgICAg eworKwkgICAgaWYoUkFORF9ieXRlcyhidWYsc2l6ZW9mIGJ1ZikgPD0gMCkKKysJCXsKKysJCWZp cHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCQlyZXQgPSAwOworKwkJZ290byBlbmQ7CisrCQl9Cisr CSAgICBGSVBTX3JhbmRfc2V0X2tleShidWYsMzIpOworKwkgICAgRklQU19yYW5kX3NlZWQoYnVm KzMyLDE2KTsKKysJICAgIH0KKysKKysJLyogbm93IHN3aXRjaCBpbnRvIEZJUFMgbW9kZSAqLwor KwlmaXBzX3NldF9yYW5kX2NoZWNrKEZJUFNfcmFuZF9tZXRob2QoKSk7CisrCVJBTkRfc2V0X3Jh bmRfbWV0aG9kKEZJUFNfcmFuZF9tZXRob2QoKSk7CisrCWlmKEZJUFNfc2VsZnRlc3QoKSkKKysJ ICAgIGZpcHNfc2V0X21vZGUoMSk7CisrCWVsc2UKKysJICAgIHsKKysJICAgIGZpcHNfc2VsZnRl c3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9Cisr CXJldCA9IDE7CisrCWdvdG8gZW5kOworKwl9CisrICAgIGZpcHNfc2V0X21vZGUoMCk7CisrICAg IGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7CisrICAgIHJldCA9IDE7CisrZW5kOgorKyAgICBmaXBz X2NsZWFyX293bmluZ190aHJlYWQoKTsKKysgICAgZmlwc193X3VubG9jaygpOworKyAgICByZXR1 cm4gcmV0OworKyAgICB9CisrCisrdm9pZCBmaXBzX3dfbG9jayh2b2lkKQkJeyBDUllQVE9fd19s b2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9pZCBmaXBzX3dfdW5sb2NrKHZvaWQpCXsgQ1JZ UFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9pZCBmaXBzX3JfbG9jayh2b2lk KQkJeyBDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9pZCBmaXBzX3JfdW5s b2NrKHZvaWQpCXsgQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9CisrCisrc3Rh dGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOworK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpcHNfdGhy ZWFkID0gMDsKKysKKyt2b2lkIGZpcHNfc2V0X3N0YXJ0ZWQodm9pZCkKKysJeworKwlmaXBzX3N0 YXJ0ZWQgPSAxOworKwl9CisrCisraW50IGZpcHNfaXNfc3RhcnRlZCh2b2lkKQorKwl7CisrCXJl dHVybiBmaXBzX3N0YXJ0ZWQ7CisrCX0KKysKKytpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZv aWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCisrCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJ CXsKKysJCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJaWYgKGZpcHNfdGhy ZWFkICE9IDAgJiYgZmlwc190aHJlYWQgPT0gQ1JZUFRPX3RocmVhZF9pZCgpKQorKwkJCXJldCA9 IDE7CisrCQlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQorKwlyZXR1 cm4gcmV0OworKwl9CisrCisraW50IGZpcHNfc2V0X293bmluZ190aHJlYWQodm9pZCkKKysJewor KwlpbnQgcmV0ID0gMDsKKysKKysJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQorKwkJeworKwkJQ1JZ UFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQlpZiAoZmlwc190aHJlYWQgPT0gMCkK KysJCQl7CisrCQkJZmlwc190aHJlYWQgPSBDUllQVE9fdGhyZWFkX2lkKCk7CisrCQkJcmV0ID0g MTsKKysJCQl9CisrCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQor KwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lk KQorKwl7CisrCWludCByZXQgPSAwOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCisrCQl7 CisrCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCWlmIChmaXBzX3RocmVh ZCA9PSBDUllQVE9fdGhyZWFkX2lkKCkpCisrCQkJeworKwkJCWZpcHNfdGhyZWFkID0gMDsKKysJ CQlyZXQgPSAxOworKwkJCX0KKysJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7 CisrCQl9CisrCXJldHVybiByZXQ7CisrCX0KKysKKysvKiBHZW5lcmFsaXplZCBwdWJsaWMga2V5 IHRlc3Qgcm91dGluZS4gU2lnbnMgYW5kIHZlcmlmaWVzIHRoZSBkYXRhCisrICogc3VwcGxpZWQg aW4gdGJzIHVzaW5nIG1lc2FnZSBkaWdlc3QgbWQgYW5kIHNldHRpbmcgb3B0aW9uIGRpZ2VzdAor KyAqIGZsYWdzIG1kX2ZsYWdzLiBJZiB0aGUgJ2thdCcgcGFyYW1ldGVyIGlzIG5vdCBOVUxMIGl0 IHdpbGwKKysgKiBhZGRpdGlvbmFsbHkgY2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIGl0OiBh IGtub3duIGFuc3dlciB0ZXN0CisrICogVGhlIHN0cmluZyAiZmFpbF9zdHIiIGlzIHVzZWQgZm9y IGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIGluIGNhc2UKKysgKiBvZiBmYWlsdXJlLgorKyAqLwor KworK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBrZXksCisrCQkJY29u c3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKKysJCQljb25zdCBFVlBfTUQgKmRpZ2VzdCwg dW5zaWduZWQgaW50IG1kX2ZsYWdzLAorKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKQorKwl7CQor KwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBzaWd0bXBbMjU2XSwgKnNpZyA9IHNpZ3Rt cDsKKysJdW5zaWduZWQgaW50IHNpZ2xlbjsKKysJRVZQX01EX0NUWCBtY3R4OworKwlFVlBfTURf Q1RYX2luaXQoJm1jdHgpOworKworKwlpZiAoKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQor KwkJJiYgKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSA+IHNpemVvZihzaWd0bXApKSkKKysJCXsK KysJCXNpZyA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSk7CisrCQlp ZiAoIXNpZykKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9U RVNULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9Cisr CisrCWlmICh0YnNsZW4gPT0gLTEpCisrCQl0YnNsZW4gPSBzdHJsZW4oKGNoYXIgKil0YnMpOwor KworKwlpZiAobWRfZmxhZ3MpCisrCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWN0eCwgbWRfZmxh Z3MpOworKworKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKKysJ CWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkK KysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2lnLCAmc2lnbGVu LCBwa2V5KSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmIChrYXQgJiYgKChzaWdsZW4gIT0ga2F0 bGVuKSB8fCBtZW1jbXAoa2F0LCBzaWcsIGthdGxlbikpKQorKwkJZ290byBlcnJvcjsKKysKKysJ aWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKKysJCWdvdG8gZXJy b3I7CisrCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQorKwkJZ290 byBlcnJvcjsKKysJcmV0ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWcsIHNpZ2xlbiwgcGtl eSk7CisrCisrCWVycm9yOgorKwlpZiAoc2lnICE9IHNpZ3RtcCkKKysJCU9QRU5TU0xfZnJlZShz aWcpOworKwlFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKwlpZiAocmV0ICE9IDEpCisrCQl7 CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRklQU19SX1RFU1Rf RkFJTFVSRSk7CisrCQlpZiAoZmFpbF9zdHIpCisrCQkJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJU eXBlPSIsIGZhaWxfc3RyKTsKKysJCXJldHVybiAwOworKwkJfQorKwlyZXR1cm4gMTsKKysJfQor KworKy8qIEdlbmVyYWxpemVkIHN5bW1ldHJpYyBjaXBoZXIgdGVzdCByb3V0aW5lLiBFbmNyeXB0 IGRhdGEsIHZlcmlmeSByZXN1bHQKKysgKiBhZ2FpbnN0IGtub3duIGFuc3dlciwgZGVjcnlwdCBh bmQgY29tcGFyZSB3aXRoIG9yaWdpbmFsIHBsYWludGV4dC4KKysgKi8KKysKKytpbnQgZmlwc19j aXBoZXJfdGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIs CisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg Kml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKKysJCQljb25zdCB1bnNp Z25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4pCisrCXsKKysJdW5zaWduZWQgY2hh ciBwbHRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKKysJdW5zaWduZWQgY2hhciBjaXRt cFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKKysJT1BFTlNTTF9hc3NlcnQobGVuIDw9IEZJ UFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBj aXBoZXIsIE5VTEwsIGtleSwgaXYsIDEpIDw9IDApCisrCQlyZXR1cm4gMDsKKysJRVZQX0NpcGhl cihjdHgsIGNpdG1wLCBwbGFpbnRleHQsIGxlbik7CisrCWlmIChtZW1jbXAoY2l0bXAsIGNpcGhl cnRleHQsIGxlbikpCisrCQlyZXR1cm4gMDsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwg Y2lwaGVyLCBOVUxMLCBrZXksIGl2LCAwKSA8PSAwKQorKwkJcmV0dXJuIDA7CisrCUVWUF9DaXBo ZXIoY3R4LCBwbHRtcCwgY2l0bXAsIGxlbik7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4 dCwgbGVuKSkKKysJCXJldHVybiAwOworKwlyZXR1cm4gMTsKKysJfQorKworKyNpZiAwCisrLyog VGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBlbnN1cmUgdGhlIGVycm9yIGNvZGUgZXhpc3RzIGFu ZCB0aGUgZnVuY3Rpb24KKysgKiBuYW1lIGlzIHRvIGtlZXAgdGhlIGVycm9yIGNoZWNraW5nIHNj cmlwdCBxdWlldAorKyAqLworK3ZvaWQgaGFzaF9maW5hbCh2b2lkKQorKwl7CisrCUZJUFNlcnIo RklQU19GX0hBU0hfRklOQUwsRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCX0KKysjZW5kaWYK KysKKysKKysjZW5kaWYKK2RpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAx MjowMDo1OC44MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9m aXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAx MDAKK0BAIC0wLDAgKzEsMTM3IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMp IDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgor KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisr ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2lu Y2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMg c3RydWN0CisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdOworKyAgICB1bnNpZ25l ZCBjaGFyIHBsYWludGV4dFs4XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwor KyAgICB9IHRlc3RzMltdPQorKwl7CisrCXsKKysJeyAweDdjLDB4NGYsMHg2ZSwweGY3LDB4YTIs MHgwNCwweDE2LDB4ZWMsCisrCSAgMHgwYiwweDZiLDB4N2MsMHg5ZSwweDVlLDB4MTksMHhhNyww eGM0IH0sCisrCXsgMHgwNiwweGE3LDB4ZDgsMHg3OSwweGFhLDB4Y2UsMHg2OSwweGVmIH0sCisr CXsgMHg0YywweDExLDB4MTcsMHg1NSwweGJmLDB4YzQsMHg0ZSwweGZkIH0KKysJfSwKKysJewor Kwl7IDB4NWQsMHg5ZSwweDAxLDB4ZDMsMHgyNSwweGM3LDB4M2UsMHgzNCwKKysJICAweDAxLDB4 MTYsMHg3YywweDg1LDB4MjMsMHhkZiwweGUwLDB4NjggfSwKKysJeyAweDljLDB4NTAsMHgwOSww eDBmLDB4NWUsMHg3ZCwweDY5LDB4N2UgfSwKKysJeyAweGQyLDB4MGIsMHgxOCwweGRmLDB4ZDks MHgwZCwweDllLDB4ZmYgfSwKKysJfQorKwl9OworKworK3N0YXRpYyBzdHJ1Y3QKKysgICAgewor KyAgICB1bnNpZ25lZCBjaGFyIGtleVsyNF07CisrICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0 WzhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07CisrICAgIH0gdGVzdHMzW109 CisrCXsKKysJeworKwl7IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwK KysJICAweEZFLDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsCisrCSAgMHgxMiww eDM0LDB4NTYsMHg3OCwweDlhLDB4YmMsMHhkZSwweGYwIH0sCisrCXsgMHg4ZiwweDhmLDB4YmYs MHg5YiwweDVkLDB4NDgsMHhiNCwweDFjIH0sCisrCXsgMHg1OSwweDhjLDB4ZTUsMHhkMywweDZj LDB4YTIsMHhlYSwweDFiIH0sCisrCX0sCisrCXsKKysJeyAweERDLDB4QkEsMHg5OCwweDc2LDB4 NTQsMHgzMiwweDEwLDB4RkUsCisrCSAgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIsMHhD RCwweEVGLAorKwkgIDB4RUQsMHgzOSwweEQ5LDB4NTAsMHhGQSwweDc0LDB4QkMsMHhDNCB9LAor Kwl7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiB9LAorKwl7IDB4MTEs MHgyNSwweGIwLDB4MzUsMHhiZSwweGEwLDB4ODIsMHg4NiB9LAorKwl9LAorKwl9OworKworK3Zv aWQgRklQU19jb3JydXB0X2RlcygpCisrICAgIHsKKysgICAgdGVzdHMyWzBdLnBsYWludGV4dFsw XSsrOworKyAgICB9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZGVzKCkKKysgICAgeworKyAgICBp bnQgbiwgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVS X0NUWF9pbml0KCZjdHgpOworKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAyLWtleSAzREVT IGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KKysgICAgZm9yKG49MCA7IG4gPCAyIDsg KytuKQorKwl7CisrCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZV9lY2Io KSwKKysJCQkJdGVzdHMyW25dLmtleSwgTlVMTCwKKysJCQkJdGVzdHMyW25dLnBsYWludGV4dCwg dGVzdHMyW25dLmNpcGhlcnRleHQsIDgpKQorKwkJZ290byBlcnI7CisrCX0KKysKKysgICAgLyog RW5jcnlwdC9kZWNyeXB0IHdpdGggM0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICov CisrICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKKysJeworKwlpZiAoIWZpcHNfY2lwaGVyX3Rl c3QoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLAorKwkJCQl0ZXN0czNbbl0ua2V5LCBOVUxMLAor KwkJCQl0ZXN0czNbbl0ucGxhaW50ZXh0LCB0ZXN0czNbbl0uY2lwaGVydGV4dCwgOCkpCisrCQln b3RvIGVycjsKKysJfQorKyAgICByZXQgPSAxOworKyAgICBlcnI6CisrICAgIEVWUF9DSVBIRVJf Q1RYX2NsZWFudXAoJmN0eCk7CisrICAgIGlmIChyZXQgPT0gMCkKKysJICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfU0VMRlRFU1RfREVTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKworKyAgICBy ZXR1cm4gcmV0OworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jCistLS0gL2Rldi9udWxs CTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jCTIwMDktMTEtMTIgMTI6MzY6NTAu MDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDE4NCBAQAorKy8qIGNyeXB0by9kc2EvZHNhdGVz dC5jICovCisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0 c29mdC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2Fn ZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVh eUBjcnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28g YXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5 IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFz CisrICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0 cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2Rl OyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNs dWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJp Z2h0IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhA Y3J5cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydz LCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUg bm90IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9k dWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBh dXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUg aW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisr ICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhl IHBhY2thZ2UuCisrICogCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1l dDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0 aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBF cmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dy YXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Cisr ICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICog NC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0 aXZlIHRoZXJlb2YpIGZyb20gCisrICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlv biBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNy eXB0c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJ QyBZT1VORyBgYEFTIElTJycgQU5ECisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAq IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB UklTSU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisr ICogCisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1Ymxp Y2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBj YW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBj b3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2lu Y2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKysgKi8KKysKKysjaW5jbHVkZSA8c3Ry aW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+ CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIHNlZWQsIG91dF9wLCBvdXRfcSwgb3V0 X2cgYXJlIHRha2VuIHRoZSBOSVNUIHRlc3QgdmVjdG9ycyAqLworKworK3N0YXRpYyB1bnNpZ25l ZCBjaGFyIHNlZWRbMjBdID0geworKwkweDc3LCAweDhmLCAweDQwLCAweDc0LCAweDZmLCAweDY2 LCAweGJlLCAweDMzLCAweGNlLCAweGJlLCAweDk5LCAweDM0LAorKwkweDRjLCAweGZjLCAweGYz LCAweDI4LCAweGFhLCAweDcwLCAweDJkLCAweDNhCisrICAJfTsKKysKKytzdGF0aWMgdW5zaWdu ZWQgY2hhciBvdXRfcFtdID0geworKwkweGY3LCAweDdjLCAweDFiLCAweDgzLCAweGQ4LCAweGU4 LCAweDVjLCAweDdmLCAweDg1LCAweDMwLCAweDE3LCAweDU3LAorKwkweDIxLCAweDk1LCAweGZl LCAweDI2LCAweDA0LCAweGViLCAweDQ3LCAweDRjLCAweDNhLCAweDRhLCAweDgxLCAweDRiLAor KwkweDcxLCAweDJlLCAweGVkLCAweDZlLCAweDRmLCAweDNkLCAweDExLCAweDBmLCAweDdjLCAw eGZlLCAweDM2LCAweDQzLAorKwkweDUxLCAweGQ5LCAweDgxLCAweDM5LCAweDE3LCAweGRmLCAw eDYyLCAweGY2LCAweDljLCAweDAxLCAweGE4LCAweDY5LAorKwkweDcxLCAweGRkLCAweDI5LCAw eDdmLCAweDQ3LCAweGU2LCAweDY1LCAweGE2LCAweDIyLCAweGU4LCAweDZhLCAweDEyLAorKwkw eDJiLCAweGMyLCAweDgxLCAweGZmLCAweDMyLCAweDcwLCAweDJmLCAweDllLCAweGNhLCAweDUz LCAweDI2LCAweDQ3LAorKwkweDBmLCAweDU5LCAweGQ3LCAweDllLCAweDJjLCAweGE1LCAweDA3 LCAweGM0LCAweDQ5LCAweDUyLCAweGEzLCAweGU0LAorKwkweDZiLCAweDA0LCAweDAwLCAweDI1 LCAweDQ5LCAweGUyLCAweGU2LCAweDdmLCAweDI4LCAweDc4LCAweDk3LCAweGI4LAorKwkweDNh LCAweDMyLCAweDE0LCAweDM4LCAweGEyLCAweDUxLCAweDMzLCAweDIyLCAweDQ0LCAweDdlLCAw eGQ3LCAweGVmLAorKwkweDQ1LCAweGRiLCAweDA2LCAweDRhLCAweGQyLCAweDgyLCAweDRhLCAw eDgyLCAweDJjLCAweGIxLCAweGQ3LCAweGQ4LAorKwkweGI2LCAweDczLCAweDAwLCAweDRkLCAw eDk0LCAweDc3LCAweDk0LCAweGVmCisrCX07CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0 X3FbXSA9IHsKKysJMHhkNCwgMHgwYSwgMHhhYywgMHg5ZiwgMHhiZCwgMHg4YywgMHg4MCwgMHhj MiwgMHgzOCwgMHg3ZSwgMHgyZSwgMHgwYywKKysJMHg1MiwgMHg1YywgMHhlYSwgMHgzNCwgMHhh MSwgMHg4MywgMHgzMiwgMHhmMworKwl9OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9n W10gPSB7CisrCTB4MzQsIDB4NzMsIDB4OGIsIDB4NTcsIDB4ODQsIDB4OGUsIDB4NTUsIDB4YmYs IDB4NTcsIDB4Y2MsIDB4NDEsIDB4YmIsCisrCTB4NWUsIDB4MmIsIDB4ZDUsIDB4NDIsIDB4ZGQs IDB4MjQsIDB4MjIsIDB4MmEsIDB4MDksIDB4ZWEsIDB4MjYsIDB4MWUsCisrCTB4MTcsIDB4NjUs IDB4Y2IsIDB4MWEsIDB4YjMsIDB4MTIsIDB4NDQsIDB4YTMsIDB4OWUsIDB4OTksIDB4ZTksIDB4 NjMsCisrCTB4ZWIsIDB4MzAsIDB4YjEsIDB4NzgsIDB4N2IsIDB4MDksIDB4NDAsIDB4MzAsIDB4 ZmEsIDB4ODMsIDB4YzIsIDB4MzUsCisrCTB4ZTEsIDB4YzQsIDB4MmQsIDB4NzQsIDB4MWEsIDB4 YjEsIDB4ODMsIDB4NTQsIDB4ZDgsIDB4MjksIDB4ZjQsIDB4Y2YsCisrCTB4N2YsIDB4NmYsIDB4 NjcsIDB4MWMsIDB4MzYsIDB4NDksIDB4ZWUsIDB4NmMsIDB4YTIsIDB4M2MsIDB4MmQsIDB4NmEs CisrCTB4ZTksIDB4ZDMsIDB4OWEsIDB4ZjYsIDB4NTcsIDB4NzgsIDB4NmYsIDB4ZmQsIDB4MzMs IDB4Y2QsIDB4M2MsIDB4ZWQsCisrCTB4ZmQsIDB4ZDQsIDB4NDEsIDB4ZTYsIDB4NWMsIDB4OGIs IDB4ZTAsIDB4NjgsIDB4MzEsIDB4NDcsIDB4NDcsIDB4YWYsCisrCTB4MTIsIDB4YTcsIDB4Zjks IDB4MzIsIDB4MGQsIDB4OTQsIDB4MTUsIDB4NDgsIDB4ZDAsIDB4NTQsIDB4ODUsIDB4YjIsCisr CTB4MDQsIDB4YjUsIDB4NGQsIDB4ZDQsIDB4OWQsIDB4MDUsIDB4MjIsIDB4MjUsIDB4ZDksIDB4 ZmQsIDB4NmMsIDB4MzYsCisrCTB4ZWYsIDB4YmUsIDB4NjksIDB4NmMsIDB4NTUsIDB4ZjQsIDB4 ZWUsIDB4ZWMKKysJfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzdHIxW109IjEy MzQ1Njc4OTAxMjM0NTY3ODkwIjsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9kc2EoKQorKyAgICB7 CisrICAgICsrc2VlZFswXTsKKysgICAgfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSgpCisr ICAgIHsKKysgICAgRFNBICpkc2E7CisrICAgIGludCBjb3VudGVyLGksaiwgcmV0ID0gMDsKKysg ICAgdW5zaWduZWQgaW50IHNsZW47CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07CisrICAg IHVuc2lnbmVkIGxvbmcgaDsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKyAgICBFVlBfUEtFWSAq cGsgPSBOVUxMOworKworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKworKyAgICBkc2Eg PSBEU0FfbmV3KCk7CisrCisrICAgIGlmKGRzYSA9PSBOVUxMKQorKwlnb3RvIGVycjsKKysgICAg aWYoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxzZWVkLDIwLCZjb3VudGVy LCZoLE5VTEwpKQorKwlnb3RvIGVycjsKKysgICAgaWYgKGNvdW50ZXIgIT0gMzc4KSAKKysJZ290 byBlcnI7CisrICAgIGlmIChoICE9IDIpCisrCWdvdG8gZXJyOworKyAgICBpPUJOX2JuMmJpbihk c2EtPnEsYnVmKTsKKysgICAgaj1zaXplb2Yob3V0X3EpOworKyAgICBpZiAoaSAhPSBqIHx8IG1l bWNtcChidWYsb3V0X3EsaSkgIT0gMCkKKysJZ290byBlcnI7CisrCisrICAgIGk9Qk5fYm4yYmlu KGRzYS0+cCxidWYpOworKyAgICBqPXNpemVvZihvdXRfcCk7CisrICAgIGlmIChpICE9IGogfHwg bWVtY21wKGJ1ZixvdXRfcCxpKSAhPSAwKQorKwlnb3RvIGVycjsKKysKKysgICAgaT1CTl9ibjJi aW4oZHNhLT5nLGJ1Zik7CisrICAgIGo9c2l6ZW9mKG91dF9nKTsKKysgICAgaWYgKGkgIT0gaiB8 fCBtZW1jbXAoYnVmLG91dF9nLGkpICE9IDApCisrCWdvdG8gZXJyOworKyAgICBEU0FfZ2VuZXJh dGVfa2V5KGRzYSk7CisrCisrICAgIGlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisr CWdvdG8gZXJyOworKyAgICBFVlBfUEtFWV9hc3NpZ25fRFNBKHBrLCBkc2EpOworKworKyAgICBp ZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCisrCWdvdG8gZXJy OworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBzdHIxLCAyMCkpCisrCWdvdG8gZXJy OworKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sIHBrKSkKKysJZ290 byBlcnI7CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCks IE5VTEwpKQorKwlnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBz dHIxLCAyMCkpCisrCWdvdG8gZXJyOworKyAgICBpZiAoRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBi dWYsIHNsZW4sIHBrKSAhPSAxKQorKwlnb3RvIGVycjsKKysKKysgICAgcmV0ID0gMTsKKysKKysg ICAgZXJyOgorKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKyAgICBpZiAocGspCisr CUVWUF9QS0VZX2ZyZWUocGspOworKyAgICBlbHNlIGlmIChkc2EpCisrCURTQV9mcmVlKGRzYSk7 CisrICAgIGlmIChyZXQgPT0gMCkKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1Rf RFNBLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICByZXR1cm4gcmV0OworKyAgICB9Cisr I2VuZGlmCitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlw cy9maXBzLmgKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHMuaAkyMDA5LTExLTEy IDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxNjMgQEAKKysvKiA9PT09PT09 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 R0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKwor KyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2Vycm9yIEZJUFMgaXMgZGlzYWJsZWQuCisrI2VuZGlm CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRl cm4gIkMiIHsKKysjZW5kaWYKKysKKytzdHJ1Y3QgZHNhX3N0OworK3N0cnVjdCBldnBfcGtleV9z dDsKKytzdHJ1Y3QgZW52X21kX3N0OworK3N0cnVjdCBldnBfY2lwaGVyX3N0OworK3N0cnVjdCBl dnBfY2lwaGVyX2N0eF9zdDsKKysKKytpbnQgRklQU19tb2RlX3NldChpbnQgb25vZmYpOworK2lu dCBGSVBTX21vZGUodm9pZCk7CisrY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNrKHZvaWQpOwor K2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKTsKKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hl Y2sodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSh2b2lkKTsKKytpbnQgRklQU19zZWxm dGVzdF9zaGExKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2Flcyh2b2lkKTsKKytpbnQgRklQ U19zZWxmdGVzdF9hZXModm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKHZvaWQpOworK2lu dCBGSVBTX3NlbGZ0ZXN0X2Rlcyh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9yc2Eodm9pZCk7 Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKTsKKytpbnQgRklQU19zZWxmdGVz dF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZHNhKHZvaWQpOworK3ZvaWQgRklQU19j b3JydXB0X2RzYV9rZXlnZW4odm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfZHNhKHZvaWQpOwor K3ZvaWQgRklQU19jb3JydXB0X3JuZyh2b2lkKTsKKyt2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQp OworK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9obWFj KHZvaWQpOworKworK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qoc3RydWN0IGV2cF9wa2V5 X3N0ICpwa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKKysJ CQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBrYXRsZW4sCisrCQkJY29u c3Qgc3RydWN0IGVudl9tZF9zdCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCisrCQkJ Y29uc3QgY2hhciAqZmFpbF9zdHIpOworKworK2ludCBmaXBzX2NpcGhlcl90ZXN0KHN0cnVjdCBl dnBfY2lwaGVyX2N0eF9zdCAqY3R4LAorKwkJCWNvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpj aXBoZXIsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKKysJCQljb25z dCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4pOworKworKy8qIEJFR0lO IEVSUk9SIENPREVTICovCisrLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0 ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKKysgKiBtYWRlIGFmdGVyIHRo aXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4K KysgKi8KKyt2b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKTsKKysKKysvKiBFcnJvciBj b2RlcyBmb3IgdGhlIEZJUFMgZnVuY3Rpb25zLiAqLworKworKy8qIEZ1bmN0aW9uIGNvZGVzLiAq LworKyNkZWZpbmUgRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TCQkJIDEwMAorKyNkZWZpbmUg RklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEwMQorKyNkZWZpbmUgRklQU19GX0RTQV9E T19TSUdOCQkJCSAxMDIKKysjZGVmaW5lIEZJUFNfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMDMKKysj ZGVmaW5lIEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWAkJCSAxMjQKKysjZGVmaW5lIEZJUFNfRl9F VlBfRElHRVNUSU5JVF9FWAkJCSAxMjUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0RTQQkJ CQkgMTA0CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQJCSAx MDUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX1JTQQkJCQkgMTA2CisrI2RlZmluZSBGSVBT X0ZfRklQU19EU0FfQ0hFQ0sJCQkJIDEwNworKyNkZWZpbmUgRklQU19GX0ZJUFNfTU9ERV9TRVQJ CQkJIDEwOAorKyNkZWZpbmUgRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVAkJCSAxMDkK KysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUwkJCSAxMTAKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX1NFTEZURVNUX0RFUwkJCSAxMTEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNU X0RTQQkJCSAxMTIKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMJCQkgMTEzCisr I2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcJCQkgMTE0CisrI2RlZmluZSBGSVBTX0Zf RklQU19TRUxGVEVTVF9TSEExCQkJIDExNQorKyNkZWZpbmUgRklQU19GX0hBU0hfRklOQUwJCQkJ IDEyMworKyNkZWZpbmUgRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTgkJCSAxMTYKKysjZGVmaW5l IEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVAkJCSAxMTcKKysjZGVmaW5lIEZJUFNfRl9S U0FfRUFZX1BSSVZBVEVfRU5DUllQVAkJCSAxMTgKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BV QkxJQ19ERUNSWVBUCQkJIDExOQorKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZ UFQJCQkgMTIwCisrI2RlZmluZSBGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYCQkJIDEy MQorKyNkZWZpbmUgRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTCQkJIDEyMgorKworKy8qIFJlYXNv biBjb2Rlcy4gKi8KKysjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUJCQkJIDEwMworKyNk ZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRV9ESUdFU1QJCQkgMTA0CisrI2RlZmluZSBGSVBT X1JfQ09OVFJBRElDVElOR19FVklERU5DRQkJCSAxMTQKKysjZGVmaW5lIEZJUFNfUl9FWEVfRElH RVNUX0RPRVNfTk9UX01BVENICQkgMTA1CisrI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9F U19OT1RfTUFUQ0gJCSAxMTAKKysjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9N QVRDSF9OT05QSUNfUkVMT0NBVEVEIDExMQorKyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RP RVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcgMTEyCisrI2RlZmluZSBGSVBTX1JfRklQU19N T0RFX0FMUkVBRFlfU0VUCQkJIDEwMgorKyNkZWZpbmUgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJ TEVECQkJIDEwNgorKyNkZWZpbmUgRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSAkJCSAxMDkKKysj ZGVmaW5lIEZJUFNfUl9LRVlfVE9PX1NIT1JUCQkJCSAxMDgKKysjZGVmaW5lIEZJUFNfUl9OT05f RklQU19NRVRIT0QJCQkJIDEwMAorKyNkZWZpbmUgRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVE CQkJIDEwNworKyNkZWZpbmUgRklQU19SX1JTQV9ERUNSWVBUX0VSUk9SCQkJIDExNQorKyNkZWZp bmUgRklQU19SX1JTQV9FTkNSWVBUX0VSUk9SCQkJIDExNgorKyNkZWZpbmUgRklQU19SX1NFTEZU RVNUX0ZBSUxFRAkJCQkgMTAxCisrI2RlZmluZSBGSVBTX1JfVEVTVF9GQUlMVVJFCQkJCSAxMTcK KysjZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STQkJCSAxMTMKKysKKysjaWZkZWYg IF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKyNlbmRpZgorZGlmZiAtdXAgL2Rldi9udWxsIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMKKy0tLSAv ZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jCTIwMDktMTEtMTIg MTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDEzNSBAQAorKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln 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 bC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv aG1hYy5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt0eXBlZGVmIHN0cnVjdCB7CisrCWNv bnN0IEVWUF9NRCAqKCphbGcpKHZvaWQpOworKwljb25zdCBjaGFyICprZXksICppdjsKKysJdW5z aWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdOworK30gSE1BQ19LQVQ7CisrCisrc3Rh dGljIGNvbnN0IEhNQUNfS0FUIHZlY3RvcltdID0geworKyAgICB7CUVWUF9zaGExLAorKwkvKiBm cm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9maXBzL2ZpcHMxOTgvZmlwcy0x OThhLnBkZiAqLworKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJ eyAweDA5LDB4MjIsMHhkMywweDQwLDB4NWYsMHhhYSwweDNkLDB4MTksCisrCSAgMHg0ZiwweDgy LDB4YTQsMHg1OCwweDMwLDB4NzMsMHg3ZCwweDVjLAorKwkgIDB4YzYsMHhjNywweDVkLDB4MjQg fQorKyAgICB9LAorKyAgICB7CUVWUF9zaGEyMjQsCisrCS8qIGp1c3Qga2VlcCBleHRlbmRpbmcg dGhlIGFib3ZlLi4uICovCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIi LAorKwl7IDB4ZGQsMHhlZiwweDBhLDB4NDAsMHhjYiwweDdkLDB4NTAsMHhmYiwKKysJICAweDZl LDB4ZTYsMHhjZSwweGExLDB4MjAsMHhiYSwweDI2LDB4YWEsCisrCSAgMHgwOCwweGYzLDB4MDcs MHg3NSwweDg3LDB4YjgsMHhhZCwweDFiLAorKwkgIDB4OGMsMHg4ZCwweDEyLDB4YzcgfQorKyAg ICB9LAorKyAgICB7CUVWUF9zaGEyNTYsCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJT YW1wbGUgIzIiLAorKwl7IDB4YjgsMHhmMiwweDBkLDB4YjUsMHg0MSwweGVhLDB4NDMsMHgwOSwK KysJICAweGNhLDB4NGUsMHhhOSwweDM4LDB4MGMsMHhkMCwweGU4LDB4MzQsCisrCSAgMHhmNyww eDFmLDB4YmUsMHg5MSwweDc0LDB4YTIsMHg2MSwweDM4LAorKwkgIDB4MGQsMHhjMSwweDdlLDB4 YWUsMHg2YSwweDM0LDB4NTEsMHhkOSB9CisrICAgIH0sCisrICAgIHsJRVZQX3NoYTM4NCwKKysJ IjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHgwOCwweGJjLDB4 YjAsMHhkYSwweDQ5LDB4MWUsMHg4NywweGFkLAorKwkgIDB4OWEsMHgxZCwweDZhLDB4Y2UsMHgy MywweGM1LDB4MGIsMHhmNiwKKysJICAweGI3LDB4MTgsMHgwNiwweGE1LDB4NzcsMHhjZCwweDQ5 LDB4MDQsCisrCSAgMHg4OSwweGYxLDB4ZTYsMHgyMywweDQ0LDB4NTEsMHg1MSwweDlmLAorKwkg IDB4ODUsMHg1NiwweDgwLDB4NzksMHgwYywweGJkLDB4NGQsMHg1MCwKKysJICAweGE0LDB4NWYs MHgyOSwweGUzLDB4OTMsMHhmMCwweGU4LDB4N2YgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGE1 MTIsCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4ODAs MHg5ZCwweDQ0LDB4MDUsMHg3YywweDViLDB4OTUsMHg0MSwKKysJICAweDA1LDB4YmQsMHgwNCww eDEzLDB4MTYsMHhkYiwweDBmLDB4YWMsCisrCSAgMHg0NCwweGQ1LDB4YTQsMHhkNSwweGQwLDB4 ODksMHgyYiwweGQwLAorKwkgIDB4NGUsMHg4NiwweDY0LDB4MTIsMHhjMCwweDkwLDB4NzcsMHg2 OCwKKysJICAweGYxLDB4ODcsMHhiNywweDdjLDB4NGYsMHhhZSwweDJjLDB4MmYsCisrCSAgMHgy MSwweGE1LDB4YjUsMHg2NSwweDlhLDB4NGYsMHg0YiwweGE3LAorKwkgIDB4NDcsMHgwMiwweGEz LDB4ZGUsMHg5YiwweDUxLDB4ZjEsMHg0NSwKKysJICAweGJkLDB4NGYsMHgyNSwweDI3LDB4NDIs MHg5OCwweDk5LDB4MDUgfQorKyAgICB9LAorK307CisrCisraW50IEZJUFNfc2VsZnRlc3RfaG1h YygpCisrICAgIHsKKysgICAgaW50IG47CisrICAgIHVuc2lnbmVkIGludCAgICBvdXRsZW47Cisr ICAgIHVuc2lnbmVkIGNoYXIgICBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgY29uc3QgRVZQ X01EICAgKm1kOworKyAgICBjb25zdCBITUFDX0tBVCAqdDsKKysKKysgICAgZm9yKG49MCx0PXZl Y3RvcjsgbjxzaXplb2YodmVjdG9yKS9zaXplb2YodmVjdG9yWzBdKTsgbisrLHQrKykKKysJewor KwltZCA9ICgqdC0+YWxnKSgpOworKwlITUFDKG1kLHQtPmtleSxzdHJsZW4odC0+a2V5KSwKKysJ CShjb25zdCB1bnNpZ25lZCBjaGFyICopdC0+aXYsc3RybGVuKHQtPml2KSwKKysJCW91dCwmb3V0 bGVuKTsKKysKKysJaWYobWVtY21wKG91dCx0LT5rYXZhbCxvdXRsZW4pKQorKwkgICAgeworKwkg ICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDLEZJUFNfUl9TRUxGVEVTVF9GQUlM RUQpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCX0KKysgICAgcmV0dXJuIDE7CisrICAg IH0KKysjZW5kaWYKK2RpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9maXBzL2ZpcHNfcmFuZC5jCistLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAx MDAyMjc2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX3Jh bmQuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw0MTAg QEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisr ICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0 cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Cisr ICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgor KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS CisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysvKgorKyAqIFRoaXMgaXMgYSBGSVBT IGFwcHJvdmVkIEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kgWDkuMzEgQS4yLjQuCisrICovCisrCisr I2luY2x1ZGUgImVfb3MuaCIKKysKKysvKiBJZiB3ZSBkb24ndCBkZWZpbmUgX1hPUEVOX1NPVVJD RV9FWFRFTkRFRCwgc3RydWN0IHRpbWV2YWwgd29uJ3QKKysgICBiZSBkZWZpbmVkIGFuZCBnZXR0 aW1lb2ZkYXkoKSB3b24ndCBiZSBkZWNsYXJlZCB3aXRoIHN0cmljdCBjb21waWxlcnMKKysgICBs aWtlIERFQyBDIGluIEFOU0kgQyBtb2RlLiAgKi8KKysjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhU RU5ERUQKKysjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorKyNlbmRpZgorKworKyNp bmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysj aWZuZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrI2luY2x1ZGUgPHN5cy90aW1lLmg+CisrI2VuZGlm CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysjIGlm ZGVmIE9QRU5TU0xfVU5JU1RECisrIyAgaW5jbHVkZSBPUEVOU1NMX1VOSVNURAorKyMgZWxzZQor KyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorKyMgZW5kaWYKKysjZW5kaWYKKysjaW5jbHVkZSA8c3Ry aW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wu aCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrdm9pZCAqT1BFTlNTTF9zdGRlcnIodm9p ZCk7CisrCisrI2RlZmluZSBBRVNfQkxPQ0tfTEVOR1RICTE2CisrCisrCisrLyogQUVTIEZJUFMg UFJORyBpbXBsZW1lbnRhdGlvbiAqLworKworK3R5cGVkZWYgc3RydWN0IAorKwl7CisrCWludCBz ZWVkZWQ7CisrCWludCBrZXllZDsKKysJaW50IHRlc3RfbW9kZTsKKysJaW50IHNlY29uZDsKKysJ aW50IGVycm9yOworKwl1bnNpZ25lZCBsb25nIGNvdW50ZXI7CisrCUFFU19LRVkga3M7CisrCWlu dCB2cG9zOworKwkvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3Iga2V5IGlmIGl0IGVxdWFscyBzZWVk IGxlbmd0aCAqLworKwl1bnNpZ25lZCBjaGFyIHRtcF9rZXlbQUVTX0JMT0NLX0xFTkdUSF07Cisr CXVuc2lnbmVkIGNoYXIgVltBRVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciBEVFtB RVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciBsYXN0W0FFU19CTE9DS19MRU5HVEhd OworKwl9IEZJUFNfUFJOR19DVFg7CisrCisrc3RhdGljIEZJUFNfUFJOR19DVFggc2N0eDsKKysK KytzdGF0aWMgaW50IGZpcHNfcHJuZ19mYWlsID0gMDsKKysKKyt2b2lkIEZJUFNfcm5nX3N0aWNr KHZvaWQpCisrCXsKKysJZmlwc19wcm5nX2ZhaWwgPSAxOworKwl9CisrCisrdm9pZCBmaXBzX3Jh bmRfcHJuZ19yZXNldChGSVBTX1BSTkdfQ1RYICpjdHgpCisrCXsKKysJY3R4LT5zZWVkZWQgPSAw OworKwljdHgtPmtleWVkID0gMDsKKysJY3R4LT50ZXN0X21vZGUgPSAwOworKwljdHgtPmNvdW50 ZXIgPSAwOworKwljdHgtPnNlY29uZCA9IDA7CisrCWN0eC0+ZXJyb3IgPSAwOworKwljdHgtPnZw b3MgPSAwOworKwlPUEVOU1NMX2NsZWFuc2UoY3R4LT5WLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJ T1BFTlNTTF9jbGVhbnNlKCZjdHgtPmtzLCBzaXplb2YoQUVTX0tFWSkpOworKwl9CisrCQorKwor K3N0YXRpYyBpbnQgZmlwc19zZXRfcHJuZ19rZXkoRklQU19QUk5HX0NUWCAqY3R4LAorKwkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4pCisrCXsKKysJ RklQU19zZWxmdGVzdF9jaGVjaygpOworKwlpZiAoa2V5bGVuICE9IDE2ICYmIGtleWxlbiAhPSAy NCAmJiBrZXlsZW4gIT0gMzIpCisrCQl7CisrCQkvKiBlcnJvcjogaW52YWxpZCBrZXkgc2l6ZSAq LworKwkJcmV0dXJuIDA7CisrCQl9CisrCUFFU19zZXRfZW5jcnlwdF9rZXkoa2V5LCBrZXlsZW4g PDwgMywgJmN0eC0+a3MpOworKwlpZiAoa2V5bGVuID09IDE2KQorKwkJeworKwkJbWVtY3B5KGN0 eC0+dG1wX2tleSwga2V5LCAxNik7CisrCQljdHgtPmtleWVkID0gMjsKKysJCX0KKysJZWxzZQor KwkJY3R4LT5rZXllZCA9IDE7CisrCWN0eC0+c2VlZGVkID0gMDsKKysJY3R4LT5zZWNvbmQgPSAw OworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19zZXRfcHJuZ19zZWVkKEZJ UFNfUFJOR19DVFggKmN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkLCBGSVBTX1JB TkRfU0laRV9UIHNlZWRsZW4pCisrCXsKKysJaW50IGk7CisrCWlmICghY3R4LT5rZXllZCkKKysJ CXJldHVybiAwOworKwkvKiBJbiB0ZXN0IG1vZGUgc2VlZCBpcyBqdXN0IHN1cHBsaWVkIGRhdGEg Ki8KKysJaWYgKGN0eC0+dGVzdF9tb2RlKQorKwkJeworKwkJaWYgKHNlZWRsZW4gIT0gQUVTX0JM T0NLX0xFTkdUSCkKKysJCQlyZXR1cm4gMDsKKysJCW1lbWNweShjdHgtPlYsIHNlZWQsIEFFU19C TE9DS19MRU5HVEgpOworKwkJY3R4LT5zZWVkZWQgPSAxOworKwkJcmV0dXJuIDE7CisrCQl9Cisr CS8qIE91dHNpZGUgdGVzdCBtb2RlIFhPUiBzdXBwbGllZCBkYXRhIHdpdGggZXhpc3Rpbmcgc2Vl ZCAqLworKwlmb3IgKGkgPSAwOyBpIDwgc2VlZGxlbjsgaSsrKQorKwkJeworKwkJY3R4LT5WW2N0 eC0+dnBvcysrXSBePSBzZWVkW2ldOworKwkJaWYgKGN0eC0+dnBvcyA9PSBBRVNfQkxPQ0tfTEVO R1RIKQorKwkJCXsKKysJCQljdHgtPnZwb3MgPSAwOworKwkJCS8qIFNwZWNpYWwgY2FzZSBpZiBm aXJzdCBzZWVkIGFuZCBrZXkgbGVuZ3RoIGVxdWFscworKyAJCQkgKiBibG9jayBzaXplIGNoZWNr IGtleSBhbmQgc2VlZCBkbyBub3QgbWF0Y2guCisrIAkJCSAqLyAKKysJCQlpZiAoY3R4LT5rZXll ZCA9PSAyKQorKwkJCQl7CisrCQkJCWlmICghbWVtY21wKGN0eC0+dG1wX2tleSwgY3R4LT5WLCAx NikpCisrCQkJCQl7CisrCQkJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQsCisr CQkJCQkJUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkpOworKwkJCQkJcmV0dXJu IDA7CisrCQkJCQl9CisrCQkJCU9QRU5TU0xfY2xlYW5zZShjdHgtPnRtcF9rZXksIDE2KTsKKysJ CQkJY3R4LT5rZXllZCA9IDE7CisrCQkJCX0KKysJCQljdHgtPnNlZWRlZCA9IDE7CisrCQkJfQor KwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBmaXBzX3NldF90ZXN0X21vZGUoRklQU19Q Uk5HX0NUWCAqY3R4KQorKwl7CisrCWlmIChjdHgtPmtleWVkKQorKwkJeworKwkJUkFORGVycihS QU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFLFJBTkRfUl9QUk5HX0tFWUVEKTsKKysJCXJldHVybiAw OworKwkJfQorKwljdHgtPnRlc3RfbW9kZSA9IDE7CisrCXJldHVybiAxOworKwl9CisrCisraW50 IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCkKKysJeworKwlyZXR1cm4gZmlwc19zZXRfdGVzdF9t b2RlKCZzY3R4KTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIg KmR0KQorKwl7CisrCWlmICghc2N0eC50ZXN0X21vZGUpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRf Rl9GSVBTX1JBTkRfU0VUX0RULFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKTsKKysJCXJldHVybiAw OworKwkJfQorKwltZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5HVEgpOworKwlyZXR1 cm4gMTsKKysJfQorKworK3N0YXRpYyB2b2lkIGZpcHNfZ2V0X2R0KEZJUFNfUFJOR19DVFggKmN0 eCkKKysgICAgeworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlGSUxFVElNRSBmdDsKKysj ZWxzZQorKwlzdHJ1Y3QgdGltZXZhbCB0djsKKysjZW5kaWYKKysJdW5zaWduZWQgY2hhciAqYnVm ID0gY3R4LT5EVDsKKysKKysjaWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUworKwl1bnNpZ25l ZCBsb25nIHBpZDsKKysjZW5kaWYKKysKKysjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysJR2V0 U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0KTsKKysJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpIChm dC5kd0hpZ2hEYXRlVGltZSAmIDB4ZmYpOworKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKChm dC5kd0hpZ2hEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOworKwlidWZbMl0gPSAodW5zaWduZWQgY2hh cikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAxNikgJiAweGZmKTsKKysJYnVmWzNdID0gKHVuc2ln bmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gMjQpICYgMHhmZik7CisrCWJ1Zls0XSA9 ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdMb3dEYXRlVGltZSAmIDB4ZmYpOworKwlidWZbNV0gPSAo dW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDgpICYgMHhmZik7CisrCWJ1Zls2 XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7Cisr CWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gMjQpICYgMHhm Zik7CisrI2Vsc2UKKysJZ2V0dGltZW9mZGF5KCZ0dixOVUxMKTsKKysJYnVmWzBdID0gKHVuc2ln bmVkIGNoYXIpICh0di50dl9zZWMgJiAweGZmKTsKKysJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIp ICgodHYudHZfc2VjID4+IDgpICYgMHhmZik7CisrCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAo KHR2LnR2X3NlYyA+PiAxNikgJiAweGZmKTsKKysJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgo dHYudHZfc2VjID4+IDI0KSAmIDB4ZmYpOworKwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKHR2 LnR2X3VzZWMgJiAweGZmKTsKKysJYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNl YyA+PiA4KSAmIDB4ZmYpOworKwlidWZbNl0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2Vj ID4+IDE2KSAmIDB4ZmYpOworKwlidWZbN10gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2Vj ID4+IDI0KSAmIDB4ZmYpOworKyNlbmRpZgorKwlidWZbOF0gPSAodW5zaWduZWQgY2hhcikgKGN0 eC0+Y291bnRlciAmIDB4ZmYpOworKwlidWZbOV0gPSAodW5zaWduZWQgY2hhcikgKChjdHgtPmNv dW50ZXIgPj4gOCkgJiAweGZmKTsKKysJYnVmWzEwXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGN0eC0+ Y291bnRlciA+PiAxNikgJiAweGZmKTsKKysJYnVmWzExXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGN0 eC0+Y291bnRlciA+PiAyNCkgJiAweGZmKTsKKysKKysJY3R4LT5jb3VudGVyKys7CisrCisrCisr I2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKKysJcGlkPSh1bnNpZ25lZCBsb25nKWdldHBp ZCgpOworKwlidWZbMTJdID0gKHVuc2lnbmVkIGNoYXIpIChwaWQgJiAweGZmKTsKKysJYnVmWzEz XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiA4KSAmIDB4ZmYpOworKwlidWZbMTRdID0gKHVu c2lnbmVkIGNoYXIpICgocGlkID4+IDE2KSAmIDB4ZmYpOworKwlidWZbMTVdID0gKHVuc2lnbmVk IGNoYXIpICgocGlkID4+IDI0KSAmIDB4ZmYpOworKyNlbmRpZgorKyAgICB9CisrCisrc3RhdGlj IGludCBmaXBzX3JhbmQoRklQU19QUk5HX0NUWCAqY3R4LAorKwkJCXVuc2lnbmVkIGNoYXIgKm91 dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciBSW0FFU19C TE9DS19MRU5HVEhdLCBJW0FFU19CTE9DS19MRU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIHRtcFtB RVNfQkxPQ0tfTEVOR1RIXTsKKysJaW50IGk7CisrCWlmIChjdHgtPmVycm9yKQorKwkJeworKwkJ UkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX0VSUk9SKTsKKysJCXJldHVybiAw OworKwkJfQorKwlpZiAoIWN0eC0+a2V5ZWQpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBT X1JBTkQsUkFORF9SX05PX0tFWV9TRVQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmICghY3R4 LT5zZWVkZWQpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdf Tk9UX1NFRURFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJZm9yICg7OykKKysJCXsKKysJCWlm ICghY3R4LT50ZXN0X21vZGUpCisrCQkJZmlwc19nZXRfZHQoY3R4KTsKKysJCUFFU19lbmNyeXB0 KGN0eC0+RFQsIEksICZjdHgtPmtzKTsKKysJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVO R1RIOyBpKyspCisrCQkJdG1wW2ldID0gSVtpXSBeIGN0eC0+VltpXTsKKysJCUFFU19lbmNyeXB0 KHRtcCwgUiwgJmN0eC0+a3MpOworKwkJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7 IGkrKykKKysJCQl0bXBbaV0gPSBSW2ldIF4gSVtpXTsKKysJCUFFU19lbmNyeXB0KHRtcCwgY3R4 LT5WLCAmY3R4LT5rcyk7CisrCQkvKiBDb250aW51b3VzIFBSTkcgdGVzdCAqLworKwkJaWYgKGN0 eC0+c2Vjb25kKQorKwkJCXsKKysJCQlpZiAoZmlwc19wcm5nX2ZhaWwpCisrCQkJCW1lbWNweShj dHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJCWlmICghbWVtY21wKFIsIGN0eC0+ bGFzdCwgQUVTX0JMT0NLX0xFTkdUSCkpCisrCQkJCXsKKysJICAgIAkJCVJBTkRlcnIoUkFORF9G X0ZJUFNfUkFORCxSQU5EX1JfUFJOR19TVFVDSyk7CisrCQkJCWN0eC0+ZXJyb3IgPSAxOworKwkJ CQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7CisrCQkJCXJldHVybiAwOworKwkJCQl9CisrCQkJ fQorKwkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCQlpZiAoIWN0 eC0+c2Vjb25kKQorKwkJCXsKKysJCQljdHgtPnNlY29uZCA9IDE7CisrCQkJaWYgKCFjdHgtPnRl c3RfbW9kZSkKKysJCQkJY29udGludWU7CisrCQkJfQorKworKwkJaWYgKG91dGxlbiA8PSBBRVNf QkxPQ0tfTEVOR1RIKQorKwkJCXsKKysJCQltZW1jcHkob3V0LCBSLCBvdXRsZW4pOworKwkJCWJy ZWFrOworKwkJCX0KKysKKysJCW1lbWNweShvdXQsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJ b3V0ICs9IEFFU19CTE9DS19MRU5HVEg7CisrCQlvdXRsZW4gLT0gQUVTX0JMT0NLX0xFTkdUSDsK KysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKysKKytpbnQgRklQU19yYW5kX3NldF9rZXkoY29u c3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbikKKysJeworKwlp bnQgcmV0OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBmaXBz X3NldF9wcm5nX2tleSgmc2N0eCwga2V5LCBrZXlsZW4pOworKwlDUllQVE9fd191bmxvY2soQ1JZ UFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3Nl ZWQoY29uc3Qgdm9pZCAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVkbGVuKQorKwl7CisrCWlu dCByZXQ7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldCA9IGZpcHNf c2V0X3Bybmdfc2VlZCgmc2N0eCwgc2VlZCwgc2VlZGxlbik7CisrCUNSWVBUT193X3VubG9jayhD UllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQorKworKworK2ludCBGSVBTX3Jh bmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIGNvdW50KQorKwl7 CisrCWludCByZXQ7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldCA9 IGZpcHNfcmFuZCgmc2N0eCwgb3V0LCBjb3VudCk7CisrCUNSWVBUT193X3VubG9jayhDUllQVE9f TE9DS19SQU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc3RhdHVz KHZvaWQpCisrCXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19SQU5E KTsKKysJcmV0ID0gc2N0eC5zZWVkZWQ7CisrCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19S QU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQorKworK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQp CisrCXsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJZmlwc19yYW5kX3By bmdfcmVzZXQoJnNjdHgpOworKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Cisr CX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX2RvX3JhbmRfc2VlZChjb25zdCB2b2lkICpzZWVkLCBG SVBTX1JBTkRfU0laRV9UIHNlZWRsZW4pCisrCXsKKysJRklQU19yYW5kX3NlZWQoc2VlZCwgc2Vl ZGxlbik7CisrCX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX2RvX3JhbmRfYWRkKGNvbnN0IHZvaWQg KnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbiwKKysJCQkJCWRvdWJsZSBhZGRfZW50cm9w eSkKKysJeworKwlGSVBTX3JhbmRfc2VlZChzZWVkLCBzZWVkbGVuKTsKKysJfQorKworK3N0YXRp YyBjb25zdCBSQU5EX01FVEhPRCByYW5kX2ZpcHNfbWV0aD0KKysgICAgeworKyAgICBmaXBzX2Rv X3JhbmRfc2VlZCwKKysgICAgRklQU19yYW5kX2J5dGVzLAorKyAgICBGSVBTX3JhbmRfcmVzZXQs CisrICAgIGZpcHNfZG9fcmFuZF9hZGQsCisrICAgIEZJUFNfcmFuZF9ieXRlcywKKysgICAgRklQ U19yYW5kX3N0YXR1cworKyAgICB9OworKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRf bWV0aG9kKHZvaWQpCisreworKyAgcmV0dXJuICZyYW5kX2ZpcHNfbWV0aDsKKyt9CisrCisrI2Vu ZGlmCitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9m aXBzX3JhbmQuaAorLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgJMjAw OS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNzcgQEAKKysvKiA9 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 SCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaWZuZGVmIEhFQURFUl9GSVBTX1JBTkRfSAorKyNk ZWZpbmUgSEVBREVSX0ZJUFNfUkFORF9ICisrCisrI2luY2x1ZGUgImRlcy5oIgorKworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7Cisr I2VuZGlmCisrCisraW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtl eSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4pOworK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2 b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKTsKKytpbnQgRklQU19yYW5kX2J5dGVzKHVu c2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pOworKworK2ludCBGSVBT X3JhbmRfdGVzdF9tb2RlKHZvaWQpOworK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpOworK2lu dCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKKysKKytpbnQgRklQU19yYW5k X3N0YXR1cyh2b2lkKTsKKysKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2 b2lkKTsKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKyNlbmRpZgorKyNl bmRpZgorZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMv Zmlwc19yYW5kX3NlbGZ0ZXN0LmMKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44 MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNf cmFuZF9zZWxmdGVzdC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAt MCwwICsxLDM3MSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor KyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK KysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHNfcmFuZC5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysKKysKKyt0eXBlZGVmIHN0 cnVjdAorKwl7CisrCXVuc2lnbmVkIGNoYXIgRFRbMTZdOworKwl1bnNpZ25lZCBjaGFyIFZbMTZd OworKwl1bnNpZ25lZCBjaGFyIFJbMTZdOworKwl9IEFFU19QUk5HX1RWOworKworKy8qIFRoZSBm b2xsb3dpbmcgdGVzdCB2ZWN0b3JzIGFyZSB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZSBSR05WUyBz cGVjICovCisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9rZXlbMTZdID0KKysJCXsw eGYzLDB4YjEsMHg2NiwweDZkLDB4MTMsMHg2MCwweDcyLDB4NDIsCisrCQkgMHhlZCwweDA2LDB4 MWMsMHhhYiwweGI4LDB4ZDQsMHg2MiwweDAyfTsKKysKKytzdGF0aWMgQUVTX1BSTkdfVFYgYWVz XzEyOF90dltdID0geworKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhlNiwweGIzLDB4YmUsMHg3 OCwweDJhLDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5 LDB4MjIsMHhmOX0sCisrCQkJCS8qIFYgKi8KKysJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4NTksMHg1MywweDFlLDB4ZDEsMHgzYiwweGIwLDB4 YzAsMHg1NSwKKysJCSAweDg0LDB4NzksMHg2NiwweDg1LDB4YzEsMHgyZiwweDc2LDB4NDF9Cisr CX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgy MywweGZhLDB4NjIsCisrCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGZh fSwKKysJCQkJLyogViAqLworKwkJezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJ CQkvKiBSICovCisrCQl7MHg3YywweDIyLDB4MmMsMHhmNCwweGNhLDB4OGYsMHhhMiwweDRjLAor KwkJIDB4MWMsMHg5YywweGI2LDB4NDEsMHhhOSwweGYzLDB4MjIsMHgwZH0KKysJfSwKKysJewor KwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2 MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmJ9LAorKwkJCQkv KiBWICovCisrCQl7MHhlMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJ IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8K KysJCXsweDhhLDB4YWEsMHgwMCwweDM5LDB4NjYsMHg2NywweDViLDB4ZTUsCisrCQkgMHgyOSww eDE0LDB4MjgsMHg4MSwweGE5LDB4NGQsMHg0ZSwweGM3fQorKwl9LAorKwl7CisrCQkJCS8qIERU ICovCisrCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAorKwkJIDB4 ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmY30sCisrCQkJCS8qIFYgKi8KKysJ CXsweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4ODgs MHhkZCwweGE0LDB4NTYsMHgzMCwweDI0LDB4MjMsMHhlNSwKKysJCSAweGY2LDB4OWQsMHhhNSww eDdlLDB4N2IsMHg5NSwweGM3LDB4M2F9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsw eGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCisrCQkgMHhkNywweDFkLDB4 NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGZkfSwKKysJCQkJLyogViAqLworKwkJezB4ZjgsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHgwNSwweDI1LDB4OTIs MHg0NiwweDYxLDB4NzksMHhkMiwweGNiLAorKwkJIDB4NzgsMHhjNCwweDBiLDB4MTQsMHgwYSww eDVhLDB4OWEsMHhjOH0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMyww eGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4 YjAsMHhlOSwweDIzLDB4Nzd9LAorKwkJCQkvKiBWICovCisrCQl7MHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmLAorKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZX0sCisrCQkJCS8qIFIgKi8KKysJCXsweDBkLDB4ZDUsMHhhMCwweDM2LDB4N2Es MHg1OSwweDI2LDB4YmMsCisrCQkgMHg0OCwweGQ5LDB4MzgsMHhiZiwweGYwLDB4ODUsMHg4Ziww eGVhfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhlNiwweGIzLDB4YmUsMHg3OCww eDJhLDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4 MjMsMHg3OH0sCisrCQkJCS8qIFYgKi8KKysJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsCisrCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZm fSwKKysJCQkJLyogUiAqLworKwkJezB4YWUsMHg1MywweDg3LDB4ZWUsMHg4YywweGQ5LDB4MTIs MHhmNSwKKysJCSAweDczLDB4NTMsMHhhZSwweDAzLDB4ZjksMHhkNSwweDEzLDB4MzN9CisrCX0s CisrfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTkyX2tleVsyNF0gPQorKwkJezB4 MTUsMHhkOCwweDc4LDB4MGQsMHg2MiwweGQzLDB4MjUsMHg2ZSwKKysJCSAweDQ0LDB4NjQsMHgx MCwweDEzLDB4NjAsMHgyYiwweGE5LDB4YmMsCisrCQkgMHg0YSwweGZiLDB4Y2EsMHhlYiwweDRj LDB4OGIsMHg5OSwweDNifTsKKysKKytzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzE5Ml90dltdID0g eworKwl7CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4Njks MHg4YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0Yn0s CisrCQkJCS8qIFYgKi8KKysJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJ LyogUiAqLworKwkJezB4MTcsMHgwNywweGQ1LDB4MjgsMHgxOSwweDc5LDB4MWUsMHhlZiwKKysJ CSAweGE1LDB4MGMsMHhiZiwweDI1LDB4ZTUsMHg1NiwweGI0LDB4OTN9CisrCX0sCisrCXsKKysJ CQkJLyogRFQgKi8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEs CisrCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRjfSwKKysJCQkJLyog ViAqLworKwkJezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAw eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisr CQl7MHg5MiwweDhkLDB4YmUsMHgwNywweGRkLDB4YzcsMHg1OCwweGMwLAorKwkJIDB4NmYsMHgz NSwweDQxLDB4OWIsMHgxNywweGM5LDB4YmQsMHg5Yn0KKysJfSwKKysJeworKwkJCQkvKiBEVCAq LworKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKKysJCSAweGJm LDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGR9LAorKwkJCQkvKiBWICovCisrCQl7 MHhlMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweGQ1LDB4 ZGUsMHhmNCwweDUwLDB4ZjMsMHhiNywweDEwLDB4NGUsCisrCQkgMHhiOCwweGM2LDB4ZjgsMHhj ZiwweGUyLDB4YjEsMHhjYSwweGEyfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHgz ZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdk LDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0ZX0sCisrCQkJCS8qIFYgKi8KKysJCXsweGYwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4Y2UsMHgyOSwweDA4LDB4 NDMsMHhmYywweDM0LDB4NDEsMHhlNywKKysJCSAweDQ3LDB4OGYsMHhiMywweDY2LDB4MmIsMHg0 NiwweGIxLDB4YmJ9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweDNmLDB4ZDgsMHhm ZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0 LDB4NzgsMHhmMywweDRmfSwKKysJCQkJLyogViAqLworKwkJezB4ZjgsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHhiMywweDI2LDB4MGYsMHhmNSwweGQ2LDB4 Y2EsMHhhOCwweGJmLAorKwkJIDB4ODksMHhiOCwweDVlLDB4MmYsMHgyMiwweDU2LDB4OTIsMHgy Zn0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4 MCwweDY5LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYz LDB4Yzl9LAorKwkJCQkvKiBWICovCisrCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLAorKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZX0s CisrCQkJCS8qIFIgKi8KKysJCXsweDA1LDB4ZWIsMHgxOCwweDUyLDB4MzQsMHg0MywweDAwLDB4 NDMsCisrCQkgMHg2ZSwweDVhLDB4YTUsMHhmZSwweDdiLDB4MzIsMHhjNCwweDJkfQorKwl9LAor Kwl7CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4 YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHhjYX0sCisr CQkJCS8qIFYgKi8KKysJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs CisrCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmfSwKKysJCQkJLyog UiAqLworKwkJezB4MTUsMHgzYywweGU4LDB4ZDEsMHgwNCwweGM3LDB4YWQsMHg1MCwKKysJCSAw eDBiLDB4ZjAsMHgwNywweDE2LDB4ZTcsMHg1NiwweDdhLDB4ZWF9CisrCX0sCisrfTsKKysKKytz dGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMjU2X2tleVszMl0gPQorKwkJezB4NmQsMHgxNCwweDA2 LDB4NmMsMHhiNiwweGQ4LDB4MjEsMHgyZCwKKysJCSAweDgyLDB4OGQsMHhmYSwweGYyLDB4N2Es MHgwMywweGI3LDB4OWYsCisrCQkgMHgwYywweGM3LDB4M2UsMHhjZCwweDc2LDB4ZWIsMHhlZSww eGI1LAorKwkJIDB4MjEsMHgwNSwweDhjLDB4NGYsMHgzMSwweDdhLDB4ODAsMHhiYn07CisrCisr c3RhdGljIEFFU19QUk5HX1RWIGFlc18yNTZfdHZbXSA9IHsKKysJeworKwkJCQkvKiBEVCAqLwor KwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJCSAweGYyLDB4 YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4ODh9LAorKwkJCQkvKiBWICovCisrCQl7MHg4 MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDM1LDB4Yzcs MHhlZiwweGE3LDB4NzgsMHg0ZCwweDI5LDB4YmMsCisrCQkgMHg4MiwweDc5LDB4OTksMHhmYiww eGQwLDB4YjMsMHgzYiwweDcyfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhkYSww eDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhhOSwweDRlLDB4 MzQsMHg3NCwweDhlLDB4OWUsMHg4OX0sCisrCQkJCS8qIFYgKi8KKysJCXsweGMwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4NmMsMHhmNCwweDQyLDB4NWQs MHhjNywweDA0LDB4MWEsMHg0MSwKKysJCSAweDI4LDB4MmEsMHg3OCwweGE5LDB4YjAsMHgxMiww eGM0LDB4OTV9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGRhLDB4M2EsMHg0MSww eGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4 OGUsMHg5ZSwweDhhfSwKKysJCQkJLyogViAqLworKwkJezB4ZTAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHgxNiwweDkwLDB4YTQsMHhmZiwweDdiLDB4N2Us MHhiOSwweDMwLAorKwkJIDB4ZGIsMHg2NywweDRiLDB4YWMsMHgyZCwweGUxLDB4ZDEsMHg3NX0K KysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCww eGEzLDB4YjAsMHhkNSwKKysJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4 OGJ9LAorKwkJCQkvKiBWICovCisrCQl7MHhmMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisr CQkJCS8qIFIgKi8KKysJCXsweDE0LDB4NmYsMHhmNSwweDk1LDB4YTEsMHg0NiwweDY1LDB4MzAs CisrCQkgMHhiYywweDU3LDB4ZTIsMHg0YSwweGY3LDB4NDUsMHg2MiwweDA1fQorKwl9LAorKwl7 CisrCQkJCS8qIERUICovCisrCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCww eGQ1LAorKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4Y30sCisrCQkJ CS8qIFYgKi8KKysJCXsweGY4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisr CQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAq LworKwkJezB4OTYsMHhlMiwweGI0LDB4MWUsMHg2NiwweDVlLDB4MGYsMHhhNCwKKysJCSAweGM1 LDB4Y2QsMHhhMiwweDA3LDB4Y2MsMHhiNywweDk0LDB4NDB9CisrCX0sCisrCXsKKysJCQkJLyog RFQgKi8KKysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCisrCQkg MHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZiwweDA2fSwKKysJCQkJLyogViAqLwor KwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKKysJCSAweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmV9LAorKwkJCQkvKiBSICovCisrCQl7MHg2 MSwweGNlLDB4MWQsMHg2YSwweDQ4LDB4NzUsMHg5NywweDI4LAorKwkJIDB4NGIsMHg0MSwweGRl LDB4MTgsMHg0NCwweDRmLDB4NTYsMHhlY30KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJ ezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJCSAweGYyLDB4YTks MHg0ZSwweDM0LDB4NzQsMHg4ZSwweDlmLDB4MDd9LAorKwkJCQkvKiBWICovCisrCQl7MHhmZiww eGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAorKwkJIDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn0sCisrCQkJCS8qIFIgKi8KKysJCXsweDUyLDB4ODksMHg1 OSwweDc5LDB4MmQsMHhhYSwweDI4LDB4YjMsCisrCQkgMHhiMCwweDhhLDB4M2UsMHg3MCwweGZh LDB4NzEsMHg1OSwweDg0fQorKwl9LAorK307CisrCisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcm5n KCkKKysgICAgeworKyAgICBhZXNfMTkyX3R2WzBdLlZbMF0rKzsKKysgICAgfQorKworKyNkZWZp bmUgZmlwc19yYW5kX3Rlc3Qoa2V5LCB0dikgXAorKwlkb19yYW5kX3Rlc3Qoa2V5LCBzaXplb2Yg a2V5LCB0diwgc2l6ZW9mKHR2KS9zaXplb2YoQUVTX1BSTkdfVFYpKQorKworK3N0YXRpYyBpbnQg ZG9fcmFuZF90ZXN0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwKKysJCQlBRVNfUFJO R19UViAqdHYsIGludCBudHYpCisrCXsKKysJdW5zaWduZWQgY2hhciBSWzE2XTsKKysJaW50IGk7 CisrCWlmICghRklQU19yYW5kX3NldF9rZXkoa2V5LCBrZXlsZW4pKQorKwkJcmV0dXJuIDA7Cisr CWZvciAoaSA9IDA7IGkgPCBudHY7IGkrKykKKysJCXsKKysJCUZJUFNfcmFuZF9zZWVkKHR2W2ld LlYsIDE2KTsKKysJCUZJUFNfcmFuZF9zZXRfZHQodHZbaV0uRFQpOworKwkJRklQU19yYW5kX2J5 dGVzKFIsIDE2KTsKKysJCWlmIChtZW1jbXAoUiwgdHZbaV0uUiwgMTYpKQorKwkJCXJldHVybiAw OworKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKwkKKysKKytpbnQgRklQU19zZWxmdGVzdF9ybmco KQorKwl7CisrCUZJUFNfcmFuZF9yZXNldCgpOworKwlpZiAoIUZJUFNfcmFuZF90ZXN0X21vZGUo KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HLEZJUFNfUl9TRUxG VEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmICghZmlwc19yYW5kX3Rlc3Qo YWVzXzEyOF9rZXksYWVzXzEyOF90dikKKysJCXx8ICFmaXBzX3JhbmRfdGVzdChhZXNfMTkyX2tl eSwgYWVzXzE5Ml90dikKKysJCXx8ICFmaXBzX3JhbmRfdGVzdChhZXNfMjU2X2tleSwgYWVzXzI1 Nl90dikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORyxGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwlGSVBTX3JhbmRfcmVzZXQo KTsKKysJcmV0dXJuIDE7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIC9kZXYvbnVsbCBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYworLS0tIC9kZXYvbnVs bAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAw MDAwMDAwICswMTAwCitAQCAtMCwwICsxLDI0OCBAQAorKy8qIENvcHlyaWdodCAoQykgMTk5NS0x OTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0 ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICogVGhlIGltcGxl bWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NM LgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24t Y29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh cmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFwcGx5IHRvIGFs bCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisr ICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNT TCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBj b3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0IHRoZSBo b2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAorKyAqIENvcHly aWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3Rp Y2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAqIElmIHRoaXMg cGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4g YXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFy eSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdl IGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0 ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn ZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3 YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgor KyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJv dWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9n cmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNw ZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAgIHRoZSBh cHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tu b3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0 dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorKyAqIEFOWSBF WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKysgKiBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisr ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICogT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmli dXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisrICog ZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29k ZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0 cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5d CisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAg ZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgor KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisr ICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisr ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+ CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8 Y3R5cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KKysKKysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBT CisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8g RklQUyBSQU5EIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisr CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrdHlwZWRlZiBzdHJ1Y3QKKysJeworKwl1bnNp Z25lZCBjaGFyIERUWzE2XTsKKysJdW5zaWduZWQgY2hhciBWWzE2XTsKKysJdW5zaWduZWQgY2hh ciBSWzE2XTsKKysJfSBBRVNfUFJOR19NQ1Q7CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVz XzEyOF9tY3Rfa2V5WzE2XSA9CisrCXsweDlmLDB4NWIsMHg1MSwweDIwLDB4MGIsMHhmMywweDM0 LDB4YjUsCisrCSAweGQ4LDB4MmIsMHhlOCwweGMzLDB4NzIsMHg1NSwweGM4LDB4NDh9OworKwor K3N0YXRpYyBBRVNfUFJOR19NQ1QgYWVzXzEyOF9tY3RfdHYgPSB7CisrCQkJLyogRFQgKi8KKysJ ezB4NjMsMHg3NiwweGJiLDB4ZTUsMHgyOSwweDAyLDB4YmEsMHgzYiwKKysJIDB4NjcsMHhjOSww eDI1LDB4ZmEsMHg3MCwweDFmLDB4MTEsMHhhY30sCisrCQkJLyogViAqLworKwl7MHg1NywweDJj LDB4OGUsMHg3NiwweDg3LDB4MjYsMHg0NywweDk3LAorKwkgMHg3ZSwweDc0LDB4ZmIsMHhkZCww eGM0LDB4OTUsMHgwMSwweGQxfSwKKysJCQkvKiBSICovCisrCXsweDQ4LDB4ZTksMHhiZCwweDBk LDB4MDYsMHhlZSwweDE4LDB4ZmIsCisrCSAweGU0LDB4NTcsMHg5MCwweGQ1LDB4YzMsMHhmYyww eDliLDB4NzN9CisrfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTkyX21jdF9rZXlb MjRdID0KKysJezB4YjcsMHg2YywweDM0LDB4ZDEsMHgwOSwweDY3LDB4YWIsMHg3MywKKysJIDB4 NGQsMHg1YSwweGQ1LDB4MzQsMHg5OCwweDE2LDB4MGIsMHg5MSwKKysJIDB4YmMsMHgzNSwweDUx LDB4MTYsMHg2YiwweGFlLDB4OTMsMHg4YX07CisrCisrc3RhdGljIEFFU19QUk5HX01DVCBhZXNf MTkyX21jdF90diA9IHsKKysJCQkvKiBEVCAqLworKwl7MHg4NCwweGNlLDB4MjIsMHg3ZCwweDkx LDB4NWEsMHhhMywweGM5LAorKwkgMHg4NCwweDNjLDB4MGEsMHhiMywweGE5LDB4NjMsMHgxNSww eDUyfSwKKysJCQkvKiBWICovCisrCXsweGI2LDB4YWYsMHhlNiwweDhmLDB4OTksMHg5ZSwweDkw LDB4NjQsCisrCSAweGRkLDB4YzcsMHg3YSwweGMxLDB4YmIsMHg5MCwweDNhLDB4NmR9LAorKwkJ CS8qIFIgKi8KKysJezB4ZmMsMHg4NSwweDYwLDB4OWEsMHgyOSwweDZmLDB4ZWYsMHgyMSwKKysJ IDB4ZGQsMHg4NiwweDIwLDB4MzIsMHg4YSwweDI5LDB4NmYsMHg0N30KKyt9OworKworK3N0YXRp YyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbWN0X2tleVszMl0gPQorKwl7MHg5YiwweDA1LDB4Yzgs MHg2OCwweGZmLDB4NDcsMHhmOCwweDNhLAorKwkgMHhhNiwweDNhLDB4YTgsMHhjYiwweDRlLDB4 NzEsMHhiMiwweGUwLAorKwkgMHhiOCwweDdlLDB4ZjEsMHgzNywweGI2LDB4YjQsMHhmNiwweDZk LAorKwkgMHg4NiwweDMyLDB4ZmMsMHgxZiwweDVlLDB4MWQsMHgxZSwweDUwfTsKKysKKytzdGF0 aWMgQUVTX1BSTkdfTUNUIGFlc18yNTZfbWN0X3R2ID0geworKwkJCS8qIERUICovCisrCXsweDMx LDB4NmUsMHgzNSwweDlhLDB4YjEsMHg0NCwweGYwLDB4ZWUsCisrCSAweDYyLDB4NmQsMHgwNCww eDQ2LDB4ZTAsMHhhMywweDkyLDB4NGN9LAorKwkJCS8qIFYgKi8KKysJezB4NGYsMHhjZCwweGMx LDB4ODcsMHg4MiwweDFmLDB4NGQsMHhhMSwKKysJIDB4M2UsMHgwZSwweDU2LDB4NDQsMHg1OSww eGU4LDB4ODMsMHhjYX0sCisrCQkJLyogUiAqLworKwl7MHhjOCwweDg3LDB4YzIsMHg2MSwweDVi LDB4ZDAsMHhiOSwweGUxLAorKwkgMHhlNywweGYzLDB4OGIsMHhkNywweDViLDB4ZDUsMHhmMSww eDhkfQorK307CisrCisrc3RhdGljIHZvaWQgZHVtcChjb25zdCB1bnNpZ25lZCBjaGFyICpiLGlu dCBuKQorKyAgICB7CisrICAgIHdoaWxlKG4tLSA+IDApCisrCXsKKysJcHJpbnRmKCIgJTAyeCIs KmIrKyk7CisrCX0KKysgICAgfQorKworK3N0YXRpYyB2b2lkIGNvbXBhcmUoY29uc3QgdW5zaWdu ZWQgY2hhciAqcmVzdWx0LGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4cGVjdGVkLAorKwkJICAgIGlu dCBuKQorKyAgICB7CisrICAgIGludCBpOworKworKyAgICBmb3IoaT0wIDsgaSA8IG4gOyArK2kp CisrCWlmKHJlc3VsdFtpXSAhPSBleHBlY3RlZFtpXSkKKysJICAgIHsKKysJICAgIHB1dHMoIlJh bmRvbSB0ZXN0IGZhaWxlZCwgZ290OiIpOworKwkgICAgZHVtcChyZXN1bHQsbik7CisrCSAgICBw dXRzKCJcbiAgICAgICAgICAgICAgIGV4cGVjdGVkOiIpOworKwkgICAgZHVtcChleHBlY3RlZCxu KTsKKysJICAgIHB1dGNoYXIoJ1xuJyk7CisrCSAgICBFWElUKDEpOworKwkgICAgfQorKyAgICB9 CisrCisrCisrc3RhdGljIHZvaWQgcnVuX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5 bGVuLCBBRVNfUFJOR19NQ1QgKnR2KQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2 XSwgZHRbMTZdOworKyAgICBpbnQgaSwgajsKKysgICAgRklQU19yYW5kX3Jlc2V0KCk7CisrICAg IEZJUFNfcmFuZF90ZXN0X21vZGUoKTsKKysgICAgRklQU19yYW5kX3NldF9rZXkoa2V5LCBrZXls ZW4pOworKyAgICBGSVBTX3JhbmRfc2VlZCh0di0+ViwgMTYpOworKyAgICBtZW1jcHkoZHQsIHR2 LT5EVCwgMTYpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKKysJeworKyAgICAJ RklQU19yYW5kX3NldF9kdChkdCk7CisrCUZJUFNfcmFuZF9ieXRlcyhidWYsIDE2KTsKKysJLyog SW5jcmVtZW50IERUICovCisrCWZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKKysJCXsKKysJCWR0 W2pdKys7CisrCQlpZiAoZHRbal0pCisrCQkJYnJlYWs7CisrCQl9CisrCX0KKysKKysgICAgY29t cGFyZShidWYsdHYtPlIsIDE2KTsKKysgICAgfQorKworK2ludCBtYWluKCkKKysJeworKwlydW5f dGVzdChhZXNfMTI4X21jdF9rZXksIDE2LCAmYWVzXzEyOF9tY3RfdHYpOworKwlwcmludGYoIkZJ UFMgUFJORyB0ZXN0IDEgZG9uZVxuIik7CisrCXJ1bl90ZXN0KGFlc18xOTJfbWN0X2tleSwgMjQs ICZhZXNfMTkyX21jdF90dik7CisrCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMiBkb25lXG4iKTsK KysJcnVuX3Rlc3QoYWVzXzI1Nl9tY3Rfa2V5LCAzMiwgJmFlc18yNTZfbWN0X3R2KTsKKysJcHJp bnRmKCJGSVBTIFBSTkcgdGVzdCAzIGRvbmVcbiIpOworKwlyZXR1cm4gMDsKKysJfQorKworKyNl bmRpZgorZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMv Zmlwc19yc2Ffc2VsZnRlc3QuYworLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4Ljgw MTAwMjI3NiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19y c2Ffc2VsZnRlc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAs MCArMSw0MzkgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3 IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK KysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRl IDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgdW5zaWduZWQg Y2hhciBuW10gPQorKyJceDAwXHhCQlx4RjhceDJGXHgwOVx4MDZceDgyXHhDRVx4OUNceDIzXHgz OFx4QUNceDJCXHg5RFx4QThceDcxIgorKyJceEY3XHgzNlx4OERceDA3XHhFRVx4RDRceDEwXHg0 M1x4QTRceDQwXHhENlx4QjZceEYwXHg3NFx4NTRceEY1IgorKyJceDFGXHhCOFx4REZceEJBXHhB Rlx4MDNceDVDXHgwMlx4QUJceDYxXHhFQVx4NDhceENFXHhFQlx4NkZceENEIgorKyJceDQ4XHg3 Nlx4RURceDUyXHgwRFx4NjBceEUxXHhFQ1x4NDZceDE5XHg3MVx4OURceDhBXHg1Qlx4OEJceDgw IgorKyJceDdGXHhBRlx4QjhceEUwXHhBM1x4REZceEM3XHgzN1x4NzJceDNFXHhFNlx4QjRceEI3 XHhEOVx4M0FceDI1IgorKyJceDg0XHhFRVx4NkFceDY0XHg5RFx4MDZceDA5XHg1M1x4NzRceDg4 XHgzNFx4QjJceDQ1XHg0NVx4OThceDM5IgorKyJceDRFXHhFMFx4QUFceEIxXHgyRFx4N0JceDYx XHhBNVx4MUZceDUyXHg3QVx4OUFceDQxXHhGNlx4QzFceDY4IgorKyJceDdGXHhFMlx4NTNceDcy XHg5OFx4Q0FceDJBXHg4Rlx4NTlceDQ2XHhGOFx4RTVceEZEXHgwOVx4MURceEJEIgorKyJceENC IjsKKysKKysKKytzdGF0aWMgaW50IHNldHJzYWtleShSU0EgKmtleSkKKysgICAgeworKyAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlW10gPSAiXHgxMSI7CisrCisrICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGRbXSA9CisrIlx4MDBceEE1XHhEQVx4RkNceDUzXHg0MVx4RkFc eEYyXHg4OVx4QzRceEI5XHg4OFx4REJceDMwXHhDMVx4Q0QiCisrIlx4RjhceDNGXHgzMVx4MjVc eDFFXHgwNlx4NjhceEI0XHgyN1x4ODRceDgxXHgzOFx4MDFceDU3XHg5Nlx4NDEiCisrIlx4QjJc eDk0XHgxMFx4QjNceEM3XHg5OVx4OERceDZCXHhDNFx4NjVceDc0XHg1RVx4NUNceDM5XHgyNlx4 NjkiCisrIlx4RDZceDg3XHgwRFx4QTJceEMwXHg4Mlx4QTlceDM5XHhFM1x4N0ZceERDXHhCOFx4 MkVceEM5XHgzRVx4REEiCisrIlx4QzlceDdGXHhGM1x4QURceDU5XHg1MFx4QUNceENGXHhCQ1x4 MTFceDFDXHg3Nlx4RjFceEE5XHg1Mlx4OTQiCisrIlx4NDRceEU1XHg2QVx4QUZceDY4XHhDNVx4 NkNceDA5XHgyQ1x4RDNceDhEXHhDM1x4QkVceEY1XHhEMlx4MEEiCisrIlx4OTNceDk5XHgyNlx4 RURceDRGXHg3NFx4QTFceDNFXHhERFx4RkJceEUxXHhBMVx4Q0VceENDXHg0OFx4OTQiCisrIlx4 QUZceDk0XHgyOFx4QzJceEI3XHhCOFx4ODhceDNGXHhFNFx4NDZceDNBXHg0Qlx4QzhceDVCXHgx Q1x4QjMiCisrIlx4QzEiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwW10g PQorKyJceDAwXHhFRVx4Q0ZceEFFXHg4MVx4QjFceEI5XHhCM1x4QzlceDA4XHg4MVx4MEJceDEw XHhBMVx4QjVceDYwIgorKyJceDAxXHg5OVx4RUJceDlGXHg0NFx4QUVceEY0XHhGRFx4QTRceDkz XHhCOFx4MUFceDlFXHgzRFx4ODRceEY2IgorKyJceDMyXHgxMlx4NEVceEYwXHgyM1x4NkVceDVE XHgxRVx4M0JceDdFXHgyOFx4RkFceEU3XHhBQVx4MDRceDBBIgorKyJceDJEXHg1Qlx4MjVceDIx XHg3Nlx4NDVceDlEXHgxRlx4MzlceDc1XHg0MVx4QkFceDJBXHg1OFx4RkJceDY1IgorKyJceDk5 IjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcVtdID0KKysiXHgwMFx4Qzlc eDdGXHhCMVx4RjBceDI3XHhGNFx4NTNceEY2XHgzNFx4MTJceDMzXHhFQVx4QUFceEQxXHhEOSIK KysiXHgzNVx4M0ZceDZDXHg0Mlx4RDBceDg4XHg2Nlx4QjFceEQwXHg1QVx4MEZceDIwXHgzNVx4 MDJceDhCXHg5RCIKKysiXHg4Nlx4OThceDQwXHhCNFx4MTZceDY2XHhCNFx4MkVceDkyXHhFQVx4 MERceEEzXHhCNFx4MzJceDA0XHhCNSIKKysiXHhDRlx4Q0VceDMzXHg1Mlx4NTJceDREXHgwNFx4 MTZceEE1XHhBNFx4NDFceEU3XHgwMFx4QUZceDQ2XHgxNSIKKysiXHgwMyI7CisrCisrICAgIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcDFbXSA9CisrIlx4NTRceDQ5XHg0Q1x4QTZceDNF XHhCQVx4MDNceDM3XHhFNFx4RTJceDQwXHgyM1x4RkNceEQ2XHg5QVx4NUEiCisrIlx4RUJceDA3 XHhERFx4RENceDAxXHg4M1x4QTRceEQwXHhBQ1x4OUJceDU0XHhCMFx4NTFceEYyXHhCMVx4M0Ui CisrIlx4RDlceDQ5XHgwOVx4NzVceEVBXHhCN1x4NzRceDE0XHhGRlx4NTlceEMxXHhGN1x4Njlc eDJFXHg5QVx4MkUiCisrIlx4MjBceDJCXHgzOFx4RkNceDkxXHgwQVx4NDdceDQxXHg3NFx4QURc eEM5XHgzQ1x4MUZceDY3XHhDOVx4ODEiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBkbXExW10gPQorKyJceDQ3XHgxRVx4MDJceDkwXHhGRlx4MEFceEYwXHg3NVx4MDNceDUx XHhCN1x4RjhceDc4XHg4Nlx4NENceEE5IgorKyJceDYxXHhBRFx4QkRceDNBXHg4QVx4N0VceDk5 XHgxQ1x4NUNceDA1XHg1Nlx4QTlceDRDXHgzMVx4NDZceEE3IgorKyJceEY5XHg4MFx4M0ZceDhG XHg2Rlx4OEFceEUzXHg0Mlx4RTlceDMxXHhGRFx4OEFceEU0XHg3QVx4MjJceDBEIgorKyJceDFC XHg5OVx4QTRceDk1XHg4NFx4OThceDA3XHhGRVx4MzlceEY5XHgyNFx4NUFceDk4XHgzNlx4REFc eDNEIjsKKysgICAgCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlxbXBbXSA9Cisr Ilx4MDBceEIwXHg2Q1x4NEZceERBXHhCQlx4NjNceDAxXHgxOVx4OERceDI2XHg1Qlx4REJceEFF XHg5NFx4MjMiCisrIlx4QjNceDgwXHhGMlx4NzFceEY3XHgzNFx4NTNceDg4XHg1MFx4OTNceDA3 XHg3Rlx4Q0RceDM5XHhFMlx4MTEiCisrIlx4OUZceEM5XHg4Nlx4MzJceDE1XHg0Rlx4NThceDgz XHhCMVx4NjdceEE5XHg2N1x4QkZceDQwXHgyQlx4NEUiCisrIlx4OUVceDJFXHgwRlx4OTZceDU2 XHhFNlx4OThceEVBXHgzNlx4NjZceEVEXHhGQlx4MjVceDc5XHg4MFx4MzkiCisrIlx4RjciOwor KworKyAgICBrZXktPm4gPSBCTl9iaW4yYm4obiwgc2l6ZW9mKG4pLTEsIGtleS0+bik7CisrICAg IGtleS0+ZSA9IEJOX2JpbjJibihlLCBzaXplb2YoZSktMSwga2V5LT5lKTsKKysgICAga2V5LT5k ID0gQk5fYmluMmJuKGQsIHNpemVvZihkKS0xLCBrZXktPmQpOworKyAgICBrZXktPnAgPSBCTl9i aW4yYm4ocCwgc2l6ZW9mKHApLTEsIGtleS0+cCk7CisrICAgIGtleS0+cSA9IEJOX2JpbjJibihx LCBzaXplb2YocSktMSwga2V5LT5xKTsKKysgICAga2V5LT5kbXAxID0gQk5fYmluMmJuKGRtcDEs IHNpemVvZihkbXAxKS0xLCBrZXktPmRtcDEpOworKyAgICBrZXktPmRtcTEgPSBCTl9iaW4yYm4o ZG1xMSwgc2l6ZW9mKGRtcTEpLTEsIGtleS0+ZG1xMSk7CisrICAgIGtleS0+aXFtcCA9IEJOX2Jp bjJibihpcW1wLCBzaXplb2YoaXFtcCktMSwga2V5LT5pcW1wKTsKKysgICAgcmV0dXJuIDE7Cisr ICAgIH0KKysKKyt2b2lkIEZJUFNfY29ycnVwdF9yc2EoKQorKyAgICB7CisrICAgIG5bMF0rKzsK KysgICAgfQorKworKy8qIEtub3duIEFuc3dlciBUZXN0IChLQVQpIGRhdGEgZm9yIHRoZSBhYm92 ZSBSU0EgcHJpdmF0ZSBrZXkgc2lnbmluZworKyAqIGthdF90YnMuCisrICovCisrCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X3Ric1tdID0gIk9wZW5TU0wgRklQUyAxNDAtMiBQdWJs aWMgS2V5IFJTQSBLQVQiOworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff UFNTX1NIQTFbXSA9IHsKKysgIDB4MkQsIDB4QUYsIDB4NkUsIDB4QzIsIDB4OTgsIDB4RkIsIDB4 OEEsIDB4QTEsIDB4QjksIDB4NDYsIDB4REEsIDB4MEYsCisrICAweDAxLCAweDFFLCAweDM3LCAw eDkzLCAweEMyLCAweDU1LCAweDI3LCAweEU0LCAweDFELCAweEQyLCAweDkwLCAweEJCLAorKyAg MHhGNCwgMHhCRiwgMHg0QSwgMHg3NCwgMHgzOSwgMHg1MSwgMHhCQiwgMHhFOCwgMHgwQywgMHhC NywgMHhGOCwgMHhEMywKKysgIDB4RDEsIDB4REYsIDB4RTcsIDB4QkUsIDB4ODAsIDB4MDUsIDB4 QzMsIDB4QjUsIDB4QzcsIDB4ODMsIDB4RDUsIDB4NEMsCisrICAweDdGLCAweDQ5LCAweEZCLCAw eDNGLCAweDI5LCAweDlCLCAweEUxLCAweDEyLCAweDUxLCAweDYwLCAweEQwLCAweEE3LAorKyAg MHgwRCwgMHhBOSwgMHgyOCwgMHg1NiwgMHg3MywgMHhEOSwgMHgwNywgMHhFMywgMHg1RSwgMHgz RiwgMHg5QiwgMHhGNSwKKysgIDB4QjYsIDB4RjMsIDB4RjIsIDB4NUUsIDB4NzQsIDB4QzksIDB4 ODMsIDB4ODEsIDB4NDcsIDB4RjAsIDB4QzUsIDB4NDUsCisrICAweDBBLCAweEU5LCAweDhFLCAw eDM4LCAweEQ3LCAweDE4LCAweEM2LCAweDJBLCAweDBGLCAweEY4LCAweEI3LCAweDMxLAorKyAg MHhENiwgMHg1NSwgMHhFNCwgMHg2NiwgMHg3OCwgMHg4MSwgMHhENCwgMHhFNiwgMHhEQiwgMHg5 RiwgMHhCQSwgMHhFOCwKKysgIDB4MjMsIDB4QjUsIDB4N0YsIDB4REMsIDB4MDgsIDB4RUEsIDB4 RDUsIDB4MjYsIDB4MUUsIDB4MjAsIDB4MjUsIDB4ODQsCisrICAweDI2LCAweEM2LCAweDc5LCAw eEM5LCAweDlCLCAweDNELCAweDdFLCAweEE5CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyMjRbXSA9IHsKKysgIDB4MzksIDB4NEEsIDB4NkEsIDB4 MjAsIDB4QkMsIDB4RTksIDB4MzMsIDB4RUQsIDB4RUYsIDB4QzUsIDB4NTgsIDB4QTcsCisrICAw eEZFLCAweDgxLCAweEM0LCAweDM2LCAweDUwLCAweDlBLCAweDJDLCAweDgyLCAweDk4LCAweDA4 LCAweDk1LCAweEZBLAorKyAgMHhCMSwgMHg5RSwgMHhEMiwgMHg1NSwgMHg2MSwgMHg4NywgMHgy MSwgMHg1OSwgMHg4NywgMHg3QiwgMHgxRiwgMHg1NywKKysgIDB4MzAsIDB4OUQsIDB4MEQsIDB4 NEEsIDB4MDYsIDB4RUIsIDB4NTIsIDB4MzcsIDB4NTUsIDB4NTQsIDB4MUMsIDB4ODksCisrICAw eDgzLCAweDc1LCAweDU5LCAweDY1LCAweDY0LCAweDkwLCAweDJFLCAweDE2LCAweENDLCAweDg2 LCAweDA1LCAweEVFLAorKyAgMHhCMSwgMHhFNiwgMHg3QiwgMHhCQSwgMHgxNiwgMHg3NSwgMHgw RCwgMHgwQywgMHg2NCwgMHgwQiwgMHhBQiwgMHgyMiwKKysgIDB4MTUsIDB4NzgsIDB4NkIsIDB4 NkYsIDB4QTQsIDB4RkIsIDB4NzcsIDB4NDAsIDB4NjQsIDB4NjIsIDB4RDEsIDB4QjUsCisrICAw eDM3LCAweDFFLCAweEUwLCAweDNELCAweEE4LCAweEY5LCAweEQyLCAweEJELCAweEFBLCAweDM4 LCAweDI0LCAweDQ5LAorKyAgMHg1OCwgMHhEMiwgMHg3NCwgMHg4NSwgMHhGNCwgMHhCNSwgMHg5 MywgMHg4RSwgMHhGNSwgMHgwMywgMHhFQSwgMHgyRCwKKysgIDB4QzgsIDB4NTIsIDB4RkEsIDB4 Q0YsIDB4N0UsIDB4MzUsIDB4QjAsIDB4NkEsIDB4QUYsIDB4OTUsIDB4QzAsIDB4MDAsCisrICAw eDU0LCAweDc2LCAweDNELCAweDBDLCAweDlDLCAweEIyLCAweEVFLCAweEMwCisrfTsKKysKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyNTZbXSA9IHsKKysgIDB4 NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4NjAsIDB4NkQsIDB4MjUsIDB4MTQsIDB4RjAsIDB4MzEs IDB4RTMsIDB4ODksCisrICAweDAwLCAweDk3LCAweEZBLCAweDk5LCAweDcxLCAweDI4LCAweEU1 LCAweDEwLCAweDI1LCAweDlBLCAweEYzLCAweDhGLAorKyAgMHg3QiwgMHhDNSwgMHhBOCwgMHg0 QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhFMiwgMHg4RCwgMHg3RCwgMHg3MywgMHgyOCwKKysgIDB4 QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4OTcsIDB4MDAsIDB4OEIsIDB4MDAsIDB4QTMsIDB4OTYs IDB4NzMsIDB4NEUsCisrICAweDdELCAweDJFLCAweDJDLCAweDM0LCAweDY4LCAweDhDLCAweDhF LCAweERGLCAweDlELCAweDQ5LCAweDQ3LCAweDA1LAorKyAgMHhBQiwgMHhGNSwgMHgwMSwgMHhE NiwgMHg4MSwgMHg0NywgMHg3MCwgMHhGNSwgMHgxRCwgMHg2RCwgMHgyNiwgMHhCQSwKKysgIDB4 MkYsIDB4N0EsIDB4NTQsIDB4NTMsIDB4NEUsIDB4RUQsIDB4NzEsIDB4RDksIDB4NUEsIDB4RjMs IDB4REEsIDB4QjYsCisrICAweDBCLCAweDQ3LCAweDM0LCAweEFGLCAweDkwLCAweERDLCAweEM4 LCAweEQ5LCAweDZGLCAweDU2LCAweENELCAweDlGLAorKyAgMHgyMSwgMHhCNywgMHg3RSwgMHhB RCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1MCwgMHg0NywgMHgxMiwgMHhFNCwgMHg2RCwKKysgIDB4 NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMsIDB4MTEsIDB4NkMsIDB4QTksIDB4OUUsIDB4NDks IDB4QjksIDB4RjYsCisrICAweDcyLCAweEY0LCAweEY2LCAweEVGLCAweDg4LCAweDFFLCAweDJE LCAweDFDCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19T SEEzODRbXSA9IHsKKysgIDB4NDAsIDB4RkIsIDB4QTEsIDB4MjEsIDB4RjQsIDB4QjIsIDB4NDAs IDB4OUEsIDB4QjQsIDB4MzEsIDB4QTgsIDB4RjIsCisrICAweEVDLCAweDFDLCAweEM0LCAweEM4 LCAweDdDLCAweDIyLCAweDY1LCAweDlDLCAweDU3LCAweDQ1LCAweENELCAweDVFLAorKyAgMHg4 NiwgMHgwMCwgMHhGNywgMHgyNSwgMHg3OCwgMHhERSwgMHhEQywgMHg3QSwgMHg3MSwgMHg0NCwg MHg5QSwgMHhDRCwKKysgIDB4QUEsIDB4MjUsIDB4RjQsIDB4QjIsIDB4RkMsIDB4RjAsIDB4NzUs IDB4RDksIDB4MkYsIDB4NzgsIDB4MjMsIDB4N0YsCisrICAweDZGLCAweDAyLCAweEVGLCAweEMx LCAweEFGLCAweEE2LCAweDI4LCAweDE2LCAweDMxLCAweERDLCAweDQyLCAweDZDLAorKyAgMHhC MiwgMHg0NCwgMHhFNSwgMHg0RCwgMHg2NiwgMHhBMiwgMHhFNiwgMHg3MSwgMHhGMywgMHhBQywg MHg0RiwgMHhGQiwKKysgIDB4OTEsIDB4Q0EsIDB4RjUsIDB4NzAsIDB4RUYsIDB4NkIsIDB4OUQs IDB4QTQsIDB4RUYsIDB4RDksIDB4M0QsIDB4MkYsCisrICAweDNBLCAweEJFLCAweDg5LCAweDM4 LCAweDU5LCAweDAxLCAweEJBLCAweERBLCAweDMyLCAweEFELCAweDQyLCAweDg5LAorKyAgMHg5 OCwgMHg4QiwgMHgzOSwgMHg0NCwgMHhGMCwgMHhGQywgMHgzOCwgMHhBQywgMHg4NywgMHgxRiwg MHhDQSwgMHg2RiwKKysgIDB4NDgsIDB4RjYsIDB4QUUsIDB4RDcsIDB4NDUsIDB4RUUsIDB4QUUs IDB4ODgsIDB4MEUsIDB4NjAsIDB4RjQsIDB4NTUsCisrICAweDQ4LCAweDQ0LCAweEVFLCAweDFG LCAweDkwLCAweDE4LCAweDRCLCAweEYxCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBrYXRfUlNBX1BTU19TSEE1MTJbXSA9IHsKKysgIDB4MDcsIDB4MUUsIDB4RDgsIDB4RDUs IDB4MDUsIDB4RTgsIDB4RTYsIDB4RTYsIDB4NTcsIDB4QUUsIDB4NjMsIDB4OEMsCisrICAweEM2 LCAweDgzLCAweEI3LCAweEEwLCAweDU5LCAweEJCLCAweEYyLCAweEM2LCAweDhGLCAweDEyLCAw eDUzLCAweDlBLAorKyAgMHg5QiwgMHg1NCwgMHg5RSwgMHhCMywgMHhDMSwgMHgxRCwgMHgyMywg MHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwgMHhERCwKKysgIDB4NEIsIDB4RjMsIDB4NDYsIDB4OUIs IDB4NkIsIDB4RjYsIDB4N0MsIDB4MjQsIDB4NjAsIDB4NzksIDB4MjMsIDB4MzksCisrICAweDAx LCAweDFDLCAweDUxLCAweENCLCAweEQ4LCAweEU5LCAweDlBLCAweDAxLCAweDY3LCAweDVGLCAw eEZFLCAweEQ3LAorKyAgMHg3QywgMHhFMywgMHg3RiwgMHhFRCwgMHhEQiwgMHg4NywgMHhCQiwg MHhGMCwgMHgzRCwgMHg3OCwgMHg1NSwgMHg2MSwKKysgIDB4NTcsIDB4RTMsIDB4MEYsIDB4RTMs IDB4RDIsIDB4OUQsIDB4MEMsIDB4MkEsIDB4MjAsIDB4QjAsIDB4ODUsIDB4MTMsCisrICAweEM1 LCAweDQ3LCAweDM0LCAweDBELCAweDMyLCAweDE1LCAweEM4LCAweEFFLCAweDlBLCAweDZBLCAw eDM5LCAweDYzLAorKyAgMHgyRCwgMHg2MCwgMHhGNSwgMHg0QywgMHhERiwgMHg4QSwgMHg0OCwg MHg0QiwgMHhCRiwgMHhGNCwgMHhBOCwgMHhGRSwKKysgIDB4NzYsIDB4RjIsIDB4MzIsIDB4MUIs IDB4OUMsIDB4N0MsIDB4Q0EsIDB4RkUsIDB4N0YsIDB4ODAsIDB4QzIsIDB4ODgsCisrICAweDVD LCAweDk3LCAweDcwLCAweEI0LCAweDI2LCAweEM5LCAweDE0LCAweDhCCisrfTsKKysKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTFbXSA9IHsKKysgIDB4NzEsIDB4RUUs IDB4MUEsIDB4QzAsIDB4RkUsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NzksIDB4NUMsIDB4RjIsIDB4 NEMsCisrICAweDRBLCAweEZELCAweDFBLCAweDA1LCAweDhGLCAweDY0LCAweEIxLCAweDZELCAw eDYxLCAweDMzLCAweDhELCAweDlCLAorKyAgMHhFNywgMHhGRCwgMHg2MCwgMHhBMywgMHg4Mywg MHhCNSwgMHhBMywgMHg1MSwgMHg1NSwgMHg3NywgMHg5MCwgMHhDRiwKKysgIDB4REMsIDB4MjIs IDB4MzcsIDB4OEUsIDB4RDAsIDB4RTEsIDB4QUUsIDB4MDksIDB4RTMsIDB4M0QsIDB4MUUsIDB4 RjgsCisrICAweDgwLCAweEQxLCAweDhCLCAweEMyLCAweEVDLCAweDBBLCAweEQ3LCAweDZCLCAw eDg4LCAweDhCLCAweDhCLCAweEExLAorKyAgMHgyMCwgMHgyMiwgMHhCRSwgMHg1OSwgMHg1Qiwg MHhFMCwgMHgyMywgMHgyNCwgMHhBMSwgMHg0OSwgMHgzMCwgMHhCQSwKKysgIDB4QTksIDB4OUUs IDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIsIDB4MTYsIDB4QkYsIDB4NEUsIDB4Q0EsIDB4MkUsIDB4 NEUsCisrICAweEJDLCAweDI5LCAweEE4LCAweDY3LCAweDEzLCAweEI3LCAweDlGLCAweDFELCAw eDA0LCAweDQ0LCAweEU1LCAweDVGLAorKyAgMHgzNSwgMHgwNywgMHgxMSwgMHhCQywgMHhFRCwg MHgxOSwgMHgzNywgMHgyMSwgMHhDRiwgMHgyMywgMHg0OCwgMHgxRiwKKysgIDB4NzIsIDB4MDUs IDB4REUsIDB4RTYsIDB4RTgsIDB4N0YsIDB4MzMsIDB4OEEsIDB4NzYsIDB4NEIsIDB4MkYsIDB4 OTUsCisrICAweERGLCAweEYxLCAweDVGLCAweDg0LCAweDgwLCAweEQ5LCAweDQ2LCAweEI0Cisr fTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTIyNFtdID0gewor KyAgMHg2MiwgMHhBQSwgMHg3OSwgMHhBOSwgMHgxOCwgMHgwRSwgMHg1RiwgMHg4QywgMHhCQiwg MHhCNywgMHgxNSwgMHhGOSwKKysgIDB4MjUsIDB4QkIsIDB4RkEsIDB4RDQsIDB4M0EsIDB4MzQs IDB4RUQsIDB4OUUsIDB4QTAsIDB4QTksIDB4MTgsIDB4OEQsCisrICAweDVCLCAweDU1LCAweDlB LCAweDdFLCAweDFFLCAweDA4LCAweDA4LCAweDYwLCAweEM1LCAweDFBLCAweEM1LCAweDg5LAor KyAgMHgwOCwgMHhFMiwgMHgxQiwgMHhCRCwgMHg2MiwgMHg1MCwgMHgxNywgMHg3NiwgMHgzMCwg MHgyQywgMHg5RSwgMHhDRCwKKysgIDB4QTQsIDB4MDIsIDB4QUQsIDB4QjEsIDB4NkQsIDB4NDQs IDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUsIDB4NDEsIDB4RTUsCisrICAweEVFLCAweDFGLCAweDhE LCAweDdFLCAweDA4LCAweDE2LCAweEE2LCAweEUxLCAweDVFLCAweDBCLCAweEE5LCAweENDLAor KyAgMHhEQiwgMHg1OSwgMHg1NSwgMHg4NywgMHgwOSwgMHgyNSwgMHg3MCwgMHg4NiwgMHg4NCwg MHgwMiwgMHhDNiwgMHgzQiwKKysgIDB4MEIsIDB4NDQsIDB4NEMsIDB4NDYsIDB4OTUsIDB4RjQs IDB4RjgsIDB4NUEsIDB4OTEsIDB4MjgsIDB4M0UsIDB4QjIsCisrICAweDU4LCAweDJFLCAweDA2 LCAweDQ1LCAweDQ5LCAweEUwLCAweDkyLCAweEUyLCAweEMwLCAweDY2LCAweEU2LCAweDM1LAor KyAgMHhEOSwgMHg3OSwgMHg3RiwgMHgxNywgMHg1RSwgMHgwMiwgMHg3MywgMHgwNCwgMHg3Nywg MHg4MiwgMHhFNiwgMHhEQywKKysgIDB4NDAsIDB4MjEsIDB4ODksIDB4OEIsIDB4MzcsIDB4M0Us IDB4MUUsIDB4OEQKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff U0hBMjU2W10gPSB7CisrICAweDBELCAweDU1LCAweEUyLCAweEFBLCAweDgxLCAweERCLCAweDhF LCAweDgyLCAweDA1LCAweDE3LCAweEE1LCAweDIzLAorKyAgMHhFNywgMHgzQiwgMHgxRCwgMHhB RiwgMHhGQiwgMHg4QywgMHhEMCwgMHg4MSwgMHgyMCwgMHg3QiwgMHhBQSwgMHgyMywKKysgIDB4 OTIsIDB4ODcsIDB4OEMsIDB4RDEsIDB4NTMsIDB4ODUsIDB4MTYsIDB4REMsIDB4QkUsIDB4QUQs IDB4NkYsIDB4MzUsCisrICAweDk4LCAweDJELCAweDY5LCAweDg0LCAweEJGLCAweEQ5LCAweDhB LCAweDAxLCAweDE3LCAweDU4LCAweEIyLCAweDZFLAorKyAgMHgyQywgMHg0NCwgMHg5QiwgMHg5 MCwgMHhGMSwgMHhGQiwgMHg1MSwgMHhFOCwgMHg2QSwgMHg5MCwgMHgyRCwgMHgxOCwKKysgIDB4 MEUsIDB4QzAsIDB4OTAsIDB4MTAsIDB4MjQsIDB4QTksIDB4MUQsIDB4QjMsIDB4NTgsIDB4N0Es IDB4OTEsIDB4MzAsCisrICAweEJFLCAweDIyLCAweEM3LCAweEQzLCAweEVDLCAweEMzLCAweDA5 LCAweDVELCAweEJGLCAweEUyLCAweDgwLCAweDNBLAorKyAgMHg3QywgMHg4NSwgMHhCNCwgMHhC QywgMHhEMSwgMHhFOSwgMHhGMCwgMHg1QywgMHhERSwgMHg4MSwgMHhBNiwgMHgzOCwKKysgIDB4 QjgsIDB4NDIsIDB4QkIsIDB4ODYsIDB4QzUsIDB4OUQsIDB4Q0UsIDB4N0MsIDB4MkMsIDB4RUUs IDB4RDEsIDB4REEsCisrICAweDI3LCAweDQ4LCAweDJCLCAweEY1LCAweEFCLCAweEI5LCAweEY3 LCAweDgwLCAweEQxLCAweDkwLCAweDI3LCAweDkwLAorKyAgMHhCRCwgMHg0NCwgMHg5NywgMHg2 MCwgMHhDRCwgMHg1NywgMHhDMCwgMHg3QQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsKKysgIDB4MUQsIDB4RTMsIDB4NkEsIDB4REQsIDB4 MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4MjcsIDB4RUYsIDB4RTYsIDB4MUYsCisrICAweEQyLCAw eDkxLCAweDY4LCAweDU5LCAweDA0LCAweEFFLCAweEJELCAweDk5LCAweDYzLCAweDU2LCAweDQ3 LCAweEM3LAorKyAgMHg2RiwgMHgyMiwgMHgxNiwgMHg0OCwgMHhEMCwgMHhGOSwgMHgxOCwgMHhB OSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1QywKKysgIDB4QTcsIDB4NjUsIDB4NTIsIDB4OEEsIDB4 QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQsIDB4QTksIDB4QTYsIDB4NTUsCisrICAweDY1LCAw eDNFLCAweEQ5LCAweDJELCAweDAyLCAweDM4LCAweEE4LCAweDc5LCAweDI4LCAweDdGLCAweEI2 LCAweENGLAorKyAgMHg4MiwgMHhERCwgMHg3RSwgMHg1NSwgMHhFMSwgMHhCMSwgMHhCQywgMHhF MiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhDMiwKKysgIDB4MUIsIDB4MkIsIDB4QjAsIDB4ODIsIDB4 NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIsIDB4N0QsIDB4RUIsIDB4OEMsCisrICAweEZGLCAw eDk1LCAweEU5LCAweDZBLCAweDFDLCAweDNELCAweDRELCAweEJGLCAweDhGLCAweDhCLCAweDlD LCAweENELAorKyAgMHhFQSwgMHg4NSwgMHhFRSwgMHgwMCwgMHhEQywgMHgxQywgMHhBNywgMHhF QiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwKKysgIDB4MTYsIDB4MjgsIDB4MjQsIDB4NjQsIDB4 MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUsIDB4MzcsIDB4REMsIDB4MDQsCisrICAweEJELCAw eDMxLCAweEEyLCAweDJGLCAweEIzLCAweDM1LCAweDU2LCAweEJGCisrfTsKKysKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTUxMltdID0geworKyAgMHg2OSwgMHg1Miwg MHgxQiwgMHg1MSwgMHg1RSwgMHgwNiwgMHhDQSwgMHg5QiwgMHgxNiwgMHg1MSwgMHg1RCwgMHhD RiwKKysgIDB4NDksIDB4MjUsIDB4NEEsIDB4QTEsIDB4NkEsIDB4NzcsIDB4NEMsIDB4MzYsIDB4 NDAsIDB4RjgsIDB4QjIsIDB4OUEsCisrICAweDE1LCAweEVBLCAweDVDLCAweEU1LCAweEU2LCAw eDgyLCAweEUwLCAweDg2LCAweDgyLCAweDZCLCAweDMyLCAweEYxLAorKyAgMHgwNCwgMHhDMSwg MHg1QSwgMHgxQSwgMHhFRCwgMHgxRSwgMHg5QSwgMHhCNiwgMHg0QywgMHg1NCwgMHg5RiwgMHhE OCwKKysgIDB4OEQsIDB4Q0MsIDB4QUMsIDB4OEEsIDB4QkIsIDB4OUMsIDB4ODIsIDB4M0YsIDB4 QTYsIDB4NTMsIDB4NjIsIDB4QjUsCisrICAweDgwLCAweEUyLCAweEJDLCAweERELCAweDY3LCAw eDJCLCAweEQ5LCAweDNGLCAweEU0LCAweDc1LCAweDkyLCAweDZCLAorKyAgMHhBRiwgMHg2Miwg MHg3QywgMHg1MiwgMHhGMCwgMHhFRSwgMHgzMywgMHhERiwgMHgxQiwgMHgxRCwgMHg0NywgMHhF NiwKKysgIDB4NTksIDB4NTYsIDB4QTUsIDB4QjksIDB4NUMsIDB4RTYsIDB4NzcsIDB4NzgsIDB4 MTYsIDB4NjMsIDB4ODQsIDB4MDUsCisrICAweDZGLCAweDBFLCAweDJCLCAweDMxLCAweDlELCAw eEY3LCAweDdGLCAweEIyLCAweDY0LCAweDcxLCAweEUwLCAweDJELAorKyAgMHgzRSwgMHg2Miwg MHhDRSwgMHhCNSwgMHgzRiwgMHg4OCwgMHhERiwgMHgyRCwgMHhBQiwgMHg5OCwgMHg2NSwgMHg5 MSwKKysgIDB4REYsIDB4NzAsIDB4MTQsIDB4QTUsIDB4M0YsIDB4MzYsIDB4QUIsIDB4ODQKKyt9 OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEExW10gPSB7 CisrICAweDg2LCAweEI0LCAweDE4LCAweEJBLCAweEQxLCAweDgwLCAweEI2LCAweDdDLCAweDQy LCAweDQ1LCAweDRELCAweERGLAorKyAgMHhFOSwgMHgyRCwgMHhFMSwgMHg4MywgMHg1RiwgMHhC NSwgMHgyRiwgMHhDOSwgMHhDRCwgMHhDNCwgMHhCMiwgMHg3NSwKKysgIDB4ODAsIDB4QTQsIDB4 RjEsIDB4NEEsIDB4RTcsIDB4ODMsIDB4MTIsIDB4MUUsIDB4MUUsIDB4MTQsIDB4QjgsIDB4QUMs CisrICAweDM1LCAweEUyLCAweEFBLCAweDBCLCAweDVDLCAweEY4LCAweDM4LCAweDRELCAweDA0 LCAweEVFLCAweEE5LCAweDk3LAorKyAgMHg3MCwgMHhGQiwgMHg1RSwgMHhFNywgMHhCNywgMHhF MywgMHg2MiwgMHgyMywgMHg0QiwgMHgzOCwgMHhCRSwgMHhENiwKKysgIDB4NTMsIDB4MTUsIDB4 RjcsIDB4REYsIDB4ODcsIDB4QjQsIDB4MEUsIDB4Q0MsIDB4QjEsIDB4MUEsIDB4MTEsIDB4MTks CisrICAweEVFLCAweDUxLCAweENDLCAweDkyLCAweERELCAweEJDLCAweDYzLCAweDI5LCAweDYz LCAweDBDLCAweDU5LCAweEQ3LAorKyAgMHg2RiwgMHg0QywgMHgzQywgMHgzNywgMHg1QiwgMHgz NywgMHgwMywgMHg2MSwgMHg3RCwgMHgyNCwgMHgxQywgMHg5OSwKKysgIDB4NDgsIDB4QUYsIDB4 ODIsIDB4RkUsIDB4MzIsIDB4NDEsIDB4OUIsIDB4QjIsIDB4REIsIDB4RUEsIDB4RUQsIDB4NzYs CisrICAweDhFLCAweDZFLCAweENBLCAweDdFLCAweDRFLCAweDE0LCAweEJBLCAweDMwLCAweDg0 LCAweDFDLCAweEIzLCAweDY3LAorKyAgMHhBMywgMHgyOSwgMHg4MCwgMHg3MCwgMHg1NCwgMHg2 OCwgMHg3RCwgMHg0OQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JT QV9YOTMxX1NIQTI1NltdID0geworKyAgMHg3RSwgMHhBMiwgMHg3NywgMHhGRSwgMHhCOCwgMHg1 NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2NCwgMHg1NCwgMHg4OSwKKysgIDB4RTUsIDB4NTIsIDB4 MTUsIDB4OEUsIDB4NTIsIDB4OTYsIDB4NEUsIDB4QTYsIDB4NTgsIDB4OTIsIDB4MUMsIDB4REQs CisrICAweEVBLCAweEEyLCAweDJELCAweDVDLCAweEQxLCAweDYyLCAweDAwLCAweDQ5LCAweDA1 LCAweDk1LCAweDczLCAweENGLAorKyAgMHgxNiwgMHg3NiwgMHg2OCwgMHhGNiwgMHhDNiwgMHg1 RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3QiwgMHhDOCwgMHg5QiwKKysgIDB4QzYsIDB4NTMsIDB4 ODgsIDB4MjYsIDB4MjAsIDB4ODgsIDB4NzMsIDB4QjYsIDB4MTMsIDB4QjgsIDB4RjAsIDB4NEIs CisrICAweDAwLCAweDg1LCAweEYzLCAweERELCAweDA3LCAweDUwLCAweEVCLCAweDIwLCAweEM0 LCAweDM4LCAweDBFLCAweDk4LAorKyAgMHhBRCwgMHg0RSwgMHg0OSwgMHgyQywgMHhENywgMHg2 NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwgMHgwMSwgMHhFQywKKysgIDB4N0UsIDB4NzUsIDB4 ODksIDB4NjksIDB4MkUsIDB4NjMsIDB4NzYsIDB4ODUsIDB4NDYsIDB4OEQsIDB4QTAsIDB4OEMs CisrICAweDMzLCAweDFELCAweDgyLCAweDhDLCAweDAzLCAweEVBLCAweDY5LCAweDg4LCAweDM1 LCAweEExLCAweDQyLCAweEJELAorKyAgMHgyMSwgMHhFRCwgMHg4RCwgMHhCQywgMHhCQywgMHhE QiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwgMHg1QiwgMHhEQywKKysgIDB4RTMsIDB4RTIsIDB4 RTgsIDB4MEEsIDB4MEEsIDB4MjksIDB4OTQsIDB4ODAKKyt9OworKworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEzODRbXSA9IHsKKysgIDB4NUMsIDB4N0QsIDB4 OTYsIDB4MzUsIDB4RUMsIDB4N0UsIDB4MTEsIDB4MzgsIDB4QkIsIDB4N0IsIDB4RUMsIDB4N0Is CisrICAweEYyLCAweDgyLCAweDhFLCAweDk5LCAweEJELCAweEVGLCAweEQ4LCAweEFFLCAweEQ3 LCAweDM5LCAweDM3LCAweENCLAorKyAgMHhFNiwgMHg0RiwgMHg1RSwgMHgwQSwgMHgxMywgMHhF NCwgMHgyRSwgMHg0MCwgMHhCOSwgMHhCRSwgMHgyRSwgMHhFMywKKysgIDB4RUYsIDB4NzgsIDB4 ODMsIDB4MTgsIDB4NDQsIDB4MzUsIDB4OUMsIDB4OEUsIDB4RDcsIDB4NEEsIDB4NjMsIDB4RjYs CisrICAweDU3LCAweEMyLCAweEIwLCAweDA4LCAweDUxLCAweDczLCAweENGLCAweENBLCAweDk5 LCAweDY2LCAweEVFLCAweDMxLAorKyAgMHhEOCwgMHg2OSwgMHhFOSwgMHhBQiwgMHgxMywgMHgy NywgMHg3QiwgMHg0MSwgMHgxRSwgMHg2RCwgMHg4RCwgMHhGMSwKKysgIDB4M0UsIDB4OUMsIDB4 MzUsIDB4OTUsIDB4NTgsIDB4REQsIDB4MkIsIDB4RDUsIDB4QTAsIDB4NjAsIDB4NDEsIDB4Nzks CisrICAweDI0LCAweDIyLCAweEU0LCAweEI3LCAweEJGLCAweDQ3LCAweDUzLCAweEY2LCAweDM0 LCAweEQ1LCAweDdDLCAweEZGLAorKyAgMHgwRSwgMHgwOSwgMHhFRSwgMHgyRSwgMHhFMiwgMHgz NywgMHhCOSwgMHhERSwgMHhDNSwgMHgxMiwgMHg0NCwgMHgzNSwKKysgIDB4RUYsIDB4MDEsIDB4 RTYsIDB4NUUsIDB4MzksIDB4MzEsIDB4MkQsIDB4NzEsIDB4QTUsIDB4REMsIDB4QzYsIDB4NkQs CisrICAweEUyLCAweENELCAweDg1LCAweERCLCAweDczLCAweDgyLCAweDY1LCAweDI4CisrfTsK KysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBNTEyW10gPSB7 CisrICAweEE2LCAweDY1LCAweEEyLCAweDc3LCAweDRGLCAweEIzLCAweDg2LCAweENCLCAweDY0 LCAweDNBLCAweEMxLCAweDYzLAorKyAgMHhGQywgMHhBMSwgMHhBQSwgMHhDQiwgMHg5QiwgMHg3 OSwgMHhERCwgMHg0QiwgMHhFMSwgMHhEOSwgMHhEQSwgMHhBQywKKysgIDB4RTcsIDB4NDcsIDB4 MDksIDB4QjIsIDB4MTEsIDB4NEIsIDB4OEEsIDB4QUEsIDB4MDUsIDB4OUUsIDB4NzcsIDB4RDcs CisrICAweDNBLCAweEJELCAweDVFLCAweDUzLCAweDA5LCAweDRBLCAweEU2LCAweDBGLCAweDVF LCAweEY5LCAweDE0LCAweDI4LAorKyAgMHhBMCwgMHg5OSwgMHg3NCwgMHg2NCwgMHg3MCwgMHg0 RSwgMHhGMiwgMHhFMywgMHhGQSwgMHhDNywgMHhGOCwgMHhDNSwKKysgIDB4NkUsIDB4MkIsIDB4 NzksIDB4OTYsIDB4MEQsIDB4MEMsIDB4QzgsIDB4MTAsIDB4MzQsIDB4NTMsIDB4RDIsIDB4QUYs CisrICAweDE3LCAweDBFLCAweEUwLCAweEJGLCAweDc5LCAweEY2LCAweDA0LCAweDcyLCAweDEw LCAweEUwLCAweEY2LCAweEQwLAorKyAgMHhDRSwgMHg4QSwgMHg2RiwgMHhBMSwgMHg5NSwgMHg4 OSwgMHhCRiwgMHg1OCwgMHg4RiwgMHg0NiwgMHg1RiwgMHgwOSwKKysgIDB4OUYsIDB4MDksIDB4 Q0EsIDB4ODQsIDB4MTUsIDB4ODUsIDB4RTAsIDB4RUQsIDB4MDQsIDB4MkQsIDB4RkIsIDB4N0Ms CisrICAweDM2LCAweDM1LCAweDIxLCAweDMxLCAweEMzLCAweEZELCAweDkyLCAweDQyLCAweDEx LCAweDMwLCAweDcxLCAweDFCLAorKyAgMHg2MCwgMHg4MywgMHgxOCwgMHg4OCwgMHhBMywgMHhG NSwgMHg1OSwgMHhDMworK307CisrCisrCisraW50IEZJUFNfc2VsZnRlc3RfcnNhKCkKKysJewor KwlpbnQgcmV0ID0gMDsKKysJUlNBICprZXk7CisrCUVWUF9QS0VZICpwayA9IE5VTEw7CisrCisr CWlmICgoa2V5PVJTQV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlzZXRyc2FrZXko a2V5KTsKKysJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOwor KworKwlFVlBfUEtFWV9hc3NpZ25fUlNBKHBrLCBrZXkpOworKworKwlpZiAoIWZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0 X1JTQV9TSEExLCBzaXplb2Yoa2F0X1JTQV9TSEExKSwKKysJCQkJRVZQX3NoYTEoKSwgRVZQX01E X0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEExIFBLQ1MjMSIpKQorKwkJZ290byBl cnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yo a2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfU0hBMjI0 KSwKKysJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQki UlNBIFNIQTIyNCBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JT QV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1NIQTI1NiksCisrCQkJCUVWUF9zaGEyNTYoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEEyNTYgUEtDUyMxIikpCisrCQln b3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9T SEEzODQpLAorKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisr CQkJCSJSU0EgU0hBMzg0IFBLQ1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlr YXRfUlNBX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfU0hBNTEyKSwKKysJCQkJRVZQX3NoYTUxMigp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTUxMiBQS0NTIzEiKSkK KysJCWdvdG8gZXJyOworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0 X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMSwgc2l6ZW9m KGthdF9SU0FfUFNTX1NIQTEpLAorKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFE X1BTUywKKysJCQkJIlJTQSBTSEExIFBTUyIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJ CQlrYXRfUlNBX1BTU19TSEEyMjQsIHNpemVvZihrYXRfUlNBX1BTU19TSEEyMjQpLAorKwkJCQlF VlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTIyNCBQ U1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywg a2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMjU2LCBz aXplb2Yoa2F0X1JTQV9QU1NfU0hBMjU2KSwKKysJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEEyNTYgUFNTIikpCisrCQlnb3RvIGVycjsKKysJ aWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJz KSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTM4 NCksCisrCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJS U0EgU0hBMzg0IFBTUyIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BT U19TSEE1MTIsIHNpemVvZihrYXRfUlNBX1BTU19TSEE1MTIpLAorKwkJCQlFVlBfc2hhNTEyKCks IEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTUxMiBQU1MiKSkKKysJCWdv dG8gZXJyOworKworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ri cywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hBMSwgc2l6ZW9mKGth dF9SU0FfWDkzMV9TSEExKSwKKysJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5 MzEsCisrCQkJIlJTQSBTSEExIFg5MzEiKSkKKysJCWdvdG8gZXJyOworKwkvKiBOQjogU0hBMjI0 IG5vdCBzdXBwb3J0ZWQgaW4gWDkuMzEgKi8KKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NI QTI1Niwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEyNTYpLAorKwkJCUVWUF9zaGEyNTYoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0EgU0hBMjU2IFg5MzEiKSkKKysJCWdvdG8g ZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9Y OTMxX1NIQTM4NCksCisrCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEs CisrCQkJIlJTQSBTSEEzODQgWDkzMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCWth dF9SU0FfWDkzMV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBNTEyKSwKKysJCQlFVlBf c2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKKysJCQkiUlNBIFNIQTUxMiBYOTMx IikpCisrCQlnb3RvIGVycjsKKysKKysKKysJcmV0ID0gMTsKKysKKysJZXJyOgorKwlpZiAocGsp CisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysJZWxzZSBpZiAoa2V5KQorKwkJUlNBX2ZyZWUoa2V5 KTsKKysJcmV0dXJuIHJldDsKKysJfQorKworKyNlbmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBTICov CitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBz X3JzYV94OTMxZy5jCistLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2 ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMx Zy5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDI4MSBA QAorKy8qIGNyeXB0by9yc2EvcnNhX2dlbi5jICovCisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5 OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRl bgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1wbGVt ZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wu CisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1j b21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy ZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8gYWxs IGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKysg KiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NM IGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNv dmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhlIGhv bGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29weXJp Z2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGlj ZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhpcyBw YWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBh dHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5 IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2Ug YXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRl eHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdl bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdh cmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisr ICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91 aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dy YXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3Bl Y2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisrICogICAgdGhlIGFw cHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25v d2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisrICogQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAqIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1 dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysgKiBk ZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2Rl IGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3Ry aWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0K KysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lu Y2x1ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrZXh0ZXJuIGludCBmaXBzX2NoZWNr X3JzYShSU0EgKnJzYSk7CisrI2VuZGlmCisrCisrLyogWDkuMzEgUlNBIGtleSBkZXJpdmF0aW9u IGFuZCBnZW5lcmF0aW9uICovCisrCisraW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwg QklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKKysJCQljb25z dCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCisrCQkJ Y29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAor KwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQorKwl7CisrCUJJR05VTSAqcjA9TlVM TCwqcjE9TlVMTCwqcjI9TlVMTCwqcjM9TlVMTDsKKysJQk5fQ1RYICpjdHg9TlVMTCwqY3R4Mj1O VUxMOworKworKwlpZiAoIXJzYSkgCisrCQlnb3RvIGVycjsKKysKKysJY3R4ID0gQk5fQ1RYX25l dygpOworKwlpZiAoIWN0eCkgCisrCQlnb3RvIGVycjsKKysJQk5fQ1RYX3N0YXJ0KGN0eCk7Cisr CisrCXIwID0gQk5fQ1RYX2dldChjdHgpOworKwlyMSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJcjIg PSBCTl9DVFhfZ2V0KGN0eCk7CisrCXIzID0gQk5fQ1RYX2dldChjdHgpOworKworKwlpZiAocjMg PT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIXJzYS0+ZSkKKysJCXsKKysJCXJzYS0+ZSA9 IEJOX2R1cChlKTsKKysJCWlmICghcnNhLT5lKQorKwkJCWdvdG8gZXJyOworKwkJfQorKwllbHNl CisrCQllID0gcnNhLT5lOworKworKwkvKiBJZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2VudCBv bmx5IGNhbGN1bGF0ZSB3aGF0IHdlIGNhbi4KKysJICogVGhpcyBhbGxvd3MgdGVzdCBwcm9ncmFt cyB0byBvdXRwdXQgc2VsZWN0aXZlIHBhcmFtZXRlcnMuCisrCSAqLworKworKwlpZiAoWHAgJiYg IXJzYS0+cCkKKysJCXsKKysJCXJzYS0+cCA9IEJOX25ldygpOworKwkJaWYgKCFyc2EtPnApCisr CQkJZ290byBlcnI7CisrCisrCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cCwg cDEsIHAyLAorKwkJCQkJWHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNiKSkKKysJCQlnb3RvIGVycjsK KysJCX0KKysKKysJaWYgKFhxICYmICFyc2EtPnEpCisrCQl7CisrCQlyc2EtPnEgPSBCTl9uZXco KTsKKysJCWlmICghcnNhLT5xKQorKwkJCWdvdG8gZXJyOworKwkJaWYgKCFCTl9YOTMxX2Rlcml2 ZV9wcmltZV9leChyc2EtPnEsIHExLCBxMiwKKysJCQkJCVhxLCBYcTEsIFhxMiwgZSwgY3R4LCBj YikpCisrCQkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCisr CQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJcmV0dXJu IDI7CisrCQl9CisrCisrCS8qIFNpbmNlIGJvdGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5vdyBj YWxjdWxhdGUgYWxsIHJlbWFpbmluZyAKKysJICogY29tcG9uZW50cy4KKysJICovCisrCisrCS8q IGNhbGN1bGF0ZSBuICovCisrCXJzYS0+bj1CTl9uZXcoKTsKKysJaWYgKHJzYS0+biA9PSBOVUxM KQorKwkJZ290byBlcnI7CisrCWlmICghQk5fbXVsKHJzYS0+bixyc2EtPnAscnNhLT5xLGN0eCkp CisrCQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGQgKi8KKysJaWYgKCFCTl9zdWIocjEs cnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8gZXJyOwkvKiBwLTEgKi8KKysJaWYgKCFC Tl9zdWIocjIscnNhLT5xLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8gZXJyOwkvKiBxLTEgKi8K KysJaWYgKCFCTl9tdWwocjAscjEscjIsY3R4KSkKKysJCWdvdG8gZXJyOwkvKiAocC0xKShxLTEp ICovCisrCisrCWlmICghQk5fZ2NkKHIzLCByMSwgcjIsIGN0eCkpCisrCQlnb3RvIGVycjsKKysK KysJaWYgKCFCTl9kaXYocjAsIE5VTEwsIHIwLCByMywgY3R4KSkKKysJCWdvdG8gZXJyOwkvKiBM Q00oKHAtMSkocS0xKSkgKi8KKysKKysJY3R4MiA9IEJOX0NUWF9uZXcoKTsKKysJaWYgKCFjdHgy KQorKwkJZ290byBlcnI7CisrCisrCXJzYS0+ZD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+ZSxy MCxjdHgyKTsJLyogZCAqLworKwlpZiAocnNhLT5kID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysK KysJLyogY2FsY3VsYXRlIGQgbW9kIChwLTEpICovCisrCXJzYS0+ZG1wMT1CTl9uZXcoKTsKKysJ aWYgKHJzYS0+ZG1wMSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghQk5fbW9kKHJzYS0+ ZG1wMSxyc2EtPmQscjEsY3R4KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUgZCBt b2QgKHEtMSkgKi8KKysJcnNhLT5kbXExPUJOX25ldygpOworKwlpZiAocnNhLT5kbXExID09IE5V TEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tb2QocnNhLT5kbXExLHJzYS0+ZCxyMixjdHgp KQorKwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAgKi8K KysJcnNhLT5pcW1wPUJOX21vZF9pbnZlcnNlKE5VTEwscnNhLT5xLHJzYS0+cCxjdHgyKTsKKysK KysJZXJyOgorKwlpZiAoY3R4KQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgpOworKwkJQk5fQ1RY X2ZyZWUoY3R4KTsKKysJCX0KKysJaWYgKGN0eDIpCisrCQlCTl9DVFhfZnJlZShjdHgyKTsKKysJ LyogSWYgdGhpcyBpcyBzZXQgYWxsIGNhbGxzIHN1Y2Nlc3NmdWwgKi8KKysJaWYgKHJzYSAmJiBy c2EtPmlxbXAgIT0gTlVMTCkKKysJCXJldHVybiAxOworKworKwlyZXR1cm4gMDsKKysKKysJfQor KworK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25z dCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKKysJeworKwlpbnQgb2sgPSAwOworKwlCSUdOVU0g KlhwID0gTlVMTCwgKlhxID0gTlVMTDsKKysJQk5fQ1RYICpjdHggPSBOVUxMOworKworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVT X0JJVFMpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9L RVlfRVgsRklQU19SX0tFWV9UT09fU0hPUlQpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9Cisr CisrCWlmIChiaXRzICYgMHhmZikKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX1JTQV9Y OTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKTsKKysJICAgIHJl dHVybiAwOworKwkgICAgfQorKworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAg eworKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9G SVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysjZW5kaWYK KysKKysJY3R4ID0gQk5fQ1RYX25ldygpOworKwlpZiAoIWN0eCkKKysJCWdvdG8gZXJyb3I7Cisr CisrCUJOX0NUWF9zdGFydChjdHgpOworKwlYcCA9IEJOX0NUWF9nZXQoY3R4KTsKKysJWHEgPSBC Tl9DVFhfZ2V0KGN0eCk7CisrCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9YcHEoWHAsIFhxLCBiaXRz LCBjdHgpKQorKwkJZ290byBlcnJvcjsKKysKKysJcnNhLT5wID0gQk5fbmV3KCk7CisrCXJzYS0+ cSA9IEJOX25ldygpOworKwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQorKwkJZ290byBlcnJvcjsK KysKKysJLyogR2VuZXJhdGUgdHdvIHByaW1lcyBmcm9tIFhwLCBYcSAqLworKworKwlpZiAoIUJO X1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5wLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBY cCwKKysJCQkJCWUsIGN0eCwgY2IpKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFCTl9YOTMx X2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHEsCisr CQkJCQllLCBjdHgsIGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCS8qIFNpbmNlIHJzYS0+cCBh bmQgcnNhLT5xIGFyZSB2YWxpZCB0aGlzIGNhbGwgd2lsbCBqdXN0IGRlcml2ZQorKwkgKiByZW1h aW5pbmcgUlNBIGNvbXBvbmVudHMuCisrCSAqLworKworKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9l eChyc2EsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisrCQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIGUsIGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisrI2lmZGVmIE9QRU5T U0xfRklQUworKwlpZighZmlwc19jaGVja19yc2EocnNhKSkKKysJICAgIGdvdG8gZXJyb3I7Cisr I2VuZGlmCisrCisrCW9rID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChjdHgpCisrCQl7CisrCQlC Tl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJfQorKworKwlpZiAob2sp CisrCQlyZXR1cm4gMTsKKysKKysJcmV0dXJuIDA7CisrCisrCX0KK2RpZmYgLXVwIC9kZXYvbnVs bCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfc2hhMV9zZWxmdGVzdC5jCist LS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX3NoYTFfc2VsZnRlc3QuYwkyMDA5LTEx LTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw5NyBAQAorKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg 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 bnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrCisrI2lmZGVmIE9QRU5TU0xf RklQUworK3N0YXRpYyBjaGFyIHRlc3RbXVs2MF09CisrICAgIHsKKysgICAgIiIsCisrICAgICJh YmMiLAorKyAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5s bW5vbW5vcG5vcHEiCisrICAgIH07CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmV0 W11bU0hBX0RJR0VTVF9MRU5HVEhdPQorKyAgICB7CisrICAgIHsgMHhkYSwweDM5LDB4YTMsMHhl ZSwweDVlLDB4NmIsMHg0YiwweDBkLDB4MzIsMHg1NSwKKysgICAgICAweGJmLDB4ZWYsMHg5NSww eDYwLDB4MTgsMHg5MCwweGFmLDB4ZDgsMHgwNywweDA5IH0sCisrICAgIHsgMHhhOSwweDk5LDB4 M2UsMHgzNiwweDQ3LDB4MDYsMHg4MSwweDZhLDB4YmEsMHgzZSwKKysgICAgICAweDI1LDB4NzEs MHg3OCwweDUwLDB4YzIsMHg2YywweDljLDB4ZDAsMHhkOCwweDlkIH0sCisrICAgIHsgMHg4NCww eDk4LDB4M2UsMHg0NCwweDFjLDB4M2IsMHhkMiwweDZlLDB4YmEsMHhhZSwKKysgICAgICAweDRh LDB4YTEsMHhmOSwweDUxLDB4MjksMHhlNSwweGU1LDB4NDYsMHg3MCwweGYxIH0sCisrICAgIH07 CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSgpCisrICAgIHsKKysgICAgdGVzdFsyXVswXSsr OworKyAgICB9CisrCisraW50IEZJUFNfc2VsZnRlc3Rfc2hhMSgpCisrICAgIHsKKysgICAgaW50 IG47CisrCisrICAgIGZvcihuPTAgOyBuPHNpemVvZih0ZXN0KS9zaXplb2YodGVzdFswXSkgOyAr K24pCisrCXsKKysJdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07CisrCisrCUVW UF9EaWdlc3QodGVzdFtuXSxzdHJsZW4odGVzdFtuXSksbWQsIE5VTEwsIEVWUF9zaGExKCksIE5V TEwpOworKwlpZihtZW1jbXAobWQscmV0W25dLHNpemVvZiBtZCkpCisrCSAgICB7CisrCSAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7 CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJfQorKyAgICByZXR1cm4gMTsKKysgICAgfQor KworKyNlbmRpZgorZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEuYworLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEy OjAwOjU4LjgwMTAwMjI3NiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Zp cHMvZmlwc19zdGFuZGFsb25lX3NoYTEuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCAr MDEwMAorQEAgLTAsMCArMSwxNzMgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 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 aW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmlu Zy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvc2hhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKworKyNpZm5kZWYgRklQU0NB TklTVEVSX08KKytpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQoKSB7IHJldHVybiAwOyB9Cisrdm9p ZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCkge30KKyt2b2lkIE9QRU5TU0xfY2xlYW5zZSh2b2lkICpw LHNpemVfdCBsZW4pIHt9CisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworK3N0 YXRpYyB2b2lkIGhtYWNfaW5pdChTSEFfQ1RYICptZF9jdHgsU0hBX0NUWCAqb19jdHgsCisrCQkg ICAgICBjb25zdCBjaGFyICprZXkpCisrICAgIHsKKysgICAgc2l6ZV90IGxlbj1zdHJsZW4oa2V5 KTsKKysgICAgaW50IGk7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5bWRbSE1BQ19NQVhfTURfQ0JM T0NLXTsKKysgICAgdW5zaWduZWQgY2hhciBwYWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsKKysKKysg ICAgaWYgKGxlbiA+IFNIQV9DQkxPQ0spCisrCXsKKysJU0hBMV9Jbml0KG1kX2N0eCk7CisrCVNI QTFfVXBkYXRlKG1kX2N0eCxrZXksbGVuKTsKKysJU0hBMV9GaW5hbChrZXltZCxtZF9jdHgpOwor KwlsZW49MjA7CisrCX0KKysgICAgZWxzZQorKwltZW1jcHkoa2V5bWQsa2V5LGxlbik7CisrICAg IG1lbXNldCgma2V5bWRbbGVuXSwnXDAnLEhNQUNfTUFYX01EX0NCTE9DSy1sZW4pOworKworKyAg ICBmb3IoaT0wIDsgaSA8IEhNQUNfTUFYX01EX0NCTE9DSyA7IGkrKykKKysJcGFkW2ldPTB4MzZe a2V5bWRbaV07CisrICAgIFNIQTFfSW5pdChtZF9jdHgpOworKyAgICBTSEExX1VwZGF0ZShtZF9j dHgscGFkLFNIQV9DQkxPQ0spOworKworKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNfTUFYX01EX0NC TE9DSyA7IGkrKykKKysJcGFkW2ldPTB4NWNea2V5bWRbaV07CisrICAgIFNIQTFfSW5pdChvX2N0 eCk7CisrICAgIFNIQTFfVXBkYXRlKG9fY3R4LHBhZCxTSEFfQ0JMT0NLKTsKKysgICAgfQorKwor K3N0YXRpYyB2b2lkIGhtYWNfZmluYWwodW5zaWduZWQgY2hhciAqbWQsU0hBX0NUWCAqbWRfY3R4 LFNIQV9DVFggKm9fY3R4KQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzIwXTsKKysK KysgICAgU0hBMV9GaW5hbChidWYsbWRfY3R4KTsKKysgICAgU0hBMV9VcGRhdGUob19jdHgsYnVm LHNpemVvZiBidWYpOworKyAgICBTSEExX0ZpbmFsKG1kLG9fY3R4KTsKKysgICAgfQorKworKyNl bmRpZgorKworK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorKyAgICB7CisrI2lmZGVm IE9QRU5TU0xfRklQUworKyAgICBzdGF0aWMgY2hhciBrZXlbXT0iZXRhb25yaXNoZGxjdXBmbSI7 CisrICAgIGludCBuLGJpbmFyeT0wOworKworKyAgICBpZihhcmdjIDwgMikKKysJeworKwlmcHJp bnRmKHN0ZGVyciwiJXMgWzxmaWxlPl0rXG4iLGFyZ3ZbMF0pOworKwlleGl0KDEpOworKwl9Cisr CisrICAgIG49MTsKKysgICAgaWYgKCFzdHJjbXAoYXJndltuXSwiLWJpbmFyeSIpKQorKwl7Cisr CW4rKzsKKysJYmluYXJ5PTE7CS8qIGVtaXQgYmluYXJ5IGZpbmdlcnByaW50Li4uICovCisrCX0K KysKKysgICAgZm9yKDsgbiA8IGFyZ2MgOyArK24pCisrCXsKKysJRklMRSAqZj1mb3Blbihhcmd2 W25dLCJyYiIpOworKwlTSEFfQ1RYIG1kX2N0eCxvX2N0eDsKKysJdW5zaWduZWQgY2hhciBtZFsy MF07CisrCWludCBpOworKworKwlpZighZikKKysJICAgIHsKKysJICAgIHBlcnJvcihhcmd2W25d KTsKKysJICAgIGV4aXQoMik7CisrCSAgICB9CisrCisrCWhtYWNfaW5pdCgmbWRfY3R4LCZvX2N0 eCxrZXkpOworKwlmb3IoIDsgOyApCisrCSAgICB7CisrCSAgICBjaGFyIGJ1ZlsxMDI0XTsKKysJ ICAgIHNpemVfdCBsPWZyZWFkKGJ1ZiwxLHNpemVvZiBidWYsZik7CisrCisrCSAgICBpZihsID09 IDApCisrCQl7CisrCQlpZihmZXJyb3IoZikpCisrCQkgICAgeworKwkJICAgIHBlcnJvcihhcmd2 W25dKTsKKysJCSAgICBleGl0KDMpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICBicmVhazsK KysJCX0KKysJICAgIFNIQTFfVXBkYXRlKCZtZF9jdHgsYnVmLGwpOworKwkgICAgfQorKwlobWFj X2ZpbmFsKG1kLCZtZF9jdHgsJm9fY3R4KTsKKysKKysJaWYgKGJpbmFyeSkKKysJICAgIHsKKysJ ICAgIGZ3cml0ZShtZCwyMCwxLHN0ZG91dCk7CisrCSAgICBicmVhazsJLyogLi4uIGZvciBzaW5n bGUoISkgZmlsZSAqLworKwkgICAgfQorKworKwlwcmludGYoIkhNQUMtU0hBMSglcyk9ICIsYXJn dltuXSk7CisrCWZvcihpPTAgOyBpIDwgMjAgOyArK2kpCisrCSAgICBwcmludGYoIiUwMngiLG1k W2ldKTsKKysJcHJpbnRmKCJcbiIpOworKwl9CisrI2VuZGlmCisrICAgIHJldHVybiAwOworKyAg ICB9CisrCisrCitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v Zmlwcy9maXBzX3Rlc3Rfc3VpdGUuYworLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4 LjgwMTAwMjI3NiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlw c190ZXN0X3N1aXRlLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0w LDAgKzEsNTg4IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKgorKyAqIFRo aXMgY29tbWFuZCBpcyBpbnRlbmRlZCBhcyBhIHRlc3QgZHJpdmVyIGZvciB0aGUgRklQUy0xNDAg dGVzdGluZworKyAqIGxhYiBwZXJmb3JtaW5nIEZJUFMtMTQwIHZhbGlkYXRpb24uICBJdCBkZW1v bnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUKKysgKiBPcGVuU1NMIGxpYnJhcnkgaXRvIHBlcmZvcm0g YSB2YXJpZXR5IG9mIGNvbW1vbiBjcnlwdG9ncmFwaGljCisrICogZnVuY3Rpb25zLiAgQSBwb3dl ci11cCBzZWxmIHRlc3QgaXMgZGVtb25zdHJhdGVkIGJ5IGRlbGliZXJhdGVseQorKyAqIHBvaW50 aW5nIHRvIGFuIGludmFsaWQgZXhlY3V0YWJsZSBoYXNoCisrICoKKysgKiBDb250cmlidXRlZCBi eSBTdGV2ZSBNYXJxdWVzcy4KKysgKgorKyAqLworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNs dWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+ CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2Rlcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKworKyNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL3NoYS5oPgorKworKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisraW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKKysgICAgeworKyAgICBwcmludGYoIk5vIEZJUFMgc3VwcG9ydFxu Iik7CisrICAgIHJldHVybigwKTsKKysgICAgfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworKy8qIEFFUzogZW5jcnlwdCBh bmQgZGVjcnlwdCBrbm93biBwbGFpbnRleHQsIHZlcmlmeSByZXN1bHQgbWF0Y2hlcyBvcmlnaW5h bCBwbGFpbnRleHQKKysqLworK3N0YXRpYyBpbnQgRklQU19hZXNfdGVzdCh2b2lkKQorKwl7Cisr CWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzE2XTsKKysJdW5zaWduZWQgY2hh ciBjaXRtcFsxNl07CisrCXVuc2lnbmVkIGNoYXIga2V5WzE2XSA9IHsgMSwyLDMsNCw1LDYsNyw4 LDksMTAsMTEsMTIsMTMsMTQsMTUsMTZ9OworKwl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl0g PSAiZXRhb25yaXNoZGxjdSI7CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJRVZQX0NJUEhFUl9D VFhfaW5pdCgmY3R4KTsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4 X2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBfQ2lw aGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDE2KTsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4 KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKKysJCWdv dG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwgMTYpOworKwlpZiAobWVt Y21wKHBsdG1wLCBwbGFpbnRleHQsIDE2KSkKKysJCWdvdG8gZXJyOworKwlyZXQgPSAxOworKwll cnI6CisrCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrCXJldHVybiByZXQ7CisrCX0K KysKKytzdGF0aWMgaW50IEZJUFNfZGVzM190ZXN0KHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7 CisrCXVuc2lnbmVkIGNoYXIgcGx0bXBbOF07CisrCXVuc2lnbmVkIGNoYXIgY2l0bXBbOF07Cisr ICAgIAl1bnNpZ25lZCBjaGFyIGtleVtdID0geyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwx MywxNCwxNSwxNiwxNywxOCwKKysJCSAgICAgICAgICAgICAgMTksMjAsMjEsMjIsMjMsMjR9Owor KyAgICAJdW5zaWduZWQgY2hhciBwbGFpbnRleHRbXSA9IHsgJ2UnLCAndCcsICdhJywgJ28nLCAn bicsICdyJywgJ2knLCAncycgfTsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQSEVS X0NUWF9pbml0KCZjdHgpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19l ZGUzX2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBf Q2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDgpOworKwlpZiAoRVZQX0NpcGhlckluaXRf ZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKKysJ CWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwgOCk7CisrCWlmICht ZW1jbXAocGx0bXAsIHBsYWludGV4dCwgOCkpCisrCQlnb3RvIGVycjsKKysJcmV0ID0gMTsKKysJ ZXJyOgorKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKwlyZXR1cm4gcmV0OworKwl9 CisrCisrLyoKKysgKiBEU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBw bGFpbnRleHQuCisrICovCisrc3RhdGljIGludCBGSVBTX2RzYV90ZXN0KGludCBiYWQpCisrICAg IHsKKysgICAgRFNBICpkc2EgPSBOVUxMOworKyAgICBFVlBfUEtFWSBwazsKKysgICAgdW5zaWdu ZWQgY2hhciBkZ3N0W10gPSAiZXRhb25yaXNoZGxjIjsKKysgICAgdW5zaWduZWQgY2hhciBidWZb NjBdOworKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysgICAgaW50IHIgPSAwOworKyAgICBFVlBf TURfQ1RYIG1jdHg7CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBFVlBfTURfQ1RY X2luaXQoJm1jdHgpOworKyAgICBkc2EgPSBEU0FfbmV3KCk7CisrICAgIGlmICghZHNhKQorKwln b3RvIGVuZDsKKysgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQs TlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRFNBX2dlbmVy YXRlX2tleShkc2EpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKGJhZCkKKysJICAgIEJOX2FkZF93 b3JkKGRzYS0+cHViX2tleSwgMSk7CisrCisrICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7Cisr ICAgIHBrLnBrZXkuZHNhID0gZHNhOworKworKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0 eCwgRVZQX2RzczEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduVXBk YXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAgIGlm ICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKKysJZ290byBlbmQ7Cisr CisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQor Kwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXpl b2YoZGdzdCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1j dHgsIGJ1Ziwgc2xlbiwgJnBrKTsKKysgICAgZW5kOgorKyAgICBFVlBfTURfQ1RYX2NsZWFudXAo Jm1jdHgpOworKyAgICBpZiAoZHNhKQorKyAgCSAgRFNBX2ZyZWUoZHNhKTsKKysgICAgaWYgKHIg IT0gMSkKKysJcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyoKKysgKiBS U0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCisrICov Cisrc3RhdGljIGludCBGSVBTX3JzYV90ZXN0KGludCBiYWQpCisrICAgIHsKKysgICAgUlNBICpr ZXk7CisrICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRfcHRleHRbXSA9ICJldGFvbnJpc2hkbGMiOwor KyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOworKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysg ICAgQklHTlVNICpibjsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKyAgICBFVlBfUEtFWSBwazsK KysgICAgaW50IHIgPSAwOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgRVZQX01E X0NUWF9pbml0KCZtY3R4KTsKKysgICAga2V5ID0gUlNBX25ldygpOworKyAgICBibiA9IEJOX25l dygpOworKyAgICBpZiAoIWtleSB8fCAhYm4pCisrCXJldHVybiAwOworKyAgICBCTl9zZXRfd29y ZChibiwgNjU1MzcpOworKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJu LE5VTEwpKQorKwlyZXR1cm4gMDsKKysgICAgQk5fZnJlZShibik7CisrICAgIGlmIChiYWQpCisr CSAgICBCTl9hZGRfd29yZChrZXktPm4sIDEpOworKworKyAgICBway50eXBlID0gRVZQX1BLRVlf UlNBOworKyAgICBway5wa2V5LnJzYSA9IGtleTsKKysKKysgICAgaWYgKCFFVlBfU2lnbkluaXRf ZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBf U2lnblVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihpbnB1dF9wdGV4dCkgLSAxKSkK KysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwg JnBrKSkKKysJZ290byBlbmQ7CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgs IEVWUF9zaGExKCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfVmVyaWZ5VXBk YXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQorKwlnb3Rv IGVuZDsKKysgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOwor KyAgICBlbmQ6CisrICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrICAgIGlmIChrZXkp CisrICAJICAgIFJTQV9mcmVlKGtleSk7CisrICAgIGlmIChyICE9IDEpCisrCXJldHVybiAwOwor KyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25v d24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29y cmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hhMV90ZXN0KCkKKysgICAgeworKyAg ICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEFfRElHRVNUX0xFTkdUSF0gPQorKyAgICAgICAgeyAw eDExLCAweGYxLCAweDlhLCAweDNhLCAweGVjLCAweDFhLCAweDFlLCAweDhlLCAweDY1LCAweGQ0 LCAweDlhLCAweDM4LCAweDBjLCAweDhiLCAweDFlLCAweDJjLCAweGU4LCAweGIzLCAweGM1LCAw eDE4IH07CisrICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7CisrCisrICAg IHVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOworKworKyAgICBFUlJfY2xlYXJf ZXJyb3IoKTsKKysgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5V TEwsIEVWUF9zaGExKCksIE5VTEwpKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCxkaWdl c3Qsc2l6ZW9mKG1kKSkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAg IH0KKysKKysvKiBTSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFu ZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytz dGF0aWMgaW50IEZJUFNfc2hhMjU2X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIg ZGlnZXN0W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXSA9CisrCXsweGY1LCAweDUzLCAweGNkLCAweGI4 LCAweGNmLCAweDEsIDB4ZWUsIDB4MTcsIDB4OWIsIDB4OTMsIDB4YzksIDB4NjgsIDB4YzAsIDB4 ZWEsIDB4NDAsIDB4OTEsCisrCSAweDYsIDB4ZWMsIDB4OGUsIDB4MTEsIDB4OTYsIDB4YzgsIDB4 NWQsIDB4MWMsIDB4YWYsIDB4NjQsIDB4MjIsIDB4ZTYsIDB4NTAsIDB4NGYsIDB4NDcsIDB4NTd9 OworKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOworKworKyAgICB1bnNp Z25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgRVJSX2NsZWFyX2Vy cm9yKCk7CisrICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxM LCBFVlBfc2hhMjU2KCksIE5VTEwpKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCxkaWdl c3Qsc2l6ZW9mKG1kKSkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAg IH0KKysKKysvKiBTSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFu ZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytz dGF0aWMgaW50IEZJUFNfc2hhNTEyX3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIg ZGlnZXN0W1NIQTUxMl9ESUdFU1RfTEVOR1RIXSA9CisrCXsweDk5LCAweGM5LCAweGU5LCAweDVi LCAweDg4LCAweGQ0LCAweDc4LCAweDg4LCAweGRmLCAweDg4LCAweDVmLCAweDk0LCAweDcxLCAw eDY0LCAweDI4LCAweGNhLAorKwkgMHgxNiwgMHgxZiwgMHgzZCwgMHhmNCwgMHgxZiwgMHhmMywg MHgwZiwgMHhjNSwgMHgwMywgMHg5OSwgMHhiMiwgMHhkMCwgMHhlNywgMHgwYiwgMHg5NCwgMHg0 YSwKKysJIDB4NDUsIDB4ZDIsIDB4NmMsIDB4NGYsIDB4MjAsIDB4MDYsIDB4ZWYsIDB4NzEsIDB4 YTksIDB4MjUsIDB4N2YsIDB4MjQsIDB4YjEsIDB4ZDksIDB4NDAsIDB4MjIsCisrCSAweDQ5LCAw eDU0LCAweDEwLCAweGMyLCAweDIyLCAweDlkLCAweDI3LCAweGZlLCAweGJkLCAweGQ2LCAweGQ2 LCAweGViLCAweDJkLCAweDQyLCAweDFkLCAweGEzfTsKKysgICAgdW5zaWduZWQgY2hhciBzdHJb XSA9ICJldGFvbnJpc2hkIjsKKysKKysgICAgdW5zaWduZWQgY2hhciBtZFtTSEE1MTJfRElHRVNU X0xFTkdUSF07CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUVWUF9EaWdl c3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTUxMigpLCBOVUxMKSkgcmV0 dXJuIDA7CisrICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQorKyAgICAgICAg cmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEExOiBnZW5l cmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAg IHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX2htYWNfc2hh MV90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQi OworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25l ZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHg3MywgMHhmNywgMHhhMCwgMHg0 OCwgMHhmOCwgMHg5NCwgMHhlZCwgMHhkZCwgMHgwYSwgMHhlYSwgMHhlYSwgMHg1NiwgMHgxYiwg MHg2MSwgMHgyZSwgMHg3MCwKKysJIDB4YjIsIDB4ZmIsIDB4ZWMsIDB4YzZ9OworKworKyAgICB1 bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0 bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDKEVWUF9zaGEx KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJu IDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAgICAgICByZXR1cm4g MDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFDLVNIQTIyNDogZ2VuZXJhdGUg aGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVj b21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTIyNF90 ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwor KyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBj aGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHg3NSwgMHg1OCwgMHhkNSwgMHhiZCwg MHg1NSwgMHg2ZCwgMHg4NywgMHgwZiwgMHg3NSwgMHhmZiwgMHhiZSwgMHgxYywgMHhiMiwgMHhm MCwgMHgyMCwgMHgzNSwKKysJIDB4ZTUsIDB4NjIsIDB4NDksIDB4YjYsIDB4OTQsIDB4YjksIDB4 ZmMsIDB4NjUsIDB4MzQsIDB4MzMsIDB4M2EsIDB4MTl9OworKworKyAgICB1bnNpZ25lZCBjaGFy IG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAg ICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDKEVWUF9zaGEyMjQoKSxrZXksc2l6 ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAg aWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBy ZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMtU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtu b3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNv cnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKQorKyAg ICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2ln bmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxb RVZQX01BWF9NRF9TSVpFXSA9CisrCXsweGU5LCAweDE3LCAweGMxLCAweDdiLCAweDRjLCAweDZi LCAweDc3LCAweGRhLCAweGQyLCAweDMwLCAweDM2LCAweDAyLCAweGY1LCAweDcyLCAweDMzLCAw eDg3LAorKwkgMHg5ZiwgMHhjNiwgMHg2ZSwgMHg3YiwgMHg3ZSwgMHhhOCwgMHhlYSwgMHhhYSwg MHg5ZiwgMHhiYSwgMHhlZSwgMHg1MSwgMHhmZiwgMHhkYSwgMHgyNCwgMHhmNH07CisrCisrICAg IHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBv dXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3No YTI1NigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJl dHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAgcmV0 dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEEzODQ6IGdlbmVy YXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAg cHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEz ODRfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hk IjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysgICAgdW5zaWdu ZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4YjIsIDB4OWQsIDB4NDAsIDB4 NTgsIDB4MzIsIDB4YzQsIDB4ZTMsIDB4MzEsIDB4YjYsIDB4NjMsIDB4MDgsIDB4MjYsIDB4OTks IDB4ZWYsIDB4M2IsIDB4MTAsCisrCSAweGUyLCAweGRmLCAweGY4LCAweGZmLCAweGM2LCAweGUx LCAweDAzLCAweDI5LCAweDgxLCAweDJhLCAweDFiLCAweGFjLCAweGIwLCAweDA3LCAweDM5LCAw eDA4LAorKwkgMHhmMywgMHg5MSwgMHgzNSwgMHgxMSwgMHg3NiwgMHhkNiwgMHg0YywgMHgyMCwg MHhmYiwgMHg0ZCwgMHhjMywgMHhmMywgMHhiOCwgMHg5YiwgMHg4OCwgMHgxY307CisrCisrICAg IHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBv dXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3No YTM4NCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJl dHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAgcmV0 dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEE1MTI6IGdlbmVy YXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAg cHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGE1 MTJfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hk IjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysgICAgdW5zaWdu ZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4Y2QsIDB4M2UsIDB4YjksIDB4 NTEsIDB4YjgsIDB4YmMsIDB4N2YsIDB4OWEsIDB4MjMsIDB4YWYsIDB4ZjMsIDB4NzcsIDB4NTks IDB4ODUsIDB4YTksIDB4ZTYsCisrCSAweGY3LCAweGQxLCAweDUxLCAweDk2LCAweDE3LCAweGUw LCAweDkyLCAweGQ4LCAweGE2LCAweDNiLCAweGMxLCAweGFkLCAweDdlLCAweDI0LCAweGNhLCAw eGIxLAorKwkgMHhkNywgMHg3OSwgMHgwYSwgMHhhNSwgMHhlYSwgMHgyYywgMHgwMiwgMHg1OCwg MHgwYiwgMHhhNiwgMHg1MiwgMHg2YiwgMHg2MSwgMHg3ZiwgMHhlYiwgMHg5YywKKysJIDB4NDcs IDB4ODYsIDB4NWQsIDB4NzQsIDB4MmIsIDB4ODgsIDB4ZGYsIDB4ZWUsIDB4NDYsIDB4NjksIDB4 OTYsIDB4M2QsIDB4YTYsIDB4ZDksIDB4MmEsIDB4NTN9OworKworKyAgICB1bnNpZ25lZCBjaGFy IG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAg ICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDKEVWUF9zaGE1MTIoKSxrZXksc2l6 ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAg aWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBy ZXR1cm4gMTsKKysgICAgfQorKworKworKy8qIERIOiBnZW5lcmF0ZSBzaGFyZWQgcGFyYW1ldGVy cworKyovCisrc3RhdGljIGludCBkaF90ZXN0KCkKKysgICAgeworKyAgICBESCAqZGg7CisrICAg IEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBkaCA9IEZJUFNfZGhfbmV3KCk7CisrICAgIGlmICgh ZGgpCisrCXJldHVybiAwOworKyAgICBpZiAoIURIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZGgs IDEwMjQsIDIsIE5VTEwpKQorKwlyZXR1cm4gMDsKKysgICAgRklQU19kaF9mcmVlKGRoKTsKKysg ICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBaZXJvaXplCisrKi8KKytzdGF0aWMgaW50IFpl cm9pemUoKQorKyAgICB7CisrICAgIFJTQSAqa2V5OworKyAgICBCSUdOVU0gKmJuOworKyAgICB1 bnNpZ25lZCBjaGFyIHVzZXJrZXlbMTZdID0gCisrCXsgMHg0OCwgMHg1MCwgMHhmMCwgMHhhMywg MHgzYSwgMHhlZCwgMHhkMywgMHhhZiwgMHg2ZSwgMHg0NywgMHg3ZiwgMHg4MywgMHgwMiwgMHhi MSwgMHgwOSwgMHg2OCB9OworKyAgICBpbnQgaSwgbjsKKysKKysgICAga2V5ID0gRklQU19yc2Ff bmV3KCk7CisrICAgIGJuID0gQk5fbmV3KCk7CisrICAgIGlmICgha2V5IHx8ICFibikKKysJcmV0 dXJuIDA7CisrICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7CisrICAgIGlmICghUlNBX2dlbmVy YXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVMTCkpCisrCXJldHVybiAwOworKyAgICBCTl9mcmVl KGJuKTsKKysgICAgCisrICAgIG4gPSBCTl9udW1fYnl0ZXMoa2V5LT5kKTsKKysgICAgcHJpbnRm KCIgR2VuZXJhdGVkICVkIGJ5dGUgUlNBIHByaXZhdGUga2V5XG4iLCBuKTsKKysgICAgcHJpbnRm KCJcdEJOIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6XG4iKTsKKysgICAgZG9fYm5fcHJpbnQoc3Rk b3V0LCBrZXktPmQpOworKyAgICBCTl9yYW5kKGtleS0+ZCxuKjgsLTEsMCk7CisrICAgIHByaW50 ZigiXHRCTiBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6XG4iKTsKKysgICAgZG9fYm5fcHJpbnQoc3Rk b3V0LCBrZXktPmQpOworKworKyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGJlZm9yZSBv dmVyd3JpdGluZzogXG5cdFx0Iik7CisrICAgIGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5 KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKKysgICAgICAgIHByaW50ZigiXG4i KTsKKysgICAgUkFORF9ieXRlcyh1c2Vya2V5LCBzaXplb2YgdXNlcmtleSk7CisrICAgIHByaW50 ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOworKyAgICBm b3IoaSA9IDA7IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtl eVtpXSk7CisrICAgICAgICBwcmludGYoIlxuIik7CisrCisrICAgIHJldHVybiAxOworKyAgICB9 CisrCisrc3RhdGljIGludCBFcnJvcjsKKytjb25zdCBjaGFyICogRmFpbChjb25zdCBjaGFyICpt c2cpCisrICAgIHsKKysgICAgZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgIEVycm9yKys7CisrICAg IHJldHVybiBtc2c7IAorKyAgICB9CisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3Yp CisrICAgIHsKKysKKysgICAgaW50IGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDAsIGRvX2NvcnJ1 cHRfZHNhX2tleWdlbiA9IDA7CisrICAgIGludCBiYWRfcnNhID0gMCwgYmFkX2RzYSA9IDA7Cisr ICAgIGludCBkb19ybmdfc3RpY2sgPSAwOworKyAgICBpbnQgbm9fZXhpdCA9IDA7CisrCisrICAg IHByaW50ZigiXHRGSVBTLW1vZGUgdGVzdCBhcHBsaWNhdGlvblxuXG4iKTsKKysKKysgICAgLyog TG9hZCBlbnRyb3B5IGZyb20gZXh0ZXJuYWwgZmlsZSwgaWYgYW55ICovCisrICAgIFJBTkRfbG9h ZF9maWxlKCIucm5kIiwgMTAyNCk7CisrCisrICAgIGlmIChhcmd2WzFdKSB7CisrICAgICAgICAv KiBDb3JydXB0ZWQgS0FUIHRlc3RzICovCisrICAgICAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAi YWVzIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfYWVzKCk7CisrICAgICAgICAgICAg cHJpbnRmKCJBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxu Iik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRlcyIpKSB7CisrICAg ICAgICAgICAgRklQU19jb3JydXB0X2RlcygpOworKyAgICAgICAgICAgIHByaW50ZigiREVTMy1F Q0IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrICAg ICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYSIpKSB7CisrICAgICAgICAgICAg RklQU19jb3JydXB0X2RzYSgpOworKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0 aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwor KyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2EiKSkgeworKyAgICAgICAg ICAgIEZJUFNfY29ycnVwdF9yc2EoKTsKKysgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2Vu ZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4i KTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5IikpIHsKKysg ICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlk YXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKKysJICAgIGJhZF9yc2EgPSAxOworKwkg ICAgbm9fZXhpdCA9IDE7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJz YWtleWdlbiIpKSB7CisrCSAgICBkb19jb3JydXB0X3JzYV9rZXlnZW4gPSAxOworKwkgICAgbm9f ZXhpdCA9IDE7CisrICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNp Z25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7CisrICAgICAg ICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleSIpKSB7CisrICAgICAgICAgICAg cHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGgg Y29ycnVwdGVkIGtleS4uLlxuIik7CisrCSAgICBiYWRfZHNhID0gMTsKKysJICAgIG5vX2V4aXQg PSAxOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXlnZW4iKSkg eworKwkgICAgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOwor KyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFs aWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlm ICghc3RyY21wKGFyZ3ZbMV0sICJzaGExIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRf c2hhMSgpOworKyAgICAgICAgICAgIHByaW50ZigiU0hBLTEgaGFzaCB3aXRoIGNvcnJ1cHRlZCBL QVQuLi5cbiIpOworKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJuZyIpKSB7CisrCSAg ICBGSVBTX2NvcnJ1cHRfcm5nKCk7CisrCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5n c3RpY2siKSkgeworKwkgICAgZG9fcm5nX3N0aWNrID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOwor KwkgICAgcHJpbnRmKCJSTkcgdGVzdCB3aXRoIHN0dWNrIGNvbnRpbnVvdXMgdGVzdC4uLlxuIik7 CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIHByaW50ZigiQmFkIGFyZ3VtZW50IFwi JXNcIlxuIiwgYXJndlsxXSk7CisrICAgICAgICAgICAgZXhpdCgxKTsKKysgICAgICAgIH0KKysJ aWYgKCFub19leGl0KSB7CisrICAgICAgICAJaWYgKCFGSVBTX21vZGVfc2V0KDEpKSB7CisrIAkJ ICAgIGRvX3ByaW50X2Vycm9ycygpOworKyAgICAgICAgCSAgICBwcmludGYoIlBvd2VyLXVwIHNl bGYgdGVzdCBmYWlsZWRcbiIpOworKwkJICAgIGV4aXQoMSk7CisrCQl9CisrICAgICAgICAJcHJp bnRmKCJQb3dlci11cCBzZWxmIHRlc3Qgc3VjY2Vzc2Z1bFxuIik7CisrICAgICAgICAJZXhpdCgw KTsKKysJfQorKyAgICB9CisrCisrICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9w ZXJhdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjEuIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFw aGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKKysgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFs Z29yaXRobSAoRC1IKS4uLiIpOworKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVs XG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFBvd2VyLXVwIHNlbGYgdGVz dAorKyAgICAqLworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgcHJpbnRmKCIyLiBBdXRv bWF0aWMgcG93ZXItdXAgc2VsZiB0ZXN0Li4uIik7CisrICAgIGlmICghRklQU19tb2RlX3NldCgx KSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysgICAgICAgIHByaW50ZihGYWlsKCJGQUlM RUQhXG4iKSk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgcHJpbnRmKCJzdWNjZXNzZnVsXG4iKTsK KysgICAgaWYgKGRvX2NvcnJ1cHRfZHNhX2tleWdlbikKKysgICAgICAgICAgICBGSVBTX2NvcnJ1 cHRfZHNhX2tleWdlbigpOworKyAgICBpZiAoZG9fY29ycnVwdF9yc2Ffa2V5Z2VuKQorKyAgICAg ICAgICAgIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKCk7CisrICAgIGlmIChkb19ybmdfc3RpY2sp CisrICAgICAgICAgICAgRklQU19ybmdfc3RpY2soKTsKKysKKysgICAgLyogQUVTIGVuY3J5cHRp b24vZGVjcnlwdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjMuIEFFUyBlbmNyeXB0aW9uL2Rl Y3J5cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2Flc190ZXN0KCkgPyAic3VjY2Vzc2Z1 bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBSU0Ega2V5IGdlbmVyYXRp b24gYW5kIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjQuIFJT QSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7CisrICAgIHBy aW50ZiggRklQU19yc2FfdGVzdChiYWRfcnNhKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZB SUxFRCFcbiIpICk7CisrCisrICAgIC8qIERFUy1DQkMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisr ICAgICovCisrICAgIHByaW50ZigiNS4gREVTLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4i KTsKKysgICAgcHJpbnRmKCBGSVBTX2RlczNfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFp bCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWdu YXR1cmUgdmFsaWRhdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjYuIERTQSBrZXkgZ2VuZXJh dGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2Rz YV90ZXN0KGJhZF9kc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsK KysKKysgICAgLyogU0hBLTEgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdhLiBTSEEtMSBo YXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19zaGExX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4i IDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNIQS0yNTYgaGFzaAorKyAgICAq LworKyAgICBwcmludGYoIjdiLiBTSEEtMjU2IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBT X3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwor KworKyAgICAvKiBTSEEtNTEyIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3Yy4gU0hBLTUx MiBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19zaGE1MTJfdGVzdCgpID8gInN1Y2Nlc3Nm dWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMSBoYXNo CisrICAgICovCisrICAgIHByaW50ZigiN2QuIEhNQUMtU0hBLTEgaGFzaC4uLiIpOworKyAgICBw cmludGYoIEZJUFNfaG1hY19zaGExX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZB SUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTIyNCBoYXNoCisrICAgICovCisrICAg IHByaW50ZigiN2UuIEhNQUMtU0hBLTIyNCBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19o bWFjX3NoYTIyNF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSAp OworKworKyAgICAvKiBITUFDLVNIQS0yNTYgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdm LiBITUFDLVNIQS0yNTYgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEyNTZf dGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAg LyogSE1BQy1TSEEtMzg0IGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3Zy4gSE1BQy1TSEEt Mzg0IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKSA/ICJz dWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hB LTUxMiBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2guIEhNQUMtU0hBLTUxMiBoYXNoLi4u Iik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxu IiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBOb24tQXBwcm92ZWQgY3J5cHRv Z3JhcGhpYyBvcGVyYXRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCI4LiBOb24tQXBwcm92ZWQg Y3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7CisrICAgIHByaW50ZigiXHRhLiBJ bmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKKysgICAgcHJpbnRmKCBkaF90ZXN0KCkgPyAi c3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgorKwkgICAgOiBGYWlsKCJmYWlsZWQgSU5DT1JSRUNU TFkhXG4iKSApOworKworKyAgICAvKiBaZXJvaXphdGlvbgorKyAgICAqLworKyAgICBwcmludGYo IjkuIFplcm8taXphdGlvbi4uLlxuIik7CisrICAgIHByaW50ZiggWmVyb2l6ZSgpID8gIlx0c3Vj Y2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgorKwkgICAgOiBGYWlsKCJcdGZhaWxlZCBJTkNPUlJFQ1RM WSFcbiIpICk7CisrCisrICAgIHByaW50ZigiXG5BbGwgdGVzdHMgY29tcGxldGVkIHdpdGggJWQg ZXJyb3JzXG4iLCBFcnJvcik7CisrICAgIHJldHVybiBFcnJvciA/IDEgOiAwOworKyAgICB9Cisr CisrI2VuZGlmCitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v Zmlwc19sb2NsLmgKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzX2xvY2wuaAkyMDA5LTEx LTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw3MiBAQAorKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg 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 TUFHRS4KKysgKgorKyAqLworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysjaWZkZWYgIF9f Y3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrdm9pZCBmaXBzX3dfbG9jayh2 b2lkKTsKKyt2b2lkIGZpcHNfd191bmxvY2sodm9pZCk7Cisrdm9pZCBmaXBzX3JfbG9jayh2b2lk KTsKKyt2b2lkIGZpcHNfcl91bmxvY2sodm9pZCk7CisraW50IGZpcHNfaXNfc3RhcnRlZCh2b2lk KTsKKyt2b2lkIGZpcHNfc2V0X3N0YXJ0ZWQodm9pZCk7CisraW50IGZpcHNfaXNfb3duaW5nX3Ro cmVhZCh2b2lkKTsKKytpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKTsKKyt2b2lkIGZp cHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCk7CisraW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVh ZCh2b2lkKTsKKysKKysjZGVmaW5lIEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUJMTYKKysKKysj aWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKyNlbmRpZgorZGlmZiAtdXAgL2Rldi9u dWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvTWFrZWZpbGUKKy0tLSAvZGV2L251 bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9maXBzL01ha2VmaWxlCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAw ICswMTAwCitAQCAtMCwwICsxLDgxIEBACisrIworKyMgT3BlblNTTC9jcnlwdG8vZmlwcy9NYWtl ZmlsZQorKyMKKysKKytESVI9CWZpcHMKKytUT1A9CS4uLy4uCisrQ0M9CWNjCisrSU5DTFVERVM9 CisrQ0ZMQUc9LWcKKytNQUtFRklMRT0JTWFrZWZpbGUKKytBUj0JCWFyIHIKKysKKytDRkxBR1M9 ICQoSU5DTFVERVMpICQoQ0ZMQUcpCisrCisrR0VORVJBTD1NYWtlZmlsZQorK1RFU1Q9Zmlwc190 ZXN0X3N1aXRlLmMgZmlwc19yYW5kdGVzdC5jCisrQVBQUz0KKysKKytMSUI9JChUT1ApL2xpYmNy eXB0by5hCisrTElCU1JDPWZpcHNfYWVzX3NlbGZ0ZXN0LmMgZmlwc19kZXNfc2VsZnRlc3QuYyBm aXBzX2htYWNfc2VsZnRlc3QuYyBmaXBzX3JhbmRfc2VsZnRlc3QuYyBcCisrICAgIGZpcHNfcnNh X3NlbGZ0ZXN0LmMgZmlwc19zaGExX3NlbGZ0ZXN0LmMgZmlwcy5jIGZpcHNfZHNhX3NlbGZ0ZXN0 LmMgIGZpcHNfcmFuZC5jIFwKKysgICAgZmlwc19yc2FfeDkzMWcuYworKworK0xJQk9CSj1maXBz X2Flc19zZWxmdGVzdC5vIGZpcHNfZGVzX3NlbGZ0ZXN0Lm8gZmlwc19obWFjX3NlbGZ0ZXN0Lm8g Zmlwc19yYW5kX3NlbGZ0ZXN0Lm8gXAorKyAgICBmaXBzX3JzYV9zZWxmdGVzdC5vIGZpcHNfc2hh MV9zZWxmdGVzdC5vIGZpcHMubyBmaXBzX2RzYV9zZWxmdGVzdC5vICBmaXBzX3JhbmQubyBcCisr ICAgIGZpcHNfcnNhX3g5MzFnLm8KKysKKytTUkM9ICQoTElCU1JDKSBmaXBzX3N0YW5kYWxvbmVf c2hhMS5jCisrCisrRVhIRUFERVI9IGZpcHMuaCBmaXBzX3JhbmQuaAorK0hFQURFUj0JJChFWEhF QURFUikKKysKKytBTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQorKworK3RvcDoK KysJKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQor KworK2FsbDoJbGliCisrCisrbGliOgkkKExJQk9CSikKKysJJChBUikgJChMSUIpICQoTElCT0JK KQorKwkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KKysJQHRvdWNoIGxpYgor KworK2ZpbGVzOgorKwkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQo VE9QKS9NSU5GTworKworK2xpbmtzOgorKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwg Li4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCisrCUAkKFBFUkwpICQoVE9QKS91dGls L21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKKysJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWts aW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQorKworK2luc3RhbGw6CisrCUBbIC1uICIkKElOU1RB TExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KKysJQGhlYWRlcmxp c3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAorKwlkbyAgXAorKwko Y3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRp OyBcCisrCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9v cGVuc3NsLyQkaSApOyBcCisrCWRvbmU7CisrCisrdGFnczoKKysJY3RhZ3MgJChTUkMpCisrCisr dGVzdHM6CisrCisrbGludDoKKysJbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZm CisrCisrZGVwZW5kOgorKwlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQg YnkgdXBwZXIgTWFrZWZpbGUuLi4KKysJJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xV REVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQorKworK2RjbGVhbjoKKysJJChQ RVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQo MCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldworKwltdiAtZiBNYWtlZmlsZS5uZXcgJChN QUtFRklMRSkKKysKKytjbGVhbjoKKysJcm0gLWYgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1 cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKKysKKysjIERPIE5PVCBERUxFVEUgVEhJUyBMSU5F IC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9obWFjL2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2htYWMvaG1hYy5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vaG1hYy9obWFjLmMu ZmlwcwkyMDA4LTExLTEyIDA0OjU4OjAyLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2htYWMvaG1hYy5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAw ICswMTAwCitAQCAtNzcsNiArNzcsMTMgQEAgaW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4 LCBjb25zdCB2bworIAorIAlpZiAoa2V5ICE9IE5VTEwpCisgCQl7CisrI2lmZGVmIE9QRU5TU0xf RklQUworKwkJaWYgKEZJUFNfbW9kZSgpICYmICEobWQtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQ UykKKysJCSYmICghKGN0eC0+bWRfY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBT X0FMTE9XKQorKwkJIHx8ICEoY3R4LT5pX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05f RklQU19BTExPVykKKysJCSB8fCAhKGN0eC0+b19jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cpKSkKKysJCQlnb3RvIGVycjsKKysjZW5kaWYKKyAJCXJlc2V0PTE7Cisg CQlqPUVWUF9NRF9ibG9ja19zaXplKG1kKTsKKyAJCU9QRU5TU0xfYXNzZXJ0KGogPD0gKGludClz aXplb2YoY3R4LT5rZXkpKTsKK0BAIC0yMDksMyArMjE2LDEwIEBAIHVuc2lnbmVkIGNoYXIgKkhN QUMoY29uc3QgRVZQX01EICpldnBfbWQKKyAJcmV0dXJuIE5VTEw7CisgCX0KKyAKKyt2b2lkIEhN QUNfQ1RYX3NldF9mbGFncyhITUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBsb25nIGZsYWdzKQorKwl7 CisrCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgtPmlfY3R4LCBmbGFncyk7CisrCUVWUF9NRF9D VFhfc2V0X2ZsYWdzKCZjdHgtPm9fY3R4LCBmbGFncyk7CisrCUVWUF9NRF9DVFhfc2V0X2ZsYWdz KCZjdHgtPm1kX2N0eCwgZmxhZ3MpOworKwl9CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9obWFjL2htYWMuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ht YWMvaG1hYy5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vaG1hYy9obWFjLmguZmlw cwkyMDA5LTExLTEyIDEyOjM2OjQ5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2htYWMvaG1hYy5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICsw MTAwCitAQCAtMTAxLDYgKzEwMSw3IEBAIHVuc2lnbmVkIGNoYXIgKkhNQUMoY29uc3QgRVZQX01E ICpldnBfbWQKKyAJCSAgICB1bnNpZ25lZCBpbnQgKm1kX2xlbik7CisgaW50IEhNQUNfQ1RYX2Nv cHkoSE1BQ19DVFggKmRjdHgsIEhNQUNfQ1RYICpzY3R4KTsKKyAKKyt2b2lkIEhNQUNfQ1RYX3Nl dF9mbGFncyhITUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKyAKKyAjaWZkZWYg IF9fY3BsdXNwbHVzCisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vTWFr ZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9NYWtlZmlsZQorLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL01ha2VmaWxlLmZpcHMJMjAwOS0wNC0wNiAxNjozMTozNS4w MDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9NYWtlZmlsZQky MDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTM0LDE0ICszNCwxNCBAQCBH RU5FUkFMPU1ha2VmaWxlIFJFQURNRSBjcnlwdG8tbGliLmNvbSBpCisgCisgTElCPSAkKFRPUCkv bGliY3J5cHRvLmEKKyBTSEFSRURfTElCPSBsaWJjcnlwdG8kKFNITElCX0VYVCkKKy1MSUJTUkM9 CWNyeXB0bGliLmMgbWVtLmMgbWVtX2Nsci5jIG1lbV9kYmcuYyBjdmVyc2lvbi5jIGV4X2RhdGEu YyBjcHRfZXJyLmMgZWJjZGljLmMgdWlkLmMgb190aW1lLmMgb19zdHIuYyBvX2Rpci5jCistTElC T0JKPSBjcnlwdGxpYi5vIG1lbS5vIG1lbV9kYmcubyBjdmVyc2lvbi5vIGV4X2RhdGEubyBjcHRf ZXJyLm8gZWJjZGljLm8gdWlkLm8gb190aW1lLm8gb19zdHIubyBvX2Rpci5vICQoQ1BVSURfT0JK KQorK0xJQlNSQz0JY3J5cHRsaWIuYyBtZW0uYyBtZW1fY2xyLmMgbWVtX2RiZy5jIGN2ZXJzaW9u LmMgZXhfZGF0YS5jIGNwdF9lcnIuYyBlYmNkaWMuYyB1aWQuYyBvX3RpbWUuYyBvX3N0ci5jIG9f ZGlyLmMgb19pbml0LmMgZmlwc19lcnIuYworK0xJQk9CSj0gY3J5cHRsaWIubyBtZW0ubyBtZW1f ZGJnLm8gY3ZlcnNpb24ubyBleF9kYXRhLm8gY3B0X2Vyci5vIGViY2RpYy5vIHVpZC5vIG9fdGlt ZS5vIG9fc3RyLm8gb19kaXIubyBvX2luaXQubyBmaXBzX2Vyci5vICQoQ1BVSURfT0JKKQorIAor IFNSQz0gJChMSUJTUkMpCisgCisgRVhIRUFERVI9IGNyeXB0by5oIG9wZW5zc2x2Lmggb3BlbnNz bGNvbmYuaCBlYmNkaWMuaCBzeW1oYWNrcy5oIFwKKyAJb3NzbF90eXAuaAorLUhFQURFUj0JY3J5 cHRsaWIuaCBidWlsZGluZi5oIG1kMzJfY29tbW9uLmggb190aW1lLmggb19zdHIuaCBvX2Rpci5o ICQoRVhIRUFERVIpCisrSEVBREVSPQljcnlwdGxpYi5oIGJ1aWxkaW5mLmggZmlwc19sb2NsLmgg bWQzMl9jb21tb24uaCBvX3RpbWUuaCBvX3N0ci5oIG9fZGlyLmggJChFWEhFQURFUikKKyAKKyBB TEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQorIAorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v bWRjMi9tZGMyZGdzdC5jLmZpcHMJMjAwNC0wNy0yNSAyMToxMDo0MS4wMDAwMDAwMDAgKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZGMyL21kYzJkZ3N0LmMJMjAwOS0xMS0x MiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02MSw2ICs2MSwxMSBAQAorICNpbmNsdWRl IDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9tZGMyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyAjdW5kZWYgYzJs CisgI2RlZmluZSBjMmwoYyxsKQkobCA9KChERVNfTE9ORykoKigoYykrKykpKSAgICAsIFwKK0BA IC03NSw3ICs4MCw3IEBACisgCQkJKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PjI0TCkm MHhmZikpCisgCisgc3RhdGljIHZvaWQgbWRjMl9ib2R5KE1EQzJfQ1RYICpjLCBjb25zdCB1bnNp Z25lZCBjaGFyICppbiwgc2l6ZV90IGxlbik7CistaW50IE1EQzJfSW5pdChNREMyX0NUWCAqYykK KytGSVBTX05PTl9GSVBTX01EX0luaXQoTURDMikKKyAJeworIAljLT5udW09MDsKKyAJYy0+cGFk X3R5cGU9MTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kYzIvbWRjMi5o LmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWRjMi9tZGMyLmgKKy0tLSBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9tZGMyL21kYzIuaC5maXBzCTIwMDktMTEtMTIgMTI6MzY6NTAu MDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWRjMi9tZGMy LmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC04MCw3ICs4MCw5IEBA IHR5cGVkZWYgc3RydWN0IG1kYzJfY3R4X3N0CisgCWludCBwYWRfdHlwZTsgLyogZWl0aGVyIDEg b3IgMiwgZGVmYXVsdCAxICovCisgCX0gTURDMl9DVFg7CisgCistCisrI2lmZGVmIE9QRU5TU0xf RklQUworK2ludCBwcml2YXRlX01EQzJfSW5pdChNREMyX0NUWCAqYyk7CisrI2VuZGlmCisgaW50 IE1EQzJfSW5pdChNREMyX0NUWCAqYyk7CisgaW50IE1EQzJfVXBkYXRlKE1EQzJfQ1RYICpjLCBj b25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgTURDMl9GaW5hbCh1 bnNpZ25lZCBjaGFyICptZCwgTURDMl9DVFggKmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9tZDIvbWQyX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kMi9tZDJf ZGdzdC5jLmZpcHMJMjAwNy0wOC0zMSAxMjoxMjozNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDIvbWQyX2Rnc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUw LjAwMDAwMDAwMCArMDEwMAorQEAgLTYyLDYgKzYyLDExIEBACisgI2luY2x1ZGUgPG9wZW5zc2wv bWQyLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorIAorIGNvbnN0IGNo YXIgTUQyX3ZlcnNpb25bXT0iTUQyIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitAQCAtMTE2 LDcgKzEyMSw3IEBAIGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQpCisgCQlyZXR1cm4oIm1k MihpbnQpIik7CisgCX0KKyAKKy1pbnQgTUQyX0luaXQoTUQyX0NUWCAqYykKKytGSVBTX05PTl9G SVBTX01EX0luaXQoTUQyKQorIAl7CisgCWMtPm51bT0wOworIAltZW1zZXQoYy0+c3RhdGUsMCxz aXplb2YgYy0+c3RhdGUpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQy L21kMi5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQyL21kMi5oCistLS0gb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQyL21kMi5oLmZpcHMJMjAwOS0xMS0xMiAxMjozNjo0 OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDIvbWQy LmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC04MSw2ICs4MSw5IEBA IHR5cGVkZWYgc3RydWN0IE1EMnN0YXRlX3N0CisgCX0gTUQyX0NUWDsKKyAKKyBjb25zdCBjaGFy ICpNRDJfb3B0aW9ucyh2b2lkKTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVf TUQyX0luaXQoTUQyX0NUWCAqYyk7CisrI2VuZGlmCisgaW50IE1EMl9Jbml0KE1EMl9DVFggKmMp OworIGludCBNRDJfVXBkYXRlKE1EMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEs IHNpemVfdCBsZW4pOworIGludCBNRDJfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1EMl9DVFgg KmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDQvbWQ0X2Rnc3QuYworLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAxNDow NzoxMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDQv bWQ0X2Rnc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTU5LDYg KzU5LDExIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgIm1kNF9sb2NsLmgiCisg I2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRp ZgorKworIAorIGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0IiBPUEVOU1NMX1ZFUlNJT05f UFRFWFQ7CisgCitAQCAtNzAsNyArNzUsNyBAQCBjb25zdCBjaGFyIE1ENF92ZXJzaW9uW109Ik1E NCIgT1BFTlNTTF9WCisgI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFk Y2ZlTAorICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKyAK Ky1pbnQgTUQ0X0luaXQoTUQ0X0NUWCAqYykKKytGSVBTX05PTl9GSVBTX01EX0luaXQoTUQ0KQor IAl7CisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5BPUlOSVRfREFUQV9BOworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ0L21kNC5oLmZpcHMgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vbWQ0L21kNC5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vbWQ0L21kNC5oLmZpcHMJMjAwOS0xMS0xMiAxMjozNjo0OS4wMDAwMDAwMDAgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDQvbWQ0LmgJMjAwOS0xMS0xMiAxMjozNjo1 MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDUsNiArMTA1LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTUQ0 c3RhdGVfc3QKKyAJdW5zaWduZWQgaW50IG51bTsKKyAJfSBNRDRfQ1RYOworIAorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9NRDRfSW5pdChNRDRfQ1RYICpjKTsKKysjZW5kaWYK KyBpbnQgTUQ0X0luaXQoTUQ0X0NUWCAqYyk7CisgaW50IE1ENF9VcGRhdGUoTUQ0X0NUWCAqYywg Y29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IE1ENF9GaW5hbCh1bnNpZ25lZCBj aGFyICptZCwgTUQ0X0NUWCAqYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9tZDUvbWQ1X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNS9tZDVf ZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlw cwkyMDA3LTAxLTIxIDE0OjA3OjExLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL21kNS9tZDVfZGdzdC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAw ICswMTAwCitAQCAtNTksNiArNTksMTEgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVk ZSAibWQ1X2xvY2wuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2VuZGlmCisrCisgCisgY29uc3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUi IE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKK0BAIC03MCw3ICs3NSw3IEBAIGNvbnN0IGNoYXIg TUQ1X3ZlcnNpb25bXT0iTUQ1IiBPUEVOU1NMX1YKKyAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNp Z25lZCBsb25nKTB4OThiYWRjZmVMCisgI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9u ZykweDEwMzI1NDc2TAorIAorLWludCBNRDVfSW5pdChNRDVfQ1RYICpjKQorK0ZJUFNfTk9OX0ZJ UFNfTURfSW5pdChNRDUpCisgCXsKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPkE9 SU5JVF9EQVRBX0E7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDUvbWQ1 LmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDUvbWQ1LmgKKy0tLSBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9tZDUvbWQ1LmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjQ5LjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNS9tZDUuaAky MDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTEwNSw2ICsxMDUsOSBAQCB0 eXBlZGVmIHN0cnVjdCBNRDVzdGF0ZV9zdAorIAl1bnNpZ25lZCBpbnQgbnVtOworIAl9IE1ENV9D VFg7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBwcml2YXRlX01ENV9Jbml0KE1ENV9D VFggKmMpOworKyNlbmRpZgorIGludCBNRDVfSW5pdChNRDVfQ1RYICpjKTsKKyBpbnQgTUQ1X1Vw ZGF0ZShNRDVfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgTUQ1 X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDVfQ1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL21lbS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v bWVtLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZW0uYy5maXBzCTIwMDgtMTEt MTIgMDQ6NTc6NDcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vbWVtLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDEsNyAr MTAxLDcgQEAgc3RhdGljIHZvaWQgKCpmcmVlX2xvY2tlZF9mdW5jKSh2b2lkICopIAorIAorIC8q IG1heSBiZSBjaGFuZ2VkIGFzIGxvbmcgYXMgJ2FsbG93X2N1c3RvbWl6ZV9kZWJ1ZycgaXMgc2V0 ICovCisgLyogWFhYIHVzZSBjb3JyZWN0IGZ1bmN0aW9uIHBvaW50ZXIgdHlwZXMgKi8KKy0jaWZk ZWYgQ1JZUFRPX01ERUJVRworKyNpZiBkZWZpbmVkKENSWVBUT19NREVCVUcpICYmICFkZWZpbmVk KE9QRU5TU0xfRklQUykKKyAvKiB1c2UgZGVmYXVsdCBmdW5jdGlvbnMgZnJvbSBtZW1fZGJnLmMg Ki8KKyBzdGF0aWMgdm9pZCAoKm1hbGxvY19kZWJ1Z19mdW5jKSh2b2lkICosaW50LGNvbnN0IGNo YXIgKixpbnQsaW50KQorIAk9IENSWVBUT19kYmdfbWFsbG9jOworZGlmZiAtdXAgL2Rldi9udWxs IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL29faW5pdC5jCistLS0gL2Rldi9udWxsCTIwMDkt MTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vb19pbml0LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0w LDAgKzEsODAgQEAKKysvKiBvX2luaXQuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBO IEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3Qu CisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAg ZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgor KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisr ICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisr ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91 bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoK KysgKi8KKysKKysjaW5jbHVkZSA8ZV9vcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgor KworKy8qIFBlcmZvcm0gYW55IGVzc2VudGlhbCBPcGVuU1NMIGluaXRpYWxpemF0aW9uIG9wZXJh dGlvbnMuCisrICogQ3VycmVudGx5IG9ubHkgc2V0cyBGSVBTIGNhbGxiYWNrcworKyAqLworKwor K3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCkKKysJeworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJc3RhdGljIGludCBkb25lID0gMDsKKysJaWYgKCFkb25lKQorKwkJeworKyNpZmRlZiBD UllQVE9fTURFQlVHCisrCQlDUllQVE9fbWFsbG9jX2RlYnVnX2luaXQoKTsKKysjZW5kaWYKKysJ CWRvbmUgPSAxOworKwkJfQorKyNlbmRpZgorKwl9CisrCQkKKysKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcyBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9vcGVuc3NsY29uZi5oLmluCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzCTIwMDUtMTItMTYgMTE6Mzc6MjMuMDAwMDAwMDAwICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgkyMDA5 LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTEsNSArMSwyMCBAQAorIC8qIGNy eXB0by9vcGVuc3NsY29uZi5oLmluICovCisgCisrI2lmZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURF UEVORAorKworKy8qIEluY2x1ZGUgYW55IHN5bWJvbHMgaGVyZSB0aGF0IGhhdmUgdG8gYmUgZXhw bGljaXRseSBzZXQgdG8gZW5hYmxlIGEgZmVhdHVyZQorKyAqIHRoYXQgc2hvdWxkIGJlIHZpc2li bGUgdG8gbWFrZWRlcGVuZC4KKysgKgorKyAqIFtPdXIgIm1ha2UgZGVwZW5kIiBkb2Vzbid0IGFj dHVhbGx5IGxvb2sgYXQgdGhpcywgd2UgdXNlIGFjdHVhbCBidWlsZCBzZXR0aW5ncworKyAqIGlu c3RlYWQ7IHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IHRvIHJlbW92ZSBzdWJkaXJlY3RvcmllcyB3 aXRoIGRpc2FibGVkIGFsZ29yaXRobXMuXQorKyAqLworKworKyNpZm5kZWYgT1BFTlNTTF9GSVBT CisrI2RlZmluZSBPUEVOU1NMX0ZJUFMKKysjZW5kaWYKKysKKysjZW5kaWYKKysKKyAvKiBHZW5l cmF0ZSA4MDM4NiBjb2RlPyAqLworICN1bmRlZiBJMzg2X09OTFkKKyAKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMuZmlwcyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vcGtjczEyL3AxMl9jcnQuYy5maXBzCTIwMDktMDMtMDkgMTQ6MDg6MDQuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYwky MDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTU5LDYgKzU5LDEwIEBACisg I2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUgPG9w ZW5zc2wvcGtjczEyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyAKKyBzdGF0aWMgaW50IHBrY3MxMl9hZGRfYmFnKFNU QUNLX09GKFBLQ1MxMl9TQUZFQkFHKSAqKnBiYWdzLCBQS0NTMTJfU0FGRUJBRyAqYmFnKTsKK0BA IC05MCw3ICs5NCwxNCBAQCBQS0NTMTIgKlBLQ1MxMl9jcmVhdGUoY2hhciAqcGFzcywgY2hhciAq CisgCisgCS8qIFNldCBkZWZhdWx0cyAqLworIAlpZiAoIW5pZF9jZXJ0KQorKwkJeworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSkKKysJCQluaWRfY2VydCA9IE5JRF9w YmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOworKwkJZWxzZQorKyNlbmRpZgorIAkJ bmlkX2NlcnQgPSBOSURfcGJlX1dpdGhTSEExQW5kNDBCaXRSQzJfQ0JDOworKwkJfQorIAlpZiAo IW5pZF9rZXkpCisgCQluaWRfa2V5ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBsZURF U19DQkM7CisgCWlmICghaXRlcikKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L3JhbmQvbWRfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmFuZC9tZF9y YW5kLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBz CTIwMDktMDEtMDMgMTA6MjU6MzIuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vcmFuZC9tZF9yYW5kLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAg KzAxMDAKK0BAIC0xMjYsNiArMTI2LDEwIEBACisgCisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRv Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyAjaWZkZWYgQk5fREVCVUcK KyAjIGRlZmluZSBQUkVESUNUCitAQCAtMzQyLDYgKzM0NiwxNCBAQCBzdGF0aWMgaW50IHNzbGVh eV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoCisgI2VuZGlmCisgCWludCBkb19zdGlyX3Bvb2wgPSAw OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkpCisrCSAgICB7Cisr CSAgICBGSVBTZXJyKEZJUFNfRl9TU0xFQVlfUkFORF9CWVRFUyxGSVBTX1JfTk9OX0ZJUFNfTUVU SE9EKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKyNlbmRpZgorKworICNpZmRlZiBQUkVE SUNUCisgCWlmIChyYW5kX3ByZWRpY3RhYmxlKQorIAkJeworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vcmFuZC9yYW5kX2Vyci5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmFu ZC9yYW5kX2Vyci5jLmZpcHMJMjAwNi0xMS0yMSAyMjoyOTo0MS4wMDAwMDAwMDAgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYW5kL3JhbmRfZXJyLmMJMjAwOS0xMS0xMiAx MjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC03MCw2ICs3MCwxMyBAQAorIAorIHN0YXRpYyBF UlJfU1RSSU5HX0RBVEEgUkFORF9zdHJfZnVuY3RzW109CisgCXsKKyt7RVJSX0ZVTkMoUkFORF9G X0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRCksCSJFTkdfUkFORF9HRVRfUkFORF9NRVRIT0QifSwK Kyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfUkFORCksCSJGSVBTX1JBTkQifSwKKyt7RVJSX0ZVTkMo UkFORF9GX0ZJUFNfUkFORF9CWVRFUyksCSJGSVBTX1JBTkRfQllURVMifSwKKyt7RVJSX0ZVTkMo UkFORF9GX0ZJUFNfUkFORF9TRVRfRFQpLAkiRklQU19SQU5EX1NFVF9EVCJ9LAorK3tFUlJfRlVO QyhSQU5EX0ZfRklQU19TRVRfRFQpLAkiRklQU19TRVRfRFQifSwKKyt7RVJSX0ZVTkMoUkFORF9G X0ZJUFNfU0VUX1BSTkdfU0VFRCksCSJGSVBTX1NFVF9QUk5HX1NFRUQifSwKKyt7RVJSX0ZVTkMo UkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSksCSJGSVBTX1NFVF9URVNUX01PREUifSwKKyB7RVJS X0ZVTkMoUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9EKSwJIlJBTkRfZ2V0X3JhbmRfbWV0aG9k In0sCisge0VSUl9GVU5DKFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUyksCSJTU0xFQVlfUkFORF9C WVRFUyJ9LAorIHswLE5VTEx9CitAQCAtNzcsNyArODQsMTcgQEAgc3RhdGljIEVSUl9TVFJJTkdf REFUQSBSQU5EX3N0cl9mdW5jdHNbXQorIAorIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUkFORF9z dHJfcmVhc29uc1tdPQorIAl7Cisre0VSUl9SRUFTT04oUkFORF9SX05PTl9GSVBTX01FVEhPRCkg ICAgICAsIm5vbiBmaXBzIG1ldGhvZCJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9OT1RfSU5fVEVT VF9NT0RFKSAgICAgLCJub3QgaW4gdGVzdCBtb2RlIn0sCisre0VSUl9SRUFTT04oUkFORF9SX05P X0tFWV9TRVQpICAgICAgICAgICAsIm5vIGtleSBzZXQifSwKKyt7RVJSX1JFQVNPTihSQU5EX1Jf UFJOR19BU0tJTkdfRk9SX1RPT19NVUNIKSwicHJuZyBhc2tpbmcgZm9yIHRvbyBtdWNoIn0sCisr e0VSUl9SRUFTT04oUkFORF9SX1BSTkdfRVJST1IpICAgICAgICAgICAsInBybmcgZXJyb3IifSwK Kyt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19LRVlFRCkgICAgICAgICAgICwicHJuZyBrZXllZCJ9 LAorK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9SRUtFWUVEKSAgICAgLCJwcm5nIG5vdCBy ZWtleWVkIn0sCisre0VSUl9SRUFTT04oUkFORF9SX1BSTkdfTk9UX1JFU0VFREVEKSAgICAsInBy bmcgbm90IHJlc2VlZGVkIn0sCisge0VSUl9SRUFTT04oUkFORF9SX1BSTkdfTk9UX1NFRURFRCkg ICAgICAsIlBSTkcgbm90IHNlZWRlZCJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX1NFRURf TVVTVF9OT1RfTUFUQ0hfS0VZKSwicHJuZyBzZWVkIG11c3Qgbm90IG1hdGNoIGtleSJ9LAorK3tF UlJfUkVBU09OKFJBTkRfUl9QUk5HX1NUVUNLKSAgICAgICAgICAgLCJwcm5nIHN0dWNrIn0sCisg ezAsTlVMTH0KKyAJfTsKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3Jh bmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmFuZC9yYW5kLmgKKy0t LSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYW5kL3JhbmQuaC5maXBzCTIwMDktMTEtMTIg MTI6MzY6NDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v cmFuZC9yYW5kLmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMjgs MTEgKzEyOCwyOCBAQCB2b2lkIEVSUl9sb2FkX1JBTkRfc3RyaW5ncyh2b2lkKTsKKyAvKiBFcnJv ciBjb2RlcyBmb3IgdGhlIFJBTkQgZnVuY3Rpb25zLiAqLworIAorIC8qIEZ1bmN0aW9uIGNvZGVz LiAqLworKyNkZWZpbmUgUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRAkJCSAxMDgKKysj ZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJIDEwMworKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFO RF9CWVRFUwkJCQkgMTAyCisrI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX1NFVF9EVAkJCQkgMTA2 CisrI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfRFQJCQkJIDEwNAorKyNkZWZpbmUgUkFORF9GX0ZJ UFNfU0VUX1BSTkdfU0VFRAkJCSAxMDcKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9URVNUX01P REUJCQkgMTA1CisgI2RlZmluZSBSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTAxCisg I2RlZmluZSBSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMJCQkgMTAwCisgCisgLyogUmVhc29uIGNv ZGVzLiAqLworKyNkZWZpbmUgUkFORF9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTA1CisrI2RlZmlu ZSBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERQkJCQkgMTA2CisrI2RlZmluZSBSQU5EX1JfTk9fS0VZ X1NFVAkJCQkgMTA3CisrI2RlZmluZSBSQU5EX1JfUFJOR19BU0tJTkdfRk9SX1RPT19NVUNICQkJ IDEwMQorKyNkZWZpbmUgUkFORF9SX1BSTkdfRVJST1IJCQkJIDEwOAorKyNkZWZpbmUgUkFORF9S X1BSTkdfS0VZRUQJCQkJIDEwOQorKyNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFS0VZRUQJCQkJ IDEwMgorKyNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFU0VFREVECQkJIDEwMworICNkZWZpbmUg UkFORF9SX1BSTkdfTk9UX1NFRURFRAkJCQkgMTAwCisrI2RlZmluZSBSQU5EX1JfUFJOR19TRUVE X01VU1RfTk9UX01BVENIX0tFWQkJIDExMAorKyNkZWZpbmUgUkFORF9SX1BSTkdfU1RVQ0sJCQkJ IDEwNAorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9yYW5kL3JhbmRfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9yYW5kL3JhbmRfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYW5k L3JhbmRfbGliLmMuZmlwcwkyMDA4LTExLTEyIDA0OjU4OjA0LjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JhbmQvcmFuZF9saWIuYwkyMDA5LTExLTEyIDEy OjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTYwLDYgKzYwLDEyIEBACisgI2luY2x1ZGUgPHRp bWUuaD4KKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+ CisrI2luY2x1ZGUgInJhbmRfbGNsLmgiCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjZW5k aWYKKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgI2luY2x1ZGUgPG9wZW5zc2wvZW5n aW5lLmg+CisgI2VuZGlmCitAQCAtMTAyLDggKzEwOCwxOSBAQCBjb25zdCBSQU5EX01FVEhPRCAq UkFORF9nZXRfcmFuZF9tZXRob2QoCisgCQkJZnVuY3RfcmVmID0gZTsKKyAJCWVsc2UKKyAjZW5k aWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQkJZGVmYXVsdF9SQU5EX21ldGggPSBGSVBTX21v ZGUoKSA/IEZJUFNfcmFuZF9tZXRob2QoKSA6IFJBTkRfU1NMZWF5KCk7CisrCQl9CisrCWlmIChG SVBTX21vZGUoKQorKwkJJiYgZGVmYXVsdF9SQU5EX21ldGggIT0gRklQU19yYW5kX2NoZWNrKCkp CisrCSAgICB7CisrCSAgICBSQU5EZXJyKFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRCxSQU5E X1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKyNlbHNlCisg CQkJZGVmYXVsdF9SQU5EX21ldGggPSBSQU5EX1NTTGVheSgpOworIAkJfQorKyNlbmRpZgorIAly ZXR1cm4gZGVmYXVsdF9SQU5EX21ldGg7CisgCX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL3JjMi9yYzIuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3Jj Mi9yYzIuaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjMi9yYzIuaC5maXBzCTIw MDktMTEtMTIgMTI6MzY6NDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vcmMyL3JjMi5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitA QCAtNzksNyArNzksOSBAQCB0eXBlZGVmIHN0cnVjdCByYzJfa2V5X3N0CisgCVJDMl9JTlQgZGF0 YVs2NF07CisgCX0gUkMyX0tFWTsKKyAKKy0gCisrI2lmZGVmIE9QRU5TU0xfRklQUyAKKyt2b2lk IHByaXZhdGVfUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25l ZCBjaGFyICpkYXRhLGludCBiaXRzKTsKKysjZW5kaWYKKyB2b2lkIFJDMl9zZXRfa2V5KFJDMl9L RVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSxpbnQgYml0cyk7Cisg dm9pZCBSQzJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hh ciAqb3V0LFJDMl9LRVkgKmtleSwKKyAJCSAgICAgaW50IGVuYyk7CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9yYzIvcmMyX3NrZXkuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL3JjMi9yYzJfc2tleS5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v cmMyL3JjMl9za2V5LmMuZmlwcwkyMDA3LTA5LTE4IDIzOjEwOjMyLjAwMDAwMDAwMCArMDIwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjMi9yYzJfc2tleS5jCTIwMDktMTEtMTIg MTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNTcsNiArNTcsMTEgQEAKKyAgKi8KKyAKKyAj aW5jbHVkZSA8b3BlbnNzbC9yYzIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgor KworICNpbmNsdWRlICJyYzJfbG9jbC5oIgorIAorIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGtleV90YWJsZVsyNTZdPXsKK0BAIC05NCw4ICs5OSwyMCBAQCBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrZXlfdGFibGVbMjU2CisgICogQlNBRkUgdXNlcyB0aGUgJ3JldGFyZGVkJyB2ZXJz aW9uLiAgV2hhdCBJIHByZXZpb3VzbHkgc2hpcHBlZCBpcworICAqIHRoZSBzYW1lIGFzIHNwZWNp ZnlpbmcgMTAyNCBmb3IgdGhlICdiaXRzJyBwYXJhbWV0ZXIuICBCc2FmZSB1c2VzCisgICogYSB2 ZXJzaW9uIHdoZXJlIHRoZSBiaXRzIHBhcmFtZXRlciBpcyB0aGUgc2FtZSBhcyBsZW4qOCAqLwor KworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyB2b2lkIFJDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwg aW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGJpdHMpCisgCXsKKysJaWYg KEZJUFNfbW9kZSgpKQorKwkJRklQU19CQURfQUJPUlQoUkMyKQorKwlwcml2YXRlX1JDMl9zZXRf a2V5KGtleSwgbGVuLCBkYXRhLCBiaXRzKTsKKysJfQorK3ZvaWQgcHJpdmF0ZV9SQzJfc2V0X2tl eShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisrCQkJ CQkJCQlpbnQgYml0cykKKysjZWxzZQorK3ZvaWQgUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBp bnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgYml0cykKKysjZW5kaWYKKysJ eworIAlpbnQgaSxqOworIAl1bnNpZ25lZCBjaGFyICprOworIAlSQzJfSU5UICpraTsKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L2FzbS9yYzQtczM5MHgucGwKKy0tLSBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvYXNtL3JjNC1zMzkweC5wbC5maXBzCTIwMDktMDIt MTIgMTU6NDg6NDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vcmM0L2FzbS9yYzQtczM5MHgucGwJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAx MDAKK0BAIC0yMDIsNCArMjAyLDYgQEAgUkM0X29wdGlvbnM6CisgLnN0cmluZwkicmM0KDh4LGNo YXIpIgorIF9fXworIAorKyRjb2RlID1+IHMvUkM0X3NldF9rZXkvcHJpdmF0ZV9SQzRfc2V0X2tl eS9nIGlmICgkRU5We0ZJUFN9IG5lICIiKTsKKysKKyBwcmludCAkY29kZTsKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbC5maXBzIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbAorLS0tIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbC5maXBzCTIwMDktMDQtMjcg MjE6MzE6MDQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v cmM0L2FzbS9yYzQteDg2XzY0LnBsCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAw CitAQCAtNDk5LDYgKzQ5OSw4IEBAIF9fXworIAorICRjb2RlID1+IHMvIyhbYndkXSkvJDEvZ207 CisgCisrJGNvZGUgPX4gcy9SQzRfc2V0X2tleS9wcml2YXRlX1JDNF9zZXRfa2V5L2cgaWYgKCRF TlZ7RklQU30gbmUgIiIpOworKworIHByaW50ICRjb2RlOworIAorIGNsb3NlIFNURE9VVDsKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbC5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbAorLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbC5maXBzCTIwMDctMTItMDIg MjI6MzI6MDMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v cmM0L2FzbS9yYzQtNTg2LnBsCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitA QCAtMTY2LDggKzE2NiwxMiBAQCAkaWR4PSJlZHgiOworIAorICZleHRlcm5hbF9sYWJlbCgiT1BF TlNTTF9pYTMyY2FwX1AiKTsKKyAKKyskc2V0a2V5ZnVuYyA9ICJSQzRfc2V0X2tleSI7CisrJHNl dGtleWZ1bmMgPSAicHJpdmF0ZV9SQzRfc2V0X2tleSIgaWYgKCRFTlZ7RklQU30gbmUgIiIpOwor KworKworICMgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksaW50IGxlbixjb25zdCB1bnNp Z25lZCBjaGFyICpkYXRhKTsKKy0mZnVuY3Rpb25fYmVnaW4oIlJDNF9zZXRfa2V5Iik7CisrJmZ1 bmN0aW9uX2JlZ2luKCRzZXRrZXlmdW5jKTsKKyAJJm1vdgkoJG91dCwmd3BhcmFtKDApKTsJCSMg bG9hZCBrZXkKKyAJJm1vdgkoJGlkaSwmd3BhcmFtKDEpKTsJCSMgbG9hZCBsZW4KKyAJJm1vdgko JGlucCwmd3BhcmFtKDIpKTsJCSMgbG9hZCBkYXRhCitAQCAtMjQ1LDcgKzI0OSw3IEBAICRpZHg9 ImVkeCI7CisgCSZ4b3IJKCJlYXgiLCJlYXgiKTsKKyAJJm1vdgkoJkRXUCgtOCwkb3V0KSwiZWF4 Iik7CQkjIGtleS0+eD0wOworIAkmbW92CSgmRFdQKC00LCRvdXQpLCJlYXgiKTsJCSMga2V5LT55 PTA7CistJmZ1bmN0aW9uX2VuZCgiUkM0X3NldF9rZXkiKTsKKysmZnVuY3Rpb25fZW5kKCRzZXRr ZXlmdW5jKTsKKyAKKyAjIGNvbnN0IGNoYXIgKlJDNF9vcHRpb25zKHZvaWQpOworICZmdW5jdGlv bl9iZWdpbl9CKCJSQzRfb3B0aW9ucyIpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vcmM0L01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L01h a2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L01ha2VmaWxlLmZpcHMJ MjAwOS0wMi0xMSAxMTowMTozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9yYzQvTWFrZWZpbGUJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAx MDAKK0BAIC0yMSw4ICsyMSw4IEBAIFRFU1Q9cmM0dGVzdC5jCisgQVBQUz0KKyAKKyBMSUI9JChU T1ApL2xpYmNyeXB0by5hCistTElCU1JDPXJjNF9za2V5LmMgcmM0X2VuYy5jCistTElCT0JKPSQo UkM0X0VOQykKKytMSUJTUkM9cmM0X3NrZXkuYyByYzRfZW5jLmMgcmM0X2ZibGsuYworK0xJQk9C Sj0kKFJDNF9FTkMpIHJjNF9mYmxrLm8KKyAKKyBTUkM9ICQoTElCU1JDKQorIAorZGlmZiAtdXAg L2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9yYzRfZmJsay5jCistLS0g L2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCisrKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L3JjNF9mYmxrLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4w MDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNzUgQEAKKysvKiBjcnlwdG8vcmM0L3JjNF9mYmxr LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wu b3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz 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 PT09PT09PT09PT09PQorKyAqLworKworKworKyNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgorKyNp bmNsdWRlICJyYzRfbG9jbC5oIgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKysvKiBGSVBTIG1vZGUgYmxvY2tpbmcgZm9y IFJDNCBoYXMgdG8gYmUgZG9uZSBzZXBhcmF0ZWx5IHNpbmNlIFJDNF9zZXRfa2V5CisrICogbWF5 IGJlIGltcGxlbWVudGVkIGluIGFuIGFzc2VtYmx5IGxhbmd1YWdlIGZpbGUuCisrICovCisrCisr I2lmZGVmIE9QRU5TU0xfRklQUworK3ZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQg bGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKwl7CisrCWlmIChGSVBTX21vZGUoKSkK KysJCUZJUFNfQkFEX0FCT1JUKFJDNCkKKysJcHJpdmF0ZV9SQzRfc2V0X2tleShrZXksIGxlbiwg ZGF0YSk7CisrCX0KKysjZW5kaWYKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL3JjNC9yYzQuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9yYzQuaAor LS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9yYzQuaC5maXBzCTIwMDktMTEtMTIg MTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v cmM0L3JjNC5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNzgsNiAr NzgsOSBAQCB0eXBlZGVmIHN0cnVjdCByYzRfa2V5X3N0CisgCisgIAorIGNvbnN0IGNoYXIgKlJD NF9vcHRpb25zKHZvaWQpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt2b2lkIHByaXZhdGVfUkM0 X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRh KTsKKysjZW5kaWYKKyB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29u c3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Cisgdm9pZCBSQzQoUkM0X0tFWSAqa2V5LCBzaXplX3Qg bGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbmRhdGEsCisgCQl1bnNpZ25lZCBjaGFyICpvdXRk YXRhKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9yYzRfc2tleS5j LmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L3JjNF9za2V5LmMKKy0tLSBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvcmM0X3NrZXkuYy5maXBzCTIwMDctMDEtMjEgMTQ6 MDc6MTMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0 L3JjNF9za2V5LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01OSw2 ICs1OSwxMSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgorICNpbmNsdWRlICJyYzRfbG9j bC5oIgorICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Y3J5cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjZW5kaWYKKysKKyAKKyBjb25zdCBjaGFyIFJDNF92ZXJzaW9uW109IlJDNCIgT1BFTlNT TF9WRVJTSU9OX1BURVhUOworIAorQEAgLTg1LDcgKzkwLDExIEBAIGNvbnN0IGNoYXIgKlJDNF9v cHRpb25zKHZvaWQpCisgICogRGF0ZTogV2VkLCAxNCBTZXAgMTk5NCAwNjozNTozMSBHTVQKKyAg Ki8KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrdm9pZCBwcml2YXRlX1JDNF9zZXRfa2V5KFJD NF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKysjZWxzZQor IHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBj aGFyICpkYXRhKQorKyNlbmRpZgorIAl7CisgICAgICAgICByZWdpc3RlciBSQzRfSU5UIHRtcDsK KyAgICAgICAgIHJlZ2lzdGVyIGludCBpZDEsaWQyOworQEAgLTEyNiw3ICsxMzUsMTIgQEAgdm9p ZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIAorIAkJICogbW9kdWxlLi4uCisg CQkgKgkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CisgCQkgKi8KKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCQl1bnNpZ25lZCBsb25nICppYTMyY2FwX3B0ciA9IE9QRU5TU0xfaWEzMmNhcF9sb2Mo KTsKKysJCWlmIChpYTMyY2FwX3B0ciAmJiAoKmlhMzJjYXBfcHRyICYgKDE8PDI4KSkpIHsKKysj ZWxzZQorIAkJaWYgKE9QRU5TU0xfaWEzMmNhcF9QICYgKDE8PDI4KSkgeworKyNlbmRpZgorIAkJ CXVuc2lnbmVkIGNoYXIgKmNwPSh1bnNpZ25lZCBjaGFyICopZDsKKyAKKyAJCQlmb3IgKGk9MDtp PDI1NjtpKyspIGNwW2ldPWk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9y aXBlbWQvcmlwZW1kLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yaXBlbWQvcmlw ZW1kLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yaXBlbWQvcmlwZW1kLmguZmlw cwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaAkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAw MCArMDEwMAorQEAgLTkxLDYgKzkxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUklQRU1EMTYwc3RhdGVf c3QKKyAJdW5zaWduZWQgaW50ICAgbnVtOworIAl9IFJJUEVNRDE2MF9DVFg7CisgCisrI2lmZGVm IE9QRU5TU0xfRklQUworK2ludCBwcml2YXRlX1JJUEVNRDE2MF9Jbml0KFJJUEVNRDE2MF9DVFgg KmMpOworKyNlbmRpZgorIGludCBSSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKTsKKyBp bnQgUklQRU1EMTYwX1VwZGF0ZShSSVBFTUQxNjBfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBz aXplX3QgbGVuKTsKKyBpbnQgUklQRU1EMTYwX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBSSVBF TUQxNjBfQ1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JpcGVt ZC9ybWRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmlwZW1kL3JtZF9k Z3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYy5m aXBzCTIwMDctMDEtMjEgMTQ6MDc6MTMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAw MDAwMDAgKzAxMDAKK0BAIC01OSw2ICs1OSwxMSBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNp bmNsdWRlICJybWRfbG9jbC5oIgorICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyBjb25zdCBjaGFyIFJNRDE2MF92ZXJzaW9u W109IlJJUEUtTUQxNjAiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKK0BAIC02OSw3ICs3NCw3 IEBAIGNvbnN0IGNoYXIgUk1EMTYwX3ZlcnNpb25bXT0iUklQRS1NRDE2MCIKKyAgICAgIHZvaWQg cmlwZW1kMTYwX2Jsb2NrKFJJUEVNRDE2MF9DVFggKmMsIHVuc2lnbmVkIGxvbmcgKnAsc2l6ZV90 IG51bSk7CisgIyAgZW5kaWYKKyAKKy1pbnQgUklQRU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAq YykKKytGSVBTX05PTl9GSVBTX01EX0luaXQoUklQRU1EMTYwKQorIAl7CisgCW1lbXNldCAoYyww LHNpemVvZigqYykpOworIAljLT5BPVJJUEVNRDE2MF9BOworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL3JzYS9yc2FfZWF5LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNh X2VheS5jLmZpcHMJMjAwOC0wOS0xNCAxNTo1MTo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX2VheS5jCTIwMDktMTEtMTIgMTI6MzY6NTAu MDAwMDAwMDAwICswMTAwCitAQCAtMTE0LDYgKzExNCw4IEBACisgI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5k Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorIAorICNpZm5kZWYgUlNBX05VTEwKKyAKK0BAIC0xMzgsNyArMTQwLDcgQEAgc3RhdGljIFJT QV9NRVRIT0QgcnNhX3BrY3MxX2VheV9tZXRoPXsKKyAJQk5fbW9kX2V4cF9tb250LCAvKiBYWFgg cHJvYmFibHkgd2Ugc2hvdWxkIG5vdCB1c2UgTW9udGdvbWVyeSBpZiAgZSA9PSAzICovCisgCVJT QV9lYXlfaW5pdCwKKyAJUlNBX2VheV9maW5pc2gsCistCTAsIC8qIGZsYWdzICovCisrCVJTQV9G TEFHX0ZJUFNfTUVUSE9ELCAvKiBmbGFncyAqLworIAlOVUxMLAorIAkwLCAvKiByc2Ffc2lnbiAq LworIAkwLCAvKiByc2FfdmVyaWZ5ICovCitAQCAtMTUwLDYgKzE1MiwxNiBAQCBjb25zdCBSU0Ff TUVUSE9EICpSU0FfUEtDUzFfU1NMZWF5KHZvaWQpCisgCXJldHVybigmcnNhX3BrY3MxX2VheV9t ZXRoKTsKKyAJfQorIAorKy8qIFVzYWdlIGV4YW1wbGU7CisrICogICAgTU9OVF9IRUxQRVIocnNh LCBibl9jdHgsIHAsIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFLCBnb3RvIGVy cik7CisrICovCisrI2RlZmluZSBNT05UX0hFTFBFUihyc2EsIGN0eCwgbSwgcHJlX2NvbmQsIGVy cl9pbnN0cikgXAorKwlpZigocHJlX2NvbmQpICYmICgocnNhKS0+X21ldGhvZF9tb2RfIyNtID09 IE5VTEwpICYmIFwKKysJCQkhQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmKChyc2EpLT5fbWV0aG9k X21vZF8jI20pLCBcCisrCQkJCUNSWVBUT19MT0NLX1JTQSwgXAorKwkJCQkocnNhKS0+bSwgKGN0 eCkpKSBcCisrCQllcnJfaW5zdHIKKysKKyBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5 cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sCisgCSAgICAgdW5zaWduZWQg Y2hhciAqdG8sIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKKyAJeworQEAgLTE1OCw2ICsxNzAsMjMg QEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19lbmNyeXB0KGludCBmbAorIAl1bnNpZ25lZCBj aGFyICpidWY9TlVMTDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCWlmKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVk KCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsRklQ U19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCisrCQlp ZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklU UykKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsIFJTQV9S X0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysJCX0KKysjZW5k aWYKKysKKyAJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxV U19CSVRTKQorIAkJeworIAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsIFJT QV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKK0BAIC0yMjMsOSArMjUyLDcgQEAgc3RhdGljIGludCBS U0FfZWF5X3B1YmxpY19lbmNyeXB0KGludCBmbAorIAkJZ290byBlcnI7CisgCQl9CisgCistCWlm IChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQorLQkJaWYgKCFCTl9NT05UX0NU WF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5u LCBjdHgpKQorLQkJCWdvdG8gZXJyOworKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5m bGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOworIAorIAlpZiAoIXJzYS0+ bWV0aC0+Ym5fbW9kX2V4cChyZXQsZixyc2EtPmUscnNhLT5uLGN0eCwKKyAJCXJzYS0+X21ldGhv ZF9tb2RfbikpIGdvdG8gZXJyOworQEAgLTM1NSw2ICszODIsMjMgQEAgc3RhdGljIGludCBSU0Ff ZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQgZgorIAlpbnQgbG9jYWxfYmxpbmRpbmcgPSAwOworIAlC Tl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ aWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJ CQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsRklQU19SX0ZJ UFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCisrCQlpZiAoQk5f bnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKKysJ CQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULCBSU0FfUl9LRVlf U0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAtMTsKKysJCQl9CisrCQl9CisrI2VuZGlmCisr CisgCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7CisgCUJOX0NUWF9z dGFydChjdHgpOworIAlmICAgPSBCTl9DVFhfZ2V0KGN0eCk7CitAQCAtNDMyLDkgKzQ3Niw3IEBA IHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2VuY3J5cHQoaW50IGYKKyAJCWVsc2UKKyAJCQlk PSByc2EtPmQ7CisgCistCQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykK Ky0JCQlpZighQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQ VE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKKy0JCQkJZ290byBlcnI7CisrCQlNT05UX0hFTFBF Uihyc2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBl cnIpOworIAorIAkJaWYgKCFyc2EtPm1ldGgtPmJuX21vZF9leHAocmV0LGYsZCxyc2EtPm4sY3R4 LAorIAkJCQlyc2EtPl9tZXRob2RfbW9kX24pKSBnb3RvIGVycjsKK0BAIC00ODgsNiArNTMwLDIz IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2RlY3J5cHQoaW50IGYKKyAJaW50IGxvY2Fs X2JsaW5kaW5nID0gMDsKKyAJQk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKKyAKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFU RV9ERUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQkJZ290byBlcnI7Cisr CQkJfQorKworKwkJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01J Tl9NT0RVTFVTX0JJVFMpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVf REVDUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJ fQorKwkJfQorKyNlbmRpZgorKworIAlpZigoY3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKSBn b3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CisgCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsK K0BAIC01NTUsOSArNjE0LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZGVjcnlwdChp bnQgZgorIAkJZWxzZQorIAkJCWQgPSByc2EtPmQ7CisgCistCQlpZiAocnNhLT5mbGFncyAmIFJT QV9GTEFHX0NBQ0hFX1BVQkxJQykKKy0JCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJz YS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCistCQkJCWdv dG8gZXJyOworKwkJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxB R19DQUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKKyAJCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhw KHJldCxmLGQscnNhLT5uLGN0eCwKKyAJCQkJcnNhLT5fbWV0aG9kX21vZF9uKSkKKyAJCSAgZ290 byBlcnI7CitAQCAtNjE3LDYgKzY3NCwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2Rl Y3J5cHQoaW50IGZsCisgCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOworIAlCTl9DVFggKmN0eD1O VUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJewor KwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0Zf UlNBX0VBWV9QVUJMSUNfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJ CWdvdG8gZXJyOworKwkJCX0KKysKKysJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNT TF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNB X0VBWV9QVUJMSUNfREVDUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1 cm4gLTE7CisrCQkJfQorKwkJfQorKyNlbmRpZgorKworIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5u KSA+IE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMpCisgCQl7CisgCQlSU0FlcnIoUlNBX0Zf UlNBX0VBWV9QVUJMSUNfREVDUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOworQEAgLTY2 Nyw5ICs3NDEsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2RlY3J5cHQoaW50IGZsCisg CQlnb3RvIGVycjsKKyAJCX0KKyAKKy0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9Q VUJMSUMpCistCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2Rf biwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCistCQkJZ290byBlcnI7CisrCU1PTlRf SEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBn b3RvIGVycik7CisgCisgCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLHJzYS0+ZSxy c2EtPm4sY3R4LAorIAkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290byBlcnI7CitAQCAtNzE3LDYg Kzc4OSw3IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9tb2RfZXhwKEJJR05VTSAqcjAsIGMKKyAJQklH TlVNICpyMSwqbTEsKnZyZnk7CisgCUJJR05VTSBsb2NhbF9kbXAxLGxvY2FsX2RtcTEsbG9jYWxf Yyxsb2NhbF9yMTsKKyAJQklHTlVNICpkbXAxLCpkbXExLCpjLCpwcjE7CisrCWludCBibl9mbGFn czsKKyAJaW50IHJldD0wOworIAorIAlCTl9DVFhfc3RhcnQoY3R4KTsKK0BAIC03MjQsNDEgKzc5 NywzMSBAQCBzdGF0aWMgaW50IFJTQV9lYXlfbW9kX2V4cChCSUdOVU0gKnIwLCBjCisgCW0xID0g Qk5fQ1RYX2dldChjdHgpOworIAl2cmZ5ID0gQk5fQ1RYX2dldChjdHgpOworIAorLQl7CistCQlC SUdOVU0gbG9jYWxfcCwgbG9jYWxfcTsKKy0JCUJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTDsK Ky0KKy0JCS8qIE1ha2Ugc3VyZSBCTl9tb2RfaW52ZXJzZSBpbiBNb250Z29tZXJ5IGludGlhbGl6 YXRpb24gdXNlcyB0aGUKKy0JCSAqIEJOX0ZMR19DT05TVFRJTUUgZmxhZyAodW5sZXNzIFJTQV9G TEFHX05PX0NPTlNUVElNRSBpcyBzZXQpCistCQkgKi8KKy0JCWlmICghKHJzYS0+ZmxhZ3MgJiBS U0FfRkxBR19OT19DT05TVFRJTUUpKQorLQkJCXsKKy0JCQlCTl9pbml0KCZsb2NhbF9wKTsKKy0J CQlwID0gJmxvY2FsX3A7CistCQkJQk5fd2l0aF9mbGFncyhwLCByc2EtPnAsIEJOX0ZMR19DT05T VFRJTUUpOworLQorLQkJCUJOX2luaXQoJmxvY2FsX3EpOworLQkJCXEgPSAmbG9jYWxfcTsKKy0J CQlCTl93aXRoX2ZsYWdzKHEsIHJzYS0+cSwgQk5fRkxHX0NPTlNUVElNRSk7CistCQkJfQorLQkJ ZWxzZQorLQkJCXsKKy0JCQlwID0gcnNhLT5wOworLQkJCXEgPSByc2EtPnE7CistCQkJfQorKwkv KiBNYWtlIHN1cmUgbW9kX2ludmVyc2UgaW4gbW9udGdvbWVyZXkgaW50aWFsaXphdGlvbiB1c2Ug Y29ycmVjdCAKKysJICogQk5fRkxHX0NPTlNUVElNRSBmbGFnLgorKwkgKi8KKysJYm5fZmxhZ3Mg PSByc2EtPnAtPmZsYWdzOworKwlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09OU1RU SU1FKSkKKysJCXsKKysJCXJzYS0+cC0+ZmxhZ3MgfD0gQk5fRkxHX0NPTlNUVElNRTsKKysJCX0K KysJTU9OVF9IRUxQRVIocnNhLCBjdHgsIHAsIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9Q UklWQVRFLCBnb3RvIGVycik7CisrCS8qIFdlIHJlc3RvcmUgYm5fZmxhZ3MgYmFjayAqLworKwly c2EtPnAtPmZsYWdzID0gYm5fZmxhZ3M7CisgCistCQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFH X0NBQ0hFX1BSSVZBVEUpCistCQkJeworLQkJCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgm cnNhLT5fbWV0aG9kX21vZF9wLCBDUllQVE9fTE9DS19SU0EsIHAsIGN0eCkpCistCQkJCWdvdG8g ZXJyOworLQkJCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9x LCBDUllQVE9fTE9DS19SU0EsIHEsIGN0eCkpCistCQkJCWdvdG8gZXJyOworLQkJCX0KKy0JfQor KyAgICAgICAgLyogTWFrZSBzdXJlIG1vZF9pbnZlcnNlIGluIG1vbnRnb21lcmV5IGludGlhbGl6 YXRpb24gdXNlIGNvcnJlY3QKKysgICAgICAgICAqIEJOX0ZMR19DT05TVFRJTUUgZmxhZy4KKysg ICAgICAgICAqLworKwlibl9mbGFncyA9IHJzYS0+cS0+ZmxhZ3M7CisrCWlmICghKHJzYS0+Zmxh Z3MgJiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQorKwkJeworKwkJcnNhLT5xLT5mbGFncyB8PSBC Tl9GTEdfQ09OU1RUSU1FOworKwkJfQorKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgcSwgcnNhLT5m bGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJyKTsKKysJLyogV2UgcmVzdG9y ZSBibl9mbGFncyBiYWNrICovCisrCXJzYS0+cS0+ZmxhZ3MgPSBibl9mbGFnczsJCisgCistCWlm IChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQorLQkJaWYgKCFCTl9NT05UX0NU WF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5u LCBjdHgpKQorLQkJCWdvdG8gZXJyOworKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5m bGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOworIAorIAkvKiBjb21wdXRl IEkgbW9kIHEgKi8KKyAJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkp CitAQCAtODc1LDYgKzkzOCw5IEBAIGVycjoKKyAKKyBzdGF0aWMgaW50IFJTQV9lYXlfaW5pdChS U0EgKnJzYSkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVj aygpOworKyNlbmRpZgorIAlyc2EtPmZsYWdzfD1SU0FfRkxBR19DQUNIRV9QVUJMSUN8UlNBX0ZM QUdfQ0FDSEVfUFJJVkFURTsKKyAJcmV0dXJuKDEpOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vcnNhL3JzYV9lcnIuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9y c2FfZXJyLmMuZmlwcwkyMDA4LTEyLTI5IDE3OjExOjU2LjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2FfZXJyLmMJMjAwOS0xMS0xMiAxMjozNjo1 MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMTEsOCArMTExLDEyIEBAIHN0YXRpYyBFUlJfU1RSSU5H X0RBVEEgUlNBX3N0cl9mdW5jdHNbXT0KKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BSSU5UX0ZQKSwJ IlJTQV9wcmludF9mcCJ9LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFJJVl9ERUNPREUpLAkiUlNB X1BSSVZfREVDT0RFIn0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9QUklWX0VOQ09ERSksCSJSU0Ff UFJJVl9FTkNPREUifSwKKyt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCksCSJS U0FfcHJpdmF0ZV9lbmNyeXB0In0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJfREVDT0RFKSwJ IlJTQV9QVUJfREVDT0RFIn0sCisre0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCks CSJSU0FfcHVibGljX2RlY3J5cHQifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVFVQX0JMSU5E SU5HKSwJIlJTQV9zZXR1cF9ibGluZGluZyJ9LAorK3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX0RF RkFVTFRfTUVUSE9EKSwJIlJTQV9zZXRfZGVmYXVsdF9tZXRob2QifSwKKyt7RVJSX0ZVTkMoUlNB X0ZfUlNBX1NFVF9NRVRIT0QpLAkiUlNBX3NldF9tZXRob2QifSwKKyB7RVJSX0ZVTkMoUlNBX0Zf UlNBX1NJR04pLAkiUlNBX3NpZ24ifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJR05fQVNOMV9P Q1RFVF9TVFJJTkcpLAkiUlNBX3NpZ25fQVNOMV9PQ1RFVF9TVFJJTkcifSwKKyB7RVJSX0ZVTkMo UlNBX0ZfUlNBX1ZFUklGWSksCSJSU0FfdmVyaWZ5In0sCitAQCAtMTU1LDEwICsxNTksMTIgQEAg c3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX3JlYXNvbnNbXQorIHtFUlJfUkVBU09OKFJT QV9SX0tFWV9TSVpFX1RPT19TTUFMTCkgICAgLCJrZXkgc2l6ZSB0b28gc21hbGwifSwKKyB7RVJS X1JFQVNPTihSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQpICAgICwibGFzdCBvY3RldCBpbnZhbGlk In0sCisge0VSUl9SRUFTT04oUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAsIm1vZHVsdXMg dG9vIGxhcmdlIn0sCisre0VSUl9SRUFTT04oUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKSAgICAgICAs Im5vbiBmaXBzIG1ldGhvZCJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX05PX1BVQkxJQ19FWFBPTkVO VCkgICAgLCJubyBwdWJsaWMgZXhwb25lbnQifSwKKyB7RVJSX1JFQVNPTihSU0FfUl9OVUxMX0JF Rk9SRV9CTE9DS19NSVNTSU5HKSwibnVsbCBiZWZvcmUgYmxvY2sgbWlzc2luZyJ9LAorIHtFUlJf UkVBU09OKFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9RKSAgLCJuIGRvZXMgbm90IGVxdWFsIHAg cSJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX09BRVBfREVDT0RJTkdfRVJST1IpICAgLCJvYWVwIGRl Y29kaW5nIGVycm9yIn0sCisre0VSUl9SRUFTT04oUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VE X0lOX0ZJUFNfTU9ERSksIm9wZXJhdGlvbiBub3QgYWxsb3dlZCBpbiBmaXBzIG1vZGUifSwKKyB7 RVJSX1JFQVNPTihSU0FfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBF KSwib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMga2V5dHlwZSJ9LAorIHtFUlJfUkVB U09OKFJTQV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVEKSAgLCJwYWRkaW5nIGNoZWNrIGZhaWxlZCJ9 LAorIHtFUlJfUkVBU09OKFJTQV9SX1BfTk9UX1BSSU1FKSAgICAgICAgICAgLCJwIG5vdCBwcmlt ZSJ9LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9nZW4uYy5m aXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2FfZ2VuLmMKKy0tLSBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMJMjAwNy0wMy0yOCAwMjoxNToy Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNh X2dlbi5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNjcsNiArNjcs ODIgQEAKKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgor ICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworK3N0YXRpYyBpbnQg Zmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDA7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tl eWdlbih2b2lkKQorKwl7CisrCWZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAxOworKwl9CisrCisr aW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKQorKwl7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIg dGJzW10gPSAiUlNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOworKwl1bnNpZ25lZCBjaGFyICpjdGJ1 ZiA9IE5VTEwsICpwdGJ1ZiA9IE5VTEw7CisrCWludCBsZW4sIHJldCA9IDA7CisrCUVWUF9QS0VZ ICpwazsKKysKKysJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJy OworKworKwlFVlBfUEtFWV9zZXQxX1JTQShwaywgcnNhKTsKKysKKysJLyogUGVyZm9ybSBwYWly d2lzZSBjb25zaXN0ZW5jeSBzaWduYXR1cmUgdGVzdCAqLworKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywgdGJzLCAtMSwKKysJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BLQ1MxLCBOVUxMKQorKwkJfHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywgdGJzLCAtMSwKKysJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdf UEFEX1g5MzEsIE5VTEwpCisrCQl8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMs IC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLCBO VUxMKSkKKysJCWdvdG8gZXJyOworKwkvKiBOb3cgcGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5j eSBlbmNyeXB0L2RlY3J5cHQgdGVzdCAqLworKwljdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9z aXplKHJzYSkpOworKwlpZiAoIWN0YnVmKQorKwkJZ290byBlcnI7CisrCisrCWxlbiA9IFJTQV9w dWJsaWNfZW5jcnlwdChzaXplb2YodGJzKSAtIDEsIHRicywgY3RidWYsIHJzYSwgUlNBX1BLQ1Mx X1BBRERJTkcpOworKwlpZiAobGVuIDw9IDApCisrCQlnb3RvIGVycjsKKysJLyogQ2hlY2sgY2lw aGVydGV4dCBkb2Vzbid0IG1hdGNoIHBsYWludGV4dCAqLworKwlpZiAoKGxlbiA9PSAoc2l6ZW9m KHRicykgLSAxKSkgJiYgIW1lbWNtcCh0YnMsIGN0YnVmLCBsZW4pKQorKwkJZ290byBlcnI7Cisr CXB0YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7CisrCisrCWlmICghcHRidWYp CisrCQlnb3RvIGVycjsKKysJbGVuID0gUlNBX3ByaXZhdGVfZGVjcnlwdChsZW4sIGN0YnVmLCBw dGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7CisrCWlmIChsZW4gIT0gKHNpemVvZih0YnMp IC0gMSkpCisrCQlnb3RvIGVycjsKKysJaWYgKG1lbWNtcChwdGJ1ZiwgdGJzLCBsZW4pKQorKwkJ Z290byBlcnI7CisrCisrCXJldCA9IDE7CisrCisrCWlmICghcHRidWYpCisrCQlnb3RvIGVycjsK KysJCisrCWVycjoKKysJaWYgKHJldCA9PSAwKQorKwkJeworKwkJZmlwc19zZXRfc2VsZnRlc3Rf ZmFpbCgpOworKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19SU0EsRklQU19SX1BBSVJXSVNF X1RFU1RfRkFJTEVEKTsKKysJCX0KKysKKysJaWYgKGN0YnVmKQorKwkJT1BFTlNTTF9mcmVlKGN0 YnVmKTsKKysJaWYgKHB0YnVmKQorKwkJT1BFTlNTTF9mcmVlKHB0YnVmKTsKKysJaWYgKHBrKQor KwkJRVZQX1BLRVlfZnJlZShwayk7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKKyAK KyBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05V TSAqZV92YWx1ZSwgQk5fR0VOQ0IgKmNiKTsKKyAKK0BAIC05MCw2ICsxNjYsMjMgQEAgc3RhdGlj IGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIAorIAlpbnQgYml0c3AsYml0c3Esb2s9 IC0xLG49MDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisr CSAgICAJeworKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixGSVBTX1Jf RklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgCXJldHVybiAwOworKwkgICAgCX0KKysKKysJ CWlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQorKwkJICAgIHsK KysJCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0tFWV9UT09f U0hPUlQpOworKwkJICAgIHJldHVybiAwOworKwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJY3R4 PUJOX0NUWF9uZXcoKTsKKyAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0 YXJ0KGN0eCk7CitAQCAtMjAxLDYgKzI5NCwxNyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tl eWdlbihSU0EgKnJzYSwgCisgCQlwID0gcnNhLT5wOworIAlpZiAoIUJOX21vZF9pbnZlcnNlKHJz YS0+aXFtcCxyc2EtPnEscCxjdHgpKSBnb3RvIGVycjsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmIChmaXBzX3JzYV9wYWlyd2lzZV9mYWls KQorKwkJCUJOX2FkZF93b3JkKHJzYS0+biwgMSk7CisrCisrCQlpZighZmlwc19jaGVja19yc2Eo cnNhKSkKKysJCSAgICBnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJb2s9MTsKKyBlcnI6 CisgCWlmIChvayA9PSAtMSkKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3Jz YS9yc2EuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2EuaAorLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2EuaC5maXBzCTIwMDktMTEtMTIgMTI6MzY6 NDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3Jz YS5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNzQsNiArNzQsMjEg QEAKKyAjZXJyb3IgUlNBIGlzIGRpc2FibGVkLgorICNlbmRpZgorIAorKy8qIElmIHRoaXMgZmxh ZyBpcyBzZXQgdGhlIFJTQSBtZXRob2QgaXMgRklQUyBjb21wbGlhbnQgYW5kIGNhbiBiZSB1c2Vk CisrICogaW4gRklQUyBtb2RlLiBUaGlzIGlzIHNldCBpbiB0aGUgdmFsaWRhdGVkIG1vZHVsZSBt ZXRob2QuIElmIGFuCisrICogYXBwbGljYXRpb24gc2V0cyB0aGlzIGZsYWcgaW4gaXRzIG93biBt ZXRob2RzIGl0IGlzIGl0cyByZXBvc2liaWxpdHkKKysgKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBp cyBjb21wbGlhbnQuCisrICovCisrCisrI2RlZmluZSBSU0FfRkxBR19GSVBTX01FVEhPRAkJCTB4 MDQwMAorKworKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIG9wZXJhdGlvbnMgbm9ybWFsbHkg ZGlzYWJsZWQgaW4gRklQUyBtb2RlIGFyZQorKyAqIHBlcm1pdHRlZCBpdCBpcyB0aGVuIHRoZSBh cHBsaWNhdGlvbnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlCisrICogdXNhZ2Ug aXMgY29tcGxpYW50LgorKyAqLworKworKyNkZWZpbmUgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJ CQkweDA0MDAKKysKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlm CitAQCAtMTY0LDYgKzE3OSw4IEBAIHN0cnVjdCByc2Ffc3QKKyAjIGRlZmluZSBPUEVOU1NMX1JT QV9NQVhfTU9EVUxVU19CSVRTCTE2Mzg0CisgI2VuZGlmCisgCisrI2RlZmluZSBPUEVOU1NMX1JT QV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAorKworICNpZm5kZWYgT1BFTlNTTF9SU0FfU01B TExfTU9EVUxVU19CSVRTCisgIyBkZWZpbmUgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRT CTMwNzIKKyAjZW5kaWYKK0BAIC0yNjcsNiArMjg0LDExIEBAIFJTQSAqCVJTQV9nZW5lcmF0ZV9r ZXkoaW50IGJpdHMsIHVuc2lnbmUKKyAKKyAvKiBOZXcgdmVyc2lvbiAqLworIGludAlSU0FfZ2Vu ZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplLCBCTl9HRU5DQiAqY2Ip OworK2ludCBSU0FfWDkzMV9kZXJpdmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAq cDIsIEJJR05VTSAqcTEsIEJJR05VTSAqcTIsCisrCQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0 IEJJR05VTSAqWHAyLCBjb25zdCBCSUdOVU0gKlhwLAorKwkJCWNvbnN0IEJJR05VTSAqWHExLCBj b25zdCBCSUdOVU0gKlhxMiwgY29uc3QgQklHTlVNICpYcSwKKysJCQljb25zdCBCSUdOVU0gKmUs IEJOX0dFTkNCICpjYik7CisraW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwg aW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKKyAKKyBpbnQJUlNBX2No ZWNrX2tleShjb25zdCBSU0EgKik7CisgCS8qIG5leHQgNCByZXR1cm4gLTEgb24gZXJyb3IgKi8K K0BAIC00MzgsOCArNDYwLDEyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Cisg I2RlZmluZSBSU0FfRl9SU0FfUFJJTlRfRlAJCQkJIDExNgorICNkZWZpbmUgUlNBX0ZfUlNBX1BS SVZfREVDT0RFCQkJCSAxMzcKKyAjZGVmaW5lIFJTQV9GX1JTQV9QUklWX0VOQ09ERQkJCQkgMTM4 CisrI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUCQkJIDE0OAorICNkZWZpbmUgUlNB X0ZfUlNBX1BVQl9ERUNPREUJCQkJIDEzOQorKyNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNS WVBUCQkJIDE0OQorICNkZWZpbmUgUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HCQkJIDEzNgorKyNk ZWZpbmUgUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRAkJCSAxNTAKKysjZGVmaW5lIFJTQV9G X1JTQV9TRVRfTUVUSE9ECQkJCSAxNTEKKyAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOCQkJCQkgMTE3 CisgI2RlZmluZSBSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORwkJIDExOAorICNkZWZp bmUgUlNBX0ZfUlNBX1ZFUklGWQkJCQkgMTE5CitAQCAtNDc5LDEwICs1MDUsMTIgQEAgdm9pZCBF UlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIFJTQV9SX0tFWV9TSVpFX1RPT19T TUFMTAkJCSAxMjAKKyAjZGVmaW5lIFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRAkJCSAxMzQKKyAj ZGVmaW5lIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDUKKysjZGVmaW5lIFJTQV9SX05P Tl9GSVBTX01FVEhPRAkJCQkgMTQ5CisgI2RlZmluZSBSU0FfUl9OT19QVUJMSUNfRVhQT05FTlQJ CQkgMTQwCisgI2RlZmluZSBSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HCQkJIDExMwor ICNkZWZpbmUgUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EJCQkgMTI3CisgI2RlZmluZSBSU0Ff Ul9PQUVQX0RFQ09ESU5HX0VSUk9SCQkJIDEyMQorKyNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05P VF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTUwCisgI2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9U X1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFCSAxNDgKKyAjZGVmaW5lIFJTQV9SX1BBRERJTkdf Q0hFQ0tfRkFJTEVECQkJIDExNAorICNkZWZpbmUgUlNBX1JfUF9OT1RfUFJJTUUJCQkJIDEyOAor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2FfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMJMjAwOS0wOC0wNSAxNzowNDoxNi4wMDAw MDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX2xpYi5j CTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtODAsNiArODAsMTMgQEAg UlNBICpSU0FfbmV3KHZvaWQpCisgCisgdm9pZCBSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kKGNvbnN0 IFJTQV9NRVRIT0QgKm1ldGgpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBT X21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQorKwkJewor KwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01F VEhPRCk7CisrCQlyZXR1cm47CisrCQl9CisrI2VuZGlmCisgCWRlZmF1bHRfUlNBX21ldGggPSBt ZXRoOworIAl9CisgCitAQCAtMTExLDYgKzExOCwxMyBAQCBpbnQgUlNBX3NldF9tZXRob2QoUlNB ICpyc2EsIGNvbnN0IFJTQV9NCisgCS8qIE5COiBUaGUgY2FsbGVyIGlzIHNwZWNpZmljYWxseSBz ZXR0aW5nIGEgbWV0aG9kLCBzbyBpdCdzIG5vdCB1cCB0byB1cworIAkgKiB0byBkZWFsIHdpdGgg d2hpY2ggRU5HSU5FIGl0IGNvbWVzIGZyb20uICovCisgCWNvbnN0IFJTQV9NRVRIT0QgKm10bXA7 CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFn cyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKKysJCXsKKysJCVJTQWVycihSU0FfRl9SU0FfU0VU X01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAwOworKwkJfQorKyNl bmRpZgorIAltdG1wID0gcnNhLT5tZXRoOworIAlpZiAobXRtcC0+ZmluaXNoKSBtdG1wLT5maW5p c2gocnNhKTsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitAQCAtMTYzLDYgKzE3NywxOCBA QCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQorIAkJCX0KKyAJCX0KKyAjZW5k aWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKHJldC0+bWV0 aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7CisrCQlSU0FlcnIoUlNBX0Zf UlNBX05FV19NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7CisrI2lmbmRlZiBPUEVOU1NM X05PX0VOR0lORQorKwkJaWYgKHJldC0+ZW5naW5lKQorKwkJCUVOR0lORV9maW5pc2gocmV0LT5l bmdpbmUpOworKyNlbmRpZgorKwkJT1BFTlNTTF9mcmVlKHJldCk7CisrCQlyZXR1cm4gTlVMTDsK KysJCX0KKysjZW5kaWYKKyAKKyAJcmV0LT5wYWQ9MDsKKyAJcmV0LT52ZXJzaW9uPTA7CitAQCAt Mjg1LDYgKzMxMSwxMyBAQCBpbnQgUlNBX3B1YmxpY19lbmNyeXB0KGludCBmbGVuLCBjb25zdCB1 CisgaW50IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAorIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykK KyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZs YWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwkJeworKwkJUlNBZXJyKFJTQV9GX1JT QV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01P REUpOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgCXJldHVybihyc2EtPm1ldGgtPnJz YV9wcml2X2VuYyhmbGVuLCBmcm9tLCB0bywgcnNhLCBwYWRkaW5nKSk7CisgCX0KKyAKK0BAIC0y OTcsNiArMzMwLDEzIEBAIGludCBSU0FfcHJpdmF0ZV9kZWNyeXB0KGludCBmbGVuLCBjb25zdCAK KyBpbnQgUlNBX3B1YmxpY19kZWNyeXB0KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpm cm9tLCB1bnNpZ25lZCBjaGFyICp0bywKKyAJICAgICBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCisg CXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFn cyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJCXsKKysJCVJTQWVycihSU0FfRl9SU0Ff UFVCTElDX0RFQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUp OworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgCXJldHVybihyc2EtPm1ldGgtPnJzYV9w dWJfZGVjKGZsZW4sIGZyb20sIHRvLCByc2EsIHBhZGRpbmcpKTsKKyAJfQorIAorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcyBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX3NpZ24uYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL3JzYS9yc2Ffc2lnbi5jLmZpcHMJMjAwNy0wNC0yNCAwMzowNTo0Mi4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX3NpZ24uYwkyMDA5 LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTEzMCw3ICsxMzAsOCBAQCBpbnQg UlNBX3NpZ24oaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoCisgCQlpMmRfWDUwOV9TSUcoJnNp ZywmcCk7CisgCQlzPXRtcHM7CisgCX0KKy0JaT1SU0FfcHJpdmF0ZV9lbmNyeXB0KGkscyxzaWdy ZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKKysJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRo b2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLworKwlpID0gcnNhLT5tZXRoLT5y c2FfcHJpdl9lbmMgPyByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhpLHMsc2lncmV0LHJzYSxSU0Ff UEtDUzFfUEFERElORykgOiAwOworIAlpZiAoaSA8PSAwKQorIAkJcmV0PTA7CisgCWVsc2UKK0BA IC0xNjEsOCArMTYyLDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5z aQorIAorIAlpZigoZHR5cGUgPT0gTklEX21kNV9zaGExKSAmJiBybSkKKyAJCXsKKy0JCWkgPSBS U0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sCistCQkJCQlzaWdidWYscm0scnNhLFJTQV9Q S0NTMV9QQURESU5HKTsKKysJCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRo LT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbiwKKysJCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1Mx X1BBRERJTkcpIDogMDsKKyAJCWlmIChpIDw9IDApCisgCQkJcmV0dXJuIDA7CisgCQkqcHJtX2xl biA9IGk7CitAQCAtMTc5LDcgKzE4MCw4IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUs IGNvbnN0IHVuc2kKKyAJCQlSU0FlcnIoUlNBX0ZfSU5UX1JTQV9WRVJJRlksUlNBX1JfSU5WQUxJ RF9NRVNTQUdFX0xFTkdUSCk7CisgCQkJZ290byBlcnI7CisgCX0KKy0JaT1SU0FfcHVibGljX2Rl Y3J5cHQoKGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKKysJLyog TkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2lu ZyAqLworKwlpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9k ZWMoKGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7CisgCisg CWlmIChpIDw9IDApIGdvdG8gZXJyOworIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vc2hhL3NoYV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEv c2hhX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGFfZGdzdC5j LmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9zaGEvc2hhX2Rnc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAw MDAwMCArMDEwMAorQEAgLTU3LDYgKzU3LDEyIEBACisgICovCisgCisgI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbGNvbmYuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTApICYm ICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKQorIAorICN1bmRlZiAgU0hBXzEKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGEuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL3NoYS9zaGEuaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9z aGEuaC5maXBzCTIwMDktMTEtMTIgMTI6MzY6NDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYS5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAw MDAwICswMTAwCitAQCAtMTA2LDYgKzEwNiw5IEBAIHR5cGVkZWYgc3RydWN0IFNIQXN0YXRlX3N0 CisgCX0gU0hBX0NUWDsKKyAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMAorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9TSEFfSW5pdChTSEFfQ1RYICpjKTsKKysjZW5kaWYKKyBp bnQgU0hBX0luaXQoU0hBX0NUWCAqYyk7CisgaW50IFNIQV9VcGRhdGUoU0hBX0NUWCAqYywgY29u c3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IFNIQV9GaW5hbCh1bnNpZ25lZCBjaGFy ICptZCwgU0hBX0NUWCAqYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9z aGEvc2hhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGFfbG9j bC5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcwky MDA5LTExLTEyIDEyOjM2OjQ5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICsw MTAwCitAQCAtMTIyLDggKzEyMiwxNSBAQCB2b2lkIHNoYTFfYmxvY2tfZGF0YV9vcmRlciAoU0hB X0NUWCAqYywgCisgI2RlZmluZSBJTklUX0RBVEFfaDMgMHgxMDMyNTQ3NlVMCisgI2RlZmluZSBJ TklUX0RBVEFfaDQgMHhjM2QyZTFmMFVMCisgCisrI2lmIGRlZmluZWQoU0hBXzApICYmIGRlZmlu ZWQoT1BFTlNTTF9GSVBTKQorK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChTSEEpCisrI2Vsc2UKKyBp bnQgSEFTSF9JTklUIChTSEFfQ1RYICpjKQorKyNlbmRpZgorIAl7CisrI2lmIGRlZmluZWQoU0hB XzEpICYmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQorKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Cisr I2VuZGlmCisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5oMD1JTklUX0RBVEFfaDA7 CisgCWMtPmgxPUlOSVRfREFUQV9oMTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL3NoYS9zaGExZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3No YTFkZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhMWRnc3QuYy5m aXBzCTIwMDctMDEtMjEgMTQ6MDc6MTQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAw MDAgKzAxMDAKK0BAIC02Myw2ICs2MywxMCBAQAorICNkZWZpbmUgU0hBXzEKKyAKKyAjaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgCisgY29uc3QgY2hhciBTSEExX3ZlcnNpb25b XT0iU0hBMSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vc2hhL3NoYTI1Ni5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYTI1 Ni5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhMjU2LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAw MDAwMDAgKzAxMDAKK0BAIC0xMiwxMiArMTIsMTkgQEAKKyAKKyAjaW5jbHVkZSA8b3BlbnNzbC9j cnlwdG8uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworICNpbmNsdWRlIDxvcGVu c3NsL29wZW5zc2x2Lmg+CisgCisgY29uc3QgY2hhciBTSEEyNTZfdmVyc2lvbltdPSJTSEEtMjU2 IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCisgaW50IFNIQTIyNF9Jbml0IChTSEEyNTZfQ1RY ICpjKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7 CisrI2VuZGlmCisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5oWzBdPTB4YzEwNTll ZDhVTDsJYy0+aFsxXT0weDM2N2NkNTA3VUw7CisgCWMtPmhbMl09MHgzMDcwZGQxN1VMOwljLT5o WzNdPTB4ZjcwZTU5MzlVTDsKK0BAIC0yOSw2ICszNiw5IEBAIGludCBTSEEyMjRfSW5pdCAoU0hB MjU2X0NUWCAqYykKKyAKKyBpbnQgU0hBMjU2X0luaXQgKFNIQTI1Nl9DVFggKmMpCisgCXsKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJ bWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPmhbMF09MHg2YTA5ZTY2N1VMOwljLT5oWzFd PTB4YmI2N2FlODVVTDsKKyAJYy0+aFsyXT0weDNjNmVmMzcyVUw7CWMtPmhbM109MHhhNTRmZjUz YVVMOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYTUxMi5jLmZp cHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYTUxMi5jCistLS0gb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMJMjAwOC0xMi0yOSAxMzozNTo0OC4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhNTEy LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01LDYgKzUsMTAgQEAK KyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorICAqLworICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+ CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5k aWYKKysKKyAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xf Tk9fU0hBNTEyKQorIC8qCisgICogSU1QTEVNRU5UQVRJT04gTk9URVMuCitAQCAtNjEsNiArNjUs OSBAQCBjb25zdCBjaGFyIFNIQTUxMl92ZXJzaW9uW109IlNIQS01MTIiIE9QCisgCisgaW50IFNI QTM4NF9Jbml0IChTSEE1MTJfQ1RYICpjKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgI2lmIGRlZmluZWQoU0hBNTEyX0FTTSkg JiYgKGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FybSkpCisgCS8qIG1haW50YWluIGR3 b3JkIG9yZGVyIHJlcXVpcmVkIGJ5IGFzc2VtYmxlciBtb2R1bGUgKi8KKyAJdW5zaWduZWQgaW50 ICpoID0gKHVuc2lnbmVkIGludCAqKWMtPmg7CitAQCAtOTAsNiArOTcsOSBAQCBpbnQgU0hBMzg0 X0luaXQgKFNIQTUxMl9DVFggKmMpCisgCisgaW50IFNIQTUxMl9Jbml0IChTSEE1MTJfQ1RYICpj KQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Cisr I2VuZGlmCisgI2lmIGRlZmluZWQoU0hBNTEyX0FTTSkgJiYgKGRlZmluZWQoX19hcm1fXykgfHwg ZGVmaW5lZChfX2FybSkpCisgCS8qIG1haW50YWluIGR3b3JkIG9yZGVyIHJlcXVpcmVkIGJ5IGFz c2VtYmxlciBtb2R1bGUgKi8KKyAJdW5zaWduZWQgaW50ICpoID0gKHVuc2lnbmVkIGludCAqKWMt Pmg7CitAQCAtMzgwLDcgKzM5MCw3IEBAIHN0YXRpYyBjb25zdCBTSEFfTE9ORzY0IEs1MTJbODBd ID0geworIAkJCQkoKFNIQV9MT05HNjQpaGkpPDwzMnxsbzsJfSkKKyAjICAgZW5kaWYKKyAjICBl bGlmIChkZWZpbmVkKF9BUkNIX1BQQykgJiYgZGVmaW5lZChfXzY0QklUX18pKSB8fCBkZWZpbmVk KF9BUkNIX1BQQzY0KQorLSMgICBkZWZpbmUgUk9UUihhLG4pCSh7IHVuc2lnbmVkIGxvbmcgcmV0 OwkJXAorKyMgICBkZWZpbmUgUk9UUihhLG4pCSh7IFNIQV9MT05HNjQgcmV0OwkJXAorIAkJCQlh c20gKCJyb3RyZGkgJTAsJTEsJTIiCVwKKyAJCQkJOiAiPXIiKHJldCkJCVwKKyAJCQkJOiAiciIo YSksIksiKG4pKTsgcmV0Owl9KQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9NYWtlZmls ZS5vcmcuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L01ha2VmaWxlLm9yZworLS0tIG9wZW5zc2wt MS4wLjAtYmV0YTQvTWFrZWZpbGUub3JnLmZpcHMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAw MDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L01ha2VmaWxlLm9yZwkyMDA5LTExLTEy IDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTExMCw2ICsxMTAsOSBAQCBMSUJLUkI1PQor IFpMSUJfSU5DTFVERT0KKyBMSUJaTElCPQorIAorKyMgTm9uLWVtcHR5IGlmIEZJUFMgZW5hYmxl ZAorK0ZJUFM9CisrCisgRElSUz0gICBjcnlwdG8gc3NsIGVuZ2luZXMgYXBwcyB0ZXN0IHRvb2xz CisgRU5HRElSUz0gY2Nnb3N0CisgU0hMSUJESVJTPSBjcnlwdG8gc3NsCitAQCAtMTIyLDcgKzEy NSw3IEBAIFNESVJTPSAgXAorIAlibiBlYyByc2EgZHNhIGVjZHNhIGRoIGVjZGggZHNvIGVuZ2lu ZSBcCisgCWJ1ZmZlciBiaW8gc3RhY2sgbGhhc2ggcmFuZCBlcnIgXAorIAlldnAgYXNuMSBwZW0g eDUwOSB4NTA5djMgY29uZiB0eHRfZGIgcGtjczcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1IFwK Ky0JY21zIHBxdWV1ZSB0cyBqcGFrZSBzdG9yZQorKwljbXMgcHF1ZXVlIHRzIGpwYWtlIHN0b3Jl IGZpcHMKKyAjIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBhYm92ZSBsaXN0IGlzIGFkanVzdGVkIGJ5 IC4vQ29uZmlndXJlCisgIyBhY2NvcmRpbmcgdG8gbm8teHh4IGFyZ3VtZW50cy4uLgorIAorQEAg LTIwNiw2ICsyMDksNyBAQCBCVUlMREVOVj0JUExBVEZPUk09JyQoUExBVEZPUk0pJyBQUk9DRVNT CisgCQlSTUQxNjBfQVNNX09CSj0nJChSTUQxNjBfQVNNX09CSiknCQlcCisgCQlXUF9BU01fT0JK PSckKFdQX0FTTV9PQkopJwkJCVwKKyAJCVBFUkxBU01fU0NIRU1FPSckKFBFUkxBU01fU0NIRU1F KScJCVwKKysJCUZJUFM9IiQke0ZJUFM6LSQoRklQUyl9IglcCisgCQlUSElTPSQke1RISVM6LSRA fSBNQUtFRklMRT1NYWtlZmlsZSBNQUtFT1ZFUlJJREVTPQorICMgTUFLRU9WRVJSSURFUz0gZWZm ZWN0aXZlbHkgImVxdWFsaXplcyIgR05VLWlzaCBhbmQgU3lzVi1pc2ggbWFrZSBmbGF2b3JzLAor ICMgd2hpY2ggaW4gdHVybiBlbGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0 bWVudCB3aXRoIC1lLgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsX2NpcGgu Yy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3NzbF9jaXBoLmMKKy0tLSBvcGVuc3NsLTEu MC4wLWJldGE0L3NzbC9zc2xfY2lwaC5jLmZpcHMJMjAwOS0wOS0xMyAwMToxODowOS4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2xfY2lwaC5jCTIwMDktMTEt MTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNzI3LDYgKzcyNyw5IEBAIHN0YXRpYyB2 b2lkIHNzbF9jaXBoZXJfY29sbGVjdF9jaXBoZXJzKGMKKyAJCSAgICAhKGMtPmFsZ29yaXRobV9h dXRoICYgZGlzYWJsZWRfYXV0aCkgJiYKKyAJCSAgICAhKGMtPmFsZ29yaXRobV9lbmMgJiBkaXNh YmxlZF9lbmMpICYmCisgCQkgICAgIShjLT5hbGdvcml0aG1fbWFjICYgZGlzYWJsZWRfbWFjKSAm JgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQkoIUZJUFNfbW9kZSgpIHx8IChjLT5hbGdvX3N0 cmVuZ3RoICYgU1NMX0ZJUFMpKSAmJgorKyNlbmRpZgorIAkJICAgICEoYy0+YWxnb3JpdGhtX3Nz bCAmIGRpc2FibGVkX3NzbCkpCisgCQkJeworIAkJCWNvX2xpc3RbY29fbGlzdF9udW1dLmNpcGhl ciA9IGM7CitAQCAtMTQyMyw3ICsxNDI2LDExIEBAIFNUQUNLX09GKFNTTF9DSVBIRVIpICpzc2xf Y3JlYXRlX2NpcGhlcl8KKyAJICovCisgCWZvciAoY3VyciA9IGhlYWQ7IGN1cnIgIT0gTlVMTDsg Y3VyciA9IGN1cnItPm5leHQpCisgCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYgKGN1 cnItPmFjdGl2ZSAmJiAoIUZJUFNfbW9kZSgpIHx8IGN1cnItPmNpcGhlci0+YWxnb19zdHJlbmd0 aCAmIFNTTF9GSVBTKSkKKysjZWxzZQorIAkJaWYgKGN1cnItPmFjdGl2ZSkKKysjZW5kaWYKKyAJ CQl7CisgCQkJc2tfU1NMX0NJUEhFUl9wdXNoKGNpcGhlcnN0YWNrLCBjdXJyLT5jaXBoZXIpOwor ICNpZmRlZiBDSVBIRVJfREVCVUcKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3Nz bF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3NzbF9saWIuYworLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTQvc3NsL3NzbF9saWIuYy5maXBzCTIwMDktMTAtMTYgMTU6NDE6NTIuMDAw MDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsX2xpYi5jCTIwMDkt MTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTQ3MSw2ICsxNDcxLDE0IEBAIFNT TF9DVFggKlNTTF9DVFhfbmV3KGNvbnN0IFNTTF9NRVRIT0QgKm0KKyAJCXJldHVybihOVUxMKTsK KyAJCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAobWV0 aC0+dmVyc2lvbiA8IFRMUzFfVkVSU0lPTikpCQorKwkJeworKwkJU1NMZXJyKFNTTF9GX1NTTF9D VFhfTkVXLCBTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisrCQlyZXR1cm4g TlVMTDsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKFNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JF X0NUWF9pZHgoKSA8IDApCisgCQl7CisgCQlTU0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsU1NMX1Jf WDUwOV9WRVJJRklDQVRJT05fU0VUVVBfUFJPQkxFTVMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNC9zc2wvc3NsdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsdGVz dC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsdGVzdC5jLmZpcHMJMjAwOS0xMS0x MiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9z c2x0ZXN0LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNjUsNiAr MjY1LDkgQEAgc3RhdGljIHZvaWQgc3ZfdXNhZ2Uodm9pZCkKKyAJeworIAlmcHJpbnRmKHN0ZGVy ciwidXNhZ2U6IHNzbHRlc3QgW2FyZ3MgLi4uXVxuIik7CisgCWZwcmludGYoc3RkZXJyLCJcbiIp OworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJZnByaW50ZihzdGRlcnIsIi1GICAgICAgICAgICAg IC0gcnVuIHRlc3QgaW4gRklQUyBtb2RlXG4iKTsKKysjZW5kaWYKKyAJZnByaW50ZihzdGRlcnIs IiAtc2VydmVyX2F1dGggIC0gY2hlY2sgc2VydmVyIGNlcnRpZmljYXRlXG4iKTsKKyAJZnByaW50 ZihzdGRlcnIsIiAtY2xpZW50X2F1dGggIC0gZG8gY2xpZW50IGF1dGhlbnRpY2F0aW9uXG4iKTsK KyAJZnByaW50ZihzdGRlcnIsIiAtcHJveHkgICAgICAgIC0gYWxsb3cgcHJveHkgY2VydGlmaWNh dGVzXG4iKTsKK0BAIC00ODQsNiArNDg3LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKKyAjZW5kaWYKKyAJU1RBQ0tfT0YoU1NMX0NPTVApICpzc2xfY29tcF9tZXRob2RzID0g TlVMTDsKKyAJaW50IHRlc3RfY2lwaGVybGlzdCA9IDA7CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwlpbnQgZmlwc19tb2RlPTA7CisrI2VuZGlmCisgCisgCXZlcmJvc2UgPSAwOworIAlkZWJ1ZyA9 IDA7CitAQCAtNTE1LDcgKzUyMSwxNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQorIAorIAl3aGlsZSAoYXJnYyA+PSAxKQorIAkJeworLQkJaWYJKHN0cmNtcCgqYXJndiwiLXNl cnZlcl9hdXRoIikgPT0gMCkKKysJCWlmKCFzdHJjbXAoKmFyZ3YsIi1GIikpCisrCQkJeworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQlmaXBzX21vZGU9MTsKKysjZWxzZQorKwkJCWZwcmludGYo c3RkZXJyLCJub3QgY29tcGlsZWQgd2l0aCBGSVBTIHN1cHBvcnQsIHNvIGV4aXR0aW5nIHdpdGhv dXQgcnVubmluZy5cbiIpOworKwkJCUVYSVQoMCk7CisrI2VuZGlmCisrCQkJfQorKwkJZWxzZSBp Zgkoc3RyY21wKCphcmd2LCItc2VydmVyX2F1dGgiKSA9PSAwKQorIAkJCXNlcnZlcl9hdXRoPTE7 CisgCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jbGllbnRfYXV0aCIpID09IDApCisgCQkJY2xp ZW50X2F1dGg9MTsKK0BAIC03MTEsNiArNzI2LDIwIEBAIGJhZDoKKyAJCUVYSVQoMSk7CisgCQl9 CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihmaXBzX21vZGUpCisrCQl7CisrCQlpZigh RklQU19tb2RlX3NldCgxKSkKKysJCQl7CisrCQkJRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3MoKTsK KysJCQlFUlJfcHJpbnRfZXJyb3JzKEJJT19uZXdfZnAoc3RkZXJyLEJJT19OT0NMT1NFKSk7Cisr CQkJRVhJVCgxKTsKKysJCQl9CisrCQllbHNlCisrCQkJZnByaW50ZihzdGRlcnIsIioqKiBJTiBG SVBTIE1PREUgKioqXG4iKTsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKHByaW50X3RpbWUpCisg CQl7CisgCQlpZiAoIWJpb19wYWlyKQorQEAgLTIxNTMsMTIgKzIxODIsMTIgQEAgc3RhdGljIGlu dCBNU19DQUxMQkFDSyBhcHBfdmVyaWZ5X2NhbGxiYQorIAkJfQorIAorICNpZm5kZWYgT1BFTlNT TF9OT19YNTA5X1ZFUklGWQorLSMgaWZkZWYgT1BFTlNTTF9GSVBTCisrIyBpZiAwCisgCWlmKHMt PnZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQorIAkJRklQU19hbGxvd19tZDUoMSk7CisgIyBlbmRp ZgorIAlvayA9IFg1MDlfdmVyaWZ5X2NlcnQoY3R4KTsKKy0jIGlmZGVmIE9QRU5TU0xfRklQUwor KyMgaWYgMAorIAlpZihzLT52ZXJzaW9uID09IFRMUzFfVkVSU0lPTikKKyAJCUZJUFNfYWxsb3df bWQ1KDApOworICMgZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MyM19j bG50LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zMjNfY2xudC5jCistLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9zc2wvczIzX2NsbnQuYy5maXBzCTIwMDktMDgtMDUgMTc6Mjk6MTQuMDAw MDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczIzX2NsbnQuYwkyMDA5 LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTMzNSw2ICszMzUsMTQgQEAgc3Rh dGljIGludCBzc2wyM19jbGllbnRfaGVsbG8oU1NMICpzKQorIAkJCXZlcnNpb25fbWFqb3IgPSBU TFMxX1ZFUlNJT05fTUFKT1I7CisgCQkJdmVyc2lvbl9taW5vciA9IFRMUzFfVkVSU0lPTl9NSU5P UjsKKyAJCQl9CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJZWxzZSBpZihGSVBTX21vZGUoKSkK KysJCQl7CisrCQkJU1NMZXJyKFNTTF9GX1NTTDIzX0NMSUVOVF9IRUxMTywKKysJCQkJCVNTTF9S X09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJfQor KyNlbmRpZgorIAkJZWxzZSBpZiAodmVyc2lvbiA9PSBTU0wzX1ZFUlNJT04pCisgCQkJeworIAkJ CXZlcnNpb25fbWFqb3IgPSBTU0wzX1ZFUlNJT05fTUFKT1I7CitAQCAtNjE4LDYgKzYyNiwxNCBA QCBzdGF0aWMgaW50IHNzbDIzX2dldF9zZXJ2ZXJfaGVsbG8oU1NMICpzCisgCQlpZiAoKHBbMl0g PT0gU1NMM19WRVJTSU9OX01JTk9SKSAmJgorIAkJCSEocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19T U0x2MykpCisgCQkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQlpZihGSVBTX21vZGUoKSkK KysJCQkJeworKwkJCQlTU0xlcnIoU1NMX0ZfU1NMMjNfR0VUX1NFUlZFUl9IRUxMTywKKysJCQkJ CVNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCQkJZ290byBlcnI7Cisr CQkJCX0KKysjZW5kaWYKKyAJCQlzLT52ZXJzaW9uPVNTTDNfVkVSU0lPTjsKKyAJCQlzLT5tZXRo b2Q9U1NMdjNfY2xpZW50X21ldGhvZCgpOworIAkJCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTQvc3NsL3MyM19zcnZyLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zMjNfc3J2 ci5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczIzX3NydnIuYy5maXBzCTIwMDgtMDYt MDMgMDQ6NDg6MzQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wv czIzX3NydnIuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTM4Niw2 ICszODYsMTUgQEAgaW50IHNzbDIzX2dldF9jbGllbnRfaGVsbG8oU1NMICpzKQorIAkJCX0KKyAJ CX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAocy0+dmVy c2lvbiA8IFRMUzFfVkVSU0lPTikpCisrCQl7CisrCQlTU0xlcnIoU1NMX0ZfU1NMMjNfR0VUX0NM SUVOVF9IRUxMTywKKysJCQkJCVNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsK KysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorKworIAlpZiAocy0+c3RhdGUgPT0gU1NMMjNf U1RfU1JfQ0xOVF9IRUxMT19CKQorIAkJeworIAkJLyogd2UgaGF2ZSBTU0x2My9UTFN2MSBpbiBh biBTU0x2MiBoZWFkZXIKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX2NsbnQu Yy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX2NsbnQuYworLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTQvc3NsL3MzX2NsbnQuYy5maXBzCTIwMDktMTAtMzAgMTU6MDY6MTguMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfY2xudC5jCTIwMDktMTEtMTIg MTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTU2LDYgKzE1NiwxMCBAQAorICNpbmNsdWRl IDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVk ZSA8b3BlbnNzbC9tZDUuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNlbmRpZgorKworICNpZm5kZWYgT1BFTlNTTF9OT19ESAorICNpbmNsdWRl IDxvcGVuc3NsL2RoLmg+CisgI2VuZGlmCitAQCAtMTUzMCw2ICsxNTM0LDggQEAgaW50IHNzbDNf Z2V0X2tleV9leGNoYW5nZShTU0wgKnMpCisgCQkJcT1tZF9idWY7CisgCQkJZm9yIChudW09Mjsg bnVtID4gMDsgbnVtLS0pCisgCQkJCXsKKysJCQkJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1kX2N0 eCwKKysJCQkJCUVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CisgCQkJCUVWUF9EaWdl c3RJbml0X2V4KCZtZF9jdHgsKG51bSA9PSAyKQorIAkJCQkJP3MtPmN0eC0+bWQ1OnMtPmN0eC0+ c2hhMSwgTlVMTCk7CisgCQkJCUVWUF9EaWdlc3RVcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5jbGll bnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTQvc3NsL3MzX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfZW5jLmMK Ky0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19lbmMuYy5maXBzCTIwMDktMDQtMTYgMTk6 MjI6NTAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfZW5j LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNzAsNiArMTcwLDcg QEAgc3RhdGljIGludCBzc2wzX2dlbmVyYXRlX2tleV9ibG9jayhTU0wgKgorICNlbmRpZgorIAlr PTA7CisgCUVWUF9NRF9DVFhfaW5pdCgmbTUpOworKwlFVlBfTURfQ1RYX3NldF9mbGFncygmbTUs IEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CisgCUVWUF9NRF9DVFhfaW5pdCgmczEp OworIAlmb3IgKGk9MDsgKGludClpPG51bTsgaSs9TUQ1X0RJR0VTVF9MRU5HVEgpCisgCQl7CitA QCAtNjE0LDYgKzYxNSw4IEBAIGludCBzc2wzX2RpZ2VzdF9jYWNoZWRfcmVjb3JkcyhTU0wgKnMp CisgCQlpZiAoKG1hc2sgJiBzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobTIpICYmIG1k KSAKKyAJCQl7CisgCQkJcy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldPUVWUF9NRF9DVFhfY3JlYXRl KCk7CisrCQkJRVZQX01EX0NUWF9zZXRfZmxhZ3Mocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldLAor KwkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworIAkJCUVWUF9EaWdlc3RJbml0 X2V4KHMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXSxtZCxOVUxMKTsKKyAJCQlFVlBfRGlnZXN0VXBk YXRlKHMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXSxoZGF0YSxoZGF0YWxlbik7CisgCQkJfSAKK0BA IC02NzAsNiArNjczLDcgQEAgc3RhdGljIGludCBzc2wzX2hhbmRzaGFrZV9tYWMoU1NMICpzLCBp bgorIAkJcmV0dXJuIDA7CisgCX0JCisgCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKKysJRVZQX01E X0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKyAJ RVZQX01EX0NUWF9jb3B5X2V4KCZjdHgsZCk7CisgCW49RVZQX01EX0NUWF9zaXplKCZjdHgpOwor IAlpZiAobiA8IDApCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19zcnZyLmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19zcnZyLmMKKy0tLSBvcGVuc3NsLTEuMC4w LWJldGE0L3NzbC9zM19zcnZyLmMuZmlwcwkyMDA5LTEwLTMwIDE0OjIyOjQ0LjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX3NydnIuYwkyMDA5LTExLTEyIDEy OjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTE2NzksNiArMTY3OSw4IEBAIGludCBzc2wzX3Nl bmRfc2VydmVyX2tleV9leGNoYW5nZShTU0wgKnMKKyAJCQkJaj0wOworIAkJCQlmb3IgKG51bT0y OyBudW0gPiAwOyBudW0tLSkKKyAJCQkJCXsKKysJCQkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZt ZF9jdHgsCisrCQkJCQkJRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKyAJCQkJCUVW UF9EaWdlc3RJbml0X2V4KCZtZF9jdHgsKG51bSA9PSAyKQorIAkJCQkJCT9zLT5jdHgtPm1kNTpz LT5jdHgtPnNoYTEsIE5VTEwpOworIAkJCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmbWRfY3R4LCYocy0+ czMtPmNsaWVudF9yYW5kb21bMF0pLFNTTDNfUkFORE9NX1NJWkUpOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhNC9zc2wvdDFfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90 MV9lbmMuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3QxX2VuYy5jLmZpcHMJMjAwOS0w NC0xOSAyMDowMzoxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3Nz bC90MV9lbmMuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTE2OSw2 ICsxNjksOCBAQCBzdGF0aWMgdm9pZCB0bHMxX1BfaGFzaChjb25zdCBFVlBfTUQgKm1kCisgCisg CUhNQUNfQ1RYX2luaXQoJmN0eCk7CisgCUhNQUNfQ1RYX2luaXQoJmN0eF90bXApOworKwlITUFD X0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKysJ SE1BQ19DVFhfc2V0X2ZsYWdzKCZjdHhfdG1wLCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpOworIAlITUFDX0luaXRfZXgoJmN0eCxzZWMsc2VjX2xlbixtZCwgTlVMTCk7CisgCUhNQUNf SW5pdF9leCgmY3R4X3RtcCxzZWMsc2VjX2xlbixtZCwgTlVMTCk7CisgCWlmIChzZWVkMSAhPSBO VUxMKSBITUFDX1VwZGF0ZSgmY3R4LHNlZWQxLHNlZWQxX2xlbik7CgpkaWZmIC0tZ2l0IGEvb3Bl bnNzbC0xLjAuMC1iZXRhNC1yZWRoYXQucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE0LXJlZGhh dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDYxYmY4Ci0tLSAv ZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1yZWRoYXQucGF0Y2gKQEAgLTAsMCAr MSw1OSBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9Db25maWd1cmUucmVkaGF0IG9w ZW5zc2wtMS4wLjAtYmV0YTQvQ29uZmlndXJlCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9Db25m aWd1cmUucmVkaGF0CTIwMDktMTEtMDkgMTU6MTE6MTMuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMC1iZXRhNC9Db25maWd1cmUJMjAwOS0xMS0xMiAxMjoxNToyNy4wMDAwMDAwMDAg KzAxMDAKK0BAIC0zMzYsMzIgKzMzNiwzMiBAQCBteSAldGFibGU9KAorICMjIyMKKyAjICotZ2Vu ZXJpYyogaXMgZW5kaWFuLW5ldXRyYWwgdGFyZ2V0LCBidXQgLi9jb25maWcgaXMgZnJlZSB0bwor ICMgdGhyb3cgaW4gLURbQkxdX0VORElBTiwgd2hpY2hldmVyIGFwcHJvcHJpYXRlLi4uCistImxp bnV4LWdlbmVyaWMzMiIsImdjYzotRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdh bGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lO VCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjou c28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCistImxpbnV4LXBwYyIsCSJnY2M6 LURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9O RyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219Omxp bnV4MzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNI TElCX01JTk9SKSIsCisrImxpbnV4LWdlbmVyaWMzMiIsImdjYzotRFRFUk1JTyAtV2FsbCBcJChS UE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9D SFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFy ZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUikiLAorKyJs aW51eC1wcGMiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9GTEFH Uyk6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJ U0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxmY246bGludXgtc2hhcmVkOi1m UElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKKyAjIEl0J3Mg YmVsaWV2ZWQgdGhhdCBtYWpvcml0eSBvZiBBUk0gdG9vbGNoYWlucyBwcmVkZWZpbmUgYXBwcm9w cmlhdGUgLW1hcmNoLgorICMgSWYgeW91IGNvbXBpbGVyIGRvZXMgbm90LCBkbyBjb21wbGVtZW50 IGNvbmZpZyBjb21tYW5kIGxpbmUgd2l0aCBvbmUhCistImxpbnV4LWFybXY0IiwJImdjYzotRFRF Uk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRf Q0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke2FybXY0X2FzbX06ZGxmY246bGludXgt c2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxp bnV4LWFybXY0IiwJImdjYzotRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVF TlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJP TEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09Q VF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUikiLAorICMjIyMgSUEtMzIgdGFyZ2V0cy4u LgorICJsaW51eC1pYTMyLWljYyIsCSJpY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzIgLW5vX2Nw cHJ0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2Nj X29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotS1BJQzo6LnNvLlwkKFNI TElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorLSJsaW51eC1lbGYiLAkiZ2NjOi1ETF9FTkRJ QU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6 Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9h c219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJ Ql9NSU5PUikiLAorKyJsaW51eC1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLVdhbGwg XCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2Nf ZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1m UElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKKyAibGludXgt YW91dCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIg LW1hcmNoPWk0ODYgLVdhbGw6Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7 eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEub3V0IiwKKyAjIyMjCistImxpbnV4LWdlbmVyaWM2 NCIsImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VS X0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7 bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQo U0hMSUJfTUlOT1IpIiwKKy0ibGludXgtcHBjNjQiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRF Uk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJD NF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzY0X2FzbX06bGludXg2 NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNI TElCX01JTk9SKTo6OjY0IiwKKy0ibGludXgtaWE2NCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1J TyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9D SFVOSyBERVNfVU5ST0xMIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1m UElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LWdlbmVy aWM2NCIsImdjYzotRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5U OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVT X1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzpcJChSUE1f T1BUX0ZMQUdTKTpcJChTSExJQl9TT05BTUVWRVIpIiwKKysibGludXgtcHBjNjQiLAkiZ2NjOi1t NjQgLURCX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRS QU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVND MSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJ QzotbTY0IFwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpOjo6NjQiLAor KyJsaW51eC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRf RkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksg REVTX1VOUk9MTCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzpc JChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIsCisgImxpbnV4LWlhNjQt ZWNjIiwiZWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVF TlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQ6JHtpYTY0 X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNI TElCX01JTk9SKSIsCisgImxpbnV4LWlhNjQtaWNjIiwiaWNjOi1ETF9FTkRJQU4gLURURVJNSU8g LU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xP TkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNo YXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorLSJsaW51 eC14ODZfNjQiLAkiZ2NjOi1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGwgLURNRDMy X1JFR19UPWludDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NI VU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFy ZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwK Ky0ibGludXgtczM5MHgiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6 Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVO SyBERVNfSU5UIERFU19VTlJPTEw6JHtzMzkweF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJ QzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAorKyJsaW51 eC14ODZfNjQiLAkiZ2NjOi1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BU X0ZMQUdTKSAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9C SVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRs ZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0IFwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJ Ql9TT05BTUVWRVIpOjo6NjQiLAorKyJsaW51eC1zMzkweCIsCSJnY2M6LW02NCAtREJfRU5ESUFO IC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lY VFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7 czM5MHhfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NCBcJChSUE1fT1BUX0ZMQUdT KTouc28uXCQoU0hMSUJfU09OQU1FVkVSKTo6OjY0IiwKKyAjIyMjIFNQQVJDIExpbnV4IHNldHVw cworICMgUmF5IE1pbGxlciA8cmF5Lm1pbGxlckBjb21wdXRpbmctc2VydmljZXMub3hmb3JkLmFj LnVrPiBoYXMgcGF0aWVudGx5CisgIyBhc3Npc3RlZCB3aXRoIGRlYnVnZ2luZyBvZiBmb2xsb3dp bmcgdHdvIGNvbmZpZ3MuCistImxpbnV4LXNwYXJjdjgiLCJnY2M6LW12OCAtREJfRU5ESUFOIC1E VEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJOX0RJVjJXOjotRF9SRUVO VFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRS OiR7c3BhcmN2OF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01B Sk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1zcGFyY3Y4IiwiZ2NjOi1EQl9FTkRJQU4g LURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUykgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5U OjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3Nw YXJjdjhfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNv LlwkKFNITElCX1NPTkFNRVZFUikiLAorICMgaXQncyBhIHJlYWwgbWVzcyB3aXRoIC1tY3B1PXVs dHJhc3BhcmMgb3B0aW9uIHVuZGVyIExpbnV4LCBidXQKKyAjIC1XYSwtQXY4cGx1cyBzaG91bGQg ZG8gdGhlIHRyaWNrIG5vIG1hdHRlciB3aGF0LgorLSJsaW51eC1zcGFyY3Y5IiwiZ2NjOi1tMzIg LW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9p bnRlciAtV2FsbCAtV2EsLUF2OHBsdXMgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BB UkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtz cGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tMzI6LnNvLlwkKFNITElCX01B Sk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1zcGFyY3Y5IiwiZ2NjOi1EQl9FTkRJQU4g LURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUykgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5U OlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBC Rl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRf RkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKKyAjIEdDQyAzLjEgaXMgYSByZXF1aXJl bWVudAorLSJsaW51eDY0LXNwYXJjdjkiLCJnY2M6LW02NCAtbWNwdT11bHRyYXNwYXJjIC1EQl9F TkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJB TlQ6VUxUUkFTUEFSQzotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERF U19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxp bnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1Ip Ojo6NjQiLAorKyJsaW51eDY0LXNwYXJjdjkiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAtV2Fs bCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9O RyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xM IEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09Q VF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUik6Ojo2NCIsCisgIyMjIyBBbHBoYSBMaW51 eCB3aXRoIEdOVSBDIGFuZCBDb21wYXEgQyBzZXR1cHMKKyAjIFNwZWNpYWwgbm90ZXM6CisgIyAt IGxpbnV4LWFscGhhK2J3eC1nY2MgaXMgbWVudCB0byBiZSB1c2VkIGZyb20gLi9jb25maWcgb25s eS4gSWYgeW91CitAQCAtMzc1LDggKzM3NSw4IEBAIG15ICV0YWJsZT0oCisgIworICMJCQkJCTxh cHByb0BmeS5jaGFsbWVycy5zZT4KKyAjCistImxpbnV4LWFscGhhLWdjYyIsImdjYzotTzMgLURM X0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcg UkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51eC1z aGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKy0ibGlu dXgtYWxwaGErYnd4LWdjYyIsImdjYzotTzMgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRS QU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVND MSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5c JChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtYWxwaGEtZ2NjIiwiZ2Nj Oi1ETF9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFO VDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9M TDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1Mp Oi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKKysibGludXgtYWxwaGErYnd4LWdjYyIsImdjYzot RExfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6 Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERF U19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzpcJChSUE1fT1BU X0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIsCisgImxpbnV4LWFscGhhLWNjYyIsImNj YzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJB TlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJ U0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwKKyAibGludXgtYWxwaGErYnd4LWNjYyIsImNj YzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJB TlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19Q VFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwKKyAKCmRpZmYgLS1naXQgYS9v cGVuc3NsLTEuMC4wLWJldGE0LXJlbmVnLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1yZW5l Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmUyMDZkCi0tLSAv ZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1yZW5lZy5wYXRjaApAQCAtMCwwICsx LDIzNyBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBzL3NfY2IuYy5yZW5lZyBv cGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19jYi5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9h cHBzL3NfY2IuYy5yZW5lZwkyMDA5LTEwLTE1IDIwOjQ4OjQ3LjAwMDAwMDAwMCArMDIwMAorKysr IG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX2NiLmMJMjAwOS0xMS0xMiAxNTowMjozMC4wMDAw MDAwMDAgKzAxMDAKK0BAIC02NjksNiArNjY5LDEwIEBAIHZvaWQgTVNfQ0FMTEJBQ0sgdGxzZXh0 X2NiKFNTTCAqcywgaW50IGMKKyAJCWV4dG5hbWUgPSAic2VydmVyIHRpY2tldCI7CisgCQlicmVh azsKKyAKKysJCWNhc2UgVExTRVhUX1RZUEVfcmVuZWdvdGlhdGU6CisrCQlleHRuYW1lID0gInJl bmVnb3RpYXRlIjsKKysJCWJyZWFrOworKworICNpZmRlZiBUTFNFWFRfVFlQRV9vcGFxdWVfcHJm X2lucHV0CisgCQljYXNlIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQ6CisgCQlleHRuYW1l ID0gIm9wYXF1ZSBQUkYgaW5wdXQiOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBz L3NfY2xpZW50LmMucmVuZWcgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBzL3NfY2xpZW50LmMKKy0t LSBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19jbGllbnQuYy5yZW5lZwkyMDA5LTExLTEyIDE0 OjU3OjQ4LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX2Ns aWVudC5jCTIwMDktMTEtMTIgMTU6MDE6NDguMDAwMDAwMDAwICswMTAwCitAQCAtMzQzLDYgKzM0 Myw3IEBAIHN0YXRpYyB2b2lkIHNjX3VzYWdlKHZvaWQpCisgCUJJT19wcmludGYoYmlvX2Vyciwi IC1zdGF0dXMgICAgICAgICAgIC0gcmVxdWVzdCBjZXJ0aWZpY2F0ZSBzdGF0dXMgZnJvbSBzZXJ2 ZXJcbiIpOworIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtbm9fdGlja2V0ICAgICAgICAtIGRpc2Fi bGUgdXNlIG9mIFJGQzQ1MDdiaXMgc2Vzc2lvbiB0aWNrZXRzXG4iKTsKKyAjZW5kaWYKKysJQklP X3ByaW50ZihiaW9fZXJyLCIgLWxlZ2FjeV9yZW5lZ290aWF0aW9uIC0gZW5hYmxlIHVzZSBvZiBs ZWdhY3kgcmVuZWdvdGlhdGlvbiAoZGFuZ2Vyb3VzKVxuIik7CisgCX0KKyAKKyAjaWZuZGVmIE9Q RU5TU0xfTk9fVExTRVhUCitAQCAtNjU3LDYgKzY1OCw4IEBAIGludCBNQUlOKGludCBhcmdjLCBj aGFyICoqYXJndikKKyAjZW5kaWYKKyAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXNlcnZlcnBy ZWYiKSA9PSAwKQorIAkJCW9mZnw9U1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRTsKKysJ CWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWxlZ2FjeV9yZW5lZ290aWF0aW9uIikgPT0gMCkKKysJ CQlvZmZ8PVNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT047CisgCQllbHNl IGlmCShzdHJjbXAoKmFyZ3YsIi1jaXBoZXIiKSA9PSAwKQorIAkJCXsKKyAJCQlpZiAoLS1hcmdj IDwgMSkgZ290byBiYWQ7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19zZXJ2 ZXIuYy5yZW5lZyBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19zZXJ2ZXIuYworLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTQvYXBwcy9zX3NlcnZlci5jLnJlbmVnCTIwMDktMTEtMTIgMTQ6NTc6NDgu MDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBzL3Nfc2VydmVyLmMJ MjAwOS0xMS0xMiAxNTowMTo0OC4wMDAwMDAwMDAgKzAxMDAKK0BAIC00OTEsNiArNDkxLDcgQEAg c3RhdGljIHZvaWQgc3ZfdXNhZ2Uodm9pZCkKKyAJQklPX3ByaW50ZihiaW9fZXJyLCIgICAgICAg ICAgICAgICAgIG5vdCBzcGVjaWZpZWQgKGRlZmF1bHQgaXMgJXMpXG4iLFRFU1RfQ0VSVDIpOwor IAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtdGxzZXh0ZGVidWcgIC0gaGV4IGR1bXAgb2YgYWxsIFRM UyBleHRlbnNpb25zIHJlY2VpdmVkXG4iKTsKKyAJQklPX3ByaW50ZihiaW9fZXJyLCIgLW5vX3Rp Y2tldCAgICAtIGRpc2FibGUgdXNlIG9mIFJGQzQ1MDdiaXMgc2Vzc2lvbiB0aWNrZXRzXG4iKTsK KysJQklPX3ByaW50ZihiaW9fZXJyLCIgLWxlZ2FjeV9yZW5lZ290aWF0aW9uIC0gZW5hYmxlIHVz ZSBvZiBsZWdhY3kgcmVuZWdvdGlhdGlvbiAoZGFuZ2Vyb3VzKVxuIik7CisgI2VuZGlmCisgCX0K KyAKK0BAIC0xMDEzLDYgKzEwMTQsOCBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqYXJndltd KQorIAkJCXZlcmlmeV9yZXR1cm5fZXJyb3IgPSAxOworIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2 LCItc2VydmVycHJlZiIpID09IDApCisgCQkJeyBvZmZ8PVNTTF9PUF9DSVBIRVJfU0VSVkVSX1BS RUZFUkVOQ0U7IH0KKysJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWxlZ2FjeV9yZW5lZ290aWF0 aW9uIikgPT0gMCkKKysJCQlvZmZ8PVNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJ QVRJT047CisgCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jaXBoZXIiKSA9PSAwKQorIAkJCXsK KyAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE0L3NzbC90bHMxLmgucmVuZWcgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdGxzMS5oCistLS0g b3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdGxzMS5oLnJlbmVnCTIwMDktMTEtMTIgMTQ6NTc6NDcu MDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdGxzMS5oCTIwMDkt MTEtMTIgMTU6MDI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMjAxLDYgKzIwMSw5IEBAIGV4dGVy biAiQyIgeworICMgZGVmaW5lIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQJCT8/ICovCisg I2VuZGlmCisgCisrLyogVGVtcG9yYXJ5IGV4dGVuc2lvbiB0eXBlICovCisrI2RlZmluZSBUTFNF WFRfVFlQRV9yZW5lZ290aWF0ZSAgICAgICAgICAgICAgICAgMHhmZjAxCisrCisgLyogTmFtZVR5 cGUgdmFsdWUgZnJvbSBSRkMgMzU0NiAqLworICNkZWZpbmUgVExTRVhUX05BTUVUWVBFX2hvc3Rf bmFtZSAwCisgLyogc3RhdHVzIHJlcXVlc3QgdmFsdWUgZnJvbSBSRkMgMzU0NiAqLworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdDFfbGliLmMucmVuZWcgb3BlbnNzbC0xLjAuMC1i ZXRhNC9zc2wvdDFfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90MV9saWIuYy5y ZW5lZwkyMDA5LTExLTA4IDE1OjM2OjMyLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjAtYmV0YTQvc3NsL3QxX2xpYi5jCTIwMDktMTEtMTIgMTU6MDI6MzAuMDAwMDAwMDAwICswMTAw CitAQCAtMzE1LDYgKzMxNSwzMCBAQCB1bnNpZ25lZCBjaGFyICpzc2xfYWRkX2NsaWVudGhlbGxv X3Rsc2V4CisgCQlyZXQrPXNpemVfc3RyOworIAkJfQorIAorKyAgICAgICAgLyogQWRkIHRoZSBy ZW5lZ290aWF0aW9uIG9wdGlvbjogVE9ET0VLUiBzd2l0Y2ggKi8KKysgICAgICAgIHsKKysgICAg ICAgICAgaW50IGVsOworKyAgICAgICAgICAKKysgICAgICAgICAgaWYoIXNzbF9hZGRfY2xpZW50 aGVsbG9fcmVuZWdvdGlhdGVfZXh0KHMsIDAsICZlbCwgMCkpCisrICAgICAgICAgICAgICB7Cisr ICAgICAgICAgICAgICBTU0xlcnIoU1NMX0ZfU1NMX0FERF9DTElFTlRIRUxMT19UTFNFWFQsIEVS Ul9SX0lOVEVSTkFMX0VSUk9SKTsKKysgICAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAg ICAgICAgICAgfQorKworKyAgICAgICAgICBpZigobGltaXQgLSBwIC0gNCAtIGVsKSA8IDApIHJl dHVybiBOVUxMOworKyAgICAgICAgICAKKysgICAgICAgICAgczJuKFRMU0VYVF9UWVBFX3JlbmVn b3RpYXRlLHJldCk7CisrICAgICAgICAgIHMybihlbCxyZXQpOworKworKyAgICAgICAgICBpZigh c3NsX2FkZF9jbGllbnRoZWxsb19yZW5lZ290aWF0ZV9leHQocywgcmV0LCAmZWwsIGVsKSkKKysg ICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIFNTTGVycihTU0xfRl9TU0xfQUREX0NMSUVO VEhFTExPX1RMU0VYVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOworKyAgICAgICAgICAgICAgcmV0 dXJuIE5VTEw7CisrICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgIHJldCArPSBlbDsKKysg ICAgICAgIH0KKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRUMKKyAJaWYgKHMtPnRsc2V4dF9lY3Bv aW50Zm9ybWF0bGlzdCAhPSBOVUxMKQorIAkJeworQEAgLTQ5MCw2ICs1MTQsMzEgQEAgdW5zaWdu ZWQgY2hhciAqc3NsX2FkZF9zZXJ2ZXJoZWxsb190bHNleAorIAkJczJuKFRMU0VYVF9UWVBFX3Nl cnZlcl9uYW1lLHJldCk7CisgCQlzMm4oMCxyZXQpOworIAkJfQorKworKyAgICAgICAgaWYocy0+ czMtPnNlbmRfY29ubmVjdGlvbl9iaW5kaW5nKQorKyAgICAgICAgeworKyAgICAgICAgICBpbnQg ZWw7CisrICAgICAgICAgIAorKyAgICAgICAgICBpZighc3NsX2FkZF9zZXJ2ZXJoZWxsb19yZW5l Z290aWF0ZV9leHQocywgMCwgJmVsLCAwKSkKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAg ICAgIFNTTGVycihTU0xfRl9TU0xfQUREX1NFUlZFUkhFTExPX1RMU0VYVCwgRVJSX1JfSU5URVJO QUxfRVJST1IpOworKyAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICB9 CisrCisrICAgICAgICAgIGlmKChsaW1pdCAtIHAgLSA0IC0gZWwpIDwgMCkgcmV0dXJuIE5VTEw7 CisrICAgICAgICAgIAorKyAgICAgICAgICBzMm4oVExTRVhUX1RZUEVfcmVuZWdvdGlhdGUscmV0 KTsKKysgICAgICAgICAgczJuKGVsLHJldCk7CisrCisrICAgICAgICAgIGlmKCFzc2xfYWRkX3Nl cnZlcmhlbGxvX3JlbmVnb3RpYXRlX2V4dChzLCByZXQsICZlbCwgZWwpKQorKyAgICAgICAgICAg ICAgeworKyAgICAgICAgICAgICAgU1NMZXJyKFNTTF9GX1NTTF9BRERfU0VSVkVSSEVMTE9fVExT RVhULCBFUlJfUl9JTlRFUk5BTF9FUlJPUik7CisrICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK KysgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgcmV0ICs9IGVsOworKyAgICAgICAgfQor KworICNpZm5kZWYgT1BFTlNTTF9OT19FQworIAlpZiAocy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRs aXN0ICE9IE5VTEwpCisgCQl7CitAQCAtNTc0LDExICs2MjMsMjMgQEAgaW50IHNzbF9wYXJzZV9j bGllbnRoZWxsb190bHNleHQoU1NMICpzLAorIAl1bnNpZ25lZCBzaG9ydCBzaXplOworIAl1bnNp Z25lZCBzaG9ydCBsZW47CisgCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSAqcDsKKysJaW50IHJlbmVn b3RpYXRlX3NlZW4gPSAwOworKworIAlzLT5zZXJ2ZXJuYW1lX2RvbmUgPSAwOworIAlzLT50bHNl eHRfc3RhdHVzX3R5cGUgPSAtMTsKKysJcy0+czMtPnNlbmRfY29ubmVjdGlvbl9iaW5kaW5nID0g MDsKKyAKKyAJaWYgKGRhdGEgPj0gKGQrbi0yKSkKKysJCXsKKysJCWlmIChzLT5uZXdfc2Vzc2lv bgorKwkJCSYmICEocy0+Y3R4LT5vcHRpb25zICYgU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lf UkVORUdPVElBVElPTikpCisrCQkJeworKwkJCS8qIFdlIHNob3VsZCBhbHdheXMgc2VlIG9uZSBl eHRlbnNpb246IHRoZSByZW5lZ290aWF0ZSBleHRlbnNpb24gKi8KKysJCQkqYWwgPSBTU0xfQURf SUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMgdGhlIHJpZ2h0IGFsZXJ0PyAqLworKwkJCXJl dHVybiAwOworKwkJCX0KKyAJCXJldHVybiAxOworKwkJfQorIAluMnMoZGF0YSxsZW4pOworIAor IAlpZiAoZGF0YSA+IChkK24tbGVuKSkgCitAQCAtNzkwLDYgKzg1MSwxMiBAQCBpbnQgc3NsX3Bh cnNlX2NsaWVudGhlbGxvX3Rsc2V4dChTU0wgKnMsCisgCQkJCXJldHVybiAwOworIAkJCQl9Cisg CQkJfQorKwkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9yZW5lZ290aWF0ZSkKKysJCQl7 CisrCQkJaWYoIXNzbF9wYXJzZV9jbGllbnRoZWxsb19yZW5lZ290aWF0ZV9leHQocywgZGF0YSwg c2l6ZSwgYWwpKQorKwkJCQlyZXR1cm4gMDsKKysJCQlyZW5lZ290aWF0ZV9zZWVuID0gMTsKKysJ CQl9CisgCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX3N0YXR1c19yZXF1ZXN0CisgCQkJ CQkJJiYgcy0+Y3R4LT50bHNleHRfc3RhdHVzX2NiKQorIAkJCXsKK0BAIC04OTQsNiArOTYxLDE0 IEBAIGludCBzc2xfcGFyc2VfY2xpZW50aGVsbG9fdGxzZXh0KFNTTCAqcywKKyAJCS8qIHNlc3Np b24gdGlja2V0IHByb2Nlc3NlZCBlYXJsaWVyICovCisgCQlkYXRhKz1zaXplOworIAkJfQorKyAg CisrIAlpZiAocy0+bmV3X3Nlc3Npb24gJiYgIXJlbmVnb3RpYXRlX3NlZW4KKysgCQkmJiAhKHMt PmN0eC0+b3B0aW9ucyAmIFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT04p KQorKyAJCXsKKysgCQkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMg dGhlIHJpZ2h0IGFsZXJ0PyAqLworKyAJCXJldHVybiAwOworKyAJCX0KKysgCisgCQkJCQorIAkq cCA9IGRhdGE7CisgCXJldHVybiAxOworQEAgLTkwNSwxMSArOTgwLDIyIEBAIGludCBzc2xfcGFy c2Vfc2VydmVyaGVsbG9fdGxzZXh0KFNTTCAqcywKKyAJdW5zaWduZWQgc2hvcnQgc2l6ZTsKKyAJ dW5zaWduZWQgc2hvcnQgbGVuOyAgCisgCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSAqcDsKKy0KKyAJ aW50IHRsc2V4dF9zZXJ2ZXJuYW1lID0gMDsKKysJaW50IHJlbmVnb3RpYXRlX3NlZW4gPSAwOwor IAorIAlpZiAoZGF0YSA+PSAoZCtuLTIpKQorKwkJeworKwkJLyogQmVjYXVzZSB0aGUgY2xpZW50 IGRvZXMgbm90IHNlZSBhbnkgcmVuZWdvdGlhdGlvbiBkdXJpbmcgYW4KKysJCSAgIGF0dGFjaywg d2UgbXVzdCBlbmZvcmNlIHRoaXMgb24gYWxsIHNlcnZlciBoZWxsb3MsIGV2ZW4gdGhlCisrCQkg ICBmaXJzdCAqLworKwkJaWYgKCEocy0+Y3R4LT5vcHRpb25zICYgU1NMX09QX0FMTE9XX1VOU0FG RV9MRUdBQ1lfUkVORUdPVElBVElPTikpCisrCQkJeworKwkJCS8qIFdlIHNob3VsZCBhbHdheXMg c2VlIG9uZSBleHRlbnNpb246IHRoZSByZW5lZ290aWF0ZSBleHRlbnNpb24gKi8KKysJCQkqYWwg PSBTU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMgdGhlIHJpZ2h0IGFsZXJ0PyAq LworKwkJCXJldHVybiAwOworKwkJCX0KKyAJCXJldHVybiAxOworKwkJfQorIAorIAluMnMoZGF0 YSxsZW4pOworIAorQEAgLTEwMjUsNyArMTExMSwxMiBAQCBpbnQgc3NsX3BhcnNlX3NlcnZlcmhl bGxvX3Rsc2V4dChTU0wgKnMsCisgCQkJLyogU2V0IGZsYWcgdG8gZXhwZWN0IENlcnRpZmljYXRl U3RhdHVzIG1lc3NhZ2UgKi8KKyAJCQlzLT50bHNleHRfc3RhdHVzX2V4cGVjdGVkID0gMTsKKyAJ CQl9CistCisrCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX3JlbmVnb3RpYXRlKQorKwkJ CXsKKysJCQlpZighc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3JlbmVnb3RpYXRlX2V4dChzLCBkYXRh LCBzaXplLCBhbCkpCisrCQkJCXJldHVybiAwOworKwkJCXJlbmVnb3RpYXRlX3NlZW4gPSAxOwor KwkJCX0KKyAJCWRhdGErPXNpemU7CQkKKyAJCX0KKyAKK0BAIC0xMDM1LDYgKzExMjYsMTMgQEAg aW50IHNzbF9wYXJzZV9zZXJ2ZXJoZWxsb190bHNleHQoU1NMICpzLAorIAkJcmV0dXJuIDA7Cisg CQl9CisgCisrCWlmICghcmVuZWdvdGlhdGVfc2VlbgorKwkJJiYgIShzLT5jdHgtPm9wdGlvbnMg JiBTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OKSkKKysJCXsKKysJCSph bCA9IFNTTF9BRF9JTExFR0FMX1BBUkFNRVRFUjsgLyogaXMgdGhpcyB0aGUgcmlnaHQgYWxlcnQ/ ICovCisrCQlyZXR1cm4gMDsKKysJCX0KKysKKyAJaWYgKCFzLT5oaXQgJiYgdGxzZXh0X3NlcnZl cm5hbWUgPT0gMSkKKyAJCXsKKyAgCQlpZiAocy0+dGxzZXh0X2hvc3RuYW1lKQoKZGlmZiAtLWdp dCBhL29wZW5zc2wuc3BlYyBiL29wZW5zc2wuc3BlYwppbmRleCAxNDEyYzg2Li5jMjg1MTUwIDEw MDY0NAotLS0gYS9vcGVuc3NsLnNwZWMKKysrIGIvb3BlbnNzbC5zcGVjCkBAIC0xMSw3ICsxMSw3 IEBACiAjIDEuMC4wIHNvdmVyc2lvbiA9IDEwCiAlZGVmaW5lIHNvdmVyc2lvbiAxMAogCi0lZGVm aW5lIGJldGEgYmV0YTMKKyVkZWZpbmUgYmV0YSBiZXRhNAogCiAjIE51bWJlciBvZiB0aHJlYWRz IHRvIHNwYXduIHdoZW4gdGVzdGluZyBzb21lIHRocmVhZGluZyBmaXhlcy4KICVkZWZpbmUgdGhy ZWFkX3Rlc3RfdGhyZWFkcyAlez90aHJlYWRzOiV7dGhyZWFkc319JXshP3RocmVhZHM6MX0KQEAg LTIzLDcgKzIzLDcgQEAKIFN1bW1hcnk6IEEgZ2VuZXJhbCBwdXJwb3NlIGNyeXB0b2dyYXBoeSBs aWJyYXJ5IHdpdGggVExTIGltcGxlbWVudGF0aW9uCiBOYW1lOiBvcGVuc3NsCiBWZXJzaW9uOiAx LjAuMAotUmVsZWFzZTogMC4xMC4le2JldGF9JXs/ZGlzdH0KK1JlbGVhc2U6IDAuMTEuJXtiZXRh fSV7P2Rpc3R9CiAjIFdlIHJlbW92ZSBjZXJ0YWluIHBhdGVudGVkIGFsZ29yaXRobXMgZnJvbSB0 aGUgb3BlbnNzbCBzb3VyY2UgdGFyYmFsbAogIyB3aXRoIHRoZSBob2JibGUtb3BlbnNzbCBzY3Jp cHQgd2hpY2ggaXMgaW5jbHVkZWQgYmVsb3cuCiBTb3VyY2U6IG9wZW5zc2wtJXt2ZXJzaW9ufS0l e2JldGF9LXVzYS50YXIuYnoyCkBAIC0zNSw0MSArMzUsMzIgQEAgU291cmNlOTogb3BlbnNzbGNv bmYtbmV3LmgKIFNvdXJjZTEwOiBvcGVuc3NsY29uZi1uZXctd2FybmluZy5oCiBTb3VyY2UxMTog UkVBRE1FLkZJUFMKICMgQnVpbGQgY2hhbmdlcwotUGF0Y2gwOiBvcGVuc3NsLTEuMC4wLWJldGEz LXJlZGhhdC5wYXRjaAorUGF0Y2gwOiBvcGVuc3NsLTEuMC4wLWJldGE0LXJlZGhhdC5wYXRjaAog UGF0Y2gxOiBvcGVuc3NsLTEuMC4wLWJldGEzLWRlZmF1bHRzLnBhdGNoCi1QYXRjaDI6IG9wZW5z c2wtMS4wLjAtYmV0YTMta3JiNS5wYXRjaAogUGF0Y2gzOiBvcGVuc3NsLTEuMC4wLWJldGEzLXNv dmVyc2lvbi5wYXRjaAotUGF0Y2g0OiBvcGVuc3NsLTEuMC4wLWJldGEzLWVuZ2luZXNkaXIucGF0 Y2gKK1BhdGNoNDogb3BlbnNzbC0xLjAuMC1iZXRhNC1lbmdpbmVzZGlyLnBhdGNoCiBQYXRjaDU6 IG9wZW5zc2wtMC45LjhhLW5vLXJwYXRoLnBhdGNoCiBQYXRjaDY6IG9wZW5zc2wtMC45LjhiLXRl c3QtdXNlLWxvY2FsaG9zdC5wYXRjaAogIyBCdWcgZml4ZXMKLVBhdGNoMjE6IG9wZW5zc2wtMC45 LjhiLWFsaWFzaW5nLWJ1Zy5wYXRjaAotUGF0Y2gyMzogb3BlbnNzbC0xLjAuMC1iZXRhMy1kZWZh dWx0LXBhdGhzLnBhdGNoCitQYXRjaDIzOiBvcGVuc3NsLTEuMC4wLWJldGE0LWRlZmF1bHQtcGF0 aHMucGF0Y2gKICMgRnVuY3Rpb25hbGl0eSBjaGFuZ2VzCiBQYXRjaDMyOiBvcGVuc3NsLTAuOS44 Zy1pYTY0LnBhdGNoCi1QYXRjaDMzOiBvcGVuc3NsLTAuOS44ai1jYS1kaXIucGF0Y2gKK1BhdGNo MzM6IG9wZW5zc2wtMS4wLjAtYmV0YTQtY2EtZGlyLnBhdGNoCiBQYXRjaDM0OiBvcGVuc3NsLTAu OS42LXg1MDkucGF0Y2gKIFBhdGNoMzU6IG9wZW5zc2wtMC45LjhqLXZlcnNpb24tYWRkLWVuZ2lu ZXMucGF0Y2gKIFBhdGNoMzg6IG9wZW5zc2wtMS4wLjAtYmV0YTMtY2lwaGVyLWNoYW5nZS5wYXRj aAogUGF0Y2gzOTogb3BlbnNzbC0xLjAuMC1iZXRhMy1pcHY2LWFwcHMucGF0Y2gKLVBhdGNoNDA6 IG9wZW5zc2wtMS4wLjAtYmV0YTMtZmlwcy5wYXRjaAorUGF0Y2g0MDogb3BlbnNzbC0xLjAuMC1i ZXRhNC1maXBzLnBhdGNoCiBQYXRjaDQxOiBvcGVuc3NsLTEuMC4wLWJldGEzLWZpcHNjaGVjay5w YXRjaAogUGF0Y2g0Mzogb3BlbnNzbC0xLjAuMC1iZXRhMy1maXBzbW9kZS5wYXRjaAogUGF0Y2g0 NDogb3BlbnNzbC0xLjAuMC1iZXRhMy1maXBzcm5nLnBhdGNoCiBQYXRjaDQ1OiBvcGVuc3NsLTAu OS44ai1lbnYtbm96bGliLnBhdGNoCiBQYXRjaDQ3OiBvcGVuc3NsLTAuOS44ai1yZWFkbWUtd2Fy bmluZy5wYXRjaAogUGF0Y2g0ODogb3BlbnNzbC0wLjkuOGotYmFkLW1pbWUucGF0Y2gKLVBhdGNo NDk6IG9wZW5zc2wtMC45LjhrLWFsZ28tZG9jLnBhdGNoCi1QYXRjaDUwOiBvcGVuc3NsLTEuMC4w LWJldGEzLWN1cmwucGF0Y2gKLVBhdGNoNTE6IG9wZW5zc2wtMS4wLjAtYmV0YTMtY29uc3QucGF0 Y2gKLVBhdGNoNTI6IG9wZW5zc2wtMS4wLjAtYmV0YTMtZHNzMS5wYXRjaAorUGF0Y2g0OTogb3Bl bnNzbC0xLjAuMC1iZXRhNC1hbGdvLWRvYy5wYXRjaAorUGF0Y2g1MDogb3BlbnNzbC0xLjAuMC1i ZXRhNC1kdGxzMS1hYmkucGF0Y2gKICMgQmFja3BvcnRlZCBmaXhlcyBpbmNsdWRpbmcgc2VjdXJp dHkgZml4ZXMKLVBhdGNoNjA6IG9wZW5zc2wtMS4wLjAtYmV0YTMtbmFtaW5nc3RyLnBhdGNoCi1Q YXRjaDYxOiBvcGVuc3NsLTEuMC4wLWJldGEzLW5hbWluZ2Jsay5wYXRjaAotUGF0Y2g2Mjogb3Bl bnNzbC0xLjAuMC1iZXRhMy1jYW1lbGxpYS1yb3VuZHMucGF0Y2gKLVBhdGNoNjM6IG9wZW5zc2wt MS4wLjAtYmV0YTMtZHRsczEtZml4LnBhdGNoCi1QYXRjaDY0OiBvcGVuc3NsLTEuMC4wLWJldGEz LXNzbC1zZXNzaW9uLnBhdGNoCi1QYXRjaDY1OiBvcGVuc3NsLTEuMC4wLWJldGEzLXNzbC1mcmVl LnBhdGNoCitQYXRjaDYwOiBvcGVuc3NsLTEuMC4wLWJldGE0LXJlbmVnLnBhdGNoCiAKIExpY2Vu c2U6IE9wZW5TU0wKIEdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFyaWVzCkBAIC0xMjQs MTQgKzExNSwxMSBAQCBmcm9tIG90aGVyIGZvcm1hdHMgdG8gdGhlIGZvcm1hdHMgdXNlZCBieSB0 aGUgT3BlblNTTCB0b29sa2l0LgogJXtTT1VSQ0UxfSA+IC9kZXYvbnVsbAogJXBhdGNoMCAtcDEg LWIgLnJlZGhhdAogJXBhdGNoMSAtcDEgLWIgLmRlZmF1bHRzCi0jIEZpeCBsaW5rIGxpbmUgZm9y IGxpYnNzbCAoYnVnICMxMTExNTQpLgotJXBhdGNoMiAtcDEgLWIgLmtyYjUKICVwYXRjaDMgLXAx IC1iIC5zb3ZlcnNpb24KICVwYXRjaDQgLXAxIC1iIC5lbmdpbmVzZGlyCiAlcGF0Y2g1IC1wMSAt YiAubm8tcnBhdGgKICVwYXRjaDYgLXAxIC1iIC51c2UtbG9jYWxob3N0CiAKLSVwYXRjaDIxIC1w MSAtYiAuYWxpYXNpbmctYnVnCiAlcGF0Y2gyMyAtcDEgLWIgLmRlZmF1bHQtcGF0aHMKIAogJXBh dGNoMzIgLXAxIC1iIC5pYTY0CkBAIC0xNDgsMTUgKzEzNiw5IEBAIGZyb20gb3RoZXIgZm9ybWF0 cyB0byB0aGUgZm9ybWF0cyB1c2VkIGJ5IHRoZSBPcGVuU1NMIHRvb2xraXQuCiAlcGF0Y2g0NyAt cDEgLWIgLndhcm5pbmcKICVwYXRjaDQ4IC1wMSAtYiAuYmFkLW1pbWUKICVwYXRjaDQ5IC1wMSAt YiAuYWxnby1kb2MKLSVwYXRjaDUwIC1wMSAtYiAuY3VybAotJXBhdGNoNTEgLXAxIC1iIC5jb25z dAotJXBhdGNoNTIgLXAxIC1iIC5kc3MxCi0lcGF0Y2g2MCAtcDEgLWIgLm5hbWluZ3N0cgotJXBh dGNoNjEgLXAxIC1iIC5uYW1pbmdibGsKLSVwYXRjaDYyIC1wMSAtYiAuY21sbC1yb3VuZHMKLSVw YXRjaDYzIC1wMSAtYiAuZHRsczEtZml4Ci0lcGF0Y2g2NCAtcDEgLWIgLnNzbC1zZXNzaW9uCi0l cGF0Y2g2NSAtcDEgLWIgLnNzbC1mcmVlCislcGF0Y2g1MCAtcDEgLWIgLmR0bHMxLWFiaQorCisl cGF0Y2g2MCAtcDEgLWIgLnJlbmVnCiAKICMgTW9kaWZ5IHRoZSB2YXJpb3VzIHBlcmwgc2NyaXB0 cyB0byByZWZlcmVuY2UgcGVybCBpbiB0aGUgcmlnaHQgbG9jYXRpb24uCiBwZXJsIHV0aWwvcGVy bHBhdGgucGwgYGRpcm5hbWUgJXtfX3Blcmx9YApAQCAtNDA1LDYgKzM4NywxMiBAQCBybSAtcmYg JFJQTV9CVUlMRF9ST09ULyV7X2xpYmRpcn0vZmlwc2NhbmlzdGVyLioKICVwb3N0dW4gLXAgL3Ni aW4vbGRjb25maWcKIAogJWNoYW5nZWxvZworKiBUaHUgTm92IDEyIDIwMDkgVG9tYXMgTXJheiA8 dG1yYXpAcmVkaGF0LmNvbT4gMS4wLjAtMC4xMS5iZXRhNAorLSB1cGRhdGUgdG8gbmV3IHVwc3Ry ZWFtIHZlcnNpb24sIG5vIHNvbmFtZSBidW1wIG5lZWRlZCAKKy0gZml4IENWRS0yMDA5LTM1NTUg LSBub3RlIHRoYXQgdGhlIGZpeCBpcyBieXBhc3NlZCBpZiBTU0xfT1BfQUxMIGlzIHVzZWQKKyAg c28gdGhlIGNvbXBhdGliaWxpdHkgd2l0aCB1bmZpeGVkIGNsaWVudHMgaXMgbm90IGJyb2tlbi4g VGhlCisgIHByb3RvY29sIGV4dGVuc2lvbiBpcyBhbHNvIG5vdCBmaW5hbC4KKwogKiBGcmkgT2N0 IDE2IDIwMDkgVG9tYXMgTXJheiA8dG1yYXpAcmVkaGF0LmNvbT4gMS4wLjAtMC4xMC5iZXRhMwog LSBmaXggdXNlIG9mIGZyZWVkIG1lbW9yeSBpZiBTU0xfQ1RYX2ZyZWUoKSBpcyBjYWxsZWQgYmVm b3JlCiAgIFNTTF9mcmVlKCkgKCM1MjEzNDIpCgpkaWZmIC0tZ2l0IGEvc291cmNlcyBiL3NvdXJj ZXMKaW5kZXggY2NkMjUzMi4uOGEyYzY0OCAxMDA2NDQKLS0tIGEvc291cmNlcworKysgYi9zb3Vy Y2VzCkBAIC0xICsxIEBACi05OTI2ZGNmNzhlNzk3YTEyZDhlM2ZmZDdhMDE4ODI0YiAgb3BlbnNz bC0xLjAuMC1iZXRhMy11c2EudGFyLmJ6MgorMWZjMGU0MWMyMzBkMDY5OGY4MzQ0MTNkZmJhODY0 YWQgIG9wZW5zc2wtMS4wLjAtYmV0YTQtdXNhLnRhci5iejIK