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: Tomas Mraz To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: new upstream release fixing multiple CVEs Date: Tue, 09 Jun 2026 12:42:31 GMT Message-ID: <178100895102.1.12776160631105046229.rpms-openssl-ea1d432ecf70@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: ea1d432ecf7058ac6ce3892725c1c7453063b3e9 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IGVhMWQ0MzJlY2Y3MDU4YWM2Y2UzODkyNzI1YzFj NzQ1MzA2M2IzZTkKQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+ CkRhdGUgICA6IDIwMTItMDEtMDVUMTU6MTM6MjUrMDE6MDAKU3RhdHMgIDogKzEyMjMwLy0xMjI0 MiBpbiA3IGZpbGUocykKVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBt cy9vcGVuc3NsL2MvZWExZDQzMmVjZjcwNThhYzZjZTM4OTI3MjVjMWM3NDUzMDYzYjNlOT9icmFu Y2g9cmViYXNlXzQwYmV0YQoKTG9nOgpuZXcgdXBzdHJlYW0gcmVsZWFzZSBmaXhpbmcgbXVsdGlw bGUgQ1ZFcwoKLS0tCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGEzLWRlZmF1bHRzLnBh dGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhMy1kZWZhdWx0cy5wYXRjaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNGE5ZDRlZC4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wLWJldGEz LWRlZmF1bHRzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhMy9hcHBzL29wZW5zc2wuY25mLmRlZmF1bHRzIG9wZW5zc2wtMS4w LjAtYmV0YTMvYXBwcy9vcGVuc3NsLmNuZgotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvYXBwcy9v cGVuc3NsLmNuZi5kZWZhdWx0cwkyMDA5LTA0LTA0IDIwOjA5OjQzLjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvYXBwcy9vcGVuc3NsLmNuZgkyMDA5LTA4LTA0IDIyOjU3 OjE2LjAwMDAwMDAwMCArMDIwMAotQEAgLTEwMyw3ICsxMDMsOCBAQCBlbWFpbEFkZHJlc3MJCT0g b3B0aW9uYWwKLSAKLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIFsgcmVxIF0KLS1kZWZhdWx0X2JpdHMJCT0gMTAy NAotK2RlZmF1bHRfYml0cwkJPSAyMDQ4Ci0rZGVmYXVsdF9tZAkJPSBzaGExCi0gZGVmYXVsdF9r ZXlmaWxlIAk9IHByaXZrZXkucGVtCi0gZGlzdGluZ3Vpc2hlZF9uYW1lCT0gcmVxX2Rpc3Rpbmd1 aXNoZWRfbmFtZQotIGF0dHJpYnV0ZXMJCT0gcmVxX2F0dHJpYnV0ZXMKLUBAIC0xMjYsMTcgKzEy NywxOCBAQCBzdHJpbmdfbWFzayA9IHV0Zjhvbmx5Ci0gCi0gWyByZXFfZGlzdGluZ3Vpc2hlZF9u YW1lIF0KLSBjb3VudHJ5TmFtZQkJCT0gQ291bnRyeSBOYW1lICgyIGxldHRlciBjb2RlKQotLWNv dW50cnlOYW1lX2RlZmF1bHQJCT0gQVUKLStjb3VudHJ5TmFtZV9kZWZhdWx0CQk9IFhYCi0gY291 bnRyeU5hbWVfbWluCQkJPSAyCi0gY291bnRyeU5hbWVfbWF4CQkJPSAyCi0gCi0gc3RhdGVPclBy b3ZpbmNlTmFtZQkJPSBTdGF0ZSBvciBQcm92aW5jZSBOYW1lIChmdWxsIG5hbWUpCi0tc3RhdGVP clByb3ZpbmNlTmFtZV9kZWZhdWx0CT0gU29tZS1TdGF0ZQotKyNzdGF0ZU9yUHJvdmluY2VOYW1l X2RlZmF1bHQJPSBEZWZhdWx0IFByb3ZpbmNlCi0gCi0gbG9jYWxpdHlOYW1lCQkJPSBMb2NhbGl0 eSBOYW1lIChlZywgY2l0eSkKLStsb2NhbGl0eU5hbWVfZGVmYXVsdAk9IERlZmF1bHQgQ2l0eQot IAotIDAub3JnYW5pemF0aW9uTmFtZQkJPSBPcmdhbml6YXRpb24gTmFtZSAoZWcsIGNvbXBhbnkp Ci0tMC5vcmdhbml6YXRpb25OYW1lX2RlZmF1bHQJPSBJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQK LSswLm9yZ2FuaXphdGlvbk5hbWVfZGVmYXVsdAk9IERlZmF1bHQgQ29tcGFueSBMdGQKLSAKLSAj IHdlIGNhbiBkbyB0aGlzIGJ1dCBpdCBpcyBub3QgbmVlZGVkIG5vcm1hbGx5IDotKQotICMxLm9y Z2FuaXphdGlvbk5hbWUJCT0gU2Vjb25kIE9yZ2FuaXphdGlvbiBOYW1lIChlZywgY29tcGFueSkK LUBAIC0xNDUsNyArMTQ3LDcgQEAgbG9jYWxpdHlOYW1lCQkJPSBMb2NhbGl0eSBOYW1lIChlZywg Y2l0eQotIG9yZ2FuaXphdGlvbmFsVW5pdE5hbWUJCT0gT3JnYW5pemF0aW9uYWwgVW5pdCBOYW1l IChlZywgc2VjdGlvbikKLSAjb3JnYW5pemF0aW9uYWxVbml0TmFtZV9kZWZhdWx0CT0KLSAKLS1j b21tb25OYW1lCQkJPSBDb21tb24gTmFtZSAoZWcsIFlPVVIgbmFtZSkKLStjb21tb25OYW1lCQkJ PSBDb21tb24gTmFtZSAoZWcsIHlvdXIgbmFtZSBvciB5b3VyIHNlcnZlclwncyBob3N0bmFtZSkK LSBjb21tb25OYW1lX21heAkJCT0gNjQKLSAKLSBlbWFpbEFkZHJlc3MJCQk9IEVtYWlsIEFkZHJl c3MKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wYS1maXBzLnBhdGNoIGIvb3BlbnNzbC0xLjAu MGEtZmlwcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxZTUwNy4uMDAw MDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wYS1maXBzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEs MTIxNjQgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvQ29uZmlndXJlLmZpcHMgb3Bl bnNzbC0xLjAuMGEvQ29uZmlndXJlCi0tLS0gb3BlbnNzbC0xLjAuMGEvQ29uZmlndXJlLmZpcHMJ MjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9D b25maWd1cmUJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02NjAsNiAr NjYwLDcgQEAgbXkgJGNtbGxfZW5jPSJjYW1lbGxpYS5vIGNtbGxfbWlzYy5vIGNtbAotIG15ICRw cm9jZXNzb3I9IiI7Ci0gbXkgJGRlZmF1bHRfcmFubGliOwotIG15ICRwZXJsOwotK215ICRmaXBz PTA7Ci0gCi0gCi0gIyBBbGwgb2YgdGhlIGZvbGxvd2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0 IChSQzUgd2FzIGVuYWJsZWQgYmVmb3JlIDAuOS44KToKLUBAIC04MDYsNiArODA3LDEwIEBAIFBS T0NFU1NfQVJHUzoKLSAJCQl9Ci0gCQllbHNpZiAoL14zODYkLykKLSAJCQl7ICRwcm9jZXNzb3I9 Mzg2OyB9Ci0rCQllbHNpZiAoL15maXBzJC8pCi0rCQkJewotKwkJCSRmaXBzPTE7Ci0rCQkgICAg ICAgIH0KLSAJCWVsc2lmICgvXnJzYXJlZiQvKQotIAkJCXsKLSAJCQkjIE5vIFJTQXJlZiBzdXBw b3J0IGFueSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KLUBAIC0xMzY4LDYgKzEzNzMsMTEg QEAgJGNmbGFncy49IiAtRE9QRU5TU0xfSUEzMl9TU0UyIiBpZiAoISRubwotIAotICRjZmxhZ3Mu PSIgLURPUEVOU1NMX0JOX0FTTV9NT05UIiBpZiAoJGJuX29iaiA9fiAvLW1vbnQvKTsKLSAKLStp ZiAoJGZpcHMpCi0rCXsKLSsJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNT TF9GSVBTXG4iOwotKwl9Ci0rCi0gJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVp ZF9vYmogPX4gL1wubyQvKTsKLSAkZGVzX29iaj0kZGVzX2VuYwl1bmxlc3MgKCRkZXNfb2JqID1+ IC9cLm8kLyk7Ci0gJGJmX29iaj0kYmZfZW5jCQl1bmxlc3MgKCRiZl9vYmogPX4gL1wubyQvKTsK LUBAIC0xNTM1LDYgKzE1NDUsMTAgQEAgd2hpbGUgKDxJTj4pCi0gCXMvXkxJQktSQjU9LiovTElC S1JCNT0kd2l0aGFyZ3N7ImtyYjUtbGliIn0vOwotIAlzL15MSUJaTElCPS4qL0xJQlpMSUI9JHdp dGhhcmdzeyJ6bGliLWxpYiJ9LzsKLSAJcy9eWkxJQl9JTkNMVURFPS4qL1pMSUJfSU5DTFVERT0k d2l0aGFyZ3N7InpsaWItaW5jbHVkZSJ9LzsKLSsJaWYgKCRmaXBzKQotKwkJewotKwkJcy9eRklQ Uz0uKi9GSVBTPXllcy87Ci0rCQl9Ci0gCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9 JHNoYXJlZF90YXJnZXQvOwotIAlzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9t YXJrLzsKLSAJcy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykg XCQoU0hBUkVEX1NTTCkvIGlmICghJG5vX3NoYXJlZCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vYmYvYmZfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2JmL2JmX3Nr ZXkuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9iZi9iZl9za2V5LmMuZmlwcwkyMDA4LTEx LTEyIDA0OjU3OjUyLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9i Zi9iZl9za2V5LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC01OSwx MCArNTksMTUgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0g I2luY2x1ZGUgPG9wZW5zc2wvYmxvd2Zpc2guaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNl bmRpZgotKwotICNpbmNsdWRlICJiZl9sb2NsLmgiCi0gI2luY2x1ZGUgImJmX3BpLmgiCi0gCi0t dm9pZCBCRl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpkYXRhKQotK0ZJUFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0KEJGKQotIAl7Ci0gCWludCBpOwot IAlCRl9MT05HICpwLHJpLGluWzJdOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Jm L2Jsb3dmaXNoLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vYmYvYmxvd2Zpc2guaAotLS0t IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9iZi9ibG93ZmlzaC5oLmZpcHMJMjAxMC0wNi0wNCAxMjoy NToxNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vYmYvYmxvd2Zp c2guaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTEwNCw3ICsxMDQs OSBAQCB0eXBlZGVmIHN0cnVjdCBiZl9rZXlfc3QKLSAJQkZfTE9ORyBTWzQqMjU2XTsKLSAJfSBC Rl9LRVk7Ci0gCi0tIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMgCi0rdm9pZCBwcml2YXRlX0JGX3Nl dF9rZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwot KyNlbmRpZgotIHZvaWQgQkZfc2V0X2tleShCRl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSk7Ci0gCi0gdm9pZCBCRl9lbmNyeXB0KEJGX0xPTkcgKmRhdGEsY29u c3QgQkZfS0VZICprZXkpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2JuL2JuLmgu ZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vYm4vYm4uaAotLS0tIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9ibi9ibi5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vYm4vYm4uaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAw MDAwMCArMDIwMAotQEAgLTU0MCw2ICs1NDAsMTcgQEAgaW50CUJOX2lzX3ByaW1lX2V4KGNvbnN0 IEJJR05VTSAqcCxpbnQgbgotIGludAlCTl9pc19wcmltZV9mYXN0dGVzdF9leChjb25zdCBCSUdO VU0gKnAsaW50IG5jaGVja3MsIEJOX0NUWCAqY3R4LAotIAkJaW50IGRvX3RyaWFsX2RpdmlzaW9u LCBCTl9HRU5DQiAqY2IpOwotIAotK2ludCBCTl9YOTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhw LCBCSUdOVU0gKlhxLCBpbnQgbmJpdHMsIEJOX0NUWCAqY3R4KTsKLSsKLStpbnQgQk5fWDkzMV9k ZXJpdmVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAotKwkJCWNv bnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKLSsJ CQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LCBCTl9HRU5DQiAqY2IpOwotK2ludCBCTl9Y OTMxX2dlbmVyYXRlX3ByaW1lX2V4KEJJR05VTSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwK LSsJCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsCi0rCQkJY29uc3QgQklHTlVNICpYcCwKLSsJ CQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LAotKwkJCUJOX0dFTkNCICpjYik7Ci0rCi0g Qk5fTU9OVF9DVFggKkJOX01PTlRfQ1RYX25ldyh2b2lkICk7Ci0gdm9pZCBCTl9NT05UX0NUWF9p bml0KEJOX01PTlRfQ1RYICpjdHgpOwotIGludCBCTl9tb2RfbXVsX21vbnRnb21lcnkoQklHTlVN ICpyLGNvbnN0IEJJR05VTSAqYSxjb25zdCBCSUdOVU0gKmIsCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vYm4vYm5feDkzMXAuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ibi9i bl94OTMxcC5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2JuL2JuX3g5MzFwLmMuZmlwcwky MDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9ibi9ibl94OTMxcC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1A QCAtMCwwICsxLDI3MiBAQAotKy8qIGJuX3g5MzFwLmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0 ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBw cm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIw MDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0r ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsg KiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNv bSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9ibi5oPgotKwotKy8qIFg5LjMxIHJvdXRpbmVzIGZvciBwcmltZSBkZXJpdmF0aW9uICovCi0r Ci0rLyogWDkuMzEgcHJpbWUgZGVyaXZhdGlvbi4gVGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIHRo ZSBwcmltZXMgcGkKLSsgKiAocDEsIHAyLCBxMSwgcTIpIGZyb20gYSBwYXJhbWV0ZXIgWHBpIGJ5 IGNoZWNraW5nIHN1Y2Nlc3NpdmUgb2RkCi0rICogaW50ZWdlcnMuCi0rICovCi0rCi0rc3RhdGlj IGludCBibl94OTMxX2Rlcml2ZV9waShCSUdOVU0gKnBpLCBjb25zdCBCSUdOVU0gKlhwaSwgQk5f Q1RYICpjdHgsCi0rCQkJQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCWludCBpID0gMDsKLSsJaWYgKCFC Tl9jb3B5KHBpLCBYcGkpKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghQk5faXNfb2RkKHBpKSAmJiAh Qk5fYWRkX3dvcmQocGksIDEpKQotKwkJcmV0dXJuIDA7Ci0rCWZvcig7OykKLSsJCXsKLSsJCWkr KzsKLSsJCUJOX0dFTkNCX2NhbGwoY2IsIDAsIGkpOwotKwkJLyogTkIgMjcgTVIgaXMgc3BlY2lm aWNlZCBpbiBYOS4zMSAqLwotKwkJaWYgKEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHBpLCAyNywg Y3R4LCAxLCBjYikpCi0rCQkJYnJlYWs7Ci0rCQlpZiAoIUJOX2FkZF93b3JkKHBpLCAyKSkKLSsJ CQlyZXR1cm4gMDsKLSsJCX0KLSsJQk5fR0VOQ0JfY2FsbChjYiwgMiwgaSk7Ci0rCXJldHVybiAx OwotKwl9Ci0rCi0rLyogVGhpcyBpcyB0aGUgbWFpbiBYOS4zMSBwcmltZSBkZXJpdmF0aW9uIGZ1 bmN0aW9uLiBGcm9tIHBhcmFtZXRlcnMKLSsgKiBYcDEsIFhwMiBhbmQgWHAgZGVyaXZlIHRoZSBw cmltZSBwLiBJZiB0aGUgcGFyYW1ldGVycyBwMSBvciBwMiBhcmUKLSsgKiBub3QgTlVMTCB0aGV5 IHdpbGwgYmUgcmV0dXJuZWQgdG9vOiB0aGlzIGlzIG5lZWRlZCBmb3IgdGVzdGluZy4KLSsgKi8K LSsKLStpbnQgQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBC SUdOVU0gKnAyLAotKwkJCWNvbnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25z dCBCSUdOVU0gKlhwMiwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LCBCTl9HRU5D QiAqY2IpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCUJJR05VTSAqdCwgKnAxcDIsICpwbTE7 Ci0rCi0rCS8qIE9ubHkgZXZlbiBlIHN1cHBvcnRlZCAqLwotKwlpZiAoIUJOX2lzX29kZChlKSkK LSsJCXJldHVybiAwOwotKwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsJaWYgKCFwMSkKLSsJCXAx ID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlpZiAoIXAyKQotKwkJcDIgPSBCTl9DVFhfZ2V0KGN0 eCk7Ci0rCi0rCXQgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0rCXAxcDIgPSBCTl9DVFhfZ2V0KGN0 eCk7Ci0rCi0rCXBtMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJaWYgKCFibl94OTMxX2Rlcml2 ZV9waShwMSwgWHAxLCBjdHgsIGNiKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIWJuX3g5MzFf ZGVyaXZlX3BpKHAyLCBYcDIsIGN0eCwgY2IpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5f bXVsKHAxcDIsIHAxLCBwMiwgY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBGaXJzdCBzZXQg cCB0byB2YWx1ZSBvZiBScCAqLwotKwotKwlpZiAoIUJOX21vZF9pbnZlcnNlKHAsIHAyLCBwMSwg Y3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX211bChwLCBwLCBwMiwgY3R4KSkKLSsJ CWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX21vZF9pbnZlcnNlKHQsIHAxLCBwMiwgY3R4KSkKLSsJ CWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX211bCh0LCB0LCBwMSwgY3R4KSkKLSsJCWdvdG8gZXJy OwotKwotKwlpZiAoIUJOX3N1YihwLCBwLCB0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAocC0+ bmVnICYmICFCTl9hZGQocCwgcCwgcDFwMikpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogcCBub3cg ZXF1YWxzIFJwICovCi0rCi0rCWlmICghQk5fbW9kX3N1YihwLCBwLCBYcCwgcDFwMiwgY3R4KSkK LSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX2FkZChwLCBwLCBYcCkpCi0rCQlnb3RvIGVycjsK LSsKLSsJLyogcCBub3cgZXF1YWxzIFlwMCAqLwotKwotKwlmb3IgKDs7KQotKwkJewotKwkJaW50 IGkgPSAxOwotKwkJQk5fR0VOQ0JfY2FsbChjYiwgMCwgaSsrKTsKLSsJCWlmICghQk5fY29weShw bTEsIHApKQotKwkJCWdvdG8gZXJyOwotKwkJaWYgKCFCTl9zdWJfd29yZChwbTEsIDEpKQotKwkJ CWdvdG8gZXJyOwotKwkJaWYgKCFCTl9nY2QodCwgcG0xLCBlLCBjdHgpKQotKwkJCWdvdG8gZXJy OwotKwkJaWYgKEJOX2lzX29uZSh0KQotKwkJLyogWDkuMzEgc3BlY2lmaWVzIDggTVIgYW5kIDEg THVjYXMgdGVzdCBvciBhbnkgcHJpbWUgdGVzdAotKwkJICogb2ZmZXJpbmcgc2ltaWxhciBvciBi ZXR0ZXIgZ3VhcmFudGVlcyA1MCBNUiBpcyBjb25zaWRlcmFibHkgCi0rCQkgKiBiZXR0ZXIuCi0r CQkgKi8KLSsJCQkmJiBCTl9pc19wcmltZV9mYXN0dGVzdF9leChwLCA1MCwgY3R4LCAxLCBjYikp Ci0rCQkJYnJlYWs7Ci0rCQlpZiAoIUJOX2FkZChwLCBwLCBwMXAyKSkKLSsJCQlnb3RvIGVycjsK LSsJCX0KLSsKLSsJQk5fR0VOQ0JfY2FsbChjYiwgMywgMCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0r CWVycjoKLSsKLSsJQk5fQ1RYX2VuZChjdHgpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0r LyogR2VuZXJhdGUgcGFpciBvZiBwYXJhbXRlcnMgWHAsIFhxIGZvciBYOS4zMSBwcmltZSBnZW5l cmF0aW9uLgotKyAqIE5vdGU6IG5iaXRzIHBhcmFtdGVyIGlzIHN1bSBvZiBudW1iZXIgb2YgYml0 cyBpbiBib3RoLgotKyAqLwotKwotK2ludCBCTl9YOTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhw LCBCSUdOVU0gKlhxLCBpbnQgbmJpdHMsIEJOX0NUWCAqY3R4KQotKwl7Ci0rCUJJR05VTSAqdDsK LSsJaW50IGk7Ci0rCS8qIE51bWJlciBvZiBiaXRzIGZvciBlYWNoIHByaW1lIGlzIG9mIHRoZSBm b3JtCi0rCSAqIDUxMisxMjhzIGZvciBzID0gMCwgMSwgLi4uCi0rCSAqLwotKwlpZiAoKG5iaXRz IDwgMTAyNCkgfHwgKG5iaXRzICYgMHhmZikpCi0rCQlyZXR1cm4gMDsKLSsJbmJpdHMgPj49IDE7 Ci0rCS8qIFRoZSByYW5kb20gdmFsdWUgWHAgbXVzdCBiZSBiZXR3ZWVuIHNxcnQoMikgKiAyXihu Yml0cy0xKSBhbmQKLSsJICogMl5uYml0cyAtIDEuIEJ5IHNldHRpbmcgdGhlIHRvcCB0d28gYml0 cyB3ZSBlbnN1cmUgdGhhdCB0aGUgbG93ZXIKLSsJICogYm91bmQgaXMgZXhjZWVkZWQuCi0rCSAq LwotKwlpZiAoIUJOX3JhbmQoWHAsIG5iaXRzLCAxLCAwKSkKLSsJCXJldHVybiAwOwotKwotKwlC Tl9DVFhfc3RhcnQoY3R4KTsKLSsJdCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJZm9yIChpID0g MDsgaSA8IDEwMDA7IGkrKykKLSsJCXsKLSsJCWlmICghQk5fcmFuZChYcSwgbmJpdHMsIDEsIDAp KQotKwkJCXJldHVybiAwOwotKwkJLyogQ2hlY2sgdGhhdCB8WHAgLSBYcXwgPiAyXihuYml0cyAt IDEwMCkgKi8KLSsJCUJOX3N1Yih0LCBYcCwgWHEpOwotKwkJaWYgKEJOX251bV9iaXRzKHQpID4g KG5iaXRzIC0gMTAwKSkKLSsJCQlicmVhazsKLSsJCX0KLSsKLSsJQk5fQ1RYX2VuZChjdHgpOwot KwotKwlpZiAoaSA8IDEwMDApCi0rCQlyZXR1cm4gMTsKLSsKLSsJcmV0dXJuIDA7Ci0rCi0rCX0K LSsKLSsvKiBHZW5lcmF0ZSBwcmltZXMgdXNpbmcgWDkuMzEgYWxnb3JpdGhtLiBPZiB0aGUgdmFs dWVzIHAsIHAxLCBwMiwgWHAxCi0rICogYW5kIFhwMiBvbmx5ICdwJyBuZWVkcyB0byBiZSBub24t TlVMTC4gSWYgYW55IG9mIHRoZSBvdGhlcnMgYXJlIG5vdCBOVUxMCi0rICogdGhlIHJlbGV2YW50 IHBhcmFtZXRlciB3aWxsIGJlIHN0b3JlZCBpbiBpdC4KLSsgKgotKyAqIER1ZSB0byB0aGUgZmFj dCB0aGF0IHxYcCAtIFhxfCA+IDJeKG5iaXRzIC0gMTAwKSBtdXN0IGJlIHNhdGlzZmllZCBYcCBh bmQgWHEKLSsgKiBhcmUgZ2VuZXJhdGVkIHVzaW5nIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBhbmQg c3VwcGxpZWQgYXMgaW5wdXQuCi0rICovCi0rCi0raW50IEJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVf ZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAotKwkJCUJJR05VTSAqWHAxLCBC SUdOVU0gKlhwMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwLAotKwkJCWNvbnN0IEJJR05VTSAqZSwg Qk5fQ1RYICpjdHgsCi0rCQkJQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwot KwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsJaWYgKCFYcDEpCi0rCQlYcDEgPSBCTl9DVFhfZ2V0KGN0 eCk7Ci0rCWlmICghWHAyKQotKwkJWHAyID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlpZiAoIUJO X3JhbmQoWHAxLCAxMDEsIDAsIDApKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFCTl9yYW5kKFhw MiwgMTAxLCAwLCAwKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghQk5fWDkzMV9kZXJpdmVfcHJp bWVfZXgocCwgcDEsIHAyLCBYcCwgWHAxLCBYcDIsIGUsIGN0eCwgY2IpKQotKwkJZ290byBlcnJv cjsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCUJOX0NUWF9lbmQoY3R4KTsKLSsKLSsJ cmV0dXJuIHJldDsKLSsKLSsJfQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Ju L01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2JuL01ha2VmaWxlCi0tLS0gb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2JuL01ha2VmaWxlLmZpcHMJMjAwOC0xMS0xMiAwOToxOTowMi4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vYm4vTWFrZWZpbGUJMjAx MC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0yNiwxMyArMjYsMTMgQEAgTElC U1JDPQlibl9hZGQuYyBibl9kaXYuYyBibl9leHAuYyBibl9saQotIAlibl9wcmludC5jIGJuX3Jh bmQuYyBibl9zaGlmdC5jIGJuX3dvcmQuYyBibl9ibGluZC5jIFwKLSAJYm5fa3Jvbi5jIGJuX3Nx cnQuYyBibl9nY2QuYyBibl9wcmltZS5jIGJuX2Vyci5jIGJuX3Nxci5jIGJuX2FzbS5jIFwKLSAJ Ym5fcmVjcC5jIGJuX21vbnQuYyBibl9tcGkuYyBibl9leHAyLmMgYm5fZ2YybS5jIGJuX25pc3Qu YyBcCi0tCWJuX2RlcHIuYyBibl9jb25zdC5jCi0rCWJuX2RlcHIuYyBibl9jb25zdC5jIGJuX3g5 MzFwLmMKLSAKLSBMSUJPQko9CWJuX2FkZC5vIGJuX2Rpdi5vIGJuX2V4cC5vIGJuX2xpYi5vIGJu X2N0eC5vIGJuX211bC5vIGJuX21vZC5vIFwKLSAJYm5fcHJpbnQubyBibl9yYW5kLm8gYm5fc2hp ZnQubyBibl93b3JkLm8gYm5fYmxpbmQubyBcCi0gCWJuX2tyb24ubyBibl9zcXJ0Lm8gYm5fZ2Nk Lm8gYm5fcHJpbWUubyBibl9lcnIubyBibl9zcXIubyAkKEJOX0FTTSkgXAotIAlibl9yZWNwLm8g Ym5fbW9udC5vIGJuX21waS5vIGJuX2V4cDIubyBibl9nZjJtLm8gYm5fbmlzdC5vIFwKLS0JYm5f ZGVwci5vIGJuX2NvbnN0Lm8KLSsJYm5fZGVwci5vIGJuX2NvbnN0Lm8gYm5feDkzMXAubwotIAot IFNSQz0gJChMSUJTUkMpCi0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2FtZWxs aWEvYXNtL2NtbGwteDg2LnBsLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2NhbWVsbGlhL2Fz bS9jbWxsLXg4Ni5wbAotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9hc20vY21s bC14ODYucGwuZmlwcwkyMDA5LTA0LTA2IDE2OjI1OjAyLjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9hc20vY21sbC14ODYucGwJMjAxMC0wNi0wNCAx MjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC03MjIsMTIgKzcyMiwxNSBAQCBteSAkYmlhcz1p bnQoQFRbMF0pP3NoaWZ0KEBUKTowOwotIH0KLSAmZnVuY3Rpb25fZW5kKCJDYW1lbGxpYV9Fa2V5 Z2VuIik7Ci0gCi0rJHNldGtleWZ1bmMgPSAiQ2FtZWxsaWFfc2V0X2tleSI7Ci0rJHNldGtleWZ1 bmMgPSAicHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5IiBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0r Ci0gaWYgKCRPUEVOU1NMKSB7Ci0gIyBpbnQgQ2FtZWxsaWFfc2V0X2tleSAoCi0gIwkJY29uc3Qg dW5zaWduZWQgY2hhciAqdXNlcktleSwKLSAjCQlpbnQgYml0cywKLSAjCQlDQU1FTExJQV9LRVkg KmtleSkKLS0mZnVuY3Rpb25fYmVnaW5fQigiQ2FtZWxsaWFfc2V0X2tleSIpOwotKyZmdW5jdGlv bl9iZWdpbl9CKCRzZXRrZXlmdW5jKTsKLSAJJnB1c2gJKCJlYngiKTsKLSAJJm1vdgkoImVjeCIs JndwYXJhbSgwKSk7CSMgcHVsbCBhcmd1bWVudHMKLSAJJm1vdgkoImVieCIsJndwYXJhbSgxKSk7 Ci1AQCAtNzYwLDcgKzc2Myw3IEBAIGlmICgkT1BFTlNTTCkgewotICZzZXRfbGFiZWwoImRvbmUi LDQpOwotIAkmcG9wCSgiZWJ4Iik7Ci0gCSZyZXQJKCk7Ci0tJmZ1bmN0aW9uX2VuZF9CKCJDYW1l bGxpYV9zZXRfa2V5Iik7Ci0rJmZ1bmN0aW9uX2VuZF9CKCRzZXRrZXlmdW5jKTsKLSB9Ci0gCi0g QFNCT1g9KAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlh LmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaAotLS0tIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oLmZpcHMJMjAxMC0wNi0wNCAx MjoyNToxNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2FtZWxs aWEvY2FtZWxsaWEuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTg4 LDYgKzg4LDExIEBAIHN0cnVjdCBjYW1lbGxpYV9rZXlfc3QgCi0gCX07Ci0gdHlwZWRlZiBzdHJ1 Y3QgY2FtZWxsaWFfa2V5X3N0IENBTUVMTElBX0tFWTsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0raW50IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2Vy S2V5LCBjb25zdCBpbnQgYml0cywKLSsJQ0FNRUxMSUFfS0VZICprZXkpOwotKyNlbmRpZgotKwot IGludCBDYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0 IGludCBiaXRzLAotIAlDQU1FTExJQV9LRVkgKmtleSk7Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vY2FtZWxsaWEvY21sbF9mYmxrLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vY2FtZWxsaWEvY21sbF9mYmxrLmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2FtZWxs aWEvY21sbF9mYmxrLmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYwkyMDEwLTA2LTA0 IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw2OCBAQAotKy8qIGNyeXB0by9j YW1lbGxpYS9jYW1lbGxpYV9taXNjLmMgLSotIG1vZGU6QzsgYy1maWxlLXN0eWxlOiAiZWF5IiAt Ki0gKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNiBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g Ci0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBk aXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0r ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsg KgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqLwotKyAKLSsj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NhbWVsbGlh Lmg+Ci0rI2luY2x1ZGUgImNtbGxfbG9jbC5oIgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5o PgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2Vu ZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBDYW1lbGxpYV9zZXRfa2V5KGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotKwlDQU1FTExJQV9LRVkg KmtleSkKLSsJewotKwlpZiAoRklQU19tb2RlKCkpCi0rCQlGSVBTX0JBRF9BQk9SVChDQU1FTExJ QSkKLSsJcmV0dXJuIHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkp OwotKwl9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2FtZWxsaWEv Y21sbF9taXNjLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNj LmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMuZmlwcwky MDA4LTEwLTI4IDEzOjEzOjUyLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAotQEAgLTUyLDExICs1MiwyMCBAQAotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+ Ci0gI2luY2x1ZGUgPG9wZW5zc2wvY2FtZWxsaWEuaD4KLSAjaW5jbHVkZSAiY21sbF9sb2NsLmgi Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBjb25zdCBjaGFyIENBTUVMTElB X3ZlcnNpb25bXT0iQ0FNRUxMSUEiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25l ZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLSsJQ0FNRUxMSUFfS0VZICprZXkpCi0r I2Vsc2UKLSBpbnQgQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5 LCBjb25zdCBpbnQgYml0cywKLSAJQ0FNRUxMSUFfS0VZICprZXkpCi0rI2VuZGlmCi0gCXsKLSAJ aWYoIXVzZXJLZXkgfHwgIWtleSkKLSAJCXJldHVybiAtMTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9j YW1lbGxpYS9NYWtlZmlsZQotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYW1lbGxpYS9NYWtl ZmlsZS5maXBzCTIwMDgtMTItMjMgMTI6MzM6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAw MDAwMDAwICswMjAwCi1AQCAtMjMsOSArMjMsOSBAQCBBUFBTPQotIAotIExJQj0kKFRPUCkvbGli Y3J5cHRvLmEKLSBMSUJTUkM9Y2FtZWxsaWEuYyBjbWxsX21pc2MuYyBjbWxsX2VjYi5jIGNtbGxf Y2JjLmMgY21sbF9vZmIuYyBcCi0tCSAgIGNtbGxfY2ZiLmMgY21sbF9jdHIuYyAKLSsJICAgY21s bF9jZmIuYyBjbWxsX2N0ci5jIGNtbGxfZmJsay5jCi0gCi0tTElCT0JKPSBjbWxsX2VjYi5vIGNt bGxfb2ZiLm8gY21sbF9jZmIubyBjbWxsX2N0ci5vICQoQ01MTF9FTkMpCi0rTElCT0JKPSBjbWxs X2VjYi5vIGNtbGxfb2ZiLm8gY21sbF9jZmIubyBjbWxsX2N0ci5vICQoQ01MTF9FTkMpIGNtbGxf ZmJsay5vCi0gCi0gU1JDPSAkKExJQlNSQykKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9jYXN0L2Nhc3QuaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYXN0L2Nhc3QuaAot LS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYXN0L2Nhc3QuaC5maXBzCTIwMTAtMDYtMDQgMTI6 MjU6MTQuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Nhc3QvY2Fz dC5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtODMsNyArODMsOSBA QCB0eXBlZGVmIHN0cnVjdCBjYXN0X2tleV9zdAotIAlpbnQgc2hvcnRfa2V5OwkvKiBVc2UgcmVk dWNlZCByb3VuZHMgZm9yIHNob3J0IGtleSAqLwotIAl9IENBU1RfS0VZOwotIAotLSAKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTIAotK3ZvaWQgcHJpdmF0ZV9DQVNUX3NldF9rZXkoQ0FTVF9LRVkgKmtl eSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0rI2VuZGlmCi0gdm9pZCBD QVNUX3NldF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAq ZGF0YSk7Ci0gdm9pZCBDQVNUX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1 bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IENBU1RfS0VZICprZXksCi0gCQkgICAgICBpbnQgZW5j KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9jYXN0L2Nfc2tleS5jLmZpcHMgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2Nhc3QvY19za2V5LmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vY2FzdC9jX3NrZXkuYy5maXBzCTIwMDAtMDYtMDMgMTY6MTM6MzUuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Nhc3QvY19za2V5LmMJMjAxMC0wNi0wNCAxMjoy NToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC01Nyw2ICs1NywxMSBAQAotICAqLwotIAotICNpbmNs dWRlIDxvcGVuc3NsL2Nhc3QuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwot ICNpbmNsdWRlICJjYXN0X2xjbC5oIgotICNpbmNsdWRlICJjYXN0X3MuaCIKLSAKLUBAIC03Miw3 ICs3Nyw3IEBACi0gI2RlZmluZSBTNiBDQVNUX1NfdGFibGU2Ci0gI2RlZmluZSBTNyBDQVNUX1Nf dGFibGU3Ci0gCi0tdm9pZCBDQVNUX3NldF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50IGxlbiwgY29u c3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLStGSVBTX05PTl9GSVBTX1ZDSVBIRVJfSW5pdChDQVNU KQotIAl7Ci0gCUNBU1RfTE9ORyB4WzE2XTsKLSAJQ0FTVF9MT05HIHpbMTZdOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL2NyeXB0by5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2NyeXB0by5oCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2NyeXB0by5oLmZpcHMJMjAxMC0w Ni0wNCAxMjoyNToxNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v Y3J5cHRvLmgJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC01NDcsMTIg KzU0Nyw3MCBAQCB1bnNpZ25lZCBsb25nICpPUEVOU1NMX2lhMzJjYXBfbG9jKHZvaWQpCi0gI2Rl ZmluZSBPUEVOU1NMX2lhMzJjYXAgKCooT1BFTlNTTF9pYTMyY2FwX2xvYygpKSkKLSBpbnQgT1BF TlNTTF9pc3NlcnZpY2Uodm9pZCk7Ci0gCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNkZWZp bmUgRklQU19FUlJPUl9JR05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18s IFwKLSsJCWFsZyAiIHByZXZpb3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBlcnJvciBpZ25v cmVkIik7Ci0rCi0rI2RlZmluZSBGSVBTX0JBRF9BQk9SVChhbGcpIE9wZW5TU0xEaWUoX19GSUxF X18sIF9fTElORV9fLCBcCi0rCQkjYWxnICIgQWxnb3JpdGhtIGZvcmJpZGRlbiBpbiBGSVBTIG1v ZGUiKTsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTX1NUUklDVAotKyNkZWZpbmUgRklQU19CQURf QUxHT1JJVEhNKGFsZykgRklQU19CQURfQUJPUlQoYWxnKQotKyNlbHNlCi0rI2RlZmluZSBGSVBT X0JBRF9BTEdPUklUSE0oYWxnKSBcCi0rCXsgXAotKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFM LEZJUFNfUl9OT05fRklQU19NRVRIT0QpOyBcCi0rCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiQWxn b3JpdGhtPSIsICNhbGcpOyBcCi0rCXJldHVybiAwOyBcCi0rCX0KLSsjZW5kaWYKLSsKLSsvKiBM b3cgbGV2ZWwgZGlnZXN0IEFQSSBibG9ja2luZyBtYWNybyAqLwotKwotKyNkZWZpbmUgRklQU19O T05fRklQU19NRF9Jbml0KGFsZykgXAotKwlpbnQgYWxnIyNfSW5pdChhbGcjI19DVFggKmMpIFwK LSsJCXsgXAotKwkJaWYgKEZJUFNfbW9kZSgpKSBcCi0rCQkJRklQU19CQURfQUxHT1JJVEhNKGFs ZykgXAotKwkJcmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMpOyBcCi0rCQl9IFwKLSsJaW50 IHByaXZhdGVfIyNhbGcjI19Jbml0KGFsZyMjX0NUWCAqYykKLSsKLSsvKiBGb3IgY2lwaGVycyB0 aGUgQVBJIG9mdGVuIHZhcmllcyBmcm9tIGNpcGhlciB0byBjaXBoZXIgYW5kIGVhY2ggbmVlZHMg dG8KLSsgKiBiZSB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjYXNlLiBWYXJpYWJsZSBrZXkgbGVuZ3Ro IGNpcGhlcnMgKEJsb3dmaXNoLCBSQzQsCi0rICogQ0FTVCkgaG93ZXZlciBhcmUgdmVyeSBzaW1p bGFyIGFuZCBjYW4gdXNlIGEgYmxvY2tpbmcgbWFjcm8uCi0rICovCi0rCi0rI2RlZmluZSBGSVBT X05PTl9GSVBTX1ZDSVBIRVJfSW5pdChhbGcpIFwKLSsJdm9pZCBhbGcjI19zZXRfa2V5KGFsZyMj X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKSBcCi0rCQl7IFwK LSsJCWlmIChGSVBTX21vZGUoKSkgXAotKwkJCUZJUFNfQkFEX0FCT1JUKGFsZykgXAotKwkJcHJp dmF0ZV8jI2FsZyMjX3NldF9rZXkoa2V5LCBsZW4sIGRhdGEpOyBcCi0rCQl9IFwKLSsJdm9pZCBw cml2YXRlXyMjYWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtleSwgaW50IGxlbiwgXAotKwkJCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLSsKLSsjZWxzZQotKwotKyNkZWZpbmUgRklQU19O T05fRklQU19WQ0lQSEVSX0luaXQoYWxnKSBcCi0rCXZvaWQgYWxnIyNfc2V0X2tleShhbGcjI19L RVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLSsKLSsjZGVmaW5l IEZJUFNfTk9OX0ZJUFNfTURfSW5pdChhbGcpIFwKLSsJaW50IGFsZyMjX0luaXQoYWxnIyNfQ1RY ICpjKSAKLSsKLSsjZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQUyAqLwotKwotIC8qIEJFR0lOIEVS Uk9SIENPREVTICovCi0gLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQg YnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKLSAgKiBtYWRlIGFmdGVyIHRoaXMg cG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KLSAg Ki8KLSB2b2lkIEVSUl9sb2FkX0NSWVBUT19zdHJpbmdzKHZvaWQpOwotIAotKyNkZWZpbmUgT1BF TlNTTF9IQVZFX0lOSVQJMQotK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7Ci0rCi0g LyogRXJyb3IgY29kZXMgZm9yIHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLwotIAotIC8qIEZ1bmN0 aW9uIGNvZGVzLiAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RoL2RoX2Vyci5j LmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RoL2RoX2Vyci5jCi0tLS0gb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2RoL2RoX2Vyci5jLmZpcHMJMjAwNi0xMS0yMSAyMjoyOTozNy4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgvZGhfZXJyLmMJMjAxMC0wNi0wNCAx MjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC03Myw2ICs3Myw4IEBAIHN0YXRpYyBFUlJfU1RS SU5HX0RBVEEgREhfc3RyX2Z1bmN0c1tdPQotIHtFUlJfRlVOQyhESF9GX0NPTVBVVEVfS0VZKSwJ IkNPTVBVVEVfS0VZIn0sCi0ge0VSUl9GVU5DKERIX0ZfREhQQVJBTVNfUFJJTlRfRlApLAkiREhw YXJhbXNfcHJpbnRfZnAifSwKLSB7RVJSX0ZVTkMoREhfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyks CSJESF9CVUlMVElOX0dFTlBBUkFNUyJ9LAotK3tFUlJfRlVOQyhESF9GX0RIX0NPTVBVVEVfS0VZ KSwJIkRIX2NvbXB1dGVfa2V5In0sCi0re0VSUl9GVU5DKERIX0ZfREhfR0VORVJBVEVfS0VZKSwJ IkRIX2dlbmVyYXRlX2tleSJ9LAotIHtFUlJfRlVOQyhESF9GX0RIX05FV19NRVRIT0QpLAkiREhf bmV3X21ldGhvZCJ9LAotIHtFUlJfRlVOQyhESF9GX0RIX1BBUkFNX0RFQ09ERSksCSJESF9QQVJB TV9ERUNPREUifSwKLSB7RVJSX0ZVTkMoREhfRl9ESF9QUklWX0RFQ09ERSksCSJESF9QUklWX0RF Q09ERSJ9LAotQEAgLTk0LDYgKzk2LDcgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBESF9zdHJf cmVhc29uc1tdPQotIHtFUlJfUkVBU09OKERIX1JfQk5fRVJST1IpICAgICAgICAgICAgICAgLCJi biBlcnJvciJ9LAotIHtFUlJfUkVBU09OKERIX1JfREVDT0RFX0VSUk9SKSAgICAgICAgICAgLCJk ZWNvZGUgZXJyb3IifSwKLSB7RVJSX1JFQVNPTihESF9SX0lOVkFMSURfUFVCS0VZKSAgICAgICAg ICwiaW52YWxpZCBwdWJsaWMga2V5In0sCi0re0VSUl9SRUFTT04oREhfUl9LRVlfU0laRV9UT09f U01BTEwpICAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAotIHtFUlJfUkVBU09OKERIX1JfS0VZ U19OT1RfU0VUKSAgICAgICAgICAgLCJrZXlzIG5vdCBzZXQifSwKLSB7RVJSX1JFQVNPTihESF9S X01PRFVMVVNfVE9PX0xBUkdFKSAgICAgICwibW9kdWx1cyB0b28gbGFyZ2UifSwKLSB7RVJSX1JF QVNPTihESF9SX05PX1BBUkFNRVRFUlNfU0VUKSAgICAgICwibm8gcGFyYW1ldGVycyBzZXQifSwK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9kaC9kaF9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kaC9k aF9nZW4uYy5maXBzCTIwMDUtMDQtMjYgMjA6NTM6MTUuMDAwMDAwMDAwICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2RoL2RoX2dlbi5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAw MDAwICswMjAwCi1AQCAtNjUsNiArNjUsMTAgQEAKLSAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSAj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1z KERIICpyZXQsIGludCBwcmltZV9sZW4sIGludCBnZW5lcmF0b3IsIEJOX0dFTkNCICpjYik7Ci0g Ci1AQCAtMTA2LDYgKzExMCwyMCBAQCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERI ICpyZXQsCi0gCWludCBnLG9rPSAtMTsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBT ZXJyKEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVf bGVuIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIo REhfRl9ESF9CVUlMVElOX0dFTlBBUkFNUywgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJ Z290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWN0eD1CTl9DVFhfbmV3KCk7Ci0gCWlmIChj dHggPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2RoL2RoLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgv ZGguaAotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kaC9kaC5oLmZpcHMJMjAxMC0wNi0wNCAx MjoyNToxNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgvZGgu aAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTc3LDYgKzc3LDggQEAK LSAjIGRlZmluZSBPUEVOU1NMX0RIX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKLSAjZW5kaWYKLSAK LSsjZGVmaW5lIE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsKLSAjZGVm aW5lIERIX0ZMQUdfQ0FDSEVfTU9OVF9QICAgICAweDAxCi0gI2RlZmluZSBESF9GTEFHX05PX0VY UF9DT05TVFRJTUUgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBESAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93 IHVzZXMgY29uc3RhbnQgdGltZQotQEAgLTI0MSw2ICsyNDMsOCBAQCB2b2lkIEVSUl9sb2FkX0RI X3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBESF9GX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTA0 Ci0gI2RlZmluZSBESF9GX1BLRVlfREhfREVSSVZFCQkJCSAxMTIKLSAjZGVmaW5lIERIX0ZfUEtF WV9ESF9LRVlHRU4JCQkJIDExMwotKyNkZWZpbmUgREhfRl9ESF9DT01QVVRFX0tFWQkJCQkgMTE0 Ci0rI2RlZmluZSBESF9GX0RIX0dFTkVSQVRFX0tFWQkJCSAxMTUKLSAKLSAvKiBSZWFzb24gY29k ZXMuICovCi0gI2RlZmluZSBESF9SX0JBRF9HRU5FUkFUT1IJCQkJIDEwMQotQEAgLTI1Myw2ICsy NTcsNyBAQCB2b2lkIEVSUl9sb2FkX0RIX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBESF9SX05P X1BBUkFNRVRFUlNfU0VUCQkJCSAxMDcKLSAjZGVmaW5lIERIX1JfTk9fUFJJVkFURV9WQUxVRQkJ CQkgMTAwCi0gI2RlZmluZSBESF9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUgkJCSAxMDUKLSsj ZGVmaW5lIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJCSAxMTAKLSAKLSAjaWZkZWYgIF9fY3Bs dXNwbHVzCi0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RoL2RoX2tleS5jLmZp cHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RoL2RoX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL2RoL2RoX2tleS5jLmZpcHMJMjAwNy0wMy0yOCAwMjoxNToyMy4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZGgvZGhfa2V5LmMJMjAxMC0wNi0wNCAxMjoy NToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02MSw2ICs2MSw5IEBACi0gI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wv ZGguaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgot KyNlbmRpZgotIAotIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpkaCk7Ci0gc3RhdGljIGlu dCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IEJJR05VTSAqcHViX2tleSwg REggKmRoKTsKLUBAIC0xMDcsNiArMTEwLDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERI ICpkaCkKLSAJQk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKLSAJQklHTlVNICpwdWJfa2V5PU5VTEws KnByaXZfa2V5PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2Rl KCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19C SVRTKSkKLSsJCXsKLSsJCURIZXJyKERIX0ZfR0VORVJBVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RP T19TTUFMTCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJY3R4ID0gQk5fQ1RY X25ldygpOwotIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwotIAotQEAgLTE4NCw2ICsxOTUs MTMgQEAgc3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZQotIAkJREhlcnIo REhfRl9DT01QVVRFX0tFWSxESF9SX01PRFVMVVNfVE9PX0xBUkdFKTsKLSAJCWdvdG8gZXJyOwot IAkJfQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1f Yml0cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0r CQlESGVycihESF9GX0NPTVBVVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQln b3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSAKLSAJY3R4ID0gQk5fQ1RYX25ldygpOwotIAlpZiAo Y3R4ID09IE5VTEwpIGdvdG8gZXJyOwotQEAgLTI1MSw2ICsyNjksOSBAQCBzdGF0aWMgaW50IGRo X2JuX21vZF9leHAoY29uc3QgREggKmRoLCBCCi0gCi0gc3RhdGljIGludCBkaF9pbml0KERIICpk aCkKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwot KyNlbmRpZgotIAlkaC0+ZmxhZ3MgfD0gREhfRkxBR19DQUNIRV9NT05UX1A7Ci0gCXJldHVybigx KTsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlw cyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYV9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9kc2EvZHNhX2dlbi5jLmZpcHMJMjAwOC0xMi0yNiAxODoxNzoyMS4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYV9nZW4uYwkyMDEwLTA2LTA0 IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTc3LDggKzc3LDEyIEBACi0gI2luY2x1ZGUg ImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAjaW5jbHVkZSAiZHNhX2xvY2wu aCIKLSAKLSBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBiaXRz LAotQEAgLTEyNiw2ICsxMzAsMjEgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0 LCBzaXplXwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAl1bnNpZ25lZCBpbnQgaD0yOwotIAotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsK LSsJICAgIEZJUFNlcnIoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOLAotKwkJICAgIEZJUFNf Ul9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICBnb3RvIGVycjsKLSsJICAgIH0KLSsKLSsJ aWYgKEZJUFNfbW9kZSgpICYmIChiaXRzIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19C SVRTKSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwgRFNBX1Jf S0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwotIAlp ZiAocXNpemUgIT0gU0hBX0RJR0VTVF9MRU5HVEggJiYgcXNpemUgIT0gU0hBMjI0X0RJR0VTVF9M RU5HVEggJiYKLSAJICAgIHFzaXplICE9IFNIQTI1Nl9ESUdFU1RfTEVOR1RIKQotIAkJLyogaW52 YWxpZCBxIHNpemUgKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kc2EvZHNhLmgu ZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYS5oCi0tLS0gb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL2RzYS9kc2EuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RzYS9kc2EuaAkyMDEwLTA2LTA0IDEyOjI1OjE1 LjAwMDAwMDAwMCArMDIwMAotQEAgLTg4LDYgKzg4LDggQEAKLSAjIGRlZmluZSBPUEVOU1NMX0RT QV9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCi0gI2VuZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX0RT QV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAotKwotICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVf TU9OVF9QCTB4MDEKLSAjZGVmaW5lIERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgw MiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBEU0EKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBj b25zdGFudCB0aW1lCi1AQCAtOTcsNiArOTksMjEgQEAKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKiBiZSB1c2VkIGZvciBhbGwgZXhwb25lbnRzLgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotIAotKy8qIElm IHRoaXMgZmxhZyBpcyBzZXQgdGhlIERTQSBtZXRob2QgaXMgRklQUyBjb21wbGlhbnQgYW5kIGNh biBiZSB1c2VkCi0rICogaW4gRklQUyBtb2RlLiBUaGlzIGlzIHNldCBpbiB0aGUgdmFsaWRhdGVk IG1vZHVsZSBtZXRob2QuIElmIGFuCi0rICogYXBwbGljYXRpb24gc2V0cyB0aGlzIGZsYWcgaW4g aXRzIG93biBtZXRob2RzIGl0IGlzIGl0cyByZXBvc2liaWxpdHkKLSsgKiB0byBlbnN1cmUgdGhl IHJlc3VsdCBpcyBjb21wbGlhbnQuCi0rICovCi0rCi0rI2RlZmluZSBEU0FfRkxBR19GSVBTX01F VEhPRAkJCTB4MDQwMAotKwotKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIG9wZXJhdGlvbnMg bm9ybWFsbHkgZGlzYWJsZWQgaW4gRklQUyBtb2RlIGFyZQotKyAqIHBlcm1pdHRlZCBpdCBpcyB0 aGVuIHRoZSBhcHBsaWNhdGlvbnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlCi0r ICogdXNhZ2UgaXMgY29tcGxpYW50LgotKyAqLwotKwotKyNkZWZpbmUgRFNBX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cJCQkweDA0MDAKLSsKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7 Ci0gI2VuZGlmCi1AQCAtMjcwLDggKzI4NywxMSBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdz KHZvaWQpOwotICNkZWZpbmUgRFNBX0ZfRE9fRFNBX1BSSU5UCQkJCSAxMDQKLSAjZGVmaW5lIERT QV9GX0RTQVBBUkFNU19QUklOVAkJCQkgMTAwCi0gI2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJ TlRfRlAJCQkgMTAxCi0rI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTI0Ci0r I2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMjMKLSAjZGVmaW5lIERTQV9G X0RTQV9ET19TSUdOCQkJCSAxMTIKLSAjZGVmaW5lIERTQV9GX0RTQV9ET19WRVJJRlkJCQkJIDEx MwotKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTI1Ci0gI2RlZmlu ZSBEU0FfRl9EU0FfTkVXX01FVEhPRAkJCQkgMTAzCi0gI2RlZmluZSBEU0FfRl9EU0FfUEFSQU1f REVDT0RFCQkJCSAxMTkKLSAjZGVmaW5lIERTQV9GX0RTQV9QUklOVF9GUAkJCQkgMTA1Ci1AQCAt Mjk2LDkgKzMxNiwxMiBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQpOwotICNkZWZp bmUgRFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFCQkgMTAwCi0gI2RlZmluZSBEU0Ff Ul9ERUNPREVfRVJST1IJCQkJIDEwNAotICNkZWZpbmUgRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQ RQkJCSAxMDYKLSsjZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMTAKLSAjZGVm aW5lIERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKLSAjZGVmaW5lIERTQV9SX01PRFVM VVNfVE9PX0xBUkdFCQkJCSAxMDMKLSsjZGVmaW5lIERTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkg MTExCi0gI2RlZmluZSBEU0FfUl9OT19QQVJBTUVURVJTX1NFVAkJCQkgMTA3Ci0rI2RlZmluZSBE U0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxMTIKLSAjZGVmaW5lIERT QV9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUgkJCSAxMDUKLSAKLSAjaWZkZWYgIF9fY3BsdXNw bHVzCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9kc2EvZHNhX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjI1LjAwMDAwMDAwMCArMDIw MAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9kc2EvZHNhX2tleS5jCTIwMTAtMDYtMDQgMTI6 MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtNjMsOSArNjMsNTUgQEAKLSAjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotICNpbmNsdWRlIDxvcGVuc3Ns L3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgot KyNlbmRpZgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSAKLSBzdGF0aWMgaW50IGRzYV9idWls dGluX2tleWdlbihEU0EgKmRzYSk7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRp YyBpbnQgZmlwc19kc2FfcGFpcndpc2VfZmFpbCA9IDA7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRf ZHNhX2tleWdlbih2b2lkKQotKwl7Ci0rCWZpcHNfZHNhX3BhaXJ3aXNlX2ZhaWwgPSAxOwotKwl9 Ci0rCi0raW50IGZpcHNfY2hlY2tfZHNhKERTQSAqZHNhKQotKwl7Ci0rCUVWUF9QS0VZICpwazsK LSsJdW5zaWduZWQgY2hhciB0YnNbXSA9ICJEU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7Ci0rCWlu dCByZXQgPSAwOwotKwotKyAgICAJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJ CWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9zZXQxX0RTQShwaywgZHNhKTsKLSsKLSsJaWYgKCFm aXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJCQlOVUxMLCAwLCBFVlBf c2hhMSgpLCAwLCBOVUxMKSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQgPSAxOwotKwotK2VycjoK LSsJaWYgKHJldCA9PSAwKQotKwkJewotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJ RklQU2VycihGSVBTX0ZfRklQU19DSEVDS19EU0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVE KTsKLSsJCX0KLSsKLSsJaWYgKHBrKQotKwkJRVZQX1BLRVlfZnJlZShwayk7Ci0rCi0rCXJldHVy biByZXQ7Ci0rCX0KLSsjZW5kaWYKLSsKLSBpbnQgRFNBX2dlbmVyYXRlX2tleShEU0EgKmRzYSkK LSAJewotIAlpZihkc2EtPm1ldGgtPmRzYV9rZXlnZW4pCi1AQCAtNzksNiArMTI1LDE0IEBAIHN0 YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQotIAlCTl9DVFggKmN0eD1OVUxM OwotIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9Q RU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0Zf RFNBX0JVSUxUSU5fS0VZR0VOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBl cnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkg Z290byBlcnI7Ci0gCi0gCWlmIChkc2EtPnByaXZfa2V5ID09IE5VTEwpCi1AQCAtMTE3LDYgKzE3 MSwxNSBAQCBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSkKLSAKLSAJZHNh LT5wcml2X2tleT1wcml2X2tleTsKLSAJZHNhLT5wdWJfa2V5PXB1Yl9rZXk7Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoZmlwc19kc2FfcGFp cndpc2VfZmFpbCkKLSsJCQlCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOwotKwkJaWYoIWZp cHNfY2hlY2tfZHNhKGRzYSkpCi0rCQkgICAgZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0gCW9r PTE7Ci0gCi0gZXJyOgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RzYS9kc2Ffb3Nz bC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCi0tLS0gb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMJMjAwNy0wMy0yOCAwMjoxNToyNi4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZHNhL2RzYV9vc3NsLmMJ MjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02NSw2ICs2NSw5IEBACi0g I2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotICNp bmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2ln bihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgRFNBICpkc2EpOwotIHN0YXRp YyBpbnQgZHNhX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJOX0NUWCAqY3R4X2luLCBCSUdOVU0gKipr aW52cCwgQklHTlVNICoqcnApOwotQEAgLTgyLDcgKzg1LDcgQEAgTlVMTCwgLyogZHNhX21vZF9l eHAsICovCi0gTlVMTCwgLyogZHNhX2JuX21vZF9leHAsICovCi0gZHNhX2luaXQsCi0gZHNhX2Zp bmlzaCwKLS0wLAotK0RTQV9GTEFHX0ZJUFNfTUVUSE9ELAotIE5VTEwsCi0gTlVMTCwKLSBOVUxM Ci1AQCAtMTM3LDYgKzE0MCwyMCBAQCBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24oY29uc3Qg dW5zaWduCi0gCWludCByZWFzb249RVJSX1JfQk5fTElCOwotIAlEU0FfU0lHICpyZXQ9TlVMTDsK LSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0r CSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fU0lHTixGSVBTX1JfRklQU19TRUxG VEVTVF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIE5VTEw7Ci0rCSAgICB9Ci0rCi0rCWlmIChGSVBT X21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01P RFVMVVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1NJR04sIERTQV9SX0tF WV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJ Qk5faW5pdCgmbSk7Ci0gCUJOX2luaXQoJnhyKTsKLSAKLUBAIC0zMTIsNiArMzI5LDIwIEBAIHN0 YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZCAKLSAJCXJldHVybiAtMTsKLSAJ CX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkp Ci0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fVkVSSUZZLEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gLTE7Ci0rCSAgICB9Ci0rCi0rCWlmIChG SVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlO X01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSwgRFNB X1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCXJldHVybiAtMTsKLSsJCX0KLSsjZW5kaWYKLSsK LSAJaSA9IEJOX251bV9iaXRzKGRzYS0+cSk7Ci0gCS8qIGZpcHMgMTg2LTMgYWxsb3dzIG9ubHkg ZGlmZmVyZW50IHNpemVzIGZvciBxICovCi0gCWlmIChpICE9IDE2MCAmJiBpICE9IDIyNCAmJiBp ICE9IDI1NikKLUBAIC00MDMsNiArNDM0LDkgQEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNv bnN0IHVuc2lnbmVkIAotIAotIHN0YXRpYyBpbnQgZHNhX2luaXQoRFNBICpkc2EpCi0gewotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlk c2EtPmZsYWdzfD1EU0FfRkxBR19DQUNIRV9NT05UX1A7Ci0gCXJldHVybigxKTsKLSB9Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXJyL2Vycl9hbGwuYy5maXBzIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9lcnIvZXJyX2FsbC5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Vyci9l cnJfYWxsLmMuZmlwcwkyMDA5LTA4LTA5IDE2OjU4OjA1LjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9lcnIvZXJyX2FsbC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAw MDAwMDAwICswMjAwCi1AQCAtOTYsNiArOTYsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL29jc3Au aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC90cy5oPgot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlm Ci0gI2lmbmRlZiBPUEVOU1NMX05PX0NNUwotICNpbmNsdWRlIDxvcGVuc3NsL2Ntcy5oPgotICNl bmRpZgotQEAgLTE0OSw2ICsxNTIsOSBAQCB2b2lkIEVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKHZv aWQpCi0gI2VuZGlmCi0gCUVSUl9sb2FkX09DU1Bfc3RyaW5ncygpOwotIAlFUlJfbG9hZF9VSV9z dHJpbmdzKCk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlFUlJfbG9hZF9GSVBTX3N0cmluZ3Mo KTsKLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCi0gCUVSUl9sb2FkX0NNU19zdHJp bmdzKCk7Ci0gI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2RpZ2Vz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9kaWdlc3QuYwotLS0tIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcwkyMDEwLTAzLTA1IDE0OjMzOjQzLjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZGlnZXN0LmMJMjAxMC0w Ni0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMTYsNiArMTE2LDcgQEAKLSAjaWZu ZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+Ci0gI2Vu ZGlmCi0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gdm9pZCBFVlBfTURfQ1RYX2luaXQoRVZQ X01EX0NUWCAqY3R4KQotIAl7Ci1AQCAtMTM4LDkgKzEzOSw1MCBAQCBpbnQgRVZQX0RpZ2VzdElu aXQoRVZQX01EX0NUWCAqY3R4LCBjb25zCi0gCXJldHVybiBFVlBfRGlnZXN0SW5pdF9leChjdHgs IHR5cGUsIE5VTEwpOwotIAl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKy8qIFRoZSBw dXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBu b24gRklQUwotKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9y cy4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9NRF9DVFggKmN0eCkKLSsJeyBG SVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBpbml0Iik7IHJldHVybiAwO30KLSsKLStzdGF0aWMg aW50IGJhZF91cGRhdGUoRVZQX01EX0NUWCAqY3R4LGNvbnN0IHZvaWQgKmRhdGEsc2l6ZV90IGNv dW50KQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IHVwZGF0ZSIpOyByZXR1cm4gMDt9 Ci0rCi0rc3RhdGljIGludCBiYWRfZmluYWwoRVZQX01EX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIg Km1kKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IEZpbmFsIik7IHJldHVybiAwO30K LSsKLStzdGF0aWMgY29uc3QgRVZQX01EIGJhZF9tZCA9Ci0rCXsKLSsJMCwKLSsJMCwKLSsJMCwK LSsJMCwKLSsJYmFkX2luaXQsCi0rCWJhZF91cGRhdGUsCi0rCWJhZF9maW5hbCwKLSsJTlVMTCwK LSsJTlVMTCwKLSsJTlVMTCwKLSsJMCwKLSsJezAsMCwwLDB9LAotKwl9OwotKwotKyNlbmRpZgot KwotIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IEVWUF9NRCAq dHlwZSwgRU5HSU5FICppbXBsKQotIAl7Ci0gCUVWUF9NRF9DVFhfY2xlYXJfZmxhZ3MoY3R4LEVW UF9NRF9DVFhfRkxBR19DTEVBTkVEKTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNf c2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9FVlBfRElHRVNUSU5J VF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJY3R4LT5kaWdlc3QgPSAmYmFk X21kOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VO R0lORQotIAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQg b24gIkZpbmFsIidkIGNvbnRleHRzCi0gCSAqIHNvIHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBo YXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZwotQEAgLTE5Nyw2ICsyMzksMTgg QEAgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgYwotICNlbmRpZgotIAlp ZiAoY3R4LT5kaWdlc3QgIT0gdHlwZSkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlp ZiAoRklQU19tb2RlKCkpCi0rCQkJewotKwkJCWlmICghKHR5cGUtPmZsYWdzICYgRVZQX01EX0ZM QUdfRklQUykgCi0rCQkJICYmICEoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQ U19BTExPVykpCi0rCQkJCXsKLSsJCQkJRVZQZXJyKEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYLCBF VlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0rCQkJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKLSsJ CQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJCQl9Ci0rI2VuZGlmCi0gCQlpZiAoY3R4LT5kaWdlc3Qg JiYgY3R4LT5kaWdlc3QtPmN0eF9zaXplKQotIAkJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEp OwotIAkJY3R4LT5kaWdlc3Q9dHlwZTsKLUBAIC0yMzAsNiArMjg0LDkgQEAgc2tpcF90b19pbml0 OgotIAotIGludCBFVlBfRGlnZXN0VXBkYXRlKEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAq ZGF0YSwgc2l6ZV90IGNvdW50KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3Nl bGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCXJldHVybiBjdHgtPnVwZGF0ZShjdHgsZGF0YSxj b3VudCk7Ci0gCX0KLSAKLUBAIC0yNDYsNiArMzAzLDkgQEAgaW50IEVWUF9EaWdlc3RGaW5hbChF VlBfTURfQ1RYICpjdHgsIHVucwotIGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpzaXplKQotIAl7Ci0gCWludCBy ZXQ7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2Vu ZGlmCi0gCi0gCU9QRU5TU0xfYXNzZXJ0KGN0eC0+ZGlnZXN0LT5tZF9zaXplIDw9IEVWUF9NQVhf TURfU0laRSk7Ci0gCXJldD1jdHgtPmRpZ2VzdC0+ZmluYWwoY3R4LG1kKTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZV9hZXMuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9ldnAvZV9hZXMuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZV9hZXMuYy5maXBz CTIwMDQtMDEtMjggMjA6MDU6MzMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL2V2cC9lX2Flcy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1A QCAtNjksMzIgKzY5LDI5IEBAIHR5cGVkZWYgc3RydWN0Ci0gCi0gSU1QTEVNRU5UX0JMT0NLX0NJ UEhFUihhZXNfMTI4LCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKLSAJCSAgICAgICBOSURfYWVzXzEy OCwgMTYsIDE2LCAxNiwgMTI4LAotLQkJICAgICAgIDAsIGFlc19pbml0X2tleSwgTlVMTCwgCi0t CQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKLS0JCSAgICAgICBFVlBfQ0lQSEVSX2dl dF9hc24xX2l2LAotLQkJICAgICAgIE5VTEwpCi0rCQkgICAgICAgRVZQX0NJUEhfRkxBR19GSVBT fEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICAgIGFlc19pbml0X2tleSwKLSsJ CSAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQotIElNUExFTUVOVF9CTE9DS19DSVBIRVIo YWVzXzE5Miwga3MsIEFFUywgRVZQX0FFU19LRVksCi0gCQkgICAgICAgTklEX2Flc18xOTIsIDE2 LCAyNCwgMTYsIDEyOCwKLS0JCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEwsIAotLQkJICAg ICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNu MV9pdiwKLS0JCSAgICAgICBOVUxMKQotKwkJICAgICAgIEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBf Q0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJCSAgICAgICBhZXNfaW5pdF9rZXksCi0rCQkgICAg ICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKLSBJTVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGFlc18y NTYsIGtzLCBBRVMsIEVWUF9BRVNfS0VZLAotIAkJICAgICAgIE5JRF9hZXNfMjU2LCAxNiwgMzIs IDE2LCAxMjgsCi0tCQkgICAgICAgMCwgYWVzX2luaXRfa2V5LCBOVUxMLCAKLS0JCSAgICAgICBF VlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYs Ci0tCQkgICAgICAgTlVMTCkKLS0KLS0jZGVmaW5lIElNUExFTUVOVF9BRVNfQ0ZCUihrc2l6ZSxj Yml0cykJSU1QTEVNRU5UX0NGQlIoYWVzLEFFUyxFVlBfQUVTX0tFWSxrcyxrc2l6ZSxjYml0cywx NikKLS0KLS1JTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDEpCi0tSU1QTEVNRU5UX0FFU19DRkJSKDE5 MiwxKQotLUlNUExFTUVOVF9BRVNfQ0ZCUigyNTYsMSkKLS0KLS1JTVBMRU1FTlRfQUVTX0NGQlIo MTI4LDgpCi0tSU1QTEVNRU5UX0FFU19DRkJSKDE5Miw4KQotLUlNUExFTUVOVF9BRVNfQ0ZCUigy NTYsOCkKLSsJCSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxU X0FTTjEsCi0rCQkgICAgICAgYWVzX2luaXRfa2V5LAotKwkJICAgICAgIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpCi0rCi0rI2RlZmluZSBJTVBMRU1FTlRfQUVTX0NGQlIoa3NpemUsY2JpdHMsZmxh Z3MpCUlNUExFTUVOVF9DRkJSKGFlcyxBRVMsRVZQX0FFU19LRVksa3Msa3NpemUsY2JpdHMsMTYs ZmxhZ3MpCi0rCi0rSU1QTEVNRU5UX0FFU19DRkJSKDEyOCwxLEVWUF9DSVBIX0ZMQUdfRklQUykK LStJTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDEsRVZQX0NJUEhfRkxBR19GSVBTKQotK0lNUExFTUVO VF9BRVNfQ0ZCUigyNTYsMSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rCi0rSU1QTEVNRU5UX0FFU19D RkJSKDEyOCw4LEVWUF9DSVBIX0ZMQUdfRklQUykKLStJTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDgs RVZQX0NJUEhfRkxBR19GSVBTKQotK0lNUExFTUVOVF9BRVNfQ0ZCUigyNTYsOCxFVlBfQ0lQSF9G TEFHX0ZJUFMpCi0gCi0gc3RhdGljIGludCBhZXNfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0 eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotIAkJICAgY29uc3QgdW5zaWduZWQgY2hhciAq aXYsIGludCBlbmMpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2VfY2FtZWxs aWEuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZV9jYW1lbGxpYS5jCi0tLS0gb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMuZmlwcwkyMDA2LTA4LTMxIDIyOjU2 OjIwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZV9jYW1l bGxpYS5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtOTMsNyArOTMs NyBAQCBJTVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGNhbWVsbGlhXzI1Niwga3MsCi0gCUVWUF9DSVBI RVJfZ2V0X2FzbjFfaXYsCi0gCU5VTEwpCi0gCi0tI2RlZmluZSBJTVBMRU1FTlRfQ0FNRUxMSUFf Q0ZCUihrc2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoY2FtZWxsaWEsQ2FtZWxsaWEsRVZQX0NB TUVMTElBX0tFWSxrcyxrc2l6ZSxjYml0cywxNikKLSsjZGVmaW5lIElNUExFTUVOVF9DQU1FTExJ QV9DRkJSKGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihjYW1lbGxpYSxDYW1lbGxpYSxFVlBf Q0FNRUxMSUFfS0VZLGtzLGtzaXplLGNiaXRzLDE2LDApCi0gCi0gSU1QTEVNRU5UX0NBTUVMTElB X0NGQlIoMTI4LDEpCi0gSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIoMTkyLDEpCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2V2cC9lX2RlczMuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZV9kZXMzLmMu ZmlwcwkyMDA4LTEyLTI5IDEzOjM1OjQ3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9ldnAvZV9kZXMzLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAy MDAKLUBAIC0yMDYsOSArMjA2LDkgQEAgc3RhdGljIGludCBkZXNfZWRlM19jZmI4X2NpcGhlcihF VlBfQ0lQSAotICAgICB9Ci0gCi0gQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9L RVksIE5JRF9kZXNfZWRlLCA4LCAxNiwgOCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFORF9LRVksIGRl c19lZGVfaW5pdF9rZXksIE5VTEwsIAotLQkJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkJ RVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKLSsJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZM QUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJCQlkZXNfZWRlX2luaXRfa2V5 LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAotICNkZWZpbmUgZGVz X2VkZTNfY2ZiNjRfY2lwaGVyIGRlc19lZGVfY2ZiNjRfY2lwaGVyCi1AQCAtMjE3LDIxICsyMTcs MjEgQEAgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksIAotICNkZWZpbmUg ZGVzX2VkZTNfZWNiX2NpcGhlciBkZXNfZWRlX2VjYl9jaXBoZXIKLSAKLSBCTE9DS19DSVBIRVJf ZGVmcyhkZXNfZWRlMywgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlMywgOCwgMjQsIDgsIDY0LAot LQkJCUVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSwgTlVMTCwgCi0tCQkJRVZQ X0NJUEhFUl9zZXRfYXNuMV9pdiwKLS0JCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQ X0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9B U04xLAotKwkJCWRlc19lZGUzX2luaXRfa2V5LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJ ZGVzM19jdHJsKQotIAotIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZ LE5JRF9kZXNfZWRlMywyNCw4LDEsCi0tCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRl M19pbml0X2tleSxOVUxMLAotLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAg ICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhf RkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICBkZXNfZWRlM19p bml0X2tleSwKLSsJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKLSAJCSAgICAgZGVzM19jdHJsKQot IAotIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNfZWRl MywyNCw4LDgsCi0tCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSxO VUxMLAotLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICBFVlBfQ0lQSEVS X2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVW UF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICBkZXNfZWRlM19pbml0X2tleSwKLSsJ CSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKLSAJCSAgICAgZGVzM19jdHJsKQotIAotIHN0YXRpYyBp bnQgZGVzX2VkZV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBj aGFyICprZXksCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2VfbnVsbC5jLmZp cHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9lX251bGwuYwotLS0tIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcwkyMDA4LTEwLTMxIDIwOjQ4OjI0LjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZV9udWxsLmMJMjAxMC0wNi0wNCAx MjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBjb25zdCBF VlBfQ0lQSEVSIG5fY2lwaGVyPQotIAl7Ci0gCU5JRF91bmRlZiwKLSAJMSwwLDAsCi0tCTAsCi0r CUVWUF9DSVBIX0ZMQUdfRklQUywKLSAJbnVsbF9pbml0X2tleSwKLSAJbnVsbF9jaXBoZXIsCi0g CU5VTEwsCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2VfcmM0LmMuZmlwcyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2VfcmM0LmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZXZwL2VfcmM0LmMuZmlwcwkyMDA4LTEwLTMxIDIwOjQ4OjI0LjAwMDAwMDAwMCArMDEwMAot KysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZV9yYzQuYwkyMDEwLTA2LTA0IDEyOjI1OjE1 LjAwMDAwMDAwMCArMDIwMAotQEAgLTY0LDYgKzY0LDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wv cmM0Lmg+Ci0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gLyogRklYTUU6IHN1cmVseSB0aGlz IGlzIGF2YWlsYWJsZSBlbHNld2hlcmU/ICovCi0gI2RlZmluZSBFVlBfUkM0X0tFWV9TSVpFCQkx NgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2cF9lbmMuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9ldnAvZXZwX2VuYy5jLmZpcHMJMjAxMC0wMy0wMSAwMjo1Mjo0Ny4wMDAwMDAwMDAgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2cF9lbmMuYwkyMDEwLTA2LTA0IDEyOjI1 OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTY4LDggKzY4LDUzIEBACi0gCi0gY29uc3QgY2hhciBF VlBfdmVyc2lvbltdPSJFVlAiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCi0rLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFt cyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCi0rICogYWxnb3JpdGhtcyBpbiBGSVBTIG1v ZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgotKyAqLwotKwotK3N0YXRpYyBpbnQgYmFkX2luaXQo RVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKwkJICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgi Q2lwaGVyIGluaXQiKTsgcmV0dXJuIDA7fQotKwotK3N0YXRpYyBpbnQgYmFkX2RvX2NpcGhlcihF VlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0rCQkJIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgi Q2lwaGVyIHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0rCi0rLyogTkI6IG5vIGNsZWFudXAgYmVjYXVz ZSBpdCBpcyBhbGxvd2VkIGFmdGVyIGZhaWxlZCBpbml0ICovCi0rCi0rc3RhdGljIGludCBiYWRf c2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCi0rCXsgRklQU19F UlJPUl9JR05PUkVEKCJDaXBoZXIgc2V0X2FzbjEiKTsgcmV0dXJuIDA7fQotK3N0YXRpYyBpbnQg YmFkX2dldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQotKwl7IEZJ UFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGdldF9hc24xIik7IHJldHVybiAwO30KLStzdGF0aWMg aW50IGJhZF9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCB0eXBlLCBpbnQgYXJnLCB2b2lk ICpwdHIpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgY3RybCIpOyByZXR1cm4gMDt9 Ci0rCi0rc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYmFkX2NpcGhlciA9Ci0rCXsKLSsJMCwKLSsJ MCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJYmFkX2luaXQsCi0rCWJhZF9kb19jaXBoZXIsCi0rCU5V TEwsCi0rCTAsCi0rCWJhZF9zZXRfYXNuMSwKLSsJYmFkX2dldF9hc24xLAotKwliYWRfY3RybCwK LSsJTlVMTAotKwl9OwotKwotKyNlbmRpZgotKwotIHZvaWQgRVZQX0NJUEhFUl9DVFhfaW5pdChF VlBfQ0lQSEVSX0NUWCAqY3R4KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3Nl bGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldChjdHgsMCxzaXplb2YoRVZQX0NJUEhF Ul9DVFgpKTsKLSAJLyogY3R4LT5jaXBoZXI9TlVMTDsgKi8KLSAJfQotQEAgLTEwMSw2ICsxNDYs MTQgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAotIAkJCWVuYyA9 IDE7Ci0gCQljdHgtPmVuY3J5cHQgPSBlbmM7Ci0gCQl9Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRVZQ X0NJUEhFUklOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCWN0eC0+Y2lw aGVyID0gJmJhZF9jaXBoZXI7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAjaWZuZGVm IE9QRU5TU0xfTk9fRU5HSU5FCi0gCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRz IiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKLSAJICogc28gdGhpcyBjb250ZXh0 IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5nCi1AQCAt MjE5LDYgKzI3MiwyMiBAQCBza2lwX3RvX2luaXQ6Ci0gCQl9Ci0gCX0KLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCS8qIEFmdGVyICdrZXknIGlzIHNldCBubyBmdXJ0aGVyIHBhcmFtZXRlcnMg Y2hhbmdlcyBhcmUgcGVybWlzc2libGUuCi0rCSAqIFNvIG9ubHkgY2hlY2sgZm9yIG5vbiBGSVBT IGVuYWJsaW5nIGF0IHRoaXMgcG9pbnQuCi0rCSAqLwotKwlpZiAoa2V5ICYmIEZJUFNfbW9kZSgp KQotKwkJewotKwkJaWYgKCEoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19GSVBT KQotKwkJCSYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykpCi0r CQkJewotKwkJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfRElTQUJMRURf Rk9SX0ZJUFMpOwotKwkJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0rCQkJcmV0dXJuIDA7 Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZihrZXkgfHwgKGN0eC0+Y2lwaGVyLT5mbGFn cyAmIEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQpKSB7Ci0gCQlpZighY3R4LT5jaXBoZXItPmlu aXQoY3R4LGtleSxpdixlbmMpKSByZXR1cm4gMDsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2V2cC9ldnBfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2 cF9lcnIuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwX2Vyci5jLmZpcHMJMjAx MC0wMi0wNyAxNDo0MToyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZXZwL2V2cF9lcnIuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAg LTE1NSw2ICsxNTUsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIEVWUF9zdHJfcmVhc29uc1td Ci0ge0VSUl9SRUFTT04oRVZQX1JfREVDT0RFX0VSUk9SKSAgICAgICAgICAsImRlY29kZSBlcnJv ciJ9LAotIHtFUlJfUkVBU09OKEVWUF9SX0RJRkZFUkVOVF9LRVlfVFlQRVMpICAgLCJkaWZmZXJl bnQga2V5IHR5cGVzIn0sCi0ge0VSUl9SRUFTT04oRVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMp ICAsImRpZmZlcmVudCBwYXJhbWV0ZXJzIn0sCi0re0VSUl9SRUFTT04oRVZQX1JfRElTQUJMRURf Rk9SX0ZJUFMpICAgICAsImRpc2FibGVkIGZvciBmaXBzIn0sCi0ge0VSUl9SRUFTT04oRVZQX1Jf RU5DT0RFX0VSUk9SKSAgICAgICAgICAsImVuY29kZSBlcnJvciJ9LAotIHtFUlJfUkVBU09OKEVW UF9SX0VWUF9QQkVfQ0lQSEVSSU5JVF9FUlJPUiksImV2cCBwYmUgY2lwaGVyaW5pdCBlcnJvciJ9 LAotIHtFUlJfUkVBU09OKEVWUF9SX0VYUEVDVElOR19BTl9SU0FfS0VZKSAgLCJleHBlY3Rpbmcg YW4gcnNhIGtleSJ9LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9ldnAuaC5m aXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwLmgKLS0tLSBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vZXZwL2V2cC5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2cC5oCTIwMTAtMDYtMDQgMTI6MjU6MTUu MDAwMDAwMDAwICswMjAwCi1AQCAtNzUsNiArNzUsMTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9i aW8uaD4KLSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNlbmRpZgotKwotIC8qCi0gI2RlZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkx NgotICNkZWZpbmUgRVZQX1JDNF9LRVlfU0laRQkJMTYKLUBAIC0xOTcsNiArMjAxLDggQEAgdHlw ZWRlZiBpbnQgZXZwX3ZlcmlmeV9tZXRob2QoaW50IHR5cGUsYwotIAotICNkZWZpbmUgRVZQX01E X0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFCTB4MDAwNAotIAotKyNkZWZpbmUgRVZQX01EX0ZM QUdfRklQUwkweDA0MDAgLyogTm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAq LwotKwotIC8qIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXIgZmxhZ3MuLi4gKi8KLSAKLSAjZGVm aW5lIEVWUF9NRF9GTEFHX0RJR0FMR0lEX01BU0sJCTB4MDAxOAotQEAgLTI2OSwxMCArMjc1LDYg QEAgc3RydWN0IGVudl9tZF9jdHhfc3QKLSAJCQkJCQkqIGNsZWFuZWQgKi8KLSAjZGVmaW5lIEVW UF9NRF9DVFhfRkxBR19SRVVTRQkJMHgwMDA0IC8qIERvbid0IGZyZWUgdXAgY3R4LT5tZF9kYXRh Ci0gCQkJCQkJKiBpbiBFVlBfTURfQ1RYX2NsZWFudXAgKi8KLS0vKiBGSVBTIGFuZCBwYWQgb3B0 aW9ucyBhcmUgaWdub3JlZCBpbiAxLjAuMCwgZGVmaW5pdGlvbnMgYXJlIGhlcmUKLS0gKiBzbyB3 ZSBkb24ndCBhY2NpZGVudGFsbHkgcmV1c2UgdGhlIHZhbHVlcyBmb3Igb3RoZXIgcHVycG9zZXMu Ci0tICovCi0tCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHgwMDA4 CS8qIEFsbG93IHVzZSBvZiBub24gRklQUyBkaWdlc3QKLSAJCQkJCQkgKiBpbiBGSVBTIG1vZGUg Ki8KLSAKLUBAIC0yODQsNiArMjg2LDEwIEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0Ci0gI2RlZmlu ZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxCTB4MDAJLyogUEtDUyMxIHYxLjUgbW9kZSAqLwot ICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxCTB4MTAJLyogWDkuMzEgbW9kZSAqLwot ICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MJCTB4MjAJLyogUFNTIG1vZGUgKi8KLSsj ZGVmaW5lIE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCkgXAotKwkJKChjdHgtPmZsYWdz Pj4xNikgJjB4RkZGRikgLyogc2VlZCBsZW5ndGggKi8KLSsjZGVmaW5lIEVWUF9NRF9DVFhfRkxB R19QU1NfTURMRU4JMHhGRkZGCS8qIHNhbHQgbGVuIHNhbWUgYXMgZGlnZXN0ICovCi0rI2RlZmlu ZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMJMHhGRkZFCS8qIHNhbHQgbWF4IG9yIGF1dG8gcmVj b3ZlcmVkICovCi0gCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVAkJMHgwMTAwIC8q IERvbid0IGluaXRpYWxpemUgbWRfZGF0YSAqLwotIAotQEAgLTMzMCwxMiArMzM2LDE2IEBAIHN0 cnVjdCBldnBfY2lwaGVyX3N0Ci0gI2RlZmluZSAJRVZQX0NJUEhfTk9fUEFERElORwkJMHgxMDAK LSAvKiBjaXBoZXIgaGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRpb24gKi8KLSAjZGVmaW5lIAlF VlBfQ0lQSF9SQU5EX0tFWQkJMHgyMDAKLS0vKiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25h bCBjb3B5aW5nIGxvZ2ljICovCi0tI2RlZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAw Ci0rLyogTm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLwotKyNkZWZpbmUJ CUVWUF9DSVBIX0ZMQUdfRklQUwkJMHg0MDAKLSsvKiBBbGxvdyBub24gRklQUyBjaXBoZXIgaW4g RklQUyBtb2RlICovCi0rI2RlZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgw MAotIC8qIEFsbG93IHVzZSBkZWZhdWx0IEFTTjEgZ2V0L3NldCBpdiAqLwotICNkZWZpbmUJCUVW UF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xCTB4MTAwMAotIC8qIEJ1ZmZlciBsZW5ndGggaW4gYml0 cyBub3QgYnl0ZXM6IENGQjEgbW9kZSBvbmx5ICovCi0gI2RlZmluZQkJRVZQX0NJUEhfRkxBR19M RU5HVEhfQklUUwkweDIwMDAKLSsvKiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25hbCBjb3B5 aW5nIGxvZ2ljICovCi0rI2RlZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAwMAotIAot IC8qIGN0cmwoKSB2YWx1ZXMgKi8KLSAKLUBAIC0xMjM5LDYgKzEyNDksNyBAQCB2b2lkIEVSUl9s b2FkX0VWUF9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgRVZQX1JfREVDT0RFX0VSUk9SCQkJCSAx MTQKLSAjZGVmaW5lIEVWUF9SX0RJRkZFUkVOVF9LRVlfVFlQRVMJCQkgMTAxCi0gI2RlZmluZSBF VlBfUl9ESUZGRVJFTlRfUEFSQU1FVEVSUwkJCSAxNTMKLSsjZGVmaW5lIEVWUF9SX0RJU0FCTEVE X0ZPUl9GSVBTCQkJCSAxNjAKLSAjZGVmaW5lIEVWUF9SX0VOQ09ERV9FUlJPUgkJCQkgMTE1Ci0g I2RlZmluZSBFVlBfUl9FVlBfUEJFX0NJUEhFUklOSVRfRVJST1IJCQkgMTE5Ci0gI2RlZmluZSBF VlBfUl9FWFBFQ1RJTkdfQU5fUlNBX0tFWQkJCSAxMjcKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9ldnBf bGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBzCTIwMTAt MDEtMjYgMTU6MzM6NTEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2V2cC9ldnBfbGliLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02 Nyw2ICs2Nyw4IEBAIGludCBFVlBfQ0lQSEVSX3BhcmFtX3RvX2FzbjEoRVZQX0NJUEhFUl8KLSAK LSAJaWYgKGMtPmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxMKQotIAkJcmV0PWMt PmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOwotKwllbHNlIGlmIChjLT5jaXBo ZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCi0rCQlyZXQ9RVZQX0NJUEhF Ul9zZXRfYXNuMV9pdihjLCB0eXBlKTsKLSAJZWxzZQotIAkJcmV0PS0xOwotIAlyZXR1cm4ocmV0 KTsKLUBAIC03OCw2ICs4MCw4IEBAIGludCBFVlBfQ0lQSEVSX2FzbjFfdG9fcGFyYW0oRVZQX0NJ UEhFUl8KLSAKLSAJaWYgKGMtPmNpcGhlci0+Z2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxMKQot IAkJcmV0PWMtPmNpcGhlci0+Z2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOwotKwllbHNlIGlm IChjLT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCi0rCQlyZXQ9 RVZQX0NJUEhFUl9nZXRfYXNuMV9pdihjLCB0eXBlKTsKLSAJZWxzZQotIAkJcmV0PS0xOwotIAly ZXR1cm4ocmV0KTsKLUBAIC0xODYsNiArMTkwLDkgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2Jsb2Nr X3NpemUoY29uc3QgRVZQXwotIAotIGludCBFVlBfQ2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgs IHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGlu dCBpbmwpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2so KTsKLSsjZW5kaWYKLSAJcmV0dXJuIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LG91dCxpbixp bmwpOwotIAl9Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2cF9sb2Ns LmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL2V2cF9sb2NsLmgKLS0tLSBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvZXZwX2xvY2wuaAky MDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTI1NCwxNCArMjU0LDMyIEBA IGNvbnN0IEVWUF9DSVBIRVIgKkVWUF8jI2NuYW1lIyNfZWNiKHZvaWQKLSAKLSAjZGVmaW5lIEVW UF9DX0RBVEEoa3N0cnVjdCwgY3R4KQkoKGtzdHJ1Y3QgKikoY3R4KS0+Y2lwaGVyX2RhdGEpCi0g Ci0tI2RlZmluZSBJTVBMRU1FTlRfQ0ZCUihjaXBoZXIsY3ByZWZpeCxrc3RydWN0LGtzY2hlZCxr ZXlzaXplLGNiaXRzLGl2X2xlbikgXAotKyNkZWZpbmUgSU1QTEVNRU5UX0NGQlIoY2lwaGVyLGNw cmVmaXgsa3N0cnVjdCxrc2NoZWQsa2V5c2l6ZSxjYml0cyxpdl9sZW4sZmwpIFwKLSAJQkxPQ0tf Q0lQSEVSX2Z1bmNfY2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxjcHJlZml4LGNiaXRzLGtzdHJ1Y3Qs a3NjaGVkKSBcCi0gCUJMT0NLX0NJUEhFUl9kZWZfY2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxrc3Ry dWN0LCBcCi0gCQkJICAgICBOSURfIyNjaXBoZXIjI18jI2tleXNpemUsIGtleXNpemUvOCwgaXZf bGVuLCBjYml0cywgXAotLQkJCSAgICAgMCwgY2lwaGVyIyNfaW5pdF9rZXksIE5VTEwsIFwKLS0J CQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsIFwKLS0JCQkgICAgIEVWUF9DSVBIRVJfZ2V0 X2FzbjFfaXYsIFwKLS0JCQkgICAgIE5VTEwpCi0rCQkJICAgICAoZmwpfEVWUF9DSVBIX0ZMQUdf REVGQVVMVF9BU04xLCBcCi0rCQkJICAgICBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCkKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2RlZmluZSBSQzJfc2V0X2tl eQlwcml2YXRlX1JDMl9zZXRfa2V5Ci0rI2RlZmluZSBSQzRfc2V0X2tleQlwcml2YXRlX1JDNF9z ZXRfa2V5Ci0rI2RlZmluZSBDQVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKLSsjZGVm aW5lIFJDNV8zMl9zZXRfa2V5CXByaXZhdGVfUkM1XzMyX3NldF9rZXkKLSsjZGVmaW5lIEJGX3Nl dF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5Ci0rI2RlZmluZSBTRUVEX3NldF9rZXkJcHJpdmF0ZV9T RUVEX3NldF9rZXkKLSsjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkgcHJpdmF0ZV9DYW1lbGxpYV9z ZXRfa2V5Ci0rI2RlZmluZSBpZGVhX3NldF9lbmNyeXB0X2tleSBwcml2YXRlX2lkZWFfc2V0X2Vu Y3J5cHRfa2V5Ci0rCi0rI2RlZmluZSBNRDVfSW5pdAlwcml2YXRlX01ENV9Jbml0Ci0rI2RlZmlu ZSBNRDRfSW5pdAlwcml2YXRlX01ENF9Jbml0Ci0rI2RlZmluZSBNRDJfSW5pdAlwcml2YXRlX01E Ml9Jbml0Ci0rI2RlZmluZSBNREMyX0luaXQJcHJpdmF0ZV9NREMyX0luaXQKLSsjZGVmaW5lIFNI QV9Jbml0CXByaXZhdGVfU0hBX0luaXQKLSsjZGVmaW5lIFJJUEVNRDE2MF9Jbml0CXByaXZhdGVf UklQRU1EMTYwX0luaXQKLSsjZGVmaW5lIFdISVJMUE9PTF9Jbml0CXByaXZhdGVfV0hJUkxQT09M X0luaXQKLSsKLSsjZW5kaWYKLSAKLSBzdHJ1Y3QgZXZwX3BrZXlfY3R4X3N0Ci0gCXsKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9ldnAvbV9kc3MuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9kc3Mu Yy5maXBzCTIwMDYtMDQtMTkgMTk6MDU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL2V2cC9tX2Rzcy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICsw MjAwCi1AQCAtODEsNyArODEsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIGRzYV9tZD0KLSAJTklE X2RzYVdpdGhTSEEsCi0gCU5JRF9kc2FXaXRoU0hBLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0J RVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QsCi0rCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9N RF9GTEFHX0ZJUFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWwsCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2V2cC9tX2RzczEuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9kc3MxLmMuZmlw cwkyMDA2LTA0LTE5IDE5OjA1OjU3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9ldnAvbV9kc3MxLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAK LUBAIC04Miw3ICs4Miw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNzMV9tZD0KLSAJTklEX2Rz YSwKLSAJTklEX2RzYVdpdGhTSEExLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZM QUdfUEtFWV9ESUdFU1QsCi0rCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJ UFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWwsCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vZXZwL21fbWRjMi5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX21k YzIuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9tZGMyLmMuZmlwcwkyMDEwLTAy LTAyIDE0OjM2OjA1LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9l dnAvbV9tZGMyLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02OCw2 ICs2OCw3IEBACi0gI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotICNpbmNsdWRlIDxvcGVuc3NsL3Jz YS5oPgotICNlbmRpZgotKyNpbmNsdWRlICJldnBfbG9jbC5oIgotIAotIHN0YXRpYyBpbnQgaW5p dChFVlBfTURfQ1RYICpjdHgpCi0gCXsgcmV0dXJuIE1EQzJfSW5pdChjdHgtPm1kX2RhdGEpOyB9 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZXZwL21fbWQyLmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZw L21fbWQyLmMuZmlwcwkyMDA1LTA3LTE2IDE0OjM3OjMyLjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9tZDIuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAw MDAwMCArMDIwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0g I2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2cF9sb2NsLmgi Ci0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gTUQyX0lu aXQoY3R4LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9t X21kNC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX21kNC5jCi0tLS0gb3BlbnNz bC0xLjAuMGEvY3J5cHRvL2V2cC9tX21kNC5jLmZpcHMJMjAwNS0wNy0xNiAxNDozNzozMi4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fbWQ0LmMJMjAxMC0w Ni0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02OCw2ICs2OCw3IEBACi0gI2lmbmRl ZiBPUEVOU1NMX05PX1JTQQotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotICNlbmRpZgotKyNp bmNsdWRlICJldnBfbG9jbC5oIgotIAotIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgp Ci0gCXsgcmV0dXJuIE1ENF9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9ldnAvbV9tZDUuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAv bV9tZDUuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9tZDUuYy5maXBzCTIwMDUt MDctMTYgMTQ6Mzc6MzIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2V2cC9tX21kNS5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtNjgs NiArNjgsNyBAQAotICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLSAjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KLSAjZW5kaWYKLSsjaW5jbHVkZSAiZXZwX2xvY2wuaCIKLSAKLSBzdGF0aWMgaW50IGlu aXQoRVZQX01EX0NUWCAqY3R4KQotIAl7IHJldHVybiBNRDVfSW5pdChjdHgtPm1kX2RhdGEpOyB9 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fcmlwZW1kLmMuZmlwcyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fcmlwZW1kLmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZXZwL21fcmlwZW1kLmMuZmlwcwkyMDA1LTA3LTE2IDE0OjM3OjMyLjAwMDAwMDAwMCArMDIw MAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbV9yaXBlbWQuYwkyMDEwLTA2LTA0IDEy OjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZuZGVmIE9QRU5T U0xfTk9fUlNBCi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUg ImV2cF9sb2NsLmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyBy ZXR1cm4gUklQRU1EMTYwX0luaXQoY3R4LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL2V2cC9tX3NoYTEuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAv bV9zaGExLmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAw OC0wMy0xMiAyMjoxNDoyNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vZXZwL21fc2hhMS5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAt ODIsNyArODIsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTFfbWQ9Ci0gCU5JRF9zaGExLAot IAlOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQ X01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VO VCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FM R0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJ ZmluYWwsCi1AQCAtMTE5LDcgKzEyMCw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjI0X21k PQotIAlOSURfc2hhMjI0LAotIAlOSURfc2hhMjI0V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTIy NF9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQ X01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdO QVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywK LSAJaW5pdDIyNCwKLSAJdXBkYXRlMjU2LAotIAlmaW5hbDI1NiwKLUBAIC0xMzgsNyArMTQwLDgg QEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyNTZfbWQ9Ci0gCU5JRF9zaGEyNTYsCi0gCU5JRF9z aGEyNTZXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBMjU2X0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9N RF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQs Ci0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJ RF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0MjU2LAotIAl1cGRhdGUyNTYs Ci0gCWZpbmFsMjU2LAotQEAgLTE2OSw3ICsxNzIsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNo YTM4NF9tZD0KLSAJTklEX3NoYTM4NCwKLSAJTklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uLAot IAlTSEEzODRfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFU VVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRI T0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFH X0ZJUFMsCi0gCWluaXQzODQsCi0gCXVwZGF0ZTUxMiwKLSAJZmluYWw1MTIsCi1AQCAtMTg4LDcg KzE5Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhNTEyX21kPQotIAlOSURfc2hhNTEyLAot IAlOSURfc2hhNTEyV2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTUxMl9ESUdFU1RfTEVOR1RILAot LQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURf QUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdf RElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdDUxMiwKLSAJdXBk YXRlNTEyLAotIAlmaW5hbDUxMiwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAv bV93cC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX3dwLmMKLS0tLSBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZXZwL21fd3AuYy5maXBzCTIwMDUtMTEtMzAgMjE6NTc6MjMuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2V2cC9tX3dwLmMJMjAxMC0wNi0w NCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC05LDYgKzksNyBAQAotICNpbmNsdWRlIDxv cGVuc3NsL29iamVjdHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvd2hybHBvb2wuaD4KLSsjaW5jbHVkZSAiZXZwX2xvY2wuaCIKLSAKLSBzdGF0aWMg aW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQotIAl7IHJldHVybiBXSElSTFBPT0xfSW5pdChjdHgt Pm1kX2RhdGEpOyB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL25hbWVzLmMu ZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL25hbWVzLmMKLS0tLSBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vZXZwL25hbWVzLmMuZmlwcwkyMDEwLTAzLTA2IDIxOjQ3OjQ1LjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvbmFtZXMuYwkyMDEwLTA2LTA0IDEy OjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTY2LDYgKzY2LDEwIEBAIGludCBFVlBfYWRkX2Np cGhlcihjb25zdCBFVlBfQ0lQSEVSICpjKQotIAl7Ci0gCWludCByOwotIAotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsjZW5kaWYKLSsKLSAJcj1PQkpf TkFNRV9hZGQoT0JKX25pZDJzbihjLT5uaWQpLE9CSl9OQU1FX1RZUEVfQ0lQSEVSX01FVEgsKGNv bnN0IGNoYXIgKiljKTsKLSAJaWYgKHIgPT0gMCkgcmV0dXJuKDApOwotIAljaGVja19kZWZlcihj LT5uaWQpOwotQEAgLTc5LDYgKzgzLDEwIEBAIGludCBFVlBfYWRkX2RpZ2VzdChjb25zdCBFVlBf TUQgKm1kKQotIAlpbnQgcjsKLSAJY29uc3QgY2hhciAqbmFtZTsKLSAKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Ci0rI2VuZGlmCi0rCi0gCW5hbWU9T0JK X25pZDJzbihtZC0+dHlwZSk7Ci0gCXI9T0JKX05BTUVfYWRkKG5hbWUsT0JKX05BTUVfVFlQRV9N RF9NRVRILChjb25zdCBjaGFyICopbWQpOwotIAlpZiAociA9PSAwKSByZXR1cm4oMCk7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2V2cC9wX3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvcF9z aWduLmMuZmlwcwkyMDA2LTA1LTI0IDE1OjI5OjMwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9ldnAvcF9zaWduLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAw MDAgKzAyMDAKLUBAIC02MSw2ICs2MSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0g I2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAKLSAjaWZkZWYgdW5kZWYKLSB2b2lkIEVWUF9T aWduSW5pdChFVlBfTURfQ1RYICpjdHgsIEVWUF9NRCAqdHlwZSkKLUBAIC0xMDEsNiArMTAyLDIy IEBAIGludCBFVlBfU2lnbkZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zaWcKLSAJCQlnb3RvIGVy cjsKLSAJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4LT5kaWdl c3QpIDw9IDApCi0gCQkJZ290byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhf RkxBR19QQURfWDkzMSkKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0 eCwgUlNBX1g5MzFfUEFERElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQlpZiAoY3R4LT5m bGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTKQotKwkJCXsKLSsJCQlpbnQgc2FsdGxlbjsK LSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BT U19QQURESU5HKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCQlzYWx0bGVuID0gTV9FVlBfTURf Q1RYX0ZMQUdfUFNTX1NBTFQoY3R4KTsKLSsJCQlpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZM QUdfUFNTX01ETEVOKQotKwkJCQlzYWx0bGVuID0gLTE7Ci0rCQkJZWxzZSBpZiAoc2FsdGxlbiA9 PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMpCi0rCQkJCXNhbHRsZW4gPSAtMjsKLSsJCQlpZiAo RVZQX1BLRVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCi0r CQkJCWdvdG8gZXJyOwotKwkJCX0KLSAJCWlmIChFVlBfUEtFWV9zaWduKHBrY3R4LCBzaWdyZXQs ICZzbHRtcCwgbSwgbV9sZW4pIDw9IDApCi0gCQkJZ290byBlcnI7Ci0gCQkqc2lnbGVuID0gc2x0 bXA7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcwkyMDA4LTExLTEyIDA0OjU4OjAxLjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9ldnAvcF92ZXJpZnkuYwkyMDEwLTA2LTA0 IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTYxLDYgKzYxLDcgQEAKLSAjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wveDUwOS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotIAotIGludCBFVlBf VmVyaWZ5RmluYWwoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWdidWYs Ci0gCSAgICAgdW5zaWduZWQgaW50IHNpZ2xlbiwgRVZQX1BLRVkgKnBrZXkpCi1AQCAtODYsNiAr ODcsMjIgQEAgaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbgotIAkJCWdv dG8gZXJyOwotIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgt PmRpZ2VzdCkgPD0gMCkKLSAJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01E X0NUWF9GTEFHX1BBRF9YOTMxKQotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5n KHBrY3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCWlmIChj dHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCi0rCQkJewotKwkJCWludCBzYWx0 bGVuOwotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtD UzFfUFNTX1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJCXNhbHRsZW4gPSBNX0VW UF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOwotKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9D VFhfRkxBR19QU1NfTURMRU4pCi0rCQkJCXNhbHRsZW4gPSAtMTsKLSsJCQllbHNlIGlmIChzYWx0 bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKLSsJCQkJc2FsdGxlbiA9IC0yOwotKwkJ CWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0g MCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJfQotIAkJaSA9IEVWUF9QS0VZX3ZlcmlmeShwa2N0eCwg c2lnYnVmLCBzaWdsZW4sIG0sIG1fbGVuKTsKLSAJCWVycjoKLSAJCUVWUF9QS0VZX0NUWF9mcmVl KHBrY3R4KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19h ZXNhdnMuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMu YwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYy5maXBz CTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAw MDAwICswMjAwCi1AQCAtMCwwICsxLDkzOSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJp Z2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot KyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcu Ci0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwot Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBOSVNU IEFFUyBBbGdvcml0aG0gVmFsaWRhdGlvbiBTdWl0ZQotKyAgVGVzdCBQcm9ncmFtCi0rCi0rICBE b25hdGVkIHRvIE9wZW5TU0wgYnk6Ci0rICBWLU9ORSBDb3Jwb3JhdGlvbgotKyAgMjAyNTAgQ2Vu dHVyeSBCbHZkLCBTdWl0ZSAzMDAKLSsgIEdlcm1hbnRvd24sIE1EIDIwODc0Ci0rICBVLlMuQS4K LSsgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwot KyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPGVycm5vLmg+Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNs dWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+Ci0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwot KwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5v IEZJUFMgQUVTIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0r Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwot KyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUgMTYKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotK2lu dCBBRVNUZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFr ZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAK LSsJICAgIGludCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVu c2lnbmVkIGNoYXIgKnBsYWludGV4dCwgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwgaW50IGxl bikKLSsgICAgewotKyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOwotKwotKyAg ICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5 c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOwot KwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygp OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2Ni YygpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0rCX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChh bW9kZSwgIkVDQiIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNl IDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQlj YXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2VjYigpOwotKwkJYnJlYWs7Ci0rCi0r CQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2VjYigpOwotKwkJYnJlYWs7Ci0r CQl9Ci0rCX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjEyOCIpID09IDAp Ci0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9 IEVWUF9hZXNfMTI4X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNp cGhlciA9IEVWUF9hZXNfMTkyX2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoK LSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0r CX0KLSsgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQotKwl7 Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBf YWVzXzEyOF9vZmIoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBF VlBfYWVzXzE5Ml9vZmIoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIg PSBFVlBfYWVzXzI1Nl9vZmIoKTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UgaWYo IXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsK LSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMSgpOwotKwkJYnJlYWs7 Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjEoKTsKLSsJCWJy ZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxKCk7Ci0r CQlicmVhazsKLSsJCX0KLSsJfQotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4 IikpCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhl ciA9IEVWUF9hZXNfMTI4X2NmYjgoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQlj aXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmI4KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2Ogot KwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsg ICAgZWxzZQotKwl7Ci0rCXByaW50ZigiVW5rbm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwly ZXR1cm4gMDsKLSsJfQotKyAgICBpZiAoIWNpcGhlcikKLSsJewotKwlwcmludGYoIkludmFsaWQg a2V5IHNpemU6ICVkXG4iLCBha2V5c3opOwotKwlyZXR1cm4gMDsgCi0rCX0KLSsgICAgaWYgKEVW UF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDAp Ci0rCXJldHVybiAwOwotKyAgICBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwlNX0VW UF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOwot KyAgICBpZiAoZGlyKQotKwkJRVZQX0NpcGhlcihjdHgsIGNpcGhlcnRleHQsIHBsYWludGV4dCwg bGVuKTsKLSsJZWxzZQotKwkJRVZQX0NpcGhlcihjdHgsIHBsYWludGV4dCwgY2lwaGVydGV4dCwg bGVuKTsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5U RVhUIiwgIkNJUEhFUlRFWFQifTsKLStjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9G QiIsIkNGQjEiLCJDRkI4IiwiQ0ZCMTI4In07Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBD RkIxLCBDRkI4LCBDRkIxMjh9OwotK2VudW0gWENyeXB0IHtYREVDUllQVCwgWEVOQ1JZUFR9Owot KwotKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotKy8qICBNb250ZSBDYXJsbyBU ZXN0cyAgICAgICAgICAqLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwot Ky8qI2RlZmluZSBnYihhLGIpICgoKGEpWyhiKS84XSA+PiAoKGIpJTgpKSYxKSovCi0rLyojZGVm aW5lIHNiKGEsYix2KSAoKGEpWyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKChiKSU4KSkpfCgh ISh2KSA8PCAoKGIpJTgpKSkqLwotKwotKyNkZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4g KDctKGIpJTgpKSYxKQotKyNkZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhd Jn4oMSA8PCAoNy0oYiklOCkpKXwoISEodikgPDwgKDctKGIpJTgpKSkKLSsKLStpbnQgZG9fbWN0 KGNoYXIgKmFtb2RlLCAKLSsJICAgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSx1bnNp Z25lZCBjaGFyICppVmVjLAotKwkgICBpbnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQg bGVuLAotKwkgICBGSUxFICpyZnApCi0rICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVu c2lnbmVkIGNoYXIga2V5WzEwMV1bMzJdOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2WzEwMV1bQUVT X0JMT0NLX1NJWkVdOwotKyAgICB1bnNpZ25lZCBjaGFyIHB0ZXh0WzEwMDFdWzMyXTsKLSsgICAg dW5zaWduZWQgY2hhciBjdGV4dFsxMDAxXVszMl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVy dGV4dFs2NCs0XTsKLSsgICAgaW50IGksIGosIG4sIG4xLCBuMjsKLSsgICAgaW50IGltb2RlID0g MCwgbmtleXN6ID0gYWtleXN6Lzg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQ X0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKGxlbiA+IDMyKQotKwl7Ci0rCXBy aW50ZigiXG4+Pj4+IExlbmd0aCBleGNlZWRzIDMyIGZvciAlcyAlZCA8PDw8XG5cbiIsIAotKwkg ICAgICAgYW1vZGUsIGFrZXlzeik7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBmb3IgKGltb2Rl ID0gMDsgaW1vZGUgPCA2OyArK2ltb2RlKQotKwlpZiAoc3RyY21wKGFtb2RlLCB0X21vZGVbaW1v ZGVdKSA9PSAwKQotKwkgICAgYnJlYWs7Ci0rICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlw cmludGYoIlVucmVjb2duaXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gLTE7Ci0r CX0KLSsKLSsgICAgbWVtY3B5KGtleVswXSwgYUtleSwgbmtleXN6KTsKLSsgICAgaWYgKGlWZWMp Ci0rCW1lbWNweShpdlswXSwgaVZlYywgQUVTX0JMT0NLX1NJWkUpOwotKyAgICBpZiAoZGlyID09 IFhFTkNSWVBUKQotKwltZW1jcHkocHRleHRbMF0sIHRleHQsIGxlbik7Ci0rICAgIGVsc2UKLSsJ bWVtY3B5KGN0ZXh0WzBdLCB0ZXh0LCBsZW4pOwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwOyAr K2kpCi0rCXsKLSsJLyogcHJpbnRmKCJJdGVyYXRpb24gJWRcbiIsIGkpOyAqLwotKwlpZiAoaSA+ IDApCi0rCSAgICB7Ci0rCSAgICBmcHJpbnRmKHJmcCwiQ09VTlQgPSAlZFxuIixpKTsKLSsJICAg IE91dHB1dFZhbHVlKCJLRVkiLGtleVtpXSxua2V5c3oscmZwLDApOwotKwkgICAgaWYgKGltb2Rl ICE9IEVDQikgIC8qIEVDQiAqLwotKwkJT3V0cHV0VmFsdWUoIklWIixpdltpXSxBRVNfQkxPQ0tf U0laRSxyZnAsMCk7Ci0rCSAgICAvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLwot KwkgICAgT3V0cHV0VmFsdWUodF90YWdbZGlyXjFdLGRpciA/IHB0ZXh0WzBdIDogY3RleHRbMF0s bGVuLHJmcCwKLSsJCQlpbW9kZSA9PSBDRkIxKTsKLSsJICAgIH0KLSsJZm9yIChqID0gMDsgaiA8 IDEwMDA7ICsraikKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBj YXNlIEVDQjoKLSsJCWlmIChqID09IDApCi0rCQkgICAgeyAvKiBzZXQgdXAgZW5jcnlwdGlvbiAq LwotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBOVUxM LCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBw dGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJ CQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1l bWNweShjdGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkg ICAgewotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJewotKwkJCUVWUF9DaXBoZXIo JmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBj dGV4dFtqXSwgbGVuKTsKLSsJCQl9Ci0rCQkgICAgZWxzZQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVy KCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCQltZW1jcHkoY3RleHRbaisxXSwg cHRleHRbal0sIGxlbik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2Fz ZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjogIAotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQlpZiAoaiA9 PSAwKQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3os IGtleVtpXSwgaXZbaV0sIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLwotKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICBpZiAoZGlyID09 IFhFTkNSWVBUKQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBpdltpXSwgbGVuKTsKLSsJCSAgICBl bHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIGl2W2ldLCBsZW4pOwotKwkJICAgIH0KLSsJCWVs c2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQl7Ci0rCQkJRVZQ X0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KHB0ZXh0 W2orMV0sIGN0ZXh0W2otMV0sIGxlbik7Ci0rCQkJfQotKwkJICAgIGVsc2UKLSsJCQl7Ci0rCQkJ RVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KGN0 ZXh0W2orMV0sIHB0ZXh0W2otMV0sIGxlbik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwot KwotKwkgICAgY2FzZSBDRkI4OgotKwkJaWYgKGogPT0gMCkKLSsJCSAgICB7Ci0rCQkgICAgcmV0 ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKLSsJCQkJICBk aXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3Rl eHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGly ID09IFhFTkNSWVBUKQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBs ZW4pOwotKwkJICAgIGVsc2UKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtq XSwgbGVuKTsKLSsJCSAgICB9Ci0rCQlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJICAgIHsKLSsJ CSAgICBpZiAoaiA8IDE2KQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7 Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqLTE2XSwgbGVuKTsK LSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChqIDwgMTYpCi0rCQkJbWVt Y3B5KGN0ZXh0W2orMV0sICZpdltpXVtqXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5 KGN0ZXh0W2orMV0sIHB0ZXh0W2otMTZdLCBsZW4pOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwot KwkgICAgY2FzZSBDRkIxOgotKwkJaWYoaiA9PSAwKQotKwkJICAgIHsKLSsjaWYgMAotKwkJICAg IC8qIGNvbXBlbnNhdGUgZm9yIHdyb25nIGVuZGlhbm5lc3Mgb2YgaW5wdXQgZmlsZSAqLwotKwkJ ICAgIGlmKGkgPT0gMCkKLSsJCQlwdGV4dFswXVswXTw8PTc7Ci0rI2VuZGlmCi0rCQkgICAgcmV0 ID0gQUVTVGVzdCgmY3R4LGFtb2RlLGFrZXlzeixrZXlbaV0saXZbaV0sZGlyLAotKwkJCQlwdGV4 dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAg ICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0 ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pd LCBjdGV4dFtqXSwgbGVuKTsKLSsKLSsJCSAgICB9Ci0rCQlpZihkaXIgPT0gWEVOQ1JZUFQpCi0r CQkgICAgewotKwkJICAgIGlmKGogPCAxMjgpCi0rCQkJc2IocHRleHRbaisxXSwwLGdiKGl2W2ld LGopKTsKLSsJCSAgICBlbHNlCi0rCQkJc2IocHRleHRbaisxXSwwLGdiKGN0ZXh0W2otMTI4XSww KSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZihqIDwgMTI4KQotKwkJ CXNiKGN0ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7Ci0rCQkgICAgZWxzZQotKwkJCXNiKGN0ZXh0 W2orMV0sMCxnYihwdGV4dFtqLTEyOF0sMCkpOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQot KwkgICAgfQotKwktLWo7IC8qIHJlc2V0IHRvIGxhc3Qgb2YgcmFuZ2UgKi8KLSsJLyogT3V0cHV0 IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8KLSsJT3V0cHV0VmFsdWUodF90YWdbZGlyXSxkaXIg PyBjdGV4dFtqXSA6IHB0ZXh0W2pdLGxlbixyZnAsCi0rCQkgICAgaW1vZGUgPT0gQ0ZCMSk7Ci0r CWZwcmludGYocmZwLCAiXG4iKTsgIC8qIGFkZCBzZXBhcmF0b3IgKi8KLSsKLSsJLyogQ29tcHV0 ZSBuZXh0IEtFWSAqLwotKwlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgaWYg KGltb2RlID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4u IHx8IENUW2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7 ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtuMV0gPSBjdGV4dFtqLW4yXVswXTsKLSsJ CX0KLSsJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0wLG4yPWFr ZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIpCi0rCQkgICAgc2IoY2lwaGVydGV4dCxu MSxnYihjdGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlz eikKLSsJCSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3Rl eHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMTkyOgotKwkJICAgIG1lbWNweShj aXBoZXJ0ZXh0LCBjdGV4dFtqLTFdKzgsIDgpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0Kzgs IGN0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAgICBtZW1j cHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSwgMTYpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0 KzE2LCBjdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJICAgIH0KLSsJ ZWxzZQotKwkgICAgewotKwkgICAgaWYgKGltb2RlID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rb ai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIg PSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtu MV0gPSBwdGV4dFtqLW4yXVswXTsKLSsJCX0KLSsJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkK LSsJCXsKLSsJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIp Ci0rCQkgICAgc2IoY2lwaGVydGV4dCxuMSxnYihwdGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAg ICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlzeikKLSsJCSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAg ICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNh c2UgMTkyOgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqLTFdKzgsIDgpOwotKwkJ ICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIHB0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0r CQljYXNlIDI1NjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbai0xXSwgMTYpOwot KwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBwdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFr OwotKwkJICAgIH0KLSsJICAgIH0KLSsJLyogQ29tcHV0ZSBuZXh0IGtleTogS2V5W2krMV0gPSBL ZXlbaV0geG9yIGN0ICovCi0rCWZvciAobiA9IDA7IG4gPCBua2V5c3o7ICsrbikKLSsJICAgIGtl eVtpKzFdW25dID0ga2V5W2ldW25dIF4gY2lwaGVydGV4dFtuXTsKLSsJCi0rCS8qIENvbXB1dGUg bmV4dCBJViBhbmQgdGV4dCAqLwotKwlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkg ICAgc3dpdGNoIChpbW9kZSkKLSsJCXsKLSsJICAgIGNhc2UgRUNCOgotKwkJbWVtY3B5KHB0ZXh0 WzBdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENC QzoKLSsJICAgIGNhc2UgT0ZCOgotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQltZW1jcHkoaXZbaSsx XSwgY3RleHRbal0sIEFFU19CTE9DS19TSVpFKTsKLSsJCW1lbWNweShwdGV4dFswXSwgY3RleHRb ai0xXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjg6Ci0rCQkv KiBJVltpKzFdID0gY3QgKi8KLSsJCWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24x LCAtLW4yKQotKwkJICAgIGl2W2krMV1bbjFdID0gY3RleHRbai1uMl1bMF07Ci0rCQlwdGV4dFsw XVswXSA9IGN0ZXh0W2otMTZdWzBdOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjE6Ci0rCQlm b3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikKLSsJCSAgICBzYihpdltpKzFd LG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKLSsJCXB0ZXh0WzBdWzBdPWN0ZXh0W2otMTI4XVswXSYw eDgwOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN3 aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJCW1lbWNweShjdGV4dFswXSwg cHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDQkM6Ci0r CSAgICBjYXNlIE9GQjoKLSsJICAgIGNhc2UgQ0ZCMTI4OgotKwkJbWVtY3B5KGl2W2krMV0sIHB0 ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2otMV0s IEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkI4OgotKwkJZm9yIChu MSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsrbjEsIC0tbjIpCi0rCQkgICAgaXZbaSsxXVtuMV0g PSBwdGV4dFtqLW4yXVswXTsKLSsJCWN0ZXh0WzBdWzBdID0gcHRleHRbai0xNl1bMF07Ci0rCQli cmVhazsKLSsJICAgIGNhc2UgQ0ZCMToKLSsJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsg KytuMSwtLW4yKQotKwkJICAgIHNiKGl2W2krMV0sbjEsZ2IocHRleHRbai1uMl0sMCkpOwotKwkJ Y3RleHRbMF1bMF09cHRleHRbai0xMjhdWzBdJjB4ODA7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAg IH0KLSsJfQotKyAgICAKLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8qPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSsvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLSsgICMgQ29uZmlnIGluZm8gZm9yIHYtb25lCi0rICAjIEFFU1ZT IE1NVCB0ZXN0IGRhdGEgZm9yIEVDQgotKyAgIyBTdGF0ZSA6IEVuY3J5cHQgYW5kIERlY3J5cHQK LSsgICMgS2V5IExlbmd0aCA6IDI1NgotKyAgIyBGcmkgQXVnIDMwIDA0OjA3OjIyIFBNCi0rICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLStpbnQgcHJvY19maWxlKGNoYXIgKnJx ZmlsZSwgY2hhciAqcnNwZmlsZSkKLSsgICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2 XTsKLSsgICAgRklMRSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1Zlsy MDQ4XTsKLSsgICAgY2hhciB0YnVmWzIwNDhdOwotKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAw OwotKyAgICBjaGFyIGFsZ29bOF0gPSAiIjsKLSsgICAgY2hhciBhbW9kZVs4XSA9ICIiOwotKyAg ICBjaGFyIGF0ZXN0WzhdID0gIiI7Ci0rICAgIGludCBha2V5c3ogPSAwOwotKyAgICB1bnNpZ25l ZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKLSsgICAgaW50IGRpciA9IC0xLCBlcnIgPSAwLCBz dGVwID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07Ci0rICAgIHVuc2ln bmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKLSsgICAgY2hhciAqcnA7Ci0rICAgIEVWUF9DSVBI RVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYg KCFycWZpbGUgfHwgISgqcnFmaWxlKSkKLSsJewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsK LSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIHN0cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlm ICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90 IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsK LSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIGlmICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZu LGFmbik7Ci0rCXJwPXN0cnN0cihyZm4sInJlcS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lO MzIKLSsJaWYgKCFycCkKLSsJICAgIHJwPXN0cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0r CWFzc2VydChycCk7Ci0rCW1lbWNweShycCwicnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAi LnJlcSIpOwotKwltZW1jcHkocnAsICIucnNwIiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0K LSsgICAgaWYgKChyZnAgPSBmb3Blbihyc3BmaWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXBy aW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJy b3IoZXJybm8pKTsKLSsJZmNsb3NlKGFmcCk7Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsK LSsJfQotKyAgICB3aGlsZSAoIWVyciAmJiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnAp KSAhPSBOVUxMKQotKwl7Ci0rCXRpZHlfbGluZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxl bihpYnVmKTsKLSsJLyogICAgICBwcmludGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsg Ki8KLSsJc3dpdGNoIChzdGVwKQotKwkgICAgewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxl ICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUg Ki8KLSsJCWlmICgoKmFsZ28gPT0gJ1wwJykgfHwKLSsJCSAgICAoKmFtb2RlID09ICdcMCcpIHx8 Ci0rCQkgICAgKGFrZXlzeiA9PSAwKSkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJNaXNzaW5n IEFsZ29yaXRobSwgTW9kZSBvciBLZXlTaXplICglcy8lcy8lZClcbiIsCi0rCQkJICAgYWxnbyxh bW9kZSxha2V5c3opOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAg IHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAgfQot KwkJfQotKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYoIklu dmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJ ICAgIGVsc2UKLSsJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpwcCA9 IGlidWYrMjsKLSsJCWludCBuOwotKwkJaWYgKGFrZXlzeikKLSsJCSAgICB7IC8qIGluc2VydCBj dXJyZW50IHRpbWUgJiBkYXRlICovCi0rCQkgICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOwotKwkJ ICAgIGZwcmludGYocmZwLCAiIyAlcyIsIGN0aW1lKCZydGltKSk7Ci0rCQkgICAgfQotKwkJZWxz ZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgIGlmIChzdHJuY21w KHBwLCAiQUVTVlMgIiwgNikgPT0gMCkKLSsJCQl7Ci0rCQkJc3RyY3B5KGFsZ28sICJBRVMiKTsK LSsJCQkvKiBnZXQgdGVzdCB0eXBlICovCi0rCQkJcHAgKz0gNjsKLSsJCQl4cCA9IHN0cmNocihw cCwgJyAnKTsKLSsJCQluID0geHAtcHA7Ci0rCQkJc3RybmNweShhdGVzdCwgcHAsIG4pOwotKwkJ CWF0ZXN0W25dID0gJ1wwJzsKLSsJCQkvKiBnZXQgbW9kZSAqLwotKwkJCXhwID0gc3RycmNocihw cCwgJyAnKTsgLyogZ2V0IG1vZGUiICovCi0rCQkJbiA9IHN0cmxlbih4cCsxKS0xOwotKwkJCXN0 cm5jcHkoYW1vZGUsIHhwKzEsIG4pOwotKwkJCWFtb2RlW25dID0gJ1wwJzsKLSsJCQkvKiBhbW9k ZVszXSA9ICdcMCc7ICovCi0rCQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50ZigiVGVzdCA9ICVz LCBNb2RlID0gJXNcbiIsIGF0ZXN0LCBhbW9kZSk7Ci0rCQkJfQotKwkJICAgIGVsc2UgaWYgKHN0 cm5jYXNlY21wKHBwLCAiS2V5IExlbmd0aCA6ICIsIDEzKSA9PSAwKQotKwkJCXsKLSsJCQlha2V5 c3ogPSBhdG9pKHBwKzEzKTsKLSsJCQlpZiAoVkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJLZXkgc2l6 ZSA9ICVkXG4iLCBha2V5c3opOwotKwkJCX0KLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBicmVhazsK LSsKLSsJY2FzZSAxOiAgLyogW0VOQ1JZUFRdIHwgW0RFQ1JZUFRdICovCi0rCSAgICBpZiAoaWJ1 ZlswXSA9PSAnWycpCi0rCQl7Ci0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJKytzdGVwOwotKwkJ aWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9 IDE7Ci0rCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkK LSsJCSAgICBkaXIgPSAwOwotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFs aWQga2V5d29yZDogJXNcbiIsIGlidWYpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJ YnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCi0rCQl7Ci0rCQllcnIgPSAx OwotKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsKLSsJCWJy ZWFrOwotKwkJfQotKwkgICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwotKwotKwljYXNlIDI6IC8qIEtF WSA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZigqaWJ1ZiA9PSAn XG4nKQotKwkJYnJlYWs7Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgp KQotKwkJYnJlYWs7Ci0rCi0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIktFWSA9ICIsIDYp ICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0r CQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFL ZXkpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBL RVlcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmlu dFZhbHVlKCJLRVkiLCBhS2V5LCBsZW4pOwotKwkJaWYgKHN0cmNtcChhbW9kZSwgIkVDQiIpID09 IDApCi0rCQkgICAgewotKwkJICAgIG1lbXNldChpVmVjLCAwLCBzaXplb2YoaVZlYykpOwotKwkJ ICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAqLwotKwkJICAgIH0K LSsJCWVsc2UKLSsJCSAgICArK3N0ZXA7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAz OiAvKiBJViA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3Ry bmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2lu ZyBJVlxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJbGVuID0g aGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsK LSsJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBi cmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7Ci0rCQlzdGVw ID0gKGRpcik/IDQ6IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA0OiAvKiBQTEFJ TlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5j YXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKLSsJCXsKLSsJCXByaW50Zigi TWlzc2luZyBQTEFJTlRFWFRcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJ CXsKLSsJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNG QjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4dCk7Ci0rCQll bHNlCi0rCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKLSsJCWlmIChsZW4g PCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIsIGli dWYrMTIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlpZiAo bGVuID49IHNpemVvZihwbGFpbnRleHQpKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkJ1ZmZl ciBvdmVyZmxvd1xuIik7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwgKHVu c2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1Qi KSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBpZihkb19t Y3QoYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJICAgICAgZGlyLCAodW5zaWduZWQg Y2hhciopcGxhaW50ZXh0LCBsZW4sIAotKwkJCSAgICAgIHJmcCkgPCAwKQotKwkJCUVYSVQoMSk7 Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgs IGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0 LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJ CSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAotKwkJCQkh c3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkg ICAgYnJlYWs7Ci0rCi0rCWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KLSsJICAgIGZw dXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQg PSAiLCAxMykgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJy ID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEi KSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0 ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7 Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhF UlRFWFRcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCi0r CQlQcmludFZhbHVlKCJDSVBIRVJURVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJj bXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsK LSsJCSAgICBkb19tY3QoYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJICAgZGlyLCBj aXBoZXJ0ZXh0LCBsZW4sIHJmcCk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAg ICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkg IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwg Y2lwaGVydGV4dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWdu ZWQgY2hhciAqKXBsYWludGV4dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikp OwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2Ug NjoKLSsJICAgIGlmIChpYnVmWzBdICE9ICdcbicpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJp bnRmKCJNaXNzaW5nIHRlcm1pbmF0b3JcbiIpOwotKwkJfQotKwkgICAgZWxzZSBpZiAoc3RyY21w KGF0ZXN0LCAiTUNUIikgIT0gMCkKLSsJCXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRp bmcgbmwgKi8KLSsJCWZwdXRzKGlidWYsIHJmcCk7Ci0rCQl9Ci0rCSAgICBzdGVwID0gMTsKLSsJ ICAgIGJyZWFrOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChyZnApCi0rCWZjbG9zZShyZnApOwot KyAgICBpZiAoYWZwKQotKwlmY2xvc2UoYWZwKTsKLSsgICAgcmV0dXJuIGVycjsKLSsgICAgfQot KwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSsgIFByb2Nlc3NlcyBlaXRoZXIgYSBzaW5nbGUgZmlsZSBvciAKLSsgIGEgc2V0IG9mIGZpbGVz IHdob3NlIG5hbWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxlLgotKyAgQSBzaW5nbGUgZmlsZSBpcyBz cGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1mIHh4eC5yZXEKLSsgIEEgc2V0IG9mIGZpbGVz IGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVzX3Rlc3QgLWQgeHh4eHgueHh4Ci0rICBUaGUgZGVm YXVsdCBpczogLWQgcmVxLnR4dAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rICAg IHsKLSsgICAgY2hhciAqcnFsaXN0ID0gInJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7Ci0rICAg IEZJTEUgKmZwID0gTlVMTDsKLSsgICAgY2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7 Ci0rICAgIGludCBmX29wdCA9IDAsIGRfb3B0ID0gMTsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwot KwlFWElUKDEpOwotKwl9Ci0rI2VuZGlmCi0rICAgIGlmIChhcmdjID4gMSkKLSsJewotKwlpZiAo c3RyY2FzZWNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKQotKwkgICAgewotKwkgICAgZF9vcHQgPSAx OwotKwkgICAgfQotKwllbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCi0r CSAgICB7Ci0rCSAgICBmX29wdCA9IDE7Ci0rCSAgICBkX29wdCA9IDA7Ci0rCSAgICB9Ci0rCWVs c2UKLSsJICAgIHsKLSsJICAgIHByaW50ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2 WzFdKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwlpZiAoYXJnYyA8IDMpCi0rCSAgICB7 Ci0rCSAgICBwcmludGYoIk1pc3NpbmcgcGFyYW1ldGVyXG4iKTsKLSsJICAgIHJldHVybiAwOwot KwkgICAgfQotKwlpZiAoZF9vcHQpCi0rCSAgICBycWxpc3QgPSBhcmd2WzJdOwotKwllbHNlCi0r CSAgICB7Ci0rCSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0pOwotKwkgICAgcnNwZmlsZSA9IGFyZ3Zb M107Ci0rCSAgICB9Ci0rCX0KLSsgICAgaWYgKGRfb3B0KQotKwl7IC8qIGxpc3Qgb2YgZmlsZXMg KGRpcmVjdG9yeSkgKi8KLSsJaWYgKCEoZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQotKwkgICAg ewotKwkgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKLSsJICAgIHJl dHVybiAtMTsKLSsJICAgIH0KLSsJd2hpbGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCi0r CSAgICB7Ci0rCSAgICBzdHJ0b2soZm4sICJcclxuIik7Ci0rCSAgICBzdHJjcHkocmZuLCBmbik7 Ci0rCSAgICBpZiAoVkVSQk9TRSkKLSsJCXByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7 Ci0rCSAgICBpZiAocHJvY19maWxlKHJmbiwgcnNwZmlsZSkpCi0rCQl7Ci0rCQlwcmludGYoIj4+ PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgcmZuKTsKLSsJCUVYSVQoMSk7Ci0r CQl9Ci0rCSAgICB9Ci0rCWZjbG9zZShmcCk7Ci0rCX0KLSsgICAgZWxzZSAvKiBzaW5nbGUgZmls ZSAqLwotKwl7Ci0rCWlmIChWRVJCT1NFKQotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xu IiwgZm4pOwotKwlpZiAocHJvY19maWxlKGZuLCByc3BmaWxlKSkKLSsJICAgIHsKLSsJICAgIHBy aW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCBmbik7Ci0rCSAgICB9 Ci0rCX0KLSsgICAgRVhJVCgwKTsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMu ZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCi0tLS0g b3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5maXBzCTIwMTAt MDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAotQEAgLTAsMCArMSw3MDIgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAo YykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgTklTVCBERVMg TW9kZXMgb2YgT3BlcmF0aW9uIFZhbGlkYXRpb24gU3lzdGVtCi0rICBUZXN0IFByb2dyYW0KLSsK LSsgIEJhc2VkIG9uIHRoZSBBRVMgVmFsaWRhdGlvbiBTdWl0ZSwgd2hpY2ggd2FzOgotKyAgRG9u YXRlZCB0byBPcGVuU1NMIGJ5OgotKyAgVi1PTkUgQ29ycG9yYXRpb24KLSsgIDIwMjUwIENlbnR1 cnkgQmx2ZCwgU3VpdGUgMzAwCi0rICBHZXJtYW50b3duLCBNRCAyMDg3NAotKyAgVS5TLkEuCi0r ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSsj aW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVk ZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsK LStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBG SVBTIERFUyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSsj ZGVmaW5lIERFU19CTE9DS19TSVpFIDgKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotK2ludCBE RVNUZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlz eiwgdW5zaWduZWQgY2hhciAqYUtleSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKLSsJ ICAgIGludCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVuc2ln bmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBsZW4pCi0rICAgIHsKLSsgICAg Y29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKLSsKLSsgICAgaWYgKGFrZXlzeiAhPSAx OTIpCi0rCXsKLSsJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKLSsJ RVhJVCgxKTsKLSsJfQotKwotKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDAp Ci0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsKLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNt cChhbW9kZSwgIkVDQiIpID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19lY2IoKTsKLSsg ICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjY0IikgPT0gMCkKLSsJY2lwaGVyID0g RVZQX2Rlc19lZGUzX2NmYjY0KCk7Ci0rICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAi T0ZCIiwgMykgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX29mYigpOwotKyAgICBlbHNl IGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19j ZmI4KCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJY2lwaGVy ID0gRVZQX2Rlc19lZGUzX2NmYjEoKTsKLSsgICAgZWxzZQotKwl7Ci0rCXByaW50ZigiVW5rbm93 biBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGlmIChFVlBf Q2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQot KwlyZXR1cm4gMDsKLSsgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJTV9FVlBf Q0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKLSsg ICAgRVZQX0NpcGhlcihjdHgsIG91dCwgaW4sIGxlbik7Ci0rCi0rICAgIHJldHVybiAxOwotKyAg ICB9Ci0rCi0rdm9pZCBEZWJ1Z1ZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBp bnQgbGVuKQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsgICAgaW50IG9sZW47Ci0r ICAgIG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsKLSsgICAgcHJpbnRmKCIlcyA9ICUu KnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7Ci0rICAgIH0KLSsKLSt2b2lkIHNoaWZ0aW4odW5zaWdu ZWQgY2hhciAqZHN0LHVuc2lnbmVkIGNoYXIgKnNyYyxpbnQgbmJpdHMpCi0rICAgIHsKLSsgICAg aW50IG47Ci0rCi0rICAgIC8qIG1vdmUgdGhlIGJ5dGVzLi4uICovCi0rICAgIG1lbW1vdmUoZHN0 LGRzdCtuYml0cy84LDMqOC1uYml0cy84KTsKLSsgICAgLyogYXBwZW5kIG5ldyBkYXRhICovCi0r ICAgIG1lbWNweShkc3QrMyo4LW5iaXRzLzgsc3JjLChuYml0cys3KS84KTsKLSsgICAgLyogbGVm dCBzaGlmdCB0aGUgYml0cyAqLwotKyAgICBpZihuYml0cyU4KQotKwlmb3Iobj0wIDsgbiA8IDMq OCA7ICsrbikKLSsJICAgIGRzdFtuXT0oZHN0W25dIDw8IChuYml0cyU4KSl8KGRzdFtuKzFdID4+ ICg4LW5iaXRzJTgpKTsKLSsgICAgfQkKLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwg IkNJUEhFUlRFWFQifTsKLStjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNG QjEiLCJDRkI4IiwiQ0ZCNjQifTsKLStlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENG QjgsIENGQjY0fTsKLStpbnQgU2l6ZXNbNl09ezY0LDY0LDY0LDEsOCw2NH07Ci0rCi0rdm9pZCBk b19tY3QoY2hhciAqYW1vZGUsIAotKwkgICAgaW50IGFrZXlzeiwgaW50IG51bWtleXMsIHVuc2ln bmVkIGNoYXIgKmFrZXksdW5zaWduZWQgY2hhciAqaXZlYywKLSsJICAgIGludCBkaXIsIHVuc2ln bmVkIGNoYXIgKnRleHQsIGludCBsZW4sCi0rCSAgICBGSUxFICpyZnApCi0rICAgIHsKLSsgICAg aW50IGksaW1vZGU7Ci0rICAgIHVuc2lnbmVkIGNoYXIgbmtbNCo4XTsgLyogbG9uZ2VzdCBrZXkr OCAqLwotKyAgICB1bnNpZ25lZCBjaGFyIHRleHQwWzhdOwotKwotKyAgICBmb3IgKGltb2RlPTAg OyBpbW9kZSA8IDYgOyArK2ltb2RlKQotKwlpZighc3RyY21wKGFtb2RlLHRfbW9kZVtpbW9kZV0p KQotKwkgICAgYnJlYWs7Ci0rICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlwcmludGYoIlVu cmVjb2duaXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAg IGZvcihpPTAgOyBpIDwgNDAwIDsgKytpKQotKwl7Ci0rCWludCBqOwotKwlpbnQgbjsKLSsJaW50 IGtwPWFrZXlzei82NDsKLSsJdW5zaWduZWQgY2hhciBvbGRfaXZbOF07Ci0rCUVWUF9DSVBIRVJf Q1RYIGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJZnByaW50ZihyZnAs IlxuQ09VTlQgPSAlZFxuIixpKTsKLSsJaWYoa3AgPT0gMSkKLSsJICAgIE91dHB1dFZhbHVlKCJL RVkiLGFrZXksOCxyZnAsMCk7Ci0rCWVsc2UKLSsJICAgIGZvcihuPTAgOyBuIDwga3AgOyArK24p Ci0rCQl7Ci0rCQlmcHJpbnRmKHJmcCwiS0VZJWQiLG4rMSk7Ci0rCQlPdXRwdXRWYWx1ZSgiIixh a2V5K24qOCw4LHJmcCwwKTsKLSsJCX0KLSsKLSsJaWYoaW1vZGUgIT0gRUNCKQotKwkgICAgT3V0 cHV0VmFsdWUoIklWIixpdmVjLDgscmZwLDApOwotKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0s dGV4dCxsZW4scmZwLGltb2RlID09IENGQjEpOwotKyNpZiAwCi0rCS8qIGNvbXBlbnNhdGUgZm9y IGVuZGlhbm5lc3MgKi8KLSsJaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJICAgIHRleHRbMF08PD03Owot KyNlbmRpZgotKwltZW1jcHkodGV4dDAsdGV4dCw4KTsKLSsKLSsJZm9yKGo9MCA7IGogPCAxMDAw MCA7ICsraikKLSsJICAgIHsKLSsJICAgIHVuc2lnbmVkIGNoYXIgb2xkX3RleHRbOF07Ci0rCi0r CSAgICBtZW1jcHkob2xkX3RleHQsdGV4dCw4KTsKLSsJICAgIGlmKGogPT0gMCkKLSsJCXsKLSsJ CW1lbWNweShvbGRfaXYsaXZlYyw4KTsKLSsJCURFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osYWtl eSxpdmVjLGRpcix0ZXh0LHRleHQsbGVuKTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCW1l bWNweShvbGRfaXYsY3R4Lml2LDgpOwotKwkJRVZQX0NpcGhlcigmY3R4LHRleHQsdGV4dCxsZW4p OwotKwkJfQotKwkgICAgaWYoaiA9PSA5OTk5KQotKwkJewotKwkJT3V0cHV0VmFsdWUodF90YWdb ZGlyXSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7Ci0rCQkvKgkJbWVtY3B5KGl2ZWMsdGV4 dCw4KTsgKi8KLSsJCX0KLSsJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJpdiIsY3R4Lml2LDgpOyAq LwotKwkgICAgLyogYWNjdW11bGF0ZSBtYXRlcmlhbCBmb3IgdGhlIG5leHQga2V5ICovCi0rCSAg ICBzaGlmdGluKG5rLHRleHQsU2l6ZXNbaW1vZGVdKTsKLSsJICAgIC8qCSAgICBEZWJ1Z1ZhbHVl KCJuayIsbmssMjQpOyovCi0rCSAgICBpZigoZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2Rl ID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQKLSsJCQl8fCBpbW9kZSA9PSBDQkMpKSB8fCBpbW9k ZSA9PSBPRkIpCi0rCQltZW1jcHkodGV4dCxvbGRfaXYsOCk7Ci0rCi0rCSAgICBpZighZGlyICYm IChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQpKQotKwkJ ewotKwkJLyogdGhlIHRlc3Qgc3BlY2lmaWVzIHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHJhdyBE RVMgb3BlcmF0aW9uCi0rCQkgICB3aGljaCB3ZSBkb24ndCBoYXZlLCBzbyByZWNvbnN0cnVjdCBp dC4uLiAqLwotKwkJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkJICAgIHRleHRbbl1ePW9sZF90 ZXh0W25dOwotKwkJfQotKwkgICAgfQotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBh a2V5W25dXj1ua1sxNituXTsKLSsJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkgICAgYWtleVs4 K25dXj1ua1s4K25dOwotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBha2V5WzE2K25d Xj1ua1tuXTsKLSsJaWYobnVta2V5cyA8IDMpCi0rCSAgICBtZW1jcHkoJmFrZXlbMio4XSxha2V5 LDgpOwotKwlpZihudW1rZXlzIDwgMikKLSsJICAgIG1lbWNweSgmYWtleVs4XSxha2V5LDgpOwot KwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKilha2V5KTsKLSsJREVTX3NldF9vZGRf cGFyaXR5KChERVNfY2Jsb2NrICopKGFrZXkrOCkpOwotKwlERVNfc2V0X29kZF9wYXJpdHkoKERF U19jYmxvY2sgKikoYWtleSsxNikpOwotKwltZW1jcHkoaXZlYyxjdHguaXYsOCk7Ci0rCi0rCS8q IHBvaW50bGVzcyBleGVyY2lzZSAtIHRoZSBmaW5hbCB0ZXh0IGRvZXNuJ3QgZGVwZW5kIG9uIHRo ZQotKwkgICBpbml0aWFsIHRleHQgaW4gT0ZCIG1vZGUsIHNvIHdobyBjYXJlcyB3aGF0IGl0IGlz PyAoV2hvCi0rCSAgIGRlc2lnbmVkIHRoZXNlIHRlc3RzPykgKi8KLSsJaWYoaW1vZGUgPT0gT0ZC KQotKwkgICAgZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkJdGV4dFtuXT10ZXh0MFtuXV5vbGRf aXZbbl07Ci0rCX0KLSsgICAgfQotKyAgICAKLStpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwg Y2hhciAqcnNwZmlsZSkKLSsgICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKLSsg ICAgRklMRSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1ZlsyMDQ4XSwg dGJ1ZlsyMDQ4XTsKLSsgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKLSsgICAgY2hhciBhbW9k ZVs4XSA9ICIiOwotKyAgICBjaGFyIGF0ZXN0WzEwMF0gPSAiIjsKLSsgICAgaW50IGFrZXlzej0w OwotKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKLSsgICAgaW50IGRpciA9 IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0 OF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKLSsgICAgY2hhciAqcnA7 Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgaW50IG51bWtleXM9MTsKLSsgICAgRVZQ X0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxl KSkKLSsJewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0r ICAgIHN0cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAi ciIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4i LCAKLSsJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0r ICAgIGlmICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZuLGFmbik7Ci0rCXJwPXN0cnN0cihy Zm4sInJlcS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJaWYgKCFycCkKLSsJICAg IHJwPXN0cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0rCWFzc2VydChycCk7Ci0rCW1lbWNw eShycCwicnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOwotKwltZW1jcHkocnAs ICIucnNwIiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0KLSsgICAgaWYgKChyZnAgPSBmb3Bl bihyc3BmaWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmls ZTogJXMsICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJZmNsb3Nl KGFmcCk7Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICB3aGlsZSAoIWVy ciAmJiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQotKwl7Ci0rCXRp ZHlfbGluZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxlbihpYnVmKTsKLSsJLyoJcHJpbnRm KCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7Ki8KLSsJaWYoc3RlcCA9PSAzICYmICFzdHJj bXAoYW1vZGUsIkVDQiIpKQotKwkgICAgewotKwkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihp VmVjKSk7Ci0rCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8K LSsJICAgIH0KLSsJc3dpdGNoIChzdGVwKQotKwkgICAgewotKwljYXNlIDA6ICAvKiByZWFkIHBy ZWFtYmxlICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQotKwkJeyAvKiBlbmQgb2YgcHJl YW1ibGUgKi8KLSsJCWlmICgqYW1vZGUgPT0gJ1wwJykKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRm KCJNaXNzaW5nIE1vZGVcbiIpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJZWxzZQot KwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgICsrIHN0ZXA7Ci0rCQkg ICAgfQotKwkJfQotKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0rCQlwcmlu dGYoIkludmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOwotKwkJZXJyID0gMTsKLSsJ CX0KLSsJICAgIGVsc2UKLSsJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLwotKwkJY2hhciAqeHAs ICpwcCA9IGlidWYrMjsKLSsJCWludCBuOwotKwkJaWYoKmFtb2RlKQotKwkJICAgIHsgLyogaW5z ZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8KLSsJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7 Ci0rCQkgICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKLSsJCSAgICB9Ci0r CQllbHNlCi0rCQkgICAgewotKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQkgICAgaWYoIXN0 cm5jbXAocHAsIklOVkVSU0UgIiw4KSB8fCAhc3RybmNtcChwcCwiREVTICIsNCkKLSsJCSAgICAg ICB8fCAhc3RybmNtcChwcCwiVERFUyAiLDUpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlBF Uk1VVEFUSU9OICIsMTIpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlNVQlNUSVRVVElPTiAi LDEzKQotKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJWQVJJQUJMRSAiLDkpKQotKwkJCXsKLSsJ CQkvKiBnZXQgdGVzdCB0eXBlICovCi0rCQkJaWYoIXN0cm5jbXAocHAsIkRFUyAiLDQpKQotKwkJ CSAgICBwcCs9NDsKLSsJCQllbHNlIGlmKCFzdHJuY21wKHBwLCJUREVTICIsNSkpCi0rCQkJICAg IHBwKz01OwotKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOwotKwkJCW4gPSB4cC1wcDsKLSsJCQlz dHJuY3B5KGF0ZXN0LCBwcCwgbik7Ci0rCQkJYXRlc3Rbbl0gPSAnXDAnOwotKwkJCS8qIGdldCBt b2RlICovCi0rCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KLSsJCQlu ID0gc3RybGVuKHhwKzEpLTE7Ci0rCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7Ci0rCQkJYW1v ZGVbbl0gPSAnXDAnOwotKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KLSsJCQlpZiAoVkVSQk9T RSkKLSsJCQkJcHJpbnRmKCJUZXN0PSVzLCBNb2RlPSVzXG4iLGF0ZXN0LGFtb2RlKTsKLSsJCQl9 Ci0rCQkgICAgfQotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMTogIC8qIFtFTkNSWVBU XSB8IFtERUNSWVBUXSAqLwotKwkgICAgaWYoaWJ1ZlswXSA9PSAnXG4nKQotKwkJYnJlYWs7Ci0r CSAgICBpZiAoaWJ1ZlswXSA9PSAnWycpCi0rCQl7Ci0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJ KytzdGVwOwotKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQot KwkJICAgIGRpciA9IDE7Ci0rCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRd IiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAwOwotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBw cmludGYoIkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYpOwotKwkJICAgIGVyciA9IDE7Ci0r CQkgICAgfQotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCi0rCQl7 Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3Jk XG4iKTsKLSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwotKwotKwlj YXNlIDI6IC8qIEtFWSA9IHh4eHggKi8KLSsJICAgIGlmKCppYnVmID09ICdcbicpCi0rCQl7Ci0r CSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAgICAgICB9 Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJewotKwkgICAg ICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAgICAgICAgICAgICAgfQotKwkg ICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UPSIsNikpCi0rCQl7Ci0rCSAgICAgICAgZnB1 dHMoaWJ1ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0rCSAgICBpZigh c3RybmNhc2VjbXAoaWJ1ZiwiTnVtS2V5cyA9ICIsMTApKQotKwkJewotKwkJbnVta2V5cz1hdG9p KGlidWYrMTApOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgCi0rCSAgICBmcHV0cyhpYnVmLCByZnAp OwotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSA9ICIsNikpCi0rCQl7Ci0rCQlha2V5 c3o9NjQ7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwotKwkJaWYgKGxl biA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAg IGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIktFWSIsIGFL ZXksIGxlbik7Ci0rCQkrK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChp YnVmLCJLRVlzID0gIiw3KSkKLSsJCXsKLSsJCWFrZXlzej02NCozOwotKwkJbGVuPWhleDJiaW4o aWJ1Zis3LGFLZXkpOwotKwkJaWYobGVuICE9IDgpCi0rCQkgICAgewotKwkJICAgIHByaW50Zigi SW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0K LSsJCW1lbWNweShhS2V5KzgsYUtleSw4KTsKLSsJCW1lbWNweShhS2V5KzE2LGFLZXksOCk7Ci0r CQlpYnVmWzRdPSdcMCc7Ci0rCQlQcmludFZhbHVlKCJLRVlzIixhS2V5LGxlbik7Ci0rCQkrK3N0 ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkiLDMpKQotKwkJ ewotKwkJaW50IG49aWJ1ZlszXS0nMSc7Ci0rCi0rCQlha2V5c3o9NjQqMzsKLSsJCWxlbj1oZXgy YmluKGlidWYrNyxhS2V5K24qOCk7Ci0rCQlpZihsZW4gIT0gOCkKLSsJCSAgICB7Ci0rCQkgICAg cHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7Ci0rCQkgICAgZXJyPTE7Ci0rCQkgICAgYnJlYWs7Ci0r CQkgICAgfQotKwkJaWJ1Zls0XT0nXDAnOwotKwkJUHJpbnRWYWx1ZShpYnVmLGFLZXksbGVuKTsK LSsJCWlmKG4gPT0gMikKLSsJCSAgICArK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0r CQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBicmVh azsKLSsKLSsJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7 Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJCXsKLSsJ CXByaW50ZigiTWlzc2luZyBJVlxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQot KwkJewotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlmIChsZW4g PCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOwotKwkJICAgIGVy ciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJJViIsIGlWZWMs IGxlbik7Ci0rCQlzdGVwID0gKGRpcik/IDQ6IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJ Y2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwot KwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKLSsJ CXsKLSsJCXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0K LSsJICAgIGVsc2UKLSsJCXsKLSsJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKLSsJCWlmKCFz dHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBs YWludGV4dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0 KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgUExB SU5URVhUOiAlcyIsIGlidWYrMTIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJ CSAgICB9Ci0rCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQotKwkJICAgIHsKLSsJCSAg ICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgi UExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKLSsJCWlmIChzdHJj bXAoYXRlc3QsICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAg ewotKwkJICAgIGRvX21jdChhbW9kZSxha2V5c3osbnVta2V5cyxhS2V5LGlWZWMsZGlyLHBsYWlu dGV4dCxsZW4scmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGFzc2Vy dChkaXIgPT0gMSk7Ci0rCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBh S2V5LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8K LSsJCQkJICBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUo IkNJUEhFUlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZC MSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwlj YXNlIDU6IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwot KwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCi0r CQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAg ICBlbHNlCi0rCQl7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVuPWJp bnQyYmluKGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7Ci0rCQllbHNlCi0r CQkgICAgbGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOwotKwkJaWYgKGxlbiA8IDAp Ci0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKLSsJCSAg ICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJCi0rCQlQcmludFZhbHVlKCJD SVBIRVJURVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNb250 ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJICAgIGRvX21j dChhbW9kZSwgYWtleXN6LCBudW1rZXlzLCBhS2V5LCBpVmVjLCAKLSsJCQkgICBkaXIsIGNpcGhl cnRleHQsIGxlbiwgcmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGFz c2VydChkaXIgPT0gMCk7Ci0rCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6 LCBhS2V5LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQg Ki8KLSsJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFs dWUoIlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwKLSsJCQkJ IXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJ ICAgIGJyZWFrOwotKwotKwljYXNlIDY6Ci0rCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQotKwkJ ewotKwkJZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKLSsJCX0K LSsJICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCi0rCQl7IC8qIE1DVCBh bHJlYWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCi0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJ fQotKwkgICAgc3RlcCA9IDE7Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJfQotKyAgICBpZiAo cmZwKQotKwlmY2xvc2UocmZwKTsKLSsgICAgaWYgKGFmcCkKLSsJZmNsb3NlKGFmcCk7Ci0rICAg IHJldHVybiBlcnI7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUg b3IgCi0rICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4K LSsgIEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAtZiB4eHgu cmVxCi0rICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1k IHh4eHh4Lnh4eAotKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0raW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0Iiwg KnJzcGZpbGUgPSBOVUxMOwotKyAgICBGSUxFICpmcCA9IE5VTEw7Ci0rICAgIGNoYXIgZm5bMjUw XSA9ICIiLCByZm5bMjU2XSA9ICIiOwotKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7Ci0r Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewot Kwlkb19wcmludF9lcnJvcnMoKTsKLSsJRVhJVCgxKTsKLSsJfQotKyNlbmRpZgotKyAgICBpZiAo YXJnYyA+IDEpCi0rCXsKLSsJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKLSsJ ICAgIHsKLSsJICAgIGRfb3B0ID0gMTsKLSsJICAgIH0KLSsJZWxzZSBpZiAoc3RyY2FzZWNtcChh cmd2WzFdLCAiLWYiKSA9PSAwKQotKwkgICAgewotKwkgICAgZl9vcHQgPSAxOwotKwkgICAgZF9v cHQgPSAwOwotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIkludmFsaWQg cGFyYW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJ aWYgKGFyZ2MgPCAzKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxu Iik7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGRfb3B0KQotKwkgICAgcnFsaXN0 ID0gYXJndlsyXTsKLSsJZWxzZQotKwkgICAgewotKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsK LSsJICAgIHJzcGZpbGUgPSBhcmd2WzNdOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChkX29wdCkK LSsJeyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCi0rCWlmICghKGZwID0gZm9wZW4o cnFsaXN0LCAiciIpKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxp c3QgZmlsZVxuIik7Ci0rCSAgICByZXR1cm4gLTE7Ci0rCSAgICB9Ci0rCXdoaWxlIChmZ2V0cyhm biwgc2l6ZW9mKGZuKSwgZnApKQotKwkgICAgewotKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOwot KwkgICAgc3RyY3B5KHJmbiwgZm4pOwotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwg cmZuKTsKLSsJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKLSsJCXsKLSsJCXByaW50 ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOwotKwkJRVhJVCgx KTsKLSsJCX0KLSsJICAgIH0KLSsJZmNsb3NlKGZwKTsKLSsJfQotKyAgICBlbHNlIC8qIHNpbmds ZSBmaWxlICovCi0rCXsKLSsJaWYgKFZFUkJPU0UpCi0rCQlwcmludGYoIlByb2Nlc3Npbmc6ICVz XG4iLCBmbik7Ci0rCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQotKwkgICAgewotKwkgICAg cHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKLSsJICAg IH0KLSsJfQotKyAgICBFWElUKDApOwotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyNlbmRp ZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMu ZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYwotLS0tIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jLmZpcHMJMjAxMC0wNi0w NCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfZHNzdnMuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAot QEAgLTAsMCArMSw1MzcgQEAKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwot KyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIERTQSBzdXBw b3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5j bHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgdm9pZCBwYm4oY29uc3QgY2hhciAqbmFtZSwg QklHTlVNICpibikKLSsJewotKwlpbnQgbGVuLCBpOwotKwl1bnNpZ25lZCBjaGFyICp0bXA7Ci0r CWxlbiA9IEJOX251bV9ieXRlcyhibik7Ci0rCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0r CWlmICghdG1wKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBl cnJvclxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCUJOX2JuMmJpbihibiwgdG1wKTsKLSsJcHJp bnRmKCIlcyA9ICIsIG5hbWUpOwotKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0rCQlwcmlu dGYoIiUwMlgiLCB0bXBbaV0pOwotKwlmcHV0cygiXG4iLCBzdGRvdXQpOwotKwlPUEVOU1NMX2Zy ZWUodG1wKTsKLSsJcmV0dXJuOwotKwl9Ci0rCi0rdm9pZCBwcmltZXMoKQotKyAgICB7Ci0rICAg IGNoYXIgYnVmWzEwMjQwXTsKLSsgICAgY2hhciBsYnVmWzEwMjQwXTsKLSsgICAgY2hhciAqa2V5 d29yZCwgKnZhbHVlOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikg IT0gTlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJaWYgKCFwYXJzZV9saW5lKCZr ZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChr ZXl3b3JkLCJQcmltZSIpKQotKwkgICAgewotKwkgICAgQklHTlVNICpwcDsKLSsKLSsJICAgIHBw PUJOX25ldygpOwotKwkgICAgZG9faGV4MmJuKCZwcCx2YWx1ZSk7Ci0rCSAgICBwcmludGYoInJl c3VsdD0gJWNcbiIsCi0rCQkgICBCTl9pc19wcmltZV9leChwcCwyMCxOVUxMLE5VTEwpID8gJ1An IDogJ0YnKTsKLSsJICAgIH0JICAgIAotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHBxZygpCi0rICAg IHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hh ciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKwotKyAgICB3aGlsZShmZ2V0 cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUo JmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQp OwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkg ICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKLSsJ ICAgIHsKLSsJICAgIGludCBuPWF0b2kodmFsdWUpOwotKwotKwkgICAgcHJpbnRmKCJbbW9kID0g JWRdXG5cbiIsbm1vZCk7Ci0rCi0rCSAgICB3aGlsZShuLS0pCi0rCQl7Ci0rCQl1bnNpZ25lZCBj aGFyIHNlZWRbMjBdOwotKwkJRFNBICpkc2E7Ci0rCQlpbnQgY291bnRlcjsKLSsJCXVuc2lnbmVk IGxvbmcgaDsKLSsJCWRzYSA9IEZJUFNfZHNhX25ldygpOwotKwotKwkJaWYgKCFEU0FfZ2VuZXJh dGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwwLCZjb3VudGVyLCZoLE5VTEwpKQotKwkJ CXsKLSsJCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCXBibigi UCIsZHNhLT5wKTsKLSsJCXBibigiUSIsZHNhLT5xKTsKLSsJCXBibigiRyIsZHNhLT5nKTsKLSsJ CXB2KCJTZWVkIixzZWVkLDIwKTsKLSsJCXByaW50ZigiYyA9ICVkXG4iLGNvdW50ZXIpOwotKwkJ cHJpbnRmKCJIID0gJWx4XG4iLGgpOwotKwkJcHV0YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0rCSAg ICB9Ci0rCWVsc2UKLSsJICAgIGZwdXRzKGJ1ZixzdGRvdXQpOwotKwl9Ci0rICAgIH0KLSsKLSt2 b2lkIHBxZ3ZlcigpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1 ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBCSUdOVU0gKnAgPSBO VUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTDsKLSsgICAgaW50IGNvdW50ZXIsIGNvdW50ZXIyOwot KyAgICB1bnNpZ25lZCBsb25nIGgsIGgyOwotKyAgICBEU0EgKmRzYT1OVUxMOwotKyAgICBpbnQg bm1vZD0wOwotKyAgICB1bnNpZ25lZCBjaGFyIHNlZWRbMTAyNF07Ci0rCi0rICAgIHdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91 dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJZnB1dHMoYnVmLCBzdGRvdXQpOwotKwlpZighc3Ry Y21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJQIikpCi0rCSAgICBwPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJRIikpCi0rCSAgICBxPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICBnPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJTZWVkIikpCi0rCSAgICB7Ci0rCSAgICBpbnQgc2xlbiA9IGhleDJi aW4odmFsdWUsIHNlZWQpOwotKwkgICAgaWYgKHNsZW4gIT0gMjApCi0rCQl7Ci0rCQlmcHJpbnRm KHN0ZGVyciwgIlNlZWQgcGFyc2UgbGVuZ3RoIGVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJ fQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiYyIpKQotKwkgICAgY291bnRl ciA9YXRvaShidWYrNCk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJIIikpCi0rCSAgICB7 Ci0rCSAgICBoID0gYXRvaSh2YWx1ZSk7Ci0rCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcpCi0rCQl7 Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJ fQotKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9w YXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDIwICwmY291bnRlcjIsJmgyLE5VTEwpKQotKwkJ CXsKLSsJCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsgICAgICAg ICAgICBpZiAoQk5fY21wKGRzYS0+cCwgcCkgfHwgQk5fY21wKGRzYS0+cSwgcSkgfHwgQk5fY21w KGRzYS0+ZywgZykKLSsJCXx8IChjb3VudGVyICE9IGNvdW50ZXIyKSB8fCAoaCAhPSBoMikpCi0r CSAgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKLSsJICAgIGVsc2UKLSsJICAgIAlwcmludGYo IlJlc3VsdCA9IFBcbiIpOwotKwkgICAgQk5fZnJlZShwKTsKLSsJICAgIEJOX2ZyZWUocSk7Ci0r CSAgICBCTl9mcmVlKGcpOwotKwkgICAgcCA9IE5VTEw7Ci0rCSAgICBxID0gTlVMTDsKLSsJICAg IGcgPSBOVUxMOwotKwkgICAgRklQU19kc2FfZnJlZShkc2EpOwotKwkgICAgZHNhID0gTlVMTDsK LSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0rLyogS2V5cGFpciB2ZXJpZmljYXRpb24gcm91dGlu ZS4gTkI6IHRoaXMgaXNuJ3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgRklQUzE0MC0yCi0rICogYWxn b3JpdGhtIHRlc3RzLiBJdCBpcyBhbiBhZGRpdGlvbmFsIHRlc3QgdG8gcGVyZm9ybSBzYW5pdHkg Y2hlY2tzIG9uIHRoZQotKyAqIG91dHB1dCBvZiB0aGUgS2V5UGFpciB0ZXN0LgotKyAqLwotKwot K3N0YXRpYyBpbnQgZHNzX3BhcmFtY2hlY2soaW50IG5tb2QsIEJJR05VTSAqcCwgQklHTlVNICpx LCBCSUdOVU0gKmcsCi0rCQkJCQkJCUJOX0NUWCAqY3R4KQotKyAgICB7Ci0rICAgIEJJR05VTSAq cmVtID0gTlVMTDsKLSsgICAgaWYgKEJOX251bV9iaXRzKHApICE9IG5tb2QpCi0rCXJldHVybiAw OwotKyAgICBpZiAoQk5fbnVtX2JpdHMocSkgIT0gMTYwKQotKwlyZXR1cm4gMDsKLSsgICAgaWYg KEJOX2lzX3ByaW1lX2V4KHAsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSAhPSAxKQotKwly ZXR1cm4gMDsKLSsgICAgaWYgKEJOX2lzX3ByaW1lX2V4KHEsIEJOX3ByaW1lX2NoZWNrcywgY3R4 LCBOVUxMKSAhPSAxKQotKwlyZXR1cm4gMDsKLSsgICAgcmVtID0gQk5fbmV3KCk7Ci0rICAgIGlm ICghQk5fbW9kKHJlbSwgcCwgcSwgY3R4KSB8fCAhQk5faXNfb25lKHJlbSkKLSsgICAgCXx8IChC Tl9jbXAoZywgQk5fdmFsdWVfb25lKCkpIDw9IDApCi0rCXx8ICFCTl9tb2RfZXhwKHJlbSwgZywg cSwgcCwgY3R4KSB8fCAhQk5faXNfb25lKHJlbSkpCi0rCXsKLSsJQk5fZnJlZShyZW0pOwotKwly ZXR1cm4gMDsKLSsJfQotKyAgICAvKiBUb2RvOiBjaGVjayBnICovCi0rICAgIEJOX2ZyZWUocmVt KTsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSt2b2lkIGtleXZlcigpCi0rICAgIHsKLSsg ICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5 d29yZCwgKnZhbHVlOwotKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVM TCwgKlggPSBOVUxMLCAqWSA9IE5VTEw7Ci0rICAgIEJJR05VTSAqWTI7Ci0rICAgIEJOX0NUWCAq Y3R4ID0gTlVMTDsKLSsgICAgaW50IG5tb2Q9MCwgcGFyYW1jaGVjayA9IDA7Ci0rCi0rICAgIGN0 eCA9IEJOX0NUWF9uZXcoKTsKLSsgICAgWTIgPSBCTl9uZXcoKTsKLSsKLSsgICAgd2hpbGUoZmdl dHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5l KCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0 KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJ ICAgIHsKLSsJICAgIGlmIChwKQotKwkJQk5fZnJlZShwKTsKLSsJICAgIHAgPSBOVUxMOwotKwkg ICAgaWYgKHEpCi0rCQlCTl9mcmVlKHEpOwotKwkgICAgcSA9IE5VTEw7Ci0rCSAgICBpZiAoZykK LSsJCUJOX2ZyZWUoZyk7Ci0rCSAgICBnID0gTlVMTDsKLSsJICAgIHBhcmFtY2hlY2sgPSAwOwot KwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIlAiKSkKLSsJICAgIHA9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIlEiKSkKLSsJICAgIHE9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIkciKSkKLSsJICAgIGc9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIlgiKSkKLSsJICAgIFg9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIlkiKSkKLSsJICAgIHsKLSsJICAgIFk9aGV4MmJuKHZhbHVlKTsKLSsJICAgIGlmICghcCB8 fCAhcSB8fCAhZyB8fCAhWCB8fCAhWSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiUGFyc2Ug RXJyb3JcbiIpOwotKwkJZXhpdCAoMSk7Ci0rCQl9Ci0rCSAgICBwYm4oIlAiLHApOwotKwkgICAg cGJuKCJRIixxKTsKLSsJICAgIHBibigiRyIsZyk7Ci0rCSAgICBwYm4oIlgiLFgpOwotKwkgICAg cGJuKCJZIixZKTsKLSsJICAgIGlmICghcGFyYW1jaGVjaykKLSsJCXsKLSsJCWlmIChkc3NfcGFy YW1jaGVjayhubW9kLCBwLCBxLCBnLCBjdHgpKQotKwkJCXBhcmFtY2hlY2sgPSAxOwotKwkJZWxz ZQotKwkJCXBhcmFtY2hlY2sgPSAtMTsKLSsJCX0KLSsJICAgIGlmIChwYXJhbWNoZWNrICE9IDEp Ci0rCSAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIpOwotKwkgICAgZWxzZQotKwkJewotKwkJaWYg KCFCTl9tb2RfZXhwKFkyLCBnLCBYLCBwLCBjdHgpIHx8IEJOX2NtcChZMiwgWSkpCi0rCSAgICAJ CXByaW50ZigiUmVzdWx0ID0gRlxuIik7Ci0rCSAgICAgICAgZWxzZQotKwkgICAgCQlwcmludGYo IlJlc3VsdCA9IFBcbiIpOwotKwkJfQotKwkgICAgQk5fZnJlZShYKTsKLSsJICAgIEJOX2ZyZWUo WSk7Ci0rCSAgICBYID0gTlVMTDsKLSsJICAgIFkgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0rCWlm IChwKQotKwkgICAgQk5fZnJlZShwKTsKLSsJaWYgKHEpCi0rCSAgICBCTl9mcmVlKHEpOwotKwlp ZiAoZykKLSsJICAgIEJOX2ZyZWUoZyk7Ci0rCWlmIChZMikKLSsJICAgIEJOX2ZyZWUoWTIpOwot KyAgICB9Ci0rCi0rdm9pZCBrZXlwYWlyKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsK LSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAg IGludCBubW9kPTA7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAh PSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBi dWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJ aWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTiIpKQotKwkgICAgewotKwkgICAgRFNBICpkc2E7Ci0r CSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKLSsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4i LG5tb2QpOwotKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5l cmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwkJ ewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwkgICAgcGJuKCJQ Iixkc2EtPnApOwotKwkgICAgcGJuKCJRIixkc2EtPnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcp OwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCi0rCSAgICB3aGlsZShuLS0pCi0rCQl7Ci0r CQlpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3Jz KCk7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCi0rCQlwYm4oIlgiLGRzYS0+cHJpdl9rZXkpOwot KwkJcGJuKCJZIixkc2EtPnB1Yl9rZXkpOwotKwkJcHV0YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0r CSAgICB9Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgc2lnZ2VuKCkKLSsgICAgewotKyAgICBjaGFy IGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAq dmFsdWU7Ci0rICAgIGludCBubW9kPTA7Ci0rICAgIERTQSAqZHNhPU5VTEw7Ci0rCi0rICAgIHdo aWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFy c2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVm LHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9k IikpCi0rCSAgICB7Ci0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwkgICAgcHJpbnRmKCJbbW9k ID0gJWRdXG5cbiIsbm1vZCk7Ci0rCSAgICBpZiAoZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2Ep OwotKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9w YXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwkJewotKwkJ ZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwkgICAgcGJuKCJQIixkc2Et PnApOwotKwkgICAgcGJuKCJRIixkc2EtPnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkg ICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJNc2ciKSkKLSsJICAgIHsKLSsJICAgIHVuc2lnbmVkIGNoYXIgbXNnWzEwMjRdOwotKwkgICAg dW5zaWduZWQgY2hhciBzYnVmWzYwXTsKLSsJICAgIHVuc2lnbmVkIGludCBzbGVuOwotKwkgICAg aW50IG47Ci0rCSAgICBFVlBfUEtFWSBwazsKLSsJICAgIEVWUF9NRF9DVFggbWN0eDsKLSsJICAg IERTQV9TSUcgKnNpZzsKLSsJICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCi0rCSAgICBu PWhleDJiaW4odmFsdWUsbXNnKTsKLSsJICAgIHB2KCJNc2ciLG1zZyxuKTsKLSsKLSsJICAgIGlm ICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0r CQlleGl0KDEpOwotKwkJfQotKwkgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsJICAgIHBr LnBrZXkuZHNhID0gZHNhOwotKwkgICAgcGJuKCJZIixkc2EtPnB1Yl9rZXkpOwotKwotKwkgICAg RVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKTsKLSsJICAgIEVWUF9TaWdu VXBkYXRlKCZtY3R4LCBtc2csIG4pOwotKwkgICAgRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2J1Ziwg JnNsZW4sICZwayk7Ci0rCi0rCSAgICBzaWcgPSBEU0FfU0lHX25ldygpOwotKwkgICAgRklQU19k c2Ffc2lnX2RlY29kZShzaWcsIHNidWYsIHNsZW4pOwotKwotKwkgICAgcGJuKCJSIixzaWctPnIp OwotKwkgICAgcGJuKCJTIixzaWctPnMpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAg ICBEU0FfU0lHX2ZyZWUoc2lnKTsKLSsJICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0r CSAgICB9Ci0rCX0KLSsJaWYgKGRzYSkKLSsJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsgICAgfQot KwotK3ZvaWQgc2lndmVyKCkKLSsgICAgewotKyAgICBEU0EgKmRzYT1OVUxMOwotKyAgICBjaGFy IGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICB1bnNpZ25lZCBjaGFyIG1z Z1sxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wLCBu PTA7Ci0rICAgIERTQV9TSUcgc2csICpzaWcgPSAmc2c7Ci0rCi0rICAgIHNpZy0+ciA9IE5VTEw7 Ci0rICAgIHNpZy0+cyA9IE5VTEw7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVm LHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVl LCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsK LSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICB7Ci0rCSAgICBubW9k PWF0b2kodmFsdWUpOwotKwkgICAgaWYoZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2EpOwotKwkg ICAgZHNhPUZJUFNfZHNhX25ldygpOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29y ZCwiUCIpKQotKwkgICAgZHNhLT5wPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJRIikpCi0rCSAgICBkc2EtPnE9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsIkciKSkKLSsJICAgIHsKLSsJICAgIGRzYS0+Zz1oZXgyYm4odmFsdWUpOwot KwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7Ci0rCSAgICBwYm4oIlAiLGRz YS0+cCk7Ci0rCSAgICBwYm4oIlEiLGRzYS0+cSk7Ci0rCSAgICBwYm4oIkciLGRzYS0+Zyk7Ci0r CSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIk1zZyIpKQotKwkgICAgewotKwkgICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7Ci0rCSAgICBw digiTXNnIixtc2csbik7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikp Ci0rCSAgICBkc2EtPnB1Yl9rZXk9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsIlIiKSkKLSsJICAgIHNpZy0+cj1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJj bXAoa2V5d29yZCwiUyIpKQotKwkgICAgewotKwkgICAgRVZQX01EX0NUWCBtY3R4OwotKwkgICAg RVZQX1BLRVkgcGs7Ci0rCSAgICB1bnNpZ25lZCBjaGFyIHNpZ2J1Zls2MF07Ci0rCSAgICB1bnNp Z25lZCBpbnQgc2xlbjsKLSsJICAgIGludCByOwotKwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4 KTsKLSsJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7Ci0rCSAgICBway5wa2V5LmRzYSA9IGRz YTsKLSsJICAgIHNpZy0+cz1oZXgyYm4odmFsdWUpOwotKwkKLSsJICAgIHBibigiWSIsZHNhLT5w dWJfa2V5KTsKLSsJICAgIHBibigiUiIsc2lnLT5yKTsKLSsJICAgIHBibigiUyIsc2lnLT5zKTsK LSsKLSsJICAgIHNsZW4gPSBGSVBTX2RzYV9zaWdfZW5jb2RlKHNpZ2J1Ziwgc2lnKTsKLSsJICAg IEVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKTsKLSsJICAgIEVWUF9W ZXJpZnlVcGRhdGUoJm1jdHgsIG1zZywgbik7Ci0rCSAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZt Y3R4LCBzaWdidWYsIHNsZW4sICZwayk7Ci0rCSAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgp OwotKwkKLSsJICAgIHByaW50ZigiUmVzdWx0ID0gJWNcbiIsIHIgPT0gMSA/ICdQJyA6ICdGJyk7 Ci0rCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0raW50 IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgaWYoYXJnYyAhPSAyKQot Kwl7Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbcHJpbWV8cHFnfHBxZ3ZlcnxrZXlwYWlyfHNpZ2dl bnxzaWd2ZXJdXG4iLGFyZ3ZbMF0pOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFGSVBTX21v ZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlleGl0KDEpOwotKwl9Ci0r ICAgIGlmKCFzdHJjbXAoYXJndlsxXSwicHJpbWUiKSkKLSsJcHJpbWVzKCk7Ci0rICAgIGVsc2Ug aWYoIXN0cmNtcChhcmd2WzFdLCJwcWciKSkKLSsJcHFnKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNt cChhcmd2WzFdLCJwcWd2ZXIiKSkKLSsJcHFndmVyKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChh cmd2WzFdLCJrZXlwYWlyIikpCi0rCWtleXBhaXIoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFy Z3ZbMV0sImtleXZlciIpKQotKwlrZXl2ZXIoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3Zb MV0sInNpZ2dlbiIpKQotKwlzaWdnZW4oKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0s InNpZ3ZlciIpKQotKwlzaWd2ZXIoKTsKLSsgICAgZWxzZQotKwl7Ci0rCWZwcmludGYoc3RkZXJy LCJEb24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsK LSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcm5ndnMuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMJMjAx MC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMjMwIEBACi0rLyoK LSsgKiBDcnVkZSB0ZXN0IGRyaXZlciBmb3IgcHJvY2Vzc2luZyB0aGUgVlNUIGFuZCBNQ1QgdGVz dHZlY3RvciBmaWxlcwotKyAqIGdlbmVyYXRlZCBieSB0aGUgQ01WUCBSTkdWUyBwcm9kdWN0Lgot KyAqCi0rICogTm90ZSB0aGUgaW5wdXQgZmlsZXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhIF92ZXJ5 XyBzcGVjaWZpYyBmb3JtYXQKLSsgKiBhcyBkZXNjcmliZWQgaW4gdGhlIE5JU1QgZG9jdW1lbnQg IlRoZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcgotKyAqIFZhbGlkYXRpb24gU3lzdGVtIChSTkdW UykiLCBNYXkgMjUsIDIwMDQuCi0rICoKLSsgKi8KLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Ns Y29uZi5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0r Ci0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sKLSsgICAgcHJpbnRmKCJObyBG SVBTIFJORyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuIDA7Ci0rfQotKyNlbHNlCi0rCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL3g1MDl2My5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8 Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSt2b2lkIHZzdCgpCi0rICAg IHsKLSsgICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciAq diA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKLSsgICAgdW5zaWduZWQg Y2hhciByZXRbMTZdOwotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRd OwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGxvbmcgaSwga2V5bGVuOwotKwot KyAgICBrZXlsZW4gPSAwOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRp bikgIT0gTlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJaWYoIXN0cm5jbXAoYnVm LCJbQUVTIDEyOC1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMTY7Ci0rCWVsc2UgaWYoIXN0cm5j bXAoYnVmLCJbQUVTIDE5Mi1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMjQ7Ci0rCWVsc2UgaWYo IXN0cm5jbXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMzI7Ci0rCWlm ICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJY29udGludWU7 Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCSAgICB7Ci0rCSAgICBrZXk9aGV4MmJp bl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IGtleWxlbikKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOwot KwkJcmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQi KSkKLSsJICAgIHsKLSsJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAh PSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOwot KwkJcmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIp KQotKwkgICAgewotKwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0g MTYpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOwotKwkJ cmV0dXJuOwotKwkJfQotKwotKwkgICAgaWYgKCFrZXkgfHwgIWR0KQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0r CSAgICBGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7Ci0rCSAgICBGSVBTX3JhbmRfc2Vl ZCh2LDE2KTsKLSsJICAgIEZJUFNfcmFuZF9zZXRfZHQoZHQpOwotKwkgICAgaWYgKEZJUFNfcmFu ZF9ieXRlcyhyZXQsMTYpIDw9IDApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdl dHRpbmcgUFJORyB2YWx1ZVxuIik7Ci0rCSAgICAgICAgcmV0dXJuOwotKwkgICAgICAgIH0KLSsK LSsJICAgIHB2KCJSIixyZXQsMTYpOwotKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7Ci0rCSAgICBr ZXkgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKLSsJICAgIGR0ID0gTlVMTDsKLSsJ ICAgIE9QRU5TU0xfZnJlZSh2KTsKLSsJICAgIHYgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0rICAg IH0KLSsKLSt2b2lkIG1jdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVM TDsKLSsgICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmR0 ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciByZXRbMTZdOwotKyAgICBjaGFyIGJ1ZlsxMDI0 XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0r ICAgIGxvbmcgaSwga2V5bGVuOwotKyAgICBpbnQgajsKLSsKLSsgICAga2V5bGVuID0gMDsKLSsK LSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJ ZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5XSIsIDEz KSkKLSsJCWtleWxlbiA9IDE2OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxOTItS2V5 XSIsIDEzKSkKLSsJCWtleWxlbiA9IDI0OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAy NTYtS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9IDMyOwotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdv cmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCWNvbnRpbnVlOwotKwlpZighc3RyY21wKGtleXdv cmQsIktleSIpKQotKwkgICAgewotKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAg ICBpZiAoaSAhPSBrZXlsZW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQga2V5 IGxlbmd0aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKLSsJCXJldHVybjsKLSsJCX0KLSsJ ICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikpCi0rCSAgICB7Ci0rCSAgICBk dD1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0rCQl7Ci0rCQlmcHJp bnRmKHN0ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsKLSsJCX0KLSsJ ICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkKLSsJICAgIHsKLSsJICAgIHY9 aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsKLSsJCX0KLSsKLSsJ ICAgIGlmICgha2V5IHx8ICFkdCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiTWlzc2luZyBr ZXkgb3IgRFRcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwotKwkgICAgRklQU19yYW5kX3NldF9r ZXkoa2V5LCBrZXlsZW4pOwotKwkgICAgRklQU19yYW5kX3NlZWQodiwxNik7Ci0rCSAgICBmb3Ig KGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKLSsJCXsKLSsJCSAgICBGSVBTX3JhbmRfc2V0X2R0KGR0 KTsKLSsJCSAgICBpZiAoRklQU19yYW5kX2J5dGVzKHJldCwxNikgPD0gMCkKLSsJCQl7Ci0rCQkJ ZnByaW50ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFsdWVcbiIpOwotKwkJICAgICAg ICByZXR1cm47Ci0rCQkgICAgICAgIH0KLSsJCSAgICAvKiBJbmNyZW1lbnQgRFQgKi8KLSsJCSAg ICBmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pCi0rCQkJewotKwkJCWR0W2pdKys7Ci0rCQkJaWYg KGR0W2pdKQotKwkJCQlicmVhazsKLSsJCQl9Ci0rCQl9Ci0rCi0rCSAgICBwdigiUiIscmV0LDE2 KTsKLSsJICAgIE9QRU5TU0xfZnJlZShrZXkpOwotKwkgICAga2V5ID0gTlVMTDsKLSsJICAgIE9Q RU5TU0xfZnJlZShkdCk7Ci0rCSAgICBkdCA9IE5VTEw7Ci0rCSAgICBPUEVOU1NMX2ZyZWUodik7 Ci0rCSAgICB2ID0gTlVMTDsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0raW50IG1haW4oaW50 IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgaWYoYXJnYyAhPSAyKQotKwl7Ci0rCWZw cmludGYoc3RkZXJyLCIlcyBbbWN0fHZzdF1cbiIsYXJndlswXSk7Ci0rCWV4aXQoMSk7Ci0rCX0K LSsgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0r CWV4aXQoMSk7Ci0rCX0KLSsgICAgRklQU19yYW5kX3Jlc2V0KCk7Ci0rICAgIGlmICghRklQU19y YW5kX3Rlc3RfbW9kZSgpKQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igc2V0dGluZyBQ Uk5HIHRlc3QgbW9kZVxuIik7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlleGl0KDEpOwotKwl9 Ci0rICAgIGlmKCFzdHJjbXAoYXJndlsxXSwibWN0IikpCi0rCW1jdCgpOwotKyAgICBlbHNlIGlm KCFzdHJjbXAoYXJndlsxXSwidnN0IikpCi0rCXZzdCgpOwotKyAgICBlbHNlCi0rCXsKLSsJZnBy aW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKLSsJZXhpdCgx KTsKLSsJfQotKwotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlwcyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYwotLS0tIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMJMjAxMC0wNi0wNCAxMjoy NToxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfcnNhZ3Rlc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAg LTAsMCArMSwzOTAgQEAKLSsvKiBmaXBzX3JzYWd0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERy IFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsg KiBwcm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMDUsMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsg KgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlw dHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRl IDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8u aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsK LSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOwotKyAgICByZXR1 cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0raW50 IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5 MShGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdO VU0gKlhwLAotKwkJQklHTlVNICplKTsKLStzdGF0aWMgaW50IHJzYV9wcmludGtleTIoRklMRSAq b3V0LCBSU0EgKnJzYSwKLSsJCUJJR05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklHTlVNICpYcSk7 Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0g TlVMTCwgKm91dCA9IE5VTEw7Ci0rCi0rCWludCByZXQgPSAxOwotKwotKwlpZighRklQU19tb2Rl X3NldCgxKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZ290byBlbmQ7Ci0rCQl9 Ci0rCi0rCWlmIChhcmdjID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0rCQlpbiA9IGZv cGVuKGFyZ3ZbMV0sICJyIik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9IHN0ZG91dDsK LSsJZWxzZQotKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYgKCFpbikKLSsJ CXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3Jc biIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290 byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghcnNhX3Rlc3Qob3V0LCBpbikpCi0rCQl7Ci0rCQlmcHJp bnRmKHN0ZGVyciwgIkZBVEFMIFJTQUdURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7Ci0r CQlnb3RvIGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5kOgotKwotKwlp ZiAocmV0KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0gc3Rk aW4pKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0rCQlm Y2xvc2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgUlNBX1RF U1RfTUFYTElORUxFTgkxMDI0MAotKwotK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmlu KQotKwl7Ci0rCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3 b3JkLCAqdmFsdWU7Ci0rCVJTQSAqcnNhID0gTlVMTDsKLSsJQklHTlVNICpYcDEgPSBOVUxMLCAq WHAyID0gTlVMTCwgKlhwID0gTlVMTDsKLSsJQklHTlVNICpYcTEgPSBOVUxMLCAqWHEyID0gTlVM TCwgKlhxID0gTlVMTDsKLSsJQklHTlVNICplID0gTlVMTDsKLSsJaW50IHJldCA9IDA7Ci0rCWlu dCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhM SU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4p OwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJ d2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0r CQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxp bmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZv ciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5v ID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1c3QgY29weSAqLwot KwkJaWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1 Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwot KwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGls ZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9 IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJv bSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJ CQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8K LSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdc bicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlp ZiAoIXN0cmNtcChrZXl3b3JkLCAieHAxIikpCi0rCQkJewotKwkJCWlmIChYcDEgfHwgIWRvX2hl eDJibigmWHAxLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJ4cDIiKSkKLSsJCQl7Ci0rCQkJaWYgKFhwMiB8fCAhZG9f aGV4MmJuKCZYcDIsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlhwIikpCi0rCQkJewotKwkJCWlmIChYcCB8fCAhZG9f aGV4MmJuKCZYcCx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHExIikpCi0rCQkJewotKwkJCWlmIChYcTEgfHwgIWRv X2hleDJibigmWHExLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJ4cTIiKSkKLSsJCQl7Ci0rCQkJaWYgKFhxMiB8fCAh ZG9faGV4MmJuKCZYcTIsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlhxIikpCi0rCQkJewotKwkJCWlmIChYcSB8fCAh ZG9faGV4MmJuKCZYcSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQotKwkJCXsKLSsJCQlpZiAoZSB8fCAhZG9f aGV4MmJuKCZlLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJwMSIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAicDIiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgInAiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgInExIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJxMiIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicSIp KQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQotKwkJ CWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZCIpKQotKwkJCWNvbnRp bnVlOwotKwkJZWxzZQotKwkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCi0rCQlmcHV0cyhvbGluZWJ1 Ziwgb3V0KTsKLSsKLSsJCWlmIChlICYmIFhwMSAmJiBYcDIgJiYgWHApCi0rCQkJewotKwkJCXJz YSA9IEZJUFNfcnNhX25ldygpOwotKwkJCWlmICghcnNhKQotKwkJCQlnb3RvIGVycm9yOwotKwkJ CWlmICghcnNhX3ByaW50a2V5MShvdXQsIHJzYSwgWHAxLCBYcDIsIFhwLCBlKSkKLSsJCQkJZ290 byBlcnJvcjsKLSsJCQlCTl9mcmVlKFhwMSk7Ci0rCQkJWHAxID0gTlVMTDsKLSsJCQlCTl9mcmVl KFhwMik7Ci0rCQkJWHAyID0gTlVMTDsKLSsJCQlCTl9mcmVlKFhwKTsKLSsJCQlYcCA9IE5VTEw7 Ci0rCQkJQk5fZnJlZShlKTsKLSsJCQllID0gTlVMTDsKLSsJCQl9Ci0rCi0rCQlpZiAocnNhICYm IFhxMSAmJiBYcTIgJiYgWHEpCi0rCQkJewotKwkJCWlmICghcnNhX3ByaW50a2V5MihvdXQsIHJz YSwgWHExLCBYcTIsIFhxKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlCTl9mcmVlKFhxMSk7Ci0r CQkJWHExID0gTlVMTDsKLSsJCQlCTl9mcmVlKFhxMik7Ci0rCQkJWHEyID0gTlVMTDsKLSsJCQlC Tl9mcmVlKFhxKTsKLSsJCQlYcSA9IE5VTEw7Ci0rCQkJRklQU19yc2FfZnJlZShyc2EpOwotKwkJ CXJzYSA9IE5VTEw7Ci0rCQkJfQotKwkJfQotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsK LSsJaWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxpbmVi dWYpCi0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCi0rCWlmIChYcDEpCi0rCQlCTl9mcmVl KFhwMSk7Ci0rCWlmIChYcDIpCi0rCQlCTl9mcmVlKFhwMik7Ci0rCWlmIChYcCkKLSsJCUJOX2Zy ZWUoWHApOwotKwlpZiAoWHExKQotKwkJQk5fZnJlZShYcTEpOwotKwlpZiAoWHExKQotKwkJQk5f ZnJlZShYcTEpOwotKwlpZiAoWHEyKQotKwkJQk5fZnJlZShYcTIpOwotKwlpZiAoWHEpCi0rCQlC Tl9mcmVlKFhxKTsKLSsJaWYgKGUpCi0rCQlCTl9mcmVlKGUpOwotKwlpZiAocnNhKQotKwkJRklQ U19yc2FfZnJlZShyc2EpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsK LSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRc biIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCByc2Ff cHJpbnRrZXkxKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhwMSwgQklHTlVNICpY cDIsIEJJR05VTSAqWHAsCi0rCQlCSUdOVU0gKmUpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCUJJ R05VTSAqcDEgPSBOVUxMLCAqcDIgPSBOVUxMOwotKwlwMSA9IEJOX25ldygpOwotKwlwMiA9IEJO X25ldygpOwotKwlpZiAoIXAxIHx8ICFwMikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghUlNB X1g5MzFfZGVyaXZlX2V4KHJzYSwgcDEsIHAyLCBOVUxMLCBOVUxMLCBYcDEsIFhwMiwgWHAsCi0r CQkJCQkJTlVMTCwgTlVMTCwgTlVMTCwgZSwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlk b19ibl9wcmludF9uYW1lKG91dCwgInAxIiwgcDEpOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwg InAyIiwgcDIpOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgInAiLCByc2EtPnApOwotKwotKwly ZXQgPSAxOwotKwotKwllcnJvcjoKLSsJaWYgKHAxKQotKwkJQk5fZnJlZShwMSk7Ci0rCWlmIChw MikKLSsJCUJOX2ZyZWUocDIpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rc3RhdGljIGlu dCByc2FfcHJpbnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhxMSwgQklH TlVNICpYcTIsIEJJR05VTSAqWHEpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCUJJR05VTSAqcTEg PSBOVUxMLCAqcTIgPSBOVUxMOwotKwlxMSA9IEJOX25ldygpOwotKwlxMiA9IEJOX25ldygpOwot KwlpZiAoIXExIHx8ICFxMikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghUlNBX1g5MzFfZGVy aXZlX2V4KHJzYSwgTlVMTCwgTlVMTCwgcTEsIHEyLCBOVUxMLCBOVUxMLCBOVUxMLAotKwkJCQkJ CVhxMSwgWHEyLCBYcSwgTlVMTCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlkb19ibl9w cmludF9uYW1lKG91dCwgInExIiwgcTEpOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgInEyIiwg cTIpOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgInEiLCByc2EtPnEpOwotKwlkb19ibl9wcmlu dF9uYW1lKG91dCwgIm4iLCByc2EtPm4pOwotKwlkb19ibl9wcmludF9uYW1lKG91dCwgImQiLCBy c2EtPmQpOwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsJaWYgKHExKQotKwkJQk5fZnJl ZShxMSk7Ci0rCWlmIChxMikKLSsJCUJOX2ZyZWUocTIpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9 Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfcnNhc3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19y c2FzdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0 ZXN0LmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCTIwMTAtMDYtMDQgMTI6 MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDM3MCBAQAotKy8qIGZpcHNfcnNhc3Rl c3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNz bC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5z aW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK LSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK LSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlw dG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRz b2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0K LSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRl IDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC94NTA5djMuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1 cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUg ImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIGludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICpp biwgaW50IFNhbHRsZW4pOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNB ICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBN c2dsZW4sIGludCBTYWx0bGVuKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp Ci0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDEs IFNhbHRsZW4gPSAtMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19w cmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoKGFyZ2MgPiAyKSAm JiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IGF0b2ko YXJndlsyXSk7Ci0rCQlpZiAoU2FsdGxlbiA8IDApCi0rCQkJewotKwkJCWZwcmludGYoc3RkZXJy LCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOwotKwkJCWdvdG8gZW5kOwotKwkJCX0K LSsJCWFyZ2MgLT0gMjsKLSsJCWFyZ3YgKz0gMjsKLSsJCX0KLSsJZWxzZSBpZiAoKGFyZ2MgPiAx KSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IC0yOwot KwkJYXJnYy0tOwotKwkJYXJndisrOwotKwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4g PSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAo YXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3Zb Ml0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwot KwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRp YWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIXJzYV9z dGVzdChvdXQsIGluLCBTYWx0bGVuKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwg UlNBU1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQot KwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmlu dF9lcnJvcnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4p OwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwly ZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQw Ci0rCi0raW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKLSsJ ewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwg KnZhbHVlOwotKwlSU0EgKnJzYSA9IE5VTEw7Ci0rCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7 Ci0rCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEw7Ci0rCWxvbmcgTXNnbGVuID0gLTE7Ci0rCWlu dCBrZXlsZW4gPSAtMSwgY3VycmVudF9rZXlsZW4gPSAtMTsKLSsJaW50IHJldCA9IDA7Ci0rCWlu dCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhM SU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4p OwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJ d2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0r CQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxp bmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZv ciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5v ID0ganVzdCBjb3B5ICovCi0rCQlpZiAoIXApCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1 Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwot KwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGls ZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9 IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJv bSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJ CQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8K LSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdc bicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQkv KiBMb29rIGZvciBbbW9kID0gWFhYXSBmb3Iga2V5IGxlbmd0aCAqLwotKwotKwkJaWYgKCFzdHJj bXAoa2V5d29yZCwgIlttb2QiKSkKLSsJCQl7Ci0rCQkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVl KSAtIDE7Ci0rCQkJaWYgKCpwICE9ICddJykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkq cCA9IDA7Ci0rCQkJa2V5bGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKGtleWxlbiA8IDApCi0r CQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAiU0hBQWxnIikpCi0rCQkJewotKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQotKwkJ CQlkZ3N0ID0gRVZQX3NoYTEoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0 IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1 ZSwgIlNIQTI1NiIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOwotKwkJCWVsc2UgaWYgKCFz dHJjbXAodmFsdWUsICJTSEEzODQiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKLSsJCQll bHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhNTEy KCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLAotKwkJCQkJIkZBVEFM OiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAotKwkJCQkJCQkJdmFsdWUpOwotKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJy b3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwot KwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJ CWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0r Ci0rCQkvKiBJZiBrZXkgbGVuZ3RoIGhhcyBjaGFuZ2VkLCBnZW5lcmF0ZSBhbmQgb3V0cHV0IHB1 YmxpYwotKwkJICoga2V5IGNvbXBvbmVudHMgb2YgbmV3IFJTQSBwcml2YXRlIGtleS4KLSsJCSAq LwotKwotKwkJaWYgKGtleWxlbiAhPSBjdXJyZW50X2tleWxlbikKLSsJCQl7Ci0rCQkJQklHTlVN ICpibl9lOwotKwkJCWlmIChyc2EpCi0rCQkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsJCQlyc2Eg PSBGSVBTX3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJzYSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQli bl9lID0gQk5fbmV3KCk7Ci0rCQkJaWYgKCFibl9lIHx8ICFCTl9zZXRfd29yZChibl9lLCAweDEw MDEpKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWlmICghUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4 KHJzYSwga2V5bGVuLCBibl9lLCBOVUxMKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlCTl9mcmVl KGJuX2UpOwotKwkJCWZwdXRzKCJuID0gIiwgb3V0KTsKLSsJCQlkb19ibl9wcmludChvdXQsIHJz YS0+bik7Ci0rCQkJZnB1dHMoIlxuZSA9ICIsIG91dCk7Ci0rCQkJZG9fYm5fcHJpbnQob3V0LCBy c2EtPmUpOwotKwkJCWZwdXRzKCJcbiIsIG91dCk7Ci0rCQkJY3VycmVudF9rZXlsZW4gPSBrZXls ZW47Ci0rCQkJfQotKwotKwkJaWYgKE1zZyAmJiBkZ3N0KQotKwkJCXsKLSsJCQlpZiAoIXJzYV9w cmludHNpZyhvdXQsIHJzYSwgZGdzdCwgTXNnLCBNc2dsZW4sCi0rCQkJCQkJCQlTYWx0bGVuKSkK LSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxM OwotKwkJCX0KLSsKLSsJCX0KLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChv bGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJ T1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwlpZiAocnNhKQotKwkJRklQU19yc2FfZnJlZShyc2Ep OwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRl cnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwot Kwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAq b3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAotKwkJdW5zaWduZWQgY2hhciAqTXNn LCBsb25nIE1zZ2xlbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2ln bmVkIGNoYXIgKnNpZ2J1ZiA9IE5VTEw7Ci0rCWludCBpLCBzaWdsZW47Ci0rCS8qIEVWUF9QS0VZ IHN0cnVjdHVyZSAqLwotKwlFVlBfUEtFWSBwazsKLSsJRVZQX01EX0NUWCBjdHg7Ci0rCXBrLnR5 cGUgPSBFVlBfUEtFWV9SU0E7Ci0rCXBrLnBrZXkucnNhID0gcnNhOwotKwotKwlzaWdsZW4gPSBS U0Ffc2l6ZShyc2EpOwotKwlzaWdidWYgPSBPUEVOU1NMX21hbGxvYyhzaWdsZW4pOwotKwlpZiAo IXNpZ2J1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsK LSsJaWYgKFNhbHRsZW4gPj0gMCkKLSsJCXsKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0 eCwKLSsJCQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7Ci0rCQl9 Ci0rCWVsc2UgaWYgKFNhbHRsZW4gPT0gLTIpCi0rCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZj dHgsIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSk7Ci0rCWlmICghRVZQX1NpZ25Jbml0X2V4KCZj dHgsIGRnc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnblVwZGF0ZSgm Y3R4LCBNc2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9TaWduRmluYWwo JmN0eCwgc2lnYnVmLCAodW5zaWduZWQgaW50ICopJnNpZ2xlbiwgJnBrKSkKLSsJCWdvdG8gZXJy b3I7Ci0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJZnB1dHMoIlMgPSAiLCBv dXQpOwotKwotKwlmb3IgKGkgPSAwOyBpIDwgc2lnbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwg IiUwMlgiLCBzaWdidWZbaV0pOwotKwotKwlmcHV0cygiXG4iLCBvdXQpOwotKwotKwlyZXQgPSAx OwotKwotKwllcnJvcjoKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRpZgotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMuZmlwcyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYwotLS0tIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMJMjAxMC0wNi0wNCAx MjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfcnNhdnRlc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAot QEAgLTAsMCArMSwzNzcgQEAKLSsvKiBmaXBzX3JzYXZ0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5 IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wK LSsgKiBwcm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQg KGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoK LSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K LSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgot KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAot KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0r ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0 dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRz b2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8 Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rCi0r I2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJu KDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK2ludCBy c2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgc2FsdGxlbik7Ci0rc3RhdGljIGludCBy c2FfcHJpbnR2ZXIoRklMRSAqb3V0LAotKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCi0rCQljb25z dCBFVlBfTUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLAotKwkJ dW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbik7Ci0rCi0raW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5V TEw7Ci0rCi0rCWludCByZXQgPSAxOwotKwlpbnQgU2FsdGxlbiA9IC0xOwotKwotKwlpZighRklQ U19tb2RlX3NldCgxKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZ290byBlbmQ7 Ci0rCQl9Ci0rCi0rCWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwgYXJndlsx XSkpCi0rCQl7Ci0rCQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKLSsJCWlmIChTYWx0bGVuIDwg MCkKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0IGxlbmd0 aFxuIik7Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwkJYXJnYyAtPSAyOwotKwkJYXJndiArPSAy OwotKwkJfQotKwllbHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwgYXJndlsx XSkpCi0rCQl7Ci0rCQlTYWx0bGVuID0gLTI7Ci0rCQlhcmdjLS07Ci0rCQlhcmd2Kys7Ci0rCQl9 Ci0rCi0rCWlmIChhcmdjID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0rCQlpbiA9IGZv cGVuKGFyZ3ZbMV0sICJyIik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9IHN0ZG91dDsK LSsJZWxzZQotKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYgKCFpbikKLSsJ CXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3Jc biIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290 byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghcnNhX3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCi0rCQl7 Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQVZURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJv clxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5k OgotKwotKwlpZiAocmV0KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAo aW4gIT0gc3RkaW4pKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91 dCkpCi0rCQlmY2xvc2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZp bmUgUlNBX1RFU1RfTUFYTElORUxFTgkxMDI0MAotKwotK2ludCByc2FfdGVzdChGSUxFICpvdXQs IEZJTEUgKmluLCBpbnQgU2FsdGxlbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYs ICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwljb25zdCBFVlBfTUQgKmRnc3Qg PSBOVUxMOwotKwlCSUdOVU0gKm4gPSBOVUxMLCAqZSA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIg Kk1zZyA9IE5VTEwsICpTID0gTlVMTDsKLSsJbG9uZyBNc2dsZW4sIFNsZW47Ci0rCWludCByZXQg PSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNB X1RFU1RfTUFYTElORUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9N QVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJy b3I7Ci0rCi0rCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4p KQotKwkJewotKwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtl eXdvcmQgPSBsaW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAo aXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJ LyogTG9vayBmb3IgPSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0r CQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0 IGNvcHkgKi8KLSsJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQotKwkJCXsKLSsJCQlpZiAoZnB1 dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwot KwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAq LwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwot KwotKwkJKnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5n IHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2 YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9t IHZhbHVlICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxl ICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAw OwotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19o ZXgyYm4oJm4sdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4oJmUs dmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgIlNIQUFsZyIpKQotKwkJCXsKLSsJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNI QTEiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGExKCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1 ZSwgIlNIQTIyNCIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOwotKwkJCWVsc2UgaWYgKCFz dHJjbXAodmFsdWUsICJTSEEyNTYiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKLSsJCQll bHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMzg0 KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQotKwkJCQlkZ3N0ID0g RVZQX3NoYTUxMigpOwotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwKLSsJ CQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKLSsJCQkJCQkJCXZh bHVlKTsKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlpZiAoTXNnKQotKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOwotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJCQkJKigtLXZhbHVl KSA9ICcwJzsKLSsJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOwotKwkJCWlmICgh TXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgIlMiKSkKLSsJCQl7Ci0rCQkJaWYgKFMpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJ CVMgPSBoZXgyYmluX20odmFsdWUsICZTbGVuKTsKLSsJCQlpZiAoIVMpCi0rCQkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUmVzdWx0Iikp Ci0rCQkJY29udGludWU7Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsKLSsJCWZw dXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJaWYgKG4gJiYgZSAmJiBNc2cgJiYgUyAmJiBkZ3N0 KQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludHZlcihvdXQsIG4sIGUsIGRnc3QsCi0rCQkJCQlN c2csIE1zZ2xlbiwgUywgU2xlbiwgU2FsdGxlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BF TlNTTF9mcmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJCQlPUEVOU1NMX2ZyZWUoUyk7Ci0r CQkJUyA9IE5VTEw7Ci0rCQkJfQotKwotKwkJfQotKwotKwotKwlyZXQgPSAxOwotKwotKwotKwll cnJvcjoKLSsKLSsJaWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJ aWYgKGxpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChuKQotKwkJQk5f ZnJlZShuKTsKLSsJaWYgKGUpCi0rCQlCTl9mcmVlKGUpOwotKwotKwlyZXR1cm4gcmV0OwotKwot KwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBw cm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0r Ci0rc3RhdGljIGludCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAotKwkJQklHTlVNICpuLCBCSUdO VU0gKmUsCi0rCQljb25zdCBFVlBfTUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGxv bmcgTXNnbGVuLAotKwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbikK LSsJewotKwlpbnQgcmV0ID0gMCwgcjsKLSsJLyogU2V0dXAgUlNBIGFuZCBFVlBfUEtFWSBzdHJ1 Y3R1cmVzICovCi0rCVJTQSAqcnNhX3B1YmtleSA9IE5VTEw7Ci0rCUVWUF9QS0VZIHBrOwotKwlF VlBfTURfQ1RYIGN0eDsKLSsJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKLSsJcnNhX3B1Ymtl eSA9IEZJUFNfcnNhX25ldygpOwotKwlpZiAoIXJzYV9wdWJrZXkpCi0rCQlnb3RvIGVycm9yOwot Kwlyc2FfcHVia2V5LT5uID0gQk5fZHVwKG4pOwotKwlyc2FfcHVia2V5LT5lID0gQk5fZHVwKGUp OwotKwlpZiAoIXJzYV9wdWJrZXktPm4gfHwgIXJzYV9wdWJrZXktPmUpCi0rCQlnb3RvIGVycm9y OwotKwlway50eXBlID0gRVZQX1BLRVlfUlNBOwotKwlway5wa2V5LnJzYSA9IHJzYV9wdWJrZXk7 Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKFNhbHRsZW4gPj0gMCkKLSsJ CXsKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKLSsJCQlFVlBfTURfQ1RYX0ZMQUdf UEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7Ci0rCQl9Ci0rCWVsc2UgaWYgKFNhbHRsZW4gPT0g LTIpCi0rCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURf WDkzMSk7Ci0rCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkpCi0rCQln b3RvIGVycm9yOwotKwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQot KwkJZ290byBlcnJvcjsKLSsKLSsJciA9IEVWUF9WZXJpZnlGaW5hbCgmY3R4LCBTLCBTbGVuLCAm cGspOwotKwotKwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCWlmIChyIDwgMCkK LSsJCWdvdG8gZXJyb3I7Ci0rCUVSUl9jbGVhcl9lcnJvcigpOwotKwotKwlpZiAociA9PSAwKQot KwkJZnB1dHMoIlJlc3VsdCA9IEZcbiIsIG91dCk7Ci0rCWVsc2UKLSsJCWZwdXRzKCJSZXN1bHQg PSBQXG4iLCBvdXQpOwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsJaWYgKHJzYV9wdWJr ZXkpCi0rCQlGSVBTX3JzYV9mcmVlKHJzYV9wdWJrZXkpOwotKwlpZiAoYnVmKQotKwkJT1BFTlNT TF9mcmVlKGJ1Zik7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMuZmlwcyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6 MTUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX3NoYXRlc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTAs MCArMSwzODggQEAKLSsvKiBmaXBzX3NoYXRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3Rl cGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHBy b2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAw NSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0r ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAq IFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkg RXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29t KS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5o PgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgotKwotKyNpZm5k ZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7 Ci0rICAgIHByaW50ZigiTm8gRklQUyBTSEFYWFggc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigw KTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMg aW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKLStzdGF0aWMgaW50IHByaW50X2Rn c3QoY29uc3QgRVZQX01EICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBp bnQgTXNnbGVuKTsKLStzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJ TEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKTsKLSsKLStpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0 ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQot KwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYg KGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsx XSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0r CQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnBy aW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQln b3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwg IkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJ CX0KLSsKLSsJaWYgKCFkZ3N0X3Rlc3Qob3V0LCBpbikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMIGRpZ2VzdCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7 Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJ CWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZj bG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7 Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFNIQV9URVNUX01BWF9CSVRT CTEwMjQwMAotKyNkZWZpbmUgU0hBX1RFU1RfTUFYTElORUxFTgkoKChTSEFfVEVTVF9NQVhfQklU UyA+PiAzKSAqIDIpICsgMTAwKQotKwotK2ludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICpp bikKLSsJewotKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKLSsJY2hhciAqbGluZWJ1ZiwgKm9s aW5lYnVmLCAqcCwgKnE7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJdW5zaWduZWQgY2hh ciAqTXNnID0gTlVMTCwgKlNlZWQgPSBOVUxMOwotKwlsb25nIE1zZ0xlbiA9IC0xLCBMZW4gPSAt MSwgU2VlZExlbiA9IC0xOwotKwlpbnQgcmV0ID0gMDsKLSsJaW50IGxudW0gPSAwOwotKwotKwlv bGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVm ID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1 ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwotKwl3aGlsZSAoZmdldHMob2xp bmVidWYsIFNIQV9URVNUX01BWExJTkVMRU4sIGluKSkKLSsJCXsKLSsJCWxudW0rKzsKLSsJCXN0 cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJCS8qIFNr aXAgbGVhZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtl eXdvcmQpKQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwkJ cCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0 aCBbIChmb3IgW0w9MjBdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYgKCFwKQotKwkJCXsKLSsJ CQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlxID0g cCAtIDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsKLSsJCSpwID0gMDsKLSsJ CXZhbHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVl ICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJCXZhbHVl Kys7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJcCA9 IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsKLSsJCWlmICghc3RyY21w KGtleXdvcmQsIltMIikgJiYgKnA9PSddJykKLSsJCQl7Ci0rCQkJc3dpdGNoIChhdG9pKHZhbHVl KSkKLSsJCQkJewotKwkJCQljYXNlIDIwOiBtZD1FVlBfc2hhMSgpOyAgIGJyZWFrOwotKwkJCQlj YXNlIDI4OiBtZD1FVlBfc2hhMjI0KCk7IGJyZWFrOwotKwkJCQljYXNlIDMyOiBtZD1FVlBfc2hh MjU2KCk7IGJyZWFrOwotKwkJCQljYXNlIDQ4OiBtZD1FVlBfc2hhMzg0KCk7IGJyZWFrOwotKwkJ CQljYXNlIDY0OiBtZD1FVlBfc2hhNTEyKCk7IGJyZWFrOwotKwkJCQlkZWZhdWx0OiBnb3RvIHBh cnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi TGVuIikpCi0rCQkJewotKwkJCWlmIChMZW4gIT0gLTEpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJTGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKExlbiA8IDApCi0rCQkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCQkJLyogT25seSBoYW5kbGUgbXVsdGlwbGVzIG9mIDggYml0cyAqLwotKwkJ CWlmIChMZW4gJiAweDcpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKExlbiA+IFNI QV9URVNUX01BWF9CSVRTKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCU1zZ0xlbiA9IExl biA+PiAzOwotKwkJCX0KLSsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQot KwkJCXsKLSsJCQlsb25nIHRtcGxlbjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJ CSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJaWYgKE1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZ0bXBsZW4pOwotKwkJCWlmICghTXNnKQotKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg IlNlZWQiKSkKLSsJCQl7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFs dWUpID0gJzAnOwotKwkJCWlmIChTZWVkKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCVNl ZWQgPSBoZXgyYmluX20odmFsdWUsICZTZWVkTGVuKTsKLSsJCQlpZiAoIVNlZWQpCi0rCQkJCWdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTUQi KSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJ ZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAobWQgJiYgTXNnICYmIChNc2dMZW4gPj0g MCkpCi0rCQkJewotKwkJCWlmICghcHJpbnRfZGdzdChtZCwgb3V0LCBNc2csIE1zZ0xlbikpCi0r CQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsK LSsJCQlNc2dMZW4gPSAtMTsKLSsJCQlMZW4gPSAtMTsKLSsJCQl9Ci0rCQllbHNlIGlmIChtZCAm JiBTZWVkICYmIChTZWVkTGVuID4gMCkpCi0rCQkJewotKwkJCWlmICghcHJpbnRfbW9udGUobWQs IG91dCwgU2VlZCwgU2VlZExlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVl KFNlZWQpOwotKwkJCVNlZWQgPSBOVUxMOwotKwkJCVNlZWRMZW4gPSAtMTsKLSsJCQl9Ci0rCQot KwotKwkJfQotKwotKwotKwlyZXQgPSAxOwotKwotKwotKwllcnJvcjoKLSsKLSsJaWYgKG9saW5l YnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxpbmVidWYpCi0rCQlPUEVO U1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChNc2cpCi0rCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJ aWYgKFNlZWQpCi0rCQlPUEVOU1NMX2ZyZWUoU2VlZCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0r CXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHBy b2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsK LStzdGF0aWMgaW50IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICplbWQsIEZJTEUgKm91dCwKLSsJ CXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbikKLSsJewotKwlpbnQgaSwgbWRsZW47Ci0r CXVuc2lnbmVkIGNoYXIgbWRbRVZQX01BWF9NRF9TSVpFXTsKLSsJaWYgKCFFVlBfRGlnZXN0KE1z ZywgTXNnbGVuLCBtZCwgKHVuc2lnbmVkIGludCAqKSZtZGxlbiwgZW1kLCBOVUxMKSkKLSsJCXsK LSsJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBIQVNIXG4iLCBzdGRlcnIpOwotKwkJcmV0dXJu IDA7Ci0rCQl9Ci0rCWZwdXRzKCJNRCA9ICIsIG91dCk7Ci0rCWZvciAoaSA9IDA7IGkgPCBtZGxl bjsgaSsrKQotKwkJZnByaW50ZihvdXQsICIlMDJ4IiwgbWRbaV0pOwotKwlmcHV0cygiXG4iLCBv dXQpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3Qg RVZQX01EICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRM ZW4pCi0rCXsKLSsJdW5zaWduZWQgaW50IGksIGosIGs7Ci0rCWludCByZXQgPSAwOwotKwlFVlBf TURfQ1RYIGN0eDsKLSsJdW5zaWduZWQgY2hhciAqbTEsICptMiwgKm0zLCAqcDsKLSsJdW5zaWdu ZWQgaW50IG1sZW4sIG0xbGVuLCBtMmxlbiwgbTNsZW47Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgm Y3R4KTsKLSsKLSsJaWYgKFNlZWRMZW4gPiBFVlBfTUFYX01EX1NJWkUpCi0rCQltbGVuID0gU2Vl ZExlbjsKLSsJZWxzZQotKwkJbWxlbiA9IEVWUF9NQVhfTURfU0laRTsKLSsKLSsJbTEgPSBPUEVO U1NMX21hbGxvYyhtbGVuKTsKLSsJbTIgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKLSsJbTMgPSBP UEVOU1NMX21hbGxvYyhtbGVuKTsKLSsKLSsJaWYgKCFtMSB8fCAhbTIgfHwgIW0zKQotKwkJZ290 byBtY19lcnJvcjsKLSsKLSsJbTFsZW4gPSBtMmxlbiA9IG0zbGVuID0gU2VlZExlbjsKLSsJbWVt Y3B5KG0xLCBTZWVkLCBTZWVkTGVuKTsKLSsJbWVtY3B5KG0yLCBTZWVkLCBTZWVkTGVuKTsKLSsJ bWVtY3B5KG0zLCBTZWVkLCBTZWVkTGVuKTsKLSsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsKLSsJ Zm9yIChqID0gMDsgaiA8IDEwMDsgaisrKQotKwkJewotKwkJZm9yIChpID0gMDsgaSA8IDEwMDA7 IGkrKykKLSsJCQl7Ci0rCQkJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwgbWQsIE5VTEwpOwotKwkJ CUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTEsIG0xbGVuKTsKLSsJCQlFVlBfRGlnZXN0VXBkYXRl KCZjdHgsIG0yLCBtMmxlbik7Ci0rCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMywgbTNsZW4p OwotKwkJCXAgPSBtMTsKLSsJCQltMSA9IG0yOwotKwkJCW0xbGVuID0gbTJsZW47Ci0rCQkJbTIg PSBtMzsKLSsJCQltMmxlbiA9IG0zbGVuOwotKwkJCW0zID0gcDsKLSsJCQlFVlBfRGlnZXN0Rmlu YWxfZXgoJmN0eCwgbTMsICZtM2xlbik7Ci0rCQkJfQotKwkJZnByaW50ZihvdXQsICJDT1VOVCA9 ICVkXG4iLCBqKTsKLSsJCWZwdXRzKCJNRCA9ICIsIG91dCk7Ci0rCQlmb3IgKGsgPSAwOyBrIDwg bTNsZW47IGsrKykKLSsJCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtM1trXSk7Ci0rCQlmcHV0cygi XG5cbiIsIG91dCk7Ci0rCQltZW1jcHkobTEsIG0zLCBtM2xlbik7Ci0rCQltZW1jcHkobTIsIG0z LCBtM2xlbik7Ci0rCQltMWxlbiA9IG0ybGVuID0gbTNsZW47Ci0rCQl9Ci0rCi0rCXJldCA9IDE7 Ci0rCi0rCW1jX2Vycm9yOgotKwlpZiAobTEpCi0rCQlPUEVOU1NMX2ZyZWUobTEpOwotKwlpZiAo bTIpCi0rCQlPUEVOU1NMX2ZyZWUobTIpOwotKwlpZiAobTMpCi0rCQlPUEVOU1NMX2ZyZWUobTMp OwotKwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0K LSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlw c191dGwuaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaAot LS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaC5maXBzCTIwMTAt MDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX3V0bC5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAw Ci1AQCAtMCwwICsxLDM0MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAy MDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAot KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotK3ZvaWQg ZG9fcHJpbnRfZXJyb3JzKHZvaWQpCi0rCXsKLSsJY29uc3QgY2hhciAqZmlsZSwgKmRhdGE7Ci0r CWludCBsaW5lLCBmbGFnczsKLSsJdW5zaWduZWQgbG9uZyBsOwotKwl3aGlsZSAoKGwgPSBFUlJf Z2V0X2Vycm9yX2xpbmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRhLCAmZmxhZ3MpKSkKLSsJCXsK LSsJCWZwcmludGYoc3RkZXJyLCAiRVJST1I6JWx4OmxpYj0lZCxmdW5jPSVkLHJlYXNvbj0lZCIK LSsJCQkJIjpmaWxlPSVzOmxpbmU9JWQ6JXNcbiIsCi0rCQkJbCwgRVJSX0dFVF9MSUIobCksIEVS Ul9HRVRfRlVOQyhsKSwgRVJSX0dFVF9SRUFTT04obCksCi0rCQkJZmlsZSwgbGluZSwgZmxhZ3Mg JiBFUlJfVFhUX1NUUklORyA/IGRhdGEgOiAiIik7Ci0rCQl9Ci0rCX0KLSsKLStpbnQgaGV4MmJp bihjb25zdCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBu MSwgbjI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2g7Ci0rCi0rICAgIGZvciAobjE9MCxuMj0wIDsg aW5bbjFdICYmIGluW24xXSAhPSAnXG4nIDsgKQotKwl7IC8qIGZpcnN0IGJ5dGUgKi8KLSsJaWYg KChpbltuMV0gPj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCi0rCSAgICBjaCA9IGluW24xKytd IC0gJzAnOwotKwllbHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQot KwkgICAgY2ggPSBpbltuMSsrXSAtICdBJyArIDEwOwotKwllbHNlIGlmICgoaW5bbjFdID49ICdh JykgJiYgKGluW24xXSA8PSAnZicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEwOwot KwllbHNlCi0rCSAgICByZXR1cm4gLTE7Ci0rCWlmKCFpbltuMV0pCi0rCSAgICB7Ci0rCSAgICBv dXRbbjIrK109Y2g7Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJb3V0W24yXSA9IGNoIDw8IDQ7 Ci0rCS8qIHNlY29uZCBieXRlICovCi0rCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8 PSAnOScpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKLSsJZWxzZSBpZiAoKGluW24xXSA+ PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAx MDsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKLSsJICAg IGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKLSsJZWxzZQotKwkgICAgcmV0dXJuIC0xOwotKwlv dXRbbjIrK10gfD0gY2g7Ci0rCX0KLSsgICAgcmV0dXJuIG4yOwotKyAgICB9Ci0rCi0rdW5zaWdu ZWQgY2hhciAqaGV4MmJpbl9tKGNvbnN0IGNoYXIgKmluLCBsb25nICpwbGVuKQotKwl7Ci0rCXVu c2lnbmVkIGNoYXIgKnA7Ci0rCXAgPSBPUEVOU1NMX21hbGxvYygoc3RybGVuKGluKSArIDEpLzIp OwotKwkqcGxlbiA9IGhleDJiaW4oaW4sIHApOwotKwlyZXR1cm4gcDsKLSsJfQotKwotK2ludCBk b19oZXgyYm4oQklHTlVNICoqcHIsIGNvbnN0IGNoYXIgKmluKQotKwl7Ci0rCXVuc2lnbmVkIGNo YXIgKnA7Ci0rCWxvbmcgcGxlbjsKLSsJaW50IHIgPSAwOwotKwlwID0gaGV4MmJpbl9tKGluLCAm cGxlbik7Ci0rCWlmICghcCkKLSsJCXJldHVybiAwOwotKwlpZiAoISpwcikKLSsJCSpwciA9IEJO X25ldygpOwotKwlpZiAoISpwcikKLSsJCXJldHVybiAwOwotKwlpZiAoQk5fYmluMmJuKHAsIHBs ZW4sICpwcikpCi0rCQlyID0gMTsKLSsJT1BFTlNTTF9mcmVlKHApOwotKwlyZXR1cm4gcjsKLSsJ fQotKwotK2ludCBkb19ibl9wcmludChGSUxFICpvdXQsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50 IGxlbiwgaTsKLSsJdW5zaWduZWQgY2hhciAqdG1wOwotKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4p OwotKwlpZiAobGVuID09IDApCi0rCQl7Ci0rCQlmcHV0cygiMDAiLCBvdXQpOwotKwkJcmV0dXJu IDE7Ci0rCQl9Ci0rCi0rCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCWlmICghdG1wKQot KwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0r CQlyZXR1cm4gMDsKLSsJCX0KLSsJQk5fYm4yYmluKGJuLCB0bXApOwotKwlmb3IgKGkgPSAwOyBp IDwgbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMngiLCB0bXBbaV0pOwotKwlPUEVOU1NM X2ZyZWUodG1wKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZG9fYm5fcHJpbnRfbmFtZShG SUxFICpvdXQsIGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IHI7Ci0r CWZwcmludGYob3V0LCAiJXMgPSAiLCBuYW1lKTsKLSsJciA9IGRvX2JuX3ByaW50KG91dCwgYm4p OwotKwlpZiAoIXIpCi0rCQlyZXR1cm4gMDsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsJcmV0dXJu IDE7Ci0rCX0KLSsKLStpbnQgcGFyc2VfbGluZShjaGFyICoqcGt3LCBjaGFyICoqcHZhbCwgY2hh ciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0rCXsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVl LCAqcCwgKnE7Ci0rCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCWtleXdvcmQgPSBsaW5l YnVmOwotKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKmtleXdvcmQpKQotKwkJa2V5d29yZCsrOwotKwotKwkvKiBMb29rIGZvciA9IHNp Z24gKi8KLSsJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkvKiBJZiBubyAnPScgZXhp dCAqLwotKwlpZiAoIXApCi0rCQlyZXR1cm4gMDsKLSsKLSsJcSA9IHAgLSAxOwotKwotKwkvKiBS ZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KnEpKQotKwkJKnEtLSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsgMTsKLSsKLSsJ LyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVtb3ZlIHRyYWls aW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7 Ci0rCi0rCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQot KwkJKnAtLSA9IDA7Ci0rCi0rCSpwa3cgPSBrZXl3b3JkOwotKwkqcHZhbCA9IHZhbHVlOwotKwly ZXR1cm4gMTsKLSsJfQotKwotK0JJR05VTSAqaGV4MmJuKGNvbnN0IGNoYXIgKmluKQotKyAgICB7 Ci0rICAgIEJJR05VTSAqcD1OVUxMOwotKwotKyAgICBpZiAoIWRvX2hleDJibigmcCwgaW4pKQot KwlyZXR1cm4gTlVMTDsKLSsKLSsgICAgcmV0dXJuIHA7Ci0rICAgIH0KLSsKLStpbnQgYmluMmhl eChjb25zdCB1bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKLSsgICAgewotKyAg ICBpbnQgbjEsIG4yOwotKyAgICB1bnNpZ25lZCBjaGFyIGNoOwotKwotKyAgICBmb3IgKG4xPTAs bjI9MCA7IG4xIDwgbGVuIDsgKytuMSkKLSsJewotKwljaD1pbltuMV0gPj4gNDsKLSsJaWYgKGNo IDw9IDB4MDkpCi0rCSAgICBvdXRbbjIrK109Y2grJzAnOwotKwllbHNlCi0rCSAgICBvdXRbbjIr K109Y2gtMTArJ2EnOwotKwljaD1pbltuMV0gJiAweDBmOwotKwlpZihjaCA8PSAweDA5KQotKwkg ICAgb3V0W24yKytdPWNoKycwJzsKLSsJZWxzZQotKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsK LSsJfQotKyAgICBvdXRbbjJdPSdcMCc7Ci0rICAgIHJldHVybiBuMjsKLSsgICAgfQotKwotK3Zv aWQgcHYoY29uc3QgY2hhciAqdGFnLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCxpbnQgbGVuKQot KyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsKLSsgICAgYmluMmhleCh2YWwsbGVuLG9i dWYpOwotKyAgICBwcmludGYoIiVzID0gJXNcbiIsdGFnLG9idWYpOwotKyAgICB9Ci0rCi0rLyog VG8gYXZvaWQgZXh0ZW5zaXZlIGNoYW5nZXMgdG8gdGVzdCBwcm9ncmFtIGF0IHRoaXMgc3RhZ2Ug anVzdCBjb252ZXJ0Ci0rICogdGhlIGlucHV0IGxpbmUgaW50byBhbiBhY2NlcHRhYmxlIGZvcm0u IEtleXdvcmQgbGluZXMgY29udmVydGVkIHRvIGZvcm0KLSsgKiAia2V5d29yZCA9IHZhbHVlXG4i IG5vIG1hdHRlciB3aGF0IHdoaXRlIHNwYWNlIHByZXNlbnQsIGFsbCBvdGhlciBsaW5lcwotKyAq IGp1c3QgaGF2ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSByZW1vdmVkLgotKyAqLwotKwot K2ludCB0aWR5X2xpbmUoY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0rCXsKLSsJY2hh ciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7Ci0rCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7 Ci0rCWtleXdvcmQgPSBsaW5lYnVmOwotKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJa2V5d29yZCsrOwotKwkv KiBMb29rIGZvciA9IHNpZ24gKi8KLSsJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkv KiBJZiBubyAnPScganVzdCBjaG9wIGxlYWRpbmcsIHRyYWlsaW5nIHdzICovCi0rCWlmICghcCkK LSsJCXsKLSsJCXAgPSBrZXl3b3JkICsgc3RybGVuKGtleXdvcmQpIC0gMTsKLSsJCXdoaWxlICgq cCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwot KwkJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsKLSsJCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7 Ci0rCQlyZXR1cm4gMTsKLSsJCX0KLSsKLSsJcSA9IHAgLSAxOwotKwotKwkvKiBSZW1vdmUgdHJh aWxpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJ KnEtLSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsgMTsKLSsKLSsJLyogUmVtb3Zl IGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNl IGZyb20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCXdo aWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJKnAtLSA9 IDA7Ci0rCi0rCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7Ci0rCXN0cmNhdChvbGluZWJ1Ziwg IiA9ICIpOwotKwlzdHJjYXQob2xpbmVidWYsIHZhbHVlKTsKLSsJc3RyY2F0KG9saW5lYnVmLCAi XG4iKTsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBOQjogdGhpcyByZXR1cm4gdGhlIG51 bWJlciBvZiBfYml0c18gcmVhZCAqLwotK2ludCBiaW50MmJpbihjb25zdCBjaGFyICppbiwgaW50 IGxlbiwgdW5zaWduZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAgICBt ZW1zZXQob3V0LDAsbGVuKTsKLSsgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCi0rCWlmKGlu W25dID09ICcxJykKLSsJICAgIG91dFtuLzhdfD0oMHg4MCA+PiAobiU4KSk7Ci0rICAgIHJldHVy biBsZW47Ci0rICAgIH0KLSsKLStpbnQgYmluMmJpbnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4s aW50IGxlbixjaGFyICpvdXQpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rCi0rICAgIGZvcihuPTAg OyBuIDwgbGVuIDsgKytuKQotKwlvdXRbbl09KGluW24vOF0mKDB4ODAgPj4gKG4lOCkpKSA/ICcx JyA6ICcwJzsKLSsgICAgcmV0dXJuIG47Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSt2b2lkIFByaW50VmFsdWUoY2hh ciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCi0rewotKyNpZiBWRVJCT1NFCi0r ICBjaGFyIG9idWZbMjA0OF07Ci0rICBpbnQgb2xlbjsKLSsgIG9sZW4gPSBiaW4yaGV4KHZhbCwg bGVuLCBvYnVmKTsKLSsgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwot KyNlbmRpZgotK30KLSsKLSt2b2lkIE91dHB1dFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hh ciAqdmFsLCBpbnQgbGVuLCBGSUxFICpyZnAsaW50IGJpdG1vZGUpCi0rICAgIHsKLSsgICAgY2hh ciBvYnVmWzIwNDhdOwotKyAgICBpbnQgb2xlbjsKLSsKLSsgICAgaWYoYml0bW9kZSkKLSsJb2xl bj1iaW4yYmludCh2YWwsbGVuLG9idWYpOwotKyAgICBlbHNlCi0rCW9sZW49YmluMmhleCh2YWws bGVuLG9idWYpOwotKwotKyAgICBmcHJpbnRmKHJmcCwgIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVu LCBvYnVmKTsKLSsjaWYgVkVSQk9TRQotKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBv bGVuLCBvYnVmKTsKLSsjZW5kaWYKLSsgICAgfQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL2ZpcHNfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwc19lcnIuYwot LS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzX2Vyci5jLmZpcHMJMjAxMC0wNi0wNCAxMjoy NToxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwc19lcnIu YwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw3IEBACi0r I2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rIyBpbmNsdWRlICJmaXBzX2Vyci5oIgotKyNlbHNlCi0rc3RhdGljIHZvaWQgKmR1bW15PSZk dW1teTsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzX2Vyci5o LmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHNfZXJyLmgKLS0tLSBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vZmlwc19lcnIuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHNfZXJyLmgJMjAxMC0wNi0wNCAxMjoy NToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMTM3IEBACi0rLyogY3J5cHRvL2ZpcHNf ZXJyLmggKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICog VGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBF cmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20p LgotKyAqCi0rICovCi0rCi0rLyogTk9URTogdGhpcyBmaWxlIHdhcyBhdXRvIGdlbmVyYXRlZCBi eSB0aGUgbWtlcnIucGwgc2NyaXB0OiBhbnkgY2hhbmdlcwotKyAqIG1hZGUgdG8gaXQgd2lsbCBi ZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgbmV4dCB1cGRhdGVzIHRoaXMgZmlsZSwKLSsg KiBvbmx5IHJlYXNvbiBzdHJpbmdzIHdpbGwgYmUgcHJlc2VydmVkLgotKyAqLwotKwotKyNpbmNs dWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsKLSsvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwotKyNpZm5kZWYgT1BFTlNT TF9OT19FUlIKLSsKLSsjZGVmaW5lIEVSUl9GVU5DKGZ1bmMpIEVSUl9QQUNLKEVSUl9MSUJfRklQ UyxmdW5jLDApCi0rI2RlZmluZSBFUlJfUkVBU09OKHJlYXNvbikgRVJSX1BBQ0soRVJSX0xJQl9G SVBTLDAscmVhc29uKQotKwotK3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRklQU19zdHJfZnVuY3Rz W109Ci0rCXsKLSt7RVJSX0ZVTkMoRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TKSwJIkRIX0JV SUxUSU5fR0VOUEFSQU1TIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdF TiksCSJEU0FfQlVJTFRJTl9QQVJBTUdFTiJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0RPX1NJ R04pLAkiRFNBX2RvX3NpZ24ifSwKLSt7RVJSX0ZVTkMoRklQU19GX0RTQV9ET19WRVJJRlkpLAki RFNBX2RvX3ZlcmlmeSJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgpLAki RVZQX0NpcGhlckluaXRfZXgifSwKLSt7RVJSX0ZVTkMoRklQU19GX0VWUF9ESUdFU1RJTklUX0VY KSwJIkVWUF9EaWdlc3RJbml0X2V4In0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX0RT QSksCSJGSVBTX0NIRUNLX0RTQSJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19DSEVDS19JTkNP UkVfRklOR0VSUFJJTlQpLAkiRklQU19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQifSwKLSt7RVJS X0ZVTkMoRklQU19GX0ZJUFNfQ0hFQ0tfUlNBKSwJIkZJUFNfQ0hFQ0tfUlNBIn0sCi0re0VSUl9G VU5DKEZJUFNfRl9GSVBTX0RTQV9DSEVDSyksCSJGSVBTX0RTQV9DSEVDSyJ9LAotK3tFUlJfRlVO QyhGSVBTX0ZfRklQU19NT0RFX1NFVCksCSJGSVBTX21vZGVfc2V0In0sCi0re0VSUl9GVU5DKEZJ UFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QpLAkiZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0 In0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUyksCSJGSVBTX3NlbGZ0ZXN0 X2FlcyJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMpLAkiRklQU19zZWxm dGVzdF9kZXMifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBKSwJIkZJUFNf c2VsZnRlc3RfZHNhIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMpLAki RklQU19zZWxmdGVzdF9obWFjIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX1JO RyksCSJGSVBTX3NlbGZ0ZXN0X3JuZyJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVT VF9TSEExKSwJIkZJUFNfc2VsZnRlc3Rfc2hhMSJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfSEFTSF9G SU5BTCksCSJIQVNIX0ZJTkFMIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlH RU4pLAkiUlNBX0JVSUxUSU5fS0VZR0VOIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BS SVZBVEVfREVDUllQVCksCSJSU0FfRUFZX1BSSVZBVEVfREVDUllQVCJ9LAotK3tFUlJfRlVOQyhG SVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQpLAkiUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQi fSwKLSt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQpLAkiUlNBX0VBWV9Q VUJMSUNfREVDUllQVCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQ VCksCSJSU0FfRUFZX1BVQkxJQ19FTkNSWVBUIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9SU0FfWDkz MV9HRU5FUkFURV9LRVlfRVgpLAkiUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4In0sCi0re0VSUl9G VU5DKEZJUFNfRl9TU0xFQVlfUkFORF9CWVRFUyksCSJTU0xFQVlfUkFORF9CWVRFUyJ9LAotK3sw LE5VTEx9Ci0rCX07Ci0rCi0rc3RhdGljIEVSUl9TVFJJTkdfREFUQSBGSVBTX3N0cl9yZWFzb25z W109Ci0rCXsKLSt7RVJSX1JFQVNPTihGSVBTX1JfQ0FOTk9UX1JFQURfRVhFKSAgICAgICwiY2Fu bm90IHJlYWQgZXhlIn0sCi0re0VSUl9SRUFTT04oRklQU19SX0NBTk5PVF9SRUFEX0VYRV9ESUdF U1QpLCJjYW5ub3QgcmVhZCBleGUgZGlnZXN0In0sCi0re0VSUl9SRUFTT04oRklQU19SX0NPTlRS QURJQ1RJTkdfRVZJREVOQ0UpLCJjb250cmFkaWN0aW5nIGV2aWRlbmNlIn0sCi0re0VSUl9SRUFT T04oRklQU19SX0VYRV9ESUdFU1RfRE9FU19OT1RfTUFUQ0gpLCJleGUgZGlnZXN0IGRvZXMgbm90 IG1hdGNoIn0sCi0re0VSUl9SRUFTT04oRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENI KSwiZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2gifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfRklO R0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCksImZpbmdlcnByaW50IGRv ZXMgbm90IG1hdGNoIG5vbnBpYyByZWxvY2F0ZWQifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfRklO R0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyksImZpbmdlcnByaW50IGRv ZXMgbm90IG1hdGNoIHNlZ21lbnQgYWxpYXNpbmcifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfRklQ U19NT0RFX0FMUkVBRFlfU0VUKSwiZmlwcyBtb2RlIGFscmVhZHkgc2V0In0sCi0re0VSUl9SRUFT T04oRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKSAsImZpcHMgc2VsZnRlc3QgZmFpbGVkIn0s Ci0re0VSUl9SRUFTT04oRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSCkgICAsImludmFsaWQga2V5 IGxlbmd0aCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9LRVlfVE9PX1NIT1JUKSAgICAgICAgLCJr ZXkgdG9vIHNob3J0In0sCi0re0VSUl9SRUFTT04oRklQU19SX05PTl9GSVBTX01FVEhPRCkgICAg ICAsIm5vbiBmaXBzIG1ldGhvZCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9QQUlSV0lTRV9URVNU X0ZBSUxFRCkgLCJwYWlyd2lzZSB0ZXN0IGZhaWxlZCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9S U0FfREVDUllQVF9FUlJPUikgICAgLCJyc2EgZGVjcnlwdCBlcnJvciJ9LAotK3tFUlJfUkVBU09O KEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUikgICAgLCJyc2EgZW5jcnlwdCBlcnJvciJ9LAotK3tF UlJfUkVBU09OKEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpICAgICAgLCJzZWxmdGVzdCBmYWlsZWQi fSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfVEVTVF9GQUlMVVJFKSAgICAgICAgICwidGVzdCBmYWls dXJlIn0sCi0re0VSUl9SRUFTT04oRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JNKSAsInVuc3Vw cG9ydGVkIHBsYXRmb3JtIn0sCi0rezAsTlVMTH0KLSsJfTsKLSsKLSsjZW5kaWYKLSsKLSt2b2lk IEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKQotKwl7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0VS UgotKwotKwlpZiAoRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nKEZJUFNfc3RyX2Z1bmN0c1swXS5lcnJv cikgPT0gTlVMTCkKLSsJCXsKLSsJCUVSUl9sb2FkX3N0cmluZ3MoMCxGSVBTX3N0cl9mdW5jdHMp OwotKwkJRVJSX2xvYWRfc3RyaW5ncygwLEZJUFNfc3RyX3JlYXNvbnMpOwotKwkJfQotKyNlbmRp ZgotKwl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxm dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3Qu YwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMuZmlw cwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAw MDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMTAzIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0r ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICov Ci0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0r I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3N0YXRp YyBzdHJ1Y3QKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl07Ci0rICAgIHVuc2ln bmVkIGNoYXIgcGxhaW50ZXh0WzE2XTsKLSsgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzE2 XTsKLSsgICAgfSB0ZXN0c1tdPQotKwl7Ci0rCXsKLSsJeyAweDAwLDB4MDEsMHgwMiwweDAzLDB4 MDQsMHgwNSwweDA2LDB4MDcsCi0rCSAgMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgw RSwweDBGIH0sCi0rCXsgMHgwMCwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NiwweDc3LAot KwkgIDB4ODgsMHg5OSwweEFBLDB4QkIsMHhDQywweERELDB4RUUsMHhGRiB9LAotKwl7IDB4Njks MHhDNCwweEUwLDB4RDgsMHg2QSwweDdCLDB4MDQsMHgzMCwKLSsJICAweEQ4LDB4Q0QsMHhCNyww eDgwLDB4NzAsMHhCNCwweEM1LDB4NUEgfSwKLSsJfSwKLSsJfTsKLSsKLSt2b2lkIEZJUFNfY29y cnVwdF9hZXMoKQotKyAgICB7Ci0rICAgIHRlc3RzWzBdLmtleVswXSsrOwotKyAgICB9Ci0rCi0r aW50IEZJUFNfc2VsZnRlc3RfYWVzKCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsgICAgaW50IHJl dCA9IDA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5p dCgmY3R4KTsKLSsKLSsgICAgZm9yKG49MCA7IG4gPCAxIDsgKytuKQotKwl7Ci0rCWlmIChmaXBz X2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLAotKwkJCQl0ZXN0c1tuXS5rZXks IE5VTEwsCi0rCQkJCXRlc3RzW25dLnBsYWludGV4dCwKLSsJCQkJdGVzdHNbbl0uY2lwaGVydGV4 dCwKLSsJCQkJMTYpIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJfQotKyAgICByZXQgPSAxOwotKyAg ICBlcnI6Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rICAgIGlmIChyZXQg PT0gMCkKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTLEZJUFNfUl9TRUxG VEVTVF9GQUlMRUQpOwotKyAgICByZXR1cm4gcmV0OwotKyAgICB9Ci0rI2VuZGlmCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vZmlwcy9maXBzLmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzLmMu ZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9maXBzL2ZpcHMuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIw MAotQEAgLTAsMCArMSw0MTkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykg MjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK LSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0r ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0r ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsKLSsj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8bGltaXRzLmg+Ci0rI2luY2x1ZGUgImZpcHNf bG9jbC5oIgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rCi0rI2lmbmRlZiBQQVRIX01BWAotKyNkZWZpbmUgUEFUSF9NQVggMTAyNAotKyNl bmRpZgotKwotK3N0YXRpYyBpbnQgZmlwc19zZWxmdGVzdF9mYWlsOwotK3N0YXRpYyBpbnQgZmlw c19tb2RlOwotK3N0YXRpYyBjb25zdCB2b2lkICpmaXBzX3JhbmRfY2hlY2s7Ci0rCi0rc3RhdGlj IHZvaWQgZmlwc19zZXRfbW9kZShpbnQgb25vZmYpCi0rCXsKLSsJaW50IG93bmluZ190aHJlYWQg PSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQot KwkJewotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfbG9jaygpOwotKwkJZmlwc19tb2Rl ID0gb25vZmY7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd191bmxvY2soKTsKLSsJCX0K LSsJfQotKwotK3N0YXRpYyB2b2lkIGZpcHNfc2V0X3JhbmRfY2hlY2soY29uc3Qgdm9pZCAqcmFu ZF9jaGVjaykKLSsJewotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVh ZCgpOwotKwotKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCi0rCQl7Ci0rCQlpZiAoIW93bmluZ190 aHJlYWQpIGZpcHNfd19sb2NrKCk7Ci0rCQlmaXBzX3JhbmRfY2hlY2sgPSByYW5kX2NoZWNrOwot KwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfdW5sb2NrKCk7Ci0rCQl9Ci0rCX0KLSsKLStp bnQgRklQU19tb2RlKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBvd25pbmdfdGhy ZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQo KSkKLSsJCXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKLSsJCXJldCA9 IGZpcHNfbW9kZTsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOwotKwkJ fQotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNrKHZv aWQpCi0rCXsKLSsJY29uc3Qgdm9pZCAqcmV0ID0gMDsKLSsJaW50IG93bmluZ190aHJlYWQgPSBm aXBzX2lzX293bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJ ewotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOwotKwkJcmV0ID0gZmlwc19y YW5kX2NoZWNrOwotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7Ci0rCQl9 Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCkK LSsgICAgewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQot Kwl7Ci0rCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0r CWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKLSsJcmV0ID0gZmlwc19zZWxmdGVz dF9mYWlsOwotKwlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKLSsJfQotKyAg ICByZXR1cm4gcmV0OwotKyAgICB9Ci0rCi0rLyogU2VsZnRlc3QgZmFpbHVyZSBmYXRhbCBleGl0 IHJvdXRpbmUuIFRoaXMgd2lsbCBiZSBjYWxsZWQKLSsgKiBkdXJpbmcgKmFueSogY3J5cHRvZ3Jh cGhpYyBvcGVyYXRpb24uIEl0IGhhcyB0aGUgbWluaW11bQotKyAqIG92ZXJoZWFkIHBvc3NpYmxl IHRvIGF2b2lkIHRvbyBiaWcgYSBwZXJmb3JtYW5jZSBoaXQuCi0rICovCi0rCi0rdm9pZCBGSVBT X3NlbGZ0ZXN0X2NoZWNrKHZvaWQpCi0rICAgIHsKLSsgICAgaWYgKGZpcHNfc2VsZnRlc3RfZmFp bCkKLSsJewotKwlPcGVuU1NMRGllKF9fRklMRV9fLF9fTElORV9fLCAiRkFUQUwgRklQUyBTRUxG VEVTVCBGQUlMVVJFIik7Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3Rf ZmFpbCh2b2lkKQotKyAgICB7Ci0rICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rICAgIH0K LSsKLStpbnQgRklQU19zZWxmdGVzdCgpCi0rICAgIHsKLSsKLSsgICAgcmV0dXJuIEZJUFNfc2Vs ZnRlc3Rfc2hhMSgpCi0rCSYmIEZJUFNfc2VsZnRlc3RfaG1hYygpCi0rCSYmIEZJUFNfc2VsZnRl c3RfYWVzKCkKLSsJJiYgRklQU19zZWxmdGVzdF9kZXMoKQotKwkmJiBGSVBTX3NlbGZ0ZXN0X3Jz YSgpCi0rCSYmIEZJUFNfc2VsZnRlc3RfZHNhKCk7Ci0rICAgIH0KLSsKLStpbnQgRklQU19tb2Rl X3NldChpbnQgb25vZmYpCi0rICAgIHsKLSsgICAgaW50IGZpcHNfc2V0X293bmluZ190aHJlYWQo KTsKLSsgICAgaW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOwotKyAgICBpbnQgcmV0ID0g MDsKLSsKLSsgICAgZmlwc193X2xvY2soKTsKLSsgICAgZmlwc19zZXRfc3RhcnRlZCgpOwotKyAg ICBmaXBzX3NldF9vd25pbmdfdGhyZWFkKCk7Ci0rCi0rICAgIGlmKG9ub2ZmKQotKwl7Ci0rCXVu c2lnbmVkIGNoYXIgYnVmWzQ4XTsKLSsKLSsJZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsKLSsJ LyogRG9uJ3QgZ28gaW50byBGSVBTIG1vZGUgdHdpY2UsIGp1c3Qgc28gd2UgY2FuIGRvIGF1dG9t YWdpYwotKwkgICBzZWVkaW5nICovCi0rCWlmKEZJUFNfbW9kZSgpKQotKwkgICAgewotKwkgICAg RklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCxGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VU KTsKLSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAg Z290byBlbmQ7Ci0rCSAgICB9Ci0rCi0rI2lmZGVmIE9QRU5TU0xfSUEzMl9TU0UyCi0rCWlmICgo T1BFTlNTTF9pYTMyY2FwICYgKDE8PDI1fDE8PDI2KSkgIT0gKDE8PDI1fDE8PDI2KSkKLSsJICAg IHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsRklQU19SX1VOU1VQUE9SVEVE X1BMQVRGT1JNKTsKLSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAw OwotKwkgICAgZ290byBlbmQ7Ci0rCSAgICB9Ci0rI2VuZGlmCi0rCi0rCS8qIFBlcmZvcm0gUk5H IEtBVCBiZWZvcmUgc2VlZGluZyAqLwotKwlpZiAoIUZJUFNfc2VsZnRlc3Rfcm5nKCkpCi0rCSAg ICB7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAg IGdvdG8gZW5kOwotKwkgICAgfQotKwotKwkvKiBhdXRvbWFnaWNhbGx5IHNlZWQgUFJORyBpZiBu b3QgYWxyZWFkeSBzZWVkZWQgKi8KLSsJaWYoIUZJUFNfcmFuZF9zdGF0dXMoKSkKLSsJICAgIHsK LSsJICAgIGlmKFJBTkRfYnl0ZXMoYnVmLHNpemVvZiBidWYpIDw9IDApCi0rCQl7Ci0rCQlmaXBz X3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkJcmV0ID0gMDsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwkg ICAgRklQU19yYW5kX3NldF9rZXkoYnVmLDMyKTsKLSsJICAgIEZJUFNfcmFuZF9zZWVkKGJ1Zisz MiwxNik7Ci0rCSAgICB9Ci0rCi0rCS8qIG5vdyBzd2l0Y2ggaW50byBGSVBTIG1vZGUgKi8KLSsJ Zmlwc19zZXRfcmFuZF9jaGVjayhGSVBTX3JhbmRfbWV0aG9kKCkpOwotKwlSQU5EX3NldF9yYW5k X21ldGhvZChGSVBTX3JhbmRfbWV0aG9kKCkpOwotKwlpZihGSVBTX3NlbGZ0ZXN0KCkpCi0rCSAg ICBmaXBzX3NldF9tb2RlKDEpOwotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0 X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwly ZXQgPSAxOwotKwlnb3RvIGVuZDsKLSsJfQotKyAgICBmaXBzX3NldF9tb2RlKDApOwotKyAgICBm aXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOwotKyAgICByZXQgPSAxOwotK2VuZDoKLSsgICAgZmlwc19j bGVhcl9vd25pbmdfdGhyZWFkKCk7Ci0rICAgIGZpcHNfd191bmxvY2soKTsKLSsgICAgcmV0dXJu IHJldDsKLSsgICAgfQotKwotK3ZvaWQgZmlwc193X2xvY2sodm9pZCkJCXsgQ1JZUFRPX3dfbG9j ayhDUllQVE9fTE9DS19GSVBTKTsgfQotK3ZvaWQgZmlwc193X3VubG9jayh2b2lkKQl7IENSWVBU T193X3VubG9jayhDUllQVE9fTE9DS19GSVBTKTsgfQotK3ZvaWQgZmlwc19yX2xvY2sodm9pZCkJ CXsgQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19GSVBTKTsgfQotK3ZvaWQgZmlwc19yX3VubG9j ayh2b2lkKQl7IENSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTKTsgfQotKwotK3N0YXRp YyBpbnQgZmlwc19zdGFydGVkID0gMDsKLStzdGF0aWMgdW5zaWduZWQgbG9uZyBmaXBzX3RocmVh ZCA9IDA7Ci0rCi0rdm9pZCBmaXBzX3NldF9zdGFydGVkKHZvaWQpCi0rCXsKLSsJZmlwc19zdGFy dGVkID0gMTsKLSsJfQotKwotK2ludCBmaXBzX2lzX3N0YXJ0ZWQodm9pZCkKLSsJewotKwlyZXR1 cm4gZmlwc19zdGFydGVkOwotKwl9Ci0rCi0raW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lk KQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCi0rCQl7 Ci0rCQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCWlmIChmaXBzX3RocmVh ZCAhPSAwICYmIGZpcHNfdGhyZWFkID09IENSWVBUT190aHJlYWRfaWQoKSkKLSsJCQlyZXQgPSAx OwotKwkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJu IHJldDsKLSsJfQotKwotK2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCi0rCXsKLSsJ aW50IHJldCA9IDA7Ci0rCi0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJCXsKLSsJCUNSWVBU T193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJaWYgKGZpcHNfdGhyZWFkID09IDApCi0r CQkJewotKwkJCWZpcHNfdGhyZWFkID0gQ1JZUFRPX3RocmVhZF9pZCgpOwotKwkJCXJldCA9IDE7 Ci0rCQkJfQotKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJ cmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQodm9pZCkK LSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewot KwkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAoZmlwc190aHJlYWQg PT0gQ1JZUFRPX3RocmVhZF9pZCgpKQotKwkJCXsKLSsJCQlmaXBzX3RocmVhZCA9IDA7Ci0rCQkJ cmV0ID0gMTsKLSsJCQl9Ci0rCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwot KwkJfQotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rLyogR2VuZXJhbGl6ZWQgcHVibGljIGtleSB0 ZXN0IHJvdXRpbmUuIFNpZ25zIGFuZCB2ZXJpZmllcyB0aGUgZGF0YQotKyAqIHN1cHBsaWVkIGlu IHRicyB1c2luZyBtZXNhZ2UgZGlnZXN0IG1kIGFuZCBzZXR0aW5nIG9wdGlvbiBkaWdlc3QKLSsg KiBmbGFncyBtZF9mbGFncy4gSWYgdGhlICdrYXQnIHBhcmFtZXRlciBpcyBub3QgTlVMTCBpdCB3 aWxsCi0rICogYWRkaXRpb25hbGx5IGNoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyBpdDogYSBr bm93biBhbnN3ZXIgdGVzdAotKyAqIFRoZSBzdHJpbmcgImZhaWxfc3RyIiBpcyB1c2VkIGZvciBp ZGVudGlmaWNhdGlvbiBwdXJwb3NlcyBpbiBjYXNlCi0rICogb2YgZmFpbHVyZS4KLSsgKi8KLSsK LStpbnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KEVWUF9QS0VZICpwa2V5LAotKwkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICprYXQsIHVuc2lnbmVkIGludCBrYXRsZW4sCi0rCQkJY29uc3QgRVZQX01EICpkaWdlc3QsIHVu c2lnbmVkIGludCBtZF9mbGFncywKLSsJCQljb25zdCBjaGFyICpmYWlsX3N0cikKLSsJewkKLSsJ aW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgc2lndG1wWzI1Nl0sICpzaWcgPSBzaWd0bXA7 Ci0rCXVuc2lnbmVkIGludCBzaWdsZW47Ci0rCUVWUF9NRF9DVFggbWN0eDsKLSsJRVZQX01EX0NU WF9pbml0KCZtY3R4KTsKLSsKLSsJaWYgKChwa2V5LT50eXBlID09IEVWUF9QS0VZX1JTQSkKLSsJ CSYmIChSU0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkgPiBzaXplb2Yoc2lndG1wKSkpCi0rCQl7Ci0r CQlzaWcgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkpOwotKwkJaWYg KCFzaWcpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVT VCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwot KwlpZiAodGJzbGVuID09IC0xKQotKwkJdGJzbGVuID0gc3RybGVuKChjaGFyICopdGJzKTsKLSsK LSsJaWYgKG1kX2ZsYWdzKQotKwkJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1jdHgsIG1kX2ZsYWdz KTsKLSsKLSsJaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCi0rCQln b3RvIGVycm9yOwotKwlpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCi0r CQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIHNpZywgJnNpZ2xlbiwg cGtleSkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoa2F0ICYmICgoc2lnbGVuICE9IGthdGxl bikgfHwgbWVtY21wKGthdCwgc2lnLCBrYXRsZW4pKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlm ICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCi0rCQlnb3RvIGVycm9y OwotKwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKLSsJCWdvdG8g ZXJyb3I7Ci0rCXJldCA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnLCBzaWdsZW4sIHBrZXkp OwotKwotKwllcnJvcjoKLSsJaWYgKHNpZyAhPSBzaWd0bXApCi0rCQlPUEVOU1NMX2ZyZWUoc2ln KTsKLSsJRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsJaWYgKHJldCAhPSAxKQotKwkJewot KwkJRklQU2VycihGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNULEZJUFNfUl9URVNUX0ZB SUxVUkUpOwotKwkJaWYgKGZhaWxfc3RyKQotKwkJCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiVHlw ZT0iLCBmYWlsX3N0cik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsK LSsvKiBHZW5lcmFsaXplZCBzeW1tZXRyaWMgY2lwaGVyIHRlc3Qgcm91dGluZS4gRW5jcnlwdCBk YXRhLCB2ZXJpZnkgcmVzdWx0Ci0rICogYWdhaW5zdCBrbm93biBhbnN3ZXIsIGRlY3J5cHQgYW5k IGNvbXBhcmUgd2l0aCBvcmlnaW5hbCBwbGFpbnRleHQuCi0rICovCi0rCi0raW50IGZpcHNfY2lw aGVyX3Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAot KwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpp diwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCi0rCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqY2lwaGVydGV4dCwKLSsJCQlpbnQgbGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIg cGx0bXBbRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRV07Ci0rCXVuc2lnbmVkIGNoYXIgY2l0bXBb RklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRV07Ci0rCU9QRU5TU0xfYXNzZXJ0KGxlbiA8PSBGSVBT X01BWF9DSVBIRVJfVEVTVF9TSVpFKTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lw aGVyLCBOVUxMLCBrZXksIGl2LCAxKSA8PSAwKQotKwkJcmV0dXJuIDA7Ci0rCUVWUF9DaXBoZXIo Y3R4LCBjaXRtcCwgcGxhaW50ZXh0LCBsZW4pOwotKwlpZiAobWVtY21wKGNpdG1wLCBjaXBoZXJ0 ZXh0LCBsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNp cGhlciwgTlVMTCwga2V5LCBpdiwgMCkgPD0gMCkKLSsJCXJldHVybiAwOwotKwlFVlBfQ2lwaGVy KGN0eCwgcGx0bXAsIGNpdG1wLCBsZW4pOwotKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQs IGxlbikpCi0rCQlyZXR1cm4gMDsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsjaWYgMAotKy8qIFRo ZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gZW5zdXJlIHRoZSBlcnJvciBjb2RlIGV4aXN0cyBhbmQg dGhlIGZ1bmN0aW9uCi0rICogbmFtZSBpcyB0byBrZWVwIHRoZSBlcnJvciBjaGVja2luZyBzY3Jp cHQgcXVpZXQKLSsgKi8KLSt2b2lkIGhhc2hfZmluYWwodm9pZCkKLSsJewotKwlGSVBTZXJyKEZJ UFNfRl9IQVNIX0ZJTkFMLEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKwl9Ci0rI2VuZGlmCi0r Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX2Rl c19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2Vs ZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0 LmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMJMjAxMC0wNi0wNCAxMjoyNTox NS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMTM5IEBACi0rLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg KiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0Ogot KyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVu c3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAq Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2Vu ZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNz bGNvbmYuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIHN0cnVjdAotKyAg ICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFp bnRleHRbOF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKLSsgICAgfSB0ZXN0 czJbXT0KLSsJewotKwl7Ci0rCXsgMHg3YywweDRmLDB4NmUsMHhmNywweGEyLDB4MDQsMHgxNiww eGVjLAotKwkgIDB4MGIsMHg2YiwweDdjLDB4OWUsMHg1ZSwweDE5LDB4YTcsMHhjNCB9LAotKwl7 IDB4MDYsMHhhNywweGQ4LDB4NzksMHhhYSwweGNlLDB4NjksMHhlZiB9LAotKwl7IDB4NGMsMHgx MSwweDE3LDB4NTUsMHhiZiwweGM0LDB4NGUsMHhmZCB9Ci0rCX0sCi0rCXsKLSsJeyAweDVkLDB4 OWUsMHgwMSwweGQzLDB4MjUsMHhjNywweDNlLDB4MzQsCi0rCSAgMHgwMSwweDE2LDB4N2MsMHg4 NSwweDIzLDB4ZGYsMHhlMCwweDY4IH0sCi0rCXsgMHg5YywweDUwLDB4MDksMHgwZiwweDVlLDB4 N2QsMHg2OSwweDdlIH0sCi0rCXsgMHhkMiwweDBiLDB4MTgsMHhkZiwweGQ5LDB4MGQsMHg5ZSww eGZmIH0sCi0rCX0KLSsJfTsKLSsKLStzdGF0aWMgc3RydWN0Ci0rICAgIHsKLSsgICAgdW5zaWdu ZWQgY2hhciBrZXlbMjRdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsgICAg dW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwotKyAgICB9IHRlc3RzM1tdPQotKwl7Ci0rCXsK LSsJeyAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCSAgMHhGRSww eERDLDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLAotKwkgIDB4MTIsMHgzNCwweDU2LDB4 NzgsMHg5YSwweGJjLDB4ZGUsMHhmMCB9LAotKwl7IDB4OGYsMHg4ZiwweGJmLDB4OWIsMHg1ZCww eDQ4LDB4YjQsMHgxYyB9LAotKwl7IDB4NTksMHg4YywweGU1LDB4ZDMsMHg2YywweGEyLDB4ZWEs MHgxYiB9LAotKwl9LAotKwl7Ci0rCXsgMHhEQywweEJBLDB4OTgsMHg3NiwweDU0LDB4MzIsMHgx MCwweEZFLAotKwkgIDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiwKLSsJ ICAweEVELDB4MzksMHhEOSwweDUwLDB4RkEsMHg3NCwweEJDLDB4QzQgfSwKLSsJeyAweDAxLDB4 MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYgfSwKLSsJeyAweDExLDB4MjUsMHhiMCww eDM1LDB4YmUsMHhhMCwweDgyLDB4ODYgfSwKLSsJfSwKLSsJfTsKLSsKLSt2b2lkIEZJUFNfY29y cnVwdF9kZXMoKQotKyAgICB7Ci0rICAgIHRlc3RzMlswXS5wbGFpbnRleHRbMF0rKzsKLSsgICAg fQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RlcygpCi0rICAgIHsKLSsgICAgaW50IG4sIHJldCA9 IDA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgm Y3R4KTsKLSsgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggMi1rZXkgM0RFUyBhbmQgY29tcGFy ZSB0byBrbm93biBhbnN3ZXJzICovCi0rICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKLSsJewot KwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGVfZWNiKCksCi0rCQkJCXRl c3RzMltuXS5rZXksIE5VTEwsCi0rCQkJCXRlc3RzMltuXS5wbGFpbnRleHQsIHRlc3RzMltuXS5j aXBoZXJ0ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwl9Ci0rCi0rICAgIC8qIEVuY3J5cHQvZGVj cnlwdCB3aXRoIDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLwotKyAgICBmb3Io bj0wIDsgbiA8IDIgOyArK24pCi0rCXsKLSsJaWYgKCFmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVW UF9kZXNfZWRlM19lY2IoKSwKLSsJCQkJdGVzdHMzW25dLmtleSwgTlVMTCwKLSsJCQkJdGVzdHMz W25dLnBsYWludGV4dCwgdGVzdHMzW25dLmNpcGhlcnRleHQsIDgpKQotKwkJZ290byBlcnI7Ci0r CX0KLSsgICAgcmV0ID0gMTsKLSsgICAgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVw KCZjdHgpOwotKyAgICBpZiAocmV0ID09IDApCi0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NF TEZURVNUX0RFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsKLSsgICAgcmV0dXJuIHJldDsK LSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlw c19kc2Ffc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfZHNh X3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxm dGVzdC5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jCTIwMTAtMDYtMDQgMTI6 MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDE4NiBAQAotKy8qIGNyeXB0by9kc2Ev ZHNhdGVzdC5jICovCi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5 QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMg cGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91 bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0 ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBs aWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBs b25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhl IGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhp cyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMu LCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsg KiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUg Y29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29u ICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZ b3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29k ZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4g YSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFz IHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBj YW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVw IG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdp dGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICog YXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAg IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAq ICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2Ny eXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJy YXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSku Ci0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBk ZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBs aWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAo dGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB VVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0r ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1B R0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55 IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMg Y29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUK LSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0r ICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsKLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZHNhLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsKLSsvKiBzZWVkLCBvdXRfcCwgb3V0X3EsIG91dF9nIGFyZSB0YWtlbiB0aGUgTklT VCB0ZXN0IHZlY3RvcnMgKi8KLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBzZWVkWzIwXSA9IHsK LSsJMHg3NywgMHg4ZiwgMHg0MCwgMHg3NCwgMHg2ZiwgMHg2NiwgMHhiZSwgMHgzMywgMHhjZSwg MHhiZSwgMHg5OSwgMHgzNCwKLSsJMHg0YywgMHhmYywgMHhmMywgMHgyOCwgMHhhYSwgMHg3MCwg MHgyZCwgMHgzYQotKyAgCX07Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3BbXSA9IHsK LSsJMHhmNywgMHg3YywgMHgxYiwgMHg4MywgMHhkOCwgMHhlOCwgMHg1YywgMHg3ZiwgMHg4NSwg MHgzMCwgMHgxNywgMHg1NywKLSsJMHgyMSwgMHg5NSwgMHhmZSwgMHgyNiwgMHgwNCwgMHhlYiwg MHg0NywgMHg0YywgMHgzYSwgMHg0YSwgMHg4MSwgMHg0YiwKLSsJMHg3MSwgMHgyZSwgMHhlZCwg MHg2ZSwgMHg0ZiwgMHgzZCwgMHgxMSwgMHgwZiwgMHg3YywgMHhmZSwgMHgzNiwgMHg0MywKLSsJ MHg1MSwgMHhkOSwgMHg4MSwgMHgzOSwgMHgxNywgMHhkZiwgMHg2MiwgMHhmNiwgMHg5YywgMHgw MSwgMHhhOCwgMHg2OSwKLSsJMHg3MSwgMHhkZCwgMHgyOSwgMHg3ZiwgMHg0NywgMHhlNiwgMHg2 NSwgMHhhNiwgMHgyMiwgMHhlOCwgMHg2YSwgMHgxMiwKLSsJMHgyYiwgMHhjMiwgMHg4MSwgMHhm ZiwgMHgzMiwgMHg3MCwgMHgyZiwgMHg5ZSwgMHhjYSwgMHg1MywgMHgyNiwgMHg0NywKLSsJMHgw ZiwgMHg1OSwgMHhkNywgMHg5ZSwgMHgyYywgMHhhNSwgMHgwNywgMHhjNCwgMHg0OSwgMHg1Miwg MHhhMywgMHhlNCwKLSsJMHg2YiwgMHgwNCwgMHgwMCwgMHgyNSwgMHg0OSwgMHhlMiwgMHhlNiwg MHg3ZiwgMHgyOCwgMHg3OCwgMHg5NywgMHhiOCwKLSsJMHgzYSwgMHgzMiwgMHgxNCwgMHgzOCwg MHhhMiwgMHg1MSwgMHgzMywgMHgyMiwgMHg0NCwgMHg3ZSwgMHhkNywgMHhlZiwKLSsJMHg0NSwg MHhkYiwgMHgwNiwgMHg0YSwgMHhkMiwgMHg4MiwgMHg0YSwgMHg4MiwgMHgyYywgMHhiMSwgMHhk NywgMHhkOCwKLSsJMHhiNiwgMHg3MywgMHgwMCwgMHg0ZCwgMHg5NCwgMHg3NywgMHg5NCwgMHhl ZgotKwl9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9xW10gPSB7Ci0rCTB4ZDQsIDB4 MGEsIDB4YWMsIDB4OWYsIDB4YmQsIDB4OGMsIDB4ODAsIDB4YzIsIDB4MzgsIDB4N2UsIDB4MmUs IDB4MGMsCi0rCTB4NTIsIDB4NWMsIDB4ZWEsIDB4MzQsIDB4YTEsIDB4ODMsIDB4MzIsIDB4ZjMK LSsJfTsKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfZ1tdID0gewotKwkweDM0LCAweDcz LCAweDhiLCAweDU3LCAweDg0LCAweDhlLCAweDU1LCAweGJmLCAweDU3LCAweGNjLCAweDQxLCAw eGJiLAotKwkweDVlLCAweDJiLCAweGQ1LCAweDQyLCAweGRkLCAweDI0LCAweDIyLCAweDJhLCAw eDA5LCAweGVhLCAweDI2LCAweDFlLAotKwkweDE3LCAweDY1LCAweGNiLCAweDFhLCAweGIzLCAw eDEyLCAweDQ0LCAweGEzLCAweDllLCAweDk5LCAweGU5LCAweDYzLAotKwkweGViLCAweDMwLCAw eGIxLCAweDc4LCAweDdiLCAweDA5LCAweDQwLCAweDMwLCAweGZhLCAweDgzLCAweGMyLCAweDM1 LAotKwkweGUxLCAweGM0LCAweDJkLCAweDc0LCAweDFhLCAweGIxLCAweDgzLCAweDU0LCAweGQ4 LCAweDI5LCAweGY0LCAweGNmLAotKwkweDdmLCAweDZmLCAweDY3LCAweDFjLCAweDM2LCAweDQ5 LCAweGVlLCAweDZjLCAweGEyLCAweDNjLCAweDJkLCAweDZhLAotKwkweGU5LCAweGQzLCAweDlh LCAweGY2LCAweDU3LCAweDc4LCAweDZmLCAweGZkLCAweDMzLCAweGNkLCAweDNjLCAweGVkLAot KwkweGZkLCAweGQ0LCAweDQxLCAweGU2LCAweDVjLCAweDhiLCAweGUwLCAweDY4LCAweDMxLCAw eDQ3LCAweDQ3LCAweGFmLAotKwkweDEyLCAweGE3LCAweGY5LCAweDMyLCAweDBkLCAweDk0LCAw eDE1LCAweDQ4LCAweGQwLCAweDU0LCAweDg1LCAweGIyLAotKwkweDA0LCAweGI1LCAweDRkLCAw eGQ0LCAweDlkLCAweDA1LCAweDIyLCAweDI1LCAweGQ5LCAweGZkLCAweDZjLCAweDM2LAotKwkw eGVmLCAweGJlLCAweDY5LCAweDZjLCAweDU1LCAweGY0LCAweGVlLCAweGVjCi0rCX07Ci0rCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3RyMVtdPSIxMjM0NTY3ODkwMTIzNDU2Nzg5MCI7 Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfZHNhKCkKLSsgICAgewotKyAgICArK3NlZWRbMF07Ci0r ICAgIH0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9kc2EoKQotKyAgICB7Ci0rICAgIERTQSAqZHNh OwotKyAgICBpbnQgY291bnRlcixpLGosIHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGludCBzbGVu OwotKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOwotKyAgICB1bnNpZ25lZCBsb25nIGg7Ci0r ICAgIEVWUF9NRF9DVFggbWN0eDsKLSsgICAgRVZQX1BLRVkgKnBrID0gTlVMTDsKLSsKLSsgICAg RVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsKLSsgICAgZHNhID0gRFNBX25ldygpOwotKwotKyAg ICBpZihkc2EgPT0gTlVMTCkKLSsJZ290byBlcnI7Ci0rICAgIGlmKCFEU0FfZ2VuZXJhdGVfcGFy YW1ldGVyc19leChkc2EsIDEwMjQsc2VlZCwyMCwmY291bnRlciwmaCxOVUxMKSkKLSsJZ290byBl cnI7Ci0rICAgIGlmIChjb3VudGVyICE9IDM3OCkgCi0rCWdvdG8gZXJyOwotKyAgICBpZiAoaCAh PSAyKQotKwlnb3RvIGVycjsKLSsgICAgaT1CTl9ibjJiaW4oZHNhLT5xLGJ1Zik7Ci0rICAgIGo9 c2l6ZW9mKG91dF9xKTsKLSsgICAgaWYgKGkgIT0gaiB8fCBtZW1jbXAoYnVmLG91dF9xLGkpICE9 IDApCi0rCWdvdG8gZXJyOwotKwotKyAgICBpPUJOX2JuMmJpbihkc2EtPnAsYnVmKTsKLSsgICAg aj1zaXplb2Yob3V0X3ApOwotKyAgICBpZiAoaSAhPSBqIHx8IG1lbWNtcChidWYsb3V0X3AsaSkg IT0gMCkKLSsJZ290byBlcnI7Ci0rCi0rICAgIGk9Qk5fYm4yYmluKGRzYS0+ZyxidWYpOwotKyAg ICBqPXNpemVvZihvdXRfZyk7Ci0rICAgIGlmIChpICE9IGogfHwgbWVtY21wKGJ1ZixvdXRfZyxp KSAhPSAwKQotKwlnb3RvIGVycjsKLSsgICAgRFNBX2dlbmVyYXRlX2tleShkc2EpOwotKwotKyAg ICBpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotKwlnb3RvIGVycjsKLSsgICAgRVZQ X1BLRVlfYXNzaWduX0RTQShwaywgZHNhKTsKLSsKLSsgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgo Jm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQotKwlnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfU2ln blVwZGF0ZSgmbWN0eCwgc3RyMSwgMjApKQotKwlnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfU2ln bkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCBwaykpCi0rCWdvdG8gZXJyOwotKwotKyAgICBpZiAo IUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKLSsJZ290byBlcnI7 Ci0rICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgc3RyMSwgMjApKQotKwlnb3RvIGVy cjsKLSsgICAgaWYgKEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCBwaykgIT0gMSkK LSsJZ290byBlcnI7Ci0rCi0rICAgIHJldCA9IDE7Ci0rCi0rICAgIGVycjoKLSsgICAgRVZQX01E X0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsgICAgaWYgKHBrKQotKwlFVlBfUEtFWV9mcmVlKHBrKTsK LSsgICAgZWxzZSBpZiAoZHNhKQotKwlEU0FfZnJlZShkc2EpOwotKyAgICBpZiAocmV0ID09IDAp Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RTQSxGSVBTX1JfU0VMRlRFU1Rf RkFJTEVEKTsKLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwcy5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L2ZpcHMvZmlwcy5oCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwcy5oLmZpcHMJ MjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vZmlwcy9maXBzLmgJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBA IC0wLDAgKzEsMTYzIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl Ci0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUg PG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNlcnJv ciBGSVBTIGlzIGRpc2FibGVkLgotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsK LSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlmCi0rCi0rc3RydWN0 IGRzYV9zdDsKLStzdHJ1Y3QgZXZwX3BrZXlfc3Q7Ci0rc3RydWN0IGVudl9tZF9zdDsKLStzdHJ1 Y3QgZXZwX2NpcGhlcl9zdDsKLStzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3Q7Ci0rCi0raW50IEZJ UFNfbW9kZV9zZXQoaW50IG9ub2ZmKTsKLStpbnQgRklQU19tb2RlKHZvaWQpOwotK2NvbnN0IHZv aWQgKkZJUFNfcmFuZF9jaGVjayh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9p ZCk7Ci0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0 X3NoYTEodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMSh2b2lkKTsKLSt2b2lkIEZJUFNf Y29ycnVwdF9hZXModm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfYWVzKHZvaWQpOwotK3ZvaWQg RklQU19jb3JydXB0X2Rlcyh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9kZXModm9pZCk7Ci0r dm9pZCBGSVBTX2NvcnJ1cHRfcnNhKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXln ZW4odm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfcnNhKHZvaWQpOwotK3ZvaWQgRklQU19jb3Jy dXB0X2RzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOwotK2lu dCBGSVBTX3NlbGZ0ZXN0X2RzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcodm9pZCk7 Ci0rdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9ybmcodm9p ZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfaG1hYyh2b2lkKTsKLSsKLStpbnQgZmlwc19wa2V5X3Np Z25hdHVyZV90ZXN0KHN0cnVjdCBldnBfcGtleV9zdCAqcGtleSwKLSsJCQljb25zdCB1bnNpZ25l ZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1 bnNpZ25lZCBpbnQga2F0bGVuLAotKwkJCWNvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKmRpZ2VzdCwg dW5zaWduZWQgaW50IG1kX2ZsYWdzLAotKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKTsKLSsKLStp bnQgZmlwc19jaXBoZXJfdGVzdChzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3QgKmN0eCwKLSsJCQlj b25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAqY2lwaGVyLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwKLSsJCQljb25zdCB1bnNpZ25l ZCBjaGFyICpwbGFpbnRleHQsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwK LSsJCQlpbnQgbGVuKTsKLSsKLSsvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwotKy8qIFRoZSBmb2xs b3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFu eSBjaGFuZ2VzCi0rICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3 aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCi0rICovCi0rdm9pZCBFUlJfbG9hZF9GSVBTX3N0 cmluZ3Modm9pZCk7Ci0rCi0rLyogRXJyb3IgY29kZXMgZm9yIHRoZSBGSVBTIGZ1bmN0aW9ucy4g Ki8KLSsKLSsvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLSsjZGVmaW5lIEZJUFNfRl9ESF9CVUlMVElO X0dFTlBBUkFNUwkJCSAxMDAKLSsjZGVmaW5lIEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJ CSAxMDEKLSsjZGVmaW5lIEZJUFNfRl9EU0FfRE9fU0lHTgkJCQkgMTAyCi0rI2RlZmluZSBGSVBT X0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTAzCi0rI2RlZmluZSBGSVBTX0ZfRVZQX0NJUEhFUklOSVRf RVgJCQkgMTI0Ci0rI2RlZmluZSBGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgJCQkgMTI1Ci0rI2Rl ZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0EJCQkJIDEwNAotKyNkZWZpbmUgRklQU19GX0ZJUFNf Q0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5UCQkgMTA1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19DSEVD S19SU0EJCQkJIDEwNgotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX0NIRUNLCQkJCSAxMDcKLSsj ZGVmaW5lIEZJUFNfRl9GSVBTX01PREVfU0VUCQkJCSAxMDgKLSsjZGVmaW5lIEZJUFNfRl9GSVBT X1BLRVlfU0lHTkFUVVJFX1RFU1QJCQkgMTA5Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVT VF9BRVMJCQkgMTEwCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMJCQkgMTExCi0r I2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EJCQkgMTEyCi0rI2RlZmluZSBGSVBTX0Zf RklQU19TRUxGVEVTVF9ITUFDCQkJIDExMwotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1Rf Uk5HCQkJIDExNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMQkJCSAxMTUKLSsj ZGVmaW5lIEZJUFNfRl9IQVNIX0ZJTkFMCQkJCSAxMjMKLSsjZGVmaW5lIEZJUFNfRl9SU0FfQlVJ TFRJTl9LRVlHRU4JCQkgMTE2Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZ UFQJCQkgMTE3Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQJCQkgMTE4 Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVAkJCSAxMTkKLSsjZGVmaW5l IEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUCQkJIDEyMAotKyNkZWZpbmUgRklQU19GX1JT QV9YOTMxX0dFTkVSQVRFX0tFWV9FWAkJCSAxMjEKLSsjZGVmaW5lIEZJUFNfRl9TU0xFQVlfUkFO RF9CWVRFUwkJCSAxMjIKLSsKLSsvKiBSZWFzb24gY29kZXMuICovCi0rI2RlZmluZSBGSVBTX1Jf Q0FOTk9UX1JFQURfRVhFCQkJCSAxMDMKLSsjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVf RElHRVNUCQkJIDEwNAotKyNkZWZpbmUgRklQU19SX0NPTlRSQURJQ1RJTkdfRVZJREVOQ0UJCQkg MTE0Ci0rI2RlZmluZSBGSVBTX1JfRVhFX0RJR0VTVF9ET0VTX05PVF9NQVRDSAkJIDEwNQotKyNk ZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENICQkgMTEwCi0rI2RlZmluZSBG SVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCAxMTEKLSsj ZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5H IDExMgotKyNkZWZpbmUgRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVAkJCSAxMDIKLSsjZGVm aW5lIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRAkJCSAxMDYKLSsjZGVmaW5lIEZJUFNfUl9J TlZBTElEX0tFWV9MRU5HVEgJCQkgMTA5Ci0rI2RlZmluZSBGSVBTX1JfS0VZX1RPT19TSE9SVAkJ CQkgMTA4Ci0rI2RlZmluZSBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDAKLSsjZGVmaW5l IEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRAkJCSAxMDcKLSsjZGVmaW5lIEZJUFNfUl9SU0Ff REVDUllQVF9FUlJPUgkJCSAxMTUKLSsjZGVmaW5lIEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUgkJ CSAxMTYKLSsjZGVmaW5lIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQJCQkJIDEwMQotKyNkZWZpbmUg RklQU19SX1RFU1RfRkFJTFVSRQkJCQkgMTE3Ci0rI2RlZmluZSBGSVBTX1JfVU5TVVBQT1JURURf UExBVEZPUk0JCQkgMTEzCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsj ZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxm dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0 LmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYy5m aXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4w MDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMTM3IEBACi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3Ns Lm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z Ci0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0r ICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlm Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSt0 eXBlZGVmIHN0cnVjdCB7Ci0rCWNvbnN0IEVWUF9NRCAqKCphbGcpKHZvaWQpOwotKwljb25zdCBj aGFyICprZXksICppdjsKLSsJdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdOwot K30gSE1BQ19LQVQ7Ci0rCi0rc3RhdGljIGNvbnN0IEhNQUNfS0FUIHZlY3RvcltdID0gewotKyAg ICB7CUVWUF9zaGExLAotKwkvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9u cy9maXBzL2ZpcHMxOTgvZmlwcy0xOThhLnBkZiAqLwotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMi LAotKwkiU2FtcGxlICMyIiwKLSsJeyAweDA5LDB4MjIsMHhkMywweDQwLDB4NWYsMHhhYSwweDNk LDB4MTksCi0rCSAgMHg0ZiwweDgyLDB4YTQsMHg1OCwweDMwLDB4NzMsMHg3ZCwweDVjLAotKwkg IDB4YzYsMHhjNywweDVkLDB4MjQgfQotKyAgICB9LAotKyAgICB7CUVWUF9zaGEyMjQsCi0rCS8q IGp1c3Qga2VlcCBleHRlbmRpbmcgdGhlIGFib3ZlLi4uICovCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/ QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4ZGQsMHhlZiwweDBhLDB4NDAsMHhjYiwweDdk LDB4NTAsMHhmYiwKLSsJICAweDZlLDB4ZTYsMHhjZSwweGExLDB4MjAsMHhiYSwweDI2LDB4YWEs Ci0rCSAgMHgwOCwweGYzLDB4MDcsMHg3NSwweDg3LDB4YjgsMHhhZCwweDFiLAotKwkgIDB4OGMs MHg4ZCwweDEyLDB4YzcgfQotKyAgICB9LAotKyAgICB7CUVWUF9zaGEyNTYsCi0rCSIwMTIzNDU2 Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4YjgsMHhmMiwweDBkLDB4YjUs MHg0MSwweGVhLDB4NDMsMHgwOSwKLSsJICAweGNhLDB4NGUsMHhhOSwweDM4LDB4MGMsMHhkMCww eGU4LDB4MzQsCi0rCSAgMHhmNywweDFmLDB4YmUsMHg5MSwweDc0LDB4YTIsMHg2MSwweDM4LAot KwkgIDB4MGQsMHhjMSwweDdlLDB4YWUsMHg2YSwweDM0LDB4NTEsMHhkOSB9Ci0rICAgIH0sCi0r ICAgIHsJRVZQX3NoYTM4NCwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAj MiIsCi0rCXsgMHgwOCwweGJjLDB4YjAsMHhkYSwweDQ5LDB4MWUsMHg4NywweGFkLAotKwkgIDB4 OWEsMHgxZCwweDZhLDB4Y2UsMHgyMywweGM1LDB4MGIsMHhmNiwKLSsJICAweGI3LDB4MTgsMHgw NiwweGE1LDB4NzcsMHhjZCwweDQ5LDB4MDQsCi0rCSAgMHg4OSwweGYxLDB4ZTYsMHgyMywweDQ0 LDB4NTEsMHg1MSwweDlmLAotKwkgIDB4ODUsMHg1NiwweDgwLDB4NzksMHgwYywweGJkLDB4NGQs MHg1MCwKLSsJICAweGE0LDB4NWYsMHgyOSwweGUzLDB4OTMsMHhmMCwweGU4LDB4N2YgfQotKyAg ICB9LAotKyAgICB7CUVWUF9zaGE1MTIsCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJT YW1wbGUgIzIiLAotKwl7IDB4ODAsMHg5ZCwweDQ0LDB4MDUsMHg3YywweDViLDB4OTUsMHg0MSwK LSsJICAweDA1LDB4YmQsMHgwNCwweDEzLDB4MTYsMHhkYiwweDBmLDB4YWMsCi0rCSAgMHg0NCww eGQ1LDB4YTQsMHhkNSwweGQwLDB4ODksMHgyYiwweGQwLAotKwkgIDB4NGUsMHg4NiwweDY0LDB4 MTIsMHhjMCwweDkwLDB4NzcsMHg2OCwKLSsJICAweGYxLDB4ODcsMHhiNywweDdjLDB4NGYsMHhh ZSwweDJjLDB4MmYsCi0rCSAgMHgyMSwweGE1LDB4YjUsMHg2NSwweDlhLDB4NGYsMHg0YiwweGE3 LAotKwkgIDB4NDcsMHgwMiwweGEzLDB4ZGUsMHg5YiwweDUxLDB4ZjEsMHg0NSwKLSsJICAweGJk LDB4NGYsMHgyNSwweDI3LDB4NDIsMHg5OCwweDk5LDB4MDUgfQotKyAgICB9LAotK307Ci0rCi0r aW50IEZJUFNfc2VsZnRlc3RfaG1hYygpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rICAgIHVuc2ln bmVkIGludCAgICBvdXRsZW47Ci0rICAgIHVuc2lnbmVkIGNoYXIgICBvdXRbRVZQX01BWF9NRF9T SVpFXTsKLSsgICAgY29uc3QgRVZQX01EICAgKm1kOwotKyAgICBjb25zdCBITUFDX0tBVCAqdDsK LSsKLSsgICAgZm9yKG49MCx0PXZlY3RvcjsgbjxzaXplb2YodmVjdG9yKS9zaXplb2YodmVjdG9y WzBdKTsgbisrLHQrKykKLSsJewotKwltZCA9ICgqdC0+YWxnKSgpOwotKwlITUFDKG1kLHQtPmtl eSxzdHJsZW4odC0+a2V5KSwKLSsJCShjb25zdCB1bnNpZ25lZCBjaGFyICopdC0+aXYsc3RybGVu KHQtPml2KSwKLSsJCW91dCwmb3V0bGVuKTsKLSsKLSsJaWYobWVtY21wKG91dCx0LT5rYXZhbCxv dXRsZW4pKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFD LEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCX0K LSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMv Zmlwc19yYW5kLmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5m aXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAg KzAyMDAKLUBAIC0wLDAgKzEsNDEyIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQg KGMpIDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoK LSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K LSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsg KgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE Ci0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0r LyoKLSsgKiBUaGlzIGlzIGEgRklQUyBhcHByb3ZlZCBBRVMgUFJORyBiYXNlZCBvbiBBTlNJIFg5 LjMxIEEuMi40LgotKyAqLwotKwotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rLyogSWYgd2UgZG9u J3QgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQsIHN0cnVjdCB0aW1ldmFsIHdvbid0Ci0r ICAgYmUgZGVmaW5lZCBhbmQgZ2V0dGltZW9mZGF5KCkgd29uJ3QgYmUgZGVjbGFyZWQgd2l0aCBz dHJpY3QgY29tcGlsZXJzCi0rICAgbGlrZSBERUMgQyBpbiBBTlNJIEMgbW9kZS4gICovCi0rI2lm bmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECi0rI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVO REVEIDEKLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2lmbmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKyNpbmNsdWRl IDxzeXMvdGltZS5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaWZuZGVmIE9Q RU5TU0xfU1lTX1dJTjMyCi0rIyBpZmRlZiBPUEVOU1NMX1VOSVNURAotKyMgIGluY2x1ZGUgT1BF TlNTTF9VTklTVEQKLSsjIGVsc2UKLSsjICBpbmNsdWRlIDx1bmlzdGQuaD4KLSsjIGVuZGlmCi0r I2VuZGlmCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgot KwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSt2b2lkICpPUEVOU1NMX3N0ZGVycih2b2lkKTsK LSsKLSsjZGVmaW5lIEFFU19CTE9DS19MRU5HVEgJMTYKLSsKLSsKLSsvKiBBRVMgRklQUyBQUk5H IGltcGxlbWVudGF0aW9uICovCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJaW50IHNlZWRl ZDsKLSsJaW50IGtleWVkOwotKwlpbnQgdGVzdF9tb2RlOwotKwlpbnQgc2Vjb25kOwotKwlpbnQg ZXJyb3I7Ci0rCXVuc2lnbmVkIGxvbmcgY291bnRlcjsKLSsJQUVTX0tFWSBrczsKLSsJaW50IHZw b3M7Ci0rCS8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBrZXkgaWYgaXQgZXF1YWxzIHNlZWQgbGVu Z3RoICovCi0rCXVuc2lnbmVkIGNoYXIgdG1wX2tleVtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5z aWduZWQgY2hhciBWW0FFU19CTE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIERUW0FFU19C TE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIGxhc3RbQUVTX0JMT0NLX0xFTkdUSF07Ci0r CX0gRklQU19QUk5HX0NUWDsKLSsKLStzdGF0aWMgRklQU19QUk5HX0NUWCBzY3R4OwotKwotK3N0 YXRpYyBpbnQgZmlwc19wcm5nX2ZhaWwgPSAwOwotKwotK3ZvaWQgRklQU19ybmdfc3RpY2sodm9p ZCkKLSsJewotKwlmaXBzX3BybmdfZmFpbCA9IDE7Ci0rCX0KLSsKLSt2b2lkIGZpcHNfcmFuZF9w cm5nX3Jlc2V0KEZJUFNfUFJOR19DVFggKmN0eCkKLSsJewotKwljdHgtPnNlZWRlZCA9IDA7Ci0r CWN0eC0+a2V5ZWQgPSAwOwotKwljdHgtPnRlc3RfbW9kZSA9IDA7Ci0rCWN0eC0+Y291bnRlciA9 IDA7Ci0rCWN0eC0+c2Vjb25kID0gMDsKLSsJY3R4LT5lcnJvciA9IDA7Ci0rCWN0eC0+dnBvcyA9 IDA7Ci0rCU9QRU5TU0xfY2xlYW5zZShjdHgtPlYsIEFFU19CTE9DS19MRU5HVEgpOwotKwlPUEVO U1NMX2NsZWFuc2UoJmN0eC0+a3MsIHNpemVvZihBRVNfS0VZKSk7Ci0rCX0KLSsJCi0rCi0rc3Rh dGljIGludCBmaXBzX3NldF9wcm5nX2tleShGSVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbikKLSsJewotKwlGSVBT X3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rCWlmIChrZXlsZW4gIT0gMTYgJiYga2V5bGVuICE9IDI0ICYm IGtleWxlbiAhPSAzMikKLSsJCXsKLSsJCS8qIGVycm9yOiBpbnZhbGlkIGtleSBzaXplICovCi0r CQlyZXR1cm4gMDsKLSsJCX0KLSsJQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGtleWxlbiA8PCAz LCAmY3R4LT5rcyk7Ci0rCWlmIChrZXlsZW4gPT0gMTYpCi0rCQl7Ci0rCQltZW1jcHkoY3R4LT50 bXBfa2V5LCBrZXksIDE2KTsKLSsJCWN0eC0+a2V5ZWQgPSAyOwotKwkJfQotKwllbHNlCi0rCQlj dHgtPmtleWVkID0gMTsKLSsJY3R4LT5zZWVkZWQgPSAwOwotKwljdHgtPnNlY29uZCA9IDA7Ci0r CXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX3NldF9wcm5nX3NlZWQoRklQU19Q Uk5HX0NUWCAqY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWQsIEZJUFNfUkFORF9T SVpFX1Qgc2VlZGxlbikKLSsJewotKwlpbnQgaTsKLSsJaWYgKCFjdHgtPmtleWVkKQotKwkJcmV0 dXJuIDA7Ci0rCS8qIEluIHRlc3QgbW9kZSBzZWVkIGlzIGp1c3Qgc3VwcGxpZWQgZGF0YSAqLwot KwlpZiAoY3R4LT50ZXN0X21vZGUpCi0rCQl7Ci0rCQlpZiAoc2VlZGxlbiAhPSBBRVNfQkxPQ0tf TEVOR1RIKQotKwkJCXJldHVybiAwOwotKwkJbWVtY3B5KGN0eC0+Viwgc2VlZCwgQUVTX0JMT0NL X0xFTkdUSCk7Ci0rCQljdHgtPnNlZWRlZCA9IDE7Ci0rCQlyZXR1cm4gMTsKLSsJCX0KLSsJLyog T3V0c2lkZSB0ZXN0IG1vZGUgWE9SIHN1cHBsaWVkIGRhdGEgd2l0aCBleGlzdGluZyBzZWVkICov Ci0rCWZvciAoaSA9IDA7IGkgPCBzZWVkbGVuOyBpKyspCi0rCQl7Ci0rCQljdHgtPlZbY3R4LT52 cG9zKytdIF49IHNlZWRbaV07Ci0rCQlpZiAoY3R4LT52cG9zID09IEFFU19CTE9DS19MRU5HVEgp Ci0rCQkJewotKwkJCWN0eC0+dnBvcyA9IDA7Ci0rCQkJLyogU3BlY2lhbCBjYXNlIGlmIGZpcnN0 IHNlZWQgYW5kIGtleSBsZW5ndGggZXF1YWxzCi0rIAkJCSAqIGJsb2NrIHNpemUgY2hlY2sga2V5 IGFuZCBzZWVkIGRvIG5vdCBtYXRjaC4KLSsgCQkJICovIAotKwkJCWlmIChjdHgtPmtleWVkID09 IDIpCi0rCQkJCXsKLSsJCQkJaWYgKCFtZW1jbXAoY3R4LT50bXBfa2V5LCBjdHgtPlYsIDE2KSkK LSsJCQkJCXsKLSsJCQkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRCwKLSsJCQkJ CQlSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWSk7Ci0rCQkJCQlyZXR1cm4gMDsK LSsJCQkJCX0KLSsJCQkJT1BFTlNTTF9jbGVhbnNlKGN0eC0+dG1wX2tleSwgMTYpOwotKwkJCQlj dHgtPmtleWVkID0gMTsKLSsJCQkJfQotKwkJCWN0eC0+c2VlZGVkID0gMTsKLSsJCQl9Ci0rCQl9 Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50IGZpcHNfc2V0X3Rlc3RfbW9kZShGSVBTX1BSTkdf Q1RYICpjdHgpCi0rCXsKLSsJaWYgKGN0eC0+a2V5ZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRf Rl9GSVBTX1NFVF9URVNUX01PREUsUkFORF9SX1BSTkdfS0VZRUQpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rCWN0eC0+dGVzdF9tb2RlID0gMTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgRklQ U19yYW5kX3Rlc3RfbW9kZSh2b2lkKQotKwl7Ci0rCXJldHVybiBmaXBzX3NldF90ZXN0X21vZGUo JnNjdHgpOwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQp Ci0rCXsKLSsJaWYgKCFzY3R4LnRlc3RfbW9kZSkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJ UFNfUkFORF9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01PREUpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rCW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCXJldHVybiAx OwotKwl9Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19nZXRfZHQoRklQU19QUk5HX0NUWCAqY3R4KQot KyAgICB7Ci0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCUZJTEVUSU1FIGZ0OwotKyNlbHNl Ci0rCXN0cnVjdCB0aW1ldmFsIHR2OwotKyNlbmRpZgotKwl1bnNpZ25lZCBjaGFyICpidWYgPSBj dHgtPkRUOwotKwotKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCi0rCXVuc2lnbmVkIGxv bmcgcGlkOwotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKwlHZXRTeXN0 ZW1UaW1lQXNGaWxlVGltZSgmZnQpOwotKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKGZ0LmR3 SGlnaERhdGVUaW1lICYgMHhmZik7Ci0rCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3 SGlnaERhdGVUaW1lID4+IDgpICYgMHhmZik7Ci0rCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAo KGZ0LmR3SGlnaERhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbM10gPSAodW5zaWduZWQg Y2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsKLSsJYnVmWzRdID0gKHVu c2lnbmVkIGNoYXIpIChmdC5kd0xvd0RhdGVUaW1lICYgMHhmZik7Ci0rCWJ1Zls1XSA9ICh1bnNp Z25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzZdID0g KHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAxNikgJiAweGZmKTsKLSsJYnVm WzddID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsK LSsjZWxzZQotKwlnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpOwotKwlidWZbMF0gPSAodW5zaWduZWQg Y2hhcikgKHR2LnR2X3NlYyAmIDB4ZmYpOwotKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKCh0 di50dl9zZWMgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodHYu dHZfc2VjID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgKCh0di50 dl9zZWMgPj4gMjQpICYgMHhmZik7Ci0rCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZf dXNlYyAmIDB4ZmYpOwotKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+ IDgpICYgMHhmZik7Ci0rCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4g MTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4g MjQpICYgMHhmZik7Ci0rI2VuZGlmCi0rCWJ1Zls4XSA9ICh1bnNpZ25lZCBjaGFyKSAoY3R4LT5j b3VudGVyICYgMHhmZik7Ci0rCWJ1Zls5XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGN0eC0+Y291bnRl ciA+PiA4KSAmIDB4ZmYpOwotKwlidWZbMTBdID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4LT5jb3Vu dGVyID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbMTFdID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4LT5j b3VudGVyID4+IDI0KSAmIDB4ZmYpOwotKwotKwljdHgtPmNvdW50ZXIrKzsKLSsKLSsKLSsjaWZu ZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUwotKwlwaWQ9KHVuc2lnbmVkIGxvbmcpZ2V0cGlkKCk7 Ci0rCWJ1ZlsxMl0gPSAodW5zaWduZWQgY2hhcikgKHBpZCAmIDB4ZmYpOwotKwlidWZbMTNdID0g KHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDgpICYgMHhmZik7Ci0rCWJ1ZlsxNF0gPSAodW5zaWdu ZWQgY2hhcikgKChwaWQgPj4gMTYpICYgMHhmZik7Ci0rCWJ1ZlsxNV0gPSAodW5zaWduZWQgY2hh cikgKChwaWQgPj4gMjQpICYgMHhmZik7Ci0rI2VuZGlmCi0rICAgIH0KLSsKLStzdGF0aWMgaW50 IGZpcHNfcmFuZChGSVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJdW5zaWduZWQgY2hhciAqb3V0LCBG SVBTX1JBTkRfU0laRV9UIG91dGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIFJbQUVTX0JMT0NL X0xFTkdUSF0sIElbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgdG1wW0FFU19C TE9DS19MRU5HVEhdOwotKwlpbnQgaTsKLSsJaWYgKGN0eC0+ZXJyb3IpCi0rCQl7Ci0rCQlSQU5E ZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfRVJST1IpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rCWlmICghY3R4LT5rZXllZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFO RCxSQU5EX1JfTk9fS0VZX1NFVCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFjdHgtPnNl ZWRlZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19OT1Rf U0VFREVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlmb3IgKDs7KQotKwkJewotKwkJaWYgKCFj dHgtPnRlc3RfbW9kZSkKLSsJCQlmaXBzX2dldF9kdChjdHgpOwotKwkJQUVTX2VuY3J5cHQoY3R4 LT5EVCwgSSwgJmN0eC0+a3MpOwotKwkJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7 IGkrKykKLSsJCQl0bXBbaV0gPSBJW2ldIF4gY3R4LT5WW2ldOwotKwkJQUVTX2VuY3J5cHQodG1w LCBSLCAmY3R4LT5rcyk7Ci0rCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsr KQotKwkJCXRtcFtpXSA9IFJbaV0gXiBJW2ldOwotKwkJQUVTX2VuY3J5cHQodG1wLCBjdHgtPlYs ICZjdHgtPmtzKTsKLSsJCS8qIENvbnRpbnVvdXMgUFJORyB0ZXN0ICovCi0rCQlpZiAoY3R4LT5z ZWNvbmQpCi0rCQkJewotKwkJCWlmIChmaXBzX3BybmdfZmFpbCkKLSsJCQkJbWVtY3B5KGN0eC0+ bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQkJaWYgKCFtZW1jbXAoUiwgY3R4LT5sYXN0 LCBBRVNfQkxPQ0tfTEVOR1RIKSkKLSsJCQkJewotKwkgICAgCQkJUkFORGVycihSQU5EX0ZfRklQ U19SQU5ELFJBTkRfUl9QUk5HX1NUVUNLKTsKLSsJCQkJY3R4LT5lcnJvciA9IDE7Ci0rCQkJCWZp cHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJCQl9Ci0r CQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJCWlmICghY3R4LT5z ZWNvbmQpCi0rCQkJewotKwkJCWN0eC0+c2Vjb25kID0gMTsKLSsJCQlpZiAoIWN0eC0+dGVzdF9t b2RlKQotKwkJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlpZiAob3V0bGVuIDw9IEFFU19CTE9D S19MRU5HVEgpCi0rCQkJewotKwkJCW1lbWNweShvdXQsIFIsIG91dGxlbik7Ci0rCQkJYnJlYWs7 Ci0rCQkJfQotKwotKwkJbWVtY3B5KG91dCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQlvdXQg Kz0gQUVTX0JMT0NLX0xFTkdUSDsKLSsJCW91dGxlbiAtPSBBRVNfQkxPQ0tfTEVOR1RIOwotKwkJ fQotKwlyZXR1cm4gMTsKLSsJfQotKwotKwotK2ludCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1 bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVuKQotKwl7Ci0rCWludCBy ZXQ7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldCA9IGZpcHNfc2V0 X3Bybmdfa2V5KCZzY3R4LCBrZXksIGtleWxlbik7Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9f TE9DS19SQU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc2VlZChj b25zdCB2b2lkICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4pCi0rCXsKLSsJaW50IHJl dDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0ID0gZmlwc19zZXRf cHJuZ19zZWVkKCZzY3R4LCBzZWVkLCBzZWVkbGVuKTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBU T19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rCi0raW50IEZJUFNfcmFuZF9i eXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIEZJUFNfUkFORF9TSVpFX1QgY291bnQpCi0rCXsKLSsJ aW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0ID0gZmlw c19yYW5kKCZzY3R4LCBvdXQsIGNvdW50KTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NL X1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zdGF0dXModm9p ZCkKLSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQpOwot KwlyZXQgPSBzY3R4LnNlZWRlZDsKLSsJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQp OwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCkKLSsJ ewotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlmaXBzX3JhbmRfcHJuZ19y ZXNldCgmc2N0eCk7Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJfQot KwotK3N0YXRpYyB2b2lkIGZpcHNfZG9fcmFuZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIEZJUFNf UkFORF9TSVpFX1Qgc2VlZGxlbikKLSsJewotKwlGSVBTX3JhbmRfc2VlZChzZWVkLCBzZWVkbGVu KTsKLSsJfQotKwotK3N0YXRpYyB2b2lkIGZpcHNfZG9fcmFuZF9hZGQoY29uc3Qgdm9pZCAqc2Vl ZCwgRklQU19SQU5EX1NJWkVfVCBzZWVkbGVuLAotKwkJCQkJZG91YmxlIGFkZF9lbnRyb3B5KQot Kwl7Ci0rCUZJUFNfcmFuZF9zZWVkKHNlZWQsIHNlZWRsZW4pOwotKwl9Ci0rCi0rc3RhdGljIGNv bnN0IFJBTkRfTUVUSE9EIHJhbmRfZmlwc19tZXRoPQotKyAgICB7Ci0rICAgIGZpcHNfZG9fcmFu ZF9zZWVkLAotKyAgICBGSVBTX3JhbmRfYnl0ZXMsCi0rICAgIEZJUFNfcmFuZF9yZXNldCwKLSsg ICAgZmlwc19kb19yYW5kX2FkZCwKLSsgICAgRklQU19yYW5kX2J5dGVzLAotKyAgICBGSVBTX3Jh bmRfc3RhdHVzCi0rICAgIH07Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRo b2Qodm9pZCkKLSt7Ci0rICByZXR1cm4gJnJhbmRfZmlwc19tZXRoOwotK30KLSsKLSsjZW5kaWYK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oLmZpcHMgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgKLS0tLSBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgJMjAxMC0w Ni0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsNzcgQEAKLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoK LSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0r ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaWZuZGVmIEhFQURFUl9GSVBTX1JBTkRfSAotKyNkZWZp bmUgSEVBREVSX0ZJUFNfUkFORF9ICi0rCi0rI2luY2x1ZGUgImRlcy5oIgotKwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2Vu ZGlmCi0rCi0raW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwg RklQU19SQU5EX1NJWkVfVCBrZXlsZW4pOwotK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lk ICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKTsKLStpbnQgRklQU19yYW5kX2J5dGVzKHVuc2ln bmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pOwotKwotK2ludCBGSVBTX3Jh bmRfdGVzdF9tb2RlKHZvaWQpOwotK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpOwotK2ludCBG SVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKLSsKLStpbnQgRklQU19yYW5kX3N0 YXR1cyh2b2lkKTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lk KTsKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgotKyNlbmRpZgotKyNlbmRp ZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0 LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwot LS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jLmZpcHMJ MjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAw MDAwMCArMDIwMAotQEAgLTAsMCArMSwzNzMgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHly aWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3Jn LgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0r ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8K LSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+ Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKwotKwotK3R5cGVkZWYgc3RydWN0Ci0rCXsK LSsJdW5zaWduZWQgY2hhciBEVFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgVlsxNl07Ci0rCXVuc2ln bmVkIGNoYXIgUlsxNl07Ci0rCX0gQUVTX1BSTkdfVFY7Ci0rCi0rLyogVGhlIGZvbGxvd2luZyB0 ZXN0IHZlY3RvcnMgYXJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIFJHTlZTIHNwZWMgKi8KLSsK LStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4X2tleVsxNl0gPQotKwkJezB4ZjMsMHhiMSww eDY2LDB4NmQsMHgxMywweDYwLDB4NzIsMHg0MiwKLSsJCSAweGVkLDB4MDYsMHgxYywweGFiLDB4 YjgsMHhkNCwweDYyLDB4MDJ9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTI4X3R2W10g PSB7Ci0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgy MywweGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGY5 fSwKLSsJCQkJLyogViAqLwotKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJ CQkvKiBSICovCi0rCQl7MHg1OSwweDUzLDB4MWUsMHhkMSwweDNiLDB4YjAsMHhjMCwweDU1LAot KwkJIDB4ODQsMHg3OSwweDY2LDB4ODUsMHhjMSwweDJmLDB4NzYsMHg0MX0KLSsJfSwKLSsJewot KwkJCQkvKiBEVCAqLwotKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2 MiwKLSsJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmF9LAotKwkJCQkv KiBWICovCi0rCQl7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJ IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8K LSsJCXsweDdjLDB4MjIsMHgyYywweGY0LDB4Y2EsMHg4ZiwweGEyLDB4NGMsCi0rCQkgMHgxYyww eDljLDB4YjYsMHg0MSwweGE5LDB4ZjMsMHgyMiwweDBkfQotKwl9LAotKwl7Ci0rCQkJCS8qIERU ICovCi0rCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAotKwkJIDB4 ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmYn0sCi0rCQkJCS8qIFYgKi8KLSsJ CXsweGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4OGEs MHhhYSwweDAwLDB4MzksMHg2NiwweDY3LDB4NWIsMHhlNSwKLSsJCSAweDI5LDB4MTQsMHgyOCww eDgxLDB4YTksMHg0ZCwweDRlLDB4Yzd9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsw eGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4 NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGZjfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg4OCwweGRkLDB4YTQs MHg1NiwweDMwLDB4MjQsMHgyMywweGU1LAotKwkJIDB4ZjYsMHg5ZCwweGE1LDB4N2UsMHg3Yiww eDk1LDB4YzcsMHgzYX0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZTYsMHhiMyww eGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4 YjAsMHhlOSwweDIyLDB4ZmR9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmOCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDA1LDB4MjUsMHg5MiwweDQ2LDB4NjEs MHg3OSwweGQyLDB4Y2IsCi0rCQkgMHg3OCwweGM0LDB4MGIsMHgxNCwweDBhLDB4NWEsMHg5YSww eGM4fQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhlNiwweGIzLDB4YmUsMHg3OCww eDJhLDB4MjMsMHhmYSwweDYyLAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4 MjMsMHg3N30sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZl fSwKLSsJCQkJLyogUiAqLwotKwkJezB4MGQsMHhkNSwweGEwLDB4MzYsMHg3YSwweDU5LDB4MjYs MHhiYywKLSsJCSAweDQ4LDB4ZDksMHgzOCwweGJmLDB4ZjAsMHg4NSwweDhmLDB4ZWF9Ci0rCX0s Ci0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMyww eGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMywweDc4fSwK LSsJCQkJLyogViAqLwotKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwKLSsJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkv KiBSICovCi0rCQl7MHhhZSwweDUzLDB4ODcsMHhlZSwweDhjLDB4ZDksMHgxMiwweGY1LAotKwkJ IDB4NzMsMHg1MywweGFlLDB4MDMsMHhmOSwweGQ1LDB4MTMsMHgzM30KLSsJfSwKLSt9OwotKwot K3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfa2V5WzI0XSA9Ci0rCQl7MHgxNSwweGQ4LDB4 NzgsMHgwZCwweDYyLDB4ZDMsMHgyNSwweDZlLAotKwkJIDB4NDQsMHg2NCwweDEwLDB4MTMsMHg2 MCwweDJiLDB4YTksMHhiYywKLSsJCSAweDRhLDB4ZmIsMHhjYSwweGViLDB4NGMsMHg4YiwweDk5 LDB4M2J9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTkyX3R2W10gPSB7Ci0rCXsKLSsJ CQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEs Ci0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRifSwKLSsJCQkJLyog ViAqLwotKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAw eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0r CQl7MHgxNywweDA3LDB4ZDUsMHgyOCwweDE5LDB4NzksMHgxZSwweGVmLAotKwkJIDB4YTUsMHgw YywweGJmLDB4MjUsMHhlNSwweDU2LDB4YjQsMHg5M30KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAq LwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJm LDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGN9LAotKwkJCQkvKiBWICovCi0rCQl7 MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDkyLDB4 OGQsMHhiZSwweDA3LDB4ZGQsMHhjNywweDU4LDB4YzAsCi0rCQkgMHg2ZiwweDM1LDB4NDEsMHg5 YiwweDE3LDB4YzksMHhiZCwweDlifQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHgz ZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYsMHg5OSwweDdk LDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0ZH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGUwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4ZDUsMHhkZSwweGY0LDB4 NTAsMHhmMywweGI3LDB4MTAsMHg0ZSwKLSsJCSAweGI4LDB4YzYsMHhmOCwweGNmLDB4ZTIsMHhi MSwweGNhLDB4YTJ9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhm ZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0 LDB4NzgsMHhmMywweDRlfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHhjZSwweDI5LDB4MDgsMHg0MywweGZjLDB4 MzQsMHg0MSwweGU3LAotKwkJIDB4NDcsMHg4ZiwweGIzLDB4NjYsMHgyYiwweDQ2LDB4YjEsMHhi Yn0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4 MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYz LDB4NGZ9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0s Ci0rCQkJCS8qIFIgKi8KLSsJCXsweGIzLDB4MjYsMHgwZiwweGY1LDB4ZDYsMHhjYSwweGE4LDB4 YmYsCi0rCQkgMHg4OSwweGI4LDB4NWUsMHgyZiwweDIyLDB4NTYsMHg5MiwweDJmfQotKwl9LAot Kwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4 YiwweGMxLAotKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHhjOX0sCi0r CQkJCS8qIFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs Ci0rCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKLSsJCQkJLyog UiAqLwotKwkJezB4MDUsMHhlYiwweDE4LDB4NTIsMHgzNCwweDQzLDB4MDAsMHg0MywKLSsJCSAw eDZlLDB4NWEsMHhhNSwweGZlLDB4N2IsMHgzMiwweGM0LDB4MmR9Ci0rCX0sCi0rCXsKLSsJCQkJ LyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0r CQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweGNhfSwKLSsJCQkJLyogViAq LwotKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkvKiBSICovCi0rCQl7 MHgxNSwweDNjLDB4ZTgsMHhkMSwweDA0LDB4YzcsMHhhZCwweDUwLAotKwkJIDB4MGIsMHhmMCww eDA3LDB4MTYsMHhlNywweDU2LDB4N2EsMHhlYX0KLSsJfSwKLSt9OwotKwotK3N0YXRpYyB1bnNp Z25lZCBjaGFyIGFlc18yNTZfa2V5WzMyXSA9Ci0rCQl7MHg2ZCwweDE0LDB4MDYsMHg2YywweGI2 LDB4ZDgsMHgyMSwweDJkLAotKwkJIDB4ODIsMHg4ZCwweGZhLDB4ZjIsMHg3YSwweDAzLDB4Yjcs MHg5ZiwKLSsJCSAweDBjLDB4YzcsMHgzZSwweGNkLDB4NzYsMHhlYiwweGVlLDB4YjUsCi0rCQkg MHgyMSwweDA1LDB4OGMsMHg0ZiwweDMxLDB4N2EsMHg4MCwweGJifTsKLSsKLStzdGF0aWMgQUVT X1BSTkdfVFYgYWVzXzI1Nl90dltdID0gewotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSww eDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4 MzQsMHg3NCwweDhlLDB4OWUsMHg4OH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweDgwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MzUsMHhjNywweGVmLDB4YTcs MHg3OCwweDRkLDB4MjksMHhiYywKLSsJCSAweDgyLDB4NzksMHg5OSwweGZiLDB4ZDAsMHhiMyww eDNiLDB4NzJ9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSww eGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4 OGUsMHg5ZSwweDg5fSwKLSsJCQkJLyogViAqLwotKwkJezB4YzAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg2YywweGY0LDB4NDIsMHg1ZCwweGM3LDB4MDQs MHgxYSwweDQxLAotKwkJIDB4MjgsMHgyYSwweDc4LDB4YTksMHhiMCwweDEyLDB4YzQsMHg5NX0K LSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCww eGEzLDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4 OGF9LAotKwkJCQkvKiBWICovCi0rCQl7MHhlMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0r CQkJCS8qIFIgKi8KLSsJCXsweDE2LDB4OTAsMHhhNCwweGZmLDB4N2IsMHg3ZSwweGI5LDB4MzAs Ci0rCQkgMHhkYiwweDY3LDB4NGIsMHhhYywweDJkLDB4ZTEsMHhkMSwweDc1fQotKwl9LAotKwl7 Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCww eGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4Yn0sCi0rCQkJ CS8qIFYgKi8KLSsJCXsweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0r CQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAq LwotKwkJezB4MTQsMHg2ZiwweGY1LDB4OTUsMHhhMSwweDQ2LDB4NjUsMHgzMCwKLSsJCSAweGJj LDB4NTcsMHhlMiwweDRhLDB4ZjcsMHg0NSwweDYyLDB4MDV9Ci0rCX0sCi0rCXsKLSsJCQkJLyog RFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkg MHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDhjfSwKLSsJCQkJLyogViAqLwot KwkJezB4ZjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg5 NiwweGUyLDB4YjQsMHgxZSwweDY2LDB4NWUsMHgwZiwweGE0LAotKwkJIDB4YzUsMHhjZCwweGEy LDB4MDcsMHhjYywweGI3LDB4OTQsMHg0MH0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJ ezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4YTks MHg0ZSwweDM0LDB4NzQsMHg4ZSwweDlmLDB4MDZ9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmZiww eGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotKwkJIDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZX0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDYxLDB4Y2UsMHgx ZCwweDZhLDB4NDgsMHg3NSwweDk3LDB4MjgsCi0rCQkgMHg0YiwweDQxLDB4ZGUsMHgxOCwweDQ0 LDB4NGYsMHg1NiwweGVjfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNh LDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQs MHg3NCwweDhlLDB4OWYsMHgwN30sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiww eGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmfSwKLSsJCQkJLyogUiAqLwotKwkJezB4NTIsMHg4OSwweDU5LDB4NzksMHgy ZCwweGFhLDB4MjgsMHhiMywKLSsJCSAweGIwLDB4OGEsMHgzZSwweDcwLDB4ZmEsMHg3MSwweDU5 LDB4ODR9Ci0rCX0sCi0rfTsKLSsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcoKQotKyAgICB7 Ci0rICAgIGFlc18xOTJfdHZbMF0uVlswXSsrOwotKyAgICB9Ci0rCi0rI2RlZmluZSBmaXBzX3Jh bmRfdGVzdChrZXksIHR2KSBcCi0rCWRvX3JhbmRfdGVzdChrZXksIHNpemVvZiBrZXksIHR2LCBz aXplb2YodHYpL3NpemVvZihBRVNfUFJOR19UVikpCi0rCi0rc3RhdGljIGludCBkb19yYW5kX3Rl c3QodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLAotKwkJCUFFU19QUk5HX1RWICp0diwg aW50IG50dikKLSsJewotKwl1bnNpZ25lZCBjaGFyIFJbMTZdOwotKwlpbnQgaTsKLSsJaWYgKCFG SVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbikpCi0rCQlyZXR1cm4gMDsKLSsJZm9yIChpID0g MDsgaSA8IG50djsgaSsrKQotKwkJewotKwkJRklQU19yYW5kX3NlZWQodHZbaV0uViwgMTYpOwot KwkJRklQU19yYW5kX3NldF9kdCh0dltpXS5EVCk7Ci0rCQlGSVBTX3JhbmRfYnl0ZXMoUiwgMTYp OwotKwkJaWYgKG1lbWNtcChSLCB0dltpXS5SLCAxNikpCi0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0r CXJldHVybiAxOwotKwl9Ci0rCQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZygpCi0rCXsKLSsJ RklQU19yYW5kX3Jlc2V0KCk7Ci0rCWlmICghRklQU19yYW5kX3Rlc3RfbW9kZSgpKQotKwkJewot KwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcsRklQU19SX1NFTEZURVNUX0ZBSUxF RCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFmaXBzX3JhbmRfdGVzdChhZXNfMTI4X2tl eSxhZXNfMTI4X3R2KQotKwkJfHwgIWZpcHNfcmFuZF90ZXN0KGFlc18xOTJfa2V5LCBhZXNfMTky X3R2KQotKwkJfHwgIWZpcHNfcmFuZF90ZXN0KGFlc18yNTZfa2V5LCBhZXNfMjU2X3R2KSkKLSsJ CXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HLEZJUFNfUl9TRUxGVEVTVF9G QUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUZJUFNfcmFuZF9yZXNldCgpOwotKwlyZXR1 cm4gMTsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2Zp cHMvZmlwc19yYW5kdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19y YW5kdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5j LmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAw MDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMjQ4IEBACi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5 OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRl bgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVt ZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wu Ci0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1j b21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy ZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxs IGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsg KiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NM IGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNv dmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhv bGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJp Z2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGlj ZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBw YWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBh dHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5 IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2Ug YXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRl eHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0r ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdl bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdh cmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0r ICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91 aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dy YXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3Bl Y2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFw cHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25v d2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1 dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBk ZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2Rl IGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3Ry aWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0K LSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g Ci0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBk aXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0r ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsg KgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4K LSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxj dHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9ibi5oPgotKwotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMK LStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBG SVBTIFJBTkQgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsK LSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSt0eXBlZGVmIHN0cnVjdAotKwl7Ci0rCXVuc2ln bmVkIGNoYXIgRFRbMTZdOwotKwl1bnNpZ25lZCBjaGFyIFZbMTZdOwotKwl1bnNpZ25lZCBjaGFy IFJbMTZdOwotKwl9IEFFU19QUk5HX01DVDsKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNf MTI4X21jdF9rZXlbMTZdID0KLSsJezB4OWYsMHg1YiwweDUxLDB4MjAsMHgwYiwweGYzLDB4MzQs MHhiNSwKLSsJIDB4ZDgsMHgyYiwweGU4LDB4YzMsMHg3MiwweDU1LDB4YzgsMHg0OH07Ci0rCi0r c3RhdGljIEFFU19QUk5HX01DVCBhZXNfMTI4X21jdF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7 MHg2MywweDc2LDB4YmIsMHhlNSwweDI5LDB4MDIsMHhiYSwweDNiLAotKwkgMHg2NywweGM5LDB4 MjUsMHhmYSwweDcwLDB4MWYsMHgxMSwweGFjfSwKLSsJCQkvKiBWICovCi0rCXsweDU3LDB4MmMs MHg4ZSwweDc2LDB4ODcsMHgyNiwweDQ3LDB4OTcsCi0rCSAweDdlLDB4NzQsMHhmYiwweGRkLDB4 YzQsMHg5NSwweDAxLDB4ZDF9LAotKwkJCS8qIFIgKi8KLSsJezB4NDgsMHhlOSwweGJkLDB4MGQs MHgwNiwweGVlLDB4MTgsMHhmYiwKLSsJIDB4ZTQsMHg1NywweDkwLDB4ZDUsMHhjMywweGZjLDB4 OWIsMHg3M30KLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbWN0X2tleVsy NF0gPQotKwl7MHhiNywweDZjLDB4MzQsMHhkMSwweDA5LDB4NjcsMHhhYiwweDczLAotKwkgMHg0 ZCwweDVhLDB4ZDUsMHgzNCwweDk4LDB4MTYsMHgwYiwweDkxLAotKwkgMHhiYywweDM1LDB4NTEs MHgxNiwweDZiLDB4YWUsMHg5MywweDhhfTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfTUNUIGFlc18x OTJfbWN0X3R2ID0gewotKwkJCS8qIERUICovCi0rCXsweDg0LDB4Y2UsMHgyMiwweDdkLDB4OTEs MHg1YSwweGEzLDB4YzksCi0rCSAweDg0LDB4M2MsMHgwYSwweGIzLDB4YTksMHg2MywweDE1LDB4 NTJ9LAotKwkJCS8qIFYgKi8KLSsJezB4YjYsMHhhZiwweGU2LDB4OGYsMHg5OSwweDllLDB4OTAs MHg2NCwKLSsJIDB4ZGQsMHhjNywweDdhLDB4YzEsMHhiYiwweDkwLDB4M2EsMHg2ZH0sCi0rCQkJ LyogUiAqLwotKwl7MHhmYywweDg1LDB4NjAsMHg5YSwweDI5LDB4NmYsMHhlZiwweDIxLAotKwkg MHhkZCwweDg2LDB4MjAsMHgzMiwweDhhLDB4MjksMHg2ZiwweDQ3fQotK307Ci0rCi0rc3RhdGlj IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9tY3Rfa2V5WzMyXSA9Ci0rCXsweDliLDB4MDUsMHhjOCww eDY4LDB4ZmYsMHg0NywweGY4LDB4M2EsCi0rCSAweGE2LDB4M2EsMHhhOCwweGNiLDB4NGUsMHg3 MSwweGIyLDB4ZTAsCi0rCSAweGI4LDB4N2UsMHhmMSwweDM3LDB4YjYsMHhiNCwweGY2LDB4NmQs Ci0rCSAweDg2LDB4MzIsMHhmYywweDFmLDB4NWUsMHgxZCwweDFlLDB4NTB9OwotKwotK3N0YXRp YyBBRVNfUFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYgPSB7Ci0rCQkJLyogRFQgKi8KLSsJezB4MzEs MHg2ZSwweDM1LDB4OWEsMHhiMSwweDQ0LDB4ZjAsMHhlZSwKLSsJIDB4NjIsMHg2ZCwweDA0LDB4 NDYsMHhlMCwweGEzLDB4OTIsMHg0Y30sCi0rCQkJLyogViAqLwotKwl7MHg0ZiwweGNkLDB4YzEs MHg4NywweDgyLDB4MWYsMHg0ZCwweGExLAotKwkgMHgzZSwweDBlLDB4NTYsMHg0NCwweDU5LDB4 ZTgsMHg4MywweGNhfSwKLSsJCQkvKiBSICovCi0rCXsweGM4LDB4ODcsMHhjMiwweDYxLDB4NWIs MHhkMCwweGI5LDB4ZTEsCi0rCSAweGU3LDB4ZjMsMHg4YiwweGQ3LDB4NWIsMHhkNSwweGYxLDB4 OGR9Ci0rfTsKLSsKLStzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIsaW50 IG4pCi0rICAgIHsKLSsgICAgd2hpbGUobi0tID4gMCkKLSsJewotKwlwcmludGYoIiAlMDJ4Iiwq YisrKTsKLSsJfQotKyAgICB9Ci0rCi0rc3RhdGljIHZvaWQgY29tcGFyZShjb25zdCB1bnNpZ25l ZCBjaGFyICpyZXN1bHQsY29uc3QgdW5zaWduZWQgY2hhciAqZXhwZWN0ZWQsCi0rCQkgICAgaW50 IG4pCi0rICAgIHsKLSsgICAgaW50IGk7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgbiA7ICsraSkK LSsJaWYocmVzdWx0W2ldICE9IGV4cGVjdGVkW2ldKQotKwkgICAgewotKwkgICAgcHV0cygiUmFu ZG9tIHRlc3QgZmFpbGVkLCBnb3Q6Iik7Ci0rCSAgICBkdW1wKHJlc3VsdCxuKTsKLSsJICAgIHB1 dHMoIlxuICAgICAgICAgICAgICAgZXhwZWN0ZWQ6Iik7Ci0rCSAgICBkdW1wKGV4cGVjdGVkLG4p OwotKwkgICAgcHV0Y2hhcignXG4nKTsKLSsJICAgIEVYSVQoMSk7Ci0rCSAgICB9Ci0rICAgIH0K LSsKLSsKLStzdGF0aWMgdm9pZCBydW5fdGVzdCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXls ZW4sIEFFU19QUk5HX01DVCAqdHYpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbMTZd LCBkdFsxNl07Ci0rICAgIGludCBpLCBqOwotKyAgICBGSVBTX3JhbmRfcmVzZXQoKTsKLSsgICAg RklQU19yYW5kX3Rlc3RfbW9kZSgpOwotKyAgICBGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxl bik7Ci0rICAgIEZJUFNfcmFuZF9zZWVkKHR2LT5WLCAxNik7Ci0rICAgIG1lbWNweShkdCwgdHYt PkRULCAxNik7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQotKwl7Ci0rICAgIAlG SVBTX3JhbmRfc2V0X2R0KGR0KTsKLSsJRklQU19yYW5kX2J5dGVzKGJ1ZiwgMTYpOwotKwkvKiBJ bmNyZW1lbnQgRFQgKi8KLSsJZm9yIChqID0gMTU7IGogPj0gMDsgai0tKQotKwkJewotKwkJZHRb al0rKzsKLSsJCWlmIChkdFtqXSkKLSsJCQlicmVhazsKLSsJCX0KLSsJfQotKwotKyAgICBjb21w YXJlKGJ1Zix0di0+UiwgMTYpOwotKyAgICB9Ci0rCi0raW50IG1haW4oKQotKwl7Ci0rCXJ1bl90 ZXN0KGFlc18xMjhfbWN0X2tleSwgMTYsICZhZXNfMTI4X21jdF90dik7Ci0rCXByaW50ZigiRklQ UyBQUk5HIHRlc3QgMSBkb25lXG4iKTsKLSsJcnVuX3Rlc3QoYWVzXzE5Ml9tY3Rfa2V5LCAyNCwg JmFlc18xOTJfbWN0X3R2KTsKLSsJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAyIGRvbmVcbiIpOwot KwlydW5fdGVzdChhZXNfMjU2X21jdF9rZXksIDMyLCAmYWVzXzI1Nl9tY3RfdHYpOwotKwlwcmlu dGYoIkZJUFMgUFJORyB0ZXN0IDMgZG9uZVxuIik7Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0rI2Vu ZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwot LS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcwky MDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAw MDAgKzAyMDAKLUBAIC0wLDAgKzEsNDQxIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmln aHQgKGMpIDIwMDMtMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoK LSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK LSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0r ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsg Ki8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0r I2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYK LSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+ Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG5bXSA9 Ci0rIlx4MDBceEJCXHhGOFx4MkZceDA5XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4XHhBQ1x4MkJc eDlEXHhBOFx4NzEiCi0rIlx4RjdceDM2XHg4RFx4MDdceEVFXHhENFx4MTBceDQzXHhBNFx4NDBc eEQ2XHhCNlx4RjBceDc0XHg1NFx4RjUiCi0rIlx4MUZceEI4XHhERlx4QkFceEFGXHgwM1x4NUNc eDAyXHhBQlx4NjFceEVBXHg0OFx4Q0VceEVCXHg2Rlx4Q0QiCi0rIlx4NDhceDc2XHhFRFx4NTJc eDBEXHg2MFx4RTFceEVDXHg0Nlx4MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCi0rIlx4N0Zc eEFGXHhCOFx4RTBceEEzXHhERlx4QzdceDM3XHg3Mlx4M0VceEU2XHhCNFx4QjdceEQ5XHgzQVx4 MjUiCi0rIlx4ODRceEVFXHg2QVx4NjRceDlEXHgwNlx4MDlceDUzXHg3NFx4ODhceDM0XHhCMlx4 NDVceDQ1XHg5OFx4MzkiCi0rIlx4NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgxRlx4 NTJceDdBXHg5QVx4NDFceEY2XHhDMVx4NjgiCi0rIlx4N0ZceEUyXHg1M1x4NzJceDk4XHhDQVx4 MkFceDhGXHg1OVx4NDZceEY4XHhFNVx4RkRceDA5XHgxRFx4QkQiCi0rIlx4Q0IiOwotKwotKwot K3N0YXRpYyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5KQotKyAgICB7Ci0rICAgIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJceDExIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgZFtdID0KLSsiXHgwMFx4QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4RjJceDg5XHhD NFx4QjlceDg4XHhEQlx4MzBceEMxXHhDRCIKLSsiXHhGOFx4M0ZceDMxXHgyNVx4MUVceDA2XHg2 OFx4QjRceDI3XHg4NFx4ODFceDM4XHgwMVx4NTdceDk2XHg0MSIKLSsiXHhCMlx4OTRceDEwXHhC M1x4QzdceDk5XHg4RFx4NkJceEM0XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIKLSsiXHhE Nlx4ODdceDBEXHhBMlx4QzBceDgyXHhBOVx4MzlceEUzXHg3Rlx4RENceEI4XHgyRVx4QzlceDNF XHhEQSIKLSsiXHhDOVx4N0ZceEYzXHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4MUNceDc2 XHhGMVx4QTlceDUyXHg5NCIKLSsiXHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4MDlceDJD XHhEM1x4OERceEMzXHhCRVx4RjVceEQyXHgwQSIKLSsiXHg5M1x4OTlceDI2XHhFRFx4NEZceDc0 XHhBMVx4M0VceEREXHhGQlx4RTFceEExXHhDRVx4Q0NceDQ4XHg5NCIKLSsiXHhBRlx4OTRceDI4 XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhCMyIKLSsi XHhDMSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9Ci0rIlx4MDBc eEVFXHhDRlx4QUVceDgxXHhCMVx4QjlceEIzXHhDOVx4MDhceDgxXHgwQlx4MTBceEExXHhCNVx4 NjAiCi0rIlx4MDFceDk5XHhFQlx4OUZceDQ0XHhBRVx4RjRceEZEXHhBNFx4OTNceEI4XHgxQVx4 OUVceDNEXHg4NFx4RjYiCi0rIlx4MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURceDFFXHgzQlx4 N0VceDI4XHhGQVx4RTdceEFBXHgwNFx4MEEiCi0rIlx4MkRceDVCXHgyNVx4MjFceDc2XHg0NVx4 OURceDFGXHgzOVx4NzVceDQxXHhCQVx4MkFceDU4XHhGQlx4NjUiCi0rIlx4OTkiOwotKwotKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQotKyJceDAwXHhDOVx4N0ZceEIxXHhG MFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhBQVx4RDFceEQ5IgotKyJceDM1XHgz Rlx4NkNceDQyXHhEMFx4ODhceDY2XHhCMVx4RDBceDVBXHgwRlx4MjBceDM1XHgwMlx4OEJceDlE IgotKyJceDg2XHg5OFx4NDBceEI0XHgxNlx4NjZceEI0XHgyRVx4OTJceEVBXHgwRFx4QTNceEI0 XHgzMlx4MDRceEI1IgotKyJceENGXHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4QTVceEE0 XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1IgotKyJceDAzIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZG1wMVtdID0KLSsiXHg1NFx4NDlceDRDXHhBNlx4M0VceEJBXHgwM1x4 MzdceEU0XHhFMlx4NDBceDIzXHhGQ1x4RDZceDlBXHg1QSIKLSsiXHhFQlx4MDdceEREXHhEQ1x4 MDFceDgzXHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJceEIxXHgzRSIKLSsiXHhEOVx4 NDlceDA5XHg3NVx4RUFceEI3XHg3NFx4MTRceEZGXHg1OVx4QzFceEY3XHg2OVx4MkVceDlBXHgy RSIKLSsiXHgyMFx4MkJceDM4XHhGQ1x4OTFceDBBXHg0N1x4NDFceDc0XHhBRFx4QzlceDNDXHgx Rlx4NjdceEM5XHg4MSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcTFb XSA9Ci0rIlx4NDdceDFFXHgwMlx4OTBceEZGXHgwQVx4RjBceDc1XHgwM1x4NTFceEI3XHhGOFx4 NzhceDg2XHg0Q1x4QTkiCi0rIlx4NjFceEFEXHhCRFx4M0FceDhBXHg3RVx4OTlceDFDXHg1Q1x4 MDVceDU2XHhBOVx4NENceDMxXHg0Nlx4QTciCi0rIlx4RjlceDgwXHgzRlx4OEZceDZGXHg4QVx4 RTNceDQyXHhFOVx4MzFceEZEXHg4QVx4RTRceDdBXHgyMlx4MEQiCi0rIlx4MUJceDk5XHhBNFx4 OTVceDg0XHg5OFx4MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4M0QiOwotKyAg ICAKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXFtcFtdID0KLSsiXHgwMFx4QjBc eDZDXHg0Rlx4REFceEJCXHg2M1x4MDFceDE5XHg4RFx4MjZceDVCXHhEQlx4QUVceDk0XHgyMyIK LSsiXHhCM1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUwXHg5M1x4MDdceDdGXHhDRFx4 MzlceEUyXHgxMSIKLSsiXHg5Rlx4QzlceDg2XHgzMlx4MTVceDRGXHg1OFx4ODNceEIxXHg2N1x4 QTlceDY3XHhCRlx4NDBceDJCXHg0RSIKLSsiXHg5RVx4MkVceDBGXHg5Nlx4NTZceEU2XHg5OFx4 RUFceDM2XHg2Nlx4RURceEZCXHgyNVx4NzlceDgwXHgzOSIKLSsiXHhGNyI7Ci0rCi0rICAgIGtl eS0+biA9IEJOX2JpbjJibihuLCBzaXplb2YobiktMSwga2V5LT5uKTsKLSsgICAga2V5LT5lID0g Qk5fYmluMmJuKGUsIHNpemVvZihlKS0xLCBrZXktPmUpOwotKyAgICBrZXktPmQgPSBCTl9iaW4y Ym4oZCwgc2l6ZW9mKGQpLTEsIGtleS0+ZCk7Ci0rICAgIGtleS0+cCA9IEJOX2JpbjJibihwLCBz aXplb2YocCktMSwga2V5LT5wKTsKLSsgICAga2V5LT5xID0gQk5fYmluMmJuKHEsIHNpemVvZihx KS0xLCBrZXktPnEpOwotKyAgICBrZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwgc2l6ZW9mKGRt cDEpLTEsIGtleS0+ZG1wMSk7Ci0rICAgIGtleS0+ZG1xMSA9IEJOX2JpbjJibihkbXExLCBzaXpl b2YoZG1xMSktMSwga2V5LT5kbXExKTsKLSsgICAga2V5LT5pcW1wID0gQk5fYmluMmJuKGlxbXAs IHNpemVvZihpcW1wKS0xLCBrZXktPmlxbXApOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwot K3ZvaWQgRklQU19jb3JydXB0X3JzYSgpCi0rICAgIHsKLSsgICAgblswXSsrOwotKyAgICB9Ci0r Ci0rLyogS25vd24gQW5zd2VyIFRlc3QgKEtBVCkgZGF0YSBmb3IgdGhlIGFib3ZlIFJTQSBwcml2 YXRlIGtleSBzaWduaW5nCi0rICoga2F0X3Ricy4KLSsgKi8KLSsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBrYXRfdGJzW10gPSAiT3BlblNTTCBGSVBTIDE0MC0yIFB1YmxpYyBLZXkgUlNB IEtBVCI7Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMVtd ID0gewotKyAgMHgyRCwgMHhBRiwgMHg2RSwgMHhDMiwgMHg5OCwgMHhGQiwgMHg4QSwgMHhBMSwg MHhCOSwgMHg0NiwgMHhEQSwgMHgwRiwKLSsgIDB4MDEsIDB4MUUsIDB4MzcsIDB4OTMsIDB4QzIs IDB4NTUsIDB4MjcsIDB4RTQsIDB4MUQsIDB4RDIsIDB4OTAsIDB4QkIsCi0rICAweEY0LCAweEJG LCAweDRBLCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAweEU4LCAweDBDLCAweEI3LCAweEY4LCAw eEQzLAotKyAgMHhEMSwgMHhERiwgMHhFNywgMHhCRSwgMHg4MCwgMHgwNSwgMHhDMywgMHhCNSwg MHhDNywgMHg4MywgMHhENSwgMHg0QywKLSsgIDB4N0YsIDB4NDksIDB4RkIsIDB4M0YsIDB4Mjks IDB4OUIsIDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAsIDB4RDAsIDB4QTcsCi0rICAweDBELCAweEE5 LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAweEUzLCAweDVFLCAweDNGLCAweDlCLCAw eEY1LAotKyAgMHhCNiwgMHhGMywgMHhGMiwgMHg1RSwgMHg3NCwgMHhDOSwgMHg4MywgMHg4MSwg MHg0NywgMHhGMCwgMHhDNSwgMHg0NSwKLSsgIDB4MEEsIDB4RTksIDB4OEUsIDB4MzgsIDB4RDcs IDB4MTgsIDB4QzYsIDB4MkEsIDB4MEYsIDB4RjgsIDB4QjcsIDB4MzEsCi0rICAweEQ2LCAweDU1 LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAweEU2LCAweERCLCAweDlGLCAweEJBLCAw eEU4LAotKyAgMHgyMywgMHhCNSwgMHg3RiwgMHhEQywgMHgwOCwgMHhFQSwgMHhENSwgMHgyNiwg MHgxRSwgMHgyMCwgMHgyNSwgMHg4NCwKLSsgIDB4MjYsIDB4QzYsIDB4NzksIDB4QzksIDB4OUIs IDB4M0QsIDB4N0UsIDB4QTkKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGth dF9SU0FfUFNTX1NIQTIyNFtdID0gewotKyAgMHgzOSwgMHg0QSwgMHg2QSwgMHgyMCwgMHhCQywg MHhFOSwgMHgzMywgMHhFRCwgMHhFRiwgMHhDNSwgMHg1OCwgMHhBNywKLSsgIDB4RkUsIDB4ODEs IDB4QzQsIDB4MzYsIDB4NTAsIDB4OUEsIDB4MkMsIDB4ODIsIDB4OTgsIDB4MDgsIDB4OTUsIDB4 RkEsCi0rICAweEIxLCAweDlFLCAweEQyLCAweDU1LCAweDYxLCAweDg3LCAweDIxLCAweDU5LCAw eDg3LCAweDdCLCAweDFGLCAweDU3LAotKyAgMHgzMCwgMHg5RCwgMHgwRCwgMHg0QSwgMHgwNiwg MHhFQiwgMHg1MiwgMHgzNywgMHg1NSwgMHg1NCwgMHgxQywgMHg4OSwKLSsgIDB4ODMsIDB4NzUs IDB4NTksIDB4NjUsIDB4NjQsIDB4OTAsIDB4MkUsIDB4MTYsIDB4Q0MsIDB4ODYsIDB4MDUsIDB4 RUUsCi0rICAweEIxLCAweEU2LCAweDdCLCAweEJBLCAweDE2LCAweDc1LCAweDBELCAweDBDLCAw eDY0LCAweDBCLCAweEFCLCAweDIyLAotKyAgMHgxNSwgMHg3OCwgMHg2QiwgMHg2RiwgMHhBNCwg MHhGQiwgMHg3NywgMHg0MCwgMHg2NCwgMHg2MiwgMHhEMSwgMHhCNSwKLSsgIDB4MzcsIDB4MUUs IDB4RTAsIDB4M0QsIDB4QTgsIDB4RjksIDB4RDIsIDB4QkQsIDB4QUEsIDB4MzgsIDB4MjQsIDB4 NDksCi0rICAweDU4LCAweEQyLCAweDc0LCAweDg1LCAweEY0LCAweEI1LCAweDkzLCAweDhFLCAw eEY1LCAweDAzLCAweEVBLCAweDJELAotKyAgMHhDOCwgMHg1MiwgMHhGQSwgMHhDRiwgMHg3RSwg MHgzNSwgMHhCMCwgMHg2QSwgMHhBRiwgMHg5NSwgMHhDMCwgMHgwMCwKLSsgIDB4NTQsIDB4NzYs IDB4M0QsIDB4MEMsIDB4OUMsIDB4QjIsIDB4RUUsIDB4QzAKLSt9OwotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTI1NltdID0gewotKyAgMHg2RCwgMHgzRCwg MHhCRSwgMHg4RiwgMHg2MCwgMHg2RCwgMHgyNSwgMHgxNCwgMHhGMCwgMHgzMSwgMHhFMywgMHg4 OSwKLSsgIDB4MDAsIDB4OTcsIDB4RkEsIDB4OTksIDB4NzEsIDB4MjgsIDB4RTUsIDB4MTAsIDB4 MjUsIDB4OUEsIDB4RjMsIDB4OEYsCi0rICAweDdCLCAweEM1LCAweEE4LCAweDRBLCAweDc0LCAw eDUxLCAweDM2LCAweEUyLCAweDhELCAweDdELCAweDczLCAweDI4LAotKyAgMHhDMSwgMHg3Nywg MHhDNiwgMHgyNywgMHg5NywgMHgwMCwgMHg4QiwgMHgwMCwgMHhBMywgMHg5NiwgMHg3MywgMHg0 RSwKLSsgIDB4N0QsIDB4MkUsIDB4MkMsIDB4MzQsIDB4NjgsIDB4OEMsIDB4OEUsIDB4REYsIDB4 OUQsIDB4NDksIDB4NDcsIDB4MDUsCi0rICAweEFCLCAweEY1LCAweDAxLCAweEQ2LCAweDgxLCAw eDQ3LCAweDcwLCAweEY1LCAweDFELCAweDZELCAweDI2LCAweEJBLAotKyAgMHgyRiwgMHg3QSwg MHg1NCwgMHg1MywgMHg0RSwgMHhFRCwgMHg3MSwgMHhEOSwgMHg1QSwgMHhGMywgMHhEQSwgMHhC NiwKLSsgIDB4MEIsIDB4NDcsIDB4MzQsIDB4QUYsIDB4OTAsIDB4REMsIDB4QzgsIDB4RDksIDB4 NkYsIDB4NTYsIDB4Q0QsIDB4OUYsCi0rICAweDIxLCAweEI3LCAweDdFLCAweEFELCAweDdDLCAw eDJGLCAweDc1LCAweDUwLCAweDQ3LCAweDEyLCAweEU0LCAweDZELAotKyAgMHg1RiwgMHhCNywg MHgwMSwgMHhERiwgMHhDMywgMHgxMSwgMHg2QywgMHhBOSwgMHg5RSwgMHg0OSwgMHhCOSwgMHhG NiwKLSsgIDB4NzIsIDB4RjQsIDB4RjYsIDB4RUYsIDB4ODgsIDB4MUUsIDB4MkQsIDB4MUMKLSt9 OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTM4NFtdID0g ewotKyAgMHg0MCwgMHhGQiwgMHhBMSwgMHgyMSwgMHhGNCwgMHhCMiwgMHg0MCwgMHg5QSwgMHhC NCwgMHgzMSwgMHhBOCwgMHhGMiwKLSsgIDB4RUMsIDB4MUMsIDB4QzQsIDB4QzgsIDB4N0MsIDB4 MjIsIDB4NjUsIDB4OUMsIDB4NTcsIDB4NDUsIDB4Q0QsIDB4NUUsCi0rICAweDg2LCAweDAwLCAw eEY3LCAweDI1LCAweDc4LCAweERFLCAweERDLCAweDdBLCAweDcxLCAweDQ0LCAweDlBLCAweENE LAotKyAgMHhBQSwgMHgyNSwgMHhGNCwgMHhCMiwgMHhGQywgMHhGMCwgMHg3NSwgMHhEOSwgMHgy RiwgMHg3OCwgMHgyMywgMHg3RiwKLSsgIDB4NkYsIDB4MDIsIDB4RUYsIDB4QzEsIDB4QUYsIDB4 QTYsIDB4MjgsIDB4MTYsIDB4MzEsIDB4REMsIDB4NDIsIDB4NkMsCi0rICAweEIyLCAweDQ0LCAw eEU1LCAweDRELCAweDY2LCAweEEyLCAweEU2LCAweDcxLCAweEYzLCAweEFDLCAweDRGLCAweEZC LAotKyAgMHg5MSwgMHhDQSwgMHhGNSwgMHg3MCwgMHhFRiwgMHg2QiwgMHg5RCwgMHhBNCwgMHhF RiwgMHhEOSwgMHgzRCwgMHgyRiwKLSsgIDB4M0EsIDB4QkUsIDB4ODksIDB4MzgsIDB4NTksIDB4 MDEsIDB4QkEsIDB4REEsIDB4MzIsIDB4QUQsIDB4NDIsIDB4ODksCi0rICAweDk4LCAweDhCLCAw eDM5LCAweDQ0LCAweEYwLCAweEZDLCAweDM4LCAweEFDLCAweDg3LCAweDFGLCAweENBLCAweDZG LAotKyAgMHg0OCwgMHhGNiwgMHhBRSwgMHhENywgMHg0NSwgMHhFRSwgMHhBRSwgMHg4OCwgMHgw RSwgMHg2MCwgMHhGNCwgMHg1NSwKLSsgIDB4NDgsIDB4NDQsIDB4RUUsIDB4MUYsIDB4OTAsIDB4 MTgsIDB4NEIsIDB4RjEKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9S U0FfUFNTX1NIQTUxMltdID0gewotKyAgMHgwNywgMHgxRSwgMHhEOCwgMHhENSwgMHgwNSwgMHhF OCwgMHhFNiwgMHhFNiwgMHg1NywgMHhBRSwgMHg2MywgMHg4QywKLSsgIDB4QzYsIDB4ODMsIDB4 QjcsIDB4QTAsIDB4NTksIDB4QkIsIDB4RjIsIDB4QzYsIDB4OEYsIDB4MTIsIDB4NTMsIDB4OUEs Ci0rICAweDlCLCAweDU0LCAweDlFLCAweEIzLCAweEMxLCAweDFELCAweDIzLCAweDRELCAweDUx LCAweEVELCAweDlFLCAweERELAotKyAgMHg0QiwgMHhGMywgMHg0NiwgMHg5QiwgMHg2QiwgMHhG NiwgMHg3QywgMHgyNCwgMHg2MCwgMHg3OSwgMHgyMywgMHgzOSwKLSsgIDB4MDEsIDB4MUMsIDB4 NTEsIDB4Q0IsIDB4RDgsIDB4RTksIDB4OUEsIDB4MDEsIDB4NjcsIDB4NUYsIDB4RkUsIDB4RDcs Ci0rICAweDdDLCAweEUzLCAweDdGLCAweEVELCAweERCLCAweDg3LCAweEJCLCAweEYwLCAweDNE LCAweDc4LCAweDU1LCAweDYxLAotKyAgMHg1NywgMHhFMywgMHgwRiwgMHhFMywgMHhEMiwgMHg5 RCwgMHgwQywgMHgyQSwgMHgyMCwgMHhCMCwgMHg4NSwgMHgxMywKLSsgIDB4QzUsIDB4NDcsIDB4 MzQsIDB4MEQsIDB4MzIsIDB4MTUsIDB4QzgsIDB4QUUsIDB4OUEsIDB4NkEsIDB4MzksIDB4NjMs Ci0rICAweDJELCAweDYwLCAweEY1LCAweDRDLCAweERGLCAweDhBLCAweDQ4LCAweDRCLCAweEJG LCAweEY0LCAweEE4LCAweEZFLAotKyAgMHg3NiwgMHhGMiwgMHgzMiwgMHgxQiwgMHg5QywgMHg3 QywgMHhDQSwgMHhGRSwgMHg3RiwgMHg4MCwgMHhDMiwgMHg4OCwKLSsgIDB4NUMsIDB4OTcsIDB4 NzAsIDB4QjQsIDB4MjYsIDB4QzksIDB4MTQsIDB4OEIKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMVtdID0gewotKyAgMHg3MSwgMHhFRSwgMHgxQSwgMHhD MCwgMHhGRSwgMHgwMSwgMHg5MywgMHg1NCwgMHg3OSwgMHg1QywgMHhGMiwgMHg0QywKLSsgIDB4 NEEsIDB4RkQsIDB4MUEsIDB4MDUsIDB4OEYsIDB4NjQsIDB4QjEsIDB4NkQsIDB4NjEsIDB4MzMs IDB4OEQsIDB4OUIsCi0rICAweEU3LCAweEZELCAweDYwLCAweEEzLCAweDgzLCAweEI1LCAweEEz LCAweDUxLCAweDU1LCAweDc3LCAweDkwLCAweENGLAotKyAgMHhEQywgMHgyMiwgMHgzNywgMHg4 RSwgMHhEMCwgMHhFMSwgMHhBRSwgMHgwOSwgMHhFMywgMHgzRCwgMHgxRSwgMHhGOCwKLSsgIDB4 ODAsIDB4RDEsIDB4OEIsIDB4QzIsIDB4RUMsIDB4MEEsIDB4RDcsIDB4NkIsIDB4ODgsIDB4OEIs IDB4OEIsIDB4QTEsCi0rICAweDIwLCAweDIyLCAweEJFLCAweDU5LCAweDVCLCAweEUwLCAweDIz LCAweDI0LCAweEExLCAweDQ5LCAweDMwLCAweEJBLAotKyAgMHhBOSwgMHg5RSwgMHhFOCwgMHhC MSwgMHg4QSwgMHg2MiwgMHgxNiwgMHhCRiwgMHg0RSwgMHhDQSwgMHgyRSwgMHg0RSwKLSsgIDB4 QkMsIDB4MjksIDB4QTgsIDB4NjcsIDB4MTMsIDB4QjcsIDB4OUYsIDB4MUQsIDB4MDQsIDB4NDQs IDB4RTUsIDB4NUYsCi0rICAweDM1LCAweDA3LCAweDExLCAweEJDLCAweEVELCAweDE5LCAweDM3 LCAweDIxLCAweENGLCAweDIzLCAweDQ4LCAweDFGLAotKyAgMHg3MiwgMHgwNSwgMHhERSwgMHhF NiwgMHhFOCwgMHg3RiwgMHgzMywgMHg4QSwgMHg3NiwgMHg0QiwgMHgyRiwgMHg5NSwKLSsgIDB4 REYsIDB4RjEsIDB4NUYsIDB4ODQsIDB4ODAsIDB4RDksIDB4NDYsIDB4QjQKLSt9OwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjI0W10gPSB7Ci0rICAweDYyLCAw eEFBLCAweDc5LCAweEE5LCAweDE4LCAweDBFLCAweDVGLCAweDhDLCAweEJCLCAweEI3LCAweDE1 LCAweEY5LAotKyAgMHgyNSwgMHhCQiwgMHhGQSwgMHhENCwgMHgzQSwgMHgzNCwgMHhFRCwgMHg5 RSwgMHhBMCwgMHhBOSwgMHgxOCwgMHg4RCwKLSsgIDB4NUIsIDB4NTUsIDB4OUEsIDB4N0UsIDB4 MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUsIDB4MUEsIDB4QzUsIDB4ODksCi0rICAweDA4LCAw eEUyLCAweDFCLCAweEJELCAweDYyLCAweDUwLCAweDE3LCAweDc2LCAweDMwLCAweDJDLCAweDlF LCAweENELAotKyAgMHhBNCwgMHgwMiwgMHhBRCwgMHhCMSwgMHg2RCwgMHg0NCwgMHg2RCwgMHhE NSwgMHhDNiwgMHg0NSwgMHg0MSwgMHhFNSwKLSsgIDB4RUUsIDB4MUYsIDB4OEQsIDB4N0UsIDB4 MDgsIDB4MTYsIDB4QTYsIDB4RTEsIDB4NUUsIDB4MEIsIDB4QTksIDB4Q0MsCi0rICAweERCLCAw eDU5LCAweDU1LCAweDg3LCAweDA5LCAweDI1LCAweDcwLCAweDg2LCAweDg0LCAweDAyLCAweEM2 LCAweDNCLAotKyAgMHgwQiwgMHg0NCwgMHg0QywgMHg0NiwgMHg5NSwgMHhGNCwgMHhGOCwgMHg1 QSwgMHg5MSwgMHgyOCwgMHgzRSwgMHhCMiwKLSsgIDB4NTgsIDB4MkUsIDB4MDYsIDB4NDUsIDB4 NDksIDB4RTAsIDB4OTIsIDB4RTIsIDB4QzAsIDB4NjYsIDB4RTYsIDB4MzUsCi0rICAweEQ5LCAw eDc5LCAweDdGLCAweDE3LCAweDVFLCAweDAyLCAweDczLCAweDA0LCAweDc3LCAweDgyLCAweEU2 LCAweERDLAotKyAgMHg0MCwgMHgyMSwgMHg4OSwgMHg4QiwgMHgzNywgMHgzRSwgMHgxRSwgMHg4 RAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyNTZbXSA9 IHsKLSsgIDB4MEQsIDB4NTUsIDB4RTIsIDB4QUEsIDB4ODEsIDB4REIsIDB4OEUsIDB4ODIsIDB4 MDUsIDB4MTcsIDB4QTUsIDB4MjMsCi0rICAweEU3LCAweDNCLCAweDFELCAweEFGLCAweEZCLCAw eDhDLCAweEQwLCAweDgxLCAweDIwLCAweDdCLCAweEFBLCAweDIzLAotKyAgMHg5MiwgMHg4Nywg MHg4QywgMHhEMSwgMHg1MywgMHg4NSwgMHgxNiwgMHhEQywgMHhCRSwgMHhBRCwgMHg2RiwgMHgz NSwKLSsgIDB4OTgsIDB4MkQsIDB4NjksIDB4ODQsIDB4QkYsIDB4RDksIDB4OEEsIDB4MDEsIDB4 MTcsIDB4NTgsIDB4QjIsIDB4NkUsCi0rICAweDJDLCAweDQ0LCAweDlCLCAweDkwLCAweEYxLCAw eEZCLCAweDUxLCAweEU4LCAweDZBLCAweDkwLCAweDJELCAweDE4LAotKyAgMHgwRSwgMHhDMCwg MHg5MCwgMHgxMCwgMHgyNCwgMHhBOSwgMHgxRCwgMHhCMywgMHg1OCwgMHg3QSwgMHg5MSwgMHgz MCwKLSsgIDB4QkUsIDB4MjIsIDB4QzcsIDB4RDMsIDB4RUMsIDB4QzMsIDB4MDksIDB4NUQsIDB4 QkYsIDB4RTIsIDB4ODAsIDB4M0EsCi0rICAweDdDLCAweDg1LCAweEI0LCAweEJDLCAweEQxLCAw eEU5LCAweEYwLCAweDVDLCAweERFLCAweDgxLCAweEE2LCAweDM4LAotKyAgMHhCOCwgMHg0Miwg MHhCQiwgMHg4NiwgMHhDNSwgMHg5RCwgMHhDRSwgMHg3QywgMHgyQywgMHhFRSwgMHhEMSwgMHhE QSwKLSsgIDB4MjcsIDB4NDgsIDB4MkIsIDB4RjUsIDB4QUIsIDB4QjksIDB4RjcsIDB4ODAsIDB4 RDEsIDB4OTAsIDB4MjcsIDB4OTAsCi0rICAweEJELCAweDQ0LCAweDk3LCAweDYwLCAweENELCAw eDU3LCAweEMwLCAweDdBCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRf UlNBX1NIQTM4NFtdID0gewotKyAgMHgxRCwgMHhFMywgMHg2QSwgMHhERCwgMHgyNywgMHg0Qywg MHhDMCwgMHhBNSwgMHgyNywgMHhFRiwgMHhFNiwgMHgxRiwKLSsgIDB4RDIsIDB4OTEsIDB4Njgs IDB4NTksIDB4MDQsIDB4QUUsIDB4QkQsIDB4OTksIDB4NjMsIDB4NTYsIDB4NDcsIDB4QzcsCi0r ICAweDZGLCAweDIyLCAweDE2LCAweDQ4LCAweEQwLCAweEY5LCAweDE4LCAweEE5LCAweENBLCAw eEZBLCAweDVELCAweDVDLAotKyAgMHhBNywgMHg2NSwgMHg1MiwgMHg4QSwgMHhDOCwgMHg0NCwg MHg3RSwgMHg4NiwgMHg1RCwgMHhBOSwgMHhBNiwgMHg1NSwKLSsgIDB4NjUsIDB4M0UsIDB4RDks IDB4MkQsIDB4MDIsIDB4MzgsIDB4QTgsIDB4NzksIDB4MjgsIDB4N0YsIDB4QjYsIDB4Q0YsCi0r ICAweDgyLCAweERELCAweDdFLCAweDU1LCAweEUxLCAweEIxLCAweEJDLCAweEUyLCAweDE5LCAw eDJCLCAweDMwLCAweEMyLAotKyAgMHgxQiwgMHgyQiwgMHhCMCwgMHg4MiwgMHg0NiwgMHhBQywg MHg0QiwgMHhEMSwgMHhFMiwgMHg3RCwgMHhFQiwgMHg4QywKLSsgIDB4RkYsIDB4OTUsIDB4RTks IDB4NkEsIDB4MUMsIDB4M0QsIDB4NEQsIDB4QkYsIDB4OEYsIDB4OEIsIDB4OUMsIDB4Q0QsCi0r ICAweEVBLCAweDg1LCAweEVFLCAweDAwLCAweERDLCAweDFDLCAweEE3LCAweEVCLCAweEQwLCAw eDhGLCAweDk5LCAweEYxLAotKyAgMHgxNiwgMHgyOCwgMHgyNCwgMHg2NCwgMHgwNCwgMHgzOSwg MHgyRCwgMHg1OCwgMHgxRSwgMHgzNywgMHhEQywgMHgwNCwKLSsgIDB4QkQsIDB4MzEsIDB4QTIs IDB4MkYsIDB4QjMsIDB4MzUsIDB4NTYsIDB4QkYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGthdF9SU0FfU0hBNTEyW10gPSB7Ci0rICAweDY5LCAweDUyLCAweDFCLCAweDUx LCAweDVFLCAweDA2LCAweENBLCAweDlCLCAweDE2LCAweDUxLCAweDVELCAweENGLAotKyAgMHg0 OSwgMHgyNSwgMHg0QSwgMHhBMSwgMHg2QSwgMHg3NywgMHg0QywgMHgzNiwgMHg0MCwgMHhGOCwg MHhCMiwgMHg5QSwKLSsgIDB4MTUsIDB4RUEsIDB4NUMsIDB4RTUsIDB4RTYsIDB4ODIsIDB4RTAs IDB4ODYsIDB4ODIsIDB4NkIsIDB4MzIsIDB4RjEsCi0rICAweDA0LCAweEMxLCAweDVBLCAweDFB LCAweEVELCAweDFFLCAweDlBLCAweEI2LCAweDRDLCAweDU0LCAweDlGLCAweEQ4LAotKyAgMHg4 RCwgMHhDQywgMHhBQywgMHg4QSwgMHhCQiwgMHg5QywgMHg4MiwgMHgzRiwgMHhBNiwgMHg1Mywg MHg2MiwgMHhCNSwKLSsgIDB4ODAsIDB4RTIsIDB4QkMsIDB4REQsIDB4NjcsIDB4MkIsIDB4RDks IDB4M0YsIDB4RTQsIDB4NzUsIDB4OTIsIDB4NkIsCi0rICAweEFGLCAweDYyLCAweDdDLCAweDUy LCAweEYwLCAweEVFLCAweDMzLCAweERGLCAweDFCLCAweDFELCAweDQ3LCAweEU2LAotKyAgMHg1 OSwgMHg1NiwgMHhBNSwgMHhCOSwgMHg1QywgMHhFNiwgMHg3NywgMHg3OCwgMHgxNiwgMHg2Mywg MHg4NCwgMHgwNSwKLSsgIDB4NkYsIDB4MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4RjcsIDB4N0Ys IDB4QjIsIDB4NjQsIDB4NzEsIDB4RTAsIDB4MkQsCi0rICAweDNFLCAweDYyLCAweENFLCAweEI1 LCAweDNGLCAweDg4LCAweERGLCAweDJELCAweEFCLCAweDk4LCAweDY1LCAweDkxLAotKyAgMHhE RiwgMHg3MCwgMHgxNCwgMHhBNSwgMHgzRiwgMHgzNiwgMHhBQiwgMHg4NAotK307Ci0rCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTFbXSA9IHsKLSsgIDB4ODYs IDB4QjQsIDB4MTgsIDB4QkEsIDB4RDEsIDB4ODAsIDB4QjYsIDB4N0MsIDB4NDIsIDB4NDUsIDB4 NEQsIDB4REYsCi0rICAweEU5LCAweDJELCAweEUxLCAweDgzLCAweDVGLCAweEI1LCAweDJGLCAw eEM5LCAweENELCAweEM0LCAweEIyLCAweDc1LAotKyAgMHg4MCwgMHhBNCwgMHhGMSwgMHg0QSwg MHhFNywgMHg4MywgMHgxMiwgMHgxRSwgMHgxRSwgMHgxNCwgMHhCOCwgMHhBQywKLSsgIDB4MzUs IDB4RTIsIDB4QUEsIDB4MEIsIDB4NUMsIDB4RjgsIDB4MzgsIDB4NEQsIDB4MDQsIDB4RUUsIDB4 QTksIDB4OTcsCi0rICAweDcwLCAweEZCLCAweDVFLCAweEU3LCAweEI3LCAweEUzLCAweDYyLCAw eDIzLCAweDRCLCAweDM4LCAweEJFLCAweEQ2LAotKyAgMHg1MywgMHgxNSwgMHhGNywgMHhERiwg MHg4NywgMHhCNCwgMHgwRSwgMHhDQywgMHhCMSwgMHgxQSwgMHgxMSwgMHgxOSwKLSsgIDB4RUUs IDB4NTEsIDB4Q0MsIDB4OTIsIDB4REQsIDB4QkMsIDB4NjMsIDB4MjksIDB4NjMsIDB4MEMsIDB4 NTksIDB4RDcsCi0rICAweDZGLCAweDRDLCAweDNDLCAweDM3LCAweDVCLCAweDM3LCAweDAzLCAw eDYxLCAweDdELCAweDI0LCAweDFDLCAweDk5LAotKyAgMHg0OCwgMHhBRiwgMHg4MiwgMHhGRSwg MHgzMiwgMHg0MSwgMHg5QiwgMHhCMiwgMHhEQiwgMHhFQSwgMHhFRCwgMHg3NiwKLSsgIDB4OEUs IDB4NkUsIDB4Q0EsIDB4N0UsIDB4NEUsIDB4MTQsIDB4QkEsIDB4MzAsIDB4ODQsIDB4MUMsIDB4 QjMsIDB4NjcsCi0rICAweEEzLCAweDI5LCAweDgwLCAweDcwLCAweDU0LCAweDY4LCAweDdELCAw eDQ5Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hB MjU2W10gPSB7Ci0rICAweDdFLCAweEEyLCAweDc3LCAweEZFLCAweEI4LCAweDU0LCAweDhBLCAw eEM3LCAweDdGLCAweDY0LCAweDU0LCAweDg5LAotKyAgMHhFNSwgMHg1MiwgMHgxNSwgMHg4RSwg MHg1MiwgMHg5NiwgMHg0RSwgMHhBNiwgMHg1OCwgMHg5MiwgMHgxQywgMHhERCwKLSsgIDB4RUEs IDB4QTIsIDB4MkQsIDB4NUMsIDB4RDEsIDB4NjIsIDB4MDAsIDB4NDksIDB4MDUsIDB4OTUsIDB4 NzMsIDB4Q0YsCi0rICAweDE2LCAweDc2LCAweDY4LCAweEY2LCAweEM2LCAweDVFLCAweDgwLCAw eEI4LCAweEI4LCAweDdCLCAweEM4LCAweDlCLAotKyAgMHhDNiwgMHg1MywgMHg4OCwgMHgyNiwg MHgyMCwgMHg4OCwgMHg3MywgMHhCNiwgMHgxMywgMHhCOCwgMHhGMCwgMHg0QiwKLSsgIDB4MDAs IDB4ODUsIDB4RjMsIDB4REQsIDB4MDcsIDB4NTAsIDB4RUIsIDB4MjAsIDB4QzQsIDB4MzgsIDB4 MEUsIDB4OTgsCi0rICAweEFELCAweDRFLCAweDQ5LCAweDJDLCAweEQ3LCAweDY1LCAweEE1LCAw eDE5LCAweDBFLCAweDU5LCAweDAxLCAweEVDLAotKyAgMHg3RSwgMHg3NSwgMHg4OSwgMHg2OSwg MHgyRSwgMHg2MywgMHg3NiwgMHg4NSwgMHg0NiwgMHg4RCwgMHhBMCwgMHg4QywKLSsgIDB4MzMs IDB4MUQsIDB4ODIsIDB4OEMsIDB4MDMsIDB4RUEsIDB4NjksIDB4ODgsIDB4MzUsIDB4QTEsIDB4 NDIsIDB4QkQsCi0rICAweDIxLCAweEVELCAweDhELCAweEJDLCAweEJDLCAweERCLCAweDMwLCAw eEZGLCAweDg2LCAweEYwLCAweDVCLCAweERDLAotKyAgMHhFMywgMHhFMiwgMHhFOCwgMHgwQSwg MHgwQSwgMHgyOSwgMHg5NCwgMHg4MAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIga2F0X1JTQV9YOTMxX1NIQTM4NFtdID0gewotKyAgMHg1QywgMHg3RCwgMHg5NiwgMHgzNSwg MHhFQywgMHg3RSwgMHgxMSwgMHgzOCwgMHhCQiwgMHg3QiwgMHhFQywgMHg3QiwKLSsgIDB4RjIs IDB4ODIsIDB4OEUsIDB4OTksIDB4QkQsIDB4RUYsIDB4RDgsIDB4QUUsIDB4RDcsIDB4MzksIDB4 MzcsIDB4Q0IsCi0rICAweEU2LCAweDRGLCAweDVFLCAweDBBLCAweDEzLCAweEU0LCAweDJFLCAw eDQwLCAweEI5LCAweEJFLCAweDJFLCAweEUzLAotKyAgMHhFRiwgMHg3OCwgMHg4MywgMHgxOCwg MHg0NCwgMHgzNSwgMHg5QywgMHg4RSwgMHhENywgMHg0QSwgMHg2MywgMHhGNiwKLSsgIDB4NTcs IDB4QzIsIDB4QjAsIDB4MDgsIDB4NTEsIDB4NzMsIDB4Q0YsIDB4Q0EsIDB4OTksIDB4NjYsIDB4 RUUsIDB4MzEsCi0rICAweEQ4LCAweDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3LCAweDdCLCAw eDQxLCAweDFFLCAweDZELCAweDhELCAweEYxLAotKyAgMHgzRSwgMHg5QywgMHgzNSwgMHg5NSwg MHg1OCwgMHhERCwgMHgyQiwgMHhENSwgMHhBMCwgMHg2MCwgMHg0MSwgMHg3OSwKLSsgIDB4MjQs IDB4MjIsIDB4RTQsIDB4QjcsIDB4QkYsIDB4NDcsIDB4NTMsIDB4RjYsIDB4MzQsIDB4RDUsIDB4 N0MsIDB4RkYsCi0rICAweDBFLCAweDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3LCAweEI5LCAw eERFLCAweEM1LCAweDEyLCAweDQ0LCAweDM1LAotKyAgMHhFRiwgMHgwMSwgMHhFNiwgMHg1RSwg MHgzOSwgMHgzMSwgMHgyRCwgMHg3MSwgMHhBNSwgMHhEQywgMHhDNiwgMHg2RCwKLSsgIDB4RTIs IDB4Q0QsIDB4ODUsIDB4REIsIDB4NzMsIDB4ODIsIDB4NjUsIDB4MjgKLSt9OwotKwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEE1MTJbXSA9IHsKLSsgIDB4QTYs IDB4NjUsIDB4QTIsIDB4NzcsIDB4NEYsIDB4QjMsIDB4ODYsIDB4Q0IsIDB4NjQsIDB4M0EsIDB4 QzEsIDB4NjMsCi0rICAweEZDLCAweEExLCAweEFBLCAweENCLCAweDlCLCAweDc5LCAweERELCAw eDRCLCAweEUxLCAweEQ5LCAweERBLCAweEFDLAotKyAgMHhFNywgMHg0NywgMHgwOSwgMHhCMiwg MHgxMSwgMHg0QiwgMHg4QSwgMHhBQSwgMHgwNSwgMHg5RSwgMHg3NywgMHhENywKLSsgIDB4M0Es IDB4QkQsIDB4NUUsIDB4NTMsIDB4MDksIDB4NEEsIDB4RTYsIDB4MEYsIDB4NUUsIDB4RjksIDB4 MTQsIDB4MjgsCi0rICAweEEwLCAweDk5LCAweDc0LCAweDY0LCAweDcwLCAweDRFLCAweEYyLCAw eEUzLCAweEZBLCAweEM3LCAweEY4LCAweEM1LAotKyAgMHg2RSwgMHgyQiwgMHg3OSwgMHg5Niwg MHgwRCwgMHgwQywgMHhDOCwgMHgxMCwgMHgzNCwgMHg1MywgMHhEMiwgMHhBRiwKLSsgIDB4MTcs IDB4MEUsIDB4RTAsIDB4QkYsIDB4NzksIDB4RjYsIDB4MDQsIDB4NzIsIDB4MTAsIDB4RTAsIDB4 RjYsIDB4RDAsCi0rICAweENFLCAweDhBLCAweDZGLCAweEExLCAweDk1LCAweDg5LCAweEJGLCAw eDU4LCAweDhGLCAweDQ2LCAweDVGLCAweDA5LAotKyAgMHg5RiwgMHgwOSwgMHhDQSwgMHg4NCwg MHgxNSwgMHg4NSwgMHhFMCwgMHhFRCwgMHgwNCwgMHgyRCwgMHhGQiwgMHg3QywKLSsgIDB4MzYs IDB4MzUsIDB4MjEsIDB4MzEsIDB4QzMsIDB4RkQsIDB4OTIsIDB4NDIsIDB4MTEsIDB4MzAsIDB4 NzEsIDB4MUIsCi0rICAweDYwLCAweDgzLCAweDE4LCAweDg4LCAweEEzLCAweEY1LCAweDU5LCAw eEMzCi0rfTsKLSsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9yc2EoKQotKwl7Ci0rCWludCByZXQg PSAwOwotKwlSU0EgKmtleTsKLSsJRVZQX1BLRVkgKnBrID0gTlVMTDsKLSsKLSsJaWYgKChrZXk9 UlNBX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCXNldHJzYWtleShrZXkpOwotKwlp ZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVWUF9Q S0VZX2Fzc2lnbl9SU0EocGssIGtleSk7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90 ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTEs IHNpemVvZihrYXRfUlNBX1NIQTEpLAotKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdf UEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTEgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYg KCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAt IDEsCi0rCQkJCWthdF9SU0FfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9TSEEyMjQpLAotKwkJCQlF VlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBMjI0 IFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0 KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTI1Niwg c2l6ZW9mKGthdF9SU0FfU0hBMjU2KSwKLSsJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZM QUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTI1NiBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwot KwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90 YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1NIQTM4NCksCi0r CQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBT SEEzODQgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hB NTEyLCBzaXplb2Yoa2F0X1JTQV9TSEE1MTIpLAotKwkJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9D VFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBNTEyIFBLQ1MjMSIpKQotKwkJZ290byBl cnI7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXpl b2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEExLCBzaXplb2Yoa2F0X1JTQV9Q U1NfU0hBMSksCi0rCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJ CQkiUlNBIFNIQTEgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0 dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0Ff UFNTX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTIyNCksCi0rCQkJCUVWUF9zaGEyMjQo KSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBMjI0IFBTUyIpKQotKwkJ Z290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBz aXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEyNTYsIHNpemVvZihrYXRf UlNBX1BTU19TSEEyNTYpLAotKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURf UFNTLAotKwkJCQkiUlNBIFNIQTI1NiBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNf cGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJ CQkJa2F0X1JTQV9QU1NfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMzg0KSwKLSsJCQkJ RVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEEzODQg UFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGss IGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NIQTUxMiwg c2l6ZW9mKGthdF9SU0FfUFNTX1NIQTUxMiksCi0rCQkJCUVWUF9zaGE1MTIoKSwgRVZQX01EX0NU WF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBNTEyIFBTUyIpKQotKwkJZ290byBlcnI7Ci0r Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yo a2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEExLCBzaXplb2Yoa2F0X1JTQV9YOTMx X1NIQTEpLAotKwkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQki UlNBIFNIQTEgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCS8qIE5COiBTSEEyMjQgbm90IHN1cHBv cnRlZCBpbiBYOS4zMSAqLwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0 X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hBMjU2LCBzaXpl b2Yoa2F0X1JTQV9YOTMxX1NIQTI1NiksCi0rCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZM QUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEEyNTYgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCWlm ICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ricykg LSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMzg0 KSwKLSsJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQkiUlNB IFNIQTM4NCBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0X1JTQV9YOTMx X1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEE1MTIpLAotKwkJCUVWUF9zaGE1MTIoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBNTEyIFg5MzEiKSkKLSsJCWdv dG8gZXJyOwotKwotKwotKwlyZXQgPSAxOwotKwotKwllcnI6Ci0rCWlmIChwaykKLSsJCUVWUF9Q S0VZX2ZyZWUocGspOwotKwllbHNlIGlmIChrZXkpCi0rCQlSU0FfZnJlZShrZXkpOwotKwlyZXR1 cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmIC8qIGRlZiBPUEVOU1NMX0ZJUFMgKi8KLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMuZmlwcyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCi0tLS0gb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkz MWcuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwyODEg QEAKLSsvKiBjcnlwdG8vcnNhL3JzYV9nZW4uYyAqLwotKy8qIENvcHlyaWdodCAoQykgMTk5NS0x OTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0 ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0rICogVGhlIGltcGxl bWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NM LgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24t Y29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh cmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFwcGx5IHRvIGFs bCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0r ICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNT TCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBj b3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2VwdCB0aGF0IHRoZSBo b2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqIAotKyAqIENvcHly aWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3Rp Y2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotKyAqIElmIHRoaXMg cGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4g YXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFy eSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdl IGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0 ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn ZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3 YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgot KyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJv dWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9n cmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNw ZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotKyAqICAgIHRoZSBh cHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tu b3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0 dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAKLSsgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotKyAqIEFOWSBF WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0r ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0rICogT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmli dXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0rICog ZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29k ZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0 cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5d Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNp bmNsdWRlIDx0aW1lLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK2V4dGVybiBpbnQgZmlwc19jaGVj a19yc2EoUlNBICpyc2EpOwotKyNlbmRpZgotKwotKy8qIFg5LjMxIFJTQSBrZXkgZGVyaXZhdGlv biBhbmQgZ2VuZXJhdGlvbiAqLwotKwotK2ludCBSU0FfWDkzMV9kZXJpdmVfZXgoUlNBICpyc2Es IEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsIEJJR05VTSAqcTIsCi0rCQkJY29u c3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLCBjb25zdCBCSUdOVU0gKlhwLAotKwkJ CWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0gKlhxMiwgY29uc3QgQklHTlVNICpYcSwK LSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKLSsJewotKwlCSUdOVU0gKnIwPU5V TEwsKnIxPU5VTEwsKnIyPU5VTEwsKnIzPU5VTEw7Ci0rCUJOX0NUWCAqY3R4PU5VTEwsKmN0eDI9 TlVMTDsKLSsKLSsJaWYgKCFyc2EpIAotKwkJZ290byBlcnI7Ci0rCi0rCWN0eCA9IEJOX0NUWF9u ZXcoKTsKLSsJaWYgKCFjdHgpIAotKwkJZ290byBlcnI7Ci0rCUJOX0NUWF9zdGFydChjdHgpOwot KwotKwlyMCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXIy ID0gQk5fQ1RYX2dldChjdHgpOwotKwlyMyA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJaWYgKHIz ID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFyc2EtPmUpCi0rCQl7Ci0rCQlyc2EtPmUg PSBCTl9kdXAoZSk7Ci0rCQlpZiAoIXJzYS0+ZSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsJZWxz ZQotKwkJZSA9IHJzYS0+ZTsKLSsKLSsJLyogSWYgbm90IGFsbCBwYXJhbWV0ZXJzIHByZXNlbnQg b25seSBjYWxjdWxhdGUgd2hhdCB3ZSBjYW4uCi0rCSAqIFRoaXMgYWxsb3dzIHRlc3QgcHJvZ3Jh bXMgdG8gb3V0cHV0IHNlbGVjdGl2ZSBwYXJhbWV0ZXJzLgotKwkgKi8KLSsKLSsJaWYgKFhwICYm ICFyc2EtPnApCi0rCQl7Ci0rCQlyc2EtPnAgPSBCTl9uZXcoKTsKLSsJCWlmICghcnNhLT5wKQot KwkJCWdvdG8gZXJyOwotKwotKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnAs IHAxLCBwMiwKLSsJCQkJCVhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikpCi0rCQkJZ290byBlcnI7 Ci0rCQl9Ci0rCi0rCWlmIChYcSAmJiAhcnNhLT5xKQotKwkJewotKwkJcnNhLT5xID0gQk5fbmV3 KCk7Ci0rCQlpZiAoIXJzYS0+cSkKLSsJCQlnb3RvIGVycjsKLSsJCWlmICghQk5fWDkzMV9kZXJp dmVfcHJpbWVfZXgocnNhLT5xLCBxMSwgcTIsCi0rCQkJCQlYcSwgWHExLCBYcTIsIGUsIGN0eCwg Y2IpKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQot KwkJewotKwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKLSsJCXJldHVy biAyOwotKwkJfQotKwotKwkvKiBTaW5jZSBib3RoIHByaW1lcyBhcmUgc2V0IHdlIGNhbiBub3cg Y2FsY3VsYXRlIGFsbCByZW1haW5pbmcgCi0rCSAqIGNvbXBvbmVudHMuCi0rCSAqLwotKwotKwkv KiBjYWxjdWxhdGUgbiAqLwotKwlyc2EtPm49Qk5fbmV3KCk7Ci0rCWlmIChyc2EtPm4gPT0gTlVM TCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUJOX211bChyc2EtPm4scnNhLT5wLHJzYS0+cSxjdHgp KQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIGNhbGN1bGF0ZSBkICovCi0rCWlmICghQk5fc3ViKHIx LHJzYS0+cCxCTl92YWx1ZV9vbmUoKSkpCi0rCQlnb3RvIGVycjsJLyogcC0xICovCi0rCWlmICgh Qk5fc3ViKHIyLHJzYS0+cSxCTl92YWx1ZV9vbmUoKSkpCi0rCQlnb3RvIGVycjsJLyogcS0xICov Ci0rCWlmICghQk5fbXVsKHIwLHIxLHIyLGN0eCkpCi0rCQlnb3RvIGVycjsJLyogKHAtMSkocS0x KSAqLwotKwotKwlpZiAoIUJOX2djZChyMywgcjEsIHIyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0r Ci0rCWlmICghQk5fZGl2KHIwLCBOVUxMLCByMCwgcjMsIGN0eCkpCi0rCQlnb3RvIGVycjsJLyog TENNKChwLTEpKHEtMSkpICovCi0rCi0rCWN0eDIgPSBCTl9DVFhfbmV3KCk7Ci0rCWlmICghY3R4 MikKLSsJCWdvdG8gZXJyOwotKwotKwlyc2EtPmQ9Qk5fbW9kX2ludmVyc2UoTlVMTCxyc2EtPmUs cjAsY3R4Mik7CS8qIGQgKi8KLSsJaWYgKHJzYS0+ZCA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0r Ci0rCS8qIGNhbGN1bGF0ZSBkIG1vZCAocC0xKSAqLwotKwlyc2EtPmRtcDE9Qk5fbmV3KCk7Ci0r CWlmIChyc2EtPmRtcDEgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUJOX21vZChyc2Et PmRtcDEscnNhLT5kLHIxLGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRlIGQg bW9kIChxLTEpICovCi0rCXJzYS0+ZG1xMT1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+ZG1xMSA9PSBO VUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICghQk5fbW9kKHJzYS0+ZG1xMSxyc2EtPmQscjIsY3R4 KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgaW52ZXJzZSBvZiBxIG1vZCBwICov Ci0rCXJzYS0+aXFtcD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+cSxyc2EtPnAsY3R4Mik7Ci0r Ci0rCWVycjoKLSsJaWYgKGN0eCkKLSsJCXsKLSsJCUJOX0NUWF9lbmQoY3R4KTsKLSsJCUJOX0NU WF9mcmVlKGN0eCk7Ci0rCQl9Ci0rCWlmIChjdHgyKQotKwkJQk5fQ1RYX2ZyZWUoY3R4Mik7Ci0r CS8qIElmIHRoaXMgaXMgc2V0IGFsbCBjYWxscyBzdWNjZXNzZnVsICovCi0rCWlmIChyc2EgJiYg cnNhLT5pcW1wICE9IE5VTEwpCi0rCQlyZXR1cm4gMTsKLSsKLSsJcmV0dXJuIDA7Ci0rCi0rCX0K LSsKLStpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgY29u c3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpCi0rCXsKLSsJaW50IG9rID0gMDsKLSsJQklHTlVN ICpYcCA9IE5VTEwsICpYcSA9IE5VTEw7Ci0rCUJOX0NUWCAqY3R4ID0gTlVMTDsKLSsKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxV U19CSVRTKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVf S0VZX0VYLEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQot KwotKwlpZiAoYml0cyAmIDB4ZmYpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9SU0Ff WDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSCk7Ci0rCSAgICBy ZXR1cm4gMDsKLSsJICAgIH0KLSsKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAg IHsKLSsJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1Jf RklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rI2VuZGlm Ci0rCi0rCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSsJaWYgKCFjdHgpCi0rCQlnb3RvIGVycm9yOwot KwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsJWHAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCVhxID0g Qk5fQ1RYX2dldChjdHgpOwotKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfWHBxKFhwLCBYcSwgYml0 cywgY3R4KSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXJzYS0+cCA9IEJOX25ldygpOwotKwlyc2Et PnEgPSBCTl9uZXcoKTsKLSsJaWYgKCFyc2EtPnAgfHwgIXJzYS0+cSkKLSsJCWdvdG8gZXJyb3I7 Ci0rCi0rCS8qIEdlbmVyYXRlIHR3byBwcmltZXMgZnJvbSBYcCwgWHEgKi8KLSsKLSsJaWYgKCFC Tl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg WHAsCi0rCQkJCQllLCBjdHgsIGNiKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghQk5fWDkz MV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnEsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhxLAot KwkJCQkJZSwgY3R4LCBjYikpCi0rCQlnb3RvIGVycm9yOwotKwotKwkvKiBTaW5jZSByc2EtPnAg YW5kIHJzYS0+cSBhcmUgdmFsaWQgdGhpcyBjYWxsIHdpbGwganVzdCBkZXJpdmUKLSsJICogcmVt YWluaW5nIFJTQSBjb21wb25lbnRzLgotKwkgKi8KLSsKLSsJaWYgKCFSU0FfWDkzMV9kZXJpdmVf ZXgocnNhLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotKwkJCQlOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBlLCBjYikpCi0rCQlnb3RvIGVycm9yOwotKwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsJaWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCi0rCSAgICBnb3RvIGVycm9yOwot KyNlbmRpZgotKwotKwlvayA9IDE7Ci0rCi0rCWVycm9yOgotKwlpZiAoY3R4KQotKwkJewotKwkJ Qk5fQ1RYX2VuZChjdHgpOwotKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKLSsJCX0KLSsKLSsJaWYgKG9r KQotKwkJcmV0dXJuIDE7Ci0rCi0rCXJldHVybiAwOwotKwotKwl9Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3NoYTFfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9maXBzL2ZpcHNfc2hhMV9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL2ZpcHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMuZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfc2hh MV9zZWxmdGVzdC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtMCww ICsxLDk5IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICog ICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu Ci0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXZw Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot K3N0YXRpYyBjaGFyIHRlc3RbXVs2MF09Ci0rICAgIHsKLSsgICAgIiIsCi0rICAgICJhYmMiLAot KyAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5v cG5vcHEiCi0rICAgIH07Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmV0W11bU0hB X0RJR0VTVF9MRU5HVEhdPQotKyAgICB7Ci0rICAgIHsgMHhkYSwweDM5LDB4YTMsMHhlZSwweDVl LDB4NmIsMHg0YiwweDBkLDB4MzIsMHg1NSwKLSsgICAgICAweGJmLDB4ZWYsMHg5NSwweDYwLDB4 MTgsMHg5MCwweGFmLDB4ZDgsMHgwNywweDA5IH0sCi0rICAgIHsgMHhhOSwweDk5LDB4M2UsMHgz NiwweDQ3LDB4MDYsMHg4MSwweDZhLDB4YmEsMHgzZSwKLSsgICAgICAweDI1LDB4NzEsMHg3OCww eDUwLDB4YzIsMHg2YywweDljLDB4ZDAsMHhkOCwweDlkIH0sCi0rICAgIHsgMHg4NCwweDk4LDB4 M2UsMHg0NCwweDFjLDB4M2IsMHhkMiwweDZlLDB4YmEsMHhhZSwKLSsgICAgICAweDRhLDB4YTEs MHhmOSwweDUxLDB4MjksMHhlNSwweGU1LDB4NDYsMHg3MCwweGYxIH0sCi0rICAgIH07Ci0rCi0r dm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSgpCi0rICAgIHsKLSsgICAgdGVzdFsyXVswXSsrOwotKyAg ICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMSgpCi0rICAgIHsKLSsgICAgaW50IG47Ci0r Ci0rICAgIGZvcihuPTAgOyBuPHNpemVvZih0ZXN0KS9zaXplb2YodGVzdFswXSkgOyArK24pCi0r CXsKLSsJdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07Ci0rCi0rCUVWUF9EaWdl c3QodGVzdFtuXSxzdHJsZW4odGVzdFtuXSksbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpOwot KwlpZihtZW1jbXAobWQscmV0W25dLHNpemVvZiBtZCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAg ICByZXR1cm4gMDsKLSsJICAgIH0KLSsJfQotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKyNl bmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25l X3NoYTEuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9z aGExLmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hh MS5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jCTIwMTAtMDYtMDQgMTI6 MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDE3MyBAQAotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVA b3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAq ICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up Ci0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K LSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4K LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0r Ci0rI2lmbmRlZiBGSVBTQ0FOSVNURVJfTwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpIHsg cmV0dXJuIDA7IH0KLSt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2soKSB7fQotK3ZvaWQgT1BFTlNT TF9jbGVhbnNlKHZvaWQgKnAsc2l6ZV90IGxlbikge30KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCi0rc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQV9DVFggKm1kX2N0eCxTSEFf Q1RYICpvX2N0eCwKLSsJCSAgICAgIGNvbnN0IGNoYXIgKmtleSkKLSsgICAgewotKyAgICBzaXpl X3QgbGVuPXN0cmxlbihrZXkpOwotKyAgICBpbnQgaTsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlt ZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBhZFtITUFDX01BWF9N RF9DQkxPQ0tdOwotKwotKyAgICBpZiAobGVuID4gU0hBX0NCTE9DSykKLSsJewotKwlTSEExX0lu aXQobWRfY3R4KTsKLSsJU0hBMV9VcGRhdGUobWRfY3R4LGtleSxsZW4pOwotKwlTSEExX0ZpbmFs KGtleW1kLG1kX2N0eCk7Ci0rCWxlbj0yMDsKLSsJfQotKyAgICBlbHNlCi0rCW1lbWNweShrZXlt ZCxrZXksbGVuKTsKLSsgICAgbWVtc2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhfTURfQ0JM T0NLLWxlbik7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsr KQotKwlwYWRbaV09MHgzNl5rZXltZFtpXTsKLSsgICAgU0hBMV9Jbml0KG1kX2N0eCk7Ci0rICAg IFNIQTFfVXBkYXRlKG1kX2N0eCxwYWQsU0hBX0NCTE9DSyk7Ci0rCi0rICAgIGZvcihpPTAgOyBp IDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQotKwlwYWRbaV09MHg1Y15rZXltZFtpXTsKLSsg ICAgU0hBMV9Jbml0KG9fY3R4KTsKLSsgICAgU0hBMV9VcGRhdGUob19jdHgscGFkLFNIQV9DQkxP Q0spOwotKyAgICB9Ci0rCi0rc3RhdGljIHZvaWQgaG1hY19maW5hbCh1bnNpZ25lZCBjaGFyICpt ZCxTSEFfQ1RYICptZF9jdHgsU0hBX0NUWCAqb19jdHgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQg Y2hhciBidWZbMjBdOwotKwotKyAgICBTSEExX0ZpbmFsKGJ1ZixtZF9jdHgpOwotKyAgICBTSEEx X1VwZGF0ZShvX2N0eCxidWYsc2l6ZW9mIGJ1Zik7Ci0rICAgIFNIQTFfRmluYWwobWQsb19jdHgp OwotKyAgICB9Ci0rCi0rI2VuZGlmCi0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3Yp Ci0rICAgIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIHN0YXRpYyBjaGFyIGtleVtdPSJl dGFvbnJpc2hkbGN1cGZtIjsKLSsgICAgaW50IG4sYmluYXJ5PTA7Ci0rCi0rICAgIGlmKGFyZ2Mg PCAyKQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlswXSk7Ci0r CWV4aXQoMSk7Ci0rCX0KLSsKLSsgICAgbj0xOwotKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCIt YmluYXJ5IikpCi0rCXsKLSsJbisrOwotKwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkgZmluZ2Vy cHJpbnQuLi4gKi8KLSsJfQotKwotKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKLSsJewotKwlG SUxFICpmPWZvcGVuKGFyZ3Zbbl0sInJiIik7Ci0rCVNIQV9DVFggbWRfY3R4LG9fY3R4OwotKwl1 bnNpZ25lZCBjaGFyIG1kWzIwXTsKLSsJaW50IGk7Ci0rCi0rCWlmKCFmKQotKwkgICAgewotKwkg ICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkgICAgZXhpdCgyKTsKLSsJICAgIH0KLSsKLSsJaG1hY19p bml0KCZtZF9jdHgsJm9fY3R4LGtleSk7Ci0rCWZvciggOyA7ICkKLSsJICAgIHsKLSsJICAgIGNo YXIgYnVmWzEwMjRdOwotKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6ZW9mIGJ1ZixmKTsK LSsKLSsJICAgIGlmKGwgPT0gMCkKLSsJCXsKLSsJCWlmKGZlcnJvcihmKSkKLSsJCSAgICB7Ci0r CQkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkJICAgIGV4aXQoMyk7Ci0rCQkgICAgfQotKwkJZWxz ZQotKwkJICAgIGJyZWFrOwotKwkJfQotKwkgICAgU0hBMV9VcGRhdGUoJm1kX2N0eCxidWYsbCk7 Ci0rCSAgICB9Ci0rCWhtYWNfZmluYWwobWQsJm1kX2N0eCwmb19jdHgpOwotKwotKwlpZiAoYmlu YXJ5KQotKwkgICAgewotKwkgICAgZndyaXRlKG1kLDIwLDEsc3Rkb3V0KTsKLSsJICAgIGJyZWFr OwkvKiAuLi4gZm9yIHNpbmdsZSghKSBmaWxlICovCi0rCSAgICB9Ci0rCi0rCXByaW50ZigiSE1B Qy1TSEExKCVzKT0gIixhcmd2W25dKTsKLSsJZm9yKGk9MCA7IGkgPCAyMCA7ICsraSkKLSsJICAg IHByaW50ZigiJTAyeCIsbWRbaV0pOwotKwlwcmludGYoIlxuIik7Ci0rCX0KLSsjZW5kaWYKLSsg ICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMv Zmlwc190ZXN0X3N1aXRlLmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9maXBzX3Rl c3Rfc3VpdGUuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMJMjAxMC0wNi0wNCAx MjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsNTg4IEBACi0rLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0rICoKLSsgKgotKyAqIFRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBhcyBh IHRlc3QgZHJpdmVyIGZvciB0aGUgRklQUy0xNDAgdGVzdGluZwotKyAqIGxhYiBwZXJmb3JtaW5n IEZJUFMtMTQwIHZhbGlkYXRpb24uICBJdCBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUKLSsg KiBPcGVuU1NMIGxpYnJhcnkgaXRvIHBlcmZvcm0gYSB2YXJpZXR5IG9mIGNvbW1vbiBjcnlwdG9n cmFwaGljCi0rICogZnVuY3Rpb25zLiAgQSBwb3dlci11cCBzZWxmIHRlc3QgaXMgZGVtb25zdHJh dGVkIGJ5IGRlbGliZXJhdGVseQotKyAqIHBvaW50aW5nIHRvIGFuIGludmFsaWQgZXhlY3V0YWJs ZSBoYXNoCi0rICoKLSsgKiBDb250cmlidXRlZCBieSBTdGV2ZSBNYXJxdWVzcy4KLSsgKgotKyAq LwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8 Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2RoLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotKwotKwotKyNpZm5kZWYg T1BFTlNTTF9GSVBTCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSsgICAgewot KyAgICBwcmludGYoIk5vIEZJUFMgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSsgICAg fQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBz X3V0bC5oIgotKwotKy8qIEFFUzogZW5jcnlwdCBhbmQgZGVjcnlwdCBrbm93biBwbGFpbnRleHQs IHZlcmlmeSByZXN1bHQgbWF0Y2hlcyBvcmlnaW5hbCBwbGFpbnRleHQKLSsqLwotK3N0YXRpYyBp bnQgRklQU19hZXNfdGVzdCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBj aGFyIHBsdG1wWzE2XTsKLSsJdW5zaWduZWQgY2hhciBjaXRtcFsxNl07Ci0rCXVuc2lnbmVkIGNo YXIga2V5WzE2XSA9IHsgMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTZ9Owot Kwl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl0gPSAiZXRhb25yaXNoZGxjdSI7Ci0rCUVWUF9D SVBIRVJfQ1RYIGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsJaWYgKEVWUF9D aXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMSkg PD0gMCkKLSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQs IDE2KTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5V TEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgs IHBsdG1wLCBjaXRtcCwgMTYpOwotKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDE2KSkK LSsJCWdvdG8gZXJyOwotKwlyZXQgPSAxOwotKwllcnI6Ci0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFu dXAoJmN0eCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStzdGF0aWMgaW50IEZJUFNfZGVzM190 ZXN0KHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgcGx0bXBbOF07 Ci0rCXVuc2lnbmVkIGNoYXIgY2l0bXBbOF07Ci0rICAgIAl1bnNpZ25lZCBjaGFyIGtleVtdID0g eyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwKLSsJCSAgICAg ICAgICAgICAgMTksMjAsMjEsMjIsMjMsMjR9OwotKyAgICAJdW5zaWduZWQgY2hhciBwbGFpbnRl eHRbXSA9IHsgJ2UnLCAndCcsICdhJywgJ28nLCAnbicsICdyJywgJ2knLCAncycgfTsKLSsJRVZQ X0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwlpZiAoRVZQ X0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEwsIGtleSwgTlVMTCwg MSkgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRl eHQsIDgpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigp LE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZj dHgsIHBsdG1wLCBjaXRtcCwgOCk7Ci0rCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgOCkp Ci0rCQlnb3RvIGVycjsKLSsJcmV0ID0gMTsKLSsJZXJyOgotKwlFVlBfQ0lQSEVSX0NUWF9jbGVh bnVwKCZjdHgpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rLyoKLSsgKiBEU0E6IGdlbmVyYXRl IGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCi0rICovCi0rc3RhdGljIGlu dCBGSVBTX2RzYV90ZXN0KGludCBiYWQpCi0rICAgIHsKLSsgICAgRFNBICpkc2EgPSBOVUxMOwot KyAgICBFVlBfUEtFWSBwazsKLSsgICAgdW5zaWduZWQgY2hhciBkZ3N0W10gPSAiZXRhb25yaXNo ZGxjIjsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbNjBdOwotKyAgICB1bnNpZ25lZCBpbnQgc2xl bjsKLSsgICAgaW50IHIgPSAwOwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rCi0rICAgIEVSUl9j bGVhcl9lcnJvcigpOwotKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKyAgICBkc2EgPSBE U0FfbmV3KCk7Ci0rICAgIGlmICghZHNhKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFEU0FfZ2Vu ZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKLSsJ Z290byBlbmQ7Ci0rICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQotKwlnb3RvIGVuZDsK LSsgICAgaWYgKGJhZCkKLSsJICAgIEJOX2FkZF93b3JkKGRzYS0+cHViX2tleSwgMSk7Ci0rCi0r ICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7Ci0rICAgIHBrLnBrZXkuZHNhID0gZHNhOwotKwot KyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rCWdv dG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdz dCkgLSAxKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVm LCAmc2xlbiwgJnBrKSkKLSsJZ290byBlbmQ7Ci0rCi0rICAgIGlmICghRVZQX1ZlcmlmeUluaXRf ZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBf VmVyaWZ5VXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKLSsJZ290byBlbmQ7 Ci0rICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgJnBrKTsKLSsgICAg ZW5kOgotKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKyAgICBpZiAoZHNhKQotKyAg CSAgRFNBX2ZyZWUoZHNhKTsKLSsgICAgaWYgKHIgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJl dHVybiAxOwotKyAgICB9Ci0rCi0rLyoKLSsgKiBSU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24s IHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCi0rICovCi0rc3RhdGljIGludCBGSVBTX3JzYV90ZXN0 KGludCBiYWQpCi0rICAgIHsKLSsgICAgUlNBICprZXk7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaW5w dXRfcHRleHRbXSA9ICJldGFvbnJpc2hkbGMiOwotKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZd OwotKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgQklHTlVNICpibjsKLSsgICAgRVZQX01E X0NUWCBtY3R4OwotKyAgICBFVlBfUEtFWSBwazsKLSsgICAgaW50IHIgPSAwOwotKwotKyAgICBF UlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsgICAga2V5 ID0gUlNBX25ldygpOwotKyAgICBibiA9IEJOX25ldygpOwotKyAgICBpZiAoIWtleSB8fCAhYm4p Ci0rCXJldHVybiAwOwotKyAgICBCTl9zZXRfd29yZChibiwgNjU1MzcpOwotKyAgICBpZiAoIVJT QV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQotKwlyZXR1cm4gMDsKLSsgICAg Qk5fZnJlZShibik7Ci0rICAgIGlmIChiYWQpCi0rCSAgICBCTl9hZGRfd29yZChrZXktPm4sIDEp OwotKwotKyAgICBway50eXBlID0gRVZQX1BLRVlfUlNBOwotKyAgICBway5wa2V5LnJzYSA9IGtl eTsKLSsKLSsgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwp KQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRl eHQsIHNpemVvZihpbnB1dF9wdGV4dCkgLSAxKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQ X1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKLSsJZ290byBlbmQ7Ci0rCi0rICAg IGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQotKwlnb3Rv IGVuZDsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6 ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgciA9IEVWUF9WZXJpZnlG aW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOwotKyAgICBlbmQ6Ci0rICAgIEVWUF9NRF9DVFhf Y2xlYW51cCgmbWN0eCk7Ci0rICAgIGlmIChrZXkpCi0rICAJICAgIFJTQV9mcmVlKGtleSk7Ci0r ICAgIGlmIChyICE9IDEpCi0rCXJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwot Ky8qIFNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJl IHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50 IEZJUFNfc2hhMV90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEFf RElHRVNUX0xFTkdUSF0gPQotKyAgICAgICAgeyAweDExLCAweGYxLCAweDlhLCAweDNhLCAweGVj LCAweDFhLCAweDFlLCAweDhlLCAweDY1LCAweGQ0LCAweDlhLCAweDM4LCAweDBjLCAweDhiLCAw eDFlLCAweDJjLCAweGU4LCAweGIzLCAweGM1LCAweDE4IH07Ci0rICAgIHVuc2lnbmVkIGNoYXIg c3RyW10gPSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VT VF9MRU5HVEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFFVlBfRGln ZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpKSByZXR1 cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBTSEEyNTY6IGdlbmVyYXRl IGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJl Y29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfc2hhMjU2X3Rlc3Qo KQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTI1Nl9ESUdFU1RfTEVOR1RI XSA9Ci0rCXsweGY1LCAweDUzLCAweGNkLCAweGI4LCAweGNmLCAweDEsIDB4ZWUsIDB4MTcsIDB4 OWIsIDB4OTMsIDB4YzksIDB4NjgsIDB4YzAsIDB4ZWEsIDB4NDAsIDB4OTEsCi0rCSAweDYsIDB4 ZWMsIDB4OGUsIDB4MTEsIDB4OTYsIDB4YzgsIDB4NWQsIDB4MWMsIDB4YWYsIDB4NjQsIDB4MjIs IDB4ZTYsIDB4NTAsIDB4NGYsIDB4NDcsIDB4NTd9OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0cltd ID0gImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1Rf TEVOR1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2Vz dChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5VTEwpKSByZXR1 cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBTSEE1MTI6IGdlbmVyYXRl IGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJl Y29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfc2hhNTEyX3Rlc3Qo KQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTUxMl9ESUdFU1RfTEVOR1RI XSA9Ci0rCXsweDk5LCAweGM5LCAweGU5LCAweDViLCAweDg4LCAweGQ0LCAweDc4LCAweDg4LCAw eGRmLCAweDg4LCAweDVmLCAweDk0LCAweDcxLCAweDY0LCAweDI4LCAweGNhLAotKwkgMHgxNiwg MHgxZiwgMHgzZCwgMHhmNCwgMHgxZiwgMHhmMywgMHgwZiwgMHhjNSwgMHgwMywgMHg5OSwgMHhi MiwgMHhkMCwgMHhlNywgMHgwYiwgMHg5NCwgMHg0YSwKLSsJIDB4NDUsIDB4ZDIsIDB4NmMsIDB4 NGYsIDB4MjAsIDB4MDYsIDB4ZWYsIDB4NzEsIDB4YTksIDB4MjUsIDB4N2YsIDB4MjQsIDB4YjEs IDB4ZDksIDB4NDAsIDB4MjIsCi0rCSAweDQ5LCAweDU0LCAweDEwLCAweGMyLCAweDIyLCAweDlk LCAweDI3LCAweGZlLCAweGJkLCAweGQ2LCAweGQ2LCAweGViLCAweDJkLCAweDQyLCAweDFkLCAw eGEzfTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKLSsKLSsgICAg dW5zaWduZWQgY2hhciBtZFtTSEE1MTJfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIEVSUl9jbGVh cl9lcnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwg TlVMTCwgRVZQX3NoYTUxMigpLCBOVUxMKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAobWQs ZGlnZXN0LHNpemVvZihtZCkpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwot KyAgICB9Ci0rCi0rLyogSE1BQy1TSEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2 YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAot KyovCi0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhMV90ZXN0KCkKLSsgICAgewotKyAgICB1bnNp Z25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10g PSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0la RV0gPQotKwl7MHg3MywgMHhmNywgMHhhMCwgMHg0OCwgMHhmOCwgMHg5NCwgMHhlZCwgMHhkZCwg MHgwYSwgMHhlYSwgMHhlYSwgMHg1NiwgMHgxYiwgMHg2MSwgMHgyZSwgMHg3MCwKLSsJIDB4YjIs IDB4ZmIsIDB4ZWMsIDB4YzZ9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01E X1NJWkVdOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJy b3IoKTsKLSsgICAgaWYgKCFITUFDKEVWUF9zaGExKCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6 ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGth dmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0K LSsKLSsvKiBITUFDLVNIQTIyNDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUg YW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwot K3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTIyNF90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25l ZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAi U2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0g PQotKwl7MHg3NSwgMHg1OCwgMHhkNSwgMHhiZCwgMHg1NSwgMHg2ZCwgMHg4NywgMHgwZiwgMHg3 NSwgMHhmZiwgMHhiZSwgMHgxYywgMHhiMiwgMHhmMCwgMHgyMCwgMHgzNSwKLSsJIDB4ZTUsIDB4 NjIsIDB4NDksIDB4YjYsIDB4OTQsIDB4YjksIDB4ZmMsIDB4NjUsIDB4MzQsIDB4MzMsIDB4M2Es IDB4MTl9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAg ICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAg aWYgKCFITUFDKEVWUF9zaGEyMjQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEs b3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVu KSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIEhN QUMtU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFy ZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGlu dCBGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5 W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4 dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweGU5 LCAweDE3LCAweGMxLCAweDdiLCAweDRjLCAweDZiLCAweDc3LCAweGRhLCAweGQyLCAweDMwLCAw eDM2LCAweDAyLCAweGY1LCAweDcyLCAweDMzLCAweDg3LAotKwkgMHg5ZiwgMHhjNiwgMHg2ZSwg MHg3YiwgMHg3ZSwgMHhhOCwgMHhlYSwgMHhhYSwgMHg5ZiwgMHhiYSwgMHhlZSwgMHg1MSwgMHhm ZiwgMHhkYSwgMHgyNCwgMHhmNH07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhf TURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9l cnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTI1NigpLGtleSxzaXplb2Yoa2V5KS0xLGl2 LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91 dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAg ICB9Ci0rCi0rLyogSE1BQy1TSEEzODQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZh bHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0r Ki8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEzODRfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5z aWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltd ID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJ WkVdID0KLSsJezB4YjIsIDB4OWQsIDB4NDAsIDB4NTgsIDB4MzIsIDB4YzQsIDB4ZTMsIDB4MzEs IDB4YjYsIDB4NjMsIDB4MDgsIDB4MjYsIDB4OTksIDB4ZWYsIDB4M2IsIDB4MTAsCi0rCSAweGUy LCAweGRmLCAweGY4LCAweGZmLCAweGM2LCAweGUxLCAweDAzLCAweDI5LCAweDgxLCAweDJhLCAw eDFiLCAweGFjLCAweGIwLCAweDA3LCAweDM5LCAweDA4LAotKwkgMHhmMywgMHg5MSwgMHgzNSwg MHgxMSwgMHg3NiwgMHhkNiwgMHg0YywgMHgyMCwgMHhmYiwgMHg0ZCwgMHhjMywgMHhmMywgMHhi OCwgMHg5YiwgMHg4OCwgMHgxY307Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhf TURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9l cnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTM4NCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2 LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91 dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAg ICB9Ci0rCi0rLyogSE1BQy1TSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZh bHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0r Ki8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGE1MTJfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5z aWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltd ID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJ WkVdID0KLSsJezB4Y2QsIDB4M2UsIDB4YjksIDB4NTEsIDB4YjgsIDB4YmMsIDB4N2YsIDB4OWEs IDB4MjMsIDB4YWYsIDB4ZjMsIDB4NzcsIDB4NTksIDB4ODUsIDB4YTksIDB4ZTYsCi0rCSAweGY3 LCAweGQxLCAweDUxLCAweDk2LCAweDE3LCAweGUwLCAweDkyLCAweGQ4LCAweGE2LCAweDNiLCAw eGMxLCAweGFkLCAweDdlLCAweDI0LCAweGNhLCAweGIxLAotKwkgMHhkNywgMHg3OSwgMHgwYSwg MHhhNSwgMHhlYSwgMHgyYywgMHgwMiwgMHg1OCwgMHgwYiwgMHhhNiwgMHg1MiwgMHg2YiwgMHg2 MSwgMHg3ZiwgMHhlYiwgMHg5YywKLSsJIDB4NDcsIDB4ODYsIDB4NWQsIDB4NzQsIDB4MmIsIDB4 ODgsIDB4ZGYsIDB4ZWUsIDB4NDYsIDB4NjksIDB4OTYsIDB4M2QsIDB4YTYsIDB4ZDksIDB4MmEs IDB4NTN9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAg ICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAg aWYgKCFITUFDKEVWUF9zaGE1MTIoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEs b3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVu KSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKwotKy8q IERIOiBnZW5lcmF0ZSBzaGFyZWQgcGFyYW1ldGVycwotKyovCi0rc3RhdGljIGludCBkaF90ZXN0 KCkKLSsgICAgewotKyAgICBESCAqZGg7Ci0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBk aCA9IEZJUFNfZGhfbmV3KCk7Ci0rICAgIGlmICghZGgpCi0rCXJldHVybiAwOwotKyAgICBpZiAo IURIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZGgsIDEwMjQsIDIsIE5VTEwpKQotKwlyZXR1cm4g MDsKLSsgICAgRklQU19kaF9mcmVlKGRoKTsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsv KiBaZXJvaXplCi0rKi8KLStzdGF0aWMgaW50IFplcm9pemUoKQotKyAgICB7Ci0rICAgIFJTQSAq a2V5OwotKyAgICBCSUdOVU0gKmJuOwotKyAgICB1bnNpZ25lZCBjaGFyIHVzZXJrZXlbMTZdID0g Ci0rCXsgMHg0OCwgMHg1MCwgMHhmMCwgMHhhMywgMHgzYSwgMHhlZCwgMHhkMywgMHhhZiwgMHg2 ZSwgMHg0NywgMHg3ZiwgMHg4MywgMHgwMiwgMHhiMSwgMHgwOSwgMHg2OCB9OwotKyAgICBpbnQg aSwgbjsKLSsKLSsgICAga2V5ID0gRklQU19yc2FfbmV3KCk7Ci0rICAgIGJuID0gQk5fbmV3KCk7 Ci0rICAgIGlmICgha2V5IHx8ICFibikKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX3NldF93b3JkKGJu LCA2NTUzNyk7Ci0rICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVM TCkpCi0rCXJldHVybiAwOwotKyAgICBCTl9mcmVlKGJuKTsKLSsgICAgCi0rICAgIG4gPSBCTl9u dW1fYnl0ZXMoa2V5LT5kKTsKLSsgICAgcHJpbnRmKCIgR2VuZXJhdGVkICVkIGJ5dGUgUlNBIHBy aXZhdGUga2V5XG4iLCBuKTsKLSsgICAgcHJpbnRmKCJcdEJOIGtleSBiZWZvcmUgb3ZlcndyaXRp bmc6XG4iKTsKLSsgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOwotKyAgICBCTl9yYW5k KGtleS0+ZCxuKjgsLTEsMCk7Ci0rICAgIHByaW50ZigiXHRCTiBrZXkgYWZ0ZXIgb3ZlcndyaXRp bmc6XG4iKTsKLSsgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOwotKwotKyAgICBwcmlu dGYoIlx0Y2hhciBidWZmZXIga2V5IGJlZm9yZSBvdmVyd3JpdGluZzogXG5cdFx0Iik7Ci0rICAg IGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vy a2V5W2ldKTsKLSsgICAgICAgIHByaW50ZigiXG4iKTsKLSsgICAgUkFORF9ieXRlcyh1c2Vya2V5 LCBzaXplb2YgdXNlcmtleSk7Ci0rICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYWZ0ZXIg b3ZlcndyaXRpbmc6IFxuXHRcdCIpOwotKyAgICBmb3IoaSA9IDA7IGkgPCBzaXplb2YodXNlcmtl eSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7Ci0rICAgICAgICBwcmludGYoIlxu Iik7Ci0rCi0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rc3RhdGljIGludCBFcnJvcjsKLStj b25zdCBjaGFyICogRmFpbChjb25zdCBjaGFyICptc2cpCi0rICAgIHsKLSsgICAgZG9fcHJpbnRf ZXJyb3JzKCk7Ci0rICAgIEVycm9yKys7Ci0rICAgIHJldHVybiBtc2c7IAotKyAgICB9Ci0rCi0r aW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsKLSsgICAgaW50IGRvX2Nv cnJ1cHRfcnNhX2tleWdlbiA9IDAsIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDA7Ci0rICAgIGlu dCBiYWRfcnNhID0gMCwgYmFkX2RzYSA9IDA7Ci0rICAgIGludCBkb19ybmdfc3RpY2sgPSAwOwot KyAgICBpbnQgbm9fZXhpdCA9IDA7Ci0rCi0rICAgIHByaW50ZigiXHRGSVBTLW1vZGUgdGVzdCBh cHBsaWNhdGlvblxuXG4iKTsKLSsKLSsgICAgLyogTG9hZCBlbnRyb3B5IGZyb20gZXh0ZXJuYWwg ZmlsZSwgaWYgYW55ICovCi0rICAgIFJBTkRfbG9hZF9maWxlKCIucm5kIiwgMTAyNCk7Ci0rCi0r ICAgIGlmIChhcmd2WzFdKSB7Ci0rICAgICAgICAvKiBDb3JydXB0ZWQgS0FUIHRlc3RzICovCi0r ICAgICAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAiYWVzIikpIHsKLSsgICAgICAgICAgICBGSVBT X2NvcnJ1cHRfYWVzKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJBRVMgZW5jcnlwdGlvbi9kZWNy eXB0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFz dHJjbXAoYXJndlsxXSwgImRlcyIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X2Rlcygp OwotKyAgICAgICAgICAgIHByaW50ZigiREVTMy1FQ0IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdp dGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJn dlsxXSwgImRzYSIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X2RzYSgpOwotKyAgICAg ICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlv biB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21w KGFyZ3ZbMV0sICJyc2EiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9yc2EoKTsKLSsg ICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlk YXRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0 cmNtcChhcmd2WzFdLCAicnNha2V5IikpIHsKLSsgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkg Z2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4u XG4iKTsKLSsJICAgIGJhZF9yc2EgPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICB9 IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYWtleWdlbiIpKSB7Ci0rCSAgICBkb19jb3Jy dXB0X3JzYV9rZXlnZW4gPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICAgICAgcHJp bnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29y cnVwdGVkIGtleWdlbi4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsx XSwgImRzYWtleSIpKSB7Ci0rICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24g YW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7Ci0rCSAg ICBiYWRfZHNhID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgfSBlbHNlIGlmICgh c3RyY21wKGFyZ3ZbMV0sICJkc2FrZXlnZW4iKSkgewotKwkgICAgZG9fY29ycnVwdF9kc2Ffa2V5 Z2VuID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtl eSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXln ZW4uLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJzaGExIikp IHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfc2hhMSgpOwotKyAgICAgICAgICAgIHByaW50 ZigiU0hBLTEgaGFzaCB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKwl9IGVsc2UgaWYgKCFz dHJjbXAoYXJndlsxXSwgInJuZyIpKSB7Ci0rCSAgICBGSVBTX2NvcnJ1cHRfcm5nKCk7Ci0rCX0g ZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nc3RpY2siKSkgewotKwkgICAgZG9fcm5nX3N0 aWNrID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKwkgICAgcHJpbnRmKCJSTkcgdGVzdCB3aXRo IHN0dWNrIGNvbnRpbnVvdXMgdGVzdC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAg ICAgICAgIHByaW50ZigiQmFkIGFyZ3VtZW50IFwiJXNcIlxuIiwgYXJndlsxXSk7Ci0rICAgICAg ICAgICAgZXhpdCgxKTsKLSsgICAgICAgIH0KLSsJaWYgKCFub19leGl0KSB7Ci0rICAgICAgICAJ aWYgKCFGSVBTX21vZGVfc2V0KDEpKSB7Ci0rIAkJICAgIGRvX3ByaW50X2Vycm9ycygpOwotKyAg ICAgICAgCSAgICBwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBmYWlsZWRcbiIpOwotKwkJICAg IGV4aXQoMSk7Ci0rCQl9Ci0rICAgICAgICAJcHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3Qgc3Vj Y2Vzc2Z1bFxuIik7Ci0rICAgICAgICAJZXhpdCgwKTsKLSsJfQotKyAgICB9Ci0rCi0rICAgIC8q IE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgotKyAgICAqLwotKyAgICBwcmlu dGYoIjEuIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsK LSsgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOwotKyAgICBw cmludGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7 Ci0rCi0rICAgIC8qIFBvd2VyLXVwIHNlbGYgdGVzdAotKyAgICAqLwotKyAgICBFUlJfY2xlYXJf ZXJyb3IoKTsKLSsgICAgcHJpbnRmKCIyLiBBdXRvbWF0aWMgcG93ZXItdXAgc2VsZiB0ZXN0Li4u Iik7Ci0rICAgIGlmICghRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMo KTsKLSsgICAgICAgIHByaW50ZihGYWlsKCJGQUlMRUQhXG4iKSk7Ci0rCWV4aXQoMSk7Ci0rCX0K LSsgICAgcHJpbnRmKCJzdWNjZXNzZnVsXG4iKTsKLSsgICAgaWYgKGRvX2NvcnJ1cHRfZHNhX2tl eWdlbikKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbigpOwotKyAgICBpZiAo ZG9fY29ycnVwdF9yc2Ffa2V5Z2VuKQotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9yc2Ffa2V5 Z2VuKCk7Ci0rICAgIGlmIChkb19ybmdfc3RpY2spCi0rICAgICAgICAgICAgRklQU19ybmdfc3Rp Y2soKTsKLSsKLSsgICAgLyogQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbgotKyAgICAqLwotKyAg ICBwcmludGYoIjMuIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJpbnRm KCBGSVBTX2Flc190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSAp OwotKwotKyAgICAvKiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVjcnlwdGlv bgotKyAgICAqLwotKyAgICBwcmludGYoIjQuIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlw dGlvbi9kZWNyeXB0aW9uLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19yc2FfdGVzdChiYWRfcnNh KSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIERF Uy1DQkMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiNS4gREVT LUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2RlczNf dGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAg LyogRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbgotKyAgICAqLwot KyAgICBwcmludGYoIjYuIERTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRp b24uLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2RzYV90ZXN0KGJhZF9kc2EpID8gInN1Y2Nlc3Nm dWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogU0hBLTEgaGFzaAotKyAg ICAqLwotKyAgICBwcmludGYoIjdhLiBTSEEtMSBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQ U19zaGExX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0r Ci0rICAgIC8qIFNIQS0yNTYgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdiLiBTSEEtMjU2 IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1 bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBTSEEtNTEyIGhhc2gKLSsg ICAgKi8KLSsgICAgcHJpbnRmKCI3Yy4gU0hBLTUxMiBoYXNoLi4uIik7Ci0rICAgIHByaW50Zigg RklQU19zaGE1MTJfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikg KTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMSBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2Qu IEhNQUMtU0hBLTEgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGExX3Rlc3Qo KSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIEhN QUMtU0hBLTIyNCBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2UuIEhNQUMtU0hBLTIyNCBo YXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTIyNF90ZXN0KCkgPyAic3VjY2Vz c2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0yNTYg aGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdmLiBITUFDLVNIQS0yNTYgaGFzaC4uLiIpOwot KyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAg RmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMzg0IGhhc2gKLSsgICAg Ki8KLSsgICAgcHJpbnRmKCI3Zy4gSE1BQy1TSEEtMzg0IGhhc2guLi4iKTsKLSsgICAgcHJpbnRm KCBGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxF RCFcbiIpICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTUxMiBoYXNoCi0rICAgICovCi0rICAgIHBy aW50ZigiN2guIEhNQUMtU0hBLTUxMiBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFj X3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwot KwotKyAgICAvKiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KLSsgICAgKi8K LSsgICAgcHJpbnRmKCI4LiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVz dC4uLlxuIik7Ci0rICAgIHByaW50ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4i KTsKLSsgICAgcHJpbnRmKCBkaF90ZXN0KCkgPyAic3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgot KwkgICAgOiBGYWlsKCJmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSApOwotKwotKyAgICAvKiBaZXJv aXphdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjkuIFplcm8taXphdGlvbi4uLlxuIik7Ci0r ICAgIHByaW50ZiggWmVyb2l6ZSgpID8gIlx0c3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgotKwkg ICAgOiBGYWlsKCJcdGZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7Ci0rCi0rICAgIHByaW50Zigi XG5BbGwgdGVzdHMgY29tcGxldGVkIHdpdGggJWQgZXJyb3JzXG4iLCBFcnJvcik7Ci0rICAgIHJl dHVybiBFcnJvciA/IDEgOiAwOwotKyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vZmlwc19sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlw c19sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwc19sb2NsLmguZmlwcwkyMDEw LTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9maXBzX2xvY2wuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTAs MCArMSw3MiBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAq ICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlmCi0r Ci0rdm9pZCBmaXBzX3dfbG9jayh2b2lkKTsKLSt2b2lkIGZpcHNfd191bmxvY2sodm9pZCk7Ci0r dm9pZCBmaXBzX3JfbG9jayh2b2lkKTsKLSt2b2lkIGZpcHNfcl91bmxvY2sodm9pZCk7Ci0raW50 IGZpcHNfaXNfc3RhcnRlZCh2b2lkKTsKLSt2b2lkIGZpcHNfc2V0X3N0YXJ0ZWQodm9pZCk7Ci0r aW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKTsKLStpbnQgZmlwc19zZXRfb3duaW5nX3Ro cmVhZCh2b2lkKTsKLSt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCk7Ci0raW50IGZp cHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKTsKLSsKLSsjZGVmaW5lIEZJUFNfTUFYX0NJUEhF Ul9URVNUX1NJWkUJMTYKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgotKyNl bmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9NYWtlZmlsZQotLS0tIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9maXBzL01ha2VmaWxlLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vZmlwcy9NYWtlZmlsZQkyMDEwLTA2LTA0IDEy OjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw4MSBAQAotKyMKLSsjIE9wZW5TU0wv Y3J5cHRvL2ZpcHMvTWFrZWZpbGUKLSsjCi0rCi0rRElSPQlmaXBzCi0rVE9QPQkuLi8uLgotK0ND PQljYwotK0lOQ0xVREVTPQotK0NGTEFHPS1nCi0rTUFLRUZJTEU9CU1ha2VmaWxlCi0rQVI9CQlh ciByCi0rCi0rQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotKwotK0dFTkVSQUw9TWFrZWZp bGUKLStURVNUPWZpcHNfdGVzdF9zdWl0ZS5jIGZpcHNfcmFuZHRlc3QuYwotK0FQUFM9Ci0rCi0r TElCPSQoVE9QKS9saWJjcnlwdG8uYQotK0xJQlNSQz1maXBzX2Flc19zZWxmdGVzdC5jIGZpcHNf ZGVzX3NlbGZ0ZXN0LmMgZmlwc19obWFjX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX3NlbGZ0ZXN0LmMg XAotKyAgICBmaXBzX3JzYV9zZWxmdGVzdC5jIGZpcHNfc2hhMV9zZWxmdGVzdC5jIGZpcHMuYyBm aXBzX2RzYV9zZWxmdGVzdC5jICBmaXBzX3JhbmQuYyBcCi0rICAgIGZpcHNfcnNhX3g5MzFnLmMK LSsKLStMSUJPQko9Zmlwc19hZXNfc2VsZnRlc3QubyBmaXBzX2Rlc19zZWxmdGVzdC5vIGZpcHNf aG1hY19zZWxmdGVzdC5vIGZpcHNfcmFuZF9zZWxmdGVzdC5vIFwKLSsgICAgZmlwc19yc2Ffc2Vs ZnRlc3QubyBmaXBzX3NoYTFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2VsZnRlc3QubyAg Zmlwc19yYW5kLm8gXAotKyAgICBmaXBzX3JzYV94OTMxZy5vCi0rCi0rU1JDPSAkKExJQlNSQykg Zmlwc19zdGFuZGFsb25lX3NoYTEuYwotKwotK0VYSEVBREVSPSBmaXBzLmggZmlwc19yYW5kLmgK LStIRUFERVI9CSQoRVhIRUFERVIpCi0rCi0rQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhF QURFUikKLSsKLSt0b3A6Ci0rCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0k KERJUikgc3ViX2FsbCkKLSsKLSthbGw6CWxpYgotKwotK2xpYjoJJChMSUJPQkopCi0rCSQoQVIp ICQoTElCKSAkKExJQk9CSikKLSsJJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQu Ci0rCUB0b3VjaCBsaWIKLSsKLStmaWxlczoKLSsJJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5w bCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLSsKLStsaW5rczoKLSsJQCQoUEVSTCkgJChUT1Ap L3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotKwlAJChQ RVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0rCUAkKFBFUkwp ICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLSsKLStpbnN0YWxsOgot KwlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxl Li4uCi0rCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7 IFwKLSsJZG8gIFwKLSsJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5j bHVkZS9vcGVuc3NsLyQkaTsgXAotKwljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RB TExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotKwlkb25lOwotKwotK3RhZ3M6Ci0rCWN0 YWdzICQoU1JDKQotKwotK3Rlc3RzOgotKwotK2xpbnQ6Ci0rCWxpbnQgLURMSU5UICQoSU5DTFVE RVMpICQoU1JDKT5mbHVmZgotKwotK2RlcGVuZDoKLSsJQFsgLW4gIiQoTUFLRURFUEVORCkiIF0g IyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0rCSQoTUFLRURFUEVORCkgLS0g JChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLSsK LStkY2xlYW46Ci0rCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5F Lykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLSsJbXYgLWYg TWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0rCi0rY2xlYW46Ci0rCXJtIC1mICoubyAqLm9iaiBs aWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0rCi0rIyBETyBOT1Qg REVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotKwotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL2htYWMvaG1hYy5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL2htYWMvaG1hYy5j LmZpcHMJMjAxMC0wMS0yNiAxNTozMzo1Mi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vaG1hYy9obWFjLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAy MDAKLUBAIC03Nyw2ICs3NywxMyBAQCBpbnQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNv bnN0IHZvCi0gCi0gCWlmIChrZXkgIT0gTlVMTCkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCQlpZiAoRklQU19tb2RlKCkgJiYgIShtZC0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKQot KwkJJiYgKCEoY3R4LT5tZF9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpCi0rCQkgfHwgIShjdHgtPmlfY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBT X0FMTE9XKQotKwkJIHx8ICEoY3R4LT5vX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05f RklQU19BTExPVykpKQotKwkJCWdvdG8gZXJyOwotKyNlbmRpZgotIAkJcmVzZXQ9MTsKLSAJCWo9 RVZQX01EX2Jsb2NrX3NpemUobWQpOwotIAkJT1BFTlNTTF9hc3NlcnQoaiA8PSAoaW50KXNpemVv ZihjdHgtPmtleSkpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL01ha2VmaWxlLmZp cHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL01ha2VmaWxlLmZpcHMJMjAwOS0wNC0wNiAxNjozMTozNS4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vTWFrZWZpbGUJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAw MDAwMDAgKzAyMDAKLUBAIC0zNCwxNCArMzQsMTQgQEAgR0VORVJBTD1NYWtlZmlsZSBSRUFETUUg Y3J5cHRvLWxpYi5jb20gaQotIAotIExJQj0gJChUT1ApL2xpYmNyeXB0by5hCi0gU0hBUkVEX0xJ Qj0gbGliY3J5cHRvJChTSExJQl9FWFQpCi0tTElCU1JDPQljcnlwdGxpYi5jIG1lbS5jIG1lbV9j bHIuYyBtZW1fZGJnLmMgY3ZlcnNpb24uYyBleF9kYXRhLmMgY3B0X2Vyci5jIGViY2RpYy5jIHVp ZC5jIG9fdGltZS5jIG9fc3RyLmMgb19kaXIuYwotLUxJQk9CSj0gY3J5cHRsaWIubyBtZW0ubyBt ZW1fZGJnLm8gY3ZlcnNpb24ubyBleF9kYXRhLm8gY3B0X2Vyci5vIGViY2RpYy5vIHVpZC5vIG9f dGltZS5vIG9fc3RyLm8gb19kaXIubyAkKENQVUlEX09CSikKLStMSUJTUkM9CWNyeXB0bGliLmMg bWVtLmMgbWVtX2Nsci5jIG1lbV9kYmcuYyBjdmVyc2lvbi5jIGV4X2RhdGEuYyBjcHRfZXJyLmMg ZWJjZGljLmMgdWlkLmMgb190aW1lLmMgb19zdHIuYyBvX2Rpci5jIG9faW5pdC5jIGZpcHNfZXJy LmMKLStMSUJPQko9IGNyeXB0bGliLm8gbWVtLm8gbWVtX2RiZy5vIGN2ZXJzaW9uLm8gZXhfZGF0 YS5vIGNwdF9lcnIubyBlYmNkaWMubyB1aWQubyBvX3RpbWUubyBvX3N0ci5vIG9fZGlyLm8gb19p bml0Lm8gZmlwc19lcnIubyAkKENQVUlEX09CSikKLSAKLSBTUkM9ICQoTElCU1JDKQotIAotIEVY SEVBREVSPSBjcnlwdG8uaCBvcGVuc3Nsdi5oIG9wZW5zc2xjb25mLmggZWJjZGljLmggc3ltaGFj a3MuaCBcCi0gCW9zc2xfdHlwLmgKLS1IRUFERVI9CWNyeXB0bGliLmggYnVpbGRpbmYuaCBtZDMy X2NvbW1vbi5oIG9fdGltZS5oIG9fc3RyLmggb19kaXIuaCAkKEVYSEVBREVSKQotK0hFQURFUj0J Y3J5cHRsaWIuaCBidWlsZGluZi5oIGZpcHNfbG9jbC5oIG1kMzJfY29tbW9uLmggb190aW1lLmgg b19zdHIuaCBvX2Rpci5oICQoRVhIRUFERVIpCi0gCi0gQUxMPSAgICAkKEdFTkVSQUwpICQoU1JD KSAkKEhFQURFUikKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZGMyL21kYzJk Z3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCi0tLS0gb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzCTIwMDQtMDctMjUgMjE6MTA6 NDEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21kYzIvbWRjMmRn c3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTYxLDYgKzYxLDEx IEBACi0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgotICNp bmNsdWRlIDxvcGVuc3NsL21kYzIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwot IAotICN1bmRlZiBjMmwKLSAjZGVmaW5lIGMybChjLGwpCShsID0oKERFU19MT05HKSgqKChjKSsr KSkpICAgICwgXAotQEAgLTc1LDcgKzgwLDcgQEAKLSAJCQkqKChjKSsrKT0odW5zaWduZWQgY2hh cikoKChsKT4+MjRMKSYweGZmKSkKLSAKLSBzdGF0aWMgdm9pZCBtZGMyX2JvZHkoTURDMl9DVFgg KmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgbGVuKTsKLS1pbnQgTURDMl9Jbml0 KE1EQzJfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNREMyKQotIAl7Ci0gCWMtPm51 bT0wOwotIAljLT5wYWRfdHlwZT0xOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21k YzIvbWRjMi5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21kYzIvbWRjMi5oCi0tLS0gb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL21kYzIvbWRjMi5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWRjMi9tZGMyLmgJMjAx MC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC04MCw3ICs4MCw5IEBAIHR5cGVk ZWYgc3RydWN0IG1kYzJfY3R4X3N0Ci0gCWludCBwYWRfdHlwZTsgLyogZWl0aGVyIDEgb3IgMiwg ZGVmYXVsdCAxICovCi0gCX0gTURDMl9DVFg7Ci0gCi0tCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot K2ludCBwcml2YXRlX01EQzJfSW5pdChNREMyX0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IE1EQzJf SW5pdChNREMyX0NUWCAqYyk7Ci0gaW50IE1EQzJfVXBkYXRlKE1EQzJfQ1RYICpjLCBjb25zdCB1 bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgTURDMl9GaW5hbCh1bnNpZ25l ZCBjaGFyICptZCwgTURDMl9DVFggKmMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L21kMi9tZDJfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21kMi9tZDJfZGdzdC5j Ci0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMJMjAwNy0wOC0z MSAxMjoxMjozNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQy L21kMl9kZ3N0LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02Miw2 ICs2MiwxMSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL21kMi5oPgotICNpbmNsdWRlIDxvcGVuc3Ns L29wZW5zc2x2Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KLSAKLSBjb25zdCBjaGFyIE1EMl92ZXJzaW9uW109Ik1EMiIgT1BF TlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAgLTExNiw3ICsxMjEsNyBAQCBjb25zdCBjaGFyICpN RDJfb3B0aW9ucyh2b2lkKQotIAkJcmV0dXJuKCJtZDIoaW50KSIpOwotIAl9Ci0gCi0taW50IE1E Ml9Jbml0KE1EMl9DVFggKmMpCi0rRklQU19OT05fRklQU19NRF9Jbml0KE1EMikKLSAJewotIAlj LT5udW09MDsKLSAJbWVtc2V0KGMtPnN0YXRlLDAsc2l6ZW9mIGMtPnN0YXRlKTsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZDIvbWQyLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vbWQyL21kMi5oCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21kMi9tZDIuaC5maXBzCTIw MTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL21kMi9tZDIuaAkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTgx LDYgKzgxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTUQyc3RhdGVfc3QKLSAJfSBNRDJfQ1RYOwotIAot IGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStp bnQgcHJpdmF0ZV9NRDJfSW5pdChNRDJfQ1RYICpjKTsKLSsjZW5kaWYKLSBpbnQgTUQyX0luaXQo TUQyX0NUWCAqYyk7Ci0gaW50IE1EMl9VcGRhdGUoTUQyX0NUWCAqYywgY29uc3QgdW5zaWduZWQg Y2hhciAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IE1EMl9GaW5hbCh1bnNpZ25lZCBjaGFyICpt ZCwgTUQyX0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQ0L21kNF9k Z3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMKLS0tLSBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjEx LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZDQvbWQ0X2Rnc3Qu YwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTU5LDYgKzU5LDExIEBA Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgIm1kNF9sb2NsLmgiCi0gI2luY2x1ZGUg PG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAot IGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0g Ci1AQCAtNzAsNyArNzUsNyBAQCBjb25zdCBjaGFyIE1ENF92ZXJzaW9uW109Ik1ENCIgT1BFTlNT TF9WCi0gI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAotICNk ZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKLSAKLS1pbnQgTUQ0 X0luaXQoTUQ0X0NUWCAqYykKLStGSVBTX05PTl9GSVBTX01EX0luaXQoTUQ0KQotIAl7Ci0gCW1l bXNldCAoYywwLHNpemVvZigqYykpOwotIAljLT5BPUlOSVRfREFUQV9BOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL21kNC9tZDQuaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9t ZDQvbWQ0LmgKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQ0L21kNC5oLmZpcHMJMjAxMC0w Ni0wNCAxMjoyNToxNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v bWQ0L21kNC5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtMTA1LDYg KzEwNSw5IEBAIHR5cGVkZWYgc3RydWN0IE1ENHN0YXRlX3N0Ci0gCXVuc2lnbmVkIGludCBudW07 Ci0gCX0gTUQ0X0NUWDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfTUQ0 X0luaXQoTUQ0X0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IE1ENF9Jbml0KE1ENF9DVFggKmMpOwot IGludCBNRDRfVXBkYXRlKE1ENF9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4p OwotIGludCBNRDRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1ENF9DVFggKmMpOwotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL21kNS9tZDVfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21kNS9t ZDVfZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4w MDAwMDAwMDAgKzAyMDAKLUBAIC01OSw2ICs1OSwxMSBAQAotICNpbmNsdWRlIDxzdGRpby5oPgot ICNpbmNsdWRlICJtZDVfbG9jbC5oIgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSBjb25zdCBjaGFyIE1ENV92ZXJzaW9u W109Ik1ENSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAgLTcwLDcgKzc1LDcgQEAgY29u c3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVgotICNkZWZpbmUgSU5JVF9EQVRB X0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKLSAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNp Z25lZCBsb25nKTB4MTAzMjU0NzZMCi0gCi0taW50IE1ENV9Jbml0KE1ENV9DVFggKmMpCi0rRklQ U19OT05fRklQU19NRF9Jbml0KE1ENSkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsK LSAJYy0+QT1JTklUX0RBVEFfQTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZDUv bWQ1LmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vbWQ1L21kNS5oCi0tLS0gb3BlbnNzbC0x LjAuMGEvY3J5cHRvL21kNS9tZDUuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21kNS9tZDUuaAkyMDEwLTA2LTA0IDEy OjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTEwNSw2ICsxMDUsOSBAQCB0eXBlZGVmIHN0cnVj dCBNRDVzdGF0ZV9zdAotIAl1bnNpZ25lZCBpbnQgbnVtOwotIAl9IE1ENV9DVFg7Ci0gCi0rI2lm ZGVmIE9QRU5TU0xfRklQUwotK2ludCBwcml2YXRlX01ENV9Jbml0KE1ENV9DVFggKmMpOwotKyNl bmRpZgotIGludCBNRDVfSW5pdChNRDVfQ1RYICpjKTsKLSBpbnQgTUQ1X1VwZGF0ZShNRDVfQ1RY ICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgTUQ1X0ZpbmFsKHVuc2ln bmVkIGNoYXIgKm1kLCBNRDVfQ1RYICpjKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9tZW0uYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9tZW0uYwotLS0tIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9tZW0uYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTc6NDcuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL21lbS5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAw MDAwMDAwICswMjAwCi1AQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkICgqZnJlZV9sb2Nr ZWRfZnVuYykodm9pZCAqKSAKLSAKLSAvKiBtYXkgYmUgY2hhbmdlZCBhcyBsb25nIGFzICdhbGxv d19jdXN0b21pemVfZGVidWcnIGlzIHNldCAqLwotIC8qIFhYWCB1c2UgY29ycmVjdCBmdW5jdGlv biBwb2ludGVyIHR5cGVzICovCi0tI2lmZGVmIENSWVBUT19NREVCVUcKLSsjaWYgZGVmaW5lZChD UllQVE9fTURFQlVHKSAmJiAhZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0gLyogdXNlIGRlZmF1bHQg ZnVuY3Rpb25zIGZyb20gbWVtX2RiZy5jICovCi0gc3RhdGljIHZvaWQgKCptYWxsb2NfZGVidWdf ZnVuYykodm9pZCAqLGludCxjb25zdCBjaGFyICosaW50LGludCkKLSAJPSBDUllQVE9fZGJnX21h bGxvYzsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9vX2luaXQuYy5maXBzIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9vX2luaXQuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9vX2lu aXQuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL29faW5pdC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICsw MjAwCi1AQCAtMCwwICsxLDgwIEBACi0rLyogb19pbml0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERy IFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsg KiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3 IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK LSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0r ICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBi eSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5j b20pLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPGVfb3MuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KLSsKLSsvKiBQZXJmb3JtIGFueSBlc3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXph dGlvbiBvcGVyYXRpb25zLgotKyAqIEN1cnJlbnRseSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MK LSsgKi8KLSsKLSt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpCi0rCXsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCXN0YXRpYyBpbnQgZG9uZSA9IDA7Ci0rCWlmICghZG9uZSkKLSsJCXsK LSsjaWZkZWYgQ1JZUFRPX01ERUJVRwotKwkJQ1JZUFRPX21hbGxvY19kZWJ1Z19pbml0KCk7Ci0r I2VuZGlmCi0rCQlkb25lID0gMTsKLSsJCX0KLSsjZW5kaWYKLSsJfQotKwkJCi0rCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL29w ZW5zc2xjb25mLmguaW4uZmlwcwkyMDA1LTEyLTE2IDExOjM3OjIzLjAwMDAwMDAwMCArMDEwMAot KysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCTIwMTAtMDYtMDQgMTI6 MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtMSw1ICsxLDIwIEBACi0gLyogY3J5cHRvL29wZW5z c2xjb25mLmguaW4gKi8KLSAKLSsjaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECi0rCi0r LyogSW5jbHVkZSBhbnkgc3ltYm9scyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBleHBsaWNpdGx5IHNl dCB0byBlbmFibGUgYSBmZWF0dXJlCi0rICogdGhhdCBzaG91bGQgYmUgdmlzaWJsZSB0byBtYWtl ZGVwZW5kLgotKyAqCi0rICogW091ciAibWFrZSBkZXBlbmQiIGRvZXNuJ3QgYWN0dWFsbHkgbG9v ayBhdCB0aGlzLCB3ZSB1c2UgYWN0dWFsIGJ1aWxkIHNldHRpbmdzCi0rICogaW5zdGVhZDsgd2Ug d2FudCB0byBtYWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1YmRpcmVjdG9yaWVzIHdpdGggZGlzYWJs ZWQgYWxnb3JpdGhtcy5dCi0rICovCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjZGVmaW5l IE9QRU5TU0xfRklQUwotKyNlbmRpZgotKwotKyNlbmRpZgotKwotIC8qIEdlbmVyYXRlIDgwMzg2 IGNvZGU/ICovCi0gI3VuZGVmIEkzODZfT05MWQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcGtjczEy L3AxMl9jcnQuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jLmZp cHMJMjAwOS0wMy0wOSAxNDowODowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAotQEAgLTU5LDYgKzU5LDEwIEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUg ImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvcGtjczEyLmg+Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSAKLSBz dGF0aWMgaW50IHBrY3MxMl9hZGRfYmFnKFNUQUNLX09GKFBLQ1MxMl9TQUZFQkFHKSAqKnBiYWdz LCBQS0NTMTJfU0FGRUJBRyAqYmFnKTsKLUBAIC05MCw3ICs5NCwxNCBAQCBQS0NTMTIgKlBLQ1Mx Ml9jcmVhdGUoY2hhciAqcGFzcywgY2hhciAqCi0gCi0gCS8qIFNldCBkZWZhdWx0cyAqLwotIAlp ZiAoIW5pZF9jZXJ0KQotKwkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCWlmIChGSVBTX21v ZGUoKSkKLSsJCQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNf Q0JDOwotKwkJZWxzZQotKyNlbmRpZgotIAkJbmlkX2NlcnQgPSBOSURfcGJlX1dpdGhTSEExQW5k NDBCaXRSQzJfQ0JDOwotKwkJfQotIAlpZiAoIW5pZF9rZXkpCi0gCQluaWRfa2V5ID0gTklEX3Bi ZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBsZURFU19DQkM7Ci0gCWlmICghaXRlcikKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9yYW5kL21kX3JhbmQuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYW5kL21k X3JhbmQuYy5maXBzCTIwMDktMDEtMDMgMTA6MjU6MzIuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAw MDAwMDAwICswMjAwCi1AQCAtMTI2LDYgKzEyNiwxMCBAQAotIAotICNpbmNsdWRlIDxvcGVuc3Ns L2NyeXB0by5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gI2lmZGVmIEJO X0RFQlVHCi0gIyBkZWZpbmUgUFJFRElDVAotQEAgLTM0Miw2ICszNDYsMTQgQEAgc3RhdGljIGlu dCBzc2xlYXlfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaAotICNlbmRpZgotIAlpbnQgZG9fc3Rpcl9w b29sID0gMDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfbW9kZSgpKQotKwkg ICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfU1NMRUFZX1JBTkRfQllURVMsRklQU19SX05PTl9G SVBTX01FVEhPRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsjZW5kaWYKLSsKLSAjaWZk ZWYgUFJFRElDVAotIAlpZiAocmFuZF9wcmVkaWN0YWJsZSkKLSAJCXsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjBhL2NyeXB0by9yYW5kL3JhbmRfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlw dG8vcmFuZC9yYW5kX2Vyci5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JhbmQvcmFuZF9l cnIuYy5maXBzCTIwMDYtMTEtMjEgMjI6Mjk6NDEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAw MDAwMCArMDIwMAotQEAgLTcwLDYgKzcwLDEzIEBACi0gCi0gc3RhdGljIEVSUl9TVFJJTkdfREFU QSBSQU5EX3N0cl9mdW5jdHNbXT0KLSAJewotK3tFUlJfRlVOQyhSQU5EX0ZfRU5HX1JBTkRfR0VU X1JBTkRfTUVUSE9EKSwJIkVOR19SQU5EX0dFVF9SQU5EX01FVEhPRCJ9LAotK3tFUlJfRlVOQyhS QU5EX0ZfRklQU19SQU5EKSwJIkZJUFNfUkFORCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19S QU5EX0JZVEVTKSwJIkZJUFNfUkFORF9CWVRFUyJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19S QU5EX1NFVF9EVCksCSJGSVBTX1JBTkRfU0VUX0RUIn0sCi0re0VSUl9GVU5DKFJBTkRfRl9GSVBT X1NFVF9EVCksCSJGSVBTX1NFVF9EVCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19TRVRfUFJO R19TRUVEKSwJIkZJUFNfU0VUX1BSTkdfU0VFRCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19T RVRfVEVTVF9NT0RFKSwJIkZJUFNfU0VUX1RFU1RfTU9ERSJ9LAotIHtFUlJfRlVOQyhSQU5EX0Zf UkFORF9HRVRfUkFORF9NRVRIT0QpLAkiUkFORF9nZXRfcmFuZF9tZXRob2QifSwKLSB7RVJSX0ZV TkMoUkFORF9GX1NTTEVBWV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCi0gezAs TlVMTH0KLUBAIC03Nyw3ICs4NCwxNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJBTkRfc3Ry X2Z1bmN0c1tdCi0gCi0gc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0cl9yZWFzb25zW109 Ci0gCXsKLSt7RVJSX1JFQVNPTihSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EKSAgICAgICwibm9uIGZp cHMgbWV0aG9kIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX05PVF9JTl9URVNUX01PREUpICAgICAs Im5vdCBpbiB0ZXN0IG1vZGUifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfTk9fS0VZX1NFVCkgICAg ICAgICAgICwibm8ga2V5IHNldCJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0FTS0lOR19G T1JfVE9PX01VQ0gpLCJwcm5nIGFza2luZyBmb3IgdG9vIG11Y2gifSwKLSt7RVJSX1JFQVNPTihS QU5EX1JfUFJOR19FUlJPUikgICAgICAgICAgICwicHJuZyBlcnJvciJ9LAotK3tFUlJfUkVBU09O KFJBTkRfUl9QUk5HX0tFWUVEKSAgICAgICAgICAgLCJwcm5nIGtleWVkIn0sCi0re0VSUl9SRUFT T04oUkFORF9SX1BSTkdfTk9UX1JFS0VZRUQpICAgICAsInBybmcgbm90IHJla2V5ZWQifSwKLSt7 RVJSX1JFQVNPTihSQU5EX1JfUFJOR19OT1RfUkVTRUVERUQpICAgICwicHJuZyBub3QgcmVzZWVk ZWQifSwKLSB7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19OT1RfU0VFREVEKSAgICAgICwiUFJORyBu b3Qgc2VlZGVkIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRD SF9LRVkpLCJwcm5nIHNlZWQgbXVzdCBub3QgbWF0Y2gga2V5In0sCi0re0VSUl9SRUFTT04oUkFO RF9SX1BSTkdfU1RVQ0spICAgICAgICAgICAsInBybmcgc3R1Y2sifSwKLSB7MCxOVUxMfQotIAl9 OwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL3JhbmQvcmFuZC5oCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRv L3JhbmQvcmFuZC5oLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNC4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmFuZC9yYW5kLmgJMjAxMC0wNi0wNCAxMjoyNToxNS4w MDAwMDAwMDAgKzAyMDAKLUBAIC0xMjgsMTEgKzEyOCwyOCBAQCB2b2lkIEVSUl9sb2FkX1JBTkRf c3RyaW5ncyh2b2lkKTsKLSAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIFJBTkQgZnVuY3Rpb25zLiAq LwotIAotIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwotKyNkZWZpbmUgUkFORF9GX0VOR19SQU5EX0dF VF9SQU5EX01FVEhPRAkJCSAxMDgKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJIDEwMwot KyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9CWVRFUwkJCQkgMTAyCi0rI2RlZmluZSBSQU5EX0Zf RklQU19SQU5EX1NFVF9EVAkJCQkgMTA2Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfRFQJCQkJ IDEwNAotKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRAkJCSAxMDcKLSsjZGVmaW5l IFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUJCQkgMTA1Ci0gI2RlZmluZSBSQU5EX0ZfUkFORF9H RVRfUkFORF9NRVRIT0QJCQkgMTAxCi0gI2RlZmluZSBSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMJ CQkgMTAwCi0gCi0gLyogUmVhc29uIGNvZGVzLiAqLwotKyNkZWZpbmUgUkFORF9SX05PTl9GSVBT X01FVEhPRAkJCQkgMTA1Ci0rI2RlZmluZSBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERQkJCQkgMTA2 Ci0rI2RlZmluZSBSQU5EX1JfTk9fS0VZX1NFVAkJCQkgMTA3Ci0rI2RlZmluZSBSQU5EX1JfUFJO R19BU0tJTkdfRk9SX1RPT19NVUNICQkJIDEwMQotKyNkZWZpbmUgUkFORF9SX1BSTkdfRVJST1IJ CQkJIDEwOAotKyNkZWZpbmUgUkFORF9SX1BSTkdfS0VZRUQJCQkJIDEwOQotKyNkZWZpbmUgUkFO RF9SX1BSTkdfTk9UX1JFS0VZRUQJCQkJIDEwMgotKyNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JF U0VFREVECQkJIDEwMwotICNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRAkJCQkgMTAwCi0r I2RlZmluZSBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWQkJIDExMAotKyNkZWZp bmUgUkFORF9SX1BSTkdfU1RVQ0sJCQkJIDEwNAotIAotICNpZmRlZiAgX19jcGx1c3BsdXMKLSB9 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jLmZpcHMgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL3JhbmQvcmFuZF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9yYW5kL3JhbmRfbGliLmMuZmlwcwkyMDA4LTExLTEyIDA0OjU4OjA0LjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYW5kL3JhbmRfbGliLmMJMjAxMC0wNi0w NCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC02MCw2ICs2MCwxMiBAQAotICNpbmNsdWRl IDx0aW1lLmg+Ci0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvcmFu ZC5oPgotKyNpbmNsdWRlICJyYW5kX2xjbC5oIgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0r I2VuZGlmCi0rCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotICNpbmNsdWRlIDxvcGVuc3Ns L2VuZ2luZS5oPgotICNlbmRpZgotQEAgLTEwMiw4ICsxMDgsMTkgQEAgY29uc3QgUkFORF9NRVRI T0QgKlJBTkRfZ2V0X3JhbmRfbWV0aG9kKAotIAkJCWZ1bmN0X3JlZiA9IGU7Ci0gCQllbHNlCi0g I2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJCWRlZmF1bHRfUkFORF9tZXRoID0gRklQ U19tb2RlKCkgPyBGSVBTX3JhbmRfbWV0aG9kKCkgOiBSQU5EX1NTTGVheSgpOwotKwkJfQotKwlp ZiAoRklQU19tb2RlKCkKLSsJCSYmIGRlZmF1bHRfUkFORF9tZXRoICE9IEZJUFNfcmFuZF9jaGVj aygpKQotKwkgICAgewotKwkgICAgUkFORGVycihSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0Qs UkFORF9SX05PTl9GSVBTX01FVEhPRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsjZWxz ZQotIAkJCWRlZmF1bHRfUkFORF9tZXRoID0gUkFORF9TU0xlYXkoKTsKLSAJCX0KLSsjZW5kaWYK LSAJcmV0dXJuIGRlZmF1bHRfUkFORF9tZXRoOwotIAl9Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vcmMyL3JjMi5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjMi9yYzIu aAotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzIvcmMyLmguZmlwcwkyMDEwLTA2LTA0IDEy OjI1OjE0LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzIvcmMy LmgJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC03OSw3ICs3OSw5IEBA IHR5cGVkZWYgc3RydWN0IHJjMl9rZXlfc3QKLSAJUkMyX0lOVCBkYXRhWzY0XTsKLSAJfSBSQzJf S0VZOwotIAotLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTIAotK3ZvaWQgcHJpdmF0ZV9SQzJfc2V0 X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsaW50 IGJpdHMpOwotKyNlbmRpZgotIHZvaWQgUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVu LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLGludCBiaXRzKTsKLSB2b2lkIFJDMl9lY2JfZW5j cnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsUkMyX0tFWSAq a2V5LAotIAkJICAgICBpbnQgZW5jKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9y YzIvcmMyX3NrZXkuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzIvcmMyX3NrZXkuYwot LS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzIvcmMyX3NrZXkuYy5maXBzCTIwMDctMDktMTgg MjM6MTA6MzIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjMi9y YzJfc2tleS5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtNTcsNiAr NTcsMTEgQEAKLSAgKi8KLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9yYzIuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpbmNsdWRlICJyYzJfbG9jbC5oIgotIAotIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGtleV90YWJsZVsyNTZdPXsKLUBAIC05NCw4ICs5OSwyMCBA QCBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlfdGFibGVbMjU2Ci0gICogQlNBRkUgdXNl cyB0aGUgJ3JldGFyZGVkJyB2ZXJzaW9uLiAgV2hhdCBJIHByZXZpb3VzbHkgc2hpcHBlZCBpcwot ICAqIHRoZSBzYW1lIGFzIHNwZWNpZnlpbmcgMTAyNCBmb3IgdGhlICdiaXRzJyBwYXJhbWV0ZXIu ICBCc2FmZSB1c2VzCi0gICogYSB2ZXJzaW9uIHdoZXJlIHRoZSBiaXRzIHBhcmFtZXRlciBpcyB0 aGUgc2FtZSBhcyBsZW4qOCAqLwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSB2b2lkIFJDMl9z ZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwg aW50IGJpdHMpCi0gCXsKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJRklQU19CQURfQUJPUlQoUkMy KQotKwlwcml2YXRlX1JDMl9zZXRfa2V5KGtleSwgbGVuLCBkYXRhLCBiaXRzKTsKLSsJfQotK3Zv aWQgcHJpdmF0ZV9SQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmRhdGEsCi0rCQkJCQkJCQlpbnQgYml0cykKLSsjZWxzZQotK3ZvaWQgUkMyX3Nl dF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBp bnQgYml0cykKLSsjZW5kaWYKLSsJewotIAlpbnQgaSxqOwotIAl1bnNpZ25lZCBjaGFyICprOwot IAlSQzJfSU5UICpraTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvYXNtL3Jj NC1zMzkweC5wbC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvYXNtL3JjNC1zMzkweC5w bAotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvYXNtL3JjNC1zMzkweC5wbC5maXBzCTIw MDktMDItMTIgMTU6NDg6NDkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICsw MjAwCi1AQCAtMjAyLDQgKzIwMiw2IEBAIFJDNF9vcHRpb25zOgotIC5zdHJpbmcJInJjNCg4eCxj aGFyKSIKLSBfX18KLSAKLSskY29kZSA9fiBzL1JDNF9zZXRfa2V5L3ByaXZhdGVfUkM0X3NldF9r ZXkvZyBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0rCi0gcHJpbnQgJGNvZGU7Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L2FzbS9yYzQteDg2XzY0LnBsLmZpcHMgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbAotLS0tIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwuZmlwcwkyMDA5LTA0LTI3IDIxOjMxOjA0LjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQu cGwJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC00OTksNiArNDk5LDgg QEAgX19fCi0gCi0gJGNvZGUgPX4gcy8jKFtid2RdKS8kMS9nbTsKLSAKLSskY29kZSA9fiBzL1JD NF9zZXRfa2V5L3ByaXZhdGVfUkM0X3NldF9rZXkvZyBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0r Ci0gcHJpbnQgJGNvZGU7Ci0gCi0gY2xvc2UgU1RET1VUOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MGEvY3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9y YzQvYXNtL3JjNC01ODYucGwKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L2FzbS9yYzQt NTg2LnBsLmZpcHMJMjAwNy0xMi0wMiAyMjozMjowMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wYS9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsCTIwMTAtMDYtMDQgMTI6MjU6MTUu MDAwMDAwMDAwICswMjAwCi1AQCAtMTY2LDggKzE2NiwxMiBAQCAkaWR4PSJlZHgiOwotIAotICZl eHRlcm5hbF9sYWJlbCgiT1BFTlNTTF9pYTMyY2FwX1AiKTsKLSAKLSskc2V0a2V5ZnVuYyA9ICJS QzRfc2V0X2tleSI7Ci0rJHNldGtleWZ1bmMgPSAicHJpdmF0ZV9SQzRfc2V0X2tleSIgaWYgKCRF TlZ7RklQU30gbmUgIiIpOwotKwotKwotICMgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXks aW50IGxlbixjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLS0mZnVuY3Rpb25fYmVnaW4oIlJD NF9zZXRfa2V5Iik7Ci0rJmZ1bmN0aW9uX2JlZ2luKCRzZXRrZXlmdW5jKTsKLSAJJm1vdgkoJG91 dCwmd3BhcmFtKDApKTsJCSMgbG9hZCBrZXkKLSAJJm1vdgkoJGlkaSwmd3BhcmFtKDEpKTsJCSMg bG9hZCBsZW4KLSAJJm1vdgkoJGlucCwmd3BhcmFtKDIpKTsJCSMgbG9hZCBkYXRhCi1AQCAtMjQ1 LDcgKzI0OSw3IEBAICRpZHg9ImVkeCI7Ci0gCSZ4b3IJKCJlYXgiLCJlYXgiKTsKLSAJJm1vdgko JkRXUCgtOCwkb3V0KSwiZWF4Iik7CQkjIGtleS0+eD0wOwotIAkmbW92CSgmRFdQKC00LCRvdXQp LCJlYXgiKTsJCSMga2V5LT55PTA7Ci0tJmZ1bmN0aW9uX2VuZCgiUkM0X3NldF9rZXkiKTsKLSsm ZnVuY3Rpb25fZW5kKCRzZXRrZXlmdW5jKTsKLSAKLSAjIGNvbnN0IGNoYXIgKlJDNF9vcHRpb25z KHZvaWQpOwotICZmdW5jdGlvbl9iZWdpbl9CKCJSQzRfb3B0aW9ucyIpOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0 by9yYzQvTWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L01ha2VmaWxlLmZp cHMJMjAwOS0wMi0xMSAxMTowMTozNi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vcmM0L01ha2VmaWxlCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAw Ci1AQCAtMjEsOCArMjEsOCBAQCBURVNUPXJjNHRlc3QuYwotIEFQUFM9Ci0gCi0gTElCPSQoVE9Q KS9saWJjcnlwdG8uYQotLUxJQlNSQz1yYzRfc2tleS5jIHJjNF9lbmMuYwotLUxJQk9CSj0kKFJD NF9FTkMpCi0rTElCU1JDPXJjNF9za2V5LmMgcmM0X2VuYy5jIHJjNF9mYmxrLmMKLStMSUJPQko9 JChSQzRfRU5DKSByYzRfZmJsay5vCi0gCi0gU1JDPSAkKExJQlNSQykKLSAKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvcmM0X2ZibGsuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9yYzQvcmM0X2ZibGsuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvcmM0X2Zi bGsuYy5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMGEvY3J5cHRvL3JjNC9yYzRfZmJsay5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAw MDAwICswMjAwCi1AQCAtMCwwICsxLDc1IEBACi0rLyogY3J5cHRvL3JjNC9yYzRfZmJsay5jICov Ci0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykg Zm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAq IENvcHlyaWdodCAoYykgMjAwOCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0r ICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv Ci0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKi8KLSsKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9yYzQuaD4KLSsjaW5jbHVk ZSAicmM0X2xvY2wuaCIKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0rLyogRklQUyBtb2RlIGJsb2NraW5nIGZvciBSQzQg aGFzIHRvIGJlIGRvbmUgc2VwYXJhdGVseSBzaW5jZSBSQzRfc2V0X2tleQotKyAqIG1heSBiZSBp bXBsZW1lbnRlZCBpbiBhbiBhc3NlbWJseSBsYW5ndWFnZSBmaWxlLgotKyAqLwotKwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSt2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwg Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLSsJewotKwlpZiAoRklQU19tb2RlKCkpCi0rCQlG SVBTX0JBRF9BQk9SVChSQzQpCi0rCXByaXZhdGVfUkM0X3NldF9rZXkoa2V5LCBsZW4sIGRhdGEp OwotKwl9Ci0rI2VuZGlmCi0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmM0L3Jj NC5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9yYzQuaAotLS0tIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9yYzQvcmM0LmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yYzQvcmM0LmgJMjAxMC0wNi0wNCAxMjoy NToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC03OCw2ICs3OCw5IEBAIHR5cGVkZWYgc3RydWN0IHJj NF9rZXlfc3QKLSAKLSAgCi0gY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9pZCk7Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotK3ZvaWQgcHJpdmF0ZV9SQzRfc2V0X2tleShSQzRfS0VZICprZXksIGlu dCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotKyNlbmRpZgotIHZvaWQgUkM0X3Nl dF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsK LSB2b2lkIFJDNChSQzRfS0VZICprZXksIHNpemVfdCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmluZGF0YSwKLSAJCXVuc2lnbmVkIGNoYXIgKm91dGRhdGEpOwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL3JjNC9yYzRfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3Jj NC9yYzRfc2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JjNC9yYzRfc2tleS5jLmZp cHMJMjAwNy0wMS0yMSAxNDowNzoxMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w YS9jcnlwdG8vcmM0L3JjNF9za2V5LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAy MDAKLUBAIC01OSw2ICs1OSwxMSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgotICNpbmNs dWRlICJyYzRfbG9jbC5oIgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSBjb25zdCBjaGFyIFJDNF92ZXJzaW9uW109 IlJDNCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAgLTg1LDcgKzkwLDExIEBAIGNvbnN0 IGNoYXIgKlJDNF9vcHRpb25zKHZvaWQpCi0gICogRGF0ZTogV2VkLCAxNCBTZXAgMTk5NCAwNjoz NTozMSBHTVQKLSAgKi8KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdm9pZCBwcml2YXRlX1JD NF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0 YSkKLSsjZWxzZQotIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25z dCB1bnNpZ25lZCBjaGFyICpkYXRhKQotKyNlbmRpZgotIAl7Ci0gICAgICAgICByZWdpc3RlciBS QzRfSU5UIHRtcDsKLSAgICAgICAgIHJlZ2lzdGVyIGludCBpZDEsaWQyOwotQEAgLTEyNiw3ICsx MzUsMTIgQEAgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIAotIAkJICog bW9kdWxlLi4uCi0gCQkgKgkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+Ci0gCQkgKi8KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCQl1bnNpZ25lZCBsb25nICppYTMyY2FwX3B0ciA9IE9QRU5TU0xf aWEzMmNhcF9sb2MoKTsKLSsJCWlmIChpYTMyY2FwX3B0ciAmJiAoKmlhMzJjYXBfcHRyICYgKDE8 PDI4KSkpIHsKLSsjZWxzZQotIAkJaWYgKE9QRU5TU0xfaWEzMmNhcF9QICYgKDE8PDI4KSkgewot KyNlbmRpZgotIAkJCXVuc2lnbmVkIGNoYXIgKmNwPSh1bnNpZ25lZCBjaGFyICopZDsKLSAKLSAJ CQlmb3IgKGk9MDtpPDI1NjtpKyspIGNwW2ldPWk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9j cnlwdG8vcmlwZW1kL3JpcGVtZC5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JpcGVtZC9y aXBlbWQuaAotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yaXBlbWQvcmlwZW1kLmguZmlwcwky MDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9yaXBlbWQvcmlwZW1kLmgJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAK LUBAIC05MSw2ICs5MSw5IEBAIHR5cGVkZWYgc3RydWN0IFJJUEVNRDE2MHN0YXRlX3N0Ci0gCXVu c2lnbmVkIGludCAgIG51bTsKLSAJfSBSSVBFTUQxNjBfQ1RYOwotIAotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLStpbnQgcHJpdmF0ZV9SSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKTsKLSsj ZW5kaWYKLSBpbnQgUklQRU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAqYyk7Ci0gaW50IFJJUEVN RDE2MF9VcGRhdGUoUklQRU1EMTYwX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxl bik7Ci0gaW50IFJJUEVNRDE2MF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgUklQRU1EMTYwX0NU WCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMu ZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKLS0tLSBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjEz LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yaXBlbWQvcm1kX2Rn c3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTU5LDYgKzU5LDEx IEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgInJtZF9sb2NsLmgiCi0gI2luY2x1 ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwot IAotIGNvbnN0IGNoYXIgUk1EMTYwX3ZlcnNpb25bXT0iUklQRS1NRDE2MCIgT1BFTlNTTF9WRVJT SU9OX1BURVhUOwotIAotQEAgLTY5LDcgKzc0LDcgQEAgY29uc3QgY2hhciBSTUQxNjBfdmVyc2lv bltdPSJSSVBFLU1EMTYwIgotICAgICAgdm9pZCByaXBlbWQxNjBfYmxvY2soUklQRU1EMTYwX0NU WCAqYywgdW5zaWduZWQgbG9uZyAqcCxzaXplX3QgbnVtKTsKLSAjICBlbmRpZgotIAotLWludCBS SVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChS SVBFTUQxNjApCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPkE9UklQRU1E MTYwX0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBz IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2EvcnNhX2VheS5jCi0tLS0gb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL3JzYS9yc2FfZWF5LmMuZmlwcwkyMDA4LTA5LTE0IDE1OjUxOjQ0LjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2EvcnNhX2VheS5jCTIwMTAtMDYtMDQg MTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtMTE0LDYgKzExNCwxMCBAQAotICNpbmNsdWRl IDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2luY2x1ZGUgPG9w ZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gI2lmbmRlZiBS U0FfTlVMTAotIAotQEAgLTEzOCw3ICsxNDIsNyBAQCBzdGF0aWMgUlNBX01FVEhPRCByc2FfcGtj czFfZWF5X21ldGg9ewotIAlCTl9tb2RfZXhwX21vbnQsIC8qIFhYWCBwcm9iYWJseSB3ZSBzaG91 bGQgbm90IHVzZSBNb250Z29tZXJ5IGlmICBlID09IDMgKi8KLSAJUlNBX2VheV9pbml0LAotIAlS U0FfZWF5X2ZpbmlzaCwKLS0JMCwgLyogZmxhZ3MgKi8KLSsJUlNBX0ZMQUdfRklQU19NRVRIT0Qs IC8qIGZsYWdzICovCi0gCU5VTEwsCi0gCTAsIC8qIHJzYV9zaWduICovCi0gCTAsIC8qIHJzYV92 ZXJpZnkgKi8KLUBAIC0xNTAsNiArMTU0LDE2IEBAIGNvbnN0IFJTQV9NRVRIT0QgKlJTQV9QS0NT MV9TU0xlYXkodm9pZCkKLSAJcmV0dXJuKCZyc2FfcGtjczFfZWF5X21ldGgpOwotIAl9Ci0gCi0r LyogVXNhZ2UgZXhhbXBsZTsKLSsgKiAgICBNT05UX0hFTFBFUihyc2EsIGJuX2N0eCwgcCwgcnNh LT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJyKTsKLSsgKi8KLSsjZGVm aW5lIE1PTlRfSEVMUEVSKHJzYSwgY3R4LCBtLCBwcmVfY29uZCwgZXJyX2luc3RyKSBcCi0rCWlm KChwcmVfY29uZCkgJiYgKChyc2EpLT5fbWV0aG9kX21vZF8jI20gPT0gTlVMTCkgJiYgXAotKwkJ CSFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCYoKHJzYSktPl9tZXRob2RfbW9kXyMjbSksIFwKLSsJ CQkJQ1JZUFRPX0xPQ0tfUlNBLCBcCi0rCQkJCShyc2EpLT5tLCAoY3R4KSkpIFwKLSsJCWVycl9p bnN0cgotKwotIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmxlbiwgY29u c3QgdW5zaWduZWQgY2hhciAqZnJvbSwKLSAJICAgICB1bnNpZ25lZCBjaGFyICp0bywgUlNBICpy c2EsIGludCBwYWRkaW5nKQotIAl7Ci1AQCAtMTU4LDYgKzE3MiwyMyBAQCBzdGF0aWMgaW50IFJT QV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsCi0gCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOwot IAlCTl9DVFggKmN0eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19t b2RlKCkpCi0rCQl7Ci0rCQlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJ RklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVT VF9GQUlMRUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWlmIChCTl9udW1fYml0cyhy c2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJCXsKLSsJCQlS U0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NN QUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5f bnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0g CQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09f TEFSR0UpOwotQEAgLTIyMyw5ICsyNTQsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2Vu Y3J5cHQoaW50IGZsCi0gCQlnb3RvIGVycjsKLSAJCX0KLSAKLS0JaWYgKHJzYS0+ZmxhZ3MgJiBS U0FfRkxBR19DQUNIRV9QVUJMSUMpCi0tCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJz YS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCi0tCQkJZ290 byBlcnI7Ci0rCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdf Q0FDSEVfUFVCTElDLCBnb3RvIGVycik7Ci0gCi0gCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhw KHJldCxmLHJzYS0+ZSxyc2EtPm4sY3R4LAotIAkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290byBl cnI7Ci1AQCAtMzU1LDYgKzM4NCwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNy eXB0KGludCBmCi0gCWludCBsb2NhbF9ibGluZGluZyA9IDA7Ci0gCUJOX0JMSU5ESU5HICpibGlu ZGluZyA9IE5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkp Ci0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJy KEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWlmIChCTl9udW1fYml0cyhyc2EtPm4p IDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJCXsKLSsJCQlSU0FlcnIo UlNBX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7 Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKChjdHg9Qk5f Q1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0gCWYg ICA9IEJOX0NUWF9nZXQoY3R4KTsKLUBAIC00MzIsOSArNDc4LDcgQEAgc3RhdGljIGludCBSU0Ff ZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQgZgotIAkJZWxzZQotIAkJCWQ9IHJzYS0+ZDsKLSAKLS0J CWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQotLQkJCWlmKCFCTl9NT05U X0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNh LT5uLCBjdHgpKQotLQkJCQlnb3RvIGVycjsKLSsJCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCBy c2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7Ci0gCi0gCQlpZiAo IXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChyZXQsZixkLHJzYS0+bixjdHgsCi0gCQkJCXJzYS0+X21l dGhvZF9tb2RfbikpIGdvdG8gZXJyOwotQEAgLTQ4OCw2ICs1MzIsMjMgQEAgc3RhdGljIGludCBS U0FfZWF5X3ByaXZhdGVfZGVjcnlwdChpbnQgZgotIAlpbnQgbG9jYWxfYmxpbmRpbmcgPSAwOwot IAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkK LSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsRklQU19S X0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlpZiAo Qk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykK LSsJCQl7Ci0rCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULCBSU0FfUl9L RVlfU0laRV9UT09fU01BTEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlm Ci0rCi0gCWlmKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOwotIAlCTl9D VFhfc3RhcnQoY3R4KTsKLSAJZiAgID0gQk5fQ1RYX2dldChjdHgpOwotQEAgLTU1NSw5ICs2MTYs NyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9kZWNyeXB0KGludCBmCi0gCQllbHNlCi0g CQkJZCA9IHJzYS0+ZDsKLSAKLS0JCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVC TElDKQotLQkJCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9u LCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKLS0JCQkJZ290byBlcnI7Ci0rCQlNT05U X0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywg Z290byBlcnIpOwotIAkJaWYgKCFyc2EtPm1ldGgtPmJuX21vZF9leHAocmV0LGYsZCxyc2EtPm4s Y3R4LAotIAkJCQlyc2EtPl9tZXRob2RfbW9kX24pKQotIAkJICBnb3RvIGVycjsKLUBAIC02MTcs NiArNjc2LDIzIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKLSAJ dW5zaWduZWQgY2hhciAqYnVmPU5VTEw7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0 ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19E RUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJZ290byBlcnI7Ci0rCQkJ fQotKwotKwkJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9N T0RVTFVTX0JJVFMpCi0rCQkJewotKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNS WVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0r CQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0Ff TUFYX01PRFVMVVNfQklUUykKLSAJCXsKLSAJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19E RUNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci1AQCAtNjY3LDkgKzc0Myw3IEBAIHN0 YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKLSAJCWdvdG8gZXJyOwotIAkJ fQotIAotLQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykKLS0JCWlmICgh Qk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19S U0EsIHJzYS0+biwgY3R4KSkKLS0JCQlnb3RvIGVycjsKLSsJTU9OVF9IRUxQRVIocnNhLCBjdHgs IG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKLSAKLSAJ aWYgKCFyc2EtPm1ldGgtPmJuX21vZF9leHAocmV0LGYscnNhLT5lLHJzYS0+bixjdHgsCi0gCQly c2EtPl9tZXRob2RfbW9kX24pKSBnb3RvIGVycjsKLUBAIC03MTcsNiArNzkxLDcgQEAgc3RhdGlj IGludCBSU0FfZWF5X21vZF9leHAoQklHTlVNICpyMCwgYwotIAlCSUdOVU0gKnIxLCptMSwqdnJm eTsKLSAJQklHTlVNIGxvY2FsX2RtcDEsbG9jYWxfZG1xMSxsb2NhbF9jLGxvY2FsX3IxOwotIAlC SUdOVU0gKmRtcDEsKmRtcTEsKmMsKnByMTsKLSsJaW50IGJuX2ZsYWdzOwotIAlpbnQgcmV0PTA7 Ci0gCi0gCUJOX0NUWF9zdGFydChjdHgpOwotQEAgLTcyNCw0MSArNzk5LDMxIEBAIHN0YXRpYyBp bnQgUlNBX2VheV9tb2RfZXhwKEJJR05VTSAqcjAsIGMKLSAJbTEgPSBCTl9DVFhfZ2V0KGN0eCk7 Ci0gCXZyZnkgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gCi0tCXsKLS0JCUJJR05VTSBsb2NhbF9wLCBs b2NhbF9xOwotLQkJQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMOwotLQotLQkJLyogTWFrZSBz dXJlIEJOX21vZF9pbnZlcnNlIGluIE1vbnRnb21lcnkgaW50aWFsaXphdGlvbiB1c2VzIHRoZQot LQkJICogQk5fRkxHX0NPTlNUVElNRSBmbGFnICh1bmxlc3MgUlNBX0ZMQUdfTk9fQ09OU1RUSU1F IGlzIHNldCkKLS0JCSAqLwotLQkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNU VElNRSkpCi0tCQkJewotLQkJCUJOX2luaXQoJmxvY2FsX3ApOwotLQkJCXAgPSAmbG9jYWxfcDsK LS0JCQlCTl93aXRoX2ZsYWdzKHAsIHJzYS0+cCwgQk5fRkxHX0NPTlNUVElNRSk7Ci0tCi0tCQkJ Qk5faW5pdCgmbG9jYWxfcSk7Ci0tCQkJcSA9ICZsb2NhbF9xOwotLQkJCUJOX3dpdGhfZmxhZ3Mo cSwgcnNhLT5xLCBCTl9GTEdfQ09OU1RUSU1FKTsKLS0JCQl9Ci0tCQllbHNlCi0tCQkJewotLQkJ CXAgPSByc2EtPnA7Ci0tCQkJcSA9IHJzYS0+cTsKLS0JCQl9Ci0rCS8qIE1ha2Ugc3VyZSBtb2Rf aW52ZXJzZSBpbiBtb250Z29tZXJleSBpbnRpYWxpemF0aW9uIHVzZSBjb3JyZWN0IAotKwkgKiBC Tl9GTEdfQ09OU1RUSU1FIGZsYWcuCi0rCSAqLwotKwlibl9mbGFncyA9IHJzYS0+cC0+ZmxhZ3M7 Ci0rCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQotKwkJewotKwkJ cnNhLT5wLT5mbGFncyB8PSBCTl9GTEdfQ09OU1RUSU1FOwotKwkJfQotKwlNT05UX0hFTFBFUihy c2EsIGN0eCwgcCwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJy KTsKLSsJLyogV2UgcmVzdG9yZSBibl9mbGFncyBiYWNrICovCi0rCXJzYS0+cC0+ZmxhZ3MgPSBi bl9mbGFnczsKLSAKLS0JCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSkK LS0JCQl7Ci0tCQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9k X3AsIENSWVBUT19MT0NLX1JTQSwgcCwgY3R4KSkKLS0JCQkJZ290byBlcnI7Ci0tCQkJaWYgKCFC Tl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX3EsIENSWVBUT19MT0NLX1JT QSwgcSwgY3R4KSkKLS0JCQkJZ290byBlcnI7Ci0tCQkJfQotLQl9Ci0rICAgICAgICAvKiBNYWtl IHN1cmUgbW9kX2ludmVyc2UgaW4gbW9udGdvbWVyZXkgaW50aWFsaXphdGlvbiB1c2UgY29ycmVj dAotKyAgICAgICAgICogQk5fRkxHX0NPTlNUVElNRSBmbGFnLgotKyAgICAgICAgICovCi0rCWJu X2ZsYWdzID0gcnNhLT5xLT5mbGFnczsKLSsJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05P X0NPTlNUVElNRSkpCi0rCQl7Ci0rCQlyc2EtPnEtPmZsYWdzIHw9IEJOX0ZMR19DT05TVFRJTUU7 Ci0rCQl9Ci0rCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBxLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdf Q0FDSEVfUFJJVkFURSwgZ290byBlcnIpOwotKwkvKiBXZSByZXN0b3JlIGJuX2ZsYWdzIGJhY2sg Ki8KLSsJcnNhLT5xLT5mbGFncyA9IGJuX2ZsYWdzOwkKLSAKLS0JaWYgKHJzYS0+ZmxhZ3MgJiBS U0FfRkxBR19DQUNIRV9QVUJMSUMpCi0tCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJz YS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCi0tCQkJZ290 byBlcnI7Ci0rCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdf Q0FDSEVfUFVCTElDLCBnb3RvIGVycik7Ci0gCi0gCS8qIGNvbXB1dGUgSSBtb2QgcSAqLwotIAlp ZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKLUBAIC04NzUsNiArOTQw LDkgQEAgZXJyOgotIAotIHN0YXRpYyBpbnQgUlNBX2VheV9pbml0KFJTQSAqcnNhKQotIAl7Ci0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0g CXJzYS0+ZmxhZ3N8PVJTQV9GTEFHX0NBQ0hFX1BVQkxJQ3xSU0FfRkxBR19DQUNIRV9QUklWQVRF OwotIAlyZXR1cm4oMSk7Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2Ev cnNhX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2FfZXJyLmMKLS0tLSBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzCTIwMDgtMTItMjkgMTc6MTE6 NTYuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2FfZXJy LmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMTEsOCArMTExLDEy IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9mdW5jdHNbXT0KLSB7RVJSX0ZVTkMo UlNBX0ZfUlNBX1BSSU5UX0ZQKSwJIlJTQV9wcmludF9mcCJ9LAotIHtFUlJfRlVOQyhSU0FfRl9S U0FfUFJJVl9ERUNPREUpLAkiUlNBX1BSSVZfREVDT0RFIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JT QV9QUklWX0VOQ09ERSksCSJSU0FfUFJJVl9FTkNPREUifSwKLSt7RVJSX0ZVTkMoUlNBX0ZfUlNB X1BSSVZBVEVfRU5DUllQVCksCSJSU0FfcHJpdmF0ZV9lbmNyeXB0In0sCi0ge0VSUl9GVU5DKFJT QV9GX1JTQV9QVUJfREVDT0RFKSwJIlJTQV9QVUJfREVDT0RFIn0sCi0re0VSUl9GVU5DKFJTQV9G X1JTQV9QVUJMSUNfREVDUllQVCksCSJSU0FfcHVibGljX2RlY3J5cHQifSwKLSB7RVJSX0ZVTkMo UlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HKSwJIlJTQV9zZXR1cF9ibGluZGluZyJ9LAotK3tFUlJf RlVOQyhSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9EKSwJIlJTQV9zZXRfZGVmYXVsdF9tZXRo b2QifSwKLSt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9NRVRIT0QpLAkiUlNBX3NldF9tZXRob2Qi fSwKLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJR04pLAkiUlNBX3NpZ24ifSwKLSB7RVJSX0ZVTkMo UlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcpLAkiUlNBX3NpZ25fQVNOMV9PQ1RFVF9T VFJJTkcifSwKLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1ZFUklGWSksCSJSU0FfdmVyaWZ5In0sCi1A QCAtMTU1LDEwICsxNTksMTIgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX3JlYXNv bnNbXQotIHtFUlJfUkVBU09OKFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCkgICAgLCJrZXkgc2l6 ZSB0b28gc21hbGwifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQpICAg ICwibGFzdCBvY3RldCBpbnZhbGlkIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfTU9EVUxVU19UT09f TEFSR0UpICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0sCi0re0VSUl9SRUFTT04oUlNBX1JfTk9O X0ZJUFNfTUVUSE9EKSAgICAgICAsIm5vbiBmaXBzIG1ldGhvZCJ9LAotIHtFUlJfUkVBU09OKFJT QV9SX05PX1BVQkxJQ19FWFBPTkVOVCkgICAgLCJubyBwdWJsaWMgZXhwb25lbnQifSwKLSB7RVJS X1JFQVNPTihSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HKSwibnVsbCBiZWZvcmUgYmxv Y2sgbWlzc2luZyJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9RKSAg LCJuIGRvZXMgbm90IGVxdWFsIHAgcSJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX09BRVBfREVDT0RJ TkdfRVJST1IpICAgLCJvYWVwIGRlY29kaW5nIGVycm9yIn0sCi0re0VSUl9SRUFTT04oUlNBX1Jf T1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSksIm9wZXJhdGlvbiBub3QgYWxsb3dl ZCBpbiBmaXBzIG1vZGUifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9PUEVSQVRJT05fTk9UX1NVUFBP UlRFRF9GT1JfVEhJU19LRVlUWVBFKSwib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMg a2V5dHlwZSJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVEKSAgLCJw YWRkaW5nIGNoZWNrIGZhaWxlZCJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX1BfTk9UX1BSSU1FKSAg ICAgICAgICAgLCJwIG5vdCBwcmltZSJ9LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRv L3JzYS9yc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9nZW4uYwot LS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMJMjAwNy0wMy0yOCAw MjoxNToyNy4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3Jz YV9nZW4uYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTY3LDYgKzY3 LDgyIEBACi0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4K LSAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLStzdGF0aWMgaW50 IGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAwOwotKwotK3ZvaWQgRklQU19jb3JydXB0X3JzYV9r ZXlnZW4odm9pZCkKLSsJewotKwlmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMTsKLSsJfQotKwot K2ludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSkKLSsJewotKwljb25zdCB1bnNpZ25lZCBjaGFy IHRic1tdID0gIlJTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsKLSsJdW5zaWduZWQgY2hhciAqY3Ri dWYgPSBOVUxMLCAqcHRidWYgPSBOVUxMOwotKwlpbnQgbGVuLCByZXQgPSAwOwotKwlFVlBfUEtF WSAqcGs7Ci0rCi0rCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCi0rCQlnb3RvIGVy cjsKLSsKLSsJRVZQX1BLRVlfc2V0MV9SU0EocGssIHJzYSk7Ci0rCi0rCS8qIFBlcmZvcm0gcGFp cndpc2UgY29uc2lzdGVuY3kgc2lnbmF0dXJlIHRlc3QgKi8KLSsJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01E X0NUWF9GTEFHX1BBRF9QS0NTMSwgTlVMTCkKLSsJCXx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIHRicywgLTEsCi0rCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFH X1BBRF9YOTMxLCBOVUxMKQotKwkJfHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJz LCAtMSwKLSsJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywg TlVMTCkpCi0rCQlnb3RvIGVycjsKLSsJLyogTm93IHBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVu Y3kgZW5jcnlwdC9kZWNyeXB0IHRlc3QgKi8KLSsJY3RidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ff c2l6ZShyc2EpKTsKLSsJaWYgKCFjdGJ1ZikKLSsJCWdvdG8gZXJyOwotKwotKwlsZW4gPSBSU0Ff cHVibGljX2VuY3J5cHQoc2l6ZW9mKHRicykgLSAxLCB0YnMsIGN0YnVmLCByc2EsIFJTQV9QS0NT MV9QQURESU5HKTsKLSsJaWYgKGxlbiA8PSAwKQotKwkJZ290byBlcnI7Ci0rCS8qIENoZWNrIGNp cGhlcnRleHQgZG9lc24ndCBtYXRjaCBwbGFpbnRleHQgKi8KLSsJaWYgKChsZW4gPT0gKHNpemVv Zih0YnMpIC0gMSkpICYmICFtZW1jbXAodGJzLCBjdGJ1ZiwgbGVuKSkKLSsJCWdvdG8gZXJyOwot KwlwdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOwotKwotKwlpZiAoIXB0YnVm KQotKwkJZ290byBlcnI7Ci0rCWxlbiA9IFJTQV9wcml2YXRlX2RlY3J5cHQobGVuLCBjdGJ1Ziwg cHRidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOwotKwlpZiAobGVuICE9IChzaXplb2YodGJz KSAtIDEpKQotKwkJZ290byBlcnI7Ci0rCWlmIChtZW1jbXAocHRidWYsIHRicywgbGVuKSkKLSsJ CWdvdG8gZXJyOwotKwotKwlyZXQgPSAxOwotKwotKwlpZiAoIXB0YnVmKQotKwkJZ290byBlcnI7 Ci0rCQotKwllcnI6Ci0rCWlmIChyZXQgPT0gMCkKLSsJCXsKLSsJCWZpcHNfc2V0X3NlbGZ0ZXN0 X2ZhaWwoKTsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfQ0hFQ0tfUlNBLEZJUFNfUl9QQUlSV0lT RV9URVNUX0ZBSUxFRCk7Ci0rCQl9Ci0rCi0rCWlmIChjdGJ1ZikKLSsJCU9QRU5TU0xfZnJlZShj dGJ1Zik7Ci0rCWlmIChwdGJ1ZikKLSsJCU9QRU5TU0xfZnJlZShwdGJ1Zik7Ci0rCWlmIChwaykK LSsJCUVWUF9QS0VZX2ZyZWUocGspOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rI2VuZGlmCi0g Ci0gc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIGludCBiaXRzLCBCSUdO VU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYik7Ci0gCi1AQCAtOTAsNiArMTY2LDIzIEBAIHN0YXRp YyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCAKLSAJaW50IGJpdHNwLGJpdHNxLG9r PSAtMSxuPTA7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQot KwkgICAgCXsKLSsJCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19S X0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIAlyZXR1cm4gMDsKLSsJICAgIAl9Ci0rCi0r CQlpZiAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKLSsJCSAgICB7 Ci0rCQkgICAgRklQU2VycihGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOLEZJUFNfUl9LRVlfVE9P X1NIT1JUKTsKLSsJCSAgICByZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWN0 eD1CTl9DVFhfbmV3KCk7Ci0gCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9z dGFydChjdHgpOwotQEAgLTIwMSw2ICsyOTQsMTcgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9r ZXlnZW4oUlNBICpyc2EsIAotIAkJcCA9IHJzYS0+cDsKLSAJaWYgKCFCTl9tb2RfaW52ZXJzZShy c2EtPmlxbXAscnNhLT5xLHAsY3R4KSkgZ290byBlcnI7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoZmlwc19yc2FfcGFpcndpc2VfZmFp bCkKLSsJCQlCTl9hZGRfd29yZChyc2EtPm4sIDEpOwotKwotKwkJaWYoIWZpcHNfY2hlY2tfcnNh KHJzYSkpCi0rCQkgICAgZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCW9rPTE7Ci0gZXJy OgotIAlpZiAob2sgPT0gLTEpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3Jz YS5oLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2EuaAotLS0tIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9yc2EvcnNhLmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE0LjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2EvcnNhLmgJMjAxMC0wNi0wNCAxMjoy NToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC03NCw2ICs3NCwyMSBAQAotICNlcnJvciBSU0EgaXMg ZGlzYWJsZWQuCi0gI2VuZGlmCi0gCi0rLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgUlNBIG1l dGhvZCBpcyBGSVBTIGNvbXBsaWFudCBhbmQgY2FuIGJlIHVzZWQKLSsgKiBpbiBGSVBTIG1vZGUu IFRoaXMgaXMgc2V0IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1ldGhvZC4gSWYgYW4KLSsgKiBh cHBsaWNhdGlvbiBzZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3duIG1ldGhvZHMgaXQgaXMgaXRzIHJl cG9zaWJpbGl0eQotKyAqIHRvIGVuc3VyZSB0aGUgcmVzdWx0IGlzIGNvbXBsaWFudC4KLSsgKi8K LSsKLSsjZGVmaW5lIFJTQV9GTEFHX0ZJUFNfTUVUSE9ECQkJMHgwNDAwCi0rCi0rLyogSWYgdGhp cyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1v ZGUgYXJlCi0rICogcGVybWl0dGVkIGl0IGlzIHRoZW4gdGhlIGFwcGxpY2F0aW9ucyByZXNwb25z aWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUKLSsgKiB1c2FnZSBpcyBjb21wbGlhbnQuCi0rICov Ci0rCi0rI2RlZmluZSBSU0FfRkxBR19OT05fRklQU19BTExPVwkJCTB4MDQwMAotKwotICNpZmRl ZiAgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKLSAjZW5kaWYKLUBAIC0xNjQsNiArMTc5LDgg QEAgc3RydWN0IHJzYV9zdAotICMgZGVmaW5lIE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMJ MTYzODQKLSAjZW5kaWYKLSAKLSsjZGVmaW5lIE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNf QklUUyAxMDI0Ci0rCi0gI2lmbmRlZiBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMKLSAj IGRlZmluZSBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMJMzA3MgotICNlbmRpZgotQEAg LTI2Nyw2ICsyODQsMTEgQEAgUlNBICoJUlNBX2dlbmVyYXRlX2tleShpbnQgYml0cywgdW5zaWdu ZQotIAotIC8qIE5ldyB2ZXJzaW9uICovCi0gaW50CVJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpy c2EsIGludCBiaXRzLCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7Ci0raW50IFJTQV9YOTMxX2Rl cml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklH TlVNICpxMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0 IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBj b25zdCBCSUdOVU0gKlhxLAotKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKLStp bnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgY29uc3QgQklH TlVNICplLCBCTl9HRU5DQiAqY2IpOwotIAotIGludAlSU0FfY2hlY2tfa2V5KGNvbnN0IFJTQSAq KTsKLSAJLyogbmV4dCA0IHJldHVybiAtMSBvbiBlcnJvciAqLwotQEAgLTQzOCw4ICs0NjAsMTIg QEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIFJTQV9GX1JTQV9Q UklOVF9GUAkJCQkgMTE2Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFJJVl9ERUNPREUJCQkJIDEzNwot ICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfRU5DT0RFCQkJCSAxMzgKLSsjZGVmaW5lIFJTQV9GX1JT QV9QUklWQVRFX0VOQ1JZUFQJCQkgMTQ4Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFVCX0RFQ09ERQkJ CQkgMTM5Ci0rI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQJCQkgMTQ5Ci0gI2RlZmlu ZSBSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcJCQkgMTM2Ci0rI2RlZmluZSBSU0FfRl9SU0FfU0VU X0RFRkFVTFRfTUVUSE9ECQkJIDE1MAotKyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9NRVRIT0QJCQkJ IDE1MQotICNkZWZpbmUgUlNBX0ZfUlNBX1NJR04JCQkJCSAxMTcKLSAjZGVmaW5lIFJTQV9GX1JT QV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HCQkgMTE4Ci0gI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZ CQkJCSAxMTkKLUBAIC00NzksMTAgKzUwNSwxMiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdz KHZvaWQpOwotICNkZWZpbmUgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDEyMAotICNkZWZp bmUgUlNBX1JfTEFTVF9PQ1RFVF9JTlZBTElECQkJIDEzNAotICNkZWZpbmUgUlNBX1JfTU9EVUxV U19UT09fTEFSR0UJCQkJIDEwNQotKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAx NDkKLSAjZGVmaW5lIFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVAkJCSAxNDAKLSAjZGVmaW5lIFJT QV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcJCQkgMTEzCi0gI2RlZmluZSBSU0FfUl9OX0RP RVNfTk9UX0VRVUFMX1BfUQkJCSAxMjcKLSAjZGVmaW5lIFJTQV9SX09BRVBfREVDT0RJTkdfRVJS T1IJCQkgMTIxCi0rI2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19N T0RFCSAxNTAKLSAjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElT X0tFWVRZUEUJIDE0OAotICNkZWZpbmUgUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQJCQkgMTE0 Ci0gI2RlZmluZSBSU0FfUl9QX05PVF9QUklNRQkJCQkgMTI4Ci1kaWZmIC11cCBvcGVuc3NsLTEu MC4wYS9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9yc2Ev cnNhX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcwky MDA5LTEyLTA5IDE0OjM4OjIwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBhL2Ny eXB0by9yc2EvcnNhX2xpYi5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1A QCAtODAsNiArODAsMTMgQEAgUlNBICpSU0FfbmV3KHZvaWQpCi0gCi0gdm9pZCBSU0Ffc2V0X2Rl ZmF1bHRfbWV0aG9kKGNvbnN0IFJTQV9NRVRIT0QgKm1ldGgpCi0gCXsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQ U19NRVRIT0QpKQotKwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0Qs IFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rI2VuZGlmCi0gCWRl ZmF1bHRfUlNBX21ldGggPSBtZXRoOwotIAl9Ci0gCi1AQCAtMTExLDYgKzExOCwxMyBAQCBpbnQg UlNBX3NldF9tZXRob2QoUlNBICpyc2EsIGNvbnN0IFJTQV9NCi0gCS8qIE5COiBUaGUgY2FsbGVy IGlzIHNwZWNpZmljYWxseSBzZXR0aW5nIGEgbWV0aG9kLCBzbyBpdCdzIG5vdCB1cCB0byB1cwot IAkgKiB0byBkZWFsIHdpdGggd2hpY2ggRU5HSU5FIGl0IGNvbWVzIGZyb20uICovCi0gCWNvbnN0 IFJTQV9NRVRIT0QgKm10bXA7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2Rl KCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKLSsJCXsKLSsJCVJT QWVycihSU0FfRl9SU0FfU0VUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJl dHVybiAwOwotKwkJfQotKyNlbmRpZgotIAltdG1wID0gcnNhLT5tZXRoOwotIAlpZiAobXRtcC0+ ZmluaXNoKSBtdG1wLT5maW5pc2gocnNhKTsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi1A QCAtMTYzLDYgKzE3NywxOCBAQCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQot IAkJCX0KLSAJCX0KLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21v ZGUoKSAmJiAhKHJldC0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCi0rCQl7 Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX05FV19NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7 Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotKwkJaWYgKHJldC0+ZW5naW5lKQotKwkJCUVO R0lORV9maW5pc2gocmV0LT5lbmdpbmUpOwotKyNlbmRpZgotKwkJT1BFTlNTTF9mcmVlKHJldCk7 Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5kaWYKLSAKLSAJcmV0LT5wYWQ9MDsKLSAJcmV0 LT52ZXJzaW9uPTA7Ci1AQCAtMjk0LDYgKzMyMCwxMyBAQCBpbnQgUlNBX3B1YmxpY19lbmNyeXB0 KGludCBmbGVuLCBjb25zdCB1Ci0gaW50IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50IGZsZW4sIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAotIAkgICAgIFJTQSAq cnNhLCBpbnQgcGFkZGluZykKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19t b2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotKwkJewot KwkJUlNBZXJyKFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1Rf QUxMT1dFRF9JTl9GSVBTX01PREUpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gCXJl dHVybihyc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhmbGVuLCBmcm9tLCB0bywgcnNhLCBwYWRkaW5n KSk7Ci0gCX0KLSAKLUBAIC0zMDYsNiArMzM5LDEzIEBAIGludCBSU0FfcHJpdmF0ZV9kZWNyeXB0 KGludCBmbGVuLCBjb25zdCAKLSBpbnQgUlNBX3B1YmxpY19kZWNyeXB0KGludCBmbGVuLCBjb25z dCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBjaGFyICp0bywKLSAJICAgICBSU0EgKnJz YSwgaW50IHBhZGRpbmcpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfbW9k ZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJCXsKLSsJ CVJTQWVycihSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxM T1dFRF9JTl9GSVBTX01PREUpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gCXJldHVy bihyc2EtPm1ldGgtPnJzYV9wdWJfZGVjKGZsZW4sIGZyb20sIHRvLCByc2EsIHBhZGRpbmcpKTsK LSAJfQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jLmZp cHMgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCi0tLS0gb3BlbnNzbC0xLjAu MGEvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jLmZpcHMJMjAwNy0wNC0yNCAwMzowNTo0Mi4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vcnNhL3JzYV9zaWduLmMJMjAxMC0w Ni0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMzAsNyArMTMwLDggQEAgaW50IFJT QV9zaWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaAotIAkJaTJkX1g1MDlfU0lHKCZzaWcs JnApOwotIAkJcz10bXBzOwotIAl9Ci0tCWk9UlNBX3ByaXZhdGVfZW5jcnlwdChpLHMsc2lncmV0 LHJzYSxSU0FfUEtDUzFfUEFERElORyk7Ci0rCS8qIE5COiBjYWxsIHVuZGVybHlpbmcgbWV0aG9k IGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tpbmcgKi8KLSsJaSA9IHJzYS0+bWV0aC0+cnNh X3ByaXZfZW5jID8gcnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMoaSxzLHNpZ3JldCxyc2EsUlNBX1BL Q1MxX1BBRERJTkcpIDogMDsKLSAJaWYgKGkgPD0gMCkKLSAJCXJldD0wOwotIAllbHNlCi1AQCAt MTYxLDggKzE2Miw4IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2kK LSAKLSAJaWYoKGR0eXBlID09IE5JRF9tZDVfc2hhMSkgJiYgcm0pCi0gCQl7Ci0tCQlpID0gUlNB X3B1YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLAotLQkJCQkJc2lnYnVmLHJtLHJzYSxSU0FfUEtD UzFfUEFERElORyk7Ci0rCQlpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+ cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sCi0rCQkJCQlzaWdidWYscm0scnNhLFJTQV9QS0NTMV9Q QURESU5HKSA6IDA7Ci0gCQlpZiAoaSA8PSAwKQotIAkJCXJldHVybiAwOwotIAkJKnBybV9sZW4g PSBpOwotQEAgLTE3OSw3ICsxODAsOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBj b25zdCB1bnNpCi0gCQkJUlNBZXJyKFJTQV9GX0lOVF9SU0FfVkVSSUZZLFJTQV9SX0lOVkFMSURf TUVTU0FHRV9MRU5HVEgpOwotIAkJCWdvdG8gZXJyOwotIAl9Ci0tCWk9UlNBX3B1YmxpY19kZWNy eXB0KChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxSU0FfUEtDUzFfUEFERElORyk7Ci0rCS8qIE5C OiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tpbmcg Ki8KLSsJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJzYV9wdWJfZGVj KChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAwOwotIAotIAlp ZiAoaSA8PSAwKSBnb3RvIGVycjsKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9z ZWVkL3NlZWQuYy5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zZWVkL3NlZWQuYwotLS0tIG9w ZW5zc2wtMS4wLjBhL2NyeXB0by9zZWVkL3NlZWQuYy5maXBzCTIwMDgtMTItMTYgMDg6NDE6MjEu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NlZWQvc2VlZC5jCTIw MTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtMzQsNiArMzQsOSBAQAotIAot ICNpbmNsdWRlIDxvcGVuc3NsL3NlZWQuaD4KLSAjaW5jbHVkZSAic2VlZF9sb2NsLmgiCi0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAK LSBzdGF0aWMgY29uc3Qgc2VlZF93b3JkIFNTWzRdWzI1Nl0gPSB7CXsKLSAJMHgyOTg5YTFhOCwg MHgwNTg1ODE4NCwgMHgxNmM2ZDJkNCwgMHgxM2MzZDNkMCwgMHgxNDQ0NTA1NCwgMHgxZDBkMTEx YywgMHgyYzhjYTBhYywgMHgyNTA1MjEyNCwKLUBAIC0xOTMsNyArMTk2LDE4IEBAIHN0YXRpYyBj b25zdCBzZWVkX3dvcmQgS0NbXSA9IHsKLSAJS0M4LAlLQzksCUtDMTAsCUtDMTEsCUtDMTIsCUtD MTMsCUtDMTQsCUtDMTUJfTsKLSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0gdm9p ZCBTRUVEX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciByYXdrZXlbU0VFRF9LRVlfTEVOR1RI XSwgU0VFRF9LRVlfU0NIRURVTEUgKmtzKQotKyAgICAgICAgewotKyAgICAgICAgaWYgKEZJUFNf bW9kZSgpKQotKyAgICAgICAgICAgICAgICBGSVBTX0JBRF9BQk9SVChTRUVEKQotKyAgICAgICAg cHJpdmF0ZV9TRUVEX3NldF9rZXkocmF3a2V5LCBrcyk7Ci0rICAgICAgICB9Ci0rCi0rdm9pZCBw cml2YXRlX1NFRURfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyIHJhd2tleVtTRUVEX0tFWV9M RU5HVEhdLCBTRUVEX0tFWV9TQ0hFRFVMRSAqa3MpCi0rI2Vsc2UKLSt2b2lkIFNFRURfc2V0X2tl eShjb25zdCB1bnNpZ25lZCBjaGFyIHJhd2tleVtTRUVEX0tFWV9MRU5HVEhdLCBTRUVEX0tFWV9T Q0hFRFVMRSAqa3MpCi0rI2VuZGlmCi0gewotIAlzZWVkX3dvcmQgeDEsIHgyLCB4MywgeDQ7Ci0g CXNlZWRfd29yZCB0MCwgdDE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2VlZC9z ZWVkLmguZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2VlZC9zZWVkLmgKLS0tLSBvcGVuc3Ns LTEuMC4wYS9jcnlwdG8vc2VlZC9zZWVkLmguZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE0LjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zZWVkL3NlZWQuaAkyMDEwLTA2 LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTExNyw2ICsxMTcsOSBAQCB0eXBlZGVm IHN0cnVjdCBzZWVkX2tleV9zdCB7Ci0gfSBTRUVEX0tFWV9TQ0hFRFVMRTsKLSAKLSAKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rdm9pZCBwcml2YXRlX1NFRURfc2V0X2tleShjb25zdCB1bnNpZ25l ZCBjaGFyIHJhd2tleVtTRUVEX0tFWV9MRU5HVEhdLCBTRUVEX0tFWV9TQ0hFRFVMRSAqa3MpOwot KyNlbmRpZgotIHZvaWQgU0VFRF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgcmF3a2V5W1NF RURfS0VZX0xFTkdUSF0sIFNFRURfS0VZX1NDSEVEVUxFICprcyk7Ci0gCi0gdm9pZCBTRUVEX2Vu Y3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciBzW1NFRURfQkxPQ0tfU0laRV0sIHVuc2lnbmVkIGNo YXIgZFtTRUVEX0JMT0NLX1NJWkVdLCBjb25zdCBTRUVEX0tFWV9TQ0hFRFVMRSAqa3MpOwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGFfZGdzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMGEvY3J5cHRvL3NoYS9zaGFfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3No YS9zaGFfZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMJMjAxMC0wNi0wNCAxMjoyNTox NS4wMDAwMDAwMDAgKzAyMDAKLUBAIC01Nyw2ICs1NywxMiBAQAotICAqLwotIAotICNpbmNsdWRl IDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0r I2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYK LSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19T SEEwKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkKLSAKLSAjdW5kZWYgIFNIQV8xCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYS5oLmZpcHMgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL3NoYS9zaGEuaAotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zaGEvc2hhLmguZmlw cwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9zaGEvc2hhLmgJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBA IC0xMDYsNiArMTA2LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBc3RhdGVfc3QKLSAJfSBTSEFfQ1RY OwotIAotICNpZm5kZWYgT1BFTlNTTF9OT19TSEEwCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2lu dCBwcml2YXRlX1NIQV9Jbml0KFNIQV9DVFggKmMpOwotKyNlbmRpZgotIGludCBTSEFfSW5pdChT SEFfQ1RYICpjKTsKLSBpbnQgU0hBX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRh LCBzaXplX3QgbGVuKTsKLSBpbnQgU0hBX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RY ICpjKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBz IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zaGEvc2hhX2xvY2wuaAotLS0tIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCTIwMTAtMDYt MDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtMTIyLDggKzEyMiwxNSBAQCB2b2lkIHNo YTFfYmxvY2tfZGF0YV9vcmRlciAoU0hBX0NUWCAqYywgCi0gI2RlZmluZSBJTklUX0RBVEFfaDMg MHgxMDMyNTQ3NlVMCi0gI2RlZmluZSBJTklUX0RBVEFfaDQgMHhjM2QyZTFmMFVMCi0gCi0rI2lm IGRlZmluZWQoU0hBXzApICYmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQotK0ZJUFNfTk9OX0ZJUFNf TURfSW5pdChTSEEpCi0rI2Vsc2UKLSBpbnQgSEFTSF9JTklUIChTSEFfQ1RYICpjKQotKyNlbmRp ZgotIAl7Ci0rI2lmIGRlZmluZWQoU0hBXzEpICYmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQotKwlG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldCAoYywwLHNpemVvZigqYykp OwotIAljLT5oMD1JTklUX0RBVEFfaDA7Ci0gCWMtPmgxPUlOSVRfREFUQV9oMTsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zaGEvc2hhMWRnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBh L2NyeXB0by9zaGEvc2hhMWRnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zaGEvc2hh MWRnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTQuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGExZGdzdC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAw MDAwMDAwICswMjAwCi1AQCAtNjMsNiArNjMsMTAgQEAKLSAjZGVmaW5lIFNIQV8xCi0gCi0gI2lu Y2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotIGNvbnN0IGNoYXIgU0hBMV92ZXJz aW9uW109IlNIQTEiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjBhL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hh L3NoYTI1Ni5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzCTIw MDctMDEtMjEgMTQ6MDc6MTQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL3NoYS9zaGEyNTYuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAg LTEyLDEyICsxMiwxOSBAQAotIAotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotICNpbmNs dWRlIDxvcGVuc3NsL3NoYS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4K LSAKLSBjb25zdCBjaGFyIFNIQTI1Nl92ZXJzaW9uW109IlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lP Tl9QVEVYVDsKLSAKLSBpbnQgU0hBMjI0X0luaXQgKFNIQTI1Nl9DVFggKmMpCi0gCXsKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVt c2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPmhbMF09MHhjMTA1OWVkOFVMOwljLT5oWzFdPTB4 MzY3Y2Q1MDdVTDsKLSAJYy0+aFsyXT0weDMwNzBkZDE3VUw7CWMtPmhbM109MHhmNzBlNTkzOVVM OwotQEAgLTI5LDYgKzM2LDkgQEAgaW50IFNIQTIyNF9Jbml0IChTSEEyNTZfQ1RYICpjKQotIAot IGludCBTSEEyNTZfSW5pdCAoU0hBMjU2X0NUWCAqYykKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQgKGMsMCxzaXpl b2YoKmMpKTsKLSAJYy0+aFswXT0weDZhMDllNjY3VUw7CWMtPmhbMV09MHhiYjY3YWU4NVVMOwot IAljLT5oWzJdPTB4M2M2ZWYzNzJVTDsJYy0+aFszXT0weGE1NGZmNTNhVUw7Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4wYS9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvY3J5 cHRvL3NoYS9zaGE1MTIuYwotLS0tIG9wZW5zc2wtMS4wLjBhL2NyeXB0by9zaGEvc2hhNTEyLmMu ZmlwcwkyMDA5LTEyLTMwIDEyOjUzOjMzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjBhL2NyeXB0by9zaGEvc2hhNTEyLmMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAy MDAKLUBAIC01LDYgKzUsMTAgQEAKLSAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAqLwotICNpbmNsdWRlIDxv cGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEp ICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBNTEyKQotIC8qCi0gICogSU1QTEVNRU5UQVRJT04g Tk9URVMuCi1AQCAtNjEsNiArNjUsOSBAQCBjb25zdCBjaGFyIFNIQTUxMl92ZXJzaW9uW109IlNI QS01MTIiIE9QCi0gCi0gaW50IFNIQTM4NF9Jbml0IChTSEE1MTJfQ1RYICpjKQotIAl7Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gI2lm IGRlZmluZWQoU0hBNTEyX0FTTSkgJiYgKGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2Fy bSkpCi0gCS8qIG1haW50YWluIGR3b3JkIG9yZGVyIHJlcXVpcmVkIGJ5IGFzc2VtYmxlciBtb2R1 bGUgKi8KLSAJdW5zaWduZWQgaW50ICpoID0gKHVuc2lnbmVkIGludCAqKWMtPmg7Ci1AQCAtOTAs NiArOTcsOSBAQCBpbnQgU0hBMzg0X0luaXQgKFNIQTUxMl9DVFggKmMpCi0gCi0gaW50IFNIQTUx Ml9Jbml0IChTSEE1MTJfQ1RYICpjKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBT X3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gI2lmIGRlZmluZWQoU0hBNTEyX0FTTSkgJiYg KGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FybSkpCi0gCS8qIG1haW50YWluIGR3b3Jk IG9yZGVyIHJlcXVpcmVkIGJ5IGFzc2VtYmxlciBtb2R1bGUgKi8KLSAJdW5zaWduZWQgaW50ICpo ID0gKHVuc2lnbmVkIGludCAqKWMtPmg7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9jcnlwdG8v d2hybHBvb2wvd2hybHBvb2wuaC5maXBzIG9wZW5zc2wtMS4wLjBhL2NyeXB0by93aHJscG9vbC93 aHJscG9vbC5oCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3docmxwb29sL3docmxwb29sLmgu ZmlwcwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjBhL2NyeXB0by93aHJscG9vbC93aHJscG9vbC5oCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAw MDAwICswMjAwCi1AQCAtMjQsNiArMjQsOSBAQCB0eXBlZGVmIHN0cnVjdAl7Ci0gCX0gV0hJUkxQ T09MX0NUWDsKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fV0hJUkxQT09MCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotK2ludCBwcml2YXRlX1dISVJMUE9PTF9Jbml0KFdISVJMUE9PTF9DVFggKmMpOwot KyNlbmRpZgotIGludCBXSElSTFBPT0xfSW5pdAkoV0hJUkxQT09MX0NUWCAqYyk7Ci0gaW50IFdI SVJMUE9PTF9VcGRhdGUJKFdISVJMUE9PTF9DVFggKmMsY29uc3Qgdm9pZCAqaW5wLHNpemVfdCBi eXRlcyk7Ci0gdm9pZCBXSElSTFBPT0xfQml0VXBkYXRlKFdISVJMUE9PTF9DVFggKmMsY29uc3Qg dm9pZCAqaW5wLHNpemVfdCBiaXRzKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL2NyeXB0by93 aHJscG9vbC93cF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9jcnlwdG8vd2hybHBvb2wvd3Bf ZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5maXBz CTIwMDgtMTItMjkgMTM6MzU6NDkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGEv Y3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCAr MDIwMAotQEAgLTUzLDggKzUzLDEyIEBACi0gCi0gI2luY2x1ZGUgIndwX2xvY2wuaCIKLSAjaW5j bHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLS1pbnQgV0hJ UkxQT09MX0luaXQJKFdISVJMUE9PTF9DVFggKmMpCi0rRklQU19OT05fRklQU19NRF9Jbml0KFdI SVJMUE9PTCkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJcmV0dXJuKDEpOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvTWFrZWZpbGUub3JnLmZpcHMgb3BlbnNzbC0xLjAuMGEv TWFrZWZpbGUub3JnCi0tLS0gb3BlbnNzbC0xLjAuMGEvTWFrZWZpbGUub3JnLmZpcHMJMjAxMC0w Ni0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9NYWtlZmls ZS5vcmcJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMTAsNiArMTEw LDkgQEAgTElCS1JCNT0KLSBaTElCX0lOQ0xVREU9Ci0gTElCWkxJQj0KLSAKLSsjIE5vbi1lbXB0 eSBpZiBGSVBTIGVuYWJsZWQKLStGSVBTPQotKwotIERJUlM9ICAgY3J5cHRvIHNzbCBlbmdpbmVz IGFwcHMgdGVzdCB0b29scwotIEVOR0RJUlM9IGNjZ29zdAotIFNITElCRElSUz0gY3J5cHRvIHNz bAotQEAgLTEyMiw3ICsxMjUsNyBAQCBTRElSUz0gIFwKLSAJYm4gZWMgcnNhIGRzYSBlY2RzYSBk aCBlY2RoIGRzbyBlbmdpbmUgXAotIAlidWZmZXIgYmlvIHN0YWNrIGxoYXNoIHJhbmQgZXJyIFwK LSAJZXZwIGFzbjEgcGVtIHg1MDkgeDUwOXYzIGNvbmYgdHh0X2RiIHBrY3M3IHBrY3MxMiBjb21w IG9jc3AgdWkga3JiNSBcCi0tCWNtcyBwcXVldWUgdHMganBha2Ugc3RvcmUKLSsJY21zIHBxdWV1 ZSB0cyBqcGFrZSBzdG9yZSBmaXBzCi0gIyBrZWVwIGluIG1pbmQgdGhhdCB0aGUgYWJvdmUgbGlz dCBpcyBhZGp1c3RlZCBieSAuL0NvbmZpZ3VyZQotICMgYWNjb3JkaW5nIHRvIG5vLXh4eCBhcmd1 bWVudHMuLi4KLSAKLUBAIC0yMDYsNiArMjA5LDcgQEAgQlVJTERFTlY9CVBMQVRGT1JNPSckKFBM QVRGT1JNKScgUFJPQ0VTUwotIAkJUk1EMTYwX0FTTV9PQko9JyQoUk1EMTYwX0FTTV9PQkopJwkJ XAotIAkJV1BfQVNNX09CSj0nJChXUF9BU01fT0JKKScJCQlcCi0gCQlQRVJMQVNNX1NDSEVNRT0n JChQRVJMQVNNX1NDSEVNRSknCQlcCi0rCQlGSVBTPSIkJHtGSVBTOi0kKEZJUFMpfSIJXAotIAkJ VEhJUz0kJHtUSElTOi0kQH0gTUFLRUZJTEU9TWFrZWZpbGUgTUFLRU9WRVJSSURFUz0KLSAjIE1B S0VPVkVSUklERVM9IGVmZmVjdGl2ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2ggYW5kIFN5c1YtaXNo IG1ha2UgZmxhdm9ycywKLSAjIHdoaWNoIGluIHR1cm4gZWxpbWluYXRlcyBhbWJpZ3VpdGllcyBp biB2YXJpYWJsZSB0cmVhdG1lbnQgd2l0aCAtZS4KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL3Nz bC9zc2xfY2lwaC5jLmZpcHMgb3BlbnNzbC0xLjAuMGEvc3NsL3NzbF9jaXBoLmMKLS0tLSBvcGVu c3NsLTEuMC4wYS9zc2wvc3NsX2NpcGguYy5maXBzCTIwMDktMDktMTMgMDE6MTg6MDkuMDAwMDAw MDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGEvc3NsL3NzbF9jaXBoLmMJMjAxMC0wNi0wNCAx MjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC03MjcsNiArNzI3LDkgQEAgc3RhdGljIHZvaWQg c3NsX2NpcGhlcl9jb2xsZWN0X2NpcGhlcnMoYwotIAkJICAgICEoYy0+YWxnb3JpdGhtX2F1dGgg JiBkaXNhYmxlZF9hdXRoKSAmJgotIAkJICAgICEoYy0+YWxnb3JpdGhtX2VuYyAmIGRpc2FibGVk X2VuYykgJiYKLSAJCSAgICAhKGMtPmFsZ29yaXRobV9tYWMgJiBkaXNhYmxlZF9tYWMpICYmCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwkJCSghRklQU19tb2RlKCkgfHwgKGMtPmFsZ29fc3RyZW5n dGggJiBTU0xfRklQUykpICYmCi0rI2VuZGlmCi0gCQkgICAgIShjLT5hbGdvcml0aG1fc3NsICYg ZGlzYWJsZWRfc3NsKSkKLSAJCQl7Ci0gCQkJY29fbGlzdFtjb19saXN0X251bV0uY2lwaGVyID0g YzsKLUBAIC0xNDIzLDcgKzE0MjYsMTEgQEAgU1RBQ0tfT0YoU1NMX0NJUEhFUikgKnNzbF9jcmVh dGVfY2lwaGVyXwotIAkgKi8KLSAJZm9yIChjdXJyID0gaGVhZDsgY3VyciAhPSBOVUxMOyBjdXJy ID0gY3Vyci0+bmV4dCkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoY3Vyci0+ YWN0aXZlICYmICghRklQU19tb2RlKCkgfHwgY3Vyci0+Y2lwaGVyLT5hbGdvX3N0cmVuZ3RoICYg U1NMX0ZJUFMpKQotKyNlbHNlCi0gCQlpZiAoY3Vyci0+YWN0aXZlKQotKyNlbmRpZgotIAkJCXsK LSAJCQlza19TU0xfQ0lQSEVSX3B1c2goY2lwaGVyc3RhY2ssIGN1cnItPmNpcGhlcik7Ci0gI2lm ZGVmIENJUEhFUl9ERUJVRwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvc3NsL3NzbF9saWIuYy5m aXBzIG9wZW5zc2wtMS4wLjBhL3NzbC9zc2xfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9zc2wv c3NsX2xpYi5jLmZpcHMJMjAxMC0wMi0xNyAyMDo0Mzo0Ni4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4wYS9zc2wvc3NsX2xpYi5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAw ICswMjAwCi1AQCAtMTUyMSw2ICsxNTIxLDE0IEBAIFNTTF9DVFggKlNTTF9DVFhfbmV3KGNvbnN0 IFNTTF9NRVRIT0QgKm0KLSAJCXJldHVybihOVUxMKTsKLSAJCX0KLSAKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAobWV0aC0+dmVyc2lvbiA8IFRMUzFfVkVSU0lP TikpCQotKwkJewotKwkJU1NMZXJyKFNTTF9GX1NTTF9DVFhfTkVXLCBTU0xfUl9PTkxZX1RMU19B TExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5kaWYKLSsK LSAJaWYgKFNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHgoKSA8IDApCi0gCQl7Ci0g CQlTU0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsU1NMX1JfWDUwOV9WRVJJRklDQVRJT05fU0VUVVBf UFJPQkxFTVMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvc3NsL3NzbHRlc3QuYy5maXBzIG9w ZW5zc2wtMS4wLjBhL3NzbC9zc2x0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4wYS9zc2wvc3NsdGVz dC5jLmZpcHMJMjAxMC0wNi0wNCAxMjoyNToxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4wYS9zc2wvc3NsdGVzdC5jCTIwMTAtMDYtMDQgMTI6MjU6MTUuMDAwMDAwMDAwICswMjAw Ci1AQCAtMjY4LDYgKzI2OCw5IEBAIHN0YXRpYyB2b2lkIHN2X3VzYWdlKHZvaWQpCi0gCXsKLSAJ ZnByaW50ZihzdGRlcnIsInVzYWdlOiBzc2x0ZXN0IFthcmdzIC4uLl1cbiIpOwotIAlmcHJpbnRm KHN0ZGVyciwiXG4iKTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWZwcmludGYoc3RkZXJyLCIt RiAgICAgICAgICAgICAtIHJ1biB0ZXN0IGluIEZJUFMgbW9kZVxuIik7Ci0rI2VuZGlmCi0gCWZw cmludGYoc3RkZXJyLCIgLXNlcnZlcl9hdXRoICAtIGNoZWNrIHNlcnZlciBjZXJ0aWZpY2F0ZVxu Iik7Ci0gCWZwcmludGYoc3RkZXJyLCIgLWNsaWVudF9hdXRoICAtIGRvIGNsaWVudCBhdXRoZW50 aWNhdGlvblxuIik7Ci0gCWZwcmludGYoc3RkZXJyLCIgLXByb3h5ICAgICAgICAtIGFsbG93IHBy b3h5IGNlcnRpZmljYXRlc1xuIik7Ci1AQCAtNDg3LDYgKzQ5MCw5IEBAIGludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCi0gI2VuZGlmCi0gCVNUQUNLX09GKFNTTF9DT01QKSAqc3NsX2Nv bXBfbWV0aG9kcyA9IE5VTEw7Ci0gCWludCB0ZXN0X2NpcGhlcmxpc3QgPSAwOwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJaW50IGZpcHNfbW9kZT0wOwotKyNlbmRpZgotIAotIAl2ZXJib3NlID0g MDsKLSAJZGVidWcgPSAwOwotQEAgLTUxOCw3ICs1MjQsMTYgQEAgaW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKLSAKLSAJd2hpbGUgKGFyZ2MgPj0gMSkKLSAJCXsKLS0JCWlmCShzdHJj bXAoKmFyZ3YsIi1zZXJ2ZXJfYXV0aCIpID09IDApCi0rCQlpZighc3RyY21wKCphcmd2LCItRiIp KQotKwkJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQkJZmlwc19tb2RlPTE7Ci0rI2Vsc2UK LSsJCQlmcHJpbnRmKHN0ZGVyciwibm90IGNvbXBpbGVkIHdpdGggRklQUyBzdXBwb3J0LCBzbyBl eGl0dGluZyB3aXRob3V0IHJ1bm5pbmcuXG4iKTsKLSsJCQlFWElUKDApOwotKyNlbmRpZgotKwkJ CX0KLSsJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXNlcnZlcl9hdXRoIikgPT0gMCkKLSAJCQlz ZXJ2ZXJfYXV0aD0xOwotIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItY2xpZW50X2F1dGgiKSA9 PSAwKQotIAkJCWNsaWVudF9hdXRoPTE7Ci1AQCAtNzE0LDYgKzcyOSwyMCBAQCBiYWQ6Ci0gCQlF WElUKDEpOwotIAkJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoZmlwc19tb2RlKQot KwkJewotKwkJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQkJewotKwkJCUVSUl9sb2FkX2NyeXB0 b19zdHJpbmdzKCk7Ci0rCQkJRVJSX3ByaW50X2Vycm9ycyhCSU9fbmV3X2ZwKHN0ZGVycixCSU9f Tk9DTE9TRSkpOwotKwkJCUVYSVQoMSk7Ci0rCQkJfQotKwkJZWxzZQotKwkJCWZwcmludGYoc3Rk ZXJyLCIqKiogSU4gRklQUyBNT0RFICoqKlxuIik7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChw cmludF90aW1lKQotIAkJewotIAkJaWYgKCFiaW9fcGFpcikKLUBAIC0yMTU2LDEyICsyMTg1LDEy IEBAIHN0YXRpYyBpbnQgTVNfQ0FMTEJBQ0sgYXBwX3ZlcmlmeV9jYWxsYmEKLSAJCX0KLSAKLSAj aWZuZGVmIE9QRU5TU0xfTk9fWDUwOV9WRVJJRlkKLS0jIGlmZGVmIE9QRU5TU0xfRklQUwotKyMg aWYgMAotIAlpZihzLT52ZXJzaW9uID09IFRMUzFfVkVSU0lPTikKLSAJCUZJUFNfYWxsb3dfbWQ1 KDEpOwotICMgZW5kaWYKLSAJb2sgPSBYNTA5X3ZlcmlmeV9jZXJ0KGN0eCk7Ci0tIyBpZmRlZiBP UEVOU1NMX0ZJUFMKLSsjIGlmIDAKLSAJaWYocy0+dmVyc2lvbiA9PSBUTFMxX1ZFUlNJT04pCi0g CQlGSVBTX2FsbG93X21kNSgwKTsKLSAjIGVuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9z c2wvczIzX2NsbnQuYy5maXBzIG9wZW5zc2wtMS4wLjBhL3NzbC9zMjNfY2xudC5jCi0tLS0gb3Bl bnNzbC0xLjAuMGEvc3NsL3MyM19jbG50LmMuZmlwcwkyMDEwLTAyLTE2IDE1OjIwOjQwLjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBhL3NzbC9zMjNfY2xudC5jCTIwMTAtMDYtMDQg MTI6MjU6MTUuMDAwMDAwMDAwICswMjAwCi1AQCAtMzM0LDYgKzMzNCwxNCBAQCBzdGF0aWMgaW50 IHNzbDIzX2NsaWVudF9oZWxsbyhTU0wgKnMpCi0gCQkJdmVyc2lvbl9tYWpvciA9IFRMUzFfVkVS U0lPTl9NQUpPUjsKLSAJCQl2ZXJzaW9uX21pbm9yID0gVExTMV9WRVJTSU9OX01JTk9SOwotIAkJ CX0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQllbHNlIGlmKEZJUFNfbW9kZSgpKQotKwkJCXsK LSsJCQlTU0xlcnIoU1NMX0ZfU1NMMjNfQ0xJRU5UX0hFTExPLAotKwkJCQkJU1NMX1JfT05MWV9U TFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rI2VuZGlm Ci0gCQllbHNlIGlmICh2ZXJzaW9uID09IFNTTDNfVkVSU0lPTikKLSAJCQl7Ci0gCQkJdmVyc2lv bl9tYWpvciA9IFNTTDNfVkVSU0lPTl9NQUpPUjsKLUBAIC02MTcsNiArNjI1LDE0IEBAIHN0YXRp YyBpbnQgc3NsMjNfZ2V0X3NlcnZlcl9oZWxsbyhTU0wgKnMKLSAJCWlmICgocFsyXSA9PSBTU0wz X1ZFUlNJT05fTUlOT1IpICYmCi0gCQkJIShzLT5vcHRpb25zICYgU1NMX09QX05PX1NTTHYzKSkK LSAJCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJCWlmKEZJUFNfbW9kZSgpKQotKwkJCQl7 Ci0rCQkJCVNTTGVycihTU0xfRl9TU0wyM19HRVRfU0VSVkVSX0hFTExPLAotKwkJCQkJU1NMX1Jf T05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotKwkJCQlnb3RvIGVycjsKLSsJCQkJfQot KyNlbmRpZgotIAkJCXMtPnZlcnNpb249U1NMM19WRVJTSU9OOwotIAkJCXMtPm1ldGhvZD1TU0x2 M19jbGllbnRfbWV0aG9kKCk7Ci0gCQkJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvc3NsL3My M19zcnZyLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9zc2wvczIzX3NydnIuYwotLS0tIG9wZW5zc2wt MS4wLjBhL3NzbC9zMjNfc3J2ci5jLmZpcHMJMjAxMC0wMi0xNiAxNToyMDo0MC4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wYS9zc2wvczIzX3NydnIuYwkyMDEwLTA2LTA0IDEyOjI1 OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTM5Myw2ICszOTMsMTUgQEAgaW50IHNzbDIzX2dldF9j bGllbnRfaGVsbG8oU1NMICpzKQotIAkJCX0KLSAJCX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCWlmIChGSVBTX21vZGUoKSAmJiAocy0+dmVyc2lvbiA8IFRMUzFfVkVSU0lPTikpCi0rCQl7 Ci0rCQlTU0xlcnIoU1NMX0ZfU1NMMjNfR0VUX0NMSUVOVF9IRUxMTywKLSsJCQkJCVNTTF9SX09O TFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRp ZgotKwotIAlpZiAocy0+c3RhdGUgPT0gU1NMMjNfU1RfU1JfQ0xOVF9IRUxMT19CKQotIAkJewot IAkJLyogd2UgaGF2ZSBTU0x2My9UTFN2MSBpbiBhbiBTU0x2MiBoZWFkZXIKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjBhL3NzbC9zM19jbG50LmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9zc2wvczNfY2xu dC5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvc3NsL3MzX2NsbnQuYy5maXBzCTIwMTAtMDItMjggMDE6 MjQ6MjQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGEvc3NsL3MzX2NsbnQuYwky MDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTE1Niw2ICsxNTYsMTAgQEAK LSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ Ci0gI2luY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fREgK LSAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotICNlbmRpZgotQEAgLTE1NDYsNiArMTU1MCw4IEBA IGludCBzc2wzX2dldF9rZXlfZXhjaGFuZ2UoU1NMICpzKQotIAkJCXE9bWRfYnVmOwotIAkJCWZv ciAobnVtPTI7IG51bSA+IDA7IG51bS0tKQotIAkJCQl7Ci0rCQkJCUVWUF9NRF9DVFhfc2V0X2Zs YWdzKCZtZF9jdHgsCi0rCQkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotIAkJ CQlFVlBfRGlnZXN0SW5pdF9leCgmbWRfY3R4LChudW0gPT0gMikKLSAJCQkJCT9zLT5jdHgtPm1k NTpzLT5jdHgtPnNoYTEsIE5VTEwpOwotIAkJCQlFVlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsJihz LT5zMy0+Y2xpZW50X3JhbmRvbVswXSksU1NMM19SQU5ET01fU0laRSk7Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4wYS9zc2wvczNfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4wYS9zc2wvczNfZW5jLmMK LS0tLSBvcGVuc3NsLTEuMC4wYS9zc2wvczNfZW5jLmMuZmlwcwkyMDA5LTA0LTE2IDE5OjIyOjUw LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL3NzbC9zM19lbmMuYwkyMDEwLTA2 LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTE3MCw2ICsxNzAsNyBAQCBzdGF0aWMg aW50IHNzbDNfZ2VuZXJhdGVfa2V5X2Jsb2NrKFNTTCAqCi0gI2VuZGlmCi0gCWs9MDsKLSAJRVZQ X01EX0NUWF9pbml0KCZtNSk7Ci0rCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtNSwgRVZQX01EX0NU WF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJRVZQX01EX0NUWF9pbml0KCZzMSk7Ci0gCWZvciAo aT0wOyAoaW50KWk8bnVtOyBpKz1NRDVfRElHRVNUX0xFTkdUSCkKLSAJCXsKLUBAIC02MTQsNiAr NjE1LDggQEAgaW50IHNzbDNfZGlnZXN0X2NhY2hlZF9yZWNvcmRzKFNTTCAqcykKLSAJCWlmICgo bWFzayAmIHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtMikgJiYgbWQpIAotIAkJCXsK LSAJCQlzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV09RVZQX01EX0NUWF9jcmVhdGUoKTsKLSsJCQlF VlBfTURfQ1RYX3NldF9mbGFncyhzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0sCi0rCQkJCUVWUF9N RF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7Ci0gCQkJRVZQX0RpZ2VzdEluaXRfZXgocy0+czMt PmhhbmRzaGFrZV9kZ3N0W2ldLG1kLE5VTEwpOwotIAkJCUVWUF9EaWdlc3RVcGRhdGUocy0+czMt PmhhbmRzaGFrZV9kZ3N0W2ldLGhkYXRhLGhkYXRhbGVuKTsKLSAJCQl9IAotQEAgLTY3MCw2ICs2 NzMsNyBAQCBzdGF0aWMgaW50IHNzbDNfaGFuZHNoYWtlX21hYyhTU0wgKnMsIGluCi0gCQlyZXR1 cm4gMDsKLSAJfQkKLSAJRVZQX01EX0NUWF9pbml0KCZjdHgpOwotKwlFVlBfTURfQ1RYX3NldF9m bGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotIAlFVlBfTURfQ1RY X2NvcHlfZXgoJmN0eCxkKTsKLSAJbj1FVlBfTURfQ1RYX3NpemUoJmN0eCk7Ci0gCWlmIChuIDwg MCkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjBhL3NzbC9zM19zcnZyLmMuZmlwcyBvcGVuc3NsLTEu MC4wYS9zc2wvczNfc3J2ci5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvc3NsL3MzX3NydnIuYy5maXBz CTIwMTAtMDItMjggMDA6MDQ6MTAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMGEv c3NsL3MzX3NydnIuYwkyMDEwLTA2LTA0IDEyOjI1OjE1LjAwMDAwMDAwMCArMDIwMAotQEAgLTE3 NTIsNiArMTc1Miw4IEBAIGludCBzc2wzX3NlbmRfc2VydmVyX2tleV9leGNoYW5nZShTU0wgKnMK LSAJCQkJaj0wOwotIAkJCQlmb3IgKG51bT0yOyBudW0gPiAwOyBudW0tLSkKLSAJCQkJCXsKLSsJ CQkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgsCi0rCQkJCQkJRVZQX01EX0NUWF9GTEFH X05PTl9GSVBTX0FMTE9XKTsKLSAJCQkJCUVWUF9EaWdlc3RJbml0X2V4KCZtZF9jdHgsKG51bSA9 PSAyKQotIAkJCQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNoYTEsIE5VTEwpOwotIAkJCQkJRVZQ X0RpZ2VzdFVwZGF0ZSgmbWRfY3R4LCYocy0+czMtPmNsaWVudF9yYW5kb21bMF0pLFNTTDNfUkFO RE9NX1NJWkUpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGEvc3NsL3QxX2VuYy5jLmZpcHMgb3Bl bnNzbC0xLjAuMGEvc3NsL3QxX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAuMGEvc3NsL3QxX2VuYy5j LmZpcHMJMjAxMC0wNS0xNyAxMzoyNjo1Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4wYS9zc2wvdDFfZW5jLmMJMjAxMC0wNi0wNCAxMzoyODowMS4wMDAwMDAwMDAgKzAyMDAKLUBA IC0xNzAsNiArMTcwLDggQEAgc3RhdGljIGludCB0bHMxX1BfaGFzaChjb25zdCBFVlBfTUQgKm1k LAotIAotIAlITUFDX0NUWF9pbml0KCZjdHgpOwotIAlITUFDX0NUWF9pbml0KCZjdHhfdG1wKTsK LSsJSE1BQ19DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExP Vyk7Ci0rCUhNQUNfQ1RYX3NldF9mbGFncygmY3R4X3RtcCwgRVZQX01EX0NUWF9GTEFHX05PTl9G SVBTX0FMTE9XKTsKLSAJaWYgKCFITUFDX0luaXRfZXgoJmN0eCxzZWMsc2VjX2xlbixtZCwgTlVM TCkpCi0gCQlnb3RvIGVycjsKLSAJaWYgKCFITUFDX0luaXRfZXgoJmN0eF90bXAsc2VjLHNlY19s ZW4sbWQsIE5VTEwpKQoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjBkLWNtcy1rZXlpZC5wYXRj aCBiL29wZW5zc2wtMS4wLjBkLWNtcy1rZXlpZC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggOWZlOTM1OC4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wZC1jbXMta2V5aWQu cGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wZC9hcHBzL2Ntcy5jLmtleWlkIG9wZW5zc2wtMS4wLjBkL2FwcHMvY21zLmMKLS0tLSBvcGVu c3NsLTEuMC4wZC9hcHBzL2Ntcy5jLmtleWlkCTIwMDktMTAtMTggMTY6NDI6MjYuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMGQvYXBwcy9jbXMuYwkyMDExLTA3LTI2IDEyOjU2OjQ4 LjAwMDAwMDAwMCArMDIwMAotQEAgLTYxOCw3ICs2MTgsNyBAQCBpbnQgTUFJTihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCi0gCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLWNlcnRzb3V0IGZpbGUgY2Vy dGlmaWNhdGUgb3V0cHV0IGZpbGVcbiIpOwotIAkJQklPX3ByaW50ZiAoYmlvX2VyciwgIi1zaWdu ZXIgZmlsZSAgIHNpZ25lciBjZXJ0aWZpY2F0ZSBmaWxlXG4iKTsKLSAJCUJJT19wcmludGYgKGJp b19lcnIsICItcmVjaXAgIGZpbGUgICByZWNpcGllbnQgY2VydGlmaWNhdGUgZmlsZSBmb3IgZGVj cnlwdGlvblxuIik7Ci0tCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLXNrZXlpZCAgICAgICAgdXNl IHN1YmplY3Qga2V5IGlkZW50aWZpZXJcbiIpOwotKwkJQklPX3ByaW50ZiAoYmlvX2VyciwgIi1r ZXlpZCAgICAgICAgIHVzZSBzdWJqZWN0IGtleSBpZGVudGlmaWVyXG4iKTsKLSAJCUJJT19wcmlu dGYgKGJpb19lcnIsICItaW4gZmlsZSAgICAgICBpbnB1dCBmaWxlXG4iKTsKLSAJCUJJT19wcmlu dGYgKGJpb19lcnIsICItaW5mb3JtIGFyZyAgICBpbnB1dCBmb3JtYXQgU01JTUUgKGRlZmF1bHQp LCBQRU0gb3IgREVSXG4iKTsKLSAJCUJJT19wcmludGYgKGJpb19lcnIsICItaW5rZXkgZmlsZSAg ICBpbnB1dCBwcml2YXRlIGtleSAoaWYgbm90IHNpZ25lciBvciByZWNpcGllbnQpXG4iKTsKCmRp ZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wZS12ZXJzaW9uLnBhdGNoIGIvb3BlbnNzbC0xLjAuMGUt dmVyc2lvbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE0NWY3NC4uMDAw MDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wZS12ZXJzaW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAg LTEsMjIgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGUvY3J5cHRvL29wZW5zc2x2Lmgu dmVyc2lvbiBvcGVuc3NsLTEuMC4wZS9jcnlwdG8vb3BlbnNzbHYuaAotLS0tIG9wZW5zc2wtMS4w LjBlL2NyeXB0by9vcGVuc3Nsdi5oLnZlcnNpb24JMjAxMS0wOS0wNyAxMzo1NTo1Mi4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wZS9jcnlwdG8vb3BlbnNzbHYuaAkyMDExLTA5LTA3 IDEzOjU5OjI4LjAwMDAwMDAwMCArMDIwMAotQEAgLTI1LDcgKzI1LDggQEAKLSAgKiAoUHJpb3Ig dG8gMC45LjVhIGJldGExLCBhIGRpZmZlcmVudCBzY2hlbWUgd2FzIHVzZWQ6IE1NTk5GRlJCQiBm b3IKLSAgKiAgbWFqb3IgbWlub3IgZml4IGZpbmFsIHBhdGNoL2JldGEpCi0gICovCi0tI2RlZmlu ZSBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSCTB4MTAwMDAwNWZMCi0rLyogd2UgaGF2ZSB0byBrZWVw IHRoZSB2ZXJzaW9uIG51bWJlciB0byBub3QgYnJlYWsgdGhlIGFiaSAqLwotKyNkZWZpbmUgT1BF TlNTTF9WRVJTSU9OX05VTUJFUgkweDEwMDAwMDAzCi0gI2lmZGVmIE9QRU5TU0xfRklQUwotICNk ZWZpbmUgT1BFTlNTTF9WRVJTSU9OX1RFWFQJIk9wZW5TU0wgMS4wLjBlLWZpcHMgNiBTZXAgMjAx MSIKLSAjZWxzZQotQEAgLTgzLDcgKzg0LDcgQEAKLSAgKiBzaG91bGQgb25seSBrZWVwIHRoZSB2 ZXJzaW9ucyB0aGF0IGFyZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50LgotICAq LwotICNkZWZpbmUgU0hMSUJfVkVSU0lPTl9ISVNUT1JZICIiCi0tI2RlZmluZSBTSExJQl9WRVJT SU9OX05VTUJFUiAiMS4wLjAiCi0rI2RlZmluZSBTSExJQl9WRVJTSU9OX05VTUJFUiAiMS4wLjBl IgotIAotIAotICNlbmRpZiAvKiBIRUFERVJfT1BFTlNTTFZfSCAqLwoKZGlmZiAtLWdpdCBhL29w ZW5zc2wtMS4wLjBmLWRlZmF1bHRzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMGYtZGVmYXVsdHMucGF0 Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIwYzdmYwotLS0gL2Rldi9u dWxsCisrKyBiL29wZW5zc2wtMS4wLjBmLWRlZmF1bHRzLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2FwcHMvb3BlbnNzbC5jbmYuZGVmYXVsdHMgb3BlbnNz bC0xLjAuMGYvYXBwcy9vcGVuc3NsLmNuZgorLS0tIG9wZW5zc2wtMS4wLjBmL2FwcHMvb3BlbnNz bC5jbmYuZGVmYXVsdHMJMjAxMS0xMi0wNiAwMTowMTowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4wZi9hcHBzL29wZW5zc2wuY25mCTIwMTItMDEtMDUgMTM6MTY6MTUuMDAwMDAw MDAwICswMTAwCitAQCAtMTAzLDcgKzEwMyw4IEBAIGVtYWlsQWRkcmVzcwkJPSBvcHRpb25hbAor IAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisgWyByZXEgXQorLWRlZmF1bHRfYml0cwkJPSAxMDI0CisrZGVmYXVs dF9iaXRzCQk9IDIwNDgKKytkZWZhdWx0X21kCQk9IHNoYTEKKyBkZWZhdWx0X2tleWZpbGUgCT0g cHJpdmtleS5wZW0KKyBkaXN0aW5ndWlzaGVkX25hbWUJPSByZXFfZGlzdGluZ3Vpc2hlZF9uYW1l CisgYXR0cmlidXRlcwkJPSByZXFfYXR0cmlidXRlcworQEAgLTEyNiwxNyArMTI3LDE4IEBAIHN0 cmluZ19tYXNrID0gdXRmOG9ubHkKKyAKKyBbIHJlcV9kaXN0aW5ndWlzaGVkX25hbWUgXQorIGNv dW50cnlOYW1lCQkJPSBDb3VudHJ5IE5hbWUgKDIgbGV0dGVyIGNvZGUpCistY291bnRyeU5hbWVf ZGVmYXVsdAkJPSBBVQorK2NvdW50cnlOYW1lX2RlZmF1bHQJCT0gWFgKKyBjb3VudHJ5TmFtZV9t aW4JCQk9IDIKKyBjb3VudHJ5TmFtZV9tYXgJCQk9IDIKKyAKKyBzdGF0ZU9yUHJvdmluY2VOYW1l CQk9IFN0YXRlIG9yIFByb3ZpbmNlIE5hbWUgKGZ1bGwgbmFtZSkKKy1zdGF0ZU9yUHJvdmluY2VO YW1lX2RlZmF1bHQJPSBTb21lLVN0YXRlCisrI3N0YXRlT3JQcm92aW5jZU5hbWVfZGVmYXVsdAk9 IERlZmF1bHQgUHJvdmluY2UKKyAKKyBsb2NhbGl0eU5hbWUJCQk9IExvY2FsaXR5IE5hbWUgKGVn LCBjaXR5KQorK2xvY2FsaXR5TmFtZV9kZWZhdWx0CT0gRGVmYXVsdCBDaXR5CisgCisgMC5vcmdh bml6YXRpb25OYW1lCQk9IE9yZ2FuaXphdGlvbiBOYW1lIChlZywgY29tcGFueSkKKy0wLm9yZ2Fu aXphdGlvbk5hbWVfZGVmYXVsdAk9IEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZAorKzAub3JnYW5p emF0aW9uTmFtZV9kZWZhdWx0CT0gRGVmYXVsdCBDb21wYW55IEx0ZAorIAorICMgd2UgY2FuIGRv IHRoaXMgYnV0IGl0IGlzIG5vdCBuZWVkZWQgbm9ybWFsbHkgOi0pCisgIzEub3JnYW5pemF0aW9u TmFtZQkJPSBTZWNvbmQgT3JnYW5pemF0aW9uIE5hbWUgKGVnLCBjb21wYW55KQorQEAgLTE0NSw3 ICsxNDcsNyBAQCBsb2NhbGl0eU5hbWUJCQk9IExvY2FsaXR5IE5hbWUgKGVnLCBjaXR5Cisgb3Jn YW5pemF0aW9uYWxVbml0TmFtZQkJPSBPcmdhbml6YXRpb25hbCBVbml0IE5hbWUgKGVnLCBzZWN0 aW9uKQorICNvcmdhbml6YXRpb25hbFVuaXROYW1lX2RlZmF1bHQJPQorIAorLWNvbW1vbk5hbWUJ CQk9IENvbW1vbiBOYW1lIChlLmcuIHNlcnZlciBGUUROIG9yIFlPVVIgbmFtZSkKKytjb21tb25O YW1lCQkJPSBDb21tb24gTmFtZSAoZWcsIHlvdXIgbmFtZSBvciB5b3VyIHNlcnZlclwncyBob3N0 bmFtZSkKKyBjb21tb25OYW1lX21heAkJCT0gNjQKKyAKKyBlbWFpbEFkZHJlc3MJCQk9IEVtYWls IEFkZHJlc3MKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wZi1maXBzLnBhdGNoIGIvb3BlbnNz bC0xLjAuMGYtZmlwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40 MzVkNzJmCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMGYtZmlwcy5wYXRjaApAQCAt MCwwICsxLDEyMTY0IEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9Db25maWd1cmUuZmlwcyBv cGVuc3NsLTEuMC4wZi9Db25maWd1cmUKKy0tLSBvcGVuc3NsLTEuMC4wZi9Db25maWd1cmUuZmlw cwkyMDEyLTAxLTA1IDEzOjIyOjI5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBm L0NvbmZpZ3VyZQkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTY2Myw2 ICs2NjMsNyBAQCBteSAkY21sbF9lbmM9ImNhbWVsbGlhLm8gY21sbF9taXNjLm8gY21sCisgbXkg JHByb2Nlc3Nvcj0iIjsKKyBteSAkZGVmYXVsdF9yYW5saWI7CisgbXkgJHBlcmw7CisrbXkgJGZp cHM9MDsKKyAKKyAKKyAjIEFsbCBvZiB0aGUgZm9sbG93aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1 bHQgKFJDNSB3YXMgZW5hYmxlZCBiZWZvcmUgMC45LjgpOgorQEAgLTgwOSw2ICs4MTAsMTAgQEAg UFJPQ0VTU19BUkdTOgorIAkJCX0KKyAJCWVsc2lmICgvXjM4NiQvKQorIAkJCXsgJHByb2Nlc3Nv cj0zODY7IH0KKysJCWVsc2lmICgvXmZpcHMkLykKKysJCQl7CisrCQkJJGZpcHM9MTsKKysJCSAg ICAgICAgfQorIAkJZWxzaWYgKC9ecnNhcmVmJC8pCisgCQkJeworIAkJCSMgTm8gUlNBcmVmIHN1 cHBvcnQgYW55IG1vcmUgc2luY2UgaXQncyBub3QgbmVlZGVkLgorQEAgLTEzODMsNiArMTM4OCwx MSBAQCAkY2ZsYWdzLj0iIC1ET1BFTlNTTF9JQTMyX1NTRTIiIGlmICghJG5vCisgCisgJGNmbGFn cy49IiAtRE9QRU5TU0xfQk5fQVNNX01PTlQiIGlmICgkYm5fb2JqID1+IC8tbW9udC8pOworIAor K2lmICgkZmlwcykKKysJeworKwkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVO U1NMX0ZJUFNcbiI7CisrCX0KKysKKyAkY3B1aWRfb2JqPSJtZW1fY2xyLm8iCXVubGVzcyAoJGNw dWlkX29iaiA9fiAvXC5vJC8pOworICRkZXNfb2JqPSRkZXNfZW5jCXVubGVzcyAoJGRlc19vYmog PX4gL1wubyQvKTsKKyAkYmZfb2JqPSRiZl9lbmMJCXVubGVzcyAoJGJmX29iaiA9fiAvXC5vJC8p OworQEAgLTE1NTAsNiArMTU2MCwxMCBAQCB3aGlsZSAoPElOPikKKyAJcy9eTElCS1JCNT0uKi9M SUJLUkI1PSR3aXRoYXJnc3sia3JiNS1saWIifS87CisgCXMvXkxJQlpMSUI9LiovTElCWkxJQj0k d2l0aGFyZ3N7InpsaWItbGliIn0vOworIAlzL15aTElCX0lOQ0xVREU9LiovWkxJQl9JTkNMVURF PSR3aXRoYXJnc3siemxpYi1pbmNsdWRlIn0vOworKwlpZiAoJGZpcHMpCisrCQl7CisrCQlzL15G SVBTPS4qL0ZJUFM9eWVzLzsKKysJCX0KKyAJcy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdF VD0kc2hhcmVkX3RhcmdldC87CisgCXMvXlNITElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVk X21hcmsvOworIAlzL15TSEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRP KSBcJChTSEFSRURfU1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjBmL2NyeXB0by9iZi9iZl9za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vYmYvYmZf c2tleS5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2JmL2JmX3NrZXkuYy5maXBzCTIwMDgt MTEtMTIgMDQ6NTc6NTIuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRv L2JmL2JmX3NrZXkuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTU5 LDEwICs1OSwxNSBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4K KyAjaW5jbHVkZSA8b3BlbnNzbC9ibG93ZmlzaC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0 by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2VuZGlmCisrCisgI2luY2x1ZGUgImJmX2xvY2wuaCIKKyAjaW5jbHVkZSAiYmZfcGkuaCIKKyAK Ky12b2lkIEJGX3NldF9rZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmRhdGEpCisrRklQU19OT05fRklQU19WQ0lQSEVSX0luaXQoQkYpCisgCXsKKyAJaW50IGk7 CisgCUJGX0xPTkcgKnAscmksaW5bMl07CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v YmYvYmxvd2Zpc2guaC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9iZi9ibG93ZmlzaC5oCist LS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2JmL2Jsb3dmaXNoLmguZmlwcwkyMDEyLTAxLTA1IDEz OjIyOjI5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9iZi9ibG93 ZmlzaC5oCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMTA0LDcgKzEw NCw5IEBAIHR5cGVkZWYgc3RydWN0IGJmX2tleV9zdAorIAlCRl9MT05HIFNbNCoyNTZdOworIAl9 IEJGX0tFWTsKKyAKKy0gCisrI2lmZGVmIE9QRU5TU0xfRklQUyAKKyt2b2lkIHByaXZhdGVfQkZf c2V0X2tleShCRl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7 CisrI2VuZGlmCisgdm9pZCBCRl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1 bnNpZ25lZCBjaGFyICpkYXRhKTsKKyAKKyB2b2lkIEJGX2VuY3J5cHQoQkZfTE9ORyAqZGF0YSxj b25zdCBCRl9LRVkgKmtleSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vYm4vYm4u aC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ibi9ibi5oCistLS0gb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL2JuL2JuLmguZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjI5LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ibi9ibi5oCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAw MDAwMDAwICswMTAwCitAQCAtNTU4LDYgKzU1OCwxNyBAQCBpbnQJQk5faXNfcHJpbWVfZXgoY29u c3QgQklHTlVNICpwLGludCBuCisgaW50CUJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KGNvbnN0IEJJ R05VTSAqcCxpbnQgbmNoZWNrcywgQk5fQ1RYICpjdHgsCisgCQlpbnQgZG9fdHJpYWxfZGl2aXNp b24sIEJOX0dFTkNCICpjYik7CisgCisraW50IEJOX1g5MzFfZ2VuZXJhdGVfWHBxKEJJR05VTSAq WHAsIEJJR05VTSAqWHEsIGludCBuYml0cywgQk5fQ1RYICpjdHgpOworKworK2ludCBCTl9YOTMx X2Rlcml2ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCisrCQkJ Y29uc3QgQklHTlVNICpYcCwgY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLAor KwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsIEJOX0dFTkNCICpjYik7CisraW50IEJO X1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAy LAorKwkJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwKKysJCQljb25zdCBCSUdOVU0gKlhwLAor KwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsCisrCQkJQk5fR0VOQ0IgKmNiKTsKKysK KyBCTl9NT05UX0NUWCAqQk5fTU9OVF9DVFhfbmV3KHZvaWQgKTsKKyB2b2lkIEJOX01PTlRfQ1RY X2luaXQoQk5fTU9OVF9DVFggKmN0eCk7CisgaW50IEJOX21vZF9tdWxfbW9udGdvbWVyeShCSUdO VU0gKnIsY29uc3QgQklHTlVNICphLGNvbnN0IEJJR05VTSAqYiwKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9ibi9ibl94OTMxcC5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2Ju L2JuX3g5MzFwLmMKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vYm4vYm5feDkzMXAuYy5maXBz CTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL2JuL2JuX3g5MzFwLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAK K0BAIC0wLDAgKzEsMjcyIEBACisrLyogYm5feDkzMXAuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIg U3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAq IHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK KysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgor KyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4g YnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQu Y29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+CisrCisrLyogWDkuMzEgcm91dGluZXMgZm9yIHByaW1lIGRlcml2YXRpb24gKi8K KysKKysvKiBYOS4zMSBwcmltZSBkZXJpdmF0aW9uLiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUg dGhlIHByaW1lcyBwaQorKyAqIChwMSwgcDIsIHExLCBxMikgZnJvbSBhIHBhcmFtZXRlciBYcGkg YnkgY2hlY2tpbmcgc3VjY2Vzc2l2ZSBvZGQKKysgKiBpbnRlZ2Vycy4KKysgKi8KKysKKytzdGF0 aWMgaW50IGJuX3g5MzFfZGVyaXZlX3BpKEJJR05VTSAqcGksIGNvbnN0IEJJR05VTSAqWHBpLCBC Tl9DVFggKmN0eCwKKysJCQlCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50IGkgPSAwOworKwlpZiAo IUJOX2NvcHkocGksIFhwaSkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFCTl9pc19vZGQocGkpICYm ICFCTl9hZGRfd29yZChwaSwgMSkpCisrCQlyZXR1cm4gMDsKKysJZm9yKDs7KQorKwkJeworKwkJ aSsrOworKwkJQk5fR0VOQ0JfY2FsbChjYiwgMCwgaSk7CisrCQkvKiBOQiAyNyBNUiBpcyBzcGVj aWZpY2VkIGluIFg5LjMxICovCisrCQlpZiAoQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocGksIDI3 LCBjdHgsIDEsIGNiKSkKKysJCQlicmVhazsKKysJCWlmICghQk5fYWRkX3dvcmQocGksIDIpKQor KwkJCXJldHVybiAwOworKwkJfQorKwlCTl9HRU5DQl9jYWxsKGNiLCAyLCBpKTsKKysJcmV0dXJu IDE7CisrCX0KKysKKysvKiBUaGlzIGlzIHRoZSBtYWluIFg5LjMxIHByaW1lIGRlcml2YXRpb24g ZnVuY3Rpb24uIEZyb20gcGFyYW1ldGVycworKyAqIFhwMSwgWHAyIGFuZCBYcCBkZXJpdmUgdGhl IHByaW1lIHAuIElmIHRoZSBwYXJhbWV0ZXJzIHAxIG9yIHAyIGFyZQorKyAqIG5vdCBOVUxMIHRo ZXkgd2lsbCBiZSByZXR1cm5lZCB0b286IHRoaXMgaXMgbmVlZGVkIGZvciB0ZXN0aW5nLgorKyAq LworKworK2ludCBCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEs IEJJR05VTSAqcDIsCisrCQkJY29uc3QgQklHTlVNICpYcCwgY29uc3QgQklHTlVNICpYcDEsIGNv bnN0IEJJR05VTSAqWHAyLAorKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsIEJOX0dF TkNCICpjYikKKysJeworKwlpbnQgcmV0ID0gMDsKKysKKysJQklHTlVNICp0LCAqcDFwMiwgKnBt MTsKKysKKysJLyogT25seSBldmVuIGUgc3VwcG9ydGVkICovCisrCWlmICghQk5faXNfb2RkKGUp KQorKwkJcmV0dXJuIDA7CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwlpZiAoIXAxKQorKwkJ cDEgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCWlmICghcDIpCisrCQlwMiA9IEJOX0NUWF9nZXQo Y3R4KTsKKysKKysJdCA9IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJcDFwMiA9IEJOX0NUWF9nZXQo Y3R4KTsKKysKKysJcG0xID0gQk5fQ1RYX2dldChjdHgpOworKworKwlpZiAoIWJuX3g5MzFfZGVy aXZlX3BpKHAxLCBYcDEsIGN0eCwgY2IpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghYm5feDkz MV9kZXJpdmVfcGkocDIsIFhwMiwgY3R4LCBjYikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFC Tl9tdWwocDFwMiwgcDEsIHAyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIEZpcnN0IHNl dCBwIHRvIHZhbHVlIG9mIFJwICovCisrCisrCWlmICghQk5fbW9kX2ludmVyc2UocCwgcDIsIHAx LCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fbXVsKHAsIHAsIHAyLCBjdHgpKQor KwkJZ290byBlcnI7CisrCisrCWlmICghQk5fbW9kX2ludmVyc2UodCwgcDEsIHAyLCBjdHgpKQor KwkJZ290byBlcnI7CisrCisrCWlmICghQk5fbXVsKHQsIHQsIHAxLCBjdHgpKQorKwkJZ290byBl cnI7CisrCisrCWlmICghQk5fc3ViKHAsIHAsIHQpKQorKwkJZ290byBlcnI7CisrCisrCWlmIChw LT5uZWcgJiYgIUJOX2FkZChwLCBwLCBwMXAyKSkKKysJCWdvdG8gZXJyOworKworKwkvKiBwIG5v dyBlcXVhbHMgUnAgKi8KKysKKysJaWYgKCFCTl9tb2Rfc3ViKHAsIHAsIFhwLCBwMXAyLCBjdHgp KQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fYWRkKHAsIHAsIFhwKSkKKysJCWdvdG8gZXJy OworKworKwkvKiBwIG5vdyBlcXVhbHMgWXAwICovCisrCisrCWZvciAoOzspCisrCQl7CisrCQlp bnQgaSA9IDE7CisrCQlCTl9HRU5DQl9jYWxsKGNiLCAwLCBpKyspOworKwkJaWYgKCFCTl9jb3B5 KHBtMSwgcCkpCisrCQkJZ290byBlcnI7CisrCQlpZiAoIUJOX3N1Yl93b3JkKHBtMSwgMSkpCisr CQkJZ290byBlcnI7CisrCQlpZiAoIUJOX2djZCh0LCBwbTEsIGUsIGN0eCkpCisrCQkJZ290byBl cnI7CisrCQlpZiAoQk5faXNfb25lKHQpCisrCQkvKiBYOS4zMSBzcGVjaWZpZXMgOCBNUiBhbmQg MSBMdWNhcyB0ZXN0IG9yIGFueSBwcmltZSB0ZXN0CisrCQkgKiBvZmZlcmluZyBzaW1pbGFyIG9y IGJldHRlciBndWFyYW50ZWVzIDUwIE1SIGlzIGNvbnNpZGVyYWJseSAKKysJCSAqIGJldHRlci4K KysJCSAqLworKwkJCSYmIEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHAsIDUwLCBjdHgsIDEsIGNi KSkKKysJCQlicmVhazsKKysJCWlmICghQk5fYWRkKHAsIHAsIHAxcDIpKQorKwkJCWdvdG8gZXJy OworKwkJfQorKworKwlCTl9HRU5DQl9jYWxsKGNiLCAzLCAwKTsKKysKKysJcmV0ID0gMTsKKysK KysJZXJyOgorKworKwlCTl9DVFhfZW5kKGN0eCk7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysK KysvKiBHZW5lcmF0ZSBwYWlyIG9mIHBhcmFtdGVycyBYcCwgWHEgZm9yIFg5LjMxIHByaW1lIGdl bmVyYXRpb24uCisrICogTm90ZTogbmJpdHMgcGFyYW10ZXIgaXMgc3VtIG9mIG51bWJlciBvZiBi aXRzIGluIGJvdGguCisrICovCisrCisraW50IEJOX1g5MzFfZ2VuZXJhdGVfWHBxKEJJR05VTSAq WHAsIEJJR05VTSAqWHEsIGludCBuYml0cywgQk5fQ1RYICpjdHgpCisrCXsKKysJQklHTlVNICp0 OworKwlpbnQgaTsKKysJLyogTnVtYmVyIG9mIGJpdHMgZm9yIGVhY2ggcHJpbWUgaXMgb2YgdGhl IGZvcm0KKysJICogNTEyKzEyOHMgZm9yIHMgPSAwLCAxLCAuLi4KKysJICovCisrCWlmICgobmJp dHMgPCAxMDI0KSB8fCAobmJpdHMgJiAweGZmKSkKKysJCXJldHVybiAwOworKwluYml0cyA+Pj0g MTsKKysJLyogVGhlIHJhbmRvbSB2YWx1ZSBYcCBtdXN0IGJlIGJldHdlZW4gc3FydCgyKSAqIDJe KG5iaXRzLTEpIGFuZAorKwkgKiAyXm5iaXRzIC0gMS4gQnkgc2V0dGluZyB0aGUgdG9wIHR3byBi aXRzIHdlIGVuc3VyZSB0aGF0IHRoZSBsb3dlcgorKwkgKiBib3VuZCBpcyBleGNlZWRlZC4KKysJ ICovCisrCWlmICghQk5fcmFuZChYcCwgbmJpdHMsIDEsIDApKQorKwkJcmV0dXJuIDA7CisrCisr CUJOX0NUWF9zdGFydChjdHgpOworKwl0ID0gQk5fQ1RYX2dldChjdHgpOworKworKwlmb3IgKGkg PSAwOyBpIDwgMTAwMDsgaSsrKQorKwkJeworKwkJaWYgKCFCTl9yYW5kKFhxLCBuYml0cywgMSwg MCkpCisrCQkJcmV0dXJuIDA7CisrCQkvKiBDaGVjayB0aGF0IHxYcCAtIFhxfCA+IDJeKG5iaXRz IC0gMTAwKSAqLworKwkJQk5fc3ViKHQsIFhwLCBYcSk7CisrCQlpZiAoQk5fbnVtX2JpdHModCkg PiAobmJpdHMgLSAxMDApKQorKwkJCWJyZWFrOworKwkJfQorKworKwlCTl9DVFhfZW5kKGN0eCk7 CisrCisrCWlmIChpIDwgMTAwMCkKKysJCXJldHVybiAxOworKworKwlyZXR1cm4gMDsKKysKKysJ fQorKworKy8qIEdlbmVyYXRlIHByaW1lcyB1c2luZyBYOS4zMSBhbGdvcml0aG0uIE9mIHRoZSB2 YWx1ZXMgcCwgcDEsIHAyLCBYcDEKKysgKiBhbmQgWHAyIG9ubHkgJ3AnIG5lZWRzIHRvIGJlIG5v bi1OVUxMLiBJZiBhbnkgb2YgdGhlIG90aGVycyBhcmUgbm90IE5VTEwKKysgKiB0aGUgcmVsZXZh bnQgcGFyYW1ldGVyIHdpbGwgYmUgc3RvcmVkIGluIGl0LgorKyAqCisrICogRHVlIHRvIHRoZSBm YWN0IHRoYXQgfFhwIC0gWHF8ID4gMl4obmJpdHMgLSAxMDApIG11c3QgYmUgc2F0aXNmaWVkIFhw IGFuZCBYcQorKyAqIGFyZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGFu ZCBzdXBwbGllZCBhcyBpbnB1dC4KKysgKi8KKysKKytpbnQgQk5fWDkzMV9nZW5lcmF0ZV9wcmlt ZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCisrCQkJQklHTlVNICpYcDEs IEJJR05VTSAqWHAyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAsCisrCQkJY29uc3QgQklHTlVNICpl LCBCTl9DVFggKmN0eCwKKysJCQlCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50IHJldCA9IDA7Cisr CisrCUJOX0NUWF9zdGFydChjdHgpOworKwlpZiAoIVhwMSkKKysJCVhwMSA9IEJOX0NUWF9nZXQo Y3R4KTsKKysJaWYgKCFYcDIpCisrCQlYcDIgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCWlmICgh Qk5fcmFuZChYcDEsIDEwMSwgMCwgMCkpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUJOX3JhbmQo WHAyLCAxMDEsIDAsIDApKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFCTl9YOTMxX2Rlcml2ZV9w cmltZV9leChwLCBwMSwgcDIsIFhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikpCisrCQlnb3RvIGVy cm9yOworKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysJQk5fQ1RYX2VuZChjdHgpOworKwor KwlyZXR1cm4gcmV0OworKworKwl9CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v Ym4vTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vYm4vTWFrZWZpbGUKKy0tLSBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vYm4vTWFrZWZpbGUuZmlwcwkyMDA4LTExLTEyIDA5OjE5OjAy LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ibi9NYWtlZmlsZQky MDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTI2LDEzICsyNiwxMyBAQCBM SUJTUkM9CWJuX2FkZC5jIGJuX2Rpdi5jIGJuX2V4cC5jIGJuX2xpCisgCWJuX3ByaW50LmMgYm5f cmFuZC5jIGJuX3NoaWZ0LmMgYm5fd29yZC5jIGJuX2JsaW5kLmMgXAorIAlibl9rcm9uLmMgYm5f c3FydC5jIGJuX2djZC5jIGJuX3ByaW1lLmMgYm5fZXJyLmMgYm5fc3FyLmMgYm5fYXNtLmMgXAor IAlibl9yZWNwLmMgYm5fbW9udC5jIGJuX21waS5jIGJuX2V4cDIuYyBibl9nZjJtLmMgYm5fbmlz dC5jIFwKKy0JYm5fZGVwci5jIGJuX2NvbnN0LmMKKysJYm5fZGVwci5jIGJuX2NvbnN0LmMgYm5f eDkzMXAuYworIAorIExJQk9CSj0JYm5fYWRkLm8gYm5fZGl2Lm8gYm5fZXhwLm8gYm5fbGliLm8g Ym5fY3R4Lm8gYm5fbXVsLm8gYm5fbW9kLm8gXAorIAlibl9wcmludC5vIGJuX3JhbmQubyBibl9z aGlmdC5vIGJuX3dvcmQubyBibl9ibGluZC5vIFwKKyAJYm5fa3Jvbi5vIGJuX3NxcnQubyBibl9n Y2QubyBibl9wcmltZS5vIGJuX2Vyci5vIGJuX3Nxci5vICQoQk5fQVNNKSBcCisgCWJuX3JlY3Au byBibl9tb250Lm8gYm5fbXBpLm8gYm5fZXhwMi5vIGJuX2dmMm0ubyBibl9uaXN0Lm8gXAorLQli bl9kZXByLm8gYm5fY29uc3QubworKwlibl9kZXByLm8gYm5fY29uc3QubyBibl94OTMxcC5vCisg CisgU1JDPSAkKExJQlNSQykKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9jYW1l bGxpYS9hc20vY21sbC14ODYucGwuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY2FtZWxsaWEv YXNtL2NtbGwteDg2LnBsCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2NhbWVsbGlhL2FzbS9j bWxsLXg4Ni5wbC5maXBzCTIwMDktMDQtMDYgMTY6MjU6MDIuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMGYvY3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbAkyMDEyLTAxLTA1 IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTcyMiwxMiArNzIyLDE1IEBAIG15ICRiaWFz PWludChAVFswXSk/c2hpZnQoQFQpOjA7CisgfQorICZmdW5jdGlvbl9lbmQoIkNhbWVsbGlhX0Vr ZXlnZW4iKTsKKyAKKyskc2V0a2V5ZnVuYyA9ICJDYW1lbGxpYV9zZXRfa2V5IjsKKyskc2V0a2V5 ZnVuYyA9ICJwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkiIGlmICgkRU5We0ZJUFN9IG5lICIiKTsK KysKKyBpZiAoJE9QRU5TU0wpIHsKKyAjIGludCBDYW1lbGxpYV9zZXRfa2V5ICgKKyAjCQljb25z dCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LAorICMJCWludCBiaXRzLAorICMJCUNBTUVMTElBX0tF WSAqa2V5KQorLSZmdW5jdGlvbl9iZWdpbl9CKCJDYW1lbGxpYV9zZXRfa2V5Iik7CisrJmZ1bmN0 aW9uX2JlZ2luX0IoJHNldGtleWZ1bmMpOworIAkmcHVzaAkoImVieCIpOworIAkmbW92CSgiZWN4 Iiwmd3BhcmFtKDApKTsJIyBwdWxsIGFyZ3VtZW50cworIAkmbW92CSgiZWJ4Iiwmd3BhcmFtKDEp KTsKK0BAIC03NjAsNyArNzYzLDcgQEAgaWYgKCRPUEVOU1NMKSB7CisgJnNldF9sYWJlbCgiZG9u ZSIsNCk7CisgCSZwb3AJKCJlYngiKTsKKyAJJnJldAkoKTsKKy0mZnVuY3Rpb25fZW5kX0IoIkNh bWVsbGlhX3NldF9rZXkiKTsKKysmZnVuY3Rpb25fZW5kX0IoJHNldGtleWZ1bmMpOworIH0KKyAK KyBAU0JPWD0oCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY2FtZWxsaWEvY2FtZWxs aWEuaC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oCistLS0g b3BlbnNzbC0xLjAuMGYvY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhLmguZmlwcwkyMDEyLTAxLTA1 IDEzOjIyOjI5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9jYW1l bGxpYS9jYW1lbGxpYS5oCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAt ODgsNiArODgsMTEgQEAgc3RydWN0IGNhbWVsbGlhX2tleV9zdCAKKyAJfTsKKyB0eXBlZGVmIHN0 cnVjdCBjYW1lbGxpYV9rZXlfc3QgQ0FNRUxMSUFfS0VZOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKytpbnQgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVz ZXJLZXksIGNvbnN0IGludCBiaXRzLAorKwlDQU1FTExJQV9LRVkgKmtleSk7CisrI2VuZGlmCisr CisgaW50IENhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29u c3QgaW50IGJpdHMsCisgCUNBTUVMTElBX0tFWSAqa2V5KTsKKyAKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9jYW1l bGxpYS9jbWxsX2ZibGsuYy5maXBzCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2NhbWVsbGlhL2NtbGxfZmJsay5jCTIwMTItMDEt MDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDY4IEBACisrLyogY3J5cHRv L2NhbWVsbGlhL2NhbWVsbGlhX21pc2MuYyAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXki IC0qLSAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA2IFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICovCisrIAor KyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY2FtZWxs aWEuaD4KKysjaW5jbHVkZSAiY21sbF9sb2NsLmgiCisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRv Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj ZW5kaWYKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IENhbWVsbGlhX3NldF9rZXkoY29u c3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisrCUNBTUVMTElBX0tF WSAqa2V5KQorKwl7CisrCWlmIChGSVBTX21vZGUoKSkKKysJCUZJUFNfQkFEX0FCT1JUKENBTUVM TElBKQorKwlyZXR1cm4gcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KHVzZXJLZXksIGJpdHMsIGtl eSk7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9jYW1lbGxp YS9jbWxsX21pc2MuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9jYW1lbGxpYS9jbWxsX21p c2MuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYy5maXBz CTIwMDgtMTAtMjggMTM6MTM6NTIuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL2NhbWVsbGlhL2NtbGxfbWlzYy5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAw ICswMTAwCitAQCAtNTIsMTEgKzUyLDIwIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYu aD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9jYW1lbGxpYS5oPgorICNpbmNsdWRlICJjbWxsX2xvY2wu aCIKKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIGNvbnN0IGNoYXIgQ0FNRUxM SUFfdmVyc2lvbltdPSJDQU1FTExJQSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2ln bmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorKwlDQU1FTExJQV9LRVkgKmtleSkK KysjZWxzZQorIGludCBDYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJL ZXksIGNvbnN0IGludCBiaXRzLAorIAlDQU1FTExJQV9LRVkgKmtleSkKKysjZW5kaWYKKyAJewor IAlpZighdXNlcktleSB8fCAha2V5KQorIAkJcmV0dXJuIC0xOworZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRv L2NhbWVsbGlhL01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2NhbWVsbGlhL01h a2VmaWxlLmZpcHMJMjAwOC0xMi0yMyAxMjozMzowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4wZi9jcnlwdG8vY2FtZWxsaWEvTWFrZWZpbGUJMjAxMi0wMS0wNSAxMzoyMjozMC4w MDAwMDAwMDAgKzAxMDAKK0BAIC0yMyw5ICsyMyw5IEBAIEFQUFM9CisgCisgTElCPSQoVE9QKS9s aWJjcnlwdG8uYQorIExJQlNSQz1jYW1lbGxpYS5jIGNtbGxfbWlzYy5jIGNtbGxfZWNiLmMgY21s bF9jYmMuYyBjbWxsX29mYi5jIFwKKy0JICAgY21sbF9jZmIuYyBjbWxsX2N0ci5jIAorKwkgICBj bWxsX2NmYi5jIGNtbGxfY3RyLmMgY21sbF9mYmxrLmMKKyAKKy1MSUJPQko9IGNtbGxfZWNiLm8g Y21sbF9vZmIubyBjbWxsX2NmYi5vIGNtbGxfY3RyLm8gJChDTUxMX0VOQykKKytMSUJPQko9IGNt bGxfZWNiLm8gY21sbF9vZmIubyBjbWxsX2NmYi5vIGNtbGxfY3RyLm8gJChDTUxMX0VOQykgY21s bF9mYmxrLm8KKyAKKyBTUkM9ICQoTElCU1JDKQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL2Nhc3QvY2FzdC5oLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2Nhc3QvY2FzdC5o CistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2Nhc3QvY2FzdC5oLmZpcHMJMjAxMi0wMS0wNSAx MzoyMjoyOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY2FzdC9j YXN0LmgJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC04Myw3ICs4Myw5 IEBAIHR5cGVkZWYgc3RydWN0IGNhc3Rfa2V5X3N0CisgCWludCBzaG9ydF9rZXk7CS8qIFVzZSBy ZWR1Y2VkIHJvdW5kcyBmb3Igc2hvcnQga2V5ICovCisgCX0gQ0FTVF9LRVk7CisgCistIAorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMgCisrdm9pZCBwcml2YXRlX0NBU1Rfc2V0X2tleShDQVNUX0tFWSAq a2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKysjZW5kaWYKKyB2b2lk IENBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpkYXRhKTsKKyB2b2lkIENBU1RfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4s IHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgQ0FTVF9LRVkgKmtleSwKKyAJCSAgICAgIGludCBl bmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2Nhc3QvY19za2V5LmMuZmlwcyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vY2FzdC9jX3NrZXkuYworLS0tIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9jYXN0L2Nfc2tleS5jLmZpcHMJMjAwMC0wNi0wMyAxNjoxMzozNS4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY2FzdC9jX3NrZXkuYwkyMDEyLTAxLTA1IDEz OjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTU3LDYgKzU3LDExIEBACisgICovCisgCisgI2lu Y2x1ZGUgPG9wZW5zc2wvY2FzdC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisr CisgI2luY2x1ZGUgImNhc3RfbGNsLmgiCisgI2luY2x1ZGUgImNhc3Rfcy5oIgorIAorQEAgLTcy LDcgKzc3LDcgQEAKKyAjZGVmaW5lIFM2IENBU1RfU190YWJsZTYKKyAjZGVmaW5lIFM3IENBU1Rf U190YWJsZTcKKyAKKy12b2lkIENBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5LCBpbnQgbGVuLCBj b25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorK0ZJUFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0KENB U1QpCisgCXsKKyAJQ0FTVF9MT05HIHhbMTZdOworIAlDQVNUX0xPTkcgelsxNl07CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY3J5cHRvLmguZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vY3J5cHRvLmgKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vY3J5cHRvLmguZmlwcwkyMDEy LTAxLTA1IDEzOjIyOjI5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0 by9jcnlwdG8uaAkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTU0Nywx MiArNTQ3LDcwIEBAIHVuc2lnbmVkIGxvbmcgKk9QRU5TU0xfaWEzMmNhcF9sb2Modm9pZCkKKyAj ZGVmaW5lIE9QRU5TU0xfaWEzMmNhcCAoKihPUEVOU1NMX2lhMzJjYXBfbG9jKCkpKQorIGludCBP UEVOU1NMX2lzc2VydmljZSh2b2lkKTsKKyAKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2Rl ZmluZSBGSVBTX0VSUk9SX0lHTk9SRUQoYWxnKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVf XywgXAorKwkJYWxnICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxnb3JpdGhtIGVycm9yIGln bm9yZWQiKTsKKysKKysjZGVmaW5lIEZJUFNfQkFEX0FCT1JUKGFsZykgT3BlblNTTERpZShfX0ZJ TEVfXywgX19MSU5FX18sIFwKKysJCSNhbGcgIiBBbGdvcml0aG0gZm9yYmlkZGVuIGluIEZJUFMg bW9kZSIpOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFNfU1RSSUNUCisrI2RlZmluZSBGSVBTX0JB RF9BTEdPUklUSE0oYWxnKSBGSVBTX0JBRF9BQk9SVChhbGcpCisrI2Vsc2UKKysjZGVmaW5lIEZJ UFNfQkFEX0FMR09SSVRITShhbGcpIFwKKysJeyBcCisrCUZJUFNlcnIoRklQU19GX0hBU0hfRklO QUwsRklQU19SX05PTl9GSVBTX01FVEhPRCk7IFwKKysJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJB bGdvcml0aG09IiwgI2FsZyk7IFwKKysJcmV0dXJuIDA7IFwKKysJfQorKyNlbmRpZgorKworKy8q IExvdyBsZXZlbCBkaWdlc3QgQVBJIGJsb2NraW5nIG1hY3JvICovCisrCisrI2RlZmluZSBGSVBT X05PTl9GSVBTX01EX0luaXQoYWxnKSBcCisrCWludCBhbGcjI19Jbml0KGFsZyMjX0NUWCAqYykg XAorKwkJeyBcCisrCQlpZiAoRklQU19tb2RlKCkpIFwKKysJCQlGSVBTX0JBRF9BTEdPUklUSE0o YWxnKSBcCisrCQlyZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7IFwKKysJCX0gXAorKwlp bnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQoYWxnIyNfQ1RYICpjKQorKworKy8qIEZvciBjaXBoZXJz IHRoZSBBUEkgb2Z0ZW4gdmFyaWVzIGZyb20gY2lwaGVyIHRvIGNpcGhlciBhbmQgZWFjaCBuZWVk cyB0bworKyAqIGJlIHRyZWF0ZWQgYXMgYSBzcGVjaWFsIGNhc2UuIFZhcmlhYmxlIGtleSBsZW5n dGggY2lwaGVycyAoQmxvd2Zpc2gsIFJDNCwKKysgKiBDQVNUKSBob3dldmVyIGFyZSB2ZXJ5IHNp bWlsYXIgYW5kIGNhbiB1c2UgYSBibG9ja2luZyBtYWNyby4KKysgKi8KKysKKysjZGVmaW5lIEZJ UFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0KGFsZykgXAorKwl2b2lkIGFsZyMjX3NldF9rZXkoYWxn IyNfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpIFwKKysJCXsg XAorKwkJaWYgKEZJUFNfbW9kZSgpKSBcCisrCQkJRklQU19CQURfQUJPUlQoYWxnKSBcCisrCQlw cml2YXRlXyMjYWxnIyNfc2V0X2tleShrZXksIGxlbiwgZGF0YSk7IFwKKysJCX0gXAorKwl2b2lk IHByaXZhdGVfIyNhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQgbGVuLCBcCisrCQkJ CQljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKworKyNlbHNlCisrCisrI2RlZmluZSBGSVBT X05PTl9GSVBTX1ZDSVBIRVJfSW5pdChhbGcpIFwKKysJdm9pZCBhbGcjI19zZXRfa2V5KGFsZyMj X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKworKyNkZWZp bmUgRklQU19OT05fRklQU19NRF9Jbml0KGFsZykgXAorKwlpbnQgYWxnIyNfSW5pdChhbGcjI19D VFggKmMpIAorKworKyNlbmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBTICovCisrCisgLyogQkVHSU4g RVJST1IgQ09ERVMgKi8KKyAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRl ZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcworICAqIG1hZGUgYWZ0ZXIgdGhp cyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgor ICAqLworIHZvaWQgRVJSX2xvYWRfQ1JZUFRPX3N0cmluZ3Modm9pZCk7CisgCisrI2RlZmluZSBP UEVOU1NMX0hBVkVfSU5JVAkxCisrdm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lkKTsKKysK KyAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIENSWVBUTyBmdW5jdGlvbnMuICovCisgCisgLyogRnVu Y3Rpb24gY29kZXMuICovCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZGgvZGhfZXJy LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZGgvZGhfZXJyLmMKKy0tLSBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vZGgvZGhfZXJyLmMuZmlwcwkyMDA2LTExLTIxIDIyOjI5OjM3LjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9kaC9kaF9lcnIuYwkyMDEyLTAxLTA1 IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTczLDYgKzczLDggQEAgc3RhdGljIEVSUl9T VFJJTkdfREFUQSBESF9zdHJfZnVuY3RzW109Cisge0VSUl9GVU5DKERIX0ZfQ09NUFVURV9LRVkp LAkiQ09NUFVURV9LRVkifSwKKyB7RVJSX0ZVTkMoREhfRl9ESFBBUkFNU19QUklOVF9GUCksCSJE SHBhcmFtc19wcmludF9mcCJ9LAorIHtFUlJfRlVOQyhESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1T KSwJIkRIX0JVSUxUSU5fR0VOUEFSQU1TIn0sCisre0VSUl9GVU5DKERIX0ZfREhfQ09NUFVURV9L RVkpLAkiREhfY29tcHV0ZV9rZXkifSwKKyt7RVJSX0ZVTkMoREhfRl9ESF9HRU5FUkFURV9LRVkp LAkiREhfZ2VuZXJhdGVfa2V5In0sCisge0VSUl9GVU5DKERIX0ZfREhfTkVXX01FVEhPRCksCSJE SF9uZXdfbWV0aG9kIn0sCisge0VSUl9GVU5DKERIX0ZfREhfUEFSQU1fREVDT0RFKSwJIkRIX1BB UkFNX0RFQ09ERSJ9LAorIHtFUlJfRlVOQyhESF9GX0RIX1BSSVZfREVDT0RFKSwJIkRIX1BSSVZf REVDT0RFIn0sCitAQCAtOTQsNiArOTYsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERIX3N0 cl9yZWFzb25zW109Cisge0VSUl9SRUFTT04oREhfUl9CTl9FUlJPUikgICAgICAgICAgICAgICAs ImJuIGVycm9yIn0sCisge0VSUl9SRUFTT04oREhfUl9ERUNPREVfRVJST1IpICAgICAgICAgICAs ImRlY29kZSBlcnJvciJ9LAorIHtFUlJfUkVBU09OKERIX1JfSU5WQUxJRF9QVUJLRVkpICAgICAg ICAgLCJpbnZhbGlkIHB1YmxpYyBrZXkifSwKKyt7RVJSX1JFQVNPTihESF9SX0tFWV9TSVpFX1RP T19TTUFMTCkgICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCisge0VSUl9SRUFTT04oREhfUl9L RVlTX05PVF9TRVQpICAgICAgICAgICAsImtleXMgbm90IHNldCJ9LAorIHtFUlJfUkVBU09OKERI X1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9LAorIHtFUlJf UkVBU09OKERIX1JfTk9fUEFSQU1FVEVSU19TRVQpICAgICAgLCJubyBwYXJhbWV0ZXJzIHNldCJ9 LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMgb3BlbnNz bC0xLjAuMGYvY3J5cHRvL2RoL2RoX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2Ro L2RoX2dlbi5jLmZpcHMJMjAwNS0wNC0yNiAyMDo1MzoxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZGgvZGhfZ2VuLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAw MDAwMDAgKzAxMDAKK0BAIC02NSw2ICs2NSwxMCBAQAorICNpbmNsdWRlICJjcnlwdGxpYi5oIgor ICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHN0YXRpYyBpbnQgZGhfYnVpbHRpbl9nZW5wYXJh bXMoREggKnJldCwgaW50IHByaW1lX2xlbiwgaW50IGdlbmVyYXRvciwgQk5fR0VOQ0IgKmNiKTsK KyAKK0BAIC0xMDYsNiArMTEwLDIwIEBAIHN0YXRpYyBpbnQgZGhfYnVpbHRpbl9nZW5wYXJhbXMo REggKnJldCwKKyAJaW50IGcsb2s9IC0xOworIAlCTl9DVFggKmN0eD1OVUxMOworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJ UFNlcnIoRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZB SUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJaWYgKEZJUFNfbW9kZSgpICYmIChwcmlt ZV9sZW4gPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlESGVy cihESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Cisr CQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJY3R4PUJOX0NUWF9uZXcoKTsKKyAJaWYg KGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CitkaWZmIC11cCBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZGgvZGguaC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9k aC9kaC5oCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2RoL2RoLmguZmlwcwkyMDEyLTAxLTA1 IDEzOjIyOjI5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9kaC9k aC5oCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtNzcsNiArNzcsOCBA QAorICMgZGVmaW5lIE9QRU5TU0xfREhfTUFYX01PRFVMVVNfQklUUwkxMDAwMAorICNlbmRpZgor IAorKyNkZWZpbmUgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAorKworICNk ZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKKyAjZGVmaW5lIERIX0ZMQUdfTk9f RVhQX0NPTlNUVElNRSAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERICisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBu b3cgdXNlcyBjb25zdGFudCB0aW1lCitAQCAtMjQxLDYgKzI0Myw4IEBAIHZvaWQgRVJSX2xvYWRf REhfc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIERIX0ZfR0VORVJBVEVfUEFSQU1FVEVSUwkJCSAx MDQKKyAjZGVmaW5lIERIX0ZfUEtFWV9ESF9ERVJJVkUJCQkJIDExMgorICNkZWZpbmUgREhfRl9Q S0VZX0RIX0tFWUdFTgkJCQkgMTEzCisrI2RlZmluZSBESF9GX0RIX0NPTVBVVEVfS0VZCQkJCSAx MTQKKysjZGVmaW5lIERIX0ZfREhfR0VORVJBVEVfS0VZCQkJIDExNQorIAorIC8qIFJlYXNvbiBj b2Rlcy4gKi8KKyAjZGVmaW5lIERIX1JfQkFEX0dFTkVSQVRPUgkJCQkgMTAxCitAQCAtMjUzLDYg KzI1Nyw3IEBAIHZvaWQgRVJSX2xvYWRfREhfc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIERIX1Jf Tk9fUEFSQU1FVEVSU19TRVQJCQkJIDEwNworICNkZWZpbmUgREhfUl9OT19QUklWQVRFX1ZBTFVF CQkJCSAxMDAKKyAjZGVmaW5lIERIX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJIDEwNQor KyNkZWZpbmUgREhfUl9LRVlfU0laRV9UT09fU01BTEwJCQkJIDExMAorIAorICNpZmRlZiAgX19j cGx1c3BsdXMKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZGgvZGhfa2V5LmMu ZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZGgvZGhfa2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjIzLjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9kaC9kaF9rZXkuYwkyMDEyLTAxLTA1IDEz OjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTYxLDYgKzYxLDkgQEAKKyAjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9kaC5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2VuZGlmCisgCisgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKTsKKyBzdGF0aWMg aW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJfa2V5 LCBESCAqZGgpOworQEAgLTEwNyw2ICsxMTAsMTQgQEAgc3RhdGljIGludCBnZW5lcmF0ZV9rZXko REggKmRoKQorIAlCTl9NT05UX0NUWCAqbW9udD1OVUxMOworIAlCSUdOVU0gKnB1Yl9rZXk9TlVM TCwqcHJpdl9rZXk9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21v ZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVT X0JJVFMpKQorKwkJeworKwkJREhlcnIoREhfRl9HRU5FUkFURV9LRVksIERIX1JfS0VZX1NJWkVf VE9PX1NNQUxMKTsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgorKworIAljdHggPSBCTl9D VFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7CisgCitAQCAtMTg0LDYgKzE5 NSwxMyBAQCBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtlCisgCQlESGVy cihESF9GX0NPTVBVVEVfS0VZLERIX1JfTU9EVUxVU19UT09fTEFSR0UpOworIAkJZ290byBlcnI7 CisgCQl9CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251 bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsK KysJCURIZXJyKERIX0ZfQ09NUFVURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJ CWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorIAorIAljdHggPSBCTl9DVFhfbmV3KCk7CisgCWlm IChjdHggPT0gTlVMTCkgZ290byBlcnI7CitAQCAtMjUxLDYgKzI2OSw5IEBAIHN0YXRpYyBpbnQg ZGhfYm5fbW9kX2V4cChjb25zdCBESCAqZGgsIEIKKyAKKyBzdGF0aWMgaW50IGRoX2luaXQoREgg KmRoKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7 CisrI2VuZGlmCisgCWRoLT5mbGFncyB8PSBESF9GTEFHX0NBQ0hFX01PTlRfUDsKKyAJcmV0dXJu KDEpOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZHNhL2RzYV9nZW4uYy5m aXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9kc2EvZHNhX2dlbi5jCistLS0gb3BlbnNzbC0xLjAu MGYvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwkyMDEwLTA2LTE1IDE5OjI1OjA3LjAwMDAwMDAw MCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9kc2EvZHNhX2dlbi5jCTIwMTItMDEt MDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtNzcsOCArNzcsMTIgQEAKKyAjaW5jbHVk ZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorICNpbmNsdWRlIDxvcGVuc3Ns L3JhbmQuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorICNpbmNsdWRlICJkc2FfbG9j bC5oIgorIAorIGludCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwgaW50IGJp dHMsCitAQCAtMTI2LDYgKzEzMCwyMSBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpy ZXQsIHNpemVfCisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCXVuc2lnbmVkIGludCBoPTI7CisgCisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAg eworKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sCisrCQkgICAgRklQ U19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIGdvdG8gZXJyOworKwkgICAgfQorKwor KwlpZiAoRklQU19tb2RlKCkgJiYgKGJpdHMgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVT X0JJVFMpKQorKwkJeworKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOLCBEU0Ff Ul9LRVlfU0laRV9UT09fU01BTEwpOworKwkJZ290byBlcnI7CisrCQl9CisrI2VuZGlmCisrCisg CWlmIChxc2l6ZSAhPSBTSEFfRElHRVNUX0xFTkdUSCAmJiBxc2l6ZSAhPSBTSEEyMjRfRElHRVNU X0xFTkdUSCAmJgorIAkgICAgcXNpemUgIT0gU0hBMjU2X0RJR0VTVF9MRU5HVEgpCisgCQkvKiBp bnZhbGlkIHEgc2l6ZSAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2RzYS9kc2Eu aC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9kc2EvZHNhLmgKKy0tLSBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZHNhL2RzYS5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoyOS4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZHNhL2RzYS5oCTIwMTItMDEtMDUgMTM6MjI6 MzAuMDAwMDAwMDAwICswMTAwCitAQCAtODgsNiArODgsOCBAQAorICMgZGVmaW5lIE9QRU5TU0xf RFNBX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKKyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xf RFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0CisrCisgI2RlZmluZSBEU0FfRkxBR19DQUNI RV9NT05UX1AJMHgwMQorICNkZWZpbmUgRFNBX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAgICAgICAw eDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERTQQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGltcGxlbWVudGF0aW9uIG5vdyB1c2Vz IGNvbnN0YW50IHRpbWUKK0BAIC05Nyw2ICs5OSwyMSBAQAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlIHVzZWQgZm9yIGFsbCBleHBvbmVudHMuCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgCisrLyog SWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgRFNBIG1ldGhvZCBpcyBGSVBTIGNvbXBsaWFudCBhbmQg Y2FuIGJlIHVzZWQKKysgKiBpbiBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0IGluIHRoZSB2YWxpZGF0 ZWQgbW9kdWxlIG1ldGhvZC4gSWYgYW4KKysgKiBhcHBsaWNhdGlvbiBzZXRzIHRoaXMgZmxhZyBp biBpdHMgb3duIG1ldGhvZHMgaXQgaXMgaXRzIHJlcG9zaWJpbGl0eQorKyAqIHRvIGVuc3VyZSB0 aGUgcmVzdWx0IGlzIGNvbXBsaWFudC4KKysgKi8KKysKKysjZGVmaW5lIERTQV9GTEFHX0ZJUFNf TUVUSE9ECQkJMHgwNDAwCisrCisrLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0aW9u cyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCisrICogcGVybWl0dGVkIGl0IGlz IHRoZW4gdGhlIGFwcGxpY2F0aW9ucyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUK KysgKiB1c2FnZSBpcyBjb21wbGlhbnQuCisrICovCisrCisrI2RlZmluZSBEU0FfRkxBR19OT05f RklQU19BTExPVwkJCTB4MDQwMAorKworICNpZmRlZiAgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMi IHsKKyAjZW5kaWYKK0BAIC0yNzAsOCArMjg3LDExIEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmlu Z3Modm9pZCk7CisgI2RlZmluZSBEU0FfRl9ET19EU0FfUFJJTlQJCQkJIDEwNAorICNkZWZpbmUg RFNBX0ZfRFNBUEFSQU1TX1BSSU5UCQkJCSAxMDAKKyAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19Q UklOVF9GUAkJCSAxMDEKKysjZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTgkJCSAxMjQK KysjZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEyMworICNkZWZpbmUgRFNB X0ZfRFNBX0RPX1NJR04JCQkJIDExMgorICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1ZFUklGWQkJCQkg MTEzCisrI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSUwkJCSAxMjUKKyAjZGVm aW5lIERTQV9GX0RTQV9ORVdfTUVUSE9ECQkJCSAxMDMKKyAjZGVmaW5lIERTQV9GX0RTQV9QQVJB TV9ERUNPREUJCQkJIDExOQorICNkZWZpbmUgRFNBX0ZfRFNBX1BSSU5UX0ZQCQkJCSAxMDUKK0BA IC0yOTYsOSArMzE2LDEyIEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9pZCk7CisgI2Rl ZmluZSBEU0FfUl9EQVRBX1RPT19MQVJHRV9GT1JfS0VZX1NJWkUJCSAxMDAKKyAjZGVmaW5lIERT QV9SX0RFQ09ERV9FUlJPUgkJCQkgMTA0CisgI2RlZmluZSBEU0FfUl9JTlZBTElEX0RJR0VTVF9U WVBFCQkJIDEwNgorKyNkZWZpbmUgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDExMAorICNk ZWZpbmUgRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTCQkJIDEwMQorICNkZWZpbmUgRFNBX1JfTU9E VUxVU19UT09fTEFSR0UJCQkJIDEwMworKyNkZWZpbmUgRFNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJ CSAxMTEKKyAjZGVmaW5lIERTQV9SX05PX1BBUkFNRVRFUlNfU0VUCQkJCSAxMDcKKysjZGVmaW5l IERTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDExMgorICNkZWZpbmUg RFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJIDEwNQorIAorICNpZmRlZiAgX19jcGx1 c3BsdXMKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMg b3BlbnNzbC0xLjAuMGYvY3J5cHRvL2RzYS9kc2Ffa2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4wZi9j cnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzCTIwMDctMDMtMjggMDI6MTU6MjUuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2RzYS9kc2Ffa2V5LmMJMjAxMi0wMS0wNSAx MzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02Myw5ICs2Myw1NSBAQAorICNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisgI2luY2x1ZGUgPG9wZW5z c2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2VuZGlmCisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorIAorIHN0YXRpYyBpbnQgZHNhX2J1 aWx0aW5fa2V5Z2VuKERTQSAqZHNhKTsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3Rh dGljIGludCBmaXBzX2RzYV9wYWlyd2lzZV9mYWlsID0gMDsKKysKKyt2b2lkIEZJUFNfY29ycnVw dF9kc2Ffa2V5Z2VuKHZvaWQpCisrCXsKKysJZmlwc19kc2FfcGFpcndpc2VfZmFpbCA9IDE7Cisr CX0KKysKKytpbnQgZmlwc19jaGVja19kc2EoRFNBICpkc2EpCisrCXsKKysJRVZQX1BLRVkgKnBr OworKwl1bnNpZ25lZCBjaGFyIHRic1tdID0gIkRTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsKKysJ aW50IHJldCA9IDA7CisrCisrICAgIAlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQor KwkJZ290byBlcnI7CisrCisrCUVWUF9QS0VZX3NldDFfRFNBKHBrLCBkc2EpOworKworKwlpZiAo IWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKKysJCQkJCU5VTEwsIDAsIEVW UF9zaGExKCksIDAsIE5VTEwpKQorKwkJZ290byBlcnI7CisrCisrCXJldCA9IDE7CisrCisrZXJy OgorKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Cisr CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX0RTQSxGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlM RUQpOworKwkJfQorKworKwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysKKysJcmV0 dXJuIHJldDsKKysJfQorKyNlbmRpZgorKworIGludCBEU0FfZ2VuZXJhdGVfa2V5KERTQSAqZHNh KQorIAl7CisgCWlmKGRzYS0+bWV0aC0+ZHNhX2tleWdlbikKK0BAIC03OSw2ICsxMjUsMTQgQEAg c3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCisgCUJOX0NUWCAqY3R4PU5V TEw7CisgCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxMOworIAorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwg T1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURTQWVycihEU0Ff Rl9EU0FfQlVJTFRJTl9LRVlHRU4sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlnb3Rv IGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxM KSBnb3RvIGVycjsKKyAKKyAJaWYgKGRzYS0+cHJpdl9rZXkgPT0gTlVMTCkKK0BAIC0xMTcsNiAr MTcxLDE1IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQorIAorIAlk c2EtPnByaXZfa2V5PXByaXZfa2V5OworIAlkc2EtPnB1Yl9rZXk9cHViX2tleTsKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmIChmaXBzX2RzYV9w YWlyd2lzZV9mYWlsKQorKwkJCUJOX2FkZF93b3JkKGRzYS0+cHViX2tleSwgMSk7CisrCQlpZigh Zmlwc19jaGVja19kc2EoZHNhKSkKKysJCSAgICBnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKyAJ b2s9MTsKKyAKKyBlcnI6CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZHNhL2RzYV9v c3NsLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZHNhL2RzYV9vc3NsLmMKKy0tLSBvcGVu c3NsLTEuMC4wZi9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcwkyMDExLTAyLTAxIDEzOjU0OjA0 LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9kc2EvZHNhX29zc2wu YwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTY1LDYgKzY1LDkgQEAK KyAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Cisg I2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3RhdGljIERTQV9TSUcgKmRzYV9kb19z aWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkbGVuLCBEU0EgKmRzYSk7Cisgc3Rh dGljIGludCBkc2Ffc2lnbl9zZXR1cChEU0EgKmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJR05VTSAq KmtpbnZwLCBCSUdOVU0gKipycCk7CitAQCAtODIsNyArODUsNyBAQCBOVUxMLCAvKiBkc2FfbW9k X2V4cCwgKi8KKyBOVUxMLCAvKiBkc2FfYm5fbW9kX2V4cCwgKi8KKyBkc2FfaW5pdCwKKyBkc2Ff ZmluaXNoLAorLTAsCisrRFNBX0ZMQUdfRklQU19NRVRIT0QsCisgTlVMTCwKKyBOVUxMLAorIE5V TEwKK0BAIC0xMzcsNiArMTQwLDIwIEBAIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25z dCB1bnNpZ24KKyAJaW50IHJlYXNvbj1FUlJfUl9CTl9MSUI7CisgCURTQV9TSUcgKnJldD1OVUxM OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkK KysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19TSUdOLEZJUFNfUl9GSVBTX1NF TEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gTlVMTDsKKysJICAgIH0KKysKKysJaWYgKEZJ UFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5f TU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfRE9fU0lHTiwgRFNBX1Jf S0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVybiBOVUxMOworKwkJfQorKyNlbmRpZgorKwor IAlCTl9pbml0KCZtKTsKKyAJQk5faW5pdCgmeHIpOworIAorQEAgLTMwMyw2ICszMjAsMjAgQEAg c3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkIAorIAkJcmV0dXJuIC0xOwor IAkJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQo KSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksRklQU19SX0ZJ UFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAtMTsKKysJICAgIH0KKysKKysJaWYg KEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19N SU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBE U0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJcmV0dXJuIC0xOworKwkJfQorKyNlbmRpZgor KworIAlpID0gQk5fbnVtX2JpdHMoZHNhLT5xKTsKKyAJLyogZmlwcyAxODYtMyBhbGxvd3Mgb25s eSBkaWZmZXJlbnQgc2l6ZXMgZm9yIHEgKi8KKyAJaWYgKGkgIT0gMTYwICYmIGkgIT0gMjI0ICYm IGkgIT0gMjU2KQorQEAgLTM4NSw2ICs0MTYsOSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnko Y29uc3QgdW5zaWduZWQgCisgCisgc3RhdGljIGludCBkc2FfaW5pdChEU0EgKmRzYSkKKyB7Cisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisg CWRzYS0+ZmxhZ3N8PURTQV9GTEFHX0NBQ0hFX01PTlRfUDsKKyAJcmV0dXJuKDEpOworIH0KK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9lcnIvZXJyX2FsbC5jLmZpcHMgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2Vyci9lcnJfYWxsLmMKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXJy L2Vycl9hbGwuYy5maXBzCTIwMDktMDgtMDkgMTY6NTg6MDUuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMGYvY3J5cHRvL2Vyci9lcnJfYWxsLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4w MDAwMDAwMDAgKzAxMDAKK0BAIC05Niw2ICs5Niw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvb2Nz cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3RzLmg+ CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5k aWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCisgI2luY2x1ZGUgPG9wZW5zc2wvY21zLmg+Cisg I2VuZGlmCitAQCAtMTQ5LDYgKzE1Miw5IEBAIHZvaWQgRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3Mo dm9pZCkKKyAjZW5kaWYKKyAJRVJSX2xvYWRfT0NTUF9zdHJpbmdzKCk7CisgCUVSUl9sb2FkX1VJ X3N0cmluZ3MoKTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUVSUl9sb2FkX0ZJUFNfc3RyaW5n cygpOworKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19DTVMKKyAJRVJSX2xvYWRfQ01TX3N0 cmluZ3MoKTsKKyAjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZGln ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2RpZ2VzdC5jCistLS0gb3BlbnNz bC0xLjAuMGYvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzCTIwMTAtMDMtMDUgMTQ6MzM6NDMuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9kaWdlc3QuYwkyMDEy LTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTExNiw2ICsxMTYsNyBAQAorICNp Zm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KKyAj ZW5kaWYKKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyB2b2lkIEVWUF9NRF9DVFhfaW5pdChF VlBfTURfQ1RYICpjdHgpCisgCXsKK0BAIC0xMzgsOSArMTM5LDUwIEBAIGludCBFVlBfRGlnZXN0 SW5pdChFVlBfTURfQ1RYICpjdHgsIGNvbnMKKyAJcmV0dXJuIEVWUF9EaWdlc3RJbml0X2V4KGN0 eCwgdHlwZSwgTlVMTCk7CisgCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrLyogVGhl IHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNl IG5vbiBGSVBTCisrICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJy b3JzLgorKyAqLworKworK3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQX01EX0NUWCAqY3R4KQorKwl7 IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IGluaXQiKTsgcmV0dXJuIDA7fQorKworK3N0YXRp YyBpbnQgYmFkX3VwZGF0ZShFVlBfTURfQ1RYICpjdHgsY29uc3Qgdm9pZCAqZGF0YSxzaXplX3Qg Y291bnQpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgdXBkYXRlIik7IHJldHVybiAw O30KKysKKytzdGF0aWMgaW50IGJhZF9maW5hbChFVlBfTURfQ1RYICpjdHgsdW5zaWduZWQgY2hh ciAqbWQpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgRmluYWwiKTsgcmV0dXJuIDA7 fQorKworK3N0YXRpYyBjb25zdCBFVlBfTUQgYmFkX21kID0KKysJeworKwkwLAorKwkwLAorKwkw LAorKwkwLAorKwliYWRfaW5pdCwKKysJYmFkX3VwZGF0ZSwKKysJYmFkX2ZpbmFsLAorKwlOVUxM LAorKwlOVUxMLAorKwlOVUxMLAorKwkwLAorKwl7MCwwLDAsMH0sCisrCX07CisrCisrI2VuZGlm CisrCisgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgY29uc3QgRVZQX01E ICp0eXBlLCBFTkdJTkUgKmltcGwpCisgCXsKKyAJRVZQX01EX0NUWF9jbGVhcl9mbGFncyhjdHgs RVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0VWUF9ESUdFU1RJ TklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQljdHgtPmRpZ2VzdCA9ICZi YWRfbWQ7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9f RU5HSU5FCisgCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBjYW4gYmUgdXNl ZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKKyAJICogc28gdGhpcyBjb250ZXh0IG1heSBhbHJlYWR5 IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5nCitAQCAtMTk3LDYgKzIzOSwx OCBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCisgI2VuZGlmCisg CWlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKQorIAkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ CWlmIChGSVBTX21vZGUoKSkKKysJCQl7CisrCQkJaWYgKCEodHlwZS0+ZmxhZ3MgJiBFVlBfTURf RkxBR19GSVBTKSAKKysJCQkgJiYgIShjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9G SVBTX0FMTE9XKSkKKysJCQkJeworKwkJCQlFVlBlcnIoRVZQX0ZfRVZQX0RJR0VTVElOSVRfRVgs IEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKysJCQkJY3R4LT5kaWdlc3QgPSAmYmFkX21kOwor KwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCX0KKysjZW5kaWYKKyAJCWlmIChjdHgtPmRpZ2Vz dCAmJiBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpCisgCQkJT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0 YSk7CisgCQljdHgtPmRpZ2VzdD10eXBlOworQEAgLTIzMCw2ICsyODQsOSBAQCBza2lwX3RvX2lu aXQ6CisgCisgaW50IEVWUF9EaWdlc3RVcGRhdGUoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB2b2lk ICpkYXRhLCBzaXplX3QgY291bnQpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNf c2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJcmV0dXJuIGN0eC0+dXBkYXRlKGN0eCxkYXRh LGNvdW50KTsKKyAJfQorIAorQEAgLTI0Niw2ICszMDMsOSBAQCBpbnQgRVZQX0RpZ2VzdEZpbmFs KEVWUF9NRF9DVFggKmN0eCwgdW5zCisgaW50IEVWUF9EaWdlc3RGaW5hbF9leChFVlBfTURfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKnNpemUpCisgCXsKKyAJaW50 IHJldDsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysj ZW5kaWYKKyAKKyAJT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUgPD0gRVZQX01B WF9NRF9TSVpFKTsKKyAJcmV0PWN0eC0+ZGlnZXN0LT5maW5hbChjdHgsbWQpOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL2V2cC9lX2Flcy5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9lX2Flcy5jLmZp cHMJMjAwNC0wMS0yOCAyMDowNTozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZXZwL2VfYWVzLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAK K0BAIC02OSwzMiArNjksMjkgQEAgdHlwZWRlZiBzdHJ1Y3QKKyAKKyBJTVBMRU1FTlRfQkxPQ0tf Q0lQSEVSKGFlc18xMjgsIGtzLCBBRVMsIEVWUF9BRVNfS0VZLAorIAkJICAgICAgIE5JRF9hZXNf MTI4LCAxNiwgMTYsIDE2LCAxMjgsCistCQkgICAgICAgMCwgYWVzX2luaXRfa2V5LCBOVUxMLCAK Ky0JCSAgICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJICAgICAgIEVWUF9DSVBIRVJf Z2V0X2FzbjFfaXYsCistCQkgICAgICAgTlVMTCkKKysJCSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJ UFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkgICAgICAgYWVzX2luaXRfa2V5LAor KwkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCisgSU1QTEVNRU5UX0JMT0NLX0NJUEhF UihhZXNfMTkyLCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKKyAJCSAgICAgICBOSURfYWVzXzE5Miwg MTYsIDI0LCAxNiwgMTI4LAorLQkJICAgICAgIDAsIGFlc19pbml0X2tleSwgTlVMTCwgCistCQkg ICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAgICAgICBFVlBfQ0lQSEVSX2dldF9h c24xX2l2LAorLQkJICAgICAgIE5VTEwpCisrCQkgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTfEVW UF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJICAgICAgIGFlc19pbml0X2tleSwKKysJCSAg ICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorIElNUExFTUVOVF9CTE9DS19DSVBIRVIoYWVz XzI1Niwga3MsIEFFUywgRVZQX0FFU19LRVksCisgCQkgICAgICAgTklEX2Flc18yNTYsIDE2LCAz MiwgMTYsIDEyOCwKKy0JCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEwsIAorLQkJICAgICAg IEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9p diwKKy0JCSAgICAgICBOVUxMKQorLQorLSNkZWZpbmUgSU1QTEVNRU5UX0FFU19DRkJSKGtzaXpl LGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihhZXMsQUVTLEVWUF9BRVNfS0VZLGtzLGtzaXplLGNiaXRz LDE2KQorLQorLUlNUExFTUVOVF9BRVNfQ0ZCUigxMjgsMSkKKy1JTVBMRU1FTlRfQUVTX0NGQlIo MTkyLDEpCistSU1QTEVNRU5UX0FFU19DRkJSKDI1NiwxKQorLQorLUlNUExFTUVOVF9BRVNfQ0ZC UigxMjgsOCkKKy1JTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDgpCistSU1QTEVNRU5UX0FFU19DRkJS KDI1Niw4KQorKwkJICAgICAgIEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFV TFRfQVNOMSwKKysJCSAgICAgICBhZXNfaW5pdF9rZXksCisrCQkgICAgICAgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCkKKysKKysjZGVmaW5lIElNUExFTUVOVF9BRVNfQ0ZCUihrc2l6ZSxjYml0cyxm bGFncykJSU1QTEVNRU5UX0NGQlIoYWVzLEFFUyxFVlBfQUVTX0tFWSxrcyxrc2l6ZSxjYml0cywx NixmbGFncykKKysKKytJTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDEsRVZQX0NJUEhfRkxBR19GSVBT KQorK0lNUExFTUVOVF9BRVNfQ0ZCUigxOTIsMSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrSU1QTEVN RU5UX0FFU19DRkJSKDI1NiwxLEVWUF9DSVBIX0ZMQUdfRklQUykKKysKKytJTVBMRU1FTlRfQUVT X0NGQlIoMTI4LDgsRVZQX0NJUEhfRkxBR19GSVBTKQorK0lNUExFTUVOVF9BRVNfQ0ZCUigxOTIs OCxFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrSU1QTEVNRU5UX0FFU19DRkJSKDI1Niw4LEVWUF9DSVBI X0ZMQUdfRklQUykKKyAKKyBzdGF0aWMgaW50IGFlc19pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAq Y3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgCQkgICBjb25zdCB1bnNpZ25lZCBjaGFy ICppdiwgaW50IGVuYykKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZV9jYW1l bGxpYS5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMKKy0tLSBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYy5maXBzCTIwMDYtMDgtMzEgMjI6 NTY6MjAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9lX2Nh bWVsbGlhLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC05Myw3ICs5 Myw3IEBAIElNUExFTUVOVF9CTE9DS19DSVBIRVIoY2FtZWxsaWFfMjU2LCBrcywKKyAJRVZQX0NJ UEhFUl9nZXRfYXNuMV9pdiwKKyAJTlVMTCkKKyAKKy0jZGVmaW5lIElNUExFTUVOVF9DQU1FTExJ QV9DRkJSKGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihjYW1lbGxpYSxDYW1lbGxpYSxFVlBf Q0FNRUxMSUFfS0VZLGtzLGtzaXplLGNiaXRzLDE2KQorKyNkZWZpbmUgSU1QTEVNRU5UX0NBTUVM TElBX0NGQlIoa3NpemUsY2JpdHMpCUlNUExFTUVOVF9DRkJSKGNhbWVsbGlhLENhbWVsbGlhLEVW UF9DQU1FTExJQV9LRVksa3Msa3NpemUsY2JpdHMsMTYsMCkKKyAKKyBJTVBMRU1FTlRfQ0FNRUxM SUFfQ0ZCUigxMjgsMSkKKyBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUigxOTIsMSkKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9j cnlwdG8vZXZwL2VfZGVzMy5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9lX2RlczMu Yy5maXBzCTIwMDgtMTItMjkgMTM6MzU6NDcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2V2cC9lX2RlczMuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCAr MDEwMAorQEAgLTIwNiw5ICsyMDYsOSBAQCBzdGF0aWMgaW50IGRlc19lZGUzX2NmYjhfY2lwaGVy KEVWUF9DSVBICisgICAgIH0KKyAKKyBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURF X0tFWSwgTklEX2Rlc19lZGUsIDgsIDE2LCA4LCA2NCwKKy0JCQlFVlBfQ0lQSF9SQU5EX0tFWSwg ZGVzX2VkZV9pbml0X2tleSwgTlVMTCwgCistCQkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0J CQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhf RkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJCWRlc19lZGVfaW5pdF9r ZXksCisrCQkJTlVMTCwgTlVMTCwgTlVMTCwKKyAJCQlkZXMzX2N0cmwpCisgCisgI2RlZmluZSBk ZXNfZWRlM19jZmI2NF9jaXBoZXIgZGVzX2VkZV9jZmI2NF9jaXBoZXIKK0BAIC0yMTcsMjEgKzIx NywyMSBAQCBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tFWSwgCisgI2RlZmlu ZSBkZXNfZWRlM19lY2JfY2lwaGVyIGRlc19lZGVfZWNiX2NpcGhlcgorIAorIEJMT0NLX0NJUEhF Ul9kZWZzKGRlc19lZGUzLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUzLCA4LCAyNCwgOCwgNjQs CistCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LCBOVUxMLCAKKy0JCQlF VlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlF VlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxU X0FTTjEsCisrCQkJZGVzX2VkZTNfaW5pdF9rZXksCisrCQkJTlVMTCwgTlVMTCwgTlVMTCwKKyAJ CQlkZXMzX2N0cmwpCisgCisgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9L RVksTklEX2Rlc19lZGUzLDI0LDgsMSwKKy0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19l ZGUzX2luaXRfa2V5LE5VTEwsCistCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkg ICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQ SF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkgICAgIGRlc19lZGUz X2luaXRfa2V5LAorKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAorIAkJICAgICBkZXMzX2N0cmwp CisgCisgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19l ZGUzLDI0LDgsOCwKKy0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5 LE5VTEwsCistCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkgICAgIEVWUF9DSVBI RVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8 RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAor KwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAorIAkJICAgICBkZXMzX2N0cmwpCisgCisgc3RhdGlj IGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmtleSwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZV9udWxsLmMu ZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2VfbnVsbC5jCistLS0gb3BlbnNzbC0xLjAu MGYvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzCTIwMDgtMTAtMzEgMjA6NDg6MjQuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9lX251bGwuYwkyMDEyLTAxLTA1 IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIGNvbnN0 IEVWUF9DSVBIRVIgbl9jaXBoZXI9CisgCXsKKyAJTklEX3VuZGVmLAorIAkxLDAsMCwKKy0JMCwK KysJRVZQX0NJUEhfRkxBR19GSVBTLAorIAludWxsX2luaXRfa2V5LAorIAludWxsX2NpcGhlciwK KyAJTlVMTCwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZV9yYzQuYy5maXBz IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZV9yYzQuYworLS0tIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9ldnAvZV9yYzQuYy5maXBzCTIwMDgtMTAtMzEgMjA6NDg6MjQuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9lX3JjNC5jCTIwMTItMDEtMDUgMTM6MjI6 MzAuMDAwMDAwMDAwICswMTAwCitAQCAtNjQsNiArNjQsNyBAQAorICNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9yYzQuaD4KKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyAvKiBGSVhNRTogc3VyZWx5IHRo aXMgaXMgYXZhaWxhYmxlIGVsc2V3aGVyZT8gKi8KKyAjZGVmaW5lIEVWUF9SQzRfS0VZX1NJWkUJ CTE2CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZXZwX2VuYy5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL2V2cC9ldnBfZW5jLmMuZmlwcwkyMDEwLTEwLTEyIDAxOjI0OjQ5LjAwMDAwMDAwMCArMDIw MAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZXZwX2VuYy5jCTIwMTItMDEtMDUgMTM6 MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtNjgsOCArNjgsNTMgQEAKKyAKKyBjb25zdCBjaGFy IEVWUF92ZXJzaW9uW109IkVWUCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysKKysvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dy YW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKKysgKiBhbGdvcml0aG1zIGluIEZJUFMg bW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCisrICovCisrCisrc3RhdGljIGludCBiYWRfaW5p dChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisrCQkgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCisrCXsgRklQU19FUlJPUl9JR05PUkVE KCJDaXBoZXIgaW5pdCIpOyByZXR1cm4gMDt9CisrCisrc3RhdGljIGludCBiYWRfZG9fY2lwaGVy KEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKysJCQkgY29uc3QgdW5z aWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisrCXsgRklQU19FUlJPUl9JR05PUkVE KCJDaXBoZXIgdXBkYXRlIik7IHJldHVybiAwO30KKysKKysvKiBOQjogbm8gY2xlYW51cCBiZWNh dXNlIGl0IGlzIGFsbG93ZWQgYWZ0ZXIgZmFpbGVkIGluaXQgKi8KKysKKytzdGF0aWMgaW50IGJh ZF9zZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKKysJeyBGSVBT X0VSUk9SX0lHTk9SRUQoIkNpcGhlciBzZXRfYXNuMSIpOyByZXR1cm4gMDt9Cisrc3RhdGljIGlu dCBiYWRfZ2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCisrCXsg RklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgZ2V0X2FzbjEiKTsgcmV0dXJuIDA7fQorK3N0YXRp YyBpbnQgYmFkX2N0cmwoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IHR5cGUsIGludCBhcmcsIHZv aWQgKnB0cikKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBjdHJsIik7IHJldHVybiAw O30KKysKKytzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0KKysJeworKwkwLAor KwkwLAorKwkwLAorKwkwLAorKwkwLAorKwliYWRfaW5pdCwKKysJYmFkX2RvX2NpcGhlciwKKysJ TlVMTCwKKysJMCwKKysJYmFkX3NldF9hc24xLAorKwliYWRfZ2V0X2FzbjEsCisrCWJhZF9jdHJs LAorKwlOVUxMCisrCX07CisrCisrI2VuZGlmCisrCisgdm9pZCBFVlBfQ0lQSEVSX0NUWF9pbml0 KEVWUF9DSVBIRVJfQ1RYICpjdHgpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNf c2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVtc2V0KGN0eCwwLHNpemVvZihFVlBfQ0lQ SEVSX0NUWCkpOworIAkvKiBjdHgtPmNpcGhlcj1OVUxMOyAqLworIAl9CitAQCAtMTAxLDYgKzE0 NiwxNCBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0CisgCQkJZW5j ID0gMTsKKyAJCWN0eC0+ZW5jcnlwdCA9IGVuYzsKKyAJCX0KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9F VlBfQ0lQSEVSSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJY3R4LT5j aXBoZXIgPSAmYmFkX2NpcGhlcjsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgorICNpZm5k ZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5p dHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cworIAkgKiBzbyB0aGlzIGNvbnRl eHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKK0BA IC0yMjAsNiArMjczLDIyIEBAIHNraXBfdG9faW5pdDoKKyAJCX0KKyAJfQorIAorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysJLyogQWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1ldGVy cyBjaGFuZ2VzIGFyZSBwZXJtaXNzaWJsZS4KKysJICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJ UFMgZW5hYmxpbmcgYXQgdGhpcyBwb2ludC4KKysJICovCisrCWlmIChrZXkgJiYgRklQU19tb2Rl KCkpCisrCQl7CisrCQlpZiAoIShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJ UFMpCisrCQkJJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkK KysJCQl7CisrCQkJRVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9ESVNBQkxF RF9GT1JfRklQUyk7CisrCQkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKKysJCQlyZXR1cm4g MDsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmKGtleSB8fCAoY3R4LT5jaXBoZXItPmZs YWdzICYgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5JVCkpIHsKKyAJCWlmKCFjdHgtPmNpcGhlci0+ aW5pdChjdHgsa2V5LGl2LGVuYykpIHJldHVybiAwOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vZXZwL2V2cF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAv ZXZwX2Vyci5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9ldnBfZXJyLmMuZmlwcwky MDEwLTAyLTA3IDE0OjQxOjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9ldnAvZXZwX2Vyci5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitA QCAtMTU1LDYgKzE1NSw3IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRVZQX3N0cl9yZWFzb25z W10KKyB7RVJSX1JFQVNPTihFVlBfUl9ERUNPREVfRVJST1IpICAgICAgICAgICwiZGVjb2RlIGVy cm9yIn0sCisge0VSUl9SRUFTT04oRVZQX1JfRElGRkVSRU5UX0tFWV9UWVBFUykgICAsImRpZmZl cmVudCBrZXkgdHlwZXMifSwKKyB7RVJSX1JFQVNPTihFVlBfUl9ESUZGRVJFTlRfUEFSQU1FVEVS UykgICwiZGlmZmVyZW50IHBhcmFtZXRlcnMifSwKKyt7RVJSX1JFQVNPTihFVlBfUl9ESVNBQkxF RF9GT1JfRklQUykgICAgICwiZGlzYWJsZWQgZm9yIGZpcHMifSwKKyB7RVJSX1JFQVNPTihFVlBf Ul9FTkNPREVfRVJST1IpICAgICAgICAgICwiZW5jb2RlIGVycm9yIn0sCisge0VSUl9SRUFTT04o RVZQX1JfRVZQX1BCRV9DSVBIRVJJTklUX0VSUk9SKSwiZXZwIHBiZSBjaXBoZXJpbml0IGVycm9y In0sCisge0VSUl9SRUFTT04oRVZQX1JfRVhQRUNUSU5HX0FOX1JTQV9LRVkpICAsImV4cGVjdGlu ZyBhbiByc2Ega2V5In0sCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2V2cC5o LmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9ldnAuaAorLS0tIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9ldnAvZXZwLmguZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjI5LjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZXZwLmgJMjAxMi0wMS0wNSAxMzoyMjoz MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC03NSw2ICs3NSwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3Ns L2Jpby5oPgorICNlbmRpZgorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgLyoKKyAjZGVmaW5lIEVWUF9SQzJfS0VZX1NJWkUJ CTE2CisgI2RlZmluZSBFVlBfUkM0X0tFWV9TSVpFCQkxNgorQEAgLTE5Nyw2ICsyMDEsOCBAQCB0 eXBlZGVmIGludCBldnBfdmVyaWZ5X21ldGhvZChpbnQgdHlwZSxjCisgCisgI2RlZmluZSBFVlBf TURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUJMHgwMDA0CisgCisrI2RlZmluZSBFVlBfTURf RkxBR19GSVBTCTB4MDQwMCAvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2Rl ICovCisrCisgLyogRGlnZXN0QWxnb3JpdGhtSWRlbnRpZmllciBmbGFncy4uLiAqLworIAorICNk ZWZpbmUgRVZQX01EX0ZMQUdfRElHQUxHSURfTUFTSwkJMHgwMDE4CitAQCAtMjY5LDEwICsyNzUs NiBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAorIAkJCQkJCSogY2xlYW5lZCAqLworICNkZWZpbmUg RVZQX01EX0NUWF9GTEFHX1JFVVNFCQkweDAwMDQgLyogRG9uJ3QgZnJlZSB1cCBjdHgtPm1kX2Rh dGEKKyAJCQkJCQkqIGluIEVWUF9NRF9DVFhfY2xlYW51cCAqLworLS8qIEZJUFMgYW5kIHBhZCBv cHRpb25zIGFyZSBpZ25vcmVkIGluIDEuMC4wLCBkZWZpbml0aW9ucyBhcmUgaGVyZQorLSAqIHNv IHdlIGRvbid0IGFjY2lkZW50YWxseSByZXVzZSB0aGUgdmFsdWVzIGZvciBvdGhlciBwdXJwb3Nl cy4KKy0gKi8KKy0KKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVwkweDAw MDgJLyogQWxsb3cgdXNlIG9mIG5vbiBGSVBTIGRpZ2VzdAorIAkJCQkJCSAqIGluIEZJUFMgbW9k ZSAqLworIAorQEAgLTI4NCw2ICsyODYsMTAgQEAgc3RydWN0IGVudl9tZF9jdHhfc3QKKyAjZGVm aW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEJMHgwMAkvKiBQS0NTIzEgdjEuNSBtb2RlICov CisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEJMHgxMAkvKiBYOS4zMSBtb2RlICov CisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUwkJMHgyMAkvKiBQU1MgbW9kZSAqLwor KyNkZWZpbmUgTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KSBcCisrCQkoKGN0eC0+Zmxh Z3M+PjE2KSAmMHhGRkZGKSAvKiBzZWVkIGxlbmd0aCAqLworKyNkZWZpbmUgRVZQX01EX0NUWF9G TEFHX1BTU19NRExFTgkweEZGRkYJLyogc2FsdCBsZW4gc2FtZSBhcyBkaWdlc3QgKi8KKysjZGVm aW5lIEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQwkweEZGRkUJLyogc2FsdCBtYXggb3IgYXV0byBy ZWNvdmVyZWQgKi8KKyAKKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT19JTklUCQkweDAxMDAg LyogRG9uJ3QgaW5pdGlhbGl6ZSBtZF9kYXRhICovCisgCitAQCAtMzMwLDEyICszMzYsMTYgQEAg c3RydWN0IGV2cF9jaXBoZXJfc3QKKyAjZGVmaW5lIAlFVlBfQ0lQSF9OT19QQURESU5HCQkweDEw MAorIC8qIGNpcGhlciBoYW5kbGVzIHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAqLworICNkZWZpbmUg CUVWUF9DSVBIX1JBTkRfS0VZCQkweDIwMAorLS8qIGNpcGhlciBoYXMgaXRzIG93biBhZGRpdGlv bmFsIGNvcHlpbmcgbG9naWMgKi8KKy0jZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0 MDAKKysvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCisrI2RlZmlu ZQkJRVZQX0NJUEhfRkxBR19GSVBTCQkweDQwMAorKy8qIEFsbG93IG5vbiBGSVBTIGNpcGhlciBp biBGSVBTIG1vZGUgKi8KKysjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4 ODAwCisgLyogQWxsb3cgdXNlIGRlZmF1bHQgQVNOMSBnZXQvc2V0IGl2ICovCisgI2RlZmluZQkJ RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEJMHgxMDAwCisgLyogQnVmZmVyIGxlbmd0aCBpbiBi aXRzIG5vdCBieXRlczogQ0ZCMSBtb2RlIG9ubHkgKi8KKyAjZGVmaW5lCQlFVlBfQ0lQSF9GTEFH X0xFTkdUSF9CSVRTCTB4MjAwMAorKy8qIGNpcGhlciBoYXMgaXRzIG93biBhZGRpdGlvbmFsIGNv cHlpbmcgbG9naWMgKi8KKysjZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAwCisg CisgLyogY3RybCgpIHZhbHVlcyAqLworIAorQEAgLTEyMzksNiArMTI0OSw3IEBAIHZvaWQgRVJS X2xvYWRfRVZQX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBFVlBfUl9ERUNPREVfRVJST1IJCQkJ IDExNAorICNkZWZpbmUgRVZQX1JfRElGRkVSRU5UX0tFWV9UWVBFUwkJCSAxMDEKKyAjZGVmaW5l IEVWUF9SX0RJRkZFUkVOVF9QQVJBTUVURVJTCQkJIDE1MworKyNkZWZpbmUgRVZQX1JfRElTQUJM RURfRk9SX0ZJUFMJCQkJIDE2MAorICNkZWZpbmUgRVZQX1JfRU5DT0RFX0VSUk9SCQkJCSAxMTUK KyAjZGVmaW5lIEVWUF9SX0VWUF9QQkVfQ0lQSEVSSU5JVF9FUlJPUgkJCSAxMTkKKyAjZGVmaW5l IEVWUF9SX0VYUEVDVElOR19BTl9SU0FfS0VZCQkJIDEyNworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MGYvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL2V2 cF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMJMjAx MC0wMS0yNiAxNTozMzo1MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vZXZwL2V2cF9saWIuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAg LTY3LDYgKzY3LDggQEAgaW50IEVWUF9DSVBIRVJfcGFyYW1fdG9fYXNuMShFVlBfQ0lQSEVSXwor IAorIAlpZiAoYy0+Y2lwaGVyLT5zZXRfYXNuMV9wYXJhbWV0ZXJzICE9IE5VTEwpCisgCQlyZXQ9 Yy0+Y2lwaGVyLT5zZXRfYXNuMV9wYXJhbWV0ZXJzKGMsdHlwZSk7CisrCWVsc2UgaWYgKGMtPmNp cGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkKKysJCXJldD1FVlBfQ0lQ SEVSX3NldF9hc24xX2l2KGMsIHR5cGUpOworIAllbHNlCisgCQlyZXQ9LTE7CisgCXJldHVybihy ZXQpOworQEAgLTc4LDYgKzgwLDggQEAgaW50IEVWUF9DSVBIRVJfYXNuMV90b19wYXJhbShFVlBf Q0lQSEVSXworIAorIAlpZiAoYy0+Y2lwaGVyLT5nZXRfYXNuMV9wYXJhbWV0ZXJzICE9IE5VTEwp CisgCQlyZXQ9Yy0+Y2lwaGVyLT5nZXRfYXNuMV9wYXJhbWV0ZXJzKGMsdHlwZSk7CisrCWVsc2Ug aWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkKKysJCXJl dD1FVlBfQ0lQSEVSX2dldF9hc24xX2l2KGMsIHR5cGUpOworIAllbHNlCisgCQlyZXQ9LTE7Cisg CXJldHVybihyZXQpOworQEAgLTE4Niw2ICsxOTAsOSBAQCBpbnQgRVZQX0NJUEhFUl9DVFhfYmxv Y2tfc2l6ZShjb25zdCBFVlBfCisgCisgaW50IEVWUF9DaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0 eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQg aW50IGlubCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVj aygpOworKyNlbmRpZgorIAlyZXR1cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsb3V0LGlu LGlubCk7CisgCX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZXZwX2xv Y2wuaC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvZXZwX2xvY2wuaAorLS0tIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzCTIwMTItMDEtMDUgMTM6MjI6Mjku MDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9ldnBfbG9jbC5o CTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMjU0LDE0ICsyNTQsMzIg QEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQXyMjY25hbWUjI19lY2Iodm9pZAorIAorICNkZWZpbmUg RVZQX0NfREFUQShrc3RydWN0LCBjdHgpCSgoa3N0cnVjdCAqKShjdHgpLT5jaXBoZXJfZGF0YSkK KyAKKy0jZGVmaW5lIElNUExFTUVOVF9DRkJSKGNpcGhlcixjcHJlZml4LGtzdHJ1Y3Qsa3NjaGVk LGtleXNpemUsY2JpdHMsaXZfbGVuKSBcCisrI2RlZmluZSBJTVBMRU1FTlRfQ0ZCUihjaXBoZXIs Y3ByZWZpeCxrc3RydWN0LGtzY2hlZCxrZXlzaXplLGNiaXRzLGl2X2xlbixmbCkgXAorIAlCTE9D S19DSVBIRVJfZnVuY19jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGNwcmVmaXgsY2JpdHMsa3N0cnVj dCxrc2NoZWQpIFwKKyAJQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGtz dHJ1Y3QsIFwKKyAJCQkgICAgIE5JRF8jI2NpcGhlciMjXyMja2V5c2l6ZSwga2V5c2l6ZS84LCBp dl9sZW4sIGNiaXRzLCBcCistCQkJICAgICAwLCBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgXAor LQkJCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAorLQkJCSAgICAgRVZQX0NJUEhFUl9n ZXRfYXNuMV9pdiwgXAorLQkJCSAgICAgTlVMTCkKKysJCQkgICAgIChmbCl8RVZQX0NJUEhfRkxB R19ERUZBVUxUX0FTTjEsIFwKKysJCQkgICAgIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMKQorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjZGVmaW5lIFJDMl9zZXRf a2V5CXByaXZhdGVfUkMyX3NldF9rZXkKKysjZGVmaW5lIFJDNF9zZXRfa2V5CXByaXZhdGVfUkM0 X3NldF9rZXkKKysjZGVmaW5lIENBU1Rfc2V0X2tleQlwcml2YXRlX0NBU1Rfc2V0X2tleQorKyNk ZWZpbmUgUkM1XzMyX3NldF9rZXkJcHJpdmF0ZV9SQzVfMzJfc2V0X2tleQorKyNkZWZpbmUgQkZf c2V0X2tleQlwcml2YXRlX0JGX3NldF9rZXkKKysjZGVmaW5lIFNFRURfc2V0X2tleQlwcml2YXRl X1NFRURfc2V0X2tleQorKyNkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleSBwcml2YXRlX0NhbWVsbGlh X3NldF9rZXkKKysjZGVmaW5lIGlkZWFfc2V0X2VuY3J5cHRfa2V5IHByaXZhdGVfaWRlYV9zZXRf ZW5jcnlwdF9rZXkKKysKKysjZGVmaW5lIE1ENV9Jbml0CXByaXZhdGVfTUQ1X0luaXQKKysjZGVm aW5lIE1ENF9Jbml0CXByaXZhdGVfTUQ0X0luaXQKKysjZGVmaW5lIE1EMl9Jbml0CXByaXZhdGVf TUQyX0luaXQKKysjZGVmaW5lIE1EQzJfSW5pdAlwcml2YXRlX01EQzJfSW5pdAorKyNkZWZpbmUg U0hBX0luaXQJcHJpdmF0ZV9TSEFfSW5pdAorKyNkZWZpbmUgUklQRU1EMTYwX0luaXQJcHJpdmF0 ZV9SSVBFTUQxNjBfSW5pdAorKyNkZWZpbmUgV0hJUkxQT09MX0luaXQJcHJpdmF0ZV9XSElSTFBP T0xfSW5pdAorKworKyNlbmRpZgorIAorIHN0cnVjdCBldnBfcGtleV9jdHhfc3QKKyAJeworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMgb3BlbnNzbC0xLjAu MGYvY3J5cHRvL2V2cC9tX2Rzcy5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9tX2Rz cy5jLmZpcHMJMjAwNi0wNC0xOSAxOTowNTo1Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vZXZwL21fZHNzLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAg KzAxMDAKK0BAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNhX21kPQorIAlO SURfZHNhV2l0aFNIQSwKKyAJTklEX2RzYVdpdGhTSEEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAor LQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQ X01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9kc3MxLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vZXZwL21fZHNzMS5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9tX2RzczEuYy5m aXBzCTIwMDYtMDQtMTkgMTk6MDU6NTcuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAu MGYvY3J5cHRvL2V2cC9tX2RzczEuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEw MAorQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc3MxX21kPQorIAlOSURf ZHNhLAorIAlOSURfZHNhV2l0aFNIQTEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURf RkxBR19QS0VZX0RJR0VTVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01EX0ZMQUdf RklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjBmL2NyeXB0by9ldnAvbV9tZGMyLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL21f bWRjMi5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9tX21kYzIuYy5maXBzCTIwMTAt MDItMDIgMTQ6MzY6MDUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRv L2V2cC9tX21kYzIuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTY4 LDYgKzY4LDcgQEAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisgI2luY2x1ZGUgPG9wZW5zc2wv cnNhLmg+CisgI2VuZGlmCisrI2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCisgc3RhdGljIGludCBp bml0KEVWUF9NRF9DVFggKmN0eCkKKyAJeyByZXR1cm4gTURDMl9Jbml0KGN0eC0+bWRfZGF0YSk7 IH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9tZDIuYy5maXBzIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9ldnAvbV9tZDIuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9l dnAvbV9tZDIuYy5maXBzCTIwMDUtMDctMTYgMTQ6Mzc6MzIuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9tX21kMi5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAw MDAwMDAwICswMTAwCitAQCAtNjgsNiArNjgsNyBAQAorICNpZm5kZWYgT1BFTlNTTF9OT19SU0EK KyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjZW5kaWYKKysjaW5jbHVkZSAiZXZwX2xvY2wu aCIKKyAKKyBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIAl7IHJldHVybiBNRDJf SW5pdChjdHgtPm1kX2RhdGEpOyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZw L21fbWQ0LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL21fbWQ0LmMKKy0tLSBvcGVu c3NsLTEuMC4wZi9jcnlwdG8vZXZwL21fbWQ0LmMuZmlwcwkyMDA1LTA3LTE2IDE0OjM3OjMyLjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9tZDQuYwkyMDEy LTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTY4LDYgKzY4LDcgQEAKKyAjaWZu ZGVmIE9QRU5TU0xfTk9fUlNBCisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2VuZGlmCisr I2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCisgc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0 eCkKKyAJeyByZXR1cm4gTUQ0X0luaXQoY3R4LT5tZF9kYXRhKTsgfQorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMGYvY3J5cHRvL2V2cC9tX21kNS5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2 cC9tX21kNS5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9tX21kNS5jLmZpcHMJMjAw NS0wNy0xNiAxNDozNzozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vZXZwL21fbWQ1LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02 OCw2ICs2OCw3IEBACisgI2lmbmRlZiBPUEVOU1NMX05PX1JTQQorICNpbmNsdWRlIDxvcGVuc3Ns L3JzYS5oPgorICNlbmRpZgorKyNpbmNsdWRlICJldnBfbG9jbC5oIgorIAorIHN0YXRpYyBpbnQg aW5pdChFVlBfTURfQ1RYICpjdHgpCisgCXsgcmV0dXJuIE1ENV9Jbml0KGN0eC0+bWRfZGF0YSk7 IH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9yaXBlbWQuYy5maXBzIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9yaXBlbWQuYworLS0tIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9ldnAvbV9yaXBlbWQuYy5maXBzCTIwMDUtMDctMTYgMTQ6Mzc6MzIuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9tX3JpcGVtZC5jCTIwMTItMDEtMDUg MTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtNjgsNiArNjgsNyBAQAorICNpZm5kZWYgT1BF TlNTTF9OT19SU0EKKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjZW5kaWYKKysjaW5jbHVk ZSAiZXZwX2xvY2wuaCIKKyAKKyBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIAl7 IHJldHVybiBSSVBFTUQxNjBfSW5pdChjdHgtPm1kX2RhdGEpOyB9CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2 cC9tX3NoYTEuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcwky MDA4LTAzLTEyIDIyOjE0OjI0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9ldnAvbV9zaGExLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BA IC04Miw3ICs4Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMV9tZD0KKyAJTklEX3NoYTEs CisgCU5JRF9zaGExV2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlF VlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJT RU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElH QUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAor IAlmaW5hbCwKK0BAIC0xMTksNyArMTIwLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyMjRf bWQ9CisgCU5JRF9zaGEyMjQsCisgCU5JRF9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hB MjI0X0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxF VlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJ R05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBT LAorIAlpbml0MjI0LAorIAl1cGRhdGUyNTYsCisgCWZpbmFsMjU2LAorQEAgLTEzOCw3ICsxNDAs OCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTI1Nl9tZD0KKyAJTklEX3NoYTI1NiwKKyAJTklE X3NoYTI1NldpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEEyNTZfRElHRVNUX0xFTkdUSCwKKy0JRVZQ X01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VO VCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FM R0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQyNTYsCisgCXVwZGF0ZTI1 NiwKKyAJZmluYWwyNTYsCitAQCAtMTY5LDcgKzE3Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQg c2hhMzg0X21kPQorIAlOSURfc2hhMzg0LAorIAlOSURfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24s CisgCVNIQTM4NF9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdO QVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01F VEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZM QUdfRklQUywKKyAJaW5pdDM4NCwKKyAJdXBkYXRlNTEyLAorIAlmaW5hbDUxMiwKK0BAIC0xODgs NyArMTkyLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGE1MTJfbWQ9CisgCU5JRF9zaGE1MTIs CisgCU5JRF9zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBNTEyX0RJR0VTVF9MRU5HVEgs CistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJ RF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxB R19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0NTEyLAorIAl1 cGRhdGU1MTIsCisgCWZpbmFsNTEyLAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2 cC9tX3dwLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL21fd3AuYworLS0tIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9ldnAvbV93cC5jLmZpcHMJMjAwNS0xMS0zMCAyMTo1NzoyMy4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZXZwL21fd3AuYwkyMDEyLTAx LTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTksNiArOSw3IEBACisgI2luY2x1ZGUg PG9wZW5zc2wvb2JqZWN0cy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKyAjaW5jbHVk ZSA8b3BlbnNzbC93aHJscG9vbC5oPgorKyNpbmNsdWRlICJldnBfbG9jbC5oIgorIAorIHN0YXRp YyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCisgCXsgcmV0dXJuIFdISVJMUE9PTF9Jbml0KGN0 eC0+bWRfZGF0YSk7IH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbmFtZXMu Yy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvbmFtZXMuYworLS0tIG9wZW5zc2wtMS4w LjBmL2NyeXB0by9ldnAvbmFtZXMuYy5maXBzCTIwMTAtMDMtMDYgMjE6NDc6NDUuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9uYW1lcy5jCTIwMTItMDEtMDUg MTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtNjYsNiArNjYsMTAgQEAgaW50IEVWUF9hZGRf Y2lwaGVyKGNvbnN0IEVWUF9DSVBIRVIgKmMpCisgCXsKKyAJaW50IHI7CisgCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKyNlbmRpZgorKworIAlyPU9C Sl9OQU1FX2FkZChPQkpfbmlkMnNuKGMtPm5pZCksT0JKX05BTUVfVFlQRV9DSVBIRVJfTUVUSCwo Y29uc3QgY2hhciAqKWMpOworIAlpZiAociA9PSAwKSByZXR1cm4oMCk7CisgCWNoZWNrX2RlZmVy KGMtPm5pZCk7CitAQCAtNzksNiArODMsMTAgQEAgaW50IEVWUF9hZGRfZGlnZXN0KGNvbnN0IEVW UF9NRCAqbWQpCisgCWludCByOworIAljb25zdCBjaGFyICpuYW1lOworIAorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysjZW5kaWYKKysKKyAJbmFtZT1P QkpfbmlkMnNuKG1kLT50eXBlKTsKKyAJcj1PQkpfTkFNRV9hZGQobmFtZSxPQkpfTkFNRV9UWVBF X01EX01FVEgsKGNvbnN0IGNoYXIgKiltZCk7CisgCWlmIChyID09IDApIHJldHVybigwKTsKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcyBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vZXZwL3Bfc2lnbi5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9w X3NpZ24uYy5maXBzCTIwMTAtMTEtMjcgMTg6MzQ6NTcuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9wX3NpZ24uYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAw MDAwMCArMDEwMAorQEAgLTYxLDYgKzYxLDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K KyAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorIAorICNpZmRlZiB1bmRlZgorIHZvaWQgRVZQ X1NpZ25Jbml0KEVWUF9NRF9DVFggKmN0eCwgRVZQX01EICp0eXBlKQorQEAgLTEwMSw2ICsxMDIs MjIgQEAgaW50IEVWUF9TaWduRmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnNpZworIAkJCWdvdG8g ZXJyOworIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRp Z2VzdCkgPD0gMCkKKyAJCQlnb3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NU WF9GTEFHX1BBRF9YOTMxKQorKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBr Y3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCWlmIChjdHgt PmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCisrCQkJeworKwkJCWludCBzYWx0bGVu OworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFf UFNTX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJCXNhbHRsZW4gPSBNX0VWUF9N RF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOworKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhf RkxBR19QU1NfTURMRU4pCisrCQkJCXNhbHRsZW4gPSAtMTsKKysJCQllbHNlIGlmIChzYWx0bGVu ID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKKysJCQkJc2FsdGxlbiA9IC0yOworKwkJCWlm IChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkK KysJCQkJZ290byBlcnI7CisrCQkJfQorIAkJaWYgKEVWUF9QS0VZX3NpZ24ocGtjdHgsIHNpZ3Jl dCwgJnNsdG1wLCBtLCBtX2xlbikgPD0gMCkKKyAJCQlnb3RvIGVycjsKKyAJCSpzaWdsZW4gPSBz bHRtcDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBz IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9ldnAvcF92ZXJpZnkuYworLS0tIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzCTIwMTAtMTEtMjcgMTg6MzQ6NTcuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCTIwMTItMDEt MDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtNjEsNiArNjEsNyBAQAorICNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVk ZSA8b3BlbnNzbC94NTA5Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgCisgaW50IEVW UF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1 ZiwKKyAJICAgICB1bnNpZ25lZCBpbnQgc2lnbGVuLCBFVlBfUEtFWSAqcGtleSkKK0BAIC04Niw2 ICs4NywyMiBAQCBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29uCisgCQkJ Z290byBlcnI7CisgCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtjdHgsIGN0 eC0+ZGlnZXN0KSA8PSAwKQorIAkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBf TURfQ1RYX0ZMQUdfUEFEX1g5MzEpCisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRp bmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJaWYg KGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKKysJCQl7CisrCQkJaW50IHNh bHRsZW47CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9Q S0NTMV9QU1NfUEFERElORykgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJc2FsdGxlbiA9IE1f RVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7CisrCQkJaWYgKHNhbHRsZW4gPT0gRVZQX01E X0NUWF9GTEFHX1BTU19NRExFTikKKysJCQkJc2FsdGxlbiA9IC0xOworKwkJCWVsc2UgaWYgKHNh bHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQorKwkJCQlzYWx0bGVuID0gLTI7Cisr CQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8 PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCQl9CisgCQlpID0gRVZQX1BLRVlfdmVyaWZ5KHBrY3R4 LCBzaWdidWYsIHNpZ2xlbiwgbSwgbV9sZW4pOworIAkJZXJyOgorIAkJRVZQX1BLRVlfQ1RYX2Zy ZWUocGtjdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2Flc2F2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2 cy5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jLmZp cHMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAw MDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsOTM5IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5 cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisr ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisr ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9y Zy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisr ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICov CisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIE5J U1QgQUVTIEFsZ29yaXRobSBWYWxpZGF0aW9uIFN1aXRlCisrICBUZXN0IFByb2dyYW0KKysKKysg IERvbmF0ZWQgdG8gT3BlblNTTCBieToKKysgIFYtT05FIENvcnBvcmF0aW9uCisrICAyMDI1MCBD ZW50dXJ5IEJsdmQsIFN1aXRlIDMwMAorKyAgR2VybWFudG93biwgTUQgMjA4NzQKKysgIFUuUy5B LgorKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisr CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2lu Y2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBT CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50Zigi Tm8gRklQUyBBRVMgc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UK KysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisr CisrI2RlZmluZSBBRVNfQkxPQ0tfU0laRSAxNgorKworKyNkZWZpbmUgVkVSQk9TRSAwCisrCisr LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisr aW50IEFFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKKysJICAgIGNoYXIgKmFtb2RlLCBpbnQg YWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKKysJICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMs IAorKwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkgICAg dW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LCBpbnQg bGVuKQorKyAgICB7CisrICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7CisrCisr ICAgIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0JDIikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFr ZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2JjKCk7 CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2Jj KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZf Y2JjKCk7CisrCQlicmVhazsKKysJCX0KKysKKysJfQorKyAgICBlbHNlIGlmIChzdHJjYXNlY21w KGFtb2RlLCAiRUNCIikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNh c2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfZWNiKCk7CisrCQlicmVhazsKKysKKysJ CWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfZWNiKCk7CisrCQlicmVhazsKKysK KysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfZWNiKCk7CisrCQlicmVhazsK KysJCX0KKysJfQorKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0ZCMTI4IikgPT0g MCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVy ID0gRVZQX2Flc18xMjhfY2ZiMTI4KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJ Y2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiMTI4KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2 OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiMTI4KCk7CisrCQlicmVhazsKKysJCX0KKysK KysJfQorKyAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChhbW9kZSwgIk9GQiIsIDMpID09IDApCisr CXsKKysJc3dpdGNoIChha2V5c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVW UF9hZXNfMTI4X29mYigpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9 IEVWUF9hZXNfMTkyX29mYigpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhl ciA9IEVWUF9hZXNfMjU2X29mYigpOworKwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAgZWxzZSBp Zighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJ eworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIxKCk7CisrCQlicmVh azsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiMSgpOworKwkJ YnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjEoKTsK KysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNG QjgiKSkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lw aGVyID0gRVZQX2Flc18xMjhfY2ZiOCgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJ CWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjgoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6 CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmI4KCk7CisrCQlicmVhazsKKysJCX0KKysJfQor KyAgICBlbHNlCisrCXsKKysJcHJpbnRmKCJVbmtub3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7Cisr CXJldHVybiAwOworKwl9CisrICAgIGlmICghY2lwaGVyKQorKwl7CisrCXByaW50ZigiSW52YWxp ZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlzeik7CisrCXJldHVybiAwOyAKKysJfQorKyAgICBpZiAo RVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlWZWMsIGRpcikgPD0g MCkKKysJcmV0dXJuIDA7CisrICAgIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCisrCU1f RVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyk7 CisrICAgIGlmIChkaXIpCisrCQlFVlBfQ2lwaGVyKGN0eCwgY2lwaGVydGV4dCwgcGxhaW50ZXh0 LCBsZW4pOworKwllbHNlCisrCQlFVlBfQ2lwaGVyKGN0eCwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0 LCBsZW4pOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2NoYXIgKnRfdGFnWzJdID0geyJQTEFJ TlRFWFQiLCAiQ0lQSEVSVEVYVCJ9OworK2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JDIiwiRUNCIiwi T0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkIxMjgifTsKKytlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIs IENGQjEsIENGQjgsIENGQjEyOH07CisrZW51bSBYQ3J5cHQge1hERUNSWVBULCBYRU5DUllQVH07 CisrCisrLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisrLyogIE1vbnRlIENhcmxv IFRlc3RzICAgICAgICAgICovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisr CisrLyojZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIpLzhdID4+ICgoYiklOCkpJjEpKi8KKysvKiNk ZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoKGIpJTgpKSl8 KCEhKHYpIDw8ICgoYiklOCkpKSovCisrCisrI2RlZmluZSBnYihhLGIpICgoKGEpWyhiKS84XSA+ PiAoNy0oYiklOCkpJjEpCisrI2RlZmluZSBzYihhLGIsdikgKChhKVsoYikvOF09KChhKVsoYikv OF0mfigxIDw8ICg3LShiKSU4KSkpfCghISh2KSA8PCAoNy0oYiklOCkpKQorKworK2ludCBkb19t Y3QoY2hhciAqYW1vZGUsIAorKwkgICBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LHVu c2lnbmVkIGNoYXIgKmlWZWMsCisrCSAgIGludCBkaXIsIHVuc2lnbmVkIGNoYXIgKnRleHQsIGlu dCBsZW4sCisrCSAgIEZJTEUgKnJmcCkKKysgICAgeworKyAgICBpbnQgcmV0ID0gMDsKKysgICAg dW5zaWduZWQgY2hhciBrZXlbMTAxXVszMl07CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbMTAxXVtB RVNfQkxPQ0tfU0laRV07CisrICAgIHVuc2lnbmVkIGNoYXIgcHRleHRbMTAwMV1bMzJdOworKyAg ICB1bnNpZ25lZCBjaGFyIGN0ZXh0WzEwMDFdWzMyXTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBo ZXJ0ZXh0WzY0KzRdOworKyAgICBpbnQgaSwgaiwgbiwgbjEsIG4yOworKyAgICBpbnQgaW1vZGUg PSAwLCBua2V5c3ogPSBha2V5c3ovODsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBF VlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAobGVuID4gMzIpCisrCXsKKysJ cHJpbnRmKCJcbj4+Pj4gTGVuZ3RoIGV4Y2VlZHMgMzIgZm9yICVzICVkIDw8PDxcblxuIiwgCisr CSAgICAgICBhbW9kZSwgYWtleXN6KTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIGZvciAoaW1v ZGUgPSAwOyBpbW9kZSA8IDY7ICsraW1vZGUpCisrCWlmIChzdHJjbXAoYW1vZGUsIHRfbW9kZVtp bW9kZV0pID09IDApCisrCSAgICBicmVhazsKKysgICAgaWYgKGltb2RlID09IDYpCisrCXsgCisr CXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCXJldHVybiAtMTsK KysJfQorKworKyAgICBtZW1jcHkoa2V5WzBdLCBhS2V5LCBua2V5c3opOworKyAgICBpZiAoaVZl YykKKysJbWVtY3B5KGl2WzBdLCBpVmVjLCBBRVNfQkxPQ0tfU0laRSk7CisrICAgIGlmIChkaXIg PT0gWEVOQ1JZUFQpCisrCW1lbWNweShwdGV4dFswXSwgdGV4dCwgbGVuKTsKKysgICAgZWxzZQor KwltZW1jcHkoY3RleHRbMF0sIHRleHQsIGxlbik7CisrICAgIGZvciAoaSA9IDA7IGkgPCAxMDA7 ICsraSkKKysJeworKwkvKiBwcmludGYoIkl0ZXJhdGlvbiAlZFxuIiwgaSk7ICovCisrCWlmIChp ID4gMCkKKysJICAgIHsKKysJICAgIGZwcmludGYocmZwLCJDT1VOVCA9ICVkXG4iLGkpOworKwkg ICAgT3V0cHV0VmFsdWUoIktFWSIsa2V5W2ldLG5rZXlzeixyZnAsMCk7CisrCSAgICBpZiAoaW1v ZGUgIT0gRUNCKSAgLyogRUNCICovCisrCQlPdXRwdXRWYWx1ZSgiSVYiLGl2W2ldLEFFU19CTE9D S19TSVpFLHJmcCwwKTsKKysJICAgIC8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICov CisrCSAgICBPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sZGlyID8gcHRleHRbMF0gOiBjdGV4dFsw XSxsZW4scmZwLAorKwkJCWltb2RlID09IENGQjEpOworKwkgICAgfQorKwlmb3IgKGogPSAwOyBq IDwgMTAwMDsgKytqKQorKwkgICAgeworKwkgICAgc3dpdGNoIChpbW9kZSkKKysJCXsKKysJICAg IGNhc2UgRUNCOgorKwkJaWYgKGogPT0gMCkKKysJCSAgICB7IC8qIHNldCB1cCBlbmNyeXB0aW9u ICovCisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIE5V TEwsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkg IHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQor KwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJ bWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJ CSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQl7CisrCQkJRVZQX0NpcGhl cigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkJbWVtY3B5KHB0ZXh0W2orMV0s IGN0ZXh0W2pdLCBsZW4pOworKwkJCX0KKysJCSAgICBlbHNlCisrCQkJeworKwkJCUVWUF9DaXBo ZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNweShjdGV4dFtqKzFd LCBwdGV4dFtqXSwgbGVuKTsKKysJCQl9CisrCQkgICAgfQorKwkJYnJlYWs7CisrCisrCSAgICBj YXNlIENCQzoKKysJICAgIGNhc2UgT0ZCOiAgCisrCSAgICBjYXNlIENGQjEyODoKKysJCWlmIChq ID09IDApCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlz eiwga2V5W2ldLCBpdltpXSwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNy eXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIGlmIChkaXIg PT0gWEVOQ1JZUFQpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGl2W2ldLCBsZW4pOworKwkJICAg IGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgaXZbaV0sIGxlbik7CisrCQkgICAgfQorKwkJ ZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCXsKKysJCQlF VlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCQltZW1jcHkocHRl eHRbaisxXSwgY3RleHRbai0xXSwgbGVuKTsKKysJCQl9CisrCQkgICAgZWxzZQorKwkJCXsKKysJ CQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCQltZW1jcHko Y3RleHRbaisxXSwgcHRleHRbai0xXSwgbGVuKTsKKysJCQl9CisrCQkgICAgfQorKwkJYnJlYWs7 CisrCisrCSAgICBjYXNlIENGQjg6CisrCQlpZiAoaiA9PSAwKQorKwkJICAgIHsKKysJCSAgICBy ZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZbaV0sIAorKwkJCQkg IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHB0ZXh0W2pdLCBj dGV4dFtqXSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChk aXIgPT0gWEVOQ1JZUFQpCisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0s IGxlbik7CisrCQkgICAgZWxzZQorKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0 W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkgICAgewor KwkJICAgIGlmIChqIDwgMTYpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sICZpdltpXVtqXSwgbGVu KTsKKysJCSAgICBlbHNlCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2otMTZdLCBsZW4p OworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGogPCAxNikKKysJCQlt ZW1jcHkoY3RleHRbaisxXSwgJml2W2ldW2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1j cHkoY3RleHRbaisxXSwgcHRleHRbai0xNl0sIGxlbik7CisrCQkgICAgfQorKwkJYnJlYWs7Cisr CisrCSAgICBjYXNlIENGQjE6CisrCQlpZihqID09IDApCisrCQkgICAgeworKyNpZiAwCisrCQkg ICAgLyogY29tcGVuc2F0ZSBmb3Igd3JvbmcgZW5kaWFubmVzcyBvZiBpbnB1dCBmaWxlICovCisr CQkgICAgaWYoaSA9PSAwKQorKwkJCXB0ZXh0WzBdWzBdPDw9NzsKKysjZW5kaWYKKysJCSAgICBy ZXQgPSBBRVNUZXN0KCZjdHgsYW1vZGUsYWtleXN6LGtleVtpXSxpdltpXSxkaXIsCisrCQkJCXB0 ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJ ICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwg cHRleHRbal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRb al0sIGN0ZXh0W2pdLCBsZW4pOworKworKwkJICAgIH0KKysJCWlmKGRpciA9PSBYRU5DUllQVCkK KysJCSAgICB7CisrCQkgICAgaWYoaiA8IDEyOCkKKysJCQlzYihwdGV4dFtqKzFdLDAsZ2IoaXZb aV0saikpOworKwkJICAgIGVsc2UKKysJCQlzYihwdGV4dFtqKzFdLDAsZ2IoY3RleHRbai0xMjhd LDApKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmKGogPCAxMjgpCisr CQkJc2IoY3RleHRbaisxXSwwLGdiKGl2W2ldLGopKTsKKysJCSAgICBlbHNlCisrCQkJc2IoY3Rl eHRbaisxXSwwLGdiKHB0ZXh0W2otMTI4XSwwKSk7CisrCQkgICAgfQorKwkJYnJlYWs7CisrCQl9 CisrCSAgICB9CisrCS0tajsgLyogcmVzZXQgdG8gbGFzdCBvZiByYW5nZSAqLworKwkvKiBPdXRw dXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLworKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJdLGRp ciA/IGN0ZXh0W2pdIDogcHRleHRbal0sbGVuLHJmcCwKKysJCSAgICBpbW9kZSA9PSBDRkIxKTsK KysJZnByaW50ZihyZnAsICJcbiIpOyAgLyogYWRkIHNlcGFyYXRvciAqLworKworKwkvKiBDb21w dXRlIG5leHQgS0VZICovCisrCWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCSAgICB7CisrCSAgICBp ZiAoaW1vZGUgPT0gQ0ZCOCkKKysJCXsgLyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAu Li4gfHwgQ1Rbal0gKi8KKysJCWZvciAobjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8IG5rZXlz ejsgKytuMSwgLS1uMikKKysJCSAgICBjaXBoZXJ0ZXh0W24xXSA9IGN0ZXh0W2otbjJdWzBdOwor KwkJfQorKwkgICAgZWxzZSBpZihpbW9kZSA9PSBDRkIxKQorKwkJeworKwkJZm9yKG4xPTAsbjI9 YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1uMikKKysJCSAgICBzYihjaXBoZXJ0ZXh0 LG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKKysJCX0KKysJICAgIGVsc2UKKysJCXN3aXRjaCAoYWtl eXN6KQorKwkJICAgIHsKKysJCWNhc2UgMTI4OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBj dGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAxOTI6CisrCQkgICAgbWVtY3B5 KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0rOCwgOCk7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQr OCwgY3RleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCWNhc2UgMjU2OgorKwkJICAgIG1l bWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqLTFdLCAxNik7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRl eHQrMTYsIGN0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkgICAgfQor KwllbHNlCisrCSAgICB7CisrCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKKysJCXsgLyogY3QgPSBD VFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KKysJCWZvciAobjEgPSAwLCBu MiA9IG5rZXlzei0xOyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKKysJCSAgICBjaXBoZXJ0ZXh0 W24xXSA9IHB0ZXh0W2otbjJdWzBdOworKwkJfQorKwkgICAgZWxzZSBpZihpbW9kZSA9PSBDRkIx KQorKwkJeworKwkJZm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1u MikKKysJCSAgICBzYihjaXBoZXJ0ZXh0LG4xLGdiKHB0ZXh0W2otbjJdLDApKTsKKysJCX0KKysJ ICAgIGVsc2UKKysJCXN3aXRjaCAoYWtleXN6KQorKwkJICAgIHsKKysJCWNhc2UgMTI4OgorKwkJ ICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJ Y2FzZSAxOTI6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0rOCwgOCk7Cisr CQkgICAgbWVtY3B5KGNpcGhlcnRleHQrOCwgcHRleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsK KysJCWNhc2UgMjU2OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqLTFdLCAxNik7 CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrMTYsIHB0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJl YWs7CisrCQkgICAgfQorKwkgICAgfQorKwkvKiBDb21wdXRlIG5leHQga2V5OiBLZXlbaSsxXSA9 IEtleVtpXSB4b3IgY3QgKi8KKysJZm9yIChuID0gMDsgbiA8IG5rZXlzejsgKytuKQorKwkgICAg a2V5W2krMV1bbl0gPSBrZXlbaV1bbl0gXiBjaXBoZXJ0ZXh0W25dOworKwkKKysJLyogQ29tcHV0 ZSBuZXh0IElWIGFuZCB0ZXh0ICovCisrCWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCSAgICB7Cisr CSAgICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAgY2FzZSBFQ0I6CisrCQltZW1jcHkocHRl eHRbMF0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNhc2Ug Q0JDOgorKwkgICAgY2FzZSBPRkI6CisrCSAgICBjYXNlIENGQjEyODoKKysJCW1lbWNweShpdltp KzFdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4 dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZCODoKKysJ CS8qIElWW2krMV0gPSBjdCAqLworKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsr bjEsIC0tbjIpCisrCQkgICAgaXZbaSsxXVtuMV0gPSBjdGV4dFtqLW4yXVswXTsKKysJCXB0ZXh0 WzBdWzBdID0gY3RleHRbai0xNl1bMF07CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZCMToKKysJ CWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQorKwkJICAgIHNiKGl2W2kr MV0sbjEsZ2IoY3RleHRbai1uMl0sMCkpOworKwkJcHRleHRbMF1bMF09Y3RleHRbai0xMjhdWzBd JjB4ODA7CisrCQlicmVhazsKKysJCX0KKysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkgICAg c3dpdGNoIChpbW9kZSkKKysJCXsKKysJICAgIGNhc2UgRUNCOgorKwkJbWVtY3B5KGN0ZXh0WzBd LCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENCQzoK KysJICAgIGNhc2UgT0ZCOgorKwkgICAgY2FzZSBDRkIxMjg6CisrCQltZW1jcHkoaXZbaSsxXSwg cHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsKKysJCW1lbWNweShjdGV4dFswXSwgcHRleHRbai0x XSwgQUVTX0JMT0NLX1NJWkUpOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENGQjg6CisrCQlmb3Ig KG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikKKysJCSAgICBpdltpKzFdW24x XSA9IHB0ZXh0W2otbjJdWzBdOworKwkJY3RleHRbMF1bMF0gPSBwdGV4dFtqLTE2XVswXTsKKysJ CWJyZWFrOworKwkgICAgY2FzZSBDRkIxOgorKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjgg OyArK24xLC0tbjIpCisrCQkgICAgc2IoaXZbaSsxXSxuMSxnYihwdGV4dFtqLW4yXSwwKSk7Cisr CQljdGV4dFswXVswXT1wdGV4dFtqLTEyOF1bMF0mMHg4MDsKKysJCWJyZWFrOworKwkJfQorKwkg ICAgfQorKwl9CisrICAgIAorKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrCisrLyo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgIyBDb25maWcgaW5mbyBmb3Igdi1vbmUKKysgICMgQUVT VlMgTU1UIHRlc3QgZGF0YSBmb3IgRUNCCisrICAjIFN0YXRlIDogRW5jcnlwdCBhbmQgRGVjcnlw dAorKyAgIyBLZXkgTGVuZ3RoIDogMjU2CisrICAjIEZyaSBBdWcgMzAgMDQ6MDc6MjIgUE0KKysg IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK2ludCBwcm9jX2ZpbGUoY2hhciAq cnFmaWxlLCBjaGFyICpyc3BmaWxlKQorKyAgICB7CisrICAgIGNoYXIgYWZuWzI1Nl0sIHJmblsy NTZdOworKyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKKysgICAgY2hhciBpYnVm WzIwNDhdOworKyAgICBjaGFyIHRidWZbMjA0OF07CisrICAgIGludCBpbGVuLCBsZW4sIHJldCA9 IDA7CisrICAgIGNoYXIgYWxnb1s4XSA9ICIiOworKyAgICBjaGFyIGFtb2RlWzhdID0gIiI7Cisr ICAgIGNoYXIgYXRlc3RbOF0gPSAiIjsKKysgICAgaW50IGFrZXlzeiA9IDA7CisrICAgIHVuc2ln bmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOworKyAgICBpbnQgZGlyID0gLTEsIGVyciA9IDAs IHN0ZXAgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsyMDQ4XTsKKysgICAgdW5z aWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOworKyAgICBjaGFyICpycDsKKysgICAgRVZQX0NJ UEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBp ZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUpKQorKwl7CisrCXByaW50ZigiTm8gcmVxIGZpbGVcbiIp OworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKKysKKysgICAg aWYgKChhZnAgPSBmb3BlbihhZm4sICJyIikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5u b3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgYWZuLCBzdHJlcnJvcihlcnJubykp OworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgaWYgKCFyc3BmaWxlKQorKwl7CisrCXN0cmNweShy Zm4sYWZuKTsKKysJcnA9c3Ryc3RyKHJmbiwicmVxLyIpOworKyNpZmRlZiBPUEVOU1NMX1NZU19X SU4zMgorKwlpZiAoIXJwKQorKwkgICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKKysjZW5kaWYK KysJYXNzZXJ0KHJwKTsKKysJbWVtY3B5KHJwLCJyc3AiLDMpOworKwlycCA9IHN0cnN0cihyZm4s ICIucmVxIik7CisrCW1lbWNweShycCwgIi5yc3AiLCA0KTsKKysJcnNwZmlsZSA9IHJmbjsKKysJ fQorKyAgICBpZiAoKHJmcCA9IGZvcGVuKHJzcGZpbGUsICJ3IikpID09IE5VTEwpCisrCXsKKysJ cHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgcmZuLCBzdHJl cnJvcihlcnJubykpOworKwlmY2xvc2UoYWZwKTsKKysJYWZwID0gTlVMTDsKKysJcmV0dXJuIC0x OworKwl9CisrICAgIHdoaWxlICghZXJyICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFm cCkpICE9IE5VTEwpCisrCXsKKysJdGlkeV9saW5lKHRidWYsIGlidWYpOworKwlpbGVuID0gc3Ry bGVuKGlidWYpOworKwkvKiAgICAgIHByaW50Zigic3RlcD0lZCBpYnVmPSVzIixzdGVwLGlidWYp OyAqLworKwlzd2l0Y2ggKHN0ZXApCisrCSAgICB7CisrCWNhc2UgMDogIC8qIHJlYWQgcHJlYW1i bGUgKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdcbicpCisrCQl7IC8qIGVuZCBvZiBwcmVhbWJs ZSAqLworKwkJaWYgKCgqYWxnbyA9PSAnXDAnKSB8fAorKwkJICAgICgqYW1vZGUgPT0gJ1wwJykg fHwKKysJCSAgICAoYWtleXN6ID09IDApKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIk1pc3Np bmcgQWxnb3JpdGhtLCBNb2RlIG9yIEtleVNpemUgKCVzLyVzLyVkKVxuIiwKKysJCQkgICBhbGdv LGFtb2RlLGFrZXlzeik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQllbHNlCisrCQkg ICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgKysgc3RlcDsKKysJCSAgICB9 CisrCQl9CisrCSAgICBlbHNlIGlmIChpYnVmWzBdICE9ICcjJykKKysJCXsKKysJCXByaW50Zigi SW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7CisrCQllcnIgPSAxOworKwkJfQor KwkgICAgZWxzZQorKwkJeyAvKiBwcm9jZXNzIHByZWFtYmxlICovCisrCQljaGFyICp4cCwgKnBw ID0gaWJ1ZisyOworKwkJaW50IG47CisrCQlpZiAoYWtleXN6KQorKwkJICAgIHsgLyogaW5zZXJ0 IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8KKysJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7Cisr CQkgICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKKysJCSAgICB9CisrCQll bHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgaWYgKHN0cm5j bXAocHAsICJBRVNWUyAiLCA2KSA9PSAwKQorKwkJCXsKKysJCQlzdHJjcHkoYWxnbywgIkFFUyIp OworKwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KKysJCQlwcCArPSA2OworKwkJCXhwID0gc3RyY2hy KHBwLCAnICcpOworKwkJCW4gPSB4cC1wcDsKKysJCQlzdHJuY3B5KGF0ZXN0LCBwcCwgbik7Cisr CQkJYXRlc3Rbbl0gPSAnXDAnOworKwkJCS8qIGdldCBtb2RlICovCisrCQkJeHAgPSBzdHJyY2hy KHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KKysJCQluID0gc3RybGVuKHhwKzEpLTE7CisrCQkJ c3RybmNweShhbW9kZSwgeHArMSwgbik7CisrCQkJYW1vZGVbbl0gPSAnXDAnOworKwkJCS8qIGFt b2RlWzNdID0gJ1wwJzsgKi8KKysJCQlpZiAoVkVSQk9TRSkKKysJCQkJcHJpbnRmKCJUZXN0ID0g JXMsIE1vZGUgPSAlc1xuIiwgYXRlc3QsIGFtb2RlKTsKKysJCQl9CisrCQkgICAgZWxzZSBpZiAo c3RybmNhc2VjbXAocHAsICJLZXkgTGVuZ3RoIDogIiwgMTMpID09IDApCisrCQkJeworKwkJCWFr ZXlzeiA9IGF0b2kocHArMTMpOworKwkJCWlmIChWRVJCT1NFKQorKwkJCQlwcmludGYoIktleSBz aXplID0gJWRcbiIsIGFrZXlzeik7CisrCQkJfQorKwkJICAgIH0KKysJCX0KKysJICAgIGJyZWFr OworKworKwljYXNlIDE6ICAvKiBbRU5DUllQVF0gfCBbREVDUllQVF0gKi8KKysJICAgIGlmIChp YnVmWzBdID09ICdbJykKKysJCXsKKysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQkrK3N0ZXA7Cisr CQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDApCisrCQkgICAgZGly ID0gMTsKKysJCWVsc2UgaWYgKHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQVF0iLCA5KSA9PSAw KQorKwkJICAgIGRpciA9IDA7CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52 YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9Cisr CQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKKysJCXsKKysJCWVyciA9 IDE7CisrCQlwcmludGYoIk1pc3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdvcmRcbiIpOworKwkJ YnJlYWs7CisrCQl9CisrCSAgICBlbHNlIAorKwkJc3RlcCA9IDI7CisrCisrCWNhc2UgMjogLyog S0VZID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmKCppYnVmID09 ICdcbicpCisrCQlicmVhazsKKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVCA9ICIs OCkpCisrCQlicmVhazsKKysKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiS0VZID0gIiwg NikgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsK KysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNiwg YUtleSk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlk IEtFWVxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVBy aW50VmFsdWUoIktFWSIsIGFLZXksIGxlbik7CisrCQlpZiAoc3RyY21wKGFtb2RlLCAiRUNCIikg PT0gMCkKKysJCSAgICB7CisrCQkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7Cisr CQkgICAgc3RlcCA9IChkaXIpPyA0OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNCICovCisrCQkgICAg fQorKwkJZWxzZQorKwkJICAgICsrc3RlcDsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNl IDM6IC8qIElWID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChz dHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNz aW5nIElWXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlsZW4g PSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAg eworKwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAg IGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIklWIiwgaVZlYywgbGVuKTsKKysJCXN0 ZXAgPSAoZGlyKT8gNDogNTsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDQ6IC8qIFBM QUlOVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3Ry bmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIsIDEyKSAhPSAwKQorKwkJeworKwkJcHJpbnRm KCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQor KwkJeworKwkJaW50IG5uID0gc3RybGVuKGlidWYrMTIpOworKwkJaWYoIXN0cmNtcChhbW9kZSwi Q0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEyLG5uLTEscGxhaW50ZXh0KTsKKysJ CWVsc2UKKysJCSAgICBsZW49aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRleHQpOworKwkJaWYgKGxl biA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwg aWJ1ZisxMik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCWlm IChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCisrCQkgICAgeworKwkJICAgIHByaW50ZigiQnVm ZmVyIG92ZXJmbG93XG4iKTsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJQTEFJTlRFWFQiLCAo dW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1D VCIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJICAgIGlmKGRv X21jdChhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkgICAgICBkaXIsICh1bnNpZ25l ZCBjaGFyKilwbGFpbnRleHQsIGxlbiwgCisrCQkJICAgICAgcmZwKSA8IDApCisrCQkJRVhJVCgx KTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0 eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5 cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOwor KwkJICAgIE91dHB1dFZhbHVlKCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxlbixyZnAsCisrCQkJ CSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9IDY7CisrCQl9Cisr CSAgICBicmVhazsKKysKKysJY2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4eCAqLworKwkgICAg ZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiQ0lQSEVSVEVY VCA9ICIsIDEzKSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7CisrCQll cnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZC MSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVmKzEzKS0xLGNpcGhl cnRleHQpOworKwkJZWxzZQorKwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0 KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgQ0lQ SEVSVEVYVFxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysK KysJCVByaW50VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJaWYgKHN0 cmNtcChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAg eworKwkJICAgIGRvX21jdChhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkgICBkaXIs IGNpcGhlcnRleHQsIGxlbiwgcmZwKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJ ICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCisrCQkJ CSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcGxhaW50ZXh0 LCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZhbHVlKCJQTEFJTlRFWFQiLCh1bnNp Z25lZCBjaGFyICopcGxhaW50ZXh0LGxlbixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEi KSk7CisrCQkgICAgfQorKwkJc3RlcCA9IDY7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2Fz ZSA2OgorKwkgICAgaWYgKGlidWZbMF0gIT0gJ1xuJykKKysJCXsKKysJCWVyciA9IDE7CisrCQlw cmludGYoIk1pc3NpbmcgdGVybWluYXRvclxuIik7CisrCQl9CisrCSAgICBlbHNlIGlmIChzdHJj bXAoYXRlc3QsICJNQ1QiKSAhPSAwKQorKwkJeyAvKiBNQ1QgYWxyZWFkeSBhZGRlZCB0ZXJtaW5h dGluZyBubCAqLworKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCX0KKysJICAgIHN0ZXAgPSAxOwor KwkgICAgYnJlYWs7CisrCSAgICB9CisrCX0KKysgICAgaWYgKHJmcCkKKysJZmNsb3NlKHJmcCk7 CisrICAgIGlmIChhZnApCisrCWZjbG9zZShhZnApOworKyAgICByZXR1cm4gZXJyOworKyAgICB9 CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorKyAgUHJvY2Vzc2VzIGVpdGhlciBhIHNpbmdsZSBmaWxlIG9yIAorKyAgYSBzZXQgb2YgZmls ZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3NlZCBpbiBhIGZpbGUuCisrICBBIHNpbmdsZSBmaWxlIGlz IHNwZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3QgLWYgeHh4LnJlcQorKyAgQSBzZXQgb2YgZmls ZXMgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVzdCAtZCB4eHh4eC54eHgKKysgIFRoZSBk ZWZhdWx0IGlzOiAtZCByZXEudHh0CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0qLworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysg ICAgeworKyAgICBjaGFyICpycWxpc3QgPSAicmVxLnR4dCIsICpyc3BmaWxlID0gTlVMTDsKKysg ICAgRklMRSAqZnAgPSBOVUxMOworKyAgICBjaGFyIGZuWzI1MF0gPSAiIiwgcmZuWzI1Nl0gPSAi IjsKKysgICAgaW50IGZfb3B0ID0gMCwgZF9vcHQgPSAxOworKworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7 CisrCUVYSVQoMSk7CisrCX0KKysjZW5kaWYKKysgICAgaWYgKGFyZ2MgPiAxKQorKwl7CisrCWlm IChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZCIpID09IDApCisrCSAgICB7CisrCSAgICBkX29wdCA9 IDE7CisrCSAgICB9CisrCWVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1mIikgPT0gMCkK KysJICAgIHsKKysJICAgIGZfb3B0ID0gMTsKKysJICAgIGRfb3B0ID0gMDsKKysJICAgIH0KKysJ ZWxzZQorKwkgICAgeworKwkgICAgcHJpbnRmKCJJbnZhbGlkIHBhcmFtZXRlcjogJXNcbiIsIGFy Z3ZbMV0pOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCWlmIChhcmdjIDwgMykKKysJICAg IHsKKysJICAgIHByaW50ZigiTWlzc2luZyBwYXJhbWV0ZXJcbiIpOworKwkgICAgcmV0dXJuIDA7 CisrCSAgICB9CisrCWlmIChkX29wdCkKKysJICAgIHJxbGlzdCA9IGFyZ3ZbMl07CisrCWVsc2UK KysJICAgIHsKKysJICAgIHN0cmNweShmbiwgYXJndlsyXSk7CisrCSAgICByc3BmaWxlID0gYXJn dlszXTsKKysJICAgIH0KKysJfQorKyAgICBpZiAoZF9vcHQpCisrCXsgLyogbGlzdCBvZiBmaWxl cyAoZGlyZWN0b3J5KSAqLworKwlpZiAoIShmcCA9IGZvcGVuKHJxbGlzdCwgInIiKSkpCisrCSAg ICB7CisrCSAgICBwcmludGYoIkNhbm5vdCBvcGVuIHJlcSBsaXN0IGZpbGVcbiIpOworKwkgICAg cmV0dXJuIC0xOworKwkgICAgfQorKwl3aGlsZSAoZmdldHMoZm4sIHNpemVvZihmbiksIGZwKSkK KysJICAgIHsKKysJICAgIHN0cnRvayhmbiwgIlxyXG4iKTsKKysJICAgIHN0cmNweShyZm4sIGZu KTsKKysJICAgIGlmIChWRVJCT1NFKQorKwkJcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZu KTsKKysJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKKysJCXsKKysJCXByaW50Zigi Pj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOworKwkJRVhJVCgxKTsK KysJCX0KKysJICAgIH0KKysJZmNsb3NlKGZwKTsKKysJfQorKyAgICBlbHNlIC8qIHNpbmdsZSBm aWxlICovCisrCXsKKysJaWYgKFZFUkJPU0UpCisrCSAgICBwcmludGYoIlByb2Nlc3Npbmc6ICVz XG4iLCBmbik7CisrCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQorKwkgICAgeworKwkgICAg cHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKKysJICAg IH0KKysJfQorKyAgICBFWElUKDApOworKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRp ZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMu Yy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMKKy0t LSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jLmZpcHMJMjAx Mi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAw ICswMTAwCitAQCAtMCwwICsxLDcwMiBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0 IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAq CisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu CisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisr ICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICBOSVNUIERF UyBNb2RlcyBvZiBPcGVyYXRpb24gVmFsaWRhdGlvbiBTeXN0ZW0KKysgIFRlc3QgUHJvZ3JhbQor KworKyAgQmFzZWQgb24gdGhlIEFFUyBWYWxpZGF0aW9uIFN1aXRlLCB3aGljaCB3YXM6CisrICBE b25hdGVkIHRvIE9wZW5TU0wgYnk6CisrICBWLU9ORSBDb3Jwb3JhdGlvbgorKyAgMjAyNTAgQ2Vu dHVyeSBCbHZkLCBTdWl0ZSAzMDAKKysgIEdlcm1hbnRvd24sIE1EIDIwODc0CisrICBVLlMuQS4K KysgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKwor KyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3Ry aW5nLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNs dWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+CisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUwor KworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5v IEZJUFMgREVTIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisr CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKwor KyNkZWZpbmUgREVTX0JMT0NLX1NJWkUgOAorKworKyNkZWZpbmUgVkVSQk9TRSAwCisrCisraW50 IERFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKKysJICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtl eXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKKysJICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMsIAor KwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkgICAgdW5z aWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IGxlbikKKysgICAgeworKyAg ICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOworKworKyAgICBpZiAoYWtleXN6ICE9 IDE5MikKKysJeworKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4iLCBha2V5c3opOwor KwlFWElUKDEpOworKwl9CisrCisrICAgIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0JDIikgPT0g MCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NiYygpOworKyAgICBlbHNlIGlmIChzdHJjYXNl Y21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2VjYigpOwor KyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0ZCNjQiKSA9PSAwKQorKwljaXBoZXIg PSBFVlBfZGVzX2VkZTNfY2ZiNjQoKTsKKysgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUs ICJPRkIiLCAzKSA9PSAwKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfb2ZiKCk7CisrICAgIGVs c2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUz X2NmYjgoKTsKKysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwljaXBo ZXIgPSBFVlBfZGVzX2VkZTNfY2ZiMSgpOworKyAgICBlbHNlCisrCXsKKysJcHJpbnRmKCJVbmtu b3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCUVYSVQoMSk7CisrCX0KKysKKysgICAgaWYgKEVW UF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDAp CisrCXJldHVybiAwOworKyAgICBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwlNX0VW UF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOwor KyAgICBFVlBfQ2lwaGVyKGN0eCwgb3V0LCBpbiwgbGVuKTsKKysKKysgICAgcmV0dXJuIDE7Cisr ICAgIH0KKysKKyt2b2lkIERlYnVnVmFsdWUoY2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWws IGludCBsZW4pCisrICAgIHsKKysgICAgY2hhciBvYnVmWzIwNDhdOworKyAgICBpbnQgb2xlbjsK KysgICAgb2xlbiA9IGJpbjJoZXgodmFsLCBsZW4sIG9idWYpOworKyAgICBwcmludGYoIiVzID0g JS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKKysgICAgfQorKworK3ZvaWQgc2hpZnRpbih1bnNp Z25lZCBjaGFyICpkc3QsdW5zaWduZWQgY2hhciAqc3JjLGludCBuYml0cykKKysgICAgeworKyAg ICBpbnQgbjsKKysKKysgICAgLyogbW92ZSB0aGUgYnl0ZXMuLi4gKi8KKysgICAgbWVtbW92ZShk c3QsZHN0K25iaXRzLzgsMyo4LW5iaXRzLzgpOworKyAgICAvKiBhcHBlbmQgbmV3IGRhdGEgKi8K KysgICAgbWVtY3B5KGRzdCszKjgtbmJpdHMvOCxzcmMsKG5iaXRzKzcpLzgpOworKyAgICAvKiBs ZWZ0IHNoaWZ0IHRoZSBiaXRzICovCisrICAgIGlmKG5iaXRzJTgpCisrCWZvcihuPTAgOyBuIDwg Myo4IDsgKytuKQorKwkgICAgZHN0W25dPShkc3Rbbl0gPDwgKG5iaXRzJTgpKXwoZHN0W24rMV0g Pj4gKDgtbmJpdHMlOCkpOworKyAgICB9CQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2NoYXIgKnRfdGFnWzJdID0geyJQTEFJTlRFWFQi LCAiQ0lQSEVSVEVYVCJ9OworK2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwi Q0ZCMSIsIkNGQjgiLCJDRkI2NCJ9OworK2VudW0gTW9kZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwg Q0ZCOCwgQ0ZCNjR9OworK2ludCBTaXplc1s2XT17NjQsNjQsNjQsMSw4LDY0fTsKKysKKyt2b2lk IGRvX21jdChjaGFyICphbW9kZSwgCisrCSAgICBpbnQgYWtleXN6LCBpbnQgbnVta2V5cywgdW5z aWduZWQgY2hhciAqYWtleSx1bnNpZ25lZCBjaGFyICppdmVjLAorKwkgICAgaW50IGRpciwgdW5z aWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKKysJICAgIEZJTEUgKnJmcCkKKysgICAgeworKyAg ICBpbnQgaSxpbW9kZTsKKysgICAgdW5zaWduZWQgY2hhciBua1s0KjhdOyAvKiBsb25nZXN0IGtl eSs4ICovCisrICAgIHVuc2lnbmVkIGNoYXIgdGV4dDBbOF07CisrCisrICAgIGZvciAoaW1vZGU9 MCA7IGltb2RlIDwgNiA7ICsraW1vZGUpCisrCWlmKCFzdHJjbXAoYW1vZGUsdF9tb2RlW2ltb2Rl XSkpCisrCSAgICBicmVhazsKKysgICAgaWYgKGltb2RlID09IDYpCisrCXsgCisrCXByaW50Zigi VW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCUVYSVQoMSk7CisrCX0KKysKKysg ICAgZm9yKGk9MCA7IGkgPCA0MDAgOyArK2kpCisrCXsKKysJaW50IGo7CisrCWludCBuOworKwlp bnQga3A9YWtleXN6LzY0OworKwl1bnNpZ25lZCBjaGFyIG9sZF9pdls4XTsKKysJRVZQX0NJUEhF Ul9DVFggY3R4OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKwlmcHJpbnRmKHJm cCwiXG5DT1VOVCA9ICVkXG4iLGkpOworKwlpZihrcCA9PSAxKQorKwkgICAgT3V0cHV0VmFsdWUo IktFWSIsYWtleSw4LHJmcCwwKTsKKysJZWxzZQorKwkgICAgZm9yKG49MCA7IG4gPCBrcCA7ICsr bikKKysJCXsKKysJCWZwcmludGYocmZwLCJLRVklZCIsbisxKTsKKysJCU91dHB1dFZhbHVlKCIi LGFrZXkrbio4LDgscmZwLDApOworKwkJfQorKworKwlpZihpbW9kZSAhPSBFQ0IpCisrCSAgICBP dXRwdXRWYWx1ZSgiSVYiLGl2ZWMsOCxyZnAsMCk7CisrCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl4x XSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7CisrI2lmIDAKKysJLyogY29tcGVuc2F0ZSBm b3IgZW5kaWFubmVzcyAqLworKwlpZihpbW9kZSA9PSBDRkIxKQorKwkgICAgdGV4dFswXTw8PTc7 CisrI2VuZGlmCisrCW1lbWNweSh0ZXh0MCx0ZXh0LDgpOworKworKwlmb3Ioaj0wIDsgaiA8IDEw MDAwIDsgKytqKQorKwkgICAgeworKwkgICAgdW5zaWduZWQgY2hhciBvbGRfdGV4dFs4XTsKKysK KysJICAgIG1lbWNweShvbGRfdGV4dCx0ZXh0LDgpOworKwkgICAgaWYoaiA9PSAwKQorKwkJewor KwkJbWVtY3B5KG9sZF9pdixpdmVjLDgpOworKwkJREVTVGVzdCgmY3R4LGFtb2RlLGFrZXlzeixh a2V5LGl2ZWMsZGlyLHRleHQsdGV4dCxsZW4pOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJ bWVtY3B5KG9sZF9pdixjdHguaXYsOCk7CisrCQlFVlBfQ2lwaGVyKCZjdHgsdGV4dCx0ZXh0LGxl bik7CisrCQl9CisrCSAgICBpZihqID09IDk5OTkpCisrCQl7CisrCQlPdXRwdXRWYWx1ZSh0X3Rh Z1tkaXJdLHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIxKTsKKysJCS8qCQltZW1jcHkoaXZlYyx0 ZXh0LDgpOyAqLworKwkJfQorKwkgICAgLyoJICAgIERlYnVnVmFsdWUoIml2IixjdHguaXYsOCk7 ICovCisrCSAgICAvKiBhY2N1bXVsYXRlIG1hdGVyaWFsIGZvciB0aGUgbmV4dCBrZXkgKi8KKysJ ICAgIHNoaWZ0aW4obmssdGV4dCxTaXplc1tpbW9kZV0pOworKwkgICAgLyoJICAgIERlYnVnVmFs dWUoIm5rIixuaywyNCk7Ki8KKysJICAgIGlmKChkaXIgJiYgKGltb2RlID09IENGQjEgfHwgaW1v ZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NAorKwkJCXx8IGltb2RlID09IENCQykpIHx8IGlt b2RlID09IE9GQikKKysJCW1lbWNweSh0ZXh0LG9sZF9pdiw4KTsKKysKKysJICAgIGlmKCFkaXIg JiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NCkpCisr CQl7CisrCQkvKiB0aGUgdGVzdCBzcGVjaWZpZXMgdXNpbmcgdGhlIG91dHB1dCBvZiB0aGUgcmF3 IERFUyBvcGVyYXRpb24KKysJCSAgIHdoaWNoIHdlIGRvbid0IGhhdmUsIHNvIHJlY29uc3RydWN0 IGl0Li4uICovCisrCQlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCQkgICAgdGV4dFtuXV49b2xk X3RleHRbbl07CisrCQl9CisrCSAgICB9CisrCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJICAg IGFrZXlbbl1ePW5rWzE2K25dOworKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCSAgICBha2V5 Wzgrbl1ePW5rWzgrbl07CisrCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJICAgIGFrZXlbMTYr bl1ePW5rW25dOworKwlpZihudW1rZXlzIDwgMykKKysJICAgIG1lbWNweSgmYWtleVsyKjhdLGFr ZXksOCk7CisrCWlmKG51bWtleXMgPCAyKQorKwkgICAgbWVtY3B5KCZha2V5WzhdLGFrZXksOCk7 CisrCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKWFrZXkpOworKwlERVNfc2V0X29k ZF9wYXJpdHkoKERFU19jYmxvY2sgKikoYWtleSs4KSk7CisrCURFU19zZXRfb2RkX3Bhcml0eSgo REVTX2NibG9jayAqKShha2V5KzE2KSk7CisrCW1lbWNweShpdmVjLGN0eC5pdiw4KTsKKysKKysJ LyogcG9pbnRsZXNzIGV4ZXJjaXNlIC0gdGhlIGZpbmFsIHRleHQgZG9lc24ndCBkZXBlbmQgb24g dGhlCisrCSAgIGluaXRpYWwgdGV4dCBpbiBPRkIgbW9kZSwgc28gd2hvIGNhcmVzIHdoYXQgaXQg aXM/IChXaG8KKysJICAgZGVzaWduZWQgdGhlc2UgdGVzdHM/KSAqLworKwlpZihpbW9kZSA9PSBP RkIpCisrCSAgICBmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCQl0ZXh0W25dPXRleHQwW25dXm9s ZF9pdltuXTsKKysJfQorKyAgICB9CisrICAgIAorK2ludCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxl LCBjaGFyICpyc3BmaWxlKQorKyAgICB7CisrICAgIGNoYXIgYWZuWzI1Nl0sIHJmblsyNTZdOwor KyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKKysgICAgY2hhciBpYnVmWzIwNDhd LCB0YnVmWzIwNDhdOworKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOworKyAgICBjaGFyIGFt b2RlWzhdID0gIiI7CisrICAgIGNoYXIgYXRlc3RbMTAwXSA9ICIiOworKyAgICBpbnQgYWtleXN6 PTA7CisrICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOworKyAgICBpbnQgZGly ID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsy MDQ4XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOworKyAgICBjaGFyICpy cDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBpbnQgbnVta2V5cz0xOworKyAgICBF VlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZp bGUpKQorKwl7CisrCXByaW50ZigiTm8gcmVxIGZpbGVcbiIpOworKwlyZXR1cm4gLTE7CisrCX0K KysgICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKKysKKysgICAgaWYgKChhZnAgPSBmb3BlbihhZm4s ICJyIikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNc biIsIAorKwkgICAgICAgYWZuLCBzdHJlcnJvcihlcnJubykpOworKwlyZXR1cm4gLTE7CisrCX0K KysgICAgaWYgKCFyc3BmaWxlKQorKwl7CisrCXN0cmNweShyZm4sYWZuKTsKKysJcnA9c3Ryc3Ry KHJmbiwicmVxLyIpOworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlpZiAoIXJwKQorKwkg ICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKKysjZW5kaWYKKysJYXNzZXJ0KHJwKTsKKysJbWVt Y3B5KHJwLCJyc3AiLDMpOworKwlycCA9IHN0cnN0cihyZm4sICIucmVxIik7CisrCW1lbWNweShy cCwgIi5yc3AiLCA0KTsKKysJcnNwZmlsZSA9IHJmbjsKKysJfQorKyAgICBpZiAoKHJmcCA9IGZv cGVuKHJzcGZpbGUsICJ3IikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBm aWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgcmZuLCBzdHJlcnJvcihlcnJubykpOworKwlmY2xv c2UoYWZwKTsKKysJYWZwID0gTlVMTDsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIHdoaWxlICgh ZXJyICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwpCisrCXsKKysJ dGlkeV9saW5lKHRidWYsIGlidWYpOworKwlpbGVuID0gc3RybGVuKGlidWYpOworKwkvKglwcmlu dGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsqLworKwlpZihzdGVwID09IDMgJiYgIXN0 cmNtcChhbW9kZSwiRUNCIikpCisrCSAgICB7CisrCSAgICBtZW1zZXQoaVZlYywgMCwgc2l6ZW9m KGlWZWMpKTsKKysJICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAq LworKwkgICAgfQorKwlzd2l0Y2ggKHN0ZXApCisrCSAgICB7CisrCWNhc2UgMDogIC8qIHJlYWQg cHJlYW1ibGUgKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdcbicpCisrCQl7IC8qIGVuZCBvZiBw cmVhbWJsZSAqLworKwkJaWYgKCphbW9kZSA9PSAnXDAnKQorKwkJICAgIHsKKysJCSAgICBwcmlu dGYoIk1pc3NpbmcgTW9kZVxuIik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQllbHNl CisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgKysgc3RlcDsKKysJ CSAgICB9CisrCQl9CisrCSAgICBlbHNlIGlmIChpYnVmWzBdICE9ICcjJykKKysJCXsKKysJCXBy aW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7CisrCQllcnIgPSAxOwor KwkJfQorKwkgICAgZWxzZQorKwkJeyAvKiBwcm9jZXNzIHByZWFtYmxlICovCisrCQljaGFyICp4 cCwgKnBwID0gaWJ1ZisyOworKwkJaW50IG47CisrCQlpZigqYW1vZGUpCisrCQkgICAgeyAvKiBp bnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLworKwkJICAgIHRpbWVfdCBydGltID0gdGltZSgw KTsKKysJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBjdGltZSgmcnRpbSkpOworKwkJICAgIH0K KysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICBpZigh c3RybmNtcChwcCwiSU5WRVJTRSAiLDgpIHx8ICFzdHJuY21wKHBwLCJERVMgIiw0KQorKwkJICAg ICAgIHx8ICFzdHJuY21wKHBwLCJUREVTICIsNSkKKysJCSAgICAgICB8fCAhc3RybmNtcChwcCwi UEVSTVVUQVRJT04gIiwxMikKKysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiU1VCU1RJVFVUSU9O ICIsMTMpCisrCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlZBUklBQkxFICIsOSkpCisrCQkJewor KwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KKysJCQlpZighc3RybmNtcChwcCwiREVTICIsNCkpCisr CQkJICAgIHBwKz00OworKwkJCWVsc2UgaWYoIXN0cm5jbXAocHAsIlRERVMgIiw1KSkKKysJCQkg ICAgcHArPTU7CisrCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7CisrCQkJbiA9IHhwLXBwOworKwkJ CXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKKysJCQlhdGVzdFtuXSA9ICdcMCc7CisrCQkJLyogZ2V0 IG1vZGUgKi8KKysJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLworKwkJ CW4gPSBzdHJsZW4oeHArMSktMTsKKysJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKKysJCQlh bW9kZVtuXSA9ICdcMCc7CisrCQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLworKwkJCWlmIChWRVJC T1NFKQorKwkJCQlwcmludGYoIlRlc3Q9JXMsIE1vZGU9JXNcbiIsYXRlc3QsYW1vZGUpOworKwkJ CX0KKysJCSAgICB9CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSAxOiAgLyogW0VOQ1JZ UFRdIHwgW0RFQ1JZUFRdICovCisrCSAgICBpZihpYnVmWzBdID09ICdcbicpCisrCQlicmVhazsK KysJICAgIGlmIChpYnVmWzBdID09ICdbJykKKysJCXsKKysJCWZwdXRzKGlidWYsIHJmcCk7Cisr CQkrK3N0ZXA7CisrCQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDAp CisrCQkgICAgZGlyID0gMTsKKysJCWVsc2UgaWYgKHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQ VF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDA7CisrCQllbHNlCisrCQkgICAgeworKwkJICAg IHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7CisrCQkgICAgZXJyID0gMTsK KysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKKysJ CXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdv cmRcbiIpOworKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNlIAorKwkJc3RlcCA9IDI7CisrCisr CWNhc2UgMjogLyogS0VZID0geHh4eCAqLworKwkgICAgaWYoKmlidWYgPT0gJ1xuJykKKysJCXsK KysJICAgICAgICBmcHV0cyhpYnVmLCByZnApOworKwkJYnJlYWs7CisrICAgICAgICAgICAgICAg IH0KKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVCA9ICIsOCkpCisrCQl7CisrCSAg ICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCWJyZWFrOworKyAgICAgICAgICAgICAgICB9Cisr CSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQ9Iiw2KSkKKysJCXsKKysJICAgICAgICBm cHV0cyhpYnVmLCByZnApOworKwkJYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysJICAgIGlm KCFzdHJuY2FzZWNtcChpYnVmLCJOdW1LZXlzID0gIiwxMCkpCisrCQl7CisrCQludW1rZXlzPWF0 b2koaWJ1ZisxMCk7CisrCQlicmVhazsKKysJCX0KKysJICAKKysJICAgIGZwdXRzKGlidWYsIHJm cCk7CisrCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZID0gIiw2KSkKKysJCXsKKysJCWFr ZXlzej02NDsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNiwgYUtleSk7CisrCQlpZiAo bGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkg ICAgZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiS0VZIiwg YUtleSwgbGVuKTsKKysJCSsrc3RlcDsKKysJCX0KKysJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21w KGlidWYsIktFWXMgPSAiLDcpKQorKwkJeworKwkJYWtleXN6PTY0KjM7CisrCQlsZW49aGV4MmJp bihpYnVmKzcsYUtleSk7CisrCQlpZihsZW4gIT0gOCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRm KCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAg fQorKwkJbWVtY3B5KGFLZXkrOCxhS2V5LDgpOworKwkJbWVtY3B5KGFLZXkrMTYsYUtleSw4KTsK KysJCWlidWZbNF09J1wwJzsKKysJCVByaW50VmFsdWUoIktFWXMiLGFLZXksbGVuKTsKKysJCSsr c3RlcDsKKysJCX0KKysJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSIsMykpCisr CQl7CisrCQlpbnQgbj1pYnVmWzNdLScxJzsKKysKKysJCWFrZXlzej02NCozOworKwkJbGVuPWhl eDJiaW4oaWJ1Zis3LGFLZXkrbio4KTsKKysJCWlmKGxlbiAhPSA4KQorKwkJICAgIHsKKysJCSAg ICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnI9MTsKKysJCSAgICBicmVhazsK KysJCSAgICB9CisrCQlpYnVmWzRdPSdcMCc7CisrCQlQcmludFZhbHVlKGlidWYsYUtleSxsZW4p OworKwkJaWYobiA9PSAyKQorKwkJICAgICsrc3RlcDsKKysJCX0KKysJICAgIGVsc2UKKysJCXsK KysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGJy ZWFrOworKworKwljYXNlIDM6IC8qIElWID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAhPSAwKQorKwkJewor KwkJcHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNl CisrCQl7CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMpOworKwkJaWYgKGxl biA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxuIik7CisrCQkgICAg ZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIklWIiwgaVZl YywgbGVuKTsKKysJCXN0ZXAgPSAoZGlyKT8gNDogNTsKKysJCX0KKysJICAgIGJyZWFrOworKwor KwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7 CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIsIDEyKSAhPSAwKQor KwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7CisrCQllcnIgPSAxOworKwkJ fQorKwkgICAgZWxzZQorKwkJeworKwkJaW50IG5uID0gc3RybGVuKGlidWYrMTIpOworKwkJaWYo IXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEyLG5uLTEs cGxhaW50ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW49aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRl eHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBQ TEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOwor KwkJICAgIH0KKysJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCisrCQkgICAgeworKwkJ ICAgIHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKKysJCSAgICB9CisrCQlQcmludFZhbHVl KCJQTEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4pOworKwkJaWYgKHN0 cmNtcChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAg ICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLGFrZXlzeixudW1rZXlzLGFLZXksaVZlYyxkaXIscGxh aW50ZXh0LGxlbixyZnApOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgYXNz ZXJ0KGRpciA9PSAxKTsKKysJCSAgICByZXQgPSBERVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3os IGFLZXksIGlWZWMsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAq LworKwkJCQkgIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRWYWx1 ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJD RkIxIikpOworKwkJICAgIH0KKysJCXN0ZXAgPSA2OworKwkJfQorKwkgICAgYnJlYWs7CisrCisr CWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7 CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkK KysJCXsKKysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJ ICAgIGVsc2UKKysJCXsKKysJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKKysJCSAgICBsZW49 YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsKKysJCWVsc2UK KysJCSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7CisrCQlpZiAobGVuIDwg MCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOworKwkJ ICAgIGVyciA9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQkKKysJCVByaW50VmFsdWUo IkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1v bnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9f bWN0KGFtb2RlLCBha2V5c3osIG51bWtleXMsIGFLZXksIGlWZWMsIAorKwkJCSAgIGRpciwgY2lw aGVydGV4dCwgbGVuLCByZnApOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAg YXNzZXJ0KGRpciA9PSAwKTsKKysJCSAgICByZXQgPSBERVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5 c3osIGFLZXksIGlWZWMsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLworKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRW YWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4dCxsZW4scmZwLAorKwkJ CQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOworKwkJICAgIH0KKysJCXN0ZXAgPSA2OworKwkJfQor KwkgICAgYnJlYWs7CisrCisrCWNhc2UgNjoKKysJICAgIGlmIChpYnVmWzBdICE9ICdcbicpCisr CQl7CisrCQllcnIgPSAxOworKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1pbmF0b3JcbiIpOworKwkJ fQorKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0gMCkKKysJCXsgLyogTUNU IGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KKysJCWZwdXRzKGlidWYsIHJmcCk7Cisr CQl9CisrCSAgICBzdGVwID0gMTsKKysJICAgIGJyZWFrOworKwkgICAgfQorKwl9CisrICAgIGlm IChyZnApCisrCWZjbG9zZShyZnApOworKyAgICBpZiAoYWZwKQorKwlmY2xvc2UoYWZwKTsKKysg ICAgcmV0dXJuIGVycjsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIFByb2Nlc3NlcyBlaXRoZXIgYSBzaW5nbGUgZmls ZSBvciAKKysgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxl LgorKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1mIHh4 eC5yZXEKKysgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3Qg LWQgeHh4eHgueHh4CisrICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4dAorKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKytpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCisrICAgIHsKKysgICAgY2hhciAqcnFsaXN0ID0gInJlcS50eHQi LCAqcnNwZmlsZSA9IE5VTEw7CisrICAgIEZJTEUgKmZwID0gTlVMTDsKKysgICAgY2hhciBmblsy NTBdID0gIiIsIHJmblsyNTZdID0gIiI7CisrICAgIGludCBmX29wdCA9IDAsIGRfb3B0ID0gMTsK KysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7 CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlFWElUKDEpOworKwl9CisrI2VuZGlmCisrICAgIGlm IChhcmdjID4gMSkKKysJeworKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKQor KwkgICAgeworKwkgICAgZF9vcHQgPSAxOworKwkgICAgfQorKwllbHNlIGlmIChzdHJjYXNlY21w KGFyZ3ZbMV0sICItZiIpID09IDApCisrCSAgICB7CisrCSAgICBmX29wdCA9IDE7CisrCSAgICBk X29wdCA9IDA7CisrCSAgICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIHByaW50ZigiSW52YWxp ZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQor KwlpZiAoYXJnYyA8IDMpCisrCSAgICB7CisrCSAgICBwcmludGYoIk1pc3NpbmcgcGFyYW1ldGVy XG4iKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKwlpZiAoZF9vcHQpCisrCSAgICBycWxp c3QgPSBhcmd2WzJdOworKwllbHNlCisrCSAgICB7CisrCSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0p OworKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107CisrCSAgICB9CisrCX0KKysgICAgaWYgKGRfb3B0 KQorKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KKysJaWYgKCEoZnAgPSBmb3Bl bihycWxpc3QsICJyIikpKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEg bGlzdCBmaWxlXG4iKTsKKysJICAgIHJldHVybiAtMTsKKysJICAgIH0KKysJd2hpbGUgKGZnZXRz KGZuLCBzaXplb2YoZm4pLCBmcCkpCisrCSAgICB7CisrCSAgICBzdHJ0b2soZm4sICJcclxuIik7 CisrCSAgICBzdHJjcHkocmZuLCBmbik7CisrCSAgICBwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4i LCByZm4pOworKwkgICAgaWYgKHByb2NfZmlsZShyZm4sIHJzcGZpbGUpKQorKwkJeworKwkJcHJp bnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJmbik7CisrCQlFWElU KDEpOworKwkJfQorKwkgICAgfQorKwlmY2xvc2UoZnApOworKwl9CisrICAgIGVsc2UgLyogc2lu Z2xlIGZpbGUgKi8KKysJeworKwlpZiAoVkVSQk9TRSkKKysJCXByaW50ZigiUHJvY2Vzc2luZzog JXNcbiIsIGZuKTsKKysJaWYgKHByb2NfZmlsZShmbiwgcnNwZmlsZSkpCisrCSAgICB7CisrCSAg ICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgZm4pOworKwkg ICAgfQorKwl9CisrICAgIEVYSVQoMCk7CisrICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMu Yy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jCistLS0g b3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMuZmlwcwkyMDEyLTAx LTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9m aXBzL2NhdnMvZmlwc19kc3N2cy5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAw CitAQCAtMCwwICsxLDUzNyBAQAorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Cisr CisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKytpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgICBwcmludGYoIk5vIEZJUFMgRFNBIHN1 cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZXZwLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKworKyNp bmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyB2b2lkIHBibihjb25zdCBjaGFyICpuYW1l LCBCSUdOVU0gKmJuKQorKwl7CisrCWludCBsZW4sIGk7CisrCXVuc2lnbmVkIGNoYXIgKnRtcDsK KysJbGVuID0gQk5fbnVtX2J5dGVzKGJuKTsKKysJdG1wID0gT1BFTlNTTF9tYWxsb2MobGVuKTsK KysJaWYgKCF0bXApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9yeSBhbGxvY2F0aW9u IGVycm9yXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysJQk5fYm4yYmluKGJuLCB0bXApOworKwlw cmludGYoIiVzID0gIiwgbmFtZSk7CisrCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKysJCXBy aW50ZigiJTAyWCIsIHRtcFtpXSk7CisrCWZwdXRzKCJcbiIsIHN0ZG91dCk7CisrCU9QRU5TU0xf ZnJlZSh0bXApOworKwlyZXR1cm47CisrCX0KKysKKyt2b2lkIHByaW1lcygpCisrICAgIHsKKysg ICAgY2hhciBidWZbMTAyNDBdOworKyAgICBjaGFyIGxidWZbMTAyNDBdOworKyAgICBjaGFyICpr ZXl3b3JkLCAqdmFsdWU7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGlu KSAhPSBOVUxMKQorKwl7CisrCWZwdXRzKGJ1ZixzdGRvdXQpOworKwlpZiAoIXBhcnNlX2xpbmUo JmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVlOworKwlpZighc3RyY21w KGtleXdvcmQsIlByaW1lIikpCisrCSAgICB7CisrCSAgICBCSUdOVU0gKnBwOworKworKwkgICAg cHA9Qk5fbmV3KCk7CisrCSAgICBkb19oZXgyYm4oJnBwLHZhbHVlKTsKKysJICAgIHByaW50Zigi cmVzdWx0PSAlY1xuIiwKKysJCSAgIEJOX2lzX3ByaW1lX2V4KHBwLDIwLE5VTEwsTlVMTCkgPyAn UCcgOiAnRicpOworKwkgICAgfQkgICAgCisrCX0KKysgICAgfQorKworK3ZvaWQgcHFnKCkKKysg ICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBj aGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGludCBubW9kPTA7CisrCisrICAgIHdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91 dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisr CSAgICBubW9kPWF0b2kodmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTiIpKQor KwkgICAgeworKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7CisrCisrCSAgICBwcmludGYoIlttb2Qg PSAlZF1cblxuIixubW9kKTsKKysKKysJICAgIHdoaWxlKG4tLSkKKysJCXsKKysJCXVuc2lnbmVk IGNoYXIgc2VlZFsyMF07CisrCQlEU0EgKmRzYTsKKysJCWludCBjb3VudGVyOworKwkJdW5zaWdu ZWQgbG9uZyBoOworKwkJZHNhID0gRklQU19kc2FfbmV3KCk7CisrCisrCQlpZiAoIURTQV9nZW5l cmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDAsJmNvdW50ZXIsJmgsTlVMTCkpCisr CQkJeworKwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKwkJcGJu KCJQIixkc2EtPnApOworKwkJcGJuKCJRIixkc2EtPnEpOworKwkJcGJuKCJHIixkc2EtPmcpOwor KwkJcHYoIlNlZWQiLHNlZWQsMjApOworKwkJcHJpbnRmKCJjID0gJWRcbiIsY291bnRlcik7Cisr CQlwcmludGYoIkggPSAlbHhcbiIsaCk7CisrCQlwdXRjKCdcbicsc3Rkb3V0KTsKKysJCX0KKysJ ICAgIH0KKysJZWxzZQorKwkgICAgZnB1dHMoYnVmLHN0ZG91dCk7CisrCX0KKysgICAgfQorKwor K3ZvaWQgcHFndmVyKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBs YnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIEJJR05VTSAqcCA9 IE5VTEwsICpxID0gTlVMTCwgKmcgPSBOVUxMOworKyAgICBpbnQgY291bnRlciwgY291bnRlcjI7 CisrICAgIHVuc2lnbmVkIGxvbmcgaCwgaDI7CisrICAgIERTQSAqZHNhPU5VTEw7CisrICAgIGlu dCBubW9kPTA7CisrICAgIHVuc2lnbmVkIGNoYXIgc2VlZFsxMDI0XTsKKysKKysgICAgd2hpbGUo ZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9s aW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rk b3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlmcHV0cyhidWYsIHN0ZG91dCk7CisrCWlmKCFz dHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIlAiKSkKKysJICAgIHA9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIlEiKSkKKysJICAgIHE9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIkciKSkKKysJICAgIGc9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIlNlZWQiKSkKKysJICAgIHsKKysJICAgIGludCBzbGVuID0gaGV4 MmJpbih2YWx1ZSwgc2VlZCk7CisrCSAgICBpZiAoc2xlbiAhPSAyMCkKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiU2VlZCBwYXJzZSBsZW5ndGggZXJyb3JcbiIpOworKwkJZXhpdCAoMSk7Cisr CQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJjIikpCisrCSAgICBjb3Vu dGVyID1hdG9pKGJ1Zis0KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkgiKSkKKysJICAg IHsKKysJICAgIGggPSBhdG9pKHZhbHVlKTsKKysJICAgIGlmICghcCB8fCAhcSB8fCAhZykKKysJ CXsKKysJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgRXJyb3JcbiIpOworKwkJZXhpdCAoMSk7Cisr CQl9CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAgIGlmICghRFNBX2dlbmVyYXRl X3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMjAgLCZjb3VudGVyMiwmaDIsTlVMTCkpCisr CQkJeworKwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKyAgICAg ICAgICAgIGlmIChCTl9jbXAoZHNhLT5wLCBwKSB8fCBCTl9jbXAoZHNhLT5xLCBxKSB8fCBCTl9j bXAoZHNhLT5nLCBnKQorKwkJfHwgKGNvdW50ZXIgIT0gY291bnRlcjIpIHx8IChoICE9IGgyKSkK KysJICAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIpOworKwkgICAgZWxzZQorKwkgICAgCXByaW50 ZigiUmVzdWx0ID0gUFxuIik7CisrCSAgICBCTl9mcmVlKHApOworKwkgICAgQk5fZnJlZShxKTsK KysJICAgIEJOX2ZyZWUoZyk7CisrCSAgICBwID0gTlVMTDsKKysJICAgIHEgPSBOVUxMOworKwkg ICAgZyA9IE5VTEw7CisrCSAgICBGSVBTX2RzYV9mcmVlKGRzYSk7CisrCSAgICBkc2EgPSBOVUxM OworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysvKiBLZXlwYWlyIHZlcmlmaWNhdGlvbiByb3V0 aW5lLiBOQjogdGhpcyBpc24ndCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBGSVBTMTQwLTIKKysgKiBh bGdvcml0aG0gdGVzdHMuIEl0IGlzIGFuIGFkZGl0aW9uYWwgdGVzdCB0byBwZXJmb3JtIHNhbml0 eSBjaGVja3Mgb24gdGhlCisrICogb3V0cHV0IG9mIHRoZSBLZXlQYWlyIHRlc3QuCisrICovCisr Cisrc3RhdGljIGludCBkc3NfcGFyYW1jaGVjayhpbnQgbm1vZCwgQklHTlVNICpwLCBCSUdOVU0g KnEsIEJJR05VTSAqZywKKysJCQkJCQkJQk5fQ1RYICpjdHgpCisrICAgIHsKKysgICAgQklHTlVN ICpyZW0gPSBOVUxMOworKyAgICBpZiAoQk5fbnVtX2JpdHMocCkgIT0gbm1vZCkKKysJcmV0dXJu IDA7CisrICAgIGlmIChCTl9udW1fYml0cyhxKSAhPSAxNjApCisrCXJldHVybiAwOworKyAgICBp ZiAoQk5faXNfcHJpbWVfZXgocCwgQk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5VTEwpICE9IDEpCisr CXJldHVybiAwOworKyAgICBpZiAoQk5faXNfcHJpbWVfZXgocSwgQk5fcHJpbWVfY2hlY2tzLCBj dHgsIE5VTEwpICE9IDEpCisrCXJldHVybiAwOworKyAgICByZW0gPSBCTl9uZXcoKTsKKysgICAg aWYgKCFCTl9tb2QocmVtLCBwLCBxLCBjdHgpIHx8ICFCTl9pc19vbmUocmVtKQorKyAgICAJfHwg KEJOX2NtcChnLCBCTl92YWx1ZV9vbmUoKSkgPD0gMCkKKysJfHwgIUJOX21vZF9leHAocmVtLCBn LCBxLCBwLCBjdHgpIHx8ICFCTl9pc19vbmUocmVtKSkKKysJeworKwlCTl9mcmVlKHJlbSk7Cisr CXJldHVybiAwOworKwl9CisrICAgIC8qIFRvZG86IGNoZWNrIGcgKi8KKysgICAgQk5fZnJlZShy ZW0pOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworK3ZvaWQga2V5dmVyKCkKKysgICAgewor KyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICpr ZXl3b3JkLCAqdmFsdWU7CisrICAgIEJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTCwgKmcgPSBO VUxMLCAqWCA9IE5VTEwsICpZID0gTlVMTDsKKysgICAgQklHTlVNICpZMjsKKysgICAgQk5fQ1RY ICpjdHggPSBOVUxMOworKyAgICBpbnQgbm1vZD0wLCBwYXJhbWNoZWNrID0gMDsKKysKKysgICAg Y3R4ID0gQk5fQ1RYX25ldygpOworKyAgICBZMiA9IEJOX25ldygpOworKworKyAgICB3aGlsZShm Z2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xp bmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRv dXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQor KwkgICAgeworKwkgICAgaWYgKHApCisrCQlCTl9mcmVlKHApOworKwkgICAgcCA9IE5VTEw7Cisr CSAgICBpZiAocSkKKysJCUJOX2ZyZWUocSk7CisrCSAgICBxID0gTlVMTDsKKysJICAgIGlmIChn KQorKwkJQk5fZnJlZShnKTsKKysJICAgIGcgPSBOVUxMOworKwkgICAgcGFyYW1jaGVjayA9IDA7 CisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiUCIpKQorKwkgICAgcD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiUSIpKQorKwkgICAgcT1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiRyIpKQorKwkgICAgZz1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiWCIpKQorKwkgICAgWD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiWSIpKQorKwkgICAgeworKwkgICAgWT1oZXgyYm4odmFsdWUpOworKwkgICAgaWYgKCFw IHx8ICFxIHx8ICFnIHx8ICFYIHx8ICFZKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJQYXJz ZSBFcnJvclxuIik7CisrCQlleGl0ICgxKTsKKysJCX0KKysJICAgIHBibigiUCIscCk7CisrCSAg ICBwYm4oIlEiLHEpOworKwkgICAgcGJuKCJHIixnKTsKKysJICAgIHBibigiWCIsWCk7CisrCSAg ICBwYm4oIlkiLFkpOworKwkgICAgaWYgKCFwYXJhbWNoZWNrKQorKwkJeworKwkJaWYgKGRzc19w YXJhbWNoZWNrKG5tb2QsIHAsIHEsIGcsIGN0eCkpCisrCQkJcGFyYW1jaGVjayA9IDE7CisrCQll bHNlCisrCQkJcGFyYW1jaGVjayA9IC0xOworKwkJfQorKwkgICAgaWYgKHBhcmFtY2hlY2sgIT0g MSkKKysJICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7CisrCSAgICBlbHNlCisrCQl7CisrCQlp ZiAoIUJOX21vZF9leHAoWTIsIGcsIFgsIHAsIGN0eCkgfHwgQk5fY21wKFkyLCBZKSkKKysJICAg IAkJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKKysJICAgICAgICBlbHNlCisrCSAgICAJCXByaW50 ZigiUmVzdWx0ID0gUFxuIik7CisrCQl9CisrCSAgICBCTl9mcmVlKFgpOworKwkgICAgQk5fZnJl ZShZKTsKKysJICAgIFggPSBOVUxMOworKwkgICAgWSA9IE5VTEw7CisrCSAgICB9CisrCX0KKysJ aWYgKHApCisrCSAgICBCTl9mcmVlKHApOworKwlpZiAocSkKKysJICAgIEJOX2ZyZWUocSk7Cisr CWlmIChnKQorKwkgICAgQk5fZnJlZShnKTsKKysJaWYgKFkyKQorKwkgICAgQk5fZnJlZShZMik7 CisrICAgIH0KKysKKyt2b2lkIGtleXBhaXIoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRd OworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysg ICAgaW50IG5tb2Q9MDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4p ICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYs IGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQor KwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Cisr CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJOIikpCisrCSAgICB7CisrCSAgICBEU0EgKmRzYTsK KysJICAgIGludCBuPWF0b2kodmFsdWUpOworKworKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5c biIsbm1vZCk7CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAgIGlmICghRFNBX2dl bmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCisr CQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCSAgICBwYm4o IlAiLGRzYS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7CisrCSAgICBwYm4oIkciLGRzYS0+ Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysKKysJICAgIHdoaWxlKG4tLSkKKysJCXsK KysJCWlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKwkJCXsKKysJCQlkb19wcmludF9lcnJv cnMoKTsKKysJCQlleGl0KDEpOworKwkJCX0KKysKKysJCXBibigiWCIsZHNhLT5wcml2X2tleSk7 CisrCQlwYm4oIlkiLGRzYS0+cHViX2tleSk7CisrCQlwdXRjKCdcbicsc3Rkb3V0KTsKKysJCX0K KysJICAgIH0KKysJfQorKyAgICB9CisrCisrdm9pZCBzaWdnZW4oKQorKyAgICB7CisrICAgIGNo YXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQs ICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysgICAgRFNBICpkc2E9TlVMTDsKKysKKysgICAg d2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFw YXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhi dWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIltt b2QiKSkKKysJICAgIHsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAgICBwcmludGYoIltt b2QgPSAlZF1cblxuIixubW9kKTsKKysJICAgIGlmIChkc2EpCisrCQlGSVBTX2RzYV9mcmVlKGRz YSk7CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAgIGlmICghRFNBX2dlbmVyYXRl X3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCisrCQl7Cisr CQlkb19wcmludF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCSAgICBwYm4oIlAiLGRz YS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7CisrCSAgICBwYm4oIkciLGRzYS0+Zyk7Cisr CSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIk1zZyIpKQorKwkgICAgeworKwkgICAgdW5zaWduZWQgY2hhciBtc2dbMTAyNF07CisrCSAg ICB1bnNpZ25lZCBjaGFyIHNidWZbNjBdOworKwkgICAgdW5zaWduZWQgaW50IHNsZW47CisrCSAg ICBpbnQgbjsKKysJICAgIEVWUF9QS0VZIHBrOworKwkgICAgRVZQX01EX0NUWCBtY3R4OworKwkg ICAgRFNBX1NJRyAqc2lnOworKwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysKKysJICAg IG49aGV4MmJpbih2YWx1ZSxtc2cpOworKwkgICAgcHYoIk1zZyIsbXNnLG4pOworKworKwkgICAg aWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsK KysJCWV4aXQoMSk7CisrCQl9CisrCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOworKwkgICAg cGsucGtleS5kc2EgPSBkc2E7CisrCSAgICBwYm4oIlkiLGRzYS0+cHViX2tleSk7CisrCisrCSAg ICBFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpOworKwkgICAgRVZQX1Np Z25VcGRhdGUoJm1jdHgsIG1zZywgbik7CisrCSAgICBFVlBfU2lnbkZpbmFsKCZtY3R4LCBzYnVm LCAmc2xlbiwgJnBrKTsKKysKKysJICAgIHNpZyA9IERTQV9TSUdfbmV3KCk7CisrCSAgICBGSVBT X2RzYV9zaWdfZGVjb2RlKHNpZywgc2J1Ziwgc2xlbik7CisrCisrCSAgICBwYm4oIlIiLHNpZy0+ cik7CisrCSAgICBwYm4oIlMiLHNpZy0+cyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJ ICAgIERTQV9TSUdfZnJlZShzaWcpOworKwkgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsK KysJICAgIH0KKysJfQorKwlpZiAoZHNhKQorKwkJRklQU19kc2FfZnJlZShkc2EpOworKyAgICB9 CisrCisrdm9pZCBzaWd2ZXIoKQorKyAgICB7CisrICAgIERTQSAqZHNhPU5VTEw7CisrICAgIGNo YXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIHVuc2lnbmVkIGNoYXIg bXNnWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGludCBubW9kPTAs IG49MDsKKysgICAgRFNBX1NJRyBzZywgKnNpZyA9ICZzZzsKKysKKysgICAgc2lnLT5yID0gTlVM TDsKKysgICAgc2lnLT5zID0gTlVMTDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBi dWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFs dWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVl OworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIHsKKysJICAgIG5t b2Q9YXRvaSh2YWx1ZSk7CisrCSAgICBpZihkc2EpCisrCQlGSVBTX2RzYV9mcmVlKGRzYSk7Cisr CSAgICBkc2E9RklQU19kc2FfbmV3KCk7CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJQIikpCisrCSAgICBkc2EtPnA9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21w KGtleXdvcmQsIlEiKSkKKysJICAgIGRzYS0+cT1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFz dHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgeworKwkgICAgZHNhLT5nPWhleDJibih2YWx1ZSk7 CisrCisrCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysJICAgIHBibigiUCIs ZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJICAgIHBibigiRyIsZHNhLT5nKTsK KysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiTXNnIikpCisrCSAgICB7CisrCSAgICBuPWhleDJiaW4odmFsdWUsbXNnKTsKKysJICAg IHB2KCJNc2ciLG1zZyxuKTsKKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlki KSkKKysJICAgIGRzYS0+cHViX2tleT1oZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiUiIpKQorKwkgICAgc2lnLT5yPWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJTIikpCisrCSAgICB7CisrCSAgICBFVlBfTURfQ1RYIG1jdHg7CisrCSAg ICBFVlBfUEtFWSBwazsKKysJICAgIHVuc2lnbmVkIGNoYXIgc2lnYnVmWzYwXTsKKysJICAgIHVu c2lnbmVkIGludCBzbGVuOworKwkgICAgaW50IHI7CisrCSAgICBFVlBfTURfQ1RYX2luaXQoJm1j dHgpOworKwkgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKKysJICAgIHBrLnBrZXkuZHNhID0g ZHNhOworKwkgICAgc2lnLT5zPWhleDJibih2YWx1ZSk7CisrCQorKwkgICAgcGJuKCJZIixkc2Et PnB1Yl9rZXkpOworKwkgICAgcGJuKCJSIixzaWctPnIpOworKwkgICAgcGJuKCJTIixzaWctPnMp OworKworKwkgICAgc2xlbiA9IEZJUFNfZHNhX3NpZ19lbmNvZGUoc2lnYnVmLCBzaWcpOworKwkg ICAgRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpOworKwkgICAgRVZQ X1ZlcmlmeVVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKKysJICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwo Jm1jdHgsIHNpZ2J1Ziwgc2xlbiwgJnBrKTsKKysJICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0 eCk7CisrCQorKwkgICAgcHJpbnRmKCJSZXN1bHQgPSAlY1xuIiwgciA9PSAxID8gJ1AnIDogJ0Yn KTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKytp bnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgeworKyAgICBpZihhcmdjICE9IDIp CisrCXsKKysJZnByaW50ZihzdGRlcnIsIiVzIFtwcmltZXxwcWd8cHFndmVyfGtleXBhaXJ8c2ln Z2VufHNpZ3Zlcl1cbiIsYXJndlswXSk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgaWYoIUZJUFNf bW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCWV4aXQoMSk7CisrCX0K KysgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJwcmltZSIpKQorKwlwcmltZXMoKTsKKysgICAgZWxz ZSBpZighc3RyY21wKGFyZ3ZbMV0sInBxZyIpKQorKwlwcWcoKTsKKysgICAgZWxzZSBpZighc3Ry Y21wKGFyZ3ZbMV0sInBxZ3ZlciIpKQorKwlwcWd2ZXIoKTsKKysgICAgZWxzZSBpZighc3RyY21w KGFyZ3ZbMV0sImtleXBhaXIiKSkKKysJa2V5cGFpcigpOworKyAgICBlbHNlIGlmKCFzdHJjbXAo YXJndlsxXSwia2V5dmVyIikpCisrCWtleXZlcigpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJn dlsxXSwic2lnZ2VuIikpCisrCXNpZ2dlbigpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsx XSwic2lndmVyIikpCisrCXNpZ3ZlcigpOworKyAgICBlbHNlCisrCXsKKysJZnByaW50ZihzdGRl cnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKKysJZXhpdCgxKTsKKysJfQor KworKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9m aXBzL2NhdnMvZmlwc19ybmd2cy5jLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYwky MDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwyMzAgQEAKKysv KgorKyAqIENydWRlIHRlc3QgZHJpdmVyIGZvciBwcm9jZXNzaW5nIHRoZSBWU1QgYW5kIE1DVCB0 ZXN0dmVjdG9yIGZpbGVzCisrICogZ2VuZXJhdGVkIGJ5IHRoZSBDTVZQIFJOR1ZTIHByb2R1Y3Qu CisrICoKKysgKiBOb3RlIHRoZSBpbnB1dCBmaWxlcyBhcmUgYXNzdW1lZCB0byBoYXZlIGEgX3Zl cnlfIHNwZWNpZmljIGZvcm1hdAorKyAqIGFzIGRlc2NyaWJlZCBpbiB0aGUgTklTVCBkb2N1bWVu dCAiVGhlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yCisrICogVmFsaWRhdGlvbiBTeXN0ZW0gKFJO R1ZTKSIsIE1heSAyNSwgMjAwNC4KKysgKgorKyAqLworKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2xjb25mLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3RkaW8uaD4K KysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgICBwcmludGYoIk5v IEZJUFMgUk5HIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4gMDsKKyt9CisrI2Vsc2UKKysKKysj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRl IDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3ZvaWQgdnN0KCkKKysg ICAgeworKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFy ICp2ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOworKyAgICB1bnNpZ25l ZCBjaGFyIHJldFsxNl07CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAy NF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgbG9uZyBpLCBrZXlsZW47Cisr CisrICAgIGtleWxlbiA9IDA7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0 ZGluKSAhPSBOVUxMKQorKwl7CisrCWZwdXRzKGJ1ZixzdGRvdXQpOworKwlpZighc3RybmNtcChi dWYsIltBRVMgMTI4LUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAxNjsKKysJZWxzZSBpZighc3Ry bmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAyNDsKKysJZWxzZSBp Zighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAzMjsKKysJ aWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQljb250aW51 ZTsKKysJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKKysJICAgIHsKKysJICAgIGtleT1oZXgy YmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0ga2V5bGVuKQorKwkJeworKwkJZnByaW50 ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVjdGluZyAlbGRcbiIsIGtleWxlbik7 CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJE VCIpKQorKwkgICAgeworKwkgICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChp ICE9IDE2KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIERUIGxlbmd0aFxuIik7 CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJW IikpCisrCSAgICB7CisrCSAgICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAh PSAxNikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBWIGxlbmd0aFxuIik7Cisr CQlyZXR1cm47CisrCQl9CisrCisrCSAgICBpZiAoIWtleSB8fCAhZHQpCisrCQl7CisrCQlmcHJp bnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysK KysJICAgIEZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVuKTsKKysJICAgIEZJUFNfcmFuZF9z ZWVkKHYsMTYpOworKwkgICAgRklQU19yYW5kX3NldF9kdChkdCk7CisrCSAgICBpZiAoRklQU19y YW5kX2J5dGVzKHJldCwxNikgPD0gMCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Ig Z2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKKysJICAgICAgICByZXR1cm47CisrCSAgICAgICAgfQor KworKwkgICAgcHYoIlIiLHJldCwxNik7CisrCSAgICBPUEVOU1NMX2ZyZWUoa2V5KTsKKysJICAg IGtleSA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUoZHQpOworKwkgICAgZHQgPSBOVUxMOwor KwkgICAgT1BFTlNTTF9mcmVlKHYpOworKwkgICAgdiA9IE5VTEw7CisrCSAgICB9CisrCX0KKysg ICAgfQorKworK3ZvaWQgbWN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBO VUxMOworKyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAq ZHQgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07CisrICAgIGNoYXIgYnVmWzEw MjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsK KysgICAgbG9uZyBpLCBrZXlsZW47CisrICAgIGludCBqOworKworKyAgICBrZXlsZW4gPSAwOwor KworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJewor KwlmcHV0cyhidWYsc3Rkb3V0KTsKKysJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1LZXldIiwg MTMpKQorKwkJa2V5bGVuID0gMTY7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDE5Mi1L ZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMjQ7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVT IDI1Ni1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMzI7CisrCWlmICghcGFyc2VfbGluZSgma2V5 d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGludWU7CisrCWlmKCFzdHJjbXAoa2V5 d29yZCwiS2V5IikpCisrCSAgICB7CisrCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJ ICAgIGlmIChpICE9IGtleWxlbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBr ZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOworKwkJcmV0dXJuOworKwkJfQor KwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKKysJICAgIHsKKysJICAg IGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikKKysJCXsKKysJCWZw cmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJfQor KwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQorKwkgICAgeworKwkgICAg dj1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7CisrCQlmcHJp bnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJfQorKwor KwkgICAgaWYgKCFrZXkgfHwgIWR0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJNaXNzaW5n IGtleSBvciBEVFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBGSVBTX3JhbmRfc2V0 X2tleShrZXksIGtleWxlbik7CisrCSAgICBGSVBTX3JhbmRfc2VlZCh2LDE2KTsKKysJICAgIGZv ciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQorKwkJeworKwkJICAgIEZJUFNfcmFuZF9zZXRfZHQo ZHQpOworKwkJICAgIGlmIChGSVBTX3JhbmRfYnl0ZXMocmV0LDE2KSA8PSAwKQorKwkJCXsKKysJ CQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxuIik7CisrCQkgICAg ICAgIHJldHVybjsKKysJCSAgICAgICAgfQorKwkJICAgIC8qIEluY3JlbWVudCBEVCAqLworKwkJ ICAgIGZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKKysJCQl7CisrCQkJZHRbal0rKzsKKysJCQlp ZiAoZHRbal0pCisrCQkJCWJyZWFrOworKwkJCX0KKysJCX0KKysKKysJICAgIHB2KCJSIixyZXQs MTYpOworKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7CisrCSAgICBrZXkgPSBOVUxMOworKwkgICAg T1BFTlNTTF9mcmVlKGR0KTsKKysJICAgIGR0ID0gTlVMTDsKKysJICAgIE9QRU5TU0xfZnJlZSh2 KTsKKysJICAgIHYgPSBOVUxMOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKytpbnQgbWFpbihp bnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgeworKyAgICBpZihhcmdjICE9IDIpCisrCXsKKysJ ZnByaW50ZihzdGRlcnIsIiVzIFttY3R8dnN0XVxuIixhcmd2WzBdKTsKKysJZXhpdCgxKTsKKysJ fQorKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsK KysJZXhpdCgxKTsKKysJfQorKyAgICBGSVBTX3JhbmRfcmVzZXQoKTsKKysgICAgaWYgKCFGSVBT X3JhbmRfdGVzdF9tb2RlKCkpCisrCXsKKysJZnByaW50ZihzdGRlcnIsICJFcnJvciBzZXR0aW5n IFBSTkcgdGVzdCBtb2RlXG4iKTsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCWV4aXQoMSk7Cisr CX0KKysgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJtY3QiKSkKKysJbWN0KCk7CisrICAgIGVsc2Ug aWYoIXN0cmNtcChhcmd2WzFdLCJ2c3QiKSkKKysJdnN0KCk7CisrICAgIGVsc2UKKysJeworKwlm cHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOworKwlleGl0 KDEpOworKwl9CisrCisrICAgIHJldHVybiAwOworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYy5maXBzIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jCistLS0gb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlwcwkyMDEyLTAxLTA1IDEz OjIyOjMwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2Nh dnMvZmlwc19yc2FndGVzdC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitA QCAtMCwwICsxLDM5MCBAQAorKy8qIGZpcHNfcnNhZ3Rlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkg RHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAor KyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAo YykgMjAwNSwyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor KyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisr ICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUg d3JpdHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNy eXB0c29mdC5jb20pLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1 ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jp by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgor KworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7CisrICAgIHJl dHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytp bnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7Cisrc3RhdGljIGludCByc2FfcHJpbnRr ZXkxKEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsIEJJ R05VTSAqWHAsCisrCQlCSUdOVU0gKmUpOworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihGSUxF ICpvdXQsIFJTQSAqcnNhLAorKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0gKlhx KTsKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4g PSBOVUxMLCAqb3V0ID0gTlVMTDsKKysKKysJaW50IHJldCA9IDE7CisrCisrCWlmKCFGSVBTX21v ZGVfc2V0KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJ CX0KKysKKysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0g Zm9wZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0 OworKwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQor KwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJv clxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJp bnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQln b3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFyc2FfdGVzdChvdXQsIGluKSkKKysJCXsKKysJCWZw cmludGYoc3RkZXJyLCAiRkFUQUwgUlNBR1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsK KysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOworKworKwllbmQ6CisrCisr CWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYgKGluICYmIChpbiAhPSBz dGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJ CWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9CisrCisrI2RlZmluZSBSU0Ff VEVTVF9NQVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAq aW4pCisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKKysJUlNBICpyc2EgPSBOVUxMOworKwlCSUdOVU0gKlhwMSA9IE5VTEws ICpYcDIgPSBOVUxMLCAqWHAgPSBOVUxMOworKwlCSUdOVU0gKlhxMSA9IE5VTEwsICpYcTIgPSBO VUxMLCAqWHEgPSBOVUxMOworKwlCSUdOVU0gKmUgPSBOVUxMOworKwlpbnQgcmV0ID0gMDsKKysJ aW50IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01B WExJTkVMRU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxF Tik7CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKwor Kwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsK KysJCWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0g bGluZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sg Zm9yID0gc2lnbiAqLworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYg bm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVzdCBjb3B5ICov CisrCQlpZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKKysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5l YnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJCQl9Cisr CisrCQlxID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdo aWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpw ID0gMDsKKysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBm cm9tIHZhbHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQor KwkJCXZhbHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAq LworKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3aGlsZSAoKnAgPT0g J1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJ CWlmICghc3RyY21wKGtleXdvcmQsICJ4cDEiKSkKKysJCQl7CisrCQkJaWYgKFhwMSB8fCAhZG9f aGV4MmJuKCZYcDEsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMiIpKQorKwkJCXsKKysJCQlpZiAoWHAyIHx8ICFk b19oZXgyYm4oJlhwMix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHAiKSkKKysJCQl7CisrCQkJaWYgKFhwIHx8ICFk b19oZXgyYm4oJlhwLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJ4cTEiKSkKKysJCQl7CisrCQkJaWYgKFhxMSB8fCAh ZG9faGV4MmJuKCZYcTEsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMiIpKQorKwkJCXsKKysJCQlpZiAoWHEyIHx8 ICFkb19oZXgyYm4oJlhxMix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQor KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHEiKSkKKysJCQl7CisrCQkJaWYgKFhxIHx8 ICFkb19oZXgyYm4oJlhxLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9Cisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJlIikpCisrCQkJeworKwkJCWlmIChlIHx8ICFk b19oZXgyYm4oJmUsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAxIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJwMiIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAicCIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAicTEiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgInEyIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJx IikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJuIikpCisr CQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJkIikpCisrCQkJY29u dGludWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5l YnVmLCBvdXQpOworKworKwkJaWYgKGUgJiYgWHAxICYmIFhwMiAmJiBYcCkKKysJCQl7CisrCQkJ cnNhID0gRklQU19yc2FfbmV3KCk7CisrCQkJaWYgKCFyc2EpCisrCQkJCWdvdG8gZXJyb3I7Cisr CQkJaWYgKCFyc2FfcHJpbnRrZXkxKG91dCwgcnNhLCBYcDEsIFhwMiwgWHAsIGUpKQorKwkJCQln b3RvIGVycm9yOworKwkJCUJOX2ZyZWUoWHAxKTsKKysJCQlYcDEgPSBOVUxMOworKwkJCUJOX2Zy ZWUoWHAyKTsKKysJCQlYcDIgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHApOworKwkJCVhwID0gTlVM TDsKKysJCQlCTl9mcmVlKGUpOworKwkJCWUgPSBOVUxMOworKwkJCX0KKysKKysJCWlmIChyc2Eg JiYgWHExICYmIFhxMiAmJiBYcSkKKysJCQl7CisrCQkJaWYgKCFyc2FfcHJpbnRrZXkyKG91dCwg cnNhLCBYcTEsIFhxMiwgWHEpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCUJOX2ZyZWUoWHExKTsK KysJCQlYcTEgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHEyKTsKKysJCQlYcTIgPSBOVUxMOworKwkJ CUJOX2ZyZWUoWHEpOworKwkJCVhxID0gTlVMTDsKKysJCQlGSVBTX3JzYV9mcmVlKHJzYSk7Cisr CQkJcnNhID0gTlVMTDsKKysJCQl9CisrCQl9CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgor KworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGlu ZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysKKysJaWYgKFhwMSkKKysJCUJOX2Zy ZWUoWHAxKTsKKysJaWYgKFhwMikKKysJCUJOX2ZyZWUoWHAyKTsKKysJaWYgKFhwKQorKwkJQk5f ZnJlZShYcCk7CisrCWlmIChYcTEpCisrCQlCTl9mcmVlKFhxMSk7CisrCWlmIChYcTEpCisrCQlC Tl9mcmVlKFhxMSk7CisrCWlmIChYcTIpCisrCQlCTl9mcmVlKFhxMik7CisrCWlmIChYcSkKKysJ CUJOX2ZyZWUoWHEpOworKwlpZiAoZSkKKysJCUJOX2ZyZWUoZSk7CisrCWlmIChyc2EpCisrCQlG SVBTX3JzYV9mcmVlKHJzYSk7CisrCisrCXJldHVybiByZXQ7CisrCisrCXBhcnNlX2Vycm9yOgor KworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAl ZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysKKytzdGF0aWMgaW50IHJz YV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHAxLCBCSUdOVU0g KlhwMiwgQklHTlVNICpYcCwKKysJCUJJR05VTSAqZSkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJ QklHTlVNICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7CisrCXAxID0gQk5fbmV3KCk7CisrCXAyID0g Qk5fbmV3KCk7CisrCWlmICghcDEgfHwgIXAyKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFS U0FfWDkzMV9kZXJpdmVfZXgocnNhLCBwMSwgcDIsIE5VTEwsIE5VTEwsIFhwMSwgWHAyLCBYcCwK KysJCQkJCQlOVUxMLCBOVUxMLCBOVUxMLCBlLCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCisr CWRvX2JuX3ByaW50X25hbWUob3V0LCAicDEiLCBwMSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0 LCAicDIiLCBwMik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicCIsIHJzYS0+cCk7CisrCisr CXJldCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAocDEpCisrCQlCTl9mcmVlKHAxKTsKKysJaWYg KHAyKQorKwkJQk5fZnJlZShwMik7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysKKytzdGF0aWMg aW50IHJzYV9wcmludGtleTIoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHExLCBC SUdOVU0gKlhxMiwgQklHTlVNICpYcSkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJQklHTlVNICpx MSA9IE5VTEwsICpxMiA9IE5VTEw7CisrCXExID0gQk5fbmV3KCk7CisrCXEyID0gQk5fbmV3KCk7 CisrCWlmICghcTEgfHwgIXEyKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFSU0FfWDkzMV9k ZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBxMSwgcTIsIE5VTEwsIE5VTEwsIE5VTEwsCisrCQkJ CQkJWHExLCBYcTIsIFhxLCBOVUxMLCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWRvX2Ju X3ByaW50X25hbWUob3V0LCAicTEiLCBxMSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicTIi LCBxMik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicSIsIHJzYS0+cSk7CisrCWRvX2JuX3By aW50X25hbWUob3V0LCAibiIsIHJzYS0+bik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAiZCIs IHJzYS0+ZCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAocTEpCisrCQlCTl9m cmVlKHExKTsKKysJaWYgKHEyKQorKwkJQk5fZnJlZShxMik7CisrCisrCXJldHVybiByZXQ7Cisr CX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMv Zmlwc19yc2FzdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X3JzYXN0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNh c3Rlc3QuYy5maXBzCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMJMjAxMi0wMS0wNSAx MzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMzcwIEBACisrLyogZmlwc19yc2Fz dGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVu c3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDA1LgorKyAqLworKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisr ICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4K KysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNl bnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNy eXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlw dHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRp bQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisrICovCisrCisrI2luY2x1 ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL3g1MDl2My5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSU0Eg c3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVk ZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMgaW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJTEUg KmluLCBpbnQgU2FsdGxlbik7Cisrc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAqb3V0LCBS U0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25n IE1zZ2xlbiwgaW50IFNhbHRsZW4pOworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOworKworKwlpbnQgcmV0ID0g MSwgU2FsdGxlbiA9IC0xOworKworKwlpZighRklQU19tb2RlX3NldCgxKSkKKysJCXsKKysJCWRv X3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICgoYXJnYyA+IDIp ICYmICFzdHJjbXAoIi1zYWx0bGVuIiwgYXJndlsxXSkpCisrCQl7CisrCQlTYWx0bGVuID0gYXRv aShhcmd2WzJdKTsKKysJCWlmIChTYWx0bGVuIDwgMCkKKysJCQl7CisrCQkJZnByaW50ZihzdGRl cnIsICJGQVRBTDogSW52YWxpZCBzYWx0IGxlbmd0aFxuIik7CisrCQkJZ290byBlbmQ7CisrCQkJ fQorKwkJYXJnYyAtPSAyOworKwkJYXJndiArPSAyOworKwkJfQorKwllbHNlIGlmICgoYXJnYyA+ IDEpICYmICFzdHJjbXAoIi14OTMxIiwgYXJndlsxXSkpCisrCQl7CisrCQlTYWx0bGVuID0gLTI7 CisrCQlhcmdjLS07CisrCQlhcmd2Kys7CisrCQl9CisrCisrCWlmIChhcmdjID09IDEpCisrCQlp biA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlm IChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJn dlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFU QUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9Cisr CisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5p dGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghcnNh X3N0ZXN0KG91dCwgaW4sIFNhbHRsZW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRB TCBSU0FTVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9 CisrCWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJldCkKKysJCWRvX3By aW50X2Vycm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZjbG9zZShp bik7CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7CisrCisr CXJldHVybiByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4JMTAy NDAKKysKKytpbnQgcnNhX3N0ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQor Kwl7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3b3Jk LCAqdmFsdWU7CisrCVJTQSAqcnNhID0gTlVMTDsKKysJY29uc3QgRVZQX01EICpkZ3N0ID0gTlVM TDsKKysJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTDsKKysJbG9uZyBNc2dsZW4gPSAtMTsKKysJ aW50IGtleWxlbiA9IC0xLCBjdXJyZW50X2tleWxlbiA9IC0xOworKwlpbnQgcmV0ID0gMDsKKysJ aW50IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01B WExJTkVMRU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxF Tik7CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKwor Kwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsK KysJCWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0g bGluZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sg Zm9yID0gc2lnbiAqLworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYg bm8gPSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCkKKysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5l YnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJCQl9Cisr CisrCQlxID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdo aWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpw ID0gMDsKKysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBm cm9tIHZhbHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQor KwkJCXZhbHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAq LworKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3aGlsZSAoKnAgPT0g J1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJ CS8qIExvb2sgZm9yIFttb2QgPSBYWFhdIGZvciBrZXkgbGVuZ3RoICovCisrCisrCQlpZiAoIXN0 cmNtcChrZXl3b3JkLCAiW21vZCIpKQorKwkJCXsKKysJCQlwID0gdmFsdWUgKyBzdHJsZW4odmFs dWUpIC0gMTsKKysJCQlpZiAoKnAgIT0gJ10nKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJ CSpwID0gMDsKKysJCQlrZXlsZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoa2V5bGVuIDwgMCkK KysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJTSEFBbGciKSkKKysJCQl7CisrCQkJaWYgKCFzdHJjbXAodmFsdWUsICJTSEExIikpCisr CQkJCWRnc3QgPSBFVlBfc2hhMSgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEy MjQiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyMjQoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZh bHVlLCAiU0hBMjU2IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7CisrCQkJZWxzZSBpZiAo IXN0cmNtcCh2YWx1ZSwgIlNIQTM4NCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTM4NCgpOworKwkJ CWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEE1MTIiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGE1 MTIoKTsKKysJCQllbHNlCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsCisrCQkJCQkiRkFU QUw6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBcIiVzXCJcbiIsCisrCQkJCQkJCQl2YWx1ZSk7Cisr CQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJNc2ciKSkKKysJCQl7CisrCQkJaWYgKE1zZykKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkgPSAnMCc7 CisrCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKKysJCQlpZiAoIU1zZykKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCisrCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsK KysKKysJCS8qIElmIGtleSBsZW5ndGggaGFzIGNoYW5nZWQsIGdlbmVyYXRlIGFuZCBvdXRwdXQg cHVibGljCisrCQkgKiBrZXkgY29tcG9uZW50cyBvZiBuZXcgUlNBIHByaXZhdGUga2V5LgorKwkJ ICovCisrCisrCQlpZiAoa2V5bGVuICE9IGN1cnJlbnRfa2V5bGVuKQorKwkJCXsKKysJCQlCSUdO VU0gKmJuX2U7CisrCQkJaWYgKHJzYSkKKysJCQkJRklQU19yc2FfZnJlZShyc2EpOworKwkJCXJz YSA9IEZJUFNfcnNhX25ldygpOworKwkJCWlmICghcnNhKQorKwkJCQlnb3RvIGVycm9yOworKwkJ CWJuX2UgPSBCTl9uZXcoKTsKKysJCQlpZiAoIWJuX2UgfHwgIUJOX3NldF93b3JkKGJuX2UsIDB4 MTAwMSkpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJaWYgKCFSU0FfWDkzMV9nZW5lcmF0ZV9rZXlf ZXgocnNhLCBrZXlsZW4sIGJuX2UsIE5VTEwpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCUJOX2Zy ZWUoYm5fZSk7CisrCQkJZnB1dHMoIm4gPSAiLCBvdXQpOworKwkJCWRvX2JuX3ByaW50KG91dCwg cnNhLT5uKTsKKysJCQlmcHV0cygiXG5lID0gIiwgb3V0KTsKKysJCQlkb19ibl9wcmludChvdXQs IHJzYS0+ZSk7CisrCQkJZnB1dHMoIlxuIiwgb3V0KTsKKysJCQljdXJyZW50X2tleWxlbiA9IGtl eWxlbjsKKysJCQl9CisrCisrCQlpZiAoTXNnICYmIGRnc3QpCisrCQkJeworKwkJCWlmICghcnNh X3ByaW50c2lnKG91dCwgcnNhLCBkZ3N0LCBNc2csIE1zZ2xlbiwKKysJCQkJCQkJCVNhbHRsZW4p KQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShNc2cpOworKwkJCU1zZyA9IE5V TEw7CisrCQkJfQorKworKwkJfQorKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysKKysJaWYg KG9saW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYpCisr CQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChyc2EpCisrCQlGSVBTX3JzYV9mcmVlKHJz YSk7CisrCisrCXJldHVybiByZXQ7CisrCisrCXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0 ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Cisr CisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmludHNpZyhGSUxF ICpvdXQsIFJTQSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpN c2csIGxvbmcgTXNnbGVuLCBpbnQgU2FsdGxlbikKKysJeworKwlpbnQgcmV0ID0gMDsKKysJdW5z aWduZWQgY2hhciAqc2lnYnVmID0gTlVMTDsKKysJaW50IGksIHNpZ2xlbjsKKysJLyogRVZQX1BL RVkgc3RydWN0dXJlICovCisrCUVWUF9QS0VZIHBrOworKwlFVlBfTURfQ1RYIGN0eDsKKysJcGsu dHlwZSA9IEVWUF9QS0VZX1JTQTsKKysJcGsucGtleS5yc2EgPSByc2E7CisrCisrCXNpZ2xlbiA9 IFJTQV9zaXplKHJzYSk7CisrCXNpZ2J1ZiA9IE9QRU5TU0xfbWFsbG9jKHNpZ2xlbik7CisrCWlm ICghc2lnYnVmKQorKwkJZ290byBlcnJvcjsKKysKKysJRVZQX01EX0NUWF9pbml0KCZjdHgpOwor KworKwlpZiAoU2FsdGxlbiA+PSAwKQorKwkJeworKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygm Y3R4LAorKwkJCUVWUF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKKysJ CX0KKysJZWxzZSBpZiAoU2FsdGxlbiA9PSAtMikKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3Mo JmN0eCwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKTsKKysJaWYgKCFFVlBfU2lnbkluaXRfZXgo JmN0eCwgZGdzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9TaWduVXBkYXRl KCZjdHgsIE1zZywgTXNnbGVuKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25GaW5h bCgmY3R4LCBzaWdidWYsICh1bnNpZ25lZCBpbnQgKikmc2lnbGVuLCAmcGspKQorKwkJZ290byBl cnJvcjsKKysKKysJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlmcHV0cygiUyA9ICIs IG91dCk7CisrCisrCWZvciAoaSA9IDA7IGkgPCBzaWdsZW47IGkrKykKKysJCWZwcmludGYob3V0 LCAiJTAyWCIsIHNpZ2J1ZltpXSk7CisrCisrCWZwdXRzKCJcbiIsIG91dCk7CisrCisrCXJldCA9 IDE7CisrCisrCWVycm9yOgorKworKwlyZXR1cm4gcmV0OworKwl9CisrI2VuZGlmCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBzIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCistLS0gb3BlbnNz bC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMuZmlwcwkyMDEyLTAxLTA1 IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBz L2NhdnMvZmlwc19yc2F2dGVzdC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAw CitAQCAtMCwwICsxLDM3NyBAQAorKy8qIGZpcHNfcnNhdnRlc3QuYyAqLworKy8qIFdyaXR0ZW4g YnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNT TAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdo dCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysg KgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAq CisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU CisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK KysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlw dHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRl IDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8u aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysK KysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOworKyAgICByZXR1 cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisraW50 IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBzYWx0bGVuKTsKKytzdGF0aWMgaW50 IHJzYV9wcmludHZlcihGSUxFICpvdXQsCisrCQlCSUdOVU0gKm4sIEJJR05VTSAqZSwKKysJCWNv bnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCisr CQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKTsKKysKKytpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0g TlVMTDsKKysKKysJaW50IHJldCA9IDE7CisrCWludCBTYWx0bGVuID0gLTE7CisrCisrCWlmKCFG SVBTX21vZGVfc2V0KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysKKysJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2 WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOworKwkJaWYgKFNhbHRsZW4g PCAwKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVu Z3RoXG4iKTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQlhcmdjIC09IDI7CisrCQlhcmd2ICs9 IDI7CisrCQl9CisrCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2 WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSAtMjsKKysJCWFyZ2MtLTsKKysJCWFyZ3YrKzsKKysJ CX0KKysKKysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0g Zm9wZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0 OworKwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQor KwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJv clxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJp bnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQln b3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFyc2FfdGVzdChvdXQsIGluLCBTYWx0bGVuKSkKKysJ CXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBVlRFU1QgZmlsZSBwcm9jZXNzaW5nIGVy cm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOworKworKwll bmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYgKGluICYm IChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rk b3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9CisrCisrI2Rl ZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJzYV90ZXN0KEZJTEUgKm91 dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQorKwl7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1 ZiwgKnAsICpxOworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCWNvbnN0IEVWUF9NRCAqZGdz dCA9IE5VTEw7CisrCUJJR05VTSAqbiA9IE5VTEwsICplID0gTlVMTDsKKysJdW5zaWduZWQgY2hh ciAqTXNnID0gTlVMTCwgKlMgPSBOVUxMOworKwlsb25nIE1zZ2xlbiwgU2xlbjsKKysJaW50IHJl dCA9IDA7CisrCWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhS U0FfVEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNU X01BWExJTkVMRU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBl cnJvcjsKKysKKysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBp bikpCisrCQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJ a2V5d29yZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisr CQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysK KysJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1 c3QgY29weSAqLworKwkJaWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCisrCQkJeworKwkJCWlmIChm cHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGludWU7 CisrCQkJfQorKworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNl ICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7 CisrCisrCQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRp bmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KnZhbHVlKSkKKysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZy b20gdmFsdWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJd2hp bGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9 IDA7CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQorKwkJCXsKKysJCQlpZiAoIWRv X2hleDJibigmbix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hleDJibigm ZSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCisrCQkJeworKwkJCWlmICghc3RyY21wKHZhbHVlLCAi U0hBMSIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZh bHVlLCAiU0hBMjI0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7CisrCQkJZWxzZSBpZiAo IXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOworKwkJ CWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEz ODQoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCisrCQkJCWRnc3Qg PSBFVlBfc2hhNTEyKCk7CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLAor KwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAorKwkJCQkJCQkJ dmFsdWUpOworKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCisrCQkJeworKwkJCWlmIChNc2cpCisrCQkJCWdv dG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFs dWUpID0gJzAnOworKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7CisrCQkJaWYg KCFNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAiUyIpKQorKwkJCXsKKysJCQlpZiAoUykKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkgPSAnMCc7Cisr CQkJUyA9IGhleDJiaW5fbSh2YWx1ZSwgJlNsZW4pOworKwkJCWlmICghUykKKysJCQkJZ290byBw YXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJSZXN1bHQi KSkKKysJCQljb250aW51ZTsKKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vycm9yOworKworKwkJ ZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisrCQlpZiAobiAmJiBlICYmIE1zZyAmJiBTICYmIGRn c3QpCisrCQkJeworKwkJCWlmICghcnNhX3ByaW50dmVyKG91dCwgbiwgZSwgZGdzdCwKKysJCQkJ CU1zZywgTXNnbGVuLCBTLCBTbGVuLCBTYWx0bGVuKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlP UEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxMOworKwkJCU9QRU5TU0xfZnJlZShTKTsK KysJCQlTID0gTlVMTDsKKysJCQl9CisrCisrCQl9CisrCisrCisrCXJldCA9IDE7CisrCisrCisr CWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwor KwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKG4pCisrCQlC Tl9mcmVlKG4pOworKwlpZiAoZSkKKysJCUJOX2ZyZWUoZSk7CisrCisrCXJldHVybiByZXQ7Cisr CisrCXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9y IHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0K KysKKytzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCisrCQlCSUdOVU0gKm4sIEJJ R05VTSAqZSwKKysJCWNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywg bG9uZyBNc2dsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVu KQorKwl7CisrCWludCByZXQgPSAwLCByOworKwkvKiBTZXR1cCBSU0EgYW5kIEVWUF9QS0VZIHN0 cnVjdHVyZXMgKi8KKysJUlNBICpyc2FfcHVia2V5ID0gTlVMTDsKKysJRVZQX1BLRVkgcGs7Cisr CUVWUF9NRF9DVFggY3R4OworKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOworKwlyc2FfcHVi a2V5ID0gRklQU19yc2FfbmV3KCk7CisrCWlmICghcnNhX3B1YmtleSkKKysJCWdvdG8gZXJyb3I7 CisrCXJzYV9wdWJrZXktPm4gPSBCTl9kdXAobik7CisrCXJzYV9wdWJrZXktPmUgPSBCTl9kdXAo ZSk7CisrCWlmICghcnNhX3B1YmtleS0+biB8fCAhcnNhX3B1YmtleS0+ZSkKKysJCWdvdG8gZXJy b3I7CisrCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7CisrCXBrLnBrZXkucnNhID0gcnNhX3B1Ymtl eTsKKysKKysJRVZQX01EX0NUWF9pbml0KCZjdHgpOworKworKwlpZiAoU2FsdGxlbiA+PSAwKQor KwkJeworKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LAorKwkJCUVWUF9NRF9DVFhfRkxB R19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKKysJCX0KKysJZWxzZSBpZiAoU2FsdGxlbiA9 PSAtMikKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX1BB RF9YOTMxKTsKKysJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKKysJ CWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmY3R4LCBNc2csIE1zZ2xlbikp CisrCQlnb3RvIGVycm9yOworKworKwlyID0gRVZQX1ZlcmlmeUZpbmFsKCZjdHgsIFMsIFNsZW4s ICZwayk7CisrCisrCisrCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJaWYgKHIgPCAw KQorKwkJZ290byBlcnJvcjsKKysJRVJSX2NsZWFyX2Vycm9yKCk7CisrCisrCWlmIChyID09IDAp CisrCQlmcHV0cygiUmVzdWx0ID0gRlxuIiwgb3V0KTsKKysJZWxzZQorKwkJZnB1dHMoIlJlc3Vs dCA9IFBcbiIsIG91dCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAocnNhX3B1 YmtleSkKKysJCUZJUFNfcnNhX2ZyZWUocnNhX3B1YmtleSk7CisrCWlmIChidWYpCisrCQlPUEVO U1NMX2ZyZWUoYnVmKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMKKy0tLSBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMJMjAxMi0wMS0wNSAxMzoy MjozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfc2hhdGVzdC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAt MCwwICsxLDM4OCBAQAorKy8qIGZpcHNfc2hhdGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBT dGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICog cHJvamVjdCAyMDA1LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK KysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisr ICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBi eSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5j b20pLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBl Lmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrCisrI2lm bmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQor K3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFNIQVhYWCBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJu KDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRp YyBpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOworK3N0YXRpYyBpbnQgcHJpbnRf ZGdzdChjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpNc2cs IGludCBNc2dsZW4pOworK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQX01EICptZCwg RklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4pOworKworK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpv dXQgPSBOVUxMOworKworKwlpbnQgcmV0ID0gMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkp CisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlp ZiAoYXJnYyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2 WzFdLCAiciIpOworKworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UK KysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7CisrCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJ CWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJy LCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOwor KwkJfQorKworKwlpZiAoIWRnc3RfdGVzdChvdXQsIGluKSkKKysJCXsKKysJCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUwgZGlnZXN0IGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAocmV0KQor KwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJ ZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0 KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgU0hBX1RFU1RfTUFYX0JJ VFMJMTAyNDAwCisrI2RlZmluZSBTSEFfVEVTVF9NQVhMSU5FTEVOCSgoKFNIQV9URVNUX01BWF9C SVRTID4+IDMpICogMikgKyAxMDApCisrCisraW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJTEUg KmluKQorKwl7CisrCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOworKwljaGFyICpsaW5lYnVmLCAq b2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwl1bnNpZ25lZCBj aGFyICpNc2cgPSBOVUxMLCAqU2VlZCA9IE5VTEw7CisrCWxvbmcgTXNnTGVuID0gLTEsIExlbiA9 IC0xLCBTZWVkTGVuID0gLTE7CisrCWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisr CW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVi dWYgPSBPUEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5l YnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCisrCXdoaWxlIChmZ2V0cyhv bGluZWJ1ZiwgU0hBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJ c3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyog U2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikq a2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisr CQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3 aXRoIFsgKGZvciBbTD0yMF0gbGluZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXApCisrCQkJewor KwkJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCXEg PSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAwOwor KwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFs dWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFs dWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQlw ID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJaWYgKCFzdHJj bXAoa2V5d29yZCwiW0wiKSAmJiAqcD09J10nKQorKwkJCXsKKysJCQlzd2l0Y2ggKGF0b2kodmFs dWUpKQorKwkJCQl7CisrCQkJCWNhc2UgMjA6IG1kPUVWUF9zaGExKCk7ICAgYnJlYWs7CisrCQkJ CWNhc2UgMjg6IG1kPUVWUF9zaGEyMjQoKTsgYnJlYWs7CisrCQkJCWNhc2UgMzI6IG1kPUVWUF9z aGEyNTYoKTsgYnJlYWs7CisrCQkJCWNhc2UgNDg6IG1kPUVWUF9zaGEzODQoKTsgYnJlYWs7Cisr CQkJCWNhc2UgNjQ6IG1kPUVWUF9zaGE1MTIoKTsgYnJlYWs7CisrCQkJCWRlZmF1bHQ6IGdvdG8g cGFyc2VfZXJyb3I7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJMZW4iKSkKKysJCQl7CisrCQkJaWYgKExlbiAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQlMZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoTGVuIDwgMCkKKysJCQkJZ290byBw YXJzZV9lcnJvcjsKKysJCQkvKiBPbmx5IGhhbmRsZSBtdWx0aXBsZXMgb2YgOCBiaXRzICovCisr CQkJaWYgKExlbiAmIDB4NykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoTGVuID4g U0hBX1RFU1RfTUFYX0JJVFMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTXNnTGVuID0g TGVuID4+IDM7CisrCQkJfQorKworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikp CisrCQkJeworKwkJCWxvbmcgdG1wbGVuOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJ CQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJnRtcGxlbik7CisrCQkJaWYgKCFNc2cpCisr CQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAiU2VlZCIpKQorKwkJCXsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12 YWx1ZSkgPSAnMCc7CisrCQkJaWYgKFNlZWQpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJ U2VlZCA9IGhleDJiaW5fbSh2YWx1ZSwgJlNlZWRMZW4pOworKwkJCWlmICghU2VlZCkKKysJCQkJ Z290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJN RCIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisr CQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKKysKKysJCWlmIChtZCAmJiBNc2cgJiYgKE1zZ0xlbiA+ PSAwKSkKKysJCQl7CisrCQkJaWYgKCFwcmludF9kZ3N0KG1kLCBvdXQsIE1zZywgTXNnTGVuKSkK KysJCQkJZ290byBlcnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxM OworKwkJCU1zZ0xlbiA9IC0xOworKwkJCUxlbiA9IC0xOworKwkJCX0KKysJCWVsc2UgaWYgKG1k ICYmIFNlZWQgJiYgKFNlZWRMZW4gPiAwKSkKKysJCQl7CisrCQkJaWYgKCFwcmludF9tb250ZSht ZCwgb3V0LCBTZWVkLCBTZWVkTGVuKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlPUEVOU1NMX2Zy ZWUoU2VlZCk7CisrCQkJU2VlZCA9IE5VTEw7CisrCQkJU2VlZExlbiA9IC0xOworKwkJCX0KKysJ CisrCisrCQl9CisrCisrCisrCXJldCA9IDE7CisrCisrCisrCWVycm9yOgorKworKwlpZiAob2xp bmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9Q RU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKE1zZykKKysJCU9QRU5TU0xfZnJlZShNc2cpOwor KwlpZiAoU2VlZCkKKysJCU9QRU5TU0xfZnJlZShTZWVkKTsKKysKKysJcmV0dXJuIHJldDsKKysK KysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3Ig cHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQor KworK3N0YXRpYyBpbnQgcHJpbnRfZGdzdChjb25zdCBFVlBfTUQgKmVtZCwgRklMRSAqb3V0LAor KwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuKQorKwl7CisrCWludCBpLCBtZGxlbjsK KysJdW5zaWduZWQgY2hhciBtZFtFVlBfTUFYX01EX1NJWkVdOworKwlpZiAoIUVWUF9EaWdlc3Qo TXNnLCBNc2dsZW4sIG1kLCAodW5zaWduZWQgaW50ICopJm1kbGVuLCBlbWQsIE5VTEwpKQorKwkJ eworKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIEhBU0hcbiIsIHN0ZGVycik7CisrCQlyZXR1 cm4gMDsKKysJCX0KKysJZnB1dHMoIk1EID0gIiwgb3V0KTsKKysJZm9yIChpID0gMDsgaSA8IG1k bGVuOyBpKyspCisrCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtZFtpXSk7CisrCWZwdXRzKCJcbiIs IG91dCk7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBwcmludF9tb250ZShjb25z dCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQgU2Vl ZExlbikKKysJeworKwl1bnNpZ25lZCBpbnQgaSwgaiwgazsKKysJaW50IHJldCA9IDA7CisrCUVW UF9NRF9DVFggY3R4OworKwl1bnNpZ25lZCBjaGFyICptMSwgKm0yLCAqbTMsICpwOworKwl1bnNp Z25lZCBpbnQgbWxlbiwgbTFsZW4sIG0ybGVuLCBtM2xlbjsKKysKKysJRVZQX01EX0NUWF9pbml0 KCZjdHgpOworKworKwlpZiAoU2VlZExlbiA+IEVWUF9NQVhfTURfU0laRSkKKysJCW1sZW4gPSBT ZWVkTGVuOworKwllbHNlCisrCQltbGVuID0gRVZQX01BWF9NRF9TSVpFOworKworKwltMSA9IE9Q RU5TU0xfbWFsbG9jKG1sZW4pOworKwltMiA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOworKwltMyA9 IE9QRU5TU0xfbWFsbG9jKG1sZW4pOworKworKwlpZiAoIW0xIHx8ICFtMiB8fCAhbTMpCisrCQln b3RvIG1jX2Vycm9yOworKworKwltMWxlbiA9IG0ybGVuID0gbTNsZW4gPSBTZWVkTGVuOworKwlt ZW1jcHkobTEsIFNlZWQsIFNlZWRMZW4pOworKwltZW1jcHkobTIsIFNlZWQsIFNlZWRMZW4pOwor KwltZW1jcHkobTMsIFNlZWQsIFNlZWRMZW4pOworKworKwlmcHV0cygiXG4iLCBvdXQpOworKwor Kwlmb3IgKGogPSAwOyBqIDwgMTAwOyBqKyspCisrCQl7CisrCQlmb3IgKGkgPSAwOyBpIDwgMTAw MDsgaSsrKQorKwkJCXsKKysJCQlFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBtZCwgTlVMTCk7Cisr CQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMSwgbTFsZW4pOworKwkJCUVWUF9EaWdlc3RVcGRh dGUoJmN0eCwgbTIsIG0ybGVuKTsKKysJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0zLCBtM2xl bik7CisrCQkJcCA9IG0xOworKwkJCW0xID0gbTI7CisrCQkJbTFsZW4gPSBtMmxlbjsKKysJCQlt MiA9IG0zOworKwkJCW0ybGVuID0gbTNsZW47CisrCQkJbTMgPSBwOworKwkJCUVWUF9EaWdlc3RG aW5hbF9leCgmY3R4LCBtMywgJm0zbGVuKTsKKysJCQl9CisrCQlmcHJpbnRmKG91dCwgIkNPVU5U ID0gJWRcbiIsIGopOworKwkJZnB1dHMoIk1EID0gIiwgb3V0KTsKKysJCWZvciAoayA9IDA7IGsg PCBtM2xlbjsgaysrKQorKwkJCWZwcmludGYob3V0LCAiJTAyeCIsIG0zW2tdKTsKKysJCWZwdXRz KCJcblxuIiwgb3V0KTsKKysJCW1lbWNweShtMSwgbTMsIG0zbGVuKTsKKysJCW1lbWNweShtMiwg bTMsIG0zbGVuKTsKKysJCW0xbGVuID0gbTJsZW4gPSBtM2xlbjsKKysJCX0KKysKKysJcmV0ID0g MTsKKysKKysJbWNfZXJyb3I6CisrCWlmIChtMSkKKysJCU9QRU5TU0xfZnJlZShtMSk7CisrCWlm IChtMikKKysJCU9QRU5TU0xfZnJlZShtMik7CisrCWlmIChtMykKKysJCU9QRU5TU0xfZnJlZSht Myk7CisrCisrCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJcmV0dXJuIHJldDsKKysJ fQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX3V0bC5oLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5o CistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oLmZpcHMJMjAx Mi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmgJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAx MDAKK0BAIC0wLDAgKzEsMzQzIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMp IDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgor KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisr ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrdm9p ZCBkb19wcmludF9lcnJvcnModm9pZCkKKysJeworKwljb25zdCBjaGFyICpmaWxlLCAqZGF0YTsK KysJaW50IGxpbmUsIGZsYWdzOworKwl1bnNpZ25lZCBsb25nIGw7CisrCXdoaWxlICgobCA9IEVS Ul9nZXRfZXJyb3JfbGluZV9kYXRhKCZmaWxlLCAmbGluZSwgJmRhdGEsICZmbGFncykpKQorKwkJ eworKwkJZnByaW50ZihzdGRlcnIsICJFUlJPUjolbHg6bGliPSVkLGZ1bmM9JWQscmVhc29uPSVk IgorKwkJCQkiOmZpbGU9JXM6bGluZT0lZDolc1xuIiwKKysJCQlsLCBFUlJfR0VUX0xJQihsKSwg RVJSX0dFVF9GVU5DKGwpLCBFUlJfR0VUX1JFQVNPTihsKSwKKysJCQlmaWxlLCBsaW5lLCBmbGFn cyAmIEVSUl9UWFRfU1RSSU5HID8gZGF0YSA6ICIiKTsKKysJCX0KKysJfQorKworK2ludCBoZXgy YmluKGNvbnN0IGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQpCisrICAgIHsKKysgICAgaW50 IG4xLCBuMjsKKysgICAgdW5zaWduZWQgY2hhciBjaDsKKysKKysgICAgZm9yIChuMT0wLG4yPTAg OyBpbltuMV0gJiYgaW5bbjFdICE9ICdcbicgOyApCisrCXsgLyogZmlyc3QgYnl0ZSAqLworKwlp ZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkKKysJICAgIGNoID0gaW5bbjEr K10gLSAnMCc7CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAmJiAoaW5bbjFdIDw9ICdGJykp CisrCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7CisrCWVsc2UgaWYgKChpbltuMV0gPj0g J2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ2EnICsgMTA7 CisrCWVsc2UKKysJICAgIHJldHVybiAtMTsKKysJaWYoIWluW24xXSkKKysJICAgIHsKKysJICAg IG91dFtuMisrXT1jaDsKKysJICAgIGJyZWFrOworKwkgICAgfQorKwlvdXRbbjJdID0gY2ggPDwg NDsKKysJLyogc2Vjb25kIGJ5dGUgKi8KKysJaWYgKChpbltuMV0gPj0gJzAnKSAmJiAoaW5bbjFd IDw9ICc5JykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJzAnOworKwllbHNlIGlmICgoaW5bbjFd ID49ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICdBJyAr IDEwOworKwllbHNlIGlmICgoaW5bbjFdID49ICdhJykgJiYgKGluW24xXSA8PSAnZicpKQorKwkg ICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEwOworKwllbHNlCisrCSAgICByZXR1cm4gLTE7Cisr CW91dFtuMisrXSB8PSBjaDsKKysJfQorKyAgICByZXR1cm4gbjI7CisrICAgIH0KKysKKyt1bnNp Z25lZCBjaGFyICpoZXgyYmluX20oY29uc3QgY2hhciAqaW4sIGxvbmcgKnBsZW4pCisrCXsKKysJ dW5zaWduZWQgY2hhciAqcDsKKysJcCA9IE9QRU5TU0xfbWFsbG9jKChzdHJsZW4oaW4pICsgMSkv Mik7CisrCSpwbGVuID0gaGV4MmJpbihpbiwgcCk7CisrCXJldHVybiBwOworKwl9CisrCisraW50 IGRvX2hleDJibihCSUdOVU0gKipwciwgY29uc3QgY2hhciAqaW4pCisrCXsKKysJdW5zaWduZWQg Y2hhciAqcDsKKysJbG9uZyBwbGVuOworKwlpbnQgciA9IDA7CisrCXAgPSBoZXgyYmluX20oaW4s ICZwbGVuKTsKKysJaWYgKCFwKQorKwkJcmV0dXJuIDA7CisrCWlmICghKnByKQorKwkJKnByID0g Qk5fbmV3KCk7CisrCWlmICghKnByKQorKwkJcmV0dXJuIDA7CisrCWlmIChCTl9iaW4yYm4ocCwg cGxlbiwgKnByKSkKKysJCXIgPSAxOworKwlPUEVOU1NMX2ZyZWUocCk7CisrCXJldHVybiByOwor Kwl9CisrCisraW50IGRvX2JuX3ByaW50KEZJTEUgKm91dCwgQklHTlVNICpibikKKysJeworKwlp bnQgbGVuLCBpOworKwl1bnNpZ25lZCBjaGFyICp0bXA7CisrCWxlbiA9IEJOX251bV9ieXRlcyhi bik7CisrCWlmIChsZW4gPT0gMCkKKysJCXsKKysJCWZwdXRzKCIwMCIsIG91dCk7CisrCQlyZXR1 cm4gMTsKKysJCX0KKysKKysJdG1wID0gT1BFTlNTTF9tYWxsb2MobGVuKTsKKysJaWYgKCF0bXAp CisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsK KysJCXJldHVybiAwOworKwkJfQorKwlCTl9ibjJiaW4oYm4sIHRtcCk7CisrCWZvciAoaSA9IDA7 IGkgPCBsZW47IGkrKykKKysJCWZwcmludGYob3V0LCAiJTAyeCIsIHRtcFtpXSk7CisrCU9QRU5T U0xfZnJlZSh0bXApOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBkb19ibl9wcmludF9uYW1l KEZJTEUgKm91dCwgY29uc3QgY2hhciAqbmFtZSwgQklHTlVNICpibikKKysJeworKwlpbnQgcjsK KysJZnByaW50ZihvdXQsICIlcyA9ICIsIG5hbWUpOworKwlyID0gZG9fYm5fcHJpbnQob3V0LCBi bik7CisrCWlmICghcikKKysJCXJldHVybiAwOworKwlmcHV0cygiXG4iLCBvdXQpOworKwlyZXR1 cm4gMTsKKysJfQorKworK2ludCBwYXJzZV9saW5lKGNoYXIgKipwa3csIGNoYXIgKipwdmFsLCBj aGFyICpsaW5lYnVmLCBjaGFyICpvbGluZWJ1ZikKKysJeworKwljaGFyICprZXl3b3JkLCAqdmFs dWUsICpwLCAqcTsKKysJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJa2V5d29yZCA9IGxp bmVidWY7CisrCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5z aWduZWQgY2hhcikqa2V5d29yZCkpCisrCQlrZXl3b3JkKys7CisrCisrCS8qIExvb2sgZm9yID0g c2lnbiAqLworKwlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCS8qIElmIG5vICc9JyBl eGl0ICovCisrCWlmICghcCkKKysJCXJldHVybiAwOworKworKwlxID0gcCAtIDE7CisrCisrCS8q IFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hh cikqcSkpCisrCQkqcS0tID0gMDsKKysKKysJKnAgPSAwOworKwl2YWx1ZSA9IHAgKyAxOworKwor KwkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXdoaWxlIChpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQl2YWx1ZSsrOworKworKwkvKiBSZW1vdmUgdHJh aWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0g MTsKKysKKysJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkp CisrCQkqcC0tID0gMDsKKysKKysJKnBrdyA9IGtleXdvcmQ7CisrCSpwdmFsID0gdmFsdWU7Cisr CXJldHVybiAxOworKwl9CisrCisrQklHTlVNICpoZXgyYm4oY29uc3QgY2hhciAqaW4pCisrICAg IHsKKysgICAgQklHTlVNICpwPU5VTEw7CisrCisrICAgIGlmICghZG9faGV4MmJuKCZwLCBpbikp CisrCXJldHVybiBOVUxMOworKworKyAgICByZXR1cm4gcDsKKysgICAgfQorKworK2ludCBiaW4y aGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hhciAqb3V0KQorKyAgICB7Cisr ICAgIGludCBuMSwgbjI7CisrICAgIHVuc2lnbmVkIGNoYXIgY2g7CisrCisrICAgIGZvciAobjE9 MCxuMj0wIDsgbjEgPCBsZW4gOyArK24xKQorKwl7CisrCWNoPWluW24xXSA+PiA0OworKwlpZiAo Y2ggPD0gMHgwOSkKKysJICAgIG91dFtuMisrXT1jaCsnMCc7CisrCWVsc2UKKysJICAgIG91dFtu MisrXT1jaC0xMCsnYSc7CisrCWNoPWluW24xXSAmIDB4MGY7CisrCWlmKGNoIDw9IDB4MDkpCisr CSAgICBvdXRbbjIrK109Y2grJzAnOworKwllbHNlCisrCSAgICBvdXRbbjIrK109Y2gtMTArJ2En OworKwl9CisrICAgIG91dFtuMl09J1wwJzsKKysgICAgcmV0dXJuIG4yOworKyAgICB9CisrCisr dm9pZCBwdihjb25zdCBjaGFyICp0YWcsY29uc3QgdW5zaWduZWQgY2hhciAqdmFsLGludCBsZW4p CisrICAgIHsKKysgICAgY2hhciBvYnVmWzIwNDhdOworKworKyAgICBiaW4yaGV4KHZhbCxsZW4s b2J1Zik7CisrICAgIHByaW50ZigiJXMgPSAlc1xuIix0YWcsb2J1Zik7CisrICAgIH0KKysKKysv KiBUbyBhdm9pZCBleHRlbnNpdmUgY2hhbmdlcyB0byB0ZXN0IHByb2dyYW0gYXQgdGhpcyBzdGFn ZSBqdXN0IGNvbnZlcnQKKysgKiB0aGUgaW5wdXQgbGluZSBpbnRvIGFuIGFjY2VwdGFibGUgZm9y bS4gS2V5d29yZCBsaW5lcyBjb252ZXJ0ZWQgdG8gZm9ybQorKyAqICJrZXl3b3JkID0gdmFsdWVc biIgbm8gbWF0dGVyIHdoYXQgd2hpdGUgc3BhY2UgcHJlc2VudCwgYWxsIG90aGVyIGxpbmVzCisr ICoganVzdCBoYXZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlIHJlbW92ZWQuCisrICovCisr CisraW50IHRpZHlfbGluZShjaGFyICpsaW5lYnVmLCBjaGFyICpvbGluZWJ1ZikKKysJeworKwlj aGFyICprZXl3b3JkLCAqdmFsdWUsICpwLCAqcTsKKysJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVm KTsKKysJa2V5d29yZCA9IGxpbmVidWY7CisrCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwl3 aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQlrZXl3b3JkKys7Cisr CS8qIExvb2sgZm9yID0gc2lnbiAqLworKwlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisr CS8qIElmIG5vICc9JyBqdXN0IGNob3AgbGVhZGluZywgdHJhaWxpbmcgd3MgKi8KKysJaWYgKCFw KQorKwkJeworKwkJcCA9IGtleXdvcmQgKyBzdHJsZW4oa2V5d29yZCkgLSAxOworKwkJd2hpbGUg KCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7 CisrCQlzdHJjcHkob2xpbmVidWYsIGtleXdvcmQpOworKwkJc3RyY2F0KG9saW5lYnVmLCAiXG4i KTsKKysJCXJldHVybiAxOworKwkJfQorKworKwlxID0gcCAtIDE7CisrCisrCS8qIFJlbW92ZSB0 cmFpbGluZyBzcGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisr CQkqcS0tID0gMDsKKysKKysJKnAgPSAwOworKwl2YWx1ZSA9IHAgKyAxOworKworKwkvKiBSZW1v dmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSp2YWx1ZSkpCisrCQl2YWx1ZSsrOworKworKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3Bh Y2UgZnJvbSB2YWx1ZSAqLworKwlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJ d2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkqcC0t ID0gMDsKKysKKysJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsKKysJc3RyY2F0KG9saW5lYnVm LCAiID0gIik7CisrCXN0cmNhdChvbGluZWJ1ZiwgdmFsdWUpOworKwlzdHJjYXQob2xpbmVidWYs ICJcbiIpOworKworKwlyZXR1cm4gMTsKKysJfQorKworKy8qIE5COiB0aGlzIHJldHVybiB0aGUg bnVtYmVyIG9mIF9iaXRzXyByZWFkICovCisraW50IGJpbnQyYmluKGNvbnN0IGNoYXIgKmluLCBp bnQgbGVuLCB1bnNpZ25lZCBjaGFyICpvdXQpCisrICAgIHsKKysgICAgaW50IG47CisrCisrICAg IG1lbXNldChvdXQsMCxsZW4pOworKyAgICBmb3Iobj0wIDsgbiA8IGxlbiA7ICsrbikKKysJaWYo aW5bbl0gPT0gJzEnKQorKwkgICAgb3V0W24vOF18PSgweDgwID4+IChuJTgpKTsKKysgICAgcmV0 dXJuIGxlbjsKKysgICAgfQorKworK2ludCBiaW4yYmludChjb25zdCB1bnNpZ25lZCBjaGFyICpp bixpbnQgbGVuLGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAgZm9yKG49 MCA7IG4gPCBsZW4gOyArK24pCisrCW91dFtuXT0oaW5bbi84XSYoMHg4MCA+PiAobiU4KSkpID8g JzEnIDogJzAnOworKyAgICByZXR1cm4gbjsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK3ZvaWQgUHJpbnRWYWx1ZShj aGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbikKKyt7CisrI2lmIFZFUkJPU0UK KysgIGNoYXIgb2J1ZlsyMDQ4XTsKKysgIGludCBvbGVuOworKyAgb2xlbiA9IGJpbjJoZXgodmFs LCBsZW4sIG9idWYpOworKyAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7 CisrI2VuZGlmCisrfQorKworK3ZvaWQgT3V0cHV0VmFsdWUoY2hhciAqdGFnLCB1bnNpZ25lZCBj aGFyICp2YWwsIGludCBsZW4sIEZJTEUgKnJmcCxpbnQgYml0bW9kZSkKKysgICAgeworKyAgICBj aGFyIG9idWZbMjA0OF07CisrICAgIGludCBvbGVuOworKworKyAgICBpZihiaXRtb2RlKQorKwlv bGVuPWJpbjJiaW50KHZhbCxsZW4sb2J1Zik7CisrICAgIGVsc2UKKysJb2xlbj1iaW4yaGV4KHZh bCxsZW4sb2J1Zik7CisrCisrICAgIGZwcmludGYocmZwLCAiJXMgPSAlLipzXG4iLCB0YWcsIG9s ZW4sIG9idWYpOworKyNpZiBWRVJCT1NFCisrICAgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcs IG9sZW4sIG9idWYpOworKyNlbmRpZgorKyAgICB9CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZmlwc19lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzX2Vyci5j CistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHNfZXJyLmMuZmlwcwkyMDEyLTAxLTA1IDEz OjIyOjMwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzX2Vy ci5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDcgQEAK KysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysjIGluY2x1ZGUgImZpcHNfZXJyLmgiCisrI2Vsc2UKKytzdGF0aWMgdm9pZCAqZHVtbXk9 JmR1bW15OworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHNfZXJy LmguZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwc19lcnIuaAorLS0tIG9wZW5zc2wtMS4w LjBmL2NyeXB0by9maXBzX2Vyci5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwc19lcnIuaAkyMDEyLTAxLTA1IDEz OjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMzcgQEAKKysvKiBjcnlwdG8vZmlw c19lcnIuaCAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl CisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysg KiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNv bSkuCisrICoKKysgKi8KKysKKysvKiBOT1RFOiB0aGlzIGZpbGUgd2FzIGF1dG8gZ2VuZXJhdGVk IGJ5IHRoZSBta2Vyci5wbCBzY3JpcHQ6IGFueSBjaGFuZ2VzCisrICogbWFkZSB0byBpdCB3aWxs IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBuZXh0IHVwZGF0ZXMgdGhpcyBmaWxlLAor KyAqIG9ubHkgcmVhc29uIHN0cmluZ3Mgd2lsbCBiZSBwcmVzZXJ2ZWQuCisrICovCisrCisrI2lu Y2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKworKy8qIEJFR0lOIEVSUk9SIENPREVTICovCisrI2lmbmRlZiBPUEVO U1NMX05PX0VSUgorKworKyNkZWZpbmUgRVJSX0ZVTkMoZnVuYykgRVJSX1BBQ0soRVJSX0xJQl9G SVBTLGZ1bmMsMCkKKysjZGVmaW5lIEVSUl9SRUFTT04ocmVhc29uKSBFUlJfUEFDSyhFUlJfTElC X0ZJUFMsMCxyZWFzb24pCisrCisrc3RhdGljIEVSUl9TVFJJTkdfREFUQSBGSVBTX3N0cl9mdW5j dHNbXT0KKysJeworK3tFUlJfRlVOQyhGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMpLAkiREhf QlVJTFRJTl9HRU5QQVJBTVMifSwKKyt7RVJSX0ZVTkMoRklQU19GX0RTQV9CVUlMVElOX1BBUkFN R0VOKSwJIkRTQV9CVUlMVElOX1BBUkFNR0VOIn0sCisre0VSUl9GVU5DKEZJUFNfRl9EU0FfRE9f U0lHTiksCSJEU0FfZG9fc2lnbiJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0RPX1ZFUklGWSks CSJEU0FfZG9fdmVyaWZ5In0sCisre0VSUl9GVU5DKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCks CSJFVlBfQ2lwaGVySW5pdF9leCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRVZQX0RJR0VTVElOSVRf RVgpLAkiRVZQX0RpZ2VzdEluaXRfZXgifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfQ0hFQ0tf RFNBKSwJIkZJUFNfQ0hFQ0tfRFNBIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX0lO Q09SRV9GSU5HRVJQUklOVCksCSJGSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVCJ9LAorK3tF UlJfRlVOQyhGSVBTX0ZfRklQU19DSEVDS19SU0EpLAkiRklQU19DSEVDS19SU0EifSwKKyt7RVJS X0ZVTkMoRklQU19GX0ZJUFNfRFNBX0NIRUNLKSwJIkZJUFNfRFNBX0NIRUNLIn0sCisre0VSUl9G VU5DKEZJUFNfRl9GSVBTX01PREVfU0VUKSwJIkZJUFNfbW9kZV9zZXQifSwKKyt7RVJSX0ZVTkMo RklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCksCSJmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTKSwJIkZJUFNfc2VsZnRl c3RfYWVzIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUyksCSJGSVBTX3Nl bGZ0ZXN0X2RlcyJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EpLAkiRklQ U19zZWxmdGVzdF9kc2EifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQyks CSJGSVBTX3NlbGZ0ZXN0X2htYWMifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1Rf Uk5HKSwJIkZJUFNfc2VsZnRlc3Rfcm5nIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZU RVNUX1NIQTEpLAkiRklQU19zZWxmdGVzdF9zaGExIn0sCisre0VSUl9GVU5DKEZJUFNfRl9IQVNI X0ZJTkFMKSwJIkhBU0hfRklOQUwifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9CVUlMVElOX0tF WUdFTiksCSJSU0FfQlVJTFRJTl9LRVlHRU4ifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlf UFJJVkFURV9ERUNSWVBUKSwJIlJTQV9FQVlfUFJJVkFURV9ERUNSWVBUIn0sCisre0VSUl9GVU5D KEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCksCSJSU0FfRUFZX1BSSVZBVEVfRU5DUllQ VCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCksCSJSU0FfRUFZ X1BVQkxJQ19ERUNSWVBUIn0sCisre0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNS WVBUKSwJIlJTQV9FQVlfUFVCTElDX0VOQ1JZUFQifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9Y OTMxX0dFTkVSQVRFX0tFWV9FWCksCSJSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgifSwKKyt7RVJS X0ZVTkMoRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCisr ezAsTlVMTH0KKysJfTsKKysKKytzdGF0aWMgRVJSX1NUUklOR19EQVRBIEZJUFNfc3RyX3JlYXNv bnNbXT0KKysJeworK3tFUlJfUkVBU09OKEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUpICAgICAgLCJj YW5ub3QgcmVhZCBleGUifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJ R0VTVCksImNhbm5vdCByZWFkIGV4ZSBkaWdlc3QifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfQ09O VFJBRElDVElOR19FVklERU5DRSksImNvbnRyYWRpY3RpbmcgZXZpZGVuY2UifSwKKyt7RVJSX1JF QVNPTihGSVBTX1JfRVhFX0RJR0VTVF9ET0VTX05PVF9NQVRDSCksImV4ZSBkaWdlc3QgZG9lcyBu b3QgbWF0Y2gifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFU Q0gpLCJmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9G SU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEKSwiZmluZ2VycHJpbnQg ZG9lcyBub3QgbWF0Y2ggbm9ucGljIHJlbG9jYXRlZCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9G SU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HKSwiZmluZ2VycHJpbnQg ZG9lcyBub3QgbWF0Y2ggc2VnbWVudCBhbGlhc2luZyJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9G SVBTX01PREVfQUxSRUFEWV9TRVQpLCJmaXBzIG1vZGUgYWxyZWFkeSBzZXQifSwKKyt7RVJSX1JF QVNPTihGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpICwiZmlwcyBzZWxmdGVzdCBmYWlsZWQi fSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKSAgICwiaW52YWxpZCBr ZXkgbGVuZ3RoIn0sCisre0VSUl9SRUFTT04oRklQU19SX0tFWV9UT09fU0hPUlQpICAgICAgICAs ImtleSB0b28gc2hvcnQifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKSAg ICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCisre0VSUl9SRUFTT04oRklQU19SX1BBSVJXSVNFX1RF U1RfRkFJTEVEKSAsInBhaXJ3aXNlIHRlc3QgZmFpbGVkIn0sCisre0VSUl9SRUFTT04oRklQU19S X1JTQV9ERUNSWVBUX0VSUk9SKSAgICAsInJzYSBkZWNyeXB0IGVycm9yIn0sCisre0VSUl9SRUFT T04oRklQU19SX1JTQV9FTkNSWVBUX0VSUk9SKSAgICAsInJzYSBlbmNyeXB0IGVycm9yIn0sCisr e0VSUl9SRUFTT04oRklQU19SX1NFTEZURVNUX0ZBSUxFRCkgICAgICAsInNlbGZ0ZXN0IGZhaWxl ZCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9URVNUX0ZBSUxVUkUpICAgICAgICAgLCJ0ZXN0IGZh aWx1cmUifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0pICwidW5z dXBwb3J0ZWQgcGxhdGZvcm0ifSwKKyt7MCxOVUxMfQorKwl9OworKworKyNlbmRpZgorKworK3Zv aWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZvaWQpCisrCXsKKysjaWZuZGVmIE9QRU5TU0xfTk9f RVJSCisrCisrCWlmIChFUlJfZnVuY19lcnJvcl9zdHJpbmcoRklQU19zdHJfZnVuY3RzWzBdLmVy cm9yKSA9PSBOVUxMKQorKwkJeworKwkJRVJSX2xvYWRfc3RyaW5ncygwLEZJUFNfc3RyX2Z1bmN0 cyk7CisrCQlFUlJfbG9hZF9zdHJpbmdzKDAsRklQU19zdHJfcmVhc29ucyk7CisrCQl9CisrI2Vu ZGlmCisrCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfYWVzX3Nl bGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVz dC5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYy5m aXBzCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MGYvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAw MDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMDMgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENv cHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoK KysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK KysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisr ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wu b3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK KysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws CisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysg Ki8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cisr I2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYK KysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrc3Rh dGljIHN0cnVjdAorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKysgICAgdW5z aWduZWQgY2hhciBwbGFpbnRleHRbMTZdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRb MTZdOworKyAgICB9IHRlc3RzW109CisrCXsKKysJeworKwl7IDB4MDAsMHgwMSwweDAyLDB4MDMs MHgwNCwweDA1LDB4MDYsMHgwNywKKysJICAweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCww eDBFLDB4MEYgfSwKKysJeyAweDAwLDB4MTEsMHgyMiwweDMzLDB4NDQsMHg1NSwweDY2LDB4Nzcs CisrCSAgMHg4OCwweDk5LDB4QUEsMHhCQiwweENDLDB4REQsMHhFRSwweEZGIH0sCisrCXsgMHg2 OSwweEM0LDB4RTAsMHhEOCwweDZBLDB4N0IsMHgwNCwweDMwLAorKwkgIDB4RDgsMHhDRCwweEI3 LDB4ODAsMHg3MCwweEI0LDB4QzUsMHg1QSB9LAorKwl9LAorKwl9OworKworK3ZvaWQgRklQU19j b3JydXB0X2FlcygpCisrICAgIHsKKysgICAgdGVzdHNbMF0ua2V5WzBdKys7CisrICAgIH0KKysK KytpbnQgRklQU19zZWxmdGVzdF9hZXMoKQorKyAgICB7CisrICAgIGludCBuOworKyAgICBpbnQg cmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9p bml0KCZjdHgpOworKworKyAgICBmb3Iobj0wIDsgbiA8IDEgOyArK24pCisrCXsKKysJaWYgKGZp cHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksCisrCQkJCXRlc3RzW25dLmtl eSwgTlVMTCwKKysJCQkJdGVzdHNbbl0ucGxhaW50ZXh0LAorKwkJCQl0ZXN0c1tuXS5jaXBoZXJ0 ZXh0LAorKwkJCQkxNikgPD0gMCkKKysJCWdvdG8gZXJyOworKwl9CisrICAgIHJldCA9IDE7Cisr ICAgIGVycjoKKysgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysgICAgaWYgKHJl dCA9PSAwKQorKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMsRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7CisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysjZW5kaWYKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9maXBzL2ZpcHMuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHMu Yy5maXBzCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2ZpcHMvZmlwcy5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICsw MTAwCitAQCAtMCwwICsxLDQxOSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisr ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoK KysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK KysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAor KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKwor KyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSAiZmlw c19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysKKysjaWZuZGVmIFBBVEhfTUFYCisrI2RlZmluZSBQQVRIX01BWCAxMDI0Cisr I2VuZGlmCisrCisrc3RhdGljIGludCBmaXBzX3NlbGZ0ZXN0X2ZhaWw7Cisrc3RhdGljIGludCBm aXBzX21vZGU7Cisrc3RhdGljIGNvbnN0IHZvaWQgKmZpcHNfcmFuZF9jaGVjazsKKysKKytzdGF0 aWMgdm9pZCBmaXBzX3NldF9tb2RlKGludCBvbm9mZikKKysJeworKwlpbnQgb3duaW5nX3RocmVh ZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkp CisrCQl7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd19sb2NrKCk7CisrCQlmaXBzX21v ZGUgPSBvbm9mZjsKKysJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X3VubG9jaygpOworKwkJ fQorKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19zZXRfcmFuZF9jaGVjayhjb25zdCB2b2lkICpy YW5kX2NoZWNrKQorKwl7CisrCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhy ZWFkKCk7CisrCisrCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJCXsKKysJCWlmICghb3duaW5n X3RocmVhZCkgZmlwc193X2xvY2soKTsKKysJCWZpcHNfcmFuZF9jaGVjayA9IHJhbmRfY2hlY2s7 CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd191bmxvY2soKTsKKysJCX0KKysJfQorKwor K2ludCBGSVBTX21vZGUodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJaW50IG93bmluZ190 aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysJaWYgKGZpcHNfaXNfc3RhcnRl ZCgpKQorKwkJeworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOworKwkJcmV0 ID0gZmlwc19tb2RlOworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7Cisr CQl9CisrCXJldHVybiByZXQ7CisrCX0KKysKKytjb25zdCB2b2lkICpGSVBTX3JhbmRfY2hlY2so dm9pZCkKKysJeworKwljb25zdCB2b2lkICpyZXQgPSAwOworKwlpbnQgb3duaW5nX3RocmVhZCA9 IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCisr CQl7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7CisrCQlyZXQgPSBmaXBz X3JhbmRfY2hlY2s7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKKysJ CX0KKysJcmV0dXJuIHJldDsKKysJfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lk KQorKyAgICB7CisrICAgIGludCByZXQgPSAwOworKyAgICBpZiAoZmlwc19pc19zdGFydGVkKCkp CisrCXsKKysJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysK KysJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOworKwlyZXQgPSBmaXBzX3NlbGZ0 ZXN0X2ZhaWw7CisrCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOworKwl9Cisr ICAgIHJldHVybiByZXQ7CisrICAgIH0KKysKKysvKiBTZWxmdGVzdCBmYWlsdXJlIGZhdGFsIGV4 aXQgcm91dGluZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAorKyAqIGR1cmluZyAqYW55KiBjcnlwdG9n cmFwaGljIG9wZXJhdGlvbi4gSXQgaGFzIHRoZSBtaW5pbXVtCisrICogb3ZlcmhlYWQgcG9zc2li bGUgdG8gYXZvaWQgdG9vIGJpZyBhIHBlcmZvcm1hbmNlIGhpdC4KKysgKi8KKysKKyt2b2lkIEZJ UFNfc2VsZnRlc3RfY2hlY2sodm9pZCkKKysgICAgeworKyAgICBpZiAoZmlwc19zZWxmdGVzdF9m YWlsKQorKwl7CisrCU9wZW5TU0xEaWUoX19GSUxFX18sX19MSU5FX18sICJGQVRBTCBGSVBTIFNF TEZURVNUIEZBSUxVUkUiKTsKKysJfQorKyAgICB9CisrCisrdm9pZCBmaXBzX3NldF9zZWxmdGVz dF9mYWlsKHZvaWQpCisrICAgIHsKKysgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysgICAg fQorKworK2ludCBGSVBTX3NlbGZ0ZXN0KCkKKysgICAgeworKworKyAgICByZXR1cm4gRklQU19z ZWxmdGVzdF9zaGExKCkKKysJJiYgRklQU19zZWxmdGVzdF9obWFjKCkKKysJJiYgRklQU19zZWxm dGVzdF9hZXMoKQorKwkmJiBGSVBTX3NlbGZ0ZXN0X2RlcygpCisrCSYmIEZJUFNfc2VsZnRlc3Rf cnNhKCkKKysJJiYgRklQU19zZWxmdGVzdF9kc2EoKTsKKysgICAgfQorKworK2ludCBGSVBTX21v ZGVfc2V0KGludCBvbm9mZikKKysgICAgeworKyAgICBpbnQgZmlwc19zZXRfb3duaW5nX3RocmVh ZCgpOworKyAgICBpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKCk7CisrICAgIGludCByZXQg PSAwOworKworKyAgICBmaXBzX3dfbG9jaygpOworKyAgICBmaXBzX3NldF9zdGFydGVkKCk7Cisr ICAgIGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKKysKKysgICAgaWYob25vZmYpCisrCXsKKysJ dW5zaWduZWQgY2hhciBidWZbNDhdOworKworKwlmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOworKwor KwkvKiBEb24ndCBnbyBpbnRvIEZJUFMgbW9kZSB0d2ljZSwganVzdCBzbyB3ZSBjYW4gZG8gYXV0 b21hZ2ljCisrCSAgIHNlZWRpbmcgKi8KKysJaWYoRklQU19tb2RlKCkpCisrCSAgICB7CisrCSAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9T RVQpOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAg ICBnb3RvIGVuZDsKKysJICAgIH0KKysKKysjaWZkZWYgT1BFTlNTTF9JQTMyX1NTRTIKKysJaWYg KChPUEVOU1NMX2lhMzJjYXAgJiAoMTw8MjV8MTw8MjYpKSAhPSAoMTw8MjV8MTw8MjYpKQorKwkg ICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCxGSVBTX1JfVU5TVVBQT1JU RURfUExBVEZPUk0pOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9 IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysjZW5kaWYKKysKKysJLyogUGVyZm9ybSBS TkcgS0FUIGJlZm9yZSBzZWVkaW5nICovCisrCWlmICghRklQU19zZWxmdGVzdF9ybmcoKSkKKysJ ICAgIHsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkg ICAgZ290byBlbmQ7CisrCSAgICB9CisrCisrCS8qIGF1dG9tYWdpY2FsbHkgc2VlZCBQUk5HIGlm IG5vdCBhbHJlYWR5IHNlZWRlZCAqLworKwlpZighRklQU19yYW5kX3N0YXR1cygpKQorKwkgICAg eworKwkgICAgaWYoUkFORF9ieXRlcyhidWYsc2l6ZW9mIGJ1ZikgPD0gMCkKKysJCXsKKysJCWZp cHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCQlyZXQgPSAwOworKwkJZ290byBlbmQ7CisrCQl9Cisr CSAgICBGSVBTX3JhbmRfc2V0X2tleShidWYsMzIpOworKwkgICAgRklQU19yYW5kX3NlZWQoYnVm KzMyLDE2KTsKKysJICAgIH0KKysKKysJLyogbm93IHN3aXRjaCBpbnRvIEZJUFMgbW9kZSAqLwor KwlmaXBzX3NldF9yYW5kX2NoZWNrKEZJUFNfcmFuZF9tZXRob2QoKSk7CisrCVJBTkRfc2V0X3Jh bmRfbWV0aG9kKEZJUFNfcmFuZF9tZXRob2QoKSk7CisrCWlmKEZJUFNfc2VsZnRlc3QoKSkKKysJ ICAgIGZpcHNfc2V0X21vZGUoMSk7CisrCWVsc2UKKysJICAgIHsKKysJICAgIGZpcHNfc2VsZnRl c3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9Cisr CXJldCA9IDE7CisrCWdvdG8gZW5kOworKwl9CisrICAgIGZpcHNfc2V0X21vZGUoMCk7CisrICAg IGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7CisrICAgIHJldCA9IDE7CisrZW5kOgorKyAgICBmaXBz X2NsZWFyX293bmluZ190aHJlYWQoKTsKKysgICAgZmlwc193X3VubG9jaygpOworKyAgICByZXR1 cm4gcmV0OworKyAgICB9CisrCisrdm9pZCBmaXBzX3dfbG9jayh2b2lkKQkJeyBDUllQVE9fd19s b2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9pZCBmaXBzX3dfdW5sb2NrKHZvaWQpCXsgQ1JZ UFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9pZCBmaXBzX3JfbG9jayh2b2lk KQkJeyBDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9pZCBmaXBzX3JfdW5s b2NrKHZvaWQpCXsgQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9CisrCisrc3Rh dGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOworK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpcHNfdGhy ZWFkID0gMDsKKysKKyt2b2lkIGZpcHNfc2V0X3N0YXJ0ZWQodm9pZCkKKysJeworKwlmaXBzX3N0 YXJ0ZWQgPSAxOworKwl9CisrCisraW50IGZpcHNfaXNfc3RhcnRlZCh2b2lkKQorKwl7CisrCXJl dHVybiBmaXBzX3N0YXJ0ZWQ7CisrCX0KKysKKytpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZv aWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCisrCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJ CXsKKysJCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJaWYgKGZpcHNfdGhy ZWFkICE9IDAgJiYgZmlwc190aHJlYWQgPT0gQ1JZUFRPX3RocmVhZF9pZCgpKQorKwkJCXJldCA9 IDE7CisrCQlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQorKwlyZXR1 cm4gcmV0OworKwl9CisrCisraW50IGZpcHNfc2V0X293bmluZ190aHJlYWQodm9pZCkKKysJewor KwlpbnQgcmV0ID0gMDsKKysKKysJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQorKwkJeworKwkJQ1JZ UFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQlpZiAoZmlwc190aHJlYWQgPT0gMCkK KysJCQl7CisrCQkJZmlwc190aHJlYWQgPSBDUllQVE9fdGhyZWFkX2lkKCk7CisrCQkJcmV0ID0g MTsKKysJCQl9CisrCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQor KwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lk KQorKwl7CisrCWludCByZXQgPSAwOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCisrCQl7 CisrCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCWlmIChmaXBzX3RocmVh ZCA9PSBDUllQVE9fdGhyZWFkX2lkKCkpCisrCQkJeworKwkJCWZpcHNfdGhyZWFkID0gMDsKKysJ CQlyZXQgPSAxOworKwkJCX0KKysJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7 CisrCQl9CisrCXJldHVybiByZXQ7CisrCX0KKysKKysvKiBHZW5lcmFsaXplZCBwdWJsaWMga2V5 IHRlc3Qgcm91dGluZS4gU2lnbnMgYW5kIHZlcmlmaWVzIHRoZSBkYXRhCisrICogc3VwcGxpZWQg aW4gdGJzIHVzaW5nIG1lc2FnZSBkaWdlc3QgbWQgYW5kIHNldHRpbmcgb3B0aW9uIGRpZ2VzdAor KyAqIGZsYWdzIG1kX2ZsYWdzLiBJZiB0aGUgJ2thdCcgcGFyYW1ldGVyIGlzIG5vdCBOVUxMIGl0 IHdpbGwKKysgKiBhZGRpdGlvbmFsbHkgY2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIGl0OiBh IGtub3duIGFuc3dlciB0ZXN0CisrICogVGhlIHN0cmluZyAiZmFpbF9zdHIiIGlzIHVzZWQgZm9y IGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIGluIGNhc2UKKysgKiBvZiBmYWlsdXJlLgorKyAqLwor KworK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBrZXksCisrCQkJY29u c3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKKysJCQljb25zdCBFVlBfTUQgKmRpZ2VzdCwg dW5zaWduZWQgaW50IG1kX2ZsYWdzLAorKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKQorKwl7CQor KwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBzaWd0bXBbMjU2XSwgKnNpZyA9IHNpZ3Rt cDsKKysJdW5zaWduZWQgaW50IHNpZ2xlbjsKKysJRVZQX01EX0NUWCBtY3R4OworKwlFVlBfTURf Q1RYX2luaXQoJm1jdHgpOworKworKwlpZiAoKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQor KwkJJiYgKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSA+IHNpemVvZihzaWd0bXApKSkKKysJCXsK KysJCXNpZyA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSk7CisrCQlp ZiAoIXNpZykKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9U RVNULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9Cisr CisrCWlmICh0YnNsZW4gPT0gLTEpCisrCQl0YnNsZW4gPSBzdHJsZW4oKGNoYXIgKil0YnMpOwor KworKwlpZiAobWRfZmxhZ3MpCisrCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWN0eCwgbWRfZmxh Z3MpOworKworKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKKysJ CWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkK KysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2lnLCAmc2lnbGVu LCBwa2V5KSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmIChrYXQgJiYgKChzaWdsZW4gIT0ga2F0 bGVuKSB8fCBtZW1jbXAoa2F0LCBzaWcsIGthdGxlbikpKQorKwkJZ290byBlcnJvcjsKKysKKysJ aWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKKysJCWdvdG8gZXJy b3I7CisrCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQorKwkJZ290 byBlcnJvcjsKKysJcmV0ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWcsIHNpZ2xlbiwgcGtl eSk7CisrCisrCWVycm9yOgorKwlpZiAoc2lnICE9IHNpZ3RtcCkKKysJCU9QRU5TU0xfZnJlZShz aWcpOworKwlFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKwlpZiAocmV0ICE9IDEpCisrCQl7 CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRklQU19SX1RFU1Rf RkFJTFVSRSk7CisrCQlpZiAoZmFpbF9zdHIpCisrCQkJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJU eXBlPSIsIGZhaWxfc3RyKTsKKysJCXJldHVybiAwOworKwkJfQorKwlyZXR1cm4gMTsKKysJfQor KworKy8qIEdlbmVyYWxpemVkIHN5bW1ldHJpYyBjaXBoZXIgdGVzdCByb3V0aW5lLiBFbmNyeXB0 IGRhdGEsIHZlcmlmeSByZXN1bHQKKysgKiBhZ2FpbnN0IGtub3duIGFuc3dlciwgZGVjcnlwdCBh bmQgY29tcGFyZSB3aXRoIG9yaWdpbmFsIHBsYWludGV4dC4KKysgKi8KKysKKytpbnQgZmlwc19j aXBoZXJfdGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIs CisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg Kml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKKysJCQljb25zdCB1bnNp Z25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4pCisrCXsKKysJdW5zaWduZWQgY2hh ciBwbHRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKKysJdW5zaWduZWQgY2hhciBjaXRt cFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKKysJT1BFTlNTTF9hc3NlcnQobGVuIDw9IEZJ UFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBj aXBoZXIsIE5VTEwsIGtleSwgaXYsIDEpIDw9IDApCisrCQlyZXR1cm4gMDsKKysJRVZQX0NpcGhl cihjdHgsIGNpdG1wLCBwbGFpbnRleHQsIGxlbik7CisrCWlmIChtZW1jbXAoY2l0bXAsIGNpcGhl cnRleHQsIGxlbikpCisrCQlyZXR1cm4gMDsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwg Y2lwaGVyLCBOVUxMLCBrZXksIGl2LCAwKSA8PSAwKQorKwkJcmV0dXJuIDA7CisrCUVWUF9DaXBo ZXIoY3R4LCBwbHRtcCwgY2l0bXAsIGxlbik7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4 dCwgbGVuKSkKKysJCXJldHVybiAwOworKwlyZXR1cm4gMTsKKysJfQorKworKyNpZiAwCisrLyog VGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBlbnN1cmUgdGhlIGVycm9yIGNvZGUgZXhpc3RzIGFu ZCB0aGUgZnVuY3Rpb24KKysgKiBuYW1lIGlzIHRvIGtlZXAgdGhlIGVycm9yIGNoZWNraW5nIHNj cmlwdCBxdWlldAorKyAqLworK3ZvaWQgaGFzaF9maW5hbCh2b2lkKQorKwl7CisrCUZJUFNlcnIo RklQU19GX0hBU0hfRklOQUwsRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCX0KKysjZW5kaWYK KysKKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNf ZGVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX2Rlc19z ZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRl c3QuYy5maXBzCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwkyMDEyLTAxLTA1IDEzOjIy OjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMzkgQEAKKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9w ZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAg ICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisr ICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj ZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgc3RydWN0Cisr ICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdOworKyAgICB1bnNpZ25lZCBjaGFyIHBs YWludGV4dFs4XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOworKyAgICB9IHRl c3RzMltdPQorKwl7CisrCXsKKysJeyAweDdjLDB4NGYsMHg2ZSwweGY3LDB4YTIsMHgwNCwweDE2 LDB4ZWMsCisrCSAgMHgwYiwweDZiLDB4N2MsMHg5ZSwweDVlLDB4MTksMHhhNywweGM0IH0sCisr CXsgMHgwNiwweGE3LDB4ZDgsMHg3OSwweGFhLDB4Y2UsMHg2OSwweGVmIH0sCisrCXsgMHg0Yyww eDExLDB4MTcsMHg1NSwweGJmLDB4YzQsMHg0ZSwweGZkIH0KKysJfSwKKysJeworKwl7IDB4NWQs MHg5ZSwweDAxLDB4ZDMsMHgyNSwweGM3LDB4M2UsMHgzNCwKKysJICAweDAxLDB4MTYsMHg3Yyww eDg1LDB4MjMsMHhkZiwweGUwLDB4NjggfSwKKysJeyAweDljLDB4NTAsMHgwOSwweDBmLDB4NWUs MHg3ZCwweDY5LDB4N2UgfSwKKysJeyAweGQyLDB4MGIsMHgxOCwweGRmLDB4ZDksMHgwZCwweDll LDB4ZmYgfSwKKysJfQorKwl9OworKworK3N0YXRpYyBzdHJ1Y3QKKysgICAgeworKyAgICB1bnNp Z25lZCBjaGFyIGtleVsyNF07CisrICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKyAg ICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07CisrICAgIH0gdGVzdHMzW109CisrCXsKKysJ eworKwl7IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJICAweEZF LDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsCisrCSAgMHgxMiwweDM0LDB4NTYs MHg3OCwweDlhLDB4YmMsMHhkZSwweGYwIH0sCisrCXsgMHg4ZiwweDhmLDB4YmYsMHg5YiwweDVk LDB4NDgsMHhiNCwweDFjIH0sCisrCXsgMHg1OSwweDhjLDB4ZTUsMHhkMywweDZjLDB4YTIsMHhl YSwweDFiIH0sCisrCX0sCisrCXsKKysJeyAweERDLDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiww eDEwLDB4RkUsCisrCSAgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIsMHhDRCwweEVGLAor KwkgIDB4RUQsMHgzOSwweEQ5LDB4NTAsMHhGQSwweDc0LDB4QkMsMHhDNCB9LAorKwl7IDB4MDEs MHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiB9LAorKwl7IDB4MTEsMHgyNSwweGIw LDB4MzUsMHhiZSwweGEwLDB4ODIsMHg4NiB9LAorKwl9LAorKwl9OworKworK3ZvaWQgRklQU19j b3JydXB0X2RlcygpCisrICAgIHsKKysgICAgdGVzdHMyWzBdLnBsYWludGV4dFswXSsrOworKyAg ICB9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZGVzKCkKKysgICAgeworKyAgICBpbnQgbiwgcmV0 ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0 KCZjdHgpOworKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAyLWtleSAzREVTIGFuZCBjb21w YXJlIHRvIGtub3duIGFuc3dlcnMgKi8KKysgICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQorKwl7 CisrCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZV9lY2IoKSwKKysJCQkJ dGVzdHMyW25dLmtleSwgTlVMTCwKKysJCQkJdGVzdHMyW25dLnBsYWludGV4dCwgdGVzdHMyW25d LmNpcGhlcnRleHQsIDgpKQorKwkJZ290byBlcnI7CisrCX0KKysKKysgICAgLyogRW5jcnlwdC9k ZWNyeXB0IHdpdGggM0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCisrICAgIGZv cihuPTAgOyBuIDwgMiA7ICsrbikKKysJeworKwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwg RVZQX2Rlc19lZGUzX2VjYigpLAorKwkJCQl0ZXN0czNbbl0ua2V5LCBOVUxMLAorKwkJCQl0ZXN0 czNbbl0ucGxhaW50ZXh0LCB0ZXN0czNbbl0uY2lwaGVydGV4dCwgOCkpCisrCQlnb3RvIGVycjsK KysJfQorKyAgICByZXQgPSAxOworKyAgICBlcnI6CisrICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFu dXAoJmN0eCk7CisrICAgIGlmIChyZXQgPT0gMCkKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf U0VMRlRFU1RfREVTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKworKyAgICByZXR1cm4gcmV0 OworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9m aXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19k c2Ffc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfZHNhX3Nl bGZ0ZXN0LmMuZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMJMjAxMi0wMS0wNSAx MzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTg2IEBACisrLyogY3J5cHRvL2Rz YS9kc2F0ZXN0LmMgKi8KKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChl YXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhp cyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZ b3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3Jp dHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlz IGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFz IGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBU aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0 aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0 Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgor KyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2Ft ZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmlj IFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBj b2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBp biBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICog YXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlz IGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0 dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQg d2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICog ICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Cisr ICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAn Y3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxp YnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDot KS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBh IGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFw cGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29u ICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK KysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERB TUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBh bnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhp cyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBi ZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UK KysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorKyAqLworKworKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9kc2EuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2lmZGVmIE9QRU5T U0xfRklQUworKworKy8qIHNlZWQsIG91dF9wLCBvdXRfcSwgb3V0X2cgYXJlIHRha2VuIHRoZSBO SVNUIHRlc3QgdmVjdG9ycyAqLworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNlZWRbMjBdID0g eworKwkweDc3LCAweDhmLCAweDQwLCAweDc0LCAweDZmLCAweDY2LCAweGJlLCAweDMzLCAweGNl LCAweGJlLCAweDk5LCAweDM0LAorKwkweDRjLCAweGZjLCAweGYzLCAweDI4LCAweGFhLCAweDcw LCAweDJkLCAweDNhCisrICAJfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcFtdID0g eworKwkweGY3LCAweDdjLCAweDFiLCAweDgzLCAweGQ4LCAweGU4LCAweDVjLCAweDdmLCAweDg1 LCAweDMwLCAweDE3LCAweDU3LAorKwkweDIxLCAweDk1LCAweGZlLCAweDI2LCAweDA0LCAweGVi LCAweDQ3LCAweDRjLCAweDNhLCAweDRhLCAweDgxLCAweDRiLAorKwkweDcxLCAweDJlLCAweGVk LCAweDZlLCAweDRmLCAweDNkLCAweDExLCAweDBmLCAweDdjLCAweGZlLCAweDM2LCAweDQzLAor KwkweDUxLCAweGQ5LCAweDgxLCAweDM5LCAweDE3LCAweGRmLCAweDYyLCAweGY2LCAweDljLCAw eDAxLCAweGE4LCAweDY5LAorKwkweDcxLCAweGRkLCAweDI5LCAweDdmLCAweDQ3LCAweGU2LCAw eDY1LCAweGE2LCAweDIyLCAweGU4LCAweDZhLCAweDEyLAorKwkweDJiLCAweGMyLCAweDgxLCAw eGZmLCAweDMyLCAweDcwLCAweDJmLCAweDllLCAweGNhLCAweDUzLCAweDI2LCAweDQ3LAorKwkw eDBmLCAweDU5LCAweGQ3LCAweDllLCAweDJjLCAweGE1LCAweDA3LCAweGM0LCAweDQ5LCAweDUy LCAweGEzLCAweGU0LAorKwkweDZiLCAweDA0LCAweDAwLCAweDI1LCAweDQ5LCAweGUyLCAweGU2 LCAweDdmLCAweDI4LCAweDc4LCAweDk3LCAweGI4LAorKwkweDNhLCAweDMyLCAweDE0LCAweDM4 LCAweGEyLCAweDUxLCAweDMzLCAweDIyLCAweDQ0LCAweDdlLCAweGQ3LCAweGVmLAorKwkweDQ1 LCAweGRiLCAweDA2LCAweDRhLCAweGQyLCAweDgyLCAweDRhLCAweDgyLCAweDJjLCAweGIxLCAw eGQ3LCAweGQ4LAorKwkweGI2LCAweDczLCAweDAwLCAweDRkLCAweDk0LCAweDc3LCAweDk0LCAw eGVmCisrCX07CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3FbXSA9IHsKKysJMHhkNCwg MHgwYSwgMHhhYywgMHg5ZiwgMHhiZCwgMHg4YywgMHg4MCwgMHhjMiwgMHgzOCwgMHg3ZSwgMHgy ZSwgMHgwYywKKysJMHg1MiwgMHg1YywgMHhlYSwgMHgzNCwgMHhhMSwgMHg4MywgMHgzMiwgMHhm MworKwl9OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9nW10gPSB7CisrCTB4MzQsIDB4 NzMsIDB4OGIsIDB4NTcsIDB4ODQsIDB4OGUsIDB4NTUsIDB4YmYsIDB4NTcsIDB4Y2MsIDB4NDEs IDB4YmIsCisrCTB4NWUsIDB4MmIsIDB4ZDUsIDB4NDIsIDB4ZGQsIDB4MjQsIDB4MjIsIDB4MmEs IDB4MDksIDB4ZWEsIDB4MjYsIDB4MWUsCisrCTB4MTcsIDB4NjUsIDB4Y2IsIDB4MWEsIDB4YjMs IDB4MTIsIDB4NDQsIDB4YTMsIDB4OWUsIDB4OTksIDB4ZTksIDB4NjMsCisrCTB4ZWIsIDB4MzAs IDB4YjEsIDB4NzgsIDB4N2IsIDB4MDksIDB4NDAsIDB4MzAsIDB4ZmEsIDB4ODMsIDB4YzIsIDB4 MzUsCisrCTB4ZTEsIDB4YzQsIDB4MmQsIDB4NzQsIDB4MWEsIDB4YjEsIDB4ODMsIDB4NTQsIDB4 ZDgsIDB4MjksIDB4ZjQsIDB4Y2YsCisrCTB4N2YsIDB4NmYsIDB4NjcsIDB4MWMsIDB4MzYsIDB4 NDksIDB4ZWUsIDB4NmMsIDB4YTIsIDB4M2MsIDB4MmQsIDB4NmEsCisrCTB4ZTksIDB4ZDMsIDB4 OWEsIDB4ZjYsIDB4NTcsIDB4NzgsIDB4NmYsIDB4ZmQsIDB4MzMsIDB4Y2QsIDB4M2MsIDB4ZWQs CisrCTB4ZmQsIDB4ZDQsIDB4NDEsIDB4ZTYsIDB4NWMsIDB4OGIsIDB4ZTAsIDB4NjgsIDB4MzEs IDB4NDcsIDB4NDcsIDB4YWYsCisrCTB4MTIsIDB4YTcsIDB4ZjksIDB4MzIsIDB4MGQsIDB4OTQs IDB4MTUsIDB4NDgsIDB4ZDAsIDB4NTQsIDB4ODUsIDB4YjIsCisrCTB4MDQsIDB4YjUsIDB4NGQs IDB4ZDQsIDB4OWQsIDB4MDUsIDB4MjIsIDB4MjUsIDB4ZDksIDB4ZmQsIDB4NmMsIDB4MzYsCisr CTB4ZWYsIDB4YmUsIDB4NjksIDB4NmMsIDB4NTUsIDB4ZjQsIDB4ZWUsIDB4ZWMKKysJfTsKKysK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzdHIxW109IjEyMzQ1Njc4OTAxMjM0NTY3ODkw IjsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9kc2EoKQorKyAgICB7CisrICAgICsrc2VlZFswXTsK KysgICAgfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSgpCisrICAgIHsKKysgICAgRFNBICpk c2E7CisrICAgIGludCBjb3VudGVyLGksaiwgcmV0ID0gMDsKKysgICAgdW5zaWduZWQgaW50IHNs ZW47CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07CisrICAgIHVuc2lnbmVkIGxvbmcgaDsK KysgICAgRVZQX01EX0NUWCBtY3R4OworKyAgICBFVlBfUEtFWSAqcGsgPSBOVUxMOworKworKyAg ICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKworKyAgICBkc2EgPSBEU0FfbmV3KCk7CisrCisr ICAgIGlmKGRzYSA9PSBOVUxMKQorKwlnb3RvIGVycjsKKysgICAgaWYoIURTQV9nZW5lcmF0ZV9w YXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxzZWVkLDIwLCZjb3VudGVyLCZoLE5VTEwpKQorKwlnb3Rv IGVycjsKKysgICAgaWYgKGNvdW50ZXIgIT0gMzc4KSAKKysJZ290byBlcnI7CisrICAgIGlmICho ICE9IDIpCisrCWdvdG8gZXJyOworKyAgICBpPUJOX2JuMmJpbihkc2EtPnEsYnVmKTsKKysgICAg aj1zaXplb2Yob3V0X3EpOworKyAgICBpZiAoaSAhPSBqIHx8IG1lbWNtcChidWYsb3V0X3EsaSkg IT0gMCkKKysJZ290byBlcnI7CisrCisrICAgIGk9Qk5fYm4yYmluKGRzYS0+cCxidWYpOworKyAg ICBqPXNpemVvZihvdXRfcCk7CisrICAgIGlmIChpICE9IGogfHwgbWVtY21wKGJ1ZixvdXRfcCxp KSAhPSAwKQorKwlnb3RvIGVycjsKKysKKysgICAgaT1CTl9ibjJiaW4oZHNhLT5nLGJ1Zik7Cisr ICAgIGo9c2l6ZW9mKG91dF9nKTsKKysgICAgaWYgKGkgIT0gaiB8fCBtZW1jbXAoYnVmLG91dF9n LGkpICE9IDApCisrCWdvdG8gZXJyOworKyAgICBEU0FfZ2VuZXJhdGVfa2V5KGRzYSk7CisrCisr ICAgIGlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrCWdvdG8gZXJyOworKyAgICBF VlBfUEtFWV9hc3NpZ25fRFNBKHBrLCBkc2EpOworKworKyAgICBpZiAoIUVWUF9TaWduSW5pdF9l eCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCisrCWdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9T aWduVXBkYXRlKCZtY3R4LCBzdHIxLCAyMCkpCisrCWdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9T aWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sIHBrKSkKKysJZ290byBlcnI7CisrCisrICAgIGlm ICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQorKwlnb3RvIGVy cjsKKysgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBzdHIxLCAyMCkpCisrCWdvdG8g ZXJyOworKyAgICBpZiAoRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sIHBrKSAhPSAx KQorKwlnb3RvIGVycjsKKysKKysgICAgcmV0ID0gMTsKKysKKysgICAgZXJyOgorKyAgICBFVlBf TURfQ1RYX2NsZWFudXAoJm1jdHgpOworKyAgICBpZiAocGspCisrCUVWUF9QS0VZX2ZyZWUocGsp OworKyAgICBlbHNlIGlmIChkc2EpCisrCURTQV9mcmVlKGRzYSk7CisrICAgIGlmIChyZXQgPT0g MCkKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBLEZJUFNfUl9TRUxGVEVT VF9GQUlMRUQpOworKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzLmguZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vZmlwcy9maXBzLmgKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzLmguZmlw cwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9maXBzL2ZpcHMuaAkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAor QEAgLTAsMCArMSwxNjMgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAw MyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2Vy cm9yIEZJUFMgaXMgZGlzYWJsZWQuCisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKytzdHJ1 Y3QgZHNhX3N0OworK3N0cnVjdCBldnBfcGtleV9zdDsKKytzdHJ1Y3QgZW52X21kX3N0OworK3N0 cnVjdCBldnBfY2lwaGVyX3N0OworK3N0cnVjdCBldnBfY2lwaGVyX2N0eF9zdDsKKysKKytpbnQg RklQU19tb2RlX3NldChpbnQgb25vZmYpOworK2ludCBGSVBTX21vZGUodm9pZCk7CisrY29uc3Qg dm9pZCAqRklQU19yYW5kX2NoZWNrKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2 b2lkKTsKKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1 cHRfc2hhMSh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9zaGExKHZvaWQpOworK3ZvaWQgRklQ U19jb3JydXB0X2Flcyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXModm9pZCk7Cisrdm9p ZCBGSVBTX2NvcnJ1cHRfZGVzKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Rlcyh2b2lkKTsK Kyt2b2lkIEZJUFNfY29ycnVwdF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tl eWdlbih2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2Nv cnJ1cHRfZHNhKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2RzYV9rZXlnZW4odm9pZCk7Cisr aW50IEZJUFNfc2VsZnRlc3RfZHNhKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X3JuZyh2b2lk KTsKKyt2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2 b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9obWFjKHZvaWQpOworKworK2ludCBmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3Qoc3RydWN0IGV2cF9wa2V5X3N0ICpwa2V5LAorKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQs IHVuc2lnbmVkIGludCBrYXRsZW4sCisrCQkJY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqZGlnZXN0 LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCisrCQkJY29uc3QgY2hhciAqZmFpbF9zdHIpOworKwor K2ludCBmaXBzX2NpcGhlcl90ZXN0KHN0cnVjdCBldnBfY2lwaGVyX2N0eF9zdCAqY3R4LAorKwkJ CWNvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpjaXBoZXIsCisrCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKnBsYWludGV4dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0 LAorKwkJCWludCBsZW4pOworKworKy8qIEJFR0lOIEVSUk9SIENPREVTICovCisrLyogVGhlIGZv bGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4g QW55IGNoYW5nZXMKKysgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVu IHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KKysgKi8KKyt2b2lkIEVSUl9sb2FkX0ZJUFNf c3RyaW5ncyh2b2lkKTsKKysKKysvKiBFcnJvciBjb2RlcyBmb3IgdGhlIEZJUFMgZnVuY3Rpb25z LiAqLworKworKy8qIEZ1bmN0aW9uIGNvZGVzLiAqLworKyNkZWZpbmUgRklQU19GX0RIX0JVSUxU SU5fR0VOUEFSQU1TCQkJIDEwMAorKyNkZWZpbmUgRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VO CQkJIDEwMQorKyNkZWZpbmUgRklQU19GX0RTQV9ET19TSUdOCQkJCSAxMDIKKysjZGVmaW5lIEZJ UFNfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMDMKKysjZGVmaW5lIEZJUFNfRl9FVlBfQ0lQSEVSSU5J VF9FWAkJCSAxMjQKKysjZGVmaW5lIEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWAkJCSAxMjUKKysj ZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0RTQQkJCQkgMTA0CisrI2RlZmluZSBGSVBTX0ZfRklQ U19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQJCSAxMDUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NI RUNLX1JTQQkJCQkgMTA2CisrI2RlZmluZSBGSVBTX0ZfRklQU19EU0FfQ0hFQ0sJCQkJIDEwNwor KyNkZWZpbmUgRklQU19GX0ZJUFNfTU9ERV9TRVQJCQkJIDEwOAorKyNkZWZpbmUgRklQU19GX0ZJ UFNfUEtFWV9TSUdOQVRVUkVfVEVTVAkJCSAxMDkKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZU RVNUX0FFUwkJCSAxMTAKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUwkJCSAxMTEK KysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RTQQkJCSAxMTIKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX1NFTEZURVNUX0hNQUMJCQkgMTEzCisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVT VF9STkcJCQkgMTE0CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExCQkJIDExNQor KyNkZWZpbmUgRklQU19GX0hBU0hfRklOQUwJCQkJIDEyMworKyNkZWZpbmUgRklQU19GX1JTQV9C VUlMVElOX0tFWUdFTgkJCSAxMTYKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVD UllQVAkJCSAxMTcKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVAkJCSAx MTgKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUCQkJIDExOQorKyNkZWZp bmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQJCQkgMTIwCisrI2RlZmluZSBGSVBTX0Zf UlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYCQkJIDEyMQorKyNkZWZpbmUgRklQU19GX1NTTEVBWV9S QU5EX0JZVEVTCQkJIDEyMgorKworKy8qIFJlYXNvbiBjb2Rlcy4gKi8KKysjZGVmaW5lIEZJUFNf Ul9DQU5OT1RfUkVBRF9FWEUJCQkJIDEwMworKyNkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VY RV9ESUdFU1QJCQkgMTA0CisrI2RlZmluZSBGSVBTX1JfQ09OVFJBRElDVElOR19FVklERU5DRQkJ CSAxMTQKKysjZGVmaW5lIEZJUFNfUl9FWEVfRElHRVNUX0RPRVNfTk9UX01BVENICQkgMTA1Cisr I2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gJCSAxMTAKKysjZGVmaW5l IEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEIDExMQor KyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJ TkcgMTEyCisrI2RlZmluZSBGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUCQkJIDEwMgorKyNk ZWZpbmUgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVECQkJIDEwNgorKyNkZWZpbmUgRklQU19S X0lOVkFMSURfS0VZX0xFTkdUSAkJCSAxMDkKKysjZGVmaW5lIEZJUFNfUl9LRVlfVE9PX1NIT1JU CQkJCSAxMDgKKysjZGVmaW5lIEZJUFNfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwMAorKyNkZWZp bmUgRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVECQkJIDEwNworKyNkZWZpbmUgRklQU19SX1JT QV9ERUNSWVBUX0VSUk9SCQkJIDExNQorKyNkZWZpbmUgRklQU19SX1JTQV9FTkNSWVBUX0VSUk9S CQkJIDExNgorKyNkZWZpbmUgRklQU19SX1NFTEZURVNUX0ZBSUxFRAkJCQkgMTAxCisrI2RlZmlu ZSBGSVBTX1JfVEVTVF9GQUlMVVJFCQkJCSAxMTcKKysjZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRF RF9QTEFURk9STQkJCSAxMTMKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgor KyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3Nl bGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRl c3QuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5j LmZpcHMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYwkyMDEyLTAxLTA1IDEzOjIyOjMw LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMzcgQEAKKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv CisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5z c2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoK KysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5k aWYKKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUwor K3R5cGVkZWYgc3RydWN0IHsKKysJY29uc3QgRVZQX01EICooKmFsZykodm9pZCk7CisrCWNvbnN0 IGNoYXIgKmtleSwgKml2OworKwl1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV07 CisrfSBITUFDX0tBVDsKKysKKytzdGF0aWMgY29uc3QgSE1BQ19LQVQgdmVjdG9yW10gPSB7Cisr ICAgIHsJRVZQX3NoYTEsCisrCS8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRp b25zL2ZpcHMvZmlwczE5OC9maXBzLTE5OGEucGRmICovCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFC QyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4MDksMHgyMiwweGQzLDB4NDAsMHg1ZiwweGFhLDB4 M2QsMHgxOSwKKysJICAweDRmLDB4ODIsMHhhNCwweDU4LDB4MzAsMHg3MywweDdkLDB4NWMsCisr CSAgMHhjNiwweGM3LDB4NWQsMHgyNCB9CisrICAgIH0sCisrICAgIHsJRVZQX3NoYTIyNCwKKysJ LyoganVzdCBrZWVwIGV4dGVuZGluZyB0aGUgYWJvdmUuLi4gKi8KKysJIjAxMjM0NTY3ODk6Ozw9 Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHhkZCwweGVmLDB4MGEsMHg0MCwweGNiLDB4 N2QsMHg1MCwweGZiLAorKwkgIDB4NmUsMHhlNiwweGNlLDB4YTEsMHgyMCwweGJhLDB4MjYsMHhh YSwKKysJICAweDA4LDB4ZjMsMHgwNywweDc1LDB4ODcsMHhiOCwweGFkLDB4MWIsCisrCSAgMHg4 YywweDhkLDB4MTIsMHhjNyB9CisrICAgIH0sCisrICAgIHsJRVZQX3NoYTI1NiwKKysJIjAxMjM0 NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHhiOCwweGYyLDB4MGQsMHhi NSwweDQxLDB4ZWEsMHg0MywweDA5LAorKwkgIDB4Y2EsMHg0ZSwweGE5LDB4MzgsMHgwYywweGQw LDB4ZTgsMHgzNCwKKysJICAweGY3LDB4MWYsMHhiZSwweDkxLDB4NzQsMHhhMiwweDYxLDB4Mzgs CisrCSAgMHgwZCwweGMxLDB4N2UsMHhhZSwweDZhLDB4MzQsMHg1MSwweGQ5IH0KKysgICAgfSwK KysgICAgewlFVlBfc2hhMzg0LAorKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxl ICMyIiwKKysJeyAweDA4LDB4YmMsMHhiMCwweGRhLDB4NDksMHgxZSwweDg3LDB4YWQsCisrCSAg MHg5YSwweDFkLDB4NmEsMHhjZSwweDIzLDB4YzUsMHgwYiwweGY2LAorKwkgIDB4YjcsMHgxOCww eDA2LDB4YTUsMHg3NywweGNkLDB4NDksMHgwNCwKKysJICAweDg5LDB4ZjEsMHhlNiwweDIzLDB4 NDQsMHg1MSwweDUxLDB4OWYsCisrCSAgMHg4NSwweDU2LDB4ODAsMHg3OSwweDBjLDB4YmQsMHg0 ZCwweDUwLAorKwkgIDB4YTQsMHg1ZiwweDI5LDB4ZTMsMHg5MywweGYwLDB4ZTgsMHg3ZiB9Cisr ICAgIH0sCisrICAgIHsJRVZQX3NoYTUxMiwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJ IlNhbXBsZSAjMiIsCisrCXsgMHg4MCwweDlkLDB4NDQsMHgwNSwweDdjLDB4NWIsMHg5NSwweDQx LAorKwkgIDB4MDUsMHhiZCwweDA0LDB4MTMsMHgxNiwweGRiLDB4MGYsMHhhYywKKysJICAweDQ0 LDB4ZDUsMHhhNCwweGQ1LDB4ZDAsMHg4OSwweDJiLDB4ZDAsCisrCSAgMHg0ZSwweDg2LDB4NjQs MHgxMiwweGMwLDB4OTAsMHg3NywweDY4LAorKwkgIDB4ZjEsMHg4NywweGI3LDB4N2MsMHg0Ziww eGFlLDB4MmMsMHgyZiwKKysJICAweDIxLDB4YTUsMHhiNSwweDY1LDB4OWEsMHg0ZiwweDRiLDB4 YTcsCisrCSAgMHg0NywweDAyLDB4YTMsMHhkZSwweDliLDB4NTEsMHhmMSwweDQ1LAorKwkgIDB4 YmQsMHg0ZiwweDI1LDB4MjcsMHg0MiwweDk4LDB4OTksMHgwNSB9CisrICAgIH0sCisrfTsKKysK KytpbnQgRklQU19zZWxmdGVzdF9obWFjKCkKKysgICAgeworKyAgICBpbnQgbjsKKysgICAgdW5z aWduZWQgaW50ICAgIG91dGxlbjsKKysgICAgdW5zaWduZWQgY2hhciAgIG91dFtFVlBfTUFYX01E X1NJWkVdOworKyAgICBjb25zdCBFVlBfTUQgICAqbWQ7CisrICAgIGNvbnN0IEhNQUNfS0FUICp0 OworKworKyAgICBmb3Iobj0wLHQ9dmVjdG9yOyBuPHNpemVvZih2ZWN0b3IpL3NpemVvZih2ZWN0 b3JbMF0pOyBuKyssdCsrKQorKwl7CisrCW1kID0gKCp0LT5hbGcpKCk7CisrCUhNQUMobWQsdC0+ a2V5LHN0cmxlbih0LT5rZXkpLAorKwkJKGNvbnN0IHVuc2lnbmVkIGNoYXIgKil0LT5pdixzdHJs ZW4odC0+aXYpLAorKwkJb3V0LCZvdXRsZW4pOworKworKwlpZihtZW1jbXAob3V0LHQtPmthdmFs LG91dGxlbikpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0hN QUMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJ fQorKyAgICByZXR1cm4gMTsKKysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MGYvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlw cy9maXBzX3JhbmQuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5j LmZpcHMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAw MCArMDEwMAorQEAgLTAsMCArMSw0MTIgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdo dCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysg KgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgor KyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysK KysvKgorKyAqIFRoaXMgaXMgYSBGSVBTIGFwcHJvdmVkIEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kg WDkuMzEgQS4yLjQuCisrICovCisrCisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysvKiBJZiB3ZSBk b24ndCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgc3RydWN0IHRpbWV2YWwgd29uJ3QK KysgICBiZSBkZWZpbmVkIGFuZCBnZXR0aW1lb2ZkYXkoKSB3b24ndCBiZSBkZWNsYXJlZCB3aXRo IHN0cmljdCBjb21waWxlcnMKKysgICBsaWtlIERFQyBDIGluIEFOU0kgQyBtb2RlLiAgKi8KKysj aWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKysjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhU RU5ERUQgMQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaWZuZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrI2luY2x1 ZGUgPHN5cy90aW1lLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpZm5kZWYg T1BFTlNTTF9TWVNfV0lOMzIKKysjIGlmZGVmIE9QRU5TU0xfVU5JU1RECisrIyAgaW5jbHVkZSBP UEVOU1NMX1VOSVNURAorKyMgZWxzZQorKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorKyMgZW5kaWYK KysjZW5kaWYKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSAiZmlwc19sb2NsLmgi CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworK3ZvaWQgKk9QRU5TU0xfc3RkZXJyKHZvaWQp OworKworKyNkZWZpbmUgQUVTX0JMT0NLX0xFTkdUSAkxNgorKworKworKy8qIEFFUyBGSVBTIFBS TkcgaW1wbGVtZW50YXRpb24gKi8KKysKKyt0eXBlZGVmIHN0cnVjdCAKKysJeworKwlpbnQgc2Vl ZGVkOworKwlpbnQga2V5ZWQ7CisrCWludCB0ZXN0X21vZGU7CisrCWludCBzZWNvbmQ7CisrCWlu dCBlcnJvcjsKKysJdW5zaWduZWQgbG9uZyBjb3VudGVyOworKwlBRVNfS0VZIGtzOworKwlpbnQg dnBvczsKKysJLyogVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGtleSBpZiBpdCBlcXVhbHMgc2VlZCBs ZW5ndGggKi8KKysJdW5zaWduZWQgY2hhciB0bXBfa2V5W0FFU19CTE9DS19MRU5HVEhdOworKwl1 bnNpZ25lZCBjaGFyIFZbQUVTX0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgRFRbQUVT X0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgbGFzdFtBRVNfQkxPQ0tfTEVOR1RIXTsK KysJfSBGSVBTX1BSTkdfQ1RYOworKworK3N0YXRpYyBGSVBTX1BSTkdfQ1RYIHNjdHg7CisrCisr c3RhdGljIGludCBmaXBzX3BybmdfZmFpbCA9IDA7CisrCisrdm9pZCBGSVBTX3JuZ19zdGljayh2 b2lkKQorKwl7CisrCWZpcHNfcHJuZ19mYWlsID0gMTsKKysJfQorKworK3ZvaWQgZmlwc19yYW5k X3BybmdfcmVzZXQoRklQU19QUk5HX0NUWCAqY3R4KQorKwl7CisrCWN0eC0+c2VlZGVkID0gMDsK KysJY3R4LT5rZXllZCA9IDA7CisrCWN0eC0+dGVzdF9tb2RlID0gMDsKKysJY3R4LT5jb3VudGVy ID0gMDsKKysJY3R4LT5zZWNvbmQgPSAwOworKwljdHgtPmVycm9yID0gMDsKKysJY3R4LT52cG9z ID0gMDsKKysJT1BFTlNTTF9jbGVhbnNlKGN0eC0+ViwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCU9Q RU5TU0xfY2xlYW5zZSgmY3R4LT5rcywgc2l6ZW9mKEFFU19LRVkpKTsKKysJfQorKwkKKysKKytz dGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfa2V5KEZJUFNfUFJOR19DVFggKmN0eCwKKysJCQljb25z dCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVuKQorKwl7CisrCUZJ UFNfc2VsZnRlc3RfY2hlY2soKTsKKysJaWYgKGtleWxlbiAhPSAxNiAmJiBrZXlsZW4gIT0gMjQg JiYga2V5bGVuICE9IDMyKQorKwkJeworKwkJLyogZXJyb3I6IGludmFsaWQga2V5IHNpemUgKi8K KysJCXJldHVybiAwOworKwkJfQorKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSwga2V5bGVuIDw8 IDMsICZjdHgtPmtzKTsKKysJaWYgKGtleWxlbiA9PSAxNikKKysJCXsKKysJCW1lbWNweShjdHgt PnRtcF9rZXksIGtleSwgMTYpOworKwkJY3R4LT5rZXllZCA9IDI7CisrCQl9CisrCWVsc2UKKysJ CWN0eC0+a2V5ZWQgPSAxOworKwljdHgtPnNlZWRlZCA9IDA7CisrCWN0eC0+c2Vjb25kID0gMDsK KysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfc2VlZChGSVBT X1BSTkdfQ1RYICpjdHgsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZCwgRklQU19SQU5E X1NJWkVfVCBzZWVkbGVuKQorKwl7CisrCWludCBpOworKwlpZiAoIWN0eC0+a2V5ZWQpCisrCQly ZXR1cm4gMDsKKysJLyogSW4gdGVzdCBtb2RlIHNlZWQgaXMganVzdCBzdXBwbGllZCBkYXRhICov CisrCWlmIChjdHgtPnRlc3RfbW9kZSkKKysJCXsKKysJCWlmIChzZWVkbGVuICE9IEFFU19CTE9D S19MRU5HVEgpCisrCQkJcmV0dXJuIDA7CisrCQltZW1jcHkoY3R4LT5WLCBzZWVkLCBBRVNfQkxP Q0tfTEVOR1RIKTsKKysJCWN0eC0+c2VlZGVkID0gMTsKKysJCXJldHVybiAxOworKwkJfQorKwkv KiBPdXRzaWRlIHRlc3QgbW9kZSBYT1Igc3VwcGxpZWQgZGF0YSB3aXRoIGV4aXN0aW5nIHNlZWQg Ki8KKysJZm9yIChpID0gMDsgaSA8IHNlZWRsZW47IGkrKykKKysJCXsKKysJCWN0eC0+VltjdHgt PnZwb3MrK10gXj0gc2VlZFtpXTsKKysJCWlmIChjdHgtPnZwb3MgPT0gQUVTX0JMT0NLX0xFTkdU SCkKKysJCQl7CisrCQkJY3R4LT52cG9zID0gMDsKKysJCQkvKiBTcGVjaWFsIGNhc2UgaWYgZmly c3Qgc2VlZCBhbmQga2V5IGxlbmd0aCBlcXVhbHMKKysgCQkJICogYmxvY2sgc2l6ZSBjaGVjayBr ZXkgYW5kIHNlZWQgZG8gbm90IG1hdGNoLgorKyAJCQkgKi8gCisrCQkJaWYgKGN0eC0+a2V5ZWQg PT0gMikKKysJCQkJeworKwkJCQlpZiAoIW1lbWNtcChjdHgtPnRtcF9rZXksIGN0eC0+ViwgMTYp KQorKwkJCQkJeworKwkJCQkJUkFORGVycihSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVELAorKwkJ CQkJCVJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZKTsKKysJCQkJCXJldHVybiAw OworKwkJCQkJfQorKwkJCQlPUEVOU1NMX2NsZWFuc2UoY3R4LT50bXBfa2V5LCAxNik7CisrCQkJ CWN0eC0+a2V5ZWQgPSAxOworKwkJCQl9CisrCQkJY3R4LT5zZWVkZWQgPSAxOworKwkJCX0KKysJ CX0KKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgZmlwc19zZXRfdGVzdF9tb2RlKEZJUFNfUFJO R19DVFggKmN0eCkKKysJeworKwlpZiAoY3R4LT5rZXllZCkKKysJCXsKKysJCVJBTkRlcnIoUkFO RF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSxSQU5EX1JfUFJOR19LRVlFRCk7CisrCQlyZXR1cm4gMDsK KysJCX0KKysJY3R4LT50ZXN0X21vZGUgPSAxOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBG SVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpCisrCXsKKysJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9k ZSgmc2N0eCk7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpk dCkKKysJeworKwlpZiAoIXNjdHgudGVzdF9tb2RlKQorKwkJeworKwkJUkFORGVycihSQU5EX0Zf RklQU19SQU5EX1NFVF9EVCxSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7CisrCQlyZXR1cm4gMDsK KysJCX0KKysJbWVtY3B5KHNjdHguRFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJcmV0dXJu IDE7CisrCX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX2dldF9kdChGSVBTX1BSTkdfQ1RYICpjdHgp CisrICAgIHsKKysjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysJRklMRVRJTUUgZnQ7CisrI2Vs c2UKKysJc3RydWN0IHRpbWV2YWwgdHY7CisrI2VuZGlmCisrCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9 IGN0eC0+RFQ7CisrCisrI2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKKysJdW5zaWduZWQg bG9uZyBwaWQ7CisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrCUdldFN5 c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7CisrCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQu ZHdIaWdoRGF0ZVRpbWUgJiAweGZmKTsKKysJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQu ZHdIaWdoRGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKKysJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIp ICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlszXSA9ICh1bnNpZ25l ZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOworKwlidWZbNF0gPSAo dW5zaWduZWQgY2hhcikgKGZ0LmR3TG93RGF0ZVRpbWUgJiAweGZmKTsKKysJYnVmWzVdID0gKHVu c2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOworKwlidWZbNl0g PSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOworKwli dWZbN10gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDI0KSAmIDB4ZmYp OworKyNlbHNlCisrCWdldHRpbWVvZmRheSgmdHYsTlVMTCk7CisrCWJ1ZlswXSA9ICh1bnNpZ25l ZCBjaGFyKSAodHYudHZfc2VjICYgMHhmZik7CisrCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAo KHR2LnR2X3NlYyA+PiA4KSAmIDB4ZmYpOworKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0 di50dl9zZWMgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2 LnR2X3NlYyA+PiAyNCkgJiAweGZmKTsKKysJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpICh0di50 dl91c2VjICYgMHhmZik7CisrCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMg Pj4gOCkgJiAweGZmKTsKKysJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+ PiAxNikgJiAweGZmKTsKKysJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+ PiAyNCkgJiAweGZmKTsKKysjZW5kaWYKKysJYnVmWzhdID0gKHVuc2lnbmVkIGNoYXIpIChjdHgt PmNvdW50ZXIgJiAweGZmKTsKKysJYnVmWzldID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4LT5jb3Vu dGVyID4+IDgpICYgMHhmZik7CisrCWJ1ZlsxMF0gPSAodW5zaWduZWQgY2hhcikgKChjdHgtPmNv dW50ZXIgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlsxMV0gPSAodW5zaWduZWQgY2hhcikgKChjdHgt PmNvdW50ZXIgPj4gMjQpICYgMHhmZik7CisrCisrCWN0eC0+Y291bnRlcisrOworKworKworKyNp Zm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCisrCXBpZD0odW5zaWduZWQgbG9uZylnZXRwaWQo KTsKKysJYnVmWzEyXSA9ICh1bnNpZ25lZCBjaGFyKSAocGlkICYgMHhmZik7CisrCWJ1ZlsxM10g PSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gOCkgJiAweGZmKTsKKysJYnVmWzE0XSA9ICh1bnNp Z25lZCBjaGFyKSAoKHBpZCA+PiAxNikgJiAweGZmKTsKKysJYnVmWzE1XSA9ICh1bnNpZ25lZCBj aGFyKSAoKHBpZCA+PiAyNCkgJiAweGZmKTsKKysjZW5kaWYKKysgICAgfQorKworK3N0YXRpYyBp bnQgZmlwc19yYW5kKEZJUFNfUFJOR19DVFggKmN0eCwKKysJCQl1bnNpZ25lZCBjaGFyICpvdXQs IEZJUFNfUkFORF9TSVpFX1Qgb3V0bGVuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgUltBRVNfQkxP Q0tfTEVOR1RIXSwgSVtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciB0bXBbQUVT X0JMT0NLX0xFTkdUSF07CisrCWludCBpOworKwlpZiAoY3R4LT5lcnJvcikKKysJCXsKKysJCVJB TkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19FUlJPUik7CisrCQlyZXR1cm4gMDsK KysJCX0KKysJaWYgKCFjdHgtPmtleWVkKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19S QU5ELFJBTkRfUl9OT19LRVlfU0VUKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWN0eC0+ c2VlZGVkKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX05P VF9TRUVERUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWZvciAoOzspCisrCQl7CisrCQlpZiAo IWN0eC0+dGVzdF9tb2RlKQorKwkJCWZpcHNfZ2V0X2R0KGN0eCk7CisrCQlBRVNfZW5jcnlwdChj dHgtPkRULCBJLCAmY3R4LT5rcyk7CisrCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdU SDsgaSsrKQorKwkJCXRtcFtpXSA9IElbaV0gXiBjdHgtPlZbaV07CisrCQlBRVNfZW5jcnlwdCh0 bXAsIFIsICZjdHgtPmtzKTsKKysJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBp KyspCisrCQkJdG1wW2ldID0gUltpXSBeIElbaV07CisrCQlBRVNfZW5jcnlwdCh0bXAsIGN0eC0+ ViwgJmN0eC0+a3MpOworKwkJLyogQ29udGludW91cyBQUk5HIHRlc3QgKi8KKysJCWlmIChjdHgt PnNlY29uZCkKKysJCQl7CisrCQkJaWYgKGZpcHNfcHJuZ19mYWlsKQorKwkJCQltZW1jcHkoY3R4 LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCQlpZiAoIW1lbWNtcChSLCBjdHgtPmxh c3QsIEFFU19CTE9DS19MRU5HVEgpKQorKwkJCQl7CisrCSAgICAJCQlSQU5EZXJyKFJBTkRfRl9G SVBTX1JBTkQsUkFORF9SX1BSTkdfU1RVQ0spOworKwkJCQljdHgtPmVycm9yID0gMTsKKysJCQkJ Zmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCX0K KysJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJaWYgKCFjdHgt PnNlY29uZCkKKysJCQl7CisrCQkJY3R4LT5zZWNvbmQgPSAxOworKwkJCWlmICghY3R4LT50ZXN0 X21vZGUpCisrCQkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCWlmIChvdXRsZW4gPD0gQUVTX0JM T0NLX0xFTkdUSCkKKysJCQl7CisrCQkJbWVtY3B5KG91dCwgUiwgb3V0bGVuKTsKKysJCQlicmVh azsKKysJCQl9CisrCisrCQltZW1jcHkob3V0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCW91 dCArPSBBRVNfQkxPQ0tfTEVOR1RIOworKwkJb3V0bGVuIC09IEFFU19CTE9DS19MRU5HVEg7Cisr CQl9CisrCXJldHVybiAxOworKwl9CisrCisrCisraW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4pCisrCXsKKysJaW50 IHJldDsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0ID0gZmlwc19z ZXRfcHJuZ19rZXkoJnNjdHgsIGtleSwga2V5bGVuKTsKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBU T19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IEZJUFNfcmFuZF9zZWVk KGNvbnN0IHZvaWQgKnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbikKKysJeworKwlpbnQg cmV0OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBmaXBzX3Nl dF9wcm5nX3NlZWQoJnNjdHgsIHNlZWQsIHNlZWRsZW4pOworKwlDUllQVE9fd191bmxvY2soQ1JZ UFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKysKKytpbnQgRklQU19yYW5k X2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBjb3VudCkKKysJewor KwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBm aXBzX3JhbmQoJnNjdHgsIG91dCwgY291bnQpOworKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xP Q0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3N0YXR1cyh2 b2lkKQorKwl7CisrCWludCByZXQ7CisrCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7 CisrCXJldCA9IHNjdHguc2VlZGVkOworKwlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFO RCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKyt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKQor Kwl7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCWZpcHNfcmFuZF9wcm5n X3Jlc2V0KCZzY3R4KTsKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwl9 CisrCisrc3RhdGljIHZvaWQgZmlwc19kb19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgRklQ U19SQU5EX1NJWkVfVCBzZWVkbGVuKQorKwl7CisrCUZJUFNfcmFuZF9zZWVkKHNlZWQsIHNlZWRs ZW4pOworKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19kb19yYW5kX2FkZChjb25zdCB2b2lkICpz ZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4sCisrCQkJCQlkb3VibGUgYWRkX2VudHJvcHkp CisrCXsKKysJRklQU19yYW5kX3NlZWQoc2VlZCwgc2VlZGxlbik7CisrCX0KKysKKytzdGF0aWMg Y29uc3QgUkFORF9NRVRIT0QgcmFuZF9maXBzX21ldGg9CisrICAgIHsKKysgICAgZmlwc19kb19y YW5kX3NlZWQsCisrICAgIEZJUFNfcmFuZF9ieXRlcywKKysgICAgRklQU19yYW5kX3Jlc2V0LAor KyAgICBmaXBzX2RvX3JhbmRfYWRkLAorKyAgICBGSVBTX3JhbmRfYnl0ZXMsCisrICAgIEZJUFNf cmFuZF9zdGF0dXMKKysgICAgfTsKKysKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21l dGhvZCh2b2lkKQorK3sKKysgIHJldHVybiAmcmFuZF9maXBzX21ldGg7CisrfQorKworKyNlbmRp ZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmguZmlwcyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAorLS0tIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAw MDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAkyMDEy LTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw3NyBAQAorKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisr ICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4K KysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVu c3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisr ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysg KgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK KysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KKysgKgorKyAqLworKworKyNpZm5kZWYgSEVBREVSX0ZJUFNfUkFORF9ICisrI2Rl ZmluZSBIRUFERVJfRklQU19SQU5EX0gKKysKKysjaW5jbHVkZSAiZGVzLmgiCisrCisrI2lmZGVm IE9QRU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysj ZW5kaWYKKysKKytpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5 LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbik7CisraW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZv aWQgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0pOworK2ludCBGSVBTX3JhbmRfYnl0ZXModW5z aWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbik7CisrCisraW50IEZJUFNf cmFuZF90ZXN0X21vZGUodm9pZCk7Cisrdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCk7CisraW50 IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOworKworK2ludCBGSVBTX3JhbmRf c3RhdHVzKHZvaWQpOworKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZv aWQpOworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrI2VuZGlmCisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5j CistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlw cwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAw MDAwMDAwICswMTAwCitAQCAtMCwwICsxLDM3MyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgor KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwor KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQor KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK KysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAq LworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgor KyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQu aD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrCisrCisrdHlwZWRlZiBzdHJ1Y3QKKysJ eworKwl1bnNpZ25lZCBjaGFyIERUWzE2XTsKKysJdW5zaWduZWQgY2hhciBWWzE2XTsKKysJdW5z aWduZWQgY2hhciBSWzE2XTsKKysJfSBBRVNfUFJOR19UVjsKKysKKysvKiBUaGUgZm9sbG93aW5n IHRlc3QgdmVjdG9ycyBhcmUgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUgUkdOVlMgc3BlYyAqLwor KworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xMjhfa2V5WzE2XSA9CisrCQl7MHhmMywweGIx LDB4NjYsMHg2ZCwweDEzLDB4NjAsMHg3MiwweDQyLAorKwkJIDB4ZWQsMHgwNiwweDFjLDB4YWIs MHhiOCwweGQ0LDB4NjIsMHgwMn07CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18xMjhfdHZb XSA9IHsKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSww eDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4 Zjl9LAorKwkJCQkvKiBWICovCisrCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisr CQkJCS8qIFIgKi8KKysJCXsweDU5LDB4NTMsMHgxZSwweGQxLDB4M2IsMHhiMCwweGMwLDB4NTUs CisrCQkgMHg4NCwweDc5LDB4NjYsMHg4NSwweGMxLDB4MmYsMHg3NiwweDQxfQorKwl9LAorKwl7 CisrCQkJCS8qIERUICovCisrCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSww eDYyLAorKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmYX0sCisrCQkJ CS8qIFYgKi8KKysJCXsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisr CQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAq LworKwkJezB4N2MsMHgyMiwweDJjLDB4ZjQsMHhjYSwweDhmLDB4YTIsMHg0YywKKysJCSAweDFj LDB4OWMsMHhiNiwweDQxLDB4YTksMHhmMywweDIyLDB4MGR9CisrCX0sCisrCXsKKysJCQkJLyog RFQgKi8KKysJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCisrCQkg MHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGZifSwKKysJCQkJLyogViAqLwor KwkJezB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHg4 YSwweGFhLDB4MDAsMHgzOSwweDY2LDB4NjcsMHg1YiwweGU1LAorKwkJIDB4MjksMHgxNCwweDI4 LDB4ODEsMHhhOSwweDRkLDB4NGUsMHhjN30KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJ ezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQs MHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmN9LAorKwkJCQkvKiBWICovCisrCQl7MHhmMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDg4LDB4ZGQsMHhh NCwweDU2LDB4MzAsMHgyNCwweDIzLDB4ZTUsCisrCQkgMHhmNiwweDlkLDB4YTUsMHg3ZSwweDdi LDB4OTUsMHhjNywweDNhfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhlNiwweGIz LDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIs MHhiMCwweGU5LDB4MjIsMHhmZH0sCisrCQkJCS8qIFYgKi8KKysJCXsweGY4LDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4MDUsMHgyNSwweDkyLDB4NDYsMHg2 MSwweDc5LDB4ZDIsMHhjYiwKKysJCSAweDc4LDB4YzQsMHgwYiwweDE0LDB4MGEsMHg1YSwweDlh LDB4Yzh9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGU2LDB4YjMsMHhiZSwweDc4 LDB4MmEsMHgyMywweGZhLDB4NjIsCisrCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTks MHgyMywweDc3fSwKKysJCQkJLyogViAqLworKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiww eGZmLDB4ZmYsMHhmZiwKKysJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmV9LAorKwkJCQkvKiBSICovCisrCQl7MHgwZCwweGQ1LDB4YTAsMHgzNiwweDdhLDB4NTksMHgy NiwweGJjLAorKwkJIDB4NDgsMHhkOSwweDM4LDB4YmYsMHhmMCwweDg1LDB4OGYsMHhlYX0KKysJ fSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIz LDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIzLDB4Nzh9 LAorKwkJCQkvKiBWICovCisrCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiww eGZmLAorKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn0sCisrCQkJ CS8qIFIgKi8KKysJCXsweGFlLDB4NTMsMHg4NywweGVlLDB4OGMsMHhkOSwweDEyLDB4ZjUsCisr CQkgMHg3MywweDUzLDB4YWUsMHgwMywweGY5LDB4ZDUsMHgxMywweDMzfQorKwl9LAorK307Cisr Cisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9rZXlbMjRdID0KKysJCXsweDE1LDB4ZDgs MHg3OCwweDBkLDB4NjIsMHhkMywweDI1LDB4NmUsCisrCQkgMHg0NCwweDY0LDB4MTAsMHgxMyww eDYwLDB4MmIsMHhhOSwweGJjLAorKwkJIDB4NGEsMHhmYiwweGNhLDB4ZWIsMHg0YywweDhiLDB4 OTksMHgzYn07CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18xOTJfdHZbXSA9IHsKKysJewor KwkJCQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhj MSwKKysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGJ9LAorKwkJCQkv KiBWICovCisrCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJ IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8K KysJCXsweDE3LDB4MDcsMHhkNSwweDI4LDB4MTksMHg3OSwweDFlLDB4ZWYsCisrCQkgMHhhNSww eDBjLDB4YmYsMHgyNSwweGU1LDB4NTYsMHhiNCwweDkzfQorKwl9LAorKwl7CisrCQkJCS8qIERU ICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAorKwkJIDB4 YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0Y30sCisrCQkJCS8qIFYgKi8KKysJ CXsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4OTIs MHg4ZCwweGJlLDB4MDcsMHhkZCwweGM3LDB4NTgsMHhjMCwKKysJCSAweDZmLDB4MzUsMHg0MSww eDliLDB4MTcsMHhjOSwweGJkLDB4OWJ9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsw eDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkgMHhiZiwweDk5LDB4 N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRkfSwKKysJCQkJLyogViAqLworKwkJezB4ZTAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHhkNSwweGRlLDB4ZjQs MHg1MCwweGYzLDB4YjcsMHgxMCwweDRlLAorKwkJIDB4YjgsMHhjNiwweGY4LDB4Y2YsMHhlMiww eGIxLDB4Y2EsMHhhMn0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCww eGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4 MjQsMHg3OCwweGYzLDB4NGV9LAorKwkJCQkvKiBWICovCisrCQl7MHhmMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweGNlLDB4MjksMHgwOCwweDQzLDB4ZmMs MHgzNCwweDQxLDB4ZTcsCisrCQkgMHg0NywweDhmLDB4YjMsMHg2NiwweDJiLDB4NDYsMHhiMSww eGJifQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCww eDgwLDB4NjksMHg4YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4 ZjMsMHg0Zn0sCisrCQkJCS8qIFYgKi8KKysJCXsweGY4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw fSwKKysJCQkJLyogUiAqLworKwkJezB4YjMsMHgyNiwweDBmLDB4ZjUsMHhkNiwweGNhLDB4YTgs MHhiZiwKKysJCSAweDg5LDB4YjgsMHg1ZSwweDJmLDB4MjIsMHg1NiwweDkyLDB4MmZ9CisrCX0s CisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSww eDhiLDB4YzEsCisrCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweGM5fSwK KysJCQkJLyogViAqLworKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwKKysJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmV9LAorKwkJCQkv KiBSICovCisrCQl7MHgwNSwweGViLDB4MTgsMHg1MiwweDM0LDB4NDMsMHgwMCwweDQzLAorKwkJ IDB4NmUsMHg1YSwweGE1LDB4ZmUsMHg3YiwweDMyLDB4YzQsMHgyZH0KKysJfSwKKysJeworKwkJ CQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwK KysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4Y2F9LAorKwkJCQkvKiBW ICovCisrCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAorKwkJIDB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn0sCisrCQkJCS8qIFIgKi8KKysJ CXsweDE1LDB4M2MsMHhlOCwweGQxLDB4MDQsMHhjNywweGFkLDB4NTAsCisrCQkgMHgwYiwweGYw LDB4MDcsMHgxNiwweGU3LDB4NTYsMHg3YSwweGVhfQorKwl9LAorK307CisrCisrc3RhdGljIHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl9rZXlbMzJdID0KKysJCXsweDZkLDB4MTQsMHgwNiwweDZjLDB4 YjYsMHhkOCwweDIxLDB4MmQsCisrCQkgMHg4MiwweDhkLDB4ZmEsMHhmMiwweDdhLDB4MDMsMHhi NywweDlmLAorKwkJIDB4MGMsMHhjNywweDNlLDB4Y2QsMHg3NiwweGViLDB4ZWUsMHhiNSwKKysJ CSAweDIxLDB4MDUsMHg4YywweDRmLDB4MzEsMHg3YSwweDgwLDB4YmJ9OworKworK3N0YXRpYyBB RVNfUFJOR19UViBhZXNfMjU2X3R2W10gPSB7CisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGRh LDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiwweGE5LDB4NGUs MHgzNCwweDc0LDB4OGUsMHg5ZSwweDg4fSwKKysJCQkJLyogViAqLworKwkJezB4ODAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHgzNSwweGM3LDB4ZWYsMHhh NywweDc4LDB4NGQsMHgyOSwweGJjLAorKwkJIDB4ODIsMHg3OSwweDk5LDB4ZmIsMHhkMCwweGIz LDB4M2IsMHg3Mn0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZGEsMHgzYSwweDQx LDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQs MHg4ZSwweDllLDB4ODl9LAorKwkJCQkvKiBWICovCisrCQl7MHhjMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDZjLDB4ZjQsMHg0MiwweDVkLDB4YzcsMHgw NCwweDFhLDB4NDEsCisrCQkgMHgyOCwweDJhLDB4NzgsMHhhOSwweGIwLDB4MTIsMHhjNCwweDk1 fQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFk LDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUs MHg4YX0sCisrCQkJCS8qIFYgKi8KKysJCXsweGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwK KysJCQkJLyogUiAqLworKwkJezB4MTYsMHg5MCwweGE0LDB4ZmYsMHg3YiwweDdlLDB4YjksMHgz MCwKKysJCSAweGRiLDB4NjcsMHg0YiwweGFjLDB4MmQsMHhlMSwweGQxLDB4NzV9CisrCX0sCisr CXsKKysJCQkJLyogRFQgKi8KKysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIw LDB4ZDUsCisrCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDhifSwKKysJ CQkJLyogViAqLworKwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwK KysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBS ICovCisrCQl7MHgxNCwweDZmLDB4ZjUsMHg5NSwweGExLDB4NDYsMHg2NSwweDMwLAorKwkJIDB4 YmMsMHg1NywweGUyLDB4NGEsMHhmNywweDQ1LDB4NjIsMHgwNX0KKysJfSwKKysJeworKwkJCQkv KiBEVCAqLworKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJ CSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4OGN9LAorKwkJCQkvKiBWICov CisrCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsw eDk2LDB4ZTIsMHhiNCwweDFlLDB4NjYsMHg1ZSwweDBmLDB4YTQsCisrCQkgMHhjNSwweGNkLDB4 YTIsMHgwNywweGNjLDB4YjcsMHg5NCwweDQwfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisr CQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhh OSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWYsMHgwNn0sCisrCQkJCS8qIFYgKi8KKysJCXsweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCisrCQkgMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKKysJCQkJLyogUiAqLworKwkJezB4NjEsMHhjZSww eDFkLDB4NmEsMHg0OCwweDc1LDB4OTcsMHgyOCwKKysJCSAweDRiLDB4NDEsMHhkZSwweDE4LDB4 NDQsMHg0ZiwweDU2LDB4ZWN9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGRhLDB4 M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiwweGE5LDB4NGUsMHgz NCwweDc0LDB4OGUsMHg5ZiwweDA3fSwKKysJCQkJLyogViAqLworKwkJezB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKKysJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmZ9LAorKwkJCQkvKiBSICovCisrCQl7MHg1MiwweDg5LDB4NTksMHg3OSww eDJkLDB4YWEsMHgyOCwweGIzLAorKwkJIDB4YjAsMHg4YSwweDNlLDB4NzAsMHhmYSwweDcxLDB4 NTksMHg4NH0KKysJfSwKKyt9OworKworKworK3ZvaWQgRklQU19jb3JydXB0X3JuZygpCisrICAg IHsKKysgICAgYWVzXzE5Ml90dlswXS5WWzBdKys7CisrICAgIH0KKysKKysjZGVmaW5lIGZpcHNf cmFuZF90ZXN0KGtleSwgdHYpIFwKKysJZG9fcmFuZF90ZXN0KGtleSwgc2l6ZW9mIGtleSwgdHYs IHNpemVvZih0dikvc2l6ZW9mKEFFU19QUk5HX1RWKSkKKysKKytzdGF0aWMgaW50IGRvX3JhbmRf dGVzdCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sCisrCQkJQUVTX1BSTkdfVFYgKnR2 LCBpbnQgbnR2KQorKwl7CisrCXVuc2lnbmVkIGNoYXIgUlsxNl07CisrCWludCBpOworKwlpZiAo IUZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVuKSkKKysJCXJldHVybiAwOworKwlmb3IgKGkg PSAwOyBpIDwgbnR2OyBpKyspCisrCQl7CisrCQlGSVBTX3JhbmRfc2VlZCh0dltpXS5WLCAxNik7 CisrCQlGSVBTX3JhbmRfc2V0X2R0KHR2W2ldLkRUKTsKKysJCUZJUFNfcmFuZF9ieXRlcyhSLCAx Nik7CisrCQlpZiAobWVtY21wKFIsIHR2W2ldLlIsIDE2KSkKKysJCQlyZXR1cm4gMDsKKysJCX0K KysJcmV0dXJuIDE7CisrCX0KKysJCisrCisraW50IEZJUFNfc2VsZnRlc3Rfcm5nKCkKKysJewor KwlGSVBTX3JhbmRfcmVzZXQoKTsKKysJaWYgKCFGSVBTX3JhbmRfdGVzdF9tb2RlKCkpCisrCQl7 CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORyxGSVBTX1JfU0VMRlRFU1RfRkFJ TEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWZpcHNfcmFuZF90ZXN0KGFlc18xMjhf a2V5LGFlc18xMjhfdHYpCisrCQl8fCAhZmlwc19yYW5kX3Rlc3QoYWVzXzE5Ml9rZXksIGFlc18x OTJfdHYpCisrCQl8fCAhZmlwc19yYW5kX3Rlc3QoYWVzXzI1Nl9rZXksIGFlc18yNTZfdHYpKQor KwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcsRklQU19SX1NFTEZURVNU X0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJRklQU19yYW5kX3Jlc2V0KCk7CisrCXJl dHVybiAxOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v Zmlwcy9maXBzX3JhbmR0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBz X3JhbmR0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0 LmMuZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAw MDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwyNDggQEAKKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUt MTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0 dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBpbXBs ZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNT TC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9u LWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg YXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0byBh bGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAor KyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBT U0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMg Y292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0aGUg aG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBDb3B5 cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90 aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlz IHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVu IGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJh cnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2Fn ZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3Ig dGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK KysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0 d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIK KysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSBy b3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRv Z3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBz cGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0aGUg YXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNr bm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3Jp dHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisrICog Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VTOyBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJp YnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorKyAq IGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNv ZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlz dHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2Uu XQorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5o PgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUg PGN0eXBlLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+CisrCisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQ UworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5v IEZJUFMgUkFORCBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQor KworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3R5cGVkZWYgc3RydWN0CisrCXsKKysJdW5z aWduZWQgY2hhciBEVFsxNl07CisrCXVuc2lnbmVkIGNoYXIgVlsxNl07CisrCXVuc2lnbmVkIGNo YXIgUlsxNl07CisrCX0gQUVTX1BSTkdfTUNUOworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFl c18xMjhfbWN0X2tleVsxNl0gPQorKwl7MHg5ZiwweDViLDB4NTEsMHgyMCwweDBiLDB4ZjMsMHgz NCwweGI1LAorKwkgMHhkOCwweDJiLDB4ZTgsMHhjMywweDcyLDB4NTUsMHhjOCwweDQ4fTsKKysK KytzdGF0aWMgQUVTX1BSTkdfTUNUIGFlc18xMjhfbWN0X3R2ID0geworKwkJCS8qIERUICovCisr CXsweDYzLDB4NzYsMHhiYiwweGU1LDB4MjksMHgwMiwweGJhLDB4M2IsCisrCSAweDY3LDB4Yzks MHgyNSwweGZhLDB4NzAsMHgxZiwweDExLDB4YWN9LAorKwkJCS8qIFYgKi8KKysJezB4NTcsMHgy YywweDhlLDB4NzYsMHg4NywweDI2LDB4NDcsMHg5NywKKysJIDB4N2UsMHg3NCwweGZiLDB4ZGQs MHhjNCwweDk1LDB4MDEsMHhkMX0sCisrCQkJLyogUiAqLworKwl7MHg0OCwweGU5LDB4YmQsMHgw ZCwweDA2LDB4ZWUsMHgxOCwweGZiLAorKwkgMHhlNCwweDU3LDB4OTAsMHhkNSwweGMzLDB4ZmMs MHg5YiwweDczfQorK307CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9tY3Rfa2V5 WzI0XSA9CisrCXsweGI3LDB4NmMsMHgzNCwweGQxLDB4MDksMHg2NywweGFiLDB4NzMsCisrCSAw eDRkLDB4NWEsMHhkNSwweDM0LDB4OTgsMHgxNiwweDBiLDB4OTEsCisrCSAweGJjLDB4MzUsMHg1 MSwweDE2LDB4NmIsMHhhZSwweDkzLDB4OGF9OworKworK3N0YXRpYyBBRVNfUFJOR19NQ1QgYWVz XzE5Ml9tY3RfdHYgPSB7CisrCQkJLyogRFQgKi8KKysJezB4ODQsMHhjZSwweDIyLDB4N2QsMHg5 MSwweDVhLDB4YTMsMHhjOSwKKysJIDB4ODQsMHgzYywweDBhLDB4YjMsMHhhOSwweDYzLDB4MTUs MHg1Mn0sCisrCQkJLyogViAqLworKwl7MHhiNiwweGFmLDB4ZTYsMHg4ZiwweDk5LDB4OWUsMHg5 MCwweDY0LAorKwkgMHhkZCwweGM3LDB4N2EsMHhjMSwweGJiLDB4OTAsMHgzYSwweDZkfSwKKysJ CQkvKiBSICovCisrCXsweGZjLDB4ODUsMHg2MCwweDlhLDB4MjksMHg2ZiwweGVmLDB4MjEsCisr CSAweGRkLDB4ODYsMHgyMCwweDMyLDB4OGEsMHgyOSwweDZmLDB4NDd9CisrfTsKKysKKytzdGF0 aWMgdW5zaWduZWQgY2hhciBhZXNfMjU2X21jdF9rZXlbMzJdID0KKysJezB4OWIsMHgwNSwweGM4 LDB4NjgsMHhmZiwweDQ3LDB4ZjgsMHgzYSwKKysJIDB4YTYsMHgzYSwweGE4LDB4Y2IsMHg0ZSww eDcxLDB4YjIsMHhlMCwKKysJIDB4YjgsMHg3ZSwweGYxLDB4MzcsMHhiNiwweGI0LDB4ZjYsMHg2 ZCwKKysJIDB4ODYsMHgzMiwweGZjLDB4MWYsMHg1ZSwweDFkLDB4MWUsMHg1MH07CisrCisrc3Rh dGljIEFFU19QUk5HX01DVCBhZXNfMjU2X21jdF90diA9IHsKKysJCQkvKiBEVCAqLworKwl7MHgz MSwweDZlLDB4MzUsMHg5YSwweGIxLDB4NDQsMHhmMCwweGVlLAorKwkgMHg2MiwweDZkLDB4MDQs MHg0NiwweGUwLDB4YTMsMHg5MiwweDRjfSwKKysJCQkvKiBWICovCisrCXsweDRmLDB4Y2QsMHhj MSwweDg3LDB4ODIsMHgxZiwweDRkLDB4YTEsCisrCSAweDNlLDB4MGUsMHg1NiwweDQ0LDB4NTks MHhlOCwweDgzLDB4Y2F9LAorKwkJCS8qIFIgKi8KKysJezB4YzgsMHg4NywweGMyLDB4NjEsMHg1 YiwweGQwLDB4YjksMHhlMSwKKysJIDB4ZTcsMHhmMywweDhiLDB4ZDcsMHg1YiwweGQ1LDB4ZjEs MHg4ZH0KKyt9OworKworK3N0YXRpYyB2b2lkIGR1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqYixp bnQgbikKKysgICAgeworKyAgICB3aGlsZShuLS0gPiAwKQorKwl7CisrCXByaW50ZigiICUwMngi LCpiKyspOworKwl9CisrICAgIH0KKysKKytzdGF0aWMgdm9pZCBjb21wYXJlKGNvbnN0IHVuc2ln bmVkIGNoYXIgKnJlc3VsdCxjb25zdCB1bnNpZ25lZCBjaGFyICpleHBlY3RlZCwKKysJCSAgICBp bnQgbikKKysgICAgeworKyAgICBpbnQgaTsKKysKKysgICAgZm9yKGk9MCA7IGkgPCBuIDsgKytp KQorKwlpZihyZXN1bHRbaV0gIT0gZXhwZWN0ZWRbaV0pCisrCSAgICB7CisrCSAgICBwdXRzKCJS YW5kb20gdGVzdCBmYWlsZWQsIGdvdDoiKTsKKysJICAgIGR1bXAocmVzdWx0LG4pOworKwkgICAg cHV0cygiXG4gICAgICAgICAgICAgICBleHBlY3RlZDoiKTsKKysJICAgIGR1bXAoZXhwZWN0ZWQs bik7CisrCSAgICBwdXRjaGFyKCdcbicpOworKwkgICAgRVhJVCgxKTsKKysJICAgIH0KKysgICAg fQorKworKworK3N0YXRpYyB2b2lkIHJ1bl90ZXN0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtl eWxlbiwgQUVTX1BSTkdfTUNUICp0dikKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zlsx Nl0sIGR0WzE2XTsKKysgICAgaW50IGksIGo7CisrICAgIEZJUFNfcmFuZF9yZXNldCgpOworKyAg ICBGSVBTX3JhbmRfdGVzdF9tb2RlKCk7CisrICAgIEZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5 bGVuKTsKKysgICAgRklQU19yYW5kX3NlZWQodHYtPlYsIDE2KTsKKysgICAgbWVtY3B5KGR0LCB0 di0+RFQsIDE2KTsKKysgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspCisrCXsKKysgICAg CUZJUFNfcmFuZF9zZXRfZHQoZHQpOworKwlGSVBTX3JhbmRfYnl0ZXMoYnVmLCAxNik7CisrCS8q IEluY3JlbWVudCBEVCAqLworKwlmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pCisrCQl7CisrCQlk dFtqXSsrOworKwkJaWYgKGR0W2pdKQorKwkJCWJyZWFrOworKwkJfQorKwl9CisrCisrICAgIGNv bXBhcmUoYnVmLHR2LT5SLCAxNik7CisrICAgIH0KKysKKytpbnQgbWFpbigpCisrCXsKKysJcnVu X3Rlc3QoYWVzXzEyOF9tY3Rfa2V5LCAxNiwgJmFlc18xMjhfbWN0X3R2KTsKKysJcHJpbnRmKCJG SVBTIFBSTkcgdGVzdCAxIGRvbmVcbiIpOworKwlydW5fdGVzdChhZXNfMTkyX21jdF9rZXksIDI0 LCAmYWVzXzE5Ml9tY3RfdHYpOworKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDIgZG9uZVxuIik7 CisrCXJ1bl90ZXN0KGFlc18yNTZfbWN0X2tleSwgMzIsICZhZXNfMjU2X21jdF90dik7CisrCXBy aW50ZigiRklQUyBQUk5HIHRlc3QgMyBkb25lXG4iKTsKKysJcmV0dXJuIDA7CisrCX0KKysKKysj ZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0 ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5j CistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBz CTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAw MDAwMCArMDEwMAorQEAgLTAsMCArMSw0NDEgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHly aWdodCAoYykgMjAwMy0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysg KgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K KysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNz bC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgor KyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRp ZgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYu aD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgbltd ID0KKysiXHgwMFx4QkJceEY4XHgyRlx4MDlceDA2XHg4Mlx4Q0VceDlDXHgyM1x4MzhceEFDXHgy Qlx4OURceEE4XHg3MSIKKysiXHhGN1x4MzZceDhEXHgwN1x4RUVceEQ0XHgxMFx4NDNceEE0XHg0 MFx4RDZceEI2XHhGMFx4NzRceDU0XHhGNSIKKysiXHgxRlx4QjhceERGXHhCQVx4QUZceDAzXHg1 Q1x4MDJceEFCXHg2MVx4RUFceDQ4XHhDRVx4RUJceDZGXHhDRCIKKysiXHg0OFx4NzZceEVEXHg1 Mlx4MERceDYwXHhFMVx4RUNceDQ2XHgxOVx4NzFceDlEXHg4QVx4NUJceDhCXHg4MCIKKysiXHg3 Rlx4QUZceEI4XHhFMFx4QTNceERGXHhDN1x4MzdceDcyXHgzRVx4RTZceEI0XHhCN1x4RDlceDNB XHgyNSIKKysiXHg4NFx4RUVceDZBXHg2NFx4OURceDA2XHgwOVx4NTNceDc0XHg4OFx4MzRceEIy XHg0NVx4NDVceDk4XHgzOSIKKysiXHg0RVx4RTBceEFBXHhCMVx4MkRceDdCXHg2MVx4QTVceDFG XHg1Mlx4N0FceDlBXHg0MVx4RjZceEMxXHg2OCIKKysiXHg3Rlx4RTJceDUzXHg3Mlx4OThceENB XHgyQVx4OEZceDU5XHg0Nlx4RjhceEU1XHhGRFx4MDlceDFEXHhCRCIKKysiXHhDQiI7CisrCisr Cisrc3RhdGljIGludCBzZXRyc2FrZXkoUlNBICprZXkpCisrICAgIHsKKysgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZVtdID0gIlx4MTEiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBkW10gPQorKyJceDAwXHhBNVx4REFceEZDXHg1M1x4NDFceEZBXHhGMlx4ODlc eEM0XHhCOVx4ODhceERCXHgzMFx4QzFceENEIgorKyJceEY4XHgzRlx4MzFceDI1XHgxRVx4MDZc eDY4XHhCNFx4MjdceDg0XHg4MVx4MzhceDAxXHg1N1x4OTZceDQxIgorKyJceEIyXHg5NFx4MTBc eEIzXHhDN1x4OTlceDhEXHg2Qlx4QzRceDY1XHg3NFx4NUVceDVDXHgzOVx4MjZceDY5IgorKyJc eEQ2XHg4N1x4MERceEEyXHhDMFx4ODJceEE5XHgzOVx4RTNceDdGXHhEQ1x4QjhceDJFXHhDOVx4 M0VceERBIgorKyJceEM5XHg3Rlx4RjNceEFEXHg1OVx4NTBceEFDXHhDRlx4QkNceDExXHgxQ1x4 NzZceEYxXHhBOVx4NTJceDk0IgorKyJceDQ0XHhFNVx4NkFceEFGXHg2OFx4QzVceDZDXHgwOVx4 MkNceEQzXHg4RFx4QzNceEJFXHhGNVx4RDJceDBBIgorKyJceDkzXHg5OVx4MjZceEVEXHg0Rlx4 NzRceEExXHgzRVx4RERceEZCXHhFMVx4QTFceENFXHhDQ1x4NDhceDk0IgorKyJceEFGXHg5NFx4 MjhceEMyXHhCN1x4QjhceDg4XHgzRlx4RTRceDQ2XHgzQVx4NEJceEM4XHg1Qlx4MUNceEIzIgor KyJceEMxIjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcFtdID0KKysiXHgw MFx4RUVceENGXHhBRVx4ODFceEIxXHhCOVx4QjNceEM5XHgwOFx4ODFceDBCXHgxMFx4QTFceEI1 XHg2MCIKKysiXHgwMVx4OTlceEVCXHg5Rlx4NDRceEFFXHhGNFx4RkRceEE0XHg5M1x4QjhceDFB XHg5RVx4M0RceDg0XHhGNiIKKysiXHgzMlx4MTJceDRFXHhGMFx4MjNceDZFXHg1RFx4MUVceDNC XHg3RVx4MjhceEZBXHhFN1x4QUFceDA0XHgwQSIKKysiXHgyRFx4NUJceDI1XHgyMVx4NzZceDQ1 XHg5RFx4MUZceDM5XHg3NVx4NDFceEJBXHgyQVx4NThceEZCXHg2NSIKKysiXHg5OSI7CisrCisr ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHFbXSA9CisrIlx4MDBceEM5XHg3Rlx4QjFc eEYwXHgyN1x4RjRceDUzXHhGNlx4MzRceDEyXHgzM1x4RUFceEFBXHhEMVx4RDkiCisrIlx4MzVc eDNGXHg2Q1x4NDJceEQwXHg4OFx4NjZceEIxXHhEMFx4NUFceDBGXHgyMFx4MzVceDAyXHg4Qlx4 OUQiCisrIlx4ODZceDk4XHg0MFx4QjRceDE2XHg2Nlx4QjRceDJFXHg5Mlx4RUFceDBEXHhBM1x4 QjRceDMyXHgwNFx4QjUiCisrIlx4Q0ZceENFXHgzM1x4NTJceDUyXHg0RFx4MDRceDE2XHhBNVx4 QTRceDQxXHhFN1x4MDBceEFGXHg0Nlx4MTUiCisrIlx4MDMiOworKworKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBkbXAxW10gPQorKyJceDU0XHg0OVx4NENceEE2XHgzRVx4QkFceDAz XHgzN1x4RTRceEUyXHg0MFx4MjNceEZDXHhENlx4OUFceDVBIgorKyJceEVCXHgwN1x4RERceERD XHgwMVx4ODNceEE0XHhEMFx4QUNceDlCXHg1NFx4QjBceDUxXHhGMlx4QjFceDNFIgorKyJceEQ5 XHg0OVx4MDlceDc1XHhFQVx4QjdceDc0XHgxNFx4RkZceDU5XHhDMVx4RjdceDY5XHgyRVx4OUFc eDJFIgorKyJceDIwXHgyQlx4MzhceEZDXHg5MVx4MEFceDQ3XHg0MVx4NzRceEFEXHhDOVx4M0Nc eDFGXHg2N1x4QzlceDgxIjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1x MVtdID0KKysiXHg0N1x4MUVceDAyXHg5MFx4RkZceDBBXHhGMFx4NzVceDAzXHg1MVx4QjdceEY4 XHg3OFx4ODZceDRDXHhBOSIKKysiXHg2MVx4QURceEJEXHgzQVx4OEFceDdFXHg5OVx4MUNceDVD XHgwNVx4NTZceEE5XHg0Q1x4MzFceDQ2XHhBNyIKKysiXHhGOVx4ODBceDNGXHg4Rlx4NkZceDhB XHhFM1x4NDJceEU5XHgzMVx4RkRceDhBXHhFNFx4N0FceDIyXHgwRCIKKysiXHgxQlx4OTlceEE0 XHg5NVx4ODRceDk4XHgwN1x4RkVceDM5XHhGOVx4MjRceDVBXHg5OFx4MzZceERBXHgzRCI7Cisr ICAgIAorKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpcW1wW10gPQorKyJceDAwXHhC MFx4NkNceDRGXHhEQVx4QkJceDYzXHgwMVx4MTlceDhEXHgyNlx4NUJceERCXHhBRVx4OTRceDIz IgorKyJceEIzXHg4MFx4RjJceDcxXHhGN1x4MzRceDUzXHg4OFx4NTBceDkzXHgwN1x4N0ZceENE XHgzOVx4RTJceDExIgorKyJceDlGXHhDOVx4ODZceDMyXHgxNVx4NEZceDU4XHg4M1x4QjFceDY3 XHhBOVx4NjdceEJGXHg0MFx4MkJceDRFIgorKyJceDlFXHgyRVx4MEZceDk2XHg1Nlx4RTZceDk4 XHhFQVx4MzZceDY2XHhFRFx4RkJceDI1XHg3OVx4ODBceDM5IgorKyJceEY3IjsKKysKKysgICAg a2V5LT5uID0gQk5fYmluMmJuKG4sIHNpemVvZihuKS0xLCBrZXktPm4pOworKyAgICBrZXktPmUg PSBCTl9iaW4yYm4oZSwgc2l6ZW9mKGUpLTEsIGtleS0+ZSk7CisrICAgIGtleS0+ZCA9IEJOX2Jp bjJibihkLCBzaXplb2YoZCktMSwga2V5LT5kKTsKKysgICAga2V5LT5wID0gQk5fYmluMmJuKHAs IHNpemVvZihwKS0xLCBrZXktPnApOworKyAgICBrZXktPnEgPSBCTl9iaW4yYm4ocSwgc2l6ZW9m KHEpLTEsIGtleS0+cSk7CisrICAgIGtleS0+ZG1wMSA9IEJOX2JpbjJibihkbXAxLCBzaXplb2Yo ZG1wMSktMSwga2V5LT5kbXAxKTsKKysgICAga2V5LT5kbXExID0gQk5fYmluMmJuKGRtcTEsIHNp emVvZihkbXExKS0xLCBrZXktPmRtcTEpOworKyAgICBrZXktPmlxbXAgPSBCTl9iaW4yYm4oaXFt cCwgc2l6ZW9mKGlxbXApLTEsIGtleS0+aXFtcCk7CisrICAgIHJldHVybiAxOworKyAgICB9Cisr Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKCkKKysgICAgeworKyAgICBuWzBdKys7CisrICAgIH0K KysKKysvKiBLbm93biBBbnN3ZXIgVGVzdCAoS0FUKSBkYXRhIGZvciB0aGUgYWJvdmUgUlNBIHBy aXZhdGUga2V5IHNpZ25pbmcKKysgKiBrYXRfdGJzLgorKyAqLworKworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGthdF90YnNbXSA9ICJPcGVuU1NMIEZJUFMgMTQwLTIgUHVibGljIEtleSBS U0EgS0FUIjsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEx W10gPSB7CisrICAweDJELCAweEFGLCAweDZFLCAweEMyLCAweDk4LCAweEZCLCAweDhBLCAweEEx LCAweEI5LCAweDQ2LCAweERBLCAweDBGLAorKyAgMHgwMSwgMHgxRSwgMHgzNywgMHg5MywgMHhD MiwgMHg1NSwgMHgyNywgMHhFNCwgMHgxRCwgMHhEMiwgMHg5MCwgMHhCQiwKKysgIDB4RjQsIDB4 QkYsIDB4NEEsIDB4NzQsIDB4MzksIDB4NTEsIDB4QkIsIDB4RTgsIDB4MEMsIDB4QjcsIDB4Rjgs IDB4RDMsCisrICAweEQxLCAweERGLCAweEU3LCAweEJFLCAweDgwLCAweDA1LCAweEMzLCAweEI1 LCAweEM3LCAweDgzLCAweEQ1LCAweDRDLAorKyAgMHg3RiwgMHg0OSwgMHhGQiwgMHgzRiwgMHgy OSwgMHg5QiwgMHhFMSwgMHgxMiwgMHg1MSwgMHg2MCwgMHhEMCwgMHhBNywKKysgIDB4MEQsIDB4 QTksIDB4MjgsIDB4NTYsIDB4NzMsIDB4RDksIDB4MDcsIDB4RTMsIDB4NUUsIDB4M0YsIDB4OUIs IDB4RjUsCisrICAweEI2LCAweEYzLCAweEYyLCAweDVFLCAweDc0LCAweEM5LCAweDgzLCAweDgx LCAweDQ3LCAweEYwLCAweEM1LCAweDQ1LAorKyAgMHgwQSwgMHhFOSwgMHg4RSwgMHgzOCwgMHhE NywgMHgxOCwgMHhDNiwgMHgyQSwgMHgwRiwgMHhGOCwgMHhCNywgMHgzMSwKKysgIDB4RDYsIDB4 NTUsIDB4RTQsIDB4NjYsIDB4NzgsIDB4ODEsIDB4RDQsIDB4RTYsIDB4REIsIDB4OUYsIDB4QkEs IDB4RTgsCisrICAweDIzLCAweEI1LCAweDdGLCAweERDLCAweDA4LCAweEVBLCAweEQ1LCAweDI2 LCAweDFFLCAweDIwLCAweDI1LCAweDg0LAorKyAgMHgyNiwgMHhDNiwgMHg3OSwgMHhDOSwgMHg5 QiwgMHgzRCwgMHg3RSwgMHhBOQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg a2F0X1JTQV9QU1NfU0hBMjI0W10gPSB7CisrICAweDM5LCAweDRBLCAweDZBLCAweDIwLCAweEJD LCAweEU5LCAweDMzLCAweEVELCAweEVGLCAweEM1LCAweDU4LCAweEE3LAorKyAgMHhGRSwgMHg4 MSwgMHhDNCwgMHgzNiwgMHg1MCwgMHg5QSwgMHgyQywgMHg4MiwgMHg5OCwgMHgwOCwgMHg5NSwg MHhGQSwKKysgIDB4QjEsIDB4OUUsIDB4RDIsIDB4NTUsIDB4NjEsIDB4ODcsIDB4MjEsIDB4NTks IDB4ODcsIDB4N0IsIDB4MUYsIDB4NTcsCisrICAweDMwLCAweDlELCAweDBELCAweDRBLCAweDA2 LCAweEVCLCAweDUyLCAweDM3LCAweDU1LCAweDU0LCAweDFDLCAweDg5LAorKyAgMHg4MywgMHg3 NSwgMHg1OSwgMHg2NSwgMHg2NCwgMHg5MCwgMHgyRSwgMHgxNiwgMHhDQywgMHg4NiwgMHgwNSwg MHhFRSwKKysgIDB4QjEsIDB4RTYsIDB4N0IsIDB4QkEsIDB4MTYsIDB4NzUsIDB4MEQsIDB4MEMs IDB4NjQsIDB4MEIsIDB4QUIsIDB4MjIsCisrICAweDE1LCAweDc4LCAweDZCLCAweDZGLCAweEE0 LCAweEZCLCAweDc3LCAweDQwLCAweDY0LCAweDYyLCAweEQxLCAweEI1LAorKyAgMHgzNywgMHgx RSwgMHhFMCwgMHgzRCwgMHhBOCwgMHhGOSwgMHhEMiwgMHhCRCwgMHhBQSwgMHgzOCwgMHgyNCwg MHg0OSwKKysgIDB4NTgsIDB4RDIsIDB4NzQsIDB4ODUsIDB4RjQsIDB4QjUsIDB4OTMsIDB4OEUs IDB4RjUsIDB4MDMsIDB4RUEsIDB4MkQsCisrICAweEM4LCAweDUyLCAweEZBLCAweENGLCAweDdF LCAweDM1LCAweEIwLCAweDZBLCAweEFGLCAweDk1LCAweEMwLCAweDAwLAorKyAgMHg1NCwgMHg3 NiwgMHgzRCwgMHgwQywgMHg5QywgMHhCMiwgMHhFRSwgMHhDMAorK307CisrCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjU2W10gPSB7CisrICAweDZELCAweDNE LCAweEJFLCAweDhGLCAweDYwLCAweDZELCAweDI1LCAweDE0LCAweEYwLCAweDMxLCAweEUzLCAw eDg5LAorKyAgMHgwMCwgMHg5NywgMHhGQSwgMHg5OSwgMHg3MSwgMHgyOCwgMHhFNSwgMHgxMCwg MHgyNSwgMHg5QSwgMHhGMywgMHg4RiwKKysgIDB4N0IsIDB4QzUsIDB4QTgsIDB4NEEsIDB4NzQs IDB4NTEsIDB4MzYsIDB4RTIsIDB4OEQsIDB4N0QsIDB4NzMsIDB4MjgsCisrICAweEMxLCAweDc3 LCAweEM2LCAweDI3LCAweDk3LCAweDAwLCAweDhCLCAweDAwLCAweEEzLCAweDk2LCAweDczLCAw eDRFLAorKyAgMHg3RCwgMHgyRSwgMHgyQywgMHgzNCwgMHg2OCwgMHg4QywgMHg4RSwgMHhERiwg MHg5RCwgMHg0OSwgMHg0NywgMHgwNSwKKysgIDB4QUIsIDB4RjUsIDB4MDEsIDB4RDYsIDB4ODEs IDB4NDcsIDB4NzAsIDB4RjUsIDB4MUQsIDB4NkQsIDB4MjYsIDB4QkEsCisrICAweDJGLCAweDdB LCAweDU0LCAweDUzLCAweDRFLCAweEVELCAweDcxLCAweEQ5LCAweDVBLCAweEYzLCAweERBLCAw eEI2LAorKyAgMHgwQiwgMHg0NywgMHgzNCwgMHhBRiwgMHg5MCwgMHhEQywgMHhDOCwgMHhEOSwg MHg2RiwgMHg1NiwgMHhDRCwgMHg5RiwKKysgIDB4MjEsIDB4QjcsIDB4N0UsIDB4QUQsIDB4N0Ms IDB4MkYsIDB4NzUsIDB4NTAsIDB4NDcsIDB4MTIsIDB4RTQsIDB4NkQsCisrICAweDVGLCAweEI3 LCAweDAxLCAweERGLCAweEMzLCAweDExLCAweDZDLCAweEE5LCAweDlFLCAweDQ5LCAweEI5LCAw eEY2LAorKyAgMHg3MiwgMHhGNCwgMHhGNiwgMHhFRiwgMHg4OCwgMHgxRSwgMHgyRCwgMHgxQwor K307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMzg0W10g PSB7CisrICAweDQwLCAweEZCLCAweEExLCAweDIxLCAweEY0LCAweEIyLCAweDQwLCAweDlBLCAw eEI0LCAweDMxLCAweEE4LCAweEYyLAorKyAgMHhFQywgMHgxQywgMHhDNCwgMHhDOCwgMHg3Qywg MHgyMiwgMHg2NSwgMHg5QywgMHg1NywgMHg0NSwgMHhDRCwgMHg1RSwKKysgIDB4ODYsIDB4MDAs IDB4RjcsIDB4MjUsIDB4NzgsIDB4REUsIDB4REMsIDB4N0EsIDB4NzEsIDB4NDQsIDB4OUEsIDB4 Q0QsCisrICAweEFBLCAweDI1LCAweEY0LCAweEIyLCAweEZDLCAweEYwLCAweDc1LCAweEQ5LCAw eDJGLCAweDc4LCAweDIzLCAweDdGLAorKyAgMHg2RiwgMHgwMiwgMHhFRiwgMHhDMSwgMHhBRiwg MHhBNiwgMHgyOCwgMHgxNiwgMHgzMSwgMHhEQywgMHg0MiwgMHg2QywKKysgIDB4QjIsIDB4NDQs IDB4RTUsIDB4NEQsIDB4NjYsIDB4QTIsIDB4RTYsIDB4NzEsIDB4RjMsIDB4QUMsIDB4NEYsIDB4 RkIsCisrICAweDkxLCAweENBLCAweEY1LCAweDcwLCAweEVGLCAweDZCLCAweDlELCAweEE0LCAw eEVGLCAweEQ5LCAweDNELCAweDJGLAorKyAgMHgzQSwgMHhCRSwgMHg4OSwgMHgzOCwgMHg1OSwg MHgwMSwgMHhCQSwgMHhEQSwgMHgzMiwgMHhBRCwgMHg0MiwgMHg4OSwKKysgIDB4OTgsIDB4OEIs IDB4MzksIDB4NDQsIDB4RjAsIDB4RkMsIDB4MzgsIDB4QUMsIDB4ODcsIDB4MUYsIDB4Q0EsIDB4 NkYsCisrICAweDQ4LCAweEY2LCAweEFFLCAweEQ3LCAweDQ1LCAweEVFLCAweEFFLCAweDg4LCAw eDBFLCAweDYwLCAweEY0LCAweDU1LAorKyAgMHg0OCwgMHg0NCwgMHhFRSwgMHgxRiwgMHg5MCwg MHgxOCwgMHg0QiwgMHhGMQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X1JTQV9QU1NfU0hBNTEyW10gPSB7CisrICAweDA3LCAweDFFLCAweEQ4LCAweEQ1LCAweDA1LCAw eEU4LCAweEU2LCAweEU2LCAweDU3LCAweEFFLCAweDYzLCAweDhDLAorKyAgMHhDNiwgMHg4Mywg MHhCNywgMHhBMCwgMHg1OSwgMHhCQiwgMHhGMiwgMHhDNiwgMHg4RiwgMHgxMiwgMHg1MywgMHg5 QSwKKysgIDB4OUIsIDB4NTQsIDB4OUUsIDB4QjMsIDB4QzEsIDB4MUQsIDB4MjMsIDB4NEQsIDB4 NTEsIDB4RUQsIDB4OUUsIDB4REQsCisrICAweDRCLCAweEYzLCAweDQ2LCAweDlCLCAweDZCLCAw eEY2LCAweDdDLCAweDI0LCAweDYwLCAweDc5LCAweDIzLCAweDM5LAorKyAgMHgwMSwgMHgxQywg MHg1MSwgMHhDQiwgMHhEOCwgMHhFOSwgMHg5QSwgMHgwMSwgMHg2NywgMHg1RiwgMHhGRSwgMHhE NywKKysgIDB4N0MsIDB4RTMsIDB4N0YsIDB4RUQsIDB4REIsIDB4ODcsIDB4QkIsIDB4RjAsIDB4 M0QsIDB4NzgsIDB4NTUsIDB4NjEsCisrICAweDU3LCAweEUzLCAweDBGLCAweEUzLCAweEQyLCAw eDlELCAweDBDLCAweDJBLCAweDIwLCAweEIwLCAweDg1LCAweDEzLAorKyAgMHhDNSwgMHg0Nywg MHgzNCwgMHgwRCwgMHgzMiwgMHgxNSwgMHhDOCwgMHhBRSwgMHg5QSwgMHg2QSwgMHgzOSwgMHg2 MywKKysgIDB4MkQsIDB4NjAsIDB4RjUsIDB4NEMsIDB4REYsIDB4OEEsIDB4NDgsIDB4NEIsIDB4 QkYsIDB4RjQsIDB4QTgsIDB4RkUsCisrICAweDc2LCAweEYyLCAweDMyLCAweDFCLCAweDlDLCAw eDdDLCAweENBLCAweEZFLCAweDdGLCAweDgwLCAweEMyLCAweDg4LAorKyAgMHg1QywgMHg5Nywg MHg3MCwgMHhCNCwgMHgyNiwgMHhDOSwgMHgxNCwgMHg4QgorK307CisrCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEExW10gPSB7CisrICAweDcxLCAweEVFLCAweDFBLCAw eEMwLCAweEZFLCAweDAxLCAweDkzLCAweDU0LCAweDc5LCAweDVDLCAweEYyLCAweDRDLAorKyAg MHg0QSwgMHhGRCwgMHgxQSwgMHgwNSwgMHg4RiwgMHg2NCwgMHhCMSwgMHg2RCwgMHg2MSwgMHgz MywgMHg4RCwgMHg5QiwKKysgIDB4RTcsIDB4RkQsIDB4NjAsIDB4QTMsIDB4ODMsIDB4QjUsIDB4 QTMsIDB4NTEsIDB4NTUsIDB4NzcsIDB4OTAsIDB4Q0YsCisrICAweERDLCAweDIyLCAweDM3LCAw eDhFLCAweEQwLCAweEUxLCAweEFFLCAweDA5LCAweEUzLCAweDNELCAweDFFLCAweEY4LAorKyAg MHg4MCwgMHhEMSwgMHg4QiwgMHhDMiwgMHhFQywgMHgwQSwgMHhENywgMHg2QiwgMHg4OCwgMHg4 QiwgMHg4QiwgMHhBMSwKKysgIDB4MjAsIDB4MjIsIDB4QkUsIDB4NTksIDB4NUIsIDB4RTAsIDB4 MjMsIDB4MjQsIDB4QTEsIDB4NDksIDB4MzAsIDB4QkEsCisrICAweEE5LCAweDlFLCAweEU4LCAw eEIxLCAweDhBLCAweDYyLCAweDE2LCAweEJGLCAweDRFLCAweENBLCAweDJFLCAweDRFLAorKyAg MHhCQywgMHgyOSwgMHhBOCwgMHg2NywgMHgxMywgMHhCNywgMHg5RiwgMHgxRCwgMHgwNCwgMHg0 NCwgMHhFNSwgMHg1RiwKKysgIDB4MzUsIDB4MDcsIDB4MTEsIDB4QkMsIDB4RUQsIDB4MTksIDB4 MzcsIDB4MjEsIDB4Q0YsIDB4MjMsIDB4NDgsIDB4MUYsCisrICAweDcyLCAweDA1LCAweERFLCAw eEU2LCAweEU4LCAweDdGLCAweDMzLCAweDhBLCAweDc2LCAweDRCLCAweDJGLCAweDk1LAorKyAg MHhERiwgMHhGMSwgMHg1RiwgMHg4NCwgMHg4MCwgMHhEOSwgMHg0NiwgMHhCNAorK307CisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyMjRbXSA9IHsKKysgIDB4NjIs IDB4QUEsIDB4NzksIDB4QTksIDB4MTgsIDB4MEUsIDB4NUYsIDB4OEMsIDB4QkIsIDB4QjcsIDB4 MTUsIDB4RjksCisrICAweDI1LCAweEJCLCAweEZBLCAweEQ0LCAweDNBLCAweDM0LCAweEVELCAw eDlFLCAweEEwLCAweEE5LCAweDE4LCAweDhELAorKyAgMHg1QiwgMHg1NSwgMHg5QSwgMHg3RSwg MHgxRSwgMHgwOCwgMHgwOCwgMHg2MCwgMHhDNSwgMHgxQSwgMHhDNSwgMHg4OSwKKysgIDB4MDgs IDB4RTIsIDB4MUIsIDB4QkQsIDB4NjIsIDB4NTAsIDB4MTcsIDB4NzYsIDB4MzAsIDB4MkMsIDB4 OUUsIDB4Q0QsCisrICAweEE0LCAweDAyLCAweEFELCAweEIxLCAweDZELCAweDQ0LCAweDZELCAw eEQ1LCAweEM2LCAweDQ1LCAweDQxLCAweEU1LAorKyAgMHhFRSwgMHgxRiwgMHg4RCwgMHg3RSwg MHgwOCwgMHgxNiwgMHhBNiwgMHhFMSwgMHg1RSwgMHgwQiwgMHhBOSwgMHhDQywKKysgIDB4REIs IDB4NTksIDB4NTUsIDB4ODcsIDB4MDksIDB4MjUsIDB4NzAsIDB4ODYsIDB4ODQsIDB4MDIsIDB4 QzYsIDB4M0IsCisrICAweDBCLCAweDQ0LCAweDRDLCAweDQ2LCAweDk1LCAweEY0LCAweEY4LCAw eDVBLCAweDkxLCAweDI4LCAweDNFLCAweEIyLAorKyAgMHg1OCwgMHgyRSwgMHgwNiwgMHg0NSwg MHg0OSwgMHhFMCwgMHg5MiwgMHhFMiwgMHhDMCwgMHg2NiwgMHhFNiwgMHgzNSwKKysgIDB4RDks IDB4NzksIDB4N0YsIDB4MTcsIDB4NUUsIDB4MDIsIDB4NzMsIDB4MDQsIDB4NzcsIDB4ODIsIDB4 RTYsIDB4REMsCisrICAweDQwLCAweDIxLCAweDg5LCAweDhCLCAweDM3LCAweDNFLCAweDFFLCAw eDhECisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTI1Nltd ID0geworKyAgMHgwRCwgMHg1NSwgMHhFMiwgMHhBQSwgMHg4MSwgMHhEQiwgMHg4RSwgMHg4Miwg MHgwNSwgMHgxNywgMHhBNSwgMHgyMywKKysgIDB4RTcsIDB4M0IsIDB4MUQsIDB4QUYsIDB4RkIs IDB4OEMsIDB4RDAsIDB4ODEsIDB4MjAsIDB4N0IsIDB4QUEsIDB4MjMsCisrICAweDkyLCAweDg3 LCAweDhDLCAweEQxLCAweDUzLCAweDg1LCAweDE2LCAweERDLCAweEJFLCAweEFELCAweDZGLCAw eDM1LAorKyAgMHg5OCwgMHgyRCwgMHg2OSwgMHg4NCwgMHhCRiwgMHhEOSwgMHg4QSwgMHgwMSwg MHgxNywgMHg1OCwgMHhCMiwgMHg2RSwKKysgIDB4MkMsIDB4NDQsIDB4OUIsIDB4OTAsIDB4RjEs IDB4RkIsIDB4NTEsIDB4RTgsIDB4NkEsIDB4OTAsIDB4MkQsIDB4MTgsCisrICAweDBFLCAweEMw LCAweDkwLCAweDEwLCAweDI0LCAweEE5LCAweDFELCAweEIzLCAweDU4LCAweDdBLCAweDkxLCAw eDMwLAorKyAgMHhCRSwgMHgyMiwgMHhDNywgMHhEMywgMHhFQywgMHhDMywgMHgwOSwgMHg1RCwg MHhCRiwgMHhFMiwgMHg4MCwgMHgzQSwKKysgIDB4N0MsIDB4ODUsIDB4QjQsIDB4QkMsIDB4RDEs IDB4RTksIDB4RjAsIDB4NUMsIDB4REUsIDB4ODEsIDB4QTYsIDB4MzgsCisrICAweEI4LCAweDQy LCAweEJCLCAweDg2LCAweEM1LCAweDlELCAweENFLCAweDdDLCAweDJDLCAweEVFLCAweEQxLCAw eERBLAorKyAgMHgyNywgMHg0OCwgMHgyQiwgMHhGNSwgMHhBQiwgMHhCOSwgMHhGNywgMHg4MCwg MHhEMSwgMHg5MCwgMHgyNywgMHg5MCwKKysgIDB4QkQsIDB4NDQsIDB4OTcsIDB4NjAsIDB4Q0Qs IDB4NTcsIDB4QzAsIDB4N0EKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGth dF9SU0FfU0hBMzg0W10gPSB7CisrICAweDFELCAweEUzLCAweDZBLCAweERELCAweDI3LCAweDRD LCAweEMwLCAweEE1LCAweDI3LCAweEVGLCAweEU2LCAweDFGLAorKyAgMHhEMiwgMHg5MSwgMHg2 OCwgMHg1OSwgMHgwNCwgMHhBRSwgMHhCRCwgMHg5OSwgMHg2MywgMHg1NiwgMHg0NywgMHhDNywK KysgIDB4NkYsIDB4MjIsIDB4MTYsIDB4NDgsIDB4RDAsIDB4RjksIDB4MTgsIDB4QTksIDB4Q0Es IDB4RkEsIDB4NUQsIDB4NUMsCisrICAweEE3LCAweDY1LCAweDUyLCAweDhBLCAweEM4LCAweDQ0 LCAweDdFLCAweDg2LCAweDVELCAweEE5LCAweEE2LCAweDU1LAorKyAgMHg2NSwgMHgzRSwgMHhE OSwgMHgyRCwgMHgwMiwgMHgzOCwgMHhBOCwgMHg3OSwgMHgyOCwgMHg3RiwgMHhCNiwgMHhDRiwK KysgIDB4ODIsIDB4REQsIDB4N0UsIDB4NTUsIDB4RTEsIDB4QjEsIDB4QkMsIDB4RTIsIDB4MTks IDB4MkIsIDB4MzAsIDB4QzIsCisrICAweDFCLCAweDJCLCAweEIwLCAweDgyLCAweDQ2LCAweEFD LCAweDRCLCAweEQxLCAweEUyLCAweDdELCAweEVCLCAweDhDLAorKyAgMHhGRiwgMHg5NSwgMHhF OSwgMHg2QSwgMHgxQywgMHgzRCwgMHg0RCwgMHhCRiwgMHg4RiwgMHg4QiwgMHg5QywgMHhDRCwK KysgIDB4RUEsIDB4ODUsIDB4RUUsIDB4MDAsIDB4REMsIDB4MUMsIDB4QTcsIDB4RUIsIDB4RDAs IDB4OEYsIDB4OTksIDB4RjEsCisrICAweDE2LCAweDI4LCAweDI0LCAweDY0LCAweDA0LCAweDM5 LCAweDJELCAweDU4LCAweDFFLCAweDM3LCAweERDLCAweDA0LAorKyAgMHhCRCwgMHgzMSwgMHhB MiwgMHgyRiwgMHhCMywgMHgzNSwgMHg1NiwgMHhCRgorK307CisrCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIga2F0X1JTQV9TSEE1MTJbXSA9IHsKKysgIDB4NjksIDB4NTIsIDB4MUIsIDB4 NTEsIDB4NUUsIDB4MDYsIDB4Q0EsIDB4OUIsIDB4MTYsIDB4NTEsIDB4NUQsIDB4Q0YsCisrICAw eDQ5LCAweDI1LCAweDRBLCAweEExLCAweDZBLCAweDc3LCAweDRDLCAweDM2LCAweDQwLCAweEY4 LCAweEIyLCAweDlBLAorKyAgMHgxNSwgMHhFQSwgMHg1QywgMHhFNSwgMHhFNiwgMHg4MiwgMHhF MCwgMHg4NiwgMHg4MiwgMHg2QiwgMHgzMiwgMHhGMSwKKysgIDB4MDQsIDB4QzEsIDB4NUEsIDB4 MUEsIDB4RUQsIDB4MUUsIDB4OUEsIDB4QjYsIDB4NEMsIDB4NTQsIDB4OUYsIDB4RDgsCisrICAw eDhELCAweENDLCAweEFDLCAweDhBLCAweEJCLCAweDlDLCAweDgyLCAweDNGLCAweEE2LCAweDUz LCAweDYyLCAweEI1LAorKyAgMHg4MCwgMHhFMiwgMHhCQywgMHhERCwgMHg2NywgMHgyQiwgMHhE OSwgMHgzRiwgMHhFNCwgMHg3NSwgMHg5MiwgMHg2QiwKKysgIDB4QUYsIDB4NjIsIDB4N0MsIDB4 NTIsIDB4RjAsIDB4RUUsIDB4MzMsIDB4REYsIDB4MUIsIDB4MUQsIDB4NDcsIDB4RTYsCisrICAw eDU5LCAweDU2LCAweEE1LCAweEI5LCAweDVDLCAweEU2LCAweDc3LCAweDc4LCAweDE2LCAweDYz LCAweDg0LCAweDA1LAorKyAgMHg2RiwgMHgwRSwgMHgyQiwgMHgzMSwgMHg5RCwgMHhGNywgMHg3 RiwgMHhCMiwgMHg2NCwgMHg3MSwgMHhFMCwgMHgyRCwKKysgIDB4M0UsIDB4NjIsIDB4Q0UsIDB4 QjUsIDB4M0YsIDB4ODgsIDB4REYsIDB4MkQsIDB4QUIsIDB4OTgsIDB4NjUsIDB4OTEsCisrICAw eERGLCAweDcwLCAweDE0LCAweEE1LCAweDNGLCAweDM2LCAweEFCLCAweDg0CisrfTsKKysKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMVtdID0geworKyAgMHg4 NiwgMHhCNCwgMHgxOCwgMHhCQSwgMHhEMSwgMHg4MCwgMHhCNiwgMHg3QywgMHg0MiwgMHg0NSwg MHg0RCwgMHhERiwKKysgIDB4RTksIDB4MkQsIDB4RTEsIDB4ODMsIDB4NUYsIDB4QjUsIDB4MkYs IDB4QzksIDB4Q0QsIDB4QzQsIDB4QjIsIDB4NzUsCisrICAweDgwLCAweEE0LCAweEYxLCAweDRB LCAweEU3LCAweDgzLCAweDEyLCAweDFFLCAweDFFLCAweDE0LCAweEI4LCAweEFDLAorKyAgMHgz NSwgMHhFMiwgMHhBQSwgMHgwQiwgMHg1QywgMHhGOCwgMHgzOCwgMHg0RCwgMHgwNCwgMHhFRSwg MHhBOSwgMHg5NywKKysgIDB4NzAsIDB4RkIsIDB4NUUsIDB4RTcsIDB4QjcsIDB4RTMsIDB4NjIs IDB4MjMsIDB4NEIsIDB4MzgsIDB4QkUsIDB4RDYsCisrICAweDUzLCAweDE1LCAweEY3LCAweERG LCAweDg3LCAweEI0LCAweDBFLCAweENDLCAweEIxLCAweDFBLCAweDExLCAweDE5LAorKyAgMHhF RSwgMHg1MSwgMHhDQywgMHg5MiwgMHhERCwgMHhCQywgMHg2MywgMHgyOSwgMHg2MywgMHgwQywg MHg1OSwgMHhENywKKysgIDB4NkYsIDB4NEMsIDB4M0MsIDB4MzcsIDB4NUIsIDB4MzcsIDB4MDMs IDB4NjEsIDB4N0QsIDB4MjQsIDB4MUMsIDB4OTksCisrICAweDQ4LCAweEFGLCAweDgyLCAweEZF LCAweDMyLCAweDQxLCAweDlCLCAweEIyLCAweERCLCAweEVBLCAweEVELCAweDc2LAorKyAgMHg4 RSwgMHg2RSwgMHhDQSwgMHg3RSwgMHg0RSwgMHgxNCwgMHhCQSwgMHgzMCwgMHg4NCwgMHgxQywg MHhCMywgMHg2NywKKysgIDB4QTMsIDB4MjksIDB4ODAsIDB4NzAsIDB4NTQsIDB4NjgsIDB4N0Qs IDB4NDkKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9T SEEyNTZbXSA9IHsKKysgIDB4N0UsIDB4QTIsIDB4NzcsIDB4RkUsIDB4QjgsIDB4NTQsIDB4OEEs IDB4QzcsIDB4N0YsIDB4NjQsIDB4NTQsIDB4ODksCisrICAweEU1LCAweDUyLCAweDE1LCAweDhF LCAweDUyLCAweDk2LCAweDRFLCAweEE2LCAweDU4LCAweDkyLCAweDFDLCAweERELAorKyAgMHhF QSwgMHhBMiwgMHgyRCwgMHg1QywgMHhEMSwgMHg2MiwgMHgwMCwgMHg0OSwgMHgwNSwgMHg5NSwg MHg3MywgMHhDRiwKKysgIDB4MTYsIDB4NzYsIDB4NjgsIDB4RjYsIDB4QzYsIDB4NUUsIDB4ODAs IDB4QjgsIDB4QjgsIDB4N0IsIDB4QzgsIDB4OUIsCisrICAweEM2LCAweDUzLCAweDg4LCAweDI2 LCAweDIwLCAweDg4LCAweDczLCAweEI2LCAweDEzLCAweEI4LCAweEYwLCAweDRCLAorKyAgMHgw MCwgMHg4NSwgMHhGMywgMHhERCwgMHgwNywgMHg1MCwgMHhFQiwgMHgyMCwgMHhDNCwgMHgzOCwg MHgwRSwgMHg5OCwKKysgIDB4QUQsIDB4NEUsIDB4NDksIDB4MkMsIDB4RDcsIDB4NjUsIDB4QTUs IDB4MTksIDB4MEUsIDB4NTksIDB4MDEsIDB4RUMsCisrICAweDdFLCAweDc1LCAweDg5LCAweDY5 LCAweDJFLCAweDYzLCAweDc2LCAweDg1LCAweDQ2LCAweDhELCAweEEwLCAweDhDLAorKyAgMHgz MywgMHgxRCwgMHg4MiwgMHg4QywgMHgwMywgMHhFQSwgMHg2OSwgMHg4OCwgMHgzNSwgMHhBMSwg MHg0MiwgMHhCRCwKKysgIDB4MjEsIDB4RUQsIDB4OEQsIDB4QkMsIDB4QkMsIDB4REIsIDB4MzAs IDB4RkYsIDB4ODYsIDB4RjAsIDB4NUIsIDB4REMsCisrICAweEUzLCAweEUyLCAweEU4LCAweDBB LCAweDBBLCAweDI5LCAweDk0LCAweDgwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBrYXRfUlNBX1g5MzFfU0hBMzg0W10gPSB7CisrICAweDVDLCAweDdELCAweDk2LCAweDM1 LCAweEVDLCAweDdFLCAweDExLCAweDM4LCAweEJCLCAweDdCLCAweEVDLCAweDdCLAorKyAgMHhG MiwgMHg4MiwgMHg4RSwgMHg5OSwgMHhCRCwgMHhFRiwgMHhEOCwgMHhBRSwgMHhENywgMHgzOSwg MHgzNywgMHhDQiwKKysgIDB4RTYsIDB4NEYsIDB4NUUsIDB4MEEsIDB4MTMsIDB4RTQsIDB4MkUs IDB4NDAsIDB4QjksIDB4QkUsIDB4MkUsIDB4RTMsCisrICAweEVGLCAweDc4LCAweDgzLCAweDE4 LCAweDQ0LCAweDM1LCAweDlDLCAweDhFLCAweEQ3LCAweDRBLCAweDYzLCAweEY2LAorKyAgMHg1 NywgMHhDMiwgMHhCMCwgMHgwOCwgMHg1MSwgMHg3MywgMHhDRiwgMHhDQSwgMHg5OSwgMHg2Niwg MHhFRSwgMHgzMSwKKysgIDB4RDgsIDB4NjksIDB4RTksIDB4QUIsIDB4MTMsIDB4MjcsIDB4N0Is IDB4NDEsIDB4MUUsIDB4NkQsIDB4OEQsIDB4RjEsCisrICAweDNFLCAweDlDLCAweDM1LCAweDk1 LCAweDU4LCAweERELCAweDJCLCAweEQ1LCAweEEwLCAweDYwLCAweDQxLCAweDc5LAorKyAgMHgy NCwgMHgyMiwgMHhFNCwgMHhCNywgMHhCRiwgMHg0NywgMHg1MywgMHhGNiwgMHgzNCwgMHhENSwg MHg3QywgMHhGRiwKKysgIDB4MEUsIDB4MDksIDB4RUUsIDB4MkUsIDB4RTIsIDB4MzcsIDB4Qjks IDB4REUsIDB4QzUsIDB4MTIsIDB4NDQsIDB4MzUsCisrICAweEVGLCAweDAxLCAweEU2LCAweDVF LCAweDM5LCAweDMxLCAweDJELCAweDcxLCAweEE1LCAweERDLCAweEM2LCAweDZELAorKyAgMHhF MiwgMHhDRCwgMHg4NSwgMHhEQiwgMHg3MywgMHg4MiwgMHg2NSwgMHgyOAorK307CisrCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTUxMltdID0geworKyAgMHhB NiwgMHg2NSwgMHhBMiwgMHg3NywgMHg0RiwgMHhCMywgMHg4NiwgMHhDQiwgMHg2NCwgMHgzQSwg MHhDMSwgMHg2MywKKysgIDB4RkMsIDB4QTEsIDB4QUEsIDB4Q0IsIDB4OUIsIDB4NzksIDB4REQs IDB4NEIsIDB4RTEsIDB4RDksIDB4REEsIDB4QUMsCisrICAweEU3LCAweDQ3LCAweDA5LCAweEIy LCAweDExLCAweDRCLCAweDhBLCAweEFBLCAweDA1LCAweDlFLCAweDc3LCAweEQ3LAorKyAgMHgz QSwgMHhCRCwgMHg1RSwgMHg1MywgMHgwOSwgMHg0QSwgMHhFNiwgMHgwRiwgMHg1RSwgMHhGOSwg MHgxNCwgMHgyOCwKKysgIDB4QTAsIDB4OTksIDB4NzQsIDB4NjQsIDB4NzAsIDB4NEUsIDB4RjIs IDB4RTMsIDB4RkEsIDB4QzcsIDB4RjgsIDB4QzUsCisrICAweDZFLCAweDJCLCAweDc5LCAweDk2 LCAweDBELCAweDBDLCAweEM4LCAweDEwLCAweDM0LCAweDUzLCAweEQyLCAweEFGLAorKyAgMHgx NywgMHgwRSwgMHhFMCwgMHhCRiwgMHg3OSwgMHhGNiwgMHgwNCwgMHg3MiwgMHgxMCwgMHhFMCwg MHhGNiwgMHhEMCwKKysgIDB4Q0UsIDB4OEEsIDB4NkYsIDB4QTEsIDB4OTUsIDB4ODksIDB4QkYs IDB4NTgsIDB4OEYsIDB4NDYsIDB4NUYsIDB4MDksCisrICAweDlGLCAweDA5LCAweENBLCAweDg0 LCAweDE1LCAweDg1LCAweEUwLCAweEVELCAweDA0LCAweDJELCAweEZCLCAweDdDLAorKyAgMHgz NiwgMHgzNSwgMHgyMSwgMHgzMSwgMHhDMywgMHhGRCwgMHg5MiwgMHg0MiwgMHgxMSwgMHgzMCwg MHg3MSwgMHgxQiwKKysgIDB4NjAsIDB4ODMsIDB4MTgsIDB4ODgsIDB4QTMsIDB4RjUsIDB4NTks IDB4QzMKKyt9OworKworKworK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSgpCisrCXsKKysJaW50IHJl dCA9IDA7CisrCVJTQSAqa2V5OworKwlFVlBfUEtFWSAqcGsgPSBOVUxMOworKworKwlpZiAoKGtl eT1SU0FfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJc2V0cnNha2V5KGtleSk7Cisr CWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJRVZQ X1BLRVlfYXNzaWduX1JTQShwaywga2V5KTsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hB MSwgc2l6ZW9mKGthdF9SU0FfU0hBMSksCisrCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxB R19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMSBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlp ZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMp IC0gMSwKKysJCQkJa2F0X1JTQV9TSEEyMjQsIHNpemVvZihrYXRfUlNBX1NIQTIyNCksCisrCQkJ CUVWUF9zaGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEEy MjQgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMjU2 LCBzaXplb2Yoa2F0X1JTQV9TSEEyNTYpLAorKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhf RkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMjU2IFBLQ1MjMSIpKQorKwkJZ290byBlcnI7 CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0 X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfU0hBMzg0KSwK KysJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNB IFNIQTM4NCBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9T SEE1MTIsIHNpemVvZihrYXRfUlNBX1NIQTUxMiksCisrCQkJCUVWUF9zaGE1MTIoKSwgRVZQX01E X0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEE1MTIgUEtDUyMxIikpCisrCQlnb3Rv IGVycjsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTEsIHNpemVvZihrYXRfUlNB X1BTU19TSEExKSwKKysJCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisr CQkJCSJSU0EgU0hBMSBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JT QV9QU1NfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjI0KSwKKysJCQkJRVZQX3NoYTIy NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEEyMjQgUFNTIikpCisr CQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMs IHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTI1Niwgc2l6ZW9mKGth dF9SU0FfUFNTX1NIQTI1NiksCisrCQkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BB RF9QU1MsCisrCQkJCSJSU0EgU0hBMjU2IFBTUyIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAor KwkJCQlrYXRfUlNBX1BTU19TSEEzODQsIHNpemVvZihrYXRfUlNBX1BTU19TSEEzODQpLAorKwkJ CQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTM4 NCBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBNTEy LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBNTEyKSwKKysJCQkJRVZQX3NoYTUxMigpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEE1MTIgUFNTIikpCisrCQlnb3RvIGVycjsK KysKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVv ZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NIQTEsIHNpemVvZihrYXRfUlNBX1g5 MzFfU0hBMSksCisrCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJ CSJSU0EgU0hBMSBYOTMxIikpCisrCQlnb3RvIGVycjsKKysJLyogTkI6IFNIQTIyNCBub3Qgc3Vw cG9ydGVkIGluIFg5LjMxICovCisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBr YXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9TSEEyNTYsIHNp emVvZihrYXRfUlNBX1g5MzFfU0hBMjU2KSwKKysJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhf RkxBR19QQURfWDkzMSwKKysJCQkiUlNBIFNIQTI1NiBYOTMxIikpCisrCQlnb3RvIGVycjsKKysJ aWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJz KSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEz ODQpLAorKwkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJS U0EgU0hBMzg0IFg5MzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5 MzFfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTUxMiksCisrCQkJRVZQX3NoYTUxMigp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEE1MTIgWDkzMSIpKQorKwkJ Z290byBlcnI7CisrCisrCisrCXJldCA9IDE7CisrCisrCWVycjoKKysJaWYgKHBrKQorKwkJRVZQ X1BLRVlfZnJlZShwayk7CisrCWVsc2UgaWYgKGtleSkKKysJCVJTQV9mcmVlKGtleSk7CisrCXJl dHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQUyAqLworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMKKy0tLSBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjozMC4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX3JzYV94 OTMxZy5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDI4 MSBAQAorKy8qIGNyeXB0by9yc2EvcnNhX2dlbi5jICovCisrLyogQ29weXJpZ2h0IChDKSAxOTk1 LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3Jp dHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1w bGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBT U0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5v bi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25z IGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8g YWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwK KysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUg U1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlz IGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhl IGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29w eXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5v dGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhp cyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZl biBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJy YXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3Nh Z2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9y IHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisrICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29m dHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSki CisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUg cm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0 b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mg c3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisrICogICAgdGhl IGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFj a25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdy aXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisrICogQU5Z IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAq IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsg TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3Ry aWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysg KiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBj b2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRp c3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNl Ll0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+Cisr I2luY2x1ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrZXh0ZXJuIGludCBmaXBzX2No ZWNrX3JzYShSU0EgKnJzYSk7CisrI2VuZGlmCisrCisrLyogWDkuMzEgUlNBIGtleSBkZXJpdmF0 aW9uIGFuZCBnZW5lcmF0aW9uICovCisrCisraW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJz YSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKKysJCQlj b25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCisr CQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhx LAorKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQorKwl7CisrCUJJR05VTSAqcjA9 TlVMTCwqcjE9TlVMTCwqcjI9TlVMTCwqcjM9TlVMTDsKKysJQk5fQ1RYICpjdHg9TlVMTCwqY3R4 Mj1OVUxMOworKworKwlpZiAoIXJzYSkgCisrCQlnb3RvIGVycjsKKysKKysJY3R4ID0gQk5fQ1RY X25ldygpOworKwlpZiAoIWN0eCkgCisrCQlnb3RvIGVycjsKKysJQk5fQ1RYX3N0YXJ0KGN0eCk7 CisrCisrCXIwID0gQk5fQ1RYX2dldChjdHgpOworKwlyMSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJ cjIgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCXIzID0gQk5fQ1RYX2dldChjdHgpOworKworKwlpZiAo cjMgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIXJzYS0+ZSkKKysJCXsKKysJCXJzYS0+ ZSA9IEJOX2R1cChlKTsKKysJCWlmICghcnNhLT5lKQorKwkJCWdvdG8gZXJyOworKwkJfQorKwll bHNlCisrCQllID0gcnNhLT5lOworKworKwkvKiBJZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2Vu dCBvbmx5IGNhbGN1bGF0ZSB3aGF0IHdlIGNhbi4KKysJICogVGhpcyBhbGxvd3MgdGVzdCBwcm9n cmFtcyB0byBvdXRwdXQgc2VsZWN0aXZlIHBhcmFtZXRlcnMuCisrCSAqLworKworKwlpZiAoWHAg JiYgIXJzYS0+cCkKKysJCXsKKysJCXJzYS0+cCA9IEJOX25ldygpOworKwkJaWYgKCFyc2EtPnAp CisrCQkJZ290byBlcnI7CisrCisrCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+ cCwgcDEsIHAyLAorKwkJCQkJWHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNiKSkKKysJCQlnb3RvIGVy cjsKKysJCX0KKysKKysJaWYgKFhxICYmICFyc2EtPnEpCisrCQl7CisrCQlyc2EtPnEgPSBCTl9u ZXcoKTsKKysJCWlmICghcnNhLT5xKQorKwkJCWdvdG8gZXJyOworKwkJaWYgKCFCTl9YOTMxX2Rl cml2ZV9wcmltZV9leChyc2EtPnEsIHExLCBxMiwKKysJCQkJCVhxLCBYcTEsIFhxMiwgZSwgY3R4 LCBjYikpCisrCQkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICghcnNhLT5wIHx8ICFyc2EtPnEp CisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJcmV0 dXJuIDI7CisrCQl9CisrCisrCS8qIFNpbmNlIGJvdGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5v dyBjYWxjdWxhdGUgYWxsIHJlbWFpbmluZyAKKysJICogY29tcG9uZW50cy4KKysJICovCisrCisr CS8qIGNhbGN1bGF0ZSBuICovCisrCXJzYS0+bj1CTl9uZXcoKTsKKysJaWYgKHJzYS0+biA9PSBO VUxMKQorKwkJZ290byBlcnI7CisrCWlmICghQk5fbXVsKHJzYS0+bixyc2EtPnAscnNhLT5xLGN0 eCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGQgKi8KKysJaWYgKCFCTl9zdWIo cjEscnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8gZXJyOwkvKiBwLTEgKi8KKysJaWYg KCFCTl9zdWIocjIscnNhLT5xLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8gZXJyOwkvKiBxLTEg Ki8KKysJaWYgKCFCTl9tdWwocjAscjEscjIsY3R4KSkKKysJCWdvdG8gZXJyOwkvKiAocC0xKShx LTEpICovCisrCisrCWlmICghQk5fZ2NkKHIzLCByMSwgcjIsIGN0eCkpCisrCQlnb3RvIGVycjsK KysKKysJaWYgKCFCTl9kaXYocjAsIE5VTEwsIHIwLCByMywgY3R4KSkKKysJCWdvdG8gZXJyOwkv KiBMQ00oKHAtMSkocS0xKSkgKi8KKysKKysJY3R4MiA9IEJOX0NUWF9uZXcoKTsKKysJaWYgKCFj dHgyKQorKwkJZ290byBlcnI7CisrCisrCXJzYS0+ZD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+ ZSxyMCxjdHgyKTsJLyogZCAqLworKwlpZiAocnNhLT5kID09IE5VTEwpCisrCQlnb3RvIGVycjsK KysKKysJLyogY2FsY3VsYXRlIGQgbW9kIChwLTEpICovCisrCXJzYS0+ZG1wMT1CTl9uZXcoKTsK KysJaWYgKHJzYS0+ZG1wMSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghQk5fbW9kKHJz YS0+ZG1wMSxyc2EtPmQscjEsY3R4KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUg ZCBtb2QgKHEtMSkgKi8KKysJcnNhLT5kbXExPUJOX25ldygpOworKwlpZiAocnNhLT5kbXExID09 IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tb2QocnNhLT5kbXExLHJzYS0+ZCxyMixj dHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAg Ki8KKysJcnNhLT5pcW1wPUJOX21vZF9pbnZlcnNlKE5VTEwscnNhLT5xLHJzYS0+cCxjdHgyKTsK KysKKysJZXJyOgorKwlpZiAoY3R4KQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgpOworKwkJQk5f Q1RYX2ZyZWUoY3R4KTsKKysJCX0KKysJaWYgKGN0eDIpCisrCQlCTl9DVFhfZnJlZShjdHgyKTsK KysJLyogSWYgdGhpcyBpcyBzZXQgYWxsIGNhbGxzIHN1Y2Nlc3NmdWwgKi8KKysJaWYgKHJzYSAm JiByc2EtPmlxbXAgIT0gTlVMTCkKKysJCXJldHVybiAxOworKworKwlyZXR1cm4gMDsKKysKKysJ fQorKworK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBj b25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKKysJeworKwlpbnQgb2sgPSAwOworKwlCSUdO VU0gKlhwID0gTlVMTCwgKlhxID0gTlVMTDsKKysJQk5fQ1RYICpjdHggPSBOVUxMOworKworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RV TFVTX0JJVFMpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFU RV9LRVlfRVgsRklQU19SX0tFWV9UT09fU0hPUlQpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9 CisrCisrCWlmIChiaXRzICYgMHhmZikKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX1JT QV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKTsKKysJICAg IHJldHVybiAwOworKwkgICAgfQorKworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkg ICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNf Ul9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysjZW5k aWYKKysKKysJY3R4ID0gQk5fQ1RYX25ldygpOworKwlpZiAoIWN0eCkKKysJCWdvdG8gZXJyb3I7 CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwlYcCA9IEJOX0NUWF9nZXQoY3R4KTsKKysJWHEg PSBCTl9DVFhfZ2V0KGN0eCk7CisrCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9YcHEoWHAsIFhxLCBi aXRzLCBjdHgpKQorKwkJZ290byBlcnJvcjsKKysKKysJcnNhLT5wID0gQk5fbmV3KCk7CisrCXJz YS0+cSA9IEJOX25ldygpOworKwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQorKwkJZ290byBlcnJv cjsKKysKKysJLyogR2VuZXJhdGUgdHdvIHByaW1lcyBmcm9tIFhwLCBYcSAqLworKworKwlpZiAo IUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5wLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBYcCwKKysJCQkJCWUsIGN0eCwgY2IpKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFCTl9Y OTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHEs CisrCQkJCQllLCBjdHgsIGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCS8qIFNpbmNlIHJzYS0+ cCBhbmQgcnNhLT5xIGFyZSB2YWxpZCB0aGlzIGNhbGwgd2lsbCBqdXN0IGRlcml2ZQorKwkgKiBy ZW1haW5pbmcgUlNBIGNvbXBvbmVudHMuCisrCSAqLworKworKwlpZiAoIVJTQV9YOTMxX2Rlcml2 ZV9leChyc2EsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisrCQkJCU5VTEwsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIGUsIGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlpZighZmlwc19jaGVja19yc2EocnNhKSkKKysJICAgIGdvdG8gZXJyb3I7 CisrI2VuZGlmCisrCisrCW9rID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChjdHgpCisrCQl7Cisr CQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJfQorKworKwlpZiAo b2spCisrCQlyZXR1cm4gMTsKKysKKysJcmV0dXJuIDA7CisrCisrCX0KK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfc2hhMV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vZmlwcy9maXBzX3NoYTFfc2VsZnRlc3QuYy5maXBzCTIwMTItMDEtMDUgMTM6MjI6 MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19z aGExX3NlbGZ0ZXN0LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0w LDAgKzEsOTkgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysg KiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisr ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3Ry aW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBT Cisrc3RhdGljIGNoYXIgdGVzdFtdWzYwXT0KKysgICAgeworKyAgICAiIiwKKysgICAgImFiYyIs CisrICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9t bm9wbm9wcSIKKysgICAgfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXRbXVtT SEFfRElHRVNUX0xFTkdUSF09CisrICAgIHsKKysgICAgeyAweGRhLDB4MzksMHhhMywweGVlLDB4 NWUsMHg2YiwweDRiLDB4MGQsMHgzMiwweDU1LAorKyAgICAgIDB4YmYsMHhlZiwweDk1LDB4NjAs MHgxOCwweDkwLDB4YWYsMHhkOCwweDA3LDB4MDkgfSwKKysgICAgeyAweGE5LDB4OTksMHgzZSww eDM2LDB4NDcsMHgwNiwweDgxLDB4NmEsMHhiYSwweDNlLAorKyAgICAgIDB4MjUsMHg3MSwweDc4 LDB4NTAsMHhjMiwweDZjLDB4OWMsMHhkMCwweGQ4LDB4OWQgfSwKKysgICAgeyAweDg0LDB4OTgs MHgzZSwweDQ0LDB4MWMsMHgzYiwweGQyLDB4NmUsMHhiYSwweGFlLAorKyAgICAgIDB4NGEsMHhh MSwweGY5LDB4NTEsMHgyOSwweGU1LDB4ZTUsMHg0NiwweDcwLDB4ZjEgfSwKKysgICAgfTsKKysK Kyt2b2lkIEZJUFNfY29ycnVwdF9zaGExKCkKKysgICAgeworKyAgICB0ZXN0WzJdWzBdKys7Cisr ICAgIH0KKysKKytpbnQgRklQU19zZWxmdGVzdF9zaGExKCkKKysgICAgeworKyAgICBpbnQgbjsK KysKKysgICAgZm9yKG49MCA7IG48c2l6ZW9mKHRlc3QpL3NpemVvZih0ZXN0WzBdKSA7ICsrbikK KysJeworKwl1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsKKysKKysJRVZQX0Rp Z2VzdCh0ZXN0W25dLHN0cmxlbih0ZXN0W25dKSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCk7 CisrCWlmKG1lbWNtcChtZCxyZXRbbl0sc2l6ZW9mIG1kKSkKKysJICAgIHsKKysJICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJ ICAgIHJldHVybiAwOworKwkgICAgfQorKwl9CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisr I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxv bmVfc2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25l X3NoYTEuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9z aGExLmMuZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMJMjAxMi0wMS0wNSAx MzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTczIEBACisrLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUg bWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisr ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29y ZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisr ICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisr ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5o PgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4K KysKKysjaWZuZGVmIEZJUFNDQU5JU1RFUl9PCisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkg eyByZXR1cm4gMDsgfQorK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjaygpIHt9Cisrdm9pZCBPUEVO U1NMX2NsZWFuc2Uodm9pZCAqcCxzaXplX3QgbGVuKSB7fQorKyNlbmRpZgorKworKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgdm9pZCBobWFjX2luaXQoU0hBX0NUWCAqbWRfY3R4LFNI QV9DVFggKm9fY3R4LAorKwkJICAgICAgY29uc3QgY2hhciAqa2V5KQorKyAgICB7CisrICAgIHNp emVfdCBsZW49c3RybGVuKGtleSk7CisrICAgIGludCBpOworKyAgICB1bnNpZ25lZCBjaGFyIGtl eW1kW0hNQUNfTUFYX01EX0NCTE9DS107CisrICAgIHVuc2lnbmVkIGNoYXIgcGFkW0hNQUNfTUFY X01EX0NCTE9DS107CisrCisrICAgIGlmIChsZW4gPiBTSEFfQ0JMT0NLKQorKwl7CisrCVNIQTFf SW5pdChtZF9jdHgpOworKwlTSEExX1VwZGF0ZShtZF9jdHgsa2V5LGxlbik7CisrCVNIQTFfRmlu YWwoa2V5bWQsbWRfY3R4KTsKKysJbGVuPTIwOworKwl9CisrICAgIGVsc2UKKysJbWVtY3B5KGtl eW1kLGtleSxsZW4pOworKyAgICBtZW1zZXQoJmtleW1kW2xlbl0sJ1wwJyxITUFDX01BWF9NRF9D QkxPQ0stbGVuKTsKKysKKysgICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBp KyspCisrCXBhZFtpXT0weDM2XmtleW1kW2ldOworKyAgICBTSEExX0luaXQobWRfY3R4KTsKKysg ICAgU0hBMV9VcGRhdGUobWRfY3R4LHBhZCxTSEFfQ0JMT0NLKTsKKysKKysgICAgZm9yKGk9MCA7 IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCisrCXBhZFtpXT0weDVjXmtleW1kW2ldOwor KyAgICBTSEExX0luaXQob19jdHgpOworKyAgICBTSEExX1VwZGF0ZShvX2N0eCxwYWQsU0hBX0NC TE9DSyk7CisrICAgIH0KKysKKytzdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVuc2lnbmVkIGNoYXIg Km1kLFNIQV9DVFggKm1kX2N0eCxTSEFfQ1RYICpvX2N0eCkKKysgICAgeworKyAgICB1bnNpZ25l ZCBjaGFyIGJ1ZlsyMF07CisrCisrICAgIFNIQTFfRmluYWwoYnVmLG1kX2N0eCk7CisrICAgIFNI QTFfVXBkYXRlKG9fY3R4LGJ1ZixzaXplb2YgYnVmKTsKKysgICAgU0hBMV9GaW5hbChtZCxvX2N0 eCk7CisrICAgIH0KKysKKysjZW5kaWYKKysKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJn dikKKysgICAgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgc3RhdGljIGNoYXIga2V5W109 ImV0YW9ucmlzaGRsY3VwZm0iOworKyAgICBpbnQgbixiaW5hcnk9MDsKKysKKysgICAgaWYoYXJn YyA8IDIpCisrCXsKKysJZnByaW50ZihzdGRlcnIsIiVzIFs8ZmlsZT5dK1xuIixhcmd2WzBdKTsK KysJZXhpdCgxKTsKKysJfQorKworKyAgICBuPTE7CisrICAgIGlmICghc3RyY21wKGFyZ3Zbbl0s Ii1iaW5hcnkiKSkKKysJeworKwluKys7CisrCWJpbmFyeT0xOwkvKiBlbWl0IGJpbmFyeSBmaW5n ZXJwcmludC4uLiAqLworKwl9CisrCisrICAgIGZvcig7IG4gPCBhcmdjIDsgKytuKQorKwl7Cisr CUZJTEUgKmY9Zm9wZW4oYXJndltuXSwicmIiKTsKKysJU0hBX0NUWCBtZF9jdHgsb19jdHg7Cisr CXVuc2lnbmVkIGNoYXIgbWRbMjBdOworKwlpbnQgaTsKKysKKysJaWYoIWYpCisrCSAgICB7Cisr CSAgICBwZXJyb3IoYXJndltuXSk7CisrCSAgICBleGl0KDIpOworKwkgICAgfQorKworKwlobWFj X2luaXQoJm1kX2N0eCwmb19jdHgsa2V5KTsKKysJZm9yKCA7IDsgKQorKwkgICAgeworKwkgICAg Y2hhciBidWZbMTAyNF07CisrCSAgICBzaXplX3QgbD1mcmVhZChidWYsMSxzaXplb2YgYnVmLGYp OworKworKwkgICAgaWYobCA9PSAwKQorKwkJeworKwkJaWYoZmVycm9yKGYpKQorKwkJICAgIHsK KysJCSAgICBwZXJyb3IoYXJndltuXSk7CisrCQkgICAgZXhpdCgzKTsKKysJCSAgICB9CisrCQll bHNlCisrCQkgICAgYnJlYWs7CisrCQl9CisrCSAgICBTSEExX1VwZGF0ZSgmbWRfY3R4LGJ1Zixs KTsKKysJICAgIH0KKysJaG1hY19maW5hbChtZCwmbWRfY3R4LCZvX2N0eCk7CisrCisrCWlmIChi aW5hcnkpCisrCSAgICB7CisrCSAgICBmd3JpdGUobWQsMjAsMSxzdGRvdXQpOworKwkgICAgYnJl YWs7CS8qIC4uLiBmb3Igc2luZ2xlKCEpIGZpbGUgKi8KKysJICAgIH0KKysKKysJcHJpbnRmKCJI TUFDLVNIQTEoJXMpPSAiLGFyZ3Zbbl0pOworKwlmb3IoaT0wIDsgaSA8IDIwIDsgKytpKQorKwkg ICAgcHJpbnRmKCIlMDJ4IixtZFtpXSk7CisrCXByaW50ZigiXG4iKTsKKysJfQorKyNlbmRpZgor KyAgICByZXR1cm4gMDsKKysgICAgfQorKworKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlw cy9maXBzX3Rlc3Rfc3VpdGUuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL2ZpcHNf dGVzdF9zdWl0ZS5jLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwkyMDEyLTAxLTA1 IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw1ODggQEAKKysvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KKysgKgorKyAqCisrICogVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGFz IGEgdGVzdCBkcml2ZXIgZm9yIHRoZSBGSVBTLTE0MCB0ZXN0aW5nCisrICogbGFiIHBlcmZvcm1p bmcgRklQUy0xNDAgdmFsaWRhdGlvbi4gIEl0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZQor KyAqIE9wZW5TU0wgbGlicmFyeSBpdG8gcGVyZm9ybSBhIHZhcmlldHkgb2YgY29tbW9uIGNyeXB0 b2dyYXBoaWMKKysgKiBmdW5jdGlvbnMuICBBIHBvd2VyLXVwIHNlbGYgdGVzdCBpcyBkZW1vbnN0 cmF0ZWQgYnkgZGVsaWJlcmF0ZWx5CisrICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBleGVjdXRh YmxlIGhhc2gKKysgKgorKyAqIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIE1hcnF1ZXNzLgorKyAqCisr ICovCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRl IDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZGguaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrCisrCisrI2lmbmRl ZiBPUEVOU1NMX0ZJUFMKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorKyAgICB7 CisrICAgIHByaW50ZigiTm8gRklQUyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworKyAg ICB9CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZp cHNfdXRsLmgiCisrCisrLyogQUVTOiBlbmNyeXB0IGFuZCBkZWNyeXB0IGtub3duIHBsYWludGV4 dCwgdmVyaWZ5IHJlc3VsdCBtYXRjaGVzIG9yaWdpbmFsIHBsYWludGV4dAorKyovCisrc3RhdGlj IGludCBGSVBTX2Flc190ZXN0KHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVk IGNoYXIgcGx0bXBbMTZdOworKwl1bnNpZ25lZCBjaGFyIGNpdG1wWzE2XTsKKysJdW5zaWduZWQg Y2hhciBrZXlbMTZdID0geyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNn07 CisrCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XSA9ICJldGFvbnJpc2hkbGN1IjsKKysJRVZQ X0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKwlpZiAoRVZQ X0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAx KSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4 dCwgMTYpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCks TlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0 eCwgcGx0bXAsIGNpdG1wLCAxNik7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgMTYp KQorKwkJZ290byBlcnI7CisrCXJldCA9IDE7CisrCWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xl YW51cCgmY3R4KTsKKysJcmV0dXJuIHJldDsKKysJfQorKworK3N0YXRpYyBpbnQgRklQU19kZXMz X3Rlc3Qodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBwbHRtcFs4 XTsKKysJdW5zaWduZWQgY2hhciBjaXRtcFs4XTsKKysgICAgCXVuc2lnbmVkIGNoYXIga2V5W10g PSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LAorKwkJICAg ICAgICAgICAgICAxOSwyMCwyMSwyMiwyMywyNH07CisrICAgIAl1bnNpZ25lZCBjaGFyIHBsYWlu dGV4dFtdID0geyAnZScsICd0JywgJ2EnLCAnbycsICduJywgJ3InLCAnaScsICdzJyB9OworKwlF VlBfQ0lQSEVSX0NUWCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCWlmIChF VlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxM LCAxKSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWlu dGV4dCwgOCk7CisrCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNi KCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIo JmN0eCwgcGx0bXAsIGNpdG1wLCA4KTsKKysJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCA4 KSkKKysJCWdvdG8gZXJyOworKwlyZXQgPSAxOworKwllcnI6CisrCUVWUF9DSVBIRVJfQ1RYX2Ns ZWFudXAoJmN0eCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKysvKgorKyAqIERTQTogZ2VuZXJh dGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KKysgKi8KKytzdGF0aWMg aW50IEZJUFNfZHNhX3Rlc3QoaW50IGJhZCkKKysgICAgeworKyAgICBEU0EgKmRzYSA9IE5VTEw7 CisrICAgIEVWUF9QS0VZIHBrOworKyAgICB1bnNpZ25lZCBjaGFyIGRnc3RbXSA9ICJldGFvbnJp c2hkbGMiOworKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2MF07CisrICAgIHVuc2lnbmVkIGludCBz bGVuOworKyAgICBpbnQgciA9IDA7CisrICAgIEVWUF9NRF9DVFggbWN0eDsKKysKKysgICAgRVJS X2NsZWFyX2Vycm9yKCk7CisrICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrICAgIGRzYSA9 IERTQV9uZXcoKTsKKysgICAgaWYgKCFkc2EpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIURTQV9n ZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQor Kwlnb3RvIGVuZDsKKysgICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisrCWdvdG8gZW5k OworKyAgICBpZiAoYmFkKQorKwkgICAgQk5fYWRkX3dvcmQoZHNhLT5wdWJfa2V5LCAxKTsKKysK KysgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKKysgICAgcGsucGtleS5kc2EgPSBkc2E7Cisr CisrICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKKysJ Z290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihk Z3N0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBi dWYsICZzbGVuLCAmcGspKQorKwlnb3RvIGVuZDsKKysKKysgICAgaWYgKCFFVlBfVmVyaWZ5SW5p dF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVW UF9WZXJpZnlVcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQorKwlnb3RvIGVu ZDsKKysgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOworKyAg ICBlbmQ6CisrICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrICAgIGlmIChkc2EpCisr ICAJICBEU0FfZnJlZShkc2EpOworKyAgICBpZiAociAhPSAxKQorKwlyZXR1cm4gMDsKKysgICAg cmV0dXJuIDE7CisrICAgIH0KKysKKysvKgorKyAqIFJTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2ln biwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KKysgKi8KKytzdGF0aWMgaW50IEZJUFNfcnNhX3Rl c3QoaW50IGJhZCkKKysgICAgeworKyAgICBSU0EgKmtleTsKKysgICAgdW5zaWduZWQgY2hhciBp bnB1dF9wdGV4dFtdID0gImV0YW9ucmlzaGRsYyI7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1 Nl07CisrICAgIHVuc2lnbmVkIGludCBzbGVuOworKyAgICBCSUdOVU0gKmJuOworKyAgICBFVlBf TURfQ1RYIG1jdHg7CisrICAgIEVWUF9QS0VZIHBrOworKyAgICBpbnQgciA9IDA7CisrCisrICAg IEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKyAgICBr ZXkgPSBSU0FfbmV3KCk7CisrICAgIGJuID0gQk5fbmV3KCk7CisrICAgIGlmICgha2V5IHx8ICFi bikKKysJcmV0dXJuIDA7CisrICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7CisrICAgIGlmICgh UlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVMTCkpCisrCXJldHVybiAwOworKyAg ICBCTl9mcmVlKGJuKTsKKysgICAgaWYgKGJhZCkKKysJICAgIEJOX2FkZF93b3JkKGtleS0+biwg MSk7CisrCisrICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7CisrICAgIHBrLnBrZXkucnNhID0g a2V5OworKworKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVM TCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBpbnB1dF9w dGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFF VlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQorKwlnb3RvIGVuZDsKKysKKysg ICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCisrCWdv dG8gZW5kOworKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBz aXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCisrCWdvdG8gZW5kOworKyAgICByID0gRVZQX1Zlcmlm eUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7CisrICAgIGVuZDoKKysgICAgRVZQX01EX0NU WF9jbGVhbnVwKCZtY3R4KTsKKysgICAgaWYgKGtleSkKKysgIAkgICAgUlNBX2ZyZWUoa2V5KTsK KysgICAgaWYgKHIgIT0gMSkKKysJcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9Cisr CisrLyogU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBh cmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBp bnQgRklQU19zaGExX3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NI QV9ESUdFU1RfTEVOR1RIXSA9CisrICAgICAgICB7IDB4MTEsIDB4ZjEsIDB4OWEsIDB4M2EsIDB4 ZWMsIDB4MWEsIDB4MWUsIDB4OGUsIDB4NjUsIDB4ZDQsIDB4OWEsIDB4MzgsIDB4MGMsIDB4OGIs IDB4MWUsIDB4MmMsIDB4ZTgsIDB4YjMsIDB4YzUsIDB4MTggfTsKKysgICAgdW5zaWduZWQgY2hh ciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKKysKKysgICAgdW5zaWduZWQgY2hhciBtZFtTSEFfRElH RVNUX0xFTkdUSF07CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUVWUF9E aWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCkpIHJl dHVybiAwOworKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKKysgICAgICAg IHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNIQTI1NjogZ2VuZXJh dGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBw cmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19zaGEyNTZfdGVz dCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBMjU2X0RJR0VTVF9MRU5H VEhdID0KKysJezB4ZjUsIDB4NTMsIDB4Y2QsIDB4YjgsIDB4Y2YsIDB4MSwgMHhlZSwgMHgxNywg MHg5YiwgMHg5MywgMHhjOSwgMHg2OCwgMHhjMCwgMHhlYSwgMHg0MCwgMHg5MSwKKysJIDB4Niwg MHhlYywgMHg4ZSwgMHgxMSwgMHg5NiwgMHhjOCwgMHg1ZCwgMHgxYywgMHhhZiwgMHg2NCwgMHgy MiwgMHhlNiwgMHg1MCwgMHg0ZiwgMHg0NywgMHg1N307CisrICAgIHVuc2lnbmVkIGNoYXIgc3Ry W10gPSAiZXRhb25yaXNoZCI7CisrCisrICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VT VF9MRU5HVEhdOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFFVlBfRGln ZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVMTCkpIHJl dHVybiAwOworKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKKysgICAgICAg IHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNIQTUxMjogZ2VuZXJh dGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBw cmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19zaGE1MTJfdGVz dCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBNTEyX0RJR0VTVF9MRU5H VEhdID0KKysJezB4OTksIDB4YzksIDB4ZTksIDB4NWIsIDB4ODgsIDB4ZDQsIDB4NzgsIDB4ODgs IDB4ZGYsIDB4ODgsIDB4NWYsIDB4OTQsIDB4NzEsIDB4NjQsIDB4MjgsIDB4Y2EsCisrCSAweDE2 LCAweDFmLCAweDNkLCAweGY0LCAweDFmLCAweGYzLCAweDBmLCAweGM1LCAweDAzLCAweDk5LCAw eGIyLCAweGQwLCAweGU3LCAweDBiLCAweDk0LCAweDRhLAorKwkgMHg0NSwgMHhkMiwgMHg2Yywg MHg0ZiwgMHgyMCwgMHgwNiwgMHhlZiwgMHg3MSwgMHhhOSwgMHgyNSwgMHg3ZiwgMHgyNCwgMHhi MSwgMHhkOSwgMHg0MCwgMHgyMiwKKysJIDB4NDksIDB4NTQsIDB4MTAsIDB4YzIsIDB4MjIsIDB4 OWQsIDB4MjcsIDB4ZmUsIDB4YmQsIDB4ZDYsIDB4ZDYsIDB4ZWIsIDB4MmQsIDB4NDIsIDB4MWQs IDB4YTN9OworKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOworKworKyAg ICB1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgRVJSX2Ns ZWFyX2Vycm9yKCk7CisrICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1k LCBOVUxMLCBFVlBfc2hhNTEyKCksIE5VTEwpKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcCht ZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7 CisrICAgIH0KKysKKysvKiBITUFDLVNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0 IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNo CisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGExX3Rlc3QoKQorKyAgICB7CisrICAgIHVu c2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZb XSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9T SVpFXSA9CisrCXsweDczLCAweGY3LCAweGEwLCAweDQ4LCAweGY4LCAweDk0LCAweGVkLCAweGRk LCAweDBhLCAweGVhLCAweGVhLCAweDU2LCAweDFiLCAweDYxLCAweDJlLCAweDcwLAorKwkgMHhi MiwgMHhmYiwgMHhlYywgMHhjNn07CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhf TURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9l cnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3NoYTEoKSxrZXksc2l6ZW9mKGtleSktMSxpdixz aXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQs a2F2YWwsb3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAg fQorKworKy8qIEhNQUMtU0hBMjI0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1 ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyov Cisrc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2ln bmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9 ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpF XSA9CisrCXsweDc1LCAweDU4LCAweGQ1LCAweGJkLCAweDU1LCAweDZkLCAweDg3LCAweDBmLCAw eDc1LCAweGZmLCAweGJlLCAweDFjLCAweGIyLCAweGYwLCAweDIwLCAweDM1LAorKwkgMHhlNSwg MHg2MiwgMHg0OSwgMHhiNiwgMHg5NCwgMHhiOSwgMHhmYywgMHg2NSwgMHgzNCwgMHgzMywgMHgz YSwgMHgxOX07CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Cisr ICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAg ICBpZiAoIUhNQUMoRVZQX3NoYTIyNCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdikt MSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRs ZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyog SE1BQy1TSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21w YXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMg aW50IEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBr ZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0 ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4 ZTksIDB4MTcsIDB4YzEsIDB4N2IsIDB4NGMsIDB4NmIsIDB4NzcsIDB4ZGEsIDB4ZDIsIDB4MzAs IDB4MzYsIDB4MDIsIDB4ZjUsIDB4NzIsIDB4MzMsIDB4ODcsCisrCSAweDlmLCAweGM2LCAweDZl LCAweDdiLCAweDdlLCAweGE4LCAweGVhLCAweGFhLCAweDlmLCAweGJhLCAweGVlLCAweDUxLCAw eGZmLCAweGRhLCAweDI0LCAweGY0fTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01B WF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFy X2Vycm9yKCk7CisrICAgIGlmICghSE1BQyhFVlBfc2hhMjU2KCksa2V5LHNpemVvZihrZXkpLTEs aXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAo b3V0LGthdmFsLG91dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7Cisr ICAgIH0KKysKKysvKiBITUFDLVNIQTM4NDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3Qg dmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gK KysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTM4NF90ZXN0KCkKKysgICAgeworKyAgICB1 bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2 W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURf U0laRV0gPQorKwl7MHhiMiwgMHg5ZCwgMHg0MCwgMHg1OCwgMHgzMiwgMHhjNCwgMHhlMywgMHgz MSwgMHhiNiwgMHg2MywgMHgwOCwgMHgyNiwgMHg5OSwgMHhlZiwgMHgzYiwgMHgxMCwKKysJIDB4 ZTIsIDB4ZGYsIDB4ZjgsIDB4ZmYsIDB4YzYsIDB4ZTEsIDB4MDMsIDB4MjksIDB4ODEsIDB4MmEs IDB4MWIsIDB4YWMsIDB4YjAsIDB4MDcsIDB4MzksIDB4MDgsCisrCSAweGYzLCAweDkxLCAweDM1 LCAweDExLCAweDc2LCAweGQ2LCAweDRjLCAweDIwLCAweGZiLCAweDRkLCAweGMzLCAweGYzLCAw eGI4LCAweDliLCAweDg4LCAweDFjfTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01B WF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFy X2Vycm9yKCk7CisrICAgIGlmICghSE1BQyhFVlBfc2hhMzg0KCksa2V5LHNpemVvZihrZXkpLTEs aXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAo b3V0LGthdmFsLG91dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7Cisr ICAgIH0KKysKKysvKiBITUFDLVNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3Qg dmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gK KysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTUxMl90ZXN0KCkKKysgICAgeworKyAgICB1 bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2 W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURf U0laRV0gPQorKwl7MHhjZCwgMHgzZSwgMHhiOSwgMHg1MSwgMHhiOCwgMHhiYywgMHg3ZiwgMHg5 YSwgMHgyMywgMHhhZiwgMHhmMywgMHg3NywgMHg1OSwgMHg4NSwgMHhhOSwgMHhlNiwKKysJIDB4 ZjcsIDB4ZDEsIDB4NTEsIDB4OTYsIDB4MTcsIDB4ZTAsIDB4OTIsIDB4ZDgsIDB4YTYsIDB4M2Is IDB4YzEsIDB4YWQsIDB4N2UsIDB4MjQsIDB4Y2EsIDB4YjEsCisrCSAweGQ3LCAweDc5LCAweDBh LCAweGE1LCAweGVhLCAweDJjLCAweDAyLCAweDU4LCAweDBiLCAweGE2LCAweDUyLCAweDZiLCAw eDYxLCAweDdmLCAweGViLCAweDljLAorKwkgMHg0NywgMHg4NiwgMHg1ZCwgMHg3NCwgMHgyYiwg MHg4OCwgMHhkZiwgMHhlZSwgMHg0NiwgMHg2OSwgMHg5NiwgMHgzZCwgMHhhNiwgMHhkOSwgMHgy YSwgMHg1M307CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Cisr ICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAg ICBpZiAoIUhNQUMoRVZQX3NoYTUxMigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdikt MSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRs ZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrCisr LyogREg6IGdlbmVyYXRlIHNoYXJlZCBwYXJhbWV0ZXJzCisrKi8KKytzdGF0aWMgaW50IGRoX3Rl c3QoKQorKyAgICB7CisrICAgIERIICpkaDsKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAg IGRoID0gRklQU19kaF9uZXcoKTsKKysgICAgaWYgKCFkaCkKKysJcmV0dXJuIDA7CisrICAgIGlm ICghREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkaCwgMTAyNCwgMiwgTlVMTCkpCisrCXJldHVy biAwOworKyAgICBGSVBTX2RoX2ZyZWUoZGgpOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKwor Ky8qIFplcm9pemUKKysqLworK3N0YXRpYyBpbnQgWmVyb2l6ZSgpCisrICAgIHsKKysgICAgUlNB ICprZXk7CisrICAgIEJJR05VTSAqYm47CisrICAgIHVuc2lnbmVkIGNoYXIgdXNlcmtleVsxNl0g PSAKKysJeyAweDQ4LCAweDUwLCAweGYwLCAweGEzLCAweDNhLCAweGVkLCAweGQzLCAweGFmLCAw eDZlLCAweDQ3LCAweDdmLCAweDgzLCAweDAyLCAweGIxLCAweDA5LCAweDY4IH07CisrICAgIGlu dCBpLCBuOworKworKyAgICBrZXkgPSBGSVBTX3JzYV9uZXcoKTsKKysgICAgYm4gPSBCTl9uZXco KTsKKysgICAgaWYgKCFrZXkgfHwgIWJuKQorKwlyZXR1cm4gMDsKKysgICAgQk5fc2V0X3dvcmQo Ym4sIDY1NTM3KTsKKysgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtleSwgMTAyNCxibixO VUxMKSkKKysJcmV0dXJuIDA7CisrICAgIEJOX2ZyZWUoYm4pOworKyAgICAKKysgICAgbiA9IEJO X251bV9ieXRlcyhrZXktPmQpOworKyAgICBwcmludGYoIiBHZW5lcmF0ZWQgJWQgYnl0ZSBSU0Eg cHJpdmF0ZSBrZXlcbiIsIG4pOworKyAgICBwcmludGYoIlx0Qk4ga2V5IGJlZm9yZSBvdmVyd3Jp dGluZzpcbiIpOworKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7CisrICAgIEJOX3Jh bmQoa2V5LT5kLG4qOCwtMSwwKTsKKysgICAgcHJpbnRmKCJcdEJOIGtleSBhZnRlciBvdmVyd3Jp dGluZzpcbiIpOworKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7CisrCisrICAgIHBy aW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOiBcblx0XHQiKTsKKysg ICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspIHByaW50ZigiJTAyeCIsIHVz ZXJrZXlbaV0pOworKyAgICAgICAgcHJpbnRmKCJcbiIpOworKyAgICBSQU5EX2J5dGVzKHVzZXJr ZXksIHNpemVvZiB1c2Vya2V5KTsKKysgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVyIGtleSBhZnRl ciBvdmVyd3JpdGluZzogXG5cdFx0Iik7CisrICAgIGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vy a2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKKysgICAgICAgIHByaW50Zigi XG4iKTsKKysKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKytzdGF0aWMgaW50IEVycm9yOwor K2NvbnN0IGNoYXIgKiBGYWlsKGNvbnN0IGNoYXIgKm1zZykKKysgICAgeworKyAgICBkb19wcmlu dF9lcnJvcnMoKTsKKysgICAgRXJyb3IrKzsKKysgICAgcmV0dXJuIG1zZzsgCisrICAgIH0KKysK KytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgeworKworKyAgICBpbnQgZG9f Y29ycnVwdF9yc2Ffa2V5Z2VuID0gMCwgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMDsKKysgICAg aW50IGJhZF9yc2EgPSAwLCBiYWRfZHNhID0gMDsKKysgICAgaW50IGRvX3JuZ19zdGljayA9IDA7 CisrICAgIGludCBub19leGl0ID0gMDsKKysKKysgICAgcHJpbnRmKCJcdEZJUFMtbW9kZSB0ZXN0 IGFwcGxpY2F0aW9uXG5cbiIpOworKworKyAgICAvKiBMb2FkIGVudHJvcHkgZnJvbSBleHRlcm5h bCBmaWxlLCBpZiBhbnkgKi8KKysgICAgUkFORF9sb2FkX2ZpbGUoIi5ybmQiLCAxMDI0KTsKKysK KysgICAgaWYgKGFyZ3ZbMV0pIHsKKysgICAgICAgIC8qIENvcnJ1cHRlZCBLQVQgdGVzdHMgKi8K KysgICAgICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJhZXMiKSkgeworKyAgICAgICAgICAgIEZJ UFNfY29ycnVwdF9hZXMoKTsKKysgICAgICAgICAgICBwcmludGYoIkFFUyBlbmNyeXB0aW9uL2Rl Y3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAo IXN0cmNtcChhcmd2WzFdLCAiZGVzIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZGVz KCk7CisrICAgICAgICAgICAgcHJpbnRmKCJERVMzLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24g d2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChh cmd2WzFdLCAiZHNhIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhKCk7CisrICAg ICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0 aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJj bXAoYXJndlsxXSwgInJzYSIpKSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYSgpOwor KyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFs aWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICgh c3RyY21wKGFyZ3ZbMV0sICJyc2FrZXkiKSkgeworKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtl eSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXku Li5cbiIpOworKwkgICAgYmFkX3JzYSA9IDE7CisrCSAgICBub19leGl0ID0gMTsKKysgICAgICAg IH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5Z2VuIikpIHsKKysJICAgIGRvX2Nv cnJ1cHRfcnNhX2tleWdlbiA9IDE7CisrCSAgICBub19leGl0ID0gMTsKKysgICAgICAgICAgICBw cmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBj b3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2 WzFdLCAiZHNha2V5IikpIHsKKysgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlv biBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKKysJ ICAgIGJhZF9kc2EgPSAxOworKwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAgICB9IGVsc2UgaWYg KCFzdHJjbXAoYXJndlsxXSwgImRzYWtleWdlbiIpKSB7CisrCSAgICBkb19jb3JydXB0X2RzYV9r ZXlnZW4gPSAxOworKwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAgICAgICAgcHJpbnRmKCJEU0Eg a2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtl eWdlbi4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInNoYTEi KSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9zaGExKCk7CisrICAgICAgICAgICAgcHJp bnRmKCJTSEEtMSBoYXNoIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrCX0gZWxzZSBpZiAo IXN0cmNtcChhcmd2WzFdLCAicm5nIikpIHsKKysJICAgIEZJUFNfY29ycnVwdF9ybmcoKTsKKysJ fSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJybmdzdGljayIpKSB7CisrCSAgICBkb19ybmdf c3RpY2sgPSAxOworKwkgICAgbm9fZXhpdCA9IDE7CisrCSAgICBwcmludGYoIlJORyB0ZXN0IHdp dGggc3R1Y2sgY29udGludW91cyB0ZXN0Li4uXG4iKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAg ICAgICAgICAgcHJpbnRmKCJCYWQgYXJndW1lbnQgXCIlc1wiXG4iLCBhcmd2WzFdKTsKKysgICAg ICAgICAgICBleGl0KDEpOworKyAgICAgICAgfQorKwlpZiAoIW5vX2V4aXQpIHsKKysgICAgICAg IAlpZiAoIUZJUFNfbW9kZV9zZXQoMSkpIHsKKysgCQkgICAgZG9fcHJpbnRfZXJyb3JzKCk7Cisr ICAgICAgICAJICAgIHByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IGZhaWxlZFxuIik7CisrCQkg ICAgZXhpdCgxKTsKKysJCX0KKysgICAgICAgIAlwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBz dWNjZXNzZnVsXG4iKTsKKysgICAgICAgIAlleGl0KDApOworKwl9CisrICAgIH0KKysKKysgICAg LyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCisrICAgICovCisrICAgIHBy aW50ZigiMS4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIp OworKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7CisrICAg IHByaW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikg KTsKKysKKysgICAgLyogUG93ZXItdXAgc2VsZiB0ZXN0CisrICAgICovCisrICAgIEVSUl9jbGVh cl9lcnJvcigpOworKyAgICBwcmludGYoIjIuIEF1dG9tYXRpYyBwb3dlci11cCBzZWxmIHRlc3Qu Li4iKTsKKysgICAgaWYgKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9y cygpOworKyAgICAgICAgcHJpbnRmKEZhaWwoIkZBSUxFRCFcbiIpKTsKKysJZXhpdCgxKTsKKysJ fQorKyAgICBwcmludGYoInN1Y2Nlc3NmdWxcbiIpOworKyAgICBpZiAoZG9fY29ycnVwdF9kc2Ff a2V5Z2VuKQorKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKCk7CisrICAgIGlm IChkb19jb3JydXB0X3JzYV9rZXlnZW4pCisrICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYV9r ZXlnZW4oKTsKKysgICAgaWYgKGRvX3JuZ19zdGljaykKKysgICAgICAgICAgICBGSVBTX3JuZ19z dGljaygpOworKworKyAgICAvKiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICovCisr ICAgIHByaW50ZigiMy4gQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOworKyAgICBwcmlu dGYoIEZJUFNfYWVzX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIp ICk7CisrCisrICAgIC8qIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0 aW9uCisrICAgICovCisrICAgIHByaW50ZigiNC4gUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNy eXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3JzYV90ZXN0KGJhZF9y c2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyog REVTLUNCQyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCI1LiBE RVMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNfZGVz M190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAg ICAvKiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uCisrICAgICov CisrICAgIHByaW50ZigiNi4gRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRh dGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNfZHNhX3Rlc3QoYmFkX2RzYSkgPyAic3VjY2Vz c2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBTSEEtMSBoYXNoCisr ICAgICovCisrICAgIHByaW50ZigiN2EuIFNIQS0xIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBG SVBTX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsK KysKKysgICAgLyogU0hBLTI1NiBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2IuIFNIQS0y NTYgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNz ZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNIQS01MTIgaGFzaAor KyAgICAqLworKyAgICBwcmludGYoIjdjLiBTSEEtNTEyIGhhc2guLi4iKTsKKysgICAgcHJpbnRm KCBGSVBTX3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4i KSApOworKworKyAgICAvKiBITUFDLVNIQS0xIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3 ZC4gSE1BQy1TSEEtMSBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTFfdGVz dCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyog SE1BQy1TSEEtMjI0IGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3ZS4gSE1BQy1TSEEtMjI0 IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKSA/ICJzdWNj ZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTI1 NiBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2YuIEhNQUMtU0hBLTI1NiBoYXNoLi4uIik7 CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6 ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS0zODQgaGFzaAorKyAg ICAqLworKyAgICBwcmludGYoIjdnLiBITUFDLVNIQS0zODQgaGFzaC4uLiIpOworKyAgICBwcmlu dGYoIEZJUFNfaG1hY19zaGEzODRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJ TEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtNTEyIGhhc2gKKysgICAgKi8KKysgICAg cHJpbnRmKCI3aC4gSE1BQy1TSEEtNTEyIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2ht YWNfc2hhNTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7 CisrCisrICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgorKyAgICAq LworKyAgICBwcmludGYoIjguIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0 ZXN0Li4uXG4iKTsKKysgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4u LiIpOworKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4i CisrCSAgICA6IEZhaWwoImZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7CisrCisrICAgIC8qIFpl cm9pemF0aW9uCisrICAgICovCisrICAgIHByaW50ZigiOS4gWmVyby1pemF0aW9uLi4uXG4iKTsK KysgICAgcHJpbnRmKCBaZXJvaXplKCkgPyAiXHRzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCisr CSAgICA6IEZhaWwoIlx0ZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKKysKKysgICAgcHJpbnRm KCJcbkFsbCB0ZXN0cyBjb21wbGV0ZWQgd2l0aCAlZCBlcnJvcnNcbiIsIEVycm9yKTsKKysgICAg cmV0dXJuIEVycm9yID8gMSA6IDA7CisrICAgIH0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9maXBzX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9m aXBzX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzX2xvY2wuaC5maXBzCTIw MTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL2ZpcHNfbG9jbC5oCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAt MCwwICsxLDcyIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisr ICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2lmZGVmIE9QRU5T U0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYK KysKKyt2b2lkIGZpcHNfd19sb2NrKHZvaWQpOworK3ZvaWQgZmlwc193X3VubG9jayh2b2lkKTsK Kyt2b2lkIGZpcHNfcl9sb2NrKHZvaWQpOworK3ZvaWQgZmlwc19yX3VubG9jayh2b2lkKTsKKytp bnQgZmlwc19pc19zdGFydGVkKHZvaWQpOworK3ZvaWQgZmlwc19zZXRfc3RhcnRlZCh2b2lkKTsK KytpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpOworK2ludCBmaXBzX3NldF9vd25pbmdf dGhyZWFkKHZvaWQpOworK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKKytpbnQg Zmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKHZvaWQpOworKworKyNkZWZpbmUgRklQU19NQVhfQ0lQ SEVSX1RFU1RfU0laRQkxNgorKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisr I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vZmlwcy9NYWtlZmlsZS5maXBz IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9maXBzL01ha2VmaWxlCTIwMTItMDEtMDUg MTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDgxIEBACisrIworKyMgT3BlblNT TC9jcnlwdG8vZmlwcy9NYWtlZmlsZQorKyMKKysKKytESVI9CWZpcHMKKytUT1A9CS4uLy4uCisr Q0M9CWNjCisrSU5DTFVERVM9CisrQ0ZMQUc9LWcKKytNQUtFRklMRT0JTWFrZWZpbGUKKytBUj0J CWFyIHIKKysKKytDRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCisrCisrR0VORVJBTD1NYWtl ZmlsZQorK1RFU1Q9Zmlwc190ZXN0X3N1aXRlLmMgZmlwc19yYW5kdGVzdC5jCisrQVBQUz0KKysK KytMSUI9JChUT1ApL2xpYmNyeXB0by5hCisrTElCU1JDPWZpcHNfYWVzX3NlbGZ0ZXN0LmMgZmlw c19kZXNfc2VsZnRlc3QuYyBmaXBzX2htYWNfc2VsZnRlc3QuYyBmaXBzX3JhbmRfc2VsZnRlc3Qu YyBcCisrICAgIGZpcHNfcnNhX3NlbGZ0ZXN0LmMgZmlwc19zaGExX3NlbGZ0ZXN0LmMgZmlwcy5j IGZpcHNfZHNhX3NlbGZ0ZXN0LmMgIGZpcHNfcmFuZC5jIFwKKysgICAgZmlwc19yc2FfeDkzMWcu YworKworK0xJQk9CSj1maXBzX2Flc19zZWxmdGVzdC5vIGZpcHNfZGVzX3NlbGZ0ZXN0Lm8gZmlw c19obWFjX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX3NlbGZ0ZXN0Lm8gXAorKyAgICBmaXBzX3JzYV9z ZWxmdGVzdC5vIGZpcHNfc2hhMV9zZWxmdGVzdC5vIGZpcHMubyBmaXBzX2RzYV9zZWxmdGVzdC5v ICBmaXBzX3JhbmQubyBcCisrICAgIGZpcHNfcnNhX3g5MzFnLm8KKysKKytTUkM9ICQoTElCU1JD KSBmaXBzX3N0YW5kYWxvbmVfc2hhMS5jCisrCisrRVhIRUFERVI9IGZpcHMuaCBmaXBzX3JhbmQu aAorK0hFQURFUj0JJChFWEhFQURFUikKKysKKytBTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQo SEVBREVSKQorKworK3RvcDoKKysJKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJT PSQoRElSKSBzdWJfYWxsKQorKworK2FsbDoJbGliCisrCisrbGliOgkkKExJQk9CSikKKysJJChB UikgJChMSUIpICQoTElCT0JKKQorKwkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWlu ZC4KKysJQHRvdWNoIGxpYgorKworK2ZpbGVzOgorKwkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVz LnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTworKworK2xpbmtzOgorKwlAJChQRVJMKSAkKFRP UCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCisrCUAk KFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKKysJQCQoUEVS TCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQorKworK2luc3RhbGw6 CisrCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZp bGUuLi4KKysJQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0 IDsgXAorKwlkbyAgXAorKwkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9p bmNsdWRlL29wZW5zc2wvJCRpOyBcCisrCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5T VEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCisrCWRvbmU7CisrCisrdGFnczoKKysJ Y3RhZ3MgJChTUkMpCisrCisrdGVzdHM6CisrCisrbGludDoKKysJbGludCAtRExJTlQgJChJTkNM VURFUykgJChTUkMpPmZsdWZmCisrCisrZGVwZW5kOgorKwlAWyAtbiAiJChNQUtFREVQRU5EKSIg XSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KKysJJChNQUtFREVQRU5EKSAt LSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQor KworK2RjbGVhbjoKKysJJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJ TkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldworKwltdiAt ZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKKysKKytjbGVhbjoKKysJcm0gLWYgKi5vICoub2Jq IGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKKysKKysjIERPIE5P VCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCisrCitkaWZm IC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vaG1hYy9obWFjLmMKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vaG1hYy9obWFj LmMuZmlwcwkyMDEwLTA2LTE1IDE5OjI1OjA5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9obWFjL2htYWMuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCAr MDEwMAorQEAgLTc3LDYgKzc3LDEzIEBAIGludCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwg Y29uc3Qgdm8KKyAKKyAJaWYgKGtleSAhPSBOVUxMKQorIAkJeworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJCWlmIChGSVBTX21vZGUoKSAmJiAhKG1kLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMp CisrCQkmJiAoIShjdHgtPm1kX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19B TExPVykKKysJCSB8fCAhKGN0eC0+aV9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpCisrCQkgfHwgIShjdHgtPm9fY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05P Tl9GSVBTX0FMTE9XKSkpCisrCQkJZ290byBlcnI7CisrI2VuZGlmCisgCQlyZXNldD0xOworIAkJ aj1FVlBfTURfYmxvY2tfc2l6ZShtZCk7CisgCQlPUEVOU1NMX2Fzc2VydChqIDw9IChpbnQpc2l6 ZW9mKGN0eC0+a2V5KSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vTWFrZWZpbGUu ZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vTWFrZWZpbGUKKy0tLSBvcGVuc3NsLTEuMC4wZi9j cnlwdG8vTWFrZWZpbGUuZmlwcwkyMDEwLTA3LTI3IDAwOjA5OjU5LjAwMDAwMDAwMCArMDIwMAor KysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9NYWtlZmlsZQkyMDEyLTAxLTA1IDEzOjIyOjMwLjAw MDAwMDAwMCArMDEwMAorQEAgLTM0LDE0ICszNCwxNCBAQCBHRU5FUkFMPU1ha2VmaWxlIFJFQURN RSBjcnlwdG8tbGliLmNvbSBpCisgCisgTElCPSAkKFRPUCkvbGliY3J5cHRvLmEKKyBTSEFSRURf TElCPSBsaWJjcnlwdG8kKFNITElCX0VYVCkKKy1MSUJTUkM9CWNyeXB0bGliLmMgbWVtLmMgbWVt X2Nsci5jIG1lbV9kYmcuYyBjdmVyc2lvbi5jIGV4X2RhdGEuYyBjcHRfZXJyLmMgZWJjZGljLmMg dWlkLmMgb190aW1lLmMgb19zdHIuYyBvX2Rpci5jCistTElCT0JKPSBjcnlwdGxpYi5vIG1lbS5v IG1lbV9kYmcubyBjdmVyc2lvbi5vIGV4X2RhdGEubyBjcHRfZXJyLm8gZWJjZGljLm8gdWlkLm8g b190aW1lLm8gb19zdHIubyBvX2Rpci5vICQoQ1BVSURfT0JKKQorK0xJQlNSQz0JY3J5cHRsaWIu YyBtZW0uYyBtZW1fY2xyLmMgbWVtX2RiZy5jIGN2ZXJzaW9uLmMgZXhfZGF0YS5jIGNwdF9lcnIu YyBlYmNkaWMuYyB1aWQuYyBvX3RpbWUuYyBvX3N0ci5jIG9fZGlyLmMgb19pbml0LmMgZmlwc19l cnIuYworK0xJQk9CSj0gY3J5cHRsaWIubyBtZW0ubyBtZW1fZGJnLm8gY3ZlcnNpb24ubyBleF9k YXRhLm8gY3B0X2Vyci5vIGViY2RpYy5vIHVpZC5vIG9fdGltZS5vIG9fc3RyLm8gb19kaXIubyBv X2luaXQubyBmaXBzX2Vyci5vICQoQ1BVSURfT0JKKQorIAorIFNSQz0gJChMSUJTUkMpCisgCisg RVhIRUFERVI9IGNyeXB0by5oIG9wZW5zc2x2Lmggb3BlbnNzbGNvbmYuaCBlYmNkaWMuaCBzeW1o YWNrcy5oIFwKKyAJb3NzbF90eXAuaAorLUhFQURFUj0JY3J5cHRsaWIuaCBidWlsZGluZi5oIG1k MzJfY29tbW9uLmggb190aW1lLmggb19zdHIuaCBvX2Rpci5oICQoRVhIRUFERVIpCisrSEVBREVS PQljcnlwdGxpYi5oIGJ1aWxkaW5mLmggZmlwc19sb2NsLmggbWQzMl9jb21tb24uaCBvX3RpbWUu aCBvX3N0ci5oIG9fZGlyLmggJChFWEhFQURFUikKKyAKKyBBTEw9ICAgICQoR0VORVJBTCkgJChT UkMpICQoSEVBREVSKQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21kYzIvbWRj MmRnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKKy0tLSBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMJMjAwNC0wNy0yNSAyMTox MDo0MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWRjMi9tZGMy ZGdzdC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtNjEsNiArNjEs MTEgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Cisg I2luY2x1ZGUgPG9wZW5zc2wvbWRjMi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisr CisgCisgI3VuZGVmIGMybAorICNkZWZpbmUgYzJsKGMsbCkJKGwgPSgoREVTX0xPTkcpKCooKGMp KyspKSkgICAgLCBcCitAQCAtNzUsNyArODAsNyBAQAorIAkJCSooKGMpKyspPSh1bnNpZ25lZCBj aGFyKSgoKGwpPj4yNEwpJjB4ZmYpKQorIAorIHN0YXRpYyB2b2lkIG1kYzJfYm9keShNREMyX0NU WCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pOworLWludCBNREMyX0lu aXQoTURDMl9DVFggKmMpCisrRklQU19OT05fRklQU19NRF9Jbml0KE1EQzIpCisgCXsKKyAJYy0+ bnVtPTA7CisgCWMtPnBhZF90eXBlPTE7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v bWRjMi9tZGMyLmguZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWRjMi9tZGMyLmgKKy0tLSBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vbWRjMi9tZGMyLmguZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjI5 LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9tZGMyL21kYzIuaAky MDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTgwLDcgKzgwLDkgQEAgdHlw ZWRlZiBzdHJ1Y3QgbWRjMl9jdHhfc3QKKyAJaW50IHBhZF90eXBlOyAvKiBlaXRoZXIgMSBvciAy LCBkZWZhdWx0IDEgKi8KKyAJfSBNREMyX0NUWDsKKyAKKy0KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisraW50IHByaXZhdGVfTURDMl9Jbml0KE1EQzJfQ1RYICpjKTsKKysjZW5kaWYKKyBpbnQgTURD Ml9Jbml0KE1EQzJfQ1RYICpjKTsKKyBpbnQgTURDMl9VcGRhdGUoTURDMl9DVFggKmMsIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBNREMyX0ZpbmFsKHVuc2ln bmVkIGNoYXIgKm1kLCBNREMyX0NUWCAqYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vbWQyL21kMl9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQyL21kMl9kZ3N0 LmMKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcwkyMDA3LTA4 LTMxIDEyOjEyOjM1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9t ZDIvbWQyX2Rnc3QuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTYy LDYgKzYyLDExIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvbWQyLmg+CisgI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbHYuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgorIAorIGNvbnN0IGNoYXIgTUQyX3ZlcnNpb25bXT0iTUQyIiBP UEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitAQCAtMTE2LDcgKzEyMSw3IEBAIGNvbnN0IGNoYXIg Kk1EMl9vcHRpb25zKHZvaWQpCisgCQlyZXR1cm4oIm1kMihpbnQpIik7CisgCX0KKyAKKy1pbnQg TUQyX0luaXQoTUQyX0NUWCAqYykKKytGSVBTX05PTl9GSVBTX01EX0luaXQoTUQyKQorIAl7Cisg CWMtPm51bT0wOworIAltZW1zZXQoYy0+c3RhdGUsMCxzaXplb2YgYy0+c3RhdGUpOworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21kMi9tZDIuaC5maXBzIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9tZDIvbWQyLmgKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQyL21kMi5oLmZpcHMJ MjAxMi0wMS0wNSAxMzoyMjoyOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9j cnlwdG8vbWQyL21kMi5oCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAt ODEsNiArODEsOSBAQCB0eXBlZGVmIHN0cnVjdCBNRDJzdGF0ZV9zdAorIAl9IE1EMl9DVFg7Cisg CisgY29uc3QgY2hhciAqTUQyX29wdGlvbnModm9pZCk7CisrI2lmZGVmIE9QRU5TU0xfRklQUwor K2ludCBwcml2YXRlX01EMl9Jbml0KE1EMl9DVFggKmMpOworKyNlbmRpZgorIGludCBNRDJfSW5p dChNRDJfQ1RYICpjKTsKKyBpbnQgTUQyX1VwZGF0ZShNRDJfQ1RYICpjLCBjb25zdCB1bnNpZ25l ZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgTUQyX0ZpbmFsKHVuc2lnbmVkIGNoYXIg Km1kLCBNRDJfQ1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9tZDQvbWQ0 X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYworLS0tIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6 MTEuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21kNC9tZDRfZGdz dC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtNTksNiArNTksMTEg QEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAibWQ0X2xvY2wuaCIKKyAjaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisg CisgY29uc3QgY2hhciBNRDRfdmVyc2lvbltdPSJNRDQiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsK KyAKK0BAIC03MCw3ICs3NSw3IEBAIGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0IiBPUEVO U1NMX1YKKyAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVMCisg I2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAorIAorLWludCBN RDRfSW5pdChNRDRfQ1RYICpjKQorK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNRDQpCisgCXsKKyAJ bWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPkE9SU5JVF9EQVRBX0E7CitkaWZmIC11cCBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQ0L21kNC5oLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRv L21kNC9tZDQuaAorLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9tZDQvbWQ0LmguZmlwcwkyMDEy LTAxLTA1IDEzOjIyOjI5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0 by9tZDQvbWQ0LmgJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDUs NiArMTA1LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTUQ0c3RhdGVfc3QKKyAJdW5zaWduZWQgaW50IG51 bTsKKyAJfSBNRDRfQ1RYOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9N RDRfSW5pdChNRDRfQ1RYICpjKTsKKysjZW5kaWYKKyBpbnQgTUQ0X0luaXQoTUQ0X0NUWCAqYyk7 CisgaW50IE1ENF9VcGRhdGUoTUQ0X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxl bik7CisgaW50IE1ENF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgTUQ0X0NUWCAqYyk7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQ1 L21kNV9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjExLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYwkyMDEyLTAxLTA1IDEzOjIyOjMw LjAwMDAwMDAwMCArMDEwMAorQEAgLTU5LDYgKzU5LDExIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+ CisgI2luY2x1ZGUgIm1kNV9sb2NsLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworIAorIGNvbnN0IGNoYXIgTUQ1X3ZlcnNp b25bXT0iTUQ1IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitAQCAtNzAsNyArNzUsNyBAQCBj b25zdCBjaGFyIE1ENV92ZXJzaW9uW109Ik1ENSIgT1BFTlNTTF9WCisgI2RlZmluZSBJTklUX0RB VEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAorICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVu c2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKyAKKy1pbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYykKKytG SVBTX05PTl9GSVBTX01EX0luaXQoTUQ1KQorIAl7CisgCW1lbXNldCAoYywwLHNpemVvZigqYykp OworIAljLT5BPUlOSVRfREFUQV9BOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21k NS9tZDUuaC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9tZDUvbWQ1LmgKKy0tLSBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vbWQ1L21kNS5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoyOS4wMDAwMDAw MDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWQ1L21kNS5oCTIwMTItMDEtMDUg MTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMTA1LDYgKzEwNSw5IEBAIHR5cGVkZWYgc3Ry dWN0IE1ENXN0YXRlX3N0CisgCXVuc2lnbmVkIGludCBudW07CisgCX0gTUQ1X0NUWDsKKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfTUQ1X0luaXQoTUQ1X0NUWCAqYyk7Cisr I2VuZGlmCisgaW50IE1ENV9Jbml0KE1ENV9DVFggKmMpOworIGludCBNRDVfVXBkYXRlKE1ENV9D VFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBNRDVfRmluYWwodW5z aWduZWQgY2hhciAqbWQsIE1ENV9DVFggKmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL21lbS5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL21lbS5jCistLS0gb3BlbnNzbC0x LjAuMGYvY3J5cHRvL21lbS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1Nzo0Ny4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vbWVtLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4w MDAwMDAwMDAgKzAxMDAKK0BAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIHZvaWQgKCpmcmVlX2xv Y2tlZF9mdW5jKSh2b2lkICopIAorIAorIC8qIG1heSBiZSBjaGFuZ2VkIGFzIGxvbmcgYXMgJ2Fs bG93X2N1c3RvbWl6ZV9kZWJ1ZycgaXMgc2V0ICovCisgLyogWFhYIHVzZSBjb3JyZWN0IGZ1bmN0 aW9uIHBvaW50ZXIgdHlwZXMgKi8KKy0jaWZkZWYgQ1JZUFRPX01ERUJVRworKyNpZiBkZWZpbmVk KENSWVBUT19NREVCVUcpICYmICFkZWZpbmVkKE9QRU5TU0xfRklQUykKKyAvKiB1c2UgZGVmYXVs dCBmdW5jdGlvbnMgZnJvbSBtZW1fZGJnLmMgKi8KKyBzdGF0aWMgdm9pZCAoKm1hbGxvY19kZWJ1 Z19mdW5jKSh2b2lkICosaW50LGNvbnN0IGNoYXIgKixpbnQsaW50KQorIAk9IENSWVBUT19kYmdf bWFsbG9jOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL29faW5pdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMGYvY3J5cHRvL29faW5pdC5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL29f aW5pdC5jLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4wZi9jcnlwdG8vb19pbml0LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAg KzAxMDAKK0BAIC0wLDAgKzEsODAgQEAKKysvKiBvX2luaXQuYyAqLworKy8qIFdyaXR0ZW4gYnkg RHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAor KyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIw MDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Cisr ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoK KysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVu IGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0 LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8ZV9vcy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKworKy8qIFBlcmZvcm0gYW55IGVzc2VudGlhbCBPcGVuU1NMIGluaXRpYWxp emF0aW9uIG9wZXJhdGlvbnMuCisrICogQ3VycmVudGx5IG9ubHkgc2V0cyBGSVBTIGNhbGxiYWNr cworKyAqLworKworK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCkKKysJeworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJc3RhdGljIGludCBkb25lID0gMDsKKysJaWYgKCFkb25lKQorKwkJ eworKyNpZmRlZiBDUllQVE9fTURFQlVHCisrCQlDUllQVE9fbWFsbG9jX2RlYnVnX2luaXQoKTsK KysjZW5kaWYKKysJCWRvbmUgPSAxOworKwkJfQorKyNlbmRpZgorKwl9CisrCQkKKysKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMgb3BlbnNzbC0x LjAuMGYvY3J5cHRvL29wZW5zc2xjb25mLmguaW4KKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v b3BlbnNzbGNvbmYuaC5pbi5maXBzCTIwMDUtMTItMTYgMTE6Mzc6MjMuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL29wZW5zc2xjb25mLmguaW4JMjAxMi0wMS0wNSAx MzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDUgKzEsMjAgQEAKKyAvKiBjcnlwdG8vb3Bl bnNzbGNvbmYuaC5pbiAqLworIAorKyNpZmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQKKysK KysvKiBJbmNsdWRlIGFueSBzeW1ib2xzIGhlcmUgdGhhdCBoYXZlIHRvIGJlIGV4cGxpY2l0bHkg c2V0IHRvIGVuYWJsZSBhIGZlYXR1cmUKKysgKiB0aGF0IHNob3VsZCBiZSB2aXNpYmxlIHRvIG1h a2VkZXBlbmQuCisrICoKKysgKiBbT3VyICJtYWtlIGRlcGVuZCIgZG9lc24ndCBhY3R1YWxseSBs b29rIGF0IHRoaXMsIHdlIHVzZSBhY3R1YWwgYnVpbGQgc2V0dGluZ3MKKysgKiBpbnN0ZWFkOyB3 ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSB0byByZW1vdmUgc3ViZGlyZWN0b3JpZXMgd2l0aCBkaXNh YmxlZCBhbGdvcml0aG1zLl0KKysgKi8KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNkZWZp bmUgT1BFTlNTTF9GSVBTCisrI2VuZGlmCisrCisrI2VuZGlmCisrCisgLyogR2VuZXJhdGUgODAz ODYgY29kZT8gKi8KKyAjdW5kZWYgSTM4Nl9PTkxZCisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9wa2Nz MTIvcDEyX2NydC5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMu ZmlwcwkyMDA5LTAzLTA5IDE0OjA4OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjBmL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAw ICswMTAwCitAQCAtNTksNiArNTksMTAgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVk ZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworIAorIAor IHN0YXRpYyBpbnQgcGtjczEyX2FkZF9iYWcoU1RBQ0tfT0YoUEtDUzEyX1NBRkVCQUcpICoqcGJh Z3MsIFBLQ1MxMl9TQUZFQkFHICpiYWcpOworQEAgLTkwLDcgKzk0LDE0IEBAIFBLQ1MxMiAqUEtD UzEyX2NyZWF0ZShjaGFyICpwYXNzLCBjaGFyICoKKyAKKyAJLyogU2V0IGRlZmF1bHRzICovCisg CWlmICghbmlkX2NlcnQpCisrCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYgKEZJUFNf bW9kZSgpKQorKwkJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBsZURF U19DQkM7CisrCQllbHNlCisrI2VuZGlmCisgCQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFB bmQ0MEJpdFJDMl9DQkM7CisrCQl9CisgCWlmICghbmlkX2tleSkKKyAJCW5pZF9rZXkgPSBOSURf cGJlX1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKKyAJaWYgKCFpdGVyKQorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAu MGYvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JhbmQv bWRfcmFuZC5jLmZpcHMJMjAxMC0wNi0xNiAxNToxNzoyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vcmFuZC9tZF9yYW5kLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4w MDAwMDAwMDAgKzAxMDAKK0BAIC0xMjYsNiArMTI2LDEwIEBACisgCisgI2luY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xf RklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyAjaWZkZWYg Qk5fREVCVUcKKyAjIGRlZmluZSBQUkVESUNUCitAQCAtMzQyLDYgKzM0NiwxNCBAQCBzdGF0aWMg aW50IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoCisgI2VuZGlmCisgCWludCBkb19zdGly X3Bvb2wgPSAwOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkpCisr CSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9TU0xFQVlfUkFORF9CWVRFUyxGSVBTX1JfTk9O X0ZJUFNfTUVUSE9EKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKyNlbmRpZgorKworICNp ZmRlZiBQUkVESUNUCisgCWlmIChyYW5kX3ByZWRpY3RhYmxlKQorIAkJeworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMGYvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9yYW5kL3JhbmRfZXJyLmMKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcmFuZC9yYW5k X2Vyci5jLmZpcHMJMjAwNi0xMS0yMSAyMjoyOTo0MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4wZi9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAw MDAwMDAwICswMTAwCitAQCAtNzAsNiArNzAsMTMgQEAKKyAKKyBzdGF0aWMgRVJSX1NUUklOR19E QVRBIFJBTkRfc3RyX2Z1bmN0c1tdPQorIAl7Cisre0VSUl9GVU5DKFJBTkRfRl9FTkdfUkFORF9H RVRfUkFORF9NRVRIT0QpLAkiRU5HX1JBTkRfR0VUX1JBTkRfTUVUSE9EIn0sCisre0VSUl9GVU5D KFJBTkRfRl9GSVBTX1JBTkQpLAkiRklQU19SQU5EIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBT X1JBTkRfQllURVMpLAkiRklQU19SQU5EX0JZVEVTIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBT X1JBTkRfU0VUX0RUKSwJIkZJUFNfUkFORF9TRVRfRFQifSwKKyt7RVJSX0ZVTkMoUkFORF9GX0ZJ UFNfU0VUX0RUKSwJIkZJUFNfU0VUX0RUIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1NFVF9Q Uk5HX1NFRUQpLAkiRklQU19TRVRfUFJOR19TRUVEIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBT X1NFVF9URVNUX01PREUpLAkiRklQU19TRVRfVEVTVF9NT0RFIn0sCisge0VSUl9GVU5DKFJBTkRf Rl9SQU5EX0dFVF9SQU5EX01FVEhPRCksCSJSQU5EX2dldF9yYW5kX21ldGhvZCJ9LAorIHtFUlJf RlVOQyhSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMpLAkiU1NMRUFZX1JBTkRfQllURVMifSwKKyB7 MCxOVUxMfQorQEAgLTc3LDcgKzg0LDE3IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUkFORF9z dHJfZnVuY3RzW10KKyAKKyBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJBTkRfc3RyX3JlYXNvbnNb XT0KKyAJeworK3tFUlJfUkVBU09OKFJBTkRfUl9OT05fRklQU19NRVRIT0QpICAgICAgLCJub24g ZmlwcyBtZXRob2QifSwKKyt7RVJSX1JFQVNPTihSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSkgICAg ICwibm90IGluIHRlc3QgbW9kZSJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9OT19LRVlfU0VUKSAg ICAgICAgICAgLCJubyBrZXkgc2V0In0sCisre0VSUl9SRUFTT04oUkFORF9SX1BSTkdfQVNLSU5H X0ZPUl9UT09fTVVDSCksInBybmcgYXNraW5nIGZvciB0b28gbXVjaCJ9LAorK3tFUlJfUkVBU09O KFJBTkRfUl9QUk5HX0VSUk9SKSAgICAgICAgICAgLCJwcm5nIGVycm9yIn0sCisre0VSUl9SRUFT T04oUkFORF9SX1BSTkdfS0VZRUQpICAgICAgICAgICAsInBybmcga2V5ZWQifSwKKyt7RVJSX1JF QVNPTihSQU5EX1JfUFJOR19OT1RfUkVLRVlFRCkgICAgICwicHJuZyBub3QgcmVrZXllZCJ9LAor K3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRCkgICAgLCJwcm5nIG5vdCByZXNl ZWRlZCJ9LAorIHtFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9TRUVERUQpICAgICAgLCJQUk5H IG5vdCBzZWVkZWQifSwKKyt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01B VENIX0tFWSksInBybmcgc2VlZCBtdXN0IG5vdCBtYXRjaCBrZXkifSwKKyt7RVJSX1JFQVNPTihS QU5EX1JfUFJOR19TVFVDSykgICAgICAgICAgICwicHJuZyBzdHVjayJ9LAorIHswLE5VTEx9Cisg CX07CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vcmFuZC9yYW5kLmgKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vcmFuZC9yYW5kLmguZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjI5LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYW5kL3JhbmQuaAkyMDEyLTAxLTA1IDEzOjIyOjMw LjAwMDAwMDAwMCArMDEwMAorQEAgLTEyOCwxMSArMTI4LDI4IEBAIHZvaWQgRVJSX2xvYWRfUkFO RF9zdHJpbmdzKHZvaWQpOworIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgUkFORCBmdW5jdGlvbnMu ICovCisgCisgLyogRnVuY3Rpb24gY29kZXMuICovCisrI2RlZmluZSBSQU5EX0ZfRU5HX1JBTkRf R0VUX1JBTkRfTUVUSE9ECQkJIDEwOAorKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORAkJCQkgMTAz CisrI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMDIKKysjZGVmaW5lIFJBTkRf Rl9GSVBTX1JBTkRfU0VUX0RUCQkJCSAxMDYKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9EVAkJ CQkgMTA0CisrI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVECQkJIDEwNworKyNkZWZp bmUgUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERQkJCSAxMDUKKyAjZGVmaW5lIFJBTkRfRl9SQU5E X0dFVF9SQU5EX01FVEhPRAkJCSAxMDEKKyAjZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRF UwkJCSAxMDAKKyAKKyAvKiBSZWFzb24gY29kZXMuICovCisrI2RlZmluZSBSQU5EX1JfTk9OX0ZJ UFNfTUVUSE9ECQkJCSAxMDUKKysjZGVmaW5lIFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFCQkJCSAx MDYKKysjZGVmaW5lIFJBTkRfUl9OT19LRVlfU0VUCQkJCSAxMDcKKysjZGVmaW5lIFJBTkRfUl9Q Uk5HX0FTS0lOR19GT1JfVE9PX01VQ0gJCQkgMTAxCisrI2RlZmluZSBSQU5EX1JfUFJOR19FUlJP UgkJCQkgMTA4CisrI2RlZmluZSBSQU5EX1JfUFJOR19LRVlFRAkJCQkgMTA5CisrI2RlZmluZSBS QU5EX1JfUFJOR19OT1RfUkVLRVlFRAkJCQkgMTAyCisrI2RlZmluZSBSQU5EX1JfUFJOR19OT1Rf UkVTRUVERUQJCQkgMTAzCisgI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfU0VFREVECQkJCSAxMDAK KysjZGVmaW5lIFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZCQkgMTEwCisrI2Rl ZmluZSBSQU5EX1JfUFJOR19TVFVDSwkJCQkgMTA0CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cwor IH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYW5kL3JhbmRfbGliLmMuZmlwcyBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL3JhbmQvcmFuZF9saWIuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDQuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JhbmQvcmFuZF9saWIuYwkyMDEyLTAx LTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTYwLDYgKzYwLDEyIEBACisgI2luY2x1 ZGUgPHRpbWUuaD4KKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+CisrI2luY2x1ZGUgInJhbmRfbGNsLmgiCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4K KysjZW5kaWYKKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgI2luY2x1ZGUgPG9wZW5z c2wvZW5naW5lLmg+CisgI2VuZGlmCitAQCAtMTAyLDggKzEwOCwxOSBAQCBjb25zdCBSQU5EX01F VEhPRCAqUkFORF9nZXRfcmFuZF9tZXRob2QoCisgCQkJZnVuY3RfcmVmID0gZTsKKyAJCWVsc2UK KyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQkJZGVmYXVsdF9SQU5EX21ldGggPSBG SVBTX21vZGUoKSA/IEZJUFNfcmFuZF9tZXRob2QoKSA6IFJBTkRfU1NMZWF5KCk7CisrCQl9Cisr CWlmIChGSVBTX21vZGUoKQorKwkJJiYgZGVmYXVsdF9SQU5EX21ldGggIT0gRklQU19yYW5kX2No ZWNrKCkpCisrCSAgICB7CisrCSAgICBSQU5EZXJyKFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhP RCxSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKyNl bHNlCisgCQkJZGVmYXVsdF9SQU5EX21ldGggPSBSQU5EX1NTTGVheSgpOworIAkJfQorKyNlbmRp ZgorIAlyZXR1cm4gZGVmYXVsdF9SQU5EX21ldGg7CisgCX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9yYzIvcmMyLmguZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcmMyL3Jj Mi5oCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjMi9yYzIuaC5maXBzCTIwMTItMDEtMDUg MTM6MjI6MjkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjMi9y YzIuaAkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTc5LDcgKzc5LDkg QEAgdHlwZWRlZiBzdHJ1Y3QgcmMyX2tleV9zdAorIAlSQzJfSU5UIGRhdGFbNjRdOworIAl9IFJD Ml9LRVk7CisgCistIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMgCisrdm9pZCBwcml2YXRlX1JDMl9z ZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSxp bnQgYml0cyk7CisrI2VuZGlmCisgdm9pZCBSQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBs ZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsaW50IGJpdHMpOworIHZvaWQgUkMyX2VjYl9l bmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCxSQzJfS0VZ ICprZXksCisgCQkgICAgIGludCBlbmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRv L3JjMi9yYzJfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjMi9yYzJfc2tleS5j CistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjMi9yYzJfc2tleS5jLmZpcHMJMjAwNy0wOS0x OCAyMzoxMDozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcmMy L3JjMl9za2V5LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01Nyw2 ICs1NywxMSBAQAorICAqLworIAorICNpbmNsdWRlIDxvcGVuc3NsL3JjMi5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2NyeXB0by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInJjMl9sb2NsLmgiCisgCisgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5X3RhYmxlWzI1Nl09eworQEAgLTk0LDggKzk5LDIw IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtleV90YWJsZVsyNTYKKyAgKiBCU0FGRSB1 c2VzIHRoZSAncmV0YXJkZWQnIHZlcnNpb24uICBXaGF0IEkgcHJldmlvdXNseSBzaGlwcGVkIGlz CisgICogdGhlIHNhbWUgYXMgc3BlY2lmeWluZyAxMDI0IGZvciB0aGUgJ2JpdHMnIHBhcmFtZXRl ci4gIEJzYWZlIHVzZXMKKyAgKiBhIHZlcnNpb24gd2hlcmUgdGhlIGJpdHMgcGFyYW1ldGVyIGlz IHRoZSBzYW1lIGFzIGxlbio4ICovCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworIHZvaWQgUkMy X3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRh LCBpbnQgYml0cykKKyAJeworKwlpZiAoRklQU19tb2RlKCkpCisrCQlGSVBTX0JBRF9BQk9SVChS QzIpCisrCXByaXZhdGVfUkMyX3NldF9rZXkoa2V5LCBsZW4sIGRhdGEsIGJpdHMpOworKwl9Cisr dm9pZCBwcml2YXRlX1JDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSwKKysJCQkJCQkJCWludCBiaXRzKQorKyNlbHNlCisrdm9pZCBSQzJf c2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEs IGludCBiaXRzKQorKyNlbmRpZgorKwl7CisgCWludCBpLGo7CisgCXVuc2lnbmVkIGNoYXIgKms7 CisgCVJDMl9JTlQgKmtpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjNC9hc20v cmM0LXMzOTB4LnBsLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4 LnBsCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsLmZpcHMJ MjAwOS0wMi0xMiAxNTo0ODo0OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9j cnlwdG8vcmM0L2FzbS9yYzQtczM5MHgucGwJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAg KzAxMDAKK0BAIC0yMDIsNCArMjAyLDYgQEAgUkM0X29wdGlvbnM6CisgLnN0cmluZwkicmM0KDh4 LGNoYXIpIgorIF9fXworIAorKyRjb2RlID1+IHMvUkM0X3NldF9rZXkvcHJpdmF0ZV9SQzRfc2V0 X2tleS9nIGlmICgkRU5We0ZJUFN9IG5lICIiKTsKKysKKyBwcmludCAkY29kZTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwuZmlwcyBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vcmM0L2FzbS9yYzQteDg2XzY0LnBsCistLS0gb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbC5maXBzCTIwMDktMDQtMjcgMjE6MzE6MDQuMDAw MDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82 NC5wbAkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTQ5OSw2ICs0OTks OCBAQCBfX18KKyAKKyAkY29kZSA9fiBzLyMoW2J3ZF0pLyQxL2dtOworIAorKyRjb2RlID1+IHMv UkM0X3NldF9rZXkvcHJpdmF0ZV9SQzRfc2V0X2tleS9nIGlmICgkRU5We0ZJUFN9IG5lICIiKTsK KysKKyBwcmludCAkY29kZTsKKyAKKyBjbG9zZSBTVERPVVQ7CitkaWZmIC11cCBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRv L3JjNC9hc20vcmM0LTU4Ni5wbAorLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzQvYXNtL3Jj NC01ODYucGwuZmlwcwkyMDA3LTEyLTAyIDIyOjMyOjAzLjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjBmL2NyeXB0by9yYzQvYXNtL3JjNC01ODYucGwJMjAxMi0wMS0wNSAxMzoyMjoz MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNjYsOCArMTY2LDEyIEBAICRpZHg9ImVkeCI7CisgCisg JmV4dGVybmFsX2xhYmVsKCJPUEVOU1NMX2lhMzJjYXBfUCIpOworIAorKyRzZXRrZXlmdW5jID0g IlJDNF9zZXRfa2V5IjsKKyskc2V0a2V5ZnVuYyA9ICJwcml2YXRlX1JDNF9zZXRfa2V5IiBpZiAo JEVOVntGSVBTfSBuZSAiIik7CisrCisrCisgIyB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtl eSxpbnQgbGVuLGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworLSZmdW5jdGlvbl9iZWdpbigi UkM0X3NldF9rZXkiKTsKKysmZnVuY3Rpb25fYmVnaW4oJHNldGtleWZ1bmMpOworIAkmbW92CSgk b3V0LCZ3cGFyYW0oMCkpOwkJIyBsb2FkIGtleQorIAkmbW92CSgkaWRpLCZ3cGFyYW0oMSkpOwkJ IyBsb2FkIGxlbgorIAkmbW92CSgkaW5wLCZ3cGFyYW0oMikpOwkJIyBsb2FkIGRhdGEKK0BAIC0y NDUsNyArMjQ5LDcgQEAgJGlkeD0iZWR4IjsKKyAJJnhvcgkoImVheCIsImVheCIpOworIAkmbW92 CSgmRFdQKC04LCRvdXQpLCJlYXgiKTsJCSMga2V5LT54PTA7CisgCSZtb3YJKCZEV1AoLTQsJG91 dCksImVheCIpOwkJIyBrZXktPnk9MDsKKy0mZnVuY3Rpb25fZW5kKCJSQzRfc2V0X2tleSIpOwor KyZmdW5jdGlvbl9lbmQoJHNldGtleWZ1bmMpOworIAorICMgY29uc3QgY2hhciAqUkM0X29wdGlv bnModm9pZCk7CisgJmZ1bmN0aW9uX2JlZ2luX0IoIlJDNF9vcHRpb25zIik7CitkaWZmIC11cCBv cGVuc3NsLTEuMC4wZi9jcnlwdG8vcmM0L01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL3JjNC9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzQvTWFrZWZpbGUu ZmlwcwkyMDA5LTAyLTExIDExOjAxOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjBmL2NyeXB0by9yYzQvTWFrZWZpbGUJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAx MDAKK0BAIC0yMSw4ICsyMSw4IEBAIFRFU1Q9cmM0dGVzdC5jCisgQVBQUz0KKyAKKyBMSUI9JChU T1ApL2xpYmNyeXB0by5hCistTElCU1JDPXJjNF9za2V5LmMgcmM0X2VuYy5jCistTElCT0JKPSQo UkM0X0VOQykKKytMSUJTUkM9cmM0X3NrZXkuYyByYzRfZW5jLmMgcmM0X2ZibGsuYworK0xJQk9C Sj0kKFJDNF9FTkMpIHJjNF9mYmxrLm8KKyAKKyBTUkM9ICQoTElCU1JDKQorIAorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjNC9yYzRfZmJsay5jLmZpcHMgb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL3JjNC9yYzRfZmJsay5jCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjNC9yYzRf ZmJsay5jLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4wZi9jcnlwdG8vcmM0L3JjNF9mYmxrLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAw MDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNzUgQEAKKysvKiBjcnlwdG8vcmM0L3JjNF9mYmxrLmMg Ki8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3Jn KSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisr ICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoK KysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNT TC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqLworKworKworKyNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgorKyNpbmNs dWRlICJyYzRfbG9jbC5oIgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKysvKiBGSVBTIG1vZGUgYmxvY2tpbmcgZm9yIFJD NCBoYXMgdG8gYmUgZG9uZSBzZXBhcmF0ZWx5IHNpbmNlIFJDNF9zZXRfa2V5CisrICogbWF5IGJl IGltcGxlbWVudGVkIGluIGFuIGFzc2VtYmx5IGxhbmd1YWdlIGZpbGUuCisrICovCisrCisrI2lm ZGVmIE9QRU5TU0xfRklQUworK3ZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVu LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKwl7CisrCWlmIChGSVBTX21vZGUoKSkKKysJ CUZJUFNfQkFEX0FCT1JUKFJDNCkKKysJcHJpdmF0ZV9SQzRfc2V0X2tleShrZXksIGxlbiwgZGF0 YSk7CisrCX0KKysjZW5kaWYKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yYzQv cmM0LmguZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcmM0L3JjNC5oCistLS0gb3BlbnNzbC0x LjAuMGYvY3J5cHRvL3JjNC9yYzQuaC5maXBzCTIwMTItMDEtMDUgMTM6MjI6MjkuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JjNC9yYzQuaAkyMDEyLTAxLTA1IDEz OjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTc4LDYgKzc4LDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg cmM0X2tleV9zdAorIAorICAKKyBjb25zdCBjaGFyICpSQzRfb3B0aW9ucyh2b2lkKTsKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrdm9pZCBwcml2YXRlX1JDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwg aW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisrI2VuZGlmCisgdm9pZCBSQzRf c2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEp OworIHZvaWQgUkM0KFJDNF9LRVkgKmtleSwgc2l6ZV90IGxlbiwgY29uc3QgdW5zaWduZWQgY2hh ciAqaW5kYXRhLAorIAkJdW5zaWduZWQgY2hhciAqb3V0ZGF0YSk7CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vcmM0L3JjNF9za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v cmM0L3JjNF9za2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcmM0L3JjNF9za2V5LmMu ZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjBmL2NyeXB0by9yYzQvcmM0X3NrZXkuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCAr MDEwMAorQEAgLTU5LDYgKzU5LDExIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvcmM0Lmg+CisgI2lu Y2x1ZGUgInJjNF9sb2NsLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworIAorIGNvbnN0IGNoYXIgUkM0X3ZlcnNpb25b XT0iUkM0IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitAQCAtODUsNyArOTAsMTEgQEAgY29u c3QgY2hhciAqUkM0X29wdGlvbnModm9pZCkKKyAgKiBEYXRlOiBXZWQsIDE0IFNlcCAxOTk0IDA2 OjM1OjMxIEdNVAorICAqLworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt2b2lkIHByaXZhdGVf UkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpk YXRhKQorKyNlbHNlCisgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCisrI2VuZGlmCisgCXsKKyAgICAgICAgIHJlZ2lzdGVy IFJDNF9JTlQgdG1wOworICAgICAgICAgcmVnaXN0ZXIgaW50IGlkMSxpZDI7CitAQCAtMTI2LDcg KzEzNSwxMiBAQCB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgCisgCQkg KiBtb2R1bGUuLi4KKyAJCSAqCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KKyAJCSAqLworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJCXVuc2lnbmVkIGxvbmcgKmlhMzJjYXBfcHRyID0gT1BFTlNT TF9pYTMyY2FwX2xvYygpOworKwkJaWYgKGlhMzJjYXBfcHRyICYmICgqaWEzMmNhcF9wdHIgJiAo MTw8MjgpKSkgeworKyNlbHNlCisgCQlpZiAoT1BFTlNTTF9pYTMyY2FwX1AgJiAoMTw8MjgpKSB7 CisrI2VuZGlmCisgCQkJdW5zaWduZWQgY2hhciAqY3A9KHVuc2lnbmVkIGNoYXIgKilkOworIAor IAkJCWZvciAoaT0wO2k8MjU2O2krKykgY3BbaV09aTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9yaXBlbWQvcmlwZW1kLmguZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcmlwZW1k L3JpcGVtZC5oCistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaC5maXBz CTIwMTItMDEtMDUgMTM6MjI6MjkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYv Y3J5cHRvL3JpcGVtZC9yaXBlbWQuaAkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEw MAorQEAgLTkxLDYgKzkxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUklQRU1EMTYwc3RhdGVfc3QKKyAJ dW5zaWduZWQgaW50ICAgbnVtOworIAl9IFJJUEVNRDE2MF9DVFg7CisgCisrI2lmZGVmIE9QRU5T U0xfRklQUworK2ludCBwcml2YXRlX1JJUEVNRDE2MF9Jbml0KFJJUEVNRDE2MF9DVFggKmMpOwor KyNlbmRpZgorIGludCBSSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKTsKKyBpbnQgUklQ RU1EMTYwX1VwZGF0ZShSSVBFTUQxNjBfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qg bGVuKTsKKyBpbnQgUklQRU1EMTYwX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBSSVBFTUQxNjBf Q1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYworLS0tIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6 MTMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JpcGVtZC9ybWRf ZGdzdC5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtNTksNiArNTks MTEgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAicm1kX2xvY2wuaCIKKyAjaW5j bHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisr CisgCisgY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYwIiBPUEVOU1NMX1ZF UlNJT05fUFRFWFQ7CisgCitAQCAtNjksNyArNzQsNyBAQCBjb25zdCBjaGFyIFJNRDE2MF92ZXJz aW9uW109IlJJUEUtTUQxNjAiCisgICAgICB2b2lkIHJpcGVtZDE2MF9ibG9jayhSSVBFTUQxNjBf Q1RYICpjLCB1bnNpZ25lZCBsb25nICpwLHNpemVfdCBudW0pOworICMgIGVuZGlmCisgCistaW50 IFJJUEVNRDE2MF9Jbml0KFJJUEVNRDE2MF9DVFggKmMpCisrRklQU19OT05fRklQU19NRF9Jbml0 KFJJUEVNRDE2MCkKKyAJeworIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+QT1SSVBF TUQxNjBfQTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yc2EvcnNhX2VheS5jLmZp cHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JzYS9yc2FfZWF5LmMKKy0tLSBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzCTIwMTEtMTAtMTkgMTY6NTg6MzQuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JzYS9yc2FfZWF5LmMJMjAxMi0wMS0w NSAxMzoyNzowMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMTQsNiArMTE0LDEwIEBACisgI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjaW5jbHVkZSA8 b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyAjaWZuZGVm IFJTQV9OVUxMCisgCitAQCAtMTM4LDcgKzE0Miw3IEBAIHN0YXRpYyBSU0FfTUVUSE9EIHJzYV9w a2NzMV9lYXlfbWV0aD17CisgCUJOX21vZF9leHBfbW9udCwgLyogWFhYIHByb2JhYmx5IHdlIHNo b3VsZCBub3QgdXNlIE1vbnRnb21lcnkgaWYgIGUgPT0gMyAqLworIAlSU0FfZWF5X2luaXQsCisg CVJTQV9lYXlfZmluaXNoLAorLQkwLCAvKiBmbGFncyAqLworKwlSU0FfRkxBR19GSVBTX01FVEhP RCwgLyogZmxhZ3MgKi8KKyAJTlVMTCwKKyAJMCwgLyogcnNhX3NpZ24gKi8KKyAJMCwgLyogcnNh X3ZlcmlmeSAqLworQEAgLTE1MCw2ICsxNTQsMTYgQEAgY29uc3QgUlNBX01FVEhPRCAqUlNBX1BL Q1MxX1NTTGVheSh2b2lkKQorIAlyZXR1cm4oJnJzYV9wa2NzMV9lYXlfbWV0aCk7CisgCX0KKyAK KysvKiBVc2FnZSBleGFtcGxlOworKyAqICAgIE1PTlRfSEVMUEVSKHJzYSwgYm5fY3R4LCBwLCBy c2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSwgZ290byBlcnIpOworKyAqLworKyNk ZWZpbmUgTU9OVF9IRUxQRVIocnNhLCBjdHgsIG0sIHByZV9jb25kLCBlcnJfaW5zdHIpIFwKKysJ aWYoKHByZV9jb25kKSAmJiAoKHJzYSktPl9tZXRob2RfbW9kXyMjbSA9PSBOVUxMKSAmJiBcCisr CQkJIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJigocnNhKS0+X21ldGhvZF9tb2RfIyNtKSwgXAor KwkJCQlDUllQVE9fTE9DS19SU0EsIFwKKysJCQkJKHJzYSktPm0sIChjdHgpKSkgXAorKwkJZXJy X2luc3RyCisrCisgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19lbmNyeXB0KGludCBmbGVuLCBj b25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLAorIAkgICAgIHVuc2lnbmVkIGNoYXIgKnRvLCBSU0Eg KnJzYSwgaW50IHBhZGRpbmcpCisgCXsKK0BAIC0xNTgsNiArMTcyLDIzIEBAIHN0YXRpYyBpbnQg UlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmwKKyAJdW5zaWduZWQgY2hhciAqYnVmPU5VTEw7 CisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBT X21vZGUoKSkKKysJCXsKKysJCWlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJ CQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULEZJUFNfUl9GSVBTX1NFTEZU RVNUX0ZBSUxFRCk7CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJaWYgKEJOX251bV9iaXRz KHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCisrCQkJeworKwkJ CVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09f U01BTEwpOworKwkJCXJldHVybiAtMTsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChC Tl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKKyAJCXsK KyAJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9NT0RVTFVTX1RP T19MQVJHRSk7CitAQCAtMjIzLDkgKzI1NCw3IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNf ZW5jcnlwdChpbnQgZmwKKyAJCWdvdG8gZXJyOworIAkJfQorIAorLQlpZiAocnNhLT5mbGFncyAm IFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykKKy0JCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgm cnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKKy0JCQln b3RvIGVycjsKKysJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxB R19DQUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKKyAKKyAJaWYgKCFyc2EtPm1ldGgtPmJuX21vZF9l eHAocmV0LGYscnNhLT5lLHJzYS0+bixjdHgsCisgCQlyc2EtPl9tZXRob2RfbW9kX24pKSBnb3Rv IGVycjsKK0BAIC0zNjEsNiArMzkwLDIzIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2Vu Y3J5cHQoaW50IGYKKyAJQklHTlVNICp1bmJsaW5kID0gTlVMTDsKKyAJQk5fQkxJTkRJTkcgKmJs aW5kaW5nID0gTlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUo KSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNl cnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZB SUxFRCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysKKysJCWlmIChCTl9udW1fYml0cyhyc2Et Pm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQorKwkJCXsKKysJCQlSU0Fl cnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFM TCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKChjdHg9 Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7Cisg CWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKK0BAIC00NDQsOSArNDkwLDcgQEAgc3RhdGljIGludCBS U0FfZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQgZgorIAkJZWxzZQorIAkJCWQ9IHJzYS0+ZDsKKyAK Ky0JCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQorLQkJCWlmKCFCTl9N T05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwg cnNhLT5uLCBjdHgpKQorLQkJCQlnb3RvIGVycjsKKysJCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBu LCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7CisgCisgCQlp ZiAoIXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChyZXQsZixkLHJzYS0+bixjdHgsCisgCQkJCXJzYS0+ X21ldGhvZF9tb2RfbikpIGdvdG8gZXJyOworQEAgLTUwNCw2ICs1NDgsMjMgQEAgc3RhdGljIGlu dCBSU0FfZWF5X3ByaXZhdGVfZGVjcnlwdChpbnQgZgorIAlCSUdOVU0gKnVuYmxpbmQgPSBOVUxM OworIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQo KSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsRklQ U19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJfQorKworKwkJ aWYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJ VFMpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCwgUlNB X1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJfQorKwkJfQorKyNl bmRpZgorKworIAlpZigoY3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKyAJ Qk5fQ1RYX3N0YXJ0KGN0eCk7CisgCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKK0BAIC01NzcsOSAr NjM4LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZGVjcnlwdChpbnQgZgorIAkJZWxz ZQorIAkJCWQgPSByc2EtPmQ7CisgCistCQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hF X1BVQkxJQykKKy0JCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9t b2RfbiwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCistCQkJCWdvdG8gZXJyOworKwkJ TU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJM SUMsIGdvdG8gZXJyKTsKKyAJCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLGQscnNh LT5uLGN0eCwKKyAJCQkJcnNhLT5fbWV0aG9kX21vZF9uKSkKKyAJCSAgZ290byBlcnI7CitAQCAt NjM5LDYgKzY5OCwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2RlY3J5cHQoaW50IGZs CisgCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOworIAlCTl9DVFggKmN0eD1OVUxMOworIAorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYoRklQU19z ZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJM SUNfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJCWdvdG8gZXJyOwor KwkJCX0KKysKKysJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19N SU5fTU9EVUxVU19CSVRTKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNf REVDUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJ fQorKwkJfQorKyNlbmRpZgorKworIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xf UlNBX01BWF9NT0RVTFVTX0JJVFMpCisgCQl7CisgCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJM SUNfREVDUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOworQEAgLTY4OSw5ICs3NjUsNyBA QCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2RlY3J5cHQoaW50IGZsCisgCQlnb3RvIGVycjsK KyAJCX0KKyAKKy0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCistCQlp ZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xP Q0tfUlNBLCByc2EtPm4sIGN0eCkpCistCQkJZ290byBlcnI7CisrCU1PTlRfSEVMUEVSKHJzYSwg Y3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7Cisg CisgCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLHJzYS0+ZSxyc2EtPm4sY3R4LAor IAkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290byBlcnI7CitAQCAtNzM5LDYgKzgxMyw3IEBAIHN0 YXRpYyBpbnQgUlNBX2VheV9tb2RfZXhwKEJJR05VTSAqcjAsIGMKKyAJQklHTlVNICpyMSwqbTEs KnZyZnk7CisgCUJJR05VTSBsb2NhbF9kbXAxLGxvY2FsX2RtcTEsbG9jYWxfYyxsb2NhbF9yMTsK KyAJQklHTlVNICpkbXAxLCpkbXExLCpjLCpwcjE7CisrCWludCBibl9mbGFnczsKKyAJaW50IHJl dD0wOworIAorIAlCTl9DVFhfc3RhcnQoY3R4KTsKK0BAIC03NDYsNDEgKzgyMSwzMSBAQCBzdGF0 aWMgaW50IFJTQV9lYXlfbW9kX2V4cChCSUdOVU0gKnIwLCBjCisgCW0xID0gQk5fQ1RYX2dldChj dHgpOworIAl2cmZ5ID0gQk5fQ1RYX2dldChjdHgpOworIAorLQl7CistCQlCSUdOVU0gbG9jYWxf cCwgbG9jYWxfcTsKKy0JCUJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTDsKKy0KKy0JCS8qIE1h a2Ugc3VyZSBCTl9tb2RfaW52ZXJzZSBpbiBNb250Z29tZXJ5IGludGlhbGl6YXRpb24gdXNlcyB0 aGUKKy0JCSAqIEJOX0ZMR19DT05TVFRJTUUgZmxhZyAodW5sZXNzIFJTQV9GTEFHX05PX0NPTlNU VElNRSBpcyBzZXQpCistCQkgKi8KKy0JCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19D T05TVFRJTUUpKQorLQkJCXsKKy0JCQlCTl9pbml0KCZsb2NhbF9wKTsKKy0JCQlwID0gJmxvY2Fs X3A7CistCQkJQk5fd2l0aF9mbGFncyhwLCByc2EtPnAsIEJOX0ZMR19DT05TVFRJTUUpOworLQor LQkJCUJOX2luaXQoJmxvY2FsX3EpOworLQkJCXEgPSAmbG9jYWxfcTsKKy0JCQlCTl93aXRoX2Zs YWdzKHEsIHJzYS0+cSwgQk5fRkxHX0NPTlNUVElNRSk7CistCQkJfQorLQkJZWxzZQorLQkJCXsK Ky0JCQlwID0gcnNhLT5wOworLQkJCXEgPSByc2EtPnE7CistCQkJfQorKwkvKiBNYWtlIHN1cmUg bW9kX2ludmVyc2UgaW4gbW9udGdvbWVyZXkgaW50aWFsaXphdGlvbiB1c2UgY29ycmVjdCAKKysJ ICogQk5fRkxHX0NPTlNUVElNRSBmbGFnLgorKwkgKi8KKysJYm5fZmxhZ3MgPSByc2EtPnAtPmZs YWdzOworKwlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKKysJCXsK KysJCXJzYS0+cC0+ZmxhZ3MgfD0gQk5fRkxHX0NPTlNUVElNRTsKKysJCX0KKysJTU9OVF9IRUxQ RVIocnNhLCBjdHgsIHAsIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFLCBnb3Rv IGVycik7CisrCS8qIFdlIHJlc3RvcmUgYm5fZmxhZ3MgYmFjayAqLworKwlyc2EtPnAtPmZsYWdz ID0gYm5fZmxhZ3M7CisgCistCQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BSSVZB VEUpCistCQkJeworLQkJCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9k X21vZF9wLCBDUllQVE9fTE9DS19SU0EsIHAsIGN0eCkpCistCQkJCWdvdG8gZXJyOworLQkJCWlm ICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9xLCBDUllQVE9fTE9D S19SU0EsIHEsIGN0eCkpCistCQkJCWdvdG8gZXJyOworLQkJCX0KKy0JfQorKyAgICAgICAgLyog TWFrZSBzdXJlIG1vZF9pbnZlcnNlIGluIG1vbnRnb21lcmV5IGludGlhbGl6YXRpb24gdXNlIGNv cnJlY3QKKysgICAgICAgICAqIEJOX0ZMR19DT05TVFRJTUUgZmxhZy4KKysgICAgICAgICAqLwor Kwlibl9mbGFncyA9IHJzYS0+cS0+ZmxhZ3M7CisrCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxB R19OT19DT05TVFRJTUUpKQorKwkJeworKwkJcnNhLT5xLT5mbGFncyB8PSBCTl9GTEdfQ09OU1RU SU1FOworKwkJfQorKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgcSwgcnNhLT5mbGFncyAmIFJTQV9G TEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJyKTsKKysJLyogV2UgcmVzdG9yZSBibl9mbGFncyBi YWNrICovCisrCXJzYS0+cS0+ZmxhZ3MgPSBibl9mbGFnczsJCisgCistCWlmIChyc2EtPmZsYWdz ICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQorLQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2Vk KCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQorLQkJ CWdvdG8gZXJyOworKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9G TEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOworIAorIAkvKiBjb21wdXRlIEkgbW9kIHEgKi8K KyAJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCitAQCAtODk3LDYg Kzk2Miw5IEBAIGVycjoKKyAKKyBzdGF0aWMgaW50IFJTQV9lYXlfaW5pdChSU0EgKnJzYSkKKyAJ eworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRp ZgorIAlyc2EtPmZsYWdzfD1SU0FfRkxBR19DQUNIRV9QVUJMSUN8UlNBX0ZMQUdfQ0FDSEVfUFJJ VkFURTsKKyAJcmV0dXJuKDEpOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v cnNhL3JzYV9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yc2EvcnNhX2Vyci5jCist LS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcwkyMDA4LTEyLTI5IDE3 OjExOjU2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yc2EvcnNh X2Vyci5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMTExLDggKzEx MSwxMiBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJfZnVuY3RzW109Cisge0VSUl9G VU5DKFJTQV9GX1JTQV9QUklOVF9GUCksCSJSU0FfcHJpbnRfZnAifSwKKyB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1BSSVZfREVDT0RFKSwJIlJTQV9QUklWX0RFQ09ERSJ9LAorIHtFUlJfRlVOQyhSU0Ff Rl9SU0FfUFJJVl9FTkNPREUpLAkiUlNBX1BSSVZfRU5DT0RFIn0sCisre0VSUl9GVU5DKFJTQV9G X1JTQV9QUklWQVRFX0VOQ1JZUFQpLAkiUlNBX3ByaXZhdGVfZW5jcnlwdCJ9LAorIHtFUlJfRlVO QyhSU0FfRl9SU0FfUFVCX0RFQ09ERSksCSJSU0FfUFVCX0RFQ09ERSJ9LAorK3tFUlJfRlVOQyhS U0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQpLAkiUlNBX3B1YmxpY19kZWNyeXB0In0sCisge0VSUl9G VU5DKFJTQV9GX1JTQV9TRVRVUF9CTElORElORyksCSJSU0Ffc2V0dXBfYmxpbmRpbmcifSwKKyt7 RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCksCSJSU0Ffc2V0X2RlZmF1bHRf bWV0aG9kIn0sCisre0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfTUVUSE9EKSwJIlJTQV9zZXRfbWV0 aG9kIn0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOKSwJIlJTQV9zaWduIn0sCisge0VSUl9G VU5DKFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HKSwJIlJTQV9zaWduX0FTTjFfT0NU RVRfU1RSSU5HIn0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9WRVJJRlkpLAkiUlNBX3ZlcmlmeSJ9 LAorQEAgLTE1NSwxMCArMTU5LDEyIEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9y ZWFzb25zW10KKyB7RVJSX1JFQVNPTihSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpICAgICwia2V5 IHNpemUgdG9vIHNtYWxsIn0sCisge0VSUl9SRUFTT04oUlNBX1JfTEFTVF9PQ1RFVF9JTlZBTElE KSAgICAsImxhc3Qgb2N0ZXQgaW52YWxpZCJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX01PRFVMVVNf VE9PX0xBUkdFKSAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9LAorK3tFUlJfUkVBU09OKFJTQV9S X05PTl9GSVBTX01FVEhPRCkgICAgICAgLCJub24gZmlwcyBtZXRob2QifSwKKyB7RVJSX1JFQVNP TihSU0FfUl9OT19QVUJMSUNfRVhQT05FTlQpICAgICwibm8gcHVibGljIGV4cG9uZW50In0sCisg e0VSUl9SRUFTT04oUlNBX1JfTlVMTF9CRUZPUkVfQkxPQ0tfTUlTU0lORyksIm51bGwgYmVmb3Jl IGJsb2NrIG1pc3NpbmcifSwKKyB7RVJSX1JFQVNPTihSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1Bf USkgICwibiBkb2VzIG5vdCBlcXVhbCBwIHEifSwKKyB7RVJSX1JFQVNPTihSU0FfUl9PQUVQX0RF Q09ESU5HX0VSUk9SKSAgICwib2FlcCBkZWNvZGluZyBlcnJvciJ9LAorK3tFUlJfUkVBU09OKFJT QV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpLCJvcGVyYXRpb24gbm90IGFs bG93ZWQgaW4gZmlwcyBtb2RlIn0sCisge0VSUl9SRUFTT04oUlNBX1JfT1BFUkFUSU9OX05PVF9T VVBQT1JURURfRk9SX1RISVNfS0VZVFlQRSksIm9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciB0 aGlzIGtleXR5cGUifSwKKyB7RVJSX1JFQVNPTihSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRCkg ICwicGFkZGluZyBjaGVjayBmYWlsZWQifSwKKyB7RVJSX1JFQVNPTihSU0FfUl9QX05PVF9QUklN RSkgICAgICAgICAgICwicCBub3QgcHJpbWUifSwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2Ny eXB0by9yc2EvcnNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JzYS9yc2FfZ2Vu LmMKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcnNhL3JzYV9nZW4uYy5maXBzCTIwMDctMDMt MjggMDI6MTU6MjcuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3Jz YS9yc2FfZ2VuLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02Nyw2 ICs2Nyw4MiBAQAorICNpbmNsdWRlICJjcnlwdGxpYi5oIgorICNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrc3RhdGlj IGludCBmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9y c2Ffa2V5Z2VuKHZvaWQpCisrCXsKKysJZmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDE7CisrCX0K KysKKytpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpCisrCXsKKysJY29uc3QgdW5zaWduZWQg Y2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7CisrCXVuc2lnbmVkIGNoYXIg KmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKKysJaW50IGxlbiwgcmV0ID0gMDsKKysJRVZQ X1BLRVkgKnBrOworKworKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQorKwkJZ290 byBlcnI7CisrCisrCUVWUF9QS0VZX3NldDFfUlNBKHBrLCByc2EpOworKworKwkvKiBQZXJmb3Jt IHBhaXJ3aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0ICovCisrCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVW UF9NRF9DVFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCisrCQl8fCAhZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhf RkxBR19QQURfWDkzMSwgTlVMTCkKKysJCXx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGss IHRicywgLTEsCisrCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9Q U1MsIE5VTEwpKQorKwkJZ290byBlcnI7CisrCS8qIE5vdyBwZXJmb3JtIHBhaXJ3aXNlIGNvbnNp c3RlbmN5IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCisrCWN0YnVmID0gT1BFTlNTTF9tYWxsb2Mo UlNBX3NpemUocnNhKSk7CisrCWlmICghY3RidWYpCisrCQlnb3RvIGVycjsKKysKKysJbGVuID0g UlNBX3B1YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwgdGJzLCBjdGJ1ZiwgcnNhLCBSU0Ff UEtDUzFfUEFERElORyk7CisrCWlmIChsZW4gPD0gMCkKKysJCWdvdG8gZXJyOworKwkvKiBDaGVj ayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0ICovCisrCWlmICgobGVuID09IChz aXplb2YodGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3RidWYsIGxlbikpCisrCQlnb3RvIGVy cjsKKysJcHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKKysKKysJaWYgKCFw dGJ1ZikKKysJCWdvdG8gZXJyOworKwlsZW4gPSBSU0FfcHJpdmF0ZV9kZWNyeXB0KGxlbiwgY3Ri dWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKKysJaWYgKGxlbiAhPSAoc2l6ZW9m KHRicykgLSAxKSkKKysJCWdvdG8gZXJyOworKwlpZiAobWVtY21wKHB0YnVmLCB0YnMsIGxlbikp CisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0gMTsKKysKKysJaWYgKCFwdGJ1ZikKKysJCWdvdG8g ZXJyOworKwkKKysJZXJyOgorKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlmaXBzX3NldF9zZWxm dGVzdF9mYWlsKCk7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSxGSVBTX1JfUEFJ UldJU0VfVEVTVF9GQUlMRUQpOworKwkJfQorKworKwlpZiAoY3RidWYpCisrCQlPUEVOU1NMX2Zy ZWUoY3RidWYpOworKwlpZiAocHRidWYpCisrCQlPUEVOU1NMX2ZyZWUocHRidWYpOworKwlpZiAo cGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRp ZgorIAorIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBpbnQgYml0cywg QklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOworIAorQEAgLTkwLDYgKzE2NiwyMyBAQCBz dGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwgCisgCWludCBiaXRzcCxiaXRz cSxvaz0gLTEsbj0wOworIAlCTl9DVFggKmN0eD1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQo KSkKKysJICAgIAl7CisrCQkgICAgRklQU2VycihGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOLEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICAJcmV0dXJuIDA7CisrCSAgICAJfQor KworKwkJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCisrCQkg ICAgeworKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixGSVBTX1JfS0VZ X1RPT19TSE9SVCk7CisrCQkgICAgcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKyNlbmRpZgorKwor IAljdHg9Qk5fQ1RYX25ldygpOworIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOworIAlCTl9D VFhfc3RhcnQoY3R4KTsKK0BAIC0yMDEsNiArMjk0LDE3IEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0 aW5fa2V5Z2VuKFJTQSAqcnNhLCAKKyAJCXAgPSByc2EtPnA7CisgCWlmICghQk5fbW9kX2ludmVy c2UocnNhLT5pcW1wLHJzYS0+cSxwLGN0eCkpIGdvdG8gZXJyOworIAorKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYgKGZpcHNfcnNhX3BhaXJ3aXNl X2ZhaWwpCisrCQkJQk5fYWRkX3dvcmQocnNhLT5uLCAxKTsKKysKKysJCWlmKCFmaXBzX2NoZWNr X3JzYShyc2EpKQorKwkJICAgIGdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorKworIAlvaz0xOwor IGVycjoKKyAJaWYgKG9rID09IC0xKQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3Jz YS9yc2EuaC5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yc2EvcnNhLmgKKy0tLSBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vcnNhL3JzYS5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoyOS4wMDAwMDAw MDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vcnNhL3JzYS5oCTIwMTItMDEtMDUg MTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtNzQsNiArNzQsMjEgQEAKKyAjZXJyb3IgUlNB IGlzIGRpc2FibGVkLgorICNlbmRpZgorIAorKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIFJT QSBtZXRob2QgaXMgRklQUyBjb21wbGlhbnQgYW5kIGNhbiBiZSB1c2VkCisrICogaW4gRklQUyBt b2RlLiBUaGlzIGlzIHNldCBpbiB0aGUgdmFsaWRhdGVkIG1vZHVsZSBtZXRob2QuIElmIGFuCisr ICogYXBwbGljYXRpb24gc2V0cyB0aGlzIGZsYWcgaW4gaXRzIG93biBtZXRob2RzIGl0IGlzIGl0 cyByZXBvc2liaWxpdHkKKysgKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBjb21wbGlhbnQuCisr ICovCisrCisrI2RlZmluZSBSU0FfRkxBR19GSVBTX01FVEhPRAkJCTB4MDQwMAorKworKy8qIElm IHRoaXMgZmxhZyBpcyBzZXQgdGhlIG9wZXJhdGlvbnMgbm9ybWFsbHkgZGlzYWJsZWQgaW4gRklQ UyBtb2RlIGFyZQorKyAqIHBlcm1pdHRlZCBpdCBpcyB0aGVuIHRoZSBhcHBsaWNhdGlvbnMgcmVz cG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlCisrICogdXNhZ2UgaXMgY29tcGxpYW50Lgor KyAqLworKworKyNkZWZpbmUgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJCQkweDA0MDAKKysKKyAj aWZkZWYgIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtMTY0LDYgKzE3 OSw4IEBAIHN0cnVjdCByc2Ffc3QKKyAjIGRlZmluZSBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19C SVRTCTE2Mzg0CisgI2VuZGlmCisgCisrI2RlZmluZSBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RV TFVTX0JJVFMgMTAyNAorKworICNpZm5kZWYgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRT CisgIyBkZWZpbmUgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCTMwNzIKKyAjZW5kaWYK K0BAIC0yNjcsNiArMjg0LDExIEBAIFJTQSAqCVJTQV9nZW5lcmF0ZV9rZXkoaW50IGJpdHMsIHVu c2lnbmUKKyAKKyAvKiBOZXcgdmVyc2lvbiAqLworIGludAlSU0FfZ2VuZXJhdGVfa2V5X2V4KFJT QSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOworK2ludCBSU0FfWDkz MV9kZXJpdmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEs IEJJR05VTSAqcTIsCisrCQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLCBj b25zdCBCSUdOVU0gKlhwLAorKwkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0gKlhx MiwgY29uc3QgQklHTlVNICpYcSwKKysJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7 CisraW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0 IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKKyAKKyBpbnQJUlNBX2NoZWNrX2tleShjb25zdCBS U0EgKik7CisgCS8qIG5leHQgNCByZXR1cm4gLTEgb24gZXJyb3IgKi8KK0BAIC00MzgsOCArNDYw LDEyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBSU0FfRl9S U0FfUFJJTlRfRlAJCQkJIDExNgorICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFCQkJCSAx MzcKKyAjZGVmaW5lIFJTQV9GX1JTQV9QUklWX0VOQ09ERQkJCQkgMTM4CisrI2RlZmluZSBSU0Ff Rl9SU0FfUFJJVkFURV9FTkNSWVBUCQkJIDE0OAorICNkZWZpbmUgUlNBX0ZfUlNBX1BVQl9ERUNP REUJCQkJIDEzOQorKyNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDE0OQorICNk ZWZpbmUgUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HCQkJIDEzNgorKyNkZWZpbmUgUlNBX0ZfUlNB X1NFVF9ERUZBVUxUX01FVEhPRAkJCSAxNTAKKysjZGVmaW5lIFJTQV9GX1JTQV9TRVRfTUVUSE9E CQkJCSAxNTEKKyAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOCQkJCQkgMTE3CisgI2RlZmluZSBSU0Ff Rl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORwkJIDExOAorICNkZWZpbmUgUlNBX0ZfUlNBX1ZF UklGWQkJCQkgMTE5CitAQCAtNDc5LDEwICs1MDUsMTIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3Ry aW5ncyh2b2lkKTsKKyAjZGVmaW5lIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMjAKKyAj ZGVmaW5lIFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRAkJCSAxMzQKKyAjZGVmaW5lIFJTQV9SX01P RFVMVVNfVE9PX0xBUkdFCQkJCSAxMDUKKysjZGVmaW5lIFJTQV9SX05PTl9GSVBTX01FVEhPRAkJ CQkgMTQ5CisgI2RlZmluZSBSU0FfUl9OT19QVUJMSUNfRVhQT05FTlQJCQkgMTQwCisgI2RlZmlu ZSBSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HCQkJIDExMworICNkZWZpbmUgUlNBX1Jf Tl9ET0VTX05PVF9FUVVBTF9QX1EJCQkgMTI3CisgI2RlZmluZSBSU0FfUl9PQUVQX0RFQ09ESU5H X0VSUk9SCQkJIDEyMQorKyNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJ UFNfTU9ERQkgMTUwCisgI2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1Jf VEhJU19LRVlUWVBFCSAxNDgKKyAjZGVmaW5lIFJTQV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVECQkJ IDExNAorICNkZWZpbmUgUlNBX1JfUF9OT1RfUFJJTUUJCQkJIDEyOAorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMGYvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8v cnNhL3JzYV9saWIuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZp cHMJMjAwOS0xMi0wOSAxNDozODoyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4w Zi9jcnlwdG8vcnNhL3JzYV9saWIuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEw MAorQEAgLTgwLDYgKzgwLDEzIEBAIFJTQSAqUlNBX25ldyh2b2lkKQorIAorIHZvaWQgUlNBX3Nl dF9kZWZhdWx0X21ldGhvZChjb25zdCBSU0FfTUVUSE9EICptZXRoKQorIAl7CisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFH X0ZJUFNfTUVUSE9EKSkKKysJCXsKKysJCVJTQWVycihSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVU SE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOworKwkJcmV0dXJuOworKwkJfQorKyNlbmRpZgor IAlkZWZhdWx0X1JTQV9tZXRoID0gbWV0aDsKKyAJfQorIAorQEAgLTExMSw2ICsxMTgsMTMgQEAg aW50IFJTQV9zZXRfbWV0aG9kKFJTQSAqcnNhLCBjb25zdCBSU0FfTQorIAkvKiBOQjogVGhlIGNh bGxlciBpcyBzcGVjaWZpY2FsbHkgc2V0dGluZyBhIG1ldGhvZCwgc28gaXQncyBub3QgdXAgdG8g dXMKKyAJICogdG8gZGVhbCB3aXRoIHdoaWNoIEVOR0lORSBpdCBjb21lcyBmcm9tLiAqLworIAlj b25zdCBSU0FfTUVUSE9EICptdG1wOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNf bW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7Cisr CQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Cisr CQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYKKyAJbXRtcCA9IHJzYS0+bWV0aDsKKyAJaWYgKG10 bXAtPmZpbmlzaCkgbXRtcC0+ZmluaXNoKHJzYSk7CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lO RQorQEAgLTE2Myw2ICsxNzcsMTggQEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2lu ZSkKKyAJCQl9CisgCQl9CisgI2VuZGlmCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQ U19tb2RlKCkgJiYgIShyZXQtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQor KwkJeworKwkJUlNBZXJyKFJTQV9GX1JTQV9ORVdfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRI T0QpOworKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKysJCWlmIChyZXQtPmVuZ2luZSkKKysJ CQlFTkdJTkVfZmluaXNoKHJldC0+ZW5naW5lKTsKKysjZW5kaWYKKysJCU9QRU5TU0xfZnJlZShy ZXQpOworKwkJcmV0dXJuIE5VTEw7CisrCQl9CisrI2VuZGlmCisgCisgCXJldC0+cGFkPTA7Cisg CXJldC0+dmVyc2lvbj0wOworQEAgLTI5NCw2ICszMjAsMTMgQEAgaW50IFJTQV9wdWJsaWNfZW5j cnlwdChpbnQgZmxlbiwgY29uc3QgdQorIGludCBSU0FfcHJpdmF0ZV9lbmNyeXB0KGludCBmbGVu LCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBjaGFyICp0bywKKyAJICAgICBS U0EgKnJzYSwgaW50IHBhZGRpbmcpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJ UFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJ CXsKKysJCVJTQWVycihSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBULCBSU0FfUl9PUEVSQVRJT05f Tk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgor IAlyZXR1cm4ocnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMoZmxlbiwgZnJvbSwgdG8sIHJzYSwgcGFk ZGluZykpOworIAl9CisgCitAQCAtMzA2LDYgKzMzOSwxMyBAQCBpbnQgUlNBX3ByaXZhdGVfZGVj cnlwdChpbnQgZmxlbiwgY29uc3QgCisgaW50IFJTQV9wdWJsaWNfZGVjcnlwdChpbnQgZmxlbiwg Y29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8sCisgCSAgICAgUlNB ICpyc2EsIGludCBwYWRkaW5nKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBT X21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisrCQl7 CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9PUEVSQVRJT05fTk9U X0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgorIAly ZXR1cm4ocnNhLT5tZXRoLT5yc2FfcHViX2RlYyhmbGVuLCBmcm9tLCB0bywgcnNhLCBwYWRkaW5n KSk7CisgCX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yc2EvcnNhX3NpZ24u Yy5maXBzIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9yc2EvcnNhX3NpZ24uYworLS0tIG9wZW5zc2wt MS4wLjBmL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzCTIwMDctMDQtMjQgMDM6MDU6NDIuMDAw MDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCTIw MTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMTMwLDcgKzEzMCw4IEBAIGlu dCBSU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKKyAJCWkyZF9YNTA5X1NJRygm c2lnLCZwKTsKKyAJCXM9dG1wczsKKyAJfQorLQlpPVJTQV9wcml2YXRlX2VuY3J5cHQoaSxzLHNp Z3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1l dGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCisrCWkgPSByc2EtPm1ldGgt PnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGkscyxzaWdyZXQscnNhLFJT QV9QS0NTMV9QQURESU5HKSA6IDA7CisgCWlmIChpIDw9IDApCisgCQlyZXQ9MDsKKyAJZWxzZQor QEAgLTE2MSw4ICsxNjIsOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBjb25zdCB1 bnNpCisgCisgCWlmKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEpICYmIHJtKQorIAkJeworLQkJaSA9 IFJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKKy0JCQkJCXNpZ2J1ZixybSxyc2EsUlNB X1BLQ1MxX1BBRERJTkcpOworKwkJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1l dGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLAorKwkJCQkJc2lnYnVmLHJtLHJzYSxSU0FfUEtD UzFfUEFERElORykgOiAwOworIAkJaWYgKGkgPD0gMCkKKyAJCQlyZXR1cm4gMDsKKyAJCSpwcm1f bGVuID0gaTsKK0BAIC0xNzksNyArMTgwLDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlw ZSwgY29uc3QgdW5zaQorIAkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxSU0FfUl9JTlZB TElEX01FU1NBR0VfTEVOR1RIKTsKKyAJCQlnb3RvIGVycjsKKyAJfQorLQlpPVJTQV9wdWJsaWNf ZGVjcnlwdCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkv KiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2Nr aW5nICovCisrCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHVi X2RlYygoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKKyAK KyAJaWYgKGkgPD0gMCkgZ290byBlcnI7CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vc2VlZC9zZWVkLmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2VlZC9zZWVkLmMKKy0t LSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2VlZC9zZWVkLmMuZmlwcwkyMDA4LTEyLTE2IDA4OjQx OjIxLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9zZWVkL3NlZWQu YwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTM0LDYgKzM0LDkgQEAK KyAKKyAjaW5jbHVkZSA8b3BlbnNzbC9zZWVkLmg+CisgI2luY2x1ZGUgInNlZWRfbG9jbC5oIgor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlm CisgCisgc3RhdGljIGNvbnN0IHNlZWRfd29yZCBTU1s0XVsyNTZdID0gewl7CisgCTB4Mjk4OWEx YTgsIDB4MDU4NTgxODQsIDB4MTZjNmQyZDQsIDB4MTNjM2QzZDAsIDB4MTQ0NDUwNTQsIDB4MWQw ZDExMWMsIDB4MmM4Y2EwYWMsIDB4MjUwNTIxMjQsCitAQCAtMTkzLDcgKzE5NiwxOCBAQCBzdGF0 aWMgY29uc3Qgc2VlZF93b3JkIEtDW10gPSB7CisgCUtDOCwJS0M5LAlLQzEwLAlLQzExLAlLQzEy LAlLQzEzLAlLQzE0LAlLQzE1CX07CisgI2VuZGlmCisgCisrI2lmZGVmIE9QRU5TU0xfRklQUwor IHZvaWQgU0VFRF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgcmF3a2V5W1NFRURfS0VZX0xF TkdUSF0sIFNFRURfS0VZX1NDSEVEVUxFICprcykKKysgICAgICAgIHsKKysgICAgICAgIGlmIChG SVBTX21vZGUoKSkKKysgICAgICAgICAgICAgICAgRklQU19CQURfQUJPUlQoU0VFRCkKKysgICAg ICAgIHByaXZhdGVfU0VFRF9zZXRfa2V5KHJhd2tleSwga3MpOworKyAgICAgICAgfQorKworK3Zv aWQgcHJpdmF0ZV9TRUVEX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciByYXdrZXlbU0VFRF9L RVlfTEVOR1RIXSwgU0VFRF9LRVlfU0NIRURVTEUgKmtzKQorKyNlbHNlCisrdm9pZCBTRUVEX3Nl dF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciByYXdrZXlbU0VFRF9LRVlfTEVOR1RIXSwgU0VFRF9L RVlfU0NIRURVTEUgKmtzKQorKyNlbmRpZgorIHsKKyAJc2VlZF93b3JkIHgxLCB4MiwgeDMsIHg0 OworIAlzZWVkX3dvcmQgdDAsIHQxOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3Nl ZWQvc2VlZC5oLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3NlZWQvc2VlZC5oCistLS0gb3Bl bnNzbC0xLjAuMGYvY3J5cHRvL3NlZWQvc2VlZC5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoyOC4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2VlZC9zZWVkLmgJMjAx Mi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMTcsNiArMTE3LDkgQEAgdHlw ZWRlZiBzdHJ1Y3Qgc2VlZF9rZXlfc3QgeworIH0gU0VFRF9LRVlfU0NIRURVTEU7CisgCisgCisr I2lmZGVmIE9QRU5TU0xfRklQUworK3ZvaWQgcHJpdmF0ZV9TRUVEX3NldF9rZXkoY29uc3QgdW5z aWduZWQgY2hhciByYXdrZXlbU0VFRF9LRVlfTEVOR1RIXSwgU0VFRF9LRVlfU0NIRURVTEUgKmtz KTsKKysjZW5kaWYKKyB2b2lkIFNFRURfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyIHJhd2tl eVtTRUVEX0tFWV9MRU5HVEhdLCBTRUVEX0tFWV9TQ0hFRFVMRSAqa3MpOworIAorIHZvaWQgU0VF RF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgc1tTRUVEX0JMT0NLX1NJWkVdLCB1bnNpZ25l ZCBjaGFyIGRbU0VFRF9CTE9DS19TSVpFXSwgY29uc3QgU0VFRF9LRVlfU0NIRURVTEUgKmtzKTsK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9zaGEvc2hhX2Rnc3QuYy5maXBzIG9wZW5z c2wtMS4wLjBmL2NyeXB0by9zaGEvc2hhX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0 by9zaGEvc2hhX2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTQuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3NoYS9zaGFfZGdzdC5jCTIwMTItMDEtMDUgMTM6 MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtNTcsNiArNTcsMTIgQEAKKyAgKi8KKyAKKyAjaW5j bHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5o PgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2Vu ZGlmCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisgI2lmICFkZWZpbmVkKE9QRU5TU0xf Tk9fU0hBMCkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpCisgCisgI3VuZGVmICBTSEFfMQor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3NoYS9zaGEuaC5maXBzIG9wZW5zc2wtMS4w LjBmL2NyeXB0by9zaGEvc2hhLmgKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2hhL3NoYS5o LmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoyOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vc2hhL3NoYS5oCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAw CitAQCAtMTA2LDYgKzEwNiw5IEBAIHR5cGVkZWYgc3RydWN0IFNIQXN0YXRlX3N0CisgCX0gU0hB X0NUWDsKKyAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KytpbnQgcHJpdmF0ZV9TSEFfSW5pdChTSEFfQ1RYICpjKTsKKysjZW5kaWYKKyBpbnQgU0hBX0lu aXQoU0hBX0NUWCAqYyk7CisgaW50IFNIQV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAq ZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IFNIQV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hB X0NUWCAqYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2hhL3NoYV9sb2NsLmgu ZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2hhL3NoYV9sb2NsLmgKKy0tLSBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcwkyMDEyLTAxLTA1IDEzOjIyOjI5LjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9zaGEvc2hhX2xvY2wuaAkyMDEy LTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTEyMiw4ICsxMjIsMTUgQEAgdm9p ZCBzaGExX2Jsb2NrX2RhdGFfb3JkZXIgKFNIQV9DVFggKmMsIAorICNkZWZpbmUgSU5JVF9EQVRB X2gzIDB4MTAzMjU0NzZVTAorICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBVTAorIAor KyNpZiBkZWZpbmVkKFNIQV8wKSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykKKytGSVBTX05PTl9G SVBTX01EX0luaXQoU0hBKQorKyNlbHNlCisgaW50IEhBU0hfSU5JVCAoU0hBX0NUWCAqYykKKysj ZW5kaWYKKyAJeworKyNpZiBkZWZpbmVkKFNIQV8xKSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykK KysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2Yo KmMpKTsKKyAJYy0+aDA9SU5JVF9EQVRBX2gwOworIAljLT5oMT1JTklUX0RBVEFfaDE7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMuZmlwcyBvcGVuc3NsLTEu MC4wZi9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2hh L3NoYTFkZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjBmL2NyeXB0by9zaGEvc2hhMWRnc3QuYwkyMDEyLTAxLTA1IDEzOjIyOjMw LjAwMDAwMDAwMCArMDEwMAorQEAgLTYzLDYgKzYzLDEwIEBACisgI2RlZmluZSBTSEFfMQorIAor ICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyBjb25zdCBjaGFyIFNIQTFf dmVyc2lvbltdPSJTSEExIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitkaWZmIC11cCBvcGVu c3NsLTEuMC4wZi9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRv L3NoYS9zaGEyNTYuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlw cwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9zaGEvc2hhMjU2LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAK K0BAIC0xMiwxMiArMTIsMTkgQEAKKyAKKyAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyAj aW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2 Lmg+CisgCisgY29uc3QgY2hhciBTSEEyNTZfdmVyc2lvbltdPSJTSEEtMjU2IiBPUEVOU1NMX1ZF UlNJT05fUFRFWFQ7CisgCisgaW50IFNIQTIyNF9Jbml0IChTSEEyNTZfQ1RYICpjKQorIAl7Cisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisg CW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5oWzBdPTB4YzEwNTllZDhVTDsJYy0+aFsx XT0weDM2N2NkNTA3VUw7CisgCWMtPmhbMl09MHgzMDcwZGQxN1VMOwljLT5oWzNdPTB4ZjcwZTU5 MzlVTDsKK0BAIC0yOSw2ICszNiw5IEBAIGludCBTSEEyMjRfSW5pdCAoU0hBMjU2X0NUWCAqYykK KyAKKyBpbnQgU0hBMjU2X0luaXQgKFNIQTI1Nl9DVFggKmMpCisgCXsKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVtc2V0IChjLDAs c2l6ZW9mKCpjKSk7CisgCWMtPmhbMF09MHg2YTA5ZTY2N1VMOwljLT5oWzFdPTB4YmI2N2FlODVV TDsKKyAJYy0+aFsyXT0weDNjNmVmMzcyVUw7CWMtPmhbM109MHhhNTRmZjUzYVVMOworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzIG9wZW5zc2wtMS4wLjBm L2NyeXB0by9zaGEvc2hhNTEyLmMKKy0tLSBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vc2hhL3NoYTUx Mi5jLmZpcHMJMjAwOS0xMi0zMCAxMjo1MzozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vc2hhL3NoYTUxMi5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAw ICswMTAwCitAQCAtNSw2ICs1LDEwIEBACisgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgKi8KKyAjaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9f U0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTUxMikKKyAvKgorICAqIElNUExFTUVOVEFU SU9OIE5PVEVTLgorQEAgLTYxLDYgKzY1LDkgQEAgY29uc3QgY2hhciBTSEE1MTJfdmVyc2lvbltd PSJTSEEtNTEyIiBPUAorIAorIGludCBTSEEzODRfSW5pdCAoU0hBNTEyX0NUWCAqYykKKyAJewor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgor ICNpZiBkZWZpbmVkKFNIQTUxMl9BU00pICYmIChkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQo X19hcm0pKQorIAkvKiBtYWludGFpbiBkd29yZCBvcmRlciByZXF1aXJlZCBieSBhc3NlbWJsZXIg bW9kdWxlICovCisgCXVuc2lnbmVkIGludCAqaCA9ICh1bnNpZ25lZCBpbnQgKiljLT5oOworQEAg LTkwLDYgKzk3LDkgQEAgaW50IFNIQTM4NF9Jbml0IChTSEE1MTJfQ1RYICpjKQorIAorIGludCBT SEE1MTJfSW5pdCAoU0hBNTEyX0NUWCAqYykKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ RklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorICNpZiBkZWZpbmVkKFNIQTUxMl9BU00p ICYmIChkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hcm0pKQorIAkvKiBtYWludGFpbiBk d29yZCBvcmRlciByZXF1aXJlZCBieSBhc3NlbWJsZXIgbW9kdWxlICovCisgCXVuc2lnbmVkIGlu dCAqaCA9ICh1bnNpZ25lZCBpbnQgKiljLT5oOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMGYvY3J5 cHRvL3docmxwb29sL3docmxwb29sLmguZmlwcyBvcGVuc3NsLTEuMC4wZi9jcnlwdG8vd2hybHBv b2wvd2hybHBvb2wuaAorLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by93aHJscG9vbC93aHJscG9v bC5oLmZpcHMJMjAxMi0wMS0wNSAxMzoyMjoyOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wZi9jcnlwdG8vd2hybHBvb2wvd2hybHBvb2wuaAkyMDEyLTAxLTA1IDEzOjIyOjMwLjAw MDAwMDAwMCArMDEwMAorQEAgLTI0LDYgKzI0LDkgQEAgdHlwZWRlZiBzdHJ1Y3QJeworIAl9IFdI SVJMUE9PTF9DVFg7CisgCisgI2lmbmRlZiBPUEVOU1NMX05PX1dISVJMUE9PTAorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9XSElSTFBPT0xfSW5pdChXSElSTFBPT0xfQ1RYICpj KTsKKysjZW5kaWYKKyBpbnQgV0hJUkxQT09MX0luaXQJKFdISVJMUE9PTF9DVFggKmMpOworIGlu dCBXSElSTFBPT0xfVXBkYXRlCShXSElSTFBPT0xfQ1RYICpjLGNvbnN0IHZvaWQgKmlucCxzaXpl X3QgYnl0ZXMpOworIHZvaWQgV0hJUkxQT09MX0JpdFVwZGF0ZShXSElSTFBPT0xfQ1RYICpjLGNv bnN0IHZvaWQgKmlucCxzaXplX3QgYml0cyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9jcnlw dG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvY3J5cHRvL3docmxwb29s L3dwX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjBmL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMu ZmlwcwkyMDA4LTEyLTI5IDEzOjM1OjQ5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjBmL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAw MDAgKzAxMDAKK0BAIC01Myw4ICs1MywxMiBAQAorIAorICNpbmNsdWRlICJ3cF9sb2NsLmgiCisg I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCistaW50 IFdISVJMUE9PTF9Jbml0CShXSElSTFBPT0xfQ1RYICpjKQorK0ZJUFNfTk9OX0ZJUFNfTURfSW5p dChXSElSTFBPT0wpCisgCXsKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCXJldHVybigx KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL01ha2VmaWxlLm9yZy5maXBzIG9wZW5zc2wtMS4w LjBmL01ha2VmaWxlLm9yZworLS0tIG9wZW5zc2wtMS4wLjBmL01ha2VmaWxlLm9yZy5maXBzCTIw MTItMDEtMDUgMTM6MjI6MjkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvTWFr ZWZpbGUub3JnCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMTEwLDYg KzExMCw5IEBAIExJQktSQjU9CisgWkxJQl9JTkNMVURFPQorIExJQlpMSUI9CisgCisrIyBOb24t ZW1wdHkgaWYgRklQUyBlbmFibGVkCisrRklQUz0KKysKKyBESVJTPSAgIGNyeXB0byBzc2wgZW5n aW5lcyBhcHBzIHRlc3QgdG9vbHMKKyBFTkdESVJTPSBjY2dvc3QKKyBTSExJQkRJUlM9IGNyeXB0 byBzc2wKK0BAIC0xMjIsNyArMTI1LDcgQEAgU0RJUlM9ICBcCisgCWJuIGVjIHJzYSBkc2EgZWNk c2EgZGggZWNkaCBkc28gZW5naW5lIFwKKyAJYnVmZmVyIGJpbyBzdGFjayBsaGFzaCByYW5kIGVy ciBcCisgCWV2cCBhc24xIHBlbSB4NTA5IHg1MDl2MyBjb25mIHR4dF9kYiBwa2NzNyBwa2NzMTIg Y29tcCBvY3NwIHVpIGtyYjUgXAorLQljbXMgcHF1ZXVlIHRzIGpwYWtlIHN0b3JlCisrCWNtcyBw cXVldWUgdHMganBha2Ugc3RvcmUgZmlwcworICMga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGFib3Zl IGxpc3QgaXMgYWRqdXN0ZWQgYnkgLi9Db25maWd1cmUKKyAjIGFjY29yZGluZyB0byBuby14eHgg YXJndW1lbnRzLi4uCisgCitAQCAtMjA2LDYgKzIwOSw3IEBAIEJVSUxERU5WPQlQTEFURk9STT0n JChQTEFURk9STSknIFBST0NFU1MKKyAJCVJNRDE2MF9BU01fT0JKPSckKFJNRDE2MF9BU01fT0JK KScJCVwKKyAJCVdQX0FTTV9PQko9JyQoV1BfQVNNX09CSiknCQkJXAorIAkJUEVSTEFTTV9TQ0hF TUU9JyQoUEVSTEFTTV9TQ0hFTUUpJwkJXAorKwkJRklQUz0iJCR7RklQUzotJChGSVBTKX0iCVwK KyAJCVRISVM9JCR7VEhJUzotJEB9IE1BS0VGSUxFPU1ha2VmaWxlIE1BS0VPVkVSUklERVM9Cisg IyBNQUtFT1ZFUlJJREVTPSBlZmZlY3RpdmVseSAiZXF1YWxpemVzIiBHTlUtaXNoIGFuZCBTeXNW LWlzaCBtYWtlIGZsYXZvcnMsCisgIyB3aGljaCBpbiB0dXJuIGVsaW1pbmF0ZXMgYW1iaWd1aXRp ZXMgaW4gdmFyaWFibGUgdHJlYXRtZW50IHdpdGggLWUuCitkaWZmIC11cCBvcGVuc3NsLTEuMC4w Zi9zc2wvc3NsX2NpcGguYy5maXBzIG9wZW5zc2wtMS4wLjBmL3NzbC9zc2xfY2lwaC5jCistLS0g b3BlbnNzbC0xLjAuMGYvc3NsL3NzbF9jaXBoLmMuZmlwcwkyMDExLTEyLTAyIDEzOjUxOjA1LjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL3NzbC9zc2xfY2lwaC5jCTIwMTItMDEt MDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtNzI4LDYgKzcyOCw5IEBAIHN0YXRpYyB2 b2lkIHNzbF9jaXBoZXJfY29sbGVjdF9jaXBoZXJzKGMKKyAJCSAgICAhKGMtPmFsZ29yaXRobV9h dXRoICYgZGlzYWJsZWRfYXV0aCkgJiYKKyAJCSAgICAhKGMtPmFsZ29yaXRobV9lbmMgJiBkaXNh YmxlZF9lbmMpICYmCisgCQkgICAgIShjLT5hbGdvcml0aG1fbWFjICYgZGlzYWJsZWRfbWFjKSAm JgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQkoIUZJUFNfbW9kZSgpIHx8IChjLT5hbGdvX3N0 cmVuZ3RoICYgU1NMX0ZJUFMpKSAmJgorKyNlbmRpZgorIAkJICAgICEoYy0+YWxnb3JpdGhtX3Nz bCAmIGRpc2FibGVkX3NzbCkpCisgCQkJeworIAkJCWNvX2xpc3RbY29fbGlzdF9udW1dLmNpcGhl ciA9IGM7CitAQCAtMTQyMyw3ICsxNDI2LDExIEBAIFNUQUNLX09GKFNTTF9DSVBIRVIpICpzc2xf Y3JlYXRlX2NpcGhlcl8KKyAJICovCisgCWZvciAoY3VyciA9IGhlYWQ7IGN1cnIgIT0gTlVMTDsg Y3VyciA9IGN1cnItPm5leHQpCisgCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYgKGN1 cnItPmFjdGl2ZSAmJiAoIUZJUFNfbW9kZSgpIHx8IGN1cnItPmNpcGhlci0+YWxnb19zdHJlbmd0 aCAmIFNTTF9GSVBTKSkKKysjZWxzZQorIAkJaWYgKGN1cnItPmFjdGl2ZSkKKysjZW5kaWYKKyAJ CQl7CisgCQkJc2tfU1NMX0NJUEhFUl9wdXNoKGNpcGhlcnN0YWNrLCBjdXJyLT5jaXBoZXIpOwor ICNpZmRlZiBDSVBIRVJfREVCVUcKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL3NzbC9zc2xfbGli LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9zc2wvc3NsX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMGYv c3NsL3NzbF9saWIuYy5maXBzCTIwMTEtMDktMjYgMTk6MDQ6NDkuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMGYvc3NsL3NzbF9saWIuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAw MDAwMCArMDEwMAorQEAgLTE1MjQsNiArMTUyNCwxNCBAQCBTU0xfQ1RYICpTU0xfQ1RYX25ldyhj b25zdCBTU0xfTUVUSE9EICptCisgCQlyZXR1cm4oTlVMTCk7CisgCQl9CisgCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgKG1ldGgtPnZlcnNpb24gPCBUTFMxX1ZF UlNJT04pKQkKKysJCXsKKysJCVNTTGVycihTU0xfRl9TU0xfQ1RYX05FVywgU1NMX1JfT05MWV9U TFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOworKwkJcmV0dXJuIE5VTEw7CisrCQl9CisrI2VuZGlm CisrCisgCWlmIChTU0xfZ2V0X2V4X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4KCkgPCAwKQorIAkJ eworIAkJU1NMZXJyKFNTTF9GX1NTTF9DVFhfTkVXLFNTTF9SX1g1MDlfVkVSSUZJQ0FUSU9OX1NF VFVQX1BST0JMRU1TKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL3NzbC9zc2x0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4wZi9zc2wvc3NsdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMGYvc3NsL3Nz bHRlc3QuYy5maXBzCTIwMTItMDEtMDUgMTM6MjI6MjkuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMGYvc3NsL3NzbHRlc3QuYwkyMDEyLTAxLTA1IDEzOjIyOjMwLjAwMDAwMDAwMCAr MDEwMAorQEAgLTI2OCw2ICsyNjgsOSBAQCBzdGF0aWMgdm9pZCBzdl91c2FnZSh2b2lkKQorIAl7 CisgCWZwcmludGYoc3RkZXJyLCJ1c2FnZTogc3NsdGVzdCBbYXJncyAuLi5dXG4iKTsKKyAJZnBy aW50ZihzdGRlcnIsIlxuIik7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlmcHJpbnRmKHN0ZGVy ciwiLUYgICAgICAgICAgICAgLSBydW4gdGVzdCBpbiBGSVBTIG1vZGVcbiIpOworKyNlbmRpZgor IAlmcHJpbnRmKHN0ZGVyciwiIC1zZXJ2ZXJfYXV0aCAgLSBjaGVjayBzZXJ2ZXIgY2VydGlmaWNh dGVcbiIpOworIAlmcHJpbnRmKHN0ZGVyciwiIC1jbGllbnRfYXV0aCAgLSBkbyBjbGllbnQgYXV0 aGVudGljYXRpb25cbiIpOworIAlmcHJpbnRmKHN0ZGVyciwiIC1wcm94eSAgICAgICAgLSBhbGxv dyBwcm94eSBjZXJ0aWZpY2F0ZXNcbiIpOworQEAgLTQ4Nyw2ICs0OTAsOSBAQCBpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQorICNlbmRpZgorIAlTVEFDS19PRihTU0xfQ09NUCkgKnNz bF9jb21wX21ldGhvZHMgPSBOVUxMOworIAlpbnQgdGVzdF9jaXBoZXJsaXN0ID0gMDsKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCWludCBmaXBzX21vZGU9MDsKKysjZW5kaWYKKyAKKyAJdmVyYm9z ZSA9IDA7CisgCWRlYnVnID0gMDsKK0BAIC01MTgsNyArNTI0LDE2IEBAIGludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCisgCisgCXdoaWxlIChhcmdjID49IDEpCisgCQl7CistCQlpZgko c3RyY21wKCphcmd2LCItc2VydmVyX2F1dGgiKSA9PSAwKQorKwkJaWYoIXN0cmNtcCgqYXJndiwi LUYiKSkKKysJCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJCWZpcHNfbW9kZT0xOworKyNl bHNlCisrCQkJZnByaW50ZihzdGRlcnIsIm5vdCBjb21waWxlZCB3aXRoIEZJUFMgc3VwcG9ydCwg c28gZXhpdHRpbmcgd2l0aG91dCBydW5uaW5nLlxuIik7CisrCQkJRVhJVCgwKTsKKysjZW5kaWYK KysJCQl9CisrCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1zZXJ2ZXJfYXV0aCIpID09IDApCisg CQkJc2VydmVyX2F1dGg9MTsKKyAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLWNsaWVudF9hdXRo IikgPT0gMCkKKyAJCQljbGllbnRfYXV0aD0xOworQEAgLTcxNCw2ICs3MjksMjAgQEAgYmFkOgor IAkJRVhJVCgxKTsKKyAJCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKGZpcHNfbW9k ZSkKKysJCXsKKysJCWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJCXsKKysJCQlFUlJfbG9hZF9j cnlwdG9fc3RyaW5ncygpOworKwkJCUVSUl9wcmludF9lcnJvcnMoQklPX25ld19mcChzdGRlcnIs QklPX05PQ0xPU0UpKTsKKysJCQlFWElUKDEpOworKwkJCX0KKysJCWVsc2UKKysJCQlmcHJpbnRm KHN0ZGVyciwiKioqIElOIEZJUFMgTU9ERSAqKipcbiIpOworKwkJfQorKyNlbmRpZgorKworIAlp ZiAocHJpbnRfdGltZSkKKyAJCXsKKyAJCWlmICghYmlvX3BhaXIpCitAQCAtMjE1MywxMiArMjE4 MiwxMiBAQCBzdGF0aWMgaW50IE1TX0NBTExCQUNLIGFwcF92ZXJpZnlfY2FsbGJhCisgCQl9Cisg CisgI2lmbmRlZiBPUEVOU1NMX05PX1g1MDlfVkVSSUZZCistIyBpZmRlZiBPUEVOU1NMX0ZJUFMK KysjIGlmIDAKKyAJaWYocy0+dmVyc2lvbiA9PSBUTFMxX1ZFUlNJT04pCisgCQlGSVBTX2FsbG93 X21kNSgxKTsKKyAjIGVuZGlmCisgCW9rID0gWDUwOV92ZXJpZnlfY2VydChjdHgpOworLSMgaWZk ZWYgT1BFTlNTTF9GSVBTCisrIyBpZiAwCisgCWlmKHMtPnZlcnNpb24gPT0gVExTMV9WRVJTSU9O KQorIAkJRklQU19hbGxvd19tZDUoMCk7CisgIyBlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MGYvc3NsL3MyM19jbG50LmMuZmlwcyBvcGVuc3NsLTEuMC4wZi9zc2wvczIzX2NsbnQuYworLS0t IG9wZW5zc2wtMS4wLjBmL3NzbC9zMjNfY2xudC5jLmZpcHMJMjAxMC0wMi0xNiAxNToyMDo0MC4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9zc2wvczIzX2NsbnQuYwkyMDEyLTAx LTA1IDEzOjIyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTMzNCw2ICszMzQsMTQgQEAgc3RhdGlj IGludCBzc2wyM19jbGllbnRfaGVsbG8oU1NMICpzKQorIAkJCXZlcnNpb25fbWFqb3IgPSBUTFMx X1ZFUlNJT05fTUFKT1I7CisgCQkJdmVyc2lvbl9taW5vciA9IFRMUzFfVkVSU0lPTl9NSU5PUjsK KyAJCQl9CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJZWxzZSBpZihGSVBTX21vZGUoKSkKKysJ CQl7CisrCQkJU1NMZXJyKFNTTF9GX1NTTDIzX0NMSUVOVF9IRUxMTywKKysJCQkJCVNTTF9SX09O TFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJfQorKyNl bmRpZgorIAkJZWxzZSBpZiAodmVyc2lvbiA9PSBTU0wzX1ZFUlNJT04pCisgCQkJeworIAkJCXZl cnNpb25fbWFqb3IgPSBTU0wzX1ZFUlNJT05fTUFKT1I7CitAQCAtNjE3LDYgKzYyNSwxNCBAQCBz dGF0aWMgaW50IHNzbDIzX2dldF9zZXJ2ZXJfaGVsbG8oU1NMICpzCisgCQlpZiAoKHBbMl0gPT0g U1NMM19WRVJTSU9OX01JTk9SKSAmJgorIAkJCSEocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19TU0x2 MykpCisgCQkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQlpZihGSVBTX21vZGUoKSkKKysJ CQkJeworKwkJCQlTU0xlcnIoU1NMX0ZfU1NMMjNfR0VUX1NFUlZFUl9IRUxMTywKKysJCQkJCVNT TF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCQkJZ290byBlcnI7CisrCQkJ CX0KKysjZW5kaWYKKyAJCQlzLT52ZXJzaW9uPVNTTDNfVkVSU0lPTjsKKyAJCQlzLT5tZXRob2Q9 U1NMdjNfY2xpZW50X21ldGhvZCgpOworIAkJCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL3Nz bC9zMjNfc3J2ci5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvc3NsL3MyM19zcnZyLmMKKy0tLSBvcGVu c3NsLTEuMC4wZi9zc2wvczIzX3NydnIuYy5maXBzCTIwMTAtMDItMTYgMTU6MjA6NDAuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGYvc3NsL3MyM19zcnZyLmMJMjAxMi0wMS0wNSAx MzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zOTMsNiArMzkzLDE1IEBAIGludCBzc2wyM19n ZXRfY2xpZW50X2hlbGxvKFNTTCAqcykKKyAJCQl9CisgCQl9CisgCisrI2lmZGVmIE9QRU5TU0xf RklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgKHMtPnZlcnNpb24gPCBUTFMxX1ZFUlNJT04pKQor KwkJeworKwkJU1NMZXJyKFNTTF9GX1NTTDIzX0dFVF9DTElFTlRfSEVMTE8sCisrCQkJCQlTU0xf Ul9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisrCQlnb3RvIGVycjsKKysJCX0KKysj ZW5kaWYKKysKKyAJaWYgKHMtPnN0YXRlID09IFNTTDIzX1NUX1NSX0NMTlRfSEVMTE9fQikKKyAJ CXsKKyAJCS8qIHdlIGhhdmUgU1NMdjMvVExTdjEgaW4gYW4gU1NMdjIgaGVhZGVyCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wZi9zc2wvczNfY2xudC5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvc3NsL3Mz X2NsbnQuYworLS0tIG9wZW5zc2wtMS4wLjBmL3NzbC9zM19jbG50LmMuZmlwcwkyMDExLTEyLTI2 IDIwOjM4OjE5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL3NzbC9zM19jbG50 LmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNTYsNiArMTU2LDEw IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL21kNS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2lmbmRlZiBPUEVOU1NMX05P X0RICisgI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKyAjZW5kaWYKK0BAIC0xNTUwLDYgKzE1NTQs OCBAQCBpbnQgc3NsM19nZXRfa2V5X2V4Y2hhbmdlKFNTTCAqcykKKyAJCQlxPW1kX2J1ZjsKKyAJ CQlmb3IgKG51bT0yOyBudW0gPiAwOyBudW0tLSkKKyAJCQkJeworKwkJCQlFVlBfTURfQ1RYX3Nl dF9mbGFncygmbWRfY3R4LAorKwkJCQkJRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsK KyAJCQkJRVZQX0RpZ2VzdEluaXRfZXgoJm1kX2N0eCwobnVtID09IDIpCisgCQkJCQk/cy0+Y3R4 LT5tZDU6cy0+Y3R4LT5zaGExLCBOVUxMKTsKKyAJCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmbWRfY3R4 LCYocy0+czMtPmNsaWVudF9yYW5kb21bMF0pLFNTTDNfUkFORE9NX1NJWkUpOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMGYvc3NsL3MzX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMGYvc3NsL3MzX2Vu Yy5jCistLS0gb3BlbnNzbC0xLjAuMGYvc3NsL3MzX2VuYy5jLmZpcHMJMjAxMi0wMS0wNCAxNjoz ODo1NC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wZi9zc2wvczNfZW5jLmMJMjAx Mi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNzAsNiArMTcwLDcgQEAgc3Rh dGljIGludCBzc2wzX2dlbmVyYXRlX2tleV9ibG9jayhTU0wgKgorICNlbmRpZgorIAlrPTA7Cisg CUVWUF9NRF9DVFhfaW5pdCgmbTUpOworKwlFVlBfTURfQ1RYX3NldF9mbGFncygmbTUsIEVWUF9N RF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CisgCUVWUF9NRF9DVFhfaW5pdCgmczEpOworIAlm b3IgKGk9MDsgKGludClpPG51bTsgaSs9TUQ1X0RJR0VTVF9MRU5HVEgpCisgCQl7CitAQCAtNjE2 LDYgKzYxNyw4IEBAIGludCBzc2wzX2RpZ2VzdF9jYWNoZWRfcmVjb3JkcyhTU0wgKnMpCisgCQlp ZiAoKG1hc2sgJiBzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobTIpICYmIG1kKSAKKyAJ CQl7CisgCQkJcy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldPUVWUF9NRF9DVFhfY3JlYXRlKCk7Cisr CQkJRVZQX01EX0NUWF9zZXRfZmxhZ3Mocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldLAorKwkJCQlF VlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworIAkJCUVWUF9EaWdlc3RJbml0X2V4KHMt PnMzLT5oYW5kc2hha2VfZGdzdFtpXSxtZCxOVUxMKTsKKyAJCQlFVlBfRGlnZXN0VXBkYXRlKHMt PnMzLT5oYW5kc2hha2VfZGdzdFtpXSxoZGF0YSxoZGF0YWxlbik7CisgCQkJfSAKK0BAIC02NzIs NiArNjc1LDcgQEAgc3RhdGljIGludCBzc2wzX2hhbmRzaGFrZV9tYWMoU1NMICpzLCBpbgorIAkJ cmV0dXJuIDA7CisgCX0JCisgCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKKysJRVZQX01EX0NUWF9z ZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKyAJRVZQX01E X0NUWF9jb3B5X2V4KCZjdHgsZCk7CisgCW49RVZQX01EX0NUWF9zaXplKCZjdHgpOworIAlpZiAo biA8IDApCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9zc2wvczNfc3J2ci5jLmZpcHMgb3BlbnNz bC0xLjAuMGYvc3NsL3MzX3NydnIuYworLS0tIG9wZW5zc2wtMS4wLjBmL3NzbC9zM19zcnZyLmMu ZmlwcwkyMDEyLTAxLTA0IDE2OjI3OjU0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjBmL3NzbC9zM19zcnZyLmMJMjAxMi0wMS0wNSAxMzoyMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BA IC0xNzcwLDYgKzE3NzAsOCBAQCBpbnQgc3NsM19zZW5kX3NlcnZlcl9rZXlfZXhjaGFuZ2UoU1NM ICpzCisgCQkJCWo9MDsKKyAJCQkJZm9yIChudW09MjsgbnVtID4gMDsgbnVtLS0pCisgCQkJCQl7 CisrCQkJCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWRfY3R4LAorKwkJCQkJCUVWUF9NRF9DVFhf RkxBR19OT05fRklQU19BTExPVyk7CisgCQkJCQlFVlBfRGlnZXN0SW5pdF9leCgmbWRfY3R4LChu dW0gPT0gMikKKyAJCQkJCQk/cy0+Y3R4LT5tZDU6cy0+Y3R4LT5zaGExLCBOVUxMKTsKKyAJCQkJ CUVWUF9EaWdlc3RVcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wz X1JBTkRPTV9TSVpFKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjBmL3NzbC90MV9lbmMuYy5maXBz IG9wZW5zc2wtMS4wLjBmL3NzbC90MV9lbmMuYworLS0tIG9wZW5zc2wtMS4wLjBmL3NzbC90MV9l bmMuYy5maXBzCTIwMTAtMDYtMTUgMTk6MjU6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjAuMGYvc3NsL3QxX2VuYy5jCTIwMTItMDEtMDUgMTM6MjI6MzAuMDAwMDAwMDAwICswMTAw CitAQCAtMTcwLDYgKzE3MCw4IEBAIHN0YXRpYyBpbnQgdGxzMV9QX2hhc2goY29uc3QgRVZQX01E ICptZCwKKyAKKyAJSE1BQ19DVFhfaW5pdCgmY3R4KTsKKyAJSE1BQ19DVFhfaW5pdCgmY3R4X3Rt cCk7CisrCUhNQUNfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpOworKwlITUFDX0NUWF9zZXRfZmxhZ3MoJmN0eF90bXAsIEVWUF9NRF9DVFhfRkxBR19O T05fRklQU19BTExPVyk7CisgCWlmICghSE1BQ19Jbml0X2V4KCZjdHgsc2VjLHNlY19sZW4sbWQs IE5VTEwpKQorIAkJZ290byBlcnI7CisgCWlmICghSE1BQ19Jbml0X2V4KCZjdHhfdG1wLHNlYyxz ZWNfbGVuLG1kLCBOVUxMKSkKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wZi12ZXJzaW9uLnBh dGNoIGIvb3BlbnNzbC0xLjAuMGYtdmVyc2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi42YzY3YTVlCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMGYt dmVyc2lvbi5wYXRjaApAQCAtMCwwICsxLDIyIEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4wZi9j cnlwdG8vb3BlbnNzbHYuaC52ZXJzaW9uIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9vcGVuc3Nsdi5o CistLS0gb3BlbnNzbC0xLjAuMGYvY3J5cHRvL29wZW5zc2x2LmgudmVyc2lvbgkyMDEyLTAxLTA1 IDEzOjI4OjMyLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjBmL2NyeXB0by9vcGVu c3Nsdi5oCTIwMTItMDEtMDUgMTM6Mjk6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMjUsNyArMjUs OCBAQAorICAqIChQcmlvciB0byAwLjkuNWEgYmV0YTEsIGEgZGlmZmVyZW50IHNjaGVtZSB3YXMg dXNlZDogTU1OTkZGUkJCIGZvcgorICAqICBtYWpvciBtaW5vciBmaXggZmluYWwgcGF0Y2gvYmV0 YSkKKyAgKi8KKy0jZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgxMDAwMDA2ZkwKKysv KiB3ZSBoYXZlIHRvIGtlZXAgdGhlIHZlcnNpb24gbnVtYmVyIHRvIG5vdCBicmVhayB0aGUgYWJp ICovCisrI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSCTB4MTAwMDAwMDMKKyAjaWZkZWYg T1BFTlNTTF9GSVBTCisgI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fVEVYVAkiT3BlblNTTCAxLjAu MGYtZmlwcyA0IEphbiAyMDEyIgorICNlbHNlCitAQCAtODMsNyArODQsNyBAQAorICAqIHNob3Vs ZCBvbmx5IGtlZXAgdGhlIHZlcnNpb25zIHRoYXQgYXJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGgg dGhlIGN1cnJlbnQuCisgICovCisgI2RlZmluZSBTSExJQl9WRVJTSU9OX0hJU1RPUlkgIiIKKy0j ZGVmaW5lIFNITElCX1ZFUlNJT05fTlVNQkVSICIxLjAuMCIKKysjZGVmaW5lIFNITElCX1ZFUlNJ T05fTlVNQkVSICIxLjAuMGYiCisgCisgCisgI2VuZGlmIC8qIEhFQURFUl9PUEVOU1NMVl9IICov Cg==