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: Takao Fujiwara To: git-commits@fedoraproject.org Subject: [rpms/ibus] autotool: Fixed a build failure in rawhide. Date: Sun, 31 May 2026 02:05:55 GMT Message-ID: <178019315536.1.7383300131529038485.rpms-ibus-c6718d9385ae@fedoraproject.org> List-ID: X-Git-Repo: rpms/ibus X-Git-Branch: autotool X-Git-Rev: c6718d9385aefc55fa24ca07cfbf501a969fa05f QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvaWJ1cwpCcmFuY2gg OiBhdXRvdG9vbApDb21taXQgOiBjNjcxOGQ5Mzg1YWVmYzU1ZmEyNGNhMDdjZmJmNTAxYTk2OWZh MDVmCkF1dGhvciA6IFRha2FvIEZ1aml3YXJhIDx0ZnVqaXdhckByZWRoYXQuY29tPgpEYXRlICAg OiAyMDEzLTAxLTE2VDEwOjI1OjMwKzA5OjAwClN0YXRzICA6ICs4NC8tODkyNyBpbiA0IGZpbGUo cykKVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9pYnVzL2MvYzY3 MThkOTM4NWFlZmM1NWZhMjRjYTA3Y2ZiZjUwMWE5NjlmYTA1Zj9icmFuY2g9YXV0b3Rvb2wKCkxv ZzoKRml4ZWQgYSBidWlsZCBmYWlsdXJlIGluIHJhd2hpZGUuCgotLS0KZGlmZiAtLWdpdCBhL2li dXMteHgtZjE3LnBhdGNoIGIvaWJ1cy14eC1mMTcucGF0Y2gKaW5kZXggMDFiZmZlMy4uOWZkYTA2 OCAxMDA2NDQKLS0tIGEvaWJ1cy14eC1mMTcucGF0Y2gKKysrIGIvaWJ1cy14eC1mMTcucGF0Y2gK QEAgLTEsODMgKzEsMyBAQAotLS0tIGlidXMtMS41LjEvYmluZGluZ3MvdmFsYS9NYWtlZmlsZS5h bS5vcmlnCTIwMTMtMDEtMTUgMTY6NTg6MjUuNTcxNDMzNjkwICswOTAwCi0rKysgaWJ1cy0xLjUu MS9iaW5kaW5ncy92YWxhL01ha2VmaWxlLmFtCTIwMTMtMDEtMTUgMTY6NTg6NDYuOTgzNDU1MTU4 ICswOTAwCi1AQCAtMjAsMTcgKzIwLDM4IEBACi0gIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAotICMgQm9zdG9uLCBNQSAgMDIxMTEt MTMwNyAgVVNBCi0gCi0tLWluY2x1ZGUgJChWQVBJR0VOX01BS0VGSUxFKQotK3ZhcGlkaXIgPSAk KGRhdGFkaXIpL3ZhbGEvdmFwaQotK2Rpc3RfdmFwaV9EQVRBID0gXAotKwlpYnVzLUBJQlVTX0FQ SV9WRVJTSU9OQC52YXBpIFwKLSsJaWJ1cy1ASUJVU19BUElfVkVSU0lPTkAuZGVwcyBcCi0rCSQo TlVMTCkKLSAKLSsjIERvbid0IHJlYnVpbGQgdmFwaSBldmVyeSB0aW1lIGdpciBpcyB1cGRhdGVk LgotK2lmIEVOQUJMRV9MSUJHTk9NRUtCRAotIHZhcGlfZGVwcyA9IFwKLS0JSUJ1cy0xLjAubWV0 YWRhdGEgXAotLQlJQnVzLTEuMC1jdXN0b20udmFsYSBcCi0tCSQodG9wX2J1aWxkZGlyKS9zcmMv SUJ1cy0xLjAuZ2lyIFwKLSsJJChzcmNkaXIpL0lCdXMtMS4wLm1ldGFkYXRhIFwKLSsJJChzcmNk aXIpL0lCdXMtMS4wLWN1c3RvbS52YWxhIFwKLSsJfCBcCi0rCSQoYnVpbGRkaXIpL2drYmQudmFw aSBcCi0rCSQodG9wX3NyY2Rpcikvc3JjL0lCdXMtQElCVVNfQVBJX1ZFUlNJT05ALmdpciBcCi0g CSQoTlVMTCkKLStlbHNlCi0rdmFwaV9kZXBzID0gXAotKwkkKHNyY2RpcikvSUJ1cy0xLjAubWV0 YWRhdGEgXAotKwkkKHNyY2RpcikvSUJ1cy0xLjAtY3VzdG9tLnZhbGEgXAotKwl8IFwKLSsJJCh0 b3Bfc3JjZGlyKS9zcmMvSUJ1cy1ASUJVU19BUElfVkVSU0lPTkAuZ2lyIFwKLSsJJChOVUxMKQot K2VuZGlmCi0gCi0taWYgRU5BQkxFX0xJQkdOT01FS0JECi0tdmFwaV9kZXBzICs9ICQoYnVpbGRk aXIpL2drYmQudmFwaQotK2lidXMtQElCVVNfQVBJX1ZFUlNJT05ALnZhcGk6ICQodmFwaV9kZXBz KQotKwkkKEFNX1ZfR0VOKSAkKFZBUElHRU4pIC0tbGlicmFyeSBpYnVzLUBJQlVTX0FQSV9WRVJT SU9OQCBcCi0rCQkJLS1wa2cgZ2lvLTIuMCBcCi0rCQkJLS1tZXRhZGF0YWRpcj0kKHNyY2Rpcikg XAotKwkJCSQodG9wX3NyY2Rpcikvc3JjL0lCdXMtQElCVVNfQVBJX1ZFUlNJT05ALmdpciBcCi0r CQkJJChzcmNkaXIpL0lCdXMtMS4wLWN1c3RvbS52YWxhCi0gCi0raWYgRU5BQkxFX0xJQkdOT01F S0JECi0gJChidWlsZGRpcikvZ2tiZC52YXBpOgotIAkkKEFNX1ZfR0VOKSAkKFZBUElHRU4pIC0t bGlicmFyeSBna2JkIFwKLSAJICAgIC0tbWV0YWRhdGFkaXIgJChzcmNkaXIpIFwKLUBAIC0zOSwy NSArNjAsMTAgQEAgJChidWlsZGRpcikvZ2tiZC52YXBpOgotIAkkKE5VTEwpCi0gZW5kaWYKLSAK LS1pYnVzLTEuMC52YXBpOiAkKHZhcGlfZGVwcykKLS0KLS1WQVBJR0VOX1ZBUElTID0gaWJ1cy0x LjAudmFwaQotLQotLWlidXNfMV8wX3ZhcGlfREVQUyA9IGdpby0yLjAKLS1pYnVzXzFfMF92YXBp X01FVEFEQVRBRElSUyA9ICQoc3JjZGlyKQotLWlidXNfMV8wX3ZhcGlfRklMRVMgPSBcCi0tCSQo dG9wX2J1aWxkZGlyKS9zcmMvSUJ1cy0xLjAuZ2lyIFwKLS0JJChzcmNkaXIpL0lCdXMtMS4wLWN1 c3RvbS52YWxhIFwKLS0JJChOVUxMKQotLQotLXZhcGlkaXIgPSAkKGRhdGFkaXIpL3ZhbGEvdmFw aQotLXZhcGlfREFUQSA9ICQoVkFQSUdFTl9WQVBJUykgJChWQVBJR0VOX1ZBUElTOi52YXBpPS5k ZXBzKQotLQotIEVYVFJBX0RJU1QgPSBcCi0gCUdrYmQtMy4wLm1ldGFkYXRhIFwKLSAJSUJ1cy0x LjAubWV0YWRhdGEgXAotIAlJQnVzLTEuMC1jdXN0b20udmFsYSBcCi0tCWlidXMtMS4wLmRlcHMg XAotIAljb25maWcudmFwaSBcCi0gCXhpLnZhcGkgXAotIAlYa2wtMS4wLm1ldGFkYXRhIFwKLUBA IC02NSw0ICs3MSw2IEBAIEVYVFJBX0RJU1QgPSBcCi0gCi0gQ0xFQU5GSUxFUyA9IGdrYmQudmFw aQotIAotK01BSU5UQUlORVJDTEVBTkZJTEVTID0gaWJ1cy1ASUJVU19BUElfVkVSU0lPTkAudmFw aQotKwotIC1pbmNsdWRlICQodG9wX3NyY2RpcikvZ2l0Lm1rCiAtLS0gaWJ1cy0xLjUuMS9zZXR1 cC9rZXlib2FyZHNob3J0Y3V0LnB5Lm9yaWcJMjAxMy0wMS0xNSAxNzowMDowNS4wOTMxOTEwNTQg KzA5MDAKICsrKyBpYnVzLTEuNS4xL3NldHVwL2tleWJvYXJkc2hvcnRjdXQucHkJMjAxMy0wMS0x NSAxNzowMDoxOC4wMzQxNjA3NjAgKzA5MDAKIEBAIC0yMDcsNyArMjA3LDcgQEAgY2xhc3MgS2V5 Ym9hcmRTaG9ydGN1dFNlbGVjdGlvbihHdGsuVkJveAoKZGlmZiAtLWdpdCBhL2lidXMteHgtdmFw aS1idWlsZC1mYWlsdXJlLmRpZmYgYi9pYnVzLXh4LXZhcGktYnVpbGQtZmFpbHVyZS5kaWZmCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWZiMDBmLi4wMDAwMDAwCi0tLSBhL2lidXMt eHgtdmFwaS1idWlsZC1mYWlsdXJlLmRpZmYKKysrIC9kZXYvbnVsbApAQCAtMSw4ODQ3ICswLDAg QEAKLS0tLSBpYnVzL3VpL2d0azMvR2tiZC0zLjAuZ2kuZm9vCTE5NzAtMDEtMDEgMDk6MDA6MDAu MDAwMDAwMDAwICswOTAwCi0rKysgaWJ1cy91aS9ndGszL0drYmQtMy4wLmdpCTIwMTItMDMtMDkg MTY6MDk6MTEuNDc4MDE4OTc1ICswOTAwCi1AQCAtMCwwICsxLDc0IEBACi0rPD94bWwgdmVyc2lv bj0iMS4wIj8+Ci0rPGFwaSB2ZXJzaW9uPSIxLjAiPgotKyAgICAgICAgPG5hbWVzcGFjZSBuYW1l PSJHa2JkIj4KLSsgICAgICAgICAgICAgICAgPGZ1bmN0aW9uIG5hbWU9ImNvbmZpZ3VyYXRpb25f Z2V0IiBzeW1ib2w9ImdrYmRfY29uZmlndXJhdGlvbl9nZXQiPgotKyAgICAgICAgICAgICAgICAg ICAgICAgIDxyZXR1cm4tdHlwZSB0eXBlPSJHa2JkQ29uZmlndXJhdGlvbioiLz4KLSsgICAgICAg ICAgICAgICAgICAgICAgICA8cGFyYW1ldGVycy8+Ci0rICAgICAgICAgICAgICAgIDwvZnVuY3Rp b24+Ci0rICAgICAgICAgICAgICAgIDxvYmplY3QgbmFtZT0iR2tiZENvbmZpZ3VyYXRpb24iCi0r ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50PSJHT2JqZWN0IgotKyAgICAgICAgICAgICAg ICAgICAgICAgIHR5cGUtbmFtZT0iR2tiZENvbmZpZ3VyYXRpb24iCi0rICAgICAgICAgICAgICAg ICAgICAgICAgZ2V0LXR5cGU9ImdrYmRfY29uZmlndXJhdGlvbl9nZXRfdHlwZSI+Ci0rICAgICAg ICAgICAgICAgICAgICAgICAgPGZpZWxkIG5hbWU9InBhcmVudCIgdHlwZT0iR09iamVjdCIvPgot KyAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRob2QgbmFtZT0iZ2V0X3Nob3J0X2dyb3VwX25h bWVzIgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sPSJna2JkX2NvbmZp Z3VyYXRpb25fZ2V0X3Nob3J0X2dyb3VwX25hbWVzIj4KLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDxyZXR1cm4tdHlwZSB0eXBlPSJnY2hhcioqIi8+Ci0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA8cGFyYW1ldGVycz4KLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJjb25maWd1cmF0aW9uIgotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9IkdrYmRDb25m aWd1cmF0aW9uKiIvPgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhbWV0 ZXJzPgotKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbWV0aG9kPgotKyAgICAgICAgICAgICAg ICAgICAgICAgIDxtZXRob2QgbmFtZT0iZ2V0X2dyb3VwX25hbWVzIgotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3ltYm9sPSJna2JkX2NvbmZpZ3VyYXRpb25fZ2V0X2dyb3VwX25h bWVzIj4KLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXR1cm4tdHlwZSB0eXBl PSJnY2hhcioqIi8+Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYW1ldGVy cz4KLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmFtZXRlciBu YW1lPSJjb25maWd1cmF0aW9uIgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGU9IkdrYmRDb25maWd1cmF0aW9uKiIvPgotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPC9wYXJhbWV0ZXJzPgotKyAgICAgICAgICAgICAgICAgICAg ICAgIDwvbWV0aG9kPgotKyAgICAgICAgICAgICAgICAgICAgICAgIDxtZXRob2QgbmFtZT0ibG9j a19ncm91cCIKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbD0iZ2tiZF9j b25maWd1cmF0aW9uX2xvY2tfZ3JvdXAiPgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHJldHVybi10eXBlIHR5cGU9InZvaWQiLz4KLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDxwYXJhbWV0ZXJzPgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA8cGFyYW1ldGVyIG5hbWU9ImNvbmZpZ3VyYXRpb24iCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iR2tiZENvbmZpZ3VyYXRpb24q Ii8+Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbWV0ZXIg bmFtZT0iZ3JvdXAiIHR5cGU9Imd1aW50Ii8+Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA8L3BhcmFtZXRlcnM+Ci0rICAgICAgICAgICAgICAgICAgICAgICAgPC9tZXRob2Q+Ci0r ICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGhvZCBuYW1lPSJzdGFydF9saXN0ZW4iCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2w9ImdrYmRfY29uZmlndXJhdGlvbl9z dGFydF9saXN0ZW4iPgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJldHVybi10 eXBlIHR5cGU9InZvaWQiLz4KLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJh bWV0ZXJzPgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYW1l dGVyIG5hbWU9ImNvbmZpZ3VyYXRpb24iCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdHlwZT0iR2tiZENvbmZpZ3VyYXRpb24qIi8+Ci0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmFtZXRlcnM+Ci0rICAgICAgICAgICAgICAg ICAgICAgICAgPC9tZXRob2Q+Ci0rICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGhvZCBuYW1l PSJzdG9wX2xpc3RlbiIKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbD0i Z2tiZF9jb25maWd1cmF0aW9uX3N0b3BfbGlzdGVuIj4KLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDxyZXR1cm4tdHlwZSB0eXBlPSJ2b2lkIi8+Ci0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA8cGFyYW1ldGVycz4KLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJjb25maWd1cmF0aW9uIgotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9IkdrYmRDb25maWd1 cmF0aW9uKiIvPgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhbWV0ZXJz PgotKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbWV0aG9kPgotKyAgICAgICAgICAgICAgICAg ICAgICAgIDxzaWduYWwgbmFtZT0iY2hhbmdlZCIgd2hlbj0iTEFTVCI+Ci0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA8cmV0dXJuLXR5cGUgdHlwZT0idm9pZCIvPgotKyAgICAgICAg ICAgICAgICAgICAgICAgIDwvc2lnbmFsPgotKyAgICAgICAgICAgICAgICAgICAgICAgIDxzaWdu YWwgbmFtZT0iZ3JvdXAtY2hhbmdlZCIgd2hlbj0iTEFTVCI+Ci0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA8cmV0dXJuLXR5cGUgdHlwZT0idm9pZCIvPgotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPHBhcmFtZXRlcnM+Ci0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iY29uZmlndXJhdGlvbiIKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJHa2JkQ29u ZmlndXJhdGlvbioiLz4KLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PHBhcmFtZXRlciBuYW1lPSJvYmplY3QiIHR5cGU9ImludCIvPgotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgPC9wYXJhbWV0ZXJzPgotKyAgICAgICAgICAgICAgICAgICAgICAgIDwv c2lnbmFsPgotKyAgICAgICAgICAgICAgICAgICAgICAgIDxzaWduYWwgbmFtZT0iaW5kaWNhdG9y cy1jaGFuZ2VkIiB3aGVuPSJMQVNUIj4KLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDxyZXR1cm4tdHlwZSB0eXBlPSJ2b2lkIi8+Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA8cGFyYW1ldGVycz4KLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHBhcmFtZXRlciBuYW1lPSJjb25maWd1cmF0aW9uIgotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9IkdrYmRDb25maWd1cmF0aW9uKiIv PgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wYXJhbWV0ZXJzPgotKyAgICAg ICAgICAgICAgICAgICAgICAgIDwvc2lnbmFsPgotKyAgICAgICAgICAgICAgICA8L29iamVjdD4K LSsgICAgICAgIDwvbmFtZXNwYWNlPgotKzwvYXBpPgotLS0tIGlidXMvdWkvZ3RrMy9Ha2JkLTMu MC5tZXRhZGF0YS5vcmlnCTIwMTItMDMtMDkgMTE6NTE6MDMuNTA5MzU0MjY2ICswOTAwCi0rKysg aWJ1cy91aS9ndGszL0drYmQtMy4wLm1ldGFkYXRhCTIwMTItMDMtMDkgMTY6Mjc6MzguMTQzOTI5 Nzk5ICswOTAwCi1AQCAtMSArMSw0IEBACi0rR2tiZCBjaGVhZGVyX2ZpbGVuYW1lPSJsaWJnbm9t ZWtiZC9na2JkLWNvbmZpZ3VyYXRpb24uaCIKLSBDb25maWd1cmF0aW9uIGNoZWFkZXJfZmlsZW5h bWU9ImxpYmdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5oIgotKy8vZ2tiZF9jb25maWd1cmF0 aW9uX2dldF9zaG9ydF9ncm91cF9uYW1lcyB0eXBlX25hbWU9InN0cmluZ1tdIgotKy8vZ2tiZF9j b25maWd1cmF0aW9uX2dldF9ncm91cF9uYW1lcyB0eXBlX25hbWU9InN0cmluZ1tdIgotLS0tIGli dXMvdWkvZ3RrMy9NYWtlZmlsZS5hbS5vcmlnCTIwMTItMDMtMDkgMTc6NTk6MzAuMzI3NzI4MTM3 ICswOTAwCi0rKysgaWJ1cy91aS9ndGszL01ha2VmaWxlLmFtCTIwMTItMDMtMDkgMTg6MDE6MDQu Mjc0NDMwNjgzICswOTAwCi1AQCAtODUsNiArODUsNyBAQCBBTV9WQUxBRkxBR1MgPSBcCi0gCS0t cGtnPWd0aystMy4wIFwKLSAJLS1wa2c9Z2RrLXgxMS0zLjAgXAotIAktLXBrZz1pYnVzLTEuMCBc Ci0rCS0tcGtnPVhrbC0xLjAgXAotIAkkKE5VTEwpCi0gCi0gbGliZXhlY19QUk9HUkFNUyA9IGli dXMtdWktZ3RrMwotQEAgLTEwNiw4ICsxMDcsMTIgQEAgaWJ1c191aV9ndGszX3ZhbGFzID0gXAot IAkkKE5VTEwpCi0gaWJ1c191aV9ndGszX3ZhbGFfY2ZpbGVzID0gJChpYnVzX3VpX2d0azNfdmFs YXM6LnZhbGE9LmMpCi0gCi0rI2lidXNfdWlfZ3RrM19TT1VSQ0VTID0gXAotKyMJJChpYnVzX3Vp X2d0azNfdmFsYXMpIFwKLSsjCWdyYWJrZXljb2RlLmMgXAotKyMJJChOVUxMKQotIGlidXNfdWlf Z3RrM19TT1VSQ0VTID0gXAotLQkkKGlidXNfdWlfZ3RrM192YWxhcykgXAotKwkkKGlidXNfdWlf Z3RrM192YWxhX2NmaWxlcykgXAotIAlncmFia2V5Y29kZS5jIFwKLSAJJChOVUxMKQotIAotQEAg LTEzMyw2ICsxMzgsMTEgQEAgQU1fVkFMQUZMQUdTICs9IFwKLSAJLS1wa2c9Z2tiZCBcCi0gCSQo TlVMTCkKLSAKLSsjIEZJWE1FOiBSdW5uaW5nIHZhcGlnZW4gR2tiZC0zLjAuZ2lyIGNhbm5vdCBy ZXNvbHZlIHRoZSB0eXBlIG5hbWUgZXJyb3I6Ci0rIwotKyMgWGtsLTEuMC5naXI6ODc3LjUxLTg3 Ny41MTogZXJyb3I6IFRoZSB0eXBlIG5hbWUgYFguWEV2ZW50JyBjb3VsZCBub3QgYmUgZm91bmQK LSsjICAgICAgICAgICAgIDx0eXBlIG5hbWU9InhsaWIuWEV2ZW50IiBjOnR5cGU9IlhFdmVudCoi Lz4KLSsjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBe Ci0gJChzcmNkaXIpL2drYmQudmFwaToKLSAJJChWQVBJR0VOKSAtLW1ldGFkYXRhZGlyIC4gLS1s aWJyYXJ5IGdrYmQgXAotIAkgICAgLS1wa2cgZ3RrKy0zLjAgLS1wa2cgZ2xpYi0yLjAgLS1wa2cg Z21vZHVsZS0yLjAgXAotQEAgLTE0MSwyMCArMTUxLDI4IEBAICQoc3JjZGlyKS9na2JkLnZhcGk6 Ci0gCi0gJChzcmNkaXIpL2drYmRsYXlvdXQudmFsYTogJChzcmNkaXIpL2drYmQudmFwaQotIAlA Y3AgJChzcmNkaXIpL2drYmRsYXlvdXQudmFsYS50cnVlICQoc3JjZGlyKS9na2JkbGF5b3V0LnZh bGEKLSsJQGNwICQoc3JjZGlyKS9na2JkbGF5b3V0LmMudHJ1ZSAkKHNyY2RpcikvZ2tiZGxheW91 dC5jCi0gZWxzZQotICQoc3JjZGlyKS9na2JkbGF5b3V0LnZhbGE6Ci0gCUBjcCAkKHNyY2Rpcikv Z2tiZGxheW91dC52YWxhLmZhbHNlICQoc3JjZGlyKS9na2JkbGF5b3V0LnZhbGEKLSsJQGNwICQo c3JjZGlyKS9na2JkbGF5b3V0LmMuZmFsc2UgJChzcmNkaXIpL2drYmRsYXlvdXQuYwotIGVuZGlm Ci0gCi0rc3JjZGlyKS9wYW5lbC5jOiAkKHNyY2RpcikvcGFuZWwuYy5pbgotKwlAY3AgJChzcmNk aXIpL3BhbmVsLmMuaW4gJChzcmNkaXIpL3BhbmVsLmMKLSsKLSBDTEVBTkZJTEVTID0gXAotLQln a2JkLnZhcGkgXAotIAlna2JkbGF5b3V0LnZhbGEgXAotIAlndGtwYW5lbC54bWwgXAotIAkkKGli dXNfdWlfZ3RrM192YWxhX2NmaWxlcykgXAotIAkkKE5VTEwpCi0gCi0gRVhUUkFfRElTVCA9IFwK LSsJZ2tiZC52YXBpIFwKLSsJR2tiZC0zLjAuZ2kgXAotIAlHa2JkLTMuMC5tZXRhZGF0YSBcCi0r CWdrYmRsYXlvdXQuYy5mYWxzZSBcCi0rCWdrYmRsYXlvdXQuYy50cnVlIFwKLSAJZ2tiZGxheW91 dC52YWxhLmZhbHNlIFwKLSAJZ2tiZGxheW91dC52YWxhLnRydWUgXAotIAlndGtwYW5lbC54bWwu aW4uaW4gXAotLS0tIGlidXMvdWkvZ3RrMy9na2JkLnZhcGkuZm9vCTE5NzAtMDEtMDEgMDk6MDA6 MDAuMDAwMDAwMDAwICswOTAwCi0rKysgaWJ1cy91aS9ndGszL2drYmQudmFwaQkyMDEyLTAzLTA5 IDE2OjMwOjM3LjY0MTE4NDU2NiArMDkwMAotQEAgLTAsMCArMSwyODIgQEAKLSsvKiBna2JkLnZh cGkgZ2VuZXJhdGVkIGJ5IHZhcGlnZW4sIGRvIG5vdCBtb2RpZnkuICovCi0rCi0rW0NDb2RlIChj cHJlZml4ID0gIkdrYmQiLCBnaXJfbmFtZXNwYWNlID0gIkdrYmQiLCBnaXJfdmVyc2lvbiA9ICIz LjAiLCBsb3dlcl9jYXNlX2NwcmVmaXggPSAiZ2tiZF8iKV0KLStuYW1lc3BhY2UgR2tiZCB7Ci0r CVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRp b24uaCIsIHR5cGVfaWQgPSAiZ2tiZF9jb25maWd1cmF0aW9uX2dldF90eXBlICgpIildCi0rCXB1 YmxpYyBjbGFzcyBDb25maWd1cmF0aW9uIDogR0xpYi5PYmplY3QgewotKwkJW0NDb2RlIChoYXNf Y29uc3RydWN0X2Z1bmN0aW9uID0gZmFsc2UpXQotKwkJcHJvdGVjdGVkIENvbmZpZ3VyYXRpb24g KCk7Ci0rCQlwdWJsaWMgdm9pZCBhcHBlbmRfb2JqZWN0IChHTGliLk9iamVjdCBvYmopOwotKwkJ cHVibGljIHN0YXRpYyBzdHJpbmcgY3JlYXRlX2xhYmVsX3RpdGxlIChpbnQgZ3JvdXAsIEdMaWIu SGFzaFRhYmxlPHZvaWQqLHZvaWQqPiBsbjJjbnRfbWFwLCBzdHJpbmcgbGF5b3V0X25hbWUpOwot KwkJcHVibGljIHN0cmluZyBleHRyYWN0X2xheW91dF9uYW1lIChpbnQgZ3JvdXApOwotKwkJcHVi bGljIHZvaWQgZnJlZV9pbWFnZXMgKEdMaWIuU0xpc3Q8R2RrLlBpeGJ1Zj4gaW1hZ2VzKTsKLSsJ CXB1YmxpYyBzdGF0aWMgR2tiZC5Db25maWd1cmF0aW9uIEBnZXQgKCk7Ci0rCQlwdWJsaWMgdW5v d25lZCBHTGliLlNMaXN0PEdMaWIuT2JqZWN0PiBnZXRfYWxsX29iamVjdHMgKCk7Ci0rCQlwdWJs aWMgYm9vbCBnZXRfY2Fwc19sb2NrX3N0YXRlICgpOwotKwkJcHVibGljIHVpbnQgZ2V0X2N1cnJl bnRfZ3JvdXAgKCk7Ci0rCQlwdWJsaWMgc3RyaW5nIGdldF9jdXJyZW50X3Rvb2x0aXAgKCk7Ci0r CQlwdWJsaWMgc3RyaW5nIGdldF9ncm91cF9uYW1lICh1aW50IGdyb3VwKTsKLSsJCVtDQ29kZSAo YXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXQotKwkJ cHVibGljIHVub3duZWQgc3RyaW5nW10gZ2V0X2dyb3VwX25hbWVzICgpOwotKwkJcHVibGljIHN0 cmluZyBnZXRfaW1hZ2VfZmlsZW5hbWUgKHVpbnQgZ3JvdXApOwotKwkJcHVibGljIEdrYmQuSW5k aWNhdG9yQ29uZmlnIGdldF9pbmRpY2F0b3JfY29uZmlnICgpOwotKwkJcHVibGljIEdrYmQuS2V5 Ym9hcmRDb25maWcgZ2V0X2tleWJvYXJkX2NvbmZpZyAoKTsKLSsJCXB1YmxpYyBib29sIGdldF9u dW1fbG9ja19zdGF0ZSAoKTsKLSsJCXB1YmxpYyBib29sIGdldF9zY3JvbGxfbG9ja19zdGF0ZSAo KTsKLSsJCVtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRl ZCA9IHRydWUpXQotKwkJcHVibGljIHVub3duZWQgc3RyaW5nW10gZ2V0X3Nob3J0X2dyb3VwX25h bWVzICgpOwotKwkJcHVibGljIHVub3duZWQgWGtsLkVuZ2luZSBnZXRfeGtsX2VuZ2luZSAoKTsK LSsJCXB1YmxpYyBib29sIGlmX2FueV9vYmplY3RfZXhpc3RzICgpOwotKwkJcHVibGljIGJvb2wg aWZfZmxhZ3Nfc2hvd24gKCk7Ci0rCQlwdWJsaWMgR0xpYi5TTGlzdDxHZGsuUGl4YnVmPiBsb2Fk X2ltYWdlcyAoKTsKLSsJCXB1YmxpYyB2b2lkIGxvY2tfZ3JvdXAgKHVpbnQgZ3JvdXApOwotKwkJ cHVibGljIHZvaWQgbG9ja19uZXh0X2dyb3VwICgpOwotKwkJcHVibGljIHZvaWQgcmVtb3ZlX29i amVjdCAoR0xpYi5PYmplY3Qgb2JqKTsKLSsJCXB1YmxpYyB2b2lkIHN0YXJ0X2xpc3RlbiAoKTsK LSsJCXB1YmxpYyB2b2lkIHN0b3BfbGlzdGVuICgpOwotKwkJcHVibGljIHNpZ25hbCB2b2lkIGNo YW5nZWQgKCk7Ci0rCQlwdWJsaWMgc2lnbmFsIHZvaWQgZ3JvdXBfY2hhbmdlZCAoaW50IG9iamVj dCk7Ci0rCQlwdWJsaWMgc2lnbmFsIHZvaWQgaW5kaWNhdG9yc19jaGFuZ2VkICgpOwotKwl9Ci0r CVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRp b24uaCIsIHR5cGVfaWQgPSAiZ2tiZF9pbmRpY2F0b3JfZ2V0X3R5cGUgKCkiKV0KLSsJcHVibGlj IGNsYXNzIEluZGljYXRvciA6IEd0ay5Ob3RlYm9vaywgQXRrLkltcGxlbWVudG9yLCBHdGsuQnVp bGRhYmxlIHsKLSsJCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlLCB0eXBl ID0gIkd0a1dpZGdldCoiKV0KLSsJCXB1YmxpYyBJbmRpY2F0b3IgKCk7Ci0rCQlbQ0NvZGUgKGFy cmF5X2xlbmd0aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0KLSsJCXB1 YmxpYyBzdGF0aWMgdW5vd25lZCBzdHJpbmdbXSBnZXRfZ3JvdXBfbmFtZXMgKCk7Ci0rCQlwdWJs aWMgc3RhdGljIHN0cmluZyBnZXRfaW1hZ2VfZmlsZW5hbWUgKHVpbnQgZ3JvdXApOwotKwkJcHVi bGljIHN0YXRpYyBkb3VibGUgZ2V0X21heF93aWR0aF9oZWlnaHRfcmF0aW8gKCk7Ci0rCQlwdWJs aWMgc3RhdGljIHVub3duZWQgWGtsLkVuZ2luZSBnZXRfeGtsX2VuZ2luZSAoKTsKLSsJCXB1Ymxp YyB2b2lkIHNldF9hbmdsZSAoZG91YmxlIGFuZ2xlKTsKLSsJCXB1YmxpYyB2b2lkIHNldF9wYXJl bnRfdG9vbHRpcHMgKGJvb2wgaWZzZXQpOwotKwkJW0hhc0VtaXR0ZXJdCi0rCQlwdWJsaWMgdmly dHVhbCBzaWduYWwgdm9pZCByZWluaXRfdWkgKCk7Ci0rCX0KLSsJW0NDb2RlIChjaGVhZGVyX2Zp bGVuYW1lID0gImxpYmdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgdHlwZV9pZCA9ICJn a2JkX2tleWJvYXJkX2RyYXdpbmdfZ2V0X3R5cGUgKCkiKV0KLSsJcHVibGljIGNsYXNzIEtleWJv YXJkRHJhd2luZyA6IEd0ay5EcmF3aW5nQXJlYSwgQXRrLkltcGxlbWVudG9yLCBHdGsuQnVpbGRh YmxlIHsKLSsJCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlLCB0eXBlID0g Ikd0a1dpZGdldCoiKV0KLSsJCXB1YmxpYyBLZXlib2FyZERyYXdpbmcgKCk7Ci0rCQlbQ0NvZGUg KGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSwgdHlwZSA9ICJHdGtXaWRnZXQqIildCi0r CQlwdWJsaWMgS2V5Ym9hcmREcmF3aW5nLmRpYWxvZ19uZXcgKCk7Ci0rCQlwdWJsaWMgc3RhdGlj IHZvaWQgZGlhbG9nX3NldF9ncm91cCAoR3RrLldpZGdldCBkaWFsb2csIFhrbC5Db25maWdSZWdp c3RyeSByZWdpc3RyeSwgaW50IGdyb3VwKTsKLSsJCXB1YmxpYyBzdGF0aWMgdm9pZCBkaWFsb2df c2V0X2xheW91dCAoR3RrLldpZGdldCBkaWFsb2csIFhrbC5Db25maWdSZWdpc3RyeSByZWdpc3Ry eSwgc3RyaW5nIGxheW91dCk7Ci0rCQlwdWJsaWMgdW5vd25lZCBzdHJpbmcgZ2V0X2NvbXBhdCAo KTsKLSsJCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfZ2VvbWV0cnkgKCk7Ci0rCQlwdWJsaWMg dW5vd25lZCBzdHJpbmcgZ2V0X2tleWNvZGVzICgpOwotKwkJcHVibGljIHVub3duZWQgc3RyaW5n IGdldF9zeW1ib2xzICgpOwotKwkJcHVibGljIHVub3duZWQgc3RyaW5nIGdldF90eXBlcyAoKTsK LSsJCXB1YmxpYyB2b2lkIHByaW50IChHdGsuV2luZG93IHBhcmVudF93aW5kb3csIHN0cmluZyBk ZXNjcmlwdGlvbik7Ci0rCQlwdWJsaWMgYm9vbCByZW5kZXIgKENhaXJvLkNvbnRleHQgY3IsIFBh bmdvLkxheW91dCBsYXlvdXQsIGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3Vi bGUgaGVpZ2h0LCBkb3VibGUgZHBpX3gsIGRvdWJsZSBkcGlfeSk7Ci0rCQlwdWJsaWMgdm9pZCBz ZXRfZ3JvdXBzX2xldmVscyAoR2tiZC5LZXlib2FyZERyYXdpbmdHcm91cExldmVsIGdyb3VwTGV2 ZWxzKTsKLSsJCXB1YmxpYyB2b2lkIHNldF9sYXlvdXQgKHN0cmluZyBpZCk7Ci0rCQlwdWJsaWMg dm9pZCBzZXRfdHJhY2tfY29uZmlnIChib29sIGVuYWJsZSk7Ci0rCQlwdWJsaWMgdm9pZCBzZXRf dHJhY2tfbW9kaWZpZXJzIChib29sIGVuYWJsZSk7Ci0rCQlwdWJsaWMgdmlydHVhbCBzaWduYWwg dm9pZCBiYWRfa2V5Y29kZSAodWludCBrZXljb2RlKTsKLSsJfQotKwlbQ0NvZGUgKGNoZWFkZXJf ZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiLCB0eXBlX2lkID0g ImdrYmRfc3RhdHVzX2dldF90eXBlICgpIildCi0rCXB1YmxpYyBjbGFzcyBTdGF0dXMgOiBHdGsu U3RhdHVzSWNvbiB7Ci0rCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSwg dHlwZSA9ICJHdGtTdGF0dXNJY29uKiIpXQotKwkJcHVibGljIFN0YXR1cyAoKTsKLSsJCVtDQ29k ZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXQot KwkJcHVibGljIHN0YXRpYyB1bm93bmVkIHN0cmluZ1tdIGdldF9ncm91cF9uYW1lcyAoKTsKLSsJ CXB1YmxpYyBzdGF0aWMgc3RyaW5nIGdldF9pbWFnZV9maWxlbmFtZSAodWludCBncm91cCk7Ci0r CQlwdWJsaWMgc3RhdGljIHVub3duZWQgWGtsLkVuZ2luZSBnZXRfeGtsX2VuZ2luZSAoKTsKLSsJ CXB1YmxpYyB2b2lkIHJlaW5pdF91aSAoKTsKLSsJfQotKwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5h bWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiLCBoYXNfdHlwZV9pZCA9IGZh bHNlKV0KLSsJcHVibGljIHN0cnVjdCBEZXNrdG9wQ29uZmlnIHsKLSsJCXB1YmxpYyBpbnQgZGVm YXVsdF9ncm91cDsKLSsJCXB1YmxpYyBib29sIGdyb3VwX3Blcl9hcHA7Ci0rCQlwdWJsaWMgYm9v bCBoYW5kbGVfaW5kaWNhdG9yczsKLSsJCXB1YmxpYyBib29sIGxheW91dF9uYW1lc19hc19ncm91 cF9uYW1lczsKLSsJCXB1YmxpYyBib29sIGxvYWRfZXh0cmFfaXRlbXM7Ci0rCQlwdWJsaWMgd2Vh ayBHTGliLlNldHRpbmdzIHNldHRpbmdzOwotKwkJcHVibGljIGludCBjb25maWdfbGlzdGVuZXJf aWQ7Ci0rCQlwdWJsaWMgd2VhayBYa2wuRW5naW5lIGVuZ2luZTsKLSsJCXB1YmxpYyBib29sIGFj dGl2YXRlICgpOwotKwkJcHVibGljIHZvaWQgaW5pdCAoWGtsLkVuZ2luZSBlbmdpbmUpOwotKwkJ cHVibGljIHZvaWQgbG9hZCAoKTsKLSsJCXB1YmxpYyBib29sIGxvYWRfZ3JvdXBfZGVzY3JpcHRp b25zIChYa2wuQ29uZmlnUmVnaXN0cnkgcmVnaXN0cnksIHN0cmluZyBsYXlvdXRfaWRzLCBzdHJp bmcgdmFyaWFudF9pZHMsIHN0cmluZyBzaG9ydF9ncm91cF9uYW1lcywgc3RyaW5nIGZ1bGxfZ3Jv dXBfbmFtZXMpOwotKwkJcHVibGljIHZvaWQgbG9ja19uZXh0X2dyb3VwICgpOwotKwkJcHVibGlj IHZvaWQgbG9ja19wcmV2X2dyb3VwICgpOwotKwkJcHVibGljIHZvaWQgcmVzdG9yZV9ncm91cCAo KTsKLSsJCXB1YmxpYyB2b2lkIHNhdmUgKCk7Ci0rCQlwdWJsaWMgdm9pZCBzdGFydF9saXN0ZW4g KEdMaWIuQ2FsbGJhY2sgZnVuYyk7Ci0rCQlwdWJsaWMgdm9pZCBzdG9wX2xpc3RlbiAoKTsKLSsJ CXB1YmxpYyB2b2lkIHRlcm0gKCk7Ci0rCX0KLSsJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0g ImxpYmdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgaGFzX3R5cGVfaWQgPSBmYWxzZSld Ci0rCXB1YmxpYyBzdHJ1Y3QgSW5kaWNhdG9yQ29uZmlnIHsKLSsJCXB1YmxpYyBpbnQgc2Vjb25k YXJ5X2dyb3Vwc19tYXNrOwotKwkJcHVibGljIGJvb2wgc2hvd19mbGFnczsKLSsJCXB1YmxpYyB3 ZWFrIHN0cmluZyBmb250X2ZhbWlseTsKLSsJCXB1YmxpYyBpbnQgZm9udF9zaXplOwotKwkJcHVi bGljIHdlYWsgc3RyaW5nIGZvcmVncm91bmRfY29sb3I7Ci0rCQlwdWJsaWMgd2VhayBzdHJpbmcg YmFja2dyb3VuZF9jb2xvcjsKLSsJCXB1YmxpYyB3ZWFrIHN0cmluZyBlbmFibGVkX3BsdWdpbnM7 Ci0rCQlwdWJsaWMgd2VhayBHTGliLlNldHRpbmdzIHNldHRpbmdzOwotKwkJcHVibGljIHdlYWsg R0xpYi5TTGlzdDx2b2lkKj4gaW1hZ2VfZmlsZW5hbWVzOwotKwkJcHVibGljIHdlYWsgR3RrLklj b25UaGVtZSBpY29uX3RoZW1lOwotKwkJcHVibGljIGludCBjb25maWdfbGlzdGVuZXJfaWQ7Ci0r CQlwdWJsaWMgd2VhayBYa2wuRW5naW5lIGVuZ2luZTsKLSsJCXB1YmxpYyB2b2lkIGFjdGl2YXRl ICgpOwotKwkJcHVibGljIHZvaWQgZnJlZV9pbWFnZV9maWxlbmFtZXMgKCk7Ci0rCQlwdWJsaWMg c3RyaW5nIGdldF9mZ19jb2xvcl9mb3Jfd2lkZ2V0IChHdGsuV2lkZ2V0IHdpZGdldCk7Ci0rCQlw dWJsaWMgdm9pZCBnZXRfZm9udF9mb3Jfd2lkZ2V0IChHdGsuV2lkZ2V0IHdpZGdldCwgc3RyaW5n IGZvbnRfZmFtaWx5LCBpbnQgZm9udF9zaXplKTsKLSsJCXB1YmxpYyBzdHJpbmcgZ2V0X2ltYWdl c19maWxlIChHa2JkLktleWJvYXJkQ29uZmlnIGtiZF9jb25maWcsIGludCBncm91cCk7Ci0rCQlw dWJsaWMgdm9pZCBpbml0IChYa2wuRW5naW5lIGVuZ2luZSk7Ci0rCQlwdWJsaWMgdm9pZCBsb2Fk ICgpOwotKwkJcHVibGljIHZvaWQgbG9hZF9pbWFnZV9maWxlbmFtZXMgKEdrYmQuS2V5Ym9hcmRD b25maWcga2JkX2NvbmZpZyk7Ci0rCQlwdWJsaWMgdm9pZCByZWZyZXNoX3N0eWxlICgpOwotKwkJ cHVibGljIHZvaWQgc2F2ZSAoKTsKLSsJCXB1YmxpYyB2b2lkIHN0YXJ0X2xpc3RlbiAoR0xpYi5D YWxsYmFjayBmdW5jKTsKLSsJCXB1YmxpYyB2b2lkIHN0b3BfbGlzdGVuICgpOwotKwkJcHVibGlj IHZvaWQgdGVybSAoKTsKLSsJfQotKwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25v bWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiLCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0KLSsJcHVi bGljIHN0cnVjdCBJbmRpY2F0b3JQbHVnaW4gewotKwkJcHVibGljIHdlYWsgc3RyaW5nIG5hbWU7 Ci0rCQlwdWJsaWMgd2VhayBzdHJpbmcgZGVzY3JpcHRpb247Ci0rCQlwdWJsaWMgd2VhayBHa2Jk LkluZGljYXRvclBsdWdpbkluaXRGdW5jIGluaXRfY2FsbGJhY2s7Ci0rCQlwdWJsaWMgd2VhayBH a2JkLkluZGljYXRvclBsdWdpblRlcm1GdW5jIHRlcm1fY2FsbGJhY2s7Ci0rCQlwdWJsaWMgd2Vh ayBHa2JkLkluZGljYXRvclBsdWdpbkNvbmZpZ3VyZVByb3BlcnRpZXMgY29uZmlndXJlX3Byb3Bl cnRpZXNfY2FsbGJhY2s7Ci0rCQlwdWJsaWMgd2VhayBHa2JkLkluZGljYXRvclBsdWdpbkdyb3Vw Q2hhbmdlZEZ1bmMgZ3JvdXBfY2hhbmdlZF9jYWxsYmFjazsKLSsJCXB1YmxpYyB3ZWFrIEdrYmQu SW5kaWNhdG9yUGx1Z2luV2luZG93Q3JlYXRlZEZ1bmMgd2luZG93X2NyZWF0ZWRfY2FsbGJhY2s7 Ci0rCQlwdWJsaWMgd2VhayBHa2JkLkluZGljYXRvclBsdWdpbkNvbmZpZ0NoYW5nZWRGdW5jIGNv bmZpZ19jaGFuZ2VkX2NhbGxiYWNrOwotKwkJcHVibGljIHN0YXRpYyB1aW50IGdldF9udW1fZ3Jv dXBzIChHa2JkLkluZGljYXRvclBsdWdpbkNvbnRhaW5lciBwYyk7Ci0rCQlbQ0NvZGUgKGFycmF5 X2xlbmd0aCA9IGZhbHNlLCBhcnJheV9udWxsX3Rlcm1pbmF0ZWQgPSB0cnVlKV0KLSsJCXB1Ymxp YyBzdGF0aWMgdW5vd25lZCBzdHJpbmdbXSBsb2FkX2xvY2FsaXplZF9ncm91cF9uYW1lcyAoR2ti ZC5JbmRpY2F0b3JQbHVnaW5Db250YWluZXIgcGMpOwotKwl9Ci0rCVtDQ29kZSAoY2hlYWRlcl9m aWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRpb24uaCIsIGhhc190eXBlX2lk ID0gZmFsc2UpXQotKwlwdWJsaWMgc3RydWN0IEluZGljYXRvclBsdWdpbkNvbnRhaW5lciB7Ci0r CQlwdWJsaWMgd2VhayBHTGliLlNldHRpbmdzIHNldHRpbmdzOwotKwkJcHVibGljIHZvaWQgaW5p dCAoKTsKLSsJCXB1YmxpYyB2b2lkIHJlaW5pdF91aSAoKTsKLSsJCXB1YmxpYyB2b2lkIHRlcm0g KCk7Ci0rCX0KLSsJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYmdub21la2JkL2drYmQt Y29uZmlndXJhdGlvbi5oIiwgaGFzX3R5cGVfaWQgPSBmYWxzZSldCi0rCXB1YmxpYyBzdHJ1Y3Qg SW5kaWNhdG9yUGx1Z2luTWFuYWdlciB7Ci0rCQlwdWJsaWMgd2VhayBHTGliLkhhc2hUYWJsZTx2 b2lkKix2b2lkKj4gYWxsX3BsdWdpbl9yZWNzOwotKwkJcHVibGljIHdlYWsgR0xpYi5TTGlzdDx2 b2lkKj4gaW5pdGVkX3BsdWdpbl9yZWNzOwotKwkJcHVibGljIHZvaWQgY29uZmlnX2NoYW5nZWQg KEdrYmQuS2V5Ym9hcmRDb25maWcgZnJvbSwgR2tiZC5LZXlib2FyZENvbmZpZyB0byk7Ci0rCQlw dWJsaWMgdm9pZCBjb25maWd1cmVfcGx1Z2luIChHa2JkLkluZGljYXRvclBsdWdpbkNvbnRhaW5l ciBwYywgc3RyaW5nIGZ1bGxfcGF0aCwgR3RrLldpbmRvdyBwYXJlbnQpOwotKwkJcHVibGljIEd0 ay5XaWRnZXQgZGVjb3JhdGVfd2lkZ2V0IChHdGsuV2lkZ2V0IHdpZGdldCwgaW50IGdyb3VwLCBz dHJpbmcgZ3JvdXBfZGVzY3JpcHRpb24sIEdrYmQuS2V5Ym9hcmRDb25maWcgY29uZmlnKTsKLSsJ CXB1YmxpYyB2b2lkIGRlbW90ZV9wbHVnaW4gKHN0cmluZyBlbmFibGVkX3BsdWdpbnMsIHN0cmlu ZyBmdWxsX3BhdGgpOwotKwkJcHVibGljIHZvaWQgZGlzYWJsZV9wbHVnaW4gKHN0cmluZyBlbmFi bGVkX3BsdWdpbnMsIHN0cmluZyBmdWxsX3BhdGgpOwotKwkJcHVibGljIHZvaWQgZW5hYmxlX3Bs dWdpbiAoc3RyaW5nIGVuYWJsZWRfcGx1Z2lucywgc3RyaW5nIGZ1bGxfcGF0aCk7Ci0rCQlwdWJs aWMgR2tiZC5JbmRpY2F0b3JQbHVnaW4gZ2V0X3BsdWdpbiAoc3RyaW5nIGZ1bGxfcGF0aCk7Ci0r CQlwdWJsaWMgdm9pZCBncm91cF9jaGFuZ2VkIChHdGsuV2lkZ2V0IG5vdGVib29rLCBpbnQgbmV3 X2dyb3VwKTsKLSsJCXB1YmxpYyB2b2lkIGluaXQgKCk7Ci0rCQlwdWJsaWMgdm9pZCBpbml0X2Vu YWJsZWRfcGx1Z2lucyAoR2tiZC5JbmRpY2F0b3JQbHVnaW5Db250YWluZXIgcGMsIHN0cmluZyBl bmFibGVkX3BsdWdpbnMpOwotKwkJcHVibGljIHZvaWQgcHJvbW90ZV9wbHVnaW4gKHN0cmluZyBl bmFibGVkX3BsdWdpbnMsIHN0cmluZyBmdWxsX3BhdGgpOwotKwkJcHVibGljIHZvaWQgdGVybSAo KTsKLSsJCXB1YmxpYyB2b2lkIHRlcm1faW5pdGlhbGl6ZWRfcGx1Z2lucyAoKTsKLSsJCXB1Ymxp YyB2b2lkIHRvZ2dsZV9wbHVnaW5zIChHa2JkLkluZGljYXRvclBsdWdpbkNvbnRhaW5lciBwYywg c3RyaW5nIGVuYWJsZWRfcGx1Z2lucyk7Ci0rCQlwdWJsaWMgaW50IHdpbmRvd19jcmVhdGVkIChY LldpbmRvdyB3aW4sIFguV2luZG93IHBhcmVudCk7Ci0rCX0KLSsJW0NDb2RlIChjaGVhZGVyX2Zp bGVuYW1lID0gImxpYmdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgaGFzX3R5cGVfaWQg PSBmYWxzZSldCi0rCXB1YmxpYyBzdHJ1Y3QgSW5kaWNhdG9yUGx1Z2luTWFuYWdlclJlY29yZCB7 Ci0rCQlwdWJsaWMgd2VhayBzdHJpbmcgZnVsbF9wYXRoOwotKwkJcHVibGljIHdlYWsgR0xpYi5N b2R1bGUgbW9kdWxlOwotKwkJcHVibGljIEdrYmQuSW5kaWNhdG9yUGx1Z2luIHBsdWdpbjsKLSsJ fQotKwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1 cmF0aW9uLmgiLCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0KLSsJcHVibGljIHN0cnVjdCBLZXlib2Fy ZENvbmZpZyB7Ci0rCQlwdWJsaWMgd2VhayBzdHJpbmcgbW9kZWw7Ci0rCQlwdWJsaWMgd2VhayBz dHJpbmcgbGF5b3V0c192YXJpYW50czsKLSsJCXB1YmxpYyB3ZWFrIHN0cmluZyBvcHRpb25zOwot KwkJcHVibGljIHdlYWsgR0xpYi5TZXR0aW5ncyBzZXR0aW5nczsKLSsJCXB1YmxpYyBpbnQgY29u ZmlnX2xpc3RlbmVyX2lkOwotKwkJcHVibGljIHdlYWsgWGtsLkVuZ2luZSBlbmdpbmU7Ci0rCQlw dWJsaWMgYm9vbCBhY3RpdmF0ZSAoKTsKLSsJCVtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2Us IGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUpXQotKwkJcHVibGljIHN0YXRpYyBzdHJpbmdb XSBhZGRfZGVmYXVsdF9zd2l0Y2hfb3B0aW9uX2lmX25lY2Vzc2FyeSAoc3RyaW5nIGxheW91dHNf bGlzdCwgc3RyaW5nIG9wdGlvbnNfbGlzdCwgYm9vbCB3YXNfYXBwZW5kZWQpOwotKwkJcHVibGlj IGJvb2wgZXF1YWxzIChHa2JkLktleWJvYXJkQ29uZmlnIGtiZF9jb25maWcyKTsKLSsJCXB1Ymxp YyBzdGF0aWMgdW5vd25lZCBzdHJpbmcgZm9ybWF0X2Z1bGxfZGVzY3JpcHRpb24gKHN0cmluZyBs YXlvdXRfZGVzY3IsIHN0cmluZyB2YXJpYW50X2Rlc2NyKTsKLSsJCXB1YmxpYyBzdGF0aWMgYm9v bCBnZXRfZGVzY3JpcHRpb25zIChYa2wuQ29uZmlnUmVnaXN0cnkgY29uZmlnX3JlZ2lzdHJ5LCBz dHJpbmcgbmFtZSwgc3RyaW5nIGxheW91dF9zaG9ydF9kZXNjciwgc3RyaW5nIGxheW91dF9kZXNj ciwgc3RyaW5nIHZhcmlhbnRfc2hvcnRfZGVzY3IsIHN0cmluZyB2YXJpYW50X2Rlc2NyKTsKLSsJ CXB1YmxpYyB2b2lkIGluaXQgKFhrbC5FbmdpbmUgZW5naW5lKTsKLSsJCXB1YmxpYyB2b2lkIGxv YWQgKEdrYmQuS2V5Ym9hcmRDb25maWcga2JkX2NvbmZpZ19kZWZhdWx0KTsKLSsJCXB1YmxpYyB2 b2lkIGxvYWRfZnJvbV94X2N1cnJlbnQgKFhrbC5Db25maWdSZWMgYnVmKTsKLSsJCXB1YmxpYyB2 b2lkIGxvYWRfZnJvbV94X2luaXRpYWwgKFhrbC5Db25maWdSZWMgYnVmKTsKLSsJCXB1YmxpYyBz dGF0aWMgdW5vd25lZCBzdHJpbmcgbWVyZ2VfaXRlbXMgKHN0cmluZyBwYXJlbnQsIHN0cmluZyBj aGlsZCk7Ci0rCQlwdWJsaWMgdm9pZCBzYXZlICgpOwotKwkJcHVibGljIHN0YXRpYyBib29sIHNw bGl0X2l0ZW1zIChzdHJpbmcgbWVyZ2VkLCBzdHJpbmcgcGFyZW50LCBzdHJpbmcgY2hpbGQpOwot KwkJcHVibGljIHZvaWQgc3RhcnRfbGlzdGVuIChHTGliLkNhbGxiYWNrIGZ1bmMpOwotKwkJcHVi bGljIHZvaWQgc3RvcF9saXN0ZW4gKCk7Ci0rCQlwdWJsaWMgdm9pZCB0ZXJtICgpOwotKwkJcHVi bGljIHN0cmluZyB0b19zdHJpbmcgKCk7Ci0rCX0KLSsJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1l ID0gImxpYmdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgaGFzX3R5cGVfaWQgPSBmYWxz ZSldCi0rCXB1YmxpYyBzdHJ1Y3QgS2V5Ym9hcmREcmF3aW5nRG9vZGFkIHsKLSsJfQotKwlbQ0Nv ZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgi LCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0KLSsJcHVibGljIHN0cnVjdCBLZXlib2FyZERyYXdpbmdH cm91cExldmVsIHsKLSsJCXB1YmxpYyBpbnQgZ3JvdXA7Ci0rCQlwdWJsaWMgaW50IGxldmVsOwot Kwl9Ci0rCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZp Z3VyYXRpb24uaCIsIGhhc190eXBlX2lkID0gZmFsc2UpXQotKwlwdWJsaWMgc3RydWN0IEtleWJv YXJkRHJhd2luZ0l0ZW0gewotKwl9Ci0rCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJn bm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRpb24uaCIsIGhhc190eXBlX2lkID0gZmFsc2UpXQotKwlw dWJsaWMgc3RydWN0IEtleWJvYXJkRHJhd2luZ0tleSB7Ci0rCX0KLSsJW0NDb2RlIChjaGVhZGVy X2ZpbGVuYW1lID0gImxpYmdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgaGFzX3R5cGVf aWQgPSBmYWxzZSldCi0rCXB1YmxpYyBzdHJ1Y3QgS2V5Ym9hcmREcmF3aW5nUmVuZGVyQ29udGV4 dCB7Ci0rCQlwdWJsaWMgd2VhayBDYWlyby5Db250ZXh0IGNyOwotKwkJcHVibGljIGludCBhbmds ZTsKLSsJCXB1YmxpYyB3ZWFrIFBhbmdvLkxheW91dCBsYXlvdXQ7Ci0rCQlwdWJsaWMgd2VhayBQ YW5nby5Gb250RGVzY3JpcHRpb24gZm9udF9kZXNjOwotKwkJcHVibGljIGludCBzY2FsZV9udW1l cmF0b3I7Ci0rCQlwdWJsaWMgaW50IHNjYWxlX2Rlbm9taW5hdG9yOwotKwkJcHVibGljIEdkay5S R0JBIGRhcmtfY29sb3I7Ci0rCX0KLSsJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYmdu b21la2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgY3ByZWZpeCA9ICJHS0JEX0tFWUJPQVJEX0RS QVdJTkdfUE9TXyIpXQotKwlwdWJsaWMgZW51bSBLZXlib2FyZERyYXdpbmdHcm91cExldmVsUG9z aXRpb24gewotKwkJVE9QTEVGVCwKLSsJCVRPUFJJR0hULAotKwkJQk9UVE9NTEVGVCwKLSsJCUJP VFRPTVJJR0hULAotKwkJVE9UQUwsCi0rCQlGSVJTVCwKLSsJCUxBU1QKLSsJfQotKwlbQ0NvZGUg KGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiLCBj cHJlZml4ID0gIkdLQkRfS0VZQk9BUkRfRFJBV0lOR19JVEVNX1RZUEVfIildCi0rCXB1YmxpYyBl bnVtIEtleWJvYXJkRHJhd2luZ0l0ZW1UeXBlIHsKLSsJCUlOVkFMSUQsCi0rCQlLRVksCi0rCQlL RVlfRVhUUkEsCi0rCQlET09EQUQKLSsJfQotKwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAi bGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiLCBoYXNfdGFyZ2V0ID0gZmFsc2UpXQot KwlwdWJsaWMgZGVsZWdhdGUgdm9pZCBJbmRpY2F0b3JQbHVnaW5Db25maWdDaGFuZ2VkRnVuYyAo R2tiZC5LZXlib2FyZENvbmZpZyBmcm9tLCBHa2JkLktleWJvYXJkQ29uZmlnIHRvKTsKLSsJW0ND b2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYmdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5o IiwgaGFzX3RhcmdldCA9IGZhbHNlKV0KLSsJcHVibGljIGRlbGVnYXRlIHZvaWQgSW5kaWNhdG9y UGx1Z2luQ29uZmlndXJlUHJvcGVydGllcyAoR2tiZC5JbmRpY2F0b3JQbHVnaW5Db250YWluZXIg cGMsIEd0ay5XaW5kb3cgcGFyZW50KTsKLSsJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxp Ymdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgaGFzX3RhcmdldCA9IGZhbHNlKV0KLSsJ cHVibGljIGRlbGVnYXRlIHZvaWQqIEluZGljYXRvclBsdWdpbkdldFBsdWdpbkZ1bmMgKCk7Ci0r CVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRp b24uaCIsIGhhc190YXJnZXQgPSBmYWxzZSldCi0rCXB1YmxpYyBkZWxlZ2F0ZSB2b2lkIEluZGlj YXRvclBsdWdpbkdyb3VwQ2hhbmdlZEZ1bmMgKEd0ay5XaWRnZXQgbm90ZWJvb2ssIGludCBuZXdf Z3JvdXApOwotKwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1j b25maWd1cmF0aW9uLmgiLCBoYXNfdGFyZ2V0ID0gZmFsc2UpXQotKwlwdWJsaWMgZGVsZWdhdGUg Ym9vbCBJbmRpY2F0b3JQbHVnaW5Jbml0RnVuYyAoR2tiZC5JbmRpY2F0b3JQbHVnaW5Db250YWlu ZXIgcGMpOwotKwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1j b25maWd1cmF0aW9uLmgiLCBoYXNfdGFyZ2V0ID0gZmFsc2UpXQotKwlwdWJsaWMgZGVsZWdhdGUg dm9pZCBJbmRpY2F0b3JQbHVnaW5UZXJtRnVuYyAoKTsKLSsJW0NDb2RlIChjaGVhZGVyX2ZpbGVu YW1lID0gImxpYmdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgaGFzX3RhcmdldCA9IGZh bHNlKV0KLSsJcHVibGljIGRlbGVnYXRlIGludCBJbmRpY2F0b3JQbHVnaW5XaW5kb3dDcmVhdGVk RnVuYyAoWC5XaW5kb3cgd2luLCBYLldpbmRvdyBwYXJlbnQpOwotKwlbQ0NvZGUgKGNoZWFkZXJf ZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiLCBjbmFtZSA9ICJH S0JEX0RFU0tUT1BfU0NIRU1BIildCi0rCXB1YmxpYyBjb25zdCBzdHJpbmcgREVTS1RPUF9TQ0hF TUE7Ci0rCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZp Z3VyYXRpb24uaCIsIGNuYW1lID0gIkdLQkRfS0VZQk9BUkRfRFJBV0lOR19IIildCi0rCXB1Ymxp YyBjb25zdCBpbnQgS0VZQk9BUkRfRFJBV0lOR19IOwotKwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5h bWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiLCBjbmFtZSA9ICJHS0JEX0tF WUJPQVJEX1NDSEVNQSIpXQotKwlwdWJsaWMgY29uc3Qgc3RyaW5nIEtFWUJPQVJEX1NDSEVNQTsK LSsJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYmdub21la2JkL2drYmQtY29uZmlndXJh dGlvbi5oIildCi0rCXB1YmxpYyBzdGF0aWMgdm9pZCBpbnN0YWxsX2dsaWJfbG9nX2FwcGVuZGVy ICgpOwotKwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25m aWd1cmF0aW9uLmgiKV0KLSsJcHVibGljIHN0YXRpYyBHZGsuUmVjdGFuZ2xlIHByZXZpZXdfbG9h ZF9wb3NpdGlvbiAoKTsKLSsJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYmdub21la2Jk L2drYmQtY29uZmlndXJhdGlvbi5oIildCi0rCXB1YmxpYyBzdGF0aWMgdm9pZCBwcmV2aWV3X3Nh dmVfcG9zaXRpb24gKEdkay5SZWN0YW5nbGUgcmVjdCk7Ci0rCVtDQ29kZSAoYXJyYXlfbGVuZ3Ro ID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRlZCA9IHRydWUsIGNoZWFkZXJfZmlsZW5hbWUg PSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiKV0KLSsJcHVibGljIHN0YXRpYyBz dHJpbmdbXSBzdHJ2X2FwcGVuZCAoc3RyaW5nIGFyciwgc3RyaW5nIGVsZW1lbnQpOwotKwlbQ0Nv ZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgi KV0KLSsJcHVibGljIHN0YXRpYyB2b2lkIHN0cnZfYmVoZWFkIChzdHJpbmcgYXJyKTsKLSsJW0ND b2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYmdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5o IildCi0rCXB1YmxpYyBzdGF0aWMgYm9vbCBzdHJ2X3JlbW92ZSAoc3RyaW5nIGFyciwgc3RyaW5n IGVsZW1lbnQpOwotK30KLS0tLSBpYnVzL3VpL2d0azMvZ2tiZGxheW91dC5jLmZhbHNlLm9yaWcJ MjAxMi0wMy0wOSAxNjo0Mjo1OS42ODg2Mzk4ODIgKzA5MDAKLSsrKyBpYnVzL3VpL2d0azMvZ2ti ZGxheW91dC5jLmZhbHNlCTIwMTItMDMtMDkgMTY6NDI6NTMuOTUwNTM1ODM2ICswOTAwCi1AQCAt MCwwICsxLDMwNyBAQAotKy8qIGdrYmRsYXlvdXQuYyBnZW5lcmF0ZWQgYnkgdmFsYWMgMC4xNS4x LCB0aGUgVmFsYSBjb21waWxlcgotKyAqIGdlbmVyYXRlZCBmcm9tIGdrYmRsYXlvdXQudmFsYSwg ZG8gbm90IG1vZGlmeSAqLwotKwotKy8qIHZpbTpzZXQgZXQgc3RzPTQgc3c9NDoKLSsgKgotKyAq IGlidXMgLSBUaGUgSW5wdXQgQnVzCi0rICoKLSsgKiBDb3B5cmlnaHQgMjAxMiBSZWQgSGF0LCBJ bmMuCi0rICogQ29weXJpZ2h0KGMpIDIwMTIgUGVuZyBIdWFuZyA8c2hhd24ucC5odWFuZ0BnbWFp bC5jb20+Ci0rICogQ29weXJpZ2h0KGMpIDIwMTIgVGFrYW8gRnVqaXdhcmEgPHRmdWppd2FyQHJl ZGhhdC5jb20+Ci0rICoKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0rICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotKyAqIHZlcnNpb24gMiBv ZiB0aGUgTGljZW5zZSwgb3IoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKyAq Ci0rICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCi0rICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rICogR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rICoKLSsgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0rICog TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSsg KiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUg MzMwLAotKyAqIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotKyAqLwotKwotKyNpbmNsdWRl IDxnbGliLmg+Ci0rI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5o PgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Z29iamVjdC9ndmFsdWVjb2xsZWN0 b3IuaD4KLSsKLSsKLSsjZGVmaW5lIFRZUEVfR0tCRF9MQVlPVVQgKGdrYmRfbGF5b3V0X2dldF90 eXBlICgpKQotKyNkZWZpbmUgR0tCRF9MQVlPVVQob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNF X0NBU1QgKChvYmopLCBUWVBFX0dLQkRfTEFZT1VULCBHa2JkTGF5b3V0KSkKLSsjZGVmaW5lIEdL QkRfTEFZT1VUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyks IFRZUEVfR0tCRF9MQVlPVVQsIEdrYmRMYXlvdXRDbGFzcykpCi0rI2RlZmluZSBJU19HS0JEX0xB WU9VVChvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFRZUEVfR0tCRF9M QVlPVVQpKQotKyNkZWZpbmUgSVNfR0tCRF9MQVlPVVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF Q0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgVFlQRV9HS0JEX0xBWU9VVCkpCi0rI2RlZmluZSBHS0JE X0xBWU9VVF9HRVRfQ0xBU1Mob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiks IFRZUEVfR0tCRF9MQVlPVVQsIEdrYmRMYXlvdXRDbGFzcykpCi0rCi0rdHlwZWRlZiBzdHJ1Y3Qg X0drYmRMYXlvdXQgR2tiZExheW91dDsKLSt0eXBlZGVmIHN0cnVjdCBfR2tiZExheW91dENsYXNz IEdrYmRMYXlvdXRDbGFzczsKLSt0eXBlZGVmIHN0cnVjdCBfR2tiZExheW91dFByaXZhdGUgR2ti ZExheW91dFByaXZhdGU7Ci0rdHlwZWRlZiBzdHJ1Y3QgX1BhcmFtU3BlY0drYmRMYXlvdXQgUGFy YW1TcGVjR2tiZExheW91dDsKLSsKLStzdHJ1Y3QgX0drYmRMYXlvdXQgewotKwlHVHlwZUluc3Rh bmNlIHBhcmVudF9pbnN0YW5jZTsKLSsJdm9sYXRpbGUgaW50IHJlZl9jb3VudDsKLSsJR2tiZExh eW91dFByaXZhdGUgKiBwcml2OwotK307Ci0rCi0rc3RydWN0IF9Ha2JkTGF5b3V0Q2xhc3Mgewot KwlHVHlwZUNsYXNzIHBhcmVudF9jbGFzczsKLSsJdm9pZCAoKmZpbmFsaXplKSAoR2tiZExheW91 dCAqc2VsZik7Ci0rfTsKLSsKLStzdHJ1Y3QgX1BhcmFtU3BlY0drYmRMYXlvdXQgewotKwlHUGFy YW1TcGVjIHBhcmVudF9pbnN0YW5jZTsKLSt9OwotKwotKwotK3N0YXRpYyBncG9pbnRlciBna2Jk X2xheW91dF9wYXJlbnRfY2xhc3MgPSBOVUxMOwotKwotK2dwb2ludGVyIGdrYmRfbGF5b3V0X3Jl ZiAoZ3BvaW50ZXIgaW5zdGFuY2UpOwotK3ZvaWQgZ2tiZF9sYXlvdXRfdW5yZWYgKGdwb2ludGVy IGluc3RhbmNlKTsKLStHUGFyYW1TcGVjKiBwYXJhbV9zcGVjX2drYmRfbGF5b3V0IChjb25zdCBn Y2hhciogbmFtZSwgY29uc3QgZ2NoYXIqIG5pY2ssIGNvbnN0IGdjaGFyKiBibHVyYiwgR1R5cGUg b2JqZWN0X3R5cGUsIEdQYXJhbUZsYWdzIGZsYWdzKTsKLSt2b2lkIHZhbHVlX3NldF9na2JkX2xh eW91dCAoR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdl9vYmplY3QpOwotK3ZvaWQgdmFsdWVfdGFr ZV9na2JkX2xheW91dCAoR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdl9vYmplY3QpOwotK2dwb2lu dGVyIHZhbHVlX2dldF9na2JkX2xheW91dCAoY29uc3QgR1ZhbHVlKiB2YWx1ZSk7Ci0rR1R5cGUg Z2tiZF9sYXlvdXRfZ2V0X3R5cGUgKHZvaWQpIEdfR05VQ19DT05TVDsKLStlbnVtICB7Ci0rCUdL QkRfTEFZT1VUX0RVTU1ZX1BST1BFUlRZCi0rfTsKLStHa2JkTGF5b3V0KiBna2JkX2xheW91dF9u ZXcgKHZvaWQpOwotK0drYmRMYXlvdXQqIGdrYmRfbGF5b3V0X2NvbnN0cnVjdCAoR1R5cGUgb2Jq ZWN0X3R5cGUpOwotK2djaGFyKiogZ2tiZF9sYXlvdXRfZ2V0X2xheW91dHMgKEdrYmRMYXlvdXQq IHNlbGYsIGludCogcmVzdWx0X2xlbmd0aDEpOwotK2djaGFyKiogZ2tiZF9sYXlvdXRfZ2V0X2dy b3VwX25hbWVzIChHa2JkTGF5b3V0KiBzZWxmLCBpbnQqIHJlc3VsdF9sZW5ndGgxKTsKLSt2b2lk IGdrYmRfbGF5b3V0X2xvY2tfZ3JvdXAgKEdrYmRMYXlvdXQqIHNlbGYsIGdpbnQgaWQpOwotK3Zv aWQgZ2tiZF9sYXlvdXRfc3RhcnRfbGlzdGVuIChHa2JkTGF5b3V0KiBzZWxmKTsKLSt2b2lkIGdr YmRfbGF5b3V0X3N0b3BfbGlzdGVuIChHa2JkTGF5b3V0KiBzZWxmKTsKLStzdGF0aWMgdm9pZCBn a2JkX2xheW91dF9maW5hbGl6ZSAoR2tiZExheW91dCogb2JqKTsKLSsKLSsKLStHa2JkTGF5b3V0 KiBna2JkX2xheW91dF9jb25zdHJ1Y3QgKEdUeXBlIG9iamVjdF90eXBlKSB7Ci0rCUdrYmRMYXlv dXQqIHNlbGYgPSBOVUxMOwotKwlzZWxmID0gKEdrYmRMYXlvdXQqKSBnX3R5cGVfY3JlYXRlX2lu c3RhbmNlIChvYmplY3RfdHlwZSk7Ci0rCXJldHVybiBzZWxmOwotK30KLSsKLSsKLStHa2JkTGF5 b3V0KiBna2JkX2xheW91dF9uZXcgKHZvaWQpIHsKLSsJcmV0dXJuIGdrYmRfbGF5b3V0X2NvbnN0 cnVjdCAoVFlQRV9HS0JEX0xBWU9VVCk7Ci0rfQotKwotKwotK2djaGFyKiogZ2tiZF9sYXlvdXRf Z2V0X2xheW91dHMgKEdrYmRMYXlvdXQqIHNlbGYsIGludCogcmVzdWx0X2xlbmd0aDEpIHsKLSsJ Z2NoYXIqKiByZXN1bHQgPSBOVUxMOwotKwlnY2hhcioqIF90bXAwXyA9IE5VTEw7Ci0rCWdjaGFy KiogX3RtcDFfOwotKwlnaW50IF90bXAxX19sZW5ndGgxOwotKwlnX3JldHVybl92YWxfaWZfZmFp bCAoc2VsZiAhPSBOVUxMLCBOVUxMKTsKLSsJX3RtcDBfID0gZ19uZXcwIChnY2hhciosIDAgKyAx KTsKLSsJX3RtcDFfID0gX3RtcDBfOwotKwlfdG1wMV9fbGVuZ3RoMSA9IDA7Ci0rCWlmIChyZXN1 bHRfbGVuZ3RoMSkgewotKwkJKnJlc3VsdF9sZW5ndGgxID0gX3RtcDFfX2xlbmd0aDE7Ci0rCX0K LSsJcmVzdWx0ID0gX3RtcDFfOwotKwlyZXR1cm4gcmVzdWx0OwotK30KLSsKLSsKLStnY2hhcioq IGdrYmRfbGF5b3V0X2dldF9ncm91cF9uYW1lcyAoR2tiZExheW91dCogc2VsZiwgaW50KiByZXN1 bHRfbGVuZ3RoMSkgewotKwlnY2hhcioqIHJlc3VsdCA9IE5VTEw7Ci0rCWdjaGFyKiogX3RtcDBf ID0gTlVMTDsKLSsJZ2NoYXIqKiBfdG1wMV87Ci0rCWdpbnQgX3RtcDFfX2xlbmd0aDE7Ci0rCWdf cmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmICE9IE5VTEwsIE5VTEwpOwotKwlfdG1wMF8gPSBnX25l dzAgKGdjaGFyKiwgMCArIDEpOwotKwlfdG1wMV8gPSBfdG1wMF87Ci0rCV90bXAxX19sZW5ndGgx ID0gMDsKLSsJaWYgKHJlc3VsdF9sZW5ndGgxKSB7Ci0rCQkqcmVzdWx0X2xlbmd0aDEgPSBfdG1w MV9fbGVuZ3RoMTsKLSsJfQotKwlyZXN1bHQgPSBfdG1wMV87Ci0rCXJldHVybiByZXN1bHQ7Ci0r fQotKwotKwotK3ZvaWQgZ2tiZF9sYXlvdXRfbG9ja19ncm91cCAoR2tiZExheW91dCogc2VsZiwg Z2ludCBpZCkgewotKwlnX3JldHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOwotK30KLSsKLSsK LSt2b2lkIGdrYmRfbGF5b3V0X3N0YXJ0X2xpc3RlbiAoR2tiZExheW91dCogc2VsZikgewotKwln X3JldHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOwotK30KLSsKLSsKLSt2b2lkIGdrYmRfbGF5 b3V0X3N0b3BfbGlzdGVuIChHa2JkTGF5b3V0KiBzZWxmKSB7Ci0rCWdfcmV0dXJuX2lmX2ZhaWwg KHNlbGYgIT0gTlVMTCk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHZhbHVlX2drYmRfbGF5b3V0 X2luaXQgKEdWYWx1ZSogdmFsdWUpIHsKLSsJdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gTlVM TDsKLSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgdmFsdWVfZ2tiZF9sYXlvdXRfZnJlZV92YWx1ZSAo R1ZhbHVlKiB2YWx1ZSkgewotKwlpZiAodmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKSB7Ci0rCQln a2JkX2xheW91dF91bnJlZiAodmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKTsKLSsJfQotK30KLSsK LSsKLStzdGF0aWMgdm9pZCB2YWx1ZV9na2JkX2xheW91dF9jb3B5X3ZhbHVlIChjb25zdCBHVmFs dWUqIHNyY192YWx1ZSwgR1ZhbHVlKiBkZXN0X3ZhbHVlKSB7Ci0rCWlmIChzcmNfdmFsdWUtPmRh dGFbMF0udl9wb2ludGVyKSB7Ci0rCQlkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IGdr YmRfbGF5b3V0X3JlZiAoc3JjX3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcik7Ci0rCX0gZWxzZSB7 Ci0rCQlkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IE5VTEw7Ci0rCX0KLSt9Ci0rCi0r Ci0rc3RhdGljIGdwb2ludGVyIHZhbHVlX2drYmRfbGF5b3V0X3BlZWtfcG9pbnRlciAoY29uc3Qg R1ZhbHVlKiB2YWx1ZSkgewotKwlyZXR1cm4gdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOwotK30K LSsKLSsKLStzdGF0aWMgZ2NoYXIqIHZhbHVlX2drYmRfbGF5b3V0X2NvbGxlY3RfdmFsdWUgKEdW YWx1ZSogdmFsdWUsIGd1aW50IG5fY29sbGVjdF92YWx1ZXMsIEdUeXBlQ1ZhbHVlKiBjb2xsZWN0 X3ZhbHVlcywgZ3VpbnQgY29sbGVjdF9mbGFncykgewotKwlpZiAoY29sbGVjdF92YWx1ZXNbMF0u dl9wb2ludGVyKSB7Ci0rCQlHa2JkTGF5b3V0KiBvYmplY3Q7Ci0rCQlvYmplY3QgPSBjb2xsZWN0 X3ZhbHVlc1swXS52X3BvaW50ZXI7Ci0rCQlpZiAob2JqZWN0LT5wYXJlbnRfaW5zdGFuY2UuZ19j bGFzcyA9PSBOVUxMKSB7Ci0rCQkJcmV0dXJuIGdfc3RyY29uY2F0ICgiaW52YWxpZCB1bmNsYXNz ZWQgb2JqZWN0IHBvaW50ZXIgZm9yIHZhbHVlIHR5cGUgYCIsIEdfVkFMVUVfVFlQRV9OQU1FICh2 YWx1ZSksICInIiwgTlVMTCk7Ci0rCQl9IGVsc2UgaWYgKCFnX3ZhbHVlX3R5cGVfY29tcGF0aWJs ZSAoR19UWVBFX0ZST01fSU5TVEFOQ0UgKG9iamVjdCksIEdfVkFMVUVfVFlQRSAodmFsdWUpKSkg ewotKwkJCXJldHVybiBnX3N0cmNvbmNhdCAoImludmFsaWQgb2JqZWN0IHR5cGUgYCIsIGdfdHlw ZV9uYW1lIChHX1RZUEVfRlJPTV9JTlNUQU5DRSAob2JqZWN0KSksICInIGZvciB2YWx1ZSB0eXBl IGAiLCBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpLCAiJyIsIE5VTEwpOwotKwkJfQotKwkJdmFs dWUtPmRhdGFbMF0udl9wb2ludGVyID0gZ2tiZF9sYXlvdXRfcmVmIChvYmplY3QpOwotKwl9IGVs c2UgewotKwkJdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gTlVMTDsKLSsJfQotKwlyZXR1cm4g TlVMTDsKLSt9Ci0rCi0rCi0rc3RhdGljIGdjaGFyKiB2YWx1ZV9na2JkX2xheW91dF9sY29weV92 YWx1ZSAoY29uc3QgR1ZhbHVlKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywgR1R5cGVD VmFsdWUqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKSB7Ci0rCUdrYmRMYXlv dXQqKiBvYmplY3RfcDsKLSsJb2JqZWN0X3AgPSBjb2xsZWN0X3ZhbHVlc1swXS52X3BvaW50ZXI7 Ci0rCWlmICghb2JqZWN0X3ApIHsKLSsJCXJldHVybiBnX3N0cmR1cF9wcmludGYgKCJ2YWx1ZSBs b2NhdGlvbiBmb3IgYCVzJyBwYXNzZWQgYXMgTlVMTCIsIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1 ZSkpOwotKwl9Ci0rCWlmICghdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKSB7Ci0rCQkqb2JqZWN0 X3AgPSBOVUxMOwotKwl9IGVsc2UgaWYgKGNvbGxlY3RfZmxhZ3MgJiBHX1ZBTFVFX05PQ09QWV9D T05URU5UUykgewotKwkJKm9iamVjdF9wID0gdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOwotKwl9 IGVsc2UgewotKwkJKm9iamVjdF9wID0gZ2tiZF9sYXlvdXRfcmVmICh2YWx1ZS0+ZGF0YVswXS52 X3BvaW50ZXIpOwotKwl9Ci0rCXJldHVybiBOVUxMOwotK30KLSsKLSsKLStHUGFyYW1TcGVjKiBw YXJhbV9zcGVjX2drYmRfbGF5b3V0IChjb25zdCBnY2hhciogbmFtZSwgY29uc3QgZ2NoYXIqIG5p Y2ssIGNvbnN0IGdjaGFyKiBibHVyYiwgR1R5cGUgb2JqZWN0X3R5cGUsIEdQYXJhbUZsYWdzIGZs YWdzKSB7Ci0rCVBhcmFtU3BlY0drYmRMYXlvdXQqIHNwZWM7Ci0rCWdfcmV0dXJuX3ZhbF9pZl9m YWlsIChnX3R5cGVfaXNfYSAob2JqZWN0X3R5cGUsIFRZUEVfR0tCRF9MQVlPVVQpLCBOVUxMKTsK LSsJc3BlYyA9IGdfcGFyYW1fc3BlY19pbnRlcm5hbCAoR19UWVBFX1BBUkFNX09CSkVDVCwgbmFt ZSwgbmljaywgYmx1cmIsIGZsYWdzKTsKLSsJR19QQVJBTV9TUEVDIChzcGVjKS0+dmFsdWVfdHlw ZSA9IG9iamVjdF90eXBlOwotKwlyZXR1cm4gR19QQVJBTV9TUEVDIChzcGVjKTsKLSt9Ci0rCi0r Ci0rZ3BvaW50ZXIgdmFsdWVfZ2V0X2drYmRfbGF5b3V0IChjb25zdCBHVmFsdWUqIHZhbHVlKSB7 Ci0rCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX1RZUEVfQ0hFQ0tfVkFMVUVfVFlQRSAodmFsdWUs IFRZUEVfR0tCRF9MQVlPVVQpLCBOVUxMKTsKLSsJcmV0dXJuIHZhbHVlLT5kYXRhWzBdLnZfcG9p bnRlcjsKLSt9Ci0rCi0rCi0rdm9pZCB2YWx1ZV9zZXRfZ2tiZF9sYXlvdXQgKEdWYWx1ZSogdmFs dWUsIGdwb2ludGVyIHZfb2JqZWN0KSB7Ci0rCUdrYmRMYXlvdXQqIG9sZDsKLSsJZ19yZXR1cm5f aWZfZmFpbCAoR19UWVBFX0NIRUNLX1ZBTFVFX1RZUEUgKHZhbHVlLCBUWVBFX0dLQkRfTEFZT1VU KSk7Ci0rCW9sZCA9IHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKLSsJaWYgKHZfb2JqZWN0KSB7 Ci0rCQlnX3JldHVybl9pZl9mYWlsIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAodl9vYmpl Y3QsIFRZUEVfR0tCRF9MQVlPVVQpKTsKLSsJCWdfcmV0dXJuX2lmX2ZhaWwgKGdfdmFsdWVfdHlw ZV9jb21wYXRpYmxlIChHX1RZUEVfRlJPTV9JTlNUQU5DRSAodl9vYmplY3QpLCBHX1ZBTFVFX1RZ UEUgKHZhbHVlKSkpOwotKwkJdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gdl9vYmplY3Q7Ci0r CQlna2JkX2xheW91dF9yZWYgKHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcik7Ci0rCX0gZWxzZSB7 Ci0rCQl2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBOVUxMOwotKwl9Ci0rCWlmIChvbGQpIHsK LSsJCWdrYmRfbGF5b3V0X3VucmVmIChvbGQpOwotKwl9Ci0rfQotKwotKwotK3ZvaWQgdmFsdWVf dGFrZV9na2JkX2xheW91dCAoR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdl9vYmplY3QpIHsKLSsJ R2tiZExheW91dCogb2xkOwotKwlnX3JldHVybl9pZl9mYWlsIChHX1RZUEVfQ0hFQ0tfVkFMVUVf VFlQRSAodmFsdWUsIFRZUEVfR0tCRF9MQVlPVVQpKTsKLSsJb2xkID0gdmFsdWUtPmRhdGFbMF0u dl9wb2ludGVyOwotKwlpZiAodl9vYmplY3QpIHsKLSsJCWdfcmV0dXJuX2lmX2ZhaWwgKEdfVFlQ RV9DSEVDS19JTlNUQU5DRV9UWVBFICh2X29iamVjdCwgVFlQRV9HS0JEX0xBWU9VVCkpOwotKwkJ Z19yZXR1cm5faWZfZmFpbCAoZ192YWx1ZV90eXBlX2NvbXBhdGlibGUgKEdfVFlQRV9GUk9NX0lO U1RBTkNFICh2X29iamVjdCksIEdfVkFMVUVfVFlQRSAodmFsdWUpKSk7Ci0rCQl2YWx1ZS0+ZGF0 YVswXS52X3BvaW50ZXIgPSB2X29iamVjdDsKLSsJfSBlbHNlIHsKLSsJCXZhbHVlLT5kYXRhWzBd LnZfcG9pbnRlciA9IE5VTEw7Ci0rCX0KLSsJaWYgKG9sZCkgewotKwkJZ2tiZF9sYXlvdXRfdW5y ZWYgKG9sZCk7Ci0rCX0KLSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgZ2tiZF9sYXlvdXRfY2xhc3Nf aW5pdCAoR2tiZExheW91dENsYXNzICoga2xhc3MpIHsKLSsJZ2tiZF9sYXlvdXRfcGFyZW50X2Ns YXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0rCUdLQkRfTEFZT1VUX0NM QVNTIChrbGFzcyktPmZpbmFsaXplID0gZ2tiZF9sYXlvdXRfZmluYWxpemU7Ci0rCWdfc2lnbmFs X25ldyAoImNoYW5nZWQiLCBUWVBFX0dLQkRfTEFZT1VULCBHX1NJR05BTF9SVU5fTEFTVCwgMCwg TlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsIEdfVFlQRV9OT05FLCAw KTsKLSsJZ19zaWduYWxfbmV3ICgiZ3JvdXBfY2hhbmdlZCIsIFRZUEVfR0tCRF9MQVlPVVQsIEdf U0lHTkFMX1JVTl9MQVNULCAwLCBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9f SU5ULCBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX0lOVCk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lk IGdrYmRfbGF5b3V0X2luc3RhbmNlX2luaXQgKEdrYmRMYXlvdXQgKiBzZWxmKSB7Ci0rCXNlbGYt PnJlZl9jb3VudCA9IDE7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIGdrYmRfbGF5b3V0X2ZpbmFs aXplIChHa2JkTGF5b3V0KiBvYmopIHsKLSsJR2tiZExheW91dCAqIHNlbGY7Ci0rCXNlbGYgPSBH S0JEX0xBWU9VVCAob2JqKTsKLSt9Ci0rCi0rCi0rR1R5cGUgZ2tiZF9sYXlvdXRfZ2V0X3R5cGUg KHZvaWQpIHsKLSsJc3RhdGljIHZvbGF0aWxlIGdzaXplIGdrYmRfbGF5b3V0X3R5cGVfaWRfX3Zv bGF0aWxlID0gMDsKLSsJaWYgKGdfb25jZV9pbml0X2VudGVyICgmZ2tiZF9sYXlvdXRfdHlwZV9p ZF9fdm9sYXRpbGUpKSB7Ci0rCQlzdGF0aWMgY29uc3QgR1R5cGVWYWx1ZVRhYmxlIGdfZGVmaW5l X3R5cGVfdmFsdWVfdGFibGUgPSB7IHZhbHVlX2drYmRfbGF5b3V0X2luaXQsIHZhbHVlX2drYmRf bGF5b3V0X2ZyZWVfdmFsdWUsIHZhbHVlX2drYmRfbGF5b3V0X2NvcHlfdmFsdWUsIHZhbHVlX2dr YmRfbGF5b3V0X3BlZWtfcG9pbnRlciwgInAiLCB2YWx1ZV9na2JkX2xheW91dF9jb2xsZWN0X3Zh bHVlLCAicCIsIHZhbHVlX2drYmRfbGF5b3V0X2xjb3B5X3ZhbHVlIH07Ci0rCQlzdGF0aWMgY29u c3QgR1R5cGVJbmZvIGdfZGVmaW5lX3R5cGVfaW5mbyA9IHsgc2l6ZW9mIChHa2JkTGF5b3V0Q2xh c3MpLCAoR0Jhc2VJbml0RnVuYykgTlVMTCwgKEdCYXNlRmluYWxpemVGdW5jKSBOVUxMLCAoR0Ns YXNzSW5pdEZ1bmMpIGdrYmRfbGF5b3V0X2NsYXNzX2luaXQsIChHQ2xhc3NGaW5hbGl6ZUZ1bmMp IE5VTEwsIE5VTEwsIHNpemVvZiAoR2tiZExheW91dCksIDAsIChHSW5zdGFuY2VJbml0RnVuYykg Z2tiZF9sYXlvdXRfaW5zdGFuY2VfaW5pdCwgJmdfZGVmaW5lX3R5cGVfdmFsdWVfdGFibGUgfTsK LSsJCXN0YXRpYyBjb25zdCBHVHlwZUZ1bmRhbWVudGFsSW5mbyBnX2RlZmluZV90eXBlX2Z1bmRh bWVudGFsX2luZm8gPSB7IChHX1RZUEVfRkxBR19DTEFTU0VEIHwgR19UWVBFX0ZMQUdfSU5TVEFO VElBVEFCTEUgfCBHX1RZUEVfRkxBR19ERVJJVkFCTEUgfCBHX1RZUEVfRkxBR19ERUVQX0RFUklW QUJMRSkgfTsKLSsJCUdUeXBlIGdrYmRfbGF5b3V0X3R5cGVfaWQ7Ci0rCQlna2JkX2xheW91dF90 eXBlX2lkID0gZ190eXBlX3JlZ2lzdGVyX2Z1bmRhbWVudGFsIChnX3R5cGVfZnVuZGFtZW50YWxf bmV4dCAoKSwgIkdrYmRMYXlvdXQiLCAmZ19kZWZpbmVfdHlwZV9pbmZvLCAmZ19kZWZpbmVfdHlw ZV9mdW5kYW1lbnRhbF9pbmZvLCAwKTsKLSsJCWdfb25jZV9pbml0X2xlYXZlICgmZ2tiZF9sYXlv dXRfdHlwZV9pZF9fdm9sYXRpbGUsIGdrYmRfbGF5b3V0X3R5cGVfaWQpOwotKwl9Ci0rCXJldHVy biBna2JkX2xheW91dF90eXBlX2lkX192b2xhdGlsZTsKLSt9Ci0rCi0rCi0rZ3BvaW50ZXIgZ2ti ZF9sYXlvdXRfcmVmIChncG9pbnRlciBpbnN0YW5jZSkgewotKwlHa2JkTGF5b3V0KiBzZWxmOwot KwlzZWxmID0gaW5zdGFuY2U7Ci0rCWdfYXRvbWljX2ludF9pbmMgKCZzZWxmLT5yZWZfY291bnQp OwotKwlyZXR1cm4gaW5zdGFuY2U7Ci0rfQotKwotKwotK3ZvaWQgZ2tiZF9sYXlvdXRfdW5yZWYg KGdwb2ludGVyIGluc3RhbmNlKSB7Ci0rCUdrYmRMYXlvdXQqIHNlbGY7Ci0rCXNlbGYgPSBpbnN0 YW5jZTsKLSsJaWYgKGdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QgKCZzZWxmLT5yZWZfY291bnQp KSB7Ci0rCQlHS0JEX0xBWU9VVF9HRVRfQ0xBU1MgKHNlbGYpLT5maW5hbGl6ZSAoc2VsZik7Ci0r CQlnX3R5cGVfZnJlZV9pbnN0YW5jZSAoKEdUeXBlSW5zdGFuY2UgKikgc2VsZik7Ci0rCX0KLSt9 Ci0rCi0rCi0rCi0tLS0gaWJ1cy91aS9ndGszL2drYmRsYXlvdXQuYy50cnVlLm9yaWcJMjAxMi0w My0wOSAxNjo0MTowMy40MTU1MzE1MzggKzA5MDAKLSsrKyBpYnVzL3VpL2d0azMvZ2tiZGxheW91 dC5jLnRydWUJMjAxMi0wMy0wOSAxNjo0MDo0NS42NzIyMDk4MDUgKzA5MDAKLUBAIC0wLDAgKzEs NDkwIEBACi0rLyogZ2tiZGxheW91dC5jIGdlbmVyYXRlZCBieSB2YWxhYyAwLjE1LjEsIHRoZSBW YWxhIGNvbXBpbGVyCi0rICogZ2VuZXJhdGVkIGZyb20gZ2tiZGxheW91dC52YWxhLCBkbyBub3Qg bW9kaWZ5ICovCi0rCi0rLyogdmltOnNldCBldCBzdHM9NCBzdz00OgotKyAqCi0rICogaWJ1cyAt IFRoZSBJbnB1dCBCdXMKLSsgKgotKyAqIENvcHlyaWdodCAyMDEyIFJlZCBIYXQsIEluYy4KLSsg KiBDb3B5cmlnaHQoYykgMjAxMiBQZW5nIEh1YW5nIDxzaGF3bi5wLmh1YW5nQGdtYWlsLmNvbT4K LSsgKiBDb3B5cmlnaHQoYykgMjAxMiBUYWthbyBGdWppd2FyYSA8dGZ1aml3YXJAcmVkaGF0LmNv bT4KLSsgKgotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IKLSsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0rICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0rICogdmVyc2lvbiAyIG9mIHRoZSBM aWNlbnNlLCBvcihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0rICoKLSsgKiBU aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKLSsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsgKgotKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSsgKiBMaWNlbnNl IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotKyAqIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCi0r ICogQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0rICovCi0rCi0rI2luY2x1ZGUgPGdsaWIu aD4KLSsjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSsjaW5jbHVkZSA8bGliZ25vbWVrYmQvZ2ti ZC1jb25maWd1cmF0aW9uLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJp bmcuaD4KLSsjaW5jbHVkZSA8Z29iamVjdC9ndmFsdWVjb2xsZWN0b3IuaD4KLSsKLSsKLSsjZGVm aW5lIFRZUEVfR0tCRF9MQVlPVVQgKGdrYmRfbGF5b3V0X2dldF90eXBlICgpKQotKyNkZWZpbmUg R0tCRF9MQVlPVVQob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBUWVBF X0dLQkRfTEFZT1VULCBHa2JkTGF5b3V0KSkKLSsjZGVmaW5lIEdLQkRfTEFZT1VUX0NMQVNTKGts YXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFRZUEVfR0tCRF9MQVlPVVQs IEdrYmRMYXlvdXRDbGFzcykpCi0rI2RlZmluZSBJU19HS0JEX0xBWU9VVChvYmopIChHX1RZUEVf Q0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFRZUEVfR0tCRF9MQVlPVVQpKQotKyNkZWZpbmUg SVNfR0tCRF9MQVlPVVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGts YXNzKSwgVFlQRV9HS0JEX0xBWU9VVCkpCi0rI2RlZmluZSBHS0JEX0xBWU9VVF9HRVRfQ0xBU1Mo b2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFRZUEVfR0tCRF9MQVlPVVQs IEdrYmRMYXlvdXRDbGFzcykpCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgX0drYmRMYXlvdXQgR2tiZExh eW91dDsKLSt0eXBlZGVmIHN0cnVjdCBfR2tiZExheW91dENsYXNzIEdrYmRMYXlvdXRDbGFzczsK LSt0eXBlZGVmIHN0cnVjdCBfR2tiZExheW91dFByaXZhdGUgR2tiZExheW91dFByaXZhdGU7Ci0r I2RlZmluZSBfZ19vYmplY3RfdW5yZWYwKHZhcikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDogKHZh ciA9IChnX29iamVjdF91bnJlZiAodmFyKSwgTlVMTCkpKQotK3R5cGVkZWYgc3RydWN0IF9QYXJh bVNwZWNHa2JkTGF5b3V0IFBhcmFtU3BlY0drYmRMYXlvdXQ7Ci0rCi0rc3RydWN0IF9Ha2JkTGF5 b3V0IHsKLSsJR1R5cGVJbnN0YW5jZSBwYXJlbnRfaW5zdGFuY2U7Ci0rCXZvbGF0aWxlIGludCBy ZWZfY291bnQ7Ci0rCUdrYmRMYXlvdXRQcml2YXRlICogcHJpdjsKLSt9OwotKwotK3N0cnVjdCBf R2tiZExheW91dENsYXNzIHsKLSsJR1R5cGVDbGFzcyBwYXJlbnRfY2xhc3M7Ci0rCXZvaWQgKCpm aW5hbGl6ZSkgKEdrYmRMYXlvdXQgKnNlbGYpOwotK307Ci0rCi0rc3RydWN0IF9Ha2JkTGF5b3V0 UHJpdmF0ZSB7Ci0rCUdrYmRDb25maWd1cmF0aW9uKiBtX2NvbmZpZzsKLSt9OwotKwotK3N0cnVj dCBfUGFyYW1TcGVjR2tiZExheW91dCB7Ci0rCUdQYXJhbVNwZWMgcGFyZW50X2luc3RhbmNlOwot K307Ci0rCi0rCi0rc3RhdGljIGdwb2ludGVyIGdrYmRfbGF5b3V0X3BhcmVudF9jbGFzcyA9IE5V TEw7Ci0rCi0rZ3BvaW50ZXIgZ2tiZF9sYXlvdXRfcmVmIChncG9pbnRlciBpbnN0YW5jZSk7Ci0r dm9pZCBna2JkX2xheW91dF91bnJlZiAoZ3BvaW50ZXIgaW5zdGFuY2UpOwotK0dQYXJhbVNwZWMq IHBhcmFtX3NwZWNfZ2tiZF9sYXlvdXQgKGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBnY2hhciog bmljaywgY29uc3QgZ2NoYXIqIGJsdXJiLCBHVHlwZSBvYmplY3RfdHlwZSwgR1BhcmFtRmxhZ3Mg ZmxhZ3MpOwotK3ZvaWQgdmFsdWVfc2V0X2drYmRfbGF5b3V0IChHVmFsdWUqIHZhbHVlLCBncG9p bnRlciB2X29iamVjdCk7Ci0rdm9pZCB2YWx1ZV90YWtlX2drYmRfbGF5b3V0IChHVmFsdWUqIHZh bHVlLCBncG9pbnRlciB2X29iamVjdCk7Ci0rZ3BvaW50ZXIgdmFsdWVfZ2V0X2drYmRfbGF5b3V0 IChjb25zdCBHVmFsdWUqIHZhbHVlKTsKLStHVHlwZSBna2JkX2xheW91dF9nZXRfdHlwZSAodm9p ZCkgR19HTlVDX0NPTlNUOwotKyNkZWZpbmUgR0tCRF9MQVlPVVRfR0VUX1BSSVZBVEUobykgKEdf VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBUWVBFX0dLQkRfTEFZT1VULCBHa2JkTGF5 b3V0UHJpdmF0ZSkpCi0rZW51bSAgewotKwlHS0JEX0xBWU9VVF9EVU1NWV9QUk9QRVJUWQotK307 Ci0rc3RhdGljIHZvaWQgZ2tiZF9sYXlvdXRfY29uZmlnX2NoYW5nZWRfY2IgKEdrYmRMYXlvdXQq IHNlbGYpOwotK3N0YXRpYyB2b2lkIF9na2JkX2xheW91dF9jb25maWdfY2hhbmdlZF9jYl9na2Jk X2NvbmZpZ3VyYXRpb25fY2hhbmdlZCAoR2tiZENvbmZpZ3VyYXRpb24qIF9zZW5kZXIsIGdwb2lu dGVyIHNlbGYpOwotK3N0YXRpYyB2b2lkIGdrYmRfbGF5b3V0X2NvbmZpZ19ncm91cF9jaGFuZ2Vk X2NiIChHa2JkTGF5b3V0KiBzZWxmLCBnaW50IG9iamVjdCk7Ci0rc3RhdGljIHZvaWQgX2drYmRf bGF5b3V0X2NvbmZpZ19ncm91cF9jaGFuZ2VkX2NiX2drYmRfY29uZmlndXJhdGlvbl9ncm91cF9j aGFuZ2VkIChHa2JkQ29uZmlndXJhdGlvbiogX3NlbmRlciwgZ2ludCBvYmplY3QsIGdwb2ludGVy IHNlbGYpOwotK0drYmRMYXlvdXQqIGdrYmRfbGF5b3V0X25ldyAodm9pZCk7Ci0rR2tiZExheW91 dCogZ2tiZF9sYXlvdXRfY29uc3RydWN0IChHVHlwZSBvYmplY3RfdHlwZSk7Ci0rZ2NoYXIqKiBn a2JkX2xheW91dF9nZXRfbGF5b3V0cyAoR2tiZExheW91dCogc2VsZiwgaW50KiByZXN1bHRfbGVu Z3RoMSk7Ci0rc3RhdGljIGdjaGFyKiogX3ZhbGFfYXJyYXlfZHVwMiAoZ2NoYXIqKiBzZWxmLCBp bnQgbGVuZ3RoKTsKLStnY2hhcioqIGdrYmRfbGF5b3V0X2dldF9ncm91cF9uYW1lcyAoR2tiZExh eW91dCogc2VsZiwgaW50KiByZXN1bHRfbGVuZ3RoMSk7Ci0rc3RhdGljIGdjaGFyKiogX3ZhbGFf YXJyYXlfZHVwMyAoZ2NoYXIqKiBzZWxmLCBpbnQgbGVuZ3RoKTsKLSt2b2lkIGdrYmRfbGF5b3V0 X2xvY2tfZ3JvdXAgKEdrYmRMYXlvdXQqIHNlbGYsIGdpbnQgaWQpOwotK3ZvaWQgZ2tiZF9sYXlv dXRfc3RhcnRfbGlzdGVuIChHa2JkTGF5b3V0KiBzZWxmKTsKLSt2b2lkIGdrYmRfbGF5b3V0X3N0 b3BfbGlzdGVuIChHa2JkTGF5b3V0KiBzZWxmKTsKLStzdGF0aWMgdm9pZCBna2JkX2xheW91dF9m aW5hbGl6ZSAoR2tiZExheW91dCogb2JqKTsKLStzdGF0aWMgZ2ludCBfdmFsYV9hcnJheV9sZW5n dGggKGdwb2ludGVyIGFycmF5KTsKLSsKLSsKLStzdGF0aWMgdm9pZCBfZ2tiZF9sYXlvdXRfY29u ZmlnX2NoYW5nZWRfY2JfZ2tiZF9jb25maWd1cmF0aW9uX2NoYW5nZWQgKEdrYmRDb25maWd1cmF0 aW9uKiBfc2VuZGVyLCBncG9pbnRlciBzZWxmKSB7Ci0rCWdrYmRfbGF5b3V0X2NvbmZpZ19jaGFu Z2VkX2NiIChzZWxmKTsKLSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgX2drYmRfbGF5b3V0X2NvbmZp Z19ncm91cF9jaGFuZ2VkX2NiX2drYmRfY29uZmlndXJhdGlvbl9ncm91cF9jaGFuZ2VkIChHa2Jk Q29uZmlndXJhdGlvbiogX3NlbmRlciwgZ2ludCBvYmplY3QsIGdwb2ludGVyIHNlbGYpIHsKLSsJ Z2tiZF9sYXlvdXRfY29uZmlnX2dyb3VwX2NoYW5nZWRfY2IgKHNlbGYsIG9iamVjdCk7Ci0rfQot KwotKwotK0drYmRMYXlvdXQqIGdrYmRfbGF5b3V0X2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0X3R5 cGUpIHsKLSsJR2tiZExheW91dCogc2VsZiA9IE5VTEw7Ci0rCUdrYmRDb25maWd1cmF0aW9uKiBf dG1wMF8gPSBOVUxMOwotKwlHa2JkQ29uZmlndXJhdGlvbiogX3RtcDFfOwotKwlzZWxmID0gKEdr YmRMYXlvdXQqKSBnX3R5cGVfY3JlYXRlX2luc3RhbmNlIChvYmplY3RfdHlwZSk7Ci0rCV90bXAw XyA9IGdrYmRfY29uZmlndXJhdGlvbl9nZXQgKCk7Ci0rCV9nX29iamVjdF91bnJlZjAgKHNlbGYt PnByaXYtPm1fY29uZmlnKTsKLSsJc2VsZi0+cHJpdi0+bV9jb25maWcgPSBfdG1wMF87Ci0rCV90 bXAxXyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOwotKwlpZiAoX3RtcDFfICE9IE5VTEwpIHsKLSsJ CUdrYmRDb25maWd1cmF0aW9uKiBfdG1wMl87Ci0rCQlHa2JkQ29uZmlndXJhdGlvbiogX3RtcDNf OwotKwkJX3RtcDJfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7Ci0rCQlnX3NpZ25hbF9jb25uZWN0 IChfdG1wMl8sICJjaGFuZ2VkIiwgKEdDYWxsYmFjaykgX2drYmRfbGF5b3V0X2NvbmZpZ19jaGFu Z2VkX2NiX2drYmRfY29uZmlndXJhdGlvbl9jaGFuZ2VkLCBzZWxmKTsKLSsJCV90bXAzXyA9IHNl bGYtPnByaXYtPm1fY29uZmlnOwotKwkJZ19zaWduYWxfY29ubmVjdCAoX3RtcDNfLCAiZ3JvdXAt Y2hhbmdlZCIsIChHQ2FsbGJhY2spIF9na2JkX2xheW91dF9jb25maWdfZ3JvdXBfY2hhbmdlZF9j Yl9na2JkX2NvbmZpZ3VyYXRpb25fZ3JvdXBfY2hhbmdlZCwgc2VsZik7Ci0rCX0KLSsJcmV0dXJu IHNlbGY7Ci0rfQotKwotKwotK0drYmRMYXlvdXQqIGdrYmRfbGF5b3V0X25ldyAodm9pZCkgewot KwlyZXR1cm4gZ2tiZF9sYXlvdXRfY29uc3RydWN0IChUWVBFX0dLQkRfTEFZT1VUKTsKLSt9Ci0r Ci0rCi0rc3RhdGljIHZvaWQgZ2tiZF9sYXlvdXRfY29uZmlnX2NoYW5nZWRfY2IgKEdrYmRMYXlv dXQqIHNlbGYpIHsKLSsJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsKLSsJZ19zaWdu YWxfZW1pdF9ieV9uYW1lIChzZWxmLCAiY2hhbmdlZCIpOwotK30KLSsKLSsKLStzdGF0aWMgdm9p ZCBna2JkX2xheW91dF9jb25maWdfZ3JvdXBfY2hhbmdlZF9jYiAoR2tiZExheW91dCogc2VsZiwg Z2ludCBvYmplY3QpIHsKLSsJZ2ludCBfdG1wMF87Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYg IT0gTlVMTCk7Ci0rCV90bXAwXyA9IG9iamVjdDsKLSsJZ19zaWduYWxfZW1pdF9ieV9uYW1lIChz ZWxmLCAiZ3JvdXAtY2hhbmdlZCIsIF90bXAwXyk7Ci0rfQotKwotKwotK3N0YXRpYyBnY2hhcioq IF92YWxhX2FycmF5X2R1cDIgKGdjaGFyKiogc2VsZiwgaW50IGxlbmd0aCkgewotKwlnY2hhcioq IHJlc3VsdDsKLSsJaW50IGk7Ci0rCXJlc3VsdCA9IGdfbmV3MCAoZ2NoYXIqLCBsZW5ndGggKyAx KTsKLSsJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0rCQlnY2hhciogX3RtcDBfOwot KwkJX3RtcDBfID0gZ19zdHJkdXAgKHNlbGZbaV0pOwotKwkJcmVzdWx0W2ldID0gX3RtcDBfOwot Kwl9Ci0rCXJldHVybiByZXN1bHQ7Ci0rfQotKwotKwotK2djaGFyKiogZ2tiZF9sYXlvdXRfZ2V0 X2xheW91dHMgKEdrYmRMYXlvdXQqIHNlbGYsIGludCogcmVzdWx0X2xlbmd0aDEpIHsKLSsJZ2No YXIqKiByZXN1bHQgPSBOVUxMOwotKwlHa2JkQ29uZmlndXJhdGlvbiogX3RtcDBfOwotKwlHa2Jk Q29uZmlndXJhdGlvbiogX3RtcDNfOwotKwlnY2hhcioqIF90bXA0XzsKLSsJZ2NoYXIqKiBfdG1w NV8gPSBOVUxMOwotKwlnY2hhcioqIF90bXA2XzsKLSsJZ2ludCBfdG1wNl9fbGVuZ3RoMTsKLSsJ Z2NoYXIqKiBfdG1wN187Ci0rCWdpbnQgX3RtcDdfX2xlbmd0aDE7Ci0rCWdfcmV0dXJuX3ZhbF9p Zl9mYWlsIChzZWxmICE9IE5VTEwsIE5VTEwpOwotKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX2Nv bmZpZzsKLSsJaWYgKF90bXAwXyA9PSBOVUxMKSB7Ci0rCQlnY2hhcioqIF90bXAxXyA9IE5VTEw7 Ci0rCQlnY2hhcioqIF90bXAyXzsKLSsJCWdpbnQgX3RtcDJfX2xlbmd0aDE7Ci0rCQlfdG1wMV8g PSBnX25ldzAgKGdjaGFyKiwgMCArIDEpOwotKwkJX3RtcDJfID0gX3RtcDFfOwotKwkJX3RtcDJf X2xlbmd0aDEgPSAwOwotKwkJaWYgKHJlc3VsdF9sZW5ndGgxKSB7Ci0rCQkJKnJlc3VsdF9sZW5n dGgxID0gX3RtcDJfX2xlbmd0aDE7Ci0rCQl9Ci0rCQlyZXN1bHQgPSBfdG1wMl87Ci0rCQlyZXR1 cm4gcmVzdWx0OwotKwl9Ci0rCV90bXAzXyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOwotKwlfdG1w NV8gPSBfdG1wNF8gPSBna2JkX2NvbmZpZ3VyYXRpb25fZ2V0X3Nob3J0X2dyb3VwX25hbWVzIChf dG1wM18pOwotKwlfdG1wNl8gPSAoX3RtcDVfICE9IE5VTEwpID8gX3ZhbGFfYXJyYXlfZHVwMiAo X3RtcDVfLCBfdmFsYV9hcnJheV9sZW5ndGggKF90bXA0XykpIDogKChncG9pbnRlcikgX3RtcDVf KTsKLSsJX3RtcDZfX2xlbmd0aDEgPSBfdmFsYV9hcnJheV9sZW5ndGggKF90bXA0Xyk7Ci0rCV90 bXA3XyA9IF90bXA2XzsKLSsJX3RtcDdfX2xlbmd0aDEgPSBfdG1wNl9fbGVuZ3RoMTsKLSsJaWYg KHJlc3VsdF9sZW5ndGgxKSB7Ci0rCQkqcmVzdWx0X2xlbmd0aDEgPSBfdG1wN19fbGVuZ3RoMTsK LSsJfQotKwlyZXN1bHQgPSBfdG1wN187Ci0rCXJldHVybiByZXN1bHQ7Ci0rfQotKwotKwotK3N0 YXRpYyBnY2hhcioqIF92YWxhX2FycmF5X2R1cDMgKGdjaGFyKiogc2VsZiwgaW50IGxlbmd0aCkg ewotKwlnY2hhcioqIHJlc3VsdDsKLSsJaW50IGk7Ci0rCXJlc3VsdCA9IGdfbmV3MCAoZ2NoYXIq LCBsZW5ndGggKyAxKTsKLSsJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0rCQlnY2hh ciogX3RtcDBfOwotKwkJX3RtcDBfID0gZ19zdHJkdXAgKHNlbGZbaV0pOwotKwkJcmVzdWx0W2ld ID0gX3RtcDBfOwotKwl9Ci0rCXJldHVybiByZXN1bHQ7Ci0rfQotKwotKwotK2djaGFyKiogZ2ti ZF9sYXlvdXRfZ2V0X2dyb3VwX25hbWVzIChHa2JkTGF5b3V0KiBzZWxmLCBpbnQqIHJlc3VsdF9s ZW5ndGgxKSB7Ci0rCWdjaGFyKiogcmVzdWx0ID0gTlVMTDsKLSsJR2tiZENvbmZpZ3VyYXRpb24q IF90bXAwXzsKLSsJR2tiZENvbmZpZ3VyYXRpb24qIF90bXAzXzsKLSsJZ2NoYXIqKiBfdG1wNF87 Ci0rCWdjaGFyKiogX3RtcDVfID0gTlVMTDsKLSsJZ2NoYXIqKiBfdG1wNl87Ci0rCWdpbnQgX3Rt cDZfX2xlbmd0aDE7Ci0rCWdjaGFyKiogX3RtcDdfOwotKwlnaW50IF90bXA3X19sZW5ndGgxOwot KwlnX3JldHVybl92YWxfaWZfZmFpbCAoc2VsZiAhPSBOVUxMLCBOVUxMKTsKLSsJX3RtcDBfID0g c2VsZi0+cHJpdi0+bV9jb25maWc7Ci0rCWlmIChfdG1wMF8gPT0gTlVMTCkgewotKwkJZ2NoYXIq KiBfdG1wMV8gPSBOVUxMOwotKwkJZ2NoYXIqKiBfdG1wMl87Ci0rCQlnaW50IF90bXAyX19sZW5n dGgxOwotKwkJX3RtcDFfID0gZ19uZXcwIChnY2hhciosIDAgKyAxKTsKLSsJCV90bXAyXyA9IF90 bXAxXzsKLSsJCV90bXAyX19sZW5ndGgxID0gMDsKLSsJCWlmIChyZXN1bHRfbGVuZ3RoMSkgewot KwkJCSpyZXN1bHRfbGVuZ3RoMSA9IF90bXAyX19sZW5ndGgxOwotKwkJfQotKwkJcmVzdWx0ID0g X3RtcDJfOwotKwkJcmV0dXJuIHJlc3VsdDsKLSsJfQotKwlfdG1wM18gPSBzZWxmLT5wcml2LT5t X2NvbmZpZzsKLSsJX3RtcDVfID0gX3RtcDRfID0gZ2tiZF9jb25maWd1cmF0aW9uX2dldF9ncm91 cF9uYW1lcyAoX3RtcDNfKTsKLSsJX3RtcDZfID0gKF90bXA1XyAhPSBOVUxMKSA/IF92YWxhX2Fy cmF5X2R1cDMgKF90bXA1XywgX3ZhbGFfYXJyYXlfbGVuZ3RoIChfdG1wNF8pKSA6ICgoZ3BvaW50 ZXIpIF90bXA1Xyk7Ci0rCV90bXA2X19sZW5ndGgxID0gX3ZhbGFfYXJyYXlfbGVuZ3RoIChfdG1w NF8pOwotKwlfdG1wN18gPSBfdG1wNl87Ci0rCV90bXA3X19sZW5ndGgxID0gX3RtcDZfX2xlbmd0 aDE7Ci0rCWlmIChyZXN1bHRfbGVuZ3RoMSkgewotKwkJKnJlc3VsdF9sZW5ndGgxID0gX3RtcDdf X2xlbmd0aDE7Ci0rCX0KLSsJcmVzdWx0ID0gX3RtcDdfOwotKwlyZXR1cm4gcmVzdWx0OwotK30K LSsKLSsKLSt2b2lkIGdrYmRfbGF5b3V0X2xvY2tfZ3JvdXAgKEdrYmRMYXlvdXQqIHNlbGYsIGdp bnQgaWQpIHsKLSsJR2tiZENvbmZpZ3VyYXRpb24qIF90bXAwXzsKLSsJR2tiZENvbmZpZ3VyYXRp b24qIF90bXAxXzsKLSsJZ2ludCBfdG1wMl87Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0g TlVMTCk7Ci0rCV90bXAwXyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOwotKwlpZiAoX3RtcDBfID09 IE5VTEwpIHsKLSsJCXJldHVybjsKLSsJfQotKwlfdG1wMV8gPSBzZWxmLT5wcml2LT5tX2NvbmZp ZzsKLSsJX3RtcDJfID0gaWQ7Ci0rCWdrYmRfY29uZmlndXJhdGlvbl9sb2NrX2dyb3VwIChfdG1w MV8sIChndWludCkgX3RtcDJfKTsKLSt9Ci0rCi0rCi0rdm9pZCBna2JkX2xheW91dF9zdGFydF9s aXN0ZW4gKEdrYmRMYXlvdXQqIHNlbGYpIHsKLSsJR2tiZENvbmZpZ3VyYXRpb24qIF90bXAwXzsK LSsJR2tiZENvbmZpZ3VyYXRpb24qIF90bXAxXzsKLSsJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAh PSBOVUxMKTsKLSsJX3RtcDBfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7Ci0rCWlmIChfdG1wMF8g PT0gTlVMTCkgewotKwkJcmV0dXJuOwotKwl9Ci0rCV90bXAxXyA9IHNlbGYtPnByaXYtPm1fY29u ZmlnOwotKwlna2JkX2NvbmZpZ3VyYXRpb25fc3RhcnRfbGlzdGVuIChfdG1wMV8pOwotK30KLSsK LSsKLSt2b2lkIGdrYmRfbGF5b3V0X3N0b3BfbGlzdGVuIChHa2JkTGF5b3V0KiBzZWxmKSB7Ci0r CUdrYmRDb25maWd1cmF0aW9uKiBfdG1wMF87Ci0rCUdrYmRDb25maWd1cmF0aW9uKiBfdG1wMV87 Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7Ci0rCV90bXAwXyA9IHNlbGYtPnBy aXYtPm1fY29uZmlnOwotKwlpZiAoX3RtcDBfID09IE5VTEwpIHsKLSsJCXJldHVybjsKLSsJfQot KwlfdG1wMV8gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsKLSsJZ2tiZF9jb25maWd1cmF0aW9uX3N0 b3BfbGlzdGVuIChfdG1wMV8pOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCB2YWx1ZV9na2JkX2xh eW91dF9pbml0IChHVmFsdWUqIHZhbHVlKSB7Ci0rCXZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9 IE5VTEw7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHZhbHVlX2drYmRfbGF5b3V0X2ZyZWVfdmFs dWUgKEdWYWx1ZSogdmFsdWUpIHsKLSsJaWYgKHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcikgewot KwkJZ2tiZF9sYXlvdXRfdW5yZWYgKHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcik7Ci0rCX0KLSt9 Ci0rCi0rCi0rc3RhdGljIHZvaWQgdmFsdWVfZ2tiZF9sYXlvdXRfY29weV92YWx1ZSAoY29uc3Qg R1ZhbHVlKiBzcmNfdmFsdWUsIEdWYWx1ZSogZGVzdF92YWx1ZSkgewotKwlpZiAoc3JjX3ZhbHVl LT5kYXRhWzBdLnZfcG9pbnRlcikgewotKwkJZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIg PSBna2JkX2xheW91dF9yZWYgKHNyY192YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpOwotKwl9IGVs c2UgewotKwkJZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBOVUxMOwotKwl9Ci0rfQot KwotKwotK3N0YXRpYyBncG9pbnRlciB2YWx1ZV9na2JkX2xheW91dF9wZWVrX3BvaW50ZXIgKGNv bnN0IEdWYWx1ZSogdmFsdWUpIHsKLSsJcmV0dXJuIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsK LSt9Ci0rCi0rCi0rc3RhdGljIGdjaGFyKiB2YWx1ZV9na2JkX2xheW91dF9jb2xsZWN0X3ZhbHVl IChHVmFsdWUqIHZhbHVlLCBndWludCBuX2NvbGxlY3RfdmFsdWVzLCBHVHlwZUNWYWx1ZSogY29s bGVjdF92YWx1ZXMsIGd1aW50IGNvbGxlY3RfZmxhZ3MpIHsKLSsJaWYgKGNvbGxlY3RfdmFsdWVz WzBdLnZfcG9pbnRlcikgewotKwkJR2tiZExheW91dCogb2JqZWN0OwotKwkJb2JqZWN0ID0gY29s bGVjdF92YWx1ZXNbMF0udl9wb2ludGVyOwotKwkJaWYgKG9iamVjdC0+cGFyZW50X2luc3RhbmNl LmdfY2xhc3MgPT0gTlVMTCkgewotKwkJCXJldHVybiBnX3N0cmNvbmNhdCAoImludmFsaWQgdW5j bGFzc2VkIG9iamVjdCBwb2ludGVyIGZvciB2YWx1ZSB0eXBlIGAiLCBHX1ZBTFVFX1RZUEVfTkFN RSAodmFsdWUpLCAiJyIsIE5VTEwpOwotKwkJfSBlbHNlIGlmICghZ192YWx1ZV90eXBlX2NvbXBh dGlibGUgKEdfVFlQRV9GUk9NX0lOU1RBTkNFIChvYmplY3QpLCBHX1ZBTFVFX1RZUEUgKHZhbHVl KSkpIHsKLSsJCQlyZXR1cm4gZ19zdHJjb25jYXQgKCJpbnZhbGlkIG9iamVjdCB0eXBlIGAiLCBn X3R5cGVfbmFtZSAoR19UWVBFX0ZST01fSU5TVEFOQ0UgKG9iamVjdCkpLCAiJyBmb3IgdmFsdWUg dHlwZSBgIiwgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSwgIiciLCBOVUxMKTsKLSsJCX0KLSsJ CXZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IGdrYmRfbGF5b3V0X3JlZiAob2JqZWN0KTsKLSsJ fSBlbHNlIHsKLSsJCXZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IE5VTEw7Ci0rCX0KLSsJcmV0 dXJuIE5VTEw7Ci0rfQotKwotKwotK3N0YXRpYyBnY2hhciogdmFsdWVfZ2tiZF9sYXlvdXRfbGNv cHlfdmFsdWUgKGNvbnN0IEdWYWx1ZSogdmFsdWUsIGd1aW50IG5fY29sbGVjdF92YWx1ZXMsIEdU eXBlQ1ZhbHVlKiBjb2xsZWN0X3ZhbHVlcywgZ3VpbnQgY29sbGVjdF9mbGFncykgewotKwlHa2Jk TGF5b3V0Kiogb2JqZWN0X3A7Ci0rCW9iamVjdF9wID0gY29sbGVjdF92YWx1ZXNbMF0udl9wb2lu dGVyOwotKwlpZiAoIW9iamVjdF9wKSB7Ci0rCQlyZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgidmFs dWUgbG9jYXRpb24gZm9yIGAlcycgcGFzc2VkIGFzIE5VTEwiLCBHX1ZBTFVFX1RZUEVfTkFNRSAo dmFsdWUpKTsKLSsJfQotKwlpZiAoIXZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcikgewotKwkJKm9i amVjdF9wID0gTlVMTDsKLSsJfSBlbHNlIGlmIChjb2xsZWN0X2ZsYWdzICYgR19WQUxVRV9OT0NP UFlfQ09OVEVOVFMpIHsKLSsJCSpvYmplY3RfcCA9IHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsK LSsJfSBlbHNlIHsKLSsJCSpvYmplY3RfcCA9IGdrYmRfbGF5b3V0X3JlZiAodmFsdWUtPmRhdGFb MF0udl9wb2ludGVyKTsKLSsJfQotKwlyZXR1cm4gTlVMTDsKLSt9Ci0rCi0rCi0rR1BhcmFtU3Bl YyogcGFyYW1fc3BlY19na2JkX2xheW91dCAoY29uc3QgZ2NoYXIqIG5hbWUsIGNvbnN0IGdjaGFy KiBuaWNrLCBjb25zdCBnY2hhciogYmx1cmIsIEdUeXBlIG9iamVjdF90eXBlLCBHUGFyYW1GbGFn cyBmbGFncykgewotKwlQYXJhbVNwZWNHa2JkTGF5b3V0KiBzcGVjOwotKwlnX3JldHVybl92YWxf aWZfZmFpbCAoZ190eXBlX2lzX2EgKG9iamVjdF90eXBlLCBUWVBFX0dLQkRfTEFZT1VUKSwgTlVM TCk7Ci0rCXNwZWMgPSBnX3BhcmFtX3NwZWNfaW50ZXJuYWwgKEdfVFlQRV9QQVJBTV9PQkpFQ1Qs IG5hbWUsIG5pY2ssIGJsdXJiLCBmbGFncyk7Ci0rCUdfUEFSQU1fU1BFQyAoc3BlYyktPnZhbHVl X3R5cGUgPSBvYmplY3RfdHlwZTsKLSsJcmV0dXJuIEdfUEFSQU1fU1BFQyAoc3BlYyk7Ci0rfQot KwotKwotK2dwb2ludGVyIHZhbHVlX2dldF9na2JkX2xheW91dCAoY29uc3QgR1ZhbHVlKiB2YWx1 ZSkgewotKwlnX3JldHVybl92YWxfaWZfZmFpbCAoR19UWVBFX0NIRUNLX1ZBTFVFX1RZUEUgKHZh bHVlLCBUWVBFX0dLQkRfTEFZT1VUKSwgTlVMTCk7Ci0rCXJldHVybiB2YWx1ZS0+ZGF0YVswXS52 X3BvaW50ZXI7Ci0rfQotKwotKwotK3ZvaWQgdmFsdWVfc2V0X2drYmRfbGF5b3V0IChHVmFsdWUq IHZhbHVlLCBncG9pbnRlciB2X29iamVjdCkgewotKwlHa2JkTGF5b3V0KiBvbGQ7Ci0rCWdfcmV0 dXJuX2lmX2ZhaWwgKEdfVFlQRV9DSEVDS19WQUxVRV9UWVBFICh2YWx1ZSwgVFlQRV9HS0JEX0xB WU9VVCkpOwotKwlvbGQgPSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0rCWlmICh2X29iamVj dCkgewotKwkJZ19yZXR1cm5faWZfZmFpbCAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKHZf b2JqZWN0LCBUWVBFX0dLQkRfTEFZT1VUKSk7Ci0rCQlnX3JldHVybl9pZl9mYWlsIChnX3ZhbHVl X3R5cGVfY29tcGF0aWJsZSAoR19UWVBFX0ZST01fSU5TVEFOQ0UgKHZfb2JqZWN0KSwgR19WQUxV RV9UWVBFICh2YWx1ZSkpKTsKLSsJCXZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IHZfb2JqZWN0 OwotKwkJZ2tiZF9sYXlvdXRfcmVmICh2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpOwotKwl9IGVs c2UgewotKwkJdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gTlVMTDsKLSsJfQotKwlpZiAob2xk KSB7Ci0rCQlna2JkX2xheW91dF91bnJlZiAob2xkKTsKLSsJfQotK30KLSsKLSsKLSt2b2lkIHZh bHVlX3Rha2VfZ2tiZF9sYXlvdXQgKEdWYWx1ZSogdmFsdWUsIGdwb2ludGVyIHZfb2JqZWN0KSB7 Ci0rCUdrYmRMYXlvdXQqIG9sZDsKLSsJZ19yZXR1cm5faWZfZmFpbCAoR19UWVBFX0NIRUNLX1ZB TFVFX1RZUEUgKHZhbHVlLCBUWVBFX0dLQkRfTEFZT1VUKSk7Ci0rCW9sZCA9IHZhbHVlLT5kYXRh WzBdLnZfcG9pbnRlcjsKLSsJaWYgKHZfb2JqZWN0KSB7Ci0rCQlnX3JldHVybl9pZl9mYWlsIChH X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAodl9vYmplY3QsIFRZUEVfR0tCRF9MQVlPVVQpKTsK LSsJCWdfcmV0dXJuX2lmX2ZhaWwgKGdfdmFsdWVfdHlwZV9jb21wYXRpYmxlIChHX1RZUEVfRlJP TV9JTlNUQU5DRSAodl9vYmplY3QpLCBHX1ZBTFVFX1RZUEUgKHZhbHVlKSkpOwotKwkJdmFsdWUt PmRhdGFbMF0udl9wb2ludGVyID0gdl9vYmplY3Q7Ci0rCX0gZWxzZSB7Ci0rCQl2YWx1ZS0+ZGF0 YVswXS52X3BvaW50ZXIgPSBOVUxMOwotKwl9Ci0rCWlmIChvbGQpIHsKLSsJCWdrYmRfbGF5b3V0 X3VucmVmIChvbGQpOwotKwl9Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIGdrYmRfbGF5b3V0X2Ns YXNzX2luaXQgKEdrYmRMYXlvdXRDbGFzcyAqIGtsYXNzKSB7Ci0rCWdrYmRfbGF5b3V0X3BhcmVu dF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOwotKwlHS0JEX0xBWU9V VF9DTEFTUyAoa2xhc3MpLT5maW5hbGl6ZSA9IGdrYmRfbGF5b3V0X2ZpbmFsaXplOwotKwlnX3R5 cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdrYmRMYXlvdXRQcml2YXRlKSk7 Ci0rCWdfc2lnbmFsX25ldyAoImNoYW5nZWQiLCBUWVBFX0dLQkRfTEFZT1VULCBHX1NJR05BTF9S VU5fTEFTVCwgMCwgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsIEdf VFlQRV9OT05FLCAwKTsKLSsJZ19zaWduYWxfbmV3ICgiZ3JvdXBfY2hhbmdlZCIsIFRZUEVfR0tC RF9MQVlPVVQsIEdfU0lHTkFMX1JVTl9MQVNULCAwLCBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21h cnNoYWxfVk9JRF9fSU5ULCBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX0lOVCk7Ci0rfQotKwotKwot K3N0YXRpYyB2b2lkIGdrYmRfbGF5b3V0X2luc3RhbmNlX2luaXQgKEdrYmRMYXlvdXQgKiBzZWxm KSB7Ci0rCXNlbGYtPnByaXYgPSBHS0JEX0xBWU9VVF9HRVRfUFJJVkFURSAoc2VsZik7Ci0rCXNl bGYtPnByaXYtPm1fY29uZmlnID0gTlVMTDsKLSsJc2VsZi0+cmVmX2NvdW50ID0gMTsKLSt9Ci0r Ci0rCi0rc3RhdGljIHZvaWQgZ2tiZF9sYXlvdXRfZmluYWxpemUgKEdrYmRMYXlvdXQqIG9iaikg ewotKwlHa2JkTGF5b3V0ICogc2VsZjsKLSsJR2tiZENvbmZpZ3VyYXRpb24qIF90bXAwXzsKLSsJ c2VsZiA9IEdLQkRfTEFZT1VUIChvYmopOwotKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX2NvbmZp ZzsKLSsJaWYgKF90bXAwXyAhPSBOVUxMKSB7Ci0rCQlHa2JkQ29uZmlndXJhdGlvbiogX3RtcDFf OwotKwkJZ3VpbnQgX3RtcDJfID0gMFU7Ci0rCQlHa2JkQ29uZmlndXJhdGlvbiogX3RtcDNfOwot KwkJZ3VpbnQgX3RtcDRfID0gMFU7Ci0rCQlHa2JkQ29uZmlndXJhdGlvbiogX3RtcDVfOwotKwkJ X3RtcDFfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7Ci0rCQlnX3NpZ25hbF9wYXJzZV9uYW1lICgi Y2hhbmdlZCIsIGdrYmRfY29uZmlndXJhdGlvbl9nZXRfdHlwZSAoKSwgJl90bXAyXywgTlVMTCwg RkFMU0UpOwotKwkJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkIChfdG1wMV8s IEdfU0lHTkFMX01BVENIX0lEIHwgR19TSUdOQUxfTUFUQ0hfRlVOQyB8IEdfU0lHTkFMX01BVENI X0RBVEEsIF90bXAyXywgMCwgTlVMTCwgKEdDYWxsYmFjaykgX2drYmRfbGF5b3V0X2NvbmZpZ19j aGFuZ2VkX2NiX2drYmRfY29uZmlndXJhdGlvbl9jaGFuZ2VkLCBzZWxmKTsKLSsJCV90bXAzXyA9 IHNlbGYtPnByaXYtPm1fY29uZmlnOwotKwkJZ19zaWduYWxfcGFyc2VfbmFtZSAoImdyb3VwLWNo YW5nZWQiLCBna2JkX2NvbmZpZ3VyYXRpb25fZ2V0X3R5cGUgKCksICZfdG1wNF8sIE5VTEwsIEZB TFNFKTsKLSsJCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCAoX3RtcDNfLCBH X1NJR05BTF9NQVRDSF9JRCB8IEdfU0lHTkFMX01BVENIX0ZVTkMgfCBHX1NJR05BTF9NQVRDSF9E QVRBLCBfdG1wNF8sIDAsIE5VTEwsIChHQ2FsbGJhY2spIF9na2JkX2xheW91dF9jb25maWdfZ3Jv dXBfY2hhbmdlZF9jYl9na2JkX2NvbmZpZ3VyYXRpb25fZ3JvdXBfY2hhbmdlZCwgc2VsZik7Ci0r CQlfdG1wNV8gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsKLSsJCWdfb2JqZWN0X3JlZiAoKEdPYmpl Y3QqKSBfdG1wNV8pOwotKwkJX2dfb2JqZWN0X3VucmVmMCAoc2VsZi0+cHJpdi0+bV9jb25maWcp OwotKwkJc2VsZi0+cHJpdi0+bV9jb25maWcgPSBOVUxMOwotKwl9Ci0rCV9nX29iamVjdF91bnJl ZjAgKHNlbGYtPnByaXYtPm1fY29uZmlnKTsKLSt9Ci0rCi0rCi0rR1R5cGUgZ2tiZF9sYXlvdXRf Z2V0X3R5cGUgKHZvaWQpIHsKLSsJc3RhdGljIHZvbGF0aWxlIGdzaXplIGdrYmRfbGF5b3V0X3R5 cGVfaWRfX3ZvbGF0aWxlID0gMDsKLSsJaWYgKGdfb25jZV9pbml0X2VudGVyICgmZ2tiZF9sYXlv dXRfdHlwZV9pZF9fdm9sYXRpbGUpKSB7Ci0rCQlzdGF0aWMgY29uc3QgR1R5cGVWYWx1ZVRhYmxl IGdfZGVmaW5lX3R5cGVfdmFsdWVfdGFibGUgPSB7IHZhbHVlX2drYmRfbGF5b3V0X2luaXQsIHZh bHVlX2drYmRfbGF5b3V0X2ZyZWVfdmFsdWUsIHZhbHVlX2drYmRfbGF5b3V0X2NvcHlfdmFsdWUs IHZhbHVlX2drYmRfbGF5b3V0X3BlZWtfcG9pbnRlciwgInAiLCB2YWx1ZV9na2JkX2xheW91dF9j b2xsZWN0X3ZhbHVlLCAicCIsIHZhbHVlX2drYmRfbGF5b3V0X2xjb3B5X3ZhbHVlIH07Ci0rCQlz dGF0aWMgY29uc3QgR1R5cGVJbmZvIGdfZGVmaW5lX3R5cGVfaW5mbyA9IHsgc2l6ZW9mIChHa2Jk TGF5b3V0Q2xhc3MpLCAoR0Jhc2VJbml0RnVuYykgTlVMTCwgKEdCYXNlRmluYWxpemVGdW5jKSBO VUxMLCAoR0NsYXNzSW5pdEZ1bmMpIGdrYmRfbGF5b3V0X2NsYXNzX2luaXQsIChHQ2xhc3NGaW5h bGl6ZUZ1bmMpIE5VTEwsIE5VTEwsIHNpemVvZiAoR2tiZExheW91dCksIDAsIChHSW5zdGFuY2VJ bml0RnVuYykgZ2tiZF9sYXlvdXRfaW5zdGFuY2VfaW5pdCwgJmdfZGVmaW5lX3R5cGVfdmFsdWVf dGFibGUgfTsKLSsJCXN0YXRpYyBjb25zdCBHVHlwZUZ1bmRhbWVudGFsSW5mbyBnX2RlZmluZV90 eXBlX2Z1bmRhbWVudGFsX2luZm8gPSB7IChHX1RZUEVfRkxBR19DTEFTU0VEIHwgR19UWVBFX0ZM QUdfSU5TVEFOVElBVEFCTEUgfCBHX1RZUEVfRkxBR19ERVJJVkFCTEUgfCBHX1RZUEVfRkxBR19E RUVQX0RFUklWQUJMRSkgfTsKLSsJCUdUeXBlIGdrYmRfbGF5b3V0X3R5cGVfaWQ7Ci0rCQlna2Jk X2xheW91dF90eXBlX2lkID0gZ190eXBlX3JlZ2lzdGVyX2Z1bmRhbWVudGFsIChnX3R5cGVfZnVu ZGFtZW50YWxfbmV4dCAoKSwgIkdrYmRMYXlvdXQiLCAmZ19kZWZpbmVfdHlwZV9pbmZvLCAmZ19k ZWZpbmVfdHlwZV9mdW5kYW1lbnRhbF9pbmZvLCAwKTsKLSsJCWdfb25jZV9pbml0X2xlYXZlICgm Z2tiZF9sYXlvdXRfdHlwZV9pZF9fdm9sYXRpbGUsIGdrYmRfbGF5b3V0X3R5cGVfaWQpOwotKwl9 Ci0rCXJldHVybiBna2JkX2xheW91dF90eXBlX2lkX192b2xhdGlsZTsKLSt9Ci0rCi0rCi0rZ3Bv aW50ZXIgZ2tiZF9sYXlvdXRfcmVmIChncG9pbnRlciBpbnN0YW5jZSkgewotKwlHa2JkTGF5b3V0 KiBzZWxmOwotKwlzZWxmID0gaW5zdGFuY2U7Ci0rCWdfYXRvbWljX2ludF9pbmMgKCZzZWxmLT5y ZWZfY291bnQpOwotKwlyZXR1cm4gaW5zdGFuY2U7Ci0rfQotKwotKwotK3ZvaWQgZ2tiZF9sYXlv dXRfdW5yZWYgKGdwb2ludGVyIGluc3RhbmNlKSB7Ci0rCUdrYmRMYXlvdXQqIHNlbGY7Ci0rCXNl bGYgPSBpbnN0YW5jZTsKLSsJaWYgKGdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QgKCZzZWxmLT5y ZWZfY291bnQpKSB7Ci0rCQlHS0JEX0xBWU9VVF9HRVRfQ0xBU1MgKHNlbGYpLT5maW5hbGl6ZSAo c2VsZik7Ci0rCQlnX3R5cGVfZnJlZV9pbnN0YW5jZSAoKEdUeXBlSW5zdGFuY2UgKikgc2VsZik7 Ci0rCX0KLSt9Ci0rCi0rCi0rc3RhdGljIGdpbnQgX3ZhbGFfYXJyYXlfbGVuZ3RoIChncG9pbnRl ciBhcnJheSkgewotKwlpbnQgbGVuZ3RoOwotKwlsZW5ndGggPSAwOwotKwlpZiAoYXJyYXkpIHsK LSsJCXdoaWxlICgoKGdwb2ludGVyKikgYXJyYXkpW2xlbmd0aF0pIHsKLSsJCQlsZW5ndGgrKzsK LSsJCX0KLSsJfQotKwlyZXR1cm4gbGVuZ3RoOwotK30KLSsKLSsKLSsKLS0tLSBpYnVzL3VpL2d0 azMvcGFuZWwuYy5pbi5vcmlnCTIwMTItMDMtMDkgMTc6MDY6MDMuMzM5NTQ3MjY2ICswOTAwCi0r KysgaWJ1cy91aS9ndGszL3BhbmVsLmMuaW4JMjAxMi0wMy0wOSAxNzowNTo1My43MDgzNzI3NDcg KzA5MDAKLUBAIC0wLDAgKzEsMzIwMyBAQAotKy8qIHBhbmVsLmMgZ2VuZXJhdGVkIGJ5IHZhbGFj IDAuMTUuMSwgdGhlIFZhbGEgY29tcGlsZXIKLSsgKiBnZW5lcmF0ZWQgZnJvbSBwYW5lbC52YWxh LCBkbyBub3QgbW9kaWZ5ICovCi0rCi0rLyogdmltOnNldCBldCBzdHM9NCBzdz00OgotKyAqCi0r ICogaWJ1cyAtIFRoZSBJbnB1dCBCdXMKLSsgKgotKyAqIENvcHlyaWdodChjKSAyMDExIFBlbmcg SHVhbmcgPHNoYXduLnAuaHVhbmdAZ21haWwuY29tPgotKyAqCi0rICogVGhpcyBsaWJyYXJ5IGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSsg KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIKLSsgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KLSsgKgotKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQot KyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot KyAqCi0rICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYwotKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm IG5vdCwgd3JpdGUgdG8gdGhlCi0rICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1 OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKLSsgKiBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBV U0EKLSsgKi8KLSsKLSsjaW5jbHVkZSA8Z2xpYi5oPgotKyNpbmNsdWRlIDxnbGliLW9iamVjdC5o PgotKyNpbmNsdWRlIDxpYnVzLmg+Ci0rI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSsjaW5jbHVkZSA8 c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxsb2NhbGUuaD4KLSsj aW5jbHVkZSA8Z2RrL2dkay5oPgotKyNpbmNsdWRlIDxmbG9hdC5oPgotKyNpbmNsdWRlIDxtYXRo Lmg+Ci0rI2luY2x1ZGUgPHNpZ25hbC5oPgotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsjaW5j bHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSsKLSsKLSsjZGVmaW5lIFRZUEVfUEFORUwgKHBhbmVs X2dldF90eXBlICgpKQotKyNkZWZpbmUgUEFORUwob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNF X0NBU1QgKChvYmopLCBUWVBFX1BBTkVMLCBQYW5lbCkpCi0rI2RlZmluZSBQQU5FTF9DTEFTUyhr bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBUWVBFX1BBTkVMLCBQYW5l bENsYXNzKSkKLSsjZGVmaW5lIElTX1BBTkVMKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U WVBFICgob2JqKSwgVFlQRV9QQU5FTCkpCi0rI2RlZmluZSBJU19QQU5FTF9DTEFTUyhrbGFzcykg KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBUWVBFX1BBTkVMKSkKLSsjZGVmaW5l IFBBTkVMX0dFVF9DTEFTUyhvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwg VFlQRV9QQU5FTCwgUGFuZWxDbGFzcykpCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgX1BhbmVsIFBhbmVs OwotK3R5cGVkZWYgc3RydWN0IF9QYW5lbENsYXNzIFBhbmVsQ2xhc3M7Ci0rdHlwZWRlZiBzdHJ1 Y3QgX1BhbmVsUHJpdmF0ZSBQYW5lbFByaXZhdGU7Ci0rCi0rI2RlZmluZSBUWVBFX0NBTkRJREFU RV9QQU5FTCAoY2FuZGlkYXRlX3BhbmVsX2dldF90eXBlICgpKQotKyNkZWZpbmUgQ0FORElEQVRF X1BBTkVMKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgVFlQRV9DQU5E SURBVEVfUEFORUwsIENhbmRpZGF0ZVBhbmVsKSkKLSsjZGVmaW5lIENBTkRJREFURV9QQU5FTF9D TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBUWVBFX0NBTkRJ REFURV9QQU5FTCwgQ2FuZGlkYXRlUGFuZWxDbGFzcykpCi0rI2RlZmluZSBJU19DQU5ESURBVEVf UEFORUwob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBUWVBFX0NBTkRJ REFURV9QQU5FTCkpCi0rI2RlZmluZSBJU19DQU5ESURBVEVfUEFORUxfQ0xBU1Moa2xhc3MpIChH X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgVFlQRV9DQU5ESURBVEVfUEFORUwpKQot KyNkZWZpbmUgQ0FORElEQVRFX1BBTkVMX0dFVF9DTEFTUyhvYmopIChHX1RZUEVfSU5TVEFOQ0Vf R0VUX0NMQVNTICgob2JqKSwgVFlQRV9DQU5ESURBVEVfUEFORUwsIENhbmRpZGF0ZVBhbmVsQ2xh c3MpKQotKwotK3R5cGVkZWYgc3RydWN0IF9DYW5kaWRhdGVQYW5lbCBDYW5kaWRhdGVQYW5lbDsK LSt0eXBlZGVmIHN0cnVjdCBfQ2FuZGlkYXRlUGFuZWxDbGFzcyBDYW5kaWRhdGVQYW5lbENsYXNz OwotKwotKyNkZWZpbmUgVFlQRV9TV0lUQ0hFUiAoc3dpdGNoZXJfZ2V0X3R5cGUgKCkpCi0rI2Rl ZmluZSBTV0lUQ0hFUihvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFRZ UEVfU1dJVENIRVIsIFN3aXRjaGVyKSkKLSsjZGVmaW5lIFNXSVRDSEVSX0NMQVNTKGtsYXNzKSAo R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFRZUEVfU1dJVENIRVIsIFN3aXRjaGVy Q2xhc3MpKQotKyNkZWZpbmUgSVNfU1dJVENIRVIob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNF X1RZUEUgKChvYmopLCBUWVBFX1NXSVRDSEVSKSkKLSsjZGVmaW5lIElTX1NXSVRDSEVSX0NMQVNT KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFRZUEVfU1dJVENIRVIp KQotKyNkZWZpbmUgU1dJVENIRVJfR0VUX0NMQVNTKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRf Q0xBU1MgKChvYmopLCBUWVBFX1NXSVRDSEVSLCBTd2l0Y2hlckNsYXNzKSkKLSsKLSt0eXBlZGVm IHN0cnVjdCBfU3dpdGNoZXIgU3dpdGNoZXI7Ci0rdHlwZWRlZiBzdHJ1Y3QgX1N3aXRjaGVyQ2xh c3MgU3dpdGNoZXJDbGFzczsKLSsKLSsjZGVmaW5lIFRZUEVfUFJPUEVSVFlfTUFOQUdFUiAocHJv cGVydHlfbWFuYWdlcl9nZXRfdHlwZSAoKSkKLSsjZGVmaW5lIFBST1BFUlRZX01BTkFHRVIob2Jq KSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBUWVBFX1BST1BFUlRZX01BTkFH RVIsIFByb3BlcnR5TWFuYWdlcikpCi0rI2RlZmluZSBQUk9QRVJUWV9NQU5BR0VSX0NMQVNTKGts YXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFRZUEVfUFJPUEVSVFlfTUFO QUdFUiwgUHJvcGVydHlNYW5hZ2VyQ2xhc3MpKQotKyNkZWZpbmUgSVNfUFJPUEVSVFlfTUFOQUdF UihvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFRZUEVfUFJPUEVSVFlf TUFOQUdFUikpCi0rI2RlZmluZSBJU19QUk9QRVJUWV9NQU5BR0VSX0NMQVNTKGtsYXNzKSAoR19U WVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFRZUEVfUFJPUEVSVFlfTUFOQUdFUikpCi0r I2RlZmluZSBQUk9QRVJUWV9NQU5BR0VSX0dFVF9DTEFTUyhvYmopIChHX1RZUEVfSU5TVEFOQ0Vf R0VUX0NMQVNTICgob2JqKSwgVFlQRV9QUk9QRVJUWV9NQU5BR0VSLCBQcm9wZXJ0eU1hbmFnZXJD bGFzcykpCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgX1Byb3BlcnR5TWFuYWdlciBQcm9wZXJ0eU1hbmFn ZXI7Ci0rdHlwZWRlZiBzdHJ1Y3QgX1Byb3BlcnR5TWFuYWdlckNsYXNzIFByb3BlcnR5TWFuYWdl ckNsYXNzOwotKwotKyNkZWZpbmUgVFlQRV9HS0JEX0xBWU9VVCAoZ2tiZF9sYXlvdXRfZ2V0X3R5 cGUgKCkpCi0rI2RlZmluZSBHS0JEX0xBWU9VVChvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf Q0FTVCAoKG9iaiksIFRZUEVfR0tCRF9MQVlPVVQsIEdrYmRMYXlvdXQpKQotKyNkZWZpbmUgR0tC RF9MQVlPVVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwg VFlQRV9HS0JEX0xBWU9VVCwgR2tiZExheW91dENsYXNzKSkKLSsjZGVmaW5lIElTX0dLQkRfTEFZ T1VUKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgVFlQRV9HS0JEX0xB WU9VVCkpCi0rI2RlZmluZSBJU19HS0JEX0xBWU9VVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD S19DTEFTU19UWVBFICgoa2xhc3MpLCBUWVBFX0dLQkRfTEFZT1VUKSkKLSsjZGVmaW5lIEdLQkRf TEFZT1VUX0dFVF9DTEFTUyhvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwg VFlQRV9HS0JEX0xBWU9VVCwgR2tiZExheW91dENsYXNzKSkKLSsKLSt0eXBlZGVmIHN0cnVjdCBf R2tiZExheW91dCBHa2JkTGF5b3V0OwotK3R5cGVkZWYgc3RydWN0IF9Ha2JkTGF5b3V0Q2xhc3Mg R2tiZExheW91dENsYXNzOwotKwotKyNkZWZpbmUgVFlQRV9YS0JfTEFZT1VUICh4a2JfbGF5b3V0 X2dldF90eXBlICgpKQotKyNkZWZpbmUgWEtCX0xBWU9VVChvYmopIChHX1RZUEVfQ0hFQ0tfSU5T VEFOQ0VfQ0FTVCAoKG9iaiksIFRZUEVfWEtCX0xBWU9VVCwgWEtCTGF5b3V0KSkKLSsjZGVmaW5l IFhLQl9MQVlPVVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNz KSwgVFlQRV9YS0JfTEFZT1VULCBYS0JMYXlvdXRDbGFzcykpCi0rI2RlZmluZSBJU19YS0JfTEFZ T1VUKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgVFlQRV9YS0JfTEFZ T1VUKSkKLSsjZGVmaW5lIElTX1hLQl9MQVlPVVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf Q0xBU1NfVFlQRSAoKGtsYXNzKSwgVFlQRV9YS0JfTEFZT1VUKSkKLSsjZGVmaW5lIFhLQl9MQVlP VVRfR0VUX0NMQVNTKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBUWVBF X1hLQl9MQVlPVVQsIFhLQkxheW91dENsYXNzKSkKLSsKLSt0eXBlZGVmIHN0cnVjdCBfWEtCTGF5 b3V0IFhLQkxheW91dDsKLSt0eXBlZGVmIHN0cnVjdCBfWEtCTGF5b3V0Q2xhc3MgWEtCTGF5b3V0 Q2xhc3M7Ci0rCi0rI2RlZmluZSBUWVBFX0tFWUJJTkRJTkdfTUFOQUdFUiAoa2V5YmluZGluZ19t YW5hZ2VyX2dldF90eXBlICgpKQotKyNkZWZpbmUgS0VZQklORElOR19NQU5BR0VSKG9iaikgKEdf VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgVFlQRV9LRVlCSU5ESU5HX01BTkFHRVIs IEtleWJpbmRpbmdNYW5hZ2VyKSkKLSsjZGVmaW5lIEtFWUJJTkRJTkdfTUFOQUdFUl9DTEFTUyhr bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBUWVBFX0tFWUJJTkRJTkdf TUFOQUdFUiwgS2V5YmluZGluZ01hbmFnZXJDbGFzcykpCi0rI2RlZmluZSBJU19LRVlCSU5ESU5H X01BTkFHRVIob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBUWVBFX0tF WUJJTkRJTkdfTUFOQUdFUikpCi0rI2RlZmluZSBJU19LRVlCSU5ESU5HX01BTkFHRVJfQ0xBU1Mo a2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgVFlQRV9LRVlCSU5ESU5H X01BTkFHRVIpKQotKyNkZWZpbmUgS0VZQklORElOR19NQU5BR0VSX0dFVF9DTEFTUyhvYmopIChH X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgVFlQRV9LRVlCSU5ESU5HX01BTkFHRVIs IEtleWJpbmRpbmdNYW5hZ2VyQ2xhc3MpKQotKwotK3R5cGVkZWYgc3RydWN0IF9LZXliaW5kaW5n TWFuYWdlciBLZXliaW5kaW5nTWFuYWdlcjsKLSt0eXBlZGVmIHN0cnVjdCBfS2V5YmluZGluZ01h bmFnZXJDbGFzcyBLZXliaW5kaW5nTWFuYWdlckNsYXNzOwotKyNkZWZpbmUgX2dfZnJlZTAodmFy KSAodmFyID0gKGdfZnJlZSAodmFyKSwgTlVMTCkpCi0rI2RlZmluZSBfZ2tiZF9sYXlvdXRfdW5y ZWYwKHZhcikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDogKHZhciA9IChna2JkX2xheW91dF91bnJl ZiAodmFyKSwgTlVMTCkpKQotKyNkZWZpbmUgX3hrYl9sYXlvdXRfdW5yZWYwKHZhcikgKCh2YXIg PT0gTlVMTCkgPyBOVUxMIDogKHZhciA9ICh4a2JfbGF5b3V0X3VucmVmICh2YXIpLCBOVUxMKSkp Ci0rI2RlZmluZSBfZ19vYmplY3RfdW5yZWYwKHZhcikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDog KHZhciA9IChnX29iamVjdF91bnJlZiAodmFyKSwgTlVMTCkpKQotKyNkZWZpbmUgX3Byb3BlcnR5 X21hbmFnZXJfdW5yZWYwKHZhcikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDogKHZhciA9IChwcm9w ZXJ0eV9tYW5hZ2VyX3VucmVmICh2YXIpLCBOVUxMKSkpCi0rI2RlZmluZSBfZ190aW1lcl9kZXN0 cm95MCh2YXIpICgodmFyID09IE5VTEwpID8gTlVMTCA6ICh2YXIgPSAoZ190aW1lcl9kZXN0cm95 ICh2YXIpLCBOVUxMKSkpCi0rI2RlZmluZSBfZ192YXJpYW50X3VucmVmMCh2YXIpICgodmFyID09 IE5VTEwpID8gTlVMTCA6ICh2YXIgPSAoZ192YXJpYW50X3VucmVmICh2YXIpLCBOVUxMKSkpCi0r I2RlZmluZSBfX2dfbGlzdF9mcmVlX19nX2ZyZWUwXzAodmFyKSAoKHZhciA9PSBOVUxMKSA/IE5V TEwgOiAodmFyID0gKF9nX2xpc3RfZnJlZV9fZ19mcmVlMF8gKHZhciksIE5VTEwpKSkKLSsjZGVm aW5lIF9nX2Vycm9yX2ZyZWUwKHZhcikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDogKHZhciA9IChn X2Vycm9yX2ZyZWUgKHZhciksIE5VTEwpKSkKLSt0eXBlZGVmIHN0cnVjdCBfQmxvY2s0RGF0YSBC bG9jazREYXRhOwotKwotKyNkZWZpbmUgVFlQRV9JQ09OX1dJREdFVCAoaWNvbl93aWRnZXRfZ2V0 X3R5cGUgKCkpCi0rI2RlZmluZSBJQ09OX1dJREdFVChvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFO Q0VfQ0FTVCAoKG9iaiksIFRZUEVfSUNPTl9XSURHRVQsIEljb25XaWRnZXQpKQotKyNkZWZpbmUg SUNPTl9XSURHRVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNz KSwgVFlQRV9JQ09OX1dJREdFVCwgSWNvbldpZGdldENsYXNzKSkKLSsjZGVmaW5lIElTX0lDT05f V0lER0VUKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgVFlQRV9JQ09O X1dJREdFVCkpCi0rI2RlZmluZSBJU19JQ09OX1dJREdFVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9D SEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBUWVBFX0lDT05fV0lER0VUKSkKLSsjZGVmaW5lIElD T05fV0lER0VUX0dFVF9DTEFTUyhvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2Jq KSwgVFlQRV9JQ09OX1dJREdFVCwgSWNvbldpZGdldENsYXNzKSkKLSsKLSt0eXBlZGVmIHN0cnVj dCBfSWNvbldpZGdldCBJY29uV2lkZ2V0OwotK3R5cGVkZWYgc3RydWN0IF9JY29uV2lkZ2V0Q2xh c3MgSWNvbldpZGdldENsYXNzOwotKwotK3N0cnVjdCBfUGFuZWwgewotKwlJQnVzUGFuZWxTZXJ2 aWNlIHBhcmVudF9pbnN0YW5jZTsKLSsJUGFuZWxQcml2YXRlICogcHJpdjsKLSt9OwotKwotK3N0 cnVjdCBfUGFuZWxDbGFzcyB7Ci0rCUlCdXNQYW5lbFNlcnZpY2VDbGFzcyBwYXJlbnRfY2xhc3M7 Ci0rfTsKLSsKLStzdHJ1Y3QgX1BhbmVsUHJpdmF0ZSB7Ci0rCUlCdXNCdXMqIG1fYnVzOwotKwlJ QnVzQ29uZmlnKiBtX2NvbmZpZzsKLSsJR3RrU3RhdHVzSWNvbiogbV9zdGF0dXNfaWNvbjsKLSsJ R3RrTWVudSogbV9pbWVfbWVudTsKLSsJR3RrTWVudSogbV9zeXNfbWVudTsKLSsJSUJ1c0VuZ2lu ZURlc2MqKiBtX2VuZ2luZXM7Ci0rCWdpbnQgbV9lbmdpbmVzX2xlbmd0aDE7Ci0rCWdpbnQgX21f ZW5naW5lc19zaXplXzsKLSsJQ2FuZGlkYXRlUGFuZWwqIG1fY2FuZGlkYXRlX3BhbmVsOwotKwlT d2l0Y2hlciogbV9zd2l0Y2hlcjsKLSsJUHJvcGVydHlNYW5hZ2VyKiBtX3Byb3BlcnR5X21hbmFn ZXI7Ci0rCUdQaWQgbV9zZXR1cF9waWQ7Ci0rCUd0a0Fib3V0RGlhbG9nKiBtX2Fib3V0X2RpYWxv ZzsKLSsJR2tiZExheW91dCogbV9na2JkbGF5b3V0OwotKwlYS0JMYXlvdXQqIG1feGtibGF5b3V0 OwotKwlnY2hhcioqIG1fbGF5b3V0czsKLSsJZ2ludCBtX2xheW91dHNfbGVuZ3RoMTsKLSsJZ2lu dCBfbV9sYXlvdXRzX3NpemVfOwotKwlnY2hhcioqIG1fdmFyaWFudHM7Ci0rCWdpbnQgbV92YXJp YW50c19sZW5ndGgxOwotKwlnaW50IF9tX3ZhcmlhbnRzX3NpemVfOwotKwlnaW50IG1fZmFsbGJh Y2tfbG9ja19pZDsKLSsJZ2Jvb2xlYW4gbV9jaGFuZ2VkX3hrYl9vcHRpb247Ci0rCUdUaW1lciog bV9jaGFuZ2VkX2xheW91dF90aW1lcjsKLSsJZ2NoYXIqKiBBQ0NFTEVSQVRPUl9JTUVfSE9US0VZ UzsKLSsJZ2ludCBBQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxOwotKwlnaW50IF9BQ0NF TEVSQVRPUl9JTUVfSE9US0VZU19zaXplXzsKLSt9OwotKwotK3R5cGVkZWYgdm9pZCAoKktleWJp bmRpbmdNYW5hZ2VyS2V5YmluZGluZ0hhbmRsZXJGdW5jKSAoR2RrRXZlbnQqIGV2ZW50LCB2b2lk KiB1c2VyX2RhdGEpOwotK3N0cnVjdCBfQmxvY2s0RGF0YSB7Ci0rCWludCBfcmVmX2NvdW50XzsK LSsJUGFuZWwgKiBzZWxmOwotKwlJQnVzRW5naW5lRGVzYyogZTsKLSt9OwotKwotKwotK3N0YXRp YyBncG9pbnRlciBwYW5lbF9wYXJlbnRfY2xhc3MgPSBOVUxMOwotKwotK0dUeXBlIHBhbmVsX2dl dF90eXBlICh2b2lkKSBHX0dOVUNfQ09OU1Q7Ci0rR1R5cGUgY2FuZGlkYXRlX3BhbmVsX2dldF90 eXBlICh2b2lkKSBHX0dOVUNfQ09OU1Q7Ci0rR1R5cGUgc3dpdGNoZXJfZ2V0X3R5cGUgKHZvaWQp IEdfR05VQ19DT05TVDsKLStncG9pbnRlciBwcm9wZXJ0eV9tYW5hZ2VyX3JlZiAoZ3BvaW50ZXIg aW5zdGFuY2UpOwotK3ZvaWQgcHJvcGVydHlfbWFuYWdlcl91bnJlZiAoZ3BvaW50ZXIgaW5zdGFu Y2UpOwotK0dQYXJhbVNwZWMqIHBhcmFtX3NwZWNfcHJvcGVydHlfbWFuYWdlciAoY29uc3QgZ2No YXIqIG5hbWUsIGNvbnN0IGdjaGFyKiBuaWNrLCBjb25zdCBnY2hhciogYmx1cmIsIEdUeXBlIG9i amVjdF90eXBlLCBHUGFyYW1GbGFncyBmbGFncyk7Ci0rdm9pZCB2YWx1ZV9zZXRfcHJvcGVydHlf bWFuYWdlciAoR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdl9vYmplY3QpOwotK3ZvaWQgdmFsdWVf dGFrZV9wcm9wZXJ0eV9tYW5hZ2VyIChHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB2X29iamVjdCk7 Ci0rZ3BvaW50ZXIgdmFsdWVfZ2V0X3Byb3BlcnR5X21hbmFnZXIgKGNvbnN0IEdWYWx1ZSogdmFs dWUpOwotK0dUeXBlIHByb3BlcnR5X21hbmFnZXJfZ2V0X3R5cGUgKHZvaWQpIEdfR05VQ19DT05T VDsKLStncG9pbnRlciBna2JkX2xheW91dF9yZWYgKGdwb2ludGVyIGluc3RhbmNlKTsKLSt2b2lk IGdrYmRfbGF5b3V0X3VucmVmIChncG9pbnRlciBpbnN0YW5jZSk7Ci0rR1BhcmFtU3BlYyogcGFy YW1fc3BlY19na2JkX2xheW91dCAoY29uc3QgZ2NoYXIqIG5hbWUsIGNvbnN0IGdjaGFyKiBuaWNr LCBjb25zdCBnY2hhciogYmx1cmIsIEdUeXBlIG9iamVjdF90eXBlLCBHUGFyYW1GbGFncyBmbGFn cyk7Ci0rdm9pZCB2YWx1ZV9zZXRfZ2tiZF9sYXlvdXQgKEdWYWx1ZSogdmFsdWUsIGdwb2ludGVy IHZfb2JqZWN0KTsKLSt2b2lkIHZhbHVlX3Rha2VfZ2tiZF9sYXlvdXQgKEdWYWx1ZSogdmFsdWUs IGdwb2ludGVyIHZfb2JqZWN0KTsKLStncG9pbnRlciB2YWx1ZV9nZXRfZ2tiZF9sYXlvdXQgKGNv bnN0IEdWYWx1ZSogdmFsdWUpOwotK0dUeXBlIGdrYmRfbGF5b3V0X2dldF90eXBlICh2b2lkKSBH X0dOVUNfQ09OU1Q7Ci0rZ3BvaW50ZXIgeGtiX2xheW91dF9yZWYgKGdwb2ludGVyIGluc3RhbmNl KTsKLSt2b2lkIHhrYl9sYXlvdXRfdW5yZWYgKGdwb2ludGVyIGluc3RhbmNlKTsKLStHUGFyYW1T cGVjKiBwYXJhbV9zcGVjX3hrYl9sYXlvdXQgKGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBnY2hh ciogbmljaywgY29uc3QgZ2NoYXIqIGJsdXJiLCBHVHlwZSBvYmplY3RfdHlwZSwgR1BhcmFtRmxh Z3MgZmxhZ3MpOwotK3ZvaWQgdmFsdWVfc2V0X3hrYl9sYXlvdXQgKEdWYWx1ZSogdmFsdWUsIGdw b2ludGVyIHZfb2JqZWN0KTsKLSt2b2lkIHZhbHVlX3Rha2VfeGtiX2xheW91dCAoR1ZhbHVlKiB2 YWx1ZSwgZ3BvaW50ZXIgdl9vYmplY3QpOwotK2dwb2ludGVyIHZhbHVlX2dldF94a2JfbGF5b3V0 IChjb25zdCBHVmFsdWUqIHZhbHVlKTsKLStHVHlwZSB4a2JfbGF5b3V0X2dldF90eXBlICh2b2lk KSBHX0dOVUNfQ09OU1Q7Ci0rI2RlZmluZSBQQU5FTF9HRVRfUFJJVkFURShvKSAoR19UWVBFX0lO U1RBTkNFX0dFVF9QUklWQVRFICgobyksIFRZUEVfUEFORUwsIFBhbmVsUHJpdmF0ZSkpCi0rZW51 bSAgewotKwlQQU5FTF9EVU1NWV9QUk9QRVJUWQotK307Ci0rR1R5cGUga2V5YmluZGluZ19tYW5h Z2VyX2dldF90eXBlICh2b2lkKSBHX0dOVUNfQ09OU1Q7Ci0rS2V5YmluZGluZ01hbmFnZXIqIGtl eWJpbmRpbmdfbWFuYWdlcl9nZXRfaW5zdGFuY2UgKHZvaWQpOwotK3ZvaWQga2V5YmluZGluZ19t YW5hZ2VyX3VuYmluZCAoS2V5YmluZGluZ01hbmFnZXIqIHNlbGYsIGNvbnN0IGdjaGFyKiBhY2Nl bGVyYXRvcik7Ci0rI2RlZmluZSBQQU5FTF9BQ0NFTEVSQVRPUl9TV0lUQ0hfSU1FX0ZPUkVXQVJE ICI8Q29udHJvbD5zcGFjZSIKLSsjZGVmaW5lIFBBTkVMX0FDQ0VMRVJBVE9SX1NXSVRDSF9JTUVf QkFDS1dBUkQgIjxDb250cm9sPjxTaGlmdD5zcGFjZSIKLStzdGF0aWMgdm9pZCBwYW5lbF9na2Jk bGF5b3V0X2NoYW5nZWRfY2IgKFBhbmVsKiBzZWxmKTsKLStzdGF0aWMgdm9pZCBfcGFuZWxfZ2ti ZGxheW91dF9jaGFuZ2VkX2NiX2drYmRfbGF5b3V0X2NoYW5nZWQgKEdrYmRMYXlvdXQqIF9zZW5k ZXIsIGdwb2ludGVyIHNlbGYpOwotK3ZvaWQgZ2tiZF9sYXlvdXRfc3RvcF9saXN0ZW4gKEdrYmRM YXlvdXQqIHNlbGYpOwotK1BhbmVsKiBwYW5lbF9uZXcgKElCdXNCdXMqIGJ1cyk7Ci0rUGFuZWwq IHBhbmVsX2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0X3R5cGUsIElCdXNCdXMqIGJ1cyk7Ci0rc3Rh dGljIHZvaWQgcGFuZWxfc3RhdHVzX2ljb25fcG9wdXBfbWVudV9jYiAoUGFuZWwqIHNlbGYsIEd0 a1N0YXR1c0ljb24qIHN0YXR1c19pY29uLCBndWludCBidXR0b24sIGd1aW50IGFjdGl2YXRlX3Rp bWUpOwotK3N0YXRpYyB2b2lkIF9wYW5lbF9zdGF0dXNfaWNvbl9wb3B1cF9tZW51X2NiX2d0a19z dGF0dXNfaWNvbl9wb3B1cF9tZW51IChHdGtTdGF0dXNJY29uKiBfc2VuZGVyLCBndWludCBidXR0 b24sIGd1aW50IGFjdGl2YXRlX3RpbWUsIGdwb2ludGVyIHNlbGYpOwotK3N0YXRpYyB2b2lkIHBh bmVsX3N0YXR1c19pY29uX2FjdGl2YXRlX2NiIChQYW5lbCogc2VsZiwgR3RrU3RhdHVzSWNvbiog c3RhdHVzX2ljb24pOwotK3N0YXRpYyB2b2lkIF9wYW5lbF9zdGF0dXNfaWNvbl9hY3RpdmF0ZV9j Yl9ndGtfc3RhdHVzX2ljb25fYWN0aXZhdGUgKEd0a1N0YXR1c0ljb24qIF9zZW5kZXIsIGdwb2lu dGVyIHNlbGYpOwotK0NhbmRpZGF0ZVBhbmVsKiBjYW5kaWRhdGVfcGFuZWxfbmV3ICh2b2lkKTsK LStDYW5kaWRhdGVQYW5lbCogY2FuZGlkYXRlX3BhbmVsX2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0 X3R5cGUpOwotK3N0YXRpYyB2b2lkIF9fbGFtYmRhMjNfIChQYW5lbCogc2VsZiwgQ2FuZGlkYXRl UGFuZWwqIHcpOwotK3N0YXRpYyB2b2lkIF9fX2xhbWJkYTIzX19jYW5kaWRhdGVfcGFuZWxfcGFn ZV91cCAoQ2FuZGlkYXRlUGFuZWwqIF9zZW5kZXIsIGdwb2ludGVyIHNlbGYpOwotK3N0YXRpYyB2 b2lkIF9fbGFtYmRhMjRfIChQYW5lbCogc2VsZiwgQ2FuZGlkYXRlUGFuZWwqIHcpOwotK3N0YXRp YyB2b2lkIF9fX2xhbWJkYTI0X19jYW5kaWRhdGVfcGFuZWxfcGFnZV9kb3duIChDYW5kaWRhdGVQ YW5lbCogX3NlbmRlciwgZ3BvaW50ZXIgc2VsZik7Ci0rU3dpdGNoZXIqIHN3aXRjaGVyX25ldyAo dm9pZCk7Ci0rU3dpdGNoZXIqIHN3aXRjaGVyX2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0X3R5cGUp OwotK1Byb3BlcnR5TWFuYWdlciogcHJvcGVydHlfbWFuYWdlcl9uZXcgKHZvaWQpOwotK1Byb3Bl cnR5TWFuYWdlciogcHJvcGVydHlfbWFuYWdlcl9jb25zdHJ1Y3QgKEdUeXBlIG9iamVjdF90eXBl KTsKLStzdGF0aWMgdm9pZCBfX2xhbWJkYTI1XyAoUGFuZWwqIHNlbGYsIGNvbnN0IGdjaGFyKiBr LCBnaW50IHMpOwotK3N0YXRpYyB2b2lkIF9fX2xhbWJkYTI1X19wcm9wZXJ0eV9tYW5hZ2VyX3By b3BlcnR5X2FjdGl2YXRlIChQcm9wZXJ0eU1hbmFnZXIqIF9zZW5kZXIsIGNvbnN0IGdjaGFyKiBr ZXksIGdpbnQgc3RhdGUsIGdwb2ludGVyIHNlbGYpOwotK3N0YXRpYyB2b2lkIHBhbmVsX3NldF9r ZXliaW5kaW5nIChQYW5lbCogc2VsZik7Ci0rc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkOSAo Z2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Ci0r c3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTAgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0 aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpOwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2Fk ZDExIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVl KTsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxMiAoZ2NoYXIqKiogYXJyYXksIGludCog bGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Ci0rZ2Jvb2xlYW4ga2V5YmluZGluZ19t YW5hZ2VyX2JpbmQgKEtleWJpbmRpbmdNYW5hZ2VyKiBzZWxmLCBjb25zdCBnY2hhciogYWNjZWxl cmF0b3IsIEtleWJpbmRpbmdNYW5hZ2VyS2V5YmluZGluZ0hhbmRsZXJGdW5jIGhhbmRsZXIsIHZv aWQqIGhhbmRsZXJfdGFyZ2V0KTsKLStzdGF0aWMgdm9pZCBfX19fbGFtYmRhMjZfIChQYW5lbCog c2VsZiwgR2RrRXZlbnQqIGUpOwotK3N0YXRpYyB2b2lkIHBhbmVsX2hhbmRsZV9lbmdpbmVfc3dp dGNoIChQYW5lbCogc2VsZiwgR2RrRXZlbnQqIGV2ZW50LCBnYm9vbGVhbiByZXZlcnQpOwotK3N0 YXRpYyB2b2lkIF9fX19fbGFtYmRhMjZfX2tleWJpbmRpbmdfbWFuYWdlcl9rZXliaW5kaW5nX2hh bmRsZXJfZnVuYyAoR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRlciBzZWxmKTsKLStzdGF0aWMgdm9p ZCBfX19fX2xhbWJkYTI3XyAoUGFuZWwqIHNlbGYsIEdka0V2ZW50KiBlKTsKLStzdGF0aWMgdm9p ZCBfX19fX19sYW1iZGEyN19fa2V5YmluZGluZ19tYW5hZ2VyX2tleWJpbmRpbmdfaGFuZGxlcl9m dW5jIChHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIHNlbGYpOwotK3ZvaWQgcGFuZWxfc2V0X2Nv bmZpZyAoUGFuZWwqIHNlbGYsIElCdXNDb25maWcqIGNvbmZpZyk7Ci0rc3RhdGljIHZvaWQgcGFu ZWxfY29uZmlnX3ZhbHVlX2NoYW5nZWRfY2IgKFBhbmVsKiBzZWxmLCBJQnVzQ29uZmlnKiBjb25m aWcsIGNvbnN0IGdjaGFyKiBzZWN0aW9uLCBjb25zdCBnY2hhciogbmFtZSwgR1ZhcmlhbnQqIHZh cmlhbnQpOwotK3N0YXRpYyB2b2lkIF9wYW5lbF9jb25maWdfdmFsdWVfY2hhbmdlZF9jYl9pYnVz X2NvbmZpZ192YWx1ZV9jaGFuZ2VkIChJQnVzQ29uZmlnKiBfc2VuZGVyLCBjb25zdCBnY2hhciog c2VjdGlvbiwgY29uc3QgZ2NoYXIqIG5hbWUsIEdWYXJpYW50KiB2YWx1ZSwgZ3BvaW50ZXIgc2Vs Zik7Ci0rc3RhdGljIHZvaWQgcGFuZWxfaW5pdF9lbmdpbmVzX29yZGVyIChQYW5lbCogc2VsZik7 Ci0rc3RhdGljIHZvaWQgcGFuZWxfdXBkYXRlX2VuZ2luZXMgKFBhbmVsKiBzZWxmLCBHVmFyaWFu dCogdmFyX2VuZ2luZXMsIEdWYXJpYW50KiB2YXJfb3JkZXIpOwotK3ZvaWQgZ2tiZF9sYXlvdXRf bG9ja19ncm91cCAoR2tiZExheW91dCogc2VsZiwgZ2ludCBpZCk7Ci0rdm9pZCB4a2JfbGF5b3V0 X3Jlc2V0X2xheW91dCAoWEtCTGF5b3V0KiBzZWxmKTsKLStzdGF0aWMgdm9pZCBwYW5lbF91cGRh dGVfeGtiX2VuZ2luZXMgKFBhbmVsKiBzZWxmKTsKLStzdGF0aWMgdm9pZCBwYW5lbF9pbml0X2dr YmQgKFBhbmVsKiBzZWxmKTsKLStHa2JkTGF5b3V0KiBna2JkX2xheW91dF9uZXcgKHZvaWQpOwot K0drYmRMYXlvdXQqIGdrYmRfbGF5b3V0X2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0X3R5cGUpOwot K3ZvaWQgZ2tiZF9sYXlvdXRfc3RhcnRfbGlzdGVuIChHa2JkTGF5b3V0KiBzZWxmKTsKLStYS0JM YXlvdXQqIHhrYl9sYXlvdXRfbmV3IChJQnVzQ29uZmlnKiBjb25maWcpOwotK1hLQkxheW91dCog eGtiX2xheW91dF9jb25zdHJ1Y3QgKEdUeXBlIG9iamVjdF90eXBlLCBJQnVzQ29uZmlnKiBjb25m aWcpOwotK2djaGFyKiB4a2JfbGF5b3V0X2dldF9sYXlvdXQgKFhLQkxheW91dCogc2VsZik7Ci0r Z2NoYXIqIHhrYl9sYXlvdXRfZ2V0X3ZhcmlhbnQgKFhLQkxheW91dCogc2VsZik7Ci0rc3RhdGlj IHZvaWQgX2dfZnJlZTBfIChncG9pbnRlciB2YXIpOwotK3N0YXRpYyB2b2lkIF9nX2xpc3RfZnJl ZV9fZ19mcmVlMF8gKEdMaXN0KiBzZWxmKTsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQx MyAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7 Ci0rc3RhdGljIGdib29sZWFuIF92YWxhX3N0cmluZ19hcnJheV9jb250YWlucyAoZ2NoYXIqKiBz dGFjaywgaW50IHN0YWNrX2xlbmd0aCwgZ2NoYXIqIG5lZWRsZSk7Ci0rc3RhdGljIHZvaWQgX3Zh bGFfYXJyYXlfYWRkMTQgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBn Y2hhciogdmFsdWUpOwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDE1IChnY2hhcioqKiBh cnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKLStzdGF0aWMgdm9p ZCBwYW5lbF9zZXRfeGtiX2dyb3VwX2xheW91dCAoUGFuZWwqIHNlbGYsIGNvbnN0IGdjaGFyKiBs YXlvdXQpOwotK2dpbnQqIHhrYl9sYXlvdXRfc2V0X2xheW91dCAoWEtCTGF5b3V0KiBzZWxmLCBj b25zdCBnY2hhciogX2xheW91dCwgY29uc3QgZ2NoYXIqIF92YXJpYW50LCBjb25zdCBnY2hhciog X29wdGlvbiwgaW50KiByZXN1bHRfbGVuZ3RoMSk7Ci0rc3RhdGljIGdib29sZWFuIHBhbmVsX3Nl dF9na2JkX2xheW91dCAoUGFuZWwqIHNlbGYsIGNvbnN0IGdjaGFyKiBsYXlvdXQpOwotK2djaGFy KiogZ2tiZF9sYXlvdXRfZ2V0X2dyb3VwX25hbWVzIChHa2JkTGF5b3V0KiBzZWxmLCBpbnQqIHJl c3VsdF9sZW5ndGgxKTsKLStzdGF0aWMgdm9pZCBwYW5lbF9zZXRfbGF5b3V0IChQYW5lbCogc2Vs ZiwgY29uc3QgZ2NoYXIqIGxheW91dCk7Ci0rc3RhdGljIHZvaWQgcGFuZWxfc3dpdGNoX2VuZ2lu ZSAoUGFuZWwqIHNlbGYsIGdpbnQgaSwgZ2Jvb2xlYW4gZm9yY2UpOwotK3N0YXRpYyB2b2lkIF92 YWxhX2FycmF5X2FkZDE2IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwg Z2NoYXIqIHZhbHVlKTsKLStndWludCBrZXliaW5kaW5nX21hbmFnZXJfZ2V0X3ByaW1hcnlfbW9k aWZpZXIgKGd1aW50IGJpbmRpbmdfbWFzayk7Ci0rZ2Jvb2xlYW4ga2V5YmluZGluZ19tYW5hZ2Vy X3ByaW1hcnlfbW9kaWZpZXJfc3RpbGxfcHJlc3NlZCAoR2RrRXZlbnQqIGV2ZW50LCBndWludCBw cmltYXJ5X21vZGlmaWVyKTsKLStnaW50IHN3aXRjaGVyX3J1biAoU3dpdGNoZXIqIHNlbGYsIEdk a0V2ZW50KiBldmVudCwgSUJ1c0VuZ2luZURlc2MqKiBlbmdpbmVzLCBpbnQgZW5naW5lc19sZW5n dGgxLCBnaW50IGluZGV4KTsKLStzdGF0aWMgZ2NoYXIqKiBfdmFsYV9hcnJheV9kdXAyIChnY2hh cioqIHNlbGYsIGludCBsZW5ndGgpOwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDE3IChn Y2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKLStz dGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxOCAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3Ro LCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Ci0rc3RhdGljIElCdXNFbmdpbmVEZXNjKiogX3Zh bGFfYXJyYXlfZHVwMyAoSUJ1c0VuZ2luZURlc2MqKiBzZWxmLCBpbnQgbGVuZ3RoKTsKLStzdGF0 aWMgSUJ1c0VuZ2luZURlc2MqKiBfdmFsYV9hcnJheV9kdXA0IChJQnVzRW5naW5lRGVzYyoqIHNl bGYsIGludCBsZW5ndGgpOwotK3N0YXRpYyB2b2lkIHBhbmVsX3Nob3dfc2V0dXBfZGlhbG9nIChQ YW5lbCogc2VsZik7Ci0rc3RhdGljIHZvaWQgX19sYW1iZGExOF8gKFBhbmVsKiBzZWxmLCBHUGlk IHBpZCwgZ2ludCBzdGF0ZSk7Ci0rc3RhdGljIHZvaWQgX19fbGFtYmRhMThfX2djaGlsZF93YXRj aF9mdW5jIChHUGlkIHBpZCwgZ2ludCBzdGF0dXMsIGdwb2ludGVyIHNlbGYpOwotK3N0YXRpYyB2 b2lkIHBhbmVsX3Nob3dfYWJvdXRfZGlhbG9nIChQYW5lbCogc2VsZik7Ci0rc3RhdGljIHZvaWQg X19fbGFtYmRhMTdfIChQYW5lbCogc2VsZiwgR3RrTWVudUl0ZW0qIGkpOwotK3N0YXRpYyB2b2lk IF9fX19sYW1iZGExN19fZ3RrX21lbnVfaXRlbV9hY3RpdmF0ZSAoR3RrTWVudUl0ZW0qIF9zZW5k ZXIsIGdwb2ludGVyIHNlbGYpOwotK3N0YXRpYyB2b2lkIF9fX2xhbWJkYTE5XyAoUGFuZWwqIHNl bGYsIEd0a01lbnVJdGVtKiBpKTsKLStzdGF0aWMgdm9pZCBfX19fbGFtYmRhMTlfX2d0a19tZW51 X2l0ZW1fYWN0aXZhdGUgKEd0a01lbnVJdGVtKiBfc2VuZGVyLCBncG9pbnRlciBzZWxmKTsKLStz dGF0aWMgdm9pZCBfX19sYW1iZGEyMF8gKFBhbmVsKiBzZWxmLCBHdGtNZW51SXRlbSogaSk7Ci0r c3RhdGljIHZvaWQgX19fX2xhbWJkYTIwX19ndGtfbWVudV9pdGVtX2FjdGl2YXRlIChHdGtNZW51 SXRlbSogX3NlbmRlciwgZ3BvaW50ZXIgc2VsZik7Ci0rc3RhdGljIHZvaWQgX19fbGFtYmRhMjFf IChQYW5lbCogc2VsZiwgR3RrTWVudUl0ZW0qIGkpOwotK3N0YXRpYyB2b2lkIF9fX19sYW1iZGEy MV9fZ3RrX21lbnVfaXRlbV9hY3RpdmF0ZSAoR3RrTWVudUl0ZW0qIF9zZW5kZXIsIGdwb2ludGVy IHNlbGYpOwotK3N0YXRpYyB2b2lkIF9ndGtfc3RhdHVzX2ljb25fcG9zaXRpb25fbWVudV9ndGtf bWVudV9wb3NpdGlvbl9mdW5jIChHdGtNZW51KiBtZW51LCBnaW50KiB4LCBnaW50KiB5LCBnYm9v bGVhbiogcHVzaF9pbiwgZ3BvaW50ZXIgc2VsZik7Ci0rZ2ludCBwcm9wZXJ0eV9tYW5hZ2VyX2Ny ZWF0ZV9tZW51X2l0ZW1zIChQcm9wZXJ0eU1hbmFnZXIqIHNlbGYsIEd0a01lbnUqIG1lbnUpOwot K3N0YXRpYyBCbG9jazREYXRhKiBibG9jazRfZGF0YV9yZWYgKEJsb2NrNERhdGEqIF9kYXRhNF8p OwotK3N0YXRpYyB2b2lkIGJsb2NrNF9kYXRhX3VucmVmIChCbG9jazREYXRhKiBfZGF0YTRfKTsK LStJY29uV2lkZ2V0KiBpY29uX3dpZGdldF9uZXcgKGNvbnN0IGdjaGFyKiBpY29uLCBnaW50IHNp emUpOwotK0ljb25XaWRnZXQqIGljb25fd2lkZ2V0X2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0X3R5 cGUsIGNvbnN0IGdjaGFyKiBpY29uLCBnaW50IHNpemUpOwotK0dUeXBlIGljb25fd2lkZ2V0X2dl dF90eXBlICh2b2lkKSBHX0dOVUNfQ09OU1Q7Ci0rc3RhdGljIHZvaWQgX19fX2xhbWJkYTIyXyAo QmxvY2s0RGF0YSogX2RhdGE0XywgR3RrTWVudUl0ZW0qIGl0ZW0pOwotK3N0YXRpYyB2b2lkIF9f X19fbGFtYmRhMjJfX2d0a19tZW51X2l0ZW1fYWN0aXZhdGUgKEd0a01lbnVJdGVtKiBfc2VuZGVy LCBncG9pbnRlciBzZWxmKTsKLStzdGF0aWMgdm9pZCBwYW5lbF9yZWFsX3NldF9jdXJzb3JfbG9j YXRpb24gKElCdXNQYW5lbFNlcnZpY2UqIGJhc2UsIGdpbnQgeCwgZ2ludCB5LCBnaW50IHdpZHRo LCBnaW50IGhlaWdodCk7Ci0rdm9pZCBjYW5kaWRhdGVfcGFuZWxfc2V0X2N1cnNvcl9sb2NhdGlv biAoQ2FuZGlkYXRlUGFuZWwqIHNlbGYsIGdpbnQgeCwgZ2ludCB5LCBnaW50IHdpZHRoLCBnaW50 IGhlaWdodCk7Ci0rc3RhdGljIHZvaWQgcGFuZWxfcmVhbF9mb2N1c19pbiAoSUJ1c1BhbmVsU2Vy dmljZSogYmFzZSwgY29uc3QgZ2NoYXIqIGlucHV0X2NvbnRleHRfcGF0aCk7Ci0rc3RhdGljIHZv aWQgcGFuZWxfcmVhbF9mb2N1c19vdXQgKElCdXNQYW5lbFNlcnZpY2UqIGJhc2UsIGNvbnN0IGdj aGFyKiBpbnB1dF9jb250ZXh0X3BhdGgpOwotK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxfcmVnaXN0 ZXJfcHJvcGVydGllcyAoSUJ1c1BhbmVsU2VydmljZSogYmFzZSwgSUJ1c1Byb3BMaXN0KiBwcm9w cyk7Ci0rdm9pZCBwcm9wZXJ0eV9tYW5hZ2VyX3NldF9wcm9wZXJ0aWVzIChQcm9wZXJ0eU1hbmFn ZXIqIHNlbGYsIElCdXNQcm9wTGlzdCogcHJvcHMpOwotK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxf dXBkYXRlX3Byb3BlcnR5IChJQnVzUGFuZWxTZXJ2aWNlKiBiYXNlLCBJQnVzUHJvcGVydHkqIHBy b3ApOwotK3ZvaWQgcHJvcGVydHlfbWFuYWdlcl91cGRhdGVfcHJvcGVydHkgKFByb3BlcnR5TWFu YWdlciogc2VsZiwgSUJ1c1Byb3BlcnR5KiBwcm9wKTsKLStzdGF0aWMgdm9pZCBwYW5lbF9yZWFs X3VwZGF0ZV9wcmVlZGl0X3RleHQgKElCdXNQYW5lbFNlcnZpY2UqIGJhc2UsIElCdXNUZXh0KiB0 ZXh0LCBndWludCBjdXJzb3JfcG9zLCBnYm9vbGVhbiB2aXNpYmxlKTsKLSt2b2lkIGNhbmRpZGF0 ZV9wYW5lbF9zZXRfcHJlZWRpdF90ZXh0IChDYW5kaWRhdGVQYW5lbCogc2VsZiwgSUJ1c1RleHQq IHRleHQsIGd1aW50IGN1cnNvcik7Ci0rc3RhdGljIHZvaWQgcGFuZWxfcmVhbF9oaWRlX3ByZWVk aXRfdGV4dCAoSUJ1c1BhbmVsU2VydmljZSogYmFzZSk7Ci0rc3RhdGljIHZvaWQgcGFuZWxfcmVh bF91cGRhdGVfYXV4aWxpYXJ5X3RleHQgKElCdXNQYW5lbFNlcnZpY2UqIGJhc2UsIElCdXNUZXh0 KiB0ZXh0LCBnYm9vbGVhbiB2aXNpYmxlKTsKLSt2b2lkIGNhbmRpZGF0ZV9wYW5lbF9zZXRfYXV4 aWxpYXJ5X3RleHQgKENhbmRpZGF0ZVBhbmVsKiBzZWxmLCBJQnVzVGV4dCogdGV4dCk7Ci0rc3Rh dGljIHZvaWQgcGFuZWxfcmVhbF9oaWRlX2F1eGlsaWFyeV90ZXh0IChJQnVzUGFuZWxTZXJ2aWNl KiBiYXNlKTsKLStzdGF0aWMgdm9pZCBwYW5lbF9yZWFsX3VwZGF0ZV9sb29rdXBfdGFibGUgKElC dXNQYW5lbFNlcnZpY2UqIGJhc2UsIElCdXNMb29rdXBUYWJsZSogdGFibGUsIGdib29sZWFuIHZp c2libGUpOwotK3ZvaWQgY2FuZGlkYXRlX3BhbmVsX3NldF9sb29rdXBfdGFibGUgKENhbmRpZGF0 ZVBhbmVsKiBzZWxmLCBJQnVzTG9va3VwVGFibGUqIHRhYmxlKTsKLStzdGF0aWMgdm9pZCBwYW5l bF9yZWFsX2hpZGVfbG9va3VwX3RhYmxlIChJQnVzUGFuZWxTZXJ2aWNlKiBiYXNlKTsKLStzdGF0 aWMgdm9pZCBwYW5lbF9yZWFsX3N0YXRlX2NoYW5nZWQgKElCdXNQYW5lbFNlcnZpY2UqIGJhc2Up OwotK3N0YXRpYyB2b2lkIHBhbmVsX2ZpbmFsaXplIChHT2JqZWN0KiBvYmopOwotK3N0YXRpYyB2 b2lkIF92YWxhX2FycmF5X2Rlc3Ryb3kgKGdwb2ludGVyIGFycmF5LCBnaW50IGFycmF5X2xlbmd0 aCwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveV9mdW5jKTsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJh eV9mcmVlIChncG9pbnRlciBhcnJheSwgZ2ludCBhcnJheV9sZW5ndGgsIEdEZXN0cm95Tm90aWZ5 IGRlc3Ryb3lfZnVuYyk7Ci0rc3RhdGljIGdpbnQgX3ZhbGFfYXJyYXlfbGVuZ3RoIChncG9pbnRl ciBhcnJheSk7Ci0rCi0rCi0rc3RhdGljIHZvaWQgX3BhbmVsX2drYmRsYXlvdXRfY2hhbmdlZF9j Yl9na2JkX2xheW91dF9jaGFuZ2VkIChHa2JkTGF5b3V0KiBfc2VuZGVyLCBncG9pbnRlciBzZWxm KSB7Ci0rCXBhbmVsX2drYmRsYXlvdXRfY2hhbmdlZF9jYiAoc2VsZik7Ci0rfQotKwotKwotK3N0 YXRpYyBncG9pbnRlciBfZ19vYmplY3RfcmVmMCAoZ3BvaW50ZXIgc2VsZikgewotKwlyZXR1cm4g c2VsZiA/IGdfb2JqZWN0X3JlZiAoc2VsZikgOiBOVUxMOwotK30KLSsKLSsKLStzdGF0aWMgdm9p ZCBfcGFuZWxfc3RhdHVzX2ljb25fcG9wdXBfbWVudV9jYl9ndGtfc3RhdHVzX2ljb25fcG9wdXBf bWVudSAoR3RrU3RhdHVzSWNvbiogX3NlbmRlciwgZ3VpbnQgYnV0dG9uLCBndWludCBhY3RpdmF0 ZV90aW1lLCBncG9pbnRlciBzZWxmKSB7Ci0rCXBhbmVsX3N0YXR1c19pY29uX3BvcHVwX21lbnVf Y2IgKHNlbGYsIF9zZW5kZXIsIGJ1dHRvbiwgYWN0aXZhdGVfdGltZSk7Ci0rfQotKwotKwotK3N0 YXRpYyB2b2lkIF9wYW5lbF9zdGF0dXNfaWNvbl9hY3RpdmF0ZV9jYl9ndGtfc3RhdHVzX2ljb25f YWN0aXZhdGUgKEd0a1N0YXR1c0ljb24qIF9zZW5kZXIsIGdwb2ludGVyIHNlbGYpIHsKLSsJcGFu ZWxfc3RhdHVzX2ljb25fYWN0aXZhdGVfY2IgKHNlbGYsIF9zZW5kZXIpOwotK30KLSsKLSsKLStz dGF0aWMgdm9pZCBfX2xhbWJkYTIzXyAoUGFuZWwqIHNlbGYsIENhbmRpZGF0ZVBhbmVsKiB3KSB7 Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHcgIT0gTlVMTCk7Ci0rCWlidXNfcGFuZWxfc2VydmljZV9w YWdlX3VwICgoSUJ1c1BhbmVsU2VydmljZSopIHNlbGYpOwotK30KLSsKLSsKLStzdGF0aWMgdm9p ZCBfX19sYW1iZGEyM19fY2FuZGlkYXRlX3BhbmVsX3BhZ2VfdXAgKENhbmRpZGF0ZVBhbmVsKiBf c2VuZGVyLCBncG9pbnRlciBzZWxmKSB7Ci0rCV9fbGFtYmRhMjNfIChzZWxmLCBfc2VuZGVyKTsK LSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgX19sYW1iZGEyNF8gKFBhbmVsKiBzZWxmLCBDYW5kaWRh dGVQYW5lbCogdykgewotKwlnX3JldHVybl9pZl9mYWlsICh3ICE9IE5VTEwpOwotKwlpYnVzX3Bh bmVsX3NlcnZpY2VfcGFnZV9kb3duICgoSUJ1c1BhbmVsU2VydmljZSopIHNlbGYpOwotK30KLSsK LSsKLStzdGF0aWMgdm9pZCBfX19sYW1iZGEyNF9fY2FuZGlkYXRlX3BhbmVsX3BhZ2VfZG93biAo Q2FuZGlkYXRlUGFuZWwqIF9zZW5kZXIsIGdwb2ludGVyIHNlbGYpIHsKLSsJX19sYW1iZGEyNF8g KHNlbGYsIF9zZW5kZXIpOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfX2xhbWJkYTI1XyAoUGFu ZWwqIHNlbGYsIGNvbnN0IGdjaGFyKiBrLCBnaW50IHMpIHsKLSsJY29uc3QgZ2NoYXIqIF90bXAw XzsKLSsJZ2ludCBfdG1wMV87Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKGsgIT0gTlVMTCk7Ci0rCV90 bXAwXyA9IGs7Ci0rCV90bXAxXyA9IHM7Ci0rCWlidXNfcGFuZWxfc2VydmljZV9wcm9wZXJ0eV9h Y3RpdmF0ZSAoKElCdXNQYW5lbFNlcnZpY2UqKSBzZWxmLCBfdG1wMF8sIChndWludCkgX3RtcDFf KTsKLSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgX19fbGFtYmRhMjVfX3Byb3BlcnR5X21hbmFnZXJf cHJvcGVydHlfYWN0aXZhdGUgKFByb3BlcnR5TWFuYWdlciogX3NlbmRlciwgY29uc3QgZ2NoYXIq IGtleSwgZ2ludCBzdGF0ZSwgZ3BvaW50ZXIgc2VsZikgewotKwlfX2xhbWJkYTI1XyAoc2VsZiwg a2V5LCBzdGF0ZSk7Ci0rfQotKwotKwotK1BhbmVsKiBwYW5lbF9jb25zdHJ1Y3QgKEdUeXBlIG9i amVjdF90eXBlLCBJQnVzQnVzKiBidXMpIHsKLSsJUGFuZWwgKiBzZWxmID0gTlVMTDsKLSsJSUJ1 c0J1cyogX3RtcDBfOwotKwlnYm9vbGVhbiBfdG1wMV8gPSBGQUxTRTsKLSsJSUJ1c0J1cyogX3Rt cDJfOwotKwlHREJ1c0Nvbm5lY3Rpb24qIF90bXAzXyA9IE5VTEw7Ci0rCUlCdXNCdXMqIF90bXA0 XzsKLSsJSUJ1c0J1cyogX3RtcDVfOwotKwlHdGtTdGF0dXNJY29uKiBfdG1wNl87Ci0rCUd0a1N0 YXR1c0ljb24qIF90bXA3XzsKLSsJR3RrU3RhdHVzSWNvbiogX3RtcDhfOwotKwlHdGtTdGF0dXNJ Y29uKiBfdG1wOV87Ci0rCUd0a1N0YXR1c0ljb24qIF90bXAxMF87Ci0rCUd0a1N0YXR1c0ljb24q IF90bXAxMV87Ci0rCUNhbmRpZGF0ZVBhbmVsKiBfdG1wMTJfOwotKwlDYW5kaWRhdGVQYW5lbCog X3RtcDEzXzsKLSsJQ2FuZGlkYXRlUGFuZWwqIF90bXAxNF87Ci0rCUNhbmRpZGF0ZVBhbmVsKiBf dG1wMTVfOwotKwlTd2l0Y2hlciogX3RtcDE2XzsKLSsJU3dpdGNoZXIqIF90bXAxN187Ci0rCVBy b3BlcnR5TWFuYWdlciogX3RtcDE4XzsKLSsJUHJvcGVydHlNYW5hZ2VyKiBfdG1wMTlfOwotKwln X3JldHVybl92YWxfaWZfZmFpbCAoYnVzICE9IE5VTEwsIE5VTEwpOwotKwlfdG1wMF8gPSBidXM7 Ci0rCV90bXAxXyA9IGlidXNfYnVzX2lzX2Nvbm5lY3RlZCAoX3RtcDBfKTsKLSsJZ19hc3NlcnQg KF90bXAxXyk7Ci0rCV90bXAyXyA9IGJ1czsKLSsJX3RtcDNfID0gaWJ1c19idXNfZ2V0X2Nvbm5l Y3Rpb24gKF90bXAyXyk7Ci0rCXNlbGYgPSAoUGFuZWwqKSBnX29iamVjdF9uZXcgKG9iamVjdF90 eXBlLCAiY29ubmVjdGlvbiIsIF90bXAzXywgIm9iamVjdC1wYXRoIiwgIi9vcmcvZnJlZWRlc2t0 b3AvSUJ1cy9QYW5lbCIsIE5VTEwpOwotKwlfdG1wNF8gPSBidXM7Ci0rCV90bXA1XyA9IF9nX29i amVjdF9yZWYwIChfdG1wNF8pOwotKwlfZ19vYmplY3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX2J1 cyk7Ci0rCXNlbGYtPnByaXYtPm1fYnVzID0gX3RtcDVfOwotKwlfdG1wNl8gPSBndGtfc3RhdHVz X2ljb25fbmV3ICgpOwotKwlfZ19vYmplY3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX3N0YXR1c19p Y29uKTsKLSsJc2VsZi0+cHJpdi0+bV9zdGF0dXNfaWNvbiA9IF90bXA2XzsKLSsJX3RtcDdfID0g c2VsZi0+cHJpdi0+bV9zdGF0dXNfaWNvbjsKLSsJZ3RrX3N0YXR1c19pY29uX3NldF9uYW1lIChf dG1wN18sICJpYnVzLXVpLWd0ayIpOwotKwlfdG1wOF8gPSBzZWxmLT5wcml2LT5tX3N0YXR1c19p Y29uOwotKwlndGtfc3RhdHVzX2ljb25fc2V0X3RpdGxlIChfdG1wOF8sICJJQnVzIFBhbmVsIik7 Ci0rCV90bXA5XyA9IHNlbGYtPnByaXYtPm1fc3RhdHVzX2ljb247Ci0rCWdfc2lnbmFsX2Nvbm5l Y3Rfb2JqZWN0IChfdG1wOV8sICJwb3B1cC1tZW51IiwgKEdDYWxsYmFjaykgX3BhbmVsX3N0YXR1 c19pY29uX3BvcHVwX21lbnVfY2JfZ3RrX3N0YXR1c19pY29uX3BvcHVwX21lbnUsIHNlbGYsIDAp OwotKwlfdG1wMTBfID0gc2VsZi0+cHJpdi0+bV9zdGF0dXNfaWNvbjsKLSsJZ19zaWduYWxfY29u bmVjdF9vYmplY3QgKF90bXAxMF8sICJhY3RpdmF0ZSIsIChHQ2FsbGJhY2spIF9wYW5lbF9zdGF0 dXNfaWNvbl9hY3RpdmF0ZV9jYl9ndGtfc3RhdHVzX2ljb25fYWN0aXZhdGUsIHNlbGYsIDApOwot KwlfdG1wMTFfID0gc2VsZi0+cHJpdi0+bV9zdGF0dXNfaWNvbjsKLSsJZ3RrX3N0YXR1c19pY29u X3NldF9mcm9tX2ljb25fbmFtZSAoX3RtcDExXywgImlidXMta2V5Ym9hcmQiKTsKLSsJX3RtcDEy XyA9IGNhbmRpZGF0ZV9wYW5lbF9uZXcgKCk7Ci0rCV90bXAxM18gPSBnX29iamVjdF9yZWZfc2lu ayAoX3RtcDEyXyk7Ci0rCV9nX29iamVjdF91bnJlZjAgKHNlbGYtPnByaXYtPm1fY2FuZGlkYXRl X3BhbmVsKTsKLSsJc2VsZi0+cHJpdi0+bV9jYW5kaWRhdGVfcGFuZWwgPSBfdG1wMTNfOwotKwlf dG1wMTRfID0gc2VsZi0+cHJpdi0+bV9jYW5kaWRhdGVfcGFuZWw7Ci0rCWdfc2lnbmFsX2Nvbm5l Y3Rfb2JqZWN0IChfdG1wMTRfLCAicGFnZS11cCIsIChHQ2FsbGJhY2spIF9fX2xhbWJkYTIzX19j YW5kaWRhdGVfcGFuZWxfcGFnZV91cCwgc2VsZiwgMCk7Ci0rCV90bXAxNV8gPSBzZWxmLT5wcml2 LT5tX2NhbmRpZGF0ZV9wYW5lbDsKLSsJZ19zaWduYWxfY29ubmVjdF9vYmplY3QgKF90bXAxNV8s ICJwYWdlLWRvd24iLCAoR0NhbGxiYWNrKSBfX19sYW1iZGEyNF9fY2FuZGlkYXRlX3BhbmVsX3Bh Z2VfZG93biwgc2VsZiwgMCk7Ci0rCV90bXAxNl8gPSBzd2l0Y2hlcl9uZXcgKCk7Ci0rCV90bXAx N18gPSBnX29iamVjdF9yZWZfc2luayAoX3RtcDE2Xyk7Ci0rCV9nX29iamVjdF91bnJlZjAgKHNl bGYtPnByaXYtPm1fc3dpdGNoZXIpOwotKwlzZWxmLT5wcml2LT5tX3N3aXRjaGVyID0gX3RtcDE3 XzsKLSsJX3RtcDE4XyA9IHByb3BlcnR5X21hbmFnZXJfbmV3ICgpOwotKwlfcHJvcGVydHlfbWFu YWdlcl91bnJlZjAgKHNlbGYtPnByaXYtPm1fcHJvcGVydHlfbWFuYWdlcik7Ci0rCXNlbGYtPnBy aXYtPm1fcHJvcGVydHlfbWFuYWdlciA9IF90bXAxOF87Ci0rCV90bXAxOV8gPSBzZWxmLT5wcml2 LT5tX3Byb3BlcnR5X21hbmFnZXI7Ci0rCWdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0IChfdG1wMTlf LCAicHJvcGVydHktYWN0aXZhdGUiLCAoR0NhbGxiYWNrKSBfX19sYW1iZGEyNV9fcHJvcGVydHlf bWFuYWdlcl9wcm9wZXJ0eV9hY3RpdmF0ZSwgc2VsZiwgMCk7Ci0rCWdfc2lnbmFsX2VtaXRfYnlf bmFtZSAoKElCdXNQYW5lbFNlcnZpY2UqKSBzZWxmLCAic3RhdGUtY2hhbmdlZCIpOwotKwlyZXR1 cm4gc2VsZjsKLSt9Ci0rCi0rCi0rUGFuZWwqIHBhbmVsX25ldyAoSUJ1c0J1cyogYnVzKSB7Ci0r CXJldHVybiBwYW5lbF9jb25zdHJ1Y3QgKFRZUEVfUEFORUwsIGJ1cyk7Ci0rfQotKwotKwotK3N0 YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDkgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwg aW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKLSsJaWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7 Ci0rCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKLSsJCSphcnJheSA9IGdf cmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7Ci0rCX0KLSsJKCphcnJheSlbKCps ZW5ndGgpKytdID0gdmFsdWU7Ci0rCSgqYXJyYXkpWypsZW5ndGhdID0gTlVMTDsKLSt9Ci0rCi0r Ci0rc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTAgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxl bmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKLSsJaWYgKCgqbGVuZ3RoKSA9PSAoKnNp emUpKSB7Ci0rCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKLSsJCSphcnJh eSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7Ci0rCX0KLSsJKCphcnJh eSlbKCpsZW5ndGgpKytdID0gdmFsdWU7Ci0rCSgqYXJyYXkpWypsZW5ndGhdID0gTlVMTDsKLSt9 Ci0rCi0rCi0rc3RhdGljIGdjaGFyKiBzdHJpbmdfc2xpY2UgKGNvbnN0IGdjaGFyKiBzZWxmLCBn bG9uZyBzdGFydCwgZ2xvbmcgZW5kKSB7Ci0rCWdjaGFyKiByZXN1bHQgPSBOVUxMOwotKwlnaW50 IF90bXAwXzsKLSsJZ2ludCBfdG1wMV87Ci0rCWdsb25nIHN0cmluZ19sZW5ndGg7Ci0rCWdsb25n IF90bXAyXzsKLSsJZ2xvbmcgX3RtcDVfOwotKwlnYm9vbGVhbiBfdG1wOF8gPSBGQUxTRTsKLSsJ Z2xvbmcgX3RtcDlfOwotKwlnYm9vbGVhbiBfdG1wMTJfOwotKwlnYm9vbGVhbiBfdG1wMTNfID0g RkFMU0U7Ci0rCWdsb25nIF90bXAxNF87Ci0rCWdib29sZWFuIF90bXAxN187Ci0rCWdsb25nIF90 bXAxOF87Ci0rCWdsb25nIF90bXAxOV87Ci0rCWdsb25nIF90bXAyMF87Ci0rCWdsb25nIF90bXAy MV87Ci0rCWdsb25nIF90bXAyMl87Ci0rCWdjaGFyKiBfdG1wMjNfID0gTlVMTDsKLSsJZ19yZXR1 cm5fdmFsX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCwgTlVMTCk7Ci0rCV90bXAwXyA9IHN0cmxlbiAo c2VsZik7Ci0rCV90bXAxXyA9IF90bXAwXzsKLSsJc3RyaW5nX2xlbmd0aCA9IChnbG9uZykgX3Rt cDFfOwotKwlfdG1wMl8gPSBzdGFydDsKLSsJaWYgKF90bXAyXyA8ICgoZ2xvbmcpIDApKSB7Ci0r CQlnbG9uZyBfdG1wM187Ci0rCQlnbG9uZyBfdG1wNF87Ci0rCQlfdG1wM18gPSBzdHJpbmdfbGVu Z3RoOwotKwkJX3RtcDRfID0gc3RhcnQ7Ci0rCQlzdGFydCA9IF90bXAzXyArIF90bXA0XzsKLSsJ fQotKwlfdG1wNV8gPSBlbmQ7Ci0rCWlmIChfdG1wNV8gPCAoKGdsb25nKSAwKSkgewotKwkJZ2xv bmcgX3RtcDZfOwotKwkJZ2xvbmcgX3RtcDdfOwotKwkJX3RtcDZfID0gc3RyaW5nX2xlbmd0aDsK LSsJCV90bXA3XyA9IGVuZDsKLSsJCWVuZCA9IF90bXA2XyArIF90bXA3XzsKLSsJfQotKwlfdG1w OV8gPSBzdGFydDsKLSsJaWYgKF90bXA5XyA+PSAoKGdsb25nKSAwKSkgewotKwkJZ2xvbmcgX3Rt cDEwXzsKLSsJCWdsb25nIF90bXAxMV87Ci0rCQlfdG1wMTBfID0gc3RhcnQ7Ci0rCQlfdG1wMTFf ID0gc3RyaW5nX2xlbmd0aDsKLSsJCV90bXA4XyA9IF90bXAxMF8gPD0gX3RtcDExXzsKLSsJfSBl bHNlIHsKLSsJCV90bXA4XyA9IEZBTFNFOwotKwl9Ci0rCV90bXAxMl8gPSBfdG1wOF87Ci0rCWdf cmV0dXJuX3ZhbF9pZl9mYWlsIChfdG1wMTJfLCBOVUxMKTsKLSsJX3RtcDE0XyA9IGVuZDsKLSsJ aWYgKF90bXAxNF8gPj0gKChnbG9uZykgMCkpIHsKLSsJCWdsb25nIF90bXAxNV87Ci0rCQlnbG9u ZyBfdG1wMTZfOwotKwkJX3RtcDE1XyA9IGVuZDsKLSsJCV90bXAxNl8gPSBzdHJpbmdfbGVuZ3Ro OwotKwkJX3RtcDEzXyA9IF90bXAxNV8gPD0gX3RtcDE2XzsKLSsJfSBlbHNlIHsKLSsJCV90bXAx M18gPSBGQUxTRTsKLSsJfQotKwlfdG1wMTdfID0gX3RtcDEzXzsKLSsJZ19yZXR1cm5fdmFsX2lm X2ZhaWwgKF90bXAxN18sIE5VTEwpOwotKwlfdG1wMThfID0gc3RhcnQ7Ci0rCV90bXAxOV8gPSBl bmQ7Ci0rCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChfdG1wMThfIDw9IF90bXAxOV8sIE5VTEwpOwot KwlfdG1wMjBfID0gc3RhcnQ7Ci0rCV90bXAyMV8gPSBlbmQ7Ci0rCV90bXAyMl8gPSBzdGFydDsK LSsJX3RtcDIzXyA9IGdfc3RybmR1cCAoKChnY2hhciopIHNlbGYpICsgX3RtcDIwXywgKGdzaXpl KSAoX3RtcDIxXyAtIF90bXAyMl8pKTsKLSsJcmVzdWx0ID0gX3RtcDIzXzsKLSsJcmV0dXJuIHJl c3VsdDsKLSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTEgKGdjaGFyKioq IGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKLSsJaWYgKCgq bGVuZ3RoKSA9PSAoKnNpemUpKSB7Ci0rCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkp IDogNDsKLSsJCSphcnJheSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7 Ci0rCX0KLSsJKCphcnJheSlbKCpsZW5ndGgpKytdID0gdmFsdWU7Ci0rCSgqYXJyYXkpWypsZW5n dGhdID0gTlVMTDsKLSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTIgKGdj aGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKLSsJ aWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7Ci0rCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgq c2l6ZSkpIDogNDsKLSsJCSphcnJheSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUp ICsgMSk7Ci0rCX0KLSsJKCphcnJheSlbKCpsZW5ndGgpKytdID0gdmFsdWU7Ci0rCSgqYXJyYXkp WypsZW5ndGhdID0gTlVMTDsKLSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgX19fX2xhbWJkYTI2XyAo UGFuZWwqIHNlbGYsIEdka0V2ZW50KiBlKSB7Ci0rCUdka0V2ZW50KiBfdG1wMF87Ci0rCWdfcmV0 dXJuX2lmX2ZhaWwgKGUgIT0gTlVMTCk7Ci0rCV90bXAwXyA9IGU7Ci0rCXBhbmVsX2hhbmRsZV9l bmdpbmVfc3dpdGNoIChzZWxmLCBfdG1wMF8sIEZBTFNFKTsKLSt9Ci0rCi0rCi0rc3RhdGljIHZv aWQgX19fX19sYW1iZGEyNl9fa2V5YmluZGluZ19tYW5hZ2VyX2tleWJpbmRpbmdfaGFuZGxlcl9m dW5jIChHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIHNlbGYpIHsKLSsJX19fX2xhbWJkYTI2XyAo c2VsZiwgZXZlbnQpOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfX19fX2xhbWJkYTI3XyAoUGFu ZWwqIHNlbGYsIEdka0V2ZW50KiBlKSB7Ci0rCUdka0V2ZW50KiBfdG1wMF87Ci0rCWdfcmV0dXJu X2lmX2ZhaWwgKGUgIT0gTlVMTCk7Ci0rCV90bXAwXyA9IGU7Ci0rCXBhbmVsX2hhbmRsZV9lbmdp bmVfc3dpdGNoIChzZWxmLCBfdG1wMF8sIFRSVUUpOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBf X19fX19sYW1iZGEyN19fa2V5YmluZGluZ19tYW5hZ2VyX2tleWJpbmRpbmdfaGFuZGxlcl9mdW5j IChHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIHNlbGYpIHsKLSsJX19fX19sYW1iZGEyN18gKHNl bGYsIGV2ZW50KTsKLSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgcGFuZWxfc2V0X2tleWJpbmRpbmcg KFBhbmVsKiBzZWxmKSB7Ci0rCWNvbnN0IGdjaGFyKiBfdG1wMF8gPSBOVUxMOwotKwlnY2hhciog X3RtcDFfOwotKwlnY2hhciogbG9jYWxlOwotKwljb25zdCBnY2hhciogX3RtcDJfOwotKwlnY2hh cioqIF90bXA0XzsKLSsJZ2ludCBfdG1wNF9fbGVuZ3RoMTsKLSsJZ2NoYXIqIF90bXA1XzsKLSsJ SUJ1c0NvbmZpZyogX3RtcDZfOwotKwlnYm9vbGVhbiBfdG1wMjNfID0gRkFMU0U7Ci0rCWdjaGFy KiogX3RtcDI0XzsKLSsJZ2ludCBfdG1wMjRfX2xlbmd0aDE7Ci0rCWdib29sZWFuIF90bXAyN187 Ci0rCUtleWJpbmRpbmdNYW5hZ2VyKiBfdG1wMzZfID0gTlVMTDsKLSsJS2V5YmluZGluZ01hbmFn ZXIqIGtleWJpbmRpbmdfbWFuYWdlcjsKLSsJZ2NoYXIqKiBfdG1wMzdfOwotKwlnaW50IF90bXAz N19fbGVuZ3RoMTsKLSsJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsKLSsJX3RtcDBf ID0gc2V0bG9jYWxlIChMQ19BTEwsIE5VTEwpOwotKwlfdG1wMV8gPSBnX3N0cmR1cCAoX3RtcDBf KTsKLSsJbG9jYWxlID0gX3RtcDFfOwotKwlfdG1wMl8gPSBsb2NhbGU7Ci0rCWlmIChfdG1wMl8g PT0gTlVMTCkgewotKwkJZ2NoYXIqIF90bXAzXzsKLSsJCV90bXAzXyA9IGdfc3RyZHVwICgiQyIp OwotKwkJX2dfZnJlZTAgKGxvY2FsZSk7Ci0rCQlsb2NhbGUgPSBfdG1wM187Ci0rCX0KLSsJX3Rt cDRfID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVM7Ci0rCV90bXA0X19sZW5n dGgxID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMTsKLSsJX3Rt cDVfID0gZ19zdHJkdXAgKFBBTkVMX0FDQ0VMRVJBVE9SX1NXSVRDSF9JTUVfRk9SRVdBUkQpOwot KwlfdmFsYV9hcnJheV9hZGQ5ICgmc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVMs ICZzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxLCAmc2VsZi0+cHJp di0+X0FDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX3NpemVfLCBfdG1wNV8pOwotKwlfdG1wNl8gPSBz ZWxmLT5wcml2LT5tX2NvbmZpZzsKLSsJaWYgKF90bXA2XyAhPSBOVUxMKSB7Ci0rCQlJQnVzQ29u ZmlnKiBfdG1wN187Ci0rCQlHVmFyaWFudCogX3RtcDhfID0gTlVMTDsKLSsJCUdWYXJpYW50KiB2 YXJpYW50OwotKwkJR1ZhcmlhbnQqIF90bXA5XzsKLSsJCV90bXA3XyA9IHNlbGYtPnByaXYtPm1f Y29uZmlnOwotKwkJX3RtcDhfID0gaWJ1c19jb25maWdfZ2V0X3ZhbHVlIChfdG1wN18sICJnZW5l cmFsL2hvdGtleSIsICJ0cmlnZ2VyX2FjY2VsIik7Ci0rCQl2YXJpYW50ID0gX3RtcDhfOwotKwkJ X3RtcDlfID0gdmFyaWFudDsKLSsJCWlmIChfdG1wOV8gIT0gTlVMTCkgewotKwkJCWdjaGFyKiog X3RtcDEwXyA9IE5VTEw7Ci0rCQkJX3RtcDEwXyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7Ci0r CQkJc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVMgPSAoX3ZhbGFfYXJyYXlfZnJl ZSAoc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVMsIHNlbGYtPnByaXYtPkFDQ0VM RVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVM TCk7Ci0rCQkJc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVMgPSBfdG1wMTBfOwot KwkJCXNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDEgPSAwOwotKwkJ CXNlbGYtPnByaXYtPl9BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19zaXplXyA9IHNlbGYtPnByaXYt PkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDE7Ci0rCQkJewotKwkJCQlnaW50IGk7Ci0r CQkJCWkgPSAwOwotKwkJCQl7Ci0rCQkJCQlnYm9vbGVhbiBfdG1wMTFfOwotKwkJCQkJX3RtcDEx XyA9IFRSVUU7Ci0rCQkJCQl3aGlsZSAoVFJVRSkgewotKwkJCQkJCWdib29sZWFuIF90bXAxMl87 Ci0rCQkJCQkJZ2ludCBfdG1wMTRfOwotKwkJCQkJCUdWYXJpYW50KiBfdG1wMTVfOwotKwkJCQkJ CWdzaXplIF90bXAxNl8gPSAwVUw7Ci0rCQkJCQkJZ2NoYXIqKiBfdG1wMTdfOwotKwkJCQkJCWdp bnQgX3RtcDE3X19sZW5ndGgxOwotKwkJCQkJCUdWYXJpYW50KiBfdG1wMThfOwotKwkJCQkJCWdp bnQgX3RtcDE5XzsKLSsJCQkJCQlHVmFyaWFudCogX3RtcDIwXyA9IE5VTEw7Ci0rCQkJCQkJR1Zh cmlhbnQqIF90bXAyMV87Ci0rCQkJCQkJZ2NoYXIqIF90bXAyMl8gPSBOVUxMOwotKwkJCQkJCV90 bXAxMl8gPSBfdG1wMTFfOwotKwkJCQkJCWlmICghX3RtcDEyXykgewotKwkJCQkJCQlnaW50IF90 bXAxM187Ci0rCQkJCQkJCV90bXAxM18gPSBpOwotKwkJCQkJCQlpID0gX3RtcDEzXyArIDE7Ci0r CQkJCQkJfQotKwkJCQkJCV90bXAxMV8gPSBGQUxTRTsKLSsJCQkJCQlfdG1wMTRfID0gaTsKLSsJ CQkJCQlfdG1wMTVfID0gdmFyaWFudDsKLSsJCQkJCQlfdG1wMTZfID0gZ192YXJpYW50X25fY2hp bGRyZW4gKF90bXAxNV8pOwotKwkJCQkJCWlmICghKCgoZ3NpemUpIF90bXAxNF8pIDwgX3RtcDE2 XykpIHsKLSsJCQkJCQkJYnJlYWs7Ci0rCQkJCQkJfQotKwkJCQkJCV90bXAxN18gPSBzZWxmLT5w cml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZUzsKLSsJCQkJCQlfdG1wMTdfX2xlbmd0aDEgPSBz ZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxOwotKwkJCQkJCV90bXAx OF8gPSB2YXJpYW50OwotKwkJCQkJCV90bXAxOV8gPSBpOwotKwkJCQkJCV90bXAyMF8gPSBnX3Zh cmlhbnRfZ2V0X2NoaWxkX3ZhbHVlIChfdG1wMThfLCAoZ3NpemUpIF90bXAxOV8pOwotKwkJCQkJ CV90bXAyMV8gPSBfdG1wMjBfOwotKwkJCQkJCV90bXAyMl8gPSBnX3ZhcmlhbnRfZHVwX3N0cmlu ZyAoX3RtcDIxXywgTlVMTCk7Ci0rCQkJCQkJX3ZhbGFfYXJyYXlfYWRkMTAgKCZzZWxmLT5wcml2 LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZUywgJnNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9I T1RLRVlTX2xlbmd0aDEsICZzZWxmLT5wcml2LT5fQUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfc2l6 ZV8sIF90bXAyMl8pOwotKwkJCQkJCV9nX3ZhcmlhbnRfdW5yZWYwIChfdG1wMjFfKTsKLSsJCQkJ CX0KLSsJCQkJfQotKwkJCX0KLSsJCX0KLSsJCV9nX3ZhcmlhbnRfdW5yZWYwICh2YXJpYW50KTsK LSsJfQotKwlfdG1wMjRfID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVM7Ci0r CV90bXAyNF9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xl bmd0aDE7Ci0rCWlmIChfdG1wMjRfX2xlbmd0aDEgPT0gMSkgewotKwkJZ2NoYXIqKiBfdG1wMjVf OwotKwkJZ2ludCBfdG1wMjVfX2xlbmd0aDE7Ci0rCQljb25zdCBnY2hhciogX3RtcDI2XzsKLSsJ CV90bXAyNV8gPSBzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZUzsKLSsJCV90bXAy NV9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDE7 Ci0rCQlfdG1wMjZfID0gX3RtcDI1X1swXTsKLSsJCV90bXAyM18gPSBnX3N0cmNtcDAgKF90bXAy Nl8sIFBBTkVMX0FDQ0VMRVJBVE9SX1NXSVRDSF9JTUVfRk9SRVdBUkQpID09IDA7Ci0rCX0gZWxz ZSB7Ci0rCQlfdG1wMjNfID0gRkFMU0U7Ci0rCX0KLSsJX3RtcDI3XyA9IF90bXAyM187Ci0rCWlm IChfdG1wMjdfKSB7Ci0rCQljb25zdCBnY2hhciogX3RtcDI4XzsKLSsJCWdjaGFyKiBfdG1wMjlf ID0gTlVMTDsKLSsJCWdjaGFyKiBfdG1wMzBfOwotKwkJZ2Jvb2xlYW4gX3RtcDMxXzsKLSsJCV90 bXAyOF8gPSBsb2NhbGU7Ci0rCQlfdG1wMjlfID0gc3RyaW5nX3NsaWNlIChfdG1wMjhfLCAoZ2xv bmcpIDAsIChnbG9uZykgMik7Ci0rCQlfdG1wMzBfID0gX3RtcDI5XzsKLSsJCV90bXAzMV8gPSBn X3N0cmNtcDAgKF90bXAzMF8sICJrbyIpID09IDA7Ci0rCQlfZ19mcmVlMCAoX3RtcDMwXyk7Ci0r CQlpZiAoX3RtcDMxXykgewotKwkJCWdjaGFyKiogX3RtcDMyXzsKLSsJCQlnaW50IF90bXAzMl9f bGVuZ3RoMTsKLSsJCQlnY2hhciogX3RtcDMzXzsKLSsJCQlnY2hhcioqIF90bXAzNF87Ci0rCQkJ Z2ludCBfdG1wMzRfX2xlbmd0aDE7Ci0rCQkJZ2NoYXIqIF90bXAzNV87Ci0rCQkJX3RtcDMyXyA9 IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTOwotKwkJCV90bXAzMl9fbGVuZ3Ro MSA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDE7Ci0rCQkJX3Rt cDMzXyA9IGdfc3RyZHVwICgiSGFuZ3VsIik7Ci0rCQkJX3ZhbGFfYXJyYXlfYWRkMTEgKCZzZWxm LT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZUywgJnNlbGYtPnByaXYtPkFDQ0VMRVJBVE9S X0lNRV9IT1RLRVlTX2xlbmd0aDEsICZzZWxmLT5wcml2LT5fQUNDRUxFUkFUT1JfSU1FX0hPVEtF WVNfc2l6ZV8sIF90bXAzM18pOwotKwkJCV90bXAzNF8gPSBzZWxmLT5wcml2LT5BQ0NFTEVSQVRP Ul9JTUVfSE9US0VZUzsKLSsJCQlfdG1wMzRfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5BQ0NFTEVS QVRPUl9JTUVfSE9US0VZU19sZW5ndGgxOwotKwkJCV90bXAzNV8gPSBnX3N0cmR1cCAoIkFsdF9S Iik7Ci0rCQkJX3ZhbGFfYXJyYXlfYWRkMTIgKCZzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVf SE9US0VZUywgJnNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDEsICZz ZWxmLT5wcml2LT5fQUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfc2l6ZV8sIF90bXAzNV8pOwotKwkJ fQotKwl9Ci0rCV90bXAzNl8gPSBrZXliaW5kaW5nX21hbmFnZXJfZ2V0X2luc3RhbmNlICgpOwot KwlrZXliaW5kaW5nX21hbmFnZXIgPSBfdG1wMzZfOwotKwlfdG1wMzdfID0gc2VsZi0+cHJpdi0+ QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVM7Ci0rCV90bXAzN19fbGVuZ3RoMSA9IHNlbGYtPnByaXYt PkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDE7Ci0rCXsKLSsJCWdjaGFyKioga2V5Ymlu ZGluZ19jb2xsZWN0aW9uID0gTlVMTDsKLSsJCWdpbnQga2V5YmluZGluZ19jb2xsZWN0aW9uX2xl bmd0aDEgPSAwOwotKwkJZ2ludCBfa2V5YmluZGluZ19jb2xsZWN0aW9uX3NpemVfID0gMDsKLSsJ CWdpbnQga2V5YmluZGluZ19pdCA9IDA7Ci0rCQlrZXliaW5kaW5nX2NvbGxlY3Rpb24gPSBfdG1w MzdfOwotKwkJa2V5YmluZGluZ19jb2xsZWN0aW9uX2xlbmd0aDEgPSBfdG1wMzdfX2xlbmd0aDE7 Ci0rCQlmb3IgKGtleWJpbmRpbmdfaXQgPSAwOyBrZXliaW5kaW5nX2l0IDwgX3RtcDM3X19sZW5n dGgxOyBrZXliaW5kaW5nX2l0ID0ga2V5YmluZGluZ19pdCArIDEpIHsKLSsJCQlnY2hhciogX3Rt cDM4XzsKLSsJCQlnY2hhcioga2V5YmluZGluZyA9IE5VTEw7Ci0rCQkJX3RtcDM4XyA9IGdfc3Ry ZHVwIChrZXliaW5kaW5nX2NvbGxlY3Rpb25ba2V5YmluZGluZ19pdF0pOwotKwkJCWtleWJpbmRp bmcgPSBfdG1wMzhfOwotKwkJCXsKLSsJCQkJS2V5YmluZGluZ01hbmFnZXIqIF90bXAzOV87Ci0r CQkJCWNvbnN0IGdjaGFyKiBfdG1wNDBfOwotKwkJCQljb25zdCBnY2hhciogX3RtcDQxXzsKLSsJ CQkJX3RtcDM5XyA9IGtleWJpbmRpbmdfbWFuYWdlcjsKLSsJCQkJX3RtcDQwXyA9IGtleWJpbmRp bmc7Ci0rCQkJCWtleWJpbmRpbmdfbWFuYWdlcl9iaW5kIChfdG1wMzlfLCBfdG1wNDBfLCBfX19f X2xhbWJkYTI2X19rZXliaW5kaW5nX21hbmFnZXJfa2V5YmluZGluZ19oYW5kbGVyX2Z1bmMsIHNl bGYpOwotKwkJCQlfdG1wNDFfID0ga2V5YmluZGluZzsKLSsJCQkJaWYgKGdfc3RyY21wMCAoX3Rt cDQxXywgUEFORUxfQUNDRUxFUkFUT1JfU1dJVENIX0lNRV9GT1JFV0FSRCkgPT0gMCkgewotKwkJ CQkJS2V5YmluZGluZ01hbmFnZXIqIF90bXA0Ml87Ci0rCQkJCQlfdG1wNDJfID0ga2V5YmluZGlu Z19tYW5hZ2VyOwotKwkJCQkJa2V5YmluZGluZ19tYW5hZ2VyX2JpbmQgKF90bXA0Ml8sIFBBTkVM X0FDQ0VMRVJBVE9SX1NXSVRDSF9JTUVfQkFDS1dBUkQsIF9fX19fX2xhbWJkYTI3X19rZXliaW5k aW5nX21hbmFnZXJfa2V5YmluZGluZ19oYW5kbGVyX2Z1bmMsIHNlbGYpOwotKwkJCQl9Ci0rCQkJ CV9nX2ZyZWUwIChrZXliaW5kaW5nKTsKLSsJCQl9Ci0rCQl9Ci0rCX0KLSsJX2dfb2JqZWN0X3Vu cmVmMCAoa2V5YmluZGluZ19tYW5hZ2VyKTsKLSsJX2dfZnJlZTAgKGxvY2FsZSk7Ci0rfQotKwot KwotK3N0YXRpYyB2b2lkIF9wYW5lbF9jb25maWdfdmFsdWVfY2hhbmdlZF9jYl9pYnVzX2NvbmZp Z192YWx1ZV9jaGFuZ2VkIChJQnVzQ29uZmlnKiBfc2VuZGVyLCBjb25zdCBnY2hhciogc2VjdGlv biwgY29uc3QgZ2NoYXIqIG5hbWUsIEdWYXJpYW50KiB2YWx1ZSwgZ3BvaW50ZXIgc2VsZikgewot KwlwYW5lbF9jb25maWdfdmFsdWVfY2hhbmdlZF9jYiAoc2VsZiwgX3NlbmRlciwgc2VjdGlvbiwg bmFtZSwgdmFsdWUpOwotK30KLSsKLSsKLSt2b2lkIHBhbmVsX3NldF9jb25maWcgKFBhbmVsKiBz ZWxmLCBJQnVzQ29uZmlnKiBjb25maWcpIHsKLSsJSUJ1c0NvbmZpZyogX3RtcDBfOwotKwlJQnVz Q29uZmlnKiBfdG1wM187Ci0rCUlCdXNDb25maWcqIF90bXA0XzsKLSsJSUJ1c0NvbmZpZyogX3Rt cDVfOwotKwlnX3JldHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOwotKwlnX3JldHVybl9pZl9m YWlsIChjb25maWcgIT0gTlVMTCk7Ci0rCV90bXAwXyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOwot KwlpZiAoX3RtcDBfICE9IE5VTEwpIHsKLSsJCUlCdXNDb25maWcqIF90bXAxXzsKLSsJCWd1aW50 IF90bXAyXyA9IDBVOwotKwkJX3RtcDFfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7Ci0rCQlnX3Np Z25hbF9wYXJzZV9uYW1lICgidmFsdWUtY2hhbmdlZCIsIGlidXNfY29uZmlnX2dldF90eXBlICgp LCAmX3RtcDJfLCBOVUxMLCBGQUxTRSk7Ci0rCQlnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0 X21hdGNoZWQgKF90bXAxXywgR19TSUdOQUxfTUFUQ0hfSUQgfCBHX1NJR05BTF9NQVRDSF9GVU5D IHwgR19TSUdOQUxfTUFUQ0hfREFUQSwgX3RtcDJfLCAwLCBOVUxMLCAoR0NhbGxiYWNrKSBfcGFu ZWxfY29uZmlnX3ZhbHVlX2NoYW5nZWRfY2JfaWJ1c19jb25maWdfdmFsdWVfY2hhbmdlZCwgc2Vs Zik7Ci0rCQlfZ19vYmplY3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX2NvbmZpZyk7Ci0rCQlzZWxm LT5wcml2LT5tX2NvbmZpZyA9IE5VTEw7Ci0rCX0KLSsJX3RtcDNfID0gY29uZmlnOwotKwlfdG1w NF8gPSBfZ19vYmplY3RfcmVmMCAoX3RtcDNfKTsKLSsJX2dfb2JqZWN0X3VucmVmMCAoc2VsZi0+ cHJpdi0+bV9jb25maWcpOwotKwlzZWxmLT5wcml2LT5tX2NvbmZpZyA9IF90bXA0XzsKLSsJcGFu ZWxfc2V0X2tleWJpbmRpbmcgKHNlbGYpOwotKwlfdG1wNV8gPSBzZWxmLT5wcml2LT5tX2NvbmZp ZzsKLSsJaWYgKF90bXA1XyAhPSBOVUxMKSB7Ci0rCQlJQnVzQ29uZmlnKiBfdG1wNl87Ci0rCQlJ QnVzQ29uZmlnKiBfdG1wN187Ci0rCQlHVmFyaWFudCogX3RtcDhfID0gTlVMTDsKLSsJCUdWYXJp YW50KiBfdG1wOV87Ci0rCQlJQnVzQ29uZmlnKiBfdG1wMTBfOwotKwkJR1ZhcmlhbnQqIF90bXAx MV8gPSBOVUxMOwotKwkJR1ZhcmlhbnQqIF90bXAxMl87Ci0rCQlfdG1wNl8gPSBzZWxmLT5wcml2 LT5tX2NvbmZpZzsKLSsJCWdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0IChfdG1wNl8sICJ2YWx1ZS1j aGFuZ2VkIiwgKEdDYWxsYmFjaykgX3BhbmVsX2NvbmZpZ192YWx1ZV9jaGFuZ2VkX2NiX2lidXNf Y29uZmlnX3ZhbHVlX2NoYW5nZWQsIHNlbGYsIDApOwotKwkJcGFuZWxfaW5pdF9lbmdpbmVzX29y ZGVyIChzZWxmKTsKLSsJCV90bXA3XyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOwotKwkJX3RtcDhf ID0gaWJ1c19jb25maWdfZ2V0X3ZhbHVlIChfdG1wN18sICJnZW5lcmFsIiwgInByZWxvYWRfZW5n aW5lcyIpOwotKwkJX3RtcDlfID0gX3RtcDhfOwotKwkJX3RtcDEwXyA9IHNlbGYtPnByaXYtPm1f Y29uZmlnOwotKwkJX3RtcDExXyA9IGlidXNfY29uZmlnX2dldF92YWx1ZSAoX3RtcDEwXywgImdl bmVyYWwiLCAiZW5naW5lc19vcmRlciIpOwotKwkJX3RtcDEyXyA9IF90bXAxMV87Ci0rCQlwYW5l bF91cGRhdGVfZW5naW5lcyAoc2VsZiwgX3RtcDlfLCBfdG1wMTJfKTsKLSsJCV9nX3ZhcmlhbnRf dW5yZWYwIChfdG1wMTJfKTsKLSsJCV9nX3ZhcmlhbnRfdW5yZWYwIChfdG1wOV8pOwotKwl9IGVs c2UgewotKwkJcGFuZWxfdXBkYXRlX2VuZ2luZXMgKHNlbGYsIE5VTEwsIE5VTEwpOwotKwl9Ci0r fQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX2drYmRsYXlvdXRfY2hhbmdlZF9jYiAoUGFuZWwq IHNlbGYpIHsKLSsJR1RpbWVyKiBfdG1wMF87Ci0rCWdkb3VibGUgX3RtcDFfID0gMC4wOwotKwln ZG91YmxlIGVsYXBzZWQ7Ci0rCWdib29sZWFuIF90bXAyXyA9IEZBTFNFOwotKwlnZG91YmxlIF90 bXAzXzsKLSsJZ2Jvb2xlYW4gX3RtcDVfOwotKwlnaW50IF90bXA2XzsKLSsJR1RpbWVyKiBfdG1w MTBfOwotKwlnX3JldHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOwotKwlfdG1wMF8gPSBzZWxm LT5wcml2LT5tX2NoYW5nZWRfbGF5b3V0X3RpbWVyOwotKwlfdG1wMV8gPSBnX3RpbWVyX2VsYXBz ZWQgKF90bXAwXywgTlVMTCk7Ci0rCWVsYXBzZWQgPSBfdG1wMV87Ci0rCV90bXAzXyA9IGVsYXBz ZWQ7Ci0rCWlmIChfdG1wM18gPCAxLjApIHsKLSsJCWdkb3VibGUgX3RtcDRfOwotKwkJX3RtcDRf ID0gZWxhcHNlZDsKLSsJCV90bXAyXyA9IF90bXA0XyA+IDAuMDsKLSsJfSBlbHNlIHsKLSsJCV90 bXAyXyA9IEZBTFNFOwotKwl9Ci0rCV90bXA1XyA9IF90bXAyXzsKLSsJaWYgKF90bXA1Xykgewot KwkJcmV0dXJuOwotKwl9Ci0rCV90bXA2XyA9IHNlbGYtPnByaXYtPm1fZmFsbGJhY2tfbG9ja19p ZDsKLSsJaWYgKF90bXA2XyAhPSAoLTEpKSB7Ci0rCQlHa2JkTGF5b3V0KiBfdG1wN187Ci0rCQln aW50IF90bXA4XzsKLSsJCV90bXA3XyA9IHNlbGYtPnByaXYtPm1fZ2tiZGxheW91dDsKLSsJCV90 bXA4XyA9IHNlbGYtPnByaXYtPm1fZmFsbGJhY2tfbG9ja19pZDsKLSsJCWdrYmRfbGF5b3V0X2xv Y2tfZ3JvdXAgKF90bXA3XywgX3RtcDhfKTsKLSsJCXNlbGYtPnByaXYtPm1fZmFsbGJhY2tfbG9j a19pZCA9IC0xOwotKwl9IGVsc2UgewotKwkJWEtCTGF5b3V0KiBfdG1wOV87Ci0rCQlfdG1wOV8g PSBzZWxmLT5wcml2LT5tX3hrYmxheW91dDsKLSsJCXhrYl9sYXlvdXRfcmVzZXRfbGF5b3V0IChf dG1wOV8pOwotKwl9Ci0rCXBhbmVsX3VwZGF0ZV94a2JfZW5naW5lcyAoc2VsZik7Ci0rCV90bXAx MF8gPSBzZWxmLT5wcml2LT5tX2NoYW5nZWRfbGF5b3V0X3RpbWVyOwotKwlnX3RpbWVyX3Jlc2V0 IChfdG1wMTBfKTsKLSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgcGFuZWxfaW5pdF9na2JkIChQYW5l bCogc2VsZikgewotKwlHa2JkTGF5b3V0KiBfdG1wMF87Ci0rCUdrYmRMYXlvdXQqIF90bXAxXzsK LSsJR1RpbWVyKiBfdG1wMl87Ci0rCUdUaW1lciogX3RtcDNfOwotKwlHa2JkTGF5b3V0KiBfdG1w NF87Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7Ci0rCV90bXAwXyA9IGdrYmRf bGF5b3V0X25ldyAoKTsKLSsJX2drYmRfbGF5b3V0X3VucmVmMCAoc2VsZi0+cHJpdi0+bV9na2Jk bGF5b3V0KTsKLSsJc2VsZi0+cHJpdi0+bV9na2JkbGF5b3V0ID0gX3RtcDBfOwotKwlfdG1wMV8g PSBzZWxmLT5wcml2LT5tX2drYmRsYXlvdXQ7Ci0rCWdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0IChf dG1wMV8sICJjaGFuZ2VkIiwgKEdDYWxsYmFjaykgX3BhbmVsX2drYmRsYXlvdXRfY2hhbmdlZF9j Yl9na2JkX2xheW91dF9jaGFuZ2VkLCBzZWxmLCAwKTsKLSsJX3RtcDJfID0gZ190aW1lcl9uZXcg KCk7Ci0rCV9nX3RpbWVyX2Rlc3Ryb3kwIChzZWxmLT5wcml2LT5tX2NoYW5nZWRfbGF5b3V0X3Rp bWVyKTsKLSsJc2VsZi0+cHJpdi0+bV9jaGFuZ2VkX2xheW91dF90aW1lciA9IF90bXAyXzsKLSsJ X3RtcDNfID0gc2VsZi0+cHJpdi0+bV9jaGFuZ2VkX2xheW91dF90aW1lcjsKLSsJZ190aW1lcl9z dGFydCAoX3RtcDNfKTsKLSsJX3RtcDRfID0gc2VsZi0+cHJpdi0+bV9na2JkbGF5b3V0OwotKwln a2JkX2xheW91dF9zdGFydF9saXN0ZW4gKF90bXA0Xyk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lk IHBhbmVsX2luaXRfZW5naW5lc19vcmRlciAoUGFuZWwqIHNlbGYpIHsKLSsJSUJ1c0NvbmZpZyog X3RtcDBfOwotKwlJQnVzQ29uZmlnKiBfdG1wMV87Ci0rCVhLQkxheW91dCogX3RtcDJfOwotKwln X3JldHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOwotKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5t X2NvbmZpZzsKLSsJaWYgKF90bXAwXyA9PSBOVUxMKSB7Ci0rCQlyZXR1cm47Ci0rCX0KLSsJX3Rt cDFfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7Ci0rCV90bXAyXyA9IHhrYl9sYXlvdXRfbmV3IChf dG1wMV8pOwotKwlfeGtiX2xheW91dF91bnJlZjAgKHNlbGYtPnByaXYtPm1feGtibGF5b3V0KTsK LSsJc2VsZi0+cHJpdi0+bV94a2JsYXlvdXQgPSBfdG1wMl87Ci0rCWlmIChIQVZFX0lCVVNfR0tC RCkgewotKwkJcGFuZWxfaW5pdF9na2JkIChzZWxmKTsKLSsJfQotKwlwYW5lbF91cGRhdGVfeGti X2VuZ2luZXMgKHNlbGYpOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfZ19mcmVlMF8gKGdwb2lu dGVyIHZhcikgewotKwl2YXIgPSAoZ19mcmVlICh2YXIpLCBOVUxMKTsKLSt9Ci0rCi0rCi0rc3Rh dGljIHZvaWQgX2dfbGlzdF9mcmVlX19nX2ZyZWUwXyAoR0xpc3QqIHNlbGYpIHsKLSsJZ19saXN0 X2ZvcmVhY2ggKHNlbGYsIChHRnVuYykgX2dfZnJlZTBfLCBOVUxMKTsKLSsJZ19saXN0X2ZyZWUg KHNlbGYpOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxMyAoZ2NoYXIq KiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSkgewotKwlpZiAo KCpsZW5ndGgpID09ICgqc2l6ZSkpIHsKLSsJCSpzaXplID0gKCpzaXplKSA/ICgyICogKCpzaXpl KSkgOiA0OwotKwkJKmFycmF5ID0gZ19yZW5ldyAoZ2NoYXIqLCAqYXJyYXksICgqc2l6ZSkgKyAx KTsKLSsJfQotKwkoKmFycmF5KVsoKmxlbmd0aCkrK10gPSB2YWx1ZTsKLSsJKCphcnJheSlbKmxl bmd0aF0gPSBOVUxMOwotK30KLSsKLSsKLStzdGF0aWMgZ2Jvb2xlYW4gX3ZhbGFfc3RyaW5nX2Fy cmF5X2NvbnRhaW5zIChnY2hhcioqIHN0YWNrLCBpbnQgc3RhY2tfbGVuZ3RoLCBnY2hhciogbmVl ZGxlKSB7Ci0rCWludCBpOwotKwlmb3IgKGkgPSAwOyBpIDwgc3RhY2tfbGVuZ3RoOyBpKyspIHsK LSsJCWlmIChnX3N0cmNtcDAgKHN0YWNrW2ldLCBuZWVkbGUpID09IDApIHsKLSsJCQlyZXR1cm4g VFJVRTsKLSsJCX0KLSsJfQotKwlyZXR1cm4gRkFMU0U7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lk IF92YWxhX2FycmF5X2FkZDE0IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6 ZSwgZ2NoYXIqIHZhbHVlKSB7Ci0rCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewotKwkJKnNp emUgPSAoKnNpemUpID8gKDIgKiAoKnNpemUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBnX3JlbmV3IChn Y2hhciosICphcnJheSwgKCpzaXplKSArIDEpOwotKwl9Ci0rCSgqYXJyYXkpWygqbGVuZ3RoKSsr XSA9IHZhbHVlOwotKwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwotKwotK3N0YXRp YyB2b2lkIF92YWxhX2FycmF5X2FkZDE1IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGlu dCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7Ci0rCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewot KwkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAoKnNpemUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBnX3Jl bmV3IChnY2hhciosICphcnJheSwgKCpzaXplKSArIDEpOwotKwl9Ci0rCSgqYXJyYXkpWygqbGVu Z3RoKSsrXSA9IHZhbHVlOwotKwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwotKwot K3N0YXRpYyB2b2lkIHBhbmVsX3VwZGF0ZV94a2JfZW5naW5lcyAoUGFuZWwqIHNlbGYpIHsKLSsJ WEtCTGF5b3V0KiBfdG1wMF87Ci0rCWdjaGFyKiBfdG1wMV8gPSBOVUxMOwotKwlnY2hhciogdmFy X2xheW91dDsKLSsJWEtCTGF5b3V0KiBfdG1wMl87Ci0rCWdjaGFyKiBfdG1wM18gPSBOVUxMOwot KwlnY2hhciogdmFyX3ZhcmlhbnQ7Ci0rCWNvbnN0IGdjaGFyKiBfdG1wNF87Ci0rCWNvbnN0IGdj aGFyKiBfdG1wNV87Ci0rCWdjaGFyKiogX3RtcDZfOwotKwlnY2hhcioqIF90bXA3XyA9IE5VTEw7 Ci0rCWNvbnN0IGdjaGFyKiBfdG1wOF87Ci0rCWdjaGFyKiogX3RtcDlfOwotKwlnY2hhcioqIF90 bXAxMF8gPSBOVUxMOwotKwlJQnVzWEtCQ29uZmlnUmVnaXN0cnkqIF90bXAxMV87Ci0rCUlCdXNY S0JDb25maWdSZWdpc3RyeSogX3RtcDEyXzsKLSsJSUJ1c1hLQkNvbmZpZ1JlZ2lzdHJ5KiByZWdp c3RyeTsKLSsJZ2NoYXIqKiBfdG1wMTNfID0gTlVMTDsKLSsJZ2NoYXIqKiB2YXJfeGtiX2VuZ2lu ZV9uYW1lczsKLSsJZ2ludCB2YXJfeGtiX2VuZ2luZV9uYW1lc19sZW5ndGgxOwotKwlnaW50IF92 YXJfeGtiX2VuZ2luZV9uYW1lc19zaXplXzsKLSsJSUJ1c0NvbmZpZyogX3RtcDY1XzsKLSsJR1Zh cmlhbnQqIF90bXA2Nl8gPSBOVUxMOwotKwlHVmFyaWFudCogdmFyX2VuZ2luZXM7Ci0rCWdjaGFy KiogX3RtcDY3XyA9IE5VTEw7Ci0rCWdjaGFyKiogZW5naW5lX25hbWVzOwotKwlnaW50IGVuZ2lu ZV9uYW1lc19sZW5ndGgxOwotKwlnaW50IF9lbmdpbmVfbmFtZXNfc2l6ZV87Ci0rCWdib29sZWFu IHVwZGF0ZWRfZW5naW5lX25hbWVzOwotKwlHVmFyaWFudCogX3RtcDY4XzsKLSsJZ2NoYXIqKiBf dG1wNzJfOwotKwlnaW50IF90bXA3Ml9fbGVuZ3RoMTsKLSsJZ2Jvb2xlYW4gX3RtcDc5XzsKLSsJ SUJ1c0NvbmZpZyogX3RtcDg0XzsKLSsJR1ZhcmlhbnQqIF90bXA4NV8gPSBOVUxMOwotKwlHVmFy aWFudCogdmFyX29yZGVyOwotKwlnY2hhcioqIF90bXA4Nl8gPSBOVUxMOwotKwlnY2hhcioqIG9y ZGVyX25hbWVzOwotKwlnaW50IG9yZGVyX25hbWVzX2xlbmd0aDE7Ci0rCWdpbnQgX29yZGVyX25h bWVzX3NpemVfOwotKwlnYm9vbGVhbiB1cGRhdGVkX29yZGVyX25hbWVzOwotKwlHVmFyaWFudCog X3RtcDg3XzsKLSsJZ2NoYXIqKiBfdG1wOTFfOwotKwlnaW50IF90bXA5MV9fbGVuZ3RoMTsKLSsJ Z2Jvb2xlYW4gX3RtcDk4XzsKLSsJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsKLSsJ X3RtcDBfID0gc2VsZi0+cHJpdi0+bV94a2JsYXlvdXQ7Ci0rCV90bXAxXyA9IHhrYl9sYXlvdXRf Z2V0X2xheW91dCAoX3RtcDBfKTsKLSsJdmFyX2xheW91dCA9IF90bXAxXzsKLSsJX3RtcDJfID0g c2VsZi0+cHJpdi0+bV94a2JsYXlvdXQ7Ci0rCV90bXAzXyA9IHhrYl9sYXlvdXRfZ2V0X3Zhcmlh bnQgKF90bXAyXyk7Ci0rCXZhcl92YXJpYW50ID0gX3RtcDNfOwotKwlfdG1wNF8gPSB2YXJfbGF5 b3V0OwotKwlpZiAoZ19zdHJjbXAwIChfdG1wNF8sICIiKSA9PSAwKSB7Ci0rCQlfZ19mcmVlMCAo dmFyX3ZhcmlhbnQpOwotKwkJX2dfZnJlZTAgKHZhcl9sYXlvdXQpOwotKwkJcmV0dXJuOwotKwl9 Ci0rCV90bXA1XyA9IHZhcl9sYXlvdXQ7Ci0rCV90bXA3XyA9IF90bXA2XyA9IGdfc3Ryc3BsaXQg KF90bXA1XywgIiwiLCAwKTsKLSsJc2VsZi0+cHJpdi0+bV9sYXlvdXRzID0gKF92YWxhX2FycmF5 X2ZyZWUgKHNlbGYtPnByaXYtPm1fbGF5b3V0cywgc2VsZi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0 aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7Ci0rCXNlbGYtPnByaXYtPm1fbGF5 b3V0cyA9IF90bXA3XzsKLSsJc2VsZi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0aDEgPSBfdmFsYV9h cnJheV9sZW5ndGggKF90bXA2Xyk7Ci0rCXNlbGYtPnByaXYtPl9tX2xheW91dHNfc2l6ZV8gPSBz ZWxmLT5wcml2LT5tX2xheW91dHNfbGVuZ3RoMTsKLSsJX3RtcDhfID0gdmFyX3ZhcmlhbnQ7Ci0r CV90bXAxMF8gPSBfdG1wOV8gPSBnX3N0cnNwbGl0IChfdG1wOF8sICIsIiwgMCk7Ci0rCXNlbGYt PnByaXYtPm1fdmFyaWFudHMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoc2VsZi0+cHJpdi0+bV92YXJp YW50cywgc2VsZi0+cHJpdi0+bV92YXJpYW50c19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdf ZnJlZSksIE5VTEwpOwotKwlzZWxmLT5wcml2LT5tX3ZhcmlhbnRzID0gX3RtcDEwXzsKLSsJc2Vs Zi0+cHJpdi0+bV92YXJpYW50c19sZW5ndGgxID0gX3ZhbGFfYXJyYXlfbGVuZ3RoIChfdG1wOV8p OwotKwlzZWxmLT5wcml2LT5fbV92YXJpYW50c19zaXplXyA9IHNlbGYtPnByaXYtPm1fdmFyaWFu dHNfbGVuZ3RoMTsKLSsJX3RtcDExXyA9IGlidXNfeGtiX2NvbmZpZ19yZWdpc3RyeV9uZXcgKCk7 Ci0rCV90bXAxMl8gPSBnX29iamVjdF9yZWZfc2luayAoX3RtcDExXyk7Ci0rCXJlZ2lzdHJ5ID0g X3RtcDEyXzsKLSsJX3RtcDEzXyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7Ci0rCXZhcl94a2Jf ZW5naW5lX25hbWVzID0gX3RtcDEzXzsKLSsJdmFyX3hrYl9lbmdpbmVfbmFtZXNfbGVuZ3RoMSA9 IDA7Ci0rCV92YXJfeGtiX2VuZ2luZV9uYW1lc19zaXplXyA9IHZhcl94a2JfZW5naW5lX25hbWVz X2xlbmd0aDE7Ci0rCXsKLSsJCWdpbnQgaTsKLSsJCWkgPSAwOwotKwkJewotKwkJCWdib29sZWFu IF90bXAxNF87Ci0rCQkJX3RtcDE0XyA9IFRSVUU7Ci0rCQkJd2hpbGUgKFRSVUUpIHsKLSsJCQkJ Z2Jvb2xlYW4gX3RtcDE1XzsKLSsJCQkJZ2ludCBfdG1wMTdfOwotKwkJCQlnY2hhcioqIF90bXAx OF87Ci0rCQkJCWdpbnQgX3RtcDE4X19sZW5ndGgxOwotKwkJCQlnY2hhcioqIF90bXAxOV87Ci0r CQkJCWdpbnQgX3RtcDE5X19sZW5ndGgxOwotKwkJCQlnaW50IF90bXAyMF87Ci0rCQkJCWNvbnN0 IGdjaGFyKiBfdG1wMjFfOwotKwkJCQlnY2hhciogX3RtcDIyXzsKLSsJCQkJZ2NoYXIqIG5hbWU7 Ci0rCQkJCWdjaGFyKiBsYW5nOwotKwkJCQlnYm9vbGVhbiBfdG1wMjNfID0gRkFMU0U7Ci0rCQkJ CWdpbnQgX3RtcDI0XzsKLSsJCQkJZ2NoYXIqKiBfdG1wMjVfOwotKwkJCQlnaW50IF90bXAyNV9f bGVuZ3RoMTsKLSsJCQkJZ2Jvb2xlYW4gX3RtcDI5XzsKLSsJCQkJY29uc3QgZ2NoYXIqIF90bXA1 MF87Ci0rCQkJCWdjaGFyKiogX3RtcDYxXzsKLSsJCQkJZ2ludCBfdG1wNjFfX2xlbmd0aDE7Ci0r CQkJCWNvbnN0IGdjaGFyKiBfdG1wNjJfOwotKwkJCQljb25zdCBnY2hhciogX3RtcDYzXzsKLSsJ CQkJZ2NoYXIqIF90bXA2NF8gPSBOVUxMOwotKwkJCQlfdG1wMTVfID0gX3RtcDE0XzsKLSsJCQkJ aWYgKCFfdG1wMTVfKSB7Ci0rCQkJCQlnaW50IF90bXAxNl87Ci0rCQkJCQlfdG1wMTZfID0gaTsK LSsJCQkJCWkgPSBfdG1wMTZfICsgMTsKLSsJCQkJfQotKwkJCQlfdG1wMTRfID0gRkFMU0U7Ci0r CQkJCV90bXAxN18gPSBpOwotKwkJCQlfdG1wMThfID0gc2VsZi0+cHJpdi0+bV9sYXlvdXRzOwot KwkJCQlfdG1wMThfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX2xheW91dHNfbGVuZ3RoMTsKLSsJ CQkJaWYgKCEoX3RtcDE3XyA8IF90bXAxOF9fbGVuZ3RoMSkpIHsKLSsJCQkJCWJyZWFrOwotKwkJ CQl9Ci0rCQkJCV90bXAxOV8gPSBzZWxmLT5wcml2LT5tX2xheW91dHM7Ci0rCQkJCV90bXAxOV9f bGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fbGF5b3V0c19sZW5ndGgxOwotKwkJCQlfdG1wMjBfID0g aTsKLSsJCQkJX3RtcDIxXyA9IF90bXAxOV9bX3RtcDIwX107Ci0rCQkJCV90bXAyMl8gPSBnX3N0 cmR1cCAoX3RtcDIxXyk7Ci0rCQkJCW5hbWUgPSBfdG1wMjJfOwotKwkJCQlsYW5nID0gTlVMTDsK LSsJCQkJX3RtcDI0XyA9IGk7Ci0rCQkJCV90bXAyNV8gPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRz OwotKwkJCQlfdG1wMjVfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDE7 Ci0rCQkJCWlmIChfdG1wMjRfIDwgX3RtcDI1X19sZW5ndGgxKSB7Ci0rCQkJCQlnY2hhcioqIF90 bXAyNl87Ci0rCQkJCQlnaW50IF90bXAyNl9fbGVuZ3RoMTsKLSsJCQkJCWdpbnQgX3RtcDI3XzsK LSsJCQkJCWNvbnN0IGdjaGFyKiBfdG1wMjhfOwotKwkJCQkJX3RtcDI2XyA9IHNlbGYtPnByaXYt Pm1fdmFyaWFudHM7Ci0rCQkJCQlfdG1wMjZfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX3Zhcmlh bnRzX2xlbmd0aDE7Ci0rCQkJCQlfdG1wMjdfID0gaTsKLSsJCQkJCV90bXAyOF8gPSBfdG1wMjZf W190bXAyN19dOwotKwkJCQkJX3RtcDIzXyA9IGdfc3RyY21wMCAoX3RtcDI4XywgIiIpICE9IDA7 Ci0rCQkJCX0gZWxzZSB7Ci0rCQkJCQlfdG1wMjNfID0gRkFMU0U7Ci0rCQkJCX0KLSsJCQkJX3Rt cDI5XyA9IF90bXAyM187Ci0rCQkJCWlmIChfdG1wMjlfKSB7Ci0rCQkJCQljb25zdCBnY2hhciog X3RtcDMwXzsKLSsJCQkJCWdjaGFyKiogX3RtcDMxXzsKLSsJCQkJCWdpbnQgX3RtcDMxX19sZW5n dGgxOwotKwkJCQkJZ2ludCBfdG1wMzJfOwotKwkJCQkJY29uc3QgZ2NoYXIqIF90bXAzM187Ci0r CQkJCQlnY2hhciogX3RtcDM0XyA9IE5VTEw7Ci0rCQkJCQljb25zdCBnY2hhciogX3RtcDM1XzsK LSsJCQkJCWdjaGFyKiogX3RtcDM2XzsKLSsJCQkJCWdpbnQgX3RtcDM2X19sZW5ndGgxOwotKwkJ CQkJZ2ludCBfdG1wMzdfOwotKwkJCQkJY29uc3QgZ2NoYXIqIF90bXAzOF87Ci0rCQkJCQlnY2hh ciogX3RtcDM5XyA9IE5VTEw7Ci0rCQkJCQlnY2hhciogbGF5b3V0OwotKwkJCQkJSUJ1c1hLQkNv bmZpZ1JlZ2lzdHJ5KiBfdG1wNDBfOwotKwkJCQkJY29uc3QgZ2NoYXIqIF90bXA0MV87Ci0rCQkJ CQlHTGlzdCogX3RtcDQyXyA9IE5VTEw7Ci0rCQkJCQlHTGlzdCogbGFuZ3M7Ci0rCQkJCQlHTGlz dCogX3RtcDQzXzsKLSsJCQkJCWd1aW50IF90bXA0NF8gPSAwVTsKLSsJCQkJCV90bXAzMF8gPSBu YW1lOwotKwkJCQkJX3RtcDMxXyA9IHNlbGYtPnByaXYtPm1fdmFyaWFudHM7Ci0rCQkJCQlfdG1w MzFfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDE7Ci0rCQkJCQlfdG1w MzJfID0gaTsKLSsJCQkJCV90bXAzM18gPSBfdG1wMzFfW190bXAzMl9dOwotKwkJCQkJX3RtcDM0 XyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzOiVzIiwgX3RtcDMwXywgX3RtcDMzXyk7Ci0rCQkJCQlf Z19mcmVlMCAobmFtZSk7Ci0rCQkJCQluYW1lID0gX3RtcDM0XzsKLSsJCQkJCV90bXAzNV8gPSBu YW1lOwotKwkJCQkJX3RtcDM2XyA9IHNlbGYtPnByaXYtPm1fdmFyaWFudHM7Ci0rCQkJCQlfdG1w MzZfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDE7Ci0rCQkJCQlfdG1w MzdfID0gaTsKLSsJCQkJCV90bXAzOF8gPSBfdG1wMzZfW190bXAzN19dOwotKwkJCQkJX3RtcDM5 XyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzKCVzKSIsIF90bXAzNV8sIF90bXAzOF8pOwotKwkJCQkJ bGF5b3V0ID0gX3RtcDM5XzsKLSsJCQkJCV90bXA0MF8gPSByZWdpc3RyeTsKLSsJCQkJCV90bXA0 MV8gPSBsYXlvdXQ7Ci0rCQkJCQlfdG1wNDJfID0gaWJ1c194a2JfY29uZmlnX3JlZ2lzdHJ5X2xh eW91dF9sYW5nX2dldF9sYW5ncyAoX3RtcDQwXywgX3RtcDQxXyk7Ci0rCQkJCQlsYW5ncyA9IF90 bXA0Ml87Ci0rCQkJCQlfdG1wNDNfID0gbGFuZ3M7Ci0rCQkJCQlfdG1wNDRfID0gZ19saXN0X2xl bmd0aCAoX3RtcDQzXyk7Ci0rCQkJCQlpZiAoX3RtcDQ0XyAhPSAoKGd1aW50KSAwKSkgewotKwkJ CQkJCUdMaXN0KiBfdG1wNDVfOwotKwkJCQkJCWdjb25zdHBvaW50ZXIgX3RtcDQ2XzsKLSsJCQkJ CQlnY2hhciogX3RtcDQ3XzsKLSsJCQkJCQlfdG1wNDVfID0gbGFuZ3M7Ci0rCQkJCQkJX3RtcDQ2 XyA9IF90bXA0NV8tPmRhdGE7Ci0rCQkJCQkJX3RtcDQ3XyA9IGdfc3RyZHVwICgoY29uc3QgZ2No YXIqKSBfdG1wNDZfKTsKLSsJCQkJCQlfZ19mcmVlMCAobGFuZyk7Ci0rCQkJCQkJbGFuZyA9IF90 bXA0N187Ci0rCQkJCQl9Ci0rCQkJCQlfX2dfbGlzdF9mcmVlX19nX2ZyZWUwXzAgKGxhbmdzKTsK LSsJCQkJCV9nX2ZyZWUwIChsYXlvdXQpOwotKwkJCQl9IGVsc2UgewotKwkJCQkJY29uc3QgZ2No YXIqIF90bXA0OF87Ci0rCQkJCQlnY2hhciogX3RtcDQ5XyA9IE5VTEw7Ci0rCQkJCQlfdG1wNDhf ID0gbmFtZTsKLSsJCQkJCV90bXA0OV8gPSBnX3N0cmR1cF9wcmludGYgKCIlczoiLCBfdG1wNDhf KTsKLSsJCQkJCV9nX2ZyZWUwIChuYW1lKTsKLSsJCQkJCW5hbWUgPSBfdG1wNDlfOwotKwkJCQl9 Ci0rCQkJCV90bXA1MF8gPSBsYW5nOwotKwkJCQlpZiAoX3RtcDUwXyA9PSBOVUxMKSB7Ci0rCQkJ CQlJQnVzWEtCQ29uZmlnUmVnaXN0cnkqIF90bXA1MV87Ci0rCQkJCQlnY2hhcioqIF90bXA1Ml87 Ci0rCQkJCQlnaW50IF90bXA1Ml9fbGVuZ3RoMTsKLSsJCQkJCWdpbnQgX3RtcDUzXzsKLSsJCQkJ CWNvbnN0IGdjaGFyKiBfdG1wNTRfOwotKwkJCQkJR0xpc3QqIF90bXA1NV8gPSBOVUxMOwotKwkJ CQkJR0xpc3QqIGxhbmdzOwotKwkJCQkJR0xpc3QqIF90bXA1Nl87Ci0rCQkJCQlndWludCBfdG1w NTdfID0gMFU7Ci0rCQkJCQlfdG1wNTFfID0gcmVnaXN0cnk7Ci0rCQkJCQlfdG1wNTJfID0gc2Vs Zi0+cHJpdi0+bV9sYXlvdXRzOwotKwkJCQkJX3RtcDUyX19sZW5ndGgxID0gc2VsZi0+cHJpdi0+ bV9sYXlvdXRzX2xlbmd0aDE7Ci0rCQkJCQlfdG1wNTNfID0gaTsKLSsJCQkJCV90bXA1NF8gPSBf dG1wNTJfW190bXA1M19dOwotKwkJCQkJX3RtcDU1XyA9IGlidXNfeGtiX2NvbmZpZ19yZWdpc3Ry eV9sYXlvdXRfbGFuZ19nZXRfbGFuZ3MgKF90bXA1MV8sIF90bXA1NF8pOwotKwkJCQkJbGFuZ3Mg PSBfdG1wNTVfOwotKwkJCQkJX3RtcDU2XyA9IGxhbmdzOwotKwkJCQkJX3RtcDU3XyA9IGdfbGlz dF9sZW5ndGggKF90bXA1Nl8pOwotKwkJCQkJaWYgKF90bXA1N18gIT0gKChndWludCkgMCkpIHsK LSsJCQkJCQlHTGlzdCogX3RtcDU4XzsKLSsJCQkJCQlnY29uc3Rwb2ludGVyIF90bXA1OV87Ci0r CQkJCQkJZ2NoYXIqIF90bXA2MF87Ci0rCQkJCQkJX3RtcDU4XyA9IGxhbmdzOwotKwkJCQkJCV90 bXA1OV8gPSBfdG1wNThfLT5kYXRhOwotKwkJCQkJCV90bXA2MF8gPSBnX3N0cmR1cCAoKGNvbnN0 IGdjaGFyKikgX3RtcDU5Xyk7Ci0rCQkJCQkJX2dfZnJlZTAgKGxhbmcpOwotKwkJCQkJCWxhbmcg PSBfdG1wNjBfOwotKwkJCQkJfQotKwkJCQkJX19nX2xpc3RfZnJlZV9fZ19mcmVlMF8wIChsYW5n cyk7Ci0rCQkJCX0KLSsJCQkJX3RtcDYxXyA9IHZhcl94a2JfZW5naW5lX25hbWVzOwotKwkJCQlf dG1wNjFfX2xlbmd0aDEgPSB2YXJfeGtiX2VuZ2luZV9uYW1lc19sZW5ndGgxOwotKwkJCQlfdG1w NjJfID0gbmFtZTsKLSsJCQkJX3RtcDYzXyA9IGxhbmc7Ci0rCQkJCV90bXA2NF8gPSBnX3N0cmR1 cF9wcmludGYgKCIlczolczolcyIsICJ4a2IiLCBfdG1wNjJfLCBfdG1wNjNfKTsKLSsJCQkJX3Zh bGFfYXJyYXlfYWRkMTMgKCZ2YXJfeGtiX2VuZ2luZV9uYW1lcywgJnZhcl94a2JfZW5naW5lX25h bWVzX2xlbmd0aDEsICZfdmFyX3hrYl9lbmdpbmVfbmFtZXNfc2l6ZV8sIF90bXA2NF8pOwotKwkJ CQlfZ19mcmVlMCAobGFuZyk7Ci0rCQkJCV9nX2ZyZWUwIChuYW1lKTsKLSsJCQl9Ci0rCQl9Ci0r CX0KLSsJX3RtcDY1XyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOwotKwlfdG1wNjZfID0gaWJ1c19j b25maWdfZ2V0X3ZhbHVlIChfdG1wNjVfLCAiZ2VuZXJhbCIsICJwcmVsb2FkX2VuZ2luZXMiKTsK LSsJdmFyX2VuZ2luZXMgPSBfdG1wNjZfOwotKwlfdG1wNjdfID0gZ19uZXcwIChnY2hhciosIDAg KyAxKTsKLSsJZW5naW5lX25hbWVzID0gX3RtcDY3XzsKLSsJZW5naW5lX25hbWVzX2xlbmd0aDEg PSAwOwotKwlfZW5naW5lX25hbWVzX3NpemVfID0gZW5naW5lX25hbWVzX2xlbmd0aDE7Ci0rCXVw ZGF0ZWRfZW5naW5lX25hbWVzID0gRkFMU0U7Ci0rCV90bXA2OF8gPSB2YXJfZW5naW5lczsKLSsJ aWYgKF90bXA2OF8gIT0gTlVMTCkgewotKwkJR1ZhcmlhbnQqIF90bXA2OV87Ci0rCQlzaXplX3Qg X3RtcDcwXzsKLSsJCWdjaGFyKiogX3RtcDcxXyA9IE5VTEw7Ci0rCQlfdG1wNjlfID0gdmFyX2Vu Z2luZXM7Ci0rCQlfdG1wNzFfID0gZ192YXJpYW50X2R1cF9zdHJ2IChfdG1wNjlfLCAmX3RtcDcw Xyk7Ci0rCQllbmdpbmVfbmFtZXMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoZW5naW5lX25hbWVzLCBl bmdpbmVfbmFtZXNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJ CWVuZ2luZV9uYW1lcyA9IF90bXA3MV87Ci0rCQllbmdpbmVfbmFtZXNfbGVuZ3RoMSA9IF90bXA3 MF87Ci0rCQlfZW5naW5lX25hbWVzX3NpemVfID0gZW5naW5lX25hbWVzX2xlbmd0aDE7Ci0rCX0K LSsJX3RtcDcyXyA9IHZhcl94a2JfZW5naW5lX25hbWVzOwotKwlfdG1wNzJfX2xlbmd0aDEgPSB2 YXJfeGtiX2VuZ2luZV9uYW1lc19sZW5ndGgxOwotKwl7Ci0rCQlnY2hhcioqIG5hbWVfY29sbGVj dGlvbiA9IE5VTEw7Ci0rCQlnaW50IG5hbWVfY29sbGVjdGlvbl9sZW5ndGgxID0gMDsKLSsJCWdp bnQgX25hbWVfY29sbGVjdGlvbl9zaXplXyA9IDA7Ci0rCQlnaW50IG5hbWVfaXQgPSAwOwotKwkJ bmFtZV9jb2xsZWN0aW9uID0gX3RtcDcyXzsKLSsJCW5hbWVfY29sbGVjdGlvbl9sZW5ndGgxID0g X3RtcDcyX19sZW5ndGgxOwotKwkJZm9yIChuYW1lX2l0ID0gMDsgbmFtZV9pdCA8IF90bXA3Ml9f bGVuZ3RoMTsgbmFtZV9pdCA9IG5hbWVfaXQgKyAxKSB7Ci0rCQkJZ2NoYXIqIF90bXA3M187Ci0r CQkJZ2NoYXIqIG5hbWUgPSBOVUxMOwotKwkJCV90bXA3M18gPSBnX3N0cmR1cCAobmFtZV9jb2xs ZWN0aW9uW25hbWVfaXRdKTsKLSsJCQluYW1lID0gX3RtcDczXzsKLSsJCQl7Ci0rCQkJCWNvbnN0 IGdjaGFyKiBfdG1wNzRfOwotKwkJCQlnY2hhcioqIF90bXA3NV87Ci0rCQkJCWdpbnQgX3RtcDc1 X19sZW5ndGgxOwotKwkJCQlnY2hhcioqIF90bXA3Nl87Ci0rCQkJCWdpbnQgX3RtcDc2X19sZW5n dGgxOwotKwkJCQljb25zdCBnY2hhciogX3RtcDc3XzsKLSsJCQkJZ2NoYXIqIF90bXA3OF87Ci0r CQkJCV90bXA3NF8gPSBuYW1lOwotKwkJCQlfdG1wNzVfID0gZW5naW5lX25hbWVzOwotKwkJCQlf dG1wNzVfX2xlbmd0aDEgPSBlbmdpbmVfbmFtZXNfbGVuZ3RoMTsKLSsJCQkJaWYgKF92YWxhX3N0 cmluZ19hcnJheV9jb250YWlucyAoX3RtcDc1XywgX3RtcDc1X19sZW5ndGgxLCBfdG1wNzRfKSkg ewotKwkJCQkJX2dfZnJlZTAgKG5hbWUpOwotKwkJCQkJY29udGludWU7Ci0rCQkJCX0KLSsJCQkJ dXBkYXRlZF9lbmdpbmVfbmFtZXMgPSBUUlVFOwotKwkJCQlfdG1wNzZfID0gZW5naW5lX25hbWVz OwotKwkJCQlfdG1wNzZfX2xlbmd0aDEgPSBlbmdpbmVfbmFtZXNfbGVuZ3RoMTsKLSsJCQkJX3Rt cDc3XyA9IG5hbWU7Ci0rCQkJCV90bXA3OF8gPSBnX3N0cmR1cCAoX3RtcDc3Xyk7Ci0rCQkJCV92 YWxhX2FycmF5X2FkZDE0ICgmZW5naW5lX25hbWVzLCAmZW5naW5lX25hbWVzX2xlbmd0aDEsICZf ZW5naW5lX25hbWVzX3NpemVfLCBfdG1wNzhfKTsKLSsJCQkJX2dfZnJlZTAgKG5hbWUpOwotKwkJ CX0KLSsJCX0KLSsJfQotKwlfdG1wNzlfID0gdXBkYXRlZF9lbmdpbmVfbmFtZXM7Ci0rCWlmIChf dG1wNzlfKSB7Ci0rCQlJQnVzQ29uZmlnKiBfdG1wODBfOwotKwkJZ2NoYXIqKiBfdG1wODFfOwot KwkJZ2ludCBfdG1wODFfX2xlbmd0aDE7Ci0rCQlHVmFyaWFudCogX3RtcDgyXzsKLSsJCUdWYXJp YW50KiBfdG1wODNfOwotKwkJX3RtcDgwXyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOwotKwkJX3Rt cDgxXyA9IGVuZ2luZV9uYW1lczsKLSsJCV90bXA4MV9fbGVuZ3RoMSA9IGVuZ2luZV9uYW1lc19s ZW5ndGgxOwotKwkJX3RtcDgyXyA9IGdfdmFyaWFudF9uZXdfc3RydiAoX3RtcDgxXywgX3RtcDgx X19sZW5ndGgxKTsKLSsJCV90bXA4M18gPSBnX3ZhcmlhbnRfcmVmX3NpbmsgKF90bXA4Ml8pOwot KwkJaWJ1c19jb25maWdfc2V0X3ZhbHVlIChfdG1wODBfLCAiZ2VuZXJhbCIsICJwcmVsb2FkX2Vu Z2luZXMiLCBfdG1wODNfKTsKLSsJCV9nX3ZhcmlhbnRfdW5yZWYwIChfdG1wODNfKTsKLSsJfQot KwlfdG1wODRfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7Ci0rCV90bXA4NV8gPSBpYnVzX2NvbmZp Z19nZXRfdmFsdWUgKF90bXA4NF8sICJnZW5lcmFsIiwgImVuZ2luZXNfb3JkZXIiKTsKLSsJdmFy X29yZGVyID0gX3RtcDg1XzsKLSsJX3RtcDg2XyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7Ci0r CW9yZGVyX25hbWVzID0gX3RtcDg2XzsKLSsJb3JkZXJfbmFtZXNfbGVuZ3RoMSA9IDA7Ci0rCV9v cmRlcl9uYW1lc19zaXplXyA9IG9yZGVyX25hbWVzX2xlbmd0aDE7Ci0rCXVwZGF0ZWRfb3JkZXJf bmFtZXMgPSBGQUxTRTsKLSsJX3RtcDg3XyA9IHZhcl9vcmRlcjsKLSsJaWYgKF90bXA4N18gIT0g TlVMTCkgewotKwkJR1ZhcmlhbnQqIF90bXA4OF87Ci0rCQlzaXplX3QgX3RtcDg5XzsKLSsJCWdj aGFyKiogX3RtcDkwXyA9IE5VTEw7Ci0rCQlfdG1wODhfID0gdmFyX29yZGVyOwotKwkJX3RtcDkw XyA9IGdfdmFyaWFudF9kdXBfc3RydiAoX3RtcDg4XywgJl90bXA4OV8pOwotKwkJb3JkZXJfbmFt ZXMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAob3JkZXJfbmFtZXMsIG9yZGVyX25hbWVzX2xlbmd0aDEs IChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7Ci0rCQlvcmRlcl9uYW1lcyA9IF90bXA5 MF87Ci0rCQlvcmRlcl9uYW1lc19sZW5ndGgxID0gX3RtcDg5XzsKLSsJCV9vcmRlcl9uYW1lc19z aXplXyA9IG9yZGVyX25hbWVzX2xlbmd0aDE7Ci0rCX0KLSsJX3RtcDkxXyA9IHZhcl94a2JfZW5n aW5lX25hbWVzOwotKwlfdG1wOTFfX2xlbmd0aDEgPSB2YXJfeGtiX2VuZ2luZV9uYW1lc19sZW5n dGgxOwotKwl7Ci0rCQlnY2hhcioqIG5hbWVfY29sbGVjdGlvbiA9IE5VTEw7Ci0rCQlnaW50IG5h bWVfY29sbGVjdGlvbl9sZW5ndGgxID0gMDsKLSsJCWdpbnQgX25hbWVfY29sbGVjdGlvbl9zaXpl XyA9IDA7Ci0rCQlnaW50IG5hbWVfaXQgPSAwOwotKwkJbmFtZV9jb2xsZWN0aW9uID0gX3RtcDkx XzsKLSsJCW5hbWVfY29sbGVjdGlvbl9sZW5ndGgxID0gX3RtcDkxX19sZW5ndGgxOwotKwkJZm9y IChuYW1lX2l0ID0gMDsgbmFtZV9pdCA8IF90bXA5MV9fbGVuZ3RoMTsgbmFtZV9pdCA9IG5hbWVf aXQgKyAxKSB7Ci0rCQkJZ2NoYXIqIF90bXA5Ml87Ci0rCQkJZ2NoYXIqIG5hbWUgPSBOVUxMOwot KwkJCV90bXA5Ml8gPSBnX3N0cmR1cCAobmFtZV9jb2xsZWN0aW9uW25hbWVfaXRdKTsKLSsJCQlu YW1lID0gX3RtcDkyXzsKLSsJCQl7Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wOTNfOwotKwkJCQln Y2hhcioqIF90bXA5NF87Ci0rCQkJCWdpbnQgX3RtcDk0X19sZW5ndGgxOwotKwkJCQlnY2hhcioq IF90bXA5NV87Ci0rCQkJCWdpbnQgX3RtcDk1X19sZW5ndGgxOwotKwkJCQljb25zdCBnY2hhciog X3RtcDk2XzsKLSsJCQkJZ2NoYXIqIF90bXA5N187Ci0rCQkJCV90bXA5M18gPSBuYW1lOwotKwkJ CQlfdG1wOTRfID0gb3JkZXJfbmFtZXM7Ci0rCQkJCV90bXA5NF9fbGVuZ3RoMSA9IG9yZGVyX25h bWVzX2xlbmd0aDE7Ci0rCQkJCWlmIChfdmFsYV9zdHJpbmdfYXJyYXlfY29udGFpbnMgKF90bXA5 NF8sIF90bXA5NF9fbGVuZ3RoMSwgX3RtcDkzXykpIHsKLSsJCQkJCV9nX2ZyZWUwIChuYW1lKTsK LSsJCQkJCWNvbnRpbnVlOwotKwkJCQl9Ci0rCQkJCV90bXA5NV8gPSBvcmRlcl9uYW1lczsKLSsJ CQkJX3RtcDk1X19sZW5ndGgxID0gb3JkZXJfbmFtZXNfbGVuZ3RoMTsKLSsJCQkJX3RtcDk2XyA9 IG5hbWU7Ci0rCQkJCV90bXA5N18gPSBnX3N0cmR1cCAoX3RtcDk2Xyk7Ci0rCQkJCV92YWxhX2Fy cmF5X2FkZDE1ICgmb3JkZXJfbmFtZXMsICZvcmRlcl9uYW1lc19sZW5ndGgxLCAmX29yZGVyX25h bWVzX3NpemVfLCBfdG1wOTdfKTsKLSsJCQkJdXBkYXRlZF9vcmRlcl9uYW1lcyA9IFRSVUU7Ci0r CQkJCV9nX2ZyZWUwIChuYW1lKTsKLSsJCQl9Ci0rCQl9Ci0rCX0KLSsJX3RtcDk4XyA9IHVwZGF0 ZWRfb3JkZXJfbmFtZXM7Ci0rCWlmIChfdG1wOThfKSB7Ci0rCQlJQnVzQ29uZmlnKiBfdG1wOTlf OwotKwkJZ2NoYXIqKiBfdG1wMTAwXzsKLSsJCWdpbnQgX3RtcDEwMF9fbGVuZ3RoMTsKLSsJCUdW YXJpYW50KiBfdG1wMTAxXzsKLSsJCUdWYXJpYW50KiBfdG1wMTAyXzsKLSsJCV90bXA5OV8gPSBz ZWxmLT5wcml2LT5tX2NvbmZpZzsKLSsJCV90bXAxMDBfID0gb3JkZXJfbmFtZXM7Ci0rCQlfdG1w MTAwX19sZW5ndGgxID0gb3JkZXJfbmFtZXNfbGVuZ3RoMTsKLSsJCV90bXAxMDFfID0gZ192YXJp YW50X25ld19zdHJ2IChfdG1wMTAwXywgX3RtcDEwMF9fbGVuZ3RoMSk7Ci0rCQlfdG1wMTAyXyA9 IGdfdmFyaWFudF9yZWZfc2luayAoX3RtcDEwMV8pOwotKwkJaWJ1c19jb25maWdfc2V0X3ZhbHVl IChfdG1wOTlfLCAiZ2VuZXJhbCIsICJlbmdpbmVzX29yZGVyIiwgX3RtcDEwMl8pOwotKwkJX2df dmFyaWFudF91bnJlZjAgKF90bXAxMDJfKTsKLSsJfQotKwlvcmRlcl9uYW1lcyA9IChfdmFsYV9h cnJheV9mcmVlIChvcmRlcl9uYW1lcywgb3JkZXJfbmFtZXNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90 aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJX2dfdmFyaWFudF91bnJlZjAgKHZhcl9vcmRlcik7Ci0r CWVuZ2luZV9uYW1lcyA9IChfdmFsYV9hcnJheV9mcmVlIChlbmdpbmVfbmFtZXMsIGVuZ2luZV9u YW1lc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOwotKwlfZ192YXJp YW50X3VucmVmMCAodmFyX2VuZ2luZXMpOwotKwl2YXJfeGtiX2VuZ2luZV9uYW1lcyA9IChfdmFs YV9hcnJheV9mcmVlICh2YXJfeGtiX2VuZ2luZV9uYW1lcywgdmFyX3hrYl9lbmdpbmVfbmFtZXNf bGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJX2dfb2JqZWN0X3Vu cmVmMCAocmVnaXN0cnkpOwotKwlfZ19mcmVlMCAodmFyX3ZhcmlhbnQpOwotKwlfZ19mcmVlMCAo dmFyX2xheW91dCk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX3NldF94a2JfZ3JvdXBf bGF5b3V0IChQYW5lbCogc2VsZiwgY29uc3QgZ2NoYXIqIGxheW91dCkgewotKwlYS0JMYXlvdXQq IF90bXAwXzsKLSsJY29uc3QgZ2NoYXIqIF90bXAxXzsKLSsJZ2ludCBfdG1wMl8gPSAwOwotKwln aW50KiBfdG1wM18gPSBOVUxMOwotKwlnaW50KiByZXR2YWw7Ci0rCWdpbnQgcmV0dmFsX2xlbmd0 aDE7Ci0rCWdpbnQgX3JldHZhbF9zaXplXzsKLSsJZ2ludCogX3RtcDRfOwotKwlnaW50IF90bXA0 X19sZW5ndGgxOwotKwlnaW50IF90bXA1XzsKLSsJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBO VUxMKTsKLSsJZ19yZXR1cm5faWZfZmFpbCAobGF5b3V0ICE9IE5VTEwpOwotKwlfdG1wMF8gPSBz ZWxmLT5wcml2LT5tX3hrYmxheW91dDsKLSsJX3RtcDFfID0gbGF5b3V0OwotKwlfdG1wM18gPSB4 a2JfbGF5b3V0X3NldF9sYXlvdXQgKF90bXAwXywgX3RtcDFfLCAiZGVmYXVsdCIsICJkZWZhdWx0 IiwgJl90bXAyXyk7Ci0rCXJldHZhbCA9IF90bXAzXzsKLSsJcmV0dmFsX2xlbmd0aDEgPSBfdG1w Ml87Ci0rCV9yZXR2YWxfc2l6ZV8gPSByZXR2YWxfbGVuZ3RoMTsKLSsJX3RtcDRfID0gcmV0dmFs OwotKwlfdG1wNF9fbGVuZ3RoMSA9IHJldHZhbF9sZW5ndGgxOwotKwlfdG1wNV8gPSBfdG1wNF9b MF07Ci0rCWlmIChfdG1wNV8gPj0gMCkgewotKwkJZ2ludCogX3RtcDZfOwotKwkJZ2ludCBfdG1w Nl9fbGVuZ3RoMTsKLSsJCWdpbnQgX3RtcDdfOwotKwkJZ2Jvb2xlYW4gX3RtcDhfID0gRkFMU0U7 Ci0rCQlnaW50KiBfdG1wOV87Ci0rCQlnaW50IF90bXA5X19sZW5ndGgxOwotKwkJZ2ludCBfdG1w MTBfOwotKwkJZ2Jvb2xlYW4gX3RtcDExXzsKLSsJCV90bXA2XyA9IHJldHZhbDsKLSsJCV90bXA2 X19sZW5ndGgxID0gcmV0dmFsX2xlbmd0aDE7Ci0rCQlfdG1wN18gPSBfdG1wNl9bMF07Ci0rCQlz ZWxmLT5wcml2LT5tX2ZhbGxiYWNrX2xvY2tfaWQgPSBfdG1wN187Ci0rCQlfdG1wOV8gPSByZXR2 YWw7Ci0rCQlfdG1wOV9fbGVuZ3RoMSA9IHJldHZhbF9sZW5ndGgxOwotKwkJX3RtcDEwXyA9IF90 bXA5X1sxXTsKLSsJCWlmIChfdG1wMTBfICE9IDApIHsKLSsJCQlfdG1wOF8gPSBUUlVFOwotKwkJ fSBlbHNlIHsKLSsJCQlfdG1wOF8gPSBGQUxTRTsKLSsJCX0KLSsJCV90bXAxMV8gPSBfdG1wOF87 Ci0rCQlzZWxmLT5wcml2LT5tX2NoYW5nZWRfeGtiX29wdGlvbiA9IF90bXAxMV87Ci0rCX0KLSsJ cmV0dmFsID0gKGdfZnJlZSAocmV0dmFsKSwgTlVMTCk7Ci0rfQotKwotKwotK3N0YXRpYyBnYm9v bGVhbiBwYW5lbF9zZXRfZ2tiZF9sYXlvdXQgKFBhbmVsKiBzZWxmLCBjb25zdCBnY2hhciogbGF5 b3V0KSB7Ci0rCWdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwotKwlnYm9vbGVhbiBfdG1wMF87Ci0r CUdrYmRMYXlvdXQqIF90bXAxXzsKLSsJZ2ludCBfdG1wMl8gPSAwOwotKwlnY2hhcioqIF90bXAz XyA9IE5VTEw7Ci0rCWdjaGFyKiogX3RtcDRfOwotKwlnaW50IF90bXA0X19sZW5ndGgxOwotKwln aW50IF90bXA1XzsKLSsJZ2ludCBna2JkX2xlbjsKLSsJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNl bGYgIT0gTlVMTCwgRkFMU0UpOwotKwlnX3JldHVybl92YWxfaWZfZmFpbCAobGF5b3V0ICE9IE5V TEwsIEZBTFNFKTsKLSsJX3RtcDBfID0gc2VsZi0+cHJpdi0+bV9jaGFuZ2VkX3hrYl9vcHRpb247 Ci0rCWlmIChfdG1wMF8gPT0gVFJVRSkgewotKwkJc2VsZi0+cHJpdi0+bV9jaGFuZ2VkX3hrYl9v cHRpb24gPSBGQUxTRTsKLSsJCXJlc3VsdCA9IEZBTFNFOwotKwkJcmV0dXJuIHJlc3VsdDsKLSsJ fQotKwlfdG1wMV8gPSBzZWxmLT5wcml2LT5tX2drYmRsYXlvdXQ7Ci0rCV90bXAzXyA9IGdrYmRf bGF5b3V0X2dldF9ncm91cF9uYW1lcyAoX3RtcDFfLCAmX3RtcDJfKTsKLSsJX3RtcDRfID0gX3Rt cDNfOwotKwlfdG1wNF9fbGVuZ3RoMSA9IF90bXAyXzsKLSsJX3RtcDVfID0gX3RtcDJfOwotKwlf dG1wNF8gPSAoX3ZhbGFfYXJyYXlfZnJlZSAoX3RtcDRfLCBfdG1wNF9fbGVuZ3RoMSwgKEdEZXN0 cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJZ2tiZF9sZW4gPSBfdG1wNV87Ci0rCXsKLSsJ CWdpbnQgaTsKLSsJCWkgPSAwOwotKwkJewotKwkJCWdib29sZWFuIF90bXA2XzsKLSsJCQlfdG1w Nl8gPSBUUlVFOwotKwkJCXdoaWxlIChUUlVFKSB7Ci0rCQkJCWdib29sZWFuIF90bXA3XzsKLSsJ CQkJZ2Jvb2xlYW4gX3RtcDlfID0gRkFMU0U7Ci0rCQkJCWdpbnQgX3RtcDEwXzsKLSsJCQkJZ2No YXIqKiBfdG1wMTFfOwotKwkJCQlnaW50IF90bXAxMV9fbGVuZ3RoMTsKLSsJCQkJZ2Jvb2xlYW4g X3RtcDE0XzsKLSsJCQkJZ2NoYXIqKiBfdG1wMTVfOwotKwkJCQlnaW50IF90bXAxNV9fbGVuZ3Ro MTsKLSsJCQkJZ2ludCBfdG1wMTZfOwotKwkJCQljb25zdCBnY2hhciogX3RtcDE3XzsKLSsJCQkJ Z2NoYXIqIF90bXAxOF87Ci0rCQkJCWdjaGFyKiBzeXNfbGF5b3V0OwotKwkJCQlnYm9vbGVhbiBf dG1wMTlfID0gRkFMU0U7Ci0rCQkJCWdpbnQgX3RtcDIwXzsKLSsJCQkJZ2NoYXIqKiBfdG1wMjFf OwotKwkJCQlnaW50IF90bXAyMV9fbGVuZ3RoMTsKLSsJCQkJZ2Jvb2xlYW4gX3RtcDI1XzsKLSsJ CQkJY29uc3QgZ2NoYXIqIF90bXAzMV87Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wMzJfOwotKwkJ CQlfdG1wN18gPSBfdG1wNl87Ci0rCQkJCWlmICghX3RtcDdfKSB7Ci0rCQkJCQlnaW50IF90bXA4 XzsKLSsJCQkJCV90bXA4XyA9IGk7Ci0rCQkJCQlpID0gX3RtcDhfICsgMTsKLSsJCQkJfQotKwkJ CQlfdG1wNl8gPSBGQUxTRTsKLSsJCQkJX3RtcDEwXyA9IGk7Ci0rCQkJCV90bXAxMV8gPSBzZWxm LT5wcml2LT5tX2xheW91dHM7Ci0rCQkJCV90bXAxMV9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1f bGF5b3V0c19sZW5ndGgxOwotKwkJCQlpZiAoX3RtcDEwXyA8IF90bXAxMV9fbGVuZ3RoMSkgewot KwkJCQkJZ2ludCBfdG1wMTJfOwotKwkJCQkJZ2ludCBfdG1wMTNfOwotKwkJCQkJX3RtcDEyXyA9 IGk7Ci0rCQkJCQlfdG1wMTNfID0gZ2tiZF9sZW47Ci0rCQkJCQlfdG1wOV8gPSBfdG1wMTJfIDwg X3RtcDEzXzsKLSsJCQkJfSBlbHNlIHsKLSsJCQkJCV90bXA5XyA9IEZBTFNFOwotKwkJCQl9Ci0r CQkJCV90bXAxNF8gPSBfdG1wOV87Ci0rCQkJCWlmICghX3RtcDE0XykgewotKwkJCQkJYnJlYWs7 Ci0rCQkJCX0KLSsJCQkJX3RtcDE1XyA9IHNlbGYtPnByaXYtPm1fbGF5b3V0czsKLSsJCQkJX3Rt cDE1X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0aDE7Ci0rCQkJCV90bXAx Nl8gPSBpOwotKwkJCQlfdG1wMTdfID0gX3RtcDE1X1tfdG1wMTZfXTsKLSsJCQkJX3RtcDE4XyA9 IGdfc3RyZHVwIChfdG1wMTdfKTsKLSsJCQkJc3lzX2xheW91dCA9IF90bXAxOF87Ci0rCQkJCV90 bXAyMF8gPSBpOwotKwkJCQlfdG1wMjFfID0gc2VsZi0+cHJpdi0+bV92YXJpYW50czsKLSsJCQkJ X3RtcDIxX19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV92YXJpYW50c19sZW5ndGgxOwotKwkJCQlp ZiAoX3RtcDIwXyA8IF90bXAyMV9fbGVuZ3RoMSkgewotKwkJCQkJZ2NoYXIqKiBfdG1wMjJfOwot KwkJCQkJZ2ludCBfdG1wMjJfX2xlbmd0aDE7Ci0rCQkJCQlnaW50IF90bXAyM187Ci0rCQkJCQlj b25zdCBnY2hhciogX3RtcDI0XzsKLSsJCQkJCV90bXAyMl8gPSBzZWxmLT5wcml2LT5tX3Zhcmlh bnRzOwotKwkJCQkJX3RtcDIyX19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV92YXJpYW50c19sZW5n dGgxOwotKwkJCQkJX3RtcDIzXyA9IGk7Ci0rCQkJCQlfdG1wMjRfID0gX3RtcDIyX1tfdG1wMjNf XTsKLSsJCQkJCV90bXAxOV8gPSBnX3N0cmNtcDAgKF90bXAyNF8sICIiKSAhPSAwOwotKwkJCQl9 IGVsc2UgewotKwkJCQkJX3RtcDE5XyA9IEZBTFNFOwotKwkJCQl9Ci0rCQkJCV90bXAyNV8gPSBf dG1wMTlfOwotKwkJCQlpZiAoX3RtcDI1XykgewotKwkJCQkJY29uc3QgZ2NoYXIqIF90bXAyNl87 Ci0rCQkJCQlnY2hhcioqIF90bXAyN187Ci0rCQkJCQlnaW50IF90bXAyN19fbGVuZ3RoMTsKLSsJ CQkJCWdpbnQgX3RtcDI4XzsKLSsJCQkJCWNvbnN0IGdjaGFyKiBfdG1wMjlfOwotKwkJCQkJZ2No YXIqIF90bXAzMF8gPSBOVUxMOwotKwkJCQkJX3RtcDI2XyA9IHN5c19sYXlvdXQ7Ci0rCQkJCQlf dG1wMjdfID0gc2VsZi0+cHJpdi0+bV92YXJpYW50czsKLSsJCQkJCV90bXAyN19fbGVuZ3RoMSA9 IHNlbGYtPnByaXYtPm1fdmFyaWFudHNfbGVuZ3RoMTsKLSsJCQkJCV90bXAyOF8gPSBpOwotKwkJ CQkJX3RtcDI5XyA9IF90bXAyN19bX3RtcDI4X107Ci0rCQkJCQlfdG1wMzBfID0gZ19zdHJkdXBf cHJpbnRmICgiJXMoJXMpIiwgX3RtcDI2XywgX3RtcDI5Xyk7Ci0rCQkJCQlfZ19mcmVlMCAoc3lz X2xheW91dCk7Ci0rCQkJCQlzeXNfbGF5b3V0ID0gX3RtcDMwXzsKLSsJCQkJfQotKwkJCQlfdG1w MzFfID0gc3lzX2xheW91dDsKLSsJCQkJX3RtcDMyXyA9IGxheW91dDsKLSsJCQkJaWYgKGdfc3Ry Y21wMCAoX3RtcDMxXywgX3RtcDMyXykgPT0gMCkgewotKwkJCQkJR2tiZExheW91dCogX3RtcDMz XzsKLSsJCQkJCWdpbnQgX3RtcDM0XzsKLSsJCQkJCV90bXAzM18gPSBzZWxmLT5wcml2LT5tX2dr YmRsYXlvdXQ7Ci0rCQkJCQlfdG1wMzRfID0gaTsKLSsJCQkJCWdrYmRfbGF5b3V0X2xvY2tfZ3Jv dXAgKF90bXAzM18sIF90bXAzNF8pOwotKwkJCQkJcmVzdWx0ID0gVFJVRTsKLSsJCQkJCV9nX2Zy ZWUwIChzeXNfbGF5b3V0KTsKLSsJCQkJCXJldHVybiByZXN1bHQ7Ci0rCQkJCX0KLSsJCQkJX2df ZnJlZTAgKHN5c19sYXlvdXQpOwotKwkJCX0KLSsJCX0KLSsJfQotKwlyZXN1bHQgPSBGQUxTRTsK LSsJcmV0dXJuIHJlc3VsdDsKLSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgcGFuZWxfc2V0X2xheW91 dCAoUGFuZWwqIHNlbGYsIGNvbnN0IGdjaGFyKiBsYXlvdXQpIHsKLSsJZ2Jvb2xlYW4gX3RtcDBf ID0gRkFMU0U7Ci0rCWNvbnN0IGdjaGFyKiBfdG1wMV87Ci0rCWdib29sZWFuIF90bXAzXzsKLSsJ WEtCTGF5b3V0KiBfdG1wNF87Ci0rCVhLQkxheW91dCogX3RtcDhfOwotKwljb25zdCBnY2hhciog X3RtcDlfOwotKwlnaW50IF90bXAxMF8gPSAwOwotKwlnaW50KiBfdG1wMTFfID0gTlVMTDsKLSsJ Z2ludCogX3RtcDEyXzsKLSsJZ2ludCBfdG1wMTJfX2xlbmd0aDE7Ci0rCWdfcmV0dXJuX2lmX2Zh aWwgKHNlbGYgIT0gTlVMTCk7Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKGxheW91dCAhPSBOVUxMKTsK LSsJX3RtcDFfID0gbGF5b3V0OwotKwlpZiAoZ19zdHJjbXAwIChfdG1wMV8sICJkZWZhdWx0Iikg PT0gMCkgewotKwkJX3RtcDBfID0gVFJVRTsKLSsJfSBlbHNlIHsKLSsJCWNvbnN0IGdjaGFyKiBf dG1wMl87Ci0rCQlfdG1wMl8gPSBsYXlvdXQ7Ci0rCQlfdG1wMF8gPSBfdG1wMl8gPT0gTlVMTDsK LSsJfQotKwlfdG1wM18gPSBfdG1wMF87Ci0rCWlmIChfdG1wM18pIHsKLSsJCXJldHVybjsKLSsJ fQotKwlfdG1wNF8gPSBzZWxmLT5wcml2LT5tX3hrYmxheW91dDsKLSsJaWYgKF90bXA0XyA9PSBO VUxMKSB7Ci0rCQlwYW5lbF9pbml0X2VuZ2luZXNfb3JkZXIgKHNlbGYpOwotKwl9Ci0rCWlmIChI QVZFX0lCVVNfR0tCRCkgewotKwkJY29uc3QgZ2NoYXIqIF90bXA1XzsKLSsJCWdib29sZWFuIF90 bXA2XyA9IEZBTFNFOwotKwkJY29uc3QgZ2NoYXIqIF90bXA3XzsKLSsJCV90bXA1XyA9IGxheW91 dDsKLSsJCV90bXA2XyA9IHBhbmVsX3NldF9na2JkX2xheW91dCAoc2VsZiwgX3RtcDVfKTsKLSsJ CWlmIChfdG1wNl8pIHsKLSsJCQlyZXR1cm47Ci0rCQl9Ci0rCQlfdG1wN18gPSBsYXlvdXQ7Ci0r CQlwYW5lbF9zZXRfeGtiX2dyb3VwX2xheW91dCAoc2VsZiwgX3RtcDdfKTsKLSsJCXJldHVybjsK LSsJfQotKwlfdG1wOF8gPSBzZWxmLT5wcml2LT5tX3hrYmxheW91dDsKLSsJX3RtcDlfID0gbGF5 b3V0OwotKwlfdG1wMTFfID0geGtiX2xheW91dF9zZXRfbGF5b3V0IChfdG1wOF8sIF90bXA5Xywg ImRlZmF1bHQiLCAiZGVmYXVsdCIsICZfdG1wMTBfKTsKLSsJX3RtcDEyXyA9IF90bXAxMV87Ci0r CV90bXAxMl9fbGVuZ3RoMSA9IF90bXAxMF87Ci0rCV90bXAxMl8gPSAoZ19mcmVlIChfdG1wMTJf KSwgTlVMTCk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDE2IChnY2hh cioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7Ci0rCWlm ICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewotKwkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAoKnNp emUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwgKCpzaXplKSAr IDEpOwotKwl9Ci0rCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOwotKwkoKmFycmF5KVsq bGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX3N3aXRjaF9lbmdp bmUgKFBhbmVsKiBzZWxmLCBnaW50IGksIGdib29sZWFuIGZvcmNlKSB7Ci0rCWdib29sZWFuIF90 bXAwXyA9IEZBTFNFOwotKwlnaW50IF90bXAxXzsKLSsJZ2Jvb2xlYW4gX3RtcDRfOwotKwlnYm9v bGVhbiBfdG1wNV8gPSBGQUxTRTsKLSsJZ2ludCBfdG1wNl87Ci0rCWdib29sZWFuIF90bXA4XzsK LSsJSUJ1c0VuZ2luZURlc2MqKiBfdG1wOV87Ci0rCWdpbnQgX3RtcDlfX2xlbmd0aDE7Ci0rCWdp bnQgX3RtcDEwXzsKLSsJSUJ1c0VuZ2luZURlc2MqIF90bXAxMV87Ci0rCUlCdXNFbmdpbmVEZXNj KiBfdG1wMTJfOwotKwlJQnVzRW5naW5lRGVzYyogZW5naW5lOwotKwlJQnVzRW5naW5lRGVzYyoq IF90bXAyNV87Ci0rCWdpbnQgX3RtcDI1X19sZW5ndGgxOwotKwlJQnVzRW5naW5lRGVzYyogX3Rt cDI2XzsKLSsJSUJ1c0VuZ2luZURlc2MqIF90bXAyN187Ci0rCUlCdXNFbmdpbmVEZXNjKiBfdG1w MjhfOwotKwlJQnVzQnVzKiBfdG1wMjlfOwotKwlJQnVzRW5naW5lRGVzYyogX3RtcDMwXzsKLSsJ Y29uc3QgZ2NoYXIqIF90bXAzMV8gPSBOVUxMOwotKwlnYm9vbGVhbiBfdG1wMzJfID0gRkFMU0U7 Ci0rCUlCdXNFbmdpbmVEZXNjKiBfdG1wMzVfOwotKwljb25zdCBnY2hhciogX3RtcDM2XyA9IE5V TEw7Ci0rCWdjaGFyKiogX3RtcDM3XyA9IE5VTEw7Ci0rCWdjaGFyKiogbmFtZXM7Ci0rCWdpbnQg bmFtZXNfbGVuZ3RoMTsKLSsJZ2ludCBfbmFtZXNfc2l6ZV87Ci0rCUlCdXNFbmdpbmVEZXNjKiog X3RtcDM4XzsKLSsJZ2ludCBfdG1wMzhfX2xlbmd0aDE7Ci0rCUlCdXNDb25maWcqIF90bXA0NF87 Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7Ci0rCV90bXAxXyA9IGk7Ci0rCWlm IChfdG1wMV8gPj0gMCkgewotKwkJZ2ludCBfdG1wMl87Ci0rCQlJQnVzRW5naW5lRGVzYyoqIF90 bXAzXzsKLSsJCWdpbnQgX3RtcDNfX2xlbmd0aDE7Ci0rCQlfdG1wMl8gPSBpOwotKwkJX3RtcDNf ID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzOwotKwkJX3RtcDNfX2xlbmd0aDEgPSBzZWxmLT5wcml2 LT5tX2VuZ2luZXNfbGVuZ3RoMTsKLSsJCV90bXAwXyA9IF90bXAyXyA8IF90bXAzX19sZW5ndGgx OwotKwl9IGVsc2UgewotKwkJX3RtcDBfID0gRkFMU0U7Ci0rCX0KLSsJX3RtcDRfID0gX3RtcDBf OwotKwlnX2Fzc2VydCAoX3RtcDRfKTsKLSsJX3RtcDZfID0gaTsKLSsJaWYgKF90bXA2XyA9PSAw KSB7Ci0rCQlnYm9vbGVhbiBfdG1wN187Ci0rCQlfdG1wN18gPSBmb3JjZTsKLSsJCV90bXA1XyA9 ICFfdG1wN187Ci0rCX0gZWxzZSB7Ci0rCQlfdG1wNV8gPSBGQUxTRTsKLSsJfQotKwlfdG1wOF8g PSBfdG1wNV87Ci0rCWlmIChfdG1wOF8pIHsKLSsJCXJldHVybjsKLSsJfQotKwlfdG1wOV8gPSBz ZWxmLT5wcml2LT5tX2VuZ2luZXM7Ci0rCV90bXA5X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV9l bmdpbmVzX2xlbmd0aDE7Ci0rCV90bXAxMF8gPSBpOwotKwlfdG1wMTFfID0gX3RtcDlfW190bXAx MF9dOwotKwlfdG1wMTJfID0gX2dfb2JqZWN0X3JlZjAgKF90bXAxMV8pOwotKwllbmdpbmUgPSBf dG1wMTJfOwotKwl7Ci0rCQlnaW50IF90bXAxM187Ci0rCQlnaW50IGo7Ci0rCQlfdG1wMTNfID0g aTsKLSsJCWogPSBfdG1wMTNfOwotKwkJewotKwkJCWdib29sZWFuIF90bXAxNF87Ci0rCQkJX3Rt cDE0XyA9IFRSVUU7Ci0rCQkJd2hpbGUgKFRSVUUpIHsKLSsJCQkJZ2Jvb2xlYW4gX3RtcDE1XzsK LSsJCQkJZ2ludCBfdG1wMTdfOwotKwkJCQlJQnVzRW5naW5lRGVzYyoqIF90bXAxOF87Ci0rCQkJ CWdpbnQgX3RtcDE4X19sZW5ndGgxOwotKwkJCQlnaW50IF90bXAxOV87Ci0rCQkJCUlCdXNFbmdp bmVEZXNjKiogX3RtcDIwXzsKLSsJCQkJZ2ludCBfdG1wMjBfX2xlbmd0aDE7Ci0rCQkJCWdpbnQg X3RtcDIxXzsKLSsJCQkJSUJ1c0VuZ2luZURlc2MqIF90bXAyMl87Ci0rCQkJCUlCdXNFbmdpbmVE ZXNjKiBfdG1wMjNfOwotKwkJCQlJQnVzRW5naW5lRGVzYyogX3RtcDI0XzsKLSsJCQkJX3RtcDE1 XyA9IF90bXAxNF87Ci0rCQkJCWlmICghX3RtcDE1XykgewotKwkJCQkJZ2ludCBfdG1wMTZfOwot KwkJCQkJX3RtcDE2XyA9IGo7Ci0rCQkJCQlqID0gX3RtcDE2XyAtIDE7Ci0rCQkJCX0KLSsJCQkJ X3RtcDE0XyA9IEZBTFNFOwotKwkJCQlfdG1wMTdfID0gajsKLSsJCQkJaWYgKCEoX3RtcDE3XyA+ IDApKSB7Ci0rCQkJCQlicmVhazsKLSsJCQkJfQotKwkJCQlfdG1wMThfID0gc2VsZi0+cHJpdi0+ bV9lbmdpbmVzOwotKwkJCQlfdG1wMThfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX2VuZ2luZXNf bGVuZ3RoMTsKLSsJCQkJX3RtcDE5XyA9IGo7Ci0rCQkJCV90bXAyMF8gPSBzZWxmLT5wcml2LT5t X2VuZ2luZXM7Ci0rCQkJCV90bXAyMF9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fZW5naW5lc19s ZW5ndGgxOwotKwkJCQlfdG1wMjFfID0gajsKLSsJCQkJX3RtcDIyXyA9IF90bXAyMF9bX3RtcDIx XyAtIDFdOwotKwkJCQlfdG1wMjNfID0gX2dfb2JqZWN0X3JlZjAgKF90bXAyMl8pOwotKwkJCQlf Z19vYmplY3RfdW5yZWYwIChfdG1wMThfW190bXAxOV9dKTsKLSsJCQkJX3RtcDE4X1tfdG1wMTlf XSA9IF90bXAyM187Ci0rCQkJCV90bXAyNF8gPSBfdG1wMThfW190bXAxOV9dOwotKwkJCX0KLSsJ CX0KLSsJfQotKwlfdG1wMjVfID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzOwotKwlfdG1wMjVfX2xl bmd0aDEgPSBzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3RoMTsKLSsJX3RtcDI2XyA9IGVuZ2lu ZTsKLSsJX3RtcDI3XyA9IF9nX29iamVjdF9yZWYwIChfdG1wMjZfKTsKLSsJX2dfb2JqZWN0X3Vu cmVmMCAoX3RtcDI1X1swXSk7Ci0rCV90bXAyNV9bMF0gPSBfdG1wMjdfOwotKwlfdG1wMjhfID0g X3RtcDI1X1swXTsKLSsJX3RtcDI5XyA9IHNlbGYtPnByaXYtPm1fYnVzOwotKwlfdG1wMzBfID0g ZW5naW5lOwotKwlfdG1wMzFfID0gaWJ1c19lbmdpbmVfZGVzY19nZXRfbmFtZSAoX3RtcDMwXyk7 Ci0rCV90bXAzMl8gPSBpYnVzX2J1c19zZXRfZ2xvYmFsX2VuZ2luZSAoX3RtcDI5XywgX3RtcDMx Xyk7Ci0rCWlmICghX3RtcDMyXykgewotKwkJSUJ1c0VuZ2luZURlc2MqIF90bXAzM187Ci0rCQlj b25zdCBnY2hhciogX3RtcDM0XyA9IE5VTEw7Ci0rCQlfdG1wMzNfID0gZW5naW5lOwotKwkJX3Rt cDM0XyA9IGlidXNfZW5naW5lX2Rlc2NfZ2V0X25hbWUgKF90bXAzM18pOwotKwkJZ193YXJuaW5n ICgicGFuZWwudmFsYTozNjc6IFN3aXRjaCBlbmdpbmUgdG8gJXMgZmFpbGVkLiIsIF90bXAzNF8p OwotKwkJX2dfb2JqZWN0X3VucmVmMCAoZW5naW5lKTsKLSsJCXJldHVybjsKLSsJfQotKwlfdG1w MzVfID0gZW5naW5lOwotKwlfdG1wMzZfID0gaWJ1c19lbmdpbmVfZGVzY19nZXRfbGF5b3V0IChf dG1wMzVfKTsKLSsJcGFuZWxfc2V0X2xheW91dCAoc2VsZiwgX3RtcDM2Xyk7Ci0rCV90bXAzN18g PSBnX25ldzAgKGdjaGFyKiwgMCArIDEpOwotKwluYW1lcyA9IF90bXAzN187Ci0rCW5hbWVzX2xl bmd0aDEgPSAwOwotKwlfbmFtZXNfc2l6ZV8gPSBuYW1lc19sZW5ndGgxOwotKwlfdG1wMzhfID0g c2VsZi0+cHJpdi0+bV9lbmdpbmVzOwotKwlfdG1wMzhfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5t X2VuZ2luZXNfbGVuZ3RoMTsKLSsJewotKwkJSUJ1c0VuZ2luZURlc2MqKiBkZXNjX2NvbGxlY3Rp b24gPSBOVUxMOwotKwkJZ2ludCBkZXNjX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IDA7Ci0rCQlnaW50 IF9kZXNjX2NvbGxlY3Rpb25fc2l6ZV8gPSAwOwotKwkJZ2ludCBkZXNjX2l0ID0gMDsKLSsJCWRl c2NfY29sbGVjdGlvbiA9IF90bXAzOF87Ci0rCQlkZXNjX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IF90 bXAzOF9fbGVuZ3RoMTsKLSsJCWZvciAoZGVzY19pdCA9IDA7IGRlc2NfaXQgPCBfdG1wMzhfX2xl bmd0aDE7IGRlc2NfaXQgPSBkZXNjX2l0ICsgMSkgewotKwkJCUlCdXNFbmdpbmVEZXNjKiBfdG1w MzlfOwotKwkJCUlCdXNFbmdpbmVEZXNjKiBkZXNjID0gTlVMTDsKLSsJCQlfdG1wMzlfID0gX2df b2JqZWN0X3JlZjAgKGRlc2NfY29sbGVjdGlvbltkZXNjX2l0XSk7Ci0rCQkJZGVzYyA9IF90bXAz OV87Ci0rCQkJewotKwkJCQlnY2hhcioqIF90bXA0MF87Ci0rCQkJCWdpbnQgX3RtcDQwX19sZW5n dGgxOwotKwkJCQlJQnVzRW5naW5lRGVzYyogX3RtcDQxXzsKLSsJCQkJY29uc3QgZ2NoYXIqIF90 bXA0Ml8gPSBOVUxMOwotKwkJCQlnY2hhciogX3RtcDQzXzsKLSsJCQkJX3RtcDQwXyA9IG5hbWVz OwotKwkJCQlfdG1wNDBfX2xlbmd0aDEgPSBuYW1lc19sZW5ndGgxOwotKwkJCQlfdG1wNDFfID0g ZGVzYzsKLSsJCQkJX3RtcDQyXyA9IGlidXNfZW5naW5lX2Rlc2NfZ2V0X25hbWUgKF90bXA0MV8p OwotKwkJCQlfdG1wNDNfID0gZ19zdHJkdXAgKF90bXA0Ml8pOwotKwkJCQlfdmFsYV9hcnJheV9h ZGQxNiAoJm5hbWVzLCAmbmFtZXNfbGVuZ3RoMSwgJl9uYW1lc19zaXplXywgX3RtcDQzXyk7Ci0r CQkJCV9nX29iamVjdF91bnJlZjAgKGRlc2MpOwotKwkJCX0KLSsJCX0KLSsJfQotKwlfdG1wNDRf ID0gc2VsZi0+cHJpdi0+bV9jb25maWc7Ci0rCWlmIChfdG1wNDRfICE9IE5VTEwpIHsKLSsJCUlC dXNDb25maWcqIF90bXA0NV87Ci0rCQlnY2hhcioqIF90bXA0Nl87Ci0rCQlnaW50IF90bXA0Nl9f bGVuZ3RoMTsKLSsJCUdWYXJpYW50KiBfdG1wNDdfOwotKwkJR1ZhcmlhbnQqIF90bXA0OF87Ci0r CQlfdG1wNDVfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7Ci0rCQlfdG1wNDZfID0gbmFtZXM7Ci0r CQlfdG1wNDZfX2xlbmd0aDEgPSBuYW1lc19sZW5ndGgxOwotKwkJX3RtcDQ3XyA9IGdfdmFyaWFu dF9uZXdfc3RydiAoX3RtcDQ2XywgX3RtcDQ2X19sZW5ndGgxKTsKLSsJCV90bXA0OF8gPSBnX3Zh cmlhbnRfcmVmX3NpbmsgKF90bXA0N18pOwotKwkJaWJ1c19jb25maWdfc2V0X3ZhbHVlIChfdG1w NDVfLCAiZ2VuZXJhbCIsICJlbmdpbmVzX29yZGVyIiwgX3RtcDQ4Xyk7Ci0rCQlfZ192YXJpYW50 X3VucmVmMCAoX3RtcDQ4Xyk7Ci0rCX0KLSsJbmFtZXMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAobmFt ZXMsIG5hbWVzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7Ci0rCV9n X29iamVjdF91bnJlZjAgKGVuZ2luZSk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX2Nv bmZpZ192YWx1ZV9jaGFuZ2VkX2NiIChQYW5lbCogc2VsZiwgSUJ1c0NvbmZpZyogY29uZmlnLCBj b25zdCBnY2hhciogc2VjdGlvbiwgY29uc3QgZ2NoYXIqIG5hbWUsIEdWYXJpYW50KiB2YXJpYW50 KSB7Ci0rCWdib29sZWFuIF90bXAwXyA9IEZBTFNFOwotKwljb25zdCBnY2hhciogX3RtcDFfOwot KwlnYm9vbGVhbiBfdG1wM187Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7Ci0r CWdfcmV0dXJuX2lmX2ZhaWwgKGNvbmZpZyAhPSBOVUxMKTsKLSsJZ19yZXR1cm5faWZfZmFpbCAo c2VjdGlvbiAhPSBOVUxMKTsKLSsJZ19yZXR1cm5faWZfZmFpbCAobmFtZSAhPSBOVUxMKTsKLSsJ Z19yZXR1cm5faWZfZmFpbCAodmFyaWFudCAhPSBOVUxMKTsKLSsJX3RtcDFfID0gc2VjdGlvbjsK LSsJaWYgKGdfc3RyY21wMCAoX3RtcDFfLCAiZ2VuZXJhbCIpID09IDApIHsKLSsJCWNvbnN0IGdj aGFyKiBfdG1wMl87Ci0rCQlfdG1wMl8gPSBuYW1lOwotKwkJX3RtcDBfID0gZ19zdHJjbXAwIChf dG1wMl8sICJwcmVsb2FkX2VuZ2luZXMiKSA9PSAwOwotKwl9IGVsc2UgewotKwkJX3RtcDBfID0g RkFMU0U7Ci0rCX0KLSsJX3RtcDNfID0gX3RtcDBfOwotKwlpZiAoX3RtcDNfKSB7Ci0rCQlHVmFy aWFudCogX3RtcDRfOwotKwkJX3RtcDRfID0gdmFyaWFudDsKLSsJCXBhbmVsX3VwZGF0ZV9lbmdp bmVzIChzZWxmLCBfdG1wNF8sIE5VTEwpOwotKwl9Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBh bmVsX2hhbmRsZV9lbmdpbmVfc3dpdGNoIChQYW5lbCogc2VsZiwgR2RrRXZlbnQqIGV2ZW50LCBn Ym9vbGVhbiByZXZlcnQpIHsKLSsJSUJ1c0VuZ2luZURlc2MqKiBfdG1wMF87Ci0rCWdpbnQgX3Rt cDBfX2xlbmd0aDE7Ci0rCUdka0V2ZW50KiBfdG1wMV87Ci0rCUdka0V2ZW50S2V5IF90bXAyXzsK LSsJR2RrTW9kaWZpZXJUeXBlIF90bXAzXzsKLSsJZ3VpbnQgX3RtcDRfID0gMFU7Ci0rCWd1aW50 IHByaW1hcnlfbW9kaWZpZXJzOwotKwlHZGtFdmVudCogX3RtcDVfOwotKwlndWludCBfdG1wNl87 Ci0rCWdib29sZWFuIF90bXA3XyA9IEZBTFNFOwotKwlnYm9vbGVhbiBwcmVzc2VkOwotKwlnYm9v bGVhbiBfdG1wOF87Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7Ci0rCWdfcmV0 dXJuX2lmX2ZhaWwgKGV2ZW50ICE9IE5VTEwpOwotKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX2Vu Z2luZXM7Ci0rCV90bXAwX19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDE7 Ci0rCWlmIChfdG1wMF9fbGVuZ3RoMSA8PSAxKSB7Ci0rCQlyZXR1cm47Ci0rCX0KLSsJX3RtcDFf ID0gZXZlbnQ7Ci0rCV90bXAyXyA9IF90bXAxXy0+a2V5OwotKwlfdG1wM18gPSBfdG1wMl8uc3Rh dGU7Ci0rCV90bXA0XyA9IGtleWJpbmRpbmdfbWFuYWdlcl9nZXRfcHJpbWFyeV9tb2RpZmllciAo KGd1aW50KSBfdG1wM18pOwotKwlwcmltYXJ5X21vZGlmaWVycyA9IF90bXA0XzsKLSsJX3RtcDVf ID0gZXZlbnQ7Ci0rCV90bXA2XyA9IHByaW1hcnlfbW9kaWZpZXJzOwotKwlfdG1wN18gPSBrZXli aW5kaW5nX21hbmFnZXJfcHJpbWFyeV9tb2RpZmllcl9zdGlsbF9wcmVzc2VkIChfdG1wNV8sIF90 bXA2Xyk7Ci0rCXByZXNzZWQgPSBfdG1wN187Ci0rCV90bXA4XyA9IHByZXNzZWQ7Ci0rCWlmIChf dG1wOF8pIHsKLSsJCWdpbnQgX3RtcDlfID0gMDsKLSsJCWdib29sZWFuIF90bXAxMF87Ci0rCQln aW50IF90bXAxMl87Ci0rCQlnaW50IGk7Ci0rCQlTd2l0Y2hlciogX3RtcDEzXzsKLSsJCUdka0V2 ZW50KiBfdG1wMTRfOwotKwkJSUJ1c0VuZ2luZURlc2MqKiBfdG1wMTVfOwotKwkJZ2ludCBfdG1w MTVfX2xlbmd0aDE7Ci0rCQlnaW50IF90bXAxNl87Ci0rCQlnaW50IF90bXAxN18gPSAwOwotKwkJ Z2ludCBfdG1wMThfOwotKwkJX3RtcDEwXyA9IHJldmVydDsKLSsJCWlmIChfdG1wMTBfKSB7Ci0r CQkJSUJ1c0VuZ2luZURlc2MqKiBfdG1wMTFfOwotKwkJCWdpbnQgX3RtcDExX19sZW5ndGgxOwot KwkJCV90bXAxMV8gPSBzZWxmLT5wcml2LT5tX2VuZ2luZXM7Ci0rCQkJX3RtcDExX19sZW5ndGgx ID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDE7Ci0rCQkJX3RtcDlfID0gX3RtcDExX19s ZW5ndGgxIC0gMTsKLSsJCX0gZWxzZSB7Ci0rCQkJX3RtcDlfID0gMTsKLSsJCX0KLSsJCV90bXAx Ml8gPSBfdG1wOV87Ci0rCQlpID0gX3RtcDEyXzsKLSsJCV90bXAxM18gPSBzZWxmLT5wcml2LT5t X3N3aXRjaGVyOwotKwkJX3RtcDE0XyA9IGV2ZW50OwotKwkJX3RtcDE1XyA9IHNlbGYtPnByaXYt Pm1fZW5naW5lczsKLSsJCV90bXAxNV9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fZW5naW5lc19s ZW5ndGgxOwotKwkJX3RtcDE2XyA9IGk7Ci0rCQlfdG1wMTdfID0gc3dpdGNoZXJfcnVuIChfdG1w MTNfLCBfdG1wMTRfLCBfdG1wMTVfLCBfdG1wMTVfX2xlbmd0aDEsIF90bXAxNl8pOwotKwkJaSA9 IF90bXAxN187Ci0rCQlfdG1wMThfID0gaTsKLSsJCWlmIChfdG1wMThfIDwgMCkgewotKwkJCWdf ZGVidWcgKCJwYW5lbC52YWxhOjQwNjogc3dpdGNoIGNhbmNlbGxlZCIpOwotKwkJfSBlbHNlIHsK LSsJCQlnaW50IF90bXAxOV87Ci0rCQkJSUJ1c0VuZ2luZURlc2MqKiBfdG1wMjBfOwotKwkJCWdp bnQgX3RtcDIwX19sZW5ndGgxOwotKwkJCWdpbnQgX3RtcDIxXzsKLSsJCQlfdG1wMTlfID0gaTsK LSsJCQlfdG1wMjBfID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzOwotKwkJCV90bXAyMF9fbGVuZ3Ro MSA9IHNlbGYtPnByaXYtPm1fZW5naW5lc19sZW5ndGgxOwotKwkJCWdfYXNzZXJ0IChfdG1wMTlf IDwgX3RtcDIwX19sZW5ndGgxKTsKLSsJCQlfdG1wMjFfID0gaTsKLSsJCQlwYW5lbF9zd2l0Y2hf ZW5naW5lIChzZWxmLCBfdG1wMjFfLCBGQUxTRSk7Ci0rCQl9Ci0rCX0gZWxzZSB7Ci0rCQlnaW50 IF90bXAyMl8gPSAwOwotKwkJZ2Jvb2xlYW4gX3RtcDIzXzsKLSsJCWdpbnQgX3RtcDI1XzsKLSsJ CWdpbnQgaTsKLSsJCWdpbnQgX3RtcDI2XzsKLSsJCV90bXAyM18gPSByZXZlcnQ7Ci0rCQlpZiAo X3RtcDIzXykgewotKwkJCUlCdXNFbmdpbmVEZXNjKiogX3RtcDI0XzsKLSsJCQlnaW50IF90bXAy NF9fbGVuZ3RoMTsKLSsJCQlfdG1wMjRfID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzOwotKwkJCV90 bXAyNF9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fZW5naW5lc19sZW5ndGgxOwotKwkJCV90bXAy Ml8gPSBfdG1wMjRfX2xlbmd0aDEgLSAxOwotKwkJfSBlbHNlIHsKLSsJCQlfdG1wMjJfID0gMTsK LSsJCX0KLSsJCV90bXAyNV8gPSBfdG1wMjJfOwotKwkJaSA9IF90bXAyNV87Ci0rCQlfdG1wMjZf ID0gaTsKLSsJCXBhbmVsX3N3aXRjaF9lbmdpbmUgKHNlbGYsIF90bXAyNl8sIEZBTFNFKTsKLSsJ fQotK30KLSsKLSsKLStzdGF0aWMgZ2NoYXIqKiBfdmFsYV9hcnJheV9kdXAyIChnY2hhcioqIHNl bGYsIGludCBsZW5ndGgpIHsKLSsJZ2NoYXIqKiByZXN1bHQ7Ci0rCWludCBpOwotKwlyZXN1bHQg PSBnX25ldzAgKGdjaGFyKiwgbGVuZ3RoICsgMSk7Ci0rCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7 IGkrKykgewotKwkJZ2NoYXIqIF90bXAwXzsKLSsJCV90bXAwXyA9IGdfc3RyZHVwIChzZWxmW2ld KTsKLSsJCXJlc3VsdFtpXSA9IF90bXAwXzsKLSsJfQotKwlyZXR1cm4gcmVzdWx0OwotK30KLSsK LSsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxNyAoZ2NoYXIqKiogYXJyYXksIGludCog bGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSkgewotKwlpZiAoKCpsZW5ndGgpID09ICgq c2l6ZSkpIHsKLSsJCSpzaXplID0gKCpzaXplKSA/ICgyICogKCpzaXplKSkgOiA0OwotKwkJKmFy cmF5ID0gZ19yZW5ldyAoZ2NoYXIqLCAqYXJyYXksICgqc2l6ZSkgKyAxKTsKLSsJfQotKwkoKmFy cmF5KVsoKmxlbmd0aCkrK10gPSB2YWx1ZTsKLSsJKCphcnJheSlbKmxlbmd0aF0gPSBOVUxMOwot K30KLSsKLSsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxOCAoZ2NoYXIqKiogYXJyYXks IGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSkgewotKwlpZiAoKCpsZW5ndGgp ID09ICgqc2l6ZSkpIHsKLSsJCSpzaXplID0gKCpzaXplKSA/ICgyICogKCpzaXplKSkgOiA0Owot KwkJKmFycmF5ID0gZ19yZW5ldyAoZ2NoYXIqLCAqYXJyYXksICgqc2l6ZSkgKyAxKTsKLSsJfQot KwkoKmFycmF5KVsoKmxlbmd0aCkrK10gPSB2YWx1ZTsKLSsJKCphcnJheSlbKmxlbmd0aF0gPSBO VUxMOwotK30KLSsKLSsKLStzdGF0aWMgSUJ1c0VuZ2luZURlc2MqKiBfdmFsYV9hcnJheV9kdXAz IChJQnVzRW5naW5lRGVzYyoqIHNlbGYsIGludCBsZW5ndGgpIHsKLSsJSUJ1c0VuZ2luZURlc2Mq KiByZXN1bHQ7Ci0rCWludCBpOwotKwlyZXN1bHQgPSBnX25ldzAgKElCdXNFbmdpbmVEZXNjKiwg bGVuZ3RoICsgMSk7Ci0rCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotKwkJSUJ1c0Vu Z2luZURlc2MqIF90bXAwXzsKLSsJCV90bXAwXyA9IF9nX29iamVjdF9yZWYwIChzZWxmW2ldKTsK LSsJCXJlc3VsdFtpXSA9IF90bXAwXzsKLSsJfQotKwlyZXR1cm4gcmVzdWx0OwotK30KLSsKLSsK LStzdGF0aWMgSUJ1c0VuZ2luZURlc2MqKiBfdmFsYV9hcnJheV9kdXA0IChJQnVzRW5naW5lRGVz YyoqIHNlbGYsIGludCBsZW5ndGgpIHsKLSsJSUJ1c0VuZ2luZURlc2MqKiByZXN1bHQ7Ci0rCWlu dCBpOwotKwlyZXN1bHQgPSBnX25ldzAgKElCdXNFbmdpbmVEZXNjKiwgbGVuZ3RoICsgMSk7Ci0r CWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotKwkJSUJ1c0VuZ2luZURlc2MqIF90bXAw XzsKLSsJCV90bXAwXyA9IF9nX29iamVjdF9yZWYwIChzZWxmW2ldKTsKLSsJCXJlc3VsdFtpXSA9 IF90bXAwXzsKLSsJfQotKwlyZXR1cm4gcmVzdWx0OwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBw YW5lbF91cGRhdGVfZW5naW5lcyAoUGFuZWwqIHNlbGYsIEdWYXJpYW50KiB2YXJfZW5naW5lcywg R1ZhcmlhbnQqIHZhcl9vcmRlcikgewotKwlnY2hhcioqIGVuZ2luZV9uYW1lczsKLSsJZ2ludCBl bmdpbmVfbmFtZXNfbGVuZ3RoMTsKLSsJZ2ludCBfZW5naW5lX25hbWVzX3NpemVfOwotKwlHVmFy aWFudCogX3RtcDBfOwotKwlnYm9vbGVhbiBfdG1wNF8gPSBGQUxTRTsKLSsJZ2NoYXIqKiBfdG1w NV87Ci0rCWdpbnQgX3RtcDVfX2xlbmd0aDE7Ci0rCWdib29sZWFuIF90bXA3XzsKLSsJZ2NoYXIq KiBfdG1wMTBfID0gTlVMTDsKLSsJZ2ludCBfdG1wMTBfX2xlbmd0aDEgPSAwOwotKwlnaW50IF9f dG1wMTBfX3NpemVfID0gMDsKLSsJR1ZhcmlhbnQqIF90bXAxMV87Ci0rCWdjaGFyKiogX3RtcDE1 XzsKLSsJZ2ludCBfdG1wMTVfX2xlbmd0aDE7Ci0rCWdjaGFyKiogX3RtcDE2XzsKLSsJZ2ludCBf dG1wMTZfX2xlbmd0aDE7Ci0rCWdjaGFyKiogb3JkZXJfbmFtZXM7Ci0rCWdpbnQgb3JkZXJfbmFt ZXNfbGVuZ3RoMTsKLSsJZ2ludCBfb3JkZXJfbmFtZXNfc2l6ZV87Ci0rCWdjaGFyKiogX3RtcDE3 XyA9IE5VTEw7Ci0rCWdjaGFyKiogbmFtZXM7Ci0rCWdpbnQgbmFtZXNfbGVuZ3RoMTsKLSsJZ2lu dCBfbmFtZXNfc2l6ZV87Ci0rCWdjaGFyKiogX3RtcDE4XzsKLSsJZ2ludCBfdG1wMThfX2xlbmd0 aDE7Ci0rCWdjaGFyKiogX3RtcDI1XzsKLSsJZ2ludCBfdG1wMjVfX2xlbmd0aDE7Ci0rCUlCdXNC dXMqIF90bXAzMl87Ci0rCWdjaGFyKiogX3RtcDMzXzsKLSsJZ2ludCBfdG1wMzNfX2xlbmd0aDE7 Ci0rCUlCdXNFbmdpbmVEZXNjKiogX3RtcDM0XzsKLSsJSUJ1c0VuZ2luZURlc2MqKiBfdG1wMzVf ID0gTlVMTDsKLSsJSUJ1c0VuZ2luZURlc2MqKiBlbmdpbmVzOwotKwlnaW50IGVuZ2luZXNfbGVu Z3RoMTsKLSsJZ2ludCBfZW5naW5lc19zaXplXzsKLSsJSUJ1c0VuZ2luZURlc2MqKiBfdG1wMzZf OwotKwlnaW50IF90bXAzNl9fbGVuZ3RoMTsKLSsJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBO VUxMKTsKLSsJZW5naW5lX25hbWVzID0gTlVMTDsKLSsJZW5naW5lX25hbWVzX2xlbmd0aDEgPSAw OwotKwlfZW5naW5lX25hbWVzX3NpemVfID0gZW5naW5lX25hbWVzX2xlbmd0aDE7Ci0rCV90bXAw XyA9IHZhcl9lbmdpbmVzOwotKwlpZiAoX3RtcDBfICE9IE5VTEwpIHsKLSsJCUdWYXJpYW50KiBf dG1wMV87Ci0rCQlzaXplX3QgX3RtcDJfOwotKwkJZ2NoYXIqKiBfdG1wM18gPSBOVUxMOwotKwkJ X3RtcDFfID0gdmFyX2VuZ2luZXM7Ci0rCQlfdG1wM18gPSBnX3ZhcmlhbnRfZHVwX3N0cnYgKF90 bXAxXywgJl90bXAyXyk7Ci0rCQllbmdpbmVfbmFtZXMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoZW5n aW5lX25hbWVzLCBlbmdpbmVfbmFtZXNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUp LCBOVUxMKTsKLSsJCWVuZ2luZV9uYW1lcyA9IF90bXAzXzsKLSsJCWVuZ2luZV9uYW1lc19sZW5n dGgxID0gX3RtcDJfOwotKwkJX2VuZ2luZV9uYW1lc19zaXplXyA9IGVuZ2luZV9uYW1lc19sZW5n dGgxOwotKwl9Ci0rCV90bXA1XyA9IGVuZ2luZV9uYW1lczsKLSsJX3RtcDVfX2xlbmd0aDEgPSBl bmdpbmVfbmFtZXNfbGVuZ3RoMTsKLSsJaWYgKF90bXA1XyA9PSBOVUxMKSB7Ci0rCQlfdG1wNF8g PSBUUlVFOwotKwl9IGVsc2UgewotKwkJZ2NoYXIqKiBfdG1wNl87Ci0rCQlnaW50IF90bXA2X19s ZW5ndGgxOwotKwkJX3RtcDZfID0gZW5naW5lX25hbWVzOwotKwkJX3RtcDZfX2xlbmd0aDEgPSBl bmdpbmVfbmFtZXNfbGVuZ3RoMTsKLSsJCV90bXA0XyA9IF90bXA2X19sZW5ndGgxID09IDA7Ci0r CX0KLSsJX3RtcDdfID0gX3RtcDRfOwotKwlpZiAoX3RtcDdfKSB7Ci0rCQlnY2hhciogX3RtcDhf OwotKwkJZ2NoYXIqKiBfdG1wOV8gPSBOVUxMOwotKwkJX3RtcDhfID0gZ19zdHJkdXAgKCJ4a2I6 dXM6OmVuZyIpOwotKwkJX3RtcDlfID0gZ19uZXcwIChnY2hhciosIDEgKyAxKTsKLSsJCV90bXA5 X1swXSA9IF90bXA4XzsKLSsJCWVuZ2luZV9uYW1lcyA9IChfdmFsYV9hcnJheV9mcmVlIChlbmdp bmVfbmFtZXMsIGVuZ2luZV9uYW1lc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSks IE5VTEwpOwotKwkJZW5naW5lX25hbWVzID0gX3RtcDlfOwotKwkJZW5naW5lX25hbWVzX2xlbmd0 aDEgPSAxOwotKwkJX2VuZ2luZV9uYW1lc19zaXplXyA9IGVuZ2luZV9uYW1lc19sZW5ndGgxOwot Kwl9Ci0rCV90bXAxMV8gPSB2YXJfb3JkZXI7Ci0rCWlmIChfdG1wMTFfICE9IE5VTEwpIHsKLSsJ CUdWYXJpYW50KiBfdG1wMTJfOwotKwkJc2l6ZV90IF90bXAxM187Ci0rCQlnY2hhcioqIF90bXAx NF8gPSBOVUxMOwotKwkJX3RtcDEyXyA9IHZhcl9vcmRlcjsKLSsJCV90bXAxNF8gPSBnX3Zhcmlh bnRfZHVwX3N0cnYgKF90bXAxMl8sICZfdG1wMTNfKTsKLSsJCV90bXAxMF8gPSAoX3ZhbGFfYXJy YXlfZnJlZSAoX3RtcDEwXywgX3RtcDEwX19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJl ZSksIE5VTEwpOwotKwkJX3RtcDEwXyA9IF90bXAxNF87Ci0rCQlfdG1wMTBfX2xlbmd0aDEgPSBf dG1wMTNfOwotKwkJX190bXAxMF9fc2l6ZV8gPSBfdG1wMTBfX2xlbmd0aDE7Ci0rCX0gZWxzZSB7 Ci0rCQlfdG1wMTBfID0gKF92YWxhX2FycmF5X2ZyZWUgKF90bXAxMF8sIF90bXAxMF9fbGVuZ3Ro MSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJCV90bXAxMF8gPSBOVUxMOwot KwkJX3RtcDEwX19sZW5ndGgxID0gMDsKLSsJCV9fdG1wMTBfX3NpemVfID0gX3RtcDEwX19sZW5n dGgxOwotKwl9Ci0rCV90bXAxNV8gPSBfdG1wMTBfOwotKwlfdG1wMTVfX2xlbmd0aDEgPSBfdG1w MTBfX2xlbmd0aDE7Ci0rCV90bXAxNl8gPSAoX3RtcDE1XyAhPSBOVUxMKSA/IF92YWxhX2FycmF5 X2R1cDIgKF90bXAxNV8sIF90bXAxNV9fbGVuZ3RoMSkgOiAoKGdwb2ludGVyKSBfdG1wMTVfKTsK LSsJX3RtcDE2X19sZW5ndGgxID0gX3RtcDE1X19sZW5ndGgxOwotKwlvcmRlcl9uYW1lcyA9IF90 bXAxNl87Ci0rCW9yZGVyX25hbWVzX2xlbmd0aDEgPSBfdG1wMTZfX2xlbmd0aDE7Ci0rCV9vcmRl cl9uYW1lc19zaXplXyA9IG9yZGVyX25hbWVzX2xlbmd0aDE7Ci0rCV90bXAxN18gPSBnX25ldzAg KGdjaGFyKiwgMCArIDEpOwotKwluYW1lcyA9IF90bXAxN187Ci0rCW5hbWVzX2xlbmd0aDEgPSAw OwotKwlfbmFtZXNfc2l6ZV8gPSBuYW1lc19sZW5ndGgxOwotKwlfdG1wMThfID0gb3JkZXJfbmFt ZXM7Ci0rCV90bXAxOF9fbGVuZ3RoMSA9IG9yZGVyX25hbWVzX2xlbmd0aDE7Ci0rCXsKLSsJCWdj aGFyKiogbmFtZV9jb2xsZWN0aW9uID0gTlVMTDsKLSsJCWdpbnQgbmFtZV9jb2xsZWN0aW9uX2xl bmd0aDEgPSAwOwotKwkJZ2ludCBfbmFtZV9jb2xsZWN0aW9uX3NpemVfID0gMDsKLSsJCWdpbnQg bmFtZV9pdCA9IDA7Ci0rCQluYW1lX2NvbGxlY3Rpb24gPSBfdG1wMThfOwotKwkJbmFtZV9jb2xs ZWN0aW9uX2xlbmd0aDEgPSBfdG1wMThfX2xlbmd0aDE7Ci0rCQlmb3IgKG5hbWVfaXQgPSAwOyBu YW1lX2l0IDwgX3RtcDE4X19sZW5ndGgxOyBuYW1lX2l0ID0gbmFtZV9pdCArIDEpIHsKLSsJCQln Y2hhciogX3RtcDE5XzsKLSsJCQlnY2hhciogbmFtZSA9IE5VTEw7Ci0rCQkJX3RtcDE5XyA9IGdf c3RyZHVwIChuYW1lX2NvbGxlY3Rpb25bbmFtZV9pdF0pOwotKwkJCW5hbWUgPSBfdG1wMTlfOwot KwkJCXsKLSsJCQkJY29uc3QgZ2NoYXIqIF90bXAyMF87Ci0rCQkJCWdjaGFyKiogX3RtcDIxXzsK LSsJCQkJZ2ludCBfdG1wMjFfX2xlbmd0aDE7Ci0rCQkJCV90bXAyMF8gPSBuYW1lOwotKwkJCQlf dG1wMjFfID0gZW5naW5lX25hbWVzOwotKwkJCQlfdG1wMjFfX2xlbmd0aDEgPSBlbmdpbmVfbmFt ZXNfbGVuZ3RoMTsKLSsJCQkJaWYgKF92YWxhX3N0cmluZ19hcnJheV9jb250YWlucyAoX3RtcDIx XywgX3RtcDIxX19sZW5ndGgxLCBfdG1wMjBfKSkgewotKwkJCQkJZ2NoYXIqKiBfdG1wMjJfOwot KwkJCQkJZ2ludCBfdG1wMjJfX2xlbmd0aDE7Ci0rCQkJCQljb25zdCBnY2hhciogX3RtcDIzXzsK LSsJCQkJCWdjaGFyKiBfdG1wMjRfOwotKwkJCQkJX3RtcDIyXyA9IG5hbWVzOwotKwkJCQkJX3Rt cDIyX19sZW5ndGgxID0gbmFtZXNfbGVuZ3RoMTsKLSsJCQkJCV90bXAyM18gPSBuYW1lOwotKwkJ CQkJX3RtcDI0XyA9IGdfc3RyZHVwIChfdG1wMjNfKTsKLSsJCQkJCV92YWxhX2FycmF5X2FkZDE3 ICgmbmFtZXMsICZuYW1lc19sZW5ndGgxLCAmX25hbWVzX3NpemVfLCBfdG1wMjRfKTsKLSsJCQkJ fQotKwkJCQlfZ19mcmVlMCAobmFtZSk7Ci0rCQkJfQotKwkJfQotKwl9Ci0rCV90bXAyNV8gPSBl bmdpbmVfbmFtZXM7Ci0rCV90bXAyNV9fbGVuZ3RoMSA9IGVuZ2luZV9uYW1lc19sZW5ndGgxOwot Kwl7Ci0rCQlnY2hhcioqIG5hbWVfY29sbGVjdGlvbiA9IE5VTEw7Ci0rCQlnaW50IG5hbWVfY29s bGVjdGlvbl9sZW5ndGgxID0gMDsKLSsJCWdpbnQgX25hbWVfY29sbGVjdGlvbl9zaXplXyA9IDA7 Ci0rCQlnaW50IG5hbWVfaXQgPSAwOwotKwkJbmFtZV9jb2xsZWN0aW9uID0gX3RtcDI1XzsKLSsJ CW5hbWVfY29sbGVjdGlvbl9sZW5ndGgxID0gX3RtcDI1X19sZW5ndGgxOwotKwkJZm9yIChuYW1l X2l0ID0gMDsgbmFtZV9pdCA8IF90bXAyNV9fbGVuZ3RoMTsgbmFtZV9pdCA9IG5hbWVfaXQgKyAx KSB7Ci0rCQkJZ2NoYXIqIF90bXAyNl87Ci0rCQkJZ2NoYXIqIG5hbWUgPSBOVUxMOwotKwkJCV90 bXAyNl8gPSBnX3N0cmR1cCAobmFtZV9jb2xsZWN0aW9uW25hbWVfaXRdKTsKLSsJCQluYW1lID0g X3RtcDI2XzsKLSsJCQl7Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wMjdfOwotKwkJCQlnY2hhcioq IF90bXAyOF87Ci0rCQkJCWdpbnQgX3RtcDI4X19sZW5ndGgxOwotKwkJCQlnY2hhcioqIF90bXAy OV87Ci0rCQkJCWdpbnQgX3RtcDI5X19sZW5ndGgxOwotKwkJCQljb25zdCBnY2hhciogX3RtcDMw XzsKLSsJCQkJZ2NoYXIqIF90bXAzMV87Ci0rCQkJCV90bXAyN18gPSBuYW1lOwotKwkJCQlfdG1w MjhfID0gbmFtZXM7Ci0rCQkJCV90bXAyOF9fbGVuZ3RoMSA9IG5hbWVzX2xlbmd0aDE7Ci0rCQkJ CWlmIChfdmFsYV9zdHJpbmdfYXJyYXlfY29udGFpbnMgKF90bXAyOF8sIF90bXAyOF9fbGVuZ3Ro MSwgX3RtcDI3XykpIHsKLSsJCQkJCV9nX2ZyZWUwIChuYW1lKTsKLSsJCQkJCWNvbnRpbnVlOwot KwkJCQl9Ci0rCQkJCV90bXAyOV8gPSBuYW1lczsKLSsJCQkJX3RtcDI5X19sZW5ndGgxID0gbmFt ZXNfbGVuZ3RoMTsKLSsJCQkJX3RtcDMwXyA9IG5hbWU7Ci0rCQkJCV90bXAzMV8gPSBnX3N0cmR1 cCAoX3RtcDMwXyk7Ci0rCQkJCV92YWxhX2FycmF5X2FkZDE4ICgmbmFtZXMsICZuYW1lc19sZW5n dGgxLCAmX25hbWVzX3NpemVfLCBfdG1wMzFfKTsKLSsJCQkJX2dfZnJlZTAgKG5hbWUpOwotKwkJ CX0KLSsJCX0KLSsJfQotKwlfdG1wMzJfID0gc2VsZi0+cHJpdi0+bV9idXM7Ci0rCV90bXAzM18g PSBuYW1lczsKLSsJX3RtcDMzX19sZW5ndGgxID0gbmFtZXNfbGVuZ3RoMTsKLSsJX3RtcDM1XyA9 IF90bXAzNF8gPSBpYnVzX2J1c19nZXRfZW5naW5lc19ieV9uYW1lcyAoX3RtcDMyXywgX3RtcDMz Xyk7Ci0rCWVuZ2luZXMgPSBfdG1wMzVfOwotKwllbmdpbmVzX2xlbmd0aDEgPSBfdmFsYV9hcnJh eV9sZW5ndGggKF90bXAzNF8pOwotKwlfZW5naW5lc19zaXplXyA9IGVuZ2luZXNfbGVuZ3RoMTsK LSsJX3RtcDM2XyA9IHNlbGYtPnByaXYtPm1fZW5naW5lczsKLSsJX3RtcDM2X19sZW5ndGgxID0g c2VsZi0+cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDE7Ci0rCWlmIChfdG1wMzZfX2xlbmd0aDEgPT0g MCkgewotKwkJSUJ1c0VuZ2luZURlc2MqKiBfdG1wMzdfOwotKwkJZ2ludCBfdG1wMzdfX2xlbmd0 aDE7Ci0rCQlJQnVzRW5naW5lRGVzYyoqIF90bXAzOF87Ci0rCQlnaW50IF90bXAzOF9fbGVuZ3Ro MTsKLSsJCV90bXAzN18gPSBlbmdpbmVzOwotKwkJX3RtcDM3X19sZW5ndGgxID0gZW5naW5lc19s ZW5ndGgxOwotKwkJX3RtcDM4XyA9IChfdG1wMzdfICE9IE5VTEwpID8gX3ZhbGFfYXJyYXlfZHVw MyAoX3RtcDM3XywgX3RtcDM3X19sZW5ndGgxKSA6ICgoZ3BvaW50ZXIpIF90bXAzN18pOwotKwkJ X3RtcDM4X19sZW5ndGgxID0gX3RtcDM3X19sZW5ndGgxOwotKwkJc2VsZi0+cHJpdi0+bV9lbmdp bmVzID0gKF92YWxhX2FycmF5X2ZyZWUgKHNlbGYtPnByaXYtPm1fZW5naW5lcywgc2VsZi0+cHJp di0+bV9lbmdpbmVzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19vYmplY3RfdW5yZWYpLCBO VUxMKTsKLSsJCXNlbGYtPnByaXYtPm1fZW5naW5lcyA9IF90bXAzOF87Ci0rCQlzZWxmLT5wcml2 LT5tX2VuZ2luZXNfbGVuZ3RoMSA9IF90bXAzOF9fbGVuZ3RoMTsKLSsJCXNlbGYtPnByaXYtPl9t X2VuZ2luZXNfc2l6ZV8gPSBzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3RoMTsKLSsJCXBhbmVs X3N3aXRjaF9lbmdpbmUgKHNlbGYsIDAsIFRSVUUpOwotKwl9IGVsc2UgewotKwkJSUJ1c0VuZ2lu ZURlc2MqKiBfdG1wMzlfOwotKwkJZ2ludCBfdG1wMzlfX2xlbmd0aDE7Ci0rCQlJQnVzRW5naW5l RGVzYyogX3RtcDQwXzsKLSsJCUlCdXNFbmdpbmVEZXNjKiBfdG1wNDFfOwotKwkJSUJ1c0VuZ2lu ZURlc2MqIGN1cnJlbnRfZW5naW5lOwotKwkJSUJ1c0VuZ2luZURlc2MqKiBfdG1wNDJfOwotKwkJ Z2ludCBfdG1wNDJfX2xlbmd0aDE7Ci0rCQlJQnVzRW5naW5lRGVzYyoqIF90bXA0M187Ci0rCQln aW50IF90bXA0M19fbGVuZ3RoMTsKLSsJCWdpbnQgaSA9IDA7Ci0rCQlfdG1wMzlfID0gc2VsZi0+ cHJpdi0+bV9lbmdpbmVzOwotKwkJX3RtcDM5X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV9lbmdp bmVzX2xlbmd0aDE7Ci0rCQlfdG1wNDBfID0gX3RtcDM5X1swXTsKLSsJCV90bXA0MV8gPSBfZ19v YmplY3RfcmVmMCAoX3RtcDQwXyk7Ci0rCQljdXJyZW50X2VuZ2luZSA9IF90bXA0MV87Ci0rCQlf dG1wNDJfID0gZW5naW5lczsKLSsJCV90bXA0Ml9fbGVuZ3RoMSA9IGVuZ2luZXNfbGVuZ3RoMTsK LSsJCV90bXA0M18gPSAoX3RtcDQyXyAhPSBOVUxMKSA/IF92YWxhX2FycmF5X2R1cDQgKF90bXA0 Ml8sIF90bXA0Ml9fbGVuZ3RoMSkgOiAoKGdwb2ludGVyKSBfdG1wNDJfKTsKLSsJCV90bXA0M19f bGVuZ3RoMSA9IF90bXA0Ml9fbGVuZ3RoMTsKLSsJCXNlbGYtPnByaXYtPm1fZW5naW5lcyA9IChf dmFsYV9hcnJheV9mcmVlIChzZWxmLT5wcml2LT5tX2VuZ2luZXMsIHNlbGYtPnByaXYtPm1fZW5n aW5lc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfb2JqZWN0X3VucmVmKSwgTlVMTCk7Ci0r CQlzZWxmLT5wcml2LT5tX2VuZ2luZXMgPSBfdG1wNDNfOwotKwkJc2VsZi0+cHJpdi0+bV9lbmdp bmVzX2xlbmd0aDEgPSBfdG1wNDNfX2xlbmd0aDE7Ci0rCQlzZWxmLT5wcml2LT5fbV9lbmdpbmVz X3NpemVfID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDE7Ci0rCQl7Ci0rCQkJZ2Jvb2xl YW4gX3RtcDQ0XzsKLSsJCQlpID0gMDsKLSsJCQlfdG1wNDRfID0gVFJVRTsKLSsJCQl3aGlsZSAo VFJVRSkgewotKwkJCQlnYm9vbGVhbiBfdG1wNDVfOwotKwkJCQlnaW50IF90bXA0N187Ci0rCQkJ CUlCdXNFbmdpbmVEZXNjKiogX3RtcDQ4XzsKLSsJCQkJZ2ludCBfdG1wNDhfX2xlbmd0aDE7Ci0r CQkJCUlCdXNFbmdpbmVEZXNjKiBfdG1wNDlfOwotKwkJCQljb25zdCBnY2hhciogX3RtcDUwXyA9 IE5VTEw7Ci0rCQkJCUlCdXNFbmdpbmVEZXNjKiogX3RtcDUxXzsKLSsJCQkJZ2ludCBfdG1wNTFf X2xlbmd0aDE7Ci0rCQkJCWdpbnQgX3RtcDUyXzsKLSsJCQkJSUJ1c0VuZ2luZURlc2MqIF90bXA1 M187Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wNTRfID0gTlVMTDsKLSsJCQkJX3RtcDQ1XyA9IF90 bXA0NF87Ci0rCQkJCWlmICghX3RtcDQ1XykgewotKwkJCQkJZ2ludCBfdG1wNDZfOwotKwkJCQkJ X3RtcDQ2XyA9IGk7Ci0rCQkJCQlpID0gX3RtcDQ2XyArIDE7Ci0rCQkJCX0KLSsJCQkJX3RtcDQ0 XyA9IEZBTFNFOwotKwkJCQlfdG1wNDdfID0gaTsKLSsJCQkJX3RtcDQ4XyA9IHNlbGYtPnByaXYt Pm1fZW5naW5lczsKLSsJCQkJX3RtcDQ4X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVz X2xlbmd0aDE7Ci0rCQkJCWlmICghKF90bXA0N18gPCBfdG1wNDhfX2xlbmd0aDEpKSB7Ci0rCQkJ CQlicmVhazsKLSsJCQkJfQotKwkJCQlfdG1wNDlfID0gY3VycmVudF9lbmdpbmU7Ci0rCQkJCV90 bXA1MF8gPSBpYnVzX2VuZ2luZV9kZXNjX2dldF9uYW1lIChfdG1wNDlfKTsKLSsJCQkJX3RtcDUx XyA9IGVuZ2luZXM7Ci0rCQkJCV90bXA1MV9fbGVuZ3RoMSA9IGVuZ2luZXNfbGVuZ3RoMTsKLSsJ CQkJX3RtcDUyXyA9IGk7Ci0rCQkJCV90bXA1M18gPSBfdG1wNTFfW190bXA1Ml9dOwotKwkJCQlf dG1wNTRfID0gaWJ1c19lbmdpbmVfZGVzY19nZXRfbmFtZSAoX3RtcDUzXyk7Ci0rCQkJCWlmIChn X3N0cmNtcDAgKF90bXA1MF8sIF90bXA1NF8pID09IDApIHsKLSsJCQkJCWdpbnQgX3RtcDU1XzsK LSsJCQkJCV90bXA1NV8gPSBpOwotKwkJCQkJcGFuZWxfc3dpdGNoX2VuZ2luZSAoc2VsZiwgX3Rt cDU1XywgRkFMU0UpOwotKwkJCQkJX2dfb2JqZWN0X3VucmVmMCAoY3VycmVudF9lbmdpbmUpOwot KwkJCQkJZW5naW5lcyA9IChfdmFsYV9hcnJheV9mcmVlIChlbmdpbmVzLCBlbmdpbmVzX2xlbmd0 aDEsIChHRGVzdHJveU5vdGlmeSkgZ19vYmplY3RfdW5yZWYpLCBOVUxMKTsKLSsJCQkJCW5hbWVz ID0gKF92YWxhX2FycmF5X2ZyZWUgKG5hbWVzLCBuYW1lc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3Rp ZnkpIGdfZnJlZSksIE5VTEwpOwotKwkJCQkJb3JkZXJfbmFtZXMgPSAoX3ZhbGFfYXJyYXlfZnJl ZSAob3JkZXJfbmFtZXMsIG9yZGVyX25hbWVzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19m cmVlKSwgTlVMTCk7Ci0rCQkJCQlfdG1wMTBfID0gKF92YWxhX2FycmF5X2ZyZWUgKF90bXAxMF8s IF90bXAxMF9fbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJCQkJ CWVuZ2luZV9uYW1lcyA9IChfdmFsYV9hcnJheV9mcmVlIChlbmdpbmVfbmFtZXMsIGVuZ2luZV9u YW1lc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOwotKwkJCQkJcmV0 dXJuOwotKwkJCQl9Ci0rCQkJfQotKwkJfQotKwkJcGFuZWxfc3dpdGNoX2VuZ2luZSAoc2VsZiwg MCwgVFJVRSk7Ci0rCQlfZ19vYmplY3RfdW5yZWYwIChjdXJyZW50X2VuZ2luZSk7Ci0rCX0KLSsJ ZW5naW5lcyA9IChfdmFsYV9hcnJheV9mcmVlIChlbmdpbmVzLCBlbmdpbmVzX2xlbmd0aDEsIChH RGVzdHJveU5vdGlmeSkgZ19vYmplY3RfdW5yZWYpLCBOVUxMKTsKLSsJbmFtZXMgPSAoX3ZhbGFf YXJyYXlfZnJlZSAobmFtZXMsIG5hbWVzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVl KSwgTlVMTCk7Ci0rCW9yZGVyX25hbWVzID0gKF92YWxhX2FycmF5X2ZyZWUgKG9yZGVyX25hbWVz LCBvcmRlcl9uYW1lc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOwot KwlfdG1wMTBfID0gKF92YWxhX2FycmF5X2ZyZWUgKF90bXAxMF8sIF90bXAxMF9fbGVuZ3RoMSwg KEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJZW5naW5lX25hbWVzID0gKF92YWxh X2FycmF5X2ZyZWUgKGVuZ2luZV9uYW1lcywgZW5naW5lX25hbWVzX2xlbmd0aDEsIChHRGVzdHJv eU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF9fbGFtYmRh MThfIChQYW5lbCogc2VsZiwgR1BpZCBwaWQsIGdpbnQgc3RhdGUpIHsKLSsJR1BpZCBfdG1wMF87 Ci0rCUdQaWQgX3RtcDFfOwotKwlHUGlkIF90bXAyXzsKLSsJX3RtcDBfID0gcGlkOwotKwlfdG1w MV8gPSBzZWxmLT5wcml2LT5tX3NldHVwX3BpZDsKLSsJaWYgKF90bXAwXyAhPSBfdG1wMV8pIHsK LSsJCXJldHVybjsKLSsJfQotKwlzZWxmLT5wcml2LT5tX3NldHVwX3BpZCA9IChHUGlkKSAwOwot KwlfdG1wMl8gPSBwaWQ7Ci0rCWdfc3Bhd25fY2xvc2VfcGlkIChfdG1wMl8pOwotK30KLSsKLSsK LStzdGF0aWMgdm9pZCBfX19sYW1iZGExOF9fZ2NoaWxkX3dhdGNoX2Z1bmMgKEdQaWQgcGlkLCBn aW50IHN0YXR1cywgZ3BvaW50ZXIgc2VsZikgewotKwlfX2xhbWJkYTE4XyAoc2VsZiwgcGlkLCBz dGF0dXMpOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBwYW5lbF9zaG93X3NldHVwX2RpYWxvZyAo UGFuZWwqIHNlbGYpIHsKLSsJR1BpZCBfdG1wMF87Ci0rCWdjaGFyKiBfdG1wM18gPSBOVUxMOwot KwlnY2hhciogYmluYXJ5OwotKwlHUGlkIF90bXAxM187Ci0rCUdFcnJvciAqIF9pbm5lcl9lcnJv cl8gPSBOVUxMOwotKwlnX3JldHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOwotKwlfdG1wMF8g PSBzZWxmLT5wcml2LT5tX3NldHVwX3BpZDsKLSsJaWYgKF90bXAwXyAhPSAoKEdQaWQpIDApKSB7 Ci0rCQlHUGlkIF90bXAxXzsKLSsJCWdpbnQgX3RtcDJfID0gMDsKLSsJCV90bXAxXyA9IHNlbGYt PnByaXYtPm1fc2V0dXBfcGlkOwotKwkJX3RtcDJfID0ga2lsbCAoKHBpZF90KSBfdG1wMV8sIFNJ R1VTUjEpOwotKwkJaWYgKF90bXAyXyA9PSAwKSB7Ci0rCQkJcmV0dXJuOwotKwkJfQotKwkJc2Vs Zi0+cHJpdi0+bV9zZXR1cF9waWQgPSAoR1BpZCkgMDsKLSsJfQotKwlfdG1wM18gPSBnX2J1aWxk X2ZpbGVuYW1lIChCSU5ESVIsICJpYnVzLXNldHVwIiwgTlVMTCk7Ci0rCWJpbmFyeSA9IF90bXAz XzsKLSsJewotKwkJY29uc3QgZ2NoYXIqIF90bXA0XzsKLSsJCWdjaGFyKiBfdG1wNV87Ci0rCQln Y2hhciogX3RtcDZfOwotKwkJZ2NoYXIqKiBfdG1wN18gPSBOVUxMOwotKwkJZ2NoYXIqKiBfdG1w OF87Ci0rCQlnaW50IF90bXA4X19sZW5ndGgxOwotKwkJR1BpZCBfdG1wOV8gPSAwOwotKwkJX3Rt cDRfID0gYmluYXJ5OwotKwkJX3RtcDVfID0gZ19zdHJkdXAgKF90bXA0Xyk7Ci0rCQlfdG1wNl8g PSBnX3N0cmR1cCAoImlidXMtc2V0dXAiKTsKLSsJCV90bXA3XyA9IGdfbmV3MCAoZ2NoYXIqLCAy ICsgMSk7Ci0rCQlfdG1wN19bMF0gPSBfdG1wNV87Ci0rCQlfdG1wN19bMV0gPSBfdG1wNl87Ci0r CQlfdG1wOF8gPSBfdG1wN187Ci0rCQlfdG1wOF9fbGVuZ3RoMSA9IDI7Ci0rCQlnX3NwYXduX2Fz eW5jIChOVUxMLCBfdG1wOF8sIE5VTEwsIEdfU1BBV05fRE9fTk9UX1JFQVBfQ0hJTEQsIE5VTEws IE5VTEwsICZfdG1wOV8sICZfaW5uZXJfZXJyb3JfKTsKLSsJCXNlbGYtPnByaXYtPm1fc2V0dXBf cGlkID0gX3RtcDlfOwotKwkJX3RtcDhfID0gKF92YWxhX2FycmF5X2ZyZWUgKF90bXA4XywgX3Rt cDhfX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7Ci0rCQlpZiAoX2lu bmVyX2Vycm9yXyAhPSBOVUxMKSB7Ci0rCQkJaWYgKF9pbm5lcl9lcnJvcl8tPmRvbWFpbiA9PSBH X1NQQVdOX0VSUk9SKSB7Ci0rCQkJCWdvdG8gX19jYXRjaDJfZ19zcGF3bl9lcnJvcjsKLSsJCQl9 Ci0rCQkJX2dfZnJlZTAgKGJpbmFyeSk7Ci0rCQkJZ19jcml0aWNhbCAoImZpbGUgJXM6IGxpbmUg JWQ6IHVuZXhwZWN0ZWQgZXJyb3I6ICVzICglcywgJWQpIiwgX19GSUxFX18sIF9fTElORV9fLCBf aW5uZXJfZXJyb3JfLT5tZXNzYWdlLCBnX3F1YXJrX3RvX3N0cmluZyAoX2lubmVyX2Vycm9yXy0+ ZG9tYWluKSwgX2lubmVyX2Vycm9yXy0+Y29kZSk7Ci0rCQkJZ19jbGVhcl9lcnJvciAoJl9pbm5l cl9lcnJvcl8pOwotKwkJCXJldHVybjsKLSsJCX0KLSsJfQotKwlnb3RvIF9fZmluYWxseTI7Ci0r CV9fY2F0Y2gyX2dfc3Bhd25fZXJyb3I6Ci0rCXsKLSsJCUdFcnJvciogZSA9IE5VTEw7Ci0rCQlj b25zdCBnY2hhciogX3RtcDEwXzsKLSsJCUdFcnJvciogX3RtcDExXzsKLSsJCWNvbnN0IGdjaGFy KiBfdG1wMTJfOwotKwkJZSA9IF9pbm5lcl9lcnJvcl87Ci0rCQlfaW5uZXJfZXJyb3JfID0gTlVM TDsKLSsJCV90bXAxMF8gPSBiaW5hcnk7Ci0rCQlfdG1wMTFfID0gZTsKLSsJCV90bXAxMl8gPSBf dG1wMTFfLT5tZXNzYWdlOwotKwkJZ193YXJuaW5nICgicGFuZWwudmFsYTo0Nzg6IEV4ZWN1dGUg JXMgZmFpbGVkISAlcyIsIF90bXAxMF8sIF90bXAxMl8pOwotKwkJc2VsZi0+cHJpdi0+bV9zZXR1 cF9waWQgPSAoR1BpZCkgMDsKLSsJCV9nX2Vycm9yX2ZyZWUwIChlKTsKLSsJfQotKwlfX2ZpbmFs bHkyOgotKwlpZiAoX2lubmVyX2Vycm9yXyAhPSBOVUxMKSB7Ci0rCQlfZ19mcmVlMCAoYmluYXJ5 KTsKLSsJCWdfY3JpdGljYWwgKCJmaWxlICVzOiBsaW5lICVkOiB1bmNhdWdodCBlcnJvcjogJXMg KCVzLCAlZCkiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9pbm5lcl9lcnJvcl8tPm1lc3NhZ2UsIGdf cXVhcmtfdG9fc3RyaW5nIChfaW5uZXJfZXJyb3JfLT5kb21haW4pLCBfaW5uZXJfZXJyb3JfLT5j b2RlKTsKLSsJCWdfY2xlYXJfZXJyb3IgKCZfaW5uZXJfZXJyb3JfKTsKLSsJCXJldHVybjsKLSsJ fQotKwlfdG1wMTNfID0gc2VsZi0+cHJpdi0+bV9zZXR1cF9waWQ7Ci0rCWdfY2hpbGRfd2F0Y2hf YWRkX2Z1bGwgKEdfUFJJT1JJVFlfREVGQVVMVF9JRExFLCBfdG1wMTNfLCBfX19sYW1iZGExOF9f Z2NoaWxkX3dhdGNoX2Z1bmMsIGdfb2JqZWN0X3JlZiAoc2VsZiksIGdfb2JqZWN0X3VucmVmKTsK LSsJX2dfZnJlZTAgKGJpbmFyeSk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX3Nob3df YWJvdXRfZGlhbG9nIChQYW5lbCogc2VsZikgewotKwlHdGtBYm91dERpYWxvZyogX3RtcDBfOwot KwlHdGtBYm91dERpYWxvZyogX3RtcDI1XzsKLSsJZ2Jvb2xlYW4gX3RtcDI2XyA9IEZBTFNFOwot KwlnX3JldHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOwotKwlfdG1wMF8gPSBzZWxmLT5wcml2 LT5tX2Fib3V0X2RpYWxvZzsKLSsJaWYgKF90bXAwXyA9PSBOVUxMKSB7Ci0rCQlHdGtBYm91dERp YWxvZyogX3RtcDFfOwotKwkJR3RrQWJvdXREaWFsb2cqIF90bXAyXzsKLSsJCUd0a0Fib3V0RGlh bG9nKiBfdG1wM187Ci0rCQlHdGtBYm91dERpYWxvZyogX3RtcDRfOwotKwkJY29uc3QgZ2NoYXIq IF90bXA1XyA9IE5VTEw7Ci0rCQlnY2hhciogX3RtcDZfOwotKwkJZ2NoYXIqIGNvcHlyaWdodDsK LSsJCUd0a0Fib3V0RGlhbG9nKiBfdG1wN187Ci0rCQljb25zdCBnY2hhciogX3RtcDhfOwotKwkJ R3RrQWJvdXREaWFsb2cqIF90bXA5XzsKLSsJCUd0a0Fib3V0RGlhbG9nKiBfdG1wMTBfOwotKwkJ Y29uc3QgZ2NoYXIqIF90bXAxMV8gPSBOVUxMOwotKwkJR3RrQWJvdXREaWFsb2cqIF90bXAxMl87 Ci0rCQlHdGtBYm91dERpYWxvZyogX3RtcDEzXzsKLSsJCWdjaGFyKiBfdG1wMTRfOwotKwkJZ2No YXIqKiBfdG1wMTVfID0gTlVMTDsKLSsJCWdjaGFyKiogX3RtcDE2XzsKLSsJCWdpbnQgX3RtcDE2 X19sZW5ndGgxOwotKwkJR3RrQWJvdXREaWFsb2cqIF90bXAxN187Ci0rCQlnY2hhciogX3RtcDE4 XzsKLSsJCWdjaGFyKiogX3RtcDE5XyA9IE5VTEw7Ci0rCQlnY2hhcioqIF90bXAyMF87Ci0rCQln aW50IF90bXAyMF9fbGVuZ3RoMTsKLSsJCUd0a0Fib3V0RGlhbG9nKiBfdG1wMjFfOwotKwkJY29u c3QgZ2NoYXIqIF90bXAyMl8gPSBOVUxMOwotKwkJR3RrQWJvdXREaWFsb2cqIF90bXAyM187Ci0r CQlHdGtBYm91dERpYWxvZyogX3RtcDI0XzsKLSsJCV90bXAxXyA9IChHdGtBYm91dERpYWxvZyop IGd0a19hYm91dF9kaWFsb2dfbmV3ICgpOwotKwkJX3RtcDJfID0gZ19vYmplY3RfcmVmX3Npbmsg KF90bXAxXyk7Ci0rCQlfZ19vYmplY3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX2Fib3V0X2RpYWxv Zyk7Ci0rCQlzZWxmLT5wcml2LT5tX2Fib3V0X2RpYWxvZyA9IF90bXAyXzsKLSsJCV90bXAzXyA9 IHNlbGYtPnByaXYtPm1fYWJvdXRfZGlhbG9nOwotKwkJZ3RrX2Fib3V0X2RpYWxvZ19zZXRfcHJv Z3JhbV9uYW1lIChfdG1wM18sICJJQnVzIik7Ci0rCQlfdG1wNF8gPSBzZWxmLT5wcml2LT5tX2Fi b3V0X2RpYWxvZzsKLSsJCWd0a19hYm91dF9kaWFsb2dfc2V0X3ZlcnNpb24gKF90bXA0XywgSUJV U19WRVJTSU9OKTsKLSsJCV90bXA1XyA9IF8gKCJDb3B5cmlnaHQgKGMpIDIwMDctMjAxMiBQZW5n IEh1YW5nXG4iICJDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBSZWQgSGF0LCBJbmMuXG4iKTsKLSsJ CV90bXA2XyA9IGdfc3RyZHVwIChfdG1wNV8pOwotKwkJY29weXJpZ2h0ID0gX3RtcDZfOwotKwkJ X3RtcDdfID0gc2VsZi0+cHJpdi0+bV9hYm91dF9kaWFsb2c7Ci0rCQlfdG1wOF8gPSBjb3B5cmln aHQ7Ci0rCQlndGtfYWJvdXRfZGlhbG9nX3NldF9jb3B5cmlnaHQgKF90bXA3XywgX3RtcDhfKTsK LSsJCV90bXA5XyA9IHNlbGYtPnByaXYtPm1fYWJvdXRfZGlhbG9nOwotKwkJZ3RrX2Fib3V0X2Rp YWxvZ19zZXRfbGljZW5zZSAoX3RtcDlfLCAiTEdQTCIpOwotKwkJX3RtcDEwXyA9IHNlbGYtPnBy aXYtPm1fYWJvdXRfZGlhbG9nOwotKwkJX3RtcDExXyA9IF8gKCJJQnVzIGlzIGFuIGludGVsbGln ZW50IGlucHV0IGJ1cyBmb3IgTGludXgvVW5peC4iKTsKLSsJCWd0a19hYm91dF9kaWFsb2dfc2V0 X2NvbW1lbnRzIChfdG1wMTBfLCBfdG1wMTFfKTsKLSsJCV90bXAxMl8gPSBzZWxmLT5wcml2LT5t X2Fib3V0X2RpYWxvZzsKLSsJCWd0a19hYm91dF9kaWFsb2dfc2V0X3dlYnNpdGUgKF90bXAxMl8s ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvaWJ1cyIpOwotKwkJX3RtcDEzXyA9IHNlbGYtPnBy aXYtPm1fYWJvdXRfZGlhbG9nOwotKwkJX3RtcDE0XyA9IGdfc3RyZHVwICgiUGVuZyBIdWFuZyA8 c2hhd24ucC5odWFuZ0BnbWFpbC5jb20+Iik7Ci0rCQlfdG1wMTVfID0gZ19uZXcwIChnY2hhcios IDEgKyAxKTsKLSsJCV90bXAxNV9bMF0gPSBfdG1wMTRfOwotKwkJX3RtcDE2XyA9IF90bXAxNV87 Ci0rCQlfdG1wMTZfX2xlbmd0aDEgPSAxOwotKwkJZ3RrX2Fib3V0X2RpYWxvZ19zZXRfYXV0aG9y cyAoX3RtcDEzXywgX3RtcDE2Xyk7Ci0rCQlfdG1wMTZfID0gKF92YWxhX2FycmF5X2ZyZWUgKF90 bXAxNl8sIF90bXAxNl9fbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsK LSsJCV90bXAxN18gPSBzZWxmLT5wcml2LT5tX2Fib3V0X2RpYWxvZzsKLSsJCV90bXAxOF8gPSBn X3N0cmR1cCAoIlBlbmcgSHVhbmcgPHNoYXduLnAuaHVhbmdAZ21haWwuY29tPiIpOwotKwkJX3Rt cDE5XyA9IGdfbmV3MCAoZ2NoYXIqLCAxICsgMSk7Ci0rCQlfdG1wMTlfWzBdID0gX3RtcDE4XzsK LSsJCV90bXAyMF8gPSBfdG1wMTlfOwotKwkJX3RtcDIwX19sZW5ndGgxID0gMTsKLSsJCWd0a19h Ym91dF9kaWFsb2dfc2V0X2RvY3VtZW50ZXJzIChfdG1wMTdfLCBfdG1wMjBfKTsKLSsJCV90bXAy MF8gPSAoX3ZhbGFfYXJyYXlfZnJlZSAoX3RtcDIwXywgX3RtcDIwX19sZW5ndGgxLCAoR0Rlc3Ry b3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOwotKwkJX3RtcDIxXyA9IHNlbGYtPnByaXYtPm1fYWJv dXRfZGlhbG9nOwotKwkJX3RtcDIyXyA9IF8gKCJ0cmFuc2xhdG9yLWNyZWRpdHMiKTsKLSsJCWd0 a19hYm91dF9kaWFsb2dfc2V0X3RyYW5zbGF0b3JfY3JlZGl0cyAoX3RtcDIxXywgX3RtcDIyXyk7 Ci0rCQlfdG1wMjNfID0gc2VsZi0+cHJpdi0+bV9hYm91dF9kaWFsb2c7Ci0rCQlndGtfYWJvdXRf ZGlhbG9nX3NldF9sb2dvX2ljb25fbmFtZSAoX3RtcDIzXywgImlidXMiKTsKLSsJCV90bXAyNF8g PSBzZWxmLT5wcml2LT5tX2Fib3V0X2RpYWxvZzsKLSsJCWd0a193aW5kb3dfc2V0X2ljb25fbmFt ZSAoKEd0a1dpbmRvdyopIF90bXAyNF8sICJpYnVzIik7Ci0rCQlfZ19mcmVlMCAoY29weXJpZ2h0 KTsKLSsJfQotKwlfdG1wMjVfID0gc2VsZi0+cHJpdi0+bV9hYm91dF9kaWFsb2c7Ci0rCV90bXAy Nl8gPSBndGtfd2lkZ2V0X2dldF92aXNpYmxlICgoR3RrV2lkZ2V0KikgX3RtcDI1Xyk7Ci0rCWlm ICghX3RtcDI2XykgewotKwkJR3RrQWJvdXREaWFsb2cqIF90bXAyN187Ci0rCQlHdGtBYm91dERp YWxvZyogX3RtcDI4XzsKLSsJCV90bXAyN18gPSBzZWxmLT5wcml2LT5tX2Fib3V0X2RpYWxvZzsK LSsJCWd0a19kaWFsb2dfcnVuICgoR3RrRGlhbG9nKikgX3RtcDI3Xyk7Ci0rCQlfdG1wMjhfID0g c2VsZi0+cHJpdi0+bV9hYm91dF9kaWFsb2c7Ci0rCQlndGtfd2lkZ2V0X2hpZGUgKChHdGtXaWRn ZXQqKSBfdG1wMjhfKTsKLSsJfSBlbHNlIHsKLSsJCUd0a0Fib3V0RGlhbG9nKiBfdG1wMjlfOwot KwkJX3RtcDI5XyA9IHNlbGYtPnByaXYtPm1fYWJvdXRfZGlhbG9nOwotKwkJZ3RrX3dpbmRvd19w cmVzZW50ICgoR3RrV2luZG93KikgX3RtcDI5Xyk7Ci0rCX0KLSt9Ci0rCi0rCi0rc3RhdGljIHZv aWQgX19fbGFtYmRhMTdfIChQYW5lbCogc2VsZiwgR3RrTWVudUl0ZW0qIGkpIHsKLSsJZ19yZXR1 cm5faWZfZmFpbCAoaSAhPSBOVUxMKTsKLSsJcGFuZWxfc2hvd19zZXR1cF9kaWFsb2cgKHNlbGYp OwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfX19fbGFtYmRhMTdfX2d0a19tZW51X2l0ZW1fYWN0 aXZhdGUgKEd0a01lbnVJdGVtKiBfc2VuZGVyLCBncG9pbnRlciBzZWxmKSB7Ci0rCV9fX2xhbWJk YTE3XyAoc2VsZiwgX3NlbmRlcik7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF9fX2xhbWJkYTE5 XyAoUGFuZWwqIHNlbGYsIEd0a01lbnVJdGVtKiBpKSB7Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKGkg IT0gTlVMTCk7Ci0rCXBhbmVsX3Nob3dfYWJvdXRfZGlhbG9nIChzZWxmKTsKLSt9Ci0rCi0rCi0r c3RhdGljIHZvaWQgX19fX2xhbWJkYTE5X19ndGtfbWVudV9pdGVtX2FjdGl2YXRlIChHdGtNZW51 SXRlbSogX3NlbmRlciwgZ3BvaW50ZXIgc2VsZikgewotKwlfX19sYW1iZGExOV8gKHNlbGYsIF9z ZW5kZXIpOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfX19sYW1iZGEyMF8gKFBhbmVsKiBzZWxm LCBHdGtNZW51SXRlbSogaSkgewotKwlJQnVzQnVzKiBfdG1wMF87Ci0rCWdfcmV0dXJuX2lmX2Zh aWwgKGkgIT0gTlVMTCk7Ci0rCV90bXAwXyA9IHNlbGYtPnByaXYtPm1fYnVzOwotKwlpYnVzX2J1 c19leGl0IChfdG1wMF8sIFRSVUUpOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfX19fbGFtYmRh MjBfX2d0a19tZW51X2l0ZW1fYWN0aXZhdGUgKEd0a01lbnVJdGVtKiBfc2VuZGVyLCBncG9pbnRl ciBzZWxmKSB7Ci0rCV9fX2xhbWJkYTIwXyAoc2VsZiwgX3NlbmRlcik7Ci0rfQotKwotKwotK3N0 YXRpYyB2b2lkIF9fX2xhbWJkYTIxXyAoUGFuZWwqIHNlbGYsIEd0a01lbnVJdGVtKiBpKSB7Ci0r CUlCdXNCdXMqIF90bXAwXzsKLSsJZ19yZXR1cm5faWZfZmFpbCAoaSAhPSBOVUxMKTsKLSsJX3Rt cDBfID0gc2VsZi0+cHJpdi0+bV9idXM7Ci0rCWlidXNfYnVzX2V4aXQgKF90bXAwXywgRkFMU0Up OwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfX19fbGFtYmRhMjFfX2d0a19tZW51X2l0ZW1fYWN0 aXZhdGUgKEd0a01lbnVJdGVtKiBfc2VuZGVyLCBncG9pbnRlciBzZWxmKSB7Ci0rCV9fX2xhbWJk YTIxXyAoc2VsZiwgX3NlbmRlcik7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF9ndGtfc3RhdHVz X2ljb25fcG9zaXRpb25fbWVudV9ndGtfbWVudV9wb3NpdGlvbl9mdW5jIChHdGtNZW51KiBtZW51 LCBnaW50KiB4LCBnaW50KiB5LCBnYm9vbGVhbiogcHVzaF9pbiwgZ3BvaW50ZXIgc2VsZikgewot KwlndGtfc3RhdHVzX2ljb25fcG9zaXRpb25fbWVudSAobWVudSwgeCwgeSwgcHVzaF9pbiwgc2Vs Zik7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX3N0YXR1c19pY29uX3BvcHVwX21lbnVf Y2IgKFBhbmVsKiBzZWxmLCBHdGtTdGF0dXNJY29uKiBzdGF0dXNfaWNvbiwgZ3VpbnQgYnV0dG9u LCBndWludCBhY3RpdmF0ZV90aW1lKSB7Ci0rCUd0a01lbnUqIF90bXAwXzsKLSsJR3RrTWVudSog X3RtcDI5XzsKLSsJR3RrU3RhdHVzSWNvbiogX3RtcDMwXzsKLSsJZ3VpbnQzMiBfdG1wMzFfID0g MFU7Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7Ci0rCWdfcmV0dXJuX2lmX2Zh aWwgKHN0YXR1c19pY29uICE9IE5VTEwpOwotKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX3N5c19t ZW51OwotKwlpZiAoX3RtcDBfID09IE5VTEwpIHsKLSsJCUd0a0ltYWdlTWVudUl0ZW0qIGl0ZW0g PSBOVUxMOwotKwkJR3RrTWVudSogX3RtcDFfOwotKwkJR3RrTWVudSogX3RtcDJfOwotKwkJR3Rr SW1hZ2VNZW51SXRlbSogX3RtcDNfOwotKwkJR3RrSW1hZ2VNZW51SXRlbSogX3RtcDRfOwotKwkJ R3RrSW1hZ2VNZW51SXRlbSogX3RtcDVfOwotKwkJR3RrTWVudSogX3RtcDZfOwotKwkJR3RrSW1h Z2VNZW51SXRlbSogX3RtcDdfOwotKwkJR3RrSW1hZ2VNZW51SXRlbSogX3RtcDhfOwotKwkJR3Rr SW1hZ2VNZW51SXRlbSogX3RtcDlfOwotKwkJR3RrSW1hZ2VNZW51SXRlbSogX3RtcDEwXzsKLSsJ CUd0a01lbnUqIF90bXAxMV87Ci0rCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1wMTJfOwotKwkJR3Rr TWVudSogX3RtcDEzXzsKLSsJCUd0a1NlcGFyYXRvck1lbnVJdGVtKiBfdG1wMTRfOwotKwkJR3Rr U2VwYXJhdG9yTWVudUl0ZW0qIF90bXAxNV87Ci0rCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1wMTZf OwotKwkJR3RrSW1hZ2VNZW51SXRlbSogX3RtcDE3XzsKLSsJCUd0a0ltYWdlTWVudUl0ZW0qIF90 bXAxOF87Ci0rCQljb25zdCBnY2hhciogX3RtcDE5XyA9IE5VTEw7Ci0rCQlHdGtJbWFnZU1lbnVJ dGVtKiBfdG1wMjBfOwotKwkJR3RrTWVudSogX3RtcDIxXzsKLSsJCUd0a0ltYWdlTWVudUl0ZW0q IF90bXAyMl87Ci0rCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1wMjNfOwotKwkJR3RrSW1hZ2VNZW51 SXRlbSogX3RtcDI0XzsKLSsJCUd0a0ltYWdlTWVudUl0ZW0qIF90bXAyNV87Ci0rCQlHdGtNZW51 KiBfdG1wMjZfOwotKwkJR3RrSW1hZ2VNZW51SXRlbSogX3RtcDI3XzsKLSsJCUd0a01lbnUqIF90 bXAyOF87Ci0rCQlfdG1wMV8gPSAoR3RrTWVudSopIGd0a19tZW51X25ldyAoKTsKLSsJCV90bXAy XyA9IGdfb2JqZWN0X3JlZl9zaW5rIChfdG1wMV8pOwotKwkJX2dfb2JqZWN0X3VucmVmMCAoc2Vs Zi0+cHJpdi0+bV9zeXNfbWVudSk7Ci0rCQlzZWxmLT5wcml2LT5tX3N5c19tZW51ID0gX3RtcDJf OwotKwkJX3RtcDNfID0gKEd0a0ltYWdlTWVudUl0ZW0qKSBndGtfaW1hZ2VfbWVudV9pdGVtX25l d19mcm9tX3N0b2NrIChHVEtfU1RPQ0tfUFJFRkVSRU5DRVMsIE5VTEwpOwotKwkJX3RtcDRfID0g Z19vYmplY3RfcmVmX3NpbmsgKF90bXAzXyk7Ci0rCQlfZ19vYmplY3RfdW5yZWYwIChpdGVtKTsK LSsJCWl0ZW0gPSBfdG1wNF87Ci0rCQlfdG1wNV8gPSBpdGVtOwotKwkJZ19zaWduYWxfY29ubmVj dF9vYmplY3QgKChHdGtNZW51SXRlbSopIF90bXA1XywgImFjdGl2YXRlIiwgKEdDYWxsYmFjaykg X19fX2xhbWJkYTE3X19ndGtfbWVudV9pdGVtX2FjdGl2YXRlLCBzZWxmLCAwKTsKLSsJCV90bXA2 XyA9IHNlbGYtPnByaXYtPm1fc3lzX21lbnU7Ci0rCQlfdG1wN18gPSBpdGVtOwotKwkJZ3RrX21l bnVfc2hlbGxfYXBwZW5kICgoR3RrTWVudVNoZWxsKikgX3RtcDZfLCAoR3RrV2lkZ2V0KikgKChH dGtNZW51SXRlbSopIF90bXA3XykpOwotKwkJX3RtcDhfID0gKEd0a0ltYWdlTWVudUl0ZW0qKSBn dGtfaW1hZ2VfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrIChHVEtfU1RPQ0tfQUJPVVQsIE5VTEwp OwotKwkJX3RtcDlfID0gZ19vYmplY3RfcmVmX3NpbmsgKF90bXA4Xyk7Ci0rCQlfZ19vYmplY3Rf dW5yZWYwIChpdGVtKTsKLSsJCWl0ZW0gPSBfdG1wOV87Ci0rCQlfdG1wMTBfID0gaXRlbTsKLSsJ CWdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0ICgoR3RrTWVudUl0ZW0qKSBfdG1wMTBfLCAiYWN0aXZh dGUiLCAoR0NhbGxiYWNrKSBfX19fbGFtYmRhMTlfX2d0a19tZW51X2l0ZW1fYWN0aXZhdGUsIHNl bGYsIDApOwotKwkJX3RtcDExXyA9IHNlbGYtPnByaXYtPm1fc3lzX21lbnU7Ci0rCQlfdG1wMTJf ID0gaXRlbTsKLSsJCWd0a19tZW51X3NoZWxsX2FwcGVuZCAoKEd0a01lbnVTaGVsbCopIF90bXAx MV8sIChHdGtXaWRnZXQqKSAoKEd0a01lbnVJdGVtKikgX3RtcDEyXykpOwotKwkJX3RtcDEzXyA9 IHNlbGYtPnByaXYtPm1fc3lzX21lbnU7Ci0rCQlfdG1wMTRfID0gKEd0a1NlcGFyYXRvck1lbnVJ dGVtKikgZ3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3ICgpOwotKwkJX3RtcDE1XyA9IGdfb2Jq ZWN0X3JlZl9zaW5rIChfdG1wMTRfKTsKLSsJCWd0a19tZW51X3NoZWxsX2FwcGVuZCAoKEd0a01l bnVTaGVsbCopIF90bXAxM18sIChHdGtXaWRnZXQqKSAoKEd0a01lbnVJdGVtKikgX3RtcDE1Xykp OwotKwkJX2dfb2JqZWN0X3VucmVmMCAoX3RtcDE1Xyk7Ci0rCQlfdG1wMTZfID0gKEd0a0ltYWdl TWVudUl0ZW0qKSBndGtfaW1hZ2VfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrIChHVEtfU1RPQ0tf UkVGUkVTSCwgTlVMTCk7Ci0rCQlfdG1wMTdfID0gZ19vYmplY3RfcmVmX3NpbmsgKF90bXAxNl8p OwotKwkJX2dfb2JqZWN0X3VucmVmMCAoaXRlbSk7Ci0rCQlpdGVtID0gX3RtcDE3XzsKLSsJCV90 bXAxOF8gPSBpdGVtOwotKwkJX3RtcDE5XyA9IF8gKCJSZXN0YXJ0Iik7Ci0rCQlndGtfbWVudV9p dGVtX3NldF9sYWJlbCAoKEd0a01lbnVJdGVtKikgX3RtcDE4XywgX3RtcDE5Xyk7Ci0rCQlfdG1w MjBfID0gaXRlbTsKLSsJCWdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0ICgoR3RrTWVudUl0ZW0qKSBf dG1wMjBfLCAiYWN0aXZhdGUiLCAoR0NhbGxiYWNrKSBfX19fbGFtYmRhMjBfX2d0a19tZW51X2l0 ZW1fYWN0aXZhdGUsIHNlbGYsIDApOwotKwkJX3RtcDIxXyA9IHNlbGYtPnByaXYtPm1fc3lzX21l bnU7Ci0rCQlfdG1wMjJfID0gaXRlbTsKLSsJCWd0a19tZW51X3NoZWxsX2FwcGVuZCAoKEd0a01l bnVTaGVsbCopIF90bXAyMV8sIChHdGtXaWRnZXQqKSAoKEd0a01lbnVJdGVtKikgX3RtcDIyXykp OwotKwkJX3RtcDIzXyA9IChHdGtJbWFnZU1lbnVJdGVtKikgZ3RrX2ltYWdlX21lbnVfaXRlbV9u ZXdfZnJvbV9zdG9jayAoR1RLX1NUT0NLX1FVSVQsIE5VTEwpOwotKwkJX3RtcDI0XyA9IGdfb2Jq ZWN0X3JlZl9zaW5rIChfdG1wMjNfKTsKLSsJCV9nX29iamVjdF91bnJlZjAgKGl0ZW0pOwotKwkJ aXRlbSA9IF90bXAyNF87Ci0rCQlfdG1wMjVfID0gaXRlbTsKLSsJCWdfc2lnbmFsX2Nvbm5lY3Rf b2JqZWN0ICgoR3RrTWVudUl0ZW0qKSBfdG1wMjVfLCAiYWN0aXZhdGUiLCAoR0NhbGxiYWNrKSBf X19fbGFtYmRhMjFfX2d0a19tZW51X2l0ZW1fYWN0aXZhdGUsIHNlbGYsIDApOwotKwkJX3RtcDI2 XyA9IHNlbGYtPnByaXYtPm1fc3lzX21lbnU7Ci0rCQlfdG1wMjdfID0gaXRlbTsKLSsJCWd0a19t ZW51X3NoZWxsX2FwcGVuZCAoKEd0a01lbnVTaGVsbCopIF90bXAyNl8sIChHdGtXaWRnZXQqKSAo KEd0a01lbnVJdGVtKikgX3RtcDI3XykpOwotKwkJX3RtcDI4XyA9IHNlbGYtPnByaXYtPm1fc3lz X21lbnU7Ci0rCQlndGtfd2lkZ2V0X3Nob3dfYWxsICgoR3RrV2lkZ2V0KikgX3RtcDI4Xyk7Ci0r CQlfZ19vYmplY3RfdW5yZWYwIChpdGVtKTsKLSsJfQotKwlfdG1wMjlfID0gc2VsZi0+cHJpdi0+ bV9zeXNfbWVudTsKLSsJX3RtcDMwXyA9IHNlbGYtPnByaXYtPm1fc3RhdHVzX2ljb247Ci0rCV90 bXAzMV8gPSBndGtfZ2V0X2N1cnJlbnRfZXZlbnRfdGltZSAoKTsKLSsJZ3RrX21lbnVfcG9wdXAg KF90bXAyOV8sIE5VTEwsIE5VTEwsIF9ndGtfc3RhdHVzX2ljb25fcG9zaXRpb25fbWVudV9ndGtf bWVudV9wb3NpdGlvbl9mdW5jLCBfdG1wMzBfLCAoZ3VpbnQpIDAsIF90bXAzMV8pOwotK30KLSsK LSsKLStzdGF0aWMgQmxvY2s0RGF0YSogYmxvY2s0X2RhdGFfcmVmIChCbG9jazREYXRhKiBfZGF0 YTRfKSB7Ci0rCWdfYXRvbWljX2ludF9pbmMgKCZfZGF0YTRfLT5fcmVmX2NvdW50Xyk7Ci0rCXJl dHVybiBfZGF0YTRfOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBibG9jazRfZGF0YV91bnJlZiAo QmxvY2s0RGF0YSogX2RhdGE0XykgewotKwlpZiAoZ19hdG9taWNfaW50X2RlY19hbmRfdGVzdCAo Jl9kYXRhNF8tPl9yZWZfY291bnRfKSkgewotKwkJUGFuZWwgKiBzZWxmOwotKwkJc2VsZiA9IF9k YXRhNF8tPnNlbGY7Ci0rCQlfZ19vYmplY3RfdW5yZWYwIChfZGF0YTRfLT5lKTsKLSsJCV9nX29i amVjdF91bnJlZjAgKHNlbGYpOwotKwkJZ19zbGljZV9mcmVlIChCbG9jazREYXRhLCBfZGF0YTRf KTsKLSsJfQotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfX19fbGFtYmRhMjJfIChCbG9jazREYXRh KiBfZGF0YTRfLCBHdGtNZW51SXRlbSogaXRlbSkgewotKwlQYW5lbCAqIHNlbGY7Ci0rCXNlbGYg PSBfZGF0YTRfLT5zZWxmOwotKwlnX3JldHVybl9pZl9mYWlsIChpdGVtICE9IE5VTEwpOwotKwl7 Ci0rCQlnaW50IGk7Ci0rCQlpID0gMDsKLSsJCXsKLSsJCQlnYm9vbGVhbiBfdG1wMF87Ci0rCQkJ X3RtcDBfID0gVFJVRTsKLSsJCQl3aGlsZSAoVFJVRSkgewotKwkJCQlnYm9vbGVhbiBfdG1wMV87 Ci0rCQkJCWdpbnQgX3RtcDNfOwotKwkJCQlJQnVzRW5naW5lRGVzYyoqIF90bXA0XzsKLSsJCQkJ Z2ludCBfdG1wNF9fbGVuZ3RoMTsKLSsJCQkJSUJ1c0VuZ2luZURlc2MqIF90bXA1XzsKLSsJCQkJ SUJ1c0VuZ2luZURlc2MqKiBfdG1wNl87Ci0rCQkJCWdpbnQgX3RtcDZfX2xlbmd0aDE7Ci0rCQkJ CWdpbnQgX3RtcDdfOwotKwkJCQlJQnVzRW5naW5lRGVzYyogX3RtcDhfOwotKwkJCQlfdG1wMV8g PSBfdG1wMF87Ci0rCQkJCWlmICghX3RtcDFfKSB7Ci0rCQkJCQlnaW50IF90bXAyXzsKLSsJCQkJ CV90bXAyXyA9IGk7Ci0rCQkJCQlpID0gX3RtcDJfICsgMTsKLSsJCQkJfQotKwkJCQlfdG1wMF8g PSBGQUxTRTsKLSsJCQkJX3RtcDNfID0gaTsKLSsJCQkJX3RtcDRfID0gc2VsZi0+cHJpdi0+bV9l bmdpbmVzOwotKwkJCQlfdG1wNF9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fZW5naW5lc19sZW5n dGgxOwotKwkJCQlpZiAoIShfdG1wM18gPCBfdG1wNF9fbGVuZ3RoMSkpIHsKLSsJCQkJCWJyZWFr OwotKwkJCQl9Ci0rCQkJCV90bXA1XyA9IF9kYXRhNF8tPmU7Ci0rCQkJCV90bXA2XyA9IHNlbGYt PnByaXYtPm1fZW5naW5lczsKLSsJCQkJX3RtcDZfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX2Vu Z2luZXNfbGVuZ3RoMTsKLSsJCQkJX3RtcDdfID0gaTsKLSsJCQkJX3RtcDhfID0gX3RtcDZfW190 bXA3X107Ci0rCQkJCWlmIChfdG1wNV8gPT0gX3RtcDhfKSB7Ci0rCQkJCQlnaW50IF90bXA5XzsK LSsJCQkJCV90bXA5XyA9IGk7Ci0rCQkJCQlwYW5lbF9zd2l0Y2hfZW5naW5lIChzZWxmLCBfdG1w OV8sIEZBTFNFKTsKLSsJCQkJCWJyZWFrOwotKwkJCQl9Ci0rCQkJfQotKwkJfQotKwl9Ci0rfQot KwotKwotK3N0YXRpYyB2b2lkIF9fX19fbGFtYmRhMjJfX2d0a19tZW51X2l0ZW1fYWN0aXZhdGUg KEd0a01lbnVJdGVtKiBfc2VuZGVyLCBncG9pbnRlciBzZWxmKSB7Ci0rCV9fX19sYW1iZGEyMl8g KHNlbGYsIF9zZW5kZXIpOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBwYW5lbF9zdGF0dXNfaWNv bl9hY3RpdmF0ZV9jYiAoUGFuZWwqIHNlbGYsIEd0a1N0YXR1c0ljb24qIHN0YXR1c19pY29uKSB7 Ci0rCUd0a01lbnUqIF90bXAwXzsKLSsJR3RrTWVudSogX3RtcDFfOwotKwlQcm9wZXJ0eU1hbmFn ZXIqIF90bXAyXzsKLSsJR3RrTWVudSogX3RtcDNfOwotKwlHdGtNZW51KiBfdG1wNF87Ci0rCUd0 a1NlcGFyYXRvck1lbnVJdGVtKiBfdG1wNV87Ci0rCUd0a1NlcGFyYXRvck1lbnVJdGVtKiBfdG1w Nl87Ci0rCWdpbnQgd2lkdGggPSAwOwotKwlnaW50IGhlaWdodCA9IDA7Ci0rCWdpbnQgX3RtcDdf ID0gMDsKLSsJZ2ludCBfdG1wOF8gPSAwOwotKwlJQnVzRW5naW5lRGVzYyoqIF90bXA5XzsKLSsJ Z2ludCBfdG1wOV9fbGVuZ3RoMTsKLSsJR3RrTWVudSogX3RtcDMxXzsKLSsJR3RrTWVudSogX3Rt cDMyXzsKLSsJR3RrTWVudSogX3RtcDMzXzsKLSsJR3RrU3RhdHVzSWNvbiogX3RtcDM0XzsKLSsJ Z3VpbnQzMiBfdG1wMzVfID0gMFU7Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7 Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHN0YXR1c19pY29uICE9IE5VTEwpOwotKwlfdG1wMF8gPSAo R3RrTWVudSopIGd0a19tZW51X25ldyAoKTsKLSsJX3RtcDFfID0gZ19vYmplY3RfcmVmX3Npbmsg KF90bXAwXyk7Ci0rCV9nX29iamVjdF91bnJlZjAgKHNlbGYtPnByaXYtPm1faW1lX21lbnUpOwot KwlzZWxmLT5wcml2LT5tX2ltZV9tZW51ID0gX3RtcDFfOwotKwlfdG1wMl8gPSBzZWxmLT5wcml2 LT5tX3Byb3BlcnR5X21hbmFnZXI7Ci0rCV90bXAzXyA9IHNlbGYtPnByaXYtPm1faW1lX21lbnU7 Ci0rCXByb3BlcnR5X21hbmFnZXJfY3JlYXRlX21lbnVfaXRlbXMgKF90bXAyXywgX3RtcDNfKTsK LSsJX3RtcDRfID0gc2VsZi0+cHJpdi0+bV9pbWVfbWVudTsKLSsJX3RtcDVfID0gKEd0a1NlcGFy YXRvck1lbnVJdGVtKikgZ3RrX3NlcGFyYXRvcl9tZW51X2l0ZW1fbmV3ICgpOwotKwlfdG1wNl8g PSBnX29iamVjdF9yZWZfc2luayAoX3RtcDVfKTsKLSsJZ3RrX21lbnVfc2hlbGxfYXBwZW5kICgo R3RrTWVudVNoZWxsKikgX3RtcDRfLCAoR3RrV2lkZ2V0KikgKChHdGtNZW51SXRlbSopIF90bXA2 XykpOwotKwlfZ19vYmplY3RfdW5yZWYwIChfdG1wNl8pOwotKwlndGtfaWNvbl9zaXplX2xvb2t1 cCAoR1RLX0lDT05fU0laRV9NRU5VLCAmX3RtcDdfLCAmX3RtcDhfKTsKLSsJd2lkdGggPSBfdG1w N187Ci0rCWhlaWdodCA9IF90bXA4XzsKLSsJX3RtcDlfID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVz OwotKwlfdG1wOV9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fZW5naW5lc19sZW5ndGgxOwotKwl7 Ci0rCQlJQnVzRW5naW5lRGVzYyoqIGVuZ2luZV9jb2xsZWN0aW9uID0gTlVMTDsKLSsJCWdpbnQg ZW5naW5lX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IDA7Ci0rCQlnaW50IF9lbmdpbmVfY29sbGVjdGlv bl9zaXplXyA9IDA7Ci0rCQlnaW50IGVuZ2luZV9pdCA9IDA7Ci0rCQllbmdpbmVfY29sbGVjdGlv biA9IF90bXA5XzsKLSsJCWVuZ2luZV9jb2xsZWN0aW9uX2xlbmd0aDEgPSBfdG1wOV9fbGVuZ3Ro MTsKLSsJCWZvciAoZW5naW5lX2l0ID0gMDsgZW5naW5lX2l0IDwgX3RtcDlfX2xlbmd0aDE7IGVu Z2luZV9pdCA9IGVuZ2luZV9pdCArIDEpIHsKLSsJCQlJQnVzRW5naW5lRGVzYyogX3RtcDEwXzsK LSsJCQlJQnVzRW5naW5lRGVzYyogZW5naW5lID0gTlVMTDsKLSsJCQlfdG1wMTBfID0gX2dfb2Jq ZWN0X3JlZjAgKGVuZ2luZV9jb2xsZWN0aW9uW2VuZ2luZV9pdF0pOwotKwkJCWVuZ2luZSA9IF90 bXAxMF87Ci0rCQkJewotKwkJCQlCbG9jazREYXRhKiBfZGF0YTRfOwotKwkJCQlJQnVzRW5naW5l RGVzYyogX3RtcDExXzsKLSsJCQkJY29uc3QgZ2NoYXIqIF90bXAxMl8gPSBOVUxMOwotKwkJCQln Y2hhciogX3RtcDEzXzsKLSsJCQkJZ2NoYXIqIGxvbmduYW1lOwotKwkJCQljb25zdCBnY2hhciog X3RtcDE0XzsKLSsJCQkJR3RrSW1hZ2VNZW51SXRlbSogX3RtcDE1XzsKLSsJCQkJR3RrSW1hZ2VN ZW51SXRlbSogX3RtcDE2XzsKLSsJCQkJR3RrSW1hZ2VNZW51SXRlbSogaXRlbTsKLSsJCQkJSUJ1 c0VuZ2luZURlc2MqIF90bXAxN187Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wMThfID0gTlVMTDsK LSsJCQkJSUJ1c0VuZ2luZURlc2MqIF90bXAyNl87Ci0rCQkJCUlCdXNFbmdpbmVEZXNjKiBfdG1w MjdfOwotKwkJCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1wMjhfOwotKwkJCQlHdGtNZW51KiBfdG1w MjlfOwotKwkJCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1wMzBfOwotKwkJCQlfZGF0YTRfID0gZ19z bGljZV9uZXcwIChCbG9jazREYXRhKTsKLSsJCQkJX2RhdGE0Xy0+X3JlZl9jb3VudF8gPSAxOwot KwkJCQlfZGF0YTRfLT5zZWxmID0gZ19vYmplY3RfcmVmIChzZWxmKTsKLSsJCQkJX3RtcDExXyA9 IGVuZ2luZTsKLSsJCQkJX3RtcDEyXyA9IGlidXNfZW5naW5lX2Rlc2NfZ2V0X2xvbmduYW1lIChf dG1wMTFfKTsKLSsJCQkJX3RtcDEzXyA9IGdfc3RyZHVwIChfdG1wMTJfKTsKLSsJCQkJbG9uZ25h bWUgPSBfdG1wMTNfOwotKwkJCQlfdG1wMTRfID0gbG9uZ25hbWU7Ci0rCQkJCV90bXAxNV8gPSAo R3RrSW1hZ2VNZW51SXRlbSopIGd0a19pbWFnZV9tZW51X2l0ZW1fbmV3X3dpdGhfbGFiZWwgKF90 bXAxNF8pOwotKwkJCQlfdG1wMTZfID0gZ19vYmplY3RfcmVmX3NpbmsgKF90bXAxNV8pOwotKwkJ CQlpdGVtID0gX3RtcDE2XzsKLSsJCQkJX3RtcDE3XyA9IGVuZ2luZTsKLSsJCQkJX3RtcDE4XyA9 IGlidXNfZW5naW5lX2Rlc2NfZ2V0X2ljb24gKF90bXAxN18pOwotKwkJCQlpZiAoZ19zdHJjbXAw IChfdG1wMThfLCAiIikgIT0gMCkgewotKwkJCQkJSUJ1c0VuZ2luZURlc2MqIF90bXAxOV87Ci0r CQkJCQljb25zdCBnY2hhciogX3RtcDIwXyA9IE5VTEw7Ci0rCQkJCQlnaW50IF90bXAyMV87Ci0r CQkJCQlJY29uV2lkZ2V0KiBfdG1wMjJfOwotKwkJCQkJSWNvbldpZGdldCogX3RtcDIzXzsKLSsJ CQkJCUljb25XaWRnZXQqIGljb247Ci0rCQkJCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1wMjRfOwot KwkJCQkJSWNvbldpZGdldCogX3RtcDI1XzsKLSsJCQkJCV90bXAxOV8gPSBlbmdpbmU7Ci0rCQkJ CQlfdG1wMjBfID0gaWJ1c19lbmdpbmVfZGVzY19nZXRfaWNvbiAoX3RtcDE5Xyk7Ci0rCQkJCQlf dG1wMjFfID0gd2lkdGg7Ci0rCQkJCQlfdG1wMjJfID0gaWNvbl93aWRnZXRfbmV3IChfdG1wMjBf LCBfdG1wMjFfKTsKLSsJCQkJCV90bXAyM18gPSBnX29iamVjdF9yZWZfc2luayAoX3RtcDIyXyk7 Ci0rCQkJCQlpY29uID0gX3RtcDIzXzsKLSsJCQkJCV90bXAyNF8gPSBpdGVtOwotKwkJCQkJX3Rt cDI1XyA9IGljb247Ci0rCQkJCQlndGtfaW1hZ2VfbWVudV9pdGVtX3NldF9pbWFnZSAoX3RtcDI0 XywgKEd0a1dpZGdldCopIF90bXAyNV8pOwotKwkJCQkJX2dfb2JqZWN0X3VucmVmMCAoaWNvbik7 Ci0rCQkJCX0KLSsJCQkJX3RtcDI2XyA9IGVuZ2luZTsKLSsJCQkJX3RtcDI3XyA9IF9nX29iamVj dF9yZWYwIChfdG1wMjZfKTsKLSsJCQkJX2RhdGE0Xy0+ZSA9IF90bXAyN187Ci0rCQkJCV90bXAy OF8gPSBpdGVtOwotKwkJCQlnX3NpZ25hbF9jb25uZWN0X2RhdGEgKChHdGtNZW51SXRlbSopIF90 bXAyOF8sICJhY3RpdmF0ZSIsIChHQ2FsbGJhY2spIF9fX19fbGFtYmRhMjJfX2d0a19tZW51X2l0 ZW1fYWN0aXZhdGUsIGJsb2NrNF9kYXRhX3JlZiAoX2RhdGE0XyksIChHQ2xvc3VyZU5vdGlmeSkg YmxvY2s0X2RhdGFfdW5yZWYsIDApOwotKwkJCQlfdG1wMjlfID0gc2VsZi0+cHJpdi0+bV9pbWVf bWVudTsKLSsJCQkJX3RtcDMwXyA9IGl0ZW07Ci0rCQkJCWd0a19jb250YWluZXJfYWRkICgoR3Rr Q29udGFpbmVyKikgX3RtcDI5XywgKEd0a1dpZGdldCopIF90bXAzMF8pOwotKwkJCQlfZ19vYmpl Y3RfdW5yZWYwIChpdGVtKTsKLSsJCQkJX2dfZnJlZTAgKGxvbmduYW1lKTsKLSsJCQkJX2dfb2Jq ZWN0X3VucmVmMCAoZW5naW5lKTsKLSsJCQkJYmxvY2s0X2RhdGFfdW5yZWYgKF9kYXRhNF8pOwot KwkJCQlfZGF0YTRfID0gTlVMTDsKLSsJCQl9Ci0rCQl9Ci0rCX0KLSsJX3RtcDMxXyA9IHNlbGYt PnByaXYtPm1faW1lX21lbnU7Ci0rCWd0a193aWRnZXRfc2hvd19hbGwgKChHdGtXaWRnZXQqKSBf dG1wMzFfKTsKLSsJX3RtcDMyXyA9IHNlbGYtPnByaXYtPm1faW1lX21lbnU7Ci0rCWd0a19tZW51 X3NoZWxsX3NldF90YWtlX2ZvY3VzICgoR3RrTWVudVNoZWxsKikgX3RtcDMyXywgRkFMU0UpOwot KwlfdG1wMzNfID0gc2VsZi0+cHJpdi0+bV9pbWVfbWVudTsKLSsJX3RtcDM0XyA9IHNlbGYtPnBy aXYtPm1fc3RhdHVzX2ljb247Ci0rCV90bXAzNV8gPSBndGtfZ2V0X2N1cnJlbnRfZXZlbnRfdGlt ZSAoKTsKLSsJZ3RrX21lbnVfcG9wdXAgKF90bXAzM18sIE5VTEwsIE5VTEwsIF9ndGtfc3RhdHVz X2ljb25fcG9zaXRpb25fbWVudV9ndGtfbWVudV9wb3NpdGlvbl9mdW5jLCBfdG1wMzRfLCAoZ3Vp bnQpIDAsIF90bXAzNV8pOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBwYW5lbF9yZWFsX3NldF9j dXJzb3JfbG9jYXRpb24gKElCdXNQYW5lbFNlcnZpY2UqIGJhc2UsIGdpbnQgeCwgZ2ludCB5LCBn aW50IHdpZHRoLCBnaW50IGhlaWdodCkgewotKwlQYW5lbCAqIHNlbGY7Ci0rCUNhbmRpZGF0ZVBh bmVsKiBfdG1wMF87Ci0rCWdpbnQgX3RtcDFfOwotKwlnaW50IF90bXAyXzsKLSsJZ2ludCBfdG1w M187Ci0rCWdpbnQgX3RtcDRfOwotKwlzZWxmID0gKFBhbmVsKikgYmFzZTsKLSsJX3RtcDBfID0g c2VsZi0+cHJpdi0+bV9jYW5kaWRhdGVfcGFuZWw7Ci0rCV90bXAxXyA9IHg7Ci0rCV90bXAyXyA9 IHk7Ci0rCV90bXAzXyA9IHdpZHRoOwotKwlfdG1wNF8gPSBoZWlnaHQ7Ci0rCWNhbmRpZGF0ZV9w YW5lbF9zZXRfY3Vyc29yX2xvY2F0aW9uIChfdG1wMF8sIF90bXAxXywgX3RtcDJfLCBfdG1wM18s IF90bXA0Xyk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxfZm9jdXNfaW4gKElC dXNQYW5lbFNlcnZpY2UqIGJhc2UsIGNvbnN0IGdjaGFyKiBpbnB1dF9jb250ZXh0X3BhdGgpIHsK LSsJUGFuZWwgKiBzZWxmOwotKwlzZWxmID0gKFBhbmVsKikgYmFzZTsKLSsJZ19yZXR1cm5faWZf ZmFpbCAoaW5wdXRfY29udGV4dF9wYXRoICE9IE5VTEwpOwotK30KLSsKLSsKLStzdGF0aWMgdm9p ZCBwYW5lbF9yZWFsX2ZvY3VzX291dCAoSUJ1c1BhbmVsU2VydmljZSogYmFzZSwgY29uc3QgZ2No YXIqIGlucHV0X2NvbnRleHRfcGF0aCkgewotKwlQYW5lbCAqIHNlbGY7Ci0rCXNlbGYgPSAoUGFu ZWwqKSBiYXNlOwotKwlnX3JldHVybl9pZl9mYWlsIChpbnB1dF9jb250ZXh0X3BhdGggIT0gTlVM TCk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxfcmVnaXN0ZXJfcHJvcGVydGll cyAoSUJ1c1BhbmVsU2VydmljZSogYmFzZSwgSUJ1c1Byb3BMaXN0KiBwcm9wcykgewotKwlQYW5l bCAqIHNlbGY7Ci0rCVByb3BlcnR5TWFuYWdlciogX3RtcDBfOwotKwlJQnVzUHJvcExpc3QqIF90 bXAxXzsKLSsJc2VsZiA9IChQYW5lbCopIGJhc2U7Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHByb3Bz ICE9IE5VTEwpOwotKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX3Byb3BlcnR5X21hbmFnZXI7Ci0r CV90bXAxXyA9IHByb3BzOwotKwlwcm9wZXJ0eV9tYW5hZ2VyX3NldF9wcm9wZXJ0aWVzIChfdG1w MF8sIF90bXAxXyk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxfdXBkYXRlX3By b3BlcnR5IChJQnVzUGFuZWxTZXJ2aWNlKiBiYXNlLCBJQnVzUHJvcGVydHkqIHByb3ApIHsKLSsJ UGFuZWwgKiBzZWxmOwotKwlQcm9wZXJ0eU1hbmFnZXIqIF90bXAwXzsKLSsJSUJ1c1Byb3BlcnR5 KiBfdG1wMV87Ci0rCXNlbGYgPSAoUGFuZWwqKSBiYXNlOwotKwlnX3JldHVybl9pZl9mYWlsIChw cm9wICE9IE5VTEwpOwotKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX3Byb3BlcnR5X21hbmFnZXI7 Ci0rCV90bXAxXyA9IHByb3A7Ci0rCXByb3BlcnR5X21hbmFnZXJfdXBkYXRlX3Byb3BlcnR5IChf dG1wMF8sIF90bXAxXyk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxfdXBkYXRl X3ByZWVkaXRfdGV4dCAoSUJ1c1BhbmVsU2VydmljZSogYmFzZSwgSUJ1c1RleHQqIHRleHQsIGd1 aW50IGN1cnNvcl9wb3MsIGdib29sZWFuIHZpc2libGUpIHsKLSsJUGFuZWwgKiBzZWxmOwotKwln Ym9vbGVhbiBfdG1wMF87Ci0rCXNlbGYgPSAoUGFuZWwqKSBiYXNlOwotKwlnX3JldHVybl9pZl9m YWlsICh0ZXh0ICE9IE5VTEwpOwotKwlfdG1wMF8gPSB2aXNpYmxlOwotKwlpZiAoX3RtcDBfKSB7 Ci0rCQlDYW5kaWRhdGVQYW5lbCogX3RtcDFfOwotKwkJSUJ1c1RleHQqIF90bXAyXzsKLSsJCWd1 aW50IF90bXAzXzsKLSsJCV90bXAxXyA9IHNlbGYtPnByaXYtPm1fY2FuZGlkYXRlX3BhbmVsOwot KwkJX3RtcDJfID0gdGV4dDsKLSsJCV90bXAzXyA9IGN1cnNvcl9wb3M7Ci0rCQljYW5kaWRhdGVf cGFuZWxfc2V0X3ByZWVkaXRfdGV4dCAoX3RtcDFfLCBfdG1wMl8sIF90bXAzXyk7Ci0rCX0gZWxz ZSB7Ci0rCQlDYW5kaWRhdGVQYW5lbCogX3RtcDRfOwotKwkJX3RtcDRfID0gc2VsZi0+cHJpdi0+ bV9jYW5kaWRhdGVfcGFuZWw7Ci0rCQljYW5kaWRhdGVfcGFuZWxfc2V0X3ByZWVkaXRfdGV4dCAo X3RtcDRfLCBOVUxMLCAoZ3VpbnQpIDApOwotKwl9Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBh bmVsX3JlYWxfaGlkZV9wcmVlZGl0X3RleHQgKElCdXNQYW5lbFNlcnZpY2UqIGJhc2UpIHsKLSsJ UGFuZWwgKiBzZWxmOwotKwlDYW5kaWRhdGVQYW5lbCogX3RtcDBfOwotKwlzZWxmID0gKFBhbmVs KikgYmFzZTsKLSsJX3RtcDBfID0gc2VsZi0+cHJpdi0+bV9jYW5kaWRhdGVfcGFuZWw7Ci0rCWNh bmRpZGF0ZV9wYW5lbF9zZXRfcHJlZWRpdF90ZXh0IChfdG1wMF8sIE5VTEwsIChndWludCkgMCk7 Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxfdXBkYXRlX2F1eGlsaWFyeV90ZXh0 IChJQnVzUGFuZWxTZXJ2aWNlKiBiYXNlLCBJQnVzVGV4dCogdGV4dCwgZ2Jvb2xlYW4gdmlzaWJs ZSkgewotKwlQYW5lbCAqIHNlbGY7Ci0rCUlCdXNUZXh0KiBfdG1wMF8gPSBOVUxMOwotKwlnYm9v bGVhbiBfdG1wMV87Ci0rCUNhbmRpZGF0ZVBhbmVsKiBfdG1wM187Ci0rCUlCdXNUZXh0KiBfdG1w NF87Ci0rCXNlbGYgPSAoUGFuZWwqKSBiYXNlOwotKwlnX3JldHVybl9pZl9mYWlsICh0ZXh0ICE9 IE5VTEwpOwotKwlfdG1wMV8gPSB2aXNpYmxlOwotKwlpZiAoX3RtcDFfKSB7Ci0rCQlJQnVzVGV4 dCogX3RtcDJfOwotKwkJX3RtcDJfID0gdGV4dDsKLSsJCV90bXAwXyA9IF90bXAyXzsKLSsJfSBl bHNlIHsKLSsJCV90bXAwXyA9IE5VTEw7Ci0rCX0KLSsJX3RtcDNfID0gc2VsZi0+cHJpdi0+bV9j YW5kaWRhdGVfcGFuZWw7Ci0rCV90bXA0XyA9IF90bXAwXzsKLSsJY2FuZGlkYXRlX3BhbmVsX3Nl dF9hdXhpbGlhcnlfdGV4dCAoX3RtcDNfLCBfdG1wNF8pOwotK30KLSsKLSsKLStzdGF0aWMgdm9p ZCBwYW5lbF9yZWFsX2hpZGVfYXV4aWxpYXJ5X3RleHQgKElCdXNQYW5lbFNlcnZpY2UqIGJhc2Up IHsKLSsJUGFuZWwgKiBzZWxmOwotKwlDYW5kaWRhdGVQYW5lbCogX3RtcDBfOwotKwlzZWxmID0g KFBhbmVsKikgYmFzZTsKLSsJX3RtcDBfID0gc2VsZi0+cHJpdi0+bV9jYW5kaWRhdGVfcGFuZWw7 Ci0rCWNhbmRpZGF0ZV9wYW5lbF9zZXRfYXV4aWxpYXJ5X3RleHQgKF90bXAwXywgTlVMTCk7Ci0r fQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxfdXBkYXRlX2xvb2t1cF90YWJsZSAoSUJ1 c1BhbmVsU2VydmljZSogYmFzZSwgSUJ1c0xvb2t1cFRhYmxlKiB0YWJsZSwgZ2Jvb2xlYW4gdmlz aWJsZSkgewotKwlQYW5lbCAqIHNlbGY7Ci0rCUlCdXNMb29rdXBUYWJsZSogX3RtcDBfID0gTlVM TDsKLSsJZ2Jvb2xlYW4gX3RtcDFfOwotKwlDYW5kaWRhdGVQYW5lbCogX3RtcDNfOwotKwlJQnVz TG9va3VwVGFibGUqIF90bXA0XzsKLSsJc2VsZiA9IChQYW5lbCopIGJhc2U7Ci0rCWdfcmV0dXJu X2lmX2ZhaWwgKHRhYmxlICE9IE5VTEwpOwotKwlfdG1wMV8gPSB2aXNpYmxlOwotKwlpZiAoX3Rt cDFfKSB7Ci0rCQlJQnVzTG9va3VwVGFibGUqIF90bXAyXzsKLSsJCV90bXAyXyA9IHRhYmxlOwot KwkJX3RtcDBfID0gX3RtcDJfOwotKwl9IGVsc2UgewotKwkJX3RtcDBfID0gTlVMTDsKLSsJfQot KwlfdG1wM18gPSBzZWxmLT5wcml2LT5tX2NhbmRpZGF0ZV9wYW5lbDsKLSsJX3RtcDRfID0gX3Rt cDBfOwotKwljYW5kaWRhdGVfcGFuZWxfc2V0X2xvb2t1cF90YWJsZSAoX3RtcDNfLCBfdG1wNF8p OwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBwYW5lbF9yZWFsX2hpZGVfbG9va3VwX3RhYmxlIChJ QnVzUGFuZWxTZXJ2aWNlKiBiYXNlKSB7Ci0rCVBhbmVsICogc2VsZjsKLSsJQ2FuZGlkYXRlUGFu ZWwqIF90bXAwXzsKLSsJc2VsZiA9IChQYW5lbCopIGJhc2U7Ci0rCV90bXAwXyA9IHNlbGYtPnBy aXYtPm1fY2FuZGlkYXRlX3BhbmVsOwotKwljYW5kaWRhdGVfcGFuZWxfc2V0X2xvb2t1cF90YWJs ZSAoX3RtcDBfLCBOVUxMKTsKLSt9Ci0rCi0rCi0rc3RhdGljIGdjaGFyIHN0cmluZ19nZXQgKGNv bnN0IGdjaGFyKiBzZWxmLCBnbG9uZyBpbmRleCkgewotKwlnY2hhciByZXN1bHQgPSAnXDAnOwot KwlnbG9uZyBfdG1wMF87Ci0rCWdjaGFyIF90bXAxXzsKLSsJZ19yZXR1cm5fdmFsX2lmX2ZhaWwg KHNlbGYgIT0gTlVMTCwgJ1wwJyk7Ci0rCV90bXAwXyA9IGluZGV4OwotKwlfdG1wMV8gPSAoKGdj aGFyKikgc2VsZilbX3RtcDBfXTsKLSsJcmVzdWx0ID0gX3RtcDFfOwotKwlyZXR1cm4gcmVzdWx0 OwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBwYW5lbF9yZWFsX3N0YXRlX2NoYW5nZWQgKElCdXNQ YW5lbFNlcnZpY2UqIGJhc2UpIHsKLSsJUGFuZWwgKiBzZWxmOwotKwlnY2hhciogX3RtcDBfOwot KwlnY2hhciogaWNvbl9uYW1lOwotKwlJQnVzQnVzKiBfdG1wMV87Ci0rCUlCdXNFbmdpbmVEZXNj KiBfdG1wMl8gPSBOVUxMOwotKwlJQnVzRW5naW5lRGVzYyogX3RtcDNfOwotKwlJQnVzRW5naW5l RGVzYyogZW5naW5lOwotKwlJQnVzRW5naW5lRGVzYyogX3RtcDRfOwotKwljb25zdCBnY2hhciog X3RtcDhfOwotKwlnY2hhciBfdG1wOV8gPSAnXDAnOwotKwlzZWxmID0gKFBhbmVsKikgYmFzZTsK LSsJX3RtcDBfID0gZ19zdHJkdXAgKCJpYnVzLWtleWJvYXJkIik7Ci0rCWljb25fbmFtZSA9IF90 bXAwXzsKLSsJX3RtcDFfID0gc2VsZi0+cHJpdi0+bV9idXM7Ci0rCV90bXAyXyA9IGlidXNfYnVz X2dldF9nbG9iYWxfZW5naW5lIChfdG1wMV8pOwotKwlfdG1wM18gPSBfZ19vYmplY3RfcmVmMCAo X3RtcDJfKTsKLSsJZW5naW5lID0gX3RtcDNfOwotKwlfdG1wNF8gPSBlbmdpbmU7Ci0rCWlmIChf dG1wNF8gIT0gTlVMTCkgewotKwkJSUJ1c0VuZ2luZURlc2MqIF90bXA1XzsKLSsJCWNvbnN0IGdj aGFyKiBfdG1wNl8gPSBOVUxMOwotKwkJZ2NoYXIqIF90bXA3XzsKLSsJCV90bXA1XyA9IGVuZ2lu ZTsKLSsJCV90bXA2XyA9IGlidXNfZW5naW5lX2Rlc2NfZ2V0X2ljb24gKF90bXA1Xyk7Ci0rCQlf dG1wN18gPSBnX3N0cmR1cCAoX3RtcDZfKTsKLSsJCV9nX2ZyZWUwIChpY29uX25hbWUpOwotKwkJ aWNvbl9uYW1lID0gX3RtcDdfOwotKwl9Ci0rCV90bXA4XyA9IGljb25fbmFtZTsKLSsJX3RtcDlf ID0gc3RyaW5nX2dldCAoX3RtcDhfLCAoZ2xvbmcpIDApOwotKwlpZiAoX3RtcDlfID09ICcvJykg ewotKwkJR3RrU3RhdHVzSWNvbiogX3RtcDEwXzsKLSsJCWNvbnN0IGdjaGFyKiBfdG1wMTFfOwot KwkJX3RtcDEwXyA9IHNlbGYtPnByaXYtPm1fc3RhdHVzX2ljb247Ci0rCQlfdG1wMTFfID0gaWNv bl9uYW1lOwotKwkJZ3RrX3N0YXR1c19pY29uX3NldF9mcm9tX2ZpbGUgKF90bXAxMF8sIF90bXAx MV8pOwotKwl9IGVsc2UgewotKwkJR3RrU3RhdHVzSWNvbiogX3RtcDEyXzsKLSsJCWNvbnN0IGdj aGFyKiBfdG1wMTNfOwotKwkJX3RtcDEyXyA9IHNlbGYtPnByaXYtPm1fc3RhdHVzX2ljb247Ci0r CQlfdG1wMTNfID0gaWNvbl9uYW1lOwotKwkJZ3RrX3N0YXR1c19pY29uX3NldF9mcm9tX2ljb25f bmFtZSAoX3RtcDEyXywgX3RtcDEzXyk7Ci0rCX0KLSsJX2dfb2JqZWN0X3VucmVmMCAoZW5naW5l KTsKLSsJX2dfZnJlZTAgKGljb25fbmFtZSk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVs X2NsYXNzX2luaXQgKFBhbmVsQ2xhc3MgKiBrbGFzcykgewotKwlwYW5lbF9wYXJlbnRfY2xhc3Mg PSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKLSsJZ190eXBlX2NsYXNzX2FkZF9w cml2YXRlIChrbGFzcywgc2l6ZW9mIChQYW5lbFByaXZhdGUpKTsKLSsJSUJVU19QQU5FTF9TRVJW SUNFX0NMQVNTIChrbGFzcyktPnNldF9jdXJzb3JfbG9jYXRpb24gPSBwYW5lbF9yZWFsX3NldF9j dXJzb3JfbG9jYXRpb247Ci0rCUlCVVNfUEFORUxfU0VSVklDRV9DTEFTUyAoa2xhc3MpLT5mb2N1 c19pbiA9IHBhbmVsX3JlYWxfZm9jdXNfaW47Ci0rCUlCVVNfUEFORUxfU0VSVklDRV9DTEFTUyAo a2xhc3MpLT5mb2N1c19vdXQgPSBwYW5lbF9yZWFsX2ZvY3VzX291dDsKLSsJSUJVU19QQU5FTF9T RVJWSUNFX0NMQVNTIChrbGFzcyktPnJlZ2lzdGVyX3Byb3BlcnRpZXMgPSBwYW5lbF9yZWFsX3Jl Z2lzdGVyX3Byb3BlcnRpZXM7Ci0rCUlCVVNfUEFORUxfU0VSVklDRV9DTEFTUyAoa2xhc3MpLT51 cGRhdGVfcHJvcGVydHkgPSBwYW5lbF9yZWFsX3VwZGF0ZV9wcm9wZXJ0eTsKLSsJSUJVU19QQU5F TF9TRVJWSUNFX0NMQVNTIChrbGFzcyktPnVwZGF0ZV9wcmVlZGl0X3RleHQgPSBwYW5lbF9yZWFs X3VwZGF0ZV9wcmVlZGl0X3RleHQ7Ci0rCUlCVVNfUEFORUxfU0VSVklDRV9DTEFTUyAoa2xhc3Mp LT5oaWRlX3ByZWVkaXRfdGV4dCA9IHBhbmVsX3JlYWxfaGlkZV9wcmVlZGl0X3RleHQ7Ci0rCUlC VVNfUEFORUxfU0VSVklDRV9DTEFTUyAoa2xhc3MpLT51cGRhdGVfYXV4aWxpYXJ5X3RleHQgPSBw YW5lbF9yZWFsX3VwZGF0ZV9hdXhpbGlhcnlfdGV4dDsKLSsJSUJVU19QQU5FTF9TRVJWSUNFX0NM QVNTIChrbGFzcyktPmhpZGVfYXV4aWxpYXJ5X3RleHQgPSBwYW5lbF9yZWFsX2hpZGVfYXV4aWxp YXJ5X3RleHQ7Ci0rCUlCVVNfUEFORUxfU0VSVklDRV9DTEFTUyAoa2xhc3MpLT51cGRhdGVfbG9v a3VwX3RhYmxlID0gcGFuZWxfcmVhbF91cGRhdGVfbG9va3VwX3RhYmxlOwotKwlJQlVTX1BBTkVM X1NFUlZJQ0VfQ0xBU1MgKGtsYXNzKS0+aGlkZV9sb29rdXBfdGFibGUgPSBwYW5lbF9yZWFsX2hp ZGVfbG9va3VwX3RhYmxlOwotKwlJQlVTX1BBTkVMX1NFUlZJQ0VfQ0xBU1MgKGtsYXNzKS0+c3Rh dGVfY2hhbmdlZCA9IHBhbmVsX3JlYWxfc3RhdGVfY2hhbmdlZDsKLSsJR19PQkpFQ1RfQ0xBU1Mg KGtsYXNzKS0+ZmluYWxpemUgPSBwYW5lbF9maW5hbGl6ZTsKLSt9Ci0rCi0rCi0rc3RhdGljIHZv aWQgcGFuZWxfaW5zdGFuY2VfaW5pdCAoUGFuZWwgKiBzZWxmKSB7Ci0rCUlCdXNFbmdpbmVEZXNj KiogX3RtcDBfID0gTlVMTDsKLSsJZ2NoYXIqKiBfdG1wMV8gPSBOVUxMOwotKwlnY2hhcioqIF90 bXAyXyA9IE5VTEw7Ci0rCWdjaGFyKiogX3RtcDNfID0gTlVMTDsKLSsJc2VsZi0+cHJpdiA9IFBB TkVMX0dFVF9QUklWQVRFIChzZWxmKTsKLSsJX3RtcDBfID0gZ19uZXcwIChJQnVzRW5naW5lRGVz YyosIDAgKyAxKTsKLSsJc2VsZi0+cHJpdi0+bV9lbmdpbmVzID0gX3RtcDBfOwotKwlzZWxmLT5w cml2LT5tX2VuZ2luZXNfbGVuZ3RoMSA9IDA7Ci0rCXNlbGYtPnByaXYtPl9tX2VuZ2luZXNfc2l6 ZV8gPSBzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3RoMTsKLSsJc2VsZi0+cHJpdi0+bV9zZXR1 cF9waWQgPSAoR1BpZCkgMDsKLSsJc2VsZi0+cHJpdi0+bV9na2JkbGF5b3V0ID0gTlVMTDsKLSsJ c2VsZi0+cHJpdi0+bV94a2JsYXlvdXQgPSBOVUxMOwotKwlfdG1wMV8gPSBnX25ldzAgKGdjaGFy KiwgMCArIDEpOwotKwlzZWxmLT5wcml2LT5tX2xheW91dHMgPSBfdG1wMV87Ci0rCXNlbGYtPnBy aXYtPm1fbGF5b3V0c19sZW5ndGgxID0gMDsKLSsJc2VsZi0+cHJpdi0+X21fbGF5b3V0c19zaXpl XyA9IHNlbGYtPnByaXYtPm1fbGF5b3V0c19sZW5ndGgxOwotKwlfdG1wMl8gPSBnX25ldzAgKGdj aGFyKiwgMCArIDEpOwotKwlzZWxmLT5wcml2LT5tX3ZhcmlhbnRzID0gX3RtcDJfOwotKwlzZWxm LT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDEgPSAwOwotKwlzZWxmLT5wcml2LT5fbV92YXJpYW50 c19zaXplXyA9IHNlbGYtPnByaXYtPm1fdmFyaWFudHNfbGVuZ3RoMTsKLSsJc2VsZi0+cHJpdi0+ bV9mYWxsYmFja19sb2NrX2lkID0gLTE7Ci0rCXNlbGYtPnByaXYtPm1fY2hhbmdlZF94a2Jfb3B0 aW9uID0gRkFMU0U7Ci0rCV90bXAzXyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7Ci0rCXNlbGYt PnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTID0gX3RtcDNfOwotKwlzZWxmLT5wcml2LT5B Q0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxID0gMDsKLSsJc2VsZi0+cHJpdi0+X0FDQ0VM RVJBVE9SX0lNRV9IT1RLRVlTX3NpemVfID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hP VEtFWVNfbGVuZ3RoMTsKLSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgcGFuZWxfZmluYWxpemUgKEdP YmplY3QqIG9iaikgewotKwlQYW5lbCAqIHNlbGY7Ci0rCUtleWJpbmRpbmdNYW5hZ2VyKiBfdG1w MF8gPSBOVUxMOwotKwlLZXliaW5kaW5nTWFuYWdlcioga2V5YmluZGluZ19tYW5hZ2VyOwotKwln Y2hhcioqIF90bXAxXzsKLSsJZ2ludCBfdG1wMV9fbGVuZ3RoMTsKLSsJZ2Jvb2xlYW4gX3RtcDdf ID0gRkFMU0U7Ci0rCWdib29sZWFuIF90bXA5XzsKLSsJc2VsZiA9IFBBTkVMIChvYmopOwotKwlf dG1wMF8gPSBrZXliaW5kaW5nX21hbmFnZXJfZ2V0X2luc3RhbmNlICgpOwotKwlrZXliaW5kaW5n X21hbmFnZXIgPSBfdG1wMF87Ci0rCV90bXAxXyA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lN RV9IT1RLRVlTOwotKwlfdG1wMV9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lN RV9IT1RLRVlTX2xlbmd0aDE7Ci0rCXsKLSsJCWdjaGFyKioga2V5YmluZGluZ19jb2xsZWN0aW9u ID0gTlVMTDsKLSsJCWdpbnQga2V5YmluZGluZ19jb2xsZWN0aW9uX2xlbmd0aDEgPSAwOwotKwkJ Z2ludCBfa2V5YmluZGluZ19jb2xsZWN0aW9uX3NpemVfID0gMDsKLSsJCWdpbnQga2V5YmluZGlu Z19pdCA9IDA7Ci0rCQlrZXliaW5kaW5nX2NvbGxlY3Rpb24gPSBfdG1wMV87Ci0rCQlrZXliaW5k aW5nX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IF90bXAxX19sZW5ndGgxOwotKwkJZm9yIChrZXliaW5k aW5nX2l0ID0gMDsga2V5YmluZGluZ19pdCA8IF90bXAxX19sZW5ndGgxOyBrZXliaW5kaW5nX2l0 ID0ga2V5YmluZGluZ19pdCArIDEpIHsKLSsJCQlnY2hhciogX3RtcDJfOwotKwkJCWdjaGFyKiBr ZXliaW5kaW5nID0gTlVMTDsKLSsJCQlfdG1wMl8gPSBnX3N0cmR1cCAoa2V5YmluZGluZ19jb2xs ZWN0aW9uW2tleWJpbmRpbmdfaXRdKTsKLSsJCQlrZXliaW5kaW5nID0gX3RtcDJfOwotKwkJCXsK LSsJCQkJS2V5YmluZGluZ01hbmFnZXIqIF90bXAzXzsKLSsJCQkJY29uc3QgZ2NoYXIqIF90bXA0 XzsKLSsJCQkJY29uc3QgZ2NoYXIqIF90bXA1XzsKLSsJCQkJX3RtcDNfID0ga2V5YmluZGluZ19t YW5hZ2VyOwotKwkJCQlfdG1wNF8gPSBrZXliaW5kaW5nOwotKwkJCQlrZXliaW5kaW5nX21hbmFn ZXJfdW5iaW5kIChfdG1wM18sIF90bXA0Xyk7Ci0rCQkJCV90bXA1XyA9IGtleWJpbmRpbmc7Ci0r CQkJCWlmIChnX3N0cmNtcDAgKF90bXA1XywgUEFORUxfQUNDRUxFUkFUT1JfU1dJVENIX0lNRV9G T1JFV0FSRCkgPT0gMCkgewotKwkJCQkJS2V5YmluZGluZ01hbmFnZXIqIF90bXA2XzsKLSsJCQkJ CV90bXA2XyA9IGtleWJpbmRpbmdfbWFuYWdlcjsKLSsJCQkJCWtleWJpbmRpbmdfbWFuYWdlcl91 bmJpbmQgKF90bXA2XywgUEFORUxfQUNDRUxFUkFUT1JfU1dJVENIX0lNRV9CQUNLV0FSRCk7Ci0r CQkJCX0KLSsJCQkJX2dfZnJlZTAgKGtleWJpbmRpbmcpOwotKwkJCX0KLSsJCX0KLSsJfQotKwlp ZiAoSEFWRV9JQlVTX0dLQkQpIHsKLSsJCUdrYmRMYXlvdXQqIF90bXA4XzsKLSsJCV90bXA4XyA9 IHNlbGYtPnByaXYtPm1fZ2tiZGxheW91dDsKLSsJCV90bXA3XyA9IF90bXA4XyAhPSBOVUxMOwot Kwl9IGVsc2UgewotKwkJX3RtcDdfID0gRkFMU0U7Ci0rCX0KLSsJX3RtcDlfID0gX3RtcDdfOwot KwlpZiAoX3RtcDlfKSB7Ci0rCQlHa2JkTGF5b3V0KiBfdG1wMTBfOwotKwkJZ3VpbnQgX3RtcDEx XyA9IDBVOwotKwkJR2tiZExheW91dCogX3RtcDEyXzsKLSsJCV90bXAxMF8gPSBzZWxmLT5wcml2 LT5tX2drYmRsYXlvdXQ7Ci0rCQlnX3NpZ25hbF9wYXJzZV9uYW1lICgiY2hhbmdlZCIsIFRZUEVf R0tCRF9MQVlPVVQsICZfdG1wMTFfLCBOVUxMLCBGQUxTRSk7Ci0rCQlnX3NpZ25hbF9oYW5kbGVy c19kaXNjb25uZWN0X21hdGNoZWQgKF90bXAxMF8sIEdfU0lHTkFMX01BVENIX0lEIHwgR19TSUdO QUxfTUFUQ0hfRlVOQyB8IEdfU0lHTkFMX01BVENIX0RBVEEsIF90bXAxMV8sIDAsIE5VTEwsIChH Q2FsbGJhY2spIF9wYW5lbF9na2JkbGF5b3V0X2NoYW5nZWRfY2JfZ2tiZF9sYXlvdXRfY2hhbmdl ZCwgc2VsZik7Ci0rCQlfdG1wMTJfID0gc2VsZi0+cHJpdi0+bV9na2JkbGF5b3V0OwotKwkJZ2ti ZF9sYXlvdXRfc3RvcF9saXN0ZW4gKF90bXAxMl8pOwotKwkJX2drYmRfbGF5b3V0X3VucmVmMCAo c2VsZi0+cHJpdi0+bV9na2JkbGF5b3V0KTsKLSsJCXNlbGYtPnByaXYtPm1fZ2tiZGxheW91dCA9 IE5VTEw7Ci0rCX0KLSsJX3hrYl9sYXlvdXRfdW5yZWYwIChzZWxmLT5wcml2LT5tX3hrYmxheW91 dCk7Ci0rCXNlbGYtPnByaXYtPm1feGtibGF5b3V0ID0gTlVMTDsKLSsJX2dfb2JqZWN0X3VucmVm MCAoa2V5YmluZGluZ19tYW5hZ2VyKTsKLSsJX2dfb2JqZWN0X3VucmVmMCAoc2VsZi0+cHJpdi0+ bV9idXMpOwotKwlfZ19vYmplY3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX2NvbmZpZyk7Ci0rCV9n X29iamVjdF91bnJlZjAgKHNlbGYtPnByaXYtPm1fc3RhdHVzX2ljb24pOwotKwlfZ19vYmplY3Rf dW5yZWYwIChzZWxmLT5wcml2LT5tX2ltZV9tZW51KTsKLSsJX2dfb2JqZWN0X3VucmVmMCAoc2Vs Zi0+cHJpdi0+bV9zeXNfbWVudSk7Ci0rCXNlbGYtPnByaXYtPm1fZW5naW5lcyA9IChfdmFsYV9h cnJheV9mcmVlIChzZWxmLT5wcml2LT5tX2VuZ2luZXMsIHNlbGYtPnByaXYtPm1fZW5naW5lc19s ZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfb2JqZWN0X3VucmVmKSwgTlVMTCk7Ci0rCV9nX29i amVjdF91bnJlZjAgKHNlbGYtPnByaXYtPm1fY2FuZGlkYXRlX3BhbmVsKTsKLSsJX2dfb2JqZWN0 X3VucmVmMCAoc2VsZi0+cHJpdi0+bV9zd2l0Y2hlcik7Ci0rCV9wcm9wZXJ0eV9tYW5hZ2VyX3Vu cmVmMCAoc2VsZi0+cHJpdi0+bV9wcm9wZXJ0eV9tYW5hZ2VyKTsKLSsJX2dfb2JqZWN0X3VucmVm MCAoc2VsZi0+cHJpdi0+bV9hYm91dF9kaWFsb2cpOwotKwlfZ2tiZF9sYXlvdXRfdW5yZWYwIChz ZWxmLT5wcml2LT5tX2drYmRsYXlvdXQpOwotKwlfeGtiX2xheW91dF91bnJlZjAgKHNlbGYtPnBy aXYtPm1feGtibGF5b3V0KTsKLSsJc2VsZi0+cHJpdi0+bV9sYXlvdXRzID0gKF92YWxhX2FycmF5 X2ZyZWUgKHNlbGYtPnByaXYtPm1fbGF5b3V0cywgc2VsZi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0 aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7Ci0rCXNlbGYtPnByaXYtPm1fdmFy aWFudHMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoc2VsZi0+cHJpdi0+bV92YXJpYW50cywgc2VsZi0+ cHJpdi0+bV92YXJpYW50c19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwp OwotKwlfZ190aW1lcl9kZXN0cm95MCAoc2VsZi0+cHJpdi0+bV9jaGFuZ2VkX2xheW91dF90aW1l cik7Ci0rCXNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTID0gKF92YWxhX2FycmF5 X2ZyZWUgKHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTLCBzZWxmLT5wcml2LT5B Q0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSks IE5VTEwpOwotKwlHX09CSkVDVF9DTEFTUyAocGFuZWxfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUg KG9iaik7Ci0rfQotKwotKwotK0dUeXBlIHBhbmVsX2dldF90eXBlICh2b2lkKSB7Ci0rCXN0YXRp YyB2b2xhdGlsZSBnc2l6ZSBwYW5lbF90eXBlX2lkX192b2xhdGlsZSA9IDA7Ci0rCWlmIChnX29u Y2VfaW5pdF9lbnRlciAoJnBhbmVsX3R5cGVfaWRfX3ZvbGF0aWxlKSkgewotKwkJc3RhdGljIGNv bnN0IEdUeXBlSW5mbyBnX2RlZmluZV90eXBlX2luZm8gPSB7IHNpemVvZiAoUGFuZWxDbGFzcyks IChHQmFzZUluaXRGdW5jKSBOVUxMLCAoR0Jhc2VGaW5hbGl6ZUZ1bmMpIE5VTEwsIChHQ2xhc3NJ bml0RnVuYykgcGFuZWxfY2xhc3NfaW5pdCwgKEdDbGFzc0ZpbmFsaXplRnVuYykgTlVMTCwgTlVM TCwgc2l6ZW9mIChQYW5lbCksIDAsIChHSW5zdGFuY2VJbml0RnVuYykgcGFuZWxfaW5zdGFuY2Vf aW5pdCwgTlVMTCB9OwotKwkJR1R5cGUgcGFuZWxfdHlwZV9pZDsKLSsJCXBhbmVsX3R5cGVfaWQg PSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChpYnVzX3BhbmVsX3NlcnZpY2VfZ2V0X3R5cGUgKCks ICJQYW5lbCIsICZnX2RlZmluZV90eXBlX2luZm8sIDApOwotKwkJZ19vbmNlX2luaXRfbGVhdmUg KCZwYW5lbF90eXBlX2lkX192b2xhdGlsZSwgcGFuZWxfdHlwZV9pZCk7Ci0rCX0KLSsJcmV0dXJu IHBhbmVsX3R5cGVfaWRfX3ZvbGF0aWxlOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfdmFsYV9h cnJheV9kZXN0cm95IChncG9pbnRlciBhcnJheSwgZ2ludCBhcnJheV9sZW5ndGgsIEdEZXN0cm95 Tm90aWZ5IGRlc3Ryb3lfZnVuYykgewotKwlpZiAoKGFycmF5ICE9IE5VTEwpICYmIChkZXN0cm95 X2Z1bmMgIT0gTlVMTCkpIHsKLSsJCWludCBpOwotKwkJZm9yIChpID0gMDsgaSA8IGFycmF5X2xl bmd0aDsgaSA9IGkgKyAxKSB7Ci0rCQkJaWYgKCgoZ3BvaW50ZXIqKSBhcnJheSlbaV0gIT0gTlVM TCkgewotKwkJCQlkZXN0cm95X2Z1bmMgKCgoZ3BvaW50ZXIqKSBhcnJheSlbaV0pOwotKwkJCX0K LSsJCX0KLSsJfQotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9mcmVlIChncG9p bnRlciBhcnJheSwgZ2ludCBhcnJheV9sZW5ndGgsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfZnVu YykgewotKwlfdmFsYV9hcnJheV9kZXN0cm95IChhcnJheSwgYXJyYXlfbGVuZ3RoLCBkZXN0cm95 X2Z1bmMpOwotKwlnX2ZyZWUgKGFycmF5KTsKLSt9Ci0rCi0rCi0rc3RhdGljIGdpbnQgX3ZhbGFf YXJyYXlfbGVuZ3RoIChncG9pbnRlciBhcnJheSkgewotKwlpbnQgbGVuZ3RoOwotKwlsZW5ndGgg PSAwOwotKwlpZiAoYXJyYXkpIHsKLSsJCXdoaWxlICgoKGdwb2ludGVyKikgYXJyYXkpW2xlbmd0 aF0pIHsKLSsJCQlsZW5ndGgrKzsKLSsJCX0KLSsJfQotKwlyZXR1cm4gbGVuZ3RoOwotK30KLSsK LSsKLSsKLS0tLSBpYnVzL3VpL2d0azMvcGFuZWwuYy5vcmlnCTIwMTItMDMtMDkgMTg6NTM6Mzku MjcxMjQzNDAwICswOTAwCi0rKysgaWJ1cy91aS9ndGszL3BhbmVsLmMJMjAxMi0wMy0wOSAxODo1 NDo1MS41OTQ1NTYyMDYgKzA5MDAKLUBAIC0yOSw3ICsyOSwxMCBAQAotICNpbmNsdWRlIDxndGsv Z3RrLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5j bHVkZSA8bG9jYWxlLmg+Ci0gI2luY2x1ZGUgPGdkay9nZGsuaD4KLSsjaW5jbHVkZSA8ZmxvYXQu aD4KLSsjaW5jbHVkZSA8bWF0aC5oPgotICNpbmNsdWRlIDxzaWduYWwuaD4KLSAjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+Ci0gI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci1AQCAtNzYsNiArNzks MjYgQEAgdHlwZWRlZiBzdHJ1Y3QgX1N3aXRjaGVyQ2xhc3MgU3dpdGNoZXJDbAotIHR5cGVkZWYg c3RydWN0IF9Qcm9wZXJ0eU1hbmFnZXIgUHJvcGVydHlNYW5hZ2VyOwotIHR5cGVkZWYgc3RydWN0 IF9Qcm9wZXJ0eU1hbmFnZXJDbGFzcyBQcm9wZXJ0eU1hbmFnZXJDbGFzczsKLSAKLSsjZGVmaW5l IFRZUEVfR0tCRF9MQVlPVVQgKGdrYmRfbGF5b3V0X2dldF90eXBlICgpKQotKyNkZWZpbmUgR0tC RF9MQVlPVVQob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBUWVBFX0dL QkRfTEFZT1VULCBHa2JkTGF5b3V0KSkKLSsjZGVmaW5lIEdLQkRfTEFZT1VUX0NMQVNTKGtsYXNz KSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFRZUEVfR0tCRF9MQVlPVVQsIEdr YmRMYXlvdXRDbGFzcykpCi0rI2RlZmluZSBJU19HS0JEX0xBWU9VVChvYmopIChHX1RZUEVfQ0hF Q0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFRZUEVfR0tCRF9MQVlPVVQpKQotKyNkZWZpbmUgSVNf R0tCRF9MQVlPVVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNz KSwgVFlQRV9HS0JEX0xBWU9VVCkpCi0rI2RlZmluZSBHS0JEX0xBWU9VVF9HRVRfQ0xBU1Mob2Jq KSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFRZUEVfR0tCRF9MQVlPVVQsIEdr YmRMYXlvdXRDbGFzcykpCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgX0drYmRMYXlvdXQgR2tiZExheW91 dDsKLSt0eXBlZGVmIHN0cnVjdCBfR2tiZExheW91dENsYXNzIEdrYmRMYXlvdXRDbGFzczsKLSsK LSsjZGVmaW5lIFRZUEVfWEtCX0xBWU9VVCAoeGtiX2xheW91dF9nZXRfdHlwZSAoKSkKLSsjZGVm aW5lIFhLQl9MQVlPVVQob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBU WVBFX1hLQl9MQVlPVVQsIFhLQkxheW91dCkpCi0rI2RlZmluZSBYS0JfTEFZT1VUX0NMQVNTKGts YXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFRZUEVfWEtCX0xBWU9VVCwg WEtCTGF5b3V0Q2xhc3MpKQotKyNkZWZpbmUgSVNfWEtCX0xBWU9VVChvYmopIChHX1RZUEVfQ0hF Q0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFRZUEVfWEtCX0xBWU9VVCkpCi0rI2RlZmluZSBJU19Y S0JfTEFZT1VUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyks IFRZUEVfWEtCX0xBWU9VVCkpCi0rI2RlZmluZSBYS0JfTEFZT1VUX0dFVF9DTEFTUyhvYmopIChH X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgVFlQRV9YS0JfTEFZT1VULCBYS0JMYXlv dXRDbGFzcykpCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgX1hLQkxheW91dCBYS0JMYXlvdXQ7Ci0rdHlw ZWRlZiBzdHJ1Y3QgX1hLQkxheW91dENsYXNzIFhLQkxheW91dENsYXNzOwotKwotICNkZWZpbmUg VFlQRV9LRVlCSU5ESU5HX01BTkFHRVIgKGtleWJpbmRpbmdfbWFuYWdlcl9nZXRfdHlwZSAoKSkK LSAjZGVmaW5lIEtFWUJJTkRJTkdfTUFOQUdFUihvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf Q0FTVCAoKG9iaiksIFRZUEVfS0VZQklORElOR19NQU5BR0VSLCBLZXliaW5kaW5nTWFuYWdlcikp Ci0gI2RlZmluZSBLRVlCSU5ESU5HX01BTkFHRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf Q0xBU1NfQ0FTVCAoKGtsYXNzKSwgVFlQRV9LRVlCSU5ESU5HX01BTkFHRVIsIEtleWJpbmRpbmdN YW5hZ2VyQ2xhc3MpKQotQEAgLTg1LDEwICsxMDgsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgX1Byb3Bl cnR5TWFuYWdlckNsYXNzIFBybwotIAotIHR5cGVkZWYgc3RydWN0IF9LZXliaW5kaW5nTWFuYWdl ciBLZXliaW5kaW5nTWFuYWdlcjsKLSB0eXBlZGVmIHN0cnVjdCBfS2V5YmluZGluZ01hbmFnZXJD bGFzcyBLZXliaW5kaW5nTWFuYWdlckNsYXNzOwotKyNkZWZpbmUgX2dfZnJlZTAodmFyKSAodmFy ID0gKGdfZnJlZSAodmFyKSwgTlVMTCkpCi0rI2RlZmluZSBfZ2tiZF9sYXlvdXRfdW5yZWYwKHZh cikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDogKHZhciA9IChna2JkX2xheW91dF91bnJlZiAodmFy KSwgTlVMTCkpKQotKyNkZWZpbmUgX3hrYl9sYXlvdXRfdW5yZWYwKHZhcikgKCh2YXIgPT0gTlVM TCkgPyBOVUxMIDogKHZhciA9ICh4a2JfbGF5b3V0X3VucmVmICh2YXIpLCBOVUxMKSkpCi0gI2Rl ZmluZSBfZ19vYmplY3RfdW5yZWYwKHZhcikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDogKHZhciA9 IChnX29iamVjdF91bnJlZiAodmFyKSwgTlVMTCkpKQotICNkZWZpbmUgX3Byb3BlcnR5X21hbmFn ZXJfdW5yZWYwKHZhcikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDogKHZhciA9IChwcm9wZXJ0eV9t YW5hZ2VyX3VucmVmICh2YXIpLCBOVUxMKSkpCi0rI2RlZmluZSBfZ190aW1lcl9kZXN0cm95MCh2 YXIpICgodmFyID09IE5VTEwpID8gTlVMTCA6ICh2YXIgPSAoZ190aW1lcl9kZXN0cm95ICh2YXIp LCBOVUxMKSkpCi0gI2RlZmluZSBfZ192YXJpYW50X3VucmVmMCh2YXIpICgodmFyID09IE5VTEwp ID8gTlVMTCA6ICh2YXIgPSAoZ192YXJpYW50X3VucmVmICh2YXIpLCBOVUxMKSkpCi0tI2RlZmlu ZSBfZ19mcmVlMCh2YXIpICh2YXIgPSAoZ19mcmVlICh2YXIpLCBOVUxMKSkKLSsjZGVmaW5lIF9f Z19saXN0X2ZyZWVfX2dfZnJlZTBfMCh2YXIpICgodmFyID09IE5VTEwpID8gTlVMTCA6ICh2YXIg PSAoX2dfbGlzdF9mcmVlX19nX2ZyZWUwXyAodmFyKSwgTlVMTCkpKQotICNkZWZpbmUgX2dfZXJy b3JfZnJlZTAodmFyKSAoKHZhciA9PSBOVUxMKSA/IE5VTEwgOiAodmFyID0gKGdfZXJyb3JfZnJl ZSAodmFyKSwgTlVMTCkpKQotIHR5cGVkZWYgc3RydWN0IF9CbG9jazREYXRhIEJsb2NrNERhdGE7 Ci0gCi1AQCAtMTI1LDYgKzE1MiwyMCBAQCBzdHJ1Y3QgX1BhbmVsUHJpdmF0ZSB7Ci0gCVByb3Bl cnR5TWFuYWdlciogbV9wcm9wZXJ0eV9tYW5hZ2VyOwotIAlHUGlkIG1fc2V0dXBfcGlkOwotIAlH dGtBYm91dERpYWxvZyogbV9hYm91dF9kaWFsb2c7Ci0rCUdrYmRMYXlvdXQqIG1fZ2tiZGxheW91 dDsKLSsJWEtCTGF5b3V0KiBtX3hrYmxheW91dDsKLSsJZ2NoYXIqKiBtX2xheW91dHM7Ci0rCWdp bnQgbV9sYXlvdXRzX2xlbmd0aDE7Ci0rCWdpbnQgX21fbGF5b3V0c19zaXplXzsKLSsJZ2NoYXIq KiBtX3ZhcmlhbnRzOwotKwlnaW50IG1fdmFyaWFudHNfbGVuZ3RoMTsKLSsJZ2ludCBfbV92YXJp YW50c19zaXplXzsKLSsJZ2ludCBtX2ZhbGxiYWNrX2xvY2tfaWQ7Ci0rCWdib29sZWFuIG1fY2hh bmdlZF94a2Jfb3B0aW9uOwotKwlHVGltZXIqIG1fY2hhbmdlZF9sYXlvdXRfdGltZXI7Ci0rCWdj aGFyKiogQUNDRUxFUkFUT1JfSU1FX0hPVEtFWVM7Ci0rCWdpbnQgQUNDRUxFUkFUT1JfSU1FX0hP VEtFWVNfbGVuZ3RoMTsKLSsJZ2ludCBfQUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfc2l6ZV87Ci0g fTsKLSAKLSB0eXBlZGVmIHZvaWQgKCpLZXliaW5kaW5nTWFuYWdlcktleWJpbmRpbmdIYW5kbGVy RnVuYykgKEdka0V2ZW50KiBldmVudCwgdm9pZCogdXNlcl9kYXRhKTsKLUBAIC0xNDcsNiArMTg4 LDIwIEBAIHZvaWQgdmFsdWVfc2V0X3Byb3BlcnR5X21hbmFnZXIgKEdWYWx1ZSoKLSB2b2lkIHZh bHVlX3Rha2VfcHJvcGVydHlfbWFuYWdlciAoR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdl9vYmpl Y3QpOwotIGdwb2ludGVyIHZhbHVlX2dldF9wcm9wZXJ0eV9tYW5hZ2VyIChjb25zdCBHVmFsdWUq IHZhbHVlKTsKLSBHVHlwZSBwcm9wZXJ0eV9tYW5hZ2VyX2dldF90eXBlICh2b2lkKSBHX0dOVUNf Q09OU1Q7Ci0rZ3BvaW50ZXIgZ2tiZF9sYXlvdXRfcmVmIChncG9pbnRlciBpbnN0YW5jZSk7Ci0r dm9pZCBna2JkX2xheW91dF91bnJlZiAoZ3BvaW50ZXIgaW5zdGFuY2UpOwotK0dQYXJhbVNwZWMq IHBhcmFtX3NwZWNfZ2tiZF9sYXlvdXQgKGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBnY2hhciog bmljaywgY29uc3QgZ2NoYXIqIGJsdXJiLCBHVHlwZSBvYmplY3RfdHlwZSwgR1BhcmFtRmxhZ3Mg ZmxhZ3MpOwotK3ZvaWQgdmFsdWVfc2V0X2drYmRfbGF5b3V0IChHVmFsdWUqIHZhbHVlLCBncG9p bnRlciB2X29iamVjdCk7Ci0rdm9pZCB2YWx1ZV90YWtlX2drYmRfbGF5b3V0IChHVmFsdWUqIHZh bHVlLCBncG9pbnRlciB2X29iamVjdCk7Ci0rZ3BvaW50ZXIgdmFsdWVfZ2V0X2drYmRfbGF5b3V0 IChjb25zdCBHVmFsdWUqIHZhbHVlKTsKLStHVHlwZSBna2JkX2xheW91dF9nZXRfdHlwZSAodm9p ZCkgR19HTlVDX0NPTlNUOwotK2dwb2ludGVyIHhrYl9sYXlvdXRfcmVmIChncG9pbnRlciBpbnN0 YW5jZSk7Ci0rdm9pZCB4a2JfbGF5b3V0X3VucmVmIChncG9pbnRlciBpbnN0YW5jZSk7Ci0rR1Bh cmFtU3BlYyogcGFyYW1fc3BlY194a2JfbGF5b3V0IChjb25zdCBnY2hhciogbmFtZSwgY29uc3Qg Z2NoYXIqIG5pY2ssIGNvbnN0IGdjaGFyKiBibHVyYiwgR1R5cGUgb2JqZWN0X3R5cGUsIEdQYXJh bUZsYWdzIGZsYWdzKTsKLSt2b2lkIHZhbHVlX3NldF94a2JfbGF5b3V0IChHVmFsdWUqIHZhbHVl LCBncG9pbnRlciB2X29iamVjdCk7Ci0rdm9pZCB2YWx1ZV90YWtlX3hrYl9sYXlvdXQgKEdWYWx1 ZSogdmFsdWUsIGdwb2ludGVyIHZfb2JqZWN0KTsKLStncG9pbnRlciB2YWx1ZV9nZXRfeGtiX2xh eW91dCAoY29uc3QgR1ZhbHVlKiB2YWx1ZSk7Ci0rR1R5cGUgeGtiX2xheW91dF9nZXRfdHlwZSAo dm9pZCkgR19HTlVDX0NPTlNUOwotICNkZWZpbmUgUEFORUxfR0VUX1BSSVZBVEUobykgKEdfVFlQ RV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBUWVBFX1BBTkVMLCBQYW5lbFByaXZhdGUpKQot IGVudW0gIHsKLSAJUEFORUxfRFVNTVlfUFJPUEVSVFkKLUBAIC0xNTYsNiArMjExLDkgQEAgS2V5 YmluZGluZ01hbmFnZXIqIGtleWJpbmRpbmdfbWFuYWdlcl9nZQotIHZvaWQga2V5YmluZGluZ19t YW5hZ2VyX3VuYmluZCAoS2V5YmluZGluZ01hbmFnZXIqIHNlbGYsIGNvbnN0IGdjaGFyKiBhY2Nl bGVyYXRvcik7Ci0gI2RlZmluZSBQQU5FTF9BQ0NFTEVSQVRPUl9TV0lUQ0hfSU1FX0ZPUkVXQVJE ICI8Q29udHJvbD5zcGFjZSIKLSAjZGVmaW5lIFBBTkVMX0FDQ0VMRVJBVE9SX1NXSVRDSF9JTUVf QkFDS1dBUkQgIjxDb250cm9sPjxTaGlmdD5zcGFjZSIKLStzdGF0aWMgdm9pZCBwYW5lbF9na2Jk bGF5b3V0X2NoYW5nZWRfY2IgKFBhbmVsKiBzZWxmKTsKLStzdGF0aWMgdm9pZCBfcGFuZWxfZ2ti ZGxheW91dF9jaGFuZ2VkX2NiX2drYmRfbGF5b3V0X2NoYW5nZWQgKEdrYmRMYXlvdXQqIF9zZW5k ZXIsIGdwb2ludGVyIHNlbGYpOwotK3ZvaWQgZ2tiZF9sYXlvdXRfc3RvcF9saXN0ZW4gKEdrYmRM YXlvdXQqIHNlbGYpOwotIFBhbmVsKiBwYW5lbF9uZXcgKElCdXNCdXMqIGJ1cyk7Ci0gUGFuZWwq IHBhbmVsX2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0X3R5cGUsIElCdXNCdXMqIGJ1cyk7Ci0gc3Rh dGljIHZvaWQgcGFuZWxfc3RhdHVzX2ljb25fcG9wdXBfbWVudV9jYiAoUGFuZWwqIHNlbGYsIEd0 a1N0YXR1c0ljb24qIHN0YXR1c19pY29uLCBndWludCBidXR0b24sIGd1aW50IGFjdGl2YXRlX3Rp bWUpOwotQEAgLTE3MCwzMSArMjI4LDU4IEBAIHN0YXRpYyB2b2lkIF9fbGFtYmRhMjRfIChQYW5l bCogc2VsZiwgQ2EKLSBzdGF0aWMgdm9pZCBfX19sYW1iZGEyNF9fY2FuZGlkYXRlX3BhbmVsX3Bh Z2VfZG93biAoQ2FuZGlkYXRlUGFuZWwqIF9zZW5kZXIsIGdwb2ludGVyIHNlbGYpOwotIFN3aXRj aGVyKiBzd2l0Y2hlcl9uZXcgKHZvaWQpOwotIFN3aXRjaGVyKiBzd2l0Y2hlcl9jb25zdHJ1Y3Qg KEdUeXBlIG9iamVjdF90eXBlKTsKLS1nYm9vbGVhbiBrZXliaW5kaW5nX21hbmFnZXJfYmluZCAo S2V5YmluZGluZ01hbmFnZXIqIHNlbGYsIGNvbnN0IGdjaGFyKiBhY2NlbGVyYXRvciwgS2V5Ymlu ZGluZ01hbmFnZXJLZXliaW5kaW5nSGFuZGxlckZ1bmMgaGFuZGxlciwgdm9pZCogaGFuZGxlcl90 YXJnZXQpOwotLXN0YXRpYyB2b2lkIF9fbGFtYmRhMjVfIChQYW5lbCogc2VsZiwgR2RrRXZlbnQq IGUpOwotLXN0YXRpYyB2b2lkIHBhbmVsX2hhbmRsZV9lbmdpbmVfc3dpdGNoIChQYW5lbCogc2Vs ZiwgR2RrRXZlbnQqIGV2ZW50LCBnYm9vbGVhbiByZXZlcnQpOwotLXN0YXRpYyB2b2lkIF9fX2xh bWJkYTI1X19rZXliaW5kaW5nX21hbmFnZXJfa2V5YmluZGluZ19oYW5kbGVyX2Z1bmMgKEdka0V2 ZW50KiBldmVudCwgZ3BvaW50ZXIgc2VsZik7Ci0tc3RhdGljIHZvaWQgX19sYW1iZGEyNl8gKFBh bmVsKiBzZWxmLCBHZGtFdmVudCogZSk7Ci0tc3RhdGljIHZvaWQgX19fbGFtYmRhMjZfX2tleWJp bmRpbmdfbWFuYWdlcl9rZXliaW5kaW5nX2hhbmRsZXJfZnVuYyAoR2RrRXZlbnQqIGV2ZW50LCBn cG9pbnRlciBzZWxmKTsKLSBQcm9wZXJ0eU1hbmFnZXIqIHByb3BlcnR5X21hbmFnZXJfbmV3ICh2 b2lkKTsKLSBQcm9wZXJ0eU1hbmFnZXIqIHByb3BlcnR5X21hbmFnZXJfY29uc3RydWN0IChHVHlw ZSBvYmplY3RfdHlwZSk7Ci0tc3RhdGljIHZvaWQgX19sYW1iZGEyN18gKFBhbmVsKiBzZWxmLCBj b25zdCBnY2hhciogaywgZ2ludCBzKTsKLS1zdGF0aWMgdm9pZCBfX19sYW1iZGEyN19fcHJvcGVy dHlfbWFuYWdlcl9wcm9wZXJ0eV9hY3RpdmF0ZSAoUHJvcGVydHlNYW5hZ2VyKiBfc2VuZGVyLCBj b25zdCBnY2hhcioga2V5LCBnaW50IHN0YXRlLCBncG9pbnRlciBzZWxmKTsKLStzdGF0aWMgdm9p ZCBfX2xhbWJkYTI1XyAoUGFuZWwqIHNlbGYsIGNvbnN0IGdjaGFyKiBrLCBnaW50IHMpOwotK3N0 YXRpYyB2b2lkIF9fX2xhbWJkYTI1X19wcm9wZXJ0eV9tYW5hZ2VyX3Byb3BlcnR5X2FjdGl2YXRl IChQcm9wZXJ0eU1hbmFnZXIqIF9zZW5kZXIsIGNvbnN0IGdjaGFyKiBrZXksIGdpbnQgc3RhdGUs IGdwb2ludGVyIHNlbGYpOwotK3N0YXRpYyB2b2lkIHBhbmVsX3NldF9rZXliaW5kaW5nIChQYW5l bCogc2VsZik7Ci0rc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkOSAoZ2NoYXIqKiogYXJyYXks IGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Ci0rc3RhdGljIHZvaWQgX3Zh bGFfYXJyYXlfYWRkMTAgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBn Y2hhciogdmFsdWUpOwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDExIChnY2hhcioqKiBh cnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKLStzdGF0aWMgdm9p ZCBfdmFsYV9hcnJheV9hZGQxMiAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNp emUsIGdjaGFyKiB2YWx1ZSk7Ci0rZ2Jvb2xlYW4ga2V5YmluZGluZ19tYW5hZ2VyX2JpbmQgKEtl eWJpbmRpbmdNYW5hZ2VyKiBzZWxmLCBjb25zdCBnY2hhciogYWNjZWxlcmF0b3IsIEtleWJpbmRp bmdNYW5hZ2VyS2V5YmluZGluZ0hhbmRsZXJGdW5jIGhhbmRsZXIsIHZvaWQqIGhhbmRsZXJfdGFy Z2V0KTsKLStzdGF0aWMgdm9pZCBfX19fbGFtYmRhMjZfIChQYW5lbCogc2VsZiwgR2RrRXZlbnQq IGUpOwotK3N0YXRpYyB2b2lkIHBhbmVsX2hhbmRsZV9lbmdpbmVfc3dpdGNoIChQYW5lbCogc2Vs ZiwgR2RrRXZlbnQqIGV2ZW50LCBnYm9vbGVhbiByZXZlcnQpOwotK3N0YXRpYyB2b2lkIF9fX19f bGFtYmRhMjZfX2tleWJpbmRpbmdfbWFuYWdlcl9rZXliaW5kaW5nX2hhbmRsZXJfZnVuYyAoR2Rr RXZlbnQqIGV2ZW50LCBncG9pbnRlciBzZWxmKTsKLStzdGF0aWMgdm9pZCBfX19fX2xhbWJkYTI3 XyAoUGFuZWwqIHNlbGYsIEdka0V2ZW50KiBlKTsKLStzdGF0aWMgdm9pZCBfX19fX19sYW1iZGEy N19fa2V5YmluZGluZ19tYW5hZ2VyX2tleWJpbmRpbmdfaGFuZGxlcl9mdW5jIChHZGtFdmVudCog ZXZlbnQsIGdwb2ludGVyIHNlbGYpOwotIHZvaWQgcGFuZWxfc2V0X2NvbmZpZyAoUGFuZWwqIHNl bGYsIElCdXNDb25maWcqIGNvbmZpZyk7Ci0gc3RhdGljIHZvaWQgcGFuZWxfY29uZmlnX3ZhbHVl X2NoYW5nZWRfY2IgKFBhbmVsKiBzZWxmLCBJQnVzQ29uZmlnKiBjb25maWcsIGNvbnN0IGdjaGFy KiBzZWN0aW9uLCBjb25zdCBnY2hhciogbmFtZSwgR1ZhcmlhbnQqIHZhcmlhbnQpOwotIHN0YXRp YyB2b2lkIF9wYW5lbF9jb25maWdfdmFsdWVfY2hhbmdlZF9jYl9pYnVzX2NvbmZpZ192YWx1ZV9j aGFuZ2VkIChJQnVzQ29uZmlnKiBfc2VuZGVyLCBjb25zdCBnY2hhciogc2VjdGlvbiwgY29uc3Qg Z2NoYXIqIG5hbWUsIEdWYXJpYW50KiB2YWx1ZSwgZ3BvaW50ZXIgc2VsZik7Ci0rc3RhdGljIHZv aWQgcGFuZWxfaW5pdF9lbmdpbmVzX29yZGVyIChQYW5lbCogc2VsZik7Ci0gc3RhdGljIHZvaWQg cGFuZWxfdXBkYXRlX2VuZ2luZXMgKFBhbmVsKiBzZWxmLCBHVmFyaWFudCogdmFyX2VuZ2luZXMs IEdWYXJpYW50KiB2YXJfb3JkZXIpOwotK3ZvaWQgZ2tiZF9sYXlvdXRfbG9ja19ncm91cCAoR2ti ZExheW91dCogc2VsZiwgZ2ludCBpZCk7Ci0rdm9pZCB4a2JfbGF5b3V0X3Jlc2V0X2xheW91dCAo WEtCTGF5b3V0KiBzZWxmKTsKLStzdGF0aWMgdm9pZCBwYW5lbF91cGRhdGVfeGtiX2VuZ2luZXMg KFBhbmVsKiBzZWxmKTsKLStzdGF0aWMgdm9pZCBwYW5lbF9pbml0X2drYmQgKFBhbmVsKiBzZWxm KTsKLStHa2JkTGF5b3V0KiBna2JkX2xheW91dF9uZXcgKHZvaWQpOwotK0drYmRMYXlvdXQqIGdr YmRfbGF5b3V0X2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0X3R5cGUpOwotK3ZvaWQgZ2tiZF9sYXlv dXRfc3RhcnRfbGlzdGVuIChHa2JkTGF5b3V0KiBzZWxmKTsKLStYS0JMYXlvdXQqIHhrYl9sYXlv dXRfbmV3IChJQnVzQ29uZmlnKiBjb25maWcpOwotK1hLQkxheW91dCogeGtiX2xheW91dF9jb25z dHJ1Y3QgKEdUeXBlIG9iamVjdF90eXBlLCBJQnVzQ29uZmlnKiBjb25maWcpOwotK2djaGFyKiB4 a2JfbGF5b3V0X2dldF9sYXlvdXQgKFhLQkxheW91dCogc2VsZik7Ci0rZ2NoYXIqIHhrYl9sYXlv dXRfZ2V0X3ZhcmlhbnQgKFhLQkxheW91dCogc2VsZik7Ci0rc3RhdGljIHZvaWQgX2dfZnJlZTBf IChncG9pbnRlciB2YXIpOwotK3N0YXRpYyB2b2lkIF9nX2xpc3RfZnJlZV9fZ19mcmVlMF8gKEdM aXN0KiBzZWxmKTsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxMyAoZ2NoYXIqKiogYXJy YXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Ci0rc3RhdGljIGdib29s ZWFuIF92YWxhX3N0cmluZ19hcnJheV9jb250YWlucyAoZ2NoYXIqKiBzdGFjaywgaW50IHN0YWNr X2xlbmd0aCwgZ2NoYXIqIG5lZWRsZSk7Ci0rc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTQg KGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpOwot K3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDE1IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5n dGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKLStzdGF0aWMgdm9pZCBwYW5lbF9zZXRfeGti X2dyb3VwX2xheW91dCAoUGFuZWwqIHNlbGYsIGNvbnN0IGdjaGFyKiBsYXlvdXQpOwotK2dpbnQq IHhrYl9sYXlvdXRfc2V0X2xheW91dCAoWEtCTGF5b3V0KiBzZWxmLCBjb25zdCBnY2hhciogX2xh eW91dCwgY29uc3QgZ2NoYXIqIF92YXJpYW50LCBjb25zdCBnY2hhciogX29wdGlvbiwgaW50KiBy ZXN1bHRfbGVuZ3RoMSk7Ci0rc3RhdGljIGdib29sZWFuIHBhbmVsX3NldF9na2JkX2xheW91dCAo UGFuZWwqIHNlbGYsIGNvbnN0IGdjaGFyKiBsYXlvdXQpOwotK2djaGFyKiogZ2tiZF9sYXlvdXRf Z2V0X2dyb3VwX25hbWVzIChHa2JkTGF5b3V0KiBzZWxmLCBpbnQqIHJlc3VsdF9sZW5ndGgxKTsK LStzdGF0aWMgdm9pZCBwYW5lbF9zZXRfbGF5b3V0IChQYW5lbCogc2VsZiwgY29uc3QgZ2NoYXIq IGxheW91dCk7Ci0gc3RhdGljIHZvaWQgcGFuZWxfc3dpdGNoX2VuZ2luZSAoUGFuZWwqIHNlbGYs IGdpbnQgaSwgZ2Jvb2xlYW4gZm9yY2UpOwotLXN0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDkg KGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpOwot K3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDE2IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5n dGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKLSBndWludCBrZXliaW5kaW5nX21hbmFnZXJf Z2V0X3ByaW1hcnlfbW9kaWZpZXIgKGd1aW50IGJpbmRpbmdfbWFzayk7Ci0gZ2Jvb2xlYW4ga2V5 YmluZGluZ19tYW5hZ2VyX3ByaW1hcnlfbW9kaWZpZXJfc3RpbGxfcHJlc3NlZCAoR2RrRXZlbnQq IGV2ZW50LCBndWludCBwcmltYXJ5X21vZGlmaWVyKTsKLSBnaW50IHN3aXRjaGVyX3J1biAoU3dp dGNoZXIqIHNlbGYsIEdka0V2ZW50KiBldmVudCwgSUJ1c0VuZ2luZURlc2MqKiBlbmdpbmVzLCBp bnQgZW5naW5lc19sZW5ndGgxLCBnaW50IGluZGV4KTsKLS1zdGF0aWMgZ2NoYXIqKiBfdmFsYV9h cnJheV9kdXAyIChnY2hhcioqIHNlbGYsIGludCBsZW5ndGgpOwotLXN0YXRpYyBnYm9vbGVhbiBf dmFsYV9zdHJpbmdfYXJyYXlfY29udGFpbnMgKGdjaGFyKiogc3RhY2ssIGludCBzdGFja19sZW5n dGgsIGdjaGFyKiBuZWVkbGUpOwotLXN0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDEwIChnY2hh cioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKLS1zdGF0 aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxMSAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBp bnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Ci0tc3RhdGljIElCdXNFbmdpbmVEZXNjKiogX3ZhbGFf YXJyYXlfZHVwMyAoSUJ1c0VuZ2luZURlc2MqKiBzZWxmLCBpbnQgbGVuZ3RoKTsKLS1zdGF0aWMg SUJ1c0VuZ2luZURlc2MqKiBfdmFsYV9hcnJheV9kdXA0IChJQnVzRW5naW5lRGVzYyoqIHNlbGYs IGludCBsZW5ndGgpOwotK3N0YXRpYyBnY2hhcioqIF92YWxhX2FycmF5X2R1cDQgKGdjaGFyKiog c2VsZiwgaW50IGxlbmd0aCk7Ci0rc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTcgKGdjaGFy KioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpOwotK3N0YXRp YyB2b2lkIF92YWxhX2FycmF5X2FkZDE4IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGlu dCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKLStzdGF0aWMgSUJ1c0VuZ2luZURlc2MqKiBfdmFsYV9h cnJheV9kdXA1IChJQnVzRW5naW5lRGVzYyoqIHNlbGYsIGludCBsZW5ndGgpOwotK3N0YXRpYyBJ QnVzRW5naW5lRGVzYyoqIF92YWxhX2FycmF5X2R1cDYgKElCdXNFbmdpbmVEZXNjKiogc2VsZiwg aW50IGxlbmd0aCk7Ci0gc3RhdGljIHZvaWQgcGFuZWxfc2hvd19zZXR1cF9kaWFsb2cgKFBhbmVs KiBzZWxmKTsKLSBzdGF0aWMgdm9pZCBfX2xhbWJkYTE4XyAoUGFuZWwqIHNlbGYsIEdQaWQgcGlk LCBnaW50IHN0YXRlKTsKLSBzdGF0aWMgdm9pZCBfX19sYW1iZGExOF9fZ2NoaWxkX3dhdGNoX2Z1 bmMgKEdQaWQgcGlkLCBnaW50IHN0YXR1cywgZ3BvaW50ZXIgc2VsZik7Ci1AQCAtMjQwLDYgKzMy NSwxMSBAQCBzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9mcmVlIChncG9pbnRlciBhCi0gc3RhdGlj IGdpbnQgX3ZhbGFfYXJyYXlfbGVuZ3RoIChncG9pbnRlciBhcnJheSk7Ci0gCi0gCi0rc3RhdGlj IHZvaWQgX3BhbmVsX2drYmRsYXlvdXRfY2hhbmdlZF9jYl9na2JkX2xheW91dF9jaGFuZ2VkIChH a2JkTGF5b3V0KiBfc2VuZGVyLCBncG9pbnRlciBzZWxmKSB7Ci0rCXBhbmVsX2drYmRsYXlvdXRf Y2hhbmdlZF9jYiAoc2VsZik7Ci0rfQotKwotKwotIHN0YXRpYyBncG9pbnRlciBfZ19vYmplY3Rf cmVmMCAoZ3BvaW50ZXIgc2VsZikgewotIAlyZXR1cm4gc2VsZiA/IGdfb2JqZWN0X3JlZiAoc2Vs ZikgOiBOVUxMOwotIH0KLUBAIC0yNzcsMzMgKzM2Nyw3IEBAIHN0YXRpYyB2b2lkIF9fX2xhbWJk YTI0X19jYW5kaWRhdGVfcGFuZWwKLSB9Ci0gCi0gCi0tc3RhdGljIHZvaWQgX19sYW1iZGEyNV8g KFBhbmVsKiBzZWxmLCBHZGtFdmVudCogZSkgewotLQlHZGtFdmVudCogX3RtcDBfOwotLQlnX3Jl dHVybl9pZl9mYWlsIChlICE9IE5VTEwpOwotLQlfdG1wMF8gPSBlOwotLQlwYW5lbF9oYW5kbGVf ZW5naW5lX3N3aXRjaCAoc2VsZiwgX3RtcDBfLCBGQUxTRSk7Ci0tfQotLQotLQotLXN0YXRpYyB2 b2lkIF9fX2xhbWJkYTI1X19rZXliaW5kaW5nX21hbmFnZXJfa2V5YmluZGluZ19oYW5kbGVyX2Z1 bmMgKEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgc2VsZikgewotLQlfX2xhbWJkYTI1XyAoc2Vs ZiwgZXZlbnQpOwotLX0KLS0KLS0KLS1zdGF0aWMgdm9pZCBfX2xhbWJkYTI2XyAoUGFuZWwqIHNl bGYsIEdka0V2ZW50KiBlKSB7Ci0tCUdka0V2ZW50KiBfdG1wMF87Ci0tCWdfcmV0dXJuX2lmX2Zh aWwgKGUgIT0gTlVMTCk7Ci0tCV90bXAwXyA9IGU7Ci0tCXBhbmVsX2hhbmRsZV9lbmdpbmVfc3dp dGNoIChzZWxmLCBfdG1wMF8sIFRSVUUpOwotLX0KLS0KLS0KLS1zdGF0aWMgdm9pZCBfX19sYW1i ZGEyNl9fa2V5YmluZGluZ19tYW5hZ2VyX2tleWJpbmRpbmdfaGFuZGxlcl9mdW5jIChHZGtFdmVu dCogZXZlbnQsIGdwb2ludGVyIHNlbGYpIHsKLS0JX19sYW1iZGEyNl8gKHNlbGYsIGV2ZW50KTsK LS19Ci0tCi0tCi0tc3RhdGljIHZvaWQgX19sYW1iZGEyN18gKFBhbmVsKiBzZWxmLCBjb25zdCBn Y2hhciogaywgZ2ludCBzKSB7Ci0rc3RhdGljIHZvaWQgX19sYW1iZGEyNV8gKFBhbmVsKiBzZWxm LCBjb25zdCBnY2hhciogaywgZ2ludCBzKSB7Ci0gCWNvbnN0IGdjaGFyKiBfdG1wMF87Ci0gCWdp bnQgX3RtcDFfOwotIAlnX3JldHVybl9pZl9mYWlsIChrICE9IE5VTEwpOwotQEAgLTMxMyw4ICsz NzcsOCBAQCBzdGF0aWMgdm9pZCBfX2xhbWJkYTI3XyAoUGFuZWwqIHNlbGYsIGNvCi0gfQotIAot IAotLXN0YXRpYyB2b2lkIF9fX2xhbWJkYTI3X19wcm9wZXJ0eV9tYW5hZ2VyX3Byb3BlcnR5X2Fj dGl2YXRlIChQcm9wZXJ0eU1hbmFnZXIqIF9zZW5kZXIsIGNvbnN0IGdjaGFyKiBrZXksIGdpbnQg c3RhdGUsIGdwb2ludGVyIHNlbGYpIHsKLS0JX19sYW1iZGEyN18gKHNlbGYsIGtleSwgc3RhdGUp OwotK3N0YXRpYyB2b2lkIF9fX2xhbWJkYTI1X19wcm9wZXJ0eV9tYW5hZ2VyX3Byb3BlcnR5X2Fj dGl2YXRlIChQcm9wZXJ0eU1hbmFnZXIqIF9zZW5kZXIsIGNvbnN0IGdjaGFyKiBrZXksIGdpbnQg c3RhdGUsIGdwb2ludGVyIHNlbGYpIHsKLSsJX19sYW1iZGEyNV8gKHNlbGYsIGtleSwgc3RhdGUp OwotIH0KLSAKLSAKLUBAIC0zMzgsMTAgKzQwMiw4IEBAIFBhbmVsKiBwYW5lbF9jb25zdHJ1Y3Qg KEdUeXBlIG9iamVjdF90eXAKLSAJQ2FuZGlkYXRlUGFuZWwqIF90bXAxNV87Ci0gCVN3aXRjaGVy KiBfdG1wMTZfOwotIAlTd2l0Y2hlciogX3RtcDE3XzsKLS0JS2V5YmluZGluZ01hbmFnZXIqIF90 bXAxOF8gPSBOVUxMOwotLQlLZXliaW5kaW5nTWFuYWdlcioga2V5YmluZGluZ19tYW5hZ2VyOwot KwlQcm9wZXJ0eU1hbmFnZXIqIF90bXAxOF87Ci0gCVByb3BlcnR5TWFuYWdlciogX3RtcDE5XzsK LS0JUHJvcGVydHlNYW5hZ2VyKiBfdG1wMjBfOwotIAlnX3JldHVybl92YWxfaWZfZmFpbCAoYnVz ICE9IE5VTEwsIE5VTEwpOwotIAlfdG1wMF8gPSBidXM7Ci0gCV90bXAxXyA9IGlidXNfYnVzX2lz X2Nvbm5lY3RlZCAoX3RtcDBfKTsKLUBAIC0zNzgsMTcgKzQ0MCwxMiBAQCBQYW5lbCogcGFuZWxf Y29uc3RydWN0IChHVHlwZSBvYmplY3RfdHlwCi0gCV90bXAxN18gPSBnX29iamVjdF9yZWZfc2lu ayAoX3RtcDE2Xyk7Ci0gCV9nX29iamVjdF91bnJlZjAgKHNlbGYtPnByaXYtPm1fc3dpdGNoZXIp OwotIAlzZWxmLT5wcml2LT5tX3N3aXRjaGVyID0gX3RtcDE3XzsKLS0JX3RtcDE4XyA9IGtleWJp bmRpbmdfbWFuYWdlcl9nZXRfaW5zdGFuY2UgKCk7Ci0tCWtleWJpbmRpbmdfbWFuYWdlciA9IF90 bXAxOF87Ci0tCWtleWJpbmRpbmdfbWFuYWdlcl9iaW5kIChrZXliaW5kaW5nX21hbmFnZXIsIFBB TkVMX0FDQ0VMRVJBVE9SX1NXSVRDSF9JTUVfRk9SRVdBUkQsIF9fX2xhbWJkYTI1X19rZXliaW5k aW5nX21hbmFnZXJfa2V5YmluZGluZ19oYW5kbGVyX2Z1bmMsIHNlbGYpOwotLQlrZXliaW5kaW5n X21hbmFnZXJfYmluZCAoa2V5YmluZGluZ19tYW5hZ2VyLCBQQU5FTF9BQ0NFTEVSQVRPUl9TV0lU Q0hfSU1FX0JBQ0tXQVJELCBfX19sYW1iZGEyNl9fa2V5YmluZGluZ19tYW5hZ2VyX2tleWJpbmRp bmdfaGFuZGxlcl9mdW5jLCBzZWxmKTsKLS0JX3RtcDE5XyA9IHByb3BlcnR5X21hbmFnZXJfbmV3 ICgpOwotKwlfdG1wMThfID0gcHJvcGVydHlfbWFuYWdlcl9uZXcgKCk7Ci0gCV9wcm9wZXJ0eV9t YW5hZ2VyX3VucmVmMCAoc2VsZi0+cHJpdi0+bV9wcm9wZXJ0eV9tYW5hZ2VyKTsKLS0Jc2VsZi0+ cHJpdi0+bV9wcm9wZXJ0eV9tYW5hZ2VyID0gX3RtcDE5XzsKLS0JX3RtcDIwXyA9IHNlbGYtPnBy aXYtPm1fcHJvcGVydHlfbWFuYWdlcjsKLS0JZ19zaWduYWxfY29ubmVjdF9vYmplY3QgKF90bXAy MF8sICJwcm9wZXJ0eS1hY3RpdmF0ZSIsIChHQ2FsbGJhY2spIF9fX2xhbWJkYTI3X19wcm9wZXJ0 eV9tYW5hZ2VyX3Byb3BlcnR5X2FjdGl2YXRlLCBzZWxmLCAwKTsKLSsJc2VsZi0+cHJpdi0+bV9w cm9wZXJ0eV9tYW5hZ2VyID0gX3RtcDE4XzsKLSsJX3RtcDE5XyA9IHNlbGYtPnByaXYtPm1fcHJv cGVydHlfbWFuYWdlcjsKLSsJZ19zaWduYWxfY29ubmVjdF9vYmplY3QgKF90bXAxOV8sICJwcm9w ZXJ0eS1hY3RpdmF0ZSIsIChHQ2FsbGJhY2spIF9fX2xhbWJkYTI1X19wcm9wZXJ0eV9tYW5hZ2Vy X3Byb3BlcnR5X2FjdGl2YXRlLCBzZWxmLCAwKTsKLSAJZ19zaWduYWxfZW1pdF9ieV9uYW1lICgo SUJ1c1BhbmVsU2VydmljZSopIHNlbGYsICJzdGF0ZS1jaGFuZ2VkIik7Ci0tCV9nX29iamVjdF91 bnJlZjAgKGtleWJpbmRpbmdfbWFuYWdlcik7Ci0gCXJldHVybiBzZWxmOwotIH0KLSAKLUBAIC0z OTgsNiArNDU1LDMyMSBAQCBQYW5lbCogcGFuZWxfbmV3IChJQnVzQnVzKiBidXMpIHsKLSB9Ci0g Ci0gCi0rc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkOSAoZ2NoYXIqKiogYXJyYXksIGludCog bGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSkgewotKwlpZiAoKCpsZW5ndGgpID09ICgq c2l6ZSkpIHsKLSsJCSpzaXplID0gKCpzaXplKSA/ICgyICogKCpzaXplKSkgOiA0OwotKwkJKmFy cmF5ID0gZ19yZW5ldyAoZ2NoYXIqLCAqYXJyYXksICgqc2l6ZSkgKyAxKTsKLSsJfQotKwkoKmFy cmF5KVsoKmxlbmd0aCkrK10gPSB2YWx1ZTsKLSsJKCphcnJheSlbKmxlbmd0aF0gPSBOVUxMOwot K30KLSsKLSsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxMCAoZ2NoYXIqKiogYXJyYXks IGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSkgewotKwlpZiAoKCpsZW5ndGgp ID09ICgqc2l6ZSkpIHsKLSsJCSpzaXplID0gKCpzaXplKSA/ICgyICogKCpzaXplKSkgOiA0Owot KwkJKmFycmF5ID0gZ19yZW5ldyAoZ2NoYXIqLCAqYXJyYXksICgqc2l6ZSkgKyAxKTsKLSsJfQot KwkoKmFycmF5KVsoKmxlbmd0aCkrK10gPSB2YWx1ZTsKLSsJKCphcnJheSlbKmxlbmd0aF0gPSBO VUxMOwotK30KLSsKLSsKLStzdGF0aWMgZ2NoYXIqIHN0cmluZ19zbGljZSAoY29uc3QgZ2NoYXIq IHNlbGYsIGdsb25nIHN0YXJ0LCBnbG9uZyBlbmQpIHsKLSsJZ2NoYXIqIHJlc3VsdCA9IE5VTEw7 Ci0rCWdpbnQgX3RtcDBfOwotKwlnaW50IF90bXAxXzsKLSsJZ2xvbmcgc3RyaW5nX2xlbmd0aDsK LSsJZ2xvbmcgX3RtcDJfOwotKwlnbG9uZyBfdG1wNV87Ci0rCWdib29sZWFuIF90bXA4XyA9IEZB TFNFOwotKwlnbG9uZyBfdG1wOV87Ci0rCWdib29sZWFuIF90bXAxMl87Ci0rCWdib29sZWFuIF90 bXAxM18gPSBGQUxTRTsKLSsJZ2xvbmcgX3RtcDE0XzsKLSsJZ2Jvb2xlYW4gX3RtcDE3XzsKLSsJ Z2xvbmcgX3RtcDE4XzsKLSsJZ2xvbmcgX3RtcDE5XzsKLSsJZ2xvbmcgX3RtcDIwXzsKLSsJZ2xv bmcgX3RtcDIxXzsKLSsJZ2xvbmcgX3RtcDIyXzsKLSsJZ2NoYXIqIF90bXAyM18gPSBOVUxMOwot KwlnX3JldHVybl92YWxfaWZfZmFpbCAoc2VsZiAhPSBOVUxMLCBOVUxMKTsKLSsJX3RtcDBfID0g c3RybGVuIChzZWxmKTsKLSsJX3RtcDFfID0gX3RtcDBfOwotKwlzdHJpbmdfbGVuZ3RoID0gKGds b25nKSBfdG1wMV87Ci0rCV90bXAyXyA9IHN0YXJ0OwotKwlpZiAoX3RtcDJfIDwgKChnbG9uZykg MCkpIHsKLSsJCWdsb25nIF90bXAzXzsKLSsJCWdsb25nIF90bXA0XzsKLSsJCV90bXAzXyA9IHN0 cmluZ19sZW5ndGg7Ci0rCQlfdG1wNF8gPSBzdGFydDsKLSsJCXN0YXJ0ID0gX3RtcDNfICsgX3Rt cDRfOwotKwl9Ci0rCV90bXA1XyA9IGVuZDsKLSsJaWYgKF90bXA1XyA8ICgoZ2xvbmcpIDApKSB7 Ci0rCQlnbG9uZyBfdG1wNl87Ci0rCQlnbG9uZyBfdG1wN187Ci0rCQlfdG1wNl8gPSBzdHJpbmdf bGVuZ3RoOwotKwkJX3RtcDdfID0gZW5kOwotKwkJZW5kID0gX3RtcDZfICsgX3RtcDdfOwotKwl9 Ci0rCV90bXA5XyA9IHN0YXJ0OwotKwlpZiAoX3RtcDlfID49ICgoZ2xvbmcpIDApKSB7Ci0rCQln bG9uZyBfdG1wMTBfOwotKwkJZ2xvbmcgX3RtcDExXzsKLSsJCV90bXAxMF8gPSBzdGFydDsKLSsJ CV90bXAxMV8gPSBzdHJpbmdfbGVuZ3RoOwotKwkJX3RtcDhfID0gX3RtcDEwXyA8PSBfdG1wMTFf OwotKwl9IGVsc2UgewotKwkJX3RtcDhfID0gRkFMU0U7Ci0rCX0KLSsJX3RtcDEyXyA9IF90bXA4 XzsKLSsJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKF90bXAxMl8sIE5VTEwpOwotKwlfdG1wMTRfID0g ZW5kOwotKwlpZiAoX3RtcDE0XyA+PSAoKGdsb25nKSAwKSkgewotKwkJZ2xvbmcgX3RtcDE1XzsK LSsJCWdsb25nIF90bXAxNl87Ci0rCQlfdG1wMTVfID0gZW5kOwotKwkJX3RtcDE2XyA9IHN0cmlu Z19sZW5ndGg7Ci0rCQlfdG1wMTNfID0gX3RtcDE1XyA8PSBfdG1wMTZfOwotKwl9IGVsc2Ugewot KwkJX3RtcDEzXyA9IEZBTFNFOwotKwl9Ci0rCV90bXAxN18gPSBfdG1wMTNfOwotKwlnX3JldHVy bl92YWxfaWZfZmFpbCAoX3RtcDE3XywgTlVMTCk7Ci0rCV90bXAxOF8gPSBzdGFydDsKLSsJX3Rt cDE5XyA9IGVuZDsKLSsJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKF90bXAxOF8gPD0gX3RtcDE5Xywg TlVMTCk7Ci0rCV90bXAyMF8gPSBzdGFydDsKLSsJX3RtcDIxXyA9IGVuZDsKLSsJX3RtcDIyXyA9 IHN0YXJ0OwotKwlfdG1wMjNfID0gZ19zdHJuZHVwICgoKGdjaGFyKikgc2VsZikgKyBfdG1wMjBf LCAoZ3NpemUpIChfdG1wMjFfIC0gX3RtcDIyXykpOwotKwlyZXN1bHQgPSBfdG1wMjNfOwotKwly ZXR1cm4gcmVzdWx0OwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxMSAo Z2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSkgewot KwlpZiAoKCpsZW5ndGgpID09ICgqc2l6ZSkpIHsKLSsJCSpzaXplID0gKCpzaXplKSA/ICgyICog KCpzaXplKSkgOiA0OwotKwkJKmFycmF5ID0gZ19yZW5ldyAoZ2NoYXIqLCAqYXJyYXksICgqc2l6 ZSkgKyAxKTsKLSsJfQotKwkoKmFycmF5KVsoKmxlbmd0aCkrK10gPSB2YWx1ZTsKLSsJKCphcnJh eSlbKmxlbmd0aF0gPSBOVUxMOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9h ZGQxMiAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1 ZSkgewotKwlpZiAoKCpsZW5ndGgpID09ICgqc2l6ZSkpIHsKLSsJCSpzaXplID0gKCpzaXplKSA/ ICgyICogKCpzaXplKSkgOiA0OwotKwkJKmFycmF5ID0gZ19yZW5ldyAoZ2NoYXIqLCAqYXJyYXks ICgqc2l6ZSkgKyAxKTsKLSsJfQotKwkoKmFycmF5KVsoKmxlbmd0aCkrK10gPSB2YWx1ZTsKLSsJ KCphcnJheSlbKmxlbmd0aF0gPSBOVUxMOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfX19fbGFt YmRhMjZfIChQYW5lbCogc2VsZiwgR2RrRXZlbnQqIGUpIHsKLSsJR2RrRXZlbnQqIF90bXAwXzsK LSsJZ19yZXR1cm5faWZfZmFpbCAoZSAhPSBOVUxMKTsKLSsJX3RtcDBfID0gZTsKLSsJcGFuZWxf aGFuZGxlX2VuZ2luZV9zd2l0Y2ggKHNlbGYsIF90bXAwXywgRkFMU0UpOwotK30KLSsKLSsKLStz dGF0aWMgdm9pZCBfX19fX2xhbWJkYTI2X19rZXliaW5kaW5nX21hbmFnZXJfa2V5YmluZGluZ19o YW5kbGVyX2Z1bmMgKEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgc2VsZikgewotKwlfX19fbGFt YmRhMjZfIChzZWxmLCBldmVudCk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF9fX19fbGFtYmRh MjdfIChQYW5lbCogc2VsZiwgR2RrRXZlbnQqIGUpIHsKLSsJR2RrRXZlbnQqIF90bXAwXzsKLSsJ Z19yZXR1cm5faWZfZmFpbCAoZSAhPSBOVUxMKTsKLSsJX3RtcDBfID0gZTsKLSsJcGFuZWxfaGFu ZGxlX2VuZ2luZV9zd2l0Y2ggKHNlbGYsIF90bXAwXywgVFJVRSk7Ci0rfQotKwotKwotK3N0YXRp YyB2b2lkIF9fX19fX2xhbWJkYTI3X19rZXliaW5kaW5nX21hbmFnZXJfa2V5YmluZGluZ19oYW5k bGVyX2Z1bmMgKEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgc2VsZikgewotKwlfX19fX2xhbWJk YTI3XyAoc2VsZiwgZXZlbnQpOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBwYW5lbF9zZXRfa2V5 YmluZGluZyAoUGFuZWwqIHNlbGYpIHsKLSsJY29uc3QgZ2NoYXIqIF90bXAwXyA9IE5VTEw7Ci0r CWdjaGFyKiBfdG1wMV87Ci0rCWdjaGFyKiBsb2NhbGU7Ci0rCWNvbnN0IGdjaGFyKiBfdG1wMl87 Ci0rCWdjaGFyKiogX3RtcDRfOwotKwlnaW50IF90bXA0X19sZW5ndGgxOwotKwlnY2hhciogX3Rt cDVfOwotKwlJQnVzQ29uZmlnKiBfdG1wNl87Ci0rCWdib29sZWFuIF90bXAyM18gPSBGQUxTRTsK LSsJZ2NoYXIqKiBfdG1wMjRfOwotKwlnaW50IF90bXAyNF9fbGVuZ3RoMTsKLSsJZ2Jvb2xlYW4g X3RtcDI3XzsKLSsJS2V5YmluZGluZ01hbmFnZXIqIF90bXAzNl8gPSBOVUxMOwotKwlLZXliaW5k aW5nTWFuYWdlcioga2V5YmluZGluZ19tYW5hZ2VyOwotKwlnY2hhcioqIF90bXAzN187Ci0rCWdp bnQgX3RtcDM3X19sZW5ndGgxOwotKwlnX3JldHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOwot KwlfdG1wMF8gPSBzZXRsb2NhbGUgKExDX0FMTCwgTlVMTCk7Ci0rCV90bXAxXyA9IGdfc3RyZHVw IChfdG1wMF8pOwotKwlsb2NhbGUgPSBfdG1wMV87Ci0rCV90bXAyXyA9IGxvY2FsZTsKLSsJaWYg KF90bXAyXyA9PSBOVUxMKSB7Ci0rCQlnY2hhciogX3RtcDNfOwotKwkJX3RtcDNfID0gZ19zdHJk dXAgKCJDIik7Ci0rCQlfZ19mcmVlMCAobG9jYWxlKTsKLSsJCWxvY2FsZSA9IF90bXAzXzsKLSsJ fQotKwlfdG1wNF8gPSBzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZUzsKLSsJX3Rt cDRfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgx OwotKwlfdG1wNV8gPSBnX3N0cmR1cCAoUEFORUxfQUNDRUxFUkFUT1JfU1dJVENIX0lNRV9GT1JF V0FSRCk7Ci0rCV92YWxhX2FycmF5X2FkZDkgKCZzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVf SE9US0VZUywgJnNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDEsICZz ZWxmLT5wcml2LT5fQUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfc2l6ZV8sIF90bXA1Xyk7Ci0rCV90 bXA2XyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOwotKwlpZiAoX3RtcDZfICE9IE5VTEwpIHsKLSsJ CUlCdXNDb25maWcqIF90bXA3XzsKLSsJCUdWYXJpYW50KiBfdG1wOF8gPSBOVUxMOwotKwkJR1Zh cmlhbnQqIHZhcmlhbnQ7Ci0rCQlHVmFyaWFudCogX3RtcDlfOwotKwkJX3RtcDdfID0gc2VsZi0+ cHJpdi0+bV9jb25maWc7Ci0rCQlfdG1wOF8gPSBpYnVzX2NvbmZpZ19nZXRfdmFsdWUgKF90bXA3 XywgImdlbmVyYWwvaG90a2V5IiwgInRyaWdnZXJfYWNjZWwiKTsKLSsJCXZhcmlhbnQgPSBfdG1w OF87Ci0rCQlfdG1wOV8gPSB2YXJpYW50OwotKwkJaWYgKF90bXA5XyAhPSBOVUxMKSB7Ci0rCQkJ Z2NoYXIqKiBfdG1wMTBfID0gTlVMTDsKLSsJCQlfdG1wMTBfID0gZ19uZXcwIChnY2hhciosIDAg KyAxKTsKLSsJCQlzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZUyA9IChfdmFsYV9h cnJheV9mcmVlIChzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZUywgc2VsZi0+cHJp di0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2Zy ZWUpLCBOVUxMKTsKLSsJCQlzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZUyA9IF90 bXAxMF87Ci0rCQkJc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMSA9 IDA7Ci0rCQkJc2VsZi0+cHJpdi0+X0FDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX3NpemVfID0gc2Vs Zi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMTsKLSsJCQl7Ci0rCQkJCWdp bnQgaTsKLSsJCQkJaSA9IDA7Ci0rCQkJCXsKLSsJCQkJCWdib29sZWFuIF90bXAxMV87Ci0rCQkJ CQlfdG1wMTFfID0gVFJVRTsKLSsJCQkJCXdoaWxlIChUUlVFKSB7Ci0rCQkJCQkJZ2Jvb2xlYW4g X3RtcDEyXzsKLSsJCQkJCQlnaW50IF90bXAxNF87Ci0rCQkJCQkJR1ZhcmlhbnQqIF90bXAxNV87 Ci0rCQkJCQkJZ3NpemUgX3RtcDE2XyA9IDBVTDsKLSsJCQkJCQlnY2hhcioqIF90bXAxN187Ci0r CQkJCQkJZ2ludCBfdG1wMTdfX2xlbmd0aDE7Ci0rCQkJCQkJR1ZhcmlhbnQqIF90bXAxOF87Ci0r CQkJCQkJZ2ludCBfdG1wMTlfOwotKwkJCQkJCUdWYXJpYW50KiBfdG1wMjBfID0gTlVMTDsKLSsJ CQkJCQlHVmFyaWFudCogX3RtcDIxXzsKLSsJCQkJCQlnY2hhciogX3RtcDIyXyA9IE5VTEw7Ci0r CQkJCQkJX3RtcDEyXyA9IF90bXAxMV87Ci0rCQkJCQkJaWYgKCFfdG1wMTJfKSB7Ci0rCQkJCQkJ CWdpbnQgX3RtcDEzXzsKLSsJCQkJCQkJX3RtcDEzXyA9IGk7Ci0rCQkJCQkJCWkgPSBfdG1wMTNf ICsgMTsKLSsJCQkJCQl9Ci0rCQkJCQkJX3RtcDExXyA9IEZBTFNFOwotKwkJCQkJCV90bXAxNF8g PSBpOwotKwkJCQkJCV90bXAxNV8gPSB2YXJpYW50OwotKwkJCQkJCV90bXAxNl8gPSBnX3Zhcmlh bnRfbl9jaGlsZHJlbiAoX3RtcDE1Xyk7Ci0rCQkJCQkJaWYgKCEoKChnc2l6ZSkgX3RtcDE0Xykg PCBfdG1wMTZfKSkgewotKwkJCQkJCQlicmVhazsKLSsJCQkJCQl9Ci0rCQkJCQkJX3RtcDE3XyA9 IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTOwotKwkJCQkJCV90bXAxN19fbGVu Z3RoMSA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDE7Ci0rCQkJ CQkJX3RtcDE4XyA9IHZhcmlhbnQ7Ci0rCQkJCQkJX3RtcDE5XyA9IGk7Ci0rCQkJCQkJX3RtcDIw XyA9IGdfdmFyaWFudF9nZXRfY2hpbGRfdmFsdWUgKF90bXAxOF8sIChnc2l6ZSkgX3RtcDE5Xyk7 Ci0rCQkJCQkJX3RtcDIxXyA9IF90bXAyMF87Ci0rCQkJCQkJX3RtcDIyXyA9IGdfdmFyaWFudF9k dXBfc3RyaW5nIChfdG1wMjFfLCBOVUxMKTsKLSsJCQkJCQlfdmFsYV9hcnJheV9hZGQxMCAoJnNl bGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTLCAmc2VsZi0+cHJpdi0+QUNDRUxFUkFU T1JfSU1FX0hPVEtFWVNfbGVuZ3RoMSwgJnNlbGYtPnByaXYtPl9BQ0NFTEVSQVRPUl9JTUVfSE9U S0VZU19zaXplXywgX3RtcDIyXyk7Ci0rCQkJCQkJX2dfdmFyaWFudF91bnJlZjAgKF90bXAyMV8p OwotKwkJCQkJfQotKwkJCQl9Ci0rCQkJfQotKwkJfQotKwkJX2dfdmFyaWFudF91bnJlZjAgKHZh cmlhbnQpOwotKwl9Ci0rCV90bXAyNF8gPSBzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9U S0VZUzsKLSsJX3RtcDI0X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hP VEtFWVNfbGVuZ3RoMTsKLSsJaWYgKF90bXAyNF9fbGVuZ3RoMSA9PSAxKSB7Ci0rCQlnY2hhcioq IF90bXAyNV87Ci0rCQlnaW50IF90bXAyNV9fbGVuZ3RoMTsKLSsJCWNvbnN0IGdjaGFyKiBfdG1w MjZfOwotKwkJX3RtcDI1XyA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTOwot KwkJX3RtcDI1X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNf bGVuZ3RoMTsKLSsJCV90bXAyNl8gPSBfdG1wMjVfWzBdOwotKwkJX3RtcDIzXyA9IGdfc3RyY21w MCAoX3RtcDI2XywgUEFORUxfQUNDRUxFUkFUT1JfU1dJVENIX0lNRV9GT1JFV0FSRCkgPT0gMDsK LSsJfSBlbHNlIHsKLSsJCV90bXAyM18gPSBGQUxTRTsKLSsJfQotKwlfdG1wMjdfID0gX3RtcDIz XzsKLSsJaWYgKF90bXAyN18pIHsKLSsJCWNvbnN0IGdjaGFyKiBfdG1wMjhfOwotKwkJZ2NoYXIq IF90bXAyOV8gPSBOVUxMOwotKwkJZ2NoYXIqIF90bXAzMF87Ci0rCQlnYm9vbGVhbiBfdG1wMzFf OwotKwkJX3RtcDI4XyA9IGxvY2FsZTsKLSsJCV90bXAyOV8gPSBzdHJpbmdfc2xpY2UgKF90bXAy OF8sIChnbG9uZykgMCwgKGdsb25nKSAyKTsKLSsJCV90bXAzMF8gPSBfdG1wMjlfOwotKwkJX3Rt cDMxXyA9IGdfc3RyY21wMCAoX3RtcDMwXywgImtvIikgPT0gMDsKLSsJCV9nX2ZyZWUwIChfdG1w MzBfKTsKLSsJCWlmIChfdG1wMzFfKSB7Ci0rCQkJZ2NoYXIqKiBfdG1wMzJfOwotKwkJCWdpbnQg X3RtcDMyX19sZW5ndGgxOwotKwkJCWdjaGFyKiBfdG1wMzNfOwotKwkJCWdjaGFyKiogX3RtcDM0 XzsKLSsJCQlnaW50IF90bXAzNF9fbGVuZ3RoMTsKLSsJCQlnY2hhciogX3RtcDM1XzsKLSsJCQlf dG1wMzJfID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVM7Ci0rCQkJX3RtcDMy X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMTsK LSsJCQlfdG1wMzNfID0gZ19zdHJkdXAgKCJIYW5ndWwiKTsKLSsJCQlfdmFsYV9hcnJheV9hZGQx MSAoJnNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTLCAmc2VsZi0+cHJpdi0+QUND RUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMSwgJnNlbGYtPnByaXYtPl9BQ0NFTEVSQVRPUl9J TUVfSE9US0VZU19zaXplXywgX3RtcDMzXyk7Ci0rCQkJX3RtcDM0XyA9IHNlbGYtPnByaXYtPkFD Q0VMRVJBVE9SX0lNRV9IT1RLRVlTOwotKwkJCV90bXAzNF9fbGVuZ3RoMSA9IHNlbGYtPnByaXYt PkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDE7Ci0rCQkJX3RtcDM1XyA9IGdfc3RyZHVw ICgiQWx0X1IiKTsKLSsJCQlfdmFsYV9hcnJheV9hZGQxMiAoJnNlbGYtPnByaXYtPkFDQ0VMRVJB VE9SX0lNRV9IT1RLRVlTLCAmc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVu Z3RoMSwgJnNlbGYtPnByaXYtPl9BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19zaXplXywgX3RtcDM1 Xyk7Ci0rCQl9Ci0rCX0KLSsJX3RtcDM2XyA9IGtleWJpbmRpbmdfbWFuYWdlcl9nZXRfaW5zdGFu Y2UgKCk7Ci0rCWtleWJpbmRpbmdfbWFuYWdlciA9IF90bXAzNl87Ci0rCV90bXAzN18gPSBzZWxm LT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZUzsKLSsJX3RtcDM3X19sZW5ndGgxID0gc2Vs Zi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMTsKLSsJewotKwkJZ2NoYXIq KiBrZXliaW5kaW5nX2NvbGxlY3Rpb24gPSBOVUxMOwotKwkJZ2ludCBrZXliaW5kaW5nX2NvbGxl Y3Rpb25fbGVuZ3RoMSA9IDA7Ci0rCQlnaW50IF9rZXliaW5kaW5nX2NvbGxlY3Rpb25fc2l6ZV8g PSAwOwotKwkJZ2ludCBrZXliaW5kaW5nX2l0ID0gMDsKLSsJCWtleWJpbmRpbmdfY29sbGVjdGlv biA9IF90bXAzN187Ci0rCQlrZXliaW5kaW5nX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IF90bXAzN19f bGVuZ3RoMTsKLSsJCWZvciAoa2V5YmluZGluZ19pdCA9IDA7IGtleWJpbmRpbmdfaXQgPCBfdG1w MzdfX2xlbmd0aDE7IGtleWJpbmRpbmdfaXQgPSBrZXliaW5kaW5nX2l0ICsgMSkgewotKwkJCWdj aGFyKiBfdG1wMzhfOwotKwkJCWdjaGFyKiBrZXliaW5kaW5nID0gTlVMTDsKLSsJCQlfdG1wMzhf ID0gZ19zdHJkdXAgKGtleWJpbmRpbmdfY29sbGVjdGlvbltrZXliaW5kaW5nX2l0XSk7Ci0rCQkJ a2V5YmluZGluZyA9IF90bXAzOF87Ci0rCQkJewotKwkJCQlLZXliaW5kaW5nTWFuYWdlciogX3Rt cDM5XzsKLSsJCQkJY29uc3QgZ2NoYXIqIF90bXA0MF87Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1w NDFfOwotKwkJCQlfdG1wMzlfID0ga2V5YmluZGluZ19tYW5hZ2VyOwotKwkJCQlfdG1wNDBfID0g a2V5YmluZGluZzsKLSsJCQkJa2V5YmluZGluZ19tYW5hZ2VyX2JpbmQgKF90bXAzOV8sIF90bXA0 MF8sIF9fX19fbGFtYmRhMjZfX2tleWJpbmRpbmdfbWFuYWdlcl9rZXliaW5kaW5nX2hhbmRsZXJf ZnVuYywgc2VsZik7Ci0rCQkJCV90bXA0MV8gPSBrZXliaW5kaW5nOwotKwkJCQlpZiAoZ19zdHJj bXAwIChfdG1wNDFfLCBQQU5FTF9BQ0NFTEVSQVRPUl9TV0lUQ0hfSU1FX0ZPUkVXQVJEKSA9PSAw KSB7Ci0rCQkJCQlLZXliaW5kaW5nTWFuYWdlciogX3RtcDQyXzsKLSsJCQkJCV90bXA0Ml8gPSBr ZXliaW5kaW5nX21hbmFnZXI7Ci0rCQkJCQlrZXliaW5kaW5nX21hbmFnZXJfYmluZCAoX3RtcDQy XywgUEFORUxfQUNDRUxFUkFUT1JfU1dJVENIX0lNRV9CQUNLV0FSRCwgX19fX19fbGFtYmRhMjdf X2tleWJpbmRpbmdfbWFuYWdlcl9rZXliaW5kaW5nX2hhbmRsZXJfZnVuYywgc2VsZik7Ci0rCQkJ CX0KLSsJCQkJX2dfZnJlZTAgKGtleWJpbmRpbmcpOwotKwkJCX0KLSsJCX0KLSsJfQotKwlfZ19v YmplY3RfdW5yZWYwIChrZXliaW5kaW5nX21hbmFnZXIpOwotKwlfZ19mcmVlMCAobG9jYWxlKTsK LSt9Ci0rCi0rCi0gc3RhdGljIHZvaWQgX3BhbmVsX2NvbmZpZ192YWx1ZV9jaGFuZ2VkX2NiX2li dXNfY29uZmlnX3ZhbHVlX2NoYW5nZWQgKElCdXNDb25maWcqIF9zZW5kZXIsIGNvbnN0IGdjaGFy KiBzZWN0aW9uLCBjb25zdCBnY2hhciogbmFtZSwgR1ZhcmlhbnQqIHZhbHVlLCBncG9pbnRlciBz ZWxmKSB7Ci0gCXBhbmVsX2NvbmZpZ192YWx1ZV9jaGFuZ2VkX2NiIChzZWxmLCBfc2VuZGVyLCBz ZWN0aW9uLCBuYW1lLCB2YWx1ZSk7Ci0gfQotQEAgLTQyNCw2ICs3OTYsNyBAQCB2b2lkIHBhbmVs X3NldF9jb25maWcgKFBhbmVsKiBzZWxmLCBJQnVzCi0gCV90bXA0XyA9IF9nX29iamVjdF9yZWYw IChfdG1wM18pOwotIAlfZ19vYmplY3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX2NvbmZpZyk7Ci0g CXNlbGYtPnByaXYtPm1fY29uZmlnID0gX3RtcDRfOwotKwlwYW5lbF9zZXRfa2V5YmluZGluZyAo c2VsZik7Ci0gCV90bXA1XyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOwotIAlpZiAoX3RtcDVfICE9 IE5VTEwpIHsKLSAJCUlCdXNDb25maWcqIF90bXA2XzsKLUBAIC00MzUsNiArODA4LDcgQEAgdm9p ZCBwYW5lbF9zZXRfY29uZmlnIChQYW5lbCogc2VsZiwgSUJ1cwotIAkJR1ZhcmlhbnQqIF90bXAx Ml87Ci0gCQlfdG1wNl8gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsKLSAJCWdfc2lnbmFsX2Nvbm5l Y3Rfb2JqZWN0IChfdG1wNl8sICJ2YWx1ZS1jaGFuZ2VkIiwgKEdDYWxsYmFjaykgX3BhbmVsX2Nv bmZpZ192YWx1ZV9jaGFuZ2VkX2NiX2lidXNfY29uZmlnX3ZhbHVlX2NoYW5nZWQsIHNlbGYsIDAp OwotKwkJcGFuZWxfaW5pdF9lbmdpbmVzX29yZGVyIChzZWxmKTsKLSAJCV90bXA3XyA9IHNlbGYt PnByaXYtPm1fY29uZmlnOwotIAkJX3RtcDhfID0gaWJ1c19jb25maWdfZ2V0X3ZhbHVlIChfdG1w N18sICJnZW5lcmFsIiwgInByZWxvYWRfZW5naW5lcyIpOwotIAkJX3RtcDlfID0gX3RtcDhfOwot QEAgLTQ1MCw3ICs4MjQsNzg2IEBAIHZvaWQgcGFuZWxfc2V0X2NvbmZpZyAoUGFuZWwqIHNlbGYs IElCdXMKLSB9Ci0gCi0gCi0tc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkOSAoZ2NoYXIqKiog YXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSkgewotK3N0YXRpYyB2 b2lkIHBhbmVsX2drYmRsYXlvdXRfY2hhbmdlZF9jYiAoUGFuZWwqIHNlbGYpIHsKLSsJR1RpbWVy KiBfdG1wMF87Ci0rCWdkb3VibGUgX3RtcDFfID0gMC4wOwotKwlnZG91YmxlIGVsYXBzZWQ7Ci0r CWdib29sZWFuIF90bXAyXyA9IEZBTFNFOwotKwlnZG91YmxlIF90bXAzXzsKLSsJZ2Jvb2xlYW4g X3RtcDVfOwotKwlnaW50IF90bXA2XzsKLSsJR1RpbWVyKiBfdG1wMTBfOwotKwlnX3JldHVybl9p Zl9mYWlsIChzZWxmICE9IE5VTEwpOwotKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX2NoYW5nZWRf bGF5b3V0X3RpbWVyOwotKwlfdG1wMV8gPSBnX3RpbWVyX2VsYXBzZWQgKF90bXAwXywgTlVMTCk7 Ci0rCWVsYXBzZWQgPSBfdG1wMV87Ci0rCV90bXAzXyA9IGVsYXBzZWQ7Ci0rCWlmIChfdG1wM18g PCAxLjApIHsKLSsJCWdkb3VibGUgX3RtcDRfOwotKwkJX3RtcDRfID0gZWxhcHNlZDsKLSsJCV90 bXAyXyA9IF90bXA0XyA+IDAuMDsKLSsJfSBlbHNlIHsKLSsJCV90bXAyXyA9IEZBTFNFOwotKwl9 Ci0rCV90bXA1XyA9IF90bXAyXzsKLSsJaWYgKF90bXA1XykgewotKwkJcmV0dXJuOwotKwl9Ci0r CV90bXA2XyA9IHNlbGYtPnByaXYtPm1fZmFsbGJhY2tfbG9ja19pZDsKLSsJaWYgKF90bXA2XyAh PSAoLTEpKSB7Ci0rCQlHa2JkTGF5b3V0KiBfdG1wN187Ci0rCQlnaW50IF90bXA4XzsKLSsJCV90 bXA3XyA9IHNlbGYtPnByaXYtPm1fZ2tiZGxheW91dDsKLSsJCV90bXA4XyA9IHNlbGYtPnByaXYt Pm1fZmFsbGJhY2tfbG9ja19pZDsKLSsJCWdrYmRfbGF5b3V0X2xvY2tfZ3JvdXAgKF90bXA3Xywg X3RtcDhfKTsKLSsJCXNlbGYtPnByaXYtPm1fZmFsbGJhY2tfbG9ja19pZCA9IC0xOwotKwl9IGVs c2UgewotKwkJWEtCTGF5b3V0KiBfdG1wOV87Ci0rCQlfdG1wOV8gPSBzZWxmLT5wcml2LT5tX3hr YmxheW91dDsKLSsJCXhrYl9sYXlvdXRfcmVzZXRfbGF5b3V0IChfdG1wOV8pOwotKwl9Ci0rCXBh bmVsX3VwZGF0ZV94a2JfZW5naW5lcyAoc2VsZik7Ci0rCV90bXAxMF8gPSBzZWxmLT5wcml2LT5t X2NoYW5nZWRfbGF5b3V0X3RpbWVyOwotKwlnX3RpbWVyX3Jlc2V0IChfdG1wMTBfKTsKLSt9Ci0r Ci0rCi0rc3RhdGljIHZvaWQgcGFuZWxfaW5pdF9na2JkIChQYW5lbCogc2VsZikgewotKwlHa2Jk TGF5b3V0KiBfdG1wMF87Ci0rCUdrYmRMYXlvdXQqIF90bXAxXzsKLSsJR1RpbWVyKiBfdG1wMl87 Ci0rCUdUaW1lciogX3RtcDNfOwotKwlHa2JkTGF5b3V0KiBfdG1wNF87Ci0rCWdfcmV0dXJuX2lm X2ZhaWwgKHNlbGYgIT0gTlVMTCk7Ci0rCV90bXAwXyA9IGdrYmRfbGF5b3V0X25ldyAoKTsKLSsJ X2drYmRfbGF5b3V0X3VucmVmMCAoc2VsZi0+cHJpdi0+bV9na2JkbGF5b3V0KTsKLSsJc2VsZi0+ cHJpdi0+bV9na2JkbGF5b3V0ID0gX3RtcDBfOwotKwlfdG1wMV8gPSBzZWxmLT5wcml2LT5tX2dr YmRsYXlvdXQ7Ci0rCWdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0IChfdG1wMV8sICJjaGFuZ2VkIiwg KEdDYWxsYmFjaykgX3BhbmVsX2drYmRsYXlvdXRfY2hhbmdlZF9jYl9na2JkX2xheW91dF9jaGFu Z2VkLCBzZWxmLCAwKTsKLSsJX3RtcDJfID0gZ190aW1lcl9uZXcgKCk7Ci0rCV9nX3RpbWVyX2Rl c3Ryb3kwIChzZWxmLT5wcml2LT5tX2NoYW5nZWRfbGF5b3V0X3RpbWVyKTsKLSsJc2VsZi0+cHJp di0+bV9jaGFuZ2VkX2xheW91dF90aW1lciA9IF90bXAyXzsKLSsJX3RtcDNfID0gc2VsZi0+cHJp di0+bV9jaGFuZ2VkX2xheW91dF90aW1lcjsKLSsJZ190aW1lcl9zdGFydCAoX3RtcDNfKTsKLSsJ X3RtcDRfID0gc2VsZi0+cHJpdi0+bV9na2JkbGF5b3V0OwotKwlna2JkX2xheW91dF9zdGFydF9s aXN0ZW4gKF90bXA0Xyk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX2luaXRfZW5naW5l c19vcmRlciAoUGFuZWwqIHNlbGYpIHsKLSsJSUJ1c0NvbmZpZyogX3RtcDBfOwotKwlJQnVzQ29u ZmlnKiBfdG1wMV87Ci0rCVhLQkxheW91dCogX3RtcDJfOwotKwlnX3JldHVybl9pZl9mYWlsIChz ZWxmICE9IE5VTEwpOwotKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsKLSsJaWYgKF90 bXAwXyA9PSBOVUxMKSB7Ci0rCQlyZXR1cm47Ci0rCX0KLSsJX3RtcDFfID0gc2VsZi0+cHJpdi0+ bV9jb25maWc7Ci0rCV90bXAyXyA9IHhrYl9sYXlvdXRfbmV3IChfdG1wMV8pOwotKwlfeGtiX2xh eW91dF91bnJlZjAgKHNlbGYtPnByaXYtPm1feGtibGF5b3V0KTsKLSsJc2VsZi0+cHJpdi0+bV94 a2JsYXlvdXQgPSBfdG1wMl87Ci0rCWlmIChIQVZFX0lCVVNfR0tCRCkgewotKwkJcGFuZWxfaW5p dF9na2JkIChzZWxmKTsKLSsJfQotKwlwYW5lbF91cGRhdGVfeGtiX2VuZ2luZXMgKHNlbGYpOwot K30KLSsKLSsKLStzdGF0aWMgdm9pZCBfZ19mcmVlMF8gKGdwb2ludGVyIHZhcikgewotKwl2YXIg PSAoZ19mcmVlICh2YXIpLCBOVUxMKTsKLSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgX2dfbGlzdF9m cmVlX19nX2ZyZWUwXyAoR0xpc3QqIHNlbGYpIHsKLSsJZ19saXN0X2ZvcmVhY2ggKHNlbGYsIChH RnVuYykgX2dfZnJlZTBfLCBOVUxMKTsKLSsJZ19saXN0X2ZyZWUgKHNlbGYpOwotK30KLSsKLSsK LStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxMyAoZ2NoYXIqKiogYXJyYXksIGludCogbGVu Z3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSkgewotKwlpZiAoKCpsZW5ndGgpID09ICgqc2l6 ZSkpIHsKLSsJCSpzaXplID0gKCpzaXplKSA/ICgyICogKCpzaXplKSkgOiA0OwotKwkJKmFycmF5 ID0gZ19yZW5ldyAoZ2NoYXIqLCAqYXJyYXksICgqc2l6ZSkgKyAxKTsKLSsJfQotKwkoKmFycmF5 KVsoKmxlbmd0aCkrK10gPSB2YWx1ZTsKLSsJKCphcnJheSlbKmxlbmd0aF0gPSBOVUxMOwotK30K LSsKLSsKLStzdGF0aWMgZ2Jvb2xlYW4gX3ZhbGFfc3RyaW5nX2FycmF5X2NvbnRhaW5zIChnY2hh cioqIHN0YWNrLCBpbnQgc3RhY2tfbGVuZ3RoLCBnY2hhciogbmVlZGxlKSB7Ci0rCWludCBpOwot Kwlmb3IgKGkgPSAwOyBpIDwgc3RhY2tfbGVuZ3RoOyBpKyspIHsKLSsJCWlmIChnX3N0cmNtcDAg KHN0YWNrW2ldLCBuZWVkbGUpID09IDApIHsKLSsJCQlyZXR1cm4gVFJVRTsKLSsJCX0KLSsJfQot KwlyZXR1cm4gRkFMU0U7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDE0 IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7 Ci0rCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewotKwkJKnNpemUgPSAoKnNpemUpID8gKDIg KiAoKnNpemUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwgKCpz aXplKSArIDEpOwotKwl9Ci0rCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOwotKwkoKmFy cmF5KVsqbGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5 X2FkZDE1IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZh bHVlKSB7Ci0rCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewotKwkJKnNpemUgPSAoKnNpemUp ID8gKDIgKiAoKnNpemUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJh eSwgKCpzaXplKSArIDEpOwotKwl9Ci0rCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOwot KwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHBhbmVs X3VwZGF0ZV94a2JfZW5naW5lcyAoUGFuZWwqIHNlbGYpIHsKLSsJWEtCTGF5b3V0KiBfdG1wMF87 Ci0rCWdjaGFyKiBfdG1wMV8gPSBOVUxMOwotKwlnY2hhciogdmFyX2xheW91dDsKLSsJWEtCTGF5 b3V0KiBfdG1wMl87Ci0rCWdjaGFyKiBfdG1wM18gPSBOVUxMOwotKwlnY2hhciogdmFyX3Zhcmlh bnQ7Ci0rCWNvbnN0IGdjaGFyKiBfdG1wNF87Ci0rCWNvbnN0IGdjaGFyKiBfdG1wNV87Ci0rCWdj aGFyKiogX3RtcDZfOwotKwlnY2hhcioqIF90bXA3XyA9IE5VTEw7Ci0rCWNvbnN0IGdjaGFyKiBf dG1wOF87Ci0rCWdjaGFyKiogX3RtcDlfOwotKwlnY2hhcioqIF90bXAxMF8gPSBOVUxMOwotKwlJ QnVzWEtCQ29uZmlnUmVnaXN0cnkqIF90bXAxMV87Ci0rCUlCdXNYS0JDb25maWdSZWdpc3RyeSog X3RtcDEyXzsKLSsJSUJ1c1hLQkNvbmZpZ1JlZ2lzdHJ5KiByZWdpc3RyeTsKLSsJZ2NoYXIqKiBf dG1wMTNfID0gTlVMTDsKLSsJZ2NoYXIqKiB2YXJfeGtiX2VuZ2luZV9uYW1lczsKLSsJZ2ludCB2 YXJfeGtiX2VuZ2luZV9uYW1lc19sZW5ndGgxOwotKwlnaW50IF92YXJfeGtiX2VuZ2luZV9uYW1l c19zaXplXzsKLSsJSUJ1c0NvbmZpZyogX3RtcDY1XzsKLSsJR1ZhcmlhbnQqIF90bXA2Nl8gPSBO VUxMOwotKwlHVmFyaWFudCogdmFyX2VuZ2luZXM7Ci0rCWdjaGFyKiogX3RtcDY3XyA9IE5VTEw7 Ci0rCWdjaGFyKiogZW5naW5lX25hbWVzOwotKwlnaW50IGVuZ2luZV9uYW1lc19sZW5ndGgxOwot KwlnaW50IF9lbmdpbmVfbmFtZXNfc2l6ZV87Ci0rCWdib29sZWFuIHVwZGF0ZWRfZW5naW5lX25h bWVzOwotKwlHVmFyaWFudCogX3RtcDY4XzsKLSsJZ2NoYXIqKiBfdG1wNzJfOwotKwlnaW50IF90 bXA3Ml9fbGVuZ3RoMTsKLSsJZ2Jvb2xlYW4gX3RtcDc5XzsKLSsJSUJ1c0NvbmZpZyogX3RtcDg0 XzsKLSsJR1ZhcmlhbnQqIF90bXA4NV8gPSBOVUxMOwotKwlHVmFyaWFudCogdmFyX29yZGVyOwot KwlnY2hhcioqIF90bXA4Nl8gPSBOVUxMOwotKwlnY2hhcioqIG9yZGVyX25hbWVzOwotKwlnaW50 IG9yZGVyX25hbWVzX2xlbmd0aDE7Ci0rCWdpbnQgX29yZGVyX25hbWVzX3NpemVfOwotKwlnYm9v bGVhbiB1cGRhdGVkX29yZGVyX25hbWVzOwotKwlHVmFyaWFudCogX3RtcDg3XzsKLSsJZ2NoYXIq KiBfdG1wOTFfOwotKwlnaW50IF90bXA5MV9fbGVuZ3RoMTsKLSsJZ2Jvb2xlYW4gX3RtcDk4XzsK LSsJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsKLSsJX3RtcDBfID0gc2VsZi0+cHJp di0+bV94a2JsYXlvdXQ7Ci0rCV90bXAxXyA9IHhrYl9sYXlvdXRfZ2V0X2xheW91dCAoX3RtcDBf KTsKLSsJdmFyX2xheW91dCA9IF90bXAxXzsKLSsJX3RtcDJfID0gc2VsZi0+cHJpdi0+bV94a2Js YXlvdXQ7Ci0rCV90bXAzXyA9IHhrYl9sYXlvdXRfZ2V0X3ZhcmlhbnQgKF90bXAyXyk7Ci0rCXZh cl92YXJpYW50ID0gX3RtcDNfOwotKwlfdG1wNF8gPSB2YXJfbGF5b3V0OwotKwlpZiAoZ19zdHJj bXAwIChfdG1wNF8sICIiKSA9PSAwKSB7Ci0rCQlfZ19mcmVlMCAodmFyX3ZhcmlhbnQpOwotKwkJ X2dfZnJlZTAgKHZhcl9sYXlvdXQpOwotKwkJcmV0dXJuOwotKwl9Ci0rCV90bXA1XyA9IHZhcl9s YXlvdXQ7Ci0rCV90bXA3XyA9IF90bXA2XyA9IGdfc3Ryc3BsaXQgKF90bXA1XywgIiwiLCAwKTsK LSsJc2VsZi0+cHJpdi0+bV9sYXlvdXRzID0gKF92YWxhX2FycmF5X2ZyZWUgKHNlbGYtPnByaXYt Pm1fbGF5b3V0cywgc2VsZi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlm eSkgZ19mcmVlKSwgTlVMTCk7Ci0rCXNlbGYtPnByaXYtPm1fbGF5b3V0cyA9IF90bXA3XzsKLSsJ c2VsZi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0aDEgPSBfdmFsYV9hcnJheV9sZW5ndGggKF90bXA2 Xyk7Ci0rCXNlbGYtPnByaXYtPl9tX2xheW91dHNfc2l6ZV8gPSBzZWxmLT5wcml2LT5tX2xheW91 dHNfbGVuZ3RoMTsKLSsJX3RtcDhfID0gdmFyX3ZhcmlhbnQ7Ci0rCV90bXAxMF8gPSBfdG1wOV8g PSBnX3N0cnNwbGl0IChfdG1wOF8sICIsIiwgMCk7Ci0rCXNlbGYtPnByaXYtPm1fdmFyaWFudHMg PSAoX3ZhbGFfYXJyYXlfZnJlZSAoc2VsZi0+cHJpdi0+bV92YXJpYW50cywgc2VsZi0+cHJpdi0+ bV92YXJpYW50c19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOwotKwlz ZWxmLT5wcml2LT5tX3ZhcmlhbnRzID0gX3RtcDEwXzsKLSsJc2VsZi0+cHJpdi0+bV92YXJpYW50 c19sZW5ndGgxID0gX3ZhbGFfYXJyYXlfbGVuZ3RoIChfdG1wOV8pOwotKwlzZWxmLT5wcml2LT5f bV92YXJpYW50c19zaXplXyA9IHNlbGYtPnByaXYtPm1fdmFyaWFudHNfbGVuZ3RoMTsKLSsJX3Rt cDExXyA9IGlidXNfeGtiX2NvbmZpZ19yZWdpc3RyeV9uZXcgKCk7Ci0rCV90bXAxMl8gPSBnX29i amVjdF9yZWZfc2luayAoX3RtcDExXyk7Ci0rCXJlZ2lzdHJ5ID0gX3RtcDEyXzsKLSsJX3RtcDEz XyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7Ci0rCXZhcl94a2JfZW5naW5lX25hbWVzID0gX3Rt cDEzXzsKLSsJdmFyX3hrYl9lbmdpbmVfbmFtZXNfbGVuZ3RoMSA9IDA7Ci0rCV92YXJfeGtiX2Vu Z2luZV9uYW1lc19zaXplXyA9IHZhcl94a2JfZW5naW5lX25hbWVzX2xlbmd0aDE7Ci0rCXsKLSsJ CWdpbnQgaTsKLSsJCWkgPSAwOwotKwkJewotKwkJCWdib29sZWFuIF90bXAxNF87Ci0rCQkJX3Rt cDE0XyA9IFRSVUU7Ci0rCQkJd2hpbGUgKFRSVUUpIHsKLSsJCQkJZ2Jvb2xlYW4gX3RtcDE1XzsK LSsJCQkJZ2ludCBfdG1wMTdfOwotKwkJCQlnY2hhcioqIF90bXAxOF87Ci0rCQkJCWdpbnQgX3Rt cDE4X19sZW5ndGgxOwotKwkJCQlnY2hhcioqIF90bXAxOV87Ci0rCQkJCWdpbnQgX3RtcDE5X19s ZW5ndGgxOwotKwkJCQlnaW50IF90bXAyMF87Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wMjFfOwot KwkJCQlnY2hhciogX3RtcDIyXzsKLSsJCQkJZ2NoYXIqIG5hbWU7Ci0rCQkJCWdjaGFyKiBsYW5n OwotKwkJCQlnYm9vbGVhbiBfdG1wMjNfID0gRkFMU0U7Ci0rCQkJCWdpbnQgX3RtcDI0XzsKLSsJ CQkJZ2NoYXIqKiBfdG1wMjVfOwotKwkJCQlnaW50IF90bXAyNV9fbGVuZ3RoMTsKLSsJCQkJZ2Jv b2xlYW4gX3RtcDI5XzsKLSsJCQkJY29uc3QgZ2NoYXIqIF90bXA1MF87Ci0rCQkJCWdjaGFyKiog X3RtcDYxXzsKLSsJCQkJZ2ludCBfdG1wNjFfX2xlbmd0aDE7Ci0rCQkJCWNvbnN0IGdjaGFyKiBf dG1wNjJfOwotKwkJCQljb25zdCBnY2hhciogX3RtcDYzXzsKLSsJCQkJZ2NoYXIqIF90bXA2NF8g PSBOVUxMOwotKwkJCQlfdG1wMTVfID0gX3RtcDE0XzsKLSsJCQkJaWYgKCFfdG1wMTVfKSB7Ci0r CQkJCQlnaW50IF90bXAxNl87Ci0rCQkJCQlfdG1wMTZfID0gaTsKLSsJCQkJCWkgPSBfdG1wMTZf ICsgMTsKLSsJCQkJfQotKwkJCQlfdG1wMTRfID0gRkFMU0U7Ci0rCQkJCV90bXAxN18gPSBpOwot KwkJCQlfdG1wMThfID0gc2VsZi0+cHJpdi0+bV9sYXlvdXRzOwotKwkJCQlfdG1wMThfX2xlbmd0 aDEgPSBzZWxmLT5wcml2LT5tX2xheW91dHNfbGVuZ3RoMTsKLSsJCQkJaWYgKCEoX3RtcDE3XyA8 IF90bXAxOF9fbGVuZ3RoMSkpIHsKLSsJCQkJCWJyZWFrOwotKwkJCQl9Ci0rCQkJCV90bXAxOV8g PSBzZWxmLT5wcml2LT5tX2xheW91dHM7Ci0rCQkJCV90bXAxOV9fbGVuZ3RoMSA9IHNlbGYtPnBy aXYtPm1fbGF5b3V0c19sZW5ndGgxOwotKwkJCQlfdG1wMjBfID0gaTsKLSsJCQkJX3RtcDIxXyA9 IF90bXAxOV9bX3RtcDIwX107Ci0rCQkJCV90bXAyMl8gPSBnX3N0cmR1cCAoX3RtcDIxXyk7Ci0r CQkJCW5hbWUgPSBfdG1wMjJfOwotKwkJCQlsYW5nID0gTlVMTDsKLSsJCQkJX3RtcDI0XyA9IGk7 Ci0rCQkJCV90bXAyNV8gPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzOwotKwkJCQlfdG1wMjVfX2xl bmd0aDEgPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDE7Ci0rCQkJCWlmIChfdG1wMjRf IDwgX3RtcDI1X19sZW5ndGgxKSB7Ci0rCQkJCQlnY2hhcioqIF90bXAyNl87Ci0rCQkJCQlnaW50 IF90bXAyNl9fbGVuZ3RoMTsKLSsJCQkJCWdpbnQgX3RtcDI3XzsKLSsJCQkJCWNvbnN0IGdjaGFy KiBfdG1wMjhfOwotKwkJCQkJX3RtcDI2XyA9IHNlbGYtPnByaXYtPm1fdmFyaWFudHM7Ci0rCQkJ CQlfdG1wMjZfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDE7Ci0rCQkJ CQlfdG1wMjdfID0gaTsKLSsJCQkJCV90bXAyOF8gPSBfdG1wMjZfW190bXAyN19dOwotKwkJCQkJ X3RtcDIzXyA9IGdfc3RyY21wMCAoX3RtcDI4XywgIiIpICE9IDA7Ci0rCQkJCX0gZWxzZSB7Ci0r CQkJCQlfdG1wMjNfID0gRkFMU0U7Ci0rCQkJCX0KLSsJCQkJX3RtcDI5XyA9IF90bXAyM187Ci0r CQkJCWlmIChfdG1wMjlfKSB7Ci0rCQkJCQljb25zdCBnY2hhciogX3RtcDMwXzsKLSsJCQkJCWdj aGFyKiogX3RtcDMxXzsKLSsJCQkJCWdpbnQgX3RtcDMxX19sZW5ndGgxOwotKwkJCQkJZ2ludCBf dG1wMzJfOwotKwkJCQkJY29uc3QgZ2NoYXIqIF90bXAzM187Ci0rCQkJCQlnY2hhciogX3RtcDM0 XyA9IE5VTEw7Ci0rCQkJCQljb25zdCBnY2hhciogX3RtcDM1XzsKLSsJCQkJCWdjaGFyKiogX3Rt cDM2XzsKLSsJCQkJCWdpbnQgX3RtcDM2X19sZW5ndGgxOwotKwkJCQkJZ2ludCBfdG1wMzdfOwot KwkJCQkJY29uc3QgZ2NoYXIqIF90bXAzOF87Ci0rCQkJCQlnY2hhciogX3RtcDM5XyA9IE5VTEw7 Ci0rCQkJCQlnY2hhciogbGF5b3V0OwotKwkJCQkJSUJ1c1hLQkNvbmZpZ1JlZ2lzdHJ5KiBfdG1w NDBfOwotKwkJCQkJY29uc3QgZ2NoYXIqIF90bXA0MV87Ci0rCQkJCQlHTGlzdCogX3RtcDQyXyA9 IE5VTEw7Ci0rCQkJCQlHTGlzdCogbGFuZ3M7Ci0rCQkJCQlHTGlzdCogX3RtcDQzXzsKLSsJCQkJ CWd1aW50IF90bXA0NF8gPSAwVTsKLSsJCQkJCV90bXAzMF8gPSBuYW1lOwotKwkJCQkJX3RtcDMx XyA9IHNlbGYtPnByaXYtPm1fdmFyaWFudHM7Ci0rCQkJCQlfdG1wMzFfX2xlbmd0aDEgPSBzZWxm LT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDE7Ci0rCQkJCQlfdG1wMzJfID0gaTsKLSsJCQkJCV90 bXAzM18gPSBfdG1wMzFfW190bXAzMl9dOwotKwkJCQkJX3RtcDM0XyA9IGdfc3RyZHVwX3ByaW50 ZiAoIiVzOiVzIiwgX3RtcDMwXywgX3RtcDMzXyk7Ci0rCQkJCQlfZ19mcmVlMCAobmFtZSk7Ci0r CQkJCQluYW1lID0gX3RtcDM0XzsKLSsJCQkJCV90bXAzNV8gPSBuYW1lOwotKwkJCQkJX3RtcDM2 XyA9IHNlbGYtPnByaXYtPm1fdmFyaWFudHM7Ci0rCQkJCQlfdG1wMzZfX2xlbmd0aDEgPSBzZWxm LT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDE7Ci0rCQkJCQlfdG1wMzdfID0gaTsKLSsJCQkJCV90 bXAzOF8gPSBfdG1wMzZfW190bXAzN19dOwotKwkJCQkJX3RtcDM5XyA9IGdfc3RyZHVwX3ByaW50 ZiAoIiVzKCVzKSIsIF90bXAzNV8sIF90bXAzOF8pOwotKwkJCQkJbGF5b3V0ID0gX3RtcDM5XzsK LSsJCQkJCV90bXA0MF8gPSByZWdpc3RyeTsKLSsJCQkJCV90bXA0MV8gPSBsYXlvdXQ7Ci0rCQkJ CQlfdG1wNDJfID0gaWJ1c194a2JfY29uZmlnX3JlZ2lzdHJ5X2xheW91dF9sYW5nX2dldF9sYW5n cyAoX3RtcDQwXywgX3RtcDQxXyk7Ci0rCQkJCQlsYW5ncyA9IF90bXA0Ml87Ci0rCQkJCQlfdG1w NDNfID0gbGFuZ3M7Ci0rCQkJCQlfdG1wNDRfID0gZ19saXN0X2xlbmd0aCAoX3RtcDQzXyk7Ci0r CQkJCQlpZiAoX3RtcDQ0XyAhPSAoKGd1aW50KSAwKSkgewotKwkJCQkJCUdMaXN0KiBfdG1wNDVf OwotKwkJCQkJCWdjb25zdHBvaW50ZXIgX3RtcDQ2XzsKLSsJCQkJCQlnY2hhciogX3RtcDQ3XzsK LSsJCQkJCQlfdG1wNDVfID0gbGFuZ3M7Ci0rCQkJCQkJX3RtcDQ2XyA9IF90bXA0NV8tPmRhdGE7 Ci0rCQkJCQkJX3RtcDQ3XyA9IGdfc3RyZHVwICgoY29uc3QgZ2NoYXIqKSBfdG1wNDZfKTsKLSsJ CQkJCQlfZ19mcmVlMCAobGFuZyk7Ci0rCQkJCQkJbGFuZyA9IF90bXA0N187Ci0rCQkJCQl9Ci0r CQkJCQlfX2dfbGlzdF9mcmVlX19nX2ZyZWUwXzAgKGxhbmdzKTsKLSsJCQkJCV9nX2ZyZWUwIChs YXlvdXQpOwotKwkJCQl9IGVsc2UgewotKwkJCQkJY29uc3QgZ2NoYXIqIF90bXA0OF87Ci0rCQkJ CQlnY2hhciogX3RtcDQ5XyA9IE5VTEw7Ci0rCQkJCQlfdG1wNDhfID0gbmFtZTsKLSsJCQkJCV90 bXA0OV8gPSBnX3N0cmR1cF9wcmludGYgKCIlczoiLCBfdG1wNDhfKTsKLSsJCQkJCV9nX2ZyZWUw IChuYW1lKTsKLSsJCQkJCW5hbWUgPSBfdG1wNDlfOwotKwkJCQl9Ci0rCQkJCV90bXA1MF8gPSBs YW5nOwotKwkJCQlpZiAoX3RtcDUwXyA9PSBOVUxMKSB7Ci0rCQkJCQlJQnVzWEtCQ29uZmlnUmVn aXN0cnkqIF90bXA1MV87Ci0rCQkJCQlnY2hhcioqIF90bXA1Ml87Ci0rCQkJCQlnaW50IF90bXA1 Ml9fbGVuZ3RoMTsKLSsJCQkJCWdpbnQgX3RtcDUzXzsKLSsJCQkJCWNvbnN0IGdjaGFyKiBfdG1w NTRfOwotKwkJCQkJR0xpc3QqIF90bXA1NV8gPSBOVUxMOwotKwkJCQkJR0xpc3QqIGxhbmdzOwot KwkJCQkJR0xpc3QqIF90bXA1Nl87Ci0rCQkJCQlndWludCBfdG1wNTdfID0gMFU7Ci0rCQkJCQlf dG1wNTFfID0gcmVnaXN0cnk7Ci0rCQkJCQlfdG1wNTJfID0gc2VsZi0+cHJpdi0+bV9sYXlvdXRz OwotKwkJCQkJX3RtcDUyX19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0aDE7 Ci0rCQkJCQlfdG1wNTNfID0gaTsKLSsJCQkJCV90bXA1NF8gPSBfdG1wNTJfW190bXA1M19dOwot KwkJCQkJX3RtcDU1XyA9IGlidXNfeGtiX2NvbmZpZ19yZWdpc3RyeV9sYXlvdXRfbGFuZ19nZXRf bGFuZ3MgKF90bXA1MV8sIF90bXA1NF8pOwotKwkJCQkJbGFuZ3MgPSBfdG1wNTVfOwotKwkJCQkJ X3RtcDU2XyA9IGxhbmdzOwotKwkJCQkJX3RtcDU3XyA9IGdfbGlzdF9sZW5ndGggKF90bXA1Nl8p OwotKwkJCQkJaWYgKF90bXA1N18gIT0gKChndWludCkgMCkpIHsKLSsJCQkJCQlHTGlzdCogX3Rt cDU4XzsKLSsJCQkJCQlnY29uc3Rwb2ludGVyIF90bXA1OV87Ci0rCQkJCQkJZ2NoYXIqIF90bXA2 MF87Ci0rCQkJCQkJX3RtcDU4XyA9IGxhbmdzOwotKwkJCQkJCV90bXA1OV8gPSBfdG1wNThfLT5k YXRhOwotKwkJCQkJCV90bXA2MF8gPSBnX3N0cmR1cCAoKGNvbnN0IGdjaGFyKikgX3RtcDU5Xyk7 Ci0rCQkJCQkJX2dfZnJlZTAgKGxhbmcpOwotKwkJCQkJCWxhbmcgPSBfdG1wNjBfOwotKwkJCQkJ fQotKwkJCQkJX19nX2xpc3RfZnJlZV9fZ19mcmVlMF8wIChsYW5ncyk7Ci0rCQkJCX0KLSsJCQkJ X3RtcDYxXyA9IHZhcl94a2JfZW5naW5lX25hbWVzOwotKwkJCQlfdG1wNjFfX2xlbmd0aDEgPSB2 YXJfeGtiX2VuZ2luZV9uYW1lc19sZW5ndGgxOwotKwkJCQlfdG1wNjJfID0gbmFtZTsKLSsJCQkJ X3RtcDYzXyA9IGxhbmc7Ci0rCQkJCV90bXA2NF8gPSBnX3N0cmR1cF9wcmludGYgKCIlczolczol cyIsICJ4a2IiLCBfdG1wNjJfLCBfdG1wNjNfKTsKLSsJCQkJX3ZhbGFfYXJyYXlfYWRkMTMgKCZ2 YXJfeGtiX2VuZ2luZV9uYW1lcywgJnZhcl94a2JfZW5naW5lX25hbWVzX2xlbmd0aDEsICZfdmFy X3hrYl9lbmdpbmVfbmFtZXNfc2l6ZV8sIF90bXA2NF8pOwotKwkJCQlfZ19mcmVlMCAobGFuZyk7 Ci0rCQkJCV9nX2ZyZWUwIChuYW1lKTsKLSsJCQl9Ci0rCQl9Ci0rCX0KLSsJX3RtcDY1XyA9IHNl bGYtPnByaXYtPm1fY29uZmlnOwotKwlfdG1wNjZfID0gaWJ1c19jb25maWdfZ2V0X3ZhbHVlIChf dG1wNjVfLCAiZ2VuZXJhbCIsICJwcmVsb2FkX2VuZ2luZXMiKTsKLSsJdmFyX2VuZ2luZXMgPSBf dG1wNjZfOwotKwlfdG1wNjdfID0gZ19uZXcwIChnY2hhciosIDAgKyAxKTsKLSsJZW5naW5lX25h bWVzID0gX3RtcDY3XzsKLSsJZW5naW5lX25hbWVzX2xlbmd0aDEgPSAwOwotKwlfZW5naW5lX25h bWVzX3NpemVfID0gZW5naW5lX25hbWVzX2xlbmd0aDE7Ci0rCXVwZGF0ZWRfZW5naW5lX25hbWVz ID0gRkFMU0U7Ci0rCV90bXA2OF8gPSB2YXJfZW5naW5lczsKLSsJaWYgKF90bXA2OF8gIT0gTlVM TCkgewotKwkJR1ZhcmlhbnQqIF90bXA2OV87Ci0rCQlzaXplX3QgX3RtcDcwXzsKLSsJCWdjaGFy KiogX3RtcDcxXyA9IE5VTEw7Ci0rCQlfdG1wNjlfID0gdmFyX2VuZ2luZXM7Ci0rCQlfdG1wNzFf ID0gZ192YXJpYW50X2R1cF9zdHJ2IChfdG1wNjlfLCAmX3RtcDcwXyk7Ci0rCQllbmdpbmVfbmFt ZXMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoZW5naW5lX25hbWVzLCBlbmdpbmVfbmFtZXNfbGVuZ3Ro MSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJCWVuZ2luZV9uYW1lcyA9IF90 bXA3MV87Ci0rCQllbmdpbmVfbmFtZXNfbGVuZ3RoMSA9IF90bXA3MF87Ci0rCQlfZW5naW5lX25h bWVzX3NpemVfID0gZW5naW5lX25hbWVzX2xlbmd0aDE7Ci0rCX0KLSsJX3RtcDcyXyA9IHZhcl94 a2JfZW5naW5lX25hbWVzOwotKwlfdG1wNzJfX2xlbmd0aDEgPSB2YXJfeGtiX2VuZ2luZV9uYW1l c19sZW5ndGgxOwotKwl7Ci0rCQlnY2hhcioqIG5hbWVfY29sbGVjdGlvbiA9IE5VTEw7Ci0rCQln aW50IG5hbWVfY29sbGVjdGlvbl9sZW5ndGgxID0gMDsKLSsJCWdpbnQgX25hbWVfY29sbGVjdGlv bl9zaXplXyA9IDA7Ci0rCQlnaW50IG5hbWVfaXQgPSAwOwotKwkJbmFtZV9jb2xsZWN0aW9uID0g X3RtcDcyXzsKLSsJCW5hbWVfY29sbGVjdGlvbl9sZW5ndGgxID0gX3RtcDcyX19sZW5ndGgxOwot KwkJZm9yIChuYW1lX2l0ID0gMDsgbmFtZV9pdCA8IF90bXA3Ml9fbGVuZ3RoMTsgbmFtZV9pdCA9 IG5hbWVfaXQgKyAxKSB7Ci0rCQkJZ2NoYXIqIF90bXA3M187Ci0rCQkJZ2NoYXIqIG5hbWUgPSBO VUxMOwotKwkJCV90bXA3M18gPSBnX3N0cmR1cCAobmFtZV9jb2xsZWN0aW9uW25hbWVfaXRdKTsK LSsJCQluYW1lID0gX3RtcDczXzsKLSsJCQl7Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wNzRfOwot KwkJCQlnY2hhcioqIF90bXA3NV87Ci0rCQkJCWdpbnQgX3RtcDc1X19sZW5ndGgxOwotKwkJCQln Y2hhcioqIF90bXA3Nl87Ci0rCQkJCWdpbnQgX3RtcDc2X19sZW5ndGgxOwotKwkJCQljb25zdCBn Y2hhciogX3RtcDc3XzsKLSsJCQkJZ2NoYXIqIF90bXA3OF87Ci0rCQkJCV90bXA3NF8gPSBuYW1l OwotKwkJCQlfdG1wNzVfID0gZW5naW5lX25hbWVzOwotKwkJCQlfdG1wNzVfX2xlbmd0aDEgPSBl bmdpbmVfbmFtZXNfbGVuZ3RoMTsKLSsJCQkJaWYgKF92YWxhX3N0cmluZ19hcnJheV9jb250YWlu cyAoX3RtcDc1XywgX3RtcDc1X19sZW5ndGgxLCBfdG1wNzRfKSkgewotKwkJCQkJX2dfZnJlZTAg KG5hbWUpOwotKwkJCQkJY29udGludWU7Ci0rCQkJCX0KLSsJCQkJdXBkYXRlZF9lbmdpbmVfbmFt ZXMgPSBUUlVFOwotKwkJCQlfdG1wNzZfID0gZW5naW5lX25hbWVzOwotKwkJCQlfdG1wNzZfX2xl bmd0aDEgPSBlbmdpbmVfbmFtZXNfbGVuZ3RoMTsKLSsJCQkJX3RtcDc3XyA9IG5hbWU7Ci0rCQkJ CV90bXA3OF8gPSBnX3N0cmR1cCAoX3RtcDc3Xyk7Ci0rCQkJCV92YWxhX2FycmF5X2FkZDE0ICgm ZW5naW5lX25hbWVzLCAmZW5naW5lX25hbWVzX2xlbmd0aDEsICZfZW5naW5lX25hbWVzX3NpemVf LCBfdG1wNzhfKTsKLSsJCQkJX2dfZnJlZTAgKG5hbWUpOwotKwkJCX0KLSsJCX0KLSsJfQotKwlf dG1wNzlfID0gdXBkYXRlZF9lbmdpbmVfbmFtZXM7Ci0rCWlmIChfdG1wNzlfKSB7Ci0rCQlJQnVz Q29uZmlnKiBfdG1wODBfOwotKwkJZ2NoYXIqKiBfdG1wODFfOwotKwkJZ2ludCBfdG1wODFfX2xl bmd0aDE7Ci0rCQlHVmFyaWFudCogX3RtcDgyXzsKLSsJCUdWYXJpYW50KiBfdG1wODNfOwotKwkJ X3RtcDgwXyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOwotKwkJX3RtcDgxXyA9IGVuZ2luZV9uYW1l czsKLSsJCV90bXA4MV9fbGVuZ3RoMSA9IGVuZ2luZV9uYW1lc19sZW5ndGgxOwotKwkJX3RtcDgy XyA9IGdfdmFyaWFudF9uZXdfc3RydiAoX3RtcDgxXywgX3RtcDgxX19sZW5ndGgxKTsKLSsJCV90 bXA4M18gPSBnX3ZhcmlhbnRfcmVmX3NpbmsgKF90bXA4Ml8pOwotKwkJaWJ1c19jb25maWdfc2V0 X3ZhbHVlIChfdG1wODBfLCAiZ2VuZXJhbCIsICJwcmVsb2FkX2VuZ2luZXMiLCBfdG1wODNfKTsK LSsJCV9nX3ZhcmlhbnRfdW5yZWYwIChfdG1wODNfKTsKLSsJfQotKwlfdG1wODRfID0gc2VsZi0+ cHJpdi0+bV9jb25maWc7Ci0rCV90bXA4NV8gPSBpYnVzX2NvbmZpZ19nZXRfdmFsdWUgKF90bXA4 NF8sICJnZW5lcmFsIiwgImVuZ2luZXNfb3JkZXIiKTsKLSsJdmFyX29yZGVyID0gX3RtcDg1XzsK LSsJX3RtcDg2XyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7Ci0rCW9yZGVyX25hbWVzID0gX3Rt cDg2XzsKLSsJb3JkZXJfbmFtZXNfbGVuZ3RoMSA9IDA7Ci0rCV9vcmRlcl9uYW1lc19zaXplXyA9 IG9yZGVyX25hbWVzX2xlbmd0aDE7Ci0rCXVwZGF0ZWRfb3JkZXJfbmFtZXMgPSBGQUxTRTsKLSsJ X3RtcDg3XyA9IHZhcl9vcmRlcjsKLSsJaWYgKF90bXA4N18gIT0gTlVMTCkgewotKwkJR1Zhcmlh bnQqIF90bXA4OF87Ci0rCQlzaXplX3QgX3RtcDg5XzsKLSsJCWdjaGFyKiogX3RtcDkwXyA9IE5V TEw7Ci0rCQlfdG1wODhfID0gdmFyX29yZGVyOwotKwkJX3RtcDkwXyA9IGdfdmFyaWFudF9kdXBf c3RydiAoX3RtcDg4XywgJl90bXA4OV8pOwotKwkJb3JkZXJfbmFtZXMgPSAoX3ZhbGFfYXJyYXlf ZnJlZSAob3JkZXJfbmFtZXMsIG9yZGVyX25hbWVzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkg Z19mcmVlKSwgTlVMTCk7Ci0rCQlvcmRlcl9uYW1lcyA9IF90bXA5MF87Ci0rCQlvcmRlcl9uYW1l c19sZW5ndGgxID0gX3RtcDg5XzsKLSsJCV9vcmRlcl9uYW1lc19zaXplXyA9IG9yZGVyX25hbWVz X2xlbmd0aDE7Ci0rCX0KLSsJX3RtcDkxXyA9IHZhcl94a2JfZW5naW5lX25hbWVzOwotKwlfdG1w OTFfX2xlbmd0aDEgPSB2YXJfeGtiX2VuZ2luZV9uYW1lc19sZW5ndGgxOwotKwl7Ci0rCQlnY2hh cioqIG5hbWVfY29sbGVjdGlvbiA9IE5VTEw7Ci0rCQlnaW50IG5hbWVfY29sbGVjdGlvbl9sZW5n dGgxID0gMDsKLSsJCWdpbnQgX25hbWVfY29sbGVjdGlvbl9zaXplXyA9IDA7Ci0rCQlnaW50IG5h bWVfaXQgPSAwOwotKwkJbmFtZV9jb2xsZWN0aW9uID0gX3RtcDkxXzsKLSsJCW5hbWVfY29sbGVj dGlvbl9sZW5ndGgxID0gX3RtcDkxX19sZW5ndGgxOwotKwkJZm9yIChuYW1lX2l0ID0gMDsgbmFt ZV9pdCA8IF90bXA5MV9fbGVuZ3RoMTsgbmFtZV9pdCA9IG5hbWVfaXQgKyAxKSB7Ci0rCQkJZ2No YXIqIF90bXA5Ml87Ci0rCQkJZ2NoYXIqIG5hbWUgPSBOVUxMOwotKwkJCV90bXA5Ml8gPSBnX3N0 cmR1cCAobmFtZV9jb2xsZWN0aW9uW25hbWVfaXRdKTsKLSsJCQluYW1lID0gX3RtcDkyXzsKLSsJ CQl7Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wOTNfOwotKwkJCQlnY2hhcioqIF90bXA5NF87Ci0r CQkJCWdpbnQgX3RtcDk0X19sZW5ndGgxOwotKwkJCQlnY2hhcioqIF90bXA5NV87Ci0rCQkJCWdp bnQgX3RtcDk1X19sZW5ndGgxOwotKwkJCQljb25zdCBnY2hhciogX3RtcDk2XzsKLSsJCQkJZ2No YXIqIF90bXA5N187Ci0rCQkJCV90bXA5M18gPSBuYW1lOwotKwkJCQlfdG1wOTRfID0gb3JkZXJf bmFtZXM7Ci0rCQkJCV90bXA5NF9fbGVuZ3RoMSA9IG9yZGVyX25hbWVzX2xlbmd0aDE7Ci0rCQkJ CWlmIChfdmFsYV9zdHJpbmdfYXJyYXlfY29udGFpbnMgKF90bXA5NF8sIF90bXA5NF9fbGVuZ3Ro MSwgX3RtcDkzXykpIHsKLSsJCQkJCV9nX2ZyZWUwIChuYW1lKTsKLSsJCQkJCWNvbnRpbnVlOwot KwkJCQl9Ci0rCQkJCV90bXA5NV8gPSBvcmRlcl9uYW1lczsKLSsJCQkJX3RtcDk1X19sZW5ndGgx ID0gb3JkZXJfbmFtZXNfbGVuZ3RoMTsKLSsJCQkJX3RtcDk2XyA9IG5hbWU7Ci0rCQkJCV90bXA5 N18gPSBnX3N0cmR1cCAoX3RtcDk2Xyk7Ci0rCQkJCV92YWxhX2FycmF5X2FkZDE1ICgmb3JkZXJf bmFtZXMsICZvcmRlcl9uYW1lc19sZW5ndGgxLCAmX29yZGVyX25hbWVzX3NpemVfLCBfdG1wOTdf KTsKLSsJCQkJdXBkYXRlZF9vcmRlcl9uYW1lcyA9IFRSVUU7Ci0rCQkJCV9nX2ZyZWUwIChuYW1l KTsKLSsJCQl9Ci0rCQl9Ci0rCX0KLSsJX3RtcDk4XyA9IHVwZGF0ZWRfb3JkZXJfbmFtZXM7Ci0r CWlmIChfdG1wOThfKSB7Ci0rCQlJQnVzQ29uZmlnKiBfdG1wOTlfOwotKwkJZ2NoYXIqKiBfdG1w MTAwXzsKLSsJCWdpbnQgX3RtcDEwMF9fbGVuZ3RoMTsKLSsJCUdWYXJpYW50KiBfdG1wMTAxXzsK LSsJCUdWYXJpYW50KiBfdG1wMTAyXzsKLSsJCV90bXA5OV8gPSBzZWxmLT5wcml2LT5tX2NvbmZp ZzsKLSsJCV90bXAxMDBfID0gb3JkZXJfbmFtZXM7Ci0rCQlfdG1wMTAwX19sZW5ndGgxID0gb3Jk ZXJfbmFtZXNfbGVuZ3RoMTsKLSsJCV90bXAxMDFfID0gZ192YXJpYW50X25ld19zdHJ2IChfdG1w MTAwXywgX3RtcDEwMF9fbGVuZ3RoMSk7Ci0rCQlfdG1wMTAyXyA9IGdfdmFyaWFudF9yZWZfc2lu ayAoX3RtcDEwMV8pOwotKwkJaWJ1c19jb25maWdfc2V0X3ZhbHVlIChfdG1wOTlfLCAiZ2VuZXJh bCIsICJlbmdpbmVzX29yZGVyIiwgX3RtcDEwMl8pOwotKwkJX2dfdmFyaWFudF91bnJlZjAgKF90 bXAxMDJfKTsKLSsJfQotKwlvcmRlcl9uYW1lcyA9IChfdmFsYV9hcnJheV9mcmVlIChvcmRlcl9u YW1lcywgb3JkZXJfbmFtZXNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxM KTsKLSsJX2dfdmFyaWFudF91bnJlZjAgKHZhcl9vcmRlcik7Ci0rCWVuZ2luZV9uYW1lcyA9IChf dmFsYV9hcnJheV9mcmVlIChlbmdpbmVfbmFtZXMsIGVuZ2luZV9uYW1lc19sZW5ndGgxLCAoR0Rl c3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOwotKwlfZ192YXJpYW50X3VucmVmMCAodmFyX2Vu Z2luZXMpOwotKwl2YXJfeGtiX2VuZ2luZV9uYW1lcyA9IChfdmFsYV9hcnJheV9mcmVlICh2YXJf eGtiX2VuZ2luZV9uYW1lcywgdmFyX3hrYl9lbmdpbmVfbmFtZXNfbGVuZ3RoMSwgKEdEZXN0cm95 Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJX2dfb2JqZWN0X3VucmVmMCAocmVnaXN0cnkpOwot KwlfZ19mcmVlMCAodmFyX3ZhcmlhbnQpOwotKwlfZ19mcmVlMCAodmFyX2xheW91dCk7Ci0rfQot KwotKwotK3N0YXRpYyB2b2lkIHBhbmVsX3NldF94a2JfZ3JvdXBfbGF5b3V0IChQYW5lbCogc2Vs ZiwgY29uc3QgZ2NoYXIqIGxheW91dCkgewotKwlYS0JMYXlvdXQqIF90bXAwXzsKLSsJY29uc3Qg Z2NoYXIqIF90bXAxXzsKLSsJZ2ludCBfdG1wMl8gPSAwOwotKwlnaW50KiBfdG1wM18gPSBOVUxM OwotKwlnaW50KiByZXR2YWw7Ci0rCWdpbnQgcmV0dmFsX2xlbmd0aDE7Ci0rCWdpbnQgX3JldHZh bF9zaXplXzsKLSsJZ2ludCogX3RtcDRfOwotKwlnaW50IF90bXA0X19sZW5ndGgxOwotKwlnaW50 IF90bXA1XzsKLSsJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsKLSsJZ19yZXR1cm5f aWZfZmFpbCAobGF5b3V0ICE9IE5VTEwpOwotKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX3hrYmxh eW91dDsKLSsJX3RtcDFfID0gbGF5b3V0OwotKwlfdG1wM18gPSB4a2JfbGF5b3V0X3NldF9sYXlv dXQgKF90bXAwXywgX3RtcDFfLCAiZGVmYXVsdCIsICJkZWZhdWx0IiwgJl90bXAyXyk7Ci0rCXJl dHZhbCA9IF90bXAzXzsKLSsJcmV0dmFsX2xlbmd0aDEgPSBfdG1wMl87Ci0rCV9yZXR2YWxfc2l6 ZV8gPSByZXR2YWxfbGVuZ3RoMTsKLSsJX3RtcDRfID0gcmV0dmFsOwotKwlfdG1wNF9fbGVuZ3Ro MSA9IHJldHZhbF9sZW5ndGgxOwotKwlfdG1wNV8gPSBfdG1wNF9bMF07Ci0rCWlmIChfdG1wNV8g Pj0gMCkgewotKwkJZ2ludCogX3RtcDZfOwotKwkJZ2ludCBfdG1wNl9fbGVuZ3RoMTsKLSsJCWdp bnQgX3RtcDdfOwotKwkJZ2Jvb2xlYW4gX3RtcDhfID0gRkFMU0U7Ci0rCQlnaW50KiBfdG1wOV87 Ci0rCQlnaW50IF90bXA5X19sZW5ndGgxOwotKwkJZ2ludCBfdG1wMTBfOwotKwkJZ2Jvb2xlYW4g X3RtcDExXzsKLSsJCV90bXA2XyA9IHJldHZhbDsKLSsJCV90bXA2X19sZW5ndGgxID0gcmV0dmFs X2xlbmd0aDE7Ci0rCQlfdG1wN18gPSBfdG1wNl9bMF07Ci0rCQlzZWxmLT5wcml2LT5tX2ZhbGxi YWNrX2xvY2tfaWQgPSBfdG1wN187Ci0rCQlfdG1wOV8gPSByZXR2YWw7Ci0rCQlfdG1wOV9fbGVu Z3RoMSA9IHJldHZhbF9sZW5ndGgxOwotKwkJX3RtcDEwXyA9IF90bXA5X1sxXTsKLSsJCWlmIChf dG1wMTBfICE9IDApIHsKLSsJCQlfdG1wOF8gPSBUUlVFOwotKwkJfSBlbHNlIHsKLSsJCQlfdG1w OF8gPSBGQUxTRTsKLSsJCX0KLSsJCV90bXAxMV8gPSBfdG1wOF87Ci0rCQlzZWxmLT5wcml2LT5t X2NoYW5nZWRfeGtiX29wdGlvbiA9IF90bXAxMV87Ci0rCX0KLSsJcmV0dmFsID0gKGdfZnJlZSAo cmV0dmFsKSwgTlVMTCk7Ci0rfQotKwotKwotK3N0YXRpYyBnYm9vbGVhbiBwYW5lbF9zZXRfZ2ti ZF9sYXlvdXQgKFBhbmVsKiBzZWxmLCBjb25zdCBnY2hhciogbGF5b3V0KSB7Ci0rCWdib29sZWFu IHJlc3VsdCA9IEZBTFNFOwotKwlnYm9vbGVhbiBfdG1wMF87Ci0rCUdrYmRMYXlvdXQqIF90bXAx XzsKLSsJZ2ludCBfdG1wMl8gPSAwOwotKwlnY2hhcioqIF90bXAzXyA9IE5VTEw7Ci0rCWdjaGFy KiogX3RtcDRfOwotKwlnaW50IF90bXA0X19sZW5ndGgxOwotKwlnaW50IF90bXA1XzsKLSsJZ2lu dCBna2JkX2xlbjsKLSsJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCwgRkFMU0Up OwotKwlnX3JldHVybl92YWxfaWZfZmFpbCAobGF5b3V0ICE9IE5VTEwsIEZBTFNFKTsKLSsJX3Rt cDBfID0gc2VsZi0+cHJpdi0+bV9jaGFuZ2VkX3hrYl9vcHRpb247Ci0rCWlmIChfdG1wMF8gPT0g VFJVRSkgewotKwkJc2VsZi0+cHJpdi0+bV9jaGFuZ2VkX3hrYl9vcHRpb24gPSBGQUxTRTsKLSsJ CXJlc3VsdCA9IEZBTFNFOwotKwkJcmV0dXJuIHJlc3VsdDsKLSsJfQotKwlfdG1wMV8gPSBzZWxm LT5wcml2LT5tX2drYmRsYXlvdXQ7Ci0rCV90bXAzXyA9IGdrYmRfbGF5b3V0X2dldF9ncm91cF9u YW1lcyAoX3RtcDFfLCAmX3RtcDJfKTsKLSsJX3RtcDRfID0gX3RtcDNfOwotKwlfdG1wNF9fbGVu Z3RoMSA9IF90bXAyXzsKLSsJX3RtcDVfID0gX3RtcDJfOwotKwlfdG1wNF8gPSAoX3ZhbGFfYXJy YXlfZnJlZSAoX3RtcDRfLCBfdG1wNF9fbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUp LCBOVUxMKTsKLSsJZ2tiZF9sZW4gPSBfdG1wNV87Ci0rCXsKLSsJCWdpbnQgaTsKLSsJCWkgPSAw OwotKwkJewotKwkJCWdib29sZWFuIF90bXA2XzsKLSsJCQlfdG1wNl8gPSBUUlVFOwotKwkJCXdo aWxlIChUUlVFKSB7Ci0rCQkJCWdib29sZWFuIF90bXA3XzsKLSsJCQkJZ2Jvb2xlYW4gX3RtcDlf ID0gRkFMU0U7Ci0rCQkJCWdpbnQgX3RtcDEwXzsKLSsJCQkJZ2NoYXIqKiBfdG1wMTFfOwotKwkJ CQlnaW50IF90bXAxMV9fbGVuZ3RoMTsKLSsJCQkJZ2Jvb2xlYW4gX3RtcDE0XzsKLSsJCQkJZ2No YXIqKiBfdG1wMTVfOwotKwkJCQlnaW50IF90bXAxNV9fbGVuZ3RoMTsKLSsJCQkJZ2ludCBfdG1w MTZfOwotKwkJCQljb25zdCBnY2hhciogX3RtcDE3XzsKLSsJCQkJZ2NoYXIqIF90bXAxOF87Ci0r CQkJCWdjaGFyKiBzeXNfbGF5b3V0OwotKwkJCQlnYm9vbGVhbiBfdG1wMTlfID0gRkFMU0U7Ci0r CQkJCWdpbnQgX3RtcDIwXzsKLSsJCQkJZ2NoYXIqKiBfdG1wMjFfOwotKwkJCQlnaW50IF90bXAy MV9fbGVuZ3RoMTsKLSsJCQkJZ2Jvb2xlYW4gX3RtcDI1XzsKLSsJCQkJY29uc3QgZ2NoYXIqIF90 bXAzMV87Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wMzJfOwotKwkJCQlfdG1wN18gPSBfdG1wNl87 Ci0rCQkJCWlmICghX3RtcDdfKSB7Ci0rCQkJCQlnaW50IF90bXA4XzsKLSsJCQkJCV90bXA4XyA9 IGk7Ci0rCQkJCQlpID0gX3RtcDhfICsgMTsKLSsJCQkJfQotKwkJCQlfdG1wNl8gPSBGQUxTRTsK LSsJCQkJX3RtcDEwXyA9IGk7Ci0rCQkJCV90bXAxMV8gPSBzZWxmLT5wcml2LT5tX2xheW91dHM7 Ci0rCQkJCV90bXAxMV9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fbGF5b3V0c19sZW5ndGgxOwot KwkJCQlpZiAoX3RtcDEwXyA8IF90bXAxMV9fbGVuZ3RoMSkgewotKwkJCQkJZ2ludCBfdG1wMTJf OwotKwkJCQkJZ2ludCBfdG1wMTNfOwotKwkJCQkJX3RtcDEyXyA9IGk7Ci0rCQkJCQlfdG1wMTNf ID0gZ2tiZF9sZW47Ci0rCQkJCQlfdG1wOV8gPSBfdG1wMTJfIDwgX3RtcDEzXzsKLSsJCQkJfSBl bHNlIHsKLSsJCQkJCV90bXA5XyA9IEZBTFNFOwotKwkJCQl9Ci0rCQkJCV90bXAxNF8gPSBfdG1w OV87Ci0rCQkJCWlmICghX3RtcDE0XykgewotKwkJCQkJYnJlYWs7Ci0rCQkJCX0KLSsJCQkJX3Rt cDE1XyA9IHNlbGYtPnByaXYtPm1fbGF5b3V0czsKLSsJCQkJX3RtcDE1X19sZW5ndGgxID0gc2Vs Zi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0aDE7Ci0rCQkJCV90bXAxNl8gPSBpOwotKwkJCQlfdG1w MTdfID0gX3RtcDE1X1tfdG1wMTZfXTsKLSsJCQkJX3RtcDE4XyA9IGdfc3RyZHVwIChfdG1wMTdf KTsKLSsJCQkJc3lzX2xheW91dCA9IF90bXAxOF87Ci0rCQkJCV90bXAyMF8gPSBpOwotKwkJCQlf dG1wMjFfID0gc2VsZi0+cHJpdi0+bV92YXJpYW50czsKLSsJCQkJX3RtcDIxX19sZW5ndGgxID0g c2VsZi0+cHJpdi0+bV92YXJpYW50c19sZW5ndGgxOwotKwkJCQlpZiAoX3RtcDIwXyA8IF90bXAy MV9fbGVuZ3RoMSkgewotKwkJCQkJZ2NoYXIqKiBfdG1wMjJfOwotKwkJCQkJZ2ludCBfdG1wMjJf X2xlbmd0aDE7Ci0rCQkJCQlnaW50IF90bXAyM187Ci0rCQkJCQljb25zdCBnY2hhciogX3RtcDI0 XzsKLSsJCQkJCV90bXAyMl8gPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzOwotKwkJCQkJX3RtcDIy X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV92YXJpYW50c19sZW5ndGgxOwotKwkJCQkJX3RtcDIz XyA9IGk7Ci0rCQkJCQlfdG1wMjRfID0gX3RtcDIyX1tfdG1wMjNfXTsKLSsJCQkJCV90bXAxOV8g PSBnX3N0cmNtcDAgKF90bXAyNF8sICIiKSAhPSAwOwotKwkJCQl9IGVsc2UgewotKwkJCQkJX3Rt cDE5XyA9IEZBTFNFOwotKwkJCQl9Ci0rCQkJCV90bXAyNV8gPSBfdG1wMTlfOwotKwkJCQlpZiAo X3RtcDI1XykgewotKwkJCQkJY29uc3QgZ2NoYXIqIF90bXAyNl87Ci0rCQkJCQlnY2hhcioqIF90 bXAyN187Ci0rCQkJCQlnaW50IF90bXAyN19fbGVuZ3RoMTsKLSsJCQkJCWdpbnQgX3RtcDI4XzsK LSsJCQkJCWNvbnN0IGdjaGFyKiBfdG1wMjlfOwotKwkJCQkJZ2NoYXIqIF90bXAzMF8gPSBOVUxM OwotKwkJCQkJX3RtcDI2XyA9IHN5c19sYXlvdXQ7Ci0rCQkJCQlfdG1wMjdfID0gc2VsZi0+cHJp di0+bV92YXJpYW50czsKLSsJCQkJCV90bXAyN19fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fdmFy aWFudHNfbGVuZ3RoMTsKLSsJCQkJCV90bXAyOF8gPSBpOwotKwkJCQkJX3RtcDI5XyA9IF90bXAy N19bX3RtcDI4X107Ci0rCQkJCQlfdG1wMzBfID0gZ19zdHJkdXBfcHJpbnRmICgiJXMoJXMpIiwg X3RtcDI2XywgX3RtcDI5Xyk7Ci0rCQkJCQlfZ19mcmVlMCAoc3lzX2xheW91dCk7Ci0rCQkJCQlz eXNfbGF5b3V0ID0gX3RtcDMwXzsKLSsJCQkJfQotKwkJCQlfdG1wMzFfID0gc3lzX2xheW91dDsK LSsJCQkJX3RtcDMyXyA9IGxheW91dDsKLSsJCQkJaWYgKGdfc3RyY21wMCAoX3RtcDMxXywgX3Rt cDMyXykgPT0gMCkgewotKwkJCQkJR2tiZExheW91dCogX3RtcDMzXzsKLSsJCQkJCWdpbnQgX3Rt cDM0XzsKLSsJCQkJCV90bXAzM18gPSBzZWxmLT5wcml2LT5tX2drYmRsYXlvdXQ7Ci0rCQkJCQlf dG1wMzRfID0gaTsKLSsJCQkJCWdrYmRfbGF5b3V0X2xvY2tfZ3JvdXAgKF90bXAzM18sIF90bXAz NF8pOwotKwkJCQkJcmVzdWx0ID0gVFJVRTsKLSsJCQkJCV9nX2ZyZWUwIChzeXNfbGF5b3V0KTsK LSsJCQkJCXJldHVybiByZXN1bHQ7Ci0rCQkJCX0KLSsJCQkJX2dfZnJlZTAgKHN5c19sYXlvdXQp OwotKwkJCX0KLSsJCX0KLSsJfQotKwlyZXN1bHQgPSBGQUxTRTsKLSsJcmV0dXJuIHJlc3VsdDsK LSt9Ci0rCi0rCi0rc3RhdGljIHZvaWQgcGFuZWxfc2V0X2xheW91dCAoUGFuZWwqIHNlbGYsIGNv bnN0IGdjaGFyKiBsYXlvdXQpIHsKLSsJZ2Jvb2xlYW4gX3RtcDBfID0gRkFMU0U7Ci0rCWNvbnN0 IGdjaGFyKiBfdG1wMV87Ci0rCWdib29sZWFuIF90bXAzXzsKLSsJWEtCTGF5b3V0KiBfdG1wNF87 Ci0rCVhLQkxheW91dCogX3RtcDhfOwotKwljb25zdCBnY2hhciogX3RtcDlfOwotKwlnaW50IF90 bXAxMF8gPSAwOwotKwlnaW50KiBfdG1wMTFfID0gTlVMTDsKLSsJZ2ludCogX3RtcDEyXzsKLSsJ Z2ludCBfdG1wMTJfX2xlbmd0aDE7Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7 Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKGxheW91dCAhPSBOVUxMKTsKLSsJX3RtcDFfID0gbGF5b3V0 OwotKwlpZiAoZ19zdHJjbXAwIChfdG1wMV8sICJkZWZhdWx0IikgPT0gMCkgewotKwkJX3RtcDBf ID0gVFJVRTsKLSsJfSBlbHNlIHsKLSsJCWNvbnN0IGdjaGFyKiBfdG1wMl87Ci0rCQlfdG1wMl8g PSBsYXlvdXQ7Ci0rCQlfdG1wMF8gPSBfdG1wMl8gPT0gTlVMTDsKLSsJfQotKwlfdG1wM18gPSBf dG1wMF87Ci0rCWlmIChfdG1wM18pIHsKLSsJCXJldHVybjsKLSsJfQotKwlfdG1wNF8gPSBzZWxm LT5wcml2LT5tX3hrYmxheW91dDsKLSsJaWYgKF90bXA0XyA9PSBOVUxMKSB7Ci0rCQlwYW5lbF9p bml0X2VuZ2luZXNfb3JkZXIgKHNlbGYpOwotKwl9Ci0rCWlmIChIQVZFX0lCVVNfR0tCRCkgewot KwkJY29uc3QgZ2NoYXIqIF90bXA1XzsKLSsJCWdib29sZWFuIF90bXA2XyA9IEZBTFNFOwotKwkJ Y29uc3QgZ2NoYXIqIF90bXA3XzsKLSsJCV90bXA1XyA9IGxheW91dDsKLSsJCV90bXA2XyA9IHBh bmVsX3NldF9na2JkX2xheW91dCAoc2VsZiwgX3RtcDVfKTsKLSsJCWlmIChfdG1wNl8pIHsKLSsJ CQlyZXR1cm47Ci0rCQl9Ci0rCQlfdG1wN18gPSBsYXlvdXQ7Ci0rCQlwYW5lbF9zZXRfeGtiX2dy b3VwX2xheW91dCAoc2VsZiwgX3RtcDdfKTsKLSsJCXJldHVybjsKLSsJfQotKwlfdG1wOF8gPSBz ZWxmLT5wcml2LT5tX3hrYmxheW91dDsKLSsJX3RtcDlfID0gbGF5b3V0OwotKwlfdG1wMTFfID0g eGtiX2xheW91dF9zZXRfbGF5b3V0IChfdG1wOF8sIF90bXA5XywgImRlZmF1bHQiLCAiZGVmYXVs dCIsICZfdG1wMTBfKTsKLSsJX3RtcDEyXyA9IF90bXAxMV87Ci0rCV90bXAxMl9fbGVuZ3RoMSA9 IF90bXAxMF87Ci0rCV90bXAxMl8gPSAoZ19mcmVlIChfdG1wMTJfKSwgTlVMTCk7Ci0rfQotKwot KwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDE2IChnY2hhcioqKiBhcnJheSwgaW50KiBs ZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7Ci0gCWlmICgoKmxlbmd0aCkgPT0gKCpz aXplKSkgewotIAkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAoKnNpemUpKSA6IDQ7Ci0gCQkqYXJy YXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwgKCpzaXplKSArIDEpOwotQEAgLTQ4NCwxNiAr MTYzNywxMyBAQCBzdGF0aWMgdm9pZCBwYW5lbF9zd2l0Y2hfZW5naW5lIChQYW5lbCoKLSAJZ2Jv b2xlYW4gX3RtcDMyXyA9IEZBTFNFOwotIAlJQnVzRW5naW5lRGVzYyogX3RtcDM1XzsKLSAJY29u c3QgZ2NoYXIqIF90bXAzNl8gPSBOVUxMOwotLQlnY2hhciogX3RtcDM3XyA9IE5VTEw7Ci0tCWdj aGFyKiBjbWRsaW5lOwotLQlnY2hhcioqIF90bXA0M18gPSBOVUxMOwotKwlnY2hhcioqIF90bXAz N18gPSBOVUxMOwotIAlnY2hhcioqIG5hbWVzOwotIAlnaW50IG5hbWVzX2xlbmd0aDE7Ci0gCWdp bnQgX25hbWVzX3NpemVfOwotLQlJQnVzRW5naW5lRGVzYyoqIF90bXA0NF87Ci0tCWdpbnQgX3Rt cDQ0X19sZW5ndGgxOwotLQlJQnVzQ29uZmlnKiBfdG1wNTBfOwotLQlHRXJyb3IgKiBfaW5uZXJf ZXJyb3JfID0gTlVMTDsKLSsJSUJ1c0VuZ2luZURlc2MqKiBfdG1wMzhfOwotKwlnaW50IF90bXAz OF9fbGVuZ3RoMTsKLSsJSUJ1c0NvbmZpZyogX3RtcDQ0XzsKLSAJZ19yZXR1cm5faWZfZmFpbCAo c2VsZiAhPSBOVUxMKTsKLSAJX3RtcDFfID0gaTsKLSAJaWYgKF90bXAxXyA+PSAwKSB7Ci1AQCAt NTg4LDEwNyArMTczOCw2MyBAQCBzdGF0aWMgdm9pZCBwYW5lbF9zd2l0Y2hfZW5naW5lIChQYW5l bCoKLSAJCWNvbnN0IGdjaGFyKiBfdG1wMzRfID0gTlVMTDsKLSAJCV90bXAzM18gPSBlbmdpbmU7 Ci0gCQlfdG1wMzRfID0gaWJ1c19lbmdpbmVfZGVzY19nZXRfbmFtZSAoX3RtcDMzXyk7Ci0tCQln X3dhcm5pbmcgKCJwYW5lbC52YWxhOjEyMDogU3dpdGNoIGVuZ2luZSB0byAlcyBmYWlsZWQuIiwg X3RtcDM0Xyk7Ci0rCQlnX3dhcm5pbmcgKCJwYW5lbC52YWxhOjM2NzogU3dpdGNoIGVuZ2luZSB0 byAlcyBmYWlsZWQuIiwgX3RtcDM0Xyk7Ci0gCQlfZ19vYmplY3RfdW5yZWYwIChlbmdpbmUpOwot IAkJcmV0dXJuOwotIAl9Ci0gCV90bXAzNV8gPSBlbmdpbmU7Ci0gCV90bXAzNl8gPSBpYnVzX2Vu Z2luZV9kZXNjX2dldF9sYXlvdXQgKF90bXAzNV8pOwotLQlfdG1wMzdfID0gZ19zdHJkdXBfcHJp bnRmICgic2V0eGtibWFwICVzIiwgX3RtcDM2Xyk7Ci0tCWNtZGxpbmUgPSBfdG1wMzdfOwotLQl7 Ci0tCQljb25zdCBnY2hhciogX3RtcDM4XzsKLS0JCWdib29sZWFuIF90bXAzOV8gPSBGQUxTRTsK LS0JCWdib29sZWFuIF90bXA0MF87Ci0tCQlfdG1wMzhfID0gY21kbGluZTsKLS0JCV90bXAzOV8g PSBnX3NwYXduX2NvbW1hbmRfbGluZV9zeW5jIChfdG1wMzhfLCBOVUxMLCBOVUxMLCBOVUxMLCAm X2lubmVyX2Vycm9yXyk7Ci0tCQlfdG1wNDBfID0gX3RtcDM5XzsKLS0JCWlmIChfaW5uZXJfZXJy b3JfICE9IE5VTEwpIHsKLS0JCQlpZiAoX2lubmVyX2Vycm9yXy0+ZG9tYWluID09IEdfU1BBV05f RVJST1IpIHsKLS0JCQkJZ290byBfX2NhdGNoMl9nX3NwYXduX2Vycm9yOwotLQkJCX0KLS0JCQlf Z19mcmVlMCAoY21kbGluZSk7Ci0tCQkJX2dfb2JqZWN0X3VucmVmMCAoZW5naW5lKTsKLS0JCQln X2NyaXRpY2FsICgiZmlsZSAlczogbGluZSAlZDogdW5leHBlY3RlZCBlcnJvcjogJXMgKCVzLCAl ZCkiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9pbm5lcl9lcnJvcl8tPm1lc3NhZ2UsIGdfcXVhcmtf dG9fc3RyaW5nIChfaW5uZXJfZXJyb3JfLT5kb21haW4pLCBfaW5uZXJfZXJyb3JfLT5jb2RlKTsK LS0JCQlnX2NsZWFyX2Vycm9yICgmX2lubmVyX2Vycm9yXyk7Ci0tCQkJcmV0dXJuOwotLQkJfQot LQkJaWYgKCFfdG1wNDBfKSB7Ci0tCQkJSUJ1c0VuZ2luZURlc2MqIF90bXA0MV87Ci0tCQkJY29u c3QgZ2NoYXIqIF90bXA0Ml8gPSBOVUxMOwotLQkJCV90bXA0MV8gPSBlbmdpbmU7Ci0tCQkJX3Rt cDQyXyA9IGlidXNfZW5naW5lX2Rlc2NfZ2V0X2xheW91dCAoX3RtcDQxXyk7Ci0tCQkJZ193YXJu aW5nICgicGFuZWwudmFsYToxMjc6IFN3aXRjaCB4a2IgbGF5b3V0IHRvICVzIGZhaWxlZC4iLCBf dG1wNDJfKTsKLS0JCX0KLS0JfQotLQlnb3RvIF9fZmluYWxseTI7Ci0tCV9fY2F0Y2gyX2dfc3Bh d25fZXJyb3I6Ci0tCXsKLS0JCUdFcnJvciogZSA9IE5VTEw7Ci0tCQllID0gX2lubmVyX2Vycm9y XzsKLS0JCV9pbm5lcl9lcnJvcl8gPSBOVUxMOwotLQkJZ193YXJuaW5nICgicGFuZWwudmFsYTox MzE6IGV4ZWN1dGUgc2V0eGtibGF5b3V0IGZhaWxlZCIpOwotLQkJX2dfZXJyb3JfZnJlZTAgKGUp OwotLQl9Ci0tCV9fZmluYWxseTI6Ci0tCWlmIChfaW5uZXJfZXJyb3JfICE9IE5VTEwpIHsKLS0J CV9nX2ZyZWUwIChjbWRsaW5lKTsKLS0JCV9nX29iamVjdF91bnJlZjAgKGVuZ2luZSk7Ci0tCQln X2NyaXRpY2FsICgiZmlsZSAlczogbGluZSAlZDogdW5jYXVnaHQgZXJyb3I6ICVzICglcywgJWQp IiwgX19GSUxFX18sIF9fTElORV9fLCBfaW5uZXJfZXJyb3JfLT5tZXNzYWdlLCBnX3F1YXJrX3Rv X3N0cmluZyAoX2lubmVyX2Vycm9yXy0+ZG9tYWluKSwgX2lubmVyX2Vycm9yXy0+Y29kZSk7Ci0t CQlnX2NsZWFyX2Vycm9yICgmX2lubmVyX2Vycm9yXyk7Ci0tCQlyZXR1cm47Ci0tCX0KLS0JX3Rt cDQzXyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7Ci0tCW5hbWVzID0gX3RtcDQzXzsKLSsJcGFu ZWxfc2V0X2xheW91dCAoc2VsZiwgX3RtcDM2Xyk7Ci0rCV90bXAzN18gPSBnX25ldzAgKGdjaGFy KiwgMCArIDEpOwotKwluYW1lcyA9IF90bXAzN187Ci0gCW5hbWVzX2xlbmd0aDEgPSAwOwotIAlf bmFtZXNfc2l6ZV8gPSBuYW1lc19sZW5ndGgxOwotLQlfdG1wNDRfID0gc2VsZi0+cHJpdi0+bV9l bmdpbmVzOwotLQlfdG1wNDRfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3Ro MTsKLSsJX3RtcDM4XyA9IHNlbGYtPnByaXYtPm1fZW5naW5lczsKLSsJX3RtcDM4X19sZW5ndGgx ID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDE7Ci0gCXsKLSAJCUlCdXNFbmdpbmVEZXNj KiogZGVzY19jb2xsZWN0aW9uID0gTlVMTDsKLSAJCWdpbnQgZGVzY19jb2xsZWN0aW9uX2xlbmd0 aDEgPSAwOwotIAkJZ2ludCBfZGVzY19jb2xsZWN0aW9uX3NpemVfID0gMDsKLSAJCWdpbnQgZGVz Y19pdCA9IDA7Ci0tCQlkZXNjX2NvbGxlY3Rpb24gPSBfdG1wNDRfOwotLQkJZGVzY19jb2xsZWN0 aW9uX2xlbmd0aDEgPSBfdG1wNDRfX2xlbmd0aDE7Ci0tCQlmb3IgKGRlc2NfaXQgPSAwOyBkZXNj X2l0IDwgX3RtcDQ0X19sZW5ndGgxOyBkZXNjX2l0ID0gZGVzY19pdCArIDEpIHsKLS0JCQlJQnVz RW5naW5lRGVzYyogX3RtcDQ1XzsKLSsJCWRlc2NfY29sbGVjdGlvbiA9IF90bXAzOF87Ci0rCQlk ZXNjX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IF90bXAzOF9fbGVuZ3RoMTsKLSsJCWZvciAoZGVzY19p dCA9IDA7IGRlc2NfaXQgPCBfdG1wMzhfX2xlbmd0aDE7IGRlc2NfaXQgPSBkZXNjX2l0ICsgMSkg ewotKwkJCUlCdXNFbmdpbmVEZXNjKiBfdG1wMzlfOwotIAkJCUlCdXNFbmdpbmVEZXNjKiBkZXNj ID0gTlVMTDsKLS0JCQlfdG1wNDVfID0gX2dfb2JqZWN0X3JlZjAgKGRlc2NfY29sbGVjdGlvbltk ZXNjX2l0XSk7Ci0tCQkJZGVzYyA9IF90bXA0NV87Ci0rCQkJX3RtcDM5XyA9IF9nX29iamVjdF9y ZWYwIChkZXNjX2NvbGxlY3Rpb25bZGVzY19pdF0pOwotKwkJCWRlc2MgPSBfdG1wMzlfOwotIAkJ CXsKLS0JCQkJZ2NoYXIqKiBfdG1wNDZfOwotLQkJCQlnaW50IF90bXA0Nl9fbGVuZ3RoMTsKLS0J CQkJSUJ1c0VuZ2luZURlc2MqIF90bXA0N187Ci0tCQkJCWNvbnN0IGdjaGFyKiBfdG1wNDhfID0g TlVMTDsKLS0JCQkJZ2NoYXIqIF90bXA0OV87Ci0tCQkJCV90bXA0Nl8gPSBuYW1lczsKLS0JCQkJ X3RtcDQ2X19sZW5ndGgxID0gbmFtZXNfbGVuZ3RoMTsKLS0JCQkJX3RtcDQ3XyA9IGRlc2M7Ci0t CQkJCV90bXA0OF8gPSBpYnVzX2VuZ2luZV9kZXNjX2dldF9uYW1lIChfdG1wNDdfKTsKLS0JCQkJ X3RtcDQ5XyA9IGdfc3RyZHVwIChfdG1wNDhfKTsKLS0JCQkJX3ZhbGFfYXJyYXlfYWRkOSAoJm5h bWVzLCAmbmFtZXNfbGVuZ3RoMSwgJl9uYW1lc19zaXplXywgX3RtcDQ5Xyk7Ci0rCQkJCWdjaGFy KiogX3RtcDQwXzsKLSsJCQkJZ2ludCBfdG1wNDBfX2xlbmd0aDE7Ci0rCQkJCUlCdXNFbmdpbmVE ZXNjKiBfdG1wNDFfOwotKwkJCQljb25zdCBnY2hhciogX3RtcDQyXyA9IE5VTEw7Ci0rCQkJCWdj aGFyKiBfdG1wNDNfOwotKwkJCQlfdG1wNDBfID0gbmFtZXM7Ci0rCQkJCV90bXA0MF9fbGVuZ3Ro MSA9IG5hbWVzX2xlbmd0aDE7Ci0rCQkJCV90bXA0MV8gPSBkZXNjOwotKwkJCQlfdG1wNDJfID0g aWJ1c19lbmdpbmVfZGVzY19nZXRfbmFtZSAoX3RtcDQxXyk7Ci0rCQkJCV90bXA0M18gPSBnX3N0 cmR1cCAoX3RtcDQyXyk7Ci0rCQkJCV92YWxhX2FycmF5X2FkZDE2ICgmbmFtZXMsICZuYW1lc19s ZW5ndGgxLCAmX25hbWVzX3NpemVfLCBfdG1wNDNfKTsKLSAJCQkJX2dfb2JqZWN0X3VucmVmMCAo ZGVzYyk7Ci0gCQkJfQotIAkJfQotIAl9Ci0tCV90bXA1MF8gPSBzZWxmLT5wcml2LT5tX2NvbmZp ZzsKLS0JaWYgKF90bXA1MF8gIT0gTlVMTCkgewotLQkJSUJ1c0NvbmZpZyogX3RtcDUxXzsKLS0J CWdjaGFyKiogX3RtcDUyXzsKLS0JCWdpbnQgX3RtcDUyX19sZW5ndGgxOwotLQkJR1ZhcmlhbnQq IF90bXA1M187Ci0tCQlHVmFyaWFudCogX3RtcDU0XzsKLS0JCV90bXA1MV8gPSBzZWxmLT5wcml2 LT5tX2NvbmZpZzsKLS0JCV90bXA1Ml8gPSBuYW1lczsKLS0JCV90bXA1Ml9fbGVuZ3RoMSA9IG5h bWVzX2xlbmd0aDE7Ci0tCQlfdG1wNTNfID0gZ192YXJpYW50X25ld19zdHJ2IChfdG1wNTJfLCBf dG1wNTJfX2xlbmd0aDEpOwotLQkJX3RtcDU0XyA9IGdfdmFyaWFudF9yZWZfc2luayAoX3RtcDUz Xyk7Ci0tCQlpYnVzX2NvbmZpZ19zZXRfdmFsdWUgKF90bXA1MV8sICJnZW5lcmFsIiwgImVuZ2lu ZXNfb3JkZXIiLCBfdG1wNTRfKTsKLS0JCV9nX3ZhcmlhbnRfdW5yZWYwIChfdG1wNTRfKTsKLSsJ X3RtcDQ0XyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOwotKwlpZiAoX3RtcDQ0XyAhPSBOVUxMKSB7 Ci0rCQlJQnVzQ29uZmlnKiBfdG1wNDVfOwotKwkJZ2NoYXIqKiBfdG1wNDZfOwotKwkJZ2ludCBf dG1wNDZfX2xlbmd0aDE7Ci0rCQlHVmFyaWFudCogX3RtcDQ3XzsKLSsJCUdWYXJpYW50KiBfdG1w NDhfOwotKwkJX3RtcDQ1XyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOwotKwkJX3RtcDQ2XyA9IG5h bWVzOwotKwkJX3RtcDQ2X19sZW5ndGgxID0gbmFtZXNfbGVuZ3RoMTsKLSsJCV90bXA0N18gPSBn X3ZhcmlhbnRfbmV3X3N0cnYgKF90bXA0Nl8sIF90bXA0Nl9fbGVuZ3RoMSk7Ci0rCQlfdG1wNDhf ID0gZ192YXJpYW50X3JlZl9zaW5rIChfdG1wNDdfKTsKLSsJCWlidXNfY29uZmlnX3NldF92YWx1 ZSAoX3RtcDQ1XywgImdlbmVyYWwiLCAiZW5naW5lc19vcmRlciIsIF90bXA0OF8pOwotKwkJX2df dmFyaWFudF91bnJlZjAgKF90bXA0OF8pOwotIAl9Ci0gCW5hbWVzID0gKF92YWxhX2FycmF5X2Zy ZWUgKG5hbWVzLCBuYW1lc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwp OwotLQlfZ19mcmVlMCAoY21kbGluZSk7Ci0gCV9nX29iamVjdF91bnJlZjAgKGVuZ2luZSk7Ci0g fQotIAotQEAgLTc4Miw3ICsxODg4LDcgQEAgc3RhdGljIHZvaWQgcGFuZWxfaGFuZGxlX2VuZ2lu ZV9zd2l0Y2ggKAotIAkJaSA9IF90bXAxN187Ci0gCQlfdG1wMThfID0gaTsKLSAJCWlmIChfdG1w MThfIDwgMCkgewotLQkJCWdfZGVidWcgKCJwYW5lbC52YWxhOjE2Nzogc3dpdGNoIGNhbmNlbGxl ZCIpOwotKwkJCWdfZGVidWcgKCJwYW5lbC52YWxhOjQwNjogc3dpdGNoIGNhbmNlbGxlZCIpOwot IAkJfSBlbHNlIHsKLSAJCQlnaW50IF90bXAxOV87Ci0gCQkJSUJ1c0VuZ2luZURlc2MqKiBfdG1w MjBfOwotQEAgLTgxOSw3ICsxOTI1LDcgQEAgc3RhdGljIHZvaWQgcGFuZWxfaGFuZGxlX2VuZ2lu ZV9zd2l0Y2ggKAotIH0KLSAKLSAKLS1zdGF0aWMgZ2NoYXIqKiBfdmFsYV9hcnJheV9kdXAyIChn Y2hhcioqIHNlbGYsIGludCBsZW5ndGgpIHsKLStzdGF0aWMgZ2NoYXIqKiBfdmFsYV9hcnJheV9k dXA0IChnY2hhcioqIHNlbGYsIGludCBsZW5ndGgpIHsKLSAJZ2NoYXIqKiByZXN1bHQ7Ci0gCWlu dCBpOwotIAlyZXN1bHQgPSBnX25ldzAgKGdjaGFyKiwgbGVuZ3RoICsgMSk7Ci1AQCAtODMyLDE4 ICsxOTM4LDcgQEAgc3RhdGljIGdjaGFyKiogX3ZhbGFfYXJyYXlfZHVwMiAoZ2NoYXIqKgotIH0K LSAKLSAKLS1zdGF0aWMgZ2Jvb2xlYW4gX3ZhbGFfc3RyaW5nX2FycmF5X2NvbnRhaW5zIChnY2hh cioqIHN0YWNrLCBpbnQgc3RhY2tfbGVuZ3RoLCBnY2hhciogbmVlZGxlKSB7Ci0tCWludCBpOwot LQlmb3IgKGkgPSAwOyBpIDwgc3RhY2tfbGVuZ3RoOyBpKyspIHsKLS0JCWlmIChnX3N0cmNtcDAg KHN0YWNrW2ldLCBuZWVkbGUpID09IDApIHsKLS0JCQlyZXR1cm4gVFJVRTsKLS0JCX0KLS0JfQot LQlyZXR1cm4gRkFMU0U7Ci0tfQotLQotLQotLXN0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDEw IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7 Ci0rc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTcgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxl bmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKLSAJaWYgKCgqbGVuZ3RoKSA9PSAoKnNp emUpKSB7Ci0gCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKLSAJCSphcnJh eSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7Ci1AQCAtODUzLDcgKzE5 NDgsNyBAQCBzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxMCAoZ2NoYXIqKioKLSB9Ci0gCi0g Ci0tc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTEgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxl bmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJh eV9hZGQxOCAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2 YWx1ZSkgewotIAlpZiAoKCpsZW5ndGgpID09ICgqc2l6ZSkpIHsKLSAJCSpzaXplID0gKCpzaXpl KSA/ICgyICogKCpzaXplKSkgOiA0OwotIAkJKmFycmF5ID0gZ19yZW5ldyAoZ2NoYXIqLCAqYXJy YXksICgqc2l6ZSkgKyAxKTsKLUBAIC04NjMsNyArMTk1OCw3IEBAIHN0YXRpYyB2b2lkIF92YWxh X2FycmF5X2FkZDExIChnY2hhcioqKgotIH0KLSAKLSAKLS1zdGF0aWMgSUJ1c0VuZ2luZURlc2Mq KiBfdmFsYV9hcnJheV9kdXAzIChJQnVzRW5naW5lRGVzYyoqIHNlbGYsIGludCBsZW5ndGgpIHsK LStzdGF0aWMgSUJ1c0VuZ2luZURlc2MqKiBfdmFsYV9hcnJheV9kdXA1IChJQnVzRW5naW5lRGVz YyoqIHNlbGYsIGludCBsZW5ndGgpIHsKLSAJSUJ1c0VuZ2luZURlc2MqKiByZXN1bHQ7Ci0gCWlu dCBpOwotIAlyZXN1bHQgPSBnX25ldzAgKElCdXNFbmdpbmVEZXNjKiwgbGVuZ3RoICsgMSk7Ci1A QCAtODc2LDcgKzE5NzEsNyBAQCBzdGF0aWMgSUJ1c0VuZ2luZURlc2MqKiBfdmFsYV9hcnJheV9k dXAzCi0gfQotIAotIAotLXN0YXRpYyBJQnVzRW5naW5lRGVzYyoqIF92YWxhX2FycmF5X2R1cDQg KElCdXNFbmdpbmVEZXNjKiogc2VsZiwgaW50IGxlbmd0aCkgewotK3N0YXRpYyBJQnVzRW5naW5l RGVzYyoqIF92YWxhX2FycmF5X2R1cDYgKElCdXNFbmdpbmVEZXNjKiogc2VsZiwgaW50IGxlbmd0 aCkgewotIAlJQnVzRW5naW5lRGVzYyoqIHJlc3VsdDsKLSAJaW50IGk7Ci0gCXJlc3VsdCA9IGdf bmV3MCAoSUJ1c0VuZ2luZURlc2MqLCBsZW5ndGggKyAxKTsKLUBAIC05ODUsNyArMjA4MCw3IEBA IHN0YXRpYyB2b2lkIHBhbmVsX3VwZGF0ZV9lbmdpbmVzIChQYW5lbCoKLSAJfQotIAlfdG1wMTVf ID0gX3RtcDEwXzsKLSAJX3RtcDE1X19sZW5ndGgxID0gX3RtcDEwX19sZW5ndGgxOwotLQlfdG1w MTZfID0gKF90bXAxNV8gIT0gTlVMTCkgPyBfdmFsYV9hcnJheV9kdXAyIChfdG1wMTVfLCBfdG1w MTVfX2xlbmd0aDEpIDogKChncG9pbnRlcikgX3RtcDE1Xyk7Ci0rCV90bXAxNl8gPSAoX3RtcDE1 XyAhPSBOVUxMKSA/IF92YWxhX2FycmF5X2R1cDQgKF90bXAxNV8sIF90bXAxNV9fbGVuZ3RoMSkg OiAoKGdwb2ludGVyKSBfdG1wMTVfKTsKLSAJX3RtcDE2X19sZW5ndGgxID0gX3RtcDE1X19sZW5n dGgxOwotIAlvcmRlcl9uYW1lcyA9IF90bXAxNl87Ci0gCW9yZGVyX25hbWVzX2xlbmd0aDEgPSBf dG1wMTZfX2xlbmd0aDE7Ci1AQCAtMTAyNCw3ICsyMTE5LDcgQEAgc3RhdGljIHZvaWQgcGFuZWxf dXBkYXRlX2VuZ2luZXMgKFBhbmVsKgotIAkJCQkJX3RtcDIyX19sZW5ndGgxID0gbmFtZXNfbGVu Z3RoMTsKLSAJCQkJCV90bXAyM18gPSBuYW1lOwotIAkJCQkJX3RtcDI0XyA9IGdfc3RyZHVwIChf dG1wMjNfKTsKLS0JCQkJCV92YWxhX2FycmF5X2FkZDEwICgmbmFtZXMsICZuYW1lc19sZW5ndGgx LCAmX25hbWVzX3NpemVfLCBfdG1wMjRfKTsKLSsJCQkJCV92YWxhX2FycmF5X2FkZDE3ICgmbmFt ZXMsICZuYW1lc19sZW5ndGgxLCAmX25hbWVzX3NpemVfLCBfdG1wMjRfKTsKLSAJCQkJfQotIAkJ CQlfZ19mcmVlMCAobmFtZSk7Ci0gCQkJfQotQEAgLTEwNjMsNyArMjE1OCw3IEBAIHN0YXRpYyB2 b2lkIHBhbmVsX3VwZGF0ZV9lbmdpbmVzIChQYW5lbCoKLSAJCQkJX3RtcDI5X19sZW5ndGgxID0g bmFtZXNfbGVuZ3RoMTsKLSAJCQkJX3RtcDMwXyA9IG5hbWU7Ci0gCQkJCV90bXAzMV8gPSBnX3N0 cmR1cCAoX3RtcDMwXyk7Ci0tCQkJCV92YWxhX2FycmF5X2FkZDExICgmbmFtZXMsICZuYW1lc19s ZW5ndGgxLCAmX25hbWVzX3NpemVfLCBfdG1wMzFfKTsKLSsJCQkJX3ZhbGFfYXJyYXlfYWRkMTgg KCZuYW1lcywgJm5hbWVzX2xlbmd0aDEsICZfbmFtZXNfc2l6ZV8sIF90bXAzMV8pOwotIAkJCQlf Z19mcmVlMCAobmFtZSk7Ci0gCQkJfQotIAkJfQotQEAgLTEwODQsNyArMjE3OSw3IEBAIHN0YXRp YyB2b2lkIHBhbmVsX3VwZGF0ZV9lbmdpbmVzIChQYW5lbCoKLSAJCWdpbnQgX3RtcDM4X19sZW5n dGgxOwotIAkJX3RtcDM3XyA9IGVuZ2luZXM7Ci0gCQlfdG1wMzdfX2xlbmd0aDEgPSBlbmdpbmVz X2xlbmd0aDE7Ci0tCQlfdG1wMzhfID0gKF90bXAzN18gIT0gTlVMTCkgPyBfdmFsYV9hcnJheV9k dXAzIChfdG1wMzdfLCBfdG1wMzdfX2xlbmd0aDEpIDogKChncG9pbnRlcikgX3RtcDM3Xyk7Ci0r CQlfdG1wMzhfID0gKF90bXAzN18gIT0gTlVMTCkgPyBfdmFsYV9hcnJheV9kdXA1IChfdG1wMzdf LCBfdG1wMzdfX2xlbmd0aDEpIDogKChncG9pbnRlcikgX3RtcDM3Xyk7Ci0gCQlfdG1wMzhfX2xl bmd0aDEgPSBfdG1wMzdfX2xlbmd0aDE7Ci0gCQlzZWxmLT5wcml2LT5tX2VuZ2luZXMgPSAoX3Zh bGFfYXJyYXlfZnJlZSAoc2VsZi0+cHJpdi0+bV9lbmdpbmVzLCBzZWxmLT5wcml2LT5tX2VuZ2lu ZXNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX29iamVjdF91bnJlZiksIE5VTEwpOwotIAkJ c2VsZi0+cHJpdi0+bV9lbmdpbmVzID0gX3RtcDM4XzsKLUBAIC0xMTA5LDcgKzIyMDQsNyBAQCBz dGF0aWMgdm9pZCBwYW5lbF91cGRhdGVfZW5naW5lcyAoUGFuZWwqCi0gCQljdXJyZW50X2VuZ2lu ZSA9IF90bXA0MV87Ci0gCQlfdG1wNDJfID0gZW5naW5lczsKLSAJCV90bXA0Ml9fbGVuZ3RoMSA9 IGVuZ2luZXNfbGVuZ3RoMTsKLS0JCV90bXA0M18gPSAoX3RtcDQyXyAhPSBOVUxMKSA/IF92YWxh X2FycmF5X2R1cDQgKF90bXA0Ml8sIF90bXA0Ml9fbGVuZ3RoMSkgOiAoKGdwb2ludGVyKSBfdG1w NDJfKTsKLSsJCV90bXA0M18gPSAoX3RtcDQyXyAhPSBOVUxMKSA/IF92YWxhX2FycmF5X2R1cDYg KF90bXA0Ml8sIF90bXA0Ml9fbGVuZ3RoMSkgOiAoKGdwb2ludGVyKSBfdG1wNDJfKTsKLSAJCV90 bXA0M19fbGVuZ3RoMSA9IF90bXA0Ml9fbGVuZ3RoMTsKLSAJCXNlbGYtPnByaXYtPm1fZW5naW5l cyA9IChfdmFsYV9hcnJheV9mcmVlIChzZWxmLT5wcml2LT5tX2VuZ2luZXMsIHNlbGYtPnByaXYt Pm1fZW5naW5lc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfb2JqZWN0X3VucmVmKSwgTlVM TCk7Ci0gCQlzZWxmLT5wcml2LT5tX2VuZ2luZXMgPSBfdG1wNDNfOwotQEAgLTEyMzcsNyArMjMz Miw3IEBAIHN0YXRpYyB2b2lkIHBhbmVsX3Nob3dfc2V0dXBfZGlhbG9nIChQYW4KLSAJCV90bXA4 XyA9IChfdmFsYV9hcnJheV9mcmVlIChfdG1wOF8sIF90bXA4X19sZW5ndGgxLCAoR0Rlc3Ryb3lO b3RpZnkpIGdfZnJlZSksIE5VTEwpOwotIAkJaWYgKF9pbm5lcl9lcnJvcl8gIT0gTlVMTCkgewot IAkJCWlmIChfaW5uZXJfZXJyb3JfLT5kb21haW4gPT0gR19TUEFXTl9FUlJPUikgewotLQkJCQln b3RvIF9fY2F0Y2gzX2dfc3Bhd25fZXJyb3I7Ci0rCQkJCWdvdG8gX19jYXRjaDJfZ19zcGF3bl9l cnJvcjsKLSAJCQl9Ci0gCQkJX2dfZnJlZTAgKGJpbmFyeSk7Ci0gCQkJZ19jcml0aWNhbCAoImZp bGUgJXM6IGxpbmUgJWQ6IHVuZXhwZWN0ZWQgZXJyb3I6ICVzICglcywgJWQpIiwgX19GSUxFX18s IF9fTElORV9fLCBfaW5uZXJfZXJyb3JfLT5tZXNzYWdlLCBnX3F1YXJrX3RvX3N0cmluZyAoX2lu bmVyX2Vycm9yXy0+ZG9tYWluKSwgX2lubmVyX2Vycm9yXy0+Y29kZSk7Ci1AQCAtMTI0NSw4ICsy MzQwLDggQEAgc3RhdGljIHZvaWQgcGFuZWxfc2hvd19zZXR1cF9kaWFsb2cgKFBhbgotIAkJCXJl dHVybjsKLSAJCX0KLSAJfQotLQlnb3RvIF9fZmluYWxseTM7Ci0tCV9fY2F0Y2gzX2dfc3Bhd25f ZXJyb3I6Ci0rCWdvdG8gX19maW5hbGx5MjsKLSsJX19jYXRjaDJfZ19zcGF3bl9lcnJvcjoKLSAJ ewotIAkJR0Vycm9yKiBlID0gTlVMTDsKLSAJCWNvbnN0IGdjaGFyKiBfdG1wMTBfOwotQEAgLTEy NTcsMTEgKzIzNTIsMTEgQEAgc3RhdGljIHZvaWQgcGFuZWxfc2hvd19zZXR1cF9kaWFsb2cgKFBh bgotIAkJX3RtcDEwXyA9IGJpbmFyeTsKLSAJCV90bXAxMV8gPSBlOwotIAkJX3RtcDEyXyA9IF90 bXAxMV8tPm1lc3NhZ2U7Ci0tCQlnX3dhcm5pbmcgKCJwYW5lbC52YWxhOjIzOTogRXhlY3V0ZSAl cyBmYWlsZWQhICVzIiwgX3RtcDEwXywgX3RtcDEyXyk7Ci0rCQlnX3dhcm5pbmcgKCJwYW5lbC52 YWxhOjQ3ODogRXhlY3V0ZSAlcyBmYWlsZWQhICVzIiwgX3RtcDEwXywgX3RtcDEyXyk7Ci0gCQlz ZWxmLT5wcml2LT5tX3NldHVwX3BpZCA9IChHUGlkKSAwOwotIAkJX2dfZXJyb3JfZnJlZTAgKGUp OwotIAl9Ci0tCV9fZmluYWxseTM6Ci0rCV9fZmluYWxseTI6Ci0gCWlmIChfaW5uZXJfZXJyb3Jf ICE9IE5VTEwpIHsKLSAJCV9nX2ZyZWUwIChiaW5hcnkpOwotIAkJZ19jcml0aWNhbCAoImZpbGUg JXM6IGxpbmUgJWQ6IHVuY2F1Z2h0IGVycm9yOiAlcyAoJXMsICVkKSIsIF9fRklMRV9fLCBfX0xJ TkVfXywgX2lubmVyX2Vycm9yXy0+bWVzc2FnZSwgZ19xdWFya190b19zdHJpbmcgKF9pbm5lcl9l cnJvcl8tPmRvbWFpbiksIF9pbm5lcl9lcnJvcl8tPmNvZGUpOwotQEAgLTE5NTAsMTIgKzMwNDUs MzEgQEAgc3RhdGljIHZvaWQgcGFuZWxfY2xhc3NfaW5pdCAoUGFuZWxDbGFzcwotIAotIHN0YXRp YyB2b2lkIHBhbmVsX2luc3RhbmNlX2luaXQgKFBhbmVsICogc2VsZikgewotIAlJQnVzRW5naW5l RGVzYyoqIF90bXAwXyA9IE5VTEw7Ci0rCWdjaGFyKiogX3RtcDFfID0gTlVMTDsKLSsJZ2NoYXIq KiBfdG1wMl8gPSBOVUxMOwotKwlnY2hhcioqIF90bXAzXyA9IE5VTEw7Ci0gCXNlbGYtPnByaXYg PSBQQU5FTF9HRVRfUFJJVkFURSAoc2VsZik7Ci0gCV90bXAwXyA9IGdfbmV3MCAoSUJ1c0VuZ2lu ZURlc2MqLCAwICsgMSk7Ci0gCXNlbGYtPnByaXYtPm1fZW5naW5lcyA9IF90bXAwXzsKLSAJc2Vs Zi0+cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDEgPSAwOwotIAlzZWxmLT5wcml2LT5fbV9lbmdpbmVz X3NpemVfID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDE7Ci0gCXNlbGYtPnByaXYtPm1f c2V0dXBfcGlkID0gKEdQaWQpIDA7Ci0rCXNlbGYtPnByaXYtPm1fZ2tiZGxheW91dCA9IE5VTEw7 Ci0rCXNlbGYtPnByaXYtPm1feGtibGF5b3V0ID0gTlVMTDsKLSsJX3RtcDFfID0gZ19uZXcwIChn Y2hhciosIDAgKyAxKTsKLSsJc2VsZi0+cHJpdi0+bV9sYXlvdXRzID0gX3RtcDFfOwotKwlzZWxm LT5wcml2LT5tX2xheW91dHNfbGVuZ3RoMSA9IDA7Ci0rCXNlbGYtPnByaXYtPl9tX2xheW91dHNf c2l6ZV8gPSBzZWxmLT5wcml2LT5tX2xheW91dHNfbGVuZ3RoMTsKLSsJX3RtcDJfID0gZ19uZXcw IChnY2hhciosIDAgKyAxKTsKLSsJc2VsZi0+cHJpdi0+bV92YXJpYW50cyA9IF90bXAyXzsKLSsJ c2VsZi0+cHJpdi0+bV92YXJpYW50c19sZW5ndGgxID0gMDsKLSsJc2VsZi0+cHJpdi0+X21fdmFy aWFudHNfc2l6ZV8gPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDE7Ci0rCXNlbGYtPnBy aXYtPm1fZmFsbGJhY2tfbG9ja19pZCA9IC0xOwotKwlzZWxmLT5wcml2LT5tX2NoYW5nZWRfeGti X29wdGlvbiA9IEZBTFNFOwotKwlfdG1wM18gPSBnX25ldzAgKGdjaGFyKiwgMCArIDEpOwotKwlz ZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZUyA9IF90bXAzXzsKLSsJc2VsZi0+cHJp di0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMSA9IDA7Ci0rCXNlbGYtPnByaXYtPl9B Q0NFTEVSQVRPUl9JTUVfSE9US0VZU19zaXplXyA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lN RV9IT1RLRVlTX2xlbmd0aDE7Ci0gfQotIAotIAotQEAgLTE5NjMsMTUgKzMwNzcsNjYgQEAgc3Rh dGljIHZvaWQgcGFuZWxfZmluYWxpemUgKEdPYmplY3QqIG9iagotIAlQYW5lbCAqIHNlbGY7Ci0g CUtleWJpbmRpbmdNYW5hZ2VyKiBfdG1wMF8gPSBOVUxMOwotIAlLZXliaW5kaW5nTWFuYWdlciog a2V5YmluZGluZ19tYW5hZ2VyOwotLQlLZXliaW5kaW5nTWFuYWdlciogX3RtcDFfOwotLQlLZXli aW5kaW5nTWFuYWdlciogX3RtcDJfOwotKwlnY2hhcioqIF90bXAxXzsKLSsJZ2ludCBfdG1wMV9f bGVuZ3RoMTsKLSsJZ2Jvb2xlYW4gX3RtcDdfID0gRkFMU0U7Ci0rCWdib29sZWFuIF90bXA5XzsK LSAJc2VsZiA9IFBBTkVMIChvYmopOwotIAlfdG1wMF8gPSBrZXliaW5kaW5nX21hbmFnZXJfZ2V0 X2luc3RhbmNlICgpOwotIAlrZXliaW5kaW5nX21hbmFnZXIgPSBfdG1wMF87Ci0tCV90bXAxXyA9 IGtleWJpbmRpbmdfbWFuYWdlcjsKLS0Ja2V5YmluZGluZ19tYW5hZ2VyX3VuYmluZCAoX3RtcDFf LCBQQU5FTF9BQ0NFTEVSQVRPUl9TV0lUQ0hfSU1FX0ZPUkVXQVJEKTsKLS0JX3RtcDJfID0ga2V5 YmluZGluZ19tYW5hZ2VyOwotLQlrZXliaW5kaW5nX21hbmFnZXJfdW5iaW5kIChfdG1wMl8sIFBB TkVMX0FDQ0VMRVJBVE9SX1NXSVRDSF9JTUVfQkFDS1dBUkQpOwotKwlfdG1wMV8gPSBzZWxmLT5w cml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZUzsKLSsJX3RtcDFfX2xlbmd0aDEgPSBzZWxmLT5w cml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxOwotKwl7Ci0rCQlnY2hhcioqIGtl eWJpbmRpbmdfY29sbGVjdGlvbiA9IE5VTEw7Ci0rCQlnaW50IGtleWJpbmRpbmdfY29sbGVjdGlv bl9sZW5ndGgxID0gMDsKLSsJCWdpbnQgX2tleWJpbmRpbmdfY29sbGVjdGlvbl9zaXplXyA9IDA7 Ci0rCQlnaW50IGtleWJpbmRpbmdfaXQgPSAwOwotKwkJa2V5YmluZGluZ19jb2xsZWN0aW9uID0g X3RtcDFfOwotKwkJa2V5YmluZGluZ19jb2xsZWN0aW9uX2xlbmd0aDEgPSBfdG1wMV9fbGVuZ3Ro MTsKLSsJCWZvciAoa2V5YmluZGluZ19pdCA9IDA7IGtleWJpbmRpbmdfaXQgPCBfdG1wMV9fbGVu Z3RoMTsga2V5YmluZGluZ19pdCA9IGtleWJpbmRpbmdfaXQgKyAxKSB7Ci0rCQkJZ2NoYXIqIF90 bXAyXzsKLSsJCQlnY2hhcioga2V5YmluZGluZyA9IE5VTEw7Ci0rCQkJX3RtcDJfID0gZ19zdHJk dXAgKGtleWJpbmRpbmdfY29sbGVjdGlvbltrZXliaW5kaW5nX2l0XSk7Ci0rCQkJa2V5YmluZGlu ZyA9IF90bXAyXzsKLSsJCQl7Ci0rCQkJCUtleWJpbmRpbmdNYW5hZ2VyKiBfdG1wM187Ci0rCQkJ CWNvbnN0IGdjaGFyKiBfdG1wNF87Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wNV87Ci0rCQkJCV90 bXAzXyA9IGtleWJpbmRpbmdfbWFuYWdlcjsKLSsJCQkJX3RtcDRfID0ga2V5YmluZGluZzsKLSsJ CQkJa2V5YmluZGluZ19tYW5hZ2VyX3VuYmluZCAoX3RtcDNfLCBfdG1wNF8pOwotKwkJCQlfdG1w NV8gPSBrZXliaW5kaW5nOwotKwkJCQlpZiAoZ19zdHJjbXAwIChfdG1wNV8sIFBBTkVMX0FDQ0VM RVJBVE9SX1NXSVRDSF9JTUVfRk9SRVdBUkQpID09IDApIHsKLSsJCQkJCUtleWJpbmRpbmdNYW5h Z2VyKiBfdG1wNl87Ci0rCQkJCQlfdG1wNl8gPSBrZXliaW5kaW5nX21hbmFnZXI7Ci0rCQkJCQlr ZXliaW5kaW5nX21hbmFnZXJfdW5iaW5kIChfdG1wNl8sIFBBTkVMX0FDQ0VMRVJBVE9SX1NXSVRD SF9JTUVfQkFDS1dBUkQpOwotKwkJCQl9Ci0rCQkJCV9nX2ZyZWUwIChrZXliaW5kaW5nKTsKLSsJ CQl9Ci0rCQl9Ci0rCX0KLSsJaWYgKEhBVkVfSUJVU19HS0JEKSB7Ci0rCQlHa2JkTGF5b3V0KiBf dG1wOF87Ci0rCQlfdG1wOF8gPSBzZWxmLT5wcml2LT5tX2drYmRsYXlvdXQ7Ci0rCQlfdG1wN18g PSBfdG1wOF8gIT0gTlVMTDsKLSsJfSBlbHNlIHsKLSsJCV90bXA3XyA9IEZBTFNFOwotKwl9Ci0r CV90bXA5XyA9IF90bXA3XzsKLSsJaWYgKF90bXA5XykgewotKwkJR2tiZExheW91dCogX3RtcDEw XzsKLSsJCWd1aW50IF90bXAxMV8gPSAwVTsKLSsJCUdrYmRMYXlvdXQqIF90bXAxMl87Ci0rCQlf dG1wMTBfID0gc2VsZi0+cHJpdi0+bV9na2JkbGF5b3V0OwotKwkJZ19zaWduYWxfcGFyc2VfbmFt ZSAoImNoYW5nZWQiLCBUWVBFX0dLQkRfTEFZT1VULCAmX3RtcDExXywgTlVMTCwgRkFMU0UpOwot KwkJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkIChfdG1wMTBfLCBHX1NJR05B TF9NQVRDSF9JRCB8IEdfU0lHTkFMX01BVENIX0ZVTkMgfCBHX1NJR05BTF9NQVRDSF9EQVRBLCBf dG1wMTFfLCAwLCBOVUxMLCAoR0NhbGxiYWNrKSBfcGFuZWxfZ2tiZGxheW91dF9jaGFuZ2VkX2Ni X2drYmRfbGF5b3V0X2NoYW5nZWQsIHNlbGYpOwotKwkJX3RtcDEyXyA9IHNlbGYtPnByaXYtPm1f Z2tiZGxheW91dDsKLSsJCWdrYmRfbGF5b3V0X3N0b3BfbGlzdGVuIChfdG1wMTJfKTsKLSsJCV9n a2JkX2xheW91dF91bnJlZjAgKHNlbGYtPnByaXYtPm1fZ2tiZGxheW91dCk7Ci0rCQlzZWxmLT5w cml2LT5tX2drYmRsYXlvdXQgPSBOVUxMOwotKwl9Ci0rCV94a2JfbGF5b3V0X3VucmVmMCAoc2Vs Zi0+cHJpdi0+bV94a2JsYXlvdXQpOwotKwlzZWxmLT5wcml2LT5tX3hrYmxheW91dCA9IE5VTEw7 Ci0gCV9nX29iamVjdF91bnJlZjAgKGtleWJpbmRpbmdfbWFuYWdlcik7Ci0gCV9nX29iamVjdF91 bnJlZjAgKHNlbGYtPnByaXYtPm1fYnVzKTsKLSAJX2dfb2JqZWN0X3VucmVmMCAoc2VsZi0+cHJp di0+bV9jb25maWcpOwotQEAgLTE5ODMsNiArMzE0OCwxMiBAQCBzdGF0aWMgdm9pZCBwYW5lbF9m aW5hbGl6ZSAoR09iamVjdCogb2JqCi0gCV9nX29iamVjdF91bnJlZjAgKHNlbGYtPnByaXYtPm1f c3dpdGNoZXIpOwotIAlfcHJvcGVydHlfbWFuYWdlcl91bnJlZjAgKHNlbGYtPnByaXYtPm1fcHJv cGVydHlfbWFuYWdlcik7Ci0gCV9nX29iamVjdF91bnJlZjAgKHNlbGYtPnByaXYtPm1fYWJvdXRf ZGlhbG9nKTsKLSsJX2drYmRfbGF5b3V0X3VucmVmMCAoc2VsZi0+cHJpdi0+bV9na2JkbGF5b3V0 KTsKLSsJX3hrYl9sYXlvdXRfdW5yZWYwIChzZWxmLT5wcml2LT5tX3hrYmxheW91dCk7Ci0rCXNl bGYtPnByaXYtPm1fbGF5b3V0cyA9IChfdmFsYV9hcnJheV9mcmVlIChzZWxmLT5wcml2LT5tX2xh eW91dHMsIHNlbGYtPnByaXYtPm1fbGF5b3V0c19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdf ZnJlZSksIE5VTEwpOwotKwlzZWxmLT5wcml2LT5tX3ZhcmlhbnRzID0gKF92YWxhX2FycmF5X2Zy ZWUgKHNlbGYtPnByaXYtPm1fdmFyaWFudHMsIHNlbGYtPnByaXYtPm1fdmFyaWFudHNfbGVuZ3Ro MSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJX2dfdGltZXJfZGVzdHJveTAg KHNlbGYtPnByaXYtPm1fY2hhbmdlZF9sYXlvdXRfdGltZXIpOwotKwlzZWxmLT5wcml2LT5BQ0NF TEVSQVRPUl9JTUVfSE9US0VZUyA9IChfdmFsYV9hcnJheV9mcmVlIChzZWxmLT5wcml2LT5BQ0NF TEVSQVRPUl9JTUVfSE9US0VZUywgc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNf bGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSAJR19PQkpFQ1RfQ0xB U1MgKHBhbmVsX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmopOwotIH0KLSAKLS0tLSBpYnVz L3VpL2d0azMvc3dpdGNoZXIuYy5vcmlnCTIwMTItMDMtMDQgMTk6MDU6MzUuMDAwMDAwMDAwICsw OTAwCi0rKysgaWJ1cy91aS9ndGszL3N3aXRjaGVyLmMJMjAxMi0wMy0xMCAxMToyNjozMC40MjQ5 ODQxMzcgKzA5MDAKLUBAIC0xMDMsNyArMTAzLDcgQEAgZ3VpbnQga2V5YmluZGluZ19tYW5hZ2Vy X2dldF9wcmltYXJ5X21vZAotIHN0YXRpYyB2b2lkIHN3aXRjaGVyX3VwZGF0ZV9lbmdpbmVzIChT d2l0Y2hlciogc2VsZiwgSUJ1c0VuZ2luZURlc2MqKiBlbmdpbmVzLCBpbnQgZW5naW5lc19sZW5n dGgxKTsKLSBzdGF0aWMgZ2Jvb2xlYW4gX19fbGFtYmRhMTVfIChTd2l0Y2hlciogc2VsZik7Ci0g c3RhdGljIGdib29sZWFuIF9fX19sYW1iZGExNV9fZ3NvdXJjZV9mdW5jIChncG9pbnRlciBzZWxm KTsKLS1zdGF0aWMgSUJ1c0VuZ2luZURlc2MqKiBfdmFsYV9hcnJheV9kdXA1IChJQnVzRW5naW5l RGVzYyoqIHNlbGYsIGludCBsZW5ndGgpOwotK3N0YXRpYyBJQnVzRW5naW5lRGVzYyoqIF92YWxh X2FycmF5X2R1cDcgKElCdXNFbmdpbmVEZXNjKiogc2VsZiwgaW50IGxlbmd0aCk7Ci0gc3RhdGlj IEJsb2NrNURhdGEqIGJsb2NrNV9kYXRhX3JlZiAoQmxvY2s1RGF0YSogX2RhdGE1Xyk7Ci0gc3Rh dGljIHZvaWQgYmxvY2s1X2RhdGFfdW5yZWYgKEJsb2NrNURhdGEqIF9kYXRhNV8pOwotIEljb25X aWRnZXQqIGljb25fd2lkZ2V0X25ldyAoY29uc3QgZ2NoYXIqIGljb24sIGdpbnQgc2l6ZSk7Ci1A QCAtMTEzLDcgKzExMyw3IEBAIHN0YXRpYyBnYm9vbGVhbiBfX19fX2xhbWJkYTEzXyAoQmxvY2s1 RGEKLSBzdGF0aWMgZ2Jvb2xlYW4gX19fX19fbGFtYmRhMTNfX2d0a193aWRnZXRfZW50ZXJfbm90 aWZ5X2V2ZW50IChHdGtXaWRnZXQqIF9zZW5kZXIsIEdka0V2ZW50Q3Jvc3NpbmcqIGV2ZW50LCBn cG9pbnRlciBzZWxmKTsKLSBzdGF0aWMgZ2Jvb2xlYW4gX19fX19sYW1iZGExNF8gKEJsb2NrNURh dGEqIF9kYXRhNV8sIEdka0V2ZW50QnV0dG9uKiBlKTsKLSBzdGF0aWMgZ2Jvb2xlYW4gX19fX19f bGFtYmRhMTRfX2d0a193aWRnZXRfYnV0dG9uX3ByZXNzX2V2ZW50IChHdGtXaWRnZXQqIF9zZW5k ZXIsIEdka0V2ZW50QnV0dG9uKiBldmVudCwgZ3BvaW50ZXIgc2VsZik7Ci0tc3RhdGljIHZvaWQg X3ZhbGFfYXJyYXlfYWRkMTIgKEd0a0J1dHRvbioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCog c2l6ZSwgR3RrQnV0dG9uKiB2YWx1ZSk7Ci0rc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTkg KEd0a0J1dHRvbioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgR3RrQnV0dG9uKiB2 YWx1ZSk7Ci0gc3RhdGljIHZvaWQgc3dpdGNoZXJfbmV4dF9lbmdpbmUgKFN3aXRjaGVyKiBzZWxm KTsKLSBzdGF0aWMgdm9pZCBzd2l0Y2hlcl9wcmV2aW91c19lbmdpbmUgKFN3aXRjaGVyKiBzZWxm KTsKLSBzdGF0aWMgdm9pZCBzd2l0Y2hlcl9yZWFsX3Nob3cgKEd0a1dpZGdldCogYmFzZSk7Ci1A QCAtMjA3LDcgKzIwNyw5IEBAIGdpbnQgc3dpdGNoZXJfcnVuIChTd2l0Y2hlciogc2VsZiwgR2Rr RXYKLSAJR2RrR3JhYlN0YXR1cyBfdG1wNDhfOwotIAlHTWFpbkxvb3AqIF90bXA1MF87Ci0gCUdN YWluTG9vcCogX3RtcDUxXzsKLS0JZ2ludCBfdG1wNTNfOwotKwlHZGtEZXZpY2UqIF90bXA1Ml87 Ci0rCUdka0RldmljZSogX3RtcDUzXzsKLSsJZ2ludCBfdG1wNTVfOwotIAlnX3JldHVybl92YWxf aWZfZmFpbCAoc2VsZiAhPSBOVUxMLCAwKTsKLSAJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGV2ZW50 ICE9IE5VTEwsIDApOwotIAlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX2xvb3A7Ci1AQCAtMzM1LDE3 ICszMzcsMjEgQEAgZ2ludCBzd2l0Y2hlcl9ydW4gKFN3aXRjaGVyKiBzZWxmLCBHZGtFdgotIAln X21haW5fbG9vcF9ydW4gKF90bXA1MV8pOwotIAlfZ19tYWluX2xvb3BfdW5yZWYwIChzZWxmLT5w cml2LT5tX2xvb3ApOwotIAlzZWxmLT5wcml2LT5tX2xvb3AgPSBOVUxMOwotKwlfdG1wNTJfID0g a2V5Ym9hcmQ7Ci0rCWdka19kZXZpY2VfdW5ncmFiIChfdG1wNTJfLCAoZ3VpbnQzMikgR0RLX0NV UlJFTlRfVElNRSk7Ci0rCV90bXA1M18gPSBwb2ludGVyOwotKwlnZGtfZGV2aWNlX3VuZ3JhYiAo X3RtcDUzXywgKGd1aW50MzIpIEdES19DVVJSRU5UX1RJTUUpOwotIAlndGtfd2lkZ2V0X2hpZGUg KChHdGtXaWRnZXQqKSBzZWxmKTsKLSAJd2hpbGUgKFRSVUUpIHsKLS0JCWdib29sZWFuIF90bXA1 Ml8gPSBGQUxTRTsKLS0JCV90bXA1Ml8gPSBndGtfZXZlbnRzX3BlbmRpbmcgKCk7Ci0tCQlpZiAo IV90bXA1Ml8pIHsKLSsJCWdib29sZWFuIF90bXA1NF8gPSBGQUxTRTsKLSsJCV90bXA1NF8gPSBn dGtfZXZlbnRzX3BlbmRpbmcgKCk7Ci0rCQlpZiAoIV90bXA1NF8pIHsKLSAJCQlicmVhazsKLSAJ CX0KLSAJCWd0a19tYWluX2l0ZXJhdGlvbiAoKTsKLSAJfQotLQlfdG1wNTNfID0gc2VsZi0+cHJp di0+bV9yZXN1bHQ7Ci0tCXJlc3VsdCA9IF90bXA1M187Ci0rCV90bXA1NV8gPSBzZWxmLT5wcml2 LT5tX3Jlc3VsdDsKLSsJcmVzdWx0ID0gX3RtcDU1XzsKLSAJX2dfb2JqZWN0X3VucmVmMCAocG9p bnRlcik7Ci0gCV9nX29iamVjdF91bnJlZjAgKGtleWJvYXJkKTsKLSAJX2dfb2JqZWN0X3VucmVm MCAoZGV2aWNlKTsKLUBAIC0zNTMsNyArMzU5LDcgQEAgZ2ludCBzd2l0Y2hlcl9ydW4gKFN3aXRj aGVyKiBzZWxmLCBHZGtFdgotIH0KLSAKLSAKLS1zdGF0aWMgSUJ1c0VuZ2luZURlc2MqKiBfdmFs YV9hcnJheV9kdXA1IChJQnVzRW5naW5lRGVzYyoqIHNlbGYsIGludCBsZW5ndGgpIHsKLStzdGF0 aWMgSUJ1c0VuZ2luZURlc2MqKiBfdmFsYV9hcnJheV9kdXA3IChJQnVzRW5naW5lRGVzYyoqIHNl bGYsIGludCBsZW5ndGgpIHsKLSAJSUJ1c0VuZ2luZURlc2MqKiByZXN1bHQ7Ci0gCWludCBpOwot IAlyZXN1bHQgPSBnX25ldzAgKElCdXNFbmdpbmVEZXNjKiwgbGVuZ3RoICsgMSk7Ci1AQCAtNDMy LDcgKzQzOCw3IEBAIHN0YXRpYyBnYm9vbGVhbiBfX19fX19sYW1iZGExNF9fZ3RrX3dpZGcKLSB9 Ci0gCi0gCi0tc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTIgKEd0a0J1dHRvbioqKiBhcnJh eSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgR3RrQnV0dG9uKiB2YWx1ZSkgewotK3N0YXRpYyB2 b2lkIF92YWxhX2FycmF5X2FkZDE5IChHdGtCdXR0b24qKiogYXJyYXksIGludCogbGVuZ3RoLCBp bnQqIHNpemUsIEd0a0J1dHRvbiogdmFsdWUpIHsKLSAJaWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUp KSB7Ci0gCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKLSAJCSphcnJheSA9 IGdfcmVuZXcgKEd0a0J1dHRvbiosICphcnJheSwgKCpzaXplKSArIDEpOwotQEAgLTUwMCw3ICs1 MDYsNyBAQCBzdGF0aWMgdm9pZCBzd2l0Y2hlcl91cGRhdGVfZW5naW5lcyAoU3dpCi0gCWhlaWdo dCA9IF90bXA3XzsKLSAJX3RtcDhfID0gZW5naW5lczsKLSAJX3RtcDhfX2xlbmd0aDEgPSBlbmdp bmVzX2xlbmd0aDE7Ci0tCV90bXA5XyA9IChfdG1wOF8gIT0gTlVMTCkgPyBfdmFsYV9hcnJheV9k dXA1IChfdG1wOF8sIF90bXA4X19sZW5ndGgxKSA6ICgoZ3BvaW50ZXIpIF90bXA4Xyk7Ci0rCV90 bXA5XyA9IChfdG1wOF8gIT0gTlVMTCkgPyBfdmFsYV9hcnJheV9kdXA3IChfdG1wOF8sIF90bXA4 X19sZW5ndGgxKSA6ICgoZ3BvaW50ZXIpIF90bXA4Xyk7Ci0gCV90bXA5X19sZW5ndGgxID0gX3Rt cDhfX2xlbmd0aDE7Ci0gCXNlbGYtPnByaXYtPm1fZW5naW5lcyA9IChfdmFsYV9hcnJheV9mcmVl IChzZWxmLT5wcml2LT5tX2VuZ2luZXMsIHNlbGYtPnByaXYtPm1fZW5naW5lc19sZW5ndGgxLCAo R0Rlc3Ryb3lOb3RpZnkpIGdfb2JqZWN0X3VucmVmKSwgTlVMTCk7Ci0gCXNlbGYtPnByaXYtPm1f ZW5naW5lcyA9IF90bXA5XzsKLUBAIC01OTksNyArNjA1LDcgQEAgc3RhdGljIHZvaWQgc3dpdGNo ZXJfdXBkYXRlX2VuZ2luZXMgKFN3aQotIAkJCQlfdG1wMzZfX2xlbmd0aDEgPSBzZWxmLT5wcml2 LT5tX2J1dHRvbnNfbGVuZ3RoMTsKLSAJCQkJX3RtcDM3XyA9IF9kYXRhNV8tPmJ1dHRvbjsKLSAJ CQkJX3RtcDM4XyA9IF9nX29iamVjdF9yZWYwIChfdG1wMzdfKTsKLS0JCQkJX3ZhbGFfYXJyYXlf YWRkMTIgKCZzZWxmLT5wcml2LT5tX2J1dHRvbnMsICZzZWxmLT5wcml2LT5tX2J1dHRvbnNfbGVu Z3RoMSwgJnNlbGYtPnByaXYtPl9tX2J1dHRvbnNfc2l6ZV8sIF90bXAzOF8pOwotKwkJCQlfdmFs YV9hcnJheV9hZGQxOSAoJnNlbGYtPnByaXYtPm1fYnV0dG9ucywgJnNlbGYtPnByaXYtPm1fYnV0 dG9uc19sZW5ndGgxLCAmc2VsZi0+cHJpdi0+X21fYnV0dG9uc19zaXplXywgX3RtcDM4Xyk7Ci0g CQkJCV9nX29iamVjdF91bnJlZjAgKGVuZ2luZSk7Ci0gCQkJCWJsb2NrNV9kYXRhX3VucmVmIChf ZGF0YTVfKTsKLSAJCQkJX2RhdGE1XyA9IE5VTEw7Ci1AQCAtNzI1LDcgKzczMSw3IEBAIHN0YXRp YyBnYm9vbGVhbiBzd2l0Y2hlcl9yZWFsX2tleV9wcmVzc18KLSAJCQlndWludCBfdG1wNV87Ci0g CQkJX3RtcDRfID0gcGU7Ci0gCQkJX3RtcDVfID0gKCpfdG1wNF8pLmtleXZhbDsKLS0JCQlnX2Rl YnVnICgic3dpdGNoZXIudmFsYToyMjU6IDB4JTA0eCIsIF90bXA1Xyk7Ci0rCQkJZ19kZWJ1ZyAo InN3aXRjaGVyLnZhbGE6MjI4OiAweCUwNHgiLCBfdG1wNV8pOwotIAkJCWJyZWFrOwotIAkJfQot IAl9Ci1AQCAtNzQyLDcgKzc0OCw4IEBAIHN0YXRpYyBnYm9vbGVhbiBzd2l0Y2hlcl9yZWFsX2tl eV9yZWxlYXMKLSAJZ3VpbnQgX3RtcDFfOwotIAlnYm9vbGVhbiBfdG1wMl8gPSBGQUxTRTsKLSAJ R01haW5Mb29wKiBfdG1wM187Ci0tCWd1aW50IF90bXA0XzsKLSsJR01haW5Mb29wKiBfdG1wNF87 Ci0rCWd1aW50IF90bXA1XzsKLSAJc2VsZiA9IChTd2l0Y2hlciopIGJhc2U7Ci0gCWdfcmV0dXJu X3ZhbF9pZl9mYWlsIChlICE9IE5VTEwsIEZBTFNFKTsKLSAJcGUgPSBlOwotQEAgLTc1NCw5ICs3 NjEsMTQgQEAgc3RhdGljIGdib29sZWFuIHN3aXRjaGVyX3JlYWxfa2V5X3JlbGVhcwotIAkJcmV0 dXJuIHJlc3VsdDsKLSAJfQotIAlfdG1wM18gPSBzZWxmLT5wcml2LT5tX2xvb3A7Ci0tCWdfbWFp bl9sb29wX3F1aXQgKF90bXAzXyk7Ci0tCV90bXA0XyA9IHNlbGYtPnByaXYtPm1fc2VsZWN0ZWRf ZW5naW5lOwotLQlzZWxmLT5wcml2LT5tX3Jlc3VsdCA9IChnaW50KSBfdG1wNF87Ci0rCWlmIChf dG1wM18gPT0gTlVMTCkgewotKwkJcmVzdWx0ID0gRkFMU0U7Ci0rCQlyZXR1cm4gcmVzdWx0Owot Kwl9Ci0rCV90bXA0XyA9IHNlbGYtPnByaXYtPm1fbG9vcDsKLSsJZ19tYWluX2xvb3BfcXVpdCAo X3RtcDRfKTsKLSsJX3RtcDVfID0gc2VsZi0+cHJpdi0+bV9zZWxlY3RlZF9lbmdpbmU7Ci0rCXNl bGYtPnByaXYtPm1fcmVzdWx0ID0gKGdpbnQpIF90bXA1XzsKLSAJcmVzdWx0ID0gVFJVRTsKLSAJ cmV0dXJuIHJlc3VsdDsKLSB9Ci0tLS0gaWJ1cy91aS9ndGszL3hrYmxheW91dC5jLm9yaWcJMjAx Mi0wMy0wOSAxODo1ODo0MS40NTI4MDQwOTAgKzA5MDAKLSsrKyBpYnVzL3VpL2d0azMveGtibGF5 b3V0LmMJMjAxMi0wMy0wOSAxODo1NDo1MS43MTg1NTg0NTYgKzA5MDAKLUBAIC0wLDAgKzEsMjQ0 MSBAQAotKy8qIHhrYmxheW91dC5jIGdlbmVyYXRlZCBieSB2YWxhYyAwLjE1LjEsIHRoZSBWYWxh IGNvbXBpbGVyCi0rICogZ2VuZXJhdGVkIGZyb20geGtibGF5b3V0LnZhbGEsIGRvIG5vdCBtb2Rp ZnkgKi8KLSsKLSsvKiB2aW06c2V0IGV0IHN0cz00IHN3PTQ6Ci0rICoKLSsgKiBpYnVzIC0gVGhl IElucHV0IEJ1cwotKyAqCi0rICogQ29weXJpZ2h0IDIwMTIgUmVkIEhhdCwgSW5jLgotKyAqIENv cHlyaWdodChjKSAyMDEyIFBlbmcgSHVhbmcgPHNoYXduLnAuaHVhbmdAZ21haWwuY29tPgotKyAq IENvcHlyaWdodChjKSAyMDEyIFRha2FvIEZ1aml3YXJhIDx0ZnVqaXdhckByZWRoYXQuY29tPgot KyAqCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgotKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSsgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UsIG9yKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsgKgotKyAqIFRoaXMg bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0rICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyAqCi0rICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotKyAqIExpY2Vuc2UgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0rICogRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKLSsgKiBC b3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSsgKi8KLSsKLSsjaW5jbHVkZSA8Z2xpYi5oPgot KyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGlidXMuaD4KLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsj aW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSsjaW5jbHVkZSA8Z29iamVjdC9ndmFsdWVjb2xsZWN0 b3IuaD4KLSsKLSsKLSsjZGVmaW5lIFRZUEVfWEtCX0xBWU9VVCAoeGtiX2xheW91dF9nZXRfdHlw ZSAoKSkKLSsjZGVmaW5lIFhLQl9MQVlPVVQob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB U1QgKChvYmopLCBUWVBFX1hLQl9MQVlPVVQsIFhLQkxheW91dCkpCi0rI2RlZmluZSBYS0JfTEFZ T1VUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFRZUEVf WEtCX0xBWU9VVCwgWEtCTGF5b3V0Q2xhc3MpKQotKyNkZWZpbmUgSVNfWEtCX0xBWU9VVChvYmop IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFRZUEVfWEtCX0xBWU9VVCkpCi0r I2RlZmluZSBJU19YS0JfTEFZT1VUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ UEUgKChrbGFzcyksIFRZUEVfWEtCX0xBWU9VVCkpCi0rI2RlZmluZSBYS0JfTEFZT1VUX0dFVF9D TEFTUyhvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgVFlQRV9YS0JfTEFZ T1VULCBYS0JMYXlvdXRDbGFzcykpCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgX1hLQkxheW91dCBYS0JM YXlvdXQ7Ci0rdHlwZWRlZiBzdHJ1Y3QgX1hLQkxheW91dENsYXNzIFhLQkxheW91dENsYXNzOwot K3R5cGVkZWYgc3RydWN0IF9YS0JMYXlvdXRQcml2YXRlIFhLQkxheW91dFByaXZhdGU7Ci0rI2Rl ZmluZSBfZ19mcmVlMCh2YXIpICh2YXIgPSAoZ19mcmVlICh2YXIpLCBOVUxMKSkKLSsjZGVmaW5l IF9nX29iamVjdF91bnJlZjAodmFyKSAoKHZhciA9PSBOVUxMKSA/IE5VTEwgOiAodmFyID0gKGdf b2JqZWN0X3VucmVmICh2YXIpLCBOVUxMKSkpCi0rI2RlZmluZSBfZ192YXJpYW50X3VucmVmMCh2 YXIpICgodmFyID09IE5VTEwpID8gTlVMTCA6ICh2YXIgPSAoZ192YXJpYW50X3VucmVmICh2YXIp LCBOVUxMKSkpCi0rI2RlZmluZSBfZ19lcnJvcl9mcmVlMCh2YXIpICgodmFyID09IE5VTEwpID8g TlVMTCA6ICh2YXIgPSAoZ19lcnJvcl9mcmVlICh2YXIpLCBOVUxMKSkpCi0rdHlwZWRlZiBzdHJ1 Y3QgX1BhcmFtU3BlY1hLQkxheW91dCBQYXJhbVNwZWNYS0JMYXlvdXQ7Ci0rCi0rc3RydWN0IF9Y S0JMYXlvdXQgewotKwlHVHlwZUluc3RhbmNlIHBhcmVudF9pbnN0YW5jZTsKLSsJdm9sYXRpbGUg aW50IHJlZl9jb3VudDsKLSsJWEtCTGF5b3V0UHJpdmF0ZSAqIHByaXY7Ci0rfTsKLSsKLStzdHJ1 Y3QgX1hLQkxheW91dENsYXNzIHsKLSsJR1R5cGVDbGFzcyBwYXJlbnRfY2xhc3M7Ci0rCXZvaWQg KCpmaW5hbGl6ZSkgKFhLQkxheW91dCAqc2VsZik7Ci0rfTsKLSsKLStzdHJ1Y3QgX1hLQkxheW91 dFByaXZhdGUgewotKwlnY2hhciogbV94a2JfY29tbWFuZDsKLSsJSUJ1c0NvbmZpZyogbV9jb25m aWc7Ci0rCWdjaGFyKiogbV94a2JfbGF0aW5fbGF5b3V0czsKLSsJZ2ludCBtX3hrYl9sYXRpbl9s YXlvdXRzX2xlbmd0aDE7Ci0rCWdpbnQgX21feGtiX2xhdGluX2xheW91dHNfc2l6ZV87Ci0rCUdQ aWQgbV94a2JfcGlkOwotKwlHUGlkIG1feG1vZG1hcF9waWQ7Ci0rCWdjaGFyKiBtX3htb2RtYXBf Y29tbWFuZDsKLSsJZ2Jvb2xlYW4gbV91c2VfeG1vZG1hcDsKLSsJZ2NoYXIqKiBtX3htb2RtYXBf a25vd25fZmlsZXM7Ci0rCWdpbnQgbV94bW9kbWFwX2tub3duX2ZpbGVzX2xlbmd0aDE7Ci0rCWdp bnQgX21feG1vZG1hcF9rbm93bl9maWxlc19zaXplXzsKLSsJZ2NoYXIqIG1fZGVmYXVsdF9sYXlv dXQ7Ci0rCWdjaGFyKiBtX2RlZmF1bHRfdmFyaWFudDsKLSsJZ2NoYXIqIG1fZGVmYXVsdF9vcHRp b247Ci0rfTsKLSsKLStzdHJ1Y3QgX1BhcmFtU3BlY1hLQkxheW91dCB7Ci0rCUdQYXJhbVNwZWMg cGFyZW50X2luc3RhbmNlOwotK307Ci0rCi0rCi0rc3RhdGljIGdwb2ludGVyIHhrYl9sYXlvdXRf cGFyZW50X2NsYXNzID0gTlVMTDsKLSsKLStncG9pbnRlciB4a2JfbGF5b3V0X3JlZiAoZ3BvaW50 ZXIgaW5zdGFuY2UpOwotK3ZvaWQgeGtiX2xheW91dF91bnJlZiAoZ3BvaW50ZXIgaW5zdGFuY2Up OwotK0dQYXJhbVNwZWMqIHBhcmFtX3NwZWNfeGtiX2xheW91dCAoY29uc3QgZ2NoYXIqIG5hbWUs IGNvbnN0IGdjaGFyKiBuaWNrLCBjb25zdCBnY2hhciogYmx1cmIsIEdUeXBlIG9iamVjdF90eXBl LCBHUGFyYW1GbGFncyBmbGFncyk7Ci0rdm9pZCB2YWx1ZV9zZXRfeGtiX2xheW91dCAoR1ZhbHVl KiB2YWx1ZSwgZ3BvaW50ZXIgdl9vYmplY3QpOwotK3ZvaWQgdmFsdWVfdGFrZV94a2JfbGF5b3V0 IChHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB2X29iamVjdCk7Ci0rZ3BvaW50ZXIgdmFsdWVfZ2V0 X3hrYl9sYXlvdXQgKGNvbnN0IEdWYWx1ZSogdmFsdWUpOwotK0dUeXBlIHhrYl9sYXlvdXRfZ2V0 X3R5cGUgKHZvaWQpIEdfR05VQ19DT05TVDsKLSsjZGVmaW5lIFhLQl9MQVlPVVRfR0VUX1BSSVZB VEUobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBUWVBFX1hLQl9MQVlPVVQs IFhLQkxheW91dFByaXZhdGUpKQotK2VudW0gIHsKLSsJWEtCX0xBWU9VVF9EVU1NWV9QUk9QRVJU WQotK307Ci0rWEtCTGF5b3V0KiB4a2JfbGF5b3V0X25ldyAoSUJ1c0NvbmZpZyogY29uZmlnKTsK LStYS0JMYXlvdXQqIHhrYl9sYXlvdXRfY29uc3RydWN0IChHVHlwZSBvYmplY3RfdHlwZSwgSUJ1 c0NvbmZpZyogY29uZmlnKTsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQyMCAoZ2NoYXIq KiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Ci0rc3RhdGlj IGdjaGFyKiB4a2JfbGF5b3V0X2dldF9vdXRwdXRfZnJvbV9jbWRsaW5lIChYS0JMYXlvdXQqIHNl bGYsIGNvbnN0IGdjaGFyKiBhcmcsIGNvbnN0IGdjaGFyKiBlbGVtZW50KTsKLStzdGF0aWMgdm9p ZCBfdmFsYV9hcnJheV9hZGQyMSAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNp emUsIGdjaGFyKiB2YWx1ZSk7Ci0rc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMjIgKGdjaGFy KioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpOwotK3N0YXRp YyB2b2lkIHhrYl9sYXlvdXRfc2V0X2xheW91dF9jYiAoWEtCTGF5b3V0KiBzZWxmLCBHUGlkIHBp ZCwgZ2ludCBzdGF0dXMpOwotK3ZvaWQgeGtiX2xheW91dF9zZXRfeG1vZG1hcCAoWEtCTGF5b3V0 KiBzZWxmKTsKLStzdGF0aWMgdm9pZCB4a2JfbGF5b3V0X3NldF94bW9kbWFwX2NiIChYS0JMYXlv dXQqIHNlbGYsIEdQaWQgcGlkLCBnaW50IHN0YXR1cyk7Ci0rc3RhdGljIGdjaGFyKiB4a2JfbGF5 b3V0X2dldF9mdWxscGF0aCAoWEtCTGF5b3V0KiBzZWxmLCBjb25zdCBnY2hhciogY29tbWFuZCk7 Ci0rc3RhdGljIGdjaGFyKiogeGtiX2xheW91dF9nZXRfeGtiX2dyb3VwX2xheW91dCAoWEtCTGF5 b3V0KiBzZWxmLCBjb25zdCBnY2hhciogbGF5b3V0LCBjb25zdCBnY2hhciogdmFyaWFudCwgZ2lu dCBsYXlvdXRzX21heF9sZW5ndGgsIGludCogcmVzdWx0X2xlbmd0aDEpOwotK2djaGFyKiogeGti X2xheW91dF9nZXRfdmFyaWFudF9mcm9tX2xheW91dCAoWEtCTGF5b3V0KiBzZWxmLCBjb25zdCBn Y2hhciogbGF5b3V0LCBpbnQqIHJlc3VsdF9sZW5ndGgxKTsKLStnY2hhcioqIHhrYl9sYXlvdXRf Z2V0X29wdGlvbl9mcm9tX2xheW91dCAoWEtCTGF5b3V0KiBzZWxmLCBjb25zdCBnY2hhciogbGF5 b3V0LCBpbnQqIHJlc3VsdF9sZW5ndGgxKTsKLStnY2hhciogeGtiX2xheW91dF9nZXRfbGF5b3V0 IChYS0JMYXlvdXQqIHNlbGYpOwotK2djaGFyKiB4a2JfbGF5b3V0X2dldF92YXJpYW50IChYS0JM YXlvdXQqIHNlbGYpOwotK2djaGFyKiB4a2JfbGF5b3V0X2dldF9vcHRpb24gKFhLQkxheW91dCog c2VsZik7Ci0rZ2ludCogeGtiX2xheW91dF9zZXRfbGF5b3V0IChYS0JMYXlvdXQqIHNlbGYsIGNv bnN0IGdjaGFyKiBfbGF5b3V0LCBjb25zdCBnY2hhciogX3ZhcmlhbnQsIGNvbnN0IGdjaGFyKiBf b3B0aW9uLCBpbnQqIHJlc3VsdF9sZW5ndGgxKTsKLStzdGF0aWMgZ2Jvb2xlYW4gX3ZhbGFfc3Ry aW5nX2FycmF5X2NvbnRhaW5zIChnY2hhcioqIHN0YWNrLCBpbnQgc3RhY2tfbGVuZ3RoLCBnY2hh ciogbmVlZGxlKTsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQyMyAoZ2NoYXIqKiogYXJy YXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Ci0rc3RhdGljIHZvaWQg X3ZhbGFfYXJyYXlfYWRkMjQgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXpl LCBnY2hhciogdmFsdWUpOwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDI1IChnY2hhcioq KiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKLStzdGF0aWMg dm9pZCBfdmFsYV9hcnJheV9hZGQyNiAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQq IHNpemUsIGdjaGFyKiB2YWx1ZSk7Ci0rc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMjcgKGdj aGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpOwotK3N0 YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDI4IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgs IGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQy OSAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7 Ci0rc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMzAgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxl bmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpOwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5 X2FkZDMxIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZh bHVlKTsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQzMiAoZ2NoYXIqKiogYXJyYXksIGlu dCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Ci0rc3RhdGljIHZvaWQgX3hrYl9s YXlvdXRfc2V0X2xheW91dF9jYl9nY2hpbGRfd2F0Y2hfZnVuYyAoR1BpZCBwaWQsIGdpbnQgc3Rh dHVzLCBncG9pbnRlciBzZWxmKTsKLStzdGF0aWMgdm9pZCBfeGtiX2xheW91dF9zZXRfeG1vZG1h cF9jYl9nY2hpbGRfd2F0Y2hfZnVuYyAoR1BpZCBwaWQsIGdpbnQgc3RhdHVzLCBncG9pbnRlciBz ZWxmKTsKLSt2b2lkIHhrYl9sYXlvdXRfcmVzZXRfbGF5b3V0IChYS0JMYXlvdXQqIHNlbGYpOwot K3N0YXRpYyB2b2lkIHhrYl9sYXlvdXRfZmluYWxpemUgKFhLQkxheW91dCogb2JqKTsKLStzdGF0 aWMgdm9pZCBfdmFsYV9hcnJheV9kZXN0cm95IChncG9pbnRlciBhcnJheSwgZ2ludCBhcnJheV9s ZW5ndGgsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfZnVuYyk7Ci0rc3RhdGljIHZvaWQgX3ZhbGFf YXJyYXlfZnJlZSAoZ3BvaW50ZXIgYXJyYXksIGdpbnQgYXJyYXlfbGVuZ3RoLCBHRGVzdHJveU5v dGlmeSBkZXN0cm95X2Z1bmMpOwotK3N0YXRpYyBnaW50IF92YWxhX2FycmF5X2xlbmd0aCAoZ3Bv aW50ZXIgYXJyYXkpOwotKwotKwotK3N0YXRpYyBncG9pbnRlciBfZ19vYmplY3RfcmVmMCAoZ3Bv aW50ZXIgc2VsZikgewotKwlyZXR1cm4gc2VsZiA/IGdfb2JqZWN0X3JlZiAoc2VsZikgOiBOVUxM OwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQyMCAoZ2NoYXIqKiogYXJy YXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSkgewotKwlpZiAoKCpsZW5n dGgpID09ICgqc2l6ZSkpIHsKLSsJCSpzaXplID0gKCpzaXplKSA/ICgyICogKCpzaXplKSkgOiA0 OwotKwkJKmFycmF5ID0gZ19yZW5ldyAoZ2NoYXIqLCAqYXJyYXksICgqc2l6ZSkgKyAxKTsKLSsJ fQotKwkoKmFycmF5KVsoKmxlbmd0aCkrK10gPSB2YWx1ZTsKLSsJKCphcnJheSlbKmxlbmd0aF0g PSBOVUxMOwotK30KLSsKLSsKLStYS0JMYXlvdXQqIHhrYl9sYXlvdXRfY29uc3RydWN0IChHVHlw ZSBvYmplY3RfdHlwZSwgSUJ1c0NvbmZpZyogY29uZmlnKSB7Ci0rCVhLQkxheW91dCogc2VsZiA9 IE5VTEw7Ci0rCUlCdXNDb25maWcqIF90bXAxXzsKLSsJSUJ1c0NvbmZpZyogX3RtcDJfOwotKwlJ QnVzQ29uZmlnKiBfdG1wM187Ci0rCXNlbGYgPSAoWEtCTGF5b3V0KikgZ190eXBlX2NyZWF0ZV9p bnN0YW5jZSAob2JqZWN0X3R5cGUpOwotKwlpZiAoIUhBVkVfSUJVU19YS0IpIHsKLSsJCWdjaGFy KiBfdG1wMF87Ci0rCQlfdG1wMF8gPSBnX3N0cmR1cCAoInNldHhrYm1hcCIpOwotKwkJX2dfZnJl ZTAgKHNlbGYtPnByaXYtPm1feGtiX2NvbW1hbmQpOwotKwkJc2VsZi0+cHJpdi0+bV94a2JfY29t bWFuZCA9IF90bXAwXzsKLSsJfQotKwlfdG1wMV8gPSBjb25maWc7Ci0rCV90bXAyXyA9IF9nX29i amVjdF9yZWYwIChfdG1wMV8pOwotKwlfZ19vYmplY3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX2Nv bmZpZyk7Ci0rCXNlbGYtPnByaXYtPm1fY29uZmlnID0gX3RtcDJfOwotKwlfdG1wM18gPSBjb25m aWc7Ci0rCWlmIChfdG1wM18gIT0gTlVMTCkgewotKwkJSUJ1c0NvbmZpZyogX3RtcDRfOwotKwkJ R1ZhcmlhbnQqIF90bXA1XyA9IE5VTEw7Ci0rCQlHVmFyaWFudCogdmFsdWU7Ci0rCQlnYm9vbGVh biBfdG1wMjFfOwotKwkJX3RtcDRfID0gY29uZmlnOwotKwkJX3RtcDVfID0gaWJ1c19jb25maWdf Z2V0X3ZhbHVlIChfdG1wNF8sICJnZW5lcmFsIiwgInhrYl9sYXRpbl9sYXlvdXRzIik7Ci0rCQl2 YWx1ZSA9IF90bXA1XzsKLSsJCXsKLSsJCQlnaW50IGk7Ci0rCQkJaSA9IDA7Ci0rCQkJewotKwkJ CQlnYm9vbGVhbiBfdG1wNl87Ci0rCQkJCV90bXA2XyA9IFRSVUU7Ci0rCQkJCXdoaWxlIChUUlVF KSB7Ci0rCQkJCQlnYm9vbGVhbiBfdG1wN187Ci0rCQkJCQlnYm9vbGVhbiBfdG1wOV8gPSBGQUxT RTsKLSsJCQkJCUdWYXJpYW50KiBfdG1wMTBfOwotKwkJCQkJZ2Jvb2xlYW4gX3RtcDE0XzsKLSsJ CQkJCWdjaGFyKiogX3RtcDE1XzsKLSsJCQkJCWdpbnQgX3RtcDE1X19sZW5ndGgxOwotKwkJCQkJ R1ZhcmlhbnQqIF90bXAxNl87Ci0rCQkJCQlnaW50IF90bXAxN187Ci0rCQkJCQlHVmFyaWFudCog X3RtcDE4XyA9IE5VTEw7Ci0rCQkJCQlHVmFyaWFudCogX3RtcDE5XzsKLSsJCQkJCWdjaGFyKiBf dG1wMjBfID0gTlVMTDsKLSsJCQkJCV90bXA3XyA9IF90bXA2XzsKLSsJCQkJCWlmICghX3RtcDdf KSB7Ci0rCQkJCQkJZ2ludCBfdG1wOF87Ci0rCQkJCQkJX3RtcDhfID0gaTsKLSsJCQkJCQlpID0g X3RtcDhfICsgMTsKLSsJCQkJCX0KLSsJCQkJCV90bXA2XyA9IEZBTFNFOwotKwkJCQkJX3RtcDEw XyA9IHZhbHVlOwotKwkJCQkJaWYgKF90bXAxMF8gIT0gTlVMTCkgewotKwkJCQkJCWdpbnQgX3Rt cDExXzsKLSsJCQkJCQlHVmFyaWFudCogX3RtcDEyXzsKLSsJCQkJCQlnc2l6ZSBfdG1wMTNfID0g MFVMOwotKwkJCQkJCV90bXAxMV8gPSBpOwotKwkJCQkJCV90bXAxMl8gPSB2YWx1ZTsKLSsJCQkJ CQlfdG1wMTNfID0gZ192YXJpYW50X25fY2hpbGRyZW4gKF90bXAxMl8pOwotKwkJCQkJCV90bXA5 XyA9ICgoZ3NpemUpIF90bXAxMV8pIDwgX3RtcDEzXzsKLSsJCQkJCX0gZWxzZSB7Ci0rCQkJCQkJ X3RtcDlfID0gRkFMU0U7Ci0rCQkJCQl9Ci0rCQkJCQlfdG1wMTRfID0gX3RtcDlfOwotKwkJCQkJ aWYgKCFfdG1wMTRfKSB7Ci0rCQkJCQkJYnJlYWs7Ci0rCQkJCQl9Ci0rCQkJCQlfdG1wMTVfID0g c2VsZi0+cHJpdi0+bV94a2JfbGF0aW5fbGF5b3V0czsKLSsJCQkJCV90bXAxNV9fbGVuZ3RoMSA9 IHNlbGYtPnByaXYtPm1feGtiX2xhdGluX2xheW91dHNfbGVuZ3RoMTsKLSsJCQkJCV90bXAxNl8g PSB2YWx1ZTsKLSsJCQkJCV90bXAxN18gPSBpOwotKwkJCQkJX3RtcDE4XyA9IGdfdmFyaWFudF9n ZXRfY2hpbGRfdmFsdWUgKF90bXAxNl8sIChnc2l6ZSkgX3RtcDE3Xyk7Ci0rCQkJCQlfdG1wMTlf ID0gX3RtcDE4XzsKLSsJCQkJCV90bXAyMF8gPSBnX3ZhcmlhbnRfZHVwX3N0cmluZyAoX3RtcDE5 XywgTlVMTCk7Ci0rCQkJCQlfdmFsYV9hcnJheV9hZGQyMCAoJnNlbGYtPnByaXYtPm1feGtiX2xh dGluX2xheW91dHMsICZzZWxmLT5wcml2LT5tX3hrYl9sYXRpbl9sYXlvdXRzX2xlbmd0aDEsICZz ZWxmLT5wcml2LT5fbV94a2JfbGF0aW5fbGF5b3V0c19zaXplXywgX3RtcDIwXyk7Ci0rCQkJCQlf Z192YXJpYW50X3VucmVmMCAoX3RtcDE5Xyk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQl9Ci0rCQlfdG1w MjFfID0gc2VsZi0+cHJpdi0+bV91c2VfeG1vZG1hcDsKLSsJCWlmIChfdG1wMjFfKSB7Ci0rCQkJ SUJ1c0NvbmZpZyogX3RtcDIyXzsKLSsJCQlHVmFyaWFudCogX3RtcDIzXyA9IE5VTEw7Ci0rCQkJ R1ZhcmlhbnQqIF90bXAyNF87Ci0rCQkJZ2Jvb2xlYW4gX3RtcDI1XyA9IEZBTFNFOwotKwkJCV90 bXAyMl8gPSBjb25maWc7Ci0rCQkJX3RtcDIzXyA9IGlidXNfY29uZmlnX2dldF92YWx1ZSAoX3Rt cDIyXywgImdlbmVyYWwiLCAidXNlX3htb2RtYXAiKTsKLSsJCQlfdG1wMjRfID0gX3RtcDIzXzsK LSsJCQlfdG1wMjVfID0gZ192YXJpYW50X2dldF9ib29sZWFuIChfdG1wMjRfKTsKLSsJCQlzZWxm LT5wcml2LT5tX3VzZV94bW9kbWFwID0gX3RtcDI1XzsKLSsJCQlfZ192YXJpYW50X3VucmVmMCAo X3RtcDI0Xyk7Ci0rCQl9Ci0rCQlfZ192YXJpYW50X3VucmVmMCAodmFsdWUpOwotKwl9Ci0rCXJl dHVybiBzZWxmOwotK30KLSsKLSsKLStYS0JMYXlvdXQqIHhrYl9sYXlvdXRfbmV3IChJQnVzQ29u ZmlnKiBjb25maWcpIHsKLSsJcmV0dXJuIHhrYl9sYXlvdXRfY29uc3RydWN0IChUWVBFX1hLQl9M QVlPVVQsIGNvbmZpZyk7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDIx IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7 Ci0rCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewotKwkJKnNpemUgPSAoKnNpemUpID8gKDIg KiAoKnNpemUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwgKCpz aXplKSArIDEpOwotKwl9Ci0rCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOwotKwkoKmFy cmF5KVsqbGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5 X2FkZDIyIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZh bHVlKSB7Ci0rCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewotKwkJKnNpemUgPSAoKnNpemUp ID8gKDIgKiAoKnNpemUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJh eSwgKCpzaXplKSArIDEpOwotKwl9Ci0rCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOwot KwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwotKwotK3N0YXRpYyBnY2hhciogc3Ry aW5nX3NsaWNlIChjb25zdCBnY2hhciogc2VsZiwgZ2xvbmcgc3RhcnQsIGdsb25nIGVuZCkgewot KwlnY2hhciogcmVzdWx0ID0gTlVMTDsKLSsJZ2ludCBfdG1wMF87Ci0rCWdpbnQgX3RtcDFfOwot KwlnbG9uZyBzdHJpbmdfbGVuZ3RoOwotKwlnbG9uZyBfdG1wMl87Ci0rCWdsb25nIF90bXA1XzsK LSsJZ2Jvb2xlYW4gX3RtcDhfID0gRkFMU0U7Ci0rCWdsb25nIF90bXA5XzsKLSsJZ2Jvb2xlYW4g X3RtcDEyXzsKLSsJZ2Jvb2xlYW4gX3RtcDEzXyA9IEZBTFNFOwotKwlnbG9uZyBfdG1wMTRfOwot KwlnYm9vbGVhbiBfdG1wMTdfOwotKwlnbG9uZyBfdG1wMThfOwotKwlnbG9uZyBfdG1wMTlfOwot KwlnbG9uZyBfdG1wMjBfOwotKwlnbG9uZyBfdG1wMjFfOwotKwlnbG9uZyBfdG1wMjJfOwotKwln Y2hhciogX3RtcDIzXyA9IE5VTEw7Ci0rCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmICE9IE5V TEwsIE5VTEwpOwotKwlfdG1wMF8gPSBzdHJsZW4gKHNlbGYpOwotKwlfdG1wMV8gPSBfdG1wMF87 Ci0rCXN0cmluZ19sZW5ndGggPSAoZ2xvbmcpIF90bXAxXzsKLSsJX3RtcDJfID0gc3RhcnQ7Ci0r CWlmIChfdG1wMl8gPCAoKGdsb25nKSAwKSkgewotKwkJZ2xvbmcgX3RtcDNfOwotKwkJZ2xvbmcg X3RtcDRfOwotKwkJX3RtcDNfID0gc3RyaW5nX2xlbmd0aDsKLSsJCV90bXA0XyA9IHN0YXJ0Owot KwkJc3RhcnQgPSBfdG1wM18gKyBfdG1wNF87Ci0rCX0KLSsJX3RtcDVfID0gZW5kOwotKwlpZiAo X3RtcDVfIDwgKChnbG9uZykgMCkpIHsKLSsJCWdsb25nIF90bXA2XzsKLSsJCWdsb25nIF90bXA3 XzsKLSsJCV90bXA2XyA9IHN0cmluZ19sZW5ndGg7Ci0rCQlfdG1wN18gPSBlbmQ7Ci0rCQllbmQg PSBfdG1wNl8gKyBfdG1wN187Ci0rCX0KLSsJX3RtcDlfID0gc3RhcnQ7Ci0rCWlmIChfdG1wOV8g Pj0gKChnbG9uZykgMCkpIHsKLSsJCWdsb25nIF90bXAxMF87Ci0rCQlnbG9uZyBfdG1wMTFfOwot KwkJX3RtcDEwXyA9IHN0YXJ0OwotKwkJX3RtcDExXyA9IHN0cmluZ19sZW5ndGg7Ci0rCQlfdG1w OF8gPSBfdG1wMTBfIDw9IF90bXAxMV87Ci0rCX0gZWxzZSB7Ci0rCQlfdG1wOF8gPSBGQUxTRTsK LSsJfQotKwlfdG1wMTJfID0gX3RtcDhfOwotKwlnX3JldHVybl92YWxfaWZfZmFpbCAoX3RtcDEy XywgTlVMTCk7Ci0rCV90bXAxNF8gPSBlbmQ7Ci0rCWlmIChfdG1wMTRfID49ICgoZ2xvbmcpIDAp KSB7Ci0rCQlnbG9uZyBfdG1wMTVfOwotKwkJZ2xvbmcgX3RtcDE2XzsKLSsJCV90bXAxNV8gPSBl bmQ7Ci0rCQlfdG1wMTZfID0gc3RyaW5nX2xlbmd0aDsKLSsJCV90bXAxM18gPSBfdG1wMTVfIDw9 IF90bXAxNl87Ci0rCX0gZWxzZSB7Ci0rCQlfdG1wMTNfID0gRkFMU0U7Ci0rCX0KLSsJX3RtcDE3 XyA9IF90bXAxM187Ci0rCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChfdG1wMTdfLCBOVUxMKTsKLSsJ X3RtcDE4XyA9IHN0YXJ0OwotKwlfdG1wMTlfID0gZW5kOwotKwlnX3JldHVybl92YWxfaWZfZmFp bCAoX3RtcDE4XyA8PSBfdG1wMTlfLCBOVUxMKTsKLSsJX3RtcDIwXyA9IHN0YXJ0OwotKwlfdG1w MjFfID0gZW5kOwotKwlfdG1wMjJfID0gc3RhcnQ7Ci0rCV90bXAyM18gPSBnX3N0cm5kdXAgKCgo Z2NoYXIqKSBzZWxmKSArIF90bXAyMF8sIChnc2l6ZSkgKF90bXAyMV8gLSBfdG1wMjJfKSk7Ci0r CXJlc3VsdCA9IF90bXAyM187Ci0rCXJldHVybiByZXN1bHQ7Ci0rfQotKwotKwotK3N0YXRpYyBn Y2hhciogeGtiX2xheW91dF9nZXRfb3V0cHV0X2Zyb21fY21kbGluZSAoWEtCTGF5b3V0KiBzZWxm LCBjb25zdCBnY2hhciogYXJnLCBjb25zdCBnY2hhciogZWxlbWVudCkgewotKwlnY2hhciogcmVz dWx0ID0gTlVMTDsKLSsJZ2NoYXIqKiBfdG1wMF8gPSBOVUxMOwotKwlnY2hhcioqIGV4ZWNfY29t bWFuZDsKLSsJZ2ludCBleGVjX2NvbW1hbmRfbGVuZ3RoMTsKLSsJZ2ludCBfZXhlY19jb21tYW5k X3NpemVfOwotKwlnY2hhcioqIF90bXAxXzsKLSsJZ2ludCBfdG1wMV9fbGVuZ3RoMTsKLSsJY29u c3QgZ2NoYXIqIF90bXAyXzsKLSsJZ2NoYXIqIF90bXAzXzsKLSsJZ2NoYXIqKiBfdG1wNF87Ci0r CWdpbnQgX3RtcDRfX2xlbmd0aDE7Ci0rCWNvbnN0IGdjaGFyKiBfdG1wNV87Ci0rCWdjaGFyKiBf dG1wNl87Ci0rCWdjaGFyKiBzdGFuZGFyZF9vdXRwdXQ7Ci0rCWdjaGFyKiBzdGFuZGFyZF9lcnJv cjsKLSsJZ2ludCBleGl0X3N0YXR1czsKLSsJZ2NoYXIqIF90bXA3XzsKLSsJZ2NoYXIqIHJldHZh bDsKLSsJZ2ludCBfdG1wMTVfOwotKwljb25zdCBnY2hhciogX3RtcDIzXzsKLSsJY29uc3QgZ2No YXIqIF90bXAyNV87Ci0rCWdjaGFyKiogX3RtcDI2XzsKLSsJZ2NoYXIqKiBfdG1wMjdfID0gTlVM TDsKLSsJR0Vycm9yICogX2lubmVyX2Vycm9yXyA9IE5VTEw7Ci0rCWdfcmV0dXJuX3ZhbF9pZl9m YWlsIChzZWxmICE9IE5VTEwsIE5VTEwpOwotKwlnX3JldHVybl92YWxfaWZfZmFpbCAoYXJnICE9 IE5VTEwsIE5VTEwpOwotKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZWxlbWVudCAhPSBOVUxMLCBO VUxMKTsKLSsJX3RtcDBfID0gZ19uZXcwIChnY2hhciosIDAgKyAxKTsKLSsJZXhlY19jb21tYW5k ID0gX3RtcDBfOwotKwlleGVjX2NvbW1hbmRfbGVuZ3RoMSA9IDA7Ci0rCV9leGVjX2NvbW1hbmRf c2l6ZV8gPSBleGVjX2NvbW1hbmRfbGVuZ3RoMTsKLSsJX3RtcDFfID0gZXhlY19jb21tYW5kOwot KwlfdG1wMV9fbGVuZ3RoMSA9IGV4ZWNfY29tbWFuZF9sZW5ndGgxOwotKwlfdG1wMl8gPSBzZWxm LT5wcml2LT5tX3hrYl9jb21tYW5kOwotKwlfdG1wM18gPSBnX3N0cmR1cCAoX3RtcDJfKTsKLSsJ X3ZhbGFfYXJyYXlfYWRkMjEgKCZleGVjX2NvbW1hbmQsICZleGVjX2NvbW1hbmRfbGVuZ3RoMSwg Jl9leGVjX2NvbW1hbmRfc2l6ZV8sIF90bXAzXyk7Ci0rCV90bXA0XyA9IGV4ZWNfY29tbWFuZDsK LSsJX3RtcDRfX2xlbmd0aDEgPSBleGVjX2NvbW1hbmRfbGVuZ3RoMTsKLSsJX3RtcDVfID0gYXJn OwotKwlfdG1wNl8gPSBnX3N0cmR1cCAoX3RtcDVfKTsKLSsJX3ZhbGFfYXJyYXlfYWRkMjIgKCZl eGVjX2NvbW1hbmQsICZleGVjX2NvbW1hbmRfbGVuZ3RoMSwgJl9leGVjX2NvbW1hbmRfc2l6ZV8s IF90bXA2Xyk7Ci0rCXN0YW5kYXJkX291dHB1dCA9IE5VTEw7Ci0rCXN0YW5kYXJkX2Vycm9yID0g TlVMTDsKLSsJZXhpdF9zdGF0dXMgPSAwOwotKwlfdG1wN18gPSBnX3N0cmR1cCAoIiIpOwotKwly ZXR2YWwgPSBfdG1wN187Ci0rCXsKLSsJCWdjaGFyKiogX3RtcDhfOwotKwkJZ2ludCBfdG1wOF9f bGVuZ3RoMTsKLSsJCWdjaGFyKiBfdG1wOV8gPSBOVUxMOwotKwkJZ2NoYXIqIF90bXAxMF8gPSBO VUxMOwotKwkJZ2ludCBfdG1wMTFfID0gMDsKLSsJCV90bXA4XyA9IGV4ZWNfY29tbWFuZDsKLSsJ CV90bXA4X19sZW5ndGgxID0gZXhlY19jb21tYW5kX2xlbmd0aDE7Ci0rCQlnX3NwYXduX3N5bmMg KE5VTEwsIF90bXA4XywgTlVMTCwgR19TUEFXTl9TRUFSQ0hfUEFUSCwgTlVMTCwgTlVMTCwgJl90 bXA5XywgJl90bXAxMF8sICZfdG1wMTFfLCAmX2lubmVyX2Vycm9yXyk7Ci0rCQlfZ19mcmVlMCAo c3RhbmRhcmRfb3V0cHV0KTsKLSsJCXN0YW5kYXJkX291dHB1dCA9IF90bXA5XzsKLSsJCV9nX2Zy ZWUwIChzdGFuZGFyZF9lcnJvcik7Ci0rCQlzdGFuZGFyZF9lcnJvciA9IF90bXAxMF87Ci0rCQll eGl0X3N0YXR1cyA9IF90bXAxMV87Ci0rCQlpZiAoX2lubmVyX2Vycm9yXyAhPSBOVUxMKSB7Ci0r CQkJaWYgKF9pbm5lcl9lcnJvcl8tPmRvbWFpbiA9PSBHX1NQQVdOX0VSUk9SKSB7Ci0rCQkJCWdv dG8gX19jYXRjaDNfZ19zcGF3bl9lcnJvcjsKLSsJCQl9Ci0rCQkJX2dfZnJlZTAgKHJldHZhbCk7 Ci0rCQkJX2dfZnJlZTAgKHN0YW5kYXJkX2Vycm9yKTsKLSsJCQlfZ19mcmVlMCAoc3RhbmRhcmRf b3V0cHV0KTsKLSsJCQlleGVjX2NvbW1hbmQgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoZXhlY19jb21t YW5kLCBleGVjX2NvbW1hbmRfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxM KTsKLSsJCQlnX2NyaXRpY2FsICgiZmlsZSAlczogbGluZSAlZDogdW5leHBlY3RlZCBlcnJvcjog JXMgKCVzLCAlZCkiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9pbm5lcl9lcnJvcl8tPm1lc3NhZ2Us IGdfcXVhcmtfdG9fc3RyaW5nIChfaW5uZXJfZXJyb3JfLT5kb21haW4pLCBfaW5uZXJfZXJyb3Jf LT5jb2RlKTsKLSsJCQlnX2NsZWFyX2Vycm9yICgmX2lubmVyX2Vycm9yXyk7Ci0rCQkJcmV0dXJu IE5VTEw7Ci0rCQl9Ci0rCX0KLSsJZ290byBfX2ZpbmFsbHkzOwotKwlfX2NhdGNoM19nX3NwYXdu X2Vycm9yOgotKwl7Ci0rCQlHRXJyb3IqIGVyciA9IE5VTEw7Ci0rCQlGSUxFKiBfdG1wMTJfOwot KwkJR0Vycm9yKiBfdG1wMTNfOwotKwkJY29uc3QgZ2NoYXIqIF90bXAxNF87Ci0rCQllcnIgPSBf aW5uZXJfZXJyb3JfOwotKwkJX2lubmVyX2Vycm9yXyA9IE5VTEw7Ci0rCQlfdG1wMTJfID0gc3Rk ZXJyOwotKwkJX3RtcDEzXyA9IGVycjsKLSsJCV90bXAxNF8gPSBfdG1wMTNfLT5tZXNzYWdlOwot KwkJZnByaW50ZiAoX3RtcDEyXywgIklCVVNfRVJST1I6ICVzXG4iLCBfdG1wMTRfKTsKLSsJCV9n X2Vycm9yX2ZyZWUwIChlcnIpOwotKwl9Ci0rCV9fZmluYWxseTM6Ci0rCWlmIChfaW5uZXJfZXJy b3JfICE9IE5VTEwpIHsKLSsJCV9nX2ZyZWUwIChyZXR2YWwpOwotKwkJX2dfZnJlZTAgKHN0YW5k YXJkX2Vycm9yKTsKLSsJCV9nX2ZyZWUwIChzdGFuZGFyZF9vdXRwdXQpOwotKwkJZXhlY19jb21t YW5kID0gKF92YWxhX2FycmF5X2ZyZWUgKGV4ZWNfY29tbWFuZCwgZXhlY19jb21tYW5kX2xlbmd0 aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7Ci0rCQlnX2NyaXRpY2FsICgiZmls ZSAlczogbGluZSAlZDogdW5jYXVnaHQgZXJyb3I6ICVzICglcywgJWQpIiwgX19GSUxFX18sIF9f TElORV9fLCBfaW5uZXJfZXJyb3JfLT5tZXNzYWdlLCBnX3F1YXJrX3RvX3N0cmluZyAoX2lubmVy X2Vycm9yXy0+ZG9tYWluKSwgX2lubmVyX2Vycm9yXy0+Y29kZSk7Ci0rCQlnX2NsZWFyX2Vycm9y ICgmX2lubmVyX2Vycm9yXyk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJfQotKwlfdG1wMTVfID0gZXhp dF9zdGF0dXM7Ci0rCWlmIChfdG1wMTVfICE9IDApIHsKLSsJCWNvbnN0IGdjaGFyKiBfdG1wMTZf OwotKwkJZ2NoYXIqIF90bXAxN187Ci0rCQlnY2hhciogX3RtcDE4XzsKLSsJCWNvbnN0IGdjaGFy KiBfdG1wMTlfOwotKwkJRklMRSogX3RtcDIxXzsKLSsJCWNvbnN0IGdjaGFyKiBfdG1wMjJfOwot KwkJX3RtcDE2XyA9IHN0YW5kYXJkX2Vycm9yOwotKwkJX3RtcDE3XyA9IGdfc3RyZHVwIChfdG1w MTZfKTsKLSsJCV90bXAxOF8gPSBfdG1wMTdfOwotKwkJX3RtcDE5XyA9IF90bXAxOF87Ci0rCQlp ZiAoX3RtcDE5XyA9PSBOVUxMKSB7Ci0rCQkJZ2NoYXIqIF90bXAyMF87Ci0rCQkJX3RtcDIwXyA9 IGdfc3RyZHVwICgiIik7Ci0rCQkJX2dfZnJlZTAgKF90bXAxOF8pOwotKwkJCV90bXAxOF8gPSBf dG1wMjBfOwotKwkJfQotKwkJX3RtcDIxXyA9IHN0ZGVycjsKLSsJCV90bXAyMl8gPSBfdG1wMThf OwotKwkJZnByaW50ZiAoX3RtcDIxXywgIklCVVNfRVJST1I6ICVzXG4iLCBfdG1wMjJfKTsKLSsJ CV9nX2ZyZWUwIChfdG1wMThfKTsKLSsJfQotKwlfdG1wMjNfID0gc3RhbmRhcmRfb3V0cHV0Owot KwlpZiAoX3RtcDIzXyA9PSBOVUxMKSB7Ci0rCQlnY2hhciogX3RtcDI0XzsKLSsJCV90bXAyNF8g PSBnX3N0cmR1cCAoIiIpOwotKwkJcmVzdWx0ID0gX3RtcDI0XzsKLSsJCV9nX2ZyZWUwIChyZXR2 YWwpOwotKwkJX2dfZnJlZTAgKHN0YW5kYXJkX2Vycm9yKTsKLSsJCV9nX2ZyZWUwIChzdGFuZGFy ZF9vdXRwdXQpOwotKwkJZXhlY19jb21tYW5kID0gKF92YWxhX2FycmF5X2ZyZWUgKGV4ZWNfY29t bWFuZCwgZXhlY19jb21tYW5kX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVM TCk7Ci0rCQlyZXR1cm4gcmVzdWx0OwotKwl9Ci0rCV90bXAyNV8gPSBzdGFuZGFyZF9vdXRwdXQ7 Ci0rCV90bXAyN18gPSBfdG1wMjZfID0gZ19zdHJzcGxpdCAoX3RtcDI1XywgIlxuIiwgMCk7Ci0r CXsKLSsJCWdjaGFyKiogbGluZV9jb2xsZWN0aW9uID0gTlVMTDsKLSsJCWdpbnQgbGluZV9jb2xs ZWN0aW9uX2xlbmd0aDEgPSAwOwotKwkJZ2ludCBfbGluZV9jb2xsZWN0aW9uX3NpemVfID0gMDsK LSsJCWdpbnQgbGluZV9pdCA9IDA7Ci0rCQlsaW5lX2NvbGxlY3Rpb24gPSBfdG1wMjdfOwotKwkJ bGluZV9jb2xsZWN0aW9uX2xlbmd0aDEgPSBfdmFsYV9hcnJheV9sZW5ndGggKF90bXAyNl8pOwot KwkJZm9yIChsaW5lX2l0ID0gMDsgbGluZV9pdCA8IF92YWxhX2FycmF5X2xlbmd0aCAoX3RtcDI2 Xyk7IGxpbmVfaXQgPSBsaW5lX2l0ICsgMSkgewotKwkJCWdjaGFyKiBfdG1wMjhfOwotKwkJCWdj aGFyKiBsaW5lID0gTlVMTDsKLSsJCQlfdG1wMjhfID0gZ19zdHJkdXAgKGxpbmVfY29sbGVjdGlv bltsaW5lX2l0XSk7Ci0rCQkJbGluZSA9IF90bXAyOF87Ci0rCQkJewotKwkJCQlnYm9vbGVhbiBf dG1wMjlfID0gRkFMU0U7Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wMzBfOwotKwkJCQlnaW50IF90 bXAzMV87Ci0rCQkJCWdpbnQgX3RtcDMyXzsKLSsJCQkJY29uc3QgZ2NoYXIqIF90bXAzM187Ci0r CQkJCWdpbnQgX3RtcDM0XzsKLSsJCQkJZ2ludCBfdG1wMzVfOwotKwkJCQlnYm9vbGVhbiBfdG1w NDNfOwotKwkJCQlfdG1wMzBfID0gZWxlbWVudDsKLSsJCQkJX3RtcDMxXyA9IHN0cmxlbiAoX3Rt cDMwXyk7Ci0rCQkJCV90bXAzMl8gPSBfdG1wMzFfOwotKwkJCQlfdG1wMzNfID0gbGluZTsKLSsJ CQkJX3RtcDM0XyA9IHN0cmxlbiAoX3RtcDMzXyk7Ci0rCQkJCV90bXAzNV8gPSBfdG1wMzRfOwot KwkJCQlpZiAoX3RtcDMyXyA8PSBfdG1wMzVfKSB7Ci0rCQkJCQljb25zdCBnY2hhciogX3RtcDM2 XzsKLSsJCQkJCWNvbnN0IGdjaGFyKiBfdG1wMzdfOwotKwkJCQkJZ2ludCBfdG1wMzhfOwotKwkJ CQkJZ2ludCBfdG1wMzlfOwotKwkJCQkJZ2NoYXIqIF90bXA0MF8gPSBOVUxMOwotKwkJCQkJZ2No YXIqIF90bXA0MV87Ci0rCQkJCQljb25zdCBnY2hhciogX3RtcDQyXzsKLSsJCQkJCV90bXAzNl8g PSBsaW5lOwotKwkJCQkJX3RtcDM3XyA9IGVsZW1lbnQ7Ci0rCQkJCQlfdG1wMzhfID0gc3RybGVu IChfdG1wMzdfKTsKLSsJCQkJCV90bXAzOV8gPSBfdG1wMzhfOwotKwkJCQkJX3RtcDQwXyA9IHN0 cmluZ19zbGljZSAoX3RtcDM2XywgKGdsb25nKSAwLCAoZ2xvbmcpIF90bXAzOV8pOwotKwkJCQkJ X3RtcDQxXyA9IF90bXA0MF87Ci0rCQkJCQlfdG1wNDJfID0gZWxlbWVudDsKLSsJCQkJCV90bXAy OV8gPSBnX3N0cmNtcDAgKF90bXA0MV8sIF90bXA0Ml8pID09IDA7Ci0rCQkJCQlfZ19mcmVlMCAo X3RtcDQxXyk7Ci0rCQkJCX0gZWxzZSB7Ci0rCQkJCQlfdG1wMjlfID0gRkFMU0U7Ci0rCQkJCX0K LSsJCQkJX3RtcDQzXyA9IF90bXAyOV87Ci0rCQkJCWlmIChfdG1wNDNfKSB7Ci0rCQkJCQljb25z dCBnY2hhciogX3RtcDQ0XzsKLSsJCQkJCWNvbnN0IGdjaGFyKiBfdG1wNDVfOwotKwkJCQkJZ2lu dCBfdG1wNDZfOwotKwkJCQkJZ2ludCBfdG1wNDdfOwotKwkJCQkJY29uc3QgZ2NoYXIqIF90bXA0 OF87Ci0rCQkJCQlnaW50IF90bXA0OV87Ci0rCQkJCQlnaW50IF90bXA1MF87Ci0rCQkJCQlnY2hh ciogX3RtcDUxXyA9IE5VTEw7Ci0rCQkJCQlfdG1wNDRfID0gbGluZTsKLSsJCQkJCV90bXA0NV8g PSBlbGVtZW50OwotKwkJCQkJX3RtcDQ2XyA9IHN0cmxlbiAoX3RtcDQ1Xyk7Ci0rCQkJCQlfdG1w NDdfID0gX3RtcDQ2XzsKLSsJCQkJCV90bXA0OF8gPSBsaW5lOwotKwkJCQkJX3RtcDQ5XyA9IHN0 cmxlbiAoX3RtcDQ4Xyk7Ci0rCQkJCQlfdG1wNTBfID0gX3RtcDQ5XzsKLSsJCQkJCV90bXA1MV8g PSBzdHJpbmdfc2xpY2UgKF90bXA0NF8sIChnbG9uZykgX3RtcDQ3XywgKGdsb25nKSBfdG1wNTBf KTsKLSsJCQkJCV9nX2ZyZWUwIChyZXR2YWwpOwotKwkJCQkJcmV0dmFsID0gX3RtcDUxXzsKLSsJ CQkJfQotKwkJCQlfZ19mcmVlMCAobGluZSk7Ci0rCQkJfQotKwkJfQotKwkJbGluZV9jb2xsZWN0 aW9uID0gKF92YWxhX2FycmF5X2ZyZWUgKGxpbmVfY29sbGVjdGlvbiwgbGluZV9jb2xsZWN0aW9u X2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7Ci0rCX0KLSsJcmVzdWx0 ID0gcmV0dmFsOwotKwlfZ19mcmVlMCAoc3RhbmRhcmRfZXJyb3IpOwotKwlfZ19mcmVlMCAoc3Rh bmRhcmRfb3V0cHV0KTsKLSsJZXhlY19jb21tYW5kID0gKF92YWxhX2FycmF5X2ZyZWUgKGV4ZWNf Y29tbWFuZCwgZXhlY19jb21tYW5kX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwg TlVMTCk7Ci0rCXJldHVybiByZXN1bHQ7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHhrYl9sYXlv dXRfc2V0X2xheW91dF9jYiAoWEtCTGF5b3V0KiBzZWxmLCBHUGlkIHBpZCwgZ2ludCBzdGF0dXMp IHsKLSsJR1BpZCBfdG1wMF87Ci0rCUdQaWQgX3RtcDFfOwotKwlHUGlkIF90bXAzXzsKLSsJZ19y ZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsKLSsJX3RtcDBfID0gc2VsZi0+cHJpdi0+bV94 a2JfcGlkOwotKwlfdG1wMV8gPSBwaWQ7Ci0rCWlmIChfdG1wMF8gIT0gX3RtcDFfKSB7Ci0rCQlG SUxFKiBfdG1wMl87Ci0rCQlfdG1wMl8gPSBzdGRlcnI7Ci0rCQlmcHJpbnRmIChfdG1wMl8sICJJ QlVTX0VSUk9SOiBzZXRfbGF5b3V0X2NiIGhhcyBhbm90aGVyIHBpZFxuIik7Ci0rCQlyZXR1cm47 Ci0rCX0KLSsJX3RtcDNfID0gc2VsZi0+cHJpdi0+bV94a2JfcGlkOwotKwlnX3NwYXduX2Nsb3Nl X3BpZCAoX3RtcDNfKTsKLSsJc2VsZi0+cHJpdi0+bV94a2JfcGlkID0gKEdQaWQpICgtMSk7Ci0r CXhrYl9sYXlvdXRfc2V0X3htb2RtYXAgKHNlbGYpOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCB4 a2JfbGF5b3V0X3NldF94bW9kbWFwX2NiIChYS0JMYXlvdXQqIHNlbGYsIEdQaWQgcGlkLCBnaW50 IHN0YXR1cykgewotKwlHUGlkIF90bXAwXzsKLSsJR1BpZCBfdG1wMV87Ci0rCUdQaWQgX3RtcDNf OwotKwlnX3JldHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOwotKwlfdG1wMF8gPSBzZWxmLT5w cml2LT5tX3htb2RtYXBfcGlkOwotKwlfdG1wMV8gPSBwaWQ7Ci0rCWlmIChfdG1wMF8gIT0gX3Rt cDFfKSB7Ci0rCQlGSUxFKiBfdG1wMl87Ci0rCQlfdG1wMl8gPSBzdGRlcnI7Ci0rCQlmcHJpbnRm IChfdG1wMl8sICJJQlVTX0VSUk9SOiBzZXRfeG1vZG1hcF9jYiBoYXMgYW5vdGhlciBwaWRcbiIp OwotKwkJcmV0dXJuOwotKwl9Ci0rCV90bXAzXyA9IHNlbGYtPnByaXYtPm1feG1vZG1hcF9waWQ7 Ci0rCWdfc3Bhd25fY2xvc2VfcGlkIChfdG1wM18pOwotKwlzZWxmLT5wcml2LT5tX3htb2RtYXBf cGlkID0gKEdQaWQpICgtMSk7Ci0rfQotKwotKwotK3N0YXRpYyBnY2hhciogeGtiX2xheW91dF9n ZXRfZnVsbHBhdGggKFhLQkxheW91dCogc2VsZiwgY29uc3QgZ2NoYXIqIGNvbW1hbmQpIHsKLSsJ Z2NoYXIqIHJlc3VsdCA9IE5VTEw7Ci0rCWNvbnN0IGdjaGFyKiBfdG1wMF8gPSBOVUxMOwotKwln Y2hhciogX3RtcDFfOwotKwlnY2hhciogZW52cGF0aDsKLSsJY29uc3QgZ2NoYXIqIF90bXAyXzsK LSsJZ2NoYXIqKiBfdG1wM187Ci0rCWdjaGFyKiogX3RtcDRfID0gTlVMTDsKLSsJZ2NoYXIqIF90 bXAxMV87Ci0rCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmICE9IE5VTEwsIE5VTEwpOwotKwln X3JldHVybl92YWxfaWZfZmFpbCAoY29tbWFuZCAhPSBOVUxMLCBOVUxMKTsKLSsJX3RtcDBfID0g Z19nZXRlbnYgKCJQQVRIIik7Ci0rCV90bXAxXyA9IGdfc3RyZHVwIChfdG1wMF8pOwotKwllbnZw YXRoID0gX3RtcDFfOwotKwlfdG1wMl8gPSBlbnZwYXRoOwotKwlfdG1wNF8gPSBfdG1wM18gPSBn X3N0cnNwbGl0IChfdG1wMl8sICI6IiwgMCk7Ci0rCXsKLSsJCWdjaGFyKiogZGlyX2NvbGxlY3Rp b24gPSBOVUxMOwotKwkJZ2ludCBkaXJfY29sbGVjdGlvbl9sZW5ndGgxID0gMDsKLSsJCWdpbnQg X2Rpcl9jb2xsZWN0aW9uX3NpemVfID0gMDsKLSsJCWdpbnQgZGlyX2l0ID0gMDsKLSsJCWRpcl9j b2xsZWN0aW9uID0gX3RtcDRfOwotKwkJZGlyX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IF92YWxhX2Fy cmF5X2xlbmd0aCAoX3RtcDNfKTsKLSsJCWZvciAoZGlyX2l0ID0gMDsgZGlyX2l0IDwgX3ZhbGFf YXJyYXlfbGVuZ3RoIChfdG1wM18pOyBkaXJfaXQgPSBkaXJfaXQgKyAxKSB7Ci0rCQkJZ2NoYXIq IF90bXA1XzsKLSsJCQlnY2hhciogZGlyID0gTlVMTDsKLSsJCQlfdG1wNV8gPSBnX3N0cmR1cCAo ZGlyX2NvbGxlY3Rpb25bZGlyX2l0XSk7Ci0rCQkJZGlyID0gX3RtcDVfOwotKwkJCXsKLSsJCQkJ Y29uc3QgZ2NoYXIqIF90bXA2XzsKLSsJCQkJY29uc3QgZ2NoYXIqIF90bXA3XzsKLSsJCQkJZ2No YXIqIF90bXA4XyA9IE5VTEw7Ci0rCQkJCWdjaGFyKiBmaWxlcGF0aDsKLSsJCQkJY29uc3QgZ2No YXIqIF90bXA5XzsKLSsJCQkJZ2Jvb2xlYW4gX3RtcDEwXyA9IEZBTFNFOwotKwkJCQlfdG1wNl8g PSBkaXI7Ci0rCQkJCV90bXA3XyA9IGNvbW1hbmQ7Ci0rCQkJCV90bXA4XyA9IGdfYnVpbGRfZmls ZW5hbWUgKF90bXA2XywgX3RtcDdfLCBOVUxMKTsKLSsJCQkJZmlsZXBhdGggPSBfdG1wOF87Ci0r CQkJCV90bXA5XyA9IGZpbGVwYXRoOwotKwkJCQlfdG1wMTBfID0gZ19maWxlX3Rlc3QgKF90bXA5 XywgR19GSUxFX1RFU1RfRVhJU1RTKTsKLSsJCQkJaWYgKF90bXAxMF8pIHsKLSsJCQkJCXJlc3Vs dCA9IGZpbGVwYXRoOwotKwkJCQkJX2dfZnJlZTAgKGRpcik7Ci0rCQkJCQlkaXJfY29sbGVjdGlv biA9IChfdmFsYV9hcnJheV9mcmVlIChkaXJfY29sbGVjdGlvbiwgZGlyX2NvbGxlY3Rpb25fbGVu Z3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJCQkJCV9nX2ZyZWUwIChl bnZwYXRoKTsKLSsJCQkJCXJldHVybiByZXN1bHQ7Ci0rCQkJCX0KLSsJCQkJX2dfZnJlZTAgKGZp bGVwYXRoKTsKLSsJCQkJX2dfZnJlZTAgKGRpcik7Ci0rCQkJfQotKwkJfQotKwkJZGlyX2NvbGxl Y3Rpb24gPSAoX3ZhbGFfYXJyYXlfZnJlZSAoZGlyX2NvbGxlY3Rpb24sIGRpcl9jb2xsZWN0aW9u X2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7Ci0rCX0KLSsJX3RtcDEx XyA9IGdfc3RyZHVwICgiIik7Ci0rCXJlc3VsdCA9IF90bXAxMV87Ci0rCV9nX2ZyZWUwIChlbnZw YXRoKTsKLSsJcmV0dXJuIHJlc3VsdDsKLSt9Ci0rCi0rCi0rc3RhdGljIGdjaGFyKiogeGtiX2xh eW91dF9nZXRfeGtiX2dyb3VwX2xheW91dCAoWEtCTGF5b3V0KiBzZWxmLCBjb25zdCBnY2hhciog bGF5b3V0LCBjb25zdCBnY2hhciogdmFyaWFudCwgZ2ludCBsYXlvdXRzX21heF9sZW5ndGgsIGlu dCogcmVzdWx0X2xlbmd0aDEpIHsKLSsJZ2NoYXIqKiByZXN1bHQgPSBOVUxMOwotKwlnaW50IGdy b3VwX2lkOwotKwlnaW50IGk7Ci0rCWNvbnN0IGdjaGFyKiBfdG1wMF87Ci0rCWdjaGFyKiogX3Rt cDFfOwotKwlnY2hhcioqIF90bXAyXyA9IE5VTEw7Ci0rCWdjaGFyKiogbGF5b3V0czsKLSsJZ2lu dCBsYXlvdXRzX2xlbmd0aDE7Ci0rCWdpbnQgX2xheW91dHNfc2l6ZV87Ci0rCWNvbnN0IGdjaGFy KiBfdG1wM187Ci0rCWdjaGFyKiogX3RtcDRfOwotKwlnY2hhcioqIF90bXA1XyA9IE5VTEw7Ci0r CWdjaGFyKiogdmFyaWFudHM7Ci0rCWdpbnQgdmFyaWFudHNfbGVuZ3RoMTsKLSsJZ2ludCBfdmFy aWFudHNfc2l6ZV87Ci0rCWdjaGFyKiBfdG1wNl87Ci0rCWdjaGFyKiBncm91cF9sYXlvdXRzOwot KwlnY2hhciogX3RtcDdfOwotKwlnY2hhciogZ3JvdXBfdmFyaWFudHM7Ci0rCWdib29sZWFuIGhh c192YXJpYW50OwotKwlnYm9vbGVhbiBpbmNsdWRlX2tleW1hcDsKLSsJY29uc3QgZ2NoYXIqIF90 bXA2M187Ci0rCWdib29sZWFuIF90bXA2NF87Ci0rCWdib29sZWFuIF90bXA3Ml87Ci0rCWNvbnN0 IGdjaGFyKiBfdG1wNzNfOwotKwlnY2hhciogX3RtcDc0XzsKLSsJY29uc3QgZ2NoYXIqIF90bXA3 NV87Ci0rCWdjaGFyKiBfdG1wNzZfOwotKwlnaW50IF90bXA3N187Ci0rCWdjaGFyKiBfdG1wNzhf ID0gTlVMTDsKLSsJZ2NoYXIqKiBfdG1wNzlfID0gTlVMTDsKLSsJZ2NoYXIqKiBfdG1wODBfOwot KwlnaW50IF90bXA4MF9fbGVuZ3RoMTsKLSsJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlbGYgIT0g TlVMTCwgTlVMTCk7Ci0rCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChsYXlvdXQgIT0gTlVMTCwgTlVM TCk7Ci0rCWdfcmV0dXJuX3ZhbF9pZl9mYWlsICh2YXJpYW50ICE9IE5VTEwsIE5VTEwpOwotKwln cm91cF9pZCA9IDA7Ci0rCWkgPSAwOwotKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX2RlZmF1bHRf bGF5b3V0OwotKwlfdG1wMl8gPSBfdG1wMV8gPSBnX3N0cnNwbGl0IChfdG1wMF8sICIsIiwgMCk7 Ci0rCWxheW91dHMgPSBfdG1wMl87Ci0rCWxheW91dHNfbGVuZ3RoMSA9IF92YWxhX2FycmF5X2xl bmd0aCAoX3RtcDFfKTsKLSsJX2xheW91dHNfc2l6ZV8gPSBsYXlvdXRzX2xlbmd0aDE7Ci0rCV90 bXAzXyA9IHNlbGYtPnByaXYtPm1fZGVmYXVsdF92YXJpYW50OwotKwlfdG1wNV8gPSBfdG1wNF8g PSBnX3N0cnNwbGl0IChfdG1wM18sICIsIiwgMCk7Ci0rCXZhcmlhbnRzID0gX3RtcDVfOwotKwl2 YXJpYW50c19sZW5ndGgxID0gX3ZhbGFfYXJyYXlfbGVuZ3RoIChfdG1wNF8pOwotKwlfdmFyaWFu dHNfc2l6ZV8gPSB2YXJpYW50c19sZW5ndGgxOwotKwlfdG1wNl8gPSBnX3N0cmR1cCAoIiIpOwot Kwlncm91cF9sYXlvdXRzID0gX3RtcDZfOwotKwlfdG1wN18gPSBnX3N0cmR1cCAoIiIpOwotKwln cm91cF92YXJpYW50cyA9IF90bXA3XzsKLSsJaGFzX3ZhcmlhbnQgPSBGQUxTRTsKLSsJaW5jbHVk ZV9rZXltYXAgPSBGQUxTRTsKLSsJewotKwkJZ2Jvb2xlYW4gX3RtcDhfOwotKwkJaSA9IDA7Ci0r CQlfdG1wOF8gPSBUUlVFOwotKwkJd2hpbGUgKFRSVUUpIHsKLSsJCQlnYm9vbGVhbiBfdG1wOV87 Ci0rCQkJZ2ludCBfdG1wMTFfOwotKwkJCWdjaGFyKiogX3RtcDEyXzsKLSsJCQlnaW50IF90bXAx Ml9fbGVuZ3RoMTsKLSsJCQlnaW50IF90bXAxM187Ci0rCQkJZ2ludCBfdG1wMTRfOwotKwkJCWdp bnQgX3RtcDE1XzsKLSsJCQlnaW50IF90bXAyNV87Ci0rCQkJZ2NoYXIqKiBfdG1wMjZfOwotKwkJ CWdpbnQgX3RtcDI2X19sZW5ndGgxOwotKwkJCWdib29sZWFuIF90bXAzOV8gPSBGQUxTRTsKLSsJ CQljb25zdCBnY2hhciogX3RtcDQwXzsKLSsJCQlnY2hhcioqIF90bXA0MV87Ci0rCQkJZ2ludCBf dG1wNDFfX2xlbmd0aDE7Ci0rCQkJZ2ludCBfdG1wNDJfOwotKwkJCWNvbnN0IGdjaGFyKiBfdG1w NDNfOwotKwkJCWdib29sZWFuIF90bXA0OF87Ci0rCQkJZ2NoYXIqKiBfdG1wNTBfOwotKwkJCWdp bnQgX3RtcDUwX19sZW5ndGgxOwotKwkJCWdpbnQgX3RtcDUxXzsKLSsJCQljb25zdCBnY2hhciog X3RtcDUyXzsKLSsJCQlnaW50IF90bXA1M187Ci0rCQkJX3RtcDlfID0gX3RtcDhfOwotKwkJCWlm ICghX3RtcDlfKSB7Ci0rCQkJCWdpbnQgX3RtcDEwXzsKLSsJCQkJX3RtcDEwXyA9IGk7Ci0rCQkJ CWkgPSBfdG1wMTBfICsgMTsKLSsJCQl9Ci0rCQkJX3RtcDhfID0gRkFMU0U7Ci0rCQkJX3RtcDEx XyA9IGk7Ci0rCQkJX3RtcDEyXyA9IGxheW91dHM7Ci0rCQkJX3RtcDEyX19sZW5ndGgxID0gbGF5 b3V0c19sZW5ndGgxOwotKwkJCWlmICghKF90bXAxMV8gPCBfdG1wMTJfX2xlbmd0aDEpKSB7Ci0r CQkJCWJyZWFrOwotKwkJCX0KLSsJCQlfdG1wMTNfID0gaTsKLSsJCQlfdG1wMTRfID0gbGF5b3V0 c19tYXhfbGVuZ3RoOwotKwkJCWlmIChfdG1wMTNfID49IChfdG1wMTRfIC0gMSkpIHsKLSsJCQkJ YnJlYWs7Ci0rCQkJfQotKwkJCV90bXAxNV8gPSBpOwotKwkJCWlmIChfdG1wMTVfID09IDApIHsK LSsJCQkJZ2NoYXIqKiBfdG1wMTZfOwotKwkJCQlnaW50IF90bXAxNl9fbGVuZ3RoMTsKLSsJCQkJ Z2ludCBfdG1wMTdfOwotKwkJCQljb25zdCBnY2hhciogX3RtcDE4XzsKLSsJCQkJZ2NoYXIqIF90 bXAxOV87Ci0rCQkJCV90bXAxNl8gPSBsYXlvdXRzOwotKwkJCQlfdG1wMTZfX2xlbmd0aDEgPSBs YXlvdXRzX2xlbmd0aDE7Ci0rCQkJCV90bXAxN18gPSBpOwotKwkJCQlfdG1wMThfID0gX3RtcDE2 X1tfdG1wMTdfXTsKLSsJCQkJX3RtcDE5XyA9IGdfc3RyZHVwIChfdG1wMThfKTsKLSsJCQkJX2df ZnJlZTAgKGdyb3VwX2xheW91dHMpOwotKwkJCQlncm91cF9sYXlvdXRzID0gX3RtcDE5XzsKLSsJ CQl9IGVsc2UgewotKwkJCQljb25zdCBnY2hhciogX3RtcDIwXzsKLSsJCQkJZ2NoYXIqKiBfdG1w MjFfOwotKwkJCQlnaW50IF90bXAyMV9fbGVuZ3RoMTsKLSsJCQkJZ2ludCBfdG1wMjJfOwotKwkJ CQljb25zdCBnY2hhciogX3RtcDIzXzsKLSsJCQkJZ2NoYXIqIF90bXAyNF8gPSBOVUxMOwotKwkJ CQlfdG1wMjBfID0gZ3JvdXBfbGF5b3V0czsKLSsJCQkJX3RtcDIxXyA9IGxheW91dHM7Ci0rCQkJ CV90bXAyMV9fbGVuZ3RoMSA9IGxheW91dHNfbGVuZ3RoMTsKLSsJCQkJX3RtcDIyXyA9IGk7Ci0r CQkJCV90bXAyM18gPSBfdG1wMjFfW190bXAyMl9dOwotKwkJCQlfdG1wMjRfID0gZ19zdHJkdXBf cHJpbnRmICgiJXMsJXMiLCBfdG1wMjBfLCBfdG1wMjNfKTsKLSsJCQkJX2dfZnJlZTAgKGdyb3Vw X2xheW91dHMpOwotKwkJCQlncm91cF9sYXlvdXRzID0gX3RtcDI0XzsKLSsJCQl9Ci0rCQkJX3Rt cDI1XyA9IGk7Ci0rCQkJX3RtcDI2XyA9IHZhcmlhbnRzOwotKwkJCV90bXAyNl9fbGVuZ3RoMSA9 IHZhcmlhbnRzX2xlbmd0aDE7Ci0rCQkJaWYgKF90bXAyNV8gPj0gX3RtcDI2X19sZW5ndGgxKSB7 Ci0rCQkJCWdpbnQgX3RtcDI3XzsKLSsJCQkJZ2Jvb2xlYW4gX3RtcDMxXyA9IEZBTFNFOwotKwkJ CQljb25zdCBnY2hhciogX3RtcDMyXzsKLSsJCQkJZ2NoYXIqKiBfdG1wMzNfOwotKwkJCQlnaW50 IF90bXAzM19fbGVuZ3RoMTsKLSsJCQkJZ2ludCBfdG1wMzRfOwotKwkJCQljb25zdCBnY2hhciog X3RtcDM1XzsKLSsJCQkJZ2Jvb2xlYW4gX3RtcDM3XzsKLSsJCQkJX3RtcDI3XyA9IGk7Ci0rCQkJ CWlmIChfdG1wMjdfID09IDApIHsKLSsJCQkJCWdjaGFyKiBfdG1wMjhfOwotKwkJCQkJX3RtcDI4 XyA9IGdfc3RyZHVwICgiIik7Ci0rCQkJCQlfZ19mcmVlMCAoZ3JvdXBfdmFyaWFudHMpOwotKwkJ CQkJZ3JvdXBfdmFyaWFudHMgPSBfdG1wMjhfOwotKwkJCQl9IGVsc2UgewotKwkJCQkJY29uc3Qg Z2NoYXIqIF90bXAyOV87Ci0rCQkJCQlnY2hhciogX3RtcDMwXzsKLSsJCQkJCV90bXAyOV8gPSBn cm91cF92YXJpYW50czsKLSsJCQkJCV90bXAzMF8gPSBnX3N0cmNvbmNhdCAoX3RtcDI5XywgIiwi LCBOVUxMKTsKLSsJCQkJCV9nX2ZyZWUwIChncm91cF92YXJpYW50cyk7Ci0rCQkJCQlncm91cF92 YXJpYW50cyA9IF90bXAzMF87Ci0rCQkJCX0KLSsJCQkJX3RtcDMyXyA9IGxheW91dDsKLSsJCQkJ X3RtcDMzXyA9IGxheW91dHM7Ci0rCQkJCV90bXAzM19fbGVuZ3RoMSA9IGxheW91dHNfbGVuZ3Ro MTsKLSsJCQkJX3RtcDM0XyA9IGk7Ci0rCQkJCV90bXAzNV8gPSBfdG1wMzNfW190bXAzNF9dOwot KwkJCQlpZiAoZ19zdHJjbXAwIChfdG1wMzJfLCBfdG1wMzVfKSA9PSAwKSB7Ci0rCQkJCQljb25z dCBnY2hhciogX3RtcDM2XzsKLSsJCQkJCV90bXAzNl8gPSB2YXJpYW50OwotKwkJCQkJX3RtcDMx XyA9IGdfc3RyY21wMCAoX3RtcDM2XywgIiIpID09IDA7Ci0rCQkJCX0gZWxzZSB7Ci0rCQkJCQlf dG1wMzFfID0gRkFMU0U7Ci0rCQkJCX0KLSsJCQkJX3RtcDM3XyA9IF90bXAzMV87Ci0rCQkJCWlm IChfdG1wMzdfKSB7Ci0rCQkJCQlnaW50IF90bXAzOF87Ci0rCQkJCQlpbmNsdWRlX2tleW1hcCA9 IFRSVUU7Ci0rCQkJCQlfdG1wMzhfID0gaTsKLSsJCQkJCWdyb3VwX2lkID0gX3RtcDM4XzsKLSsJ CQkJfQotKwkJCQljb250aW51ZTsKLSsJCQl9Ci0rCQkJX3RtcDQwXyA9IGxheW91dDsKLSsJCQlf dG1wNDFfID0gbGF5b3V0czsKLSsJCQlfdG1wNDFfX2xlbmd0aDEgPSBsYXlvdXRzX2xlbmd0aDE7 Ci0rCQkJX3RtcDQyXyA9IGk7Ci0rCQkJX3RtcDQzXyA9IF90bXA0MV9bX3RtcDQyX107Ci0rCQkJ aWYgKGdfc3RyY21wMCAoX3RtcDQwXywgX3RtcDQzXykgPT0gMCkgewotKwkJCQljb25zdCBnY2hh ciogX3RtcDQ0XzsKLSsJCQkJZ2NoYXIqKiBfdG1wNDVfOwotKwkJCQlnaW50IF90bXA0NV9fbGVu Z3RoMTsKLSsJCQkJZ2ludCBfdG1wNDZfOwotKwkJCQljb25zdCBnY2hhciogX3RtcDQ3XzsKLSsJ CQkJX3RtcDQ0XyA9IHZhcmlhbnQ7Ci0rCQkJCV90bXA0NV8gPSB2YXJpYW50czsKLSsJCQkJX3Rt cDQ1X19sZW5ndGgxID0gdmFyaWFudHNfbGVuZ3RoMTsKLSsJCQkJX3RtcDQ2XyA9IGk7Ci0rCQkJ CV90bXA0N18gPSBfdG1wNDVfW190bXA0Nl9dOwotKwkJCQlfdG1wMzlfID0gZ19zdHJjbXAwIChf dG1wNDRfLCBfdG1wNDdfKSA9PSAwOwotKwkJCX0gZWxzZSB7Ci0rCQkJCV90bXAzOV8gPSBGQUxT RTsKLSsJCQl9Ci0rCQkJX3RtcDQ4XyA9IF90bXAzOV87Ci0rCQkJaWYgKF90bXA0OF8pIHsKLSsJ CQkJZ2ludCBfdG1wNDlfOwotKwkJCQlpbmNsdWRlX2tleW1hcCA9IFRSVUU7Ci0rCQkJCV90bXA0 OV8gPSBpOwotKwkJCQlncm91cF9pZCA9IF90bXA0OV87Ci0rCQkJfQotKwkJCV90bXA1MF8gPSB2 YXJpYW50czsKLSsJCQlfdG1wNTBfX2xlbmd0aDEgPSB2YXJpYW50c19sZW5ndGgxOwotKwkJCV90 bXA1MV8gPSBpOwotKwkJCV90bXA1Ml8gPSBfdG1wNTBfW190bXA1MV9dOwotKwkJCWlmIChnX3N0 cmNtcDAgKF90bXA1Ml8sICIiKSAhPSAwKSB7Ci0rCQkJCWhhc192YXJpYW50ID0gVFJVRTsKLSsJ CQl9Ci0rCQkJX3RtcDUzXyA9IGk7Ci0rCQkJaWYgKF90bXA1M18gPT0gMCkgewotKwkJCQlnY2hh cioqIF90bXA1NF87Ci0rCQkJCWdpbnQgX3RtcDU0X19sZW5ndGgxOwotKwkJCQlnaW50IF90bXA1 NV87Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wNTZfOwotKwkJCQlnY2hhciogX3RtcDU3XzsKLSsJ CQkJX3RtcDU0XyA9IHZhcmlhbnRzOwotKwkJCQlfdG1wNTRfX2xlbmd0aDEgPSB2YXJpYW50c19s ZW5ndGgxOwotKwkJCQlfdG1wNTVfID0gaTsKLSsJCQkJX3RtcDU2XyA9IF90bXA1NF9bX3RtcDU1 X107Ci0rCQkJCV90bXA1N18gPSBnX3N0cmR1cCAoX3RtcDU2Xyk7Ci0rCQkJCV9nX2ZyZWUwIChn cm91cF92YXJpYW50cyk7Ci0rCQkJCWdyb3VwX3ZhcmlhbnRzID0gX3RtcDU3XzsKLSsJCQl9IGVs c2UgewotKwkJCQljb25zdCBnY2hhciogX3RtcDU4XzsKLSsJCQkJZ2NoYXIqKiBfdG1wNTlfOwot KwkJCQlnaW50IF90bXA1OV9fbGVuZ3RoMTsKLSsJCQkJZ2ludCBfdG1wNjBfOwotKwkJCQljb25z dCBnY2hhciogX3RtcDYxXzsKLSsJCQkJZ2NoYXIqIF90bXA2Ml8gPSBOVUxMOwotKwkJCQlfdG1w NThfID0gZ3JvdXBfdmFyaWFudHM7Ci0rCQkJCV90bXA1OV8gPSB2YXJpYW50czsKLSsJCQkJX3Rt cDU5X19sZW5ndGgxID0gdmFyaWFudHNfbGVuZ3RoMTsKLSsJCQkJX3RtcDYwXyA9IGk7Ci0rCQkJ CV90bXA2MV8gPSBfdG1wNTlfW190bXA2MF9dOwotKwkJCQlfdG1wNjJfID0gZ19zdHJkdXBfcHJp bnRmICgiJXMsJXMiLCBfdG1wNThfLCBfdG1wNjFfKTsKLSsJCQkJX2dfZnJlZTAgKGdyb3VwX3Zh cmlhbnRzKTsKLSsJCQkJZ3JvdXBfdmFyaWFudHMgPSBfdG1wNjJfOwotKwkJCX0KLSsJCX0KLSsJ fQotKwlfdG1wNjNfID0gdmFyaWFudDsKLSsJaWYgKGdfc3RyY21wMCAoX3RtcDYzXywgIiIpICE9 IDApIHsKLSsJCWhhc192YXJpYW50ID0gVFJVRTsKLSsJfQotKwlfdG1wNjRfID0gaW5jbHVkZV9r ZXltYXA7Ci0rCWlmICghX3RtcDY0XykgewotKwkJY29uc3QgZ2NoYXIqIF90bXA2NV87Ci0rCQlj b25zdCBnY2hhciogX3RtcDY2XzsKLSsJCWdjaGFyKiBfdG1wNjdfID0gTlVMTDsKLSsJCWNvbnN0 IGdjaGFyKiBfdG1wNjhfOwotKwkJY29uc3QgZ2NoYXIqIF90bXA2OV87Ci0rCQlnY2hhciogX3Rt cDcwXyA9IE5VTEw7Ci0rCQlnaW50IF90bXA3MV87Ci0rCQlfdG1wNjVfID0gZ3JvdXBfbGF5b3V0 czsKLSsJCV90bXA2Nl8gPSBsYXlvdXQ7Ci0rCQlfdG1wNjdfID0gZ19zdHJkdXBfcHJpbnRmICgi JXMsJXMiLCBfdG1wNjVfLCBfdG1wNjZfKTsKLSsJCV9nX2ZyZWUwIChncm91cF9sYXlvdXRzKTsK LSsJCWdyb3VwX2xheW91dHMgPSBfdG1wNjdfOwotKwkJX3RtcDY4XyA9IGdyb3VwX3ZhcmlhbnRz OwotKwkJX3RtcDY5XyA9IHZhcmlhbnQ7Ci0rCQlfdG1wNzBfID0gZ19zdHJkdXBfcHJpbnRmICgi JXMsJXMiLCBfdG1wNjhfLCBfdG1wNjlfKTsKLSsJCV9nX2ZyZWUwIChncm91cF92YXJpYW50cyk7 Ci0rCQlncm91cF92YXJpYW50cyA9IF90bXA3MF87Ci0rCQlfdG1wNzFfID0gaTsKLSsJCWdyb3Vw X2lkID0gX3RtcDcxXzsKLSsJfQotKwlfdG1wNzJfID0gaGFzX3ZhcmlhbnQ7Ci0rCWlmICghX3Rt cDcyXykgewotKwkJX2dfZnJlZTAgKGdyb3VwX3ZhcmlhbnRzKTsKLSsJCWdyb3VwX3ZhcmlhbnRz ID0gTlVMTDsKLSsJfQotKwlfdG1wNzNfID0gZ3JvdXBfbGF5b3V0czsKLSsJX3RtcDc0XyA9IGdf c3RyZHVwIChfdG1wNzNfKTsKLSsJX3RtcDc1XyA9IGdyb3VwX3ZhcmlhbnRzOwotKwlfdG1wNzZf ID0gZ19zdHJkdXAgKF90bXA3NV8pOwotKwlfdG1wNzdfID0gZ3JvdXBfaWQ7Ci0rCV90bXA3OF8g PSBnX3N0cmR1cF9wcmludGYgKCIlaSIsIF90bXA3N18pOwotKwlfdG1wNzlfID0gZ19uZXcwIChn Y2hhciosIDMgKyAxKTsKLSsJX3RtcDc5X1swXSA9IF90bXA3NF87Ci0rCV90bXA3OV9bMV0gPSBf dG1wNzZfOwotKwlfdG1wNzlfWzJdID0gX3RtcDc4XzsKLSsJX3RtcDgwXyA9IF90bXA3OV87Ci0r CV90bXA4MF9fbGVuZ3RoMSA9IDM7Ci0rCWlmIChyZXN1bHRfbGVuZ3RoMSkgewotKwkJKnJlc3Vs dF9sZW5ndGgxID0gX3RtcDgwX19sZW5ndGgxOwotKwl9Ci0rCXJlc3VsdCA9IF90bXA4MF87Ci0r CV9nX2ZyZWUwIChncm91cF92YXJpYW50cyk7Ci0rCV9nX2ZyZWUwIChncm91cF9sYXlvdXRzKTsK LSsJdmFyaWFudHMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAodmFyaWFudHMsIHZhcmlhbnRzX2xlbmd0 aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7Ci0rCWxheW91dHMgPSAoX3ZhbGFf YXJyYXlfZnJlZSAobGF5b3V0cywgbGF5b3V0c19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdf ZnJlZSksIE5VTEwpOwotKwlyZXR1cm4gcmVzdWx0OwotK30KLSsKLSsKLStzdGF0aWMgZ2ludCBz dHJpbmdfaW5kZXhfb2YgKGNvbnN0IGdjaGFyKiBzZWxmLCBjb25zdCBnY2hhciogbmVlZGxlLCBn aW50IHN0YXJ0X2luZGV4KSB7Ci0rCWdpbnQgcmVzdWx0ID0gMDsKLSsJZ2ludCBfdG1wMF87Ci0r CWNvbnN0IGdjaGFyKiBfdG1wMV87Ci0rCWdjaGFyKiBfdG1wMl8gPSBOVUxMOwotKwlnY2hhciog X3Jlc3VsdF87Ci0rCWdjaGFyKiBfdG1wM187Ci0rCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxm ICE9IE5VTEwsIDApOwotKwlnX3JldHVybl92YWxfaWZfZmFpbCAobmVlZGxlICE9IE5VTEwsIDAp OwotKwlfdG1wMF8gPSBzdGFydF9pbmRleDsKLSsJX3RtcDFfID0gbmVlZGxlOwotKwlfdG1wMl8g PSBzdHJzdHIgKCgoZ2NoYXIqKSBzZWxmKSArIF90bXAwXywgKGdjaGFyKikgX3RtcDFfKTsKLSsJ X3Jlc3VsdF8gPSBfdG1wMl87Ci0rCV90bXAzXyA9IF9yZXN1bHRfOwotKwlpZiAoX3RtcDNfICE9 IE5VTEwpIHsKLSsJCWdjaGFyKiBfdG1wNF87Ci0rCQlfdG1wNF8gPSBfcmVzdWx0XzsKLSsJCXJl c3VsdCA9IChnaW50KSAoX3RtcDRfIC0gKChnY2hhciopIHNlbGYpKTsKLSsJCXJldHVybiByZXN1 bHQ7Ci0rCX0gZWxzZSB7Ci0rCQlyZXN1bHQgPSAtMTsKLSsJCXJldHVybiByZXN1bHQ7Ci0rCX0K LSt9Ci0rCi0rCi0rZ2NoYXIqKiB4a2JfbGF5b3V0X2dldF92YXJpYW50X2Zyb21fbGF5b3V0IChY S0JMYXlvdXQqIHNlbGYsIGNvbnN0IGdjaGFyKiBsYXlvdXQsIGludCogcmVzdWx0X2xlbmd0aDEp IHsKLSsJZ2NoYXIqKiByZXN1bHQgPSBOVUxMOwotKwljb25zdCBnY2hhciogX3RtcDBfOwotKwln aW50IF90bXAxXyA9IDA7Ci0rCWdpbnQgbGVmdF9icmFja2V0OwotKwljb25zdCBnY2hhciogX3Rt cDJfOwotKwlnaW50IF90bXAzXyA9IDA7Ci0rCWdpbnQgcmlnaHRfYnJhY2tldDsKLSsJZ2Jvb2xl YW4gX3RtcDRfID0gRkFMU0U7Ci0rCWdpbnQgX3RtcDVfOwotKwlnYm9vbGVhbiBfdG1wOF87Ci0r CWNvbnN0IGdjaGFyKiBfdG1wMjhfOwotKwlnY2hhciogX3RtcDI5XzsKLSsJZ2NoYXIqIF90bXAz MF87Ci0rCWdjaGFyKiogX3RtcDMxXyA9IE5VTEw7Ci0rCWdjaGFyKiogX3RtcDMyXzsKLSsJZ2lu dCBfdG1wMzJfX2xlbmd0aDE7Ci0rCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmICE9IE5VTEws IE5VTEwpOwotKwlnX3JldHVybl92YWxfaWZfZmFpbCAobGF5b3V0ICE9IE5VTEwsIE5VTEwpOwot KwlfdG1wMF8gPSBsYXlvdXQ7Ci0rCV90bXAxXyA9IHN0cmluZ19pbmRleF9vZiAoX3RtcDBfLCAi KCIsIDApOwotKwlsZWZ0X2JyYWNrZXQgPSBfdG1wMV87Ci0rCV90bXAyXyA9IGxheW91dDsKLSsJ X3RtcDNfID0gc3RyaW5nX2luZGV4X29mIChfdG1wMl8sICIpIiwgMCk7Ci0rCXJpZ2h0X2JyYWNr ZXQgPSBfdG1wM187Ci0rCV90bXA1XyA9IGxlZnRfYnJhY2tldDsKLSsJaWYgKF90bXA1XyA+PSAw KSB7Ci0rCQlnaW50IF90bXA2XzsKLSsJCWdpbnQgX3RtcDdfOwotKwkJX3RtcDZfID0gcmlnaHRf YnJhY2tldDsKLSsJCV90bXA3XyA9IGxlZnRfYnJhY2tldDsKLSsJCV90bXA0XyA9IF90bXA2XyA+ IF90bXA3XzsKLSsJfSBlbHNlIHsKLSsJCV90bXA0XyA9IEZBTFNFOwotKwl9Ci0rCV90bXA4XyA9 IF90bXA0XzsKLSsJaWYgKF90bXA4XykgewotKwkJY29uc3QgZ2NoYXIqIF90bXA5XzsKLSsJCWdp bnQgX3RtcDEwXzsKLSsJCWdjaGFyKiBfdG1wMTFfID0gTlVMTDsKLSsJCWdjaGFyKiBfdG1wMTJf OwotKwkJY29uc3QgZ2NoYXIqIF90bXAxM187Ci0rCQlnaW50IF90bXAxNF87Ci0rCQljb25zdCBn Y2hhciogX3RtcDE1XzsKLSsJCWdpbnQgX3RtcDE2XzsKLSsJCWdpbnQgX3RtcDE3XzsKLSsJCWdj aGFyKiBfdG1wMThfID0gTlVMTDsKLSsJCWdjaGFyKiBfdG1wMTlfOwotKwkJZ2NoYXIqIF90bXAy MF87Ci0rCQljb25zdCBnY2hhciogX3RtcDIxXzsKLSsJCWdpbnQgX3RtcDIyXzsKLSsJCWdpbnQg X3RtcDIzXzsKLSsJCWdjaGFyKiBfdG1wMjRfID0gTlVMTDsKLSsJCWdjaGFyKiogX3RtcDI1XyA9 IE5VTEw7Ci0rCQlnY2hhcioqIF90bXAyNl87Ci0rCQlnaW50IF90bXAyNl9fbGVuZ3RoMTsKLSsJ CWdjaGFyKiogX3RtcDI3XzsKLSsJCWdpbnQgX3RtcDI3X19sZW5ndGgxOwotKwkJX3RtcDlfID0g bGF5b3V0OwotKwkJX3RtcDEwXyA9IGxlZnRfYnJhY2tldDsKLSsJCV90bXAxMV8gPSBzdHJpbmdf c2xpY2UgKF90bXA5XywgKGdsb25nKSAwLCAoZ2xvbmcpIF90bXAxMF8pOwotKwkJX3RtcDEyXyA9 IF90bXAxMV87Ci0rCQlfdG1wMTNfID0gbGF5b3V0OwotKwkJX3RtcDE0XyA9IHJpZ2h0X2JyYWNr ZXQ7Ci0rCQlfdG1wMTVfID0gbGF5b3V0OwotKwkJX3RtcDE2XyA9IHN0cmxlbiAoX3RtcDE1Xyk7 Ci0rCQlfdG1wMTdfID0gX3RtcDE2XzsKLSsJCV90bXAxOF8gPSBzdHJpbmdfc2xpY2UgKF90bXAx M18sIChnbG9uZykgKF90bXAxNF8gKyAxKSwgKGdsb25nKSBfdG1wMTdfKTsKLSsJCV90bXAxOV8g PSBfdG1wMThfOwotKwkJX3RtcDIwXyA9IGdfc3RyY29uY2F0IChfdG1wMTJfLCBfdG1wMTlfLCBO VUxMKTsKLSsJCV90bXAyMV8gPSBsYXlvdXQ7Ci0rCQlfdG1wMjJfID0gbGVmdF9icmFja2V0Owot KwkJX3RtcDIzXyA9IHJpZ2h0X2JyYWNrZXQ7Ci0rCQlfdG1wMjRfID0gc3RyaW5nX3NsaWNlIChf dG1wMjFfLCAoZ2xvbmcpIChfdG1wMjJfICsgMSksIChnbG9uZykgX3RtcDIzXyk7Ci0rCQlfdG1w MjVfID0gZ19uZXcwIChnY2hhciosIDIgKyAxKTsKLSsJCV90bXAyNV9bMF0gPSBfdG1wMjBfOwot KwkJX3RtcDI1X1sxXSA9IF90bXAyNF87Ci0rCQlfdG1wMjZfID0gX3RtcDI1XzsKLSsJCV90bXAy Nl9fbGVuZ3RoMSA9IDI7Ci0rCQlfZ19mcmVlMCAoX3RtcDE5Xyk7Ci0rCQlfZ19mcmVlMCAoX3Rt cDEyXyk7Ci0rCQlfdG1wMjdfID0gX3RtcDI2XzsKLSsJCV90bXAyN19fbGVuZ3RoMSA9IF90bXAy Nl9fbGVuZ3RoMTsKLSsJCWlmIChyZXN1bHRfbGVuZ3RoMSkgewotKwkJCSpyZXN1bHRfbGVuZ3Ro MSA9IF90bXAyN19fbGVuZ3RoMTsKLSsJCX0KLSsJCXJlc3VsdCA9IF90bXAyN187Ci0rCQlyZXR1 cm4gcmVzdWx0OwotKwl9Ci0rCV90bXAyOF8gPSBsYXlvdXQ7Ci0rCV90bXAyOV8gPSBnX3N0cmR1 cCAoX3RtcDI4Xyk7Ci0rCV90bXAzMF8gPSBnX3N0cmR1cCAoImRlZmF1bHQiKTsKLSsJX3RtcDMx XyA9IGdfbmV3MCAoZ2NoYXIqLCAyICsgMSk7Ci0rCV90bXAzMV9bMF0gPSBfdG1wMjlfOwotKwlf dG1wMzFfWzFdID0gX3RtcDMwXzsKLSsJX3RtcDMyXyA9IF90bXAzMV87Ci0rCV90bXAzMl9fbGVu Z3RoMSA9IDI7Ci0rCWlmIChyZXN1bHRfbGVuZ3RoMSkgewotKwkJKnJlc3VsdF9sZW5ndGgxID0g X3RtcDMyX19sZW5ndGgxOwotKwl9Ci0rCXJlc3VsdCA9IF90bXAzMl87Ci0rCXJldHVybiByZXN1 bHQ7Ci0rfQotKwotKwotK2djaGFyKiogeGtiX2xheW91dF9nZXRfb3B0aW9uX2Zyb21fbGF5b3V0 IChYS0JMYXlvdXQqIHNlbGYsIGNvbnN0IGdjaGFyKiBsYXlvdXQsIGludCogcmVzdWx0X2xlbmd0 aDEpIHsKLSsJZ2NoYXIqKiByZXN1bHQgPSBOVUxMOwotKwljb25zdCBnY2hhciogX3RtcDBfOwot KwlnaW50IF90bXAxXyA9IDA7Ci0rCWdpbnQgbGVmdF9icmFja2V0OwotKwljb25zdCBnY2hhciog X3RtcDJfOwotKwlnaW50IF90bXAzXyA9IDA7Ci0rCWdpbnQgcmlnaHRfYnJhY2tldDsKLSsJZ2Jv b2xlYW4gX3RtcDRfID0gRkFMU0U7Ci0rCWdpbnQgX3RtcDVfOwotKwlnYm9vbGVhbiBfdG1wOF87 Ci0rCWNvbnN0IGdjaGFyKiBfdG1wMjhfOwotKwlnY2hhciogX3RtcDI5XzsKLSsJZ2NoYXIqIF90 bXAzMF87Ci0rCWdjaGFyKiogX3RtcDMxXyA9IE5VTEw7Ci0rCWdjaGFyKiogX3RtcDMyXzsKLSsJ Z2ludCBfdG1wMzJfX2xlbmd0aDE7Ci0rCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmICE9IE5V TEwsIE5VTEwpOwotKwlnX3JldHVybl92YWxfaWZfZmFpbCAobGF5b3V0ICE9IE5VTEwsIE5VTEwp OwotKwlfdG1wMF8gPSBsYXlvdXQ7Ci0rCV90bXAxXyA9IHN0cmluZ19pbmRleF9vZiAoX3RtcDBf LCAiWyIsIDApOwotKwlsZWZ0X2JyYWNrZXQgPSBfdG1wMV87Ci0rCV90bXAyXyA9IGxheW91dDsK LSsJX3RtcDNfID0gc3RyaW5nX2luZGV4X29mIChfdG1wMl8sICJdIiwgMCk7Ci0rCXJpZ2h0X2Jy YWNrZXQgPSBfdG1wM187Ci0rCV90bXA1XyA9IGxlZnRfYnJhY2tldDsKLSsJaWYgKF90bXA1XyA+ PSAwKSB7Ci0rCQlnaW50IF90bXA2XzsKLSsJCWdpbnQgX3RtcDdfOwotKwkJX3RtcDZfID0gcmln aHRfYnJhY2tldDsKLSsJCV90bXA3XyA9IGxlZnRfYnJhY2tldDsKLSsJCV90bXA0XyA9IF90bXA2 XyA+IF90bXA3XzsKLSsJfSBlbHNlIHsKLSsJCV90bXA0XyA9IEZBTFNFOwotKwl9Ci0rCV90bXA4 XyA9IF90bXA0XzsKLSsJaWYgKF90bXA4XykgewotKwkJY29uc3QgZ2NoYXIqIF90bXA5XzsKLSsJ CWdpbnQgX3RtcDEwXzsKLSsJCWdjaGFyKiBfdG1wMTFfID0gTlVMTDsKLSsJCWdjaGFyKiBfdG1w MTJfOwotKwkJY29uc3QgZ2NoYXIqIF90bXAxM187Ci0rCQlnaW50IF90bXAxNF87Ci0rCQljb25z dCBnY2hhciogX3RtcDE1XzsKLSsJCWdpbnQgX3RtcDE2XzsKLSsJCWdpbnQgX3RtcDE3XzsKLSsJ CWdjaGFyKiBfdG1wMThfID0gTlVMTDsKLSsJCWdjaGFyKiBfdG1wMTlfOwotKwkJZ2NoYXIqIF90 bXAyMF87Ci0rCQljb25zdCBnY2hhciogX3RtcDIxXzsKLSsJCWdpbnQgX3RtcDIyXzsKLSsJCWdp bnQgX3RtcDIzXzsKLSsJCWdjaGFyKiBfdG1wMjRfID0gTlVMTDsKLSsJCWdjaGFyKiogX3RtcDI1 XyA9IE5VTEw7Ci0rCQlnY2hhcioqIF90bXAyNl87Ci0rCQlnaW50IF90bXAyNl9fbGVuZ3RoMTsK LSsJCWdjaGFyKiogX3RtcDI3XzsKLSsJCWdpbnQgX3RtcDI3X19sZW5ndGgxOwotKwkJX3RtcDlf ID0gbGF5b3V0OwotKwkJX3RtcDEwXyA9IGxlZnRfYnJhY2tldDsKLSsJCV90bXAxMV8gPSBzdHJp bmdfc2xpY2UgKF90bXA5XywgKGdsb25nKSAwLCAoZ2xvbmcpIF90bXAxMF8pOwotKwkJX3RtcDEy XyA9IF90bXAxMV87Ci0rCQlfdG1wMTNfID0gbGF5b3V0OwotKwkJX3RtcDE0XyA9IHJpZ2h0X2Jy YWNrZXQ7Ci0rCQlfdG1wMTVfID0gbGF5b3V0OwotKwkJX3RtcDE2XyA9IHN0cmxlbiAoX3RtcDE1 Xyk7Ci0rCQlfdG1wMTdfID0gX3RtcDE2XzsKLSsJCV90bXAxOF8gPSBzdHJpbmdfc2xpY2UgKF90 bXAxM18sIChnbG9uZykgKF90bXAxNF8gKyAxKSwgKGdsb25nKSBfdG1wMTdfKTsKLSsJCV90bXAx OV8gPSBfdG1wMThfOwotKwkJX3RtcDIwXyA9IGdfc3RyY29uY2F0IChfdG1wMTJfLCBfdG1wMTlf LCBOVUxMKTsKLSsJCV90bXAyMV8gPSBsYXlvdXQ7Ci0rCQlfdG1wMjJfID0gbGVmdF9icmFja2V0 OwotKwkJX3RtcDIzXyA9IHJpZ2h0X2JyYWNrZXQ7Ci0rCQlfdG1wMjRfID0gc3RyaW5nX3NsaWNl IChfdG1wMjFfLCAoZ2xvbmcpIChfdG1wMjJfICsgMSksIChnbG9uZykgX3RtcDIzXyk7Ci0rCQlf dG1wMjVfID0gZ19uZXcwIChnY2hhciosIDIgKyAxKTsKLSsJCV90bXAyNV9bMF0gPSBfdG1wMjBf OwotKwkJX3RtcDI1X1sxXSA9IF90bXAyNF87Ci0rCQlfdG1wMjZfID0gX3RtcDI1XzsKLSsJCV90 bXAyNl9fbGVuZ3RoMSA9IDI7Ci0rCQlfZ19mcmVlMCAoX3RtcDE5Xyk7Ci0rCQlfZ19mcmVlMCAo X3RtcDEyXyk7Ci0rCQlfdG1wMjdfID0gX3RtcDI2XzsKLSsJCV90bXAyN19fbGVuZ3RoMSA9IF90 bXAyNl9fbGVuZ3RoMTsKLSsJCWlmIChyZXN1bHRfbGVuZ3RoMSkgewotKwkJCSpyZXN1bHRfbGVu Z3RoMSA9IF90bXAyN19fbGVuZ3RoMTsKLSsJCX0KLSsJCXJlc3VsdCA9IF90bXAyN187Ci0rCQly ZXR1cm4gcmVzdWx0OwotKwl9Ci0rCV90bXAyOF8gPSBsYXlvdXQ7Ci0rCV90bXAyOV8gPSBnX3N0 cmR1cCAoX3RtcDI4Xyk7Ci0rCV90bXAzMF8gPSBnX3N0cmR1cCAoImRlZmF1bHQiKTsKLSsJX3Rt cDMxXyA9IGdfbmV3MCAoZ2NoYXIqLCAyICsgMSk7Ci0rCV90bXAzMV9bMF0gPSBfdG1wMjlfOwot KwlfdG1wMzFfWzFdID0gX3RtcDMwXzsKLSsJX3RtcDMyXyA9IF90bXAzMV87Ci0rCV90bXAzMl9f bGVuZ3RoMSA9IDI7Ci0rCWlmIChyZXN1bHRfbGVuZ3RoMSkgewotKwkJKnJlc3VsdF9sZW5ndGgx ID0gX3RtcDMyX19sZW5ndGgxOwotKwl9Ci0rCXJlc3VsdCA9IF90bXAzMl87Ci0rCXJldHVybiBy ZXN1bHQ7Ci0rfQotKwotKwotK2djaGFyKiB4a2JfbGF5b3V0X2dldF9sYXlvdXQgKFhLQkxheW91 dCogc2VsZikgewotKwlnY2hhciogcmVzdWx0ID0gTlVMTDsKLSsJZ19yZXR1cm5fdmFsX2lmX2Zh aWwgKHNlbGYgIT0gTlVMTCwgTlVMTCk7Ci0rCWlmIChIQVZFX0lCVVNfWEtCKSB7Ci0rCQlnY2hh ciogX3RtcDBfID0gTlVMTDsKLSsJCV90bXAwXyA9IHhrYl9sYXlvdXRfZ2V0X291dHB1dF9mcm9t X2NtZGxpbmUgKHNlbGYsICItLWdldCIsICJsYXlvdXQ6ICIpOwotKwkJcmVzdWx0ID0gX3RtcDBf OwotKwkJcmV0dXJuIHJlc3VsdDsKLSsJfSBlbHNlIHsKLSsJCWdjaGFyKiBfdG1wMV8gPSBOVUxM OwotKwkJX3RtcDFfID0geGtiX2xheW91dF9nZXRfb3V0cHV0X2Zyb21fY21kbGluZSAoc2VsZiwg Ii1xdWVyeSIsICJsYXlvdXQ6ICIpOwotKwkJcmVzdWx0ID0gX3RtcDFfOwotKwkJcmV0dXJuIHJl c3VsdDsKLSsJfQotK30KLSsKLSsKLStnY2hhciogeGtiX2xheW91dF9nZXRfdmFyaWFudCAoWEtC TGF5b3V0KiBzZWxmKSB7Ci0rCWdjaGFyKiByZXN1bHQgPSBOVUxMOwotKwlnX3JldHVybl92YWxf aWZfZmFpbCAoc2VsZiAhPSBOVUxMLCBOVUxMKTsKLSsJaWYgKEhBVkVfSUJVU19YS0IpIHsKLSsJ CWdjaGFyKiBfdG1wMF8gPSBOVUxMOwotKwkJX3RtcDBfID0geGtiX2xheW91dF9nZXRfb3V0cHV0 X2Zyb21fY21kbGluZSAoc2VsZiwgIi0tZ2V0IiwgInZhcmlhbnQ6ICIpOwotKwkJcmVzdWx0ID0g X3RtcDBfOwotKwkJcmV0dXJuIHJlc3VsdDsKLSsJfSBlbHNlIHsKLSsJCWdjaGFyKiBfdG1wMV8g PSBOVUxMOwotKwkJX3RtcDFfID0geGtiX2xheW91dF9nZXRfb3V0cHV0X2Zyb21fY21kbGluZSAo c2VsZiwgIi1xdWVyeSIsICJ2YXJpYW50OiAiKTsKLSsJCXJlc3VsdCA9IF90bXAxXzsKLSsJCXJl dHVybiByZXN1bHQ7Ci0rCX0KLSt9Ci0rCi0rCi0rZ2NoYXIqIHhrYl9sYXlvdXRfZ2V0X29wdGlv biAoWEtCTGF5b3V0KiBzZWxmKSB7Ci0rCWdjaGFyKiByZXN1bHQgPSBOVUxMOwotKwlnX3JldHVy bl92YWxfaWZfZmFpbCAoc2VsZiAhPSBOVUxMLCBOVUxMKTsKLSsJaWYgKEhBVkVfSUJVU19YS0Ip IHsKLSsJCWdjaGFyKiBfdG1wMF8gPSBOVUxMOwotKwkJX3RtcDBfID0geGtiX2xheW91dF9nZXRf b3V0cHV0X2Zyb21fY21kbGluZSAoc2VsZiwgIi0tZ2V0IiwgIm9wdGlvbjogIik7Ci0rCQlyZXN1 bHQgPSBfdG1wMF87Ci0rCQlyZXR1cm4gcmVzdWx0OwotKwl9IGVsc2UgewotKwkJZ2NoYXIqIF90 bXAxXyA9IE5VTEw7Ci0rCQlfdG1wMV8gPSB4a2JfbGF5b3V0X2dldF9vdXRwdXRfZnJvbV9jbWRs aW5lIChzZWxmLCAiLXF1ZXJ5IiwgIm9wdGlvbnM6ICIpOwotKwkJcmVzdWx0ID0gX3RtcDFfOwot KwkJcmV0dXJuIHJlc3VsdDsKLSsJfQotK30KLSsKLSsKLStzdGF0aWMgZ2Jvb2xlYW4gX3ZhbGFf c3RyaW5nX2FycmF5X2NvbnRhaW5zIChnY2hhcioqIHN0YWNrLCBpbnQgc3RhY2tfbGVuZ3RoLCBn Y2hhciogbmVlZGxlKSB7Ci0rCWludCBpOwotKwlmb3IgKGkgPSAwOyBpIDwgc3RhY2tfbGVuZ3Ro OyBpKyspIHsKLSsJCWlmIChnX3N0cmNtcDAgKHN0YWNrW2ldLCBuZWVkbGUpID09IDApIHsKLSsJ CQlyZXR1cm4gVFJVRTsKLSsJCX0KLSsJfQotKwlyZXR1cm4gRkFMU0U7Ci0rfQotKwotKwotK3N0 YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDIzIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgs IGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7Ci0rCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkg ewotKwkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAoKnNpemUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBn X3JlbmV3IChnY2hhciosICphcnJheSwgKCpzaXplKSArIDEpOwotKwl9Ci0rCSgqYXJyYXkpWygq bGVuZ3RoKSsrXSA9IHZhbHVlOwotKwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwot KwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDI0IChnY2hhcioqKiBhcnJheSwgaW50KiBs ZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7Ci0rCWlmICgoKmxlbmd0aCkgPT0gKCpz aXplKSkgewotKwkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAoKnNpemUpKSA6IDQ7Ci0rCQkqYXJy YXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwgKCpzaXplKSArIDEpOwotKwl9Ci0rCSgqYXJy YXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOwotKwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7Ci0r fQotKwotKwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDI1IChnY2hhcioqKiBhcnJheSwg aW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7Ci0rCWlmICgoKmxlbmd0aCkg PT0gKCpzaXplKSkgewotKwkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAoKnNpemUpKSA6IDQ7Ci0r CQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwgKCpzaXplKSArIDEpOwotKwl9Ci0r CSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOwotKwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5V TEw7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDI2IChnY2hhcioqKiBh cnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7Ci0rCWlmICgoKmxl bmd0aCkgPT0gKCpzaXplKSkgewotKwkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAoKnNpemUpKSA6 IDQ7Ci0rCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwgKCpzaXplKSArIDEpOwot Kwl9Ci0rCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOwotKwkoKmFycmF5KVsqbGVuZ3Ro XSA9IE5VTEw7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDI3IChnY2hh cioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7Ci0rCWlm ICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewotKwkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAoKnNp emUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwgKCpzaXplKSAr IDEpOwotKwl9Ci0rCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOwotKwkoKmFycmF5KVsq bGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDI4 IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7 Ci0rCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewotKwkJKnNpemUgPSAoKnNpemUpID8gKDIg KiAoKnNpemUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwgKCpz aXplKSArIDEpOwotKwl9Ci0rCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOwotKwkoKmFy cmF5KVsqbGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5 X2FkZDI5IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZh bHVlKSB7Ci0rCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewotKwkJKnNpemUgPSAoKnNpemUp ID8gKDIgKiAoKnNpemUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJh eSwgKCpzaXplKSArIDEpOwotKwl9Ci0rCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOwot KwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF92YWxh X2FycmF5X2FkZDMwIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2No YXIqIHZhbHVlKSB7Ci0rCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewotKwkJKnNpemUgPSAo KnNpemUpID8gKDIgKiAoKnNpemUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhcios ICphcnJheSwgKCpzaXplKSArIDEpOwotKwl9Ci0rCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZh bHVlOwotKwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwotKwotK3N0YXRpYyB2b2lk IF92YWxhX2FycmF5X2FkZDMxIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6 ZSwgZ2NoYXIqIHZhbHVlKSB7Ci0rCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewotKwkJKnNp emUgPSAoKnNpemUpID8gKDIgKiAoKnNpemUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBnX3JlbmV3IChn Y2hhciosICphcnJheSwgKCpzaXplKSArIDEpOwotKwl9Ci0rCSgqYXJyYXkpWygqbGVuZ3RoKSsr XSA9IHZhbHVlOwotKwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwotKwotK3N0YXRp YyB2b2lkIF92YWxhX2FycmF5X2FkZDMyIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGlu dCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7Ci0rCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewot KwkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAoKnNpemUpKSA6IDQ7Ci0rCQkqYXJyYXkgPSBnX3Jl bmV3IChnY2hhciosICphcnJheSwgKCpzaXplKSArIDEpOwotKwl9Ci0rCSgqYXJyYXkpWygqbGVu Z3RoKSsrXSA9IHZhbHVlOwotKwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7Ci0rfQotKwotKwot K3N0YXRpYyB2b2lkIF94a2JfbGF5b3V0X3NldF9sYXlvdXRfY2JfZ2NoaWxkX3dhdGNoX2Z1bmMg KEdQaWQgcGlkLCBnaW50IHN0YXR1cywgZ3BvaW50ZXIgc2VsZikgewotKwl4a2JfbGF5b3V0X3Nl dF9sYXlvdXRfY2IgKHNlbGYsIHBpZCwgc3RhdHVzKTsKLSt9Ci0rCi0rCi0rZ2ludCogeGtiX2xh eW91dF9zZXRfbGF5b3V0IChYS0JMYXlvdXQqIHNlbGYsIGNvbnN0IGdjaGFyKiBfbGF5b3V0LCBj b25zdCBnY2hhciogX3ZhcmlhbnQsIGNvbnN0IGdjaGFyKiBfb3B0aW9uLCBpbnQqIHJlc3VsdF9s ZW5ndGgxKSB7Ci0rCWdpbnQqIHJlc3VsdCA9IE5VTEw7Ci0rCWNvbnN0IGdjaGFyKiBfdG1wMF87 Ci0rCWdpbnQgeGtiX2dyb3VwX2lkOwotKwlnaW50IGNoYW5nZWRfb3B0aW9uOwotKwlHUGlkIF90 bXAxXzsKLSsJZ2Jvb2xlYW4gX3RtcDRfID0gRkFMU0U7Ci0rCWdib29sZWFuIF90bXA1XyA9IEZB TFNFOwotKwljb25zdCBnY2hhciogX3RtcDZfOwotKwlnYm9vbGVhbiBfdG1wOF87Ci0rCWdib29s ZWFuIF90bXAxMF87Ci0rCWNvbnN0IGdjaGFyKiBfdG1wMTNfOwotKwlnY2hhciogX3RtcDE0XzsK LSsJZ2NoYXIqIGxheW91dDsKLSsJY29uc3QgZ2NoYXIqIF90bXAxNV87Ci0rCWdjaGFyKiBfdG1w MTZfOwotKwlnY2hhciogdmFyaWFudDsKLSsJY29uc3QgZ2NoYXIqIF90bXAxN187Ci0rCWdjaGFy KiBfdG1wMThfOwotKwlnY2hhciogb3B0aW9uOwotKwljb25zdCBnY2hhciogX3RtcDE5XzsKLSsJ Y29uc3QgZ2NoYXIqIF90bXAyOV87Ci0rCWdib29sZWFuIG5lZWRfdXNfbGF5b3V0OwotKwlnY2hh cioqIF90bXAzOV87Ci0rCWdpbnQgX3RtcDM5X19sZW5ndGgxOwotKwlnaW50IGxheW91dHNfbWF4 X2xlbmd0aDsKLSsJZ2Jvb2xlYW4gX3RtcDU0XzsKLSsJY29uc3QgZ2NoYXIqIF90bXA1Nl87Ci0r CWNvbnN0IGdjaGFyKiBfdG1wNThfOwotKwljb25zdCBnY2hhciogX3RtcDYwXzsKLSsJY29uc3Qg Z2NoYXIqIF90bXA2Ml87Ci0rCWNvbnN0IGdjaGFyKiBfdG1wODNfOwotKwlnYm9vbGVhbiBfdG1w ODZfID0gRkFMU0U7Ci0rCWNvbnN0IGdjaGFyKiBfdG1wODdfOwotKwlnYm9vbGVhbiBfdG1wODlf OwotKwlnYm9vbGVhbiBfdG1wOTBfID0gRkFMU0U7Ci0rCWNvbnN0IGdjaGFyKiBfdG1wOTFfOwot KwlnYm9vbGVhbiBfdG1wOTNfOwotKwljb25zdCBnY2hhciogX3RtcDEwN187Ci0rCWdib29sZWFu IF90bXAxMDhfOwotKwlnY2hhcioqIF90bXAxMTRfID0gTlVMTDsKLSsJZ2NoYXIqKiBhcmdzOwot KwlnaW50IGFyZ3NfbGVuZ3RoMTsKLSsJZ2ludCBfYXJnc19zaXplXzsKLSsJZ2NoYXIqKiBfdG1w MTE1XzsKLSsJZ2ludCBfdG1wMTE1X19sZW5ndGgxOwotKwljb25zdCBnY2hhciogX3RtcDExNl87 Ci0rCWdjaGFyKiBfdG1wMTE3XzsKLSsJR1BpZCBjaGlsZF9waWQgPSAwOwotKwlHUGlkIF90bXAx NTNfOwotKwlHUGlkIF90bXAxNTRfOwotKwlnaW50IF90bXAxNTVfOwotKwlnaW50IF90bXAxNTZf OwotKwlnaW50KiBfdG1wMTU3XyA9IE5VTEw7Ci0rCWdpbnQqIF90bXAxNThfOwotKwlnaW50IF90 bXAxNThfX2xlbmd0aDE7Ci0rCUdFcnJvciAqIF9pbm5lcl9lcnJvcl8gPSBOVUxMOwotKwlnX3Jl dHVybl92YWxfaWZfZmFpbCAoc2VsZiAhPSBOVUxMLCBOVUxMKTsKLSsJZ19yZXR1cm5fdmFsX2lm X2ZhaWwgKF9sYXlvdXQgIT0gTlVMTCwgTlVMTCk7Ci0rCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChf dmFyaWFudCAhPSBOVUxMLCBOVUxMKTsKLSsJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKF9vcHRpb24g IT0gTlVMTCwgTlVMTCk7Ci0rCV90bXAwXyA9IF9sYXlvdXQ7Ci0rCWdfYXNzZXJ0IChfdG1wMF8g IT0gTlVMTCk7Ci0rCXhrYl9ncm91cF9pZCA9IDA7Ci0rCWNoYW5nZWRfb3B0aW9uID0gMDsKLSsJ X3RtcDFfID0gc2VsZi0+cHJpdi0+bV94a2JfcGlkOwotKwlpZiAoX3RtcDFfICE9ICgoR1BpZCkg KC0xKSkpIHsKLSsJCWdpbnQqIF90bXAyXyA9IE5VTEw7Ci0rCQlnaW50KiBfdG1wM187Ci0rCQln aW50IF90bXAzX19sZW5ndGgxOwotKwkJX3RtcDJfID0gZ19uZXcwIChnaW50LCAyKTsKLSsJCV90 bXAyX1swXSA9IC0xOwotKwkJX3RtcDJfWzFdID0gMDsKLSsJCV90bXAzXyA9IF90bXAyXzsKLSsJ CV90bXAzX19sZW5ndGgxID0gMjsKLSsJCWlmIChyZXN1bHRfbGVuZ3RoMSkgewotKwkJCSpyZXN1 bHRfbGVuZ3RoMSA9IF90bXAzX19sZW5ndGgxOwotKwkJfQotKwkJcmVzdWx0ID0gX3RtcDNfOwot KwkJcmV0dXJuIHJlc3VsdDsKLSsJfQotKwlfdG1wNl8gPSBfbGF5b3V0OwotKwlpZiAoZ19zdHJj bXAwIChfdG1wNl8sICJkZWZhdWx0IikgPT0gMCkgewotKwkJY29uc3QgZ2NoYXIqIF90bXA3XzsK LSsJCV90bXA3XyA9IF92YXJpYW50OwotKwkJX3RtcDVfID0gZ19zdHJjbXAwIChfdG1wN18sICJk ZWZhdWx0IikgPT0gMDsKLSsJfSBlbHNlIHsKLSsJCV90bXA1XyA9IEZBTFNFOwotKwl9Ci0rCV90 bXA4XyA9IF90bXA1XzsKLSsJaWYgKF90bXA4XykgewotKwkJY29uc3QgZ2NoYXIqIF90bXA5XzsK LSsJCV90bXA5XyA9IF9vcHRpb247Ci0rCQlfdG1wNF8gPSBnX3N0cmNtcDAgKF90bXA5XywgImRl ZmF1bHQiKSA9PSAwOwotKwl9IGVsc2UgewotKwkJX3RtcDRfID0gRkFMU0U7Ci0rCX0KLSsJX3Rt cDEwXyA9IF90bXA0XzsKLSsJaWYgKF90bXAxMF8pIHsKLSsJCWdpbnQqIF90bXAxMV8gPSBOVUxM OwotKwkJZ2ludCogX3RtcDEyXzsKLSsJCWdpbnQgX3RtcDEyX19sZW5ndGgxOwotKwkJX3RtcDEx XyA9IGdfbmV3MCAoZ2ludCwgMik7Ci0rCQlfdG1wMTFfWzBdID0gLTE7Ci0rCQlfdG1wMTFfWzFd ID0gMDsKLSsJCV90bXAxMl8gPSBfdG1wMTFfOwotKwkJX3RtcDEyX19sZW5ndGgxID0gMjsKLSsJ CWlmIChyZXN1bHRfbGVuZ3RoMSkgewotKwkJCSpyZXN1bHRfbGVuZ3RoMSA9IF90bXAxMl9fbGVu Z3RoMTsKLSsJCX0KLSsJCXJlc3VsdCA9IF90bXAxMl87Ci0rCQlyZXR1cm4gcmVzdWx0OwotKwl9 Ci0rCV90bXAxM18gPSBfbGF5b3V0OwotKwlfdG1wMTRfID0gZ19zdHJkdXAgKF90bXAxM18pOwot KwlsYXlvdXQgPSBfdG1wMTRfOwotKwlfdG1wMTVfID0gX3ZhcmlhbnQ7Ci0rCV90bXAxNl8gPSBn X3N0cmR1cCAoX3RtcDE1Xyk7Ci0rCXZhcmlhbnQgPSBfdG1wMTZfOwotKwlfdG1wMTdfID0gX29w dGlvbjsKLSsJX3RtcDE4XyA9IGdfc3RyZHVwIChfdG1wMTdfKTsKLSsJb3B0aW9uID0gX3RtcDE4 XzsKLSsJX3RtcDE5XyA9IHZhcmlhbnQ7Ci0rCWlmIChnX3N0cmNtcDAgKF90bXAxOV8sICJkZWZh dWx0IikgPT0gMCkgewotKwkJY29uc3QgZ2NoYXIqIF90bXAyMF87Ci0rCQlnaW50IF90bXAyMV8g PSAwOwotKwkJZ2NoYXIqKiBfdG1wMjJfID0gTlVMTDsKLSsJCWdjaGFyKiogYXJyYXk7Ci0rCQln aW50IGFycmF5X2xlbmd0aDE7Ci0rCQlnaW50IF9hcnJheV9zaXplXzsKLSsJCWdjaGFyKiogX3Rt cDIzXzsKLSsJCWdpbnQgX3RtcDIzX19sZW5ndGgxOwotKwkJY29uc3QgZ2NoYXIqIF90bXAyNF87 Ci0rCQlnY2hhciogX3RtcDI1XzsKLSsJCWdjaGFyKiogX3RtcDI2XzsKLSsJCWdpbnQgX3RtcDI2 X19sZW5ndGgxOwotKwkJY29uc3QgZ2NoYXIqIF90bXAyN187Ci0rCQlnY2hhciogX3RtcDI4XzsK LSsJCV90bXAyMF8gPSBsYXlvdXQ7Ci0rCQlfdG1wMjJfID0geGtiX2xheW91dF9nZXRfdmFyaWFu dF9mcm9tX2xheW91dCAoc2VsZiwgX3RtcDIwXywgJl90bXAyMV8pOwotKwkJYXJyYXkgPSBfdG1w MjJfOwotKwkJYXJyYXlfbGVuZ3RoMSA9IF90bXAyMV87Ci0rCQlfYXJyYXlfc2l6ZV8gPSBhcnJh eV9sZW5ndGgxOwotKwkJX3RtcDIzXyA9IGFycmF5OwotKwkJX3RtcDIzX19sZW5ndGgxID0gYXJy YXlfbGVuZ3RoMTsKLSsJCV90bXAyNF8gPSBfdG1wMjNfWzBdOwotKwkJX3RtcDI1XyA9IGdfc3Ry ZHVwIChfdG1wMjRfKTsKLSsJCV9nX2ZyZWUwIChsYXlvdXQpOwotKwkJbGF5b3V0ID0gX3RtcDI1 XzsKLSsJCV90bXAyNl8gPSBhcnJheTsKLSsJCV90bXAyNl9fbGVuZ3RoMSA9IGFycmF5X2xlbmd0 aDE7Ci0rCQlfdG1wMjdfID0gX3RtcDI2X1sxXTsKLSsJCV90bXAyOF8gPSBnX3N0cmR1cCAoX3Rt cDI3Xyk7Ci0rCQlfZ19mcmVlMCAodmFyaWFudCk7Ci0rCQl2YXJpYW50ID0gX3RtcDI4XzsKLSsJ CWFycmF5ID0gKF92YWxhX2FycmF5X2ZyZWUgKGFycmF5LCBhcnJheV9sZW5ndGgxLCAoR0Rlc3Ry b3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOwotKwl9Ci0rCV90bXAyOV8gPSBvcHRpb247Ci0rCWlm IChnX3N0cmNtcDAgKF90bXAyOV8sICJkZWZhdWx0IikgPT0gMCkgewotKwkJY29uc3QgZ2NoYXIq IF90bXAzMF87Ci0rCQlnaW50IF90bXAzMV8gPSAwOwotKwkJZ2NoYXIqKiBfdG1wMzJfID0gTlVM TDsKLSsJCWdjaGFyKiogYXJyYXk7Ci0rCQlnaW50IGFycmF5X2xlbmd0aDE7Ci0rCQlnaW50IF9h cnJheV9zaXplXzsKLSsJCWdjaGFyKiogX3RtcDMzXzsKLSsJCWdpbnQgX3RtcDMzX19sZW5ndGgx OwotKwkJY29uc3QgZ2NoYXIqIF90bXAzNF87Ci0rCQlnY2hhciogX3RtcDM1XzsKLSsJCWdjaGFy KiogX3RtcDM2XzsKLSsJCWdpbnQgX3RtcDM2X19sZW5ndGgxOwotKwkJY29uc3QgZ2NoYXIqIF90 bXAzN187Ci0rCQlnY2hhciogX3RtcDM4XzsKLSsJCV90bXAzMF8gPSBsYXlvdXQ7Ci0rCQlfdG1w MzJfID0geGtiX2xheW91dF9nZXRfb3B0aW9uX2Zyb21fbGF5b3V0IChzZWxmLCBfdG1wMzBfLCAm X3RtcDMxXyk7Ci0rCQlhcnJheSA9IF90bXAzMl87Ci0rCQlhcnJheV9sZW5ndGgxID0gX3RtcDMx XzsKLSsJCV9hcnJheV9zaXplXyA9IGFycmF5X2xlbmd0aDE7Ci0rCQlfdG1wMzNfID0gYXJyYXk7 Ci0rCQlfdG1wMzNfX2xlbmd0aDEgPSBhcnJheV9sZW5ndGgxOwotKwkJX3RtcDM0XyA9IF90bXAz M19bMF07Ci0rCQlfdG1wMzVfID0gZ19zdHJkdXAgKF90bXAzNF8pOwotKwkJX2dfZnJlZTAgKGxh eW91dCk7Ci0rCQlsYXlvdXQgPSBfdG1wMzVfOwotKwkJX3RtcDM2XyA9IGFycmF5OwotKwkJX3Rt cDM2X19sZW5ndGgxID0gYXJyYXlfbGVuZ3RoMTsKLSsJCV90bXAzN18gPSBfdG1wMzZfWzFdOwot KwkJX3RtcDM4XyA9IGdfc3RyZHVwIChfdG1wMzdfKTsKLSsJCV9nX2ZyZWUwIChvcHRpb24pOwot KwkJb3B0aW9uID0gX3RtcDM4XzsKLSsJCWFycmF5ID0gKF92YWxhX2FycmF5X2ZyZWUgKGFycmF5 LCBhcnJheV9sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOwotKwl9Ci0r CW5lZWRfdXNfbGF5b3V0ID0gRkFMU0U7Ci0rCV90bXAzOV8gPSBzZWxmLT5wcml2LT5tX3hrYl9s YXRpbl9sYXlvdXRzOwotKwlfdG1wMzlfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX3hrYl9sYXRp bl9sYXlvdXRzX2xlbmd0aDE7Ci0rCXsKLSsJCWdjaGFyKiogbGF0aW5fbGF5b3V0X2NvbGxlY3Rp b24gPSBOVUxMOwotKwkJZ2ludCBsYXRpbl9sYXlvdXRfY29sbGVjdGlvbl9sZW5ndGgxID0gMDsK LSsJCWdpbnQgX2xhdGluX2xheW91dF9jb2xsZWN0aW9uX3NpemVfID0gMDsKLSsJCWdpbnQgbGF0 aW5fbGF5b3V0X2l0ID0gMDsKLSsJCWxhdGluX2xheW91dF9jb2xsZWN0aW9uID0gX3RtcDM5XzsK LSsJCWxhdGluX2xheW91dF9jb2xsZWN0aW9uX2xlbmd0aDEgPSBfdG1wMzlfX2xlbmd0aDE7Ci0r CQlmb3IgKGxhdGluX2xheW91dF9pdCA9IDA7IGxhdGluX2xheW91dF9pdCA8IF90bXAzOV9fbGVu Z3RoMTsgbGF0aW5fbGF5b3V0X2l0ID0gbGF0aW5fbGF5b3V0X2l0ICsgMSkgewotKwkJCWdjaGFy KiBfdG1wNDBfOwotKwkJCWdjaGFyKiBsYXRpbl9sYXlvdXQgPSBOVUxMOwotKwkJCV90bXA0MF8g PSBnX3N0cmR1cCAobGF0aW5fbGF5b3V0X2NvbGxlY3Rpb25bbGF0aW5fbGF5b3V0X2l0XSk7Ci0r CQkJbGF0aW5fbGF5b3V0ID0gX3RtcDQwXzsKLSsJCQl7Ci0rCQkJCWdib29sZWFuIF90bXA0MV8g PSBGQUxTRTsKLSsJCQkJY29uc3QgZ2NoYXIqIF90bXA0Ml87Ci0rCQkJCWNvbnN0IGdjaGFyKiBf dG1wNDNfOwotKwkJCQlnYm9vbGVhbiBfdG1wNDVfOwotKwkJCQlnYm9vbGVhbiBfdG1wNDZfID0g RkFMU0U7Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wNDdfOwotKwkJCQlnYm9vbGVhbiBfdG1wNTNf OwotKwkJCQlfdG1wNDJfID0gbGF5b3V0OwotKwkJCQlfdG1wNDNfID0gbGF0aW5fbGF5b3V0Owot KwkJCQlpZiAoZ19zdHJjbXAwIChfdG1wNDJfLCBfdG1wNDNfKSA9PSAwKSB7Ci0rCQkJCQljb25z dCBnY2hhciogX3RtcDQ0XzsKLSsJCQkJCV90bXA0NF8gPSB2YXJpYW50OwotKwkJCQkJX3RtcDQx XyA9IGdfc3RyY21wMCAoX3RtcDQ0XywgImVuZyIpICE9IDA7Ci0rCQkJCX0gZWxzZSB7Ci0rCQkJ CQlfdG1wNDFfID0gRkFMU0U7Ci0rCQkJCX0KLSsJCQkJX3RtcDQ1XyA9IF90bXA0MV87Ci0rCQkJ CWlmIChfdG1wNDVfKSB7Ci0rCQkJCQluZWVkX3VzX2xheW91dCA9IFRSVUU7Ci0rCQkJCQlfZ19m cmVlMCAobGF0aW5fbGF5b3V0KTsKLSsJCQkJCWJyZWFrOwotKwkJCQl9Ci0rCQkJCV90bXA0N18g PSB2YXJpYW50OwotKwkJCQlpZiAoX3RtcDQ3XyAhPSBOVUxMKSB7Ci0rCQkJCQljb25zdCBnY2hh ciogX3RtcDQ4XzsKLSsJCQkJCWNvbnN0IGdjaGFyKiBfdG1wNDlfOwotKwkJCQkJZ2NoYXIqIF90 bXA1MF8gPSBOVUxMOwotKwkJCQkJZ2NoYXIqIF90bXA1MV87Ci0rCQkJCQljb25zdCBnY2hhciog X3RtcDUyXzsKLSsJCQkJCV90bXA0OF8gPSBsYXlvdXQ7Ci0rCQkJCQlfdG1wNDlfID0gdmFyaWFu dDsKLSsJCQkJCV90bXA1MF8gPSBnX3N0cmR1cF9wcmludGYgKCIlcyglcykiLCBfdG1wNDhfLCBf dG1wNDlfKTsKLSsJCQkJCV90bXA1MV8gPSBfdG1wNTBfOwotKwkJCQkJX3RtcDUyXyA9IGxhdGlu X2xheW91dDsKLSsJCQkJCV90bXA0Nl8gPSBnX3N0cmNtcDAgKF90bXA1MV8sIF90bXA1Ml8pID09 IDA7Ci0rCQkJCQlfZ19mcmVlMCAoX3RtcDUxXyk7Ci0rCQkJCX0gZWxzZSB7Ci0rCQkJCQlfdG1w NDZfID0gRkFMU0U7Ci0rCQkJCX0KLSsJCQkJX3RtcDUzXyA9IF90bXA0Nl87Ci0rCQkJCWlmIChf dG1wNTNfKSB7Ci0rCQkJCQluZWVkX3VzX2xheW91dCA9IFRSVUU7Ci0rCQkJCQlfZ19mcmVlMCAo bGF0aW5fbGF5b3V0KTsKLSsJCQkJCWJyZWFrOwotKwkJCQl9Ci0rCQkJCV9nX2ZyZWUwIChsYXRp bl9sYXlvdXQpOwotKwkJCX0KLSsJCX0KLSsJfQotKwlsYXlvdXRzX21heF9sZW5ndGggPSBYS0Jf TEFZT1VUU19NQVhfTEVOR1RIOwotKwlfdG1wNTRfID0gbmVlZF91c19sYXlvdXQ7Ci0rCWlmIChf dG1wNTRfKSB7Ci0rCQlnaW50IF90bXA1NV87Ci0rCQlfdG1wNTVfID0gbGF5b3V0c19tYXhfbGVu Z3RoOwotKwkJbGF5b3V0c19tYXhfbGVuZ3RoID0gX3RtcDU1XyAtIDE7Ci0rCX0KLSsJX3RtcDU2 XyA9IHNlbGYtPnByaXYtPm1fZGVmYXVsdF9sYXlvdXQ7Ci0rCWlmIChnX3N0cmNtcDAgKF90bXA1 Nl8sICIiKSA9PSAwKSB7Ci0rCQlnY2hhciogX3RtcDU3XyA9IE5VTEw7Ci0rCQlfdG1wNTdfID0g eGtiX2xheW91dF9nZXRfbGF5b3V0IChzZWxmKTsKLSsJCV9nX2ZyZWUwIChzZWxmLT5wcml2LT5t X2RlZmF1bHRfbGF5b3V0KTsKLSsJCXNlbGYtPnByaXYtPm1fZGVmYXVsdF9sYXlvdXQgPSBfdG1w NTdfOwotKwl9Ci0rCV90bXA1OF8gPSBzZWxmLT5wcml2LT5tX2RlZmF1bHRfdmFyaWFudDsKLSsJ aWYgKGdfc3RyY21wMCAoX3RtcDU4XywgIiIpID09IDApIHsKLSsJCWdjaGFyKiBfdG1wNTlfID0g TlVMTDsKLSsJCV90bXA1OV8gPSB4a2JfbGF5b3V0X2dldF92YXJpYW50IChzZWxmKTsKLSsJCV9n X2ZyZWUwIChzZWxmLT5wcml2LT5tX2RlZmF1bHRfdmFyaWFudCk7Ci0rCQlzZWxmLT5wcml2LT5t X2RlZmF1bHRfdmFyaWFudCA9IF90bXA1OV87Ci0rCX0KLSsJX3RtcDYwXyA9IHNlbGYtPnByaXYt Pm1fZGVmYXVsdF9vcHRpb247Ci0rCWlmIChnX3N0cmNtcDAgKF90bXA2MF8sICIiKSA9PSAwKSB7 Ci0rCQlnY2hhciogX3RtcDYxXyA9IE5VTEw7Ci0rCQlfdG1wNjFfID0geGtiX2xheW91dF9nZXRf b3B0aW9uIChzZWxmKTsKLSsJCV9nX2ZyZWUwIChzZWxmLT5wcml2LT5tX2RlZmF1bHRfb3B0aW9u KTsKLSsJCXNlbGYtPnByaXYtPm1fZGVmYXVsdF9vcHRpb24gPSBfdG1wNjFfOwotKwl9Ci0rCV90 bXA2Ml8gPSBsYXlvdXQ7Ci0rCWlmIChnX3N0cmNtcDAgKF90bXA2Ml8sICJkZWZhdWx0IikgPT0g MCkgewotKwkJY29uc3QgZ2NoYXIqIF90bXA2M187Ci0rCQlnY2hhciogX3RtcDY0XzsKLSsJCWNv bnN0IGdjaGFyKiBfdG1wNjVfOwotKwkJZ2NoYXIqIF90bXA2Nl87Ci0rCQlfdG1wNjNfID0gc2Vs Zi0+cHJpdi0+bV9kZWZhdWx0X2xheW91dDsKLSsJCV90bXA2NF8gPSBnX3N0cmR1cCAoX3RtcDYz Xyk7Ci0rCQlfZ19mcmVlMCAobGF5b3V0KTsKLSsJCWxheW91dCA9IF90bXA2NF87Ci0rCQlfdG1w NjVfID0gc2VsZi0+cHJpdi0+bV9kZWZhdWx0X3ZhcmlhbnQ7Ci0rCQlfdG1wNjZfID0gZ19zdHJk dXAgKF90bXA2NV8pOwotKwkJX2dfZnJlZTAgKHZhcmlhbnQpOwotKwkJdmFyaWFudCA9IF90bXA2 Nl87Ci0rCX0gZWxzZSB7Ci0rCQlpZiAoSEFWRV9JQlVTX0dLQkQpIHsKLSsJCQljb25zdCBnY2hh ciogX3RtcDY3XzsKLSsJCQljb25zdCBnY2hhciogX3RtcDY5XzsKLSsJCQljb25zdCBnY2hhciog X3RtcDcwXzsKLSsJCQlnaW50IF90bXA3MV87Ci0rCQkJZ2ludCBfdG1wNzJfID0gMDsKLSsJCQln Y2hhcioqIF90bXA3M18gPSBOVUxMOwotKwkJCWdjaGFyKiogcmV0dmFsOwotKwkJCWdpbnQgcmV0 dmFsX2xlbmd0aDE7Ci0rCQkJZ2ludCBfcmV0dmFsX3NpemVfOwotKwkJCWdjaGFyKiogX3RtcDc0 XzsKLSsJCQlnaW50IF90bXA3NF9fbGVuZ3RoMTsKLSsJCQljb25zdCBnY2hhciogX3RtcDc1XzsK LSsJCQlnY2hhciogX3RtcDc2XzsKLSsJCQlnY2hhcioqIF90bXA3N187Ci0rCQkJZ2ludCBfdG1w NzdfX2xlbmd0aDE7Ci0rCQkJY29uc3QgZ2NoYXIqIF90bXA3OF87Ci0rCQkJZ2NoYXIqIF90bXA3 OV87Ci0rCQkJZ2NoYXIqKiBfdG1wODBfOwotKwkJCWdpbnQgX3RtcDgwX19sZW5ndGgxOwotKwkJ CWNvbnN0IGdjaGFyKiBfdG1wODFfOwotKwkJCWdpbnQgX3RtcDgyXyA9IDA7Ci0rCQkJX3RtcDY3 XyA9IHZhcmlhbnQ7Ci0rCQkJaWYgKGdfc3RyY21wMCAoX3RtcDY3XywgImRlZmF1bHQiKSA9PSAw KSB7Ci0rCQkJCWdjaGFyKiBfdG1wNjhfOwotKwkJCQlfdG1wNjhfID0gZ19zdHJkdXAgKCIiKTsK LSsJCQkJX2dfZnJlZTAgKHZhcmlhbnQpOwotKwkJCQl2YXJpYW50ID0gX3RtcDY4XzsKLSsJCQl9 Ci0rCQkJX3RtcDY5XyA9IGxheW91dDsKLSsJCQlfdG1wNzBfID0gdmFyaWFudDsKLSsJCQlfdG1w NzFfID0gbGF5b3V0c19tYXhfbGVuZ3RoOwotKwkJCV90bXA3M18gPSB4a2JfbGF5b3V0X2dldF94 a2JfZ3JvdXBfbGF5b3V0IChzZWxmLCBfdG1wNjlfLCBfdG1wNzBfLCBfdG1wNzFfLCAmX3RtcDcy Xyk7Ci0rCQkJcmV0dmFsID0gX3RtcDczXzsKLSsJCQlyZXR2YWxfbGVuZ3RoMSA9IF90bXA3Ml87 Ci0rCQkJX3JldHZhbF9zaXplXyA9IHJldHZhbF9sZW5ndGgxOwotKwkJCV90bXA3NF8gPSByZXR2 YWw7Ci0rCQkJX3RtcDc0X19sZW5ndGgxID0gcmV0dmFsX2xlbmd0aDE7Ci0rCQkJX3RtcDc1XyA9 IF90bXA3NF9bMF07Ci0rCQkJX3RtcDc2XyA9IGdfc3RyZHVwIChfdG1wNzVfKTsKLSsJCQlfZ19m cmVlMCAobGF5b3V0KTsKLSsJCQlsYXlvdXQgPSBfdG1wNzZfOwotKwkJCV90bXA3N18gPSByZXR2 YWw7Ci0rCQkJX3RtcDc3X19sZW5ndGgxID0gcmV0dmFsX2xlbmd0aDE7Ci0rCQkJX3RtcDc4XyA9 IF90bXA3N19bMV07Ci0rCQkJX3RtcDc5XyA9IGdfc3RyZHVwIChfdG1wNzhfKTsKLSsJCQlfZ19m cmVlMCAodmFyaWFudCk7Ci0rCQkJdmFyaWFudCA9IF90bXA3OV87Ci0rCQkJX3RtcDgwXyA9IHJl dHZhbDsKLSsJCQlfdG1wODBfX2xlbmd0aDEgPSByZXR2YWxfbGVuZ3RoMTsKLSsJCQlfdG1wODFf ID0gX3RtcDgwX1syXTsKLSsJCQlfdG1wODJfID0gYXRvaSAoX3RtcDgxXyk7Ci0rCQkJeGtiX2dy b3VwX2lkID0gX3RtcDgyXzsKLSsJCQlyZXR2YWwgPSAoX3ZhbGFfYXJyYXlfZnJlZSAocmV0dmFs LCByZXR2YWxfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJCX0K LSsJfQotKwlfdG1wODNfID0gbGF5b3V0OwotKwlpZiAoZ19zdHJjbXAwIChfdG1wODNfLCAiIikg PT0gMCkgewotKwkJZ2ludCogX3RtcDg0XyA9IE5VTEw7Ci0rCQlnaW50KiBfdG1wODVfOwotKwkJ Z2ludCBfdG1wODVfX2xlbmd0aDE7Ci0rCQlnX3dhcm5pbmcgKCJ4a2JsYXlvdXQudmFsYTozMjk6 IENvdWxkIG5vdCBnZXQgdGhlIGNvcnJlY3QgbGF5b3V0Iik7Ci0rCQlfdG1wODRfID0gZ19uZXcw IChnaW50LCAyKTsKLSsJCV90bXA4NF9bMF0gPSAtMTsKLSsJCV90bXA4NF9bMV0gPSAwOwotKwkJ X3RtcDg1XyA9IF90bXA4NF87Ci0rCQlfdG1wODVfX2xlbmd0aDEgPSAyOwotKwkJaWYgKHJlc3Vs dF9sZW5ndGgxKSB7Ci0rCQkJKnJlc3VsdF9sZW5ndGgxID0gX3RtcDg1X19sZW5ndGgxOwotKwkJ fQotKwkJcmVzdWx0ID0gX3RtcDg1XzsKLSsJCV9nX2ZyZWUwIChvcHRpb24pOwotKwkJX2dfZnJl ZTAgKHZhcmlhbnQpOwotKwkJX2dfZnJlZTAgKGxheW91dCk7Ci0rCQlyZXR1cm4gcmVzdWx0Owot Kwl9Ci0rCV90bXA4N18gPSB2YXJpYW50OwotKwlpZiAoZ19zdHJjbXAwIChfdG1wODdfLCAiZGVm YXVsdCIpID09IDApIHsKLSsJCV90bXA4Nl8gPSBUUlVFOwotKwl9IGVsc2UgewotKwkJY29uc3Qg Z2NoYXIqIF90bXA4OF87Ci0rCQlfdG1wODhfID0gdmFyaWFudDsKLSsJCV90bXA4Nl8gPSBnX3N0 cmNtcDAgKF90bXA4OF8sICIiKSA9PSAwOwotKwl9Ci0rCV90bXA4OV8gPSBfdG1wODZfOwotKwlp ZiAoX3RtcDg5XykgewotKwkJX2dfZnJlZTAgKHZhcmlhbnQpOwotKwkJdmFyaWFudCA9IE5VTEw7 Ci0rCX0KLSsJX3RtcDkxXyA9IG9wdGlvbjsKLSsJaWYgKGdfc3RyY21wMCAoX3RtcDkxXywgImRl ZmF1bHQiKSA9PSAwKSB7Ci0rCQlfdG1wOTBfID0gVFJVRTsKLSsJfSBlbHNlIHsKLSsJCWNvbnN0 IGdjaGFyKiBfdG1wOTJfOwotKwkJX3RtcDkyXyA9IG9wdGlvbjsKLSsJCV90bXA5MF8gPSBnX3N0 cmNtcDAgKF90bXA5Ml8sICIiKSA9PSAwOwotKwl9Ci0rCV90bXA5M18gPSBfdG1wOTBfOwotKwlp ZiAoX3RtcDkzXykgewotKwkJY29uc3QgZ2NoYXIqIF90bXA5NF87Ci0rCQlnY2hhciogX3RtcDk1 XzsKLSsJCV90bXA5NF8gPSBzZWxmLT5wcml2LT5tX2RlZmF1bHRfb3B0aW9uOwotKwkJX3RtcDk1 XyA9IGdfc3RyZHVwIChfdG1wOTRfKTsKLSsJCV9nX2ZyZWUwIChvcHRpb24pOwotKwkJb3B0aW9u ID0gX3RtcDk1XzsKLSsJfSBlbHNlIHsKLSsJCWNvbnN0IGdjaGFyKiBfdG1wOTZfOwotKwkJY29u c3QgZ2NoYXIqIF90bXA5N187Ci0rCQlnY2hhcioqIF90bXA5OF87Ci0rCQlnY2hhcioqIF90bXA5 OV8gPSBOVUxMOwotKwkJZ2NoYXIqKiBfdG1wMTAwXzsKLSsJCWdpbnQgX3RtcDEwMF9fbGVuZ3Ro MTsKLSsJCWdib29sZWFuIF90bXAxMDFfOwotKwkJX3RtcDk2XyA9IG9wdGlvbjsKLSsJCV90bXA5 N18gPSBzZWxmLT5wcml2LT5tX2RlZmF1bHRfb3B0aW9uOwotKwkJX3RtcDk5XyA9IF90bXA5OF8g PSBnX3N0cnNwbGl0IChfdG1wOTdfLCAiLCIsIDApOwotKwkJX3RtcDEwMF8gPSBfdG1wOTlfOwot KwkJX3RtcDEwMF9fbGVuZ3RoMSA9IF92YWxhX2FycmF5X2xlbmd0aCAoX3RtcDk4Xyk7Ci0rCQlf dG1wMTAxXyA9ICFfdmFsYV9zdHJpbmdfYXJyYXlfY29udGFpbnMgKF90bXAxMDBfLCBfdmFsYV9h cnJheV9sZW5ndGggKF90bXA5OF8pLCBfdG1wOTZfKTsKLSsJCV90bXAxMDBfID0gKF92YWxhX2Fy cmF5X2ZyZWUgKF90bXAxMDBfLCBfdG1wMTAwX19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdf ZnJlZSksIE5VTEwpOwotKwkJaWYgKF90bXAxMDFfKSB7Ci0rCQkJY29uc3QgZ2NoYXIqIF90bXAx MDJfOwotKwkJCWNvbnN0IGdjaGFyKiBfdG1wMTAzXzsKLSsJCQlnY2hhciogX3RtcDEwNF8gPSBO VUxMOwotKwkJCV90bXAxMDJfID0gc2VsZi0+cHJpdi0+bV9kZWZhdWx0X29wdGlvbjsKLSsJCQlf dG1wMTAzXyA9IG9wdGlvbjsKLSsJCQlfdG1wMTA0XyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzLCVz IiwgX3RtcDEwMl8sIF90bXAxMDNfKTsKLSsJCQlfZ19mcmVlMCAob3B0aW9uKTsKLSsJCQlvcHRp b24gPSBfdG1wMTA0XzsKLSsJCQljaGFuZ2VkX29wdGlvbiA9IDE7Ci0rCQl9IGVsc2UgewotKwkJ CWNvbnN0IGdjaGFyKiBfdG1wMTA1XzsKLSsJCQlnY2hhciogX3RtcDEwNl87Ci0rCQkJX3RtcDEw NV8gPSBzZWxmLT5wcml2LT5tX2RlZmF1bHRfb3B0aW9uOwotKwkJCV90bXAxMDZfID0gZ19zdHJk dXAgKF90bXAxMDVfKTsKLSsJCQlfZ19mcmVlMCAob3B0aW9uKTsKLSsJCQlvcHRpb24gPSBfdG1w MTA2XzsKLSsJCX0KLSsJfQotKwlfdG1wMTA3XyA9IG9wdGlvbjsKLSsJaWYgKGdfc3RyY21wMCAo X3RtcDEwN18sICIiKSA9PSAwKSB7Ci0rCQlfZ19mcmVlMCAob3B0aW9uKTsKLSsJCW9wdGlvbiA9 IE5VTEw7Ci0rCX0KLSsJX3RtcDEwOF8gPSBuZWVkX3VzX2xheW91dDsKLSsJaWYgKF90bXAxMDhf KSB7Ci0rCQljb25zdCBnY2hhciogX3RtcDEwOV87Ci0rCQlnY2hhciogX3RtcDExMF87Ci0rCQlj b25zdCBnY2hhciogX3RtcDExMV87Ci0rCQlfdG1wMTA5XyA9IGxheW91dDsKLSsJCV90bXAxMTBf ID0gZ19zdHJjb25jYXQgKF90bXAxMDlfLCAiLHVzIiwgTlVMTCk7Ci0rCQlfZ19mcmVlMCAobGF5 b3V0KTsKLSsJCWxheW91dCA9IF90bXAxMTBfOwotKwkJX3RtcDExMV8gPSB2YXJpYW50OwotKwkJ aWYgKF90bXAxMTFfICE9IE5VTEwpIHsKLSsJCQljb25zdCBnY2hhciogX3RtcDExMl87Ci0rCQkJ Z2NoYXIqIF90bXAxMTNfOwotKwkJCV90bXAxMTJfID0gdmFyaWFudDsKLSsJCQlfdG1wMTEzXyA9 IGdfc3RyY29uY2F0IChfdG1wMTEyXywgIiwiLCBOVUxMKTsKLSsJCQlfZ19mcmVlMCAodmFyaWFu dCk7Ci0rCQkJdmFyaWFudCA9IF90bXAxMTNfOwotKwkJfQotKwl9Ci0rCV90bXAxMTRfID0gZ19u ZXcwIChnY2hhciosIDAgKyAxKTsKLSsJYXJncyA9IF90bXAxMTRfOwotKwlhcmdzX2xlbmd0aDEg PSAwOwotKwlfYXJnc19zaXplXyA9IGFyZ3NfbGVuZ3RoMTsKLSsJX3RtcDExNV8gPSBhcmdzOwot KwlfdG1wMTE1X19sZW5ndGgxID0gYXJnc19sZW5ndGgxOwotKwlfdG1wMTE2XyA9IHNlbGYtPnBy aXYtPm1feGtiX2NvbW1hbmQ7Ci0rCV90bXAxMTdfID0gZ19zdHJkdXAgKF90bXAxMTZfKTsKLSsJ X3ZhbGFfYXJyYXlfYWRkMjMgKCZhcmdzLCAmYXJnc19sZW5ndGgxLCAmX2FyZ3Nfc2l6ZV8sIF90 bXAxMTdfKTsKLSsJaWYgKEhBVkVfSUJVU19YS0IpIHsKLSsJCWdjaGFyKiogX3RtcDExOF87Ci0r CQlnaW50IF90bXAxMThfX2xlbmd0aDE7Ci0rCQlnY2hhciogX3RtcDExOV87Ci0rCQlnY2hhcioq IF90bXAxMjBfOwotKwkJZ2ludCBfdG1wMTIwX19sZW5ndGgxOwotKwkJY29uc3QgZ2NoYXIqIF90 bXAxMjFfOwotKwkJZ2NoYXIqIF90bXAxMjJfOwotKwkJY29uc3QgZ2NoYXIqIF90bXAxMjNfOwot KwkJY29uc3QgZ2NoYXIqIF90bXAxMjlfOwotKwkJX3RtcDExOF8gPSBhcmdzOwotKwkJX3RtcDEx OF9fbGVuZ3RoMSA9IGFyZ3NfbGVuZ3RoMTsKLSsJCV90bXAxMTlfID0gZ19zdHJkdXAgKCItLWxh eW91dCIpOwotKwkJX3ZhbGFfYXJyYXlfYWRkMjQgKCZhcmdzLCAmYXJnc19sZW5ndGgxLCAmX2Fy Z3Nfc2l6ZV8sIF90bXAxMTlfKTsKLSsJCV90bXAxMjBfID0gYXJnczsKLSsJCV90bXAxMjBfX2xl bmd0aDEgPSBhcmdzX2xlbmd0aDE7Ci0rCQlfdG1wMTIxXyA9IGxheW91dDsKLSsJCV90bXAxMjJf ID0gZ19zdHJkdXAgKF90bXAxMjFfKTsKLSsJCV92YWxhX2FycmF5X2FkZDI1ICgmYXJncywgJmFy Z3NfbGVuZ3RoMSwgJl9hcmdzX3NpemVfLCBfdG1wMTIyXyk7Ci0rCQlfdG1wMTIzXyA9IHZhcmlh bnQ7Ci0rCQlpZiAoX3RtcDEyM18gIT0gTlVMTCkgewotKwkJCWdjaGFyKiogX3RtcDEyNF87Ci0r CQkJZ2ludCBfdG1wMTI0X19sZW5ndGgxOwotKwkJCWdjaGFyKiBfdG1wMTI1XzsKLSsJCQlnY2hh cioqIF90bXAxMjZfOwotKwkJCWdpbnQgX3RtcDEyNl9fbGVuZ3RoMTsKLSsJCQljb25zdCBnY2hh ciogX3RtcDEyN187Ci0rCQkJZ2NoYXIqIF90bXAxMjhfOwotKwkJCV90bXAxMjRfID0gYXJnczsK LSsJCQlfdG1wMTI0X19sZW5ndGgxID0gYXJnc19sZW5ndGgxOwotKwkJCV90bXAxMjVfID0gZ19z dHJkdXAgKCItLXZhcmlhbnQiKTsKLSsJCQlfdmFsYV9hcnJheV9hZGQyNiAoJmFyZ3MsICZhcmdz X2xlbmd0aDEsICZfYXJnc19zaXplXywgX3RtcDEyNV8pOwotKwkJCV90bXAxMjZfID0gYXJnczsK LSsJCQlfdG1wMTI2X19sZW5ndGgxID0gYXJnc19sZW5ndGgxOwotKwkJCV90bXAxMjdfID0gdmFy aWFudDsKLSsJCQlfdG1wMTI4XyA9IGdfc3RyZHVwIChfdG1wMTI3Xyk7Ci0rCQkJX3ZhbGFfYXJy YXlfYWRkMjcgKCZhcmdzLCAmYXJnc19sZW5ndGgxLCAmX2FyZ3Nfc2l6ZV8sIF90bXAxMjhfKTsK LSsJCX0KLSsJCV90bXAxMjlfID0gb3B0aW9uOwotKwkJaWYgKF90bXAxMjlfICE9IE5VTEwpIHsK LSsJCQlnY2hhcioqIF90bXAxMzBfOwotKwkJCWdpbnQgX3RtcDEzMF9fbGVuZ3RoMTsKLSsJCQln Y2hhciogX3RtcDEzMV87Ci0rCQkJZ2NoYXIqKiBfdG1wMTMyXzsKLSsJCQlnaW50IF90bXAxMzJf X2xlbmd0aDE7Ci0rCQkJY29uc3QgZ2NoYXIqIF90bXAxMzNfOwotKwkJCWdjaGFyKiBfdG1wMTM0 XzsKLSsJCQlfdG1wMTMwXyA9IGFyZ3M7Ci0rCQkJX3RtcDEzMF9fbGVuZ3RoMSA9IGFyZ3NfbGVu Z3RoMTsKLSsJCQlfdG1wMTMxXyA9IGdfc3RyZHVwICgiLS1vcHRpb24iKTsKLSsJCQlfdmFsYV9h cnJheV9hZGQyOCAoJmFyZ3MsICZhcmdzX2xlbmd0aDEsICZfYXJnc19zaXplXywgX3RtcDEzMV8p OwotKwkJCV90bXAxMzJfID0gYXJnczsKLSsJCQlfdG1wMTMyX19sZW5ndGgxID0gYXJnc19sZW5n dGgxOwotKwkJCV90bXAxMzNfID0gb3B0aW9uOwotKwkJCV90bXAxMzRfID0gZ19zdHJkdXAgKF90 bXAxMzNfKTsKLSsJCQlfdmFsYV9hcnJheV9hZGQyOSAoJmFyZ3MsICZhcmdzX2xlbmd0aDEsICZf YXJnc19zaXplXywgX3RtcDEzNF8pOwotKwkJfQotKwl9IGVsc2UgewotKwkJZ2NoYXIqKiBfdG1w MTM1XzsKLSsJCWdpbnQgX3RtcDEzNV9fbGVuZ3RoMTsKLSsJCWNvbnN0IGdjaGFyKiBfdG1wMTM2 XzsKLSsJCWdjaGFyKiBfdG1wMTM3XzsKLSsJCWNvbnN0IGdjaGFyKiBfdG1wMTM4XzsKLSsJCWNv bnN0IGdjaGFyKiBfdG1wMTQyXzsKLSsJCV90bXAxMzVfID0gYXJnczsKLSsJCV90bXAxMzVfX2xl bmd0aDEgPSBhcmdzX2xlbmd0aDE7Ci0rCQlfdG1wMTM2XyA9IGxheW91dDsKLSsJCV90bXAxMzdf ID0gZ19zdHJkdXAgKF90bXAxMzZfKTsKLSsJCV92YWxhX2FycmF5X2FkZDMwICgmYXJncywgJmFy Z3NfbGVuZ3RoMSwgJl9hcmdzX3NpemVfLCBfdG1wMTM3Xyk7Ci0rCQlfdG1wMTM4XyA9IHZhcmlh bnQ7Ci0rCQlpZiAoX3RtcDEzOF8gIT0gTlVMTCkgewotKwkJCWdjaGFyKiogX3RtcDEzOV87Ci0r CQkJZ2ludCBfdG1wMTM5X19sZW5ndGgxOwotKwkJCWNvbnN0IGdjaGFyKiBfdG1wMTQwXzsKLSsJ CQlnY2hhciogX3RtcDE0MV87Ci0rCQkJX3RtcDEzOV8gPSBhcmdzOwotKwkJCV90bXAxMzlfX2xl bmd0aDEgPSBhcmdzX2xlbmd0aDE7Ci0rCQkJX3RtcDE0MF8gPSB2YXJpYW50OwotKwkJCV90bXAx NDFfID0gZ19zdHJkdXAgKF90bXAxNDBfKTsKLSsJCQlfdmFsYV9hcnJheV9hZGQzMSAoJmFyZ3Ms ICZhcmdzX2xlbmd0aDEsICZfYXJnc19zaXplXywgX3RtcDE0MV8pOwotKwkJfQotKwkJX3RtcDE0 Ml8gPSBvcHRpb247Ci0rCQlpZiAoX3RtcDE0Ml8gIT0gTlVMTCkgewotKwkJCWdjaGFyKiogX3Rt cDE0M187Ci0rCQkJZ2ludCBfdG1wMTQzX19sZW5ndGgxOwotKwkJCWNvbnN0IGdjaGFyKiBfdG1w MTQ0XzsKLSsJCQlnY2hhciogX3RtcDE0NV87Ci0rCQkJX3RtcDE0M18gPSBhcmdzOwotKwkJCV90 bXAxNDNfX2xlbmd0aDEgPSBhcmdzX2xlbmd0aDE7Ci0rCQkJX3RtcDE0NF8gPSBvcHRpb247Ci0r CQkJX3RtcDE0NV8gPSBnX3N0cmR1cCAoX3RtcDE0NF8pOwotKwkJCV92YWxhX2FycmF5X2FkZDMy ICgmYXJncywgJmFyZ3NfbGVuZ3RoMSwgJl9hcmdzX3NpemVfLCBfdG1wMTQ1Xyk7Ci0rCQl9Ci0r CX0KLSsJewotKwkJZ2NoYXIqKiBfdG1wMTQ2XzsKLSsJCWdpbnQgX3RtcDE0Nl9fbGVuZ3RoMTsK LSsJCUdQaWQgX3RtcDE0N18gPSAwOwotKwkJX3RtcDE0Nl8gPSBhcmdzOwotKwkJX3RtcDE0Nl9f bGVuZ3RoMSA9IGFyZ3NfbGVuZ3RoMTsKLSsJCWdfc3Bhd25fYXN5bmMgKE5VTEwsIF90bXAxNDZf LCBOVUxMLCBHX1NQQVdOX0RPX05PVF9SRUFQX0NISUxEIHwgR19TUEFXTl9TRUFSQ0hfUEFUSCwg TlVMTCwgTlVMTCwgJl90bXAxNDdfLCAmX2lubmVyX2Vycm9yXyk7Ci0rCQljaGlsZF9waWQgPSBf dG1wMTQ3XzsKLSsJCWlmIChfaW5uZXJfZXJyb3JfICE9IE5VTEwpIHsKLSsJCQlpZiAoX2lubmVy X2Vycm9yXy0+ZG9tYWluID09IEdfU1BBV05fRVJST1IpIHsKLSsJCQkJZ290byBfX2NhdGNoNF9n X3NwYXduX2Vycm9yOwotKwkJCX0KLSsJCQlhcmdzID0gKF92YWxhX2FycmF5X2ZyZWUgKGFyZ3Ms IGFyZ3NfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJCQlfZ19m cmVlMCAob3B0aW9uKTsKLSsJCQlfZ19mcmVlMCAodmFyaWFudCk7Ci0rCQkJX2dfZnJlZTAgKGxh eW91dCk7Ci0rCQkJZ19jcml0aWNhbCAoImZpbGUgJXM6IGxpbmUgJWQ6IHVuZXhwZWN0ZWQgZXJy b3I6ICVzICglcywgJWQpIiwgX19GSUxFX18sIF9fTElORV9fLCBfaW5uZXJfZXJyb3JfLT5tZXNz YWdlLCBnX3F1YXJrX3RvX3N0cmluZyAoX2lubmVyX2Vycm9yXy0+ZG9tYWluKSwgX2lubmVyX2Vy cm9yXy0+Y29kZSk7Ci0rCQkJZ19jbGVhcl9lcnJvciAoJl9pbm5lcl9lcnJvcl8pOwotKwkJCXJl dHVybiBOVUxMOwotKwkJfQotKwl9Ci0rCWdvdG8gX19maW5hbGx5NDsKLSsJX19jYXRjaDRfZ19z cGF3bl9lcnJvcjoKLSsJewotKwkJR0Vycm9yKiBlcnIgPSBOVUxMOwotKwkJRklMRSogX3RtcDE0 OF87Ci0rCQlHRXJyb3IqIF90bXAxNDlfOwotKwkJY29uc3QgZ2NoYXIqIF90bXAxNTBfOwotKwkJ Z2ludCogX3RtcDE1MV8gPSBOVUxMOwotKwkJZ2ludCogX3RtcDE1Ml87Ci0rCQlnaW50IF90bXAx NTJfX2xlbmd0aDE7Ci0rCQllcnIgPSBfaW5uZXJfZXJyb3JfOwotKwkJX2lubmVyX2Vycm9yXyA9 IE5VTEw7Ci0rCQlfdG1wMTQ4XyA9IHN0ZGVycjsKLSsJCV90bXAxNDlfID0gZXJyOwotKwkJX3Rt cDE1MF8gPSBfdG1wMTQ5Xy0+bWVzc2FnZTsKLSsJCWZwcmludGYgKF90bXAxNDhfLCAiSUJVU19F UlJPUjogJXNcbiIsIF90bXAxNTBfKTsKLSsJCV90bXAxNTFfID0gZ19uZXcwIChnaW50LCAyKTsK LSsJCV90bXAxNTFfWzBdID0gLTE7Ci0rCQlfdG1wMTUxX1sxXSA9IDA7Ci0rCQlfdG1wMTUyXyA9 IF90bXAxNTFfOwotKwkJX3RtcDE1Ml9fbGVuZ3RoMSA9IDI7Ci0rCQlpZiAocmVzdWx0X2xlbmd0 aDEpIHsKLSsJCQkqcmVzdWx0X2xlbmd0aDEgPSBfdG1wMTUyX19sZW5ndGgxOwotKwkJfQotKwkJ cmVzdWx0ID0gX3RtcDE1Ml87Ci0rCQlfZ19lcnJvcl9mcmVlMCAoZXJyKTsKLSsJCWFyZ3MgPSAo X3ZhbGFfYXJyYXlfZnJlZSAoYXJncywgYXJnc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdf ZnJlZSksIE5VTEwpOwotKwkJX2dfZnJlZTAgKG9wdGlvbik7Ci0rCQlfZ19mcmVlMCAodmFyaWFu dCk7Ci0rCQlfZ19mcmVlMCAobGF5b3V0KTsKLSsJCXJldHVybiByZXN1bHQ7Ci0rCX0KLSsJX19m aW5hbGx5NDoKLSsJaWYgKF9pbm5lcl9lcnJvcl8gIT0gTlVMTCkgewotKwkJYXJncyA9IChfdmFs YV9hcnJheV9mcmVlIChhcmdzLCBhcmdzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVl KSwgTlVMTCk7Ci0rCQlfZ19mcmVlMCAob3B0aW9uKTsKLSsJCV9nX2ZyZWUwICh2YXJpYW50KTsK LSsJCV9nX2ZyZWUwIChsYXlvdXQpOwotKwkJZ19jcml0aWNhbCAoImZpbGUgJXM6IGxpbmUgJWQ6 IHVuY2F1Z2h0IGVycm9yOiAlcyAoJXMsICVkKSIsIF9fRklMRV9fLCBfX0xJTkVfXywgX2lubmVy X2Vycm9yXy0+bWVzc2FnZSwgZ19xdWFya190b19zdHJpbmcgKF9pbm5lcl9lcnJvcl8tPmRvbWFp biksIF9pbm5lcl9lcnJvcl8tPmNvZGUpOwotKwkJZ19jbGVhcl9lcnJvciAoJl9pbm5lcl9lcnJv cl8pOwotKwkJcmV0dXJuIE5VTEw7Ci0rCX0KLSsJX3RtcDE1M18gPSBjaGlsZF9waWQ7Ci0rCXNl bGYtPnByaXYtPm1feGtiX3BpZCA9IF90bXAxNTNfOwotKwlfdG1wMTU0XyA9IHNlbGYtPnByaXYt Pm1feGtiX3BpZDsKLSsJZ19jaGlsZF93YXRjaF9hZGRfZnVsbCAoR19QUklPUklUWV9ERUZBVUxU X0lETEUsIF90bXAxNTRfLCBfeGtiX2xheW91dF9zZXRfbGF5b3V0X2NiX2djaGlsZF93YXRjaF9m dW5jLCB4a2JfbGF5b3V0X3JlZiAoc2VsZiksIHhrYl9sYXlvdXRfdW5yZWYpOwotKwlfdG1wMTU1 XyA9IHhrYl9ncm91cF9pZDsKLSsJX3RtcDE1Nl8gPSBjaGFuZ2VkX29wdGlvbjsKLSsJX3RtcDE1 N18gPSBnX25ldzAgKGdpbnQsIDIpOwotKwlfdG1wMTU3X1swXSA9IF90bXAxNTVfOwotKwlfdG1w MTU3X1sxXSA9IF90bXAxNTZfOwotKwlfdG1wMTU4XyA9IF90bXAxNTdfOwotKwlfdG1wMTU4X19s ZW5ndGgxID0gMjsKLSsJaWYgKHJlc3VsdF9sZW5ndGgxKSB7Ci0rCQkqcmVzdWx0X2xlbmd0aDEg PSBfdG1wMTU4X19sZW5ndGgxOwotKwl9Ci0rCXJlc3VsdCA9IF90bXAxNThfOwotKwlhcmdzID0g KF92YWxhX2FycmF5X2ZyZWUgKGFyZ3MsIGFyZ3NfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBn X2ZyZWUpLCBOVUxMKTsKLSsJX2dfZnJlZTAgKG9wdGlvbik7Ci0rCV9nX2ZyZWUwICh2YXJpYW50 KTsKLSsJX2dfZnJlZTAgKGxheW91dCk7Ci0rCXJldHVybiByZXN1bHQ7Ci0rfQotKwotKwotK3N0 YXRpYyB2b2lkIF94a2JfbGF5b3V0X3NldF94bW9kbWFwX2NiX2djaGlsZF93YXRjaF9mdW5jIChH UGlkIHBpZCwgZ2ludCBzdGF0dXMsIGdwb2ludGVyIHNlbGYpIHsKLSsJeGtiX2xheW91dF9zZXRf eG1vZG1hcF9jYiAoc2VsZiwgcGlkLCBzdGF0dXMpOwotK30KLSsKLSsKLSt2b2lkIHhrYl9sYXlv dXRfc2V0X3htb2RtYXAgKFhLQkxheW91dCogc2VsZikgewotKwlnYm9vbGVhbiBfdG1wMF87Ci0r CUdQaWQgX3RtcDFfOwotKwljb25zdCBnY2hhciogX3RtcDJfOwotKwlnY2hhciogX3RtcDNfID0g TlVMTDsKLSsJZ2NoYXIqIHhtb2RtYXBfY21kcGF0aDsKLSsJY29uc3QgZ2NoYXIqIF90bXA0XzsK LSsJY29uc3QgZ2NoYXIqIF90bXA3XyA9IE5VTEw7Ci0rCWdjaGFyKiBfdG1wOF87Ci0rCWdjaGFy KiBob21lZGlyOwotKwlnY2hhcioqIF90bXA5XzsKLSsJZ2ludCBfdG1wOV9fbGVuZ3RoMTsKLSsJ R0Vycm9yICogX2lubmVyX2Vycm9yXyA9IE5VTEw7Ci0rCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYg IT0gTlVMTCk7Ci0rCV90bXAwXyA9IHNlbGYtPnByaXYtPm1fdXNlX3htb2RtYXA7Ci0rCWlmICgh X3RtcDBfKSB7Ci0rCQlyZXR1cm47Ci0rCX0KLSsJX3RtcDFfID0gc2VsZi0+cHJpdi0+bV94bW9k bWFwX3BpZDsKLSsJaWYgKF90bXAxXyAhPSAoKEdQaWQpICgtMSkpKSB7Ci0rCQlyZXR1cm47Ci0r CX0KLSsJX3RtcDJfID0gc2VsZi0+cHJpdi0+bV94bW9kbWFwX2NvbW1hbmQ7Ci0rCV90bXAzXyA9 IHhrYl9sYXlvdXRfZ2V0X2Z1bGxwYXRoIChzZWxmLCBfdG1wMl8pOwotKwl4bW9kbWFwX2NtZHBh dGggPSBfdG1wM187Ci0rCV90bXA0XyA9IHhtb2RtYXBfY21kcGF0aDsKLSsJaWYgKGdfc3RyY21w MCAoX3RtcDRfLCAiIikgPT0gMCkgewotKwkJY29uc3QgZ2NoYXIqIF90bXA1XzsKLSsJCWdjaGFy KiBfdG1wNl87Ci0rCQlfdG1wNV8gPSBzZWxmLT5wcml2LT5tX3htb2RtYXBfY29tbWFuZDsKLSsJ CV90bXA2XyA9IGdfc3RyZHVwIChfdG1wNV8pOwotKwkJX2dfZnJlZTAgKHhtb2RtYXBfY21kcGF0 aCk7Ci0rCQl4bW9kbWFwX2NtZHBhdGggPSBfdG1wNl87Ci0rCX0KLSsJX3RtcDdfID0gZ19nZXRf aG9tZV9kaXIgKCk7Ci0rCV90bXA4XyA9IGdfc3RyZHVwIChfdG1wN18pOwotKwlob21lZGlyID0g X3RtcDhfOwotKwlfdG1wOV8gPSBzZWxmLT5wcml2LT5tX3htb2RtYXBfa25vd25fZmlsZXM7Ci0r CV90bXA5X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV94bW9kbWFwX2tub3duX2ZpbGVzX2xlbmd0 aDE7Ci0rCXsKLSsJCWdjaGFyKiogeG1vZG1hcF9maWxlX2NvbGxlY3Rpb24gPSBOVUxMOwotKwkJ Z2ludCB4bW9kbWFwX2ZpbGVfY29sbGVjdGlvbl9sZW5ndGgxID0gMDsKLSsJCWdpbnQgX3htb2Rt YXBfZmlsZV9jb2xsZWN0aW9uX3NpemVfID0gMDsKLSsJCWdpbnQgeG1vZG1hcF9maWxlX2l0ID0g MDsKLSsJCXhtb2RtYXBfZmlsZV9jb2xsZWN0aW9uID0gX3RtcDlfOwotKwkJeG1vZG1hcF9maWxl X2NvbGxlY3Rpb25fbGVuZ3RoMSA9IF90bXA5X19sZW5ndGgxOwotKwkJZm9yICh4bW9kbWFwX2Zp bGVfaXQgPSAwOyB4bW9kbWFwX2ZpbGVfaXQgPCBfdG1wOV9fbGVuZ3RoMTsgeG1vZG1hcF9maWxl X2l0ID0geG1vZG1hcF9maWxlX2l0ICsgMSkgewotKwkJCWdjaGFyKiBfdG1wMTBfOwotKwkJCWdj aGFyKiB4bW9kbWFwX2ZpbGUgPSBOVUxMOwotKwkJCV90bXAxMF8gPSBnX3N0cmR1cCAoeG1vZG1h cF9maWxlX2NvbGxlY3Rpb25beG1vZG1hcF9maWxlX2l0XSk7Ci0rCQkJeG1vZG1hcF9maWxlID0g X3RtcDEwXzsKLSsJCQl7Ci0rCQkJCWNvbnN0IGdjaGFyKiBfdG1wMTFfOwotKwkJCQljb25zdCBn Y2hhciogX3RtcDEyXzsKLSsJCQkJZ2NoYXIqIF90bXAxM18gPSBOVUxMOwotKwkJCQlnY2hhciog eG1vZG1hcF9maWxlcGF0aDsKLSsJCQkJY29uc3QgZ2NoYXIqIF90bXAxNF87Ci0rCQkJCWdib29s ZWFuIF90bXAxNV8gPSBGQUxTRTsKLSsJCQkJY29uc3QgZ2NoYXIqIF90bXAxNl87Ci0rCQkJCWdj aGFyKiBfdG1wMTdfOwotKwkJCQljb25zdCBnY2hhciogX3RtcDE4XzsKLSsJCQkJZ2NoYXIqIF90 bXAxOV87Ci0rCQkJCWdjaGFyKiogX3RtcDIwXyA9IE5VTEw7Ci0rCQkJCWdjaGFyKiogYXJnczsK LSsJCQkJZ2ludCBhcmdzX2xlbmd0aDE7Ci0rCQkJCWdpbnQgX2FyZ3Nfc2l6ZV87Ci0rCQkJCUdQ aWQgY2hpbGRfcGlkID0gMDsKLSsJCQkJR1BpZCBfdG1wMjZfOwotKwkJCQlHUGlkIF90bXAyN187 Ci0rCQkJCV90bXAxMV8gPSBob21lZGlyOwotKwkJCQlfdG1wMTJfID0geG1vZG1hcF9maWxlOwot KwkJCQlfdG1wMTNfID0gZ19idWlsZF9maWxlbmFtZSAoX3RtcDExXywgX3RtcDEyXywgTlVMTCk7 Ci0rCQkJCXhtb2RtYXBfZmlsZXBhdGggPSBfdG1wMTNfOwotKwkJCQlfdG1wMTRfID0geG1vZG1h cF9maWxlcGF0aDsKLSsJCQkJX3RtcDE1XyA9IGdfZmlsZV90ZXN0IChfdG1wMTRfLCBHX0ZJTEVf VEVTVF9FWElTVFMpOwotKwkJCQlpZiAoIV90bXAxNV8pIHsKLSsJCQkJCV9nX2ZyZWUwICh4bW9k bWFwX2ZpbGVwYXRoKTsKLSsJCQkJCV9nX2ZyZWUwICh4bW9kbWFwX2ZpbGUpOwotKwkJCQkJY29u dGludWU7Ci0rCQkJCX0KLSsJCQkJX3RtcDE2XyA9IHhtb2RtYXBfY21kcGF0aDsKLSsJCQkJX3Rt cDE3XyA9IGdfc3RyZHVwIChfdG1wMTZfKTsKLSsJCQkJX3RtcDE4XyA9IHhtb2RtYXBfZmlsZXBh dGg7Ci0rCQkJCV90bXAxOV8gPSBnX3N0cmR1cCAoX3RtcDE4Xyk7Ci0rCQkJCV90bXAyMF8gPSBn X25ldzAgKGdjaGFyKiwgMiArIDEpOwotKwkJCQlfdG1wMjBfWzBdID0gX3RtcDE3XzsKLSsJCQkJ X3RtcDIwX1sxXSA9IF90bXAxOV87Ci0rCQkJCWFyZ3MgPSBfdG1wMjBfOwotKwkJCQlhcmdzX2xl bmd0aDEgPSAyOwotKwkJCQlfYXJnc19zaXplXyA9IGFyZ3NfbGVuZ3RoMTsKLSsJCQkJewotKwkJ CQkJZ2NoYXIqKiBfdG1wMjFfOwotKwkJCQkJZ2ludCBfdG1wMjFfX2xlbmd0aDE7Ci0rCQkJCQlH UGlkIF90bXAyMl8gPSAwOwotKwkJCQkJX3RtcDIxXyA9IGFyZ3M7Ci0rCQkJCQlfdG1wMjFfX2xl bmd0aDEgPSBhcmdzX2xlbmd0aDE7Ci0rCQkJCQlnX3NwYXduX2FzeW5jIChOVUxMLCBfdG1wMjFf LCBOVUxMLCBHX1NQQVdOX0RPX05PVF9SRUFQX0NISUxEIHwgR19TUEFXTl9TRUFSQ0hfUEFUSCwg TlVMTCwgTlVMTCwgJl90bXAyMl8sICZfaW5uZXJfZXJyb3JfKTsKLSsJCQkJCWNoaWxkX3BpZCA9 IF90bXAyMl87Ci0rCQkJCQlpZiAoX2lubmVyX2Vycm9yXyAhPSBOVUxMKSB7Ci0rCQkJCQkJaWYg KF9pbm5lcl9lcnJvcl8tPmRvbWFpbiA9PSBHX1NQQVdOX0VSUk9SKSB7Ci0rCQkJCQkJCWdvdG8g X19jYXRjaDVfZ19zcGF3bl9lcnJvcjsKLSsJCQkJCQl9Ci0rCQkJCQkJYXJncyA9IChfdmFsYV9h cnJheV9mcmVlIChhcmdzLCBhcmdzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwg TlVMTCk7Ci0rCQkJCQkJX2dfZnJlZTAgKHhtb2RtYXBfZmlsZXBhdGgpOwotKwkJCQkJCV9nX2Zy ZWUwICh4bW9kbWFwX2ZpbGUpOwotKwkJCQkJCV9nX2ZyZWUwIChob21lZGlyKTsKLSsJCQkJCQlf Z19mcmVlMCAoeG1vZG1hcF9jbWRwYXRoKTsKLSsJCQkJCQlnX2NyaXRpY2FsICgiZmlsZSAlczog bGluZSAlZDogdW5leHBlY3RlZCBlcnJvcjogJXMgKCVzLCAlZCkiLCBfX0ZJTEVfXywgX19MSU5F X18sIF9pbm5lcl9lcnJvcl8tPm1lc3NhZ2UsIGdfcXVhcmtfdG9fc3RyaW5nIChfaW5uZXJfZXJy b3JfLT5kb21haW4pLCBfaW5uZXJfZXJyb3JfLT5jb2RlKTsKLSsJCQkJCQlnX2NsZWFyX2Vycm9y ICgmX2lubmVyX2Vycm9yXyk7Ci0rCQkJCQkJcmV0dXJuOwotKwkJCQkJfQotKwkJCQl9Ci0rCQkJ CWdvdG8gX19maW5hbGx5NTsKLSsJCQkJX19jYXRjaDVfZ19zcGF3bl9lcnJvcjoKLSsJCQkJewot KwkJCQkJR0Vycm9yKiBlcnIgPSBOVUxMOwotKwkJCQkJRklMRSogX3RtcDIzXzsKLSsJCQkJCUdF cnJvciogX3RtcDI0XzsKLSsJCQkJCWNvbnN0IGdjaGFyKiBfdG1wMjVfOwotKwkJCQkJZXJyID0g X2lubmVyX2Vycm9yXzsKLSsJCQkJCV9pbm5lcl9lcnJvcl8gPSBOVUxMOwotKwkJCQkJX3RtcDIz XyA9IHN0ZGVycjsKLSsJCQkJCV90bXAyNF8gPSBlcnI7Ci0rCQkJCQlfdG1wMjVfID0gX3RtcDI0 Xy0+bWVzc2FnZTsKLSsJCQkJCWZwcmludGYgKF90bXAyM18sICJJQlVTX0VSUk9SOiAlc1xuIiwg X3RtcDI1Xyk7Ci0rCQkJCQlfZ19lcnJvcl9mcmVlMCAoZXJyKTsKLSsJCQkJCWFyZ3MgPSAoX3Zh bGFfYXJyYXlfZnJlZSAoYXJncywgYXJnc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJl ZSksIE5VTEwpOwotKwkJCQkJX2dfZnJlZTAgKHhtb2RtYXBfZmlsZXBhdGgpOwotKwkJCQkJX2df ZnJlZTAgKHhtb2RtYXBfZmlsZSk7Ci0rCQkJCQlfZ19mcmVlMCAoaG9tZWRpcik7Ci0rCQkJCQlf Z19mcmVlMCAoeG1vZG1hcF9jbWRwYXRoKTsKLSsJCQkJCXJldHVybjsKLSsJCQkJfQotKwkJCQlf X2ZpbmFsbHk1OgotKwkJCQlpZiAoX2lubmVyX2Vycm9yXyAhPSBOVUxMKSB7Ci0rCQkJCQlhcmdz ID0gKF92YWxhX2FycmF5X2ZyZWUgKGFyZ3MsIGFyZ3NfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5 KSBnX2ZyZWUpLCBOVUxMKTsKLSsJCQkJCV9nX2ZyZWUwICh4bW9kbWFwX2ZpbGVwYXRoKTsKLSsJ CQkJCV9nX2ZyZWUwICh4bW9kbWFwX2ZpbGUpOwotKwkJCQkJX2dfZnJlZTAgKGhvbWVkaXIpOwot KwkJCQkJX2dfZnJlZTAgKHhtb2RtYXBfY21kcGF0aCk7Ci0rCQkJCQlnX2NyaXRpY2FsICgiZmls ZSAlczogbGluZSAlZDogdW5jYXVnaHQgZXJyb3I6ICVzICglcywgJWQpIiwgX19GSUxFX18sIF9f TElORV9fLCBfaW5uZXJfZXJyb3JfLT5tZXNzYWdlLCBnX3F1YXJrX3RvX3N0cmluZyAoX2lubmVy X2Vycm9yXy0+ZG9tYWluKSwgX2lubmVyX2Vycm9yXy0+Y29kZSk7Ci0rCQkJCQlnX2NsZWFyX2Vy cm9yICgmX2lubmVyX2Vycm9yXyk7Ci0rCQkJCQlyZXR1cm47Ci0rCQkJCX0KLSsJCQkJX3RtcDI2 XyA9IGNoaWxkX3BpZDsKLSsJCQkJc2VsZi0+cHJpdi0+bV94bW9kbWFwX3BpZCA9IF90bXAyNl87 Ci0rCQkJCV90bXAyN18gPSBzZWxmLT5wcml2LT5tX3htb2RtYXBfcGlkOwotKwkJCQlnX2NoaWxk X3dhdGNoX2FkZF9mdWxsIChHX1BSSU9SSVRZX0RFRkFVTFRfSURMRSwgX3RtcDI3XywgX3hrYl9s YXlvdXRfc2V0X3htb2RtYXBfY2JfZ2NoaWxkX3dhdGNoX2Z1bmMsIHhrYl9sYXlvdXRfcmVmIChz ZWxmKSwgeGtiX2xheW91dF91bnJlZik7Ci0rCQkJCWFyZ3MgPSAoX3ZhbGFfYXJyYXlfZnJlZSAo YXJncywgYXJnc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOwotKwkJ CQlfZ19mcmVlMCAoeG1vZG1hcF9maWxlcGF0aCk7Ci0rCQkJCV9nX2ZyZWUwICh4bW9kbWFwX2Zp bGUpOwotKwkJCQlicmVhazsKLSsJCQl9Ci0rCQl9Ci0rCX0KLSsJX2dfZnJlZTAgKGhvbWVkaXIp OwotKwlfZ19mcmVlMCAoeG1vZG1hcF9jbWRwYXRoKTsKLSt9Ci0rCi0rCi0rdm9pZCB4a2JfbGF5 b3V0X3Jlc2V0X2xheW91dCAoWEtCTGF5b3V0KiBzZWxmKSB7Ci0rCWdjaGFyKiBfdG1wMF8gPSBO VUxMOwotKwlnY2hhciogX3RtcDFfID0gTlVMTDsKLSsJZ2NoYXIqIF90bXAyXyA9IE5VTEw7Ci0r CWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7Ci0rCV90bXAwXyA9IHhrYl9sYXlvdXRf Z2V0X2xheW91dCAoc2VsZik7Ci0rCV9nX2ZyZWUwIChzZWxmLT5wcml2LT5tX2RlZmF1bHRfbGF5 b3V0KTsKLSsJc2VsZi0+cHJpdi0+bV9kZWZhdWx0X2xheW91dCA9IF90bXAwXzsKLSsJX3RtcDFf ID0geGtiX2xheW91dF9nZXRfdmFyaWFudCAoc2VsZik7Ci0rCV9nX2ZyZWUwIChzZWxmLT5wcml2 LT5tX2RlZmF1bHRfdmFyaWFudCk7Ci0rCXNlbGYtPnByaXYtPm1fZGVmYXVsdF92YXJpYW50ID0g X3RtcDFfOwotKwlfdG1wMl8gPSB4a2JfbGF5b3V0X2dldF9vcHRpb24gKHNlbGYpOwotKwlfZ19m cmVlMCAoc2VsZi0+cHJpdi0+bV9kZWZhdWx0X29wdGlvbik7Ci0rCXNlbGYtPnByaXYtPm1fZGVm YXVsdF9vcHRpb24gPSBfdG1wMl87Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIHZhbHVlX3hrYl9s YXlvdXRfaW5pdCAoR1ZhbHVlKiB2YWx1ZSkgewotKwl2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIg PSBOVUxMOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCB2YWx1ZV94a2JfbGF5b3V0X2ZyZWVfdmFs dWUgKEdWYWx1ZSogdmFsdWUpIHsKLSsJaWYgKHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcikgewot KwkJeGtiX2xheW91dF91bnJlZiAodmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKTsKLSsJfQotK30K LSsKLSsKLStzdGF0aWMgdm9pZCB2YWx1ZV94a2JfbGF5b3V0X2NvcHlfdmFsdWUgKGNvbnN0IEdW YWx1ZSogc3JjX3ZhbHVlLCBHVmFsdWUqIGRlc3RfdmFsdWUpIHsKLSsJaWYgKHNyY192YWx1ZS0+ ZGF0YVswXS52X3BvaW50ZXIpIHsKLSsJCWRlc3RfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0g eGtiX2xheW91dF9yZWYgKHNyY192YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpOwotKwl9IGVsc2Ug ewotKwkJZGVzdF92YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBOVUxMOwotKwl9Ci0rfQotKwot KwotK3N0YXRpYyBncG9pbnRlciB2YWx1ZV94a2JfbGF5b3V0X3BlZWtfcG9pbnRlciAoY29uc3Qg R1ZhbHVlKiB2YWx1ZSkgewotKwlyZXR1cm4gdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOwotK30K LSsKLSsKLStzdGF0aWMgZ2NoYXIqIHZhbHVlX3hrYl9sYXlvdXRfY29sbGVjdF92YWx1ZSAoR1Zh bHVlKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywgR1R5cGVDVmFsdWUqIGNvbGxlY3Rf dmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKSB7Ci0rCWlmIChjb2xsZWN0X3ZhbHVlc1swXS52 X3BvaW50ZXIpIHsKLSsJCVhLQkxheW91dCogb2JqZWN0OwotKwkJb2JqZWN0ID0gY29sbGVjdF92 YWx1ZXNbMF0udl9wb2ludGVyOwotKwkJaWYgKG9iamVjdC0+cGFyZW50X2luc3RhbmNlLmdfY2xh c3MgPT0gTlVMTCkgewotKwkJCXJldHVybiBnX3N0cmNvbmNhdCAoImludmFsaWQgdW5jbGFzc2Vk IG9iamVjdCBwb2ludGVyIGZvciB2YWx1ZSB0eXBlIGAiLCBHX1ZBTFVFX1RZUEVfTkFNRSAodmFs dWUpLCAiJyIsIE5VTEwpOwotKwkJfSBlbHNlIGlmICghZ192YWx1ZV90eXBlX2NvbXBhdGlibGUg KEdfVFlQRV9GUk9NX0lOU1RBTkNFIChvYmplY3QpLCBHX1ZBTFVFX1RZUEUgKHZhbHVlKSkpIHsK LSsJCQlyZXR1cm4gZ19zdHJjb25jYXQgKCJpbnZhbGlkIG9iamVjdCB0eXBlIGAiLCBnX3R5cGVf bmFtZSAoR19UWVBFX0ZST01fSU5TVEFOQ0UgKG9iamVjdCkpLCAiJyBmb3IgdmFsdWUgdHlwZSBg IiwgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSwgIiciLCBOVUxMKTsKLSsJCX0KLSsJCXZhbHVl LT5kYXRhWzBdLnZfcG9pbnRlciA9IHhrYl9sYXlvdXRfcmVmIChvYmplY3QpOwotKwl9IGVsc2Ug ewotKwkJdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gTlVMTDsKLSsJfQotKwlyZXR1cm4gTlVM TDsKLSt9Ci0rCi0rCi0rc3RhdGljIGdjaGFyKiB2YWx1ZV94a2JfbGF5b3V0X2xjb3B5X3ZhbHVl IChjb25zdCBHVmFsdWUqIHZhbHVlLCBndWludCBuX2NvbGxlY3RfdmFsdWVzLCBHVHlwZUNWYWx1 ZSogY29sbGVjdF92YWx1ZXMsIGd1aW50IGNvbGxlY3RfZmxhZ3MpIHsKLSsJWEtCTGF5b3V0Kiog b2JqZWN0X3A7Ci0rCW9iamVjdF9wID0gY29sbGVjdF92YWx1ZXNbMF0udl9wb2ludGVyOwotKwlp ZiAoIW9iamVjdF9wKSB7Ci0rCQlyZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgidmFsdWUgbG9jYXRp b24gZm9yIGAlcycgcGFzc2VkIGFzIE5VTEwiLCBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsK LSsJfQotKwlpZiAoIXZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcikgewotKwkJKm9iamVjdF9wID0g TlVMTDsKLSsJfSBlbHNlIGlmIChjb2xsZWN0X2ZsYWdzICYgR19WQUxVRV9OT0NPUFlfQ09OVEVO VFMpIHsKLSsJCSpvYmplY3RfcCA9IHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKLSsJfSBlbHNl IHsKLSsJCSpvYmplY3RfcCA9IHhrYl9sYXlvdXRfcmVmICh2YWx1ZS0+ZGF0YVswXS52X3BvaW50 ZXIpOwotKwl9Ci0rCXJldHVybiBOVUxMOwotK30KLSsKLSsKLStHUGFyYW1TcGVjKiBwYXJhbV9z cGVjX3hrYl9sYXlvdXQgKGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBnY2hhciogbmljaywgY29u c3QgZ2NoYXIqIGJsdXJiLCBHVHlwZSBvYmplY3RfdHlwZSwgR1BhcmFtRmxhZ3MgZmxhZ3MpIHsK LSsJUGFyYW1TcGVjWEtCTGF5b3V0KiBzcGVjOwotKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZ190 eXBlX2lzX2EgKG9iamVjdF90eXBlLCBUWVBFX1hLQl9MQVlPVVQpLCBOVUxMKTsKLSsJc3BlYyA9 IGdfcGFyYW1fc3BlY19pbnRlcm5hbCAoR19UWVBFX1BBUkFNX09CSkVDVCwgbmFtZSwgbmljaywg Ymx1cmIsIGZsYWdzKTsKLSsJR19QQVJBTV9TUEVDIChzcGVjKS0+dmFsdWVfdHlwZSA9IG9iamVj dF90eXBlOwotKwlyZXR1cm4gR19QQVJBTV9TUEVDIChzcGVjKTsKLSt9Ci0rCi0rCi0rZ3BvaW50 ZXIgdmFsdWVfZ2V0X3hrYl9sYXlvdXQgKGNvbnN0IEdWYWx1ZSogdmFsdWUpIHsKLSsJZ19yZXR1 cm5fdmFsX2lmX2ZhaWwgKEdfVFlQRV9DSEVDS19WQUxVRV9UWVBFICh2YWx1ZSwgVFlQRV9YS0Jf TEFZT1VUKSwgTlVMTCk7Ci0rCXJldHVybiB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0rfQot KwotKwotK3ZvaWQgdmFsdWVfc2V0X3hrYl9sYXlvdXQgKEdWYWx1ZSogdmFsdWUsIGdwb2ludGVy IHZfb2JqZWN0KSB7Ci0rCVhLQkxheW91dCogb2xkOwotKwlnX3JldHVybl9pZl9mYWlsIChHX1RZ UEVfQ0hFQ0tfVkFMVUVfVFlQRSAodmFsdWUsIFRZUEVfWEtCX0xBWU9VVCkpOwotKwlvbGQgPSB2 YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7Ci0rCWlmICh2X29iamVjdCkgewotKwkJZ19yZXR1cm5f aWZfZmFpbCAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKHZfb2JqZWN0LCBUWVBFX1hLQl9M QVlPVVQpKTsKLSsJCWdfcmV0dXJuX2lmX2ZhaWwgKGdfdmFsdWVfdHlwZV9jb21wYXRpYmxlIChH X1RZUEVfRlJPTV9JTlNUQU5DRSAodl9vYmplY3QpLCBHX1ZBTFVFX1RZUEUgKHZhbHVlKSkpOwot KwkJdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gdl9vYmplY3Q7Ci0rCQl4a2JfbGF5b3V0X3Jl ZiAodmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKTsKLSsJfSBlbHNlIHsKLSsJCXZhbHVlLT5kYXRh WzBdLnZfcG9pbnRlciA9IE5VTEw7Ci0rCX0KLSsJaWYgKG9sZCkgewotKwkJeGtiX2xheW91dF91 bnJlZiAob2xkKTsKLSsJfQotK30KLSsKLSsKLSt2b2lkIHZhbHVlX3Rha2VfeGtiX2xheW91dCAo R1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdl9vYmplY3QpIHsKLSsJWEtCTGF5b3V0KiBvbGQ7Ci0r CWdfcmV0dXJuX2lmX2ZhaWwgKEdfVFlQRV9DSEVDS19WQUxVRV9UWVBFICh2YWx1ZSwgVFlQRV9Y S0JfTEFZT1VUKSk7Ci0rCW9sZCA9IHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKLSsJaWYgKHZf b2JqZWN0KSB7Ci0rCQlnX3JldHVybl9pZl9mYWlsIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ RSAodl9vYmplY3QsIFRZUEVfWEtCX0xBWU9VVCkpOwotKwkJZ19yZXR1cm5faWZfZmFpbCAoZ192 YWx1ZV90eXBlX2NvbXBhdGlibGUgKEdfVFlQRV9GUk9NX0lOU1RBTkNFICh2X29iamVjdCksIEdf VkFMVUVfVFlQRSAodmFsdWUpKSk7Ci0rCQl2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSB2X29i amVjdDsKLSsJfSBlbHNlIHsKLSsJCXZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IE5VTEw7Ci0r CX0KLSsJaWYgKG9sZCkgewotKwkJeGtiX2xheW91dF91bnJlZiAob2xkKTsKLSsJfQotK30KLSsK LSsKLStzdGF0aWMgdm9pZCB4a2JfbGF5b3V0X2NsYXNzX2luaXQgKFhLQkxheW91dENsYXNzICog a2xhc3MpIHsKLSsJeGtiX2xheW91dF9wYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19w YXJlbnQgKGtsYXNzKTsKLSsJWEtCX0xBWU9VVF9DTEFTUyAoa2xhc3MpLT5maW5hbGl6ZSA9IHhr Yl9sYXlvdXRfZmluYWxpemU7Ci0rCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNp emVvZiAoWEtCTGF5b3V0UHJpdmF0ZSkpOwotK30KLSsKLSsKLStzdGF0aWMgdm9pZCB4a2JfbGF5 b3V0X2luc3RhbmNlX2luaXQgKFhLQkxheW91dCAqIHNlbGYpIHsKLSsJZ2NoYXIqIF90bXAwXzsK LSsJZ2NoYXIqKiBfdG1wMV8gPSBOVUxMOwotKwlnY2hhciogX3RtcDJfOwotKwlnY2hhciogX3Rt cDNfOwotKwlnY2hhciogX3RtcDRfOwotKwlnY2hhciogX3RtcDVfOwotKwlnY2hhciogX3RtcDZf OwotKwlnY2hhcioqIF90bXA3XyA9IE5VTEw7Ci0rCWdjaGFyKiBfdG1wOF87Ci0rCWdjaGFyKiBf dG1wOV87Ci0rCWdjaGFyKiBfdG1wMTBfOwotKwlzZWxmLT5wcml2ID0gWEtCX0xBWU9VVF9HRVRf UFJJVkFURSAoc2VsZik7Ci0rCV90bXAwXyA9IGdfc3RyZHVwIChJQlVTX1hLQl9DT01NQU5EKTsK LSsJc2VsZi0+cHJpdi0+bV94a2JfY29tbWFuZCA9IF90bXAwXzsKLSsJc2VsZi0+cHJpdi0+bV9j b25maWcgPSBOVUxMOwotKwlfdG1wMV8gPSBnX25ldzAgKGdjaGFyKiwgMCArIDEpOwotKwlzZWxm LT5wcml2LT5tX3hrYl9sYXRpbl9sYXlvdXRzID0gX3RtcDFfOwotKwlzZWxmLT5wcml2LT5tX3hr Yl9sYXRpbl9sYXlvdXRzX2xlbmd0aDEgPSAwOwotKwlzZWxmLT5wcml2LT5fbV94a2JfbGF0aW5f bGF5b3V0c19zaXplXyA9IHNlbGYtPnByaXYtPm1feGtiX2xhdGluX2xheW91dHNfbGVuZ3RoMTsK LSsJc2VsZi0+cHJpdi0+bV94a2JfcGlkID0gKEdQaWQpICgtMSk7Ci0rCXNlbGYtPnByaXYtPm1f eG1vZG1hcF9waWQgPSAoR1BpZCkgKC0xKTsKLSsJX3RtcDJfID0gZ19zdHJkdXAgKCJ4bW9kbWFw Iik7Ci0rCXNlbGYtPnByaXYtPm1feG1vZG1hcF9jb21tYW5kID0gX3RtcDJfOwotKwlzZWxmLT5w cml2LT5tX3VzZV94bW9kbWFwID0gVFJVRTsKLSsJX3RtcDNfID0gZ19zdHJkdXAgKCIueG1vZG1h cCIpOwotKwlfdG1wNF8gPSBnX3N0cmR1cCAoIi54bW9kbWFwcmMiKTsKLSsJX3RtcDVfID0gZ19z dHJkdXAgKCIuWG1vZG1hcCIpOwotKwlfdG1wNl8gPSBnX3N0cmR1cCAoIi5YbW9kbWFwcmMiKTsK LSsJX3RtcDdfID0gZ19uZXcwIChnY2hhciosIDQgKyAxKTsKLSsJX3RtcDdfWzBdID0gX3RtcDNf OwotKwlfdG1wN19bMV0gPSBfdG1wNF87Ci0rCV90bXA3X1syXSA9IF90bXA1XzsKLSsJX3RtcDdf WzNdID0gX3RtcDZfOwotKwlzZWxmLT5wcml2LT5tX3htb2RtYXBfa25vd25fZmlsZXMgPSBfdG1w N187Ci0rCXNlbGYtPnByaXYtPm1feG1vZG1hcF9rbm93bl9maWxlc19sZW5ndGgxID0gNDsKLSsJ c2VsZi0+cHJpdi0+X21feG1vZG1hcF9rbm93bl9maWxlc19zaXplXyA9IHNlbGYtPnByaXYtPm1f eG1vZG1hcF9rbm93bl9maWxlc19sZW5ndGgxOwotKwlfdG1wOF8gPSBnX3N0cmR1cCAoIiIpOwot KwlzZWxmLT5wcml2LT5tX2RlZmF1bHRfbGF5b3V0ID0gX3RtcDhfOwotKwlfdG1wOV8gPSBnX3N0 cmR1cCAoIiIpOwotKwlzZWxmLT5wcml2LT5tX2RlZmF1bHRfdmFyaWFudCA9IF90bXA5XzsKLSsJ X3RtcDEwXyA9IGdfc3RyZHVwICgiIik7Ci0rCXNlbGYtPnByaXYtPm1fZGVmYXVsdF9vcHRpb24g PSBfdG1wMTBfOwotKwlzZWxmLT5yZWZfY291bnQgPSAxOwotK30KLSsKLSsKLStzdGF0aWMgdm9p ZCB4a2JfbGF5b3V0X2ZpbmFsaXplIChYS0JMYXlvdXQqIG9iaikgewotKwlYS0JMYXlvdXQgKiBz ZWxmOwotKwlzZWxmID0gWEtCX0xBWU9VVCAob2JqKTsKLSsJX2dfZnJlZTAgKHNlbGYtPnByaXYt Pm1feGtiX2NvbW1hbmQpOwotKwlfZ19vYmplY3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX2NvbmZp Zyk7Ci0rCXNlbGYtPnByaXYtPm1feGtiX2xhdGluX2xheW91dHMgPSAoX3ZhbGFfYXJyYXlfZnJl ZSAoc2VsZi0+cHJpdi0+bV94a2JfbGF0aW5fbGF5b3V0cywgc2VsZi0+cHJpdi0+bV94a2JfbGF0 aW5fbGF5b3V0c19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOwotKwlf Z19mcmVlMCAoc2VsZi0+cHJpdi0+bV94bW9kbWFwX2NvbW1hbmQpOwotKwlzZWxmLT5wcml2LT5t X3htb2RtYXBfa25vd25fZmlsZXMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoc2VsZi0+cHJpdi0+bV94 bW9kbWFwX2tub3duX2ZpbGVzLCBzZWxmLT5wcml2LT5tX3htb2RtYXBfa25vd25fZmlsZXNfbGVu Z3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKLSsJX2dfZnJlZTAgKHNlbGYt PnByaXYtPm1fZGVmYXVsdF9sYXlvdXQpOwotKwlfZ19mcmVlMCAoc2VsZi0+cHJpdi0+bV9kZWZh dWx0X3ZhcmlhbnQpOwotKwlfZ19mcmVlMCAoc2VsZi0+cHJpdi0+bV9kZWZhdWx0X29wdGlvbik7 Ci0rfQotKwotKwotK0dUeXBlIHhrYl9sYXlvdXRfZ2V0X3R5cGUgKHZvaWQpIHsKLSsJc3RhdGlj IHZvbGF0aWxlIGdzaXplIHhrYl9sYXlvdXRfdHlwZV9pZF9fdm9sYXRpbGUgPSAwOwotKwlpZiAo Z19vbmNlX2luaXRfZW50ZXIgKCZ4a2JfbGF5b3V0X3R5cGVfaWRfX3ZvbGF0aWxlKSkgewotKwkJ c3RhdGljIGNvbnN0IEdUeXBlVmFsdWVUYWJsZSBnX2RlZmluZV90eXBlX3ZhbHVlX3RhYmxlID0g eyB2YWx1ZV94a2JfbGF5b3V0X2luaXQsIHZhbHVlX3hrYl9sYXlvdXRfZnJlZV92YWx1ZSwgdmFs dWVfeGtiX2xheW91dF9jb3B5X3ZhbHVlLCB2YWx1ZV94a2JfbGF5b3V0X3BlZWtfcG9pbnRlciwg InAiLCB2YWx1ZV94a2JfbGF5b3V0X2NvbGxlY3RfdmFsdWUsICJwIiwgdmFsdWVfeGtiX2xheW91 dF9sY29weV92YWx1ZSB9OwotKwkJc3RhdGljIGNvbnN0IEdUeXBlSW5mbyBnX2RlZmluZV90eXBl X2luZm8gPSB7IHNpemVvZiAoWEtCTGF5b3V0Q2xhc3MpLCAoR0Jhc2VJbml0RnVuYykgTlVMTCwg KEdCYXNlRmluYWxpemVGdW5jKSBOVUxMLCAoR0NsYXNzSW5pdEZ1bmMpIHhrYl9sYXlvdXRfY2xh c3NfaW5pdCwgKEdDbGFzc0ZpbmFsaXplRnVuYykgTlVMTCwgTlVMTCwgc2l6ZW9mIChYS0JMYXlv dXQpLCAwLCAoR0luc3RhbmNlSW5pdEZ1bmMpIHhrYl9sYXlvdXRfaW5zdGFuY2VfaW5pdCwgJmdf ZGVmaW5lX3R5cGVfdmFsdWVfdGFibGUgfTsKLSsJCXN0YXRpYyBjb25zdCBHVHlwZUZ1bmRhbWVu dGFsSW5mbyBnX2RlZmluZV90eXBlX2Z1bmRhbWVudGFsX2luZm8gPSB7IChHX1RZUEVfRkxBR19D TEFTU0VEIHwgR19UWVBFX0ZMQUdfSU5TVEFOVElBVEFCTEUgfCBHX1RZUEVfRkxBR19ERVJJVkFC TEUgfCBHX1RZUEVfRkxBR19ERUVQX0RFUklWQUJMRSkgfTsKLSsJCUdUeXBlIHhrYl9sYXlvdXRf dHlwZV9pZDsKLSsJCXhrYl9sYXlvdXRfdHlwZV9pZCA9IGdfdHlwZV9yZWdpc3Rlcl9mdW5kYW1l bnRhbCAoZ190eXBlX2Z1bmRhbWVudGFsX25leHQgKCksICJYS0JMYXlvdXQiLCAmZ19kZWZpbmVf dHlwZV9pbmZvLCAmZ19kZWZpbmVfdHlwZV9mdW5kYW1lbnRhbF9pbmZvLCAwKTsKLSsJCWdfb25j ZV9pbml0X2xlYXZlICgmeGtiX2xheW91dF90eXBlX2lkX192b2xhdGlsZSwgeGtiX2xheW91dF90 eXBlX2lkKTsKLSsJfQotKwlyZXR1cm4geGtiX2xheW91dF90eXBlX2lkX192b2xhdGlsZTsKLSt9 Ci0rCi0rCi0rZ3BvaW50ZXIgeGtiX2xheW91dF9yZWYgKGdwb2ludGVyIGluc3RhbmNlKSB7Ci0r CVhLQkxheW91dCogc2VsZjsKLSsJc2VsZiA9IGluc3RhbmNlOwotKwlnX2F0b21pY19pbnRfaW5j ICgmc2VsZi0+cmVmX2NvdW50KTsKLSsJcmV0dXJuIGluc3RhbmNlOwotK30KLSsKLSsKLSt2b2lk IHhrYl9sYXlvdXRfdW5yZWYgKGdwb2ludGVyIGluc3RhbmNlKSB7Ci0rCVhLQkxheW91dCogc2Vs ZjsKLSsJc2VsZiA9IGluc3RhbmNlOwotKwlpZiAoZ19hdG9taWNfaW50X2RlY19hbmRfdGVzdCAo JnNlbGYtPnJlZl9jb3VudCkpIHsKLSsJCVhLQl9MQVlPVVRfR0VUX0NMQVNTIChzZWxmKS0+Zmlu YWxpemUgKHNlbGYpOwotKwkJZ190eXBlX2ZyZWVfaW5zdGFuY2UgKChHVHlwZUluc3RhbmNlICop IHNlbGYpOwotKwl9Ci0rfQotKwotKwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2Rlc3Ryb3kg KGdwb2ludGVyIGFycmF5LCBnaW50IGFycmF5X2xlbmd0aCwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJv eV9mdW5jKSB7Ci0rCWlmICgoYXJyYXkgIT0gTlVMTCkgJiYgKGRlc3Ryb3lfZnVuYyAhPSBOVUxM KSkgewotKwkJaW50IGk7Ci0rCQlmb3IgKGkgPSAwOyBpIDwgYXJyYXlfbGVuZ3RoOyBpID0gaSAr IDEpIHsKLSsJCQlpZiAoKChncG9pbnRlciopIGFycmF5KVtpXSAhPSBOVUxMKSB7Ci0rCQkJCWRl c3Ryb3lfZnVuYyAoKChncG9pbnRlciopIGFycmF5KVtpXSk7Ci0rCQkJfQotKwkJfQotKwl9Ci0r fQotKwotKwotK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2ZyZWUgKGdwb2ludGVyIGFycmF5LCBn aW50IGFycmF5X2xlbmd0aCwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveV9mdW5jKSB7Ci0rCV92YWxh X2FycmF5X2Rlc3Ryb3kgKGFycmF5LCBhcnJheV9sZW5ndGgsIGRlc3Ryb3lfZnVuYyk7Ci0rCWdf ZnJlZSAoYXJyYXkpOwotK30KLSsKLSsKLStzdGF0aWMgZ2ludCBfdmFsYV9hcnJheV9sZW5ndGgg KGdwb2ludGVyIGFycmF5KSB7Ci0rCWludCBsZW5ndGg7Ci0rCWxlbmd0aCA9IDA7Ci0rCWlmIChh cnJheSkgewotKwkJd2hpbGUgKCgoZ3BvaW50ZXIqKSBhcnJheSlbbGVuZ3RoXSkgewotKwkJCWxl bmd0aCsrOwotKwkJfQotKwl9Ci0rCXJldHVybiBsZW5ndGg7Ci0rfQotKwotKwotKwoKZGlmZiAt LWdpdCBhL2lidXMteHgtdmFwaS1idWlsZC1mYWlsdXJlLnBhdGNoIGIvaWJ1cy14eC12YXBpLWJ1 aWxkLWZhaWx1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA2 NzBkYgotLS0gL2Rldi9udWxsCisrKyBiL2lidXMteHgtdmFwaS1idWlsZC1mYWlsdXJlLnBhdGNo CkBAIC0wLDAgKzEsODAgQEAKKy0tLSBpYnVzLTEuNS4xL2JpbmRpbmdzL3ZhbGEvTWFrZWZpbGUu YW0ub3JpZwkyMDEzLTAxLTE1IDE2OjU4OjI1LjU3MTQzMzY5MCArMDkwMAorKysrIGlidXMtMS41 LjEvYmluZGluZ3MvdmFsYS9NYWtlZmlsZS5hbQkyMDEzLTAxLTE1IDE2OjU4OjQ2Ljk4MzQ1NTE1 OCArMDkwMAorQEAgLTIwLDE3ICsyMCwzOCBAQAorICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAjIEJvc3RvbiwgTUEgIDAyMTEx LTEzMDcgIFVTQQorIAorLS1pbmNsdWRlICQoVkFQSUdFTl9NQUtFRklMRSkKKyt2YXBpZGlyID0g JChkYXRhZGlyKS92YWxhL3ZhcGkKKytkaXN0X3ZhcGlfREFUQSA9IFwKKysJaWJ1cy1ASUJVU19B UElfVkVSU0lPTkAudmFwaSBcCisrCWlidXMtQElCVVNfQVBJX1ZFUlNJT05ALmRlcHMgXAorKwkk KE5VTEwpCisgCisrIyBEb24ndCByZWJ1aWxkIHZhcGkgZXZlcnkgdGltZSBnaXIgaXMgdXBkYXRl ZC4KKytpZiBFTkFCTEVfTElCR05PTUVLQkQKKyB2YXBpX2RlcHMgPSBcCistCUlCdXMtMS4wLm1l dGFkYXRhIFwKKy0JSUJ1cy0xLjAtY3VzdG9tLnZhbGEgXAorLQkkKHRvcF9idWlsZGRpcikvc3Jj L0lCdXMtMS4wLmdpciBcCisrCSQoc3JjZGlyKS9JQnVzLTEuMC5tZXRhZGF0YSBcCisrCSQoc3Jj ZGlyKS9JQnVzLTEuMC1jdXN0b20udmFsYSBcCisrCXwgXAorKwkkKGJ1aWxkZGlyKS9na2JkLnZh cGkgXAorKwkkKHRvcF9zcmNkaXIpL3NyYy9JQnVzLUBJQlVTX0FQSV9WRVJTSU9OQC5naXIgXAor IAkkKE5VTEwpCisrZWxzZQorK3ZhcGlfZGVwcyA9IFwKKysJJChzcmNkaXIpL0lCdXMtMS4wLm1l dGFkYXRhIFwKKysJJChzcmNkaXIpL0lCdXMtMS4wLWN1c3RvbS52YWxhIFwKKysJfCBcCisrCSQo dG9wX3NyY2Rpcikvc3JjL0lCdXMtQElCVVNfQVBJX1ZFUlNJT05ALmdpciBcCisrCSQoTlVMTCkK KytlbmRpZgorIAorLWlmIEVOQUJMRV9MSUJHTk9NRUtCRAorLXZhcGlfZGVwcyArPSAkKGJ1aWxk ZGlyKS9na2JkLnZhcGkKKytpYnVzLUBJQlVTX0FQSV9WRVJTSU9OQC52YXBpOiAkKHZhcGlfZGVw cykKKysJJChBTV9WX0dFTikgJChWQVBJR0VOKSAtLWxpYnJhcnkgaWJ1cy1ASUJVU19BUElfVkVS U0lPTkAgXAorKwkJCS0tcGtnIGdpby0yLjAgXAorKwkJCS0tbWV0YWRhdGFkaXI9JChzcmNkaXIp IFwKKysJCQkkKHRvcF9zcmNkaXIpL3NyYy9JQnVzLUBJQlVTX0FQSV9WRVJTSU9OQC5naXIgXAor KwkJCSQoc3JjZGlyKS9JQnVzLTEuMC1jdXN0b20udmFsYQorIAorK2lmIEVOQUJMRV9MSUJHTk9N RUtCRAorICQoYnVpbGRkaXIpL2drYmQudmFwaToKKyAJJChBTV9WX0dFTikgJChWQVBJR0VOKSAt LWxpYnJhcnkgZ2tiZCBcCisgCSAgICAtLW1ldGFkYXRhZGlyICQoc3JjZGlyKSBcCitAQCAtMzks MjUgKzYwLDEwIEBAICQoYnVpbGRkaXIpL2drYmQudmFwaToKKyAJJChOVUxMKQorIGVuZGlmCisg CistaWJ1cy0xLjAudmFwaTogJCh2YXBpX2RlcHMpCistCistVkFQSUdFTl9WQVBJUyA9IGlidXMt MS4wLnZhcGkKKy0KKy1pYnVzXzFfMF92YXBpX0RFUFMgPSBnaW8tMi4wCistaWJ1c18xXzBfdmFw aV9NRVRBREFUQURJUlMgPSAkKHNyY2RpcikKKy1pYnVzXzFfMF92YXBpX0ZJTEVTID0gXAorLQkk KHRvcF9idWlsZGRpcikvc3JjL0lCdXMtMS4wLmdpciBcCistCSQoc3JjZGlyKS9JQnVzLTEuMC1j dXN0b20udmFsYSBcCistCSQoTlVMTCkKKy0KKy12YXBpZGlyID0gJChkYXRhZGlyKS92YWxhL3Zh cGkKKy12YXBpX0RBVEEgPSAkKFZBUElHRU5fVkFQSVMpICQoVkFQSUdFTl9WQVBJUzoudmFwaT0u ZGVwcykKKy0KKyBFWFRSQV9ESVNUID0gXAorIAlHa2JkLTMuMC5tZXRhZGF0YSBcCisgCUlCdXMt MS4wLm1ldGFkYXRhIFwKKyAJSUJ1cy0xLjAtY3VzdG9tLnZhbGEgXAorLQlpYnVzLTEuMC5kZXBz IFwKKyAJY29uZmlnLnZhcGkgXAorIAl4aS52YXBpIFwKKyAJWGtsLTEuMC5tZXRhZGF0YSBcCitA QCAtNjUsNCArNzEsNiBAQCBFWFRSQV9ESVNUID0gXAorIAorIENMRUFORklMRVMgPSBna2JkLnZh cGkKKyAKKytNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9IGlidXMtQElCVVNfQVBJX1ZFUlNJT05ALnZh cGkKKysKKyAtaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2dpdC5tawoKZGlmZiAtLWdpdCBhL2lidXMu c3BlYyBiL2lidXMuc3BlYwppbmRleCAyNzY3NzQwLi45ODkzMGU3IDEwMDY0NAotLS0gYS9pYnVz LnNwZWMKKysrIGIvaWJ1cy5zcGVjCkBAIC02Niw2ICs2Niw4IEBAIFBhdGNoOTI6ICAgICV7bmFt ZX0teHgtZy1zLWRpc2FibGUtcHJlZWRpdC5wYXRjaAogIyBUaGUgcGF0Y2ggZW5hYmxlcyB0byBi dWlsZCBvbiBmZWRvcmEgMTcuCiBQYXRjaDkzOiAgICAle25hbWV9LXh4LWYxNy5wYXRjaAogJWVu ZGlmCisjIEZpeCB0aGUgYnVpbGQgZmFpbHVyZSBpbiBmMTcgYW5kIGYxOSB2YWxhLgorUGF0Y2g5 NDogICAgJXtuYW1lfS14eC12YXBpLWJ1aWxkLWZhaWx1cmUucGF0Y2gKIAogQnVpbGRSb290OiAg JXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LSV7cmVsZWFzZX0tcm9vdC0lKCV7X19pZF91 fSAtbikKIApAQCAtMjY5LDYgKzI3MSw4IEBAIFVwZGF0ZVRpbWVzdGFtcHMgLXAxICV7UEFUQ0g0 fQogJXBhdGNoOTMgLXAxIC1iIC5mMTcKIFVwZGF0ZVRpbWVzdGFtcHMgLXAxICV7UEFUQ0g5M30K ICVlbmRpZgorJXBhdGNoOTQgLXAxIC1iIC52YXBpCitVcGRhdGVUaW1lc3RhbXBzIC1wMSAle1BB VENIOTR9CiAKICVidWlsZAogJWlmICV3aXRoX3hrYmZpbGUK