ZGlmZiAtLWdpdCBhL2NvbmYvZmFzdGNnaV9wYXJhbXMgYi9jb25mL2Zhc3RjZ2lfcGFyYW1zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OGEwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb25mL2Zhc3RjZ2lfcGFyYW1zCkBAIC0wLDAgKzEsMjMgQEAKKworZmFzdGNnaV9wYXJhbSAgUVVFUllfU1RSSU5HICAgICAgICRxdWVyeV9zdHJpbmc7CitmYXN0Y2dpX3BhcmFtICBSRVFVRVNUX01FVEhPRCAgICAgJHJlcXVlc3RfbWV0aG9kOworZmFzdGNnaV9wYXJhbSAgQ09OVEVOVF9UWVBFICAgICAgICRjb250ZW50X3R5cGU7CitmYXN0Y2dpX3BhcmFtICBDT05URU5UX0xFTkdUSCAgICAgJGNvbnRlbnRfbGVuZ3RoOworCitmYXN0Y2dpX3BhcmFtICBTQ1JJUFRfTkFNRSAgICAgICAgJGZhc3RjZ2lfc2NyaXB0X25hbWU7CitmYXN0Y2dpX3BhcmFtICBSRVFVRVNUX1VSSSAgICAgICAgJHJlcXVlc3RfdXJpOworZmFzdGNnaV9wYXJhbSAgRE9DVU1FTlRfVVJJICAgICAgICRkb2N1bWVudF91cmk7CitmYXN0Y2dpX3BhcmFtICBET0NVTUVOVF9ST09UICAgICAgJGRvY3VtZW50X3Jvb3Q7CitmYXN0Y2dpX3BhcmFtICBTRVJWRVJfUFJPVE9DT0wgICAgJHNlcnZlcl9wcm90b2NvbDsKKworZmFzdGNnaV9wYXJhbSAgR0FURVdBWV9JTlRFUkZBQ0UgIENHSS8xLjE7CitmYXN0Y2dpX3BhcmFtICBTRVJWRVJfU09GVFdBUkUgICAgbmdpbng7CisKK2Zhc3RjZ2lfcGFyYW0gIFJFTU9URV9BRERSICAgICAgICAkcmVtb3RlX2FkZHI7CitmYXN0Y2dpX3BhcmFtICBSRU1PVEVfUE9SVCAgICAgICAgJHJlbW90ZV9wb3J0OworZmFzdGNnaV9wYXJhbSAgU0VSVkVSX0FERFIgICAgICAgICRzZXJ2ZXJfYWRkcjsKK2Zhc3RjZ2lfcGFyYW0gIFNFUlZFUl9QT1JUICAgICAgICAkc2VydmVyX3BvcnQ7CitmYXN0Y2dpX3BhcmFtICBTRVJWRVJfTkFNRSAgICAgICAgJHNlcnZlcl9uYW1lOworCisjIFBIUCBvbmx5LCByZXF1aXJlZCBpZiBQSFAgd2FzIGJ1aWx0IHdpdGggLS1lbmFibGUtZm9yY2UtY2dpLXJlZGlyZWN0CitmYXN0Y2dpX3BhcmFtICBSRURJUkVDVF9TVEFUVVMgICAgMjAwOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9SRUFETUUgYi9jb250cmliL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTY5MDk1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9SRUFETUUKQEAgLTAsMCArMSw2IEBACisKK2dlbzJuZ2lueC5wbCAJYnkgQW5kcmVpIE5pZ21hdHVsaW4KKworCVRoZSBwZXJsIHNjcmlwdCB0byBjb252ZXJ0IENTViBnZW9pcCBkYXRhYmFzZSAoZnJlZSBkb3dubG9hZAorCWF0IGh0dHA6Ly93d3cubWF4bWluZC5jb20vYXBwL2dlb2lwX2NvdW50cnkpIHRvIGZvcm1hdCwgc3VpdGFibGUKKwlmb3IgdXNlIHdpdGggbmd4X2h0dHBfZ2VvX21vZHVsZS4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2VvMm5naW54LnBsIGIvY29udHJpYi9nZW8ybmdpbngucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyNDNlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZ2VvMm5naW54LnBsCkBAIC0wLDAgKzEsNTggQEAKKyMhL3Vzci9iaW4vcGVybCAtdw0KKw0KKyMgKGMpIEFuZHJlaSBOaWdtYXR1bGluLCAyMDA1DQorIw0KKyMgdGhpcyBzY3JpcHQgcHJvdmlkZWQgImFzIGlzIiwgd2l0aG91dCBhbnkgd2FycmFudGllcy4gdXNlIGl0IGF0IHlvdXIgb3duIHJpc2suDQorIw0KKyMgc3BlY2lhbCB0aGFueCB0byBBbmRyZXcgU2l0bmlrb3YgZm9yIHBlcmwgcG9ydA0KKyMNCisjIHRoaXMgc2NyaXB0IGNvbnZlcnRzIENTViBnZW9pcCBkYXRhYmFzZSAoZnJlZSBkb3dubG9hZCBhdCBodHRwOi8vd3d3Lm1heG1pbmQuY29tL2FwcC9nZW9pcF9jb3VudHJ5KQ0KKyMgdG8gZm9ybWF0LCBzdWl0YWJsZSBmb3IgdXNlIHdpdGggbmdpbnhfaHR0cF9nZW8gbW9kdWxlIChodHRwOi8vc3lzb2V2LnJ1L25naW54KQ0KKyMNCisjIGZvciBleGFtcGxlLCBsaW5lIHdpdGggaXAgcmFuZ2UNCisjDQorIyAgICI2Mi4xNi42OC4wIiwiNjIuMTYuMTI3LjI1NSIsIjEwNDEyNTMzNzYiLCIxMDQxMjY4NzM1IiwiUlUiLCJSdXNzaWFuIEZlZGVyYXRpb24iDQorIw0KKyMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gZm91ciBzdWJuZXR3b3JrczoNCisjDQorIyAgIDYyLjE2LjY4LjAvMjIgUlU7DQorIyAgIDYyLjE2LjcyLjAvMjEgUlU7DQorIyAgIDYyLjE2LjgwLjAvMjAgUlU7DQorIyAgIDYyLjE2Ljk2LjAvMTkgUlU7DQorDQorDQordXNlIHdhcm5pbmdzOw0KK3VzZSBzdHJpY3Q7DQorDQord2hpbGUoIDxTVERJTj4gKXsNCisJaWYgKC8iW14iXSsiLCJbXiJdKyIsIihbXiJdKykiLCIoW14iXSspIiwiKFteIl0rKSIvKXsNCisJCXByaW50X3N1Ym5ldHMoJDEsICQyLCAkMyk7DQorCX0NCit9DQorDQorc3ViICBwcmludF9zdWJuZXRzIHsNCisJbXkgKCRhMSwgJGEyLCAkYykgPSBAXzsNCisJbXkgJGw7DQorICAgIHdoaWxlICgkYTEgPD0gJGEyKSB7DQorCQlmb3IgKCRsID0gMDsgKCRhMSAmICgxIDw8ICRsKSkgPT0gMCAmJiAoJGExICsgKCgxIDw8ICgkbCArIDEpKSAtIDEpKSA8PSAkYTI7ICRsKyspe307DQorCQlwcmludCBsb25nMmlwKCRhMSkgLiAiLyIgLiAoMzIgLSAkbCkgLiAiICIgLiAkYyAuICI7XG4iOw0KKyAgICAJJGExICs9ICgxIDw8ICRsKTsNCisJfQ0KK30NCisNCitzdWIgbG9uZzJpcCB7DQorCW15ICRpcCA9IHNoaWZ0Ow0KKw0KKwlteSAkc3RyID0gMDsNCisNCisJJHN0ciA9ICgkaXAgJiAyNTUpOw0KKw0KKwkkaXAgPj49IDg7DQorCSRzdHIgPSAoJGlwICYgMjU1KS4iLiRzdHIiOw0KKw0KKwkkaXAgPj49IDg7DQorCSRzdHIgPSAoJGlwICYgMjU1KS4iLiRzdHIiOw0KKw0KKwkkaXAgPj49IDg7DQorCSRzdHIgPSAoJGlwICYgMjU1KS4iLiRzdHIiOw0KK30NCmRpZmYgLS1naXQgYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbCBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCmluZGV4IDliYThmZmEuLmI4NDMwZWYgMTAwNjQ0Ci0tLSBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCisrKyBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCkBAIC05LDYgKzksNzEgQEAKIDx0aXRsZSBsYW5nPSJlbiI+bmdpbnggY2hhbmdlbG9nPC90aXRsZT4KIAogCis8Y2hhbmdlcyB2ZXI9IjAuMS40MyIgZGF0ZT0iMzAuMDguMjAwNSI+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CitsaXN0ZW4oMikgYmFja2xvZyDXIMTJ0sXL1MnXxSBsaXN0ZW4gzc/Wzs8gzcXO0dTYINDPINPJx87BzNUgLUhVUC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBsaXN0ZW4oMikgYmFja2xvZyBpbiB0aGUgImxpc3RlbiIgZGlyZWN0aXZlCitjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgLUhVUCBzaWduYWwuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9PL0snQ1CBnZW8ybmdpbngucGwgxM/CwdfMxc4g1yBjb250cmliLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIGdlbzJuZ2lueC5wbCBzY3JpcHQgd2FzIGFkZGVkIHRvIGNvbnRyaWIuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJjaGFuZ2UiPgorPHBhcmEgbGFuZz0icnUiPgor0MHSwc3F1NLZIEZhc3RDR0ksINMg0NXT1NnNINrOwd7FzsnRzcksINTF0MXS2CDQxdLFxMHA1NPRINPF0tfF0tUuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgRmFzdENHSSBwYXJhbWV0ZXJzIHdpdGggdGhlIGVtcHR5IHZhbHVlcyBub3cgYXJlIHBhc3NlZCB0byBhIHNlcnZlci4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8IS0tCisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DSySDP28nCy8HIINcg0sHCz9TFINMg0NLPy9PJ0s/Xwc7O2c0g08XS18XSz80gyczJIEZhc3RDR0kg08XS18XSz80KK83PxyDQ0s/J2s/K1Mkgc2VnbWVudGF0aW9uIGZhdWx0Owor1yDSxdbJzcUg0NLPy9PJIM/bycLLwSDQz9HXyczB09gg1yAwLjEuMjkuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgc2VnbWVudGF0aW9uIGZhdWx0IG1heSBvY2N1cnJlZCBpZiB0aGVyZSB3ZXJlIGVycm9ycyB3aGlsZQord29ya2luZyB3aXRoIHByb3hpZWQgb3IgRmFzdENHSSBzZXJ2ZXI7CitpbiB0aGUgcHJveGllZCBtb2RlIHRoZSBidWcgYXBwZWFyZWQgaW4gMC4xLjI5LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKy0tPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivF08zJINcgz9TXxdTFINDSz8vTydLP18HOzs/HzyDTxdLXxdLBIMnMySBGYXN0Q0dJINPF0tfF0sEgwtnMwSDT1NLPy8EKKyJDYWNoZS1Db250cm9sIiwg1M8g0NLJIMnT0M/M2NrP18HOyckgxMnSxcvUydfZIGV4cGlyZXMg0NLPydPIz8TJzAorc2VnbWVudGF0aW9uIGZhdWx0IMnMySDSwcLP3snKINDSz8PF09Mgzc/HINrBw8nLzMnU09E7CivXINLF1snNxSDQ0s/L08kgz9vJwsvBINDP0dfJzMHT2CDXIDAuMS4yOS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBzZWdtZW50YXRpb24gZmF1bHQgb2NjdXJyZWQgb3IgdGhlIHdvcmtlciBwcm9jZXNzIG1heSBnb3QgY2F1Z2h0CitpbiBhbiBlbmRsZXNzIGxvb3AgaWYgdGhlIHByb3hpZWQgb3IgRmFzdENHSSBzZXJ2ZXIgc2VudCB0aGUgIkNhY2hlLUNvbnRyb2wiCitoZWFkZXIgbGluZSBhbmQgdGhlICJleHBpcmVzIiBkaXJlY3RpdmUgd2FzIHVzZWQ7CitpbiB0aGUgcHJveGllZCBtb2RlIHRoZSBidWcgYXBwZWFyZWQgaW4gMC4xLjI5LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMS40MiIgZGF0ZT0iMjMuMDguMjAwNSI+CiAKIDxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmMgYi9zcmMvY29yZS9uZ2lueC5jCmluZGV4IGQwNGQ5NTQuLmE1OWU0ZDYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmMKKysrIGIvc3JjL2NvcmUvbmdpbnguYwpAQCAtMjg4LDkgKzI4OCw5IEBACiAgICAgICAgICAgICBzID0gbmd4X2F0b2kodiwgcCAtIHYpOwogICAgICAgICAgICAgaWYgKHMgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgc29ja2V0IG51bWJlciBcIiVzXCIgaW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdJTlhfVkFSICIgZW52aXJvbm1lbnQgdmFyaWFibGUsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZ25vcmluZyB0aGUgcmVzdCBvZiB0aGUgdmFyaWFibGUiLCB2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHNvY2tldCBudW1iZXIgXCIlc1wiIGluICIgTkdJTlhfVkFSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGVudmlyb25tZW50IHZhcmlhYmxlLCBpZ25vcmluZyB0aGUgcmVzdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb2YgdGhlIHZhcmlhYmxlIiwgdik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IDhmMGEzNjUuLmQ1OGY2MDggMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMS40MiIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjEuNDMiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX05FV1BJRF9FWFQgICAgICIubmV3YmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYyBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKaW5kZXggYjg3M2RiMi4uZmU3NTI2NCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYworKysgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCkBAIC0xMjMsNiArMTIzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50b2hzKHNpbi0+c2luX3BvcnQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBsc1tpXS5hZGRyX3RleHQuZGF0YTsKIAorICAgICAgICBsc1tpXS5iYWNrbG9nID0gLTE7CisKICNpZiAoTkdYX0hBVkVfREVGRVJSRURfQUNDRVBUICYmIGRlZmluZWQgU09fQUNDRVBURklMVEVSKQogCiAgICAgICAgIG5neF9tZW16ZXJvKCZhZiwgc2l6ZW9mKHN0cnVjdCBhY2NlcHRfZmlsdGVyX2FyZykpOwpAQCAtNDY3LDcgKzQ2OSw4IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChlcnIgPT0gTkdYX0VDT05OUkVTRVQKKyAgICBpZiAoZXJyID09IDAKKyAgICAgICAgfHwgZXJyID09IE5HWF9FQ09OTlJFU0VUCiAjaWYgIShOR1hfV0lOMzIpCiAgICAgICAgIHx8IGVyciA9PSBOR1hfRVBJUEUKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaCBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKaW5kZXggMTBhNWNkNS4uNmRkMTkxOSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaAorKysgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCkBAIC00NSw2ICs0NSw3IEBACiAgICAgdW5zaWduZWQgICAgICAgICAgYm91bmQ6MTsgICAgICAgLyogYWxyZWFkeSBib3VuZCAqLwogICAgIHVuc2lnbmVkICAgICAgICAgIGluaGVyaXRlZDoxOyAgIC8qIGluaGVyaXRlZCBmcm9tIHByZXZpb3VzIHByb2Nlc3MgKi8KICAgICB1bnNpZ25lZCAgICAgICAgICBub25ibG9ja2luZ19hY2NlcHQ6MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICBjaGFuZ2VfYmFja2xvZzoxOwogICAgIHVuc2lnbmVkICAgICAgICAgIG5vbmJsb2NraW5nOjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgc2hhcmVkOjE7ICAgIC8qIHNoYXJlZCBiZXR3ZWVuIHRocmVhZHMgb3IgcHJvY2Vzc2VzICovCiAgICAgdW5zaWduZWQgICAgICAgICAgYWRkcl9udG9wOjE7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY3ljbGUuYyBiL3NyYy9jb3JlL25neF9jeWNsZS5jCmluZGV4IGI2NzIyM2EuLjJjNzgyMzUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jeWNsZS5jCisrKyBiL3NyYy9jb3JlL25neF9jeWNsZS5jCkBAIC0zMzksNiArMzM5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBubHNbbl0ucmVtYWluID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxzW2ldLnJlbWFpbiA9IDE7CiAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsc1tuXS5iYWNrbG9nICE9IG5sc1tpXS5iYWNrbG9nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxzW25dLmNoYW5nZV9iYWNrbG9nID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBTT19BQ0NFUFRGSUxURVIpCiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qCkBAIC00MDUsMTIgKzQwOSwyMSBAQAogICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CiAgICAgICAgICAgICB9CiAKLSNpZiAoTkdYX0hBVkVfREVGRVJSRURfQUNDRVBUKQotCiAgICAgICAgICAgICBpZiAoIWZhaWxlZCkgewogICAgICAgICAgICAgICAgIGxzID0gY3ljbGUtPmxpc3RlbmluZy5lbHRzOwogICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKIAorICAgICAgICAgICAgICAgICAgICBpZiAobHNbaV0uY2hhbmdlX2JhY2tsb2cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ZW4obHNbaV0uZmQsIGxzW2ldLmJhY2tsb2cpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9zb2NrZXRfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hhbmdpbmcgdGhlIGxpc3RlbigpIGJhY2tsb2cgdG8gJWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciAlViBmYWlsZWQsIGlnbm9yZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxzW2ldLmFkZHJfdGV4dCwgbHNbaV0uYmFja2xvZyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQpCisKICNpZmRlZiBTT19BQ0NFUFRGSUxURVIKICAgICAgICAgICAgICAgICAgICAgaWYgKGxzW2ldLmRlbGV0ZV9kZWZlcnJlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQobHNbaV0uZmQsIFNPTF9TT0NLRVQsIFNPX0FDQ0VQVEZJTFRFUiwKQEAgLTQ3Niw5ICs0ODksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbHNbaV0uZGVmZXJyZWRfYWNjZXB0ID0gMTsKICAgICAgICAgICAgICAgICAgICAgfQogI2VuZGlmCisjZW5kaWYKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCmluZGV4IDQ4MGEyMjguLmM1YTJjNGIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKQEAgLTE0NCwxNSArMTQ0LDYgQEAKIH07CiAKIAotI2lmIDAKLXN0YXRpYyBuZ3hfc3RyX3Qgbmd4X2h0dHBfZmFzdGNnaV9tZXRob2RzW10gPSB7Ci0gICAgbmd4X3N0cmluZygiR0VUIiksCi0gICAgbmd4X3N0cmluZygiSEVBRCIpLAotICAgIG5neF9zdHJpbmcoIlBPU1QiKQotfTsKLSNlbmRpZgotCi0KIHN0YXRpYyBuZ3hfc3RyX3QgIG5neF9odHRwX2Zhc3RjZ2lfc2NyaXB0X25hbWUgPQogICAgIG5neF9zdHJpbmcoImZhc3RjZ2lfc2NyaXB0X25hbWUiKTsKIApAQCAtNDI4LDkgKzQxOSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZS5pcCArPSBzaXplb2YodWludHB0cl90KTsKIAotICAgICAgICAgICAgaWYgKHZhbF9sZW4pIHsKLSAgICAgICAgICAgICAgICBsZW4gKz0gMSArIGtleV9sZW4gKyAoKHZhbF9sZW4gPiAxMjcpID8gNCA6IDEpICsgdmFsX2xlbjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbiArPSAxICsga2V5X2xlbiArICgodmFsX2xlbiA+IDEyNykgPyA0IDogMSkgKyB2YWxfbGVuOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MjcsMjIgKzUxNiwxOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGUuaXAgKz0gc2l6ZW9mKHVpbnRwdHJfdCk7CiAKLSAgICAgICAgICAgIGlmICh2YWxfbGVuKSB7Ci0gICAgICAgICAgICAgICAgKmUucG9zKysgPSAodV9jaGFyKSBrZXlfbGVuOworICAgICAgICAgICAgKmUucG9zKysgPSAodV9jaGFyKSBrZXlfbGVuOwogCi0gICAgICAgICAgICAgICAgaWYgKHZhbF9sZW4gPiAxMjcpIHsKLSAgICAgICAgICAgICAgICAgICAgKmUucG9zKysgPSAodV9jaGFyKSAoKCh2YWxfbGVuID4+IDI0KSAmIDB4N2YpIHwgMHg4MCk7Ci0gICAgICAgICAgICAgICAgICAgICplLnBvcysrID0gKHVfY2hhcikgKCh2YWxfbGVuID4+IDE2KSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICAgICAqZS5wb3MrKyA9ICh1X2NoYXIpICgodmFsX2xlbiA+PiA4KSAmIDB4ZmYpOwotICAgICAgICAgICAgICAgICAgICAqZS5wb3MrKyA9ICh1X2NoYXIpICh2YWxfbGVuICYgMHhmZik7CisgICAgICAgICAgICBpZiAodmFsX2xlbiA+IDEyNykgeworICAgICAgICAgICAgICAgICplLnBvcysrID0gKHVfY2hhcikgKCgodmFsX2xlbiA+PiAyNCkgJiAweDdmKSB8IDB4ODApOworICAgICAgICAgICAgICAgICplLnBvcysrID0gKHVfY2hhcikgKCh2YWxfbGVuID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICplLnBvcysrID0gKHVfY2hhcikgKCh2YWxfbGVuID4+IDgpICYgMHhmZik7CisgICAgICAgICAgICAgICAgKmUucG9zKysgPSAodV9jaGFyKSAodmFsX2xlbiAmIDB4ZmYpOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgKmUucG9zKysgPSAodV9jaGFyKSB2YWxfbGVuOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKmUucG9zKysgPSAodV9jaGFyKSB2YWxfbGVuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBlLnNraXAgPSB2YWxfbGVuID8gMCA6IDE7Ci0KICAgICAgICAgICAgIHdoaWxlICgqKHVpbnRwdHJfdCAqKSBlLmlwKSB7CiAgICAgICAgICAgICAgICAgY29kZSA9ICoobmd4X2h0dHBfc2NyaXB0X2NvZGVfcHQgKikgZS5pcDsKICAgICAgICAgICAgICAgICBjb2RlKChuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKikgJmUpOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaGVhZGVyc19maWx0ZXJfbW9kdWxlLmMKaW5kZXggZjI3YWI0Ny4uOTFiZWJkYyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2hlYWRlcnNfZmlsdGVyX21vZHVsZS5jCkBAIC03Myw3ICs3Myw3IEBACiB7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICBsZW47CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICBpOwotICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAqZXhwaXJlcywgKmNjOworICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAqZXhwaXJlcywgKmNjLCAqKmNjcDsKICAgICBuZ3hfaHR0cF9oZWFkZXJzX2NvbmZfdCAgKmNvbmY7CiAKICAgICBpZiAoci0+aGVhZGVyc19vdXQuc3RhdHVzICE9IE5HWF9IVFRQX09LIHx8IHItPm1haW4pIHsKQEAgLTEwMyw5ICsxMDMsMjAgQEAKICAgICAgICAgbGVuID0gc2l6ZW9mKCJNb24sIDI4IFNlcCAxOTcwIDA2OjAwOjAwIEdNVCIpOwogICAgICAgICBleHBpcmVzLT52YWx1ZS5sZW4gPSBsZW4gLSAxOwogCi0gICAgICAgIGNjID0gci0+aGVhZGVyc19vdXQuY2FjaGVfY29udHJvbC5lbHRzOworICAgICAgICBjY3AgPSByLT5oZWFkZXJzX291dC5jYWNoZV9jb250cm9sLmVsdHM7CiAKLSAgICAgICAgaWYgKGNjID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGNjcCA9PSBOVUxMKSB7CisKKyAgICAgICAgICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmci0+aGVhZGVyc19vdXQuY2FjaGVfY29udHJvbCwgci0+cG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBzaXplb2Yobmd4X3RhYmxlX2VsdF90ICopKSAhPSBOR1hfT0spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2NwID0gbmd4X2FycmF5X3B1c2goJnItPmhlYWRlcnNfb3V0LmNhY2hlX2NvbnRyb2wpOworICAgICAgICAgICAgaWYgKGNjcCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2MgPSBuZ3hfbGlzdF9wdXNoKCZyLT5oZWFkZXJzX291dC5oZWFkZXJzKTsKICAgICAgICAgICAgIGlmIChjYyA9PSBOVUxMKSB7CkBAIC0xMTYsMTAgKzEyNywxNCBAQAogICAgICAgICAgICAgY2MtPmtleS5sZW4gPSBzaXplb2YoIkNhY2hlLUNvbnRyb2wiKSAtIDE7CiAgICAgICAgICAgICBjYy0+a2V5LmRhdGEgPSAodV9jaGFyICopICJDYWNoZS1Db250cm9sIjsKIAorICAgICAgICAgICAgKmNjcCA9IGNjOworCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgci0+aGVhZGVyc19vdXQuY2FjaGVfY29udHJvbC5uZWx0czsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY2NbaV0uaGFzaCA9IDA7CisgICAgICAgICAgICAgICAgY2NwW2ldLT5oYXNoID0gMDsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2MgPSBjY3BbMF07CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY29uZi0+ZXhwaXJlcyA9PSBOR1hfSFRUUF9FWFBJUkVTX0VQT0NIKSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggYzZhNTgwOS4uYjhlOTdkMiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtNjM3LDggKzYzNywyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgZXh0ZW46IFwiJVZcIiIsICZyLT5leHRlbik7CiAKICAgICAgICAgICAgIGlmIChyLT5odHRwX3ZlcnNpb24gPCBOR1hfSFRUUF9WRVJTSU9OXzEwKSB7CisKKyAgICAgICAgICAgICAgICBpZiAocmV2LT50aW1lcl9zZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgbmd4X2RlbF90aW1lcihyZXYpOworICAgICAgICAgICAgICAgIH0KKworI2lmIChOR1hfU1RBVF9TVFVCKQorICAgICAgICAgICAgICAgIG5neF9hdG9taWNfZGVjKG5neF9zdGF0X3JlYWRpbmcpOworICAgICAgICAgICAgICAgIHItPnN0YXRfcmVhZGluZyA9IDA7CisgICAgICAgICAgICAgICAgbmd4X2F0b21pY19pbmMobmd4X3N0YXRfd3JpdGluZyk7CisgICAgICAgICAgICAgICAgci0+c3RhdF93cml0aW5nID0gMTsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgcmV2LT5oYW5kbGVyID0gbmd4X2h0dHBfcmVxdWVzdF9oYW5kbGVyOworICAgICAgICAgICAgICAgIGMtPndyaXRlLT5oYW5kbGVyID0gbmd4X2h0dHBfcmVxdWVzdF9oYW5kbGVyOwogICAgICAgICAgICAgICAgIHItPnJlYWRfZXZlbnRfaGFuZGxlciA9IG5neF9odHRwX2Jsb2NrX3JlYWQ7CisKICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9oYW5kbGVyKHIpOworCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC04NjgsNiArODg0LDcgQEAKICAgICAgICAgICAgIHItPnJlYWRfZXZlbnRfaGFuZGxlciA9IG5neF9odHRwX2Jsb2NrX3JlYWQ7CiAKICAgICAgICAgICAgIG5neF9odHRwX2hhbmRsZXIocik7CisKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xNzgzLDYgKzE4MDAsOCBAQAogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIAorICAgIHItPmRpc2NhcmRfYm9keSA9IDE7CisKICAgICBzaXplID0gci0+aGVhZGVyX2luLT5sYXN0IC0gci0+aGVhZGVyX2luLT5wb3M7CiAKICAgICBpZiAoc2l6ZSkgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCmluZGV4IDJlODA5OTEuLmZlNTZiMjYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKQEAgLTM2Miw2ICszNjIsNyBAQAogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb25seToxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwYWxpdmU6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZ2VyaW5nX2Nsb3NlOjE7CisgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NhcmRfYm9keToxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDoxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIHV0Zjg6MTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3RfYm9keS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKaW5kZXggZWIyZTZhNS4uNjZjN2M2NyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBuZ3hfaHR0cF9yZXF1ZXN0X2JvZHlfdCAgICpyYjsKICAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICpjbGNmOwogCi0gICAgaWYgKHItPnJlcXVlc3RfYm9keSkgeworICAgIGlmIChyLT5yZXF1ZXN0X2JvZHkgfHwgci0+ZGlzY2FyZF9ib2R5KSB7CiAgICAgICAgIHBvc3RfaGFuZGxlcihyKTsKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwppbmRleCBmNTlmZjE3Li5jNTc1MzQ3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKQEAgLTI0MSw3ICsyNDEsOSBAQAogCiAgICAgdSA9IHItPnVwc3RyZWFtOwogCi0gICAgdS0+cmVxdWVzdF9idWZzID0gci0+cmVxdWVzdF9ib2R5LT5idWZzOworICAgIGlmIChyLT5yZXF1ZXN0X2JvZHkpIHsKKyAgICAgICAgdS0+cmVxdWVzdF9idWZzID0gci0+cmVxdWVzdF9ib2R5LT5idWZzOworICAgIH0KIAogICAgIGlmICh1LT5jb25mLT5tZXRob2QgPT0gTkdYX0NPTkZfVU5TRVRfVUlOVCkgewogICAgICAgICB1LT5tZXRob2QgPSByLT5tZXRob2Q7CkBAIC0yNTAsNyArMjUyLDcgQEAKICAgICAgICAgdS0+bWV0aG9kID0gdS0+Y29uZi0+bWV0aG9kOwogICAgIH0KIAotICAgIGlmICh1LT5jcmVhdGVfcmVxdWVzdChyKSA9PSBOR1hfRVJST1IpIHsKKyAgICBpZiAodS0+Y3JlYXRlX3JlcXVlc3QocikgIT0gTkdYX09LKSB7CiAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYxNSw5ICs2MTcsOCBAQAogICAgICAgICAmJiAhdS0+cmVxdWVzdF9zZW50CiAgICAgICAgICYmIGMtPndyaXRlLT5wZW5kaW5nX2VvZikKICAgICB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIGMtPmxvZywgYy0+d3JpdGUtPmtxX2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICJjb25uZWN0KCkgZmFpbGVkIik7Ci0KKyAgICAgICAgKHZvaWQpIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIGMtPndyaXRlLT5rcV9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQoKSByZXBvcnRlZCB0aGF0IGNvbm5lY3QoKSBmYWlsZWQiKTsKICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fbmV4dChyLCB1LCBOR1hfSFRUUF9VUFNUUkVBTV9GVF9FUlJPUik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC03MTYsMTIgKzcxNyw2IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoci0+Y29ubmVjdGlvbi0+d3JpdGUtPmVvZiAmJiAoIXUtPmNhY2hhYmxlIHx8ICF1LT5yZXF1ZXN0X3NlbnQpKSB7Ci0gICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2ZpbmFsaXplX3JlcXVlc3QociwgdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgbmd4X2h0dHBfdXBzdHJlYW1fc2VuZF9yZXF1ZXN0KHIsIHUpOwogfQogCkBAIC0xNzg4LDYgKzE3ODMsNyBAQAogbmd4X2h0dHBfdXBzdHJlYW1fbG9nX2Vycm9yKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdV9jaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CiAgICAgdV9jaGFyICAgICAgICAgICAgICAgICAqcDsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICBsaW5lOwogICAgIHVpbnRwdHJfdCAgICAgICAgICAgICAgIGVzY2FwZTsKICAgICBuZ3hfaHR0cF91cHN0cmVhbV90ICAgICp1OwogICAgIG5neF9wZWVyX2Nvbm5lY3Rpb25fdCAgKnBlZXI7CkBAIC0xODI0LDMyICsxODIwLDM0IEBACiAgICAgICAgICAgICBidWYgKz0gci0+dXJpLmxlbiAtIHUtPmNvbmYtPmxvY2F0aW9uLT5sZW4gKyBlc2NhcGU7CiAgICAgICAgICAgICBsZW4gLT0gci0+dXJpLmxlbiAtIHUtPmNvbmYtPmxvY2F0aW9uLT5sZW4gKyBlc2NhcGU7CiAKLSAgICAgICAgICAgIGlmIChyLT5hcmdzLmxlbikgewotICAgICAgICAgICAgICAgIHAgPSBuZ3hfc25wcmludGYoYnVmLCBsZW4sICI/JVYiLCAmci0+YXJncyk7Ci0gICAgICAgICAgICAgICAgbGVuIC09IHAgLSBidWY7Ci0gICAgICAgICAgICAgICAgYnVmID0gcDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHAgPSBuZ3hfcGFsbG9jKHItPnBvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gdS0+Y29uZi0+bG9jYXRpb24tPmxlbiArIGVzY2FwZSk7CisgICAgICAgICAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX2xvZ19lcnJvcl9pbmZvKHIsIGJ1ZiwgbGVuKTsKKyAgICAgICAgICAgIG5neF9lc2NhcGVfdXJpKHAsIHItPnVyaS5kYXRhICsgdS0+Y29uZi0+bG9jYXRpb24tPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSB1LT5jb25mLT5sb2NhdGlvbi0+bGVuLCBOR1hfRVNDQVBFX1VSSSk7CisKKyAgICAgICAgICAgIGxpbmUubGVuID0gbGVuOworICAgICAgICAgICAgbGluZS5kYXRhID0gcDsKKworICAgICAgICAgICAgcmV0dXJuIG5neF9zbnByaW50ZihidWYsIGxlbiwgIiVWIiwgJmxpbmUpOwogICAgICAgICB9CiAKLSAgICAgICAgcCA9IG5neF9wYWxsb2Moci0+cG9vbCwgci0+dXJpLmxlbiAtIHUtPmNvbmYtPmxvY2F0aW9uLT5sZW4gKyBlc2NhcGUpOwotICAgICAgICBpZiAocCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gYnVmOwotICAgICAgICB9Ci0KLSAgICAgICAgbmd4X2VzY2FwZV91cmkocCwgci0+dXJpLmRhdGEgKyB1LT5jb25mLT5sb2NhdGlvbi0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gdS0+Y29uZi0+bG9jYXRpb24tPmxlbiwgTkdYX0VTQ0FQRV9VUkkpOwotCi0gICAgICAgIHAgPSBuZ3hfY3B5bWVtKGJ1ZiwgcCwgci0+dXJpLmxlbiAtIHUtPmNvbmYtPmxvY2F0aW9uLT5sZW4gKyBlc2NhcGUpOwotCiAgICAgfSBlbHNlIHsKLSAgICAgICAgcCA9IG5neF9jcHltZW0oYnVmLCByLT51cmkuZGF0YSArIHUtPmNvbmYtPmxvY2F0aW9uLT5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSB1LT5jb25mLT5sb2NhdGlvbi0+bGVuKTsKLSAgICB9CisgICAgICAgIGxpbmUubGVuID0gci0+dXJpLmxlbiAtIHUtPmNvbmYtPmxvY2F0aW9uLT5sZW47CisgICAgICAgIGlmIChsaW5lLmxlbiA+IGxlbikgeworICAgICAgICAgICAgbGluZS5sZW4gPSBsZW47CisgICAgICAgIH0KIAotICAgIGxlbiAtPSBwIC0gYnVmOwotICAgIGJ1ZiA9IHA7CisgICAgICAgIGxpbmUuZGF0YSA9IHItPnVyaS5kYXRhICsgdS0+Y29uZi0+bG9jYXRpb24tPmxlbjsKKyAgICAgICAgcCA9IG5neF9zbnByaW50ZihidWYsIGxlbiwgIiVWIiwgJmxpbmUpOworCisgICAgICAgIGxlbiAtPSBwIC0gYnVmOworICAgICAgICBidWYgPSBwOworICAgIH0KIAogICAgIGlmIChyLT5hcmdzLmxlbikgewogICAgICAgICBwID0gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLCAiPyVWIiwgJnItPmFyZ3MpOwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4uYyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3NlbmRmaWxlX2NoYWluLmMKaW5kZXggYTI5YWFmMy4uN2FlNTk0OCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9zZW5kZmlsZV9jaGFpbi5jCkBAIC01Nyw5ICs1Nyw4IEBACiAjaWYgKE5HWF9IQVZFX0tRVUVVRSkKIAogICAgIGlmICgobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9LUVVFVUVfRVZFTlQpICYmIHdldi0+cGVuZGluZ19lb2YpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgd2V2LT5rcV9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgcmVwb3J0ZWQgYWJvdXQgYW4gY2xvc2VkIGNvbm5lY3Rpb24iKTsKLQorICAgICAgICAodm9pZCkgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgd2V2LT5rcV9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgcmVwb3J0ZWQgYWJvdXQgYW4gY2xvc2VkIGNvbm5lY3Rpb24iKTsKICAgICAgICAgd2V2LT5lcnJvciA9IDE7CiAgICAgICAgIHJldHVybiBOR1hfQ0hBSU5fRVJST1I7CiAgICAgfQpAQCAtMjI4LDggKzIyNyw4IEBACiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOR1hfRUlOVFIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHdldi0+ZXJyb3IgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3RjcF9ub3B1c2hfbiAiIGZhaWxlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfdGNwX25vcHVzaF9uICIgZmFpbGVkIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NIQUlOX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTI3Niw3ICsyNzUsNyBAQAogCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgd2V2LT5lcnJvciA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIGVyciwgInNlbmRmaWxlKCkgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgICAgICh2b2lkKSBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCBlcnIsICJzZW5kZmlsZSgpIGZhaWxlZCIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NIQUlOX0VSUk9SOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9yZWN2LmMgYi9zcmMvb3MvdW5peC9uZ3hfcmVjdi5jCmluZGV4IDM2OWJlNjYuLmU5NmNhNzggMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9yZWN2LmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3JlY3YuYwpAQCAtMjksMjAgKzI5LDEyIEBACiAgICAgICAgICAgICAgICAgcmV2LT5yZWFkeSA9IDA7CiAgICAgICAgICAgICAgICAgcmV2LT5lb2YgPSAxOwogCi0gICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgcmV2LT5rcV9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQoKSByZXBvcnRlZCBhYm91dCBhbiBjbG9zZWQgY29ubmVjdGlvbiIpOwotCiAgICAgICAgICAgICAgICAgaWYgKHJldi0+a3FfZXJybm8pIHsKICAgICAgICAgICAgICAgICAgICAgcmV2LT5lcnJvciA9IDE7CiAgICAgICAgICAgICAgICAgICAgIG5neF9zZXRfc29ja2V0X2Vycm5vKHJldi0+a3FfZXJybm8pOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZXYtPmtxX2Vycm5vID09IE5HWF9FQ09OTlJFU0VUCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBjLT5sb2dfZXJyb3IgPT0gTkdYX0VSUk9SX0lHTk9SRV9FQ09OTlJFU0VUKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCByZXYtPmtxX2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQoKSByZXBvcnRlZCBhYm91dCBhbiBjbG9zZWQgY29ubmVjdGlvbiIpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3NlbmQuYyBiL3NyYy9vcy91bml4L25neF9zZW5kLmMKaW5kZXggZmZlNmJjYi4uMTY3ZjJlYyAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3NlbmQuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfc2VuZC5jCkBAIC0yMCw5ICsyMCw4IEBACiAjaWYgKE5HWF9IQVZFX0tRVUVVRSkKIAogICAgIGlmICgobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9LUVVFVUVfRVZFTlQpICYmIHdldi0+cGVuZGluZ19lb2YpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgd2V2LT5rcV9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgcmVwb3J0ZWQgYWJvdXQgYW4gY2xvc2VkIGNvbm5lY3Rpb24iKTsKLQorICAgICAgICAodm9pZCkgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgd2V2LT5rcV9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgcmVwb3J0ZWQgYWJvdXQgYW4gY2xvc2VkIGNvbm5lY3Rpb24iKTsKICAgICAgICAgd2V2LT5lcnJvciA9IDE7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQpAQCAtNjMsNyArNjIsNyBAQAogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB3ZXYtPmVycm9yID0gMTsKLSAgICAgICAgICAgIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIGVyciwgInNlbmQoKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICh2b2lkKSBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCBlcnIsICJzZW5kKCkgZmFpbGVkIik7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3dyaXRldl9jaGFpbi5jIGIvc3JjL29zL3VuaXgvbmd4X3dyaXRldl9jaGFpbi5jCmluZGV4IGVkM2FkNzEuLjZkNTE2YWMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF93cml0ZXZfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMKQEAgLTM0LDkgKzM0LDggQEAKICNpZiAoTkdYX0hBVkVfS1FVRVVFKQogCiAgICAgaWYgKChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0tRVUVVRV9FVkVOVCkgJiYgd2V2LT5wZW5kaW5nX2VvZikgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCB3ZXYtPmtxX2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQoKSByZXBvcnRlZCBhYm91dCBhbiBjbG9zZWQgY29ubmVjdGlvbiIpOwotCisgICAgICAgICh2b2lkKSBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCB3ZXYtPmtxX2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQoKSByZXBvcnRlZCBhYm91dCBhbiBjbG9zZWQgY29ubmVjdGlvbiIpOwogICAgICAgICB3ZXYtPmVycm9yID0gMTsKICAgICAgICAgcmV0dXJuIE5HWF9DSEFJTl9FUlJPUjsKICAgICB9CkBAIC0xMTcsNyArMTE2LDcgQEAKIAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB3ZXYtPmVycm9yID0gMTsKLSAgICAgICAgICAgICAgICBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCBlcnIsICJ3cml0ZXYoKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAodm9pZCkgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgZXJyLCAid3JpdGV2KCkgZmFpbGVkIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DSEFJTl9FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQo=