From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 3/3] xl: split out xl_parse.[ch] Date: Mon, 27 Feb 2017 17:47:21 +0000 Message-ID: <20170227174721.15957-3-wei.liu2@citrix.com> References: <22708.19545.469240.122558@mariner.uk.xensource.com> <20170227174721.15957-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ciPOZ-00025v-Ui for xen-devel@lists.xenproject.org; Mon, 27 Feb 2017 17:47:36 +0000 In-Reply-To: <20170227174721.15957-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org TW92ZSBhbGwgcGFyc2luZyBjb2RlIGludG8geGxfcGFyc2UuYy4gRXhwb3J0IHRoZSBvbmVzIG5l ZWRlZCBpbgp4bF9wYXJzZS5oLgoKU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0 cml4LmNvbT4KLS0tCiB0b29scy94bC9NYWtlZmlsZSAgICAgfCAgICAyICstCiB0b29scy94bC94 bF9jbWRpbXBsLmMgfCAyMzQ2ICsrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIHRvb2xzL3hsL3hsX3BhcnNlLmMgICB8IDIwNTIgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0b29scy94bC94bF9wYXJzZS5oICAgfCAgIDY1 ICsrCiA0IGZpbGVzIGNoYW5nZWQsIDIyODIgaW5zZXJ0aW9ucygrKSwgMjE4MyBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy94bC94bF9wYXJzZS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgdG9vbHMveGwveGxfcGFyc2UuaAoKZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL01ha2VmaWxl IGIvdG9vbHMveGwvTWFrZWZpbGUKaW5kZXggZjVkZjM2NmUwYS4uZDdmN2YwMTU0OSAxMDA2NDQK LS0tIGEvdG9vbHMveGwvTWFrZWZpbGUKKysrIGIvdG9vbHMveGwvTWFrZWZpbGUKQEAgLTE2LDcg KzE2LDcgQEAgQ0ZMQUdTX1hMICs9ICQoQ0ZMQUdTX2xpYnhlbmxpZ2h0KQogQ0ZMQUdTX1hMICs9 IC1Xc2hhZG93CiAKIFhMX09CSlMgPSB4bC5vIHhsX2NtZGltcGwubyB4bF9jbWR0YWJsZS5vIHhs X3N4cC5vIHhsX3V0aWxzLm8KLVhMX09CSlMgKz0geGxfdG1lbS5vCitYTF9PQkpTICs9IHhsX3Rt ZW0ubyB4bF9wYXJzZS5vCiAKICQoWExfT0JKUyk6IENGTEFHUyArPSAkKENGTEFHU19saWJ4ZW50 b29sbG9nKQogJChYTF9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX1hMKQpkaWZmIC0tZ2l0IGEv dG9vbHMveGwveGxfY21kaW1wbC5jIGIvdG9vbHMveGwveGxfY21kaW1wbC5jCmluZGV4IGQwMjdk NTNhM2YuLjUxOTc2Zjk0YjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3hsL3hsX2NtZGltcGwuYworKysg Yi90b29scy94bC94bF9jbWRpbXBsLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaWJ4 bHV0aWwuaD4KICNpbmNsdWRlICJ4bC5oIgogI2luY2x1ZGUgInhsX3V0aWxzLmgiCisjaW5jbHVk ZSAieGxfcGFyc2UuaCIKIAogaW50IGxvZ2ZpbGUgPSAyOwogCkBAIC04NiwyNiArODcsNiBAQCBz dHJ1Y3Qgc2F2ZV9maWxlX2hlYWRlciB7CiAgICAgdWludDMyX3Qgb3B0aW9uYWxfZGF0YV9sZW47 IC8qIHNraXAsIG9yIHNraXAgdGFpbCwgaWYgbm90IHVuZGVyc3Rvb2QgKi8KIH07CiAKLQotc3Rh dGljIGNvbnN0IGNoYXIgKmFjdGlvbl9vbl9zaHV0ZG93bl9uYW1lc1tdID0gewotICAgIFtMSUJY TF9BQ1RJT05fT05fU0hVVERPV05fREVTVFJPWV0gPSAiZGVzdHJveSIsCi0KLSAgICBbTElCWExf QUNUSU9OX09OX1NIVVRET1dOX1JFU1RBUlRdID0gInJlc3RhcnQiLAotICAgIFtMSUJYTF9BQ1RJ T05fT05fU0hVVERPV05fUkVTVEFSVF9SRU5BTUVdID0gInJlbmFtZS1yZXN0YXJ0IiwKLQotICAg IFtMSUJYTF9BQ1RJT05fT05fU0hVVERPV05fUFJFU0VSVkVdID0gInByZXNlcnZlIiwKLQotICAg IFtMSUJYTF9BQ1RJT05fT05fU0hVVERPV05fQ09SRURVTVBfREVTVFJPWV0gPSAiY29yZWR1bXAt ZGVzdHJveSIsCi0gICAgW0xJQlhMX0FDVElPTl9PTl9TSFVURE9XTl9DT1JFRFVNUF9SRVNUQVJU XSA9ICJjb3JlZHVtcC1yZXN0YXJ0IiwKLQotICAgIFtMSUJYTF9BQ1RJT05fT05fU0hVVERPV05f U09GVF9SRVNFVF0gPSAic29mdC1yZXNldCIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqZ2V0 X2FjdGlvbl9vbl9zaHV0ZG93bl9uYW1lKGxpYnhsX2FjdGlvbl9vbl9zaHV0ZG93biBhKQotewot ICAgIHJldHVybiBhY3Rpb25fb25fc2h1dGRvd25fbmFtZXNbYV07Ci19Ci0KIC8qIE9wdGlvbmFs IGRhdGEsIGluIG9yZGVyOgogICogICA0IGJ5dGVzIHVpbnQzMl90ICBjb25maWcgZmlsZSBzaXpl CiAgKiAgIG4gYnl0ZXMgICAgICAgICAgIGNvbmZpZyBmaWxlIGluIFVuaXggdGV4dCBmaWxlIGZv cm1hdApAQCAtMTk2LDIxODEgKzE3NywyMTYgQEAgc3RhdGljIGludCBhY3F1aXJlX2xvY2sodm9p ZCkKICAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7CiAgICAgfQogICAgIGlmIChmY250bChmZF9s b2NrLCBGX1NFVEZELCBGRF9DTE9FWEVDKSA8IDApIHsKLSAgICAgICAgY2xvc2UoZmRfbG9jayk7 Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiY2Fubm90IHNldCBjbG9leGVjIHRvIGxvY2tmaWxl ICVzIGVycm5vPSVkXG4iLCBsb2NrZmlsZSwgZXJybm8pOwotICAgICAgICByZXR1cm4gRVJST1Jf RkFJTDsKLSAgICB9Ci1nZXRfbG9jazoKLSAgICByYyA9IGZjbnRsKGZkX2xvY2ssIEZfU0VUTEtX LCAmZmwpOwotICAgIGlmIChyYyA8IDAgJiYgZXJybm8gPT0gRUlOVFIpCi0gICAgICAgIGdvdG8g Z2V0X2xvY2s7Ci0gICAgaWYgKHJjIDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNh bm5vdCBhY3F1aXJlIGxvY2sgJXMgZXJybm89JWRcbiIsIGxvY2tmaWxlLCBlcnJubyk7Ci0gICAg ICAgIHJjID0gRVJST1JfRkFJTDsKLSAgICB9IGVsc2UKLSAgICAgICAgcmMgPSAwOwotICAgIHJl dHVybiByYzsKLX0KLQotc3RhdGljIGludCByZWxlYXNlX2xvY2sodm9pZCkKLXsKLSAgICBpbnQg cmM7Ci0gICAgc3RydWN0IGZsb2NrIGZsOwotCi0gICAgLyogbG9jayBub3QgYWNxdWlyZWQgKi8K LSAgICBpZiAoZmRfbG9jayA8IDApCi0gICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKLQotcmVs ZWFzZV9sb2NrOgotICAgIGZsLmxfdHlwZSA9IEZfVU5MQ0s7Ci0gICAgZmwubF93aGVuY2UgPSBT RUVLX1NFVDsKLSAgICBmbC5sX3N0YXJ0ID0gMDsKLSAgICBmbC5sX2xlbiA9IDA7Ci0KLSAgICBy YyA9IGZjbnRsKGZkX2xvY2ssIEZfU0VUTEtXLCAmZmwpOwotICAgIGlmIChyYyA8IDAgJiYgZXJy bm8gPT0gRUlOVFIpCi0gICAgICAgIGdvdG8gcmVsZWFzZV9sb2NrOwotICAgIGlmIChyYyA8IDAp IHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJjYW5ub3QgcmVsZWFzZSBsb2NrICVzLCBlcnJu bz0lZFxuIiwgbG9ja2ZpbGUsIGVycm5vKTsKLSAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwotICAg IH0gZWxzZQotICAgICAgICByYyA9IDA7Ci0gICAgY2xvc2UoZmRfbG9jayk7Ci0gICAgZmRfbG9j ayA9IC0xOwotCi0gICAgcmV0dXJuIHJjOwotfQotCi0KLSNkZWZpbmUgQVJSQVlfRVhURU5EX0lO SVRfX0NPUkUoYXJyYXksY291bnQsaW5pdGZuLG1vcmUpICAgICAgICAgICAgICAgIFwKLSAgICAo eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgdHlwZW9mKChjb3VudCkpIGFycmF5X2V4dGVuZF9vbGRfY291 bnQgPSAoY291bnQpOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgKGNvdW50KSsrOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg KGFycmF5KSA9IHhyZWFsbG9jKChhcnJheSksIHNpemVvZigqYXJyYXkpICogKGNvdW50KSk7ICAg ICAgICAgIFwKLSAgICAgICAgKGluaXRmbikoJihhcnJheSlbYXJyYXlfZXh0ZW5kX29sZF9jb3Vu dF0pOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbW9yZTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgJihh cnJheSlbYXJyYXlfZXh0ZW5kX29sZF9jb3VudF07ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICB9KQotCi0jZGVmaW5lIEFSUkFZX0VYVEVORF9JTklUKGFycmF5LGNvdW50LGlu aXRmbikgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQVJSQVlfRVhURU5EX0lOSVRf X0NPUkUoKGFycmF5KSwoY291bnQpLChpbml0Zm4pLCAoeyAgICAgICAgICAgICAgICBcCi0gICAg ICAgIChhcnJheSlbYXJyYXlfZXh0ZW5kX29sZF9jb3VudF0uZGV2aWQgPSBhcnJheV9leHRlbmRf b2xkX2NvdW50OyBcCi0gICAgICAgIH0pKQotCi0jZGVmaW5lIEFSUkFZX0VYVEVORF9JTklUX05P REVWSUQoYXJyYXksY291bnQsaW5pdGZuKSBcCi0gICAgQVJSQVlfRVhURU5EX0lOSVRfX0NPUkUo KGFycmF5KSwoY291bnQpLChpbml0Zm4pLCAvKiBub3RoaW5nICovICkKLQotc3RhdGljIHlhamxf Z2VuX3N0YXR1cyBwcmludGZfaW5mb19vbmVfanNvbih5YWpsX2dlbiBoYW5kLCBpbnQgZG9taWQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFp bl9jb25maWcgKmRfY29uZmlnKQotewotICAgIHlhamxfZ2VuX3N0YXR1cyBzOwotCi0gICAgcyA9 IHlhamxfZ2VuX21hcF9vcGVuKGhhbmQpOwotICAgIGlmIChzICE9IHlhamxfZ2VuX3N0YXR1c19v aykKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICBzID0geWFqbF9nZW5fc3RyaW5nKGhhbmQsIChj b25zdCB1bnNpZ25lZCBjaGFyICopImRvbWlkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNp emVvZigiZG9taWQiKS0xKTsKLSAgICBpZiAocyAhPSB5YWpsX2dlbl9zdGF0dXNfb2spCi0gICAg ICAgIGdvdG8gb3V0OwotICAgIGlmIChkb21pZCAhPSAtMSkKLSAgICAgICAgcyA9IHlhamxfZ2Vu X2ludGVnZXIoaGFuZCwgZG9taWQpOwotICAgIGVsc2UKLSAgICAgICAgcyA9IHlhamxfZ2VuX251 bGwoaGFuZCk7Ci0gICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQotICAgICAgICBnb3Rv IG91dDsKLQotICAgIHMgPSB5YWpsX2dlbl9zdHJpbmcoaGFuZCwgKGNvbnN0IHVuc2lnbmVkIGNo YXIgKikiY29uZmlnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigiY29uZmlnIikt MSk7Ci0gICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQotICAgICAgICBnb3RvIG91dDsK LSAgICBzID0gbGlieGxfZG9tYWluX2NvbmZpZ19nZW5fanNvbihoYW5kLCBkX2NvbmZpZyk7Ci0g ICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQotICAgICAgICBnb3RvIG91dDsKLQotICAg IHMgPSB5YWpsX2dlbl9tYXBfY2xvc2UoaGFuZCk7Ci0gICAgaWYgKHMgIT0geWFqbF9nZW5fc3Rh dHVzX29rKQotICAgICAgICBnb3RvIG91dDsKLQotb3V0OgotICAgIHJldHVybiBzOwotfQotCi1z dGF0aWMgdm9pZCBwcmludGZfaW5mbyhlbnVtIG91dHB1dF9mb3JtYXQgb3V0cHV0X2Zvcm1hdCwK LSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkb21pZCwKLSAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmlnLCBGSUxFICpmaCkKLXsKLSAgICBpZiAo b3V0cHV0X2Zvcm1hdCA9PSBPVVRQVVRfRk9STUFUX1NYUCkKLSAgICAgICAgcmV0dXJuIHByaW50 Zl9pbmZvX3NleHAoZG9taWQsIGRfY29uZmlnLCBmaCk7Ci0KLSAgICBjb25zdCBjaGFyICpidWY7 Ci0gICAgbGlieGxfeWFqbF9sZW5ndGggbGVuID0gMDsKLSAgICB5YWpsX2dlbl9zdGF0dXMgczsK LSAgICB5YWpsX2dlbiBoYW5kOwotCi0gICAgaGFuZCA9IGxpYnhsX3lhamxfZ2VuX2FsbG9jKE5V TEwpOwotICAgIGlmICghaGFuZCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0 byBhbGxvY2F0ZSBKU09OIGdlbmVyYXRvclxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K LSAgICBzID0gcHJpbnRmX2luZm9fb25lX2pzb24oaGFuZCwgZG9taWQsIGRfY29uZmlnKTsKLSAg ICBpZiAocyAhPSB5YWpsX2dlbl9zdGF0dXNfb2spCi0gICAgICAgIGdvdG8gb3V0OwotCi0gICAg cyA9IHlhamxfZ2VuX2dldF9idWYoaGFuZCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiopJmJ1Ziwg Jmxlbik7Ci0gICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQotICAgICAgICBnb3RvIG91 dDsKLQotICAgIGZwdXRzKGJ1ZiwgZmgpOwotCi1vdXQ6Ci0gICAgeWFqbF9nZW5fZnJlZShoYW5k KTsKLQotICAgIGlmIChzICE9IHlhamxfZ2VuX3N0YXR1c19vaykKLSAgICAgICAgZnByaW50Zihz dGRlcnIsCi0gICAgICAgICAgICAgICAgInVuYWJsZSB0byBmb3JtYXQgZG9tYWluIGNvbmZpZyBh cyBKU09OIChZQUpMOiVkKVxuIiwgcyk7Ci0KLSAgICBmbHVzaF9zdHJlYW0oZmgpOwotfQotCi1z dGF0aWMgaW50IGRvX2RhZW1vbml6ZShjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwaWRmaWxlKQot ewotICAgIGNoYXIgKmZ1bGxuYW1lOwotICAgIHBpZF90IGNoaWxkMTsKLSAgICBpbnQgbnVsbGZk LCByZXQgPSAwOwotCi0gICAgY2hpbGQxID0geGxfZm9yayhjaGlsZF93YWl0ZGFlbW9uLCAiZG9t YWluIG1vbml0b3JpbmcgZGFlbW9uaXppbmcgY2hpbGQiKTsKLSAgICBpZiAoY2hpbGQxKSB7Ci0g ICAgICAgIHJldCA9IGNoaWxkX3JlcG9ydChjaGlsZF93YWl0ZGFlbW9uKTsKLSAgICAgICAgaWYg KHJldCkgZ290byBvdXQ7Ci0gICAgICAgIHJldCA9IDE7Ci0gICAgICAgIGdvdG8gb3V0OwotICAg IH0KLQotICAgIHBvc3Rmb3JrKCk7Ci0KLSAgICByZXQgPSBsaWJ4bF9jcmVhdGVfbG9nZmlsZShj dHgsIG5hbWUsICZmdWxsbmFtZSk7Ci0gICAgaWYgKHJldCkgewotICAgICAgICBMT0coImZhaWxl ZCB0byBvcGVuIGxvZ2ZpbGUgJXM6ICVzIixmdWxsbmFtZSxzdHJlcnJvcihlcnJubykpOwotICAg ICAgICBleGl0KC0xKTsKLSAgICB9Ci0KLSAgICBDSEtfU1lTQ0FMTChsb2dmaWxlID0gb3Blbihm dWxsbmFtZSwgT19XUk9OTFl8T19DUkVBVHxPX0FQUEVORCwgMDY0NCkpOwotICAgIGZyZWUoZnVs bG5hbWUpOwotICAgIGFzc2VydChsb2dmaWxlID49IDMpOwotCi0gICAgQ0hLX1NZU0NBTEwobnVs bGZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRE9OTFkpKTsKLSAgICBhc3NlcnQobnVsbGZkID49 IDMpOwotCi0gICAgZHVwMihudWxsZmQsIDApOwotICAgIGR1cDIobG9nZmlsZSwgMSk7Ci0gICAg ZHVwMihsb2dmaWxlLCAyKTsKLQotICAgIGNsb3NlKG51bGxmZCk7Ci0KLSAgICBDSEtfU1lTQ0FM TChkYWVtb24oMCwgMSkpOwotCi0gICAgaWYgKHBpZGZpbGUpIHsKLSAgICAgICAgaW50IGZkID0g b3BlbihwaWRmaWxlLCBPX1JEV1IgfCBPX0NSRUFULCBTX0lSVVNSfFNfSVdVU1IpOwotICAgICAg ICBjaGFyICpwaWQgPSBOVUxMOwotCi0gICAgICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICAg ICAgcGVycm9yKCJVbmFibGUgdG8gb3BlbiBwaWRmaWxlIik7Ci0gICAgICAgICAgICBleGl0KDEp OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFzcHJpbnRmKCZwaWQsICIlbGRcbiIsIChsb25n KWdldHBpZCgpKSA9PSAtMSkgewotICAgICAgICAgICAgcGVycm9yKCJGb3JtYXR0aW5nIHBpZCIp OwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3cml0ZShm ZCwgcGlkLCBzdHJsZW4ocGlkKSkgPCAwKSB7Ci0gICAgICAgICAgICBwZXJyb3IoIldyaXRpbmcg cGlkIik7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNs b3NlKGZkKSA8IDApIHsKLSAgICAgICAgICAgIHBlcnJvcigiQ2xvc2luZyBwaWRmaWxlIik7Ci0g ICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnJlZShwaWQpOwotICAg IH0KLQotb3V0OgotICAgIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyc2VfYWN0aW9u X29uX3NodXRkb3duKGNvbnN0IGNoYXIgKmJ1ZiwgbGlieGxfYWN0aW9uX29uX3NodXRkb3duICph KQotewotICAgIGludCBpOwotICAgIGNvbnN0IGNoYXIgKm47Ci0KLSAgICBmb3IgKGkgPSAwOyBp IDwgc2l6ZW9mKGFjdGlvbl9vbl9zaHV0ZG93bl9uYW1lcykgLyBzaXplb2YoYWN0aW9uX29uX3No dXRkb3duX25hbWVzWzBdKTsgaSsrKSB7Ci0gICAgICAgIG4gPSBhY3Rpb25fb25fc2h1dGRvd25f bmFtZXNbaV07Ci0KLSAgICAgICAgaWYgKCFuKSBjb250aW51ZTsKLQotICAgICAgICBpZiAoc3Ry Y21wKGJ1ZiwgbikgPT0gMCkgewotICAgICAgICAgICAgKmEgPSBpOwotICAgICAgICAgICAgcmV0 dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgRFNU QVRFX0lOSVRJQUwgICAwCi0jZGVmaW5lIERTVEFURV9UQVAgICAgICAgMQotI2RlZmluZSBEU1RB VEVfUEhZU1BBVEggIDIKLSNkZWZpbmUgRFNUQVRFX1ZJUlRQQVRIICAzCi0jZGVmaW5lIERTVEFU RV9WSVJUVFlQRSAgNAotI2RlZmluZSBEU1RBVEVfUlcgICAgICAgIDUKLSNkZWZpbmUgRFNUQVRF X1RFUk1JTkFMICA2Ci0KLXN0YXRpYyB2b2lkIHBhcnNlX2Rpc2tfY29uZmlnX211bHRpc3RyaW5n KFhMVV9Db25maWcgKipjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgbnNwZWNzLCBjb25zdCBjaGFyICpjb25zdCAqc3BlY3MsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzaykK LXsKLSAgICBpbnQgZTsKLQotICAgIGxpYnhsX2RldmljZV9kaXNrX2luaXQoZGlzayk7Ci0KLSAg ICBpZiAoISpjb25maWcpIHsKLSAgICAgICAgKmNvbmZpZyA9IHhsdV9jZmdfaW5pdChzdGRlcnIs ICJjb21tYW5kIGxpbmUiKTsKLSAgICAgICAgaWYgKCEqY29uZmlnKSB7IHBlcnJvcigieGx1X2Nm Z19pbml0Iik7IGV4aXQoLTEpOyB9Ci0gICAgfQotCi0gICAgZSA9IHhsdV9kaXNrX3BhcnNlKCpj b25maWcsIG5zcGVjcywgc3BlY3MsIGRpc2spOwotICAgIGlmIChlID09IEVJTlZBTCkgZXhpdChF WElUX0ZBSUxVUkUpOwotICAgIGlmIChlKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCJ4bHVf ZGlza19wYXJzZSBmYWlsZWQ6ICVzXG4iLHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIGV4aXQo RVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHBhcnNlX2Rpc2tfY29uZmln KFhMVV9Db25maWcgKipjb25maWcsIGNvbnN0IGNoYXIgKnNwZWMsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzaykKLXsKLSAgICBwYXJzZV9kaXNr X2NvbmZpZ19tdWx0aXN0cmluZyhjb25maWcsIDEsICZzcGVjLCBkaXNrKTsKLX0KLQotc3RhdGlj IHZvaWQgcGFyc2VfdmlmX3JhdGUoWExVX0NvbmZpZyAqKmNvbmZpZywgY29uc3QgY2hhciAqcmF0 ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9uaWMgKm5pYykKLXsK LSAgICBpbnQgZTsKLQotICAgIGUgPSB4bHVfdmlmX3BhcnNlX3JhdGUoKmNvbmZpZywgcmF0ZSwg bmljKTsKLSAgICBpZiAoZSA9PSBFSU5WQUwgfHwgZSA9PSBFT1ZFUkZMT1cpIGV4aXQoRVhJVF9G QUlMVVJFKTsKLSAgICBpZiAoZSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwieGx1X3ZpZl9w YXJzZV9yYXRlIGZhaWxlZDogJXNcbiIsc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgZXhpdChF WElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgc2V0X2RlZmF1bHRfbmljX3Zh bHVlcyhsaWJ4bF9kZXZpY2VfbmljICpuaWMpCi17Ci0KLSAgICBpZiAoZGVmYXVsdF92aWZzY3Jp cHQpIHsKLSAgICAgICAgZnJlZShuaWMtPnNjcmlwdCk7Ci0gICAgICAgIG5pYy0+c2NyaXB0ID0g c3RyZHVwKGRlZmF1bHRfdmlmc2NyaXB0KTsKLSAgICB9Ci0KLSAgICBpZiAoZGVmYXVsdF9icmlk Z2UpIHsKLSAgICAgICAgZnJlZShuaWMtPmJyaWRnZSk7Ci0gICAgICAgIG5pYy0+YnJpZGdlID0g c3RyZHVwKGRlZmF1bHRfYnJpZGdlKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVmYXVsdF9nYXRld2F5 ZGV2KSB7Ci0gICAgICAgIGZyZWUobmljLT5nYXRld2F5ZGV2KTsKLSAgICAgICAgbmljLT5nYXRl d2F5ZGV2ID0gc3RyZHVwKGRlZmF1bHRfZ2F0ZXdheWRldik7Ci0gICAgfQotCi0gICAgaWYgKGRl ZmF1bHRfdmlmYmFja2VuZCkgewotICAgICAgICBmcmVlKG5pYy0+YmFja2VuZF9kb21uYW1lKTsK LSAgICAgICAgbmljLT5iYWNrZW5kX2RvbW5hbWUgPSBzdHJkdXAoZGVmYXVsdF92aWZiYWNrZW5k KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNwbGl0X3N0cmluZ19pbnRvX3N0cmluZ19saXN0 KGNvbnN0IGNoYXIgKnN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKmRlbGltLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfc3RyaW5nX2xpc3QgKnBzbCkKLXsKLSAgICBjaGFyICpzLCAqc2F2ZXB0 cjsKLSAgICBjb25zdCBjaGFyICpwOwotICAgIGxpYnhsX3N0cmluZ19saXN0IHNsOwotCi0gICAg aW50IGkgPSAwLCBuciA9IDA7Ci0KLSAgICBzID0gc3RyZHVwKHN0cik7Ci0gICAgaWYgKHMgPT0g TlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1v cnkgdG8gc3BsaXQgc3RyaW5nXG4iKTsKLSAgICAgICAgZXhpdCgtMSk7Ci0gICAgfQotCi0gICAg LyogQ291bnQgbnVtYmVyIG9mIGVudHJpZXMgKi8KLSAgICBwID0gc3RydG9rX3IocywgZGVsaW0s ICZzYXZlcHRyKTsKLSAgICBkbyB7Ci0gICAgICAgIG5yKys7Ci0gICAgfSB3aGlsZSAoKHAgPSBz dHJ0b2tfcihOVUxMLCBkZWxpbSwgJnNhdmVwdHIpKSk7Ci0KLSAgICBmcmVlKHMpOwotCi0gICAg cyA9IHN0cmR1cChzdHIpOwotCi0gICAgc2wgPSBtYWxsb2MoKG5yKzEpICogc2l6ZW9mIChjaGFy ICopKTsKLSAgICBpZiAoc2wgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVu YWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgdG8gc3BsaXQgc3RyaW5nXG4iKTsKLSAgICAgICAgZXhp dCgtMSk7Ci0gICAgfQotCi0gICAgcCA9IHN0cnRva19yKHMsIGRlbGltLCAmc2F2ZXB0cik7Ci0g ICAgZG8gewotICAgICAgICBhc3NlcnQoaSA8IG5yKTsKLSAgICAgICAgc2xbaV0gPSBzdHJkdXAo cCk7Ci0gICAgICAgIGkrKzsKLSAgICB9IHdoaWxlICgocCA9IHN0cnRva19yKE5VTEwsIGRlbGlt LCAmc2F2ZXB0cikpKTsKLSAgICBzbFtpXSA9IE5VTEw7Ci0KLSAgICAqcHNsID0gc2w7Ci0KLSAg ICBmcmVlKHMpOwotfQotCi0vKiBOQjogdGhpcyBmb2xsb3dzIHRoZSBpbnRlcmZhY2UgdXNlZCBi eSA8Y3R5cGUuaD4uIFNlZSAnbWFuIDMgY3R5cGUnCi0gICBhbmQgbG9vayBmb3IgQ1RZUEUgaW4g bGlieGxfaW50ZXJuYWwuaCAqLwotdHlwZWRlZiBpbnQgKCpjaGFyX3ByZWRpY2F0ZV90KShjb25z dCBpbnQgYyk7Ci0KLXN0YXRpYyB2b2lkIHRyaW0oY2hhcl9wcmVkaWNhdGVfdCBwcmVkaWNhdGUs IGNvbnN0IGNoYXIgKmlucHV0LCBjaGFyICoqb3V0cHV0KQotewotICAgIGNvbnN0IGNoYXIgKmZp cnN0LCAqYWZ0ZXI7Ci0KLSAgICBmb3IgKGZpcnN0ID0gaW5wdXQ7Ci0gICAgICAgICAqZmlyc3Qg JiYgcHJlZGljYXRlKCh1bnNpZ25lZCBjaGFyKWZpcnN0WzBdKTsKLSAgICAgICAgIGZpcnN0Kysp Ci0gICAgICAgIDsKLQotICAgIGZvciAoYWZ0ZXIgPSBmaXJzdCArIHN0cmxlbihmaXJzdCk7Ci0g ICAgICAgICBhZnRlciA+IGZpcnN0ICYmIHByZWRpY2F0ZSgodW5zaWduZWQgY2hhcilhZnRlclst MV0pOwotICAgICAgICAgYWZ0ZXItLSkKLSAgICAgICAgOwotCi0gICAgc2l6ZV90IGxlbl9ub25u dWxsID0gYWZ0ZXIgLSBmaXJzdDsKLSAgICBjaGFyICpyZXN1bHQgPSB4bWFsbG9jKGxlbl9ub25u dWxsICsgMSk7Ci0KLSAgICBtZW1jcHkocmVzdWx0LCBmaXJzdCwgbGVuX25vbm51bGwpOwotICAg IHJlc3VsdFtsZW5fbm9ubnVsbF0gPSAwOwotCi0gICAgKm91dHB1dCA9IHJlc3VsdDsKLX0KLQot c3RhdGljIGludCBzcGxpdF9zdHJpbmdfaW50b19wYWlyKGNvbnN0IGNoYXIgKnN0ciwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZWxpbSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqYSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqYikKLXsKLSAgICBjaGFyICpzLCAqcCwgKnNhdmVwdHIsICph YSA9IE5VTEwsICpiYiA9IE5VTEw7Ci0gICAgaW50IHJjID0gMDsKLQotICAgIHMgPSB4c3RyZHVw KHN0cik7Ci0KLSAgICBwID0gc3RydG9rX3IocywgZGVsaW0sICZzYXZlcHRyKTsKLSAgICBpZiAo cCA9PSBOVUxMKSB7Ci0gICAgICAgIHJjID0gRVJST1JfSU5WQUw7Ci0gICAgICAgIGdvdG8gb3V0 OwotICAgIH0KLSAgICBhYSA9IHhzdHJkdXAocCk7Ci0gICAgcCA9IHN0cnRva19yKE5VTEwsIGRl bGltLCAmc2F2ZXB0cik7Ci0gICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgICByYyA9IEVSUk9S X0lOVkFMOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAgYmIgPSB4c3RyZHVwKHApOwot Ci0gICAgKmEgPSBhYTsKLSAgICBhYSA9IE5VTEw7Ci0gICAgKmIgPSBiYjsKLSAgICBiYiA9IE5V TEw7Ci1vdXQ6Ci0gICAgZnJlZShzKTsKLSAgICBmcmVlKGFhKTsKLSAgICBmcmVlKGJiKTsKLSAg ICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyc2VfcmFuZ2UoY29uc3QgY2hhciAqc3Ry LCB1bnNpZ25lZCBsb25nICphLCB1bnNpZ25lZCBsb25nICpiKQotewotICAgIGNvbnN0IGNoYXIg Km5zdHI7Ci0gICAgY2hhciAqZW5kcHRyOwotCi0gICAgKmEgPSAqYiA9IHN0cnRvdWwoc3RyLCAm ZW5kcHRyLCAxMCk7Ci0gICAgaWYgKGVuZHB0ciA9PSBzdHIgfHwgKmEgPT0gVUxPTkdfTUFYKQot ICAgICAgICByZXR1cm4gMTsKLQotICAgIGlmICgqZW5kcHRyID09ICctJykgewotICAgICAgICBu c3RyID0gZW5kcHRyICsgMTsKLQotICAgICAgICAqYiA9IHN0cnRvdWwobnN0ciwgJmVuZHB0ciwg MTApOwotICAgICAgICBpZiAoZW5kcHRyID09IG5zdHIgfHwgKmIgPT0gVUxPTkdfTUFYIHx8ICpi IDwgKmEpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvKiBWYWxpZCB2YWx1 ZSBvciByYW5nZSBzbyBmYXIsIGJ1dCB3ZSBhbHNvIGRvbid0IHdhbnQganVuayBhZnRlciB0aGF0 ICovCi0gICAgaWYgKCplbmRwdHIgIT0gJ1wwJykKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBy ZXR1cm4gMDsKLX0KLQotLyoKLSAqIEFkZCBvciByZW1vdmVzIGEgc3BlY2lmaWMgc2V0IG9mIGNw dXMgKHNwZWNpZmllZCBpbiBzdHIsIGVpdGhlciBhcwotICogc2luZ2xlIGNwdXMgb3IgYXMgZW50 aXJlIE5VTUEgbm9kZXMpIHRvL2Zyb20gY3B1bWFwLgotICovCi1zdGF0aWMgaW50IHVwZGF0ZV9j cHVtYXBfcmFuZ2UoY29uc3QgY2hhciAqc3RyLCBsaWJ4bF9iaXRtYXAgKmNwdW1hcCkKLXsKLSAg ICB1bnNpZ25lZCBsb25nIGlkYSwgaWRiOwotICAgIGxpYnhsX2JpdG1hcCBub2RlX2NwdW1hcDsK LSAgICBib29sIGlzX25vdCA9IGZhbHNlLCBpc19ub2RlcyA9IGZhbHNlOwotICAgIGludCByYyA9 IDA7Ci0KLSAgICBsaWJ4bF9iaXRtYXBfaW5pdCgmbm9kZV9jcHVtYXApOwotCi0gICAgcmMgPSBs aWJ4bF9ub2RlX2JpdG1hcF9hbGxvYyhjdHgsICZub2RlX2NwdW1hcCwgMCk7Ci0gICAgaWYgKHJj KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfbm9kZV9iaXRtYXBfYWxsb2MgZmFp bGVkLlxuIik7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIC8qIEFyZSB3ZSBhZGRp bmcgb3IgcmVtb3ZpbmcgY3B1cy9ub2Rlcz8gKi8KLSAgICBpZiAoU1RSX1NLSVBfUFJFRklYKHN0 ciwgIl4iKSkgewotICAgICAgICBpc19ub3QgPSB0cnVlOwotICAgIH0KLQotICAgIC8qIEFyZSB3 ZSBkZWFsaW5nIHdpdGggY3B1cyBvciBmdWxsIG5vZGVzPyAqLwotICAgIGlmIChTVFJfU0tJUF9Q UkVGSVgoc3RyLCAibm9kZToiKSB8fCBTVFJfU0tJUF9QUkVGSVgoc3RyLCAibm9kZXM6IikpIHsK LSAgICAgICAgaXNfbm9kZXMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAoc3RyLCAi YWxsIikgPT0gMCkgewotICAgICAgICAvKiBXZSBkbyBub3QgYWNjZXB0ICJeYWxsIiBvciAiXm5v ZGVzOmFsbCIgKi8KLSAgICAgICAgaWYgKGlzX25vdCkgewotICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJDYW4ndCBjb21iaW5lIFwiXlwiIGFuZCBcImFsbFwiLlxuIik7Ci0gICAgICAgICAg ICByYyA9IEVSUk9SX0lOVkFMOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGxpYnhsX2Jp dG1hcF9zZXRfYW55KGNwdW1hcCk7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIHJj ID0gcGFyc2VfcmFuZ2Uoc3RyLCAmaWRhLCAmaWRiKTsKLSAgICBpZiAocmMpIHsKLSAgICAgICAg ZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHBjcHUgcmFuZ2U6ICVzLlxuIiwgc3RyKTsKLSAgICAg ICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgLyogQWRkIG9yIHJlbW92ZSB0aGUgc3BlY2lmaWVk IGNwdXMgaW4gdGhlIHJhbmdlICovCi0gICAgd2hpbGUgKGlkYSA8PSBpZGIpIHsKLSAgICAgICAg aWYgKGlzX25vZGVzKSB7Ci0gICAgICAgICAgICAvKiBBZGQvUmVtb3ZlIGFsbCB0aGUgY3B1cyBv ZiBhIE5VTUEgbm9kZSAqLwotICAgICAgICAgICAgaW50IGk7Ci0KLSAgICAgICAgICAgIHJjID0g bGlieGxfbm9kZV90b19jcHVtYXAoY3R4LCBpZGEsICZub2RlX2NwdW1hcCk7Ci0gICAgICAgICAg ICBpZiAocmMpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX25vZGVf dG9fY3B1bWFwIGZhaWxlZC5cbiIpOwotICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAg ICAgICAgfQotCi0gICAgICAgICAgICAvKiBBZGQvUmVtb3ZlIGFsbCB0aGUgY3B1cyBpbiB0aGUg bm9kZSBjcHVtYXAgKi8KLSAgICAgICAgICAgIGxpYnhsX2Zvcl9lYWNoX3NldF9iaXQoaSwgbm9k ZV9jcHVtYXApIHsKLSAgICAgICAgICAgICAgICBpc19ub3QgPyBsaWJ4bF9iaXRtYXBfcmVzZXQo Y3B1bWFwLCBpKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfYml0bWFwX3NldChj cHVtYXAsIGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg LyogQWRkL1JlbW92ZSB0aGlzIGNwdSAqLwotICAgICAgICAgICAgaXNfbm90ID8gbGlieGxfYml0 bWFwX3Jlc2V0KGNwdW1hcCwgaWRhKSA6Ci0gICAgICAgICAgICAgICAgICAgICBsaWJ4bF9iaXRt YXBfc2V0KGNwdW1hcCwgaWRhKTsKLSAgICAgICAgfQotICAgICAgICBpZGErKzsKLSAgICB9Ci0K LSBvdXQ6Ci0gICAgbGlieGxfYml0bWFwX2Rpc3Bvc2UoJm5vZGVfY3B1bWFwKTsKLSAgICByZXR1 cm4gcmM7Ci19Ci0KLS8qCi0gKiBUYWtlcyBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBzZXQgb2Yg Y3B1cyAoc3BlY2lmaWVkIGVpdGhlciBhcwotICogc2luZ2xlIGNwdXMgb3IgYXMgZWludGlyZSBO VU1BIG5vZGVzKSBhbmQgdHVybnMgaXQgaW50byB0aGUKLSAqIGNvcnJlc3BvbmRpbmcgbGlieGxf Yml0bWFwIChpbiBjcHVtYXApLgotICovCi1zdGF0aWMgaW50IHBhcnNlX2NwdXJhbmdlKGNvbnN0 IGNoYXIgKmNwdSwgbGlieGxfYml0bWFwICpjcHVtYXApCi17Ci0gICAgY2hhciAqcHRyLCAqc2F2 ZXB0ciA9IE5VTEwsICpidWYgPSB4c3RyZHVwKGNwdSk7Ci0gICAgaW50IHJjID0gMDsKLQotICAg IGZvciAocHRyID0gc3RydG9rX3IoYnVmLCAiLCIsICZzYXZlcHRyKTsgcHRyOwotICAgICAgICAg cHRyID0gc3RydG9rX3IoTlVMTCwgIiwiLCAmc2F2ZXB0cikpIHsKLSAgICAgICAgcmMgPSB1cGRh dGVfY3B1bWFwX3JhbmdlKHB0ciwgY3B1bWFwKTsKLSAgICAgICAgaWYgKHJjKQotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgfQotICAgIGZyZWUoYnVmKTsKLQotICAgIHJldHVybiByYzsKLX0KLQot c3RhdGljIHZvaWQgcGFyc2VfdG9wX2xldmVsX3ZuY19vcHRpb25zKFhMVV9Db25maWcgKmNvbmZp ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF92bmNfaW5m byAqdm5jKQotewotICAgIGxvbmcgbDsKLQotICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmln LCAidm5jIiwgJnZuYy0+ZW5hYmxlLCAwKTsKLSAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChj b25maWcsICJ2bmNsaXN0ZW4iLCAmdm5jLT5saXN0ZW4sIDApOwotICAgIHhsdV9jZmdfcmVwbGFj ZV9zdHJpbmcgKGNvbmZpZywgInZuY3Bhc3N3ZCIsICZ2bmMtPnBhc3N3ZCwgMCk7Ci0gICAgaWYg KCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJ2bmNkaXNwbGF5IiwgJmwsIDApKQotICAgICAg ICB2bmMtPmRpc3BsYXkgPSBsOwotICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAidm5j dW51c2VkIiwgJnZuYy0+ZmluZHVudXNlZCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhcnNlX3Rv cF9sZXZlbF9zZGxfb3B0aW9ucyhYTFVfQ29uZmlnICpjb25maWcsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfc2RsX2luZm8gKnNkbCkKLXsKLSAgICB4bHVf Y2ZnX2dldF9kZWZib29sKGNvbmZpZywgInNkbCIsICZzZGwtPmVuYWJsZSwgMCk7Ci0gICAgeGx1 X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJvcGVuZ2wiLCAmc2RsLT5vcGVuZ2wsIDApOwotICAg IHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZpZywgImRpc3BsYXkiLCAmc2RsLT5kaXNwbGF5 LCAwKTsKLSAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJ4YXV0aG9yaXR5Iiwg JnNkbC0+eGF1dGhvcml0eSwgMCk7Ci19Ci0KLXN0YXRpYyBjaGFyICpwYXJzZV9jbWRsaW5lKFhM VV9Db25maWcgKmNvbmZpZykKLXsKLSAgICBjaGFyICpjbWRsaW5lID0gTlVMTDsKLSAgICBjb25z dCBjaGFyICpyb290ID0gTlVMTCwgKmV4dHJhID0gTlVMTCwgKmJ1ZiA9IE5VTEw7Ci0KLSAgICB4 bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZpZywgImNtZGxpbmUiLCAmYnVmLCAwKTsKLSAgICB4bHVf Y2ZnX2dldF9zdHJpbmcgKGNvbmZpZywgInJvb3QiLCAmcm9vdCwgMCk7Ci0gICAgeGx1X2NmZ19n ZXRfc3RyaW5nIChjb25maWcsICJleHRyYSIsICZleHRyYSwgMCk7Ci0KLSAgICBpZiAoYnVmKSB7 Ci0gICAgICAgIGNtZGxpbmUgPSBzdHJkdXAoYnVmKTsKLSAgICAgICAgaWYgKHJvb3QgfHwgZXh0 cmEpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IGlnbm9yaW5nIHJvb3Q9 IGFuZCBleHRyYT0gIgotICAgICAgICAgICAgICAgICAgICAiaW4gZmF2b3VyIG9mIGNtZGxpbmU9 XG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAocm9vdCAmJiBleHRyYSkgewotICAgICAg ICAgICAgeGFzcHJpbnRmKCZjbWRsaW5lLCAicm9vdD0lcyAlcyIsIHJvb3QsIGV4dHJhKTsKLSAg ICAgICAgfSBlbHNlIGlmIChyb290KSB7Ci0gICAgICAgICAgICB4YXNwcmludGYoJmNtZGxpbmUs ICJyb290PSVzIiwgcm9vdCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXh0cmEpIHsKLSAgICAgICAg ICAgIGNtZGxpbmUgPSBzdHJkdXAoZXh0cmEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg KChidWYgfHwgcm9vdCB8fCBleHRyYSkgJiYgIWNtZGxpbmUpIHsKLSAgICAgICAgZnByaW50Zihz dGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBjbWRsaW5lXG4iKTsKLSAgICAg ICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLQotICAgIHJldHVybiBjbWRsaW5lOwotfQot Ci1zdGF0aWMgdm9pZCBwYXJzZV92Y3B1X2FmZmluaXR5KGxpYnhsX2RvbWFpbl9idWlsZF9pbmZv ICpiX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhMVV9Db25maWdMaXN0 ICpjcHVzLCBjb25zdCBjaGFyICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBudW1fY3B1cywgYm9vbCBpc19oYXJkKQotewotICAgIGxpYnhsX2JpdG1hcCAqdmNwdV9h ZmZpbml0eV9hcnJheTsKLQotICAgIC8qCi0gICAgICogSWYgd2UgYXJlIGhlcmUsIGFuZCBidWYg aXMgIU5VTEwsIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHN0cmluZy4gV2hhdAotICAgICAqIHdlIGRv IGluIHRoaXMgY2FzZSBpcyBwYXJzZSBpdCwgYW5kIGNvcHkgdGhlIHJlc3VsdCBpbiBfYWxsXyAo dXAgdG8KLSAgICAgKiBiX2luZm8tPm1heF92Y3B1cykgdGhlIGVsZW1lbnRzIG9mIHRoZSB2Y3B1 IGFmZmluaXR5IGFycmF5LgotICAgICAqCi0gICAgICogSWYgYnVmIGlzIE5VTEwsIHdlIGhhdmUg YSBsaXN0LCBhbmQgd2hhdCB3ZSBkbyBpcyBwdXR0aW5nIGluIHRoZQotICAgICAqIGktZXRoIGVs ZW1lbnQgb2YgdGhlIHZjcHUgYWZmaW5pdHkgYXJyYXkgdGhlIHJlc3VsdCBvZiB0aGUgcGFyc2lu ZwotICAgICAqIG9mIHRoZSBpLWV0aCBlbnRyeSBvZiB0aGUgbGlzdC4gSWYgdGhlcmUgYXJlIG1v cmUgdmNwdXMgdGhhbgotICAgICAqIGVudHJpZXMsIGl0IGlzIGZpbmUgdG8ganVzdCBub3QgdG91 Y2ggdGhlIGxhc3QgYXJyYXkgZWxlbWVudHMuCi0gICAgICovCi0KLSAgICAvKiBTaWxlbnRseSBp Z25vcmUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gbm9uIGV4aXN0aW5nIHZjcHVzICovCi0gICAg aWYgKGJ1ZiB8fCBudW1fY3B1cyA+IGJfaW5mby0+bWF4X3ZjcHVzKQotICAgICAgICBudW1fY3B1 cyA9IGJfaW5mby0+bWF4X3ZjcHVzOwotCi0gICAgaWYgKGlzX2hhcmQpIHsKLSAgICAgICAgYl9p bmZvLT5udW1fdmNwdV9oYXJkX2FmZmluaXR5ID0gbnVtX2NwdXM7Ci0gICAgICAgIGJfaW5mby0+ dmNwdV9oYXJkX2FmZmluaXR5ID0geG1hbGxvYyhudW1fY3B1cyAqIHNpemVvZihsaWJ4bF9iaXRt YXApKTsKLSAgICAgICAgdmNwdV9hZmZpbml0eV9hcnJheSA9IGJfaW5mby0+dmNwdV9oYXJkX2Fm ZmluaXR5OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJfaW5mby0+bnVtX3ZjcHVfc29mdF9hZmZp bml0eSA9IG51bV9jcHVzOwotICAgICAgICBiX2luZm8tPnZjcHVfc29mdF9hZmZpbml0eSA9IHht YWxsb2MobnVtX2NwdXMgKiBzaXplb2YobGlieGxfYml0bWFwKSk7Ci0gICAgICAgIHZjcHVfYWZm aW5pdHlfYXJyYXkgPSBiX2luZm8tPnZjcHVfc29mdF9hZmZpbml0eTsKLSAgICB9Ci0KLSAgICBp ZiAoIWJ1ZikgewotICAgICAgICBpbnQgaiA9IDA7Ci0KLSAgICAgICAgd2hpbGUgKChidWYgPSB4 bHVfY2ZnX2dldF9saXN0aXRlbShjcHVzLCBqKSkgIT0gTlVMTCAmJiBqIDwgbnVtX2NwdXMpIHsK LSAgICAgICAgICAgIGxpYnhsX2JpdG1hcF9pbml0KCZ2Y3B1X2FmZmluaXR5X2FycmF5W2pdKTsK LSAgICAgICAgICAgIGlmIChsaWJ4bF9jcHVfYml0bWFwX2FsbG9jKGN0eCwgJnZjcHVfYWZmaW5p dHlfYXJyYXlbal0sIDApKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFi bGUgdG8gYWxsb2NhdGUgY3B1bWFwIGZvciB2Y3B1ICVkXG4iLCBqKTsKLSAgICAgICAgICAgICAg ICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChw YXJzZV9jcHVyYW5nZShidWYsICZ2Y3B1X2FmZmluaXR5X2FycmF5W2pdKSkKLSAgICAgICAgICAg ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0KLSAgICAgICAgICAgIGorKzsKLSAgICAgICAgfQot Ci0gICAgICAgIC8qIFdlIGhhdmUgYSBsaXN0IG9mIGNwdW1hcHMsIGRpc2FibGUgYXV0b21hdGlj IHBsYWNlbWVudCAqLwotICAgICAgICBsaWJ4bF9kZWZib29sX3NldCgmYl9pbmZvLT5udW1hX3Bs YWNlbWVudCwgZmFsc2UpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBpOwotCi0gICAgICAg IGxpYnhsX2JpdG1hcF9pbml0KCZ2Y3B1X2FmZmluaXR5X2FycmF5WzBdKTsKLSAgICAgICAgaWYg KGxpYnhsX2NwdV9iaXRtYXBfYWxsb2MoY3R4LCAmdmNwdV9hZmZpbml0eV9hcnJheVswXSwgMCkp IHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGNwdW1h cCBmb3IgdmNwdSAwXG4iKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAg ICAgfQotCi0gICAgICAgIGlmIChwYXJzZV9jcHVyYW5nZShidWYsICZ2Y3B1X2FmZmluaXR5X2Fy cmF5WzBdKSkKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLQotICAgICAgICBmb3Ig KGkgPSAxOyBpIDwgYl9pbmZvLT5tYXhfdmNwdXM7IGkrKykgewotICAgICAgICAgICAgbGlieGxf Yml0bWFwX2luaXQoJnZjcHVfYWZmaW5pdHlfYXJyYXlbaV0pOwotICAgICAgICAgICAgaWYgKGxp YnhsX2NwdV9iaXRtYXBfYWxsb2MoY3R4LCAmdmNwdV9hZmZpbml0eV9hcnJheVtpXSwgMCkpIHsK LSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBhbGxvY2F0ZSBjcHVt YXAgZm9yIHZjcHUgJWRcbiIsIGkpOwotICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJF KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpYnhsX2JpdG1hcF9jb3B5KGN0eCwgJnZj cHVfYWZmaW5pdHlfYXJyYXlbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmNw dV9hZmZpbml0eV9hcnJheVswXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBsaWJ4bF9kZWZib29s X3NldCgmYl9pbmZvLT5udW1hX3BsYWNlbWVudCwgZmFsc2UpOwotICAgIH0KLX0KLQotc3RhdGlj IHVuc2lnbmVkIGxvbmcgcGFyc2VfdWxvbmcoY29uc3QgY2hhciAqc3RyKQotewotICAgIGNoYXIg KmVuZHB0cjsKLSAgICB1bnNpZ25lZCBsb25nIHZhbDsKLQotICAgIHZhbCA9IHN0cnRvdWwoc3Ry LCAmZW5kcHRyLCAxMCk7Ci0gICAgaWYgKGVuZHB0ciA9PSBzdHIgfHwgdmFsID09IFVMT05HX01B WCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInhsOiBmYWlsZWQgdG8gY29udmVydCBcIiVz XCIgdG8gbnVtYmVyXG4iLCBzdHIpOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAg fQotICAgIHJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGxhY2Vfc3RyaW5nKGNoYXIg KipzdHIsIGNvbnN0IGNoYXIgKnZhbCkKLXsKLSAgICBmcmVlKCpzdHIpOwotICAgICpzdHIgPSB4 c3RyZHVwKHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQgbWF0Y2hfb3B0aW9uX3NpemUoY29uc3QgY2hh ciAqcHJlZml4LCBzaXplX3QgbGVuLAotICAgICAgICBjaGFyICphcmcsIGNoYXIgKiphcmdvcHQp Ci17Ci0gICAgaW50IHJjID0gc3RybmNtcChwcmVmaXgsIGFyZywgbGVuKTsKLSAgICBpZiAoIXJj KSAqYXJnb3B0ID0gYXJnK2xlbjsKLSAgICByZXR1cm4gIXJjOwotfQotI2RlZmluZSBNQVRDSF9P UFRJT04ocHJlZml4LCBhcmcsIG9wYXJnKSBcCi0gICAgbWF0Y2hfb3B0aW9uX3NpemUoKHByZWZp eCAiPSIpLCBzaXplb2YoKHByZWZpeCkpLCAoYXJnKSwgJihvcGFyZykpCi0KLS8qIFBhcnNlcyBu ZXR3b3JrIGRhdGEgYW5kIGFkZHMgaW5mbyBpbnRvIG5pYwotICogUmV0dXJucyAxIGlmIHRoZSBp bnB1dCB0b2tlbiBkb2VzIG5vdCBtYXRjaCBvbmUgb2YgdGhlIGtleXMKLSAqIG9yIHBhcnNlZCB2 YWx1ZXMgYXJlIG5vdCBjb3JyZWN0LiBTdWNjZXNzZnVsIHBhcnNlIHJldHVybnMgMCAqLwotc3Rh dGljIGludCBwYXJzZV9uaWNfY29uZmlnKGxpYnhsX2RldmljZV9uaWMgKm5pYywgWExVX0NvbmZp ZyAqKmNvbmZpZywgY2hhciAqdG9rZW4pCi17Ci0gICAgY2hhciAqZW5kcHRyLCAqb3Bhcmc7Ci0g ICAgaW50IGk7Ci0gICAgdW5zaWduZWQgaW50IHZhbDsKLQotICAgIGlmIChNQVRDSF9PUFRJT04o InR5cGUiLCB0b2tlbiwgb3BhcmcpKSB7Ci0gICAgICAgIGlmICghc3RyY21wKCJ2aWYiLCBvcGFy ZykpIHsKLSAgICAgICAgICAgIG5pYy0+bmljdHlwZSA9IExJQlhMX05JQ19UWVBFX1ZJRjsKLSAg ICAgICAgfSBlbHNlIGlmICghc3RyY21wKCJpb2VtdSIsIG9wYXJnKSkgewotICAgICAgICAgICAg bmljLT5uaWN0eXBlID0gTElCWExfTklDX1RZUEVfVklGX0lPRU1VOwotICAgICAgICB9IGVsc2Ug ewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHBhcmFtZXRlciBgdHlwZScu XG4iKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChN QVRDSF9PUFRJT04oIm1hYyIsIHRva2VuLCBvcGFyZykpIHsKLSAgICAgICAgZm9yIChpID0gMDsg aSA8IDY7IGkrKykgewotICAgICAgICAgICAgdmFsID0gc3RydG91bChvcGFyZywgJmVuZHB0ciwg MTYpOwotICAgICAgICAgICAgaWYgKChvcGFyZyA9PSBlbmRwdHIpIHx8ICh2YWwgPiAyNTUpKSB7 Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHBhcmFtZXRlciBgbWFj Jy5cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotICAgICAg ICAgICAgbmljLT5tYWNbaV0gPSB2YWw7Ci0gICAgICAgICAgICBvcGFyZyA9IGVuZHB0ciArIDE7 Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigiYnJpZGdlIiwgdG9rZW4s IG9wYXJnKSkgewotICAgICAgICByZXBsYWNlX3N0cmluZygmbmljLT5icmlkZ2UsIG9wYXJnKTsK LSAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigibmV0ZGV2IiwgdG9rZW4sIG9wYXJnKSkgewot ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRoZSBuZXRkZXYgcGFyYW1ldGVyIGlzIGRlcHJlY2F0 ZWQsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJwbGVhc2UgdXNlIGdhdGV3YXlkZXYgaW5z dGVhZFxuIik7Ci0gICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZuaWMtPmdhdGV3YXlkZXYsIG9wYXJn KTsKLSAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigiZ2F0ZXdheWRldiIsIHRva2VuLCBvcGFy ZykpIHsKLSAgICAgICAgcmVwbGFjZV9zdHJpbmcoJm5pYy0+Z2F0ZXdheWRldiwgb3BhcmcpOwot ICAgIH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9OKCJpcCIsIHRva2VuLCBvcGFyZykpIHsKLSAgICAg ICAgcmVwbGFjZV9zdHJpbmcoJm5pYy0+aXAsIG9wYXJnKTsKLSAgICB9IGVsc2UgaWYgKE1BVENI X09QVElPTigic2NyaXB0IiwgdG9rZW4sIG9wYXJnKSkgewotICAgICAgICByZXBsYWNlX3N0cmlu ZygmbmljLT5zY3JpcHQsIG9wYXJnKTsKLSAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigiYmFj a2VuZCIsIHRva2VuLCBvcGFyZykpIHsKLSAgICAgICAgcmVwbGFjZV9zdHJpbmcoJm5pYy0+YmFj a2VuZF9kb21uYW1lLCBvcGFyZyk7Ci0gICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oInZpZm5h bWUiLCB0b2tlbiwgb3BhcmcpKSB7Ci0gICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZuaWMtPmlmbmFt ZSwgb3BhcmcpOwotICAgIH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9OKCJtb2RlbCIsIHRva2VuLCBv cGFyZykpIHsKLSAgICAgICAgcmVwbGFjZV9zdHJpbmcoJm5pYy0+bW9kZWwsIG9wYXJnKTsKLSAg ICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigicmF0ZSIsIHRva2VuLCBvcGFyZykpIHsKLSAgICAg ICAgcGFyc2VfdmlmX3JhdGUoY29uZmlnLCBvcGFyZywgbmljKTsKLSAgICB9IGVsc2UgaWYgKE1B VENIX09QVElPTigiZm9yd2FyZGRldiIsIHRva2VuLCBvcGFyZykpIHsKLSAgICAgICAgcmVwbGFj ZV9zdHJpbmcoJm5pYy0+Y29sb2Z0X2ZvcndhcmRkZXYsIG9wYXJnKTsKLSAgICB9IGVsc2UgaWYg KE1BVENIX09QVElPTigiYWNjZWwiLCB0b2tlbiwgb3BhcmcpKSB7Ci0gICAgICAgIGZwcmludGYo c3RkZXJyLCAidGhlIGFjY2VsIHBhcmFtZXRlciBmb3IgdmlmcyBpcyBjdXJyZW50bHkgbm90IHN1 cHBvcnRlZFxuIik7Ci0gICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oImRldmlkIiwgdG9rZW4s IG9wYXJnKSkgewotICAgICAgICBuaWMtPmRldmlkID0gcGFyc2VfdWxvbmcob3BhcmcpOwotICAg IH0gZWxzZSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5yZWNvZ25pemVkIGFyZ3VtZW50 IGAlcydcbiIsIHRva2VuKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiAw OwotfQotCi1zdGF0aWMgdm9pZCBwYXJzZV92bnVtYV9jb25maWcoY29uc3QgWExVX0NvbmZpZyAq Y29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9idWls ZF9pbmZvICpiX2luZm8pCi17Ci0gICAgbGlieGxfcGh5c2luZm8gcGh5c2luZm87Ci0gICAgdWlu dDMyX3QgbnJfbm9kZXM7Ci0gICAgWExVX0NvbmZpZ0xpc3QgKnZudW1hOwotICAgIGludCBpLCBq LCBsZW4sIG51bV92bnVtYTsKLSAgICB1bnNpZ25lZCBsb25nIG1heF92Y3B1cyA9IDAsIG1heF9t ZW1rYiA9IDA7Ci0gICAgLyogVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIHBhcnNlZCB2Y3B1cyBpbmZv cm1hdGlvbiB0byBhdm9pZAotICAgICAqIHBhcnNpbmcgY29uZmlnIHR3aWNlLiBUaGlzIGFycmF5 IGhhcyBudW1fdm51bWEgZWxlbWVudHMuCi0gICAgICovCi0gICAgbGlieGxfYml0bWFwICp2Y3B1 X3BhcnNlZDsKLQotICAgIGxpYnhsX3BoeXNpbmZvX2luaXQoJnBoeXNpbmZvKTsKLSAgICBpZiAo bGlieGxfZ2V0X3BoeXNpbmZvKGN0eCwgJnBoeXNpbmZvKSAhPSAwKSB7Ci0gICAgICAgIGxpYnhs X3BoeXNpbmZvX2Rpc3Bvc2UoJnBoeXNpbmZvKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJs aWJ4bF9nZXRfcGh5c2luZm8gZmFpbGVkXG4iKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUp OwotICAgIH0KLQotICAgIG5yX25vZGVzID0gcGh5c2luZm8ubnJfbm9kZXM7Ci0gICAgbGlieGxf cGh5c2luZm9fZGlzcG9zZSgmcGh5c2luZm8pOwotCi0gICAgaWYgKHhsdV9jZmdfZ2V0X2xpc3Qo Y29uZmlnLCAidm51bWEiLCAmdm51bWEsICZudW1fdm51bWEsIDEpKQotICAgICAgICByZXR1cm47 Ci0KLSAgICBpZiAoIW51bV92bnVtYSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYl9pbmZvLT5u dW1fdm51bWFfbm9kZXMgPSBudW1fdm51bWE7Ci0gICAgYl9pbmZvLT52bnVtYV9ub2RlcyA9IHhj YWxsb2MobnVtX3ZudW1hLCBzaXplb2YobGlieGxfdm5vZGVfaW5mbykpOwotICAgIHZjcHVfcGFy c2VkID0geGNhbGxvYyhudW1fdm51bWEsIHNpemVvZihsaWJ4bF9iaXRtYXApKTsKLSAgICBmb3Ig KGkgPSAwOyBpIDwgbnVtX3ZudW1hOyBpKyspIHsKLSAgICAgICAgbGlieGxfYml0bWFwX2luaXQo JnZjcHVfcGFyc2VkW2ldKTsKLSAgICAgICAgaWYgKGxpYnhsX2NwdV9iaXRtYXBfYWxsb2MoY3R4 LCAmdmNwdV9wYXJzZWRbaV0sIGJfaW5mby0+bWF4X3ZjcHVzKSkgewotICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJsaWJ4bF9ub2RlX2JpdG1hcF9hbGxvYyBmYWlsZWQuXG4iKTsKLSAgICAg ICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAo aSA9IDA7IGkgPCBiX2luZm8tPm51bV92bnVtYV9ub2RlczsgaSsrKSB7Ci0gICAgICAgIGxpYnhs X3Zub2RlX2luZm8gKnAgPSAmYl9pbmZvLT52bnVtYV9ub2Rlc1tpXTsKLQotICAgICAgICBsaWJ4 bF92bm9kZV9pbmZvX2luaXQocCk7Ci0gICAgICAgIHAtPmRpc3RhbmNlcyA9IHhjYWxsb2MoYl9p bmZvLT5udW1fdm51bWFfbm9kZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mKCpwLT5kaXN0YW5jZXMpKTsKLSAgICAgICAgcC0+bnVtX2Rpc3RhbmNlcyA9IGJfaW5mby0+ bnVtX3ZudW1hX25vZGVzOwotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdm51bWE7 IGkrKykgewotICAgICAgICBYTFVfQ29uZmlnVmFsdWUgKnZub2RlX3NwZWMsICpjb25mX29wdGlv bjsKLSAgICAgICAgWExVX0NvbmZpZ0xpc3QgKnZub2RlX2NvbmZpZ19saXN0OwotICAgICAgICBp bnQgY29uZl9jb3VudDsKLSAgICAgICAgbGlieGxfdm5vZGVfaW5mbyAqcCA9ICZiX2luZm8tPnZu dW1hX25vZGVzW2ldOwotCi0gICAgICAgIHZub2RlX3NwZWMgPSB4bHVfY2ZnX2dldF9saXN0aXRl bTIodm51bWEsIGkpOwotICAgICAgICBhc3NlcnQodm5vZGVfc3BlYyk7Ci0KLSAgICAgICAgeGx1 X2NmZ192YWx1ZV9nZXRfbGlzdChjb25maWcsIHZub2RlX3NwZWMsICZ2bm9kZV9jb25maWdfbGlz dCwgMCk7Ci0gICAgICAgIGlmICghdm5vZGVfY29uZmlnX2xpc3QpIHsKLSAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAieGw6IGNhbm5vdCBnZXQgdm5vZGUgY29uZmlnIG9wdGlvbiBsaXN0XG4i KTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotCi0gICAgICAg IGZvciAoY29uZl9jb3VudCA9IDA7Ci0gICAgICAgICAgICAgKGNvbmZfb3B0aW9uID0KLSAgICAg ICAgICAgICAgeGx1X2NmZ19nZXRfbGlzdGl0ZW0yKHZub2RlX2NvbmZpZ19saXN0LCBjb25mX2Nv dW50KSk7Ci0gICAgICAgICAgICAgY29uZl9jb3VudCsrKSB7Ci0KLSAgICAgICAgICAgIGlmICh4 bHVfY2ZnX3ZhbHVlX3R5cGUoY29uZl9vcHRpb24pID09IFhMVV9TVFJJTkcpIHsKLSAgICAgICAg ICAgICAgICBjaGFyICpidWYsICpvcHRpb25fdW50cmltbWVkLCAqdmFsdWVfdW50cmltbWVkOwot ICAgICAgICAgICAgICAgIGNoYXIgKm9wdGlvbiwgKnZhbHVlOwotICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgdmFsOwotCi0gICAgICAgICAgICAgICAgeGx1X2NmZ192YWx1ZV9nZXRfc3Ry aW5nKGNvbmZpZywgY29uZl9vcHRpb24sICZidWYsIDApOwotCi0gICAgICAgICAgICAgICAgaWYg KCFidWYpIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKHNwbGl0X3N0cmluZ19pbnRv X3BhaXIoYnVmLCAiPSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJm9wdGlvbl91bnRyaW1tZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnZhbHVlX3VudHJpbW1lZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJ4bDogZmFpbGVkIHRvIHNwbGl0IFwiJXNcIiBpbnRvIHBhaXJcbiIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgZXhpdChF WElUX0ZBSUxVUkUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0cmltKGlz c3BhY2UsIG9wdGlvbl91bnRyaW1tZWQsICZvcHRpb24pOwotICAgICAgICAgICAgICAgIHRyaW0o aXNzcGFjZSwgdmFsdWVfdW50cmltbWVkLCAmdmFsdWUpOwotCi0gICAgICAgICAgICAgICAgaWYg KCFzdHJjbXAoInBub2RlIiwgb3B0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICB2YWwgPSBw YXJzZV91bG9uZyh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPj0gbnJfbm9k ZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAieGw6IGludmFsaWQgcG5vZGUgbnVtYmVyOiAlbHVcbiIs IHZhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcC0+cG5vZGUgPSB2YWw7Ci0g ICAgICAgICAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZiX2luZm8tPm51bWFfcGxhY2Vt ZW50LCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKCJzaXplIiwg b3B0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICB2YWwgPSBwYXJzZV91bG9uZyh2YWx1ZSk7 Ci0gICAgICAgICAgICAgICAgICAgIHAtPm1lbWtiID0gdmFsIDw8IDEwOwotICAgICAgICAgICAg ICAgICAgICBtYXhfbWVta2IgKz0gcC0+bWVta2I7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm ICghc3RyY21wKCJ2Y3B1cyIsIG9wdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgbGlieGxf c3RyaW5nX2xpc3QgY3B1X3NwZWNfbGlzdDsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg bG9uZyBzLCBlOwotCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0X3N0cmluZ19pbnRvX3N0cmlu Z19saXN0KHZhbHVlLCAiLCIsICZjcHVfc3BlY19saXN0KTsKLSAgICAgICAgICAgICAgICAgICAg bGVuID0gbGlieGxfc3RyaW5nX2xpc3RfbGVuZ3RoKCZjcHVfc3BlY19saXN0KTsKLQotICAgICAg ICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLSAgICAgICAgICAgICAg ICAgICAgICAgIHBhcnNlX3JhbmdlKGNwdV9zcGVjX2xpc3Rbal0sICZzLCAmZSk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBmb3IgKDsgcyA8PSBlOyBzKyspIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5vdGUgdGhhdCBp ZiB3ZSB0cnkgdG8gc2V0IGEgYml0IGJleW9uZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqIHRoZSBzaXplIG9mIGJpdG1hcCwgbGlieGxfYml0bWFwX3NldAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqIGhhcyBubyBlZmZlY3QuIFRoZSByZXN1bHRlZCBiaXRtYXAKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKiBkb2Vzbid0IHJlZmxlY3Qgd2hhdCB1c2VyIHdhbnRz LiBUaGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmYWxsb3V0IGlzIGRlYWx0IHdp dGggbGF0ZXIgYWZ0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwYXJzaW5nLgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2JpdG1hcF9zZXQoJnZjcHVfcGFyc2VkW2ldLCBzKTsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtYXhfdmNwdXMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0cmluZ19s aXN0X2Rpc3Bvc2UoJmNwdV9zcGVjX2xpc3QpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo IXN0cmNtcCgidmRpc3RhbmNlcyIsIG9wdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgbGli eGxfc3RyaW5nX2xpc3QgdmRpc3Q7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3BsaXRfc3RyaW5n X2ludG9fc3RyaW5nX2xpc3QodmFsdWUsICIsIiwgJnZkaXN0KTsKLSAgICAgICAgICAgICAgICAg ICAgbGVuID0gbGlieGxfc3RyaW5nX2xpc3RfbGVuZ3RoKCZ2ZGlzdCk7Ci0KLSAgICAgICAgICAg ICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICB2YWwgPSBwYXJzZV91bG9uZyh2ZGlzdFtqXSk7Ci0gICAgICAgICAgICAgICAgICAgICAg ICBwLT5kaXN0YW5jZXNbal0gPSB2YWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgbGlieGxfc3RyaW5nX2xpc3RfZGlzcG9zZSgmdmRpc3QpOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcmVlKG9wdGlvbik7Ci0gICAgICAgICAgICAgICAg ZnJlZSh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZnJlZShvcHRpb25fdW50cmltbWVkKTsKLSAg ICAgICAgICAgICAgICBmcmVlKHZhbHVlX3VudHJpbW1lZCk7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgIH0KLSAgICB9Ci0KLSAgICAvKiBVc2VyIGhhcyBzcGVjaWZpZWQgbWF4dmNwdXM9ICovCi0g ICAgaWYgKGJfaW5mby0+bWF4X3ZjcHVzICE9IDApIHsKLSAgICAgICAgaWYgKGJfaW5mby0+bWF4 X3ZjcHVzICE9IG1heF92Y3B1cykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ4bDog dm51bWEgdmNwdXMgYW5kIG1heHZjcHVzPSBtaXNtYXRjaFxuIik7Ci0gICAgICAgICAgICBleGl0 KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpbnQgaG9z dF9jcHVzID0gbGlieGxfZ2V0X29ubGluZV9jcHVzKGN0eCk7Ci0KLSAgICAgICAgaWYgKGhvc3Rf Y3B1cyA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGdldCBv bmxpbmUgY3B1c1xuIik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAg IH0KLQotICAgICAgICBpZiAoaG9zdF9jcHVzIDwgbWF4X3ZjcHVzKSB7Ci0gICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgInhsOiB2bnVtYSBzcGVjaWZpZXMgbW9yZSB2Y3B1cyB0aGFuIHBjcHVz LCAiXAotICAgICAgICAgICAgICAgICAgICAidXNlIG1heHZjcHVzPSB0byBvdmVycmlkZSB0aGlz IGNoZWNrLlxuIik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0K LQotICAgICAgICBiX2luZm8tPm1heF92Y3B1cyA9IG1heF92Y3B1czsKLSAgICB9Ci0KLSAgICAv KiBVc2VyIGhhcyBzcGVjaWZpZWQgbWF4bWVtPSAqLwotICAgIGlmIChiX2luZm8tPm1heF9tZW1r YiAhPSBMSUJYTF9NRU1LQl9ERUZBVUxUICYmCi0gICAgICAgIGJfaW5mby0+bWF4X21lbWtiICE9 IG1heF9tZW1rYikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInhsOiBtYXhtZW0gYW5kIHZu dW1hIG1lbW9yeSBzaXplIG1pc21hdGNoXG4iKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUp OwotICAgIH0gZWxzZQotICAgICAgICBiX2luZm8tPm1heF9tZW1rYiA9IG1heF9tZW1rYjsKLQot ICAgIGZvciAoaSA9IDA7IGkgPCBiX2luZm8tPm51bV92bnVtYV9ub2RlczsgaSsrKSB7Ci0gICAg ICAgIGxpYnhsX3Zub2RlX2luZm8gKnAgPSAmYl9pbmZvLT52bnVtYV9ub2Rlc1tpXTsKLQotICAg ICAgICBsaWJ4bF9iaXRtYXBfY29weV9hbGxvYyhjdHgsICZwLT52Y3B1cywgJnZjcHVfcGFyc2Vk W2ldKTsKLSAgICAgICAgbGlieGxfYml0bWFwX2Rpc3Bvc2UoJnZjcHVfcGFyc2VkW2ldKTsKLSAg ICB9Ci0KLSAgICBmcmVlKHZjcHVfcGFyc2VkKTsKLX0KLQotLyogUGFyc2VzIHVzYmN0cmwgZGF0 YSBhbmQgYWRkcyBpbmZvIGludG8gdXNiY3RybAotICogUmV0dXJucyAxIGlmIHRoZSBpbnB1dCB0 b2tlbiBkb2VzIG5vdCBtYXRjaCBvbmUgb2YgdGhlIGtleXMKLSAqIG9yIHBhcnNlZCB2YWx1ZXMg YXJlIG5vdCBjb3JyZWN0LiBTdWNjZXNzZnVsIHBhcnNlIHJldHVybnMgMCAqLwotc3RhdGljIGlu dCBwYXJzZV91c2JjdHJsX2NvbmZpZyhsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwgY2hh ciAqdG9rZW4pCi17Ci0gICAgY2hhciAqb3Bhcmc7Ci0KLSAgICBpZiAoTUFUQ0hfT1BUSU9OKCJ0 eXBlIiwgdG9rZW4sIG9wYXJnKSkgewotICAgICAgICBpZiAobGlieGxfdXNiY3RybF90eXBlX2Zy b21fc3RyaW5nKG9wYXJnLCAmdXNiY3RybC0+dHlwZSkpIHsKLSAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAiSW52YWxpZCB1c2IgY29udHJvbGxlciB0eXBlICclcydcbiIsIG9wYXJnKTsKLSAg ICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJ T04oInZlcnNpb24iLCB0b2tlbiwgb3BhcmcpKSB7Ci0gICAgICAgIHVzYmN0cmwtPnZlcnNpb24g PSBhdG9pKG9wYXJnKTsKLSAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigicG9ydHMiLCB0b2tl biwgb3BhcmcpKSB7Ci0gICAgICAgIHVzYmN0cmwtPnBvcnRzID0gYXRvaShvcGFyZyk7Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIHN0cmluZyBgJXMnIGlu IHVzYmN0cmwgc3BlY1xuIiwgdG9rZW4pOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAg ICByZXR1cm4gMDsKLX0KLQotLyogUGFyc2VzIHVzYmRldiBkYXRhIGFuZCBhZGRzIGluZm8gaW50 byB1c2JkZXYKLSAqIFJldHVybnMgMSBpZiB0aGUgaW5wdXQgdG9rZW4gZG9lcyBub3QgbWF0Y2gg b25lIG9mIHRoZSBrZXlzCi0gKiBvciBwYXJzZWQgdmFsdWVzIGFyZSBub3QgY29ycmVjdC4gU3Vj Y2Vzc2Z1bCBwYXJzZSByZXR1cm5zIDAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfdXNiZGV2X2NvbmZp ZyhsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXYsIGNoYXIgKnRva2VuKQotewotICAgIGNoYXIg Km9wYXJnOwotCi0gICAgaWYgKE1BVENIX09QVElPTigidHlwZSIsIHRva2VuLCBvcGFyZykpIHsK LSAgICAgICAgaWYgKGxpYnhsX3VzYmRldl90eXBlX2Zyb21fc3RyaW5nKG9wYXJnLCAmdXNiZGV2 LT50eXBlKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHVzYiBkZXZp Y2UgdHlwZTogJXNcbiIsIG9wdGFyZyk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAg fQotICAgIH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9OKCJob3N0YnVzIiwgdG9rZW4sIG9wYXJnKSkg ewotICAgICAgICB1c2JkZXYtPnUuaG9zdGRldi5ob3N0YnVzID0gc3RydG91bChvcGFyZywgTlVM TCwgMCk7Ci0gICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oImhvc3RhZGRyIiwgdG9rZW4sIG9w YXJnKSkgewotICAgICAgICB1c2JkZXYtPnUuaG9zdGRldi5ob3N0YWRkciA9IHN0cnRvdWwob3Bh cmcsIE5VTEwsIDApOwotICAgIH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9OKCJjb250cm9sbGVyIiwg dG9rZW4sIG9wYXJnKSkgewotICAgICAgICB1c2JkZXYtPmN0cmwgPSBhdG9pKG9wYXJnKTsKLSAg ICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigicG9ydCIsIHRva2VuLCBvcGFyZykpIHsKLSAgICAg ICAgdXNiZGV2LT5wb3J0ID0gYXRvaShvcGFyZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnBy aW50ZihzdGRlcnIsICJVbmtub3duIHN0cmluZyBgJXMnIGluIHVzYmRldiBzcGVjXG4iLCB0b2tl bik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0 aWMgdm9pZCBwYXJzZV9jb25maWdfZGF0YShjb25zdCBjaGFyICpjb25maWdfc291cmNlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29uZmlnX2RhdGEsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29uZmlnX2xlbiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmlnKQotewotICAgIGNv bnN0IGNoYXIgKmJ1ZjsKLSAgICBsb25nIGwsIHZjcHVzID0gMDsKLSAgICBYTFVfQ29uZmlnICpj b25maWc7Ci0gICAgWExVX0NvbmZpZ0xpc3QgKmNwdXMsICp2YmRzLCAqbmljcywgKnBjaXMsICpj dmZicywgKmNwdWlkcywgKnZ0cG1zLAotICAgICAgICAgICAgICAgICAgICp1c2JjdHJscywgKnVz YmRldnM7Ci0gICAgWExVX0NvbmZpZ0xpc3QgKmNoYW5uZWxzLCAqaW9wb3J0cywgKmlycXMsICpp b21lbSwgKnZpcmlkaWFuLCAqZHRkZXZzOwotICAgIGludCBudW1faW9wb3J0cywgbnVtX2lycXMs IG51bV9pb21lbSwgbnVtX2NwdXMsIG51bV92aXJpZGlhbjsKLSAgICBpbnQgcGNpX3Bvd2VyX21n bXQgPSAwOwotICAgIGludCBwY2lfbXNpdHJhbnNsYXRlID0gMDsKLSAgICBpbnQgcGNpX3Blcm1p c3NpdmUgPSAwOwotICAgIGludCBwY2lfc2VpemUgPSAwOwotICAgIGludCBpLCBlOwotICAgIGNo YXIgKmtlcm5lbF9iYXNlbmFtZTsKLQotICAgIGxpYnhsX2RvbWFpbl9jcmVhdGVfaW5mbyAqY19p bmZvID0gJmRfY29uZmlnLT5jX2luZm87Ci0gICAgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmJf aW5mbyA9ICZkX2NvbmZpZy0+Yl9pbmZvOwotCi0gICAgY29uZmlnPSB4bHVfY2ZnX2luaXQoc3Rk ZXJyLCBjb25maWdfc291cmNlKTsKLSAgICBpZiAoIWNvbmZpZykgewotICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIkZhaWxlZCB0byBhbGxvY2F0ZSBmb3IgY29uZmlndXJhdGlvblxuIik7Ci0gICAg ICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgZT0geGx1X2NmZ19yZWFkZGF0YShjb25maWcsIGNv bmZpZ19kYXRhLCBjb25maWdfbGVuKTsKLSAgICBpZiAoZSkgewotICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIkZhaWxlZCB0byBwYXJzZSBjb25maWc6ICVzXG4iLCBzdHJlcnJvcihlKSk7Ci0gICAg ICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZp ZywgImluaXRfc2VjbGFiZWwiLCAmYnVmLCAwKSkKLSAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0 cmluZyhjb25maWcsICJpbml0X3NlY2xhYmVsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmY19pbmZvLT5zc2lkX2xhYmVsLCAwKTsKLQotICAgIGlmICgheGx1X2NmZ19nZXRfc3Ry aW5nIChjb25maWcsICJzZWNsYWJlbCIsICZidWYsIDApKSB7Ci0gICAgICAgIGlmIChjX2luZm8t PnNzaWRfbGFiZWwpCi0gICAgICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nKGNvbmZpZywg InNlY2xhYmVsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+ ZXhlY19zc2lkX2xhYmVsLCAwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgeGx1X2NmZ19y ZXBsYWNlX3N0cmluZyhjb25maWcsICJzZWNsYWJlbCIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZjX2luZm8tPnNzaWRfbGFiZWwsIDApOwotICAgIH0KLQotICAgIGxpYnhs X2RlZmJvb2xfc2V0KCZjX2luZm8tPnJ1bl9ob3RwbHVnX3NjcmlwdHMsIHJ1bl9ob3RwbHVnX3Nj cmlwdHMpOwotICAgIGNfaW5mby0+dHlwZSA9IExJQlhMX0RPTUFJTl9UWVBFX1BWOwotICAgIGlm ICgheGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJidWlsZGVyIiwgJmJ1ZiwgMCkgJiYKLSAg ICAgICAgIXN0cm5jbXAoYnVmLCAiaHZtIiwgc3RybGVuKGJ1ZikpKQotICAgICAgICBjX2luZm8t PnR5cGUgPSBMSUJYTF9ET01BSU5fVFlQRV9IVk07Ci0KLSAgICB4bHVfY2ZnX2dldF9kZWZib29s KGNvbmZpZywgInB2aCIsICZjX2luZm8tPnB2aCwgMCk7Ci0gICAgeGx1X2NmZ19nZXRfZGVmYm9v bChjb25maWcsICJoYXAiLCAmY19pbmZvLT5oYXAsIDApOwotCi0gICAgaWYgKHhsdV9jZmdfcmVw bGFjZV9zdHJpbmcgKGNvbmZpZywgIm5hbWUiLCAmY19pbmZvLT5uYW1lLCAwKSkgewotICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIkRvbWFpbiBuYW1lIG11c3QgYmUgc3BlY2lmaWVkLlxuIik7Ci0g ICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcgKGNv bmZpZywgInV1aWQiLCAmYnVmLCAwKSApIHsKLSAgICAgICAgaWYgKCBsaWJ4bF91dWlkX2Zyb21f c3RyaW5nKCZjX2luZm8tPnV1aWQsIGJ1ZikgKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIkZhaWxlZCB0byBwYXJzZSBVVUlEOiAlc1xuIiwgYnVmKTsKLSAgICAgICAgICAgIGV4aXQo MSk7Ci0gICAgICAgIH0KLSAgICB9ZWxzZXsKLSAgICAgICAgbGlieGxfdXVpZF9nZW5lcmF0ZSgm Y19pbmZvLT51dWlkKTsKLSAgICB9Ci0KLSAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywg Im9vcyIsICZjX2luZm8tPm9vcywgMCk7Ci0KLSAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyAo Y29uZmlnLCAicG9vbCIsICZidWYsIDApKQotICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5n KGNvbmZpZywgInBvb2wiLCAmY19pbmZvLT5wb29sX25hbWUsIDApOwotCi0gICAgbGlieGxfZG9t YWluX2J1aWxkX2luZm9faW5pdF90eXBlKGJfaW5mbywgY19pbmZvLT50eXBlKTsKLSAgICBpZiAo YmxrZGV2X3N0YXJ0KQotICAgICAgICBiX2luZm8tPmJsa2Rldl9zdGFydCA9IHN0cmR1cChibGtk ZXZfc3RhcnQpOwotCi0gICAgLyogdGhlIGZvbGxvd2luZyBpcyB0aGUgYWN0dWFsIGNvbmZpZyBw YXJzaW5nIHdpdGggb3ZlcnJpZGluZwotICAgICAqIHZhbHVlcyBpbiB0aGUgc3RydWN0dXJlcyAq LwotICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAiY3B1X3dlaWdodCIsICZsLCAw KSkKLSAgICAgICAgYl9pbmZvLT5zY2hlZF9wYXJhbXMud2VpZ2h0ID0gbDsKLSAgICBpZiAoIXhs dV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywgImNhcCIsICZsLCAwKSkKLSAgICAgICAgYl9pbmZvLT5z Y2hlZF9wYXJhbXMuY2FwID0gbDsKLSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywg InBlcmlvZCIsICZsLCAwKSkKLSAgICAgICAgYl9pbmZvLT5zY2hlZF9wYXJhbXMucGVyaW9kID0g bDsKLSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywgInNsaWNlIiwgJmwsIDApKQot ICAgICAgICBiX2luZm8tPnNjaGVkX3BhcmFtcy5zbGljZSA9IGw7Ci0gICAgaWYgKCF4bHVfY2Zn X2dldF9sb25nIChjb25maWcsICJsYXRlbmN5IiwgJmwsIDApKQotICAgICAgICBiX2luZm8tPnNj aGVkX3BhcmFtcy5sYXRlbmN5ID0gbDsKLSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZp ZywgImV4dHJhdGltZSIsICZsLCAwKSkKLSAgICAgICAgYl9pbmZvLT5zY2hlZF9wYXJhbXMuZXh0 cmF0aW1lID0gbDsKLQotICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAibWVtb3J5 IiwgJmwsIDApKQotICAgICAgICBiX2luZm8tPnRhcmdldF9tZW1rYiA9IGwgKiAxMDI0OwotCi0g ICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJtYXhtZW0iLCAmbCwgMCkpCi0gICAg ICAgIGJfaW5mby0+bWF4X21lbWtiID0gbCAqIDEwMjQ7Ci0KLSAgICBpZiAoIXhsdV9jZmdfZ2V0 X2xvbmcgKGNvbmZpZywgInZjcHVzIiwgJmwsIDApKSB7Ci0gICAgICAgIHZjcHVzID0gbDsKLSAg ICAgICAgaWYgKGxpYnhsX2NwdV9iaXRtYXBfYWxsb2MoY3R4LCAmYl9pbmZvLT5hdmFpbF92Y3B1 cywgbCkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGFsbG9jYXRl IGNwdW1hcFxuIik7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgICAgIGxp YnhsX2JpdG1hcF9zZXRfbm9uZSgmYl9pbmZvLT5hdmFpbF92Y3B1cyk7Ci0gICAgICAgIHdoaWxl IChsLS0gPiAwKQotICAgICAgICAgICAgbGlieGxfYml0bWFwX3NldCgoJmJfaW5mby0+YXZhaWxf dmNwdXMpLCBsKTsKLSAgICB9Ci0KLSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywg Im1heHZjcHVzIiwgJmwsIDApKQotICAgICAgICBiX2luZm8tPm1heF92Y3B1cyA9IGw7Ci0KLSAg ICBwYXJzZV92bnVtYV9jb25maWcoY29uZmlnLCBiX2luZm8pOwotCi0gICAgLyogU2V0IG1heF9t ZW1rYiB0byB0YXJnZXRfbWVta2IgYW5kIG1heF92Y3B1cyB0byBhdmFpbF92Y3B1cyBpZgotICAg ICAqIHRoZXkgYXJlIG5vdCBzZXQgYnkgdXNlciBzcGVjaWZpZWQgY29uZmlnIG9wdGlvbiBvciB2 bnVtYS4KLSAgICAgKi8KLSAgICBpZiAoYl9pbmZvLT5tYXhfbWVta2IgPT0gTElCWExfTUVNS0Jf REVGQVVMVCkKLSAgICAgICAgYl9pbmZvLT5tYXhfbWVta2IgPSBiX2luZm8tPnRhcmdldF9tZW1r YjsKLSAgICBpZiAoYl9pbmZvLT5tYXhfdmNwdXMgPT0gMCkKLSAgICAgICAgYl9pbmZvLT5tYXhf dmNwdXMgPSB2Y3B1czsKLQotICAgIGlmIChiX2luZm8tPm1heF92Y3B1cyA8IHZjcHVzKSB7Ci0g ICAgICAgIGZwcmludGYoc3RkZXJyLCAieGw6IG1heHZjcHVzIDwgdmNwdXNcbiIpOwotICAgICAg ICBleGl0KDEpOwotICAgIH0KLQotICAgIGJ1ZiA9IE5VTEw7Ci0gICAgaWYgKCF4bHVfY2ZnX2dl dF9saXN0IChjb25maWcsICJjcHVzIiwgJmNwdXMsICZudW1fY3B1cywgMSkgfHwKLSAgICAgICAg IXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAiY3B1cyIsICZidWYsIDApKQotICAgICAgICBw YXJzZV92Y3B1X2FmZmluaXR5KGJfaW5mbywgY3B1cywgYnVmLCBudW1fY3B1cywgLyogaXNfaGFy ZCAqLyB0cnVlKTsKLQotICAgIGJ1ZiA9IE5VTEw7Ci0gICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0 IChjb25maWcsICJjcHVzX3NvZnQiLCAmY3B1cywgJm51bV9jcHVzLCAxKSB8fAotICAgICAgICAh eGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJjcHVzX3NvZnQiLCAmYnVmLCAwKSkKLSAgICAg ICAgcGFyc2VfdmNwdV9hZmZpbml0eShiX2luZm8sIGNwdXMsIGJ1ZiwgbnVtX2NwdXMsIGZhbHNl KTsKLQotICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZiX2luZm8tPmNsYWltX21vZGUsIGNsYWltX21v ZGUpOwotCi0gICAgaWYgKHhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAib25fcG93ZXJvZmYi LCAmYnVmLCAwKSkKLSAgICAgICAgYnVmID0gImRlc3Ryb3kiOwotICAgIGlmICghcGFyc2VfYWN0 aW9uX29uX3NodXRkb3duKGJ1ZiwgJmRfY29uZmlnLT5vbl9wb3dlcm9mZikpIHsKLSAgICAgICAg ZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9uX3Bvd2Vyb2ZmIGFjdGlvbiBcIiVzXCIgc3BlY2lm aWVkXG4iLCBidWYpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIGlmICh4bHVfY2Zn X2dldF9zdHJpbmcgKGNvbmZpZywgIm9uX3JlYm9vdCIsICZidWYsIDApKQotICAgICAgICBidWYg PSAicmVzdGFydCI7Ci0gICAgaWYgKCFwYXJzZV9hY3Rpb25fb25fc2h1dGRvd24oYnVmLCAmZF9j b25maWctPm9uX3JlYm9vdCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9u X3JlYm9vdCBhY3Rpb24gXCIlc1wiIHNwZWNpZmllZFxuIiwgYnVmKTsKLSAgICAgICAgZXhpdCgx KTsKLSAgICB9Ci0KLSAgICBpZiAoeGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJvbl93YXRj aGRvZyIsICZidWYsIDApKQotICAgICAgICBidWYgPSAiZGVzdHJveSI7Ci0gICAgaWYgKCFwYXJz ZV9hY3Rpb25fb25fc2h1dGRvd24oYnVmLCAmZF9jb25maWctPm9uX3dhdGNoZG9nKSkgewotICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb25fd2F0Y2hkb2cgYWN0aW9uIFwiJXNcIiBz cGVjaWZpZWRcbiIsIGJ1Zik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0KLSAgICBpZiAo eGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJvbl9jcmFzaCIsICZidWYsIDApKQotICAgICAg ICBidWYgPSAiZGVzdHJveSI7Ci0gICAgaWYgKCFwYXJzZV9hY3Rpb25fb25fc2h1dGRvd24oYnVm LCAmZF9jb25maWctPm9uX2NyYXNoKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25v d24gb25fY3Jhc2ggYWN0aW9uIFwiJXNcIiBzcGVjaWZpZWRcbiIsIGJ1Zik7Ci0gICAgICAgIGV4 aXQoMSk7Ci0gICAgfQotCi0gICAgaWYgKHhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAib25f c29mdF9yZXNldCIsICZidWYsIDApKQotICAgICAgICBidWYgPSAic29mdC1yZXNldCI7Ci0gICAg aWYgKCFwYXJzZV9hY3Rpb25fb25fc2h1dGRvd24oYnVmLCAmZF9jb25maWctPm9uX3NvZnRfcmVz ZXQpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvbl9zb2Z0X3Jlc2V0IGFj dGlvbiBcIiVzXCIgc3BlY2lmaWVkXG4iLCBidWYpOwotICAgICAgICBleGl0KDEpOwotICAgIH0K LQotICAgIC8qIGxpYnhsX2dldF9yZXF1aXJlZF9zaGFkb3dfbWVtb3J5KCkgbXVzdCBiZSBjYWxs ZWQgYWZ0ZXIgZmluYWwgdmFsdWVzCi0gICAgICogKGRlZmF1bHQgb3Igc3BlY2lmaWVkKSBmb3Ig dmNwdXMgYW5kIG1lbW9yeSBhcmUgc2V0LCBiZWNhdXNlIHRoZQotICAgICAqIGNhbGN1bGF0aW9u IGRlcGVuZHMgb24gdGhvc2UgdmFsdWVzLiAqLwotICAgIGJfaW5mby0+c2hhZG93X21lbWtiID0g IXhsdV9jZmdfZ2V0X2xvbmcoY29uZmlnLCAic2hhZG93X21lbW9yeSIsICZsLCAwKQotICAgICAg ICA/IGwgKiAxMDI0Ci0gICAgICAgIDogbGlieGxfZ2V0X3JlcXVpcmVkX3NoYWRvd19tZW1vcnko Yl9pbmZvLT5tYXhfbWVta2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYl9pbmZvLT5tYXhfdmNwdXMpOwotCi0gICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25m aWcsICJub21pZ3JhdGUiLCAmYl9pbmZvLT5kaXNhYmxlX21pZ3JhdGUsIDApOwotCi0gICAgaWYg KCF4bHVfY2ZnX2dldF9sb25nKGNvbmZpZywgInRzY19tb2RlIiwgJmwsIDEpKSB7Ci0gICAgICAg IGNvbnN0IGNoYXIgKnMgPSBsaWJ4bF90c2NfbW9kZV90b19zdHJpbmcobCk7Ci0gICAgICAgIGZw cmludGYoc3RkZXJyLCAiV0FSTklORzogc3BlY2lmeWluZyBcInRzY19tb2RlXCIgYXMgYW4gaW50 ZWdlciBpcyBkZXByZWNhdGVkLiAiCi0gICAgICAgICAgICAgICAgIlBsZWFzZSB1c2UgdGhlIG5h bWVkIHBhcmFtZXRlciB2YXJpYW50LiAlcyVzJXNcbiIsCi0gICAgICAgICAgICAgICAgcyA/ICJl LmcuIHRzY19tb2RlPVwiIiA6ICIiLAotICAgICAgICAgICAgICAgIHMgPyBzIDogIiIsCi0gICAg ICAgICAgICAgICAgcyA/ICJcIiIgOiAiIik7Ci0KLSAgICAgICAgaWYgKGwgPCBMSUJYTF9UU0Nf TU9ERV9ERUZBVUxUIHx8Ci0gICAgICAgICAgICBsID4gTElCWExfVFNDX01PREVfTkFUSVZFX1BB UkFWSVJUKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBpbnZhbGlkIHZh bHVlICVsZCBmb3IgXCJ0c2NfbW9kZVwiXG4iLCBsKTsKLSAgICAgICAgICAgIGV4aXQgKDEpOwot ICAgICAgICB9Ci0gICAgICAgIGJfaW5mby0+dHNjX21vZGUgPSBsOwotICAgIH0gZWxzZSBpZiAo IXhsdV9jZmdfZ2V0X3N0cmluZyhjb25maWcsICJ0c2NfbW9kZSIsICZidWYsIDApKSB7Ci0gICAg ICAgIGZwcmludGYoc3RkZXJyLCAiZ290IGEgdHNjIG1vZGUgc3RyaW5nOiBcIiVzXCJcbiIsIGJ1 Zik7Ci0gICAgICAgIGlmIChsaWJ4bF90c2NfbW9kZV9mcm9tX3N0cmluZyhidWYsICZiX2luZm8t PnRzY19tb2RlKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogaW52YWxp ZCB2YWx1ZSBcIiVzXCIgZm9yIFwidHNjX21vZGVcIlxuIiwKLSAgICAgICAgICAgICAgICAgICAg YnVmKTsKLSAgICAgICAgICAgIGV4aXQgKDEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg KCF4bHVfY2ZnX2dldF9sb25nKGNvbmZpZywgInJ0Y190aW1lb2Zmc2V0IiwgJmwsIDApKQotICAg ICAgICBiX2luZm8tPnJ0Y190aW1lb2Zmc2V0ID0gbDsKLQotICAgIGlmICgheGx1X2NmZ19nZXRf bG9uZyhjb25maWcsICJ2bmN2aWV3ZXIiLCAmbCwgMCkpCi0gICAgICAgIGZwcmludGYoc3RkZXJy LCAiV0FSTklORzogaWdub3JpbmcgXCJ2bmN2aWV3ZXJcIiBvcHRpb24uICIKLSAgICAgICAgICAg ICAgICAiVXNlIFwiLVZcIiBvcHRpb24gb2YgXCJ4bCBjcmVhdGVcIiB0byBhdXRvbWF0aWNhbGx5 IHNwYXduIHZuY3ZpZXdlci5cbiIpOwotCi0gICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcs ICJsb2NhbHRpbWUiLCAmYl9pbmZvLT5sb2NhbHRpbWUsIDApOwotCi0gICAgaWYgKCF4bHVfY2Zn X2dldF9sb25nIChjb25maWcsICJ2aWRlb3JhbSIsICZsLCAwKSkKLSAgICAgICAgYl9pbmZvLT52 aWRlb19tZW1rYiA9IGwgKiAxMDI0OwotCi0gICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nKGNvbmZp ZywgIm1heF9ldmVudF9jaGFubmVscyIsICZsLCAwKSkKLSAgICAgICAgYl9pbmZvLT5ldmVudF9j aGFubmVscyA9IGw7Ci0KLSAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJrZXJu ZWwiLCAmYl9pbmZvLT5rZXJuZWwsIDApOwotICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNv bmZpZywgInJhbWRpc2siLCAmYl9pbmZvLT5yYW1kaXNrLCAwKTsKLSAgICB4bHVfY2ZnX3JlcGxh Y2Vfc3RyaW5nIChjb25maWcsICJkZXZpY2VfdHJlZSIsICZiX2luZm8tPmRldmljZV90cmVlLCAw KTsKLSAgICBiX2luZm8tPmNtZGxpbmUgPSBwYXJzZV9jbWRsaW5lKGNvbmZpZyk7Ci0KLSAgICB4 bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgImRyaXZlcl9kb21haW4iLCAmY19pbmZvLT5kcml2 ZXJfZG9tYWluLCAwKTsKLSAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgImFjcGkiLCAm Yl9pbmZvLT5hY3BpLCAwKTsKLQotICAgIHN3aXRjaChiX2luZm8tPnR5cGUpIHsKLSAgICBjYXNl IExJQlhMX0RPTUFJTl9UWVBFX0hWTToKLSAgICAgICAga2VybmVsX2Jhc2VuYW1lID0gbGlieGxf YmFzZW5hbWUoYl9pbmZvLT5rZXJuZWwpOwotICAgICAgICBpZiAoIXN0cmNtcChrZXJuZWxfYmFz ZW5hbWUsICJodm1sb2FkZXIiKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJO SU5HOiB5b3Ugc2VlbSB0byBiZSB1c2luZyBcImtlcm5lbFwiICIKLSAgICAgICAgICAgICAgICAg ICAgImRpcmVjdGl2ZSB0byBvdmVycmlkZSBIVk0gZ3Vlc3QgZmlybXdhcmUuIElnbm9yZSAiCi0g ICAgICAgICAgICAgICAgICAgICJ0aGF0LiBVc2UgXCJmaXJtd2FyZV9vdmVycmlkZVwiIGluc3Rl YWQgaWYgeW91ICIKLSAgICAgICAgICAgICAgICAgICAgInJlYWxseSB3YW50IGEgbm9uLWRlZmF1 bHQgZmlybXdhcmVcbiIpOwotICAgICAgICAgICAgYl9pbmZvLT5rZXJuZWwgPSBOVUxMOwotICAg ICAgICB9Ci0gICAgICAgIGZyZWUoa2VybmVsX2Jhc2VuYW1lKTsKLQotICAgICAgICB4bHVfY2Zn X3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJmaXJtd2FyZV9vdmVycmlkZSIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8tPnUuaHZtLmZpcm13YXJlLCAwKTsKLSAgICAg ICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAiYmlvc19wYXRoX292ZXJyaWRlIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0uc3lzdGVtX2Zp cm13YXJlLCAwKTsKLSAgICAgICAgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcoY29uZmlnLCAiYmlv cyIsICZidWYsIDApKSB7Ci0gICAgICAgICAgICBpZiAobGlieGxfYmlvc190eXBlX2Zyb21fc3Ry aW5nKGJ1ZiwgJmJfaW5mby0+dS5odm0uYmlvcykpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIkVSUk9SOiBpbnZhbGlkIHZhbHVlIFwiJXNcIiBmb3IgXCJiaW9zXCJcbiIsCi0g ICAgICAgICAgICAgICAgICAgIGJ1Zik7Ci0gICAgICAgICAgICAgICAgZXhpdCAoMSk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYl9pbmZvLT51Lmh2bS5zeXN0ZW1fZmlybXdh cmUpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6ICIKLSAgICAgICAgICAg ICAgICAgICAgImJpb3NfcGF0aF9vdmVycmlkZSBnaXZlbiB3aXRob3V0IHNwZWNpZmljIGJpb3Mg bmFtZVxuIik7Ci0KLSAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJwYWUiLCAm Yl9pbmZvLT51Lmh2bS5wYWUsIDApOwotICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZp ZywgImFwaWMiLCAmYl9pbmZvLT51Lmh2bS5hcGljLCAwKTsKLSAgICAgICAgeGx1X2NmZ19nZXRf ZGVmYm9vbChjb25maWcsICJhY3BpX3MzIiwgJmJfaW5mby0+dS5odm0uYWNwaV9zMywgMCk7Ci0g ICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAiYWNwaV9zNCIsICZiX2luZm8tPnUu aHZtLmFjcGlfczQsIDApOwotICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgIm54 IiwgJmJfaW5mby0+dS5odm0ubngsIDApOwotICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNv bmZpZywgImhwZXQiLCAmYl9pbmZvLT51Lmh2bS5ocGV0LCAwKTsKLSAgICAgICAgeGx1X2NmZ19n ZXRfZGVmYm9vbChjb25maWcsICJ2cHRfYWxpZ24iLCAmYl9pbmZvLT51Lmh2bS52cHRfYWxpZ24s IDApOwotCi0gICAgICAgIHN3aXRjaCAoeGx1X2NmZ19nZXRfbGlzdChjb25maWcsICJ2aXJpZGlh biIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlyaWRpYW4sICZudW1fdmly aWRpYW4sIDEpKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgMDogLyogU3VjY2VzcyAqLwotICAg ICAgICAgICAgaWYgKG51bV92aXJpZGlhbikgewotICAgICAgICAgICAgICAgIGxpYnhsX2JpdG1h cF9hbGxvYyhjdHgsICZiX2luZm8tPnUuaHZtLnZpcmlkaWFuX2VuYWJsZSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfQlVJTERJTkZPX0hWTV9WSVJJRElBTl9FTkFC TEVfRElTQUJMRV9XSURUSCk7Ci0gICAgICAgICAgICAgICAgbGlieGxfYml0bWFwX2FsbG9jKGN0 eCwgJmJfaW5mby0+dS5odm0udmlyaWRpYW5fZGlzYWJsZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTElCWExfQlVJTERJTkZPX0hWTV9WSVJJRElBTl9FTkFCTEVfRElTQUJM RV9XSURUSCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVt X3ZpcmlkaWFuOyBpKyspIHsKLSAgICAgICAgICAgICAgICBsaWJ4bF92aXJpZGlhbl9lbmxpZ2h0 ZW5tZW50IHY7Ci0KLSAgICAgICAgICAgICAgICBidWYgPSB4bHVfY2ZnX2dldF9saXN0aXRlbSh2 aXJpZGlhbiwgaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmNtcChidWYsICJhbGwiKSA9PSAw KQotICAgICAgICAgICAgICAgICAgICBsaWJ4bF9iaXRtYXBfc2V0X2FueSgmYl9pbmZvLT51Lmh2 bS52aXJpZGlhbl9lbmFibGUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChidWYs ICJkZWZhdWx0cyIpID09IDApCi0gICAgICAgICAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0 KCZiX2luZm8tPnUuaHZtLnZpcmlkaWFuLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsK LSAgICAgICAgICAgICAgICAgICAgbGlieGxfYml0bWFwICpzID0gJmJfaW5mby0+dS5odm0udmly aWRpYW5fZW5hYmxlOwotICAgICAgICAgICAgICAgICAgICBsaWJ4bF9iaXRtYXAgKnIgPSAmYl9p bmZvLT51Lmh2bS52aXJpZGlhbl9kaXNhYmxlOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICgq YnVmID09ICchJykgewotICAgICAgICAgICAgICAgICAgICAgICAgcyA9ICZiX2luZm8tPnUuaHZt LnZpcmlkaWFuX2Rpc2FibGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByID0gJmJfaW5mby0+ dS5odm0udmlyaWRpYW5fZW5hYmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnVmKys7Ci0g ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBlID0gbGlieGxfdmly aWRpYW5fZW5saWdodGVubWVudF9mcm9tX3N0cmluZyhidWYsICZ2KTsKLSAgICAgICAgICAgICAg ICAgICAgaWYgKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieGw6IHVua25vd24gdmlyaWRpYW4gZW5s aWdodGVubWVudCAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYp OwotICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgtRVJST1JfRkFJTCk7Ci0gICAgICAgICAg ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBsaWJ4bF9iaXRtYXBfc2V0KHMsIHYp OwotICAgICAgICAgICAgICAgICAgICBsaWJ4bF9iaXRtYXBfcmVzZXQociwgdik7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh c2UgRVNSQ0g6IGJyZWFrOyAvKiBPcHRpb24gbm90IHByZXNlbnQgKi8KLSAgICAgICAgY2FzZSBF SU5WQUw6Ci0gICAgICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgInZpcmlkaWFu IiwgJmJfaW5mby0+dS5odm0udmlyaWRpYW4sIDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwieGw6IFVuYWJsZSB0byBw YXJzZSB2aXJpZGlhbiBlbmxpZ2h0ZW5tZW50cy5cbiIpOwotICAgICAgICAgICAgZXhpdCgtRVJS T1JfRkFJTCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcoY29u ZmlnLCAibW1pb19ob2xlIiwgJmwsIDApKSB7Ci0gICAgICAgICAgICB1aW50NjRfdCBtbWlvX2hv bGVfc2l6ZTsKLQotICAgICAgICAgICAgYl9pbmZvLT51Lmh2bS5tbWlvX2hvbGVfbWVta2IgPSBs ICogMTAyNDsKLSAgICAgICAgICAgIG1taW9faG9sZV9zaXplID0gYl9pbmZvLT51Lmh2bS5tbWlv X2hvbGVfbWVta2IgKiAxMDI0OwotICAgICAgICAgICAgaWYgKG1taW9faG9sZV9zaXplIDwgSFZN X0JFTE9XXzRHX01NSU9fTEVOR1RIIHx8Ci0gICAgICAgICAgICAgICAgbW1pb19ob2xlX3NpemUg PiBIVk1fQkVMT1dfNEdfTU1JT19TVEFSVCkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgIkVSUk9SOiBpbnZhbGlkIHZhbHVlICVsZCBm b3IgXCJtbWlvX2hvbGVcIlxuIiwgbCk7Ci0gICAgICAgICAgICAgICAgZXhpdCAoMSk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nKGNvbmZp ZywgInRpbWVyX21vZGUiLCAmbCwgMSkpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMgPSBs aWJ4bF90aW1lcl9tb2RlX3RvX3N0cmluZyhsKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAiV0FSTklORzogc3BlY2lmeWluZyBcInRpbWVyX21vZGVcIiBhcyBhbiBpbnRlZ2VyIGlzIGRl cHJlY2F0ZWQuICIKLSAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSB1c2UgdGhlIG5hbWVkIHBh cmFtZXRlciB2YXJpYW50LiAlcyVzJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIHMgPyAiZS5n LiB0aW1lcl9tb2RlPVwiIiA6ICIiLAotICAgICAgICAgICAgICAgICAgICBzID8gcyA6ICIiLAot ICAgICAgICAgICAgICAgICAgICBzID8gIlwiIiA6ICIiKTsKLQotICAgICAgICAgICAgaWYgKGwg PCBMSUJYTF9USU1FUl9NT0RFX0RFTEFZX0ZPUl9NSVNTRURfVElDS1MgfHwKLSAgICAgICAgICAg ICAgICBsID4gTElCWExfVElNRVJfTU9ERV9PTkVfTUlTU0VEX1RJQ0tfUEVORElORykgewotICAg ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGludmFsaWQgdmFsdWUgJWxkIGZv ciBcInRpbWVyX21vZGVcIlxuIiwgbCk7Ci0gICAgICAgICAgICAgICAgZXhpdCAoMSk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBiX2luZm8tPnUuaHZtLnRpbWVyX21vZGUgPSBsOwotICAg ICAgICB9IGVsc2UgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcoY29uZmlnLCAidGltZXJfbW9kZSIs ICZidWYsIDApKSB7Ci0gICAgICAgICAgICBpZiAobGlieGxfdGltZXJfbW9kZV9mcm9tX3N0cmlu ZyhidWYsICZiX2luZm8tPnUuaHZtLnRpbWVyX21vZGUpKSB7Ci0gICAgICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJFUlJPUjogaW52YWxpZCB2YWx1ZSBcIiVzXCIgZm9yIFwidGltZXJfbW9k ZVwiXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgYnVmKTsKLSAgICAgICAgICAgICAgICBl eGl0ICgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHhsdV9jZmdfZ2V0 X2RlZmJvb2woY29uZmlnLCAibmVzdGVkaHZtIiwgJmJfaW5mby0+dS5odm0ubmVzdGVkX2h2bSwg MCk7Ci0KLSAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJhbHRwMm1odm0iLCAm Yl9pbmZvLT51Lmh2bS5hbHRwMm0sIDApOwotCi0gICAgICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJp bmcoY29uZmlnLCAic21iaW9zX2Zpcm13YXJlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmYl9pbmZvLT51Lmh2bS5zbWJpb3NfZmlybXdhcmUsIDApOwotICAgICAgICB4bHVfY2Zn X3JlcGxhY2Vfc3RyaW5nKGNvbmZpZywgImFjcGlfZmlybXdhcmUiLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZiX2luZm8tPnUuaHZtLmFjcGlfZmlybXdhcmUsIDApOwotCi0gICAg ICAgIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nKGNvbmZpZywgIm1zX3ZtX2dlbmlkIiwgJmJ1Ziwg MCkpIHsKLSAgICAgICAgICAgIGlmICghc3RyY21wKGJ1ZiwgImdlbmVyYXRlIikpIHsKLSAgICAg ICAgICAgICAgICBlID0gbGlieGxfbXNfdm1fZ2VuaWRfZ2VuZXJhdGUoY3R4LCAmYl9pbmZvLT51 Lmh2bS5tc192bV9nZW5pZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGUpIHsKLSAgICAgICAgICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogZmFpbGVkIHRvIGdlbmVyYXRlIGEgVk0g R2VuZXJhdGlvbiBJRFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgIm5vbmUiKSkg ewotICAgICAgICAgICAgICAgIDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IFwibXNfdm1fZ2VuaWRcIiBvcHRpb24gbXVz dCBiZSBcImdlbmVyYXRlXCIgb3IgXCJub25lXCJcbiIpOwotICAgICAgICAgICAgICAgICAgICBl eGl0KDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF4bHVfY2Zn X2dldF9sb25nIChjb25maWcsICJyZG1fbWVtX2JvdW5kYXJ5IiwgJmwsIDApKQotICAgICAgICAg ICAgYl9pbmZvLT51Lmh2bS5yZG1fbWVtX2JvdW5kYXJ5X21lbWtiID0gbCAqIDEwMjQ7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgTElCWExfRE9NQUlOX1RZUEVfUFY6Ci0gICAgewotICAgICAg ICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJib290bG9hZGVyIiwgJmJfaW5mby0+ dS5wdi5ib290bG9hZGVyLCAwKTsKLSAgICAgICAgc3dpdGNoICh4bHVfY2ZnX2dldF9saXN0X2Fz X3N0cmluZ19saXN0KGNvbmZpZywgImJvb3Rsb2FkZXJfYXJncyIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8tPnUucHYuYm9vdGxvYWRlcl9hcmdzLCAxKSkK LSAgICAgICAgewotCi0gICAgICAgIGNhc2UgMDogYnJlYWs7IC8qIFN1Y2Nlc3MgKi8KLSAgICAg ICAgY2FzZSBFU1JDSDogYnJlYWs7IC8qIE9wdGlvbiBub3QgcHJlc2VudCAqLwotICAgICAgICBj YXNlIEVJTlZBTDoKLSAgICAgICAgICAgIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nKGNvbmZpZywg ImJvb3Rsb2FkZXJfYXJncyIsICZidWYsIDApKSB7Ci0KLSAgICAgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIldBUk5JTkc6IFNwZWNpZnlpbmcgXCJib290bG9hZGVyX2FyZ3NcIiIKLSAgICAg ICAgICAgICAgICAgICAgICAgICIgYXMgYSBzdHJpbmcgaXMgZGVwcmVjYXRlZC4gIgotICAgICAg ICAgICAgICAgICAgICAgICAgIlBsZWFzZSB1c2UgYSBsaXN0IG9mIGFyZ3VtZW50cy5cbiIpOwot ICAgICAgICAgICAgICAgIHNwbGl0X3N0cmluZ19pbnRvX3N0cmluZ19saXN0KGJ1ZiwgIiBcdFxu IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZv LT51LnB2LmJvb3Rsb2FkZXJfYXJncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJ4bDogVW5h YmxlIHRvIHBhcnNlIGJvb3Rsb2FkZXJfYXJncy5cbiIpOwotICAgICAgICAgICAgZXhpdCgtRVJS T1JfRkFJTCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWJfaW5mby0+dS5wdi5ib290bG9h ZGVyICYmICFiX2luZm8tPmtlcm5lbCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJO ZWl0aGVyIGtlcm5lbCBub3IgYm9vdGxvYWRlciBzcGVjaWZpZWRcbiIpOwotICAgICAgICAgICAg ZXhpdCgxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0 OgotICAgICAgICBhYm9ydCgpOwotICAgIH0KLQotICAgIGlmICgheGx1X2NmZ19nZXRfbGlzdChj b25maWcsICJpb3BvcnRzIiwgJmlvcG9ydHMsICZudW1faW9wb3J0cywgMCkpIHsKLSAgICAgICAg Yl9pbmZvLT5udW1faW9wb3J0cyA9IG51bV9pb3BvcnRzOwotICAgICAgICBiX2luZm8tPmlvcG9y dHMgPSBjYWxsb2MobnVtX2lvcG9ydHMsIHNpemVvZigqYl9pbmZvLT5pb3BvcnRzKSk7Ci0gICAg ICAgIGlmIChiX2luZm8tPmlvcG9ydHMgPT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBpb3BvcnRzXG4iKTsKLSAgICAg ICAgICAgIGV4aXQoLTEpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG51 bV9pb3BvcnRzOyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1ZjI7Ci0gICAgICAg ICAgICBjaGFyICplcDsKLSAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0LCBlbmQ7Ci0gICAgICAg ICAgICB1bnNpZ25lZCBsb25nIHVsOwotCi0gICAgICAgICAgICBidWYgPSB4bHVfY2ZnX2dldF9s aXN0aXRlbSAoaW9wb3J0cywgaSk7Ci0gICAgICAgICAgICBpZiAoIWJ1ZikgewotICAgICAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgInhsOiBVbmFi bGUgdG8gZ2V0IGVsZW1lbnQgIyVkIGluIGlvcG9ydCBsaXN0XG4iLCBpKTsKLSAgICAgICAgICAg ICAgICBleGl0KDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdWwgPSBzdHJ0b3VsKGJ1 ZiwgJmVwLCAxNik7Ci0gICAgICAgICAgICBpZiAoZXAgPT0gYnVmKSB7Ci0gICAgICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsICJ4bDogSW52YWxpZCBhcmd1bWVudCBwYXJzaW5nIGlvcG9ydDog JXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBidWYpOwotICAgICAgICAgICAgICAgIGV4 aXQoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodWwgPj0gVUlOVDMyX01BWCkg ewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAieGw6IGlvcG9ydCAlbHggdG9vIGJp Z1xuIiwgdWwpOwotICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBzdGFydCA9IGVuZCA9IHVsOwotCi0gICAgICAgICAgICBpZiAoKmVwID09ICctJykg ewotICAgICAgICAgICAgICAgIGJ1ZjIgPSBlcCArIDE7Ci0gICAgICAgICAgICAgICAgdWwgPSBz dHJ0b3VsKGJ1ZjIsICZlcCwgMTYpOwotICAgICAgICAgICAgICAgIGlmIChlcCA9PSBidWYyIHx8 ICplcCAhPSAnXDAnIHx8IHN0YXJ0ID4gZW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4bDogSW52YWxpZCBhcmd1 bWVudCBwYXJzaW5nIGlvcG9ydDogJXNcbiIsIGJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIGV4 aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh1bCA+PSBVSU5U MzJfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAieGw6IGlvcG9y dCAlbHggdG9vIGJpZ1xuIiwgdWwpOwotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbmQgPSB1bDsKLSAgICAgICAgICAgIH0g ZWxzZSBpZiAoICplcCAhPSAnXDAnICkKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwK LSAgICAgICAgICAgICAgICAgICAgICAgICJ4bDogSW52YWxpZCBhcmd1bWVudCBwYXJzaW5nIGlv cG9ydDogJXNcbiIsIGJ1Zik7Ci0gICAgICAgICAgICBiX2luZm8tPmlvcG9ydHNbaV0uZmlyc3Qg PSBzdGFydDsKLSAgICAgICAgICAgIGJfaW5mby0+aW9wb3J0c1tpXS5udW1iZXIgPSBlbmQgLSBz dGFydCArIDE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3Qo Y29uZmlnLCAiaXJxcyIsICZpcnFzLCAmbnVtX2lycXMsIDApKSB7Ci0gICAgICAgIGJfaW5mby0+ bnVtX2lycXMgPSBudW1faXJxczsKLSAgICAgICAgYl9pbmZvLT5pcnFzID0gY2FsbG9jKG51bV9p cnFzLCBzaXplb2YoKmJfaW5mby0+aXJxcykpOwotICAgICAgICBpZiAoYl9pbmZvLT5pcnFzID09 IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5hYmxlIHRvIGFsbG9jYXRl IG1lbW9yeSBmb3IgaW9wb3J0c1xuIik7Ci0gICAgICAgICAgICBleGl0KC0xKTsKLSAgICAgICAg fQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2lycXM7IGkrKykgewotICAgICAgICAgICAg Y2hhciAqZXA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIHVsOwotICAgICAgICAgICAgYnVm ID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0gKGlycXMsIGkpOwotICAgICAgICAgICAgaWYgKCFidWYp IHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAg ICAgICJ4bDogVW5hYmxlIHRvIGdldCBlbGVtZW50ICVkIGluIGlycSBsaXN0XG4iLCBpKTsKLSAg ICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdWwgPSBz dHJ0b3VsKGJ1ZiwgJmVwLCAxMCk7Ci0gICAgICAgICAgICBpZiAoZXAgPT0gYnVmIHx8ICplcCAh PSAnXDAnKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAieGw6IEludmFsaWQgYXJndW1lbnQgcGFyc2luZyBpcnE6ICVzXG4iLCBidWYp OwotICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp ZiAodWwgPj0gVUlOVDMyX01BWCkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi eGw6IGlycSAlbHggdG9vIGJpZ1xuIiwgdWwpOwotICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgICAgICBiX2luZm8tPmlycXNbaV0gPSB1bDsKLSAgICAgICAg fQorICAgICAgICBjbG9zZShmZF9sb2NrKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJjYW5u b3Qgc2V0IGNsb2V4ZWMgdG8gbG9ja2ZpbGUgJXMgZXJybm89JWRcbiIsIGxvY2tmaWxlLCBlcnJu byk7CisgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOwogICAgIH0KK2dldF9sb2NrOgorICAgIHJj ID0gZmNudGwoZmRfbG9jaywgRl9TRVRMS1csICZmbCk7CisgICAgaWYgKHJjIDwgMCAmJiBlcnJu byA9PSBFSU5UUikKKyAgICAgICAgZ290byBnZXRfbG9jazsKKyAgICBpZiAocmMgPCAwKSB7Cisg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiY2Fubm90IGFjcXVpcmUgbG9jayAlcyBlcnJubz0lZFxu IiwgbG9ja2ZpbGUsIGVycm5vKTsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgIH0gZWxz ZQorICAgICAgICByYyA9IDA7CisgICAgcmV0dXJuIHJjOworfQogCi0gICAgaWYgKCF4bHVfY2Zn X2dldF9saXN0KGNvbmZpZywgImlvbWVtIiwgJmlvbWVtLCAmbnVtX2lvbWVtLCAwKSkgewotICAg ICAgICBpbnQgcmV0OwotICAgICAgICBiX2luZm8tPm51bV9pb21lbSA9IG51bV9pb21lbTsKLSAg ICAgICAgYl9pbmZvLT5pb21lbSA9IGNhbGxvYyhudW1faW9tZW0sIHNpemVvZigqYl9pbmZvLT5p b21lbSkpOwotICAgICAgICBpZiAoYl9pbmZvLT5pb21lbSA9PSBOVUxMKSB7Ci0gICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlvbWVtXG4i KTsKLSAgICAgICAgICAgIGV4aXQoLTEpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDA7 IGkgPCBudW1faW9tZW07IGkrKykgewotICAgICAgICAgICAgaW50IHVzZWQ7CitzdGF0aWMgaW50 IHJlbGVhc2VfbG9jayh2b2lkKQoreworICAgIGludCByYzsKKyAgICBzdHJ1Y3QgZmxvY2sgZmw7 CiAKLSAgICAgICAgICAgIGJ1ZiA9IHhsdV9jZmdfZ2V0X2xpc3RpdGVtIChpb21lbSwgaSk7Ci0g ICAgICAgICAgICBpZiAoIWJ1ZikgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAot ICAgICAgICAgICAgICAgICAgICAgICAgInhsOiBVbmFibGUgdG8gZ2V0IGVsZW1lbnQgJWQgaW4g aW9tZW0gbGlzdFxuIiwgaSk7Ci0gICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGxpYnhsX2lvbWVtX3JhbmdlX2luaXQoJmJfaW5mby0+aW9tZW1baV0p OwotICAgICAgICAgICAgcmV0ID0gc3NjYW5mKGJ1ZiwgIiUiIFNDTng2NCIsJSIgU0NOeDY0IiVu QCUiIFNDTng2NCIlbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+aW9tZW1b aV0uc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+aW9tZW1baV0ubnVt YmVyLCAmdXNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT5pb21lbVtpXS5n Zm4sICZ1c2VkKTsKLSAgICAgICAgICAgIGlmIChyZXQgPCAyIHx8IGJ1Zlt1c2VkXSAhPSAnXDAn KSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAieGw6IEludmFsaWQgYXJndW1lbnQgcGFyc2luZyBpb21lbTogJXNcbiIsIGJ1Zik7Ci0g ICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K KyAgICAvKiBsb2NrIG5vdCBhY3F1aXJlZCAqLworICAgIGlmIChmZF9sb2NrIDwgMCkKKyAgICAg ICAgcmV0dXJuIEVSUk9SX0lOVkFMOwogCityZWxlYXNlX2xvY2s6CisgICAgZmwubF90eXBlID0g Rl9VTkxDSzsKKyAgICBmbC5sX3doZW5jZSA9IFNFRUtfU0VUOworICAgIGZsLmxfc3RhcnQgPSAw OworICAgIGZsLmxfbGVuID0gMDsKIAorICAgIHJjID0gZmNudGwoZmRfbG9jaywgRl9TRVRMS1cs ICZmbCk7CisgICAgaWYgKHJjIDwgMCAmJiBlcnJubyA9PSBFSU5UUikKKyAgICAgICAgZ290byBy ZWxlYXNlX2xvY2s7CisgICAgaWYgKHJjIDwgMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg ImNhbm5vdCByZWxlYXNlIGxvY2sgJXMsIGVycm5vPSVkXG4iLCBsb2NrZmlsZSwgZXJybm8pOwor ICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgfSBlbHNlCisgICAgICAgIHJjID0gMDsKKyAg ICBjbG9zZShmZF9sb2NrKTsKKyAgICBmZF9sb2NrID0gLTE7CiAKLSAgICBpZiAoIXhsdV9jZmdf Z2V0X2xpc3QgKGNvbmZpZywgImRpc2siLCAmdmJkcywgMCwgMCkpIHsKLSAgICAgICAgZF9jb25m aWctPm51bV9kaXNrcyA9IDA7Ci0gICAgICAgIGRfY29uZmlnLT5kaXNrcyA9IE5VTEw7Ci0gICAg ICAgIHdoaWxlICgoYnVmID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0gKHZiZHMsIGRfY29uZmlnLT5u dW1fZGlza3MpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBsaWJ4bF9kZXZpY2VfZGlzayAqZGlz azsKLSAgICAgICAgICAgIGNoYXIgKmJ1ZjIgPSBzdHJkdXAoYnVmKTsKLQotICAgICAgICAgICAg ZGlzayA9IEFSUkFZX0VYVEVORF9JTklUX05PREVWSUQoZF9jb25maWctPmRpc2tzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9jb25maWctPm51bV9kaXNr cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rl dmljZV9kaXNrX2luaXQpOwotICAgICAgICAgICAgcGFyc2VfZGlza19jb25maWcoJmNvbmZpZywg YnVmMiwgZGlzayk7Ci0KLSAgICAgICAgICAgIGZyZWUoYnVmMik7Ci0gICAgICAgIH0KLSAgICB9 Ci0KLSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QoY29uZmlnLCAidnRwbSIsICZ2dHBtcywgMCwg MCkpIHsKLSAgICAgICAgZF9jb25maWctPm51bV92dHBtcyA9IDA7Ci0gICAgICAgIGRfY29uZmln LT52dHBtcyA9IE5VTEw7Ci0gICAgICAgIHdoaWxlICgoYnVmID0geGx1X2NmZ19nZXRfbGlzdGl0 ZW0gKHZ0cG1zLCBkX2NvbmZpZy0+bnVtX3Z0cG1zKSkgIT0gTlVMTCkgewotICAgICAgICAgICAg bGlieGxfZGV2aWNlX3Z0cG0gKnZ0cG07Ci0gICAgICAgICAgICBjaGFyICogYnVmMiA9IHN0cmR1 cChidWYpOwotICAgICAgICAgICAgY2hhciAqcCwgKnAyOwotICAgICAgICAgICAgYm9vbCBnb3Rf YmFja2VuZCA9IGZhbHNlOwotCi0gICAgICAgICAgICB2dHBtID0gQVJSQVlfRVhURU5EX0lOSVQo ZF9jb25maWctPnZ0cG1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRf Y29uZmlnLT5udW1fdnRwbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfZGV2aWNlX3Z0cG1faW5pdCk7Ci0KLSAgICAgICAgICAgIHAgPSBzdHJ0b2soYnVmMiwg IiwiKTsKLSAgICAgICAgICAgIGlmKHApIHsKLSAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAg ICAgICAgICAgIHdoaWxlKCpwID09ICcgJykKLSAgICAgICAgICAgICAgICAgICAgICsrcDsKLSAg ICAgICAgICAgICAgICAgIGlmICgocDIgPSBzdHJjaHIocCwgJz0nKSkgPT0gTlVMTCkKLSAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgKnAyID0gJ1wwJzsKLSAg ICAgICAgICAgICAgICAgIGlmICghc3RyY21wKHAsICJiYWNrZW5kIikpIHsKLSAgICAgICAgICAg ICAgICAgICAgIHZ0cG0tPmJhY2tlbmRfZG9tbmFtZSA9IHN0cmR1cChwMiArIDEpOwotICAgICAg ICAgICAgICAgICAgICAgZ290X2JhY2tlbmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgfSBl bHNlIGlmKCFzdHJjbXAocCwgInV1aWQiKSkgewotICAgICAgICAgICAgICAgICAgICAgaWYoIGxp YnhsX3V1aWRfZnJvbV9zdHJpbmcoJnZ0cG0tPnV1aWQsIHAyICsgMSkgKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJGYWlsZWQgdG8gcGFyc2UgdnRwbSBVVUlEOiAlc1xuIiwgcDIgKyAxKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IlVua25vd24gc3RyaW5nIGAlcycgaW4gdnRwbSBzcGVjXG4iLCBwKTsKLSAgICAgICAgICAgICAg ICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9IHdo aWxlICgocCA9IHN0cnRvayhOVUxMLCAiLCIpKSAhPSBOVUxMKTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIGlmKCFnb3RfYmFja2VuZCkgewotICAgICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICJ2dHBtIHNwZWMgbWlzc2luZyByZXF1aXJlZCBiYWNrZW5kIGZpZWxkIVxuIik7Ci0gICAg ICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnJlZShidWYy KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgheGx1X2NmZ19nZXRfbGlzdCAoY29uZmln LCAiY2hhbm5lbCIsICZjaGFubmVscywgMCwgMCkpIHsKLSAgICAgICAgZF9jb25maWctPm51bV9j aGFubmVscyA9IDA7Ci0gICAgICAgIGRfY29uZmlnLT5jaGFubmVscyA9IE5VTEw7Ci0gICAgICAg IHdoaWxlICgoYnVmID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0gKGNoYW5uZWxzLAotICAgICAgICAg ICAgICAgIGRfY29uZmlnLT5udW1fY2hhbm5lbHMpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBs aWJ4bF9kZXZpY2VfY2hhbm5lbCAqY2huOwotICAgICAgICAgICAgbGlieGxfc3RyaW5nX2xpc3Qg cGFpcnM7Ci0gICAgICAgICAgICBjaGFyICpwYXRoID0gTlVMTDsKLSAgICAgICAgICAgIGludCBs ZW47Ci0KLSAgICAgICAgICAgIGNobiA9IEFSUkFZX0VYVEVORF9JTklUKGRfY29uZmlnLT5jaGFu bmVscywgZF9jb25maWctPm51bV9jaGFubmVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX2NoYW5uZWxfaW5pdCk7Ci0KLSAgICAgICAgICAgIHNwbGl0 X3N0cmluZ19pbnRvX3N0cmluZ19saXN0KGJ1ZiwgIiwiLCAmcGFpcnMpOwotICAgICAgICAgICAg bGVuID0gbGlieGxfc3RyaW5nX2xpc3RfbGVuZ3RoKCZwYWlycyk7Ci0gICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICBjaGFyICprZXksICprZXlf dW50cmltbWVkLCAqdmFsdWUsICp2YWx1ZV91bnRyaW1tZWQ7Ci0gICAgICAgICAgICAgICAgaW50 IHJjOwotICAgICAgICAgICAgICAgIHJjID0gc3BsaXRfc3RyaW5nX2ludG9fcGFpcihwYWlyc1tp XSwgIj0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5 X3VudHJpbW1lZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnZhbHVlX3VudHJpbW1lZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJjICE9IDApIHsKLSAgICAg ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gcGFyc2UgY2hhbm5lbCBj b25maWd1cmF0aW9uOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnNbaV0p OwotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgICAgICB0cmltKGlzc3BhY2UsIGtleV91bnRyaW1tZWQsICZrZXkpOwotICAgICAgICAg ICAgICAgIHRyaW0oaXNzcGFjZSwgdmFsdWVfdW50cmltbWVkLCAmdmFsdWUpOwotCi0gICAgICAg ICAgICAgICAgaWYgKCFzdHJjbXAoa2V5LCAiYmFja2VuZCIpKSB7Ci0gICAgICAgICAgICAgICAg ICAgIHJlcGxhY2Vfc3RyaW5nKCZjaG4tPmJhY2tlbmRfZG9tbmFtZSwgdmFsdWUpOwotICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJuYW1lIikpIHsKLSAgICAgICAgICAg ICAgICAgICAgcmVwbGFjZV9zdHJpbmcoJmNobi0+bmFtZSwgdmFsdWUpOwotICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJwYXRoIikpIHsKLSAgICAgICAgICAgICAgICAg ICAgcmVwbGFjZV9zdHJpbmcoJnBhdGgsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKCFzdHJjbXAoa2V5LCAiY29ubmVjdGlvbiIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm ICghc3RyY21wKHZhbHVlLCAicHR5IikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNobi0+ Y29ubmVjdGlvbiA9IExJQlhMX0NIQU5ORUxfQ09OTkVDVElPTl9QVFk7Ci0gICAgICAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInNvY2tldCIpKSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBjaG4tPmNvbm5lY3Rpb24gPSBMSUJYTF9DSEFOTkVMX0NPTk5FQ1RJT05f U09DS0VUOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmtub3duIGNoYW5uZWwgY29ubmVjdGlvbiAnJXMnXG4i LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSk7Ci0gICAgICAgICAgICAg ICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmtub3du IGNoYW5uZWwgcGFyYW1ldGVyICclcycsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIgaWdub3JpbmdcbiIsIGtleSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg ICAgIGZyZWUoa2V5KTsKLSAgICAgICAgICAgICAgICBmcmVlKGtleV91bnRyaW1tZWQpOwotICAg ICAgICAgICAgICAgIGZyZWUodmFsdWUpOwotICAgICAgICAgICAgICAgIGZyZWUodmFsdWVfdW50 cmltbWVkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN3aXRjaCAoY2huLT5jb25uZWN0 aW9uKSB7Ci0gICAgICAgICAgICBjYXNlIExJQlhMX0NIQU5ORUxfQ09OTkVDVElPTl9VTktOT1dO OgotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY2hhbm5lbCBoYXMgdW5rbm93biAn Y29ubmVjdGlvbidcbiIpOwotICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICBj YXNlIExJQlhMX0NIQU5ORUxfQ09OTkVDVElPTl9TT0NLRVQ6Ci0gICAgICAgICAgICAgICAgaWYg KCFwYXRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY2hhbm5lbCBj b25uZWN0aW9uICdzb2NrZXQnIHJlcXVpcmVzIHBhdGg9Li5cbiIpOwotICAgICAgICAgICAgICAg ICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjaG4tPnUu c29ja2V0LnBhdGggPSB4c3RyZHVwKHBhdGgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgY2FzZSBMSUJYTF9DSEFOTkVMX0NPTk5FQ1RJT05fUFRZOgotICAgICAgICAgICAg ICAgIC8qIE5vdGhpbmcgdG8gZG8gc2luY2UgUFRZIGhhcyBubyBhcmd1bWVudHMgKi8KLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJ1bmtub3duIGNoYW5uZWwgY29ubmVjdGlvbjogJWQiLAotICAgICAg ICAgICAgICAgICAgICAgICAgY2huLT5jb25uZWN0aW9uKTsKLSAgICAgICAgICAgICAgICBleGl0 KDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGlieGxfc3RyaW5nX2xpc3RfZGlzcG9z ZSgmcGFpcnMpOwotICAgICAgICAgICAgZnJlZShwYXRoKTsKLSAgICAgICAgfQotICAgIH0KLQot ICAgIGlmICgheGx1X2NmZ19nZXRfbGlzdCAoY29uZmlnLCAidmlmIiwgJm5pY3MsIDAsIDApKSB7 Ci0gICAgICAgIGRfY29uZmlnLT5udW1fbmljcyA9IDA7Ci0gICAgICAgIGRfY29uZmlnLT5uaWNz ID0gTlVMTDsKLSAgICAgICAgd2hpbGUgKChidWYgPSB4bHVfY2ZnX2dldF9saXN0aXRlbSAobmlj cywgZF9jb25maWctPm51bV9uaWNzKSkgIT0gTlVMTCkgewotICAgICAgICAgICAgbGlieGxfZGV2 aWNlX25pYyAqbmljOwotICAgICAgICAgICAgY2hhciAqYnVmMiA9IHN0cmR1cChidWYpOwotICAg ICAgICAgICAgY2hhciAqcDsKLQotICAgICAgICAgICAgbmljID0gQVJSQVlfRVhURU5EX0lOSVQo ZF9jb25maWctPm5pY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX2Nv bmZpZy0+bnVtX25pY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9kZXZpY2VfbmljX2luaXQpOwotICAgICAgICAgICAgc2V0X2RlZmF1bHRfbmljX3ZhbHVlcyhu aWMpOwotCi0gICAgICAgICAgICBwID0gc3RydG9rKGJ1ZjIsICIsIik7Ci0gICAgICAgICAgICBp ZiAoIXApCi0gICAgICAgICAgICAgICAgZ290byBza2lwX25pYzsKLSAgICAgICAgICAgIGRvIHsK LSAgICAgICAgICAgICAgICB3aGlsZSAoKnAgPT0gJyAnKQotICAgICAgICAgICAgICAgICAgICBw Kys7Ci0gICAgICAgICAgICAgICAgcGFyc2VfbmljX2NvbmZpZyhuaWMsICZjb25maWcsIHApOwot ICAgICAgICAgICAgfSB3aGlsZSAoKHAgPSBzdHJ0b2soTlVMTCwgIiwiKSkgIT0gTlVMTCk7Ci1z a2lwX25pYzoKLSAgICAgICAgICAgIGZyZWUoYnVmMik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg ICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QoY29uZmlnLCAidmlmMiIsIE5VTEwsIDAsIDApKSB7Ci0g ICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogdmlmMjogbmV0Y2hhbm5lbDIgaXMgZGVw cmVjYXRlZCBhbmQgbm90IHN1cHBvcnRlZCBieSB4bFxuIik7Ci0gICAgfQotCi0gICAgZF9jb25m aWctPm51bV92ZmJzID0gMDsKLSAgICBkX2NvbmZpZy0+bnVtX3ZrYnMgPSAwOwotICAgIGRfY29u ZmlnLT52ZmJzID0gTlVMTDsKLSAgICBkX2NvbmZpZy0+dmticyA9IE5VTEw7Ci0KLSAgICBpZiAo IXhsdV9jZmdfZ2V0X2xpc3QgKGNvbmZpZywgInZmYiIsICZjdmZicywgMCwgMCkpIHsKLSAgICAg ICAgd2hpbGUgKChidWYgPSB4bHVfY2ZnX2dldF9saXN0aXRlbSAoY3ZmYnMsIGRfY29uZmlnLT5u dW1fdmZicykpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGxpYnhsX2RldmljZV92ZmIgKnZmYjsK LSAgICAgICAgICAgIGxpYnhsX2RldmljZV92a2IgKnZrYjsKLQotICAgICAgICAgICAgY2hhciAq YnVmMiA9IHN0cmR1cChidWYpOwotICAgICAgICAgICAgY2hhciAqcCwgKnAyOwotCi0gICAgICAg ICAgICB2ZmIgPSBBUlJBWV9FWFRFTkRfSU5JVChkX2NvbmZpZy0+dmZicywgZF9jb25maWctPm51 bV92ZmJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNl X3ZmYl9pbml0KTsKLQotICAgICAgICAgICAgdmtiID0gQVJSQVlfRVhURU5EX0lOSVQoZF9jb25m aWctPnZrYnMsIGRfY29uZmlnLT5udW1fdmticywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX2RldmljZV92a2JfaW5pdCk7Ci0KLSAgICAgICAgICAgIHAgPSBzdHJ0 b2soYnVmMiwgIiwiKTsKLSAgICAgICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAgICBnb3Rv IHNraXBfdmZiOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIHdoaWxlICgqcCA9 PSAnICcpCi0gICAgICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICBpZiAoKHAy ID0gc3RyY2hyKHAsICc9JykpID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICpwMiA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAo cCwgInZuYyIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZ2ZmIt PnZuYy5lbmFibGUsIGF0b2kocDIgKyAxKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgh c3RyY21wKHAsICJ2bmNsaXN0ZW4iKSkgewotICAgICAgICAgICAgICAgICAgICBmcmVlKHZmYi0+ dm5jLmxpc3Rlbik7Ci0gICAgICAgICAgICAgICAgICAgIHZmYi0+dm5jLmxpc3RlbiA9IHN0cmR1 cChwMiArIDEpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwLCAidm5jcGFz c3dkIikpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZSh2ZmItPnZuYy5wYXNzd2QpOwotICAg ICAgICAgICAgICAgICAgICB2ZmItPnZuYy5wYXNzd2QgPSBzdHJkdXAocDIgKyAxKTsKLSAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAocCwgInZuY2Rpc3BsYXkiKSkgewotICAgICAg ICAgICAgICAgICAgICB2ZmItPnZuYy5kaXNwbGF5ID0gYXRvaShwMiArIDEpOwotICAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwLCAidm5jdW51c2VkIikpIHsKLSAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJnZmYi0+dm5jLmZpbmR1bnVzZWQsIGF0b2kocDIg KyAxKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHAsICJrZXltYXAiKSkg ewotICAgICAgICAgICAgICAgICAgICBmcmVlKHZmYi0+a2V5bWFwKTsKLSAgICAgICAgICAgICAg ICAgICAgdmZiLT5rZXltYXAgPSBzdHJkdXAocDIgKyAxKTsKLSAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKCFzdHJjbXAocCwgInNkbCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rl ZmJvb2xfc2V0KCZ2ZmItPnNkbC5lbmFibGUsIGF0b2kocDIgKyAxKSk7Ci0gICAgICAgICAgICAg ICAgfSBlbHNlIGlmICghc3RyY21wKHAsICJvcGVuZ2wiKSkgewotICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9kZWZib29sX3NldCgmdmZiLT5zZGwub3BlbmdsLCBhdG9pKHAyICsgMSkpOwotICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwLCAiZGlzcGxheSIpKSB7Ci0gICAgICAg ICAgICAgICAgICAgIGZyZWUodmZiLT5zZGwuZGlzcGxheSk7Ci0gICAgICAgICAgICAgICAgICAg IHZmYi0+c2RsLmRpc3BsYXkgPSBzdHJkdXAocDIgKyAxKTsKLSAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKCFzdHJjbXAocCwgInhhdXRob3JpdHkiKSkgewotICAgICAgICAgICAgICAgICAgICBm cmVlKHZmYi0+c2RsLnhhdXRob3JpdHkpOwotICAgICAgICAgICAgICAgICAgICB2ZmItPnNkbC54 YXV0aG9yaXR5ID0gc3RyZHVwKHAyICsgMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgfSB3aGlsZSAoKHAgPSBzdHJ0b2soTlVMTCwgIiwiKSkgIT0gTlVMTCk7CisgICAgcmV0dXJu IHJjOworfQogCi1za2lwX3ZmYjoKLSAgICAgICAgICAgIGZyZWUoYnVmMik7Ci0gICAgICAgIH0K LSAgICB9CitzdGF0aWMgeWFqbF9nZW5fc3RhdHVzIHByaW50Zl9pbmZvX29uZV9qc29uKHlhamxf Z2VuIGhhbmQsIGludCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcpCit7CisgICAgeWFqbF9nZW5f c3RhdHVzIHM7CiAKLSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywgInBjaV9tc2l0 cmFuc2xhdGUiLCAmbCwgMCkpCi0gICAgICAgIHBjaV9tc2l0cmFuc2xhdGUgPSBsOworICAgIHMg PSB5YWpsX2dlbl9tYXBfb3BlbihoYW5kKTsKKyAgICBpZiAocyAhPSB5YWpsX2dlbl9zdGF0dXNf b2spCisgICAgICAgIGdvdG8gb3V0OwogCi0gICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25m aWcsICJwY2lfcG93ZXJfbWdtdCIsICZsLCAwKSkKLSAgICAgICAgcGNpX3Bvd2VyX21nbXQgPSBs OworICAgIHMgPSB5YWpsX2dlbl9zdHJpbmcoaGFuZCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiki ZG9taWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJkb21pZCIpLTEpOworICAg IGlmIChzICE9IHlhamxfZ2VuX3N0YXR1c19vaykKKyAgICAgICAgZ290byBvdXQ7CisgICAgaWYg KGRvbWlkICE9IC0xKQorICAgICAgICBzID0geWFqbF9nZW5faW50ZWdlcihoYW5kLCBkb21pZCk7 CisgICAgZWxzZQorICAgICAgICBzID0geWFqbF9nZW5fbnVsbChoYW5kKTsKKyAgICBpZiAocyAh PSB5YWpsX2dlbl9zdGF0dXNfb2spCisgICAgICAgIGdvdG8gb3V0OwogCi0gICAgaWYgKCF4bHVf Y2ZnX2dldF9sb25nIChjb25maWcsICJwY2lfcGVybWlzc2l2ZSIsICZsLCAwKSkKLSAgICAgICAg cGNpX3Blcm1pc3NpdmUgPSBsOworICAgIHMgPSB5YWpsX2dlbl9zdHJpbmcoaGFuZCwgKGNvbnN0 IHVuc2lnbmVkIGNoYXIgKikiY29uZmlnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVv ZigiY29uZmlnIiktMSk7CisgICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQorICAgICAg ICBnb3RvIG91dDsKKyAgICBzID0gbGlieGxfZG9tYWluX2NvbmZpZ19nZW5fanNvbihoYW5kLCBk X2NvbmZpZyk7CisgICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQorICAgICAgICBnb3Rv IG91dDsKIAotICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAicGNpX3NlaXplIiwg JmwsIDApKQotICAgICAgICBwY2lfc2VpemUgPSBsOworICAgIHMgPSB5YWpsX2dlbl9tYXBfY2xv c2UoaGFuZCk7CisgICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29rKQorICAgICAgICBnb3Rv IG91dDsKIAotICAgIC8qIFRvIGJlIHJld29ya2VkIChhdXRvbWF0aWNhbGx5IGVuYWJsZWQpIG9u Y2UgdGhlIGF1dG8gYmFsbG9vbmluZwotICAgICAqIGFmdGVyIGd1ZXN0IHN0YXJ0cyBpcyBkb25l ICh3aXRoIFBDSSBkZXZpY2VzIHBhc3NlZCBpbikuICovCi0gICAgaWYgKGNfaW5mby0+dHlwZSA9 PSBMSUJYTF9ET01BSU5fVFlQRV9QVikgewotICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNv bmZpZywgImU4MjBfaG9zdCIsICZiX2luZm8tPnUucHYuZTgyMF9ob3N0LCAwKTsKLSAgICB9Citv dXQ6CisgICAgcmV0dXJuIHM7Cit9CiAKLSAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyhjb25m aWcsICJyZG0iLCAmYnVmLCAwKSkgewotICAgICAgICBsaWJ4bF9yZG1fcmVzZXJ2ZSByZG07Ci0g ICAgICAgIGlmICgheGx1X3JkbV9wYXJzZShjb25maWcsICZyZG0sIGJ1ZikpIHsKLSAgICAgICAg ICAgIGJfaW5mby0+dS5odm0ucmRtLnN0cmF0ZWd5ID0gcmRtLnN0cmF0ZWd5OwotICAgICAgICAg ICAgYl9pbmZvLT51Lmh2bS5yZG0ucG9saWN5ID0gcmRtLnBvbGljeTsKLSAgICAgICAgfQotICAg IH0KK3N0YXRpYyB2b2lkIHByaW50Zl9pbmZvKGVudW0gb3V0cHV0X2Zvcm1hdCBvdXRwdXRfZm9y bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRvbWlkLAorICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcsIEZJTEUgKmZoKQoreworICAg IGlmIChvdXRwdXRfZm9ybWF0ID09IE9VVFBVVF9GT1JNQVRfU1hQKQorICAgICAgICByZXR1cm4g cHJpbnRmX2luZm9fc2V4cChkb21pZCwgZF9jb25maWcsIGZoKTsKIAotICAgIGlmICgheGx1X2Nm Z19nZXRfbGlzdCAoY29uZmlnLCAicGNpIiwgJnBjaXMsIDAsIDApKSB7Ci0gICAgICAgIGRfY29u ZmlnLT5udW1fcGNpZGV2cyA9IDA7Ci0gICAgICAgIGRfY29uZmlnLT5wY2lkZXZzID0gTlVMTDsK LSAgICAgICAgZm9yKGkgPSAwOyAoYnVmID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0gKHBjaXMsIGkp KSAhPSBOVUxMOyBpKyspIHsKLSAgICAgICAgICAgIGxpYnhsX2RldmljZV9wY2kgKnBjaWRldjsK KyAgICBjb25zdCBjaGFyICpidWY7CisgICAgbGlieGxfeWFqbF9sZW5ndGggbGVuID0gMDsKKyAg ICB5YWpsX2dlbl9zdGF0dXMgczsKKyAgICB5YWpsX2dlbiBoYW5kOwogCi0gICAgICAgICAgICBw Y2lkZXYgPSBBUlJBWV9FWFRFTkRfSU5JVF9OT0RFVklEKGRfY29uZmlnLT5wY2lkZXZzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX2NvbmZpZy0+bnVt X3BjaWRldnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX2RldmljZV9wY2lfaW5pdCk7Ci0gICAgICAgICAgICBwY2lkZXYtPm1zaXRyYW5zbGF0 ZSA9IHBjaV9tc2l0cmFuc2xhdGU7Ci0gICAgICAgICAgICBwY2lkZXYtPnBvd2VyX21nbXQgPSBw Y2lfcG93ZXJfbWdtdDsKLSAgICAgICAgICAgIHBjaWRldi0+cGVybWlzc2l2ZSA9IHBjaV9wZXJt aXNzaXZlOwotICAgICAgICAgICAgcGNpZGV2LT5zZWl6ZSA9IHBjaV9zZWl6ZTsKLSAgICAgICAg ICAgIC8qCi0gICAgICAgICAgICAgKiBMaWtlIG90aGVyIHBjaSBvcHRpb24sIHRoZSBwZXItZGV2 aWNlIHBvbGljeSBhbHdheXMgZm9sbG93cwotICAgICAgICAgICAgICogdGhlIGdsb2JhbCBwb2xp Y3kgYnkgZGVmYXVsdC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcGNpZGV2LT5yZG1f cG9saWN5ID0gYl9pbmZvLT51Lmh2bS5yZG0ucG9saWN5OwotICAgICAgICAgICAgZSA9IHhsdV9w Y2lfcGFyc2VfYmRmKGNvbmZpZywgcGNpZGV2LCBidWYpOwotICAgICAgICAgICAgaWYgKGUpIHsK LSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAg ICJ1bmFibGUgdG8gcGFyc2UgUENJIEJERiBgJXMnIGZvciBwYXNzdGhyb3VnaFxuIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgIGJ1Zik7Ci0gICAgICAgICAgICAgICAgZXhpdCgtZSk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRfY29uZmlnLT5udW1fcGNpZGV2cyAm JiBjX2luZm8tPnR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfUFYpCi0gICAgICAgICAgICBsaWJ4 bF9kZWZib29sX3NldCgmYl9pbmZvLT51LnB2LmU4MjBfaG9zdCwgdHJ1ZSk7CisgICAgaGFuZCA9 IGxpYnhsX3lhamxfZ2VuX2FsbG9jKE5VTEwpOworICAgIGlmICghaGFuZCkgeworICAgICAgICBm cHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0byBhbGxvY2F0ZSBKU09OIGdlbmVyYXRvclxuIik7Cisg ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QgKGNvbmZp ZywgImR0ZGV2IiwgJmR0ZGV2cywgMCwgMCkpIHsKLSAgICAgICAgZF9jb25maWctPm51bV9kdGRl dnMgPSAwOwotICAgICAgICBkX2NvbmZpZy0+ZHRkZXZzID0gTlVMTDsKLSAgICAgICAgZm9yIChp ID0gMDsgKGJ1ZiA9IHhsdV9jZmdfZ2V0X2xpc3RpdGVtKGR0ZGV2cywgaSkpICE9IE5VTEw7IGkr KykgewotICAgICAgICAgICAgbGlieGxfZGV2aWNlX2R0ZGV2ICpkdGRldjsKKyAgICBzID0gcHJp bnRmX2luZm9fb25lX2pzb24oaGFuZCwgZG9taWQsIGRfY29uZmlnKTsKKyAgICBpZiAocyAhPSB5 YWpsX2dlbl9zdGF0dXNfb2spCisgICAgICAgIGdvdG8gb3V0OwogCi0gICAgICAgICAgICBkdGRl diA9IEFSUkFZX0VYVEVORF9JTklUX05PREVWSUQoZF9jb25maWctPmR0ZGV2cywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX2NvbmZpZy0+bnVtX2R0ZGV2 cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9k ZXZpY2VfZHRkZXZfaW5pdCk7CisgICAgcyA9IHlhamxfZ2VuX2dldF9idWYoaGFuZCwgKGNvbnN0 IHVuc2lnbmVkIGNoYXIgKiopJmJ1ZiwgJmxlbik7CisgICAgaWYgKHMgIT0geWFqbF9nZW5fc3Rh dHVzX29rKQorICAgICAgICBnb3RvIG91dDsKIAotICAgICAgICAgICAgZHRkZXYtPnBhdGggPSBz dHJkdXAoYnVmKTsKLSAgICAgICAgICAgIGlmIChkdGRldi0+cGF0aCA9PSBOVUxMKSB7Ci0gICAg ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmFibGUgdG8gZHVwbGljYXRlIHN0cmluZyBm b3IgZHRkZXZzXG4iKTsKLSAgICAgICAgICAgICAgICBleGl0KC0xKTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotICAgIH0KKyAgICBmcHV0cyhidWYsIGZoKTsKIAotICAgIGlmICgheGx1X2Nm Z19nZXRfbGlzdChjb25maWcsICJ1c2JjdHJsIiwgJnVzYmN0cmxzLCAwLCAwKSkgewotICAgICAg ICBkX2NvbmZpZy0+bnVtX3VzYmN0cmxzID0gMDsKLSAgICAgICAgZF9jb25maWctPnVzYmN0cmxz ID0gTlVMTDsKLSAgICAgICAgd2hpbGUgKChidWYgPSB4bHVfY2ZnX2dldF9saXN0aXRlbSh1c2Jj dHJscywgZF9jb25maWctPm51bV91c2JjdHJscykpCi0gICAgICAgICAgICAgICAhPSBOVUxMKSB7 Ci0gICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybDsKLSAgICAgICAgICAg IGNoYXIgKmJ1ZjIgPSBzdHJkdXAoYnVmKTsKLSAgICAgICAgICAgIGNoYXIgKnA7Ci0KLSAgICAg ICAgICAgIHVzYmN0cmwgPSBBUlJBWV9FWFRFTkRfSU5JVChkX2NvbmZpZy0+dXNiY3RybHMsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9jb25maWctPm51bV91c2Jj dHJscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZp Y2VfdXNiY3RybF9pbml0KTsKLSAgICAgICAgICAgIHAgPSBzdHJ0b2soYnVmMiwgIiwiKTsKLSAg ICAgICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAgICBnb3RvIHNraXBfdXNiY3RybDsKLSAg ICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKnAgPT0gJyAnKQotICAgICAg ICAgICAgICAgICAgICBwKys7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnNlX3VzYmN0cmxfY29u ZmlnKHVzYmN0cmwsIHApKQotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAg ICAgfSB3aGlsZSAoKHAgPSBzdHJ0b2soTlVMTCwgIiwiKSkgIT0gTlVMTCk7Ci1za2lwX3VzYmN0 cmw6Ci0gICAgICAgICAgICBmcmVlKGJ1ZjIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg KCF4bHVfY2ZnX2dldF9saXN0KGNvbmZpZywgInVzYmRldiIsICZ1c2JkZXZzLCAwLCAwKSkgewot ICAgICAgICBkX2NvbmZpZy0+bnVtX3VzYmRldnMgPSAwOwotICAgICAgICBkX2NvbmZpZy0+dXNi ZGV2cyA9IE5VTEw7Ci0gICAgICAgIHdoaWxlICgoYnVmID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0o dXNiZGV2cywgZF9jb25maWctPm51bV91c2JkZXZzKSkKLSAgICAgICAgICAgICAgICE9IE5VTEwp IHsKLSAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldjsKLSAgICAgICAgICAg IGNoYXIgKmJ1ZjIgPSBzdHJkdXAoYnVmKTsKLSAgICAgICAgICAgIGNoYXIgKnA7Ci0KLSAgICAg ICAgICAgIHVzYmRldiA9IEFSUkFZX0VYVEVORF9JTklUX05PREVWSUQoZF9jb25maWctPnVzYmRl dnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfY29u ZmlnLT5udW1fdXNiZGV2cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldl9pbml0KTsKLSAgICAgICAgICAgIHAgPSBzdHJ0 b2soYnVmMiwgIiwiKTsKLSAgICAgICAgICAgIGlmICghcCkKLSAgICAgICAgICAgICAgICBnb3Rv IHNraXBfdXNiZGV2OwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIHdoaWxlICgq cCA9PSAnICcpCi0gICAgICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICBpZiAo cGFyc2VfdXNiZGV2X2NvbmZpZyh1c2JkZXYsIHApKQotICAgICAgICAgICAgICAgICAgICBleGl0 KDEpOwotICAgICAgICAgICAgfSB3aGlsZSAoKHAgPSBzdHJ0b2soTlVMTCwgIiwiKSkgIT0gTlVM TCk7Ci1za2lwX3VzYmRldjoKLSAgICAgICAgICAgIGZyZWUoYnVmMik7Ci0gICAgICAgIH0KLSAg ICB9Ci0KLSAgICBzd2l0Y2ggKHhsdV9jZmdfZ2V0X2xpc3QoY29uZmlnLCAiY3B1aWQiLCAmY3B1 aWRzLCAwLCAxKSkgewotICAgIGNhc2UgMDoKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qg Y2hhciAqZXJyc3RyOwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyAoYnVmID0geGx1X2NmZ19n ZXRfbGlzdGl0ZW0oY3B1aWRzLCBpKSkgIT0gTlVMTDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg ZSA9IGxpYnhsX2NwdWlkX3BhcnNlX2NvbmZpZ194ZW5kKCZiX2luZm8tPmNwdWlkLCBidWYpOwot ICAgICAgICAgICAgICAgIHN3aXRjaCAoZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMDogY29u dGludWU7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICBlcnJz dHIgPSAiaWxsZWdhbCBsZWFmIG51bWJlciI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICAgICAgZXJyc3RyID0gImls bGVnYWwgc3VibGVhZiBudW1iZXIiOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgICAgIGVycnN0ciA9ICJtaXNzaW5n IGNvbG9uIjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz ZSA0OgotICAgICAgICAgICAgICAgICAgICBlcnJzdHIgPSAiaW52YWxpZCByZWdpc3RlciBuYW1l IChtdXN0IGJlIGVbYWJjZF14KSI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICAgICAgZXJyc3RyID0gInBvbGljeSBz dHJpbmcgbXVzdCBiZSBleGFjdGx5IDMyIGNoYXJhY3RlcnMgbG9uZyI7Ci0gICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg ICAgIGVycnN0ciA9ICJ1bmtub3duIGVycm9yIjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAid2hp bGUgcGFyc2luZyBDUFVJRCBsaW5lOiBcIiVzXCI6XG4iLCBidWYpOwotICAgICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAiICBlcnJvciAjJWk6ICVzXG4iLCBlLCBlcnJzdHIpOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRUlOVkFMOiAgICAv KiBjb25maWcgb3B0aW9uIGlzIG5vdCBhIGxpc3QsIHBhcnNlIGFzIGEgc3RyaW5nICovCi0gICAg ICAgIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nKGNvbmZpZywgImNwdWlkIiwgJmJ1ZiwgMCkpIHsK LSAgICAgICAgICAgIGNoYXIgKmJ1ZjIsICpwLCAqc3RydG9rX3B0ciA9IE5VTEw7Ci0gICAgICAg ICAgICBjb25zdCBjaGFyICplcnJzdHI7Ci0KLSAgICAgICAgICAgIGJ1ZjIgPSBzdHJkdXAoYnVm KTsKLSAgICAgICAgICAgIHAgPSBzdHJ0b2tfcihidWYyLCAiLCIsICZzdHJ0b2tfcHRyKTsKLSAg ICAgICAgICAgIGlmIChwID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmcmVlKGJ1ZjIpOwot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0 cmNtcChwLCAiaG9zdCIpKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3aGls ZSBwYXJzaW5nIENQVUlEIHN0cmluZzogXCIlc1wiOlxuIiwgYnVmKTsKLSAgICAgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIiAgZXJyb3I6IGZpcnN0IHdvcmQgbXVzdCBiZSBcImhvc3RcIlxu Iik7Ci0gICAgICAgICAgICAgICAgZnJlZShidWYyKTsKLSAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAocCA9IHN0cnRva19yKE5VTEwsICIsIiwg JnN0cnRva19wdHIpOyBwICE9IE5VTEw7Ci0gICAgICAgICAgICAgICAgIHAgPSBzdHJ0b2tfcihO VUxMLCAiLCIsICZzdHJ0b2tfcHRyKSkgewotICAgICAgICAgICAgICAgIGUgPSBsaWJ4bF9jcHVp ZF9wYXJzZV9jb25maWcoJmJfaW5mby0+Y3B1aWQsIHApOwotICAgICAgICAgICAgICAgIHN3aXRj aCAoZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMDogY29udGludWU7Ci0gICAgICAgICAgICAg ICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICBlcnJzdHIgPSAibWlzc2luZyBcIj1cIiBp biBrZXk9dmFsdWUiOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgIGVycnN0ciA9ICJ1bmtub3duIENQVUlEIGZs YWcgbmFtZSI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNh c2UgMzoKLSAgICAgICAgICAgICAgICAgICAgZXJyc3RyID0gImlsbGVnYWwgQ1BVSUQgdmFsdWUg KG11c3QgYmU6IFswfDF8eHxrfHNdKSI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGVycnN0ciA9ICJ1bmtu b3duIGVycm9yIjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAid2hpbGUgcGFyc2luZyBDUFVJRCBm bGFnOiBcIiVzXCI6XG4iLCBwKTsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAg ZXJyb3IgIyVpOiAlc1xuIiwgZSwgZXJyc3RyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGZyZWUoYnVmMik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg ICAgICAgYnJlYWs7Ci0gICAgfQorb3V0OgorICAgIHlhamxfZ2VuX2ZyZWUoaGFuZCk7CiAKLSAg ICAvKiBwYXJzZSBkZXZpY2UgbW9kZWwgYXJndW1lbnRzLCB0aGlzIHdvcmtzIGZvciBwdiwgaHZt IGFuZCBzdHViZG9tICovCi0gICAgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZpZywgImRl dmljZV9tb2RlbCIsICZidWYsIDApKSB7CisgICAgaWYgKHMgIT0geWFqbF9nZW5fc3RhdHVzX29r KQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAiV0FSTklORzogaWdu b3JpbmcgZGV2aWNlX21vZGVsIGRpcmVjdGl2ZS5cbiIKLSAgICAgICAgICAgICAgICAiV0FSTklO RzogVXNlIFwiZGV2aWNlX21vZGVsX292ZXJyaWRlXCIgaW5zdGVhZCBpZiB5b3UiCi0gICAgICAg ICAgICAgICAgIiByZWFsbHkgd2FudCBhIG5vbi1kZWZhdWx0IGRldmljZV9tb2RlbFxuIik7Ci0g ICAgICAgIGlmIChzdHJzdHIoYnVmLCAic3R1YmRvbS1kbSIpKSB7Ci0gICAgICAgICAgICBpZiAo Y19pbmZvLT50eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX0hWTSkKLSAgICAgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IE9yIHVzZSIKLSAgICAgICAgICAgICAgICAgICAgICAg ICIgXCJkZXZpY2VfbW9kZWxfc3R1YmRvbWFpbl9vdmVycmlkZVwiIGlmIHlvdSAiCi0gICAgICAg ICAgICAgICAgICAgICAgICAiIHdhbnQgdG8gZW5hYmxlIHN0dWJkb21haW5zXG4iKTsKLSAgICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IGln bm9yaW5nIgotICAgICAgICAgICAgICAgICAgICAgICAgIiBcImRldmljZV9tb2RlbF9zdHViZG9t YWluX292ZXJyaWRlXCIgZGlyZWN0aXZlIgotICAgICAgICAgICAgICAgICAgICAgICAgIiBmb3Ig cHYgZ3Vlc3RcbiIpOwotICAgICAgICB9Ci0gICAgfQorICAgICAgICAgICAgICAgICJ1bmFibGUg dG8gZm9ybWF0IGRvbWFpbiBjb25maWcgYXMgSlNPTiAoWUFKTDolZClcbiIsIHMpOwogCisgICAg Zmx1c2hfc3RyZWFtKGZoKTsKK30KIAotICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZp ZywgImRldmljZV9tb2RlbF9vdmVycmlkZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg JmJfaW5mby0+ZGV2aWNlX21vZGVsLCAwKTsKLSAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyAo Y29uZmlnLCAiZGV2aWNlX21vZGVsX3ZlcnNpb24iLCAmYnVmLCAwKSkgewotICAgICAgICBpZiAo IXN0cmNtcChidWYsICJxZW11LXhlbi10cmFkaXRpb25hbCIpKSB7Ci0gICAgICAgICAgICBiX2lu Zm8tPmRldmljZV9tb2RlbF92ZXJzaW9uCi0gICAgICAgICAgICAgICAgPSBMSUJYTF9ERVZJQ0Vf TU9ERUxfVkVSU0lPTl9RRU1VX1hFTl9UUkFESVRJT05BTDsKLSAgICAgICAgfSBlbHNlIGlmICgh c3RyY21wKGJ1ZiwgInFlbXUteGVuIikpIHsKLSAgICAgICAgICAgIGJfaW5mby0+ZGV2aWNlX21v ZGVsX3ZlcnNpb24KLSAgICAgICAgICAgICAgICA9IExJQlhMX0RFVklDRV9NT0RFTF9WRVJTSU9O X1FFTVVfWEVOOwotICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCAibm9uZSIpKSB7Ci0g ICAgICAgICAgICBiX2luZm8tPmRldmljZV9tb2RlbF92ZXJzaW9uID0gTElCWExfREVWSUNFX01P REVMX1ZFUlNJT05fTk9ORTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAiVW5rbm93biBkZXZpY2VfbW9kZWxfdmVyc2lv biBcIiVzXCIgc3BlY2lmaWVkXG4iLCBidWYpOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAg ICAgfQotICAgIH0gZWxzZSBpZiAoYl9pbmZvLT5kZXZpY2VfbW9kZWwpCi0gICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiV0FSTklORzogZGV2aWNlIG1vZGVsIG92ZXJyaWRlIGdpdmVuIHdpdGhvdXQg c3BlY2lmaWMgRE0gdmVyc2lvblxuIik7Ci0gICAgeGx1X2NmZ19nZXRfZGVmYm9vbCAoY29uZmln LCAiZGV2aWNlX21vZGVsX3N0dWJkb21haW5fb3ZlcnJpZGUiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICZiX2luZm8tPmRldmljZV9tb2RlbF9zdHViZG9tYWluLCAwKTsKK3N0YXRpYyBpbnQg ZG9fZGFlbW9uaXplKGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBpZGZpbGUpCit7CisgICAgY2hh ciAqZnVsbG5hbWU7CisgICAgcGlkX3QgY2hpbGQxOworICAgIGludCBudWxsZmQsIHJldCA9IDA7 CiAKLSAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAiZGV2aWNlX21vZGVsX3N0 dWJkb21haW5fc2VjbGFiZWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmLCAw KSkKLSAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyhjb25maWcsICJkZXZpY2VfbW9kZWxf c3R1YmRvbWFpbl9zZWNsYWJlbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJf aW5mby0+ZGV2aWNlX21vZGVsX3NzaWRfbGFiZWwsIDApOworICAgIGNoaWxkMSA9IHhsX2Zvcmso Y2hpbGRfd2FpdGRhZW1vbiwgImRvbWFpbiBtb25pdG9yaW5nIGRhZW1vbml6aW5nIGNoaWxkIik7 CisgICAgaWYgKGNoaWxkMSkgeworICAgICAgICByZXQgPSBjaGlsZF9yZXBvcnQoY2hpbGRfd2Fp dGRhZW1vbik7CisgICAgICAgIGlmIChyZXQpIGdvdG8gb3V0OworICAgICAgICByZXQgPSAxOwor ICAgICAgICBnb3RvIG91dDsKKyAgICB9CiAKLSAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nKGNv bmZpZywgImRldmljZV9tb2RlbF91c2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZi X2luZm8tPmRldmljZV9tb2RlbF91c2VyLCAwKTsKKyAgICBwb3N0Zm9yaygpOwogCi0jZGVmaW5l IHBhcnNlX2V4dHJhX2FyZ3ModHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICBlID0geGx1X2NmZ19nZXRfbGlzdF9hc19zdHJpbmdfbGlzdChjb25m aWcsICJkZXZpY2VfbW9kZWxfYXJncyIjdHlwZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmJfaW5mby0+ZXh0cmEjI3R5cGUsIDApOyAgICAgICAgICAgIFwKLSAgICBp ZiAoZSAmJiBlICE9IEVTUkNIKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICBmcHJpbnRmKHN0ZGVyciwieGw6IFVuYWJsZSB0byBwYXJz ZSBkZXZpY2VfbW9kZWxfYXJncyIjdHlwZSIuXG4iKTtcCi0gICAgICAgIGV4aXQoLUVSUk9SX0ZB SUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICByZXQgPSBsaWJ4bF9jcmVhdGVfbG9nZmlsZShjdHgsIG5hbWUsICZmdWxsbmFtZSk7CisgICAg aWYgKHJldCkgeworICAgICAgICBMT0coImZhaWxlZCB0byBvcGVuIGxvZ2ZpbGUgJXM6ICVzIixm dWxsbmFtZSxzdHJlcnJvcihlcnJubykpOworICAgICAgICBleGl0KC0xKTsKICAgICB9CiAKLSAg ICAvKiBwYXJzZSBleHRyYSBhcmdzIGZvciBxZW11LCBjb21tb24gdG8gYm90aCBwdiwgaHZtICov Ci0gICAgcGFyc2VfZXh0cmFfYXJncygpOwotCi0gICAgLyogcGFyc2UgZXh0cmEgYXJncyBkZWRp Y2F0ZWQgdG8gcHYgKi8KLSAgICBwYXJzZV9leHRyYV9hcmdzKF9wdik7CisgICAgQ0hLX1NZU0NB TEwobG9nZmlsZSA9IG9wZW4oZnVsbG5hbWUsIE9fV1JPTkxZfE9fQ1JFQVR8T19BUFBFTkQsIDA2 NDQpKTsKKyAgICBmcmVlKGZ1bGxuYW1lKTsKKyAgICBhc3NlcnQobG9nZmlsZSA+PSAzKTsKIAot ICAgIC8qIHBhcnNlIGV4dHJhIGFyZ3MgZGVkaWNhdGVkIHRvIGh2bSAqLwotICAgIHBhcnNlX2V4 dHJhX2FyZ3MoX2h2bSk7CisgICAgQ0hLX1NZU0NBTEwobnVsbGZkID0gb3BlbigiL2Rldi9udWxs IiwgT19SRE9OTFkpKTsKKyAgICBhc3NlcnQobnVsbGZkID49IDMpOwogCi0jdW5kZWYgcGFyc2Vf ZXh0cmFfYXJncworICAgIGR1cDIobnVsbGZkLCAwKTsKKyAgICBkdXAyKGxvZ2ZpbGUsIDEpOwor ICAgIGR1cDIobG9nZmlsZSwgMik7CiAKLSAgICAvKiBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCB2ZmI9 W10gZm9yIFBWIGd1ZXN0IHRoZW4gaWdub3JlIHRvcCBsZXZlbAotICAgICAqIFZOQyBjb25maWcu ICovCi0gICAgaWYgKGNfaW5mby0+dHlwZSA9PSBMSUJYTF9ET01BSU5fVFlQRV9QViAmJiAhZF9j b25maWctPm51bV92ZmJzKSB7Ci0gICAgICAgIGxvbmcgdm5jX2VuYWJsZWQgPSAwOworICAgIGNs b3NlKG51bGxmZCk7CiAKLSAgICAgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJ2 bmMiLCAmbCwgMCkpCi0gICAgICAgICAgICB2bmNfZW5hYmxlZCA9IGw7CisgICAgQ0hLX1NZU0NB TEwoZGFlbW9uKDAsIDEpKTsKIAotICAgICAgICBpZiAodm5jX2VuYWJsZWQpIHsKLSAgICAgICAg ICAgIGxpYnhsX2RldmljZV92ZmIgKnZmYjsKLSAgICAgICAgICAgIGxpYnhsX2RldmljZV92a2Ig KnZrYjsKKyAgICBpZiAocGlkZmlsZSkgeworICAgICAgICBpbnQgZmQgPSBvcGVuKHBpZGZpbGUs IE9fUkRXUiB8IE9fQ1JFQVQsIFNfSVJVU1J8U19JV1VTUik7CisgICAgICAgIGNoYXIgKnBpZCA9 IE5VTEw7CiAKLSAgICAgICAgICAgIHZmYiA9IEFSUkFZX0VYVEVORF9JTklUKGRfY29uZmlnLT52 ZmJzLCBkX2NvbmZpZy0+bnVtX3ZmYnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9kZXZpY2VfdmZiX2luaXQpOworICAgICAgICBpZiAoZmQgPT0gLTEpIHsKKyAg ICAgICAgICAgIHBlcnJvcigiVW5hYmxlIHRvIG9wZW4gcGlkZmlsZSIpOworICAgICAgICAgICAg ZXhpdCgxKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICB2a2IgPSBBUlJBWV9FWFRFTkRfSU5J VChkX2NvbmZpZy0+dmticywgZF9jb25maWctPm51bV92a2JzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZrYl9pbml0KTsKKyAgICAgICAgaWYgKGFz cHJpbnRmKCZwaWQsICIlbGRcbiIsIChsb25nKWdldHBpZCgpKSA9PSAtMSkgeworICAgICAgICAg ICAgcGVycm9yKCJGb3JtYXR0aW5nIHBpZCIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAg ICAgfQogCi0gICAgICAgICAgICBwYXJzZV90b3BfbGV2ZWxfdm5jX29wdGlvbnMoY29uZmlnLCAm dmZiLT52bmMpOwotICAgICAgICAgICAgcGFyc2VfdG9wX2xldmVsX3NkbF9vcHRpb25zKGNvbmZp ZywgJnZmYi0+c2RsKTsKLSAgICAgICAgICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZp ZywgImtleW1hcCIsICZ2ZmItPmtleW1hcCwgMCk7CisgICAgICAgIGlmICh3cml0ZShmZCwgcGlk LCBzdHJsZW4ocGlkKSkgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IoIldyaXRpbmcgcGlkIik7 CisgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg cGFyc2VfdG9wX2xldmVsX3ZuY19vcHRpb25zKGNvbmZpZywgJmJfaW5mby0+dS5odm0udm5jKTsK LSAgICAgICAgcGFyc2VfdG9wX2xldmVsX3NkbF9vcHRpb25zKGNvbmZpZywgJmJfaW5mby0+dS5o dm0uc2RsKTsKLSAgICB9Ci0KLSAgICBpZiAoY19pbmZvLT50eXBlID09IExJQlhMX0RPTUFJTl9U WVBFX0hWTSkgewotICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAidmdh IiwgJmJ1ZiwgMCkpIHsKLSAgICAgICAgICAgIGlmICghc3RyY21wKGJ1ZiwgInN0ZHZnYSIpKSB7 Ci0gICAgICAgICAgICAgICAgYl9pbmZvLT51Lmh2bS52Z2Eua2luZCA9IExJQlhMX1ZHQV9JTlRF UkZBQ0VfVFlQRV9TVEQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiY2ly cnVzIikpIHsKLSAgICAgICAgICAgICAgICBiX2luZm8tPnUuaHZtLnZnYS5raW5kID0gTElCWExf VkdBX0lOVEVSRkFDRV9UWVBFX0NJUlJVUzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNt cChidWYsICJub25lIikpIHsKLSAgICAgICAgICAgICAgICBiX2luZm8tPnUuaHZtLnZnYS5raW5k ID0gTElCWExfVkdBX0lOVEVSRkFDRV9UWVBFX05PTkU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg KCFzdHJjbXAoYnVmLCAicXhsIikpIHsKLSAgICAgICAgICAgICAgICBiX2luZm8tPnUuaHZtLnZn YS5raW5kID0gTElCWExfVkdBX0lOVEVSRkFDRV9UWVBFX1FYTDsKLSAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIHZnYSBcIiVzXCIg c3BlY2lmaWVkXG4iLCBidWYpOwotICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcoY29uZmlnLCAic3Rkdmdh IiwgJmwsIDApKQotICAgICAgICAgICAgYl9pbmZvLT51Lmh2bS52Z2Eua2luZCA9IGwgPyBMSUJY TF9WR0FfSU5URVJGQUNFX1RZUEVfU1REIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTElCWExfVkdBX0lOVEVSRkFDRV9UWVBFX0NJUlJVUzsKLQotICAgICAgICBp ZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyhjb25maWcsICJoZHR5cGUiLCAmYnVmLCAwKSAmJgotICAg ICAgICAgICAgbGlieGxfaGR0eXBlX2Zyb21fc3RyaW5nKGJ1ZiwgJmJfaW5mby0+dS5odm0uaGR0 eXBlKSkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGludmFsaWQg dmFsdWUgXCIlc1wiIGZvciBcImhkdHlwZVwiXG4iLAotICAgICAgICAgICAgICAgICAgICBidWYp OwotICAgICAgICAgICAgICAgIGV4aXQgKDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgeGx1X2Nm Z19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAia2V5bWFwIiwgJmJfaW5mby0+dS5odm0ua2V5bWFw LCAwKTsKLSAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbCAoY29uZmlnLCAic3BpY2UiLCAmYl9p bmZvLT51Lmh2bS5zcGljZS5lbmFibGUsIDApOwotICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X2xv bmcgKGNvbmZpZywgInNwaWNlcG9ydCIsICZsLCAwKSkKLSAgICAgICAgICAgIGJfaW5mby0+dS5o dm0uc3BpY2UucG9ydCA9IGw7Ci0gICAgICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmln LCAic3BpY2V0bHNfcG9ydCIsICZsLCAwKSkKLSAgICAgICAgICAgIGJfaW5mby0+dS5odm0uc3Bp Y2UudGxzX3BvcnQgPSBsOwotICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcs ICJzcGljZWhvc3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51 Lmh2bS5zcGljZS5ob3N0LCAwKTsKLSAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcs ICJzcGljZWRpc2FibGVfdGlja2V0aW5nIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAm Yl9pbmZvLT51Lmh2bS5zcGljZS5kaXNhYmxlX3RpY2tldGluZywgMCk7Ci0gICAgICAgIHhsdV9j ZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZpZywgInNwaWNlcGFzc3dkIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0uc3BpY2UucGFzc3dkLCAwKTsKLSAgICAg ICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJzcGljZWFnZW50X21vdXNlIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS5zcGljZS5hZ2VudF9tb3VzZSwg MCk7Ci0gICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAic3BpY2V2ZGFnZW50IiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS5zcGljZS52ZGFnZW50 LCAwKTsKLSAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJzcGljZV9jbGlwYm9h cmRfc2hhcmluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0u c3BpY2UuY2xpcGJvYXJkX3NoYXJpbmcsIDApOwotICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X2xv bmcgKGNvbmZpZywgInNwaWNldXNicmVkaXJlY3Rpb24iLCAmbCwgMCkpCi0gICAgICAgICAgICBi X2luZm8tPnUuaHZtLnNwaWNlLnVzYnJlZGlyZWN0aW9uID0gbDsKLSAgICAgICAgeGx1X2NmZ19y ZXBsYWNlX3N0cmluZyAoY29uZmlnLCAic3BpY2VfaW1hZ2VfY29tcHJlc3Npb24iLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS5zcGljZS5pbWFnZV9jb21w cmVzc2lvbiwgMCk7Ci0gICAgICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZpZywgInNw aWNlX3N0cmVhbWluZ192aWRlbyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZi X2luZm8tPnUuaHZtLnNwaWNlLnN0cmVhbWluZ192aWRlbywgMCk7Ci0gICAgICAgIHhsdV9jZmdf Z2V0X2RlZmJvb2woY29uZmlnLCAibm9ncmFwaGljIiwgJmJfaW5mby0+dS5odm0ubm9ncmFwaGlj LCAwKTsKLSAgICAgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nKGNvbmZpZywgImdmeF9wYXNzdGhy dSIsICZsLCAxKSkgewotICAgICAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJmJfaW5mby0+dS5o dm0uZ2Z4X3Bhc3N0aHJ1LCBsKTsKLSAgICAgICAgfSBlbHNlIGlmICgheGx1X2NmZ19nZXRfc3Ry aW5nKGNvbmZpZywgImdmeF9wYXNzdGhydSIsICZidWYsIDApKSB7Ci0gICAgICAgICAgICBpZiAo bGlieGxfZ2Z4X3Bhc3N0aHJ1X2tpbmRfZnJvbV9zdHJpbmcoYnVmLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8tPnUuaHZtLmdmeF9wYXNzdGhydV9raW5k KSkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAg ICAgICAgIkVSUk9SOiBpbnZhbGlkIHZhbHVlIFwiJXNcIiBmb3IgXCJnZnhfcGFzc3RocnVcIlxu IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zik7Ci0gICAgICAgICAgICAgICAgZXhpdCAo MSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaWJ4bF9kZWZib29sX3NldCgmYl9pbmZv LT51Lmh2bS5nZnhfcGFzc3RocnUsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAo eGx1X2NmZ19nZXRfbGlzdF9hc19zdHJpbmdfbGlzdChjb25maWcsICJzZXJpYWwiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0u c2VyaWFsX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxKSkKLSAgICAgICAgewotCi0gICAgICAgIGNhc2UgMDogYnJlYWs7IC8qIFN1Y2Nlc3Mg Ki8KLSAgICAgICAgY2FzZSBFU1JDSDogYnJlYWs7IC8qIE9wdGlvbiBub3QgcHJlc2VudCAqLwot ICAgICAgICBjYXNlIEVJTlZBTDoKLSAgICAgICAgICAgIC8qIElmIGl0J3Mgbm90IGEgdmFsaWQg bGlzdCwgdHJ5IHJlYWRpbmcgaXQgYXMgYW4gYXRvbSwKLSAgICAgICAgICAgICAqIGZhbGxpbmcg dGhyb3VnaCB0byBhbiBlcnJvciBpZiBpdCBmYWlscyAqLwotICAgICAgICAgICAgaWYgKCF4bHVf Y2ZnX3JlcGxhY2Vfc3RyaW5nKGNvbmZpZywgInNlcmlhbCIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0uc2VyaWFsLCAwKSkKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8qIEZBTExUSFJVICovCi0gICAgICAgIGRlZmF1 bHQ6Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwieGw6IFVuYWJsZSB0byBwYXJzZSBzZXJp YWwuXG4iKTsKLSAgICAgICAgICAgIGV4aXQoLUVSUk9SX0ZBSUwpOwotICAgICAgICB9Ci0gICAg ICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZpZywgImJvb3QiLCAmYl9pbmZvLT51Lmh2 bS5ib290LCAwKTsKLSAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJ1c2IiLCAm Yl9pbmZvLT51Lmh2bS51c2IsIDApOwotICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNv bmZpZywgInVzYnZlcnNpb24iLCAmbCwgMCkpCi0gICAgICAgICAgICBiX2luZm8tPnUuaHZtLnVz YnZlcnNpb24gPSBsOwotICAgICAgICBzd2l0Y2ggKHhsdV9jZmdfZ2V0X2xpc3RfYXNfc3RyaW5n X2xpc3QoY29uZmlnLCAidXNiZGV2aWNlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZiX2luZm8tPnUuaHZtLnVzYmRldmljZV9saXN0LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkpCi0gICAgICAgIHsK LQotICAgICAgICBjYXNlIDA6IGJyZWFrOyAvKiBTdWNjZXNzICovCi0gICAgICAgIGNhc2UgRVNS Q0g6IGJyZWFrOyAvKiBPcHRpb24gbm90IHByZXNlbnQgKi8KLSAgICAgICAgY2FzZSBFSU5WQUw6 Ci0gICAgICAgICAgICAvKiBJZiBpdCdzIG5vdCBhIHZhbGlkIGxpc3QsIHRyeSByZWFkaW5nIGl0 IGFzIGFuIGF0b20sCi0gICAgICAgICAgICAgKiBmYWxsaW5nIHRocm91Z2ggdG8gYW4gZXJyb3Ig aWYgaXQgZmFpbHMgKi8KLSAgICAgICAgICAgIGlmICgheGx1X2NmZ19yZXBsYWNlX3N0cmluZyhj b25maWcsICJ1c2JkZXZpY2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZiX2luZm8tPnUuaHZtLnVzYmRldmljZSwgMCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICAvKiBGQUxMVEhSVSAqLwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsInhsOiBVbmFibGUgdG8gcGFyc2UgdXNiZGV2aWNlLlxuIik7Ci0g ICAgICAgICAgICBleGl0KC1FUlJPUl9GQUlMKTsKKworICAgICAgICBpZiAoY2xvc2UoZmQpIDwg MCkgeworICAgICAgICAgICAgcGVycm9yKCJDbG9zaW5nIHBpZGZpbGUiKTsKKyAgICAgICAgICAg IGV4aXQoMSk7CiAgICAgICAgIH0KLSAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyAoY29u ZmlnLCAic291bmRodyIsICZiX2luZm8tPnUuaHZtLnNvdW5kaHcsIDApOwotICAgICAgICB4bHVf Y2ZnX2dldF9kZWZib29sKGNvbmZpZywgInhlbl9wbGF0Zm9ybV9wY2kiLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZiX2luZm8tPnUuaHZtLnhlbl9wbGF0Zm9ybV9wY2ksIDApOwogCi0g ICAgICAgIGlmKGJfaW5mby0+dS5odm0udm5jLmxpc3RlbgotICAgICAgICAgICAmJiBiX2luZm8t PnUuaHZtLnZuYy5kaXNwbGF5Ci0gICAgICAgICAgICYmIHN0cmNocihiX2luZm8tPnUuaHZtLnZu Yy5saXN0ZW4sICc6JykgIT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0g ICAgICAgICAgICAgICAgICAgICJFUlJPUjogRGlzcGxheSBzcGVjaWZpZWQgYm90aCBpbiB2bmNs aXN0ZW4iCi0gICAgICAgICAgICAgICAgICAgICIgYW5kIHZuY2Rpc3BsYXkhXG4iKTsKLSAgICAg ICAgICAgIGV4aXQgKDEpOworICAgICAgICBmcmVlKHBpZCk7CisgICAgfQogCi0gICAgICAgIH0K K291dDoKKyAgICByZXR1cm4gcmV0OworfQogCi0gICAgICAgIGlmICgheGx1X2NmZ19nZXRfc3Ry aW5nIChjb25maWcsICJ2ZW5kb3JfZGV2aWNlIiwgJmJ1ZiwgMCkpIHsKLSAgICAgICAgICAgIGxp YnhsX3ZlbmRvcl9kZXZpY2UgZDsKK3ZvaWQgc2V0X2RlZmF1bHRfbmljX3ZhbHVlcyhsaWJ4bF9k ZXZpY2VfbmljICpuaWMpOwordm9pZCBzZXRfZGVmYXVsdF9uaWNfdmFsdWVzKGxpYnhsX2Rldmlj ZV9uaWMgKm5pYykKK3sKIAotICAgICAgICAgICAgZSA9IGxpYnhsX3ZlbmRvcl9kZXZpY2VfZnJv bV9zdHJpbmcoYnVmLCAmZCk7Ci0gICAgICAgICAgICBpZiAoZSkgewotICAgICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgInhsOiB1bmtub3duIHZl bmRvcl9kZXZpY2UgJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zik7Ci0gICAg ICAgICAgICAgICAgZXhpdCgtRVJST1JfRkFJTCk7Ci0gICAgICAgICAgICB9CisgICAgaWYgKGRl ZmF1bHRfdmlmc2NyaXB0KSB7CisgICAgICAgIGZyZWUobmljLT5zY3JpcHQpOworICAgICAgICBu aWMtPnNjcmlwdCA9IHN0cmR1cChkZWZhdWx0X3ZpZnNjcmlwdCk7CisgICAgfQogCi0gICAgICAg ICAgICBiX2luZm8tPnUuaHZtLnZlbmRvcl9kZXZpY2UgPSBkOwotICAgICAgICB9CisgICAgaWYg KGRlZmF1bHRfYnJpZGdlKSB7CisgICAgICAgIGZyZWUobmljLT5icmlkZ2UpOworICAgICAgICBu aWMtPmJyaWRnZSA9IHN0cmR1cChkZWZhdWx0X2JyaWRnZSk7CiAgICAgfQogCi0gICAgaWYgKCF4 bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZpZywgImdpY192ZXJzaW9uIiwgJmJ1ZiwgMSkpIHsKLSAg ICAgICAgZSA9IGxpYnhsX2dpY192ZXJzaW9uX2Zyb21fc3RyaW5nKGJ1ZiwgJmJfaW5mby0+YXJj aF9hcm0uZ2ljX3ZlcnNpb24pOwotICAgICAgICBpZiAoZSkgewotICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICJVbmtub3duIGdpY192ZXJzaW9uIFwiJXNc IiBzcGVjaWZpZWRcbiIsIGJ1Zik7Ci0gICAgICAgICAgICBleGl0KC1FUlJPUl9GQUlMKTsKLSAg ICAgICAgfQotICAgICB9CisgICAgaWYgKGRlZmF1bHRfZ2F0ZXdheWRldikgeworICAgICAgICBm cmVlKG5pYy0+Z2F0ZXdheWRldik7CisgICAgICAgIG5pYy0+Z2F0ZXdheWRldiA9IHN0cmR1cChk ZWZhdWx0X2dhdGV3YXlkZXYpOworICAgIH0KIAotICAgIHhsdV9jZmdfZGVzdHJveShjb25maWcp OworICAgIGlmIChkZWZhdWx0X3ZpZmJhY2tlbmQpIHsKKyAgICAgICAgZnJlZShuaWMtPmJhY2tl bmRfZG9tbmFtZSk7CisgICAgICAgIG5pYy0+YmFja2VuZF9kb21uYW1lID0gc3RyZHVwKGRlZmF1 bHRfdmlmYmFja2VuZCk7CisgICAgfQogfQogCiBzdGF0aWMgdm9pZCByZWxvYWRfZG9tYWluX2Nv bmZpZyh1aW50MzJfdCBkb21pZCwKQEAgLTMxNTQsNDAgKzExNzAsNiBAQCB2b2lkIGhlbHAoY29u c3QgY2hhciAqY29tbWFuZCkKICAgICB9CiB9CiAKLS8qIFJldHVybnMgLTEgb24gZmFpbHVyZTsg dGhlIGFtb3VudCBvZiBtZW1vcnkgb24gc3VjY2Vzcy4gKi8KLXN0YXRpYyBpbnQ2NF90IHBhcnNl X21lbV9zaXplX2tiKGNvbnN0IGNoYXIgKm1lbSkKLXsKLSAgICBjaGFyICplbmRwdHI7Ci0gICAg aW50NjRfdCBrYnl0ZXM7Ci0KLSAgICBrYnl0ZXMgPSBzdHJ0b2xsKG1lbSwgJmVuZHB0ciwgMTAp OwotCi0gICAgaWYgKHN0cmxlbihlbmRwdHIpID4gMSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0g ICAgc3dpdGNoICh0b2xvd2VyKCh1aW50OF90KSplbmRwdHIpKSB7Ci0gICAgY2FzZSAndCc6Ci0g ICAgICAgIGtieXRlcyA8PD0gMTA7Ci0gICAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0gICAgY2Fz ZSAnZyc6Ci0gICAgICAgIGtieXRlcyA8PD0gMTA7Ci0gICAgICAgIC8qIGZhbGx0aHJvdWdoICov Ci0gICAgY2FzZSAnXDAnOgotICAgIGNhc2UgJ20nOgotICAgICAgICBrYnl0ZXMgPDw9IDEwOwot ICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLwotICAgIGNhc2UgJ2snOgotICAgICAgICBicmVhazsK LSAgICBjYXNlICdiJzoKLSAgICAgICAga2J5dGVzID4+PSAxMDsKLSAgICAgICAgYnJlYWs7Ci0g ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHJldHVybiBrYnl0 ZXM7Ci19Ci0KIHN0YXRpYyBpbnQgc2V0X21lbW9yeV9tYXgodWludDMyX3QgZG9taWQsIGNvbnN0 IGNoYXIgKm1lbSkKIHsKICAgICBpbnQ2NF90IG1lbW9yeWtiOwpkaWZmIC0tZ2l0IGEvdG9vbHMv eGwveGxfcGFyc2UuYyBiL3Rvb2xzL3hsL3hsX3BhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uMWVmMGMyNzJhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3hs L3hsX3BhcnNlLmMKQEAgLTAsMCArMSwyMDUyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDktMjAx NyBDaXRyaXggTHRkIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2 ZXJzaW9uIDIuMSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBleGNlcHRpb24gb24gbGlua2lu ZyBkZXNjcmliZWQgaW4gZmlsZSBMSUNFTlNFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+Cisj aW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpbmNsdWRlIDx4ZW4vaHZtL2U4MjAuaD4KKworI2luY2x1ZGUgPGxpYnhsLmg+CisjaW5j bHVkZSA8bGlieGxfdXRpbHMuaD4KKyNpbmNsdWRlIDxsaWJ4bHV0aWwuaD4KKworI2luY2x1ZGUg InhsLmgiCisjaW5jbHVkZSAieGxfdXRpbHMuaCIKKyNpbmNsdWRlICJ4bF9wYXJzZS5oIgorCitl eHRlcm4gdm9pZCBzZXRfZGVmYXVsdF9uaWNfdmFsdWVzKGxpYnhsX2RldmljZV9uaWMgKm5pYyk7 CisKKyNkZWZpbmUgQVJSQVlfRVhURU5EX0lOSVRfX0NPUkUoYXJyYXksY291bnQsaW5pdGZuLG1v cmUpICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdHlwZW9mKChj b3VudCkpIGFycmF5X2V4dGVuZF9vbGRfY291bnQgPSAoY291bnQpOyAgICAgICAgICAgICAgIFwK KyAgICAgICAgKGNvdW50KSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFycmF5KSA9IHhyZWFsbG9jKChhcnJheSksIHNp emVvZigqYXJyYXkpICogKGNvdW50KSk7ICAgICAgICAgIFwKKyAgICAgICAgKGluaXRmbikoJihh cnJheSlbYXJyYXlfZXh0ZW5kX29sZF9jb3VudF0pOyAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgbW9yZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgJihhcnJheSlbYXJyYXlfZXh0ZW5kX29sZF9jb3VudF07 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIEFSUkFZ X0VYVEVORF9JTklUKGFycmF5LGNvdW50LGluaXRmbikgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgQVJSQVlfRVhURU5EX0lOSVRfX0NPUkUoKGFycmF5KSwoY291bnQpLChpbml0Zm4p LCAoeyAgICAgICAgICAgICAgICBcCisgICAgICAgIChhcnJheSlbYXJyYXlfZXh0ZW5kX29sZF9j b3VudF0uZGV2aWQgPSBhcnJheV9leHRlbmRfb2xkX2NvdW50OyBcCisgICAgICAgIH0pKQorCisj ZGVmaW5lIEFSUkFZX0VYVEVORF9JTklUX05PREVWSUQoYXJyYXksY291bnQsaW5pdGZuKSBcCisg ICAgQVJSQVlfRVhURU5EX0lOSVRfX0NPUkUoKGFycmF5KSwoY291bnQpLChpbml0Zm4pLCAvKiBu b3RoaW5nICovICkKKworc3RhdGljIGNvbnN0IGNoYXIgKmFjdGlvbl9vbl9zaHV0ZG93bl9uYW1l c1tdID0geworICAgIFtMSUJYTF9BQ1RJT05fT05fU0hVVERPV05fREVTVFJPWV0gPSAiZGVzdHJv eSIsCisKKyAgICBbTElCWExfQUNUSU9OX09OX1NIVVRET1dOX1JFU1RBUlRdID0gInJlc3RhcnQi LAorICAgIFtMSUJYTF9BQ1RJT05fT05fU0hVVERPV05fUkVTVEFSVF9SRU5BTUVdID0gInJlbmFt ZS1yZXN0YXJ0IiwKKworICAgIFtMSUJYTF9BQ1RJT05fT05fU0hVVERPV05fUFJFU0VSVkVdID0g InByZXNlcnZlIiwKKworICAgIFtMSUJYTF9BQ1RJT05fT05fU0hVVERPV05fQ09SRURVTVBfREVT VFJPWV0gPSAiY29yZWR1bXAtZGVzdHJveSIsCisgICAgW0xJQlhMX0FDVElPTl9PTl9TSFVURE9X Tl9DT1JFRFVNUF9SRVNUQVJUXSA9ICJjb3JlZHVtcC1yZXN0YXJ0IiwKKworICAgIFtMSUJYTF9B Q1RJT05fT05fU0hVVERPV05fU09GVF9SRVNFVF0gPSAic29mdC1yZXNldCIsCit9OworCitjb25z dCBjaGFyICpnZXRfYWN0aW9uX29uX3NodXRkb3duX25hbWUobGlieGxfYWN0aW9uX29uX3NodXRk b3duIGEpCit7CisgICAgcmV0dXJuIGFjdGlvbl9vbl9zaHV0ZG93bl9uYW1lc1thXTsKK30KKwor c3RhdGljIGludCBwYXJzZV9hY3Rpb25fb25fc2h1dGRvd24oY29uc3QgY2hhciAqYnVmLCBsaWJ4 bF9hY3Rpb25fb25fc2h1dGRvd24gKmEpCit7CisgICAgaW50IGk7CisgICAgY29uc3QgY2hhciAq bjsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoYWN0aW9uX29uX3NodXRkb3duX25hbWVz KSAvIHNpemVvZihhY3Rpb25fb25fc2h1dGRvd25fbmFtZXNbMF0pOyBpKyspIHsKKyAgICAgICAg biA9IGFjdGlvbl9vbl9zaHV0ZG93bl9uYW1lc1tpXTsKKworICAgICAgICBpZiAoIW4pIGNvbnRp bnVlOworCisgICAgICAgIGlmIChzdHJjbXAoYnVmLCBuKSA9PSAwKSB7CisgICAgICAgICAgICAq YSA9IGk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1 cm4gMDsKK30KKworI2RlZmluZSBEU1RBVEVfSU5JVElBTCAgIDAKKyNkZWZpbmUgRFNUQVRFX1RB UCAgICAgICAxCisjZGVmaW5lIERTVEFURV9QSFlTUEFUSCAgMgorI2RlZmluZSBEU1RBVEVfVklS VFBBVEggIDMKKyNkZWZpbmUgRFNUQVRFX1ZJUlRUWVBFICA0CisjZGVmaW5lIERTVEFURV9SVyAg ICAgICAgNQorI2RlZmluZSBEU1RBVEVfVEVSTUlOQUwgIDYKKwordm9pZCBwYXJzZV9kaXNrX2Nv bmZpZ19tdWx0aXN0cmluZyhYTFVfQ29uZmlnICoqY29uZmlnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgbnNwZWNzLCBjb25zdCBjaGFyICpjb25zdCAqc3BlY3MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9kaXNrICpkaXNr KQoreworICAgIGludCBlOworCisgICAgbGlieGxfZGV2aWNlX2Rpc2tfaW5pdChkaXNrKTsKKwor ICAgIGlmICghKmNvbmZpZykgeworICAgICAgICAqY29uZmlnID0geGx1X2NmZ19pbml0KHN0ZGVy ciwgImNvbW1hbmQgbGluZSIpOworICAgICAgICBpZiAoISpjb25maWcpIHsgcGVycm9yKCJ4bHVf Y2ZnX2luaXQiKTsgZXhpdCgtMSk7IH0KKyAgICB9CisKKyAgICBlID0geGx1X2Rpc2tfcGFyc2Uo KmNvbmZpZywgbnNwZWNzLCBzcGVjcywgZGlzayk7CisgICAgaWYgKGUgPT0gRUlOVkFMKSBleGl0 KEVYSVRfRkFJTFVSRSk7CisgICAgaWYgKGUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsInhs dV9kaXNrX3BhcnNlIGZhaWxlZDogJXNcbiIsc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhp dChFWElUX0ZBSUxVUkUpOworICAgIH0KK30KKwordm9pZCBwYXJzZV9kaXNrX2NvbmZpZyhYTFVf Q29uZmlnICoqY29uZmlnLCBjb25zdCBjaGFyICpzcGVjLAorICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9kZXZpY2VfZGlzayAqZGlzaykKK3sKKyAgICBwYXJzZV9kaXNrX2NvbmZpZ19tdWx0 aXN0cmluZyhjb25maWcsIDEsICZzcGVjLCBkaXNrKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2Vf dmlmX3JhdGUoWExVX0NvbmZpZyAqKmNvbmZpZywgY29uc3QgY2hhciAqcmF0ZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9uaWMgKm5pYykKK3sKKyAgICBpbnQgZTsK KworICAgIGUgPSB4bHVfdmlmX3BhcnNlX3JhdGUoKmNvbmZpZywgcmF0ZSwgbmljKTsKKyAgICBp ZiAoZSA9PSBFSU5WQUwgfHwgZSA9PSBFT1ZFUkZMT1cpIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAg ICBpZiAoZSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwieGx1X3ZpZl9wYXJzZV9yYXRlIGZh aWxlZDogJXNcbiIsc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUp OworICAgIH0KK30KKworaW50IHBhcnNlX3JhbmdlKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQg bG9uZyAqYSwgdW5zaWduZWQgbG9uZyAqYikKK3sKKyAgICBjb25zdCBjaGFyICpuc3RyOworICAg IGNoYXIgKmVuZHB0cjsKKworICAgICphID0gKmIgPSBzdHJ0b3VsKHN0ciwgJmVuZHB0ciwgMTAp OworICAgIGlmIChlbmRwdHIgPT0gc3RyIHx8ICphID09IFVMT05HX01BWCkKKyAgICAgICAgcmV0 dXJuIDE7CisKKyAgICBpZiAoKmVuZHB0ciA9PSAnLScpIHsKKyAgICAgICAgbnN0ciA9IGVuZHB0 ciArIDE7CisKKyAgICAgICAgKmIgPSBzdHJ0b3VsKG5zdHIsICZlbmRwdHIsIDEwKTsKKyAgICAg ICAgaWYgKGVuZHB0ciA9PSBuc3RyIHx8ICpiID09IFVMT05HX01BWCB8fCAqYiA8ICphKQorICAg ICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogVmFsaWQgdmFsdWUgb3IgcmFuZ2Ug c28gZmFyLCBidXQgd2UgYWxzbyBkb24ndCB3YW50IGp1bmsgYWZ0ZXIgdGhhdCAqLworICAgIGlm ICgqZW5kcHRyICE9ICdcMCcpCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9 CisKKy8qCisgKiBBZGQgb3IgcmVtb3ZlcyBhIHNwZWNpZmljIHNldCBvZiBjcHVzIChzcGVjaWZp ZWQgaW4gc3RyLCBlaXRoZXIgYXMKKyAqIHNpbmdsZSBjcHVzIG9yIGFzIGVudGlyZSBOVU1BIG5v ZGVzKSB0by9mcm9tIGNwdW1hcC4KKyAqLworc3RhdGljIGludCB1cGRhdGVfY3B1bWFwX3Jhbmdl KGNvbnN0IGNoYXIgKnN0ciwgbGlieGxfYml0bWFwICpjcHVtYXApCit7CisgICAgdW5zaWduZWQg bG9uZyBpZGEsIGlkYjsKKyAgICBsaWJ4bF9iaXRtYXAgbm9kZV9jcHVtYXA7CisgICAgYm9vbCBp c19ub3QgPSBmYWxzZSwgaXNfbm9kZXMgPSBmYWxzZTsKKyAgICBpbnQgcmMgPSAwOworCisgICAg bGlieGxfYml0bWFwX2luaXQoJm5vZGVfY3B1bWFwKTsKKworICAgIHJjID0gbGlieGxfbm9kZV9i aXRtYXBfYWxsb2MoY3R4LCAmbm9kZV9jcHVtYXAsIDApOworICAgIGlmIChyYykgeworICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX25vZGVfYml0bWFwX2FsbG9jIGZhaWxlZC5cbiIpOwor ICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBBcmUgd2UgYWRkaW5nIG9yIHJlbW92 aW5nIGNwdXMvbm9kZXM/ICovCisgICAgaWYgKFNUUl9TS0lQX1BSRUZJWChzdHIsICJeIikpIHsK KyAgICAgICAgaXNfbm90ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvKiBBcmUgd2UgZGVhbGluZyB3 aXRoIGNwdXMgb3IgZnVsbCBub2Rlcz8gKi8KKyAgICBpZiAoU1RSX1NLSVBfUFJFRklYKHN0ciwg Im5vZGU6IikgfHwgU1RSX1NLSVBfUFJFRklYKHN0ciwgIm5vZGVzOiIpKSB7CisgICAgICAgIGlz X25vZGVzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc3RyY21wKHN0ciwgImFsbCIpID09IDAp IHsKKyAgICAgICAgLyogV2UgZG8gbm90IGFjY2VwdCAiXmFsbCIgb3IgIl5ub2RlczphbGwiICov CisgICAgICAgIGlmIChpc19ub3QpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fu J3QgY29tYmluZSBcIl5cIiBhbmQgXCJhbGxcIi5cbiIpOworICAgICAgICAgICAgcmMgPSBFUlJP Ul9JTlZBTDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBsaWJ4bF9iaXRtYXBfc2V0X2Fu eShjcHVtYXApOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9IHBhcnNlX3Jh bmdlKHN0ciwgJmlkYSwgJmlkYik7CisgICAgaWYgKHJjKSB7CisgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiSW52YWxpZCBwY3B1IHJhbmdlOiAlcy5cbiIsIHN0cik7CisgICAgICAgIGdvdG8gb3V0 OworICAgIH0KKworICAgIC8qIEFkZCBvciByZW1vdmUgdGhlIHNwZWNpZmllZCBjcHVzIGluIHRo ZSByYW5nZSAqLworICAgIHdoaWxlIChpZGEgPD0gaWRiKSB7CisgICAgICAgIGlmIChpc19ub2Rl cykgeworICAgICAgICAgICAgLyogQWRkL1JlbW92ZSBhbGwgdGhlIGNwdXMgb2YgYSBOVU1BIG5v ZGUgKi8KKyAgICAgICAgICAgIGludCBpOworCisgICAgICAgICAgICByYyA9IGxpYnhsX25vZGVf dG9fY3B1bWFwKGN0eCwgaWRhLCAmbm9kZV9jcHVtYXApOworICAgICAgICAgICAgaWYgKHJjKSB7 CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9ub2RlX3RvX2NwdW1hcCBm YWlsZWQuXG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgLyogQWRkL1JlbW92ZSBhbGwgdGhlIGNwdXMgaW4gdGhlIG5vZGUgY3B1bWFw ICovCisgICAgICAgICAgICBsaWJ4bF9mb3JfZWFjaF9zZXRfYml0KGksIG5vZGVfY3B1bWFwKSB7 CisgICAgICAgICAgICAgICAgaXNfbm90ID8gbGlieGxfYml0bWFwX3Jlc2V0KGNwdW1hcCwgaSkg OgorICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2JpdG1hcF9zZXQoY3B1bWFwLCBpKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIEFkZC9SZW1v dmUgdGhpcyBjcHUgKi8KKyAgICAgICAgICAgIGlzX25vdCA/IGxpYnhsX2JpdG1hcF9yZXNldChj cHVtYXAsIGlkYSkgOgorICAgICAgICAgICAgICAgICAgICAgbGlieGxfYml0bWFwX3NldChjcHVt YXAsIGlkYSk7CisgICAgICAgIH0KKyAgICAgICAgaWRhKys7CisgICAgfQorCisgb3V0OgorICAg IGxpYnhsX2JpdG1hcF9kaXNwb3NlKCZub2RlX2NwdW1hcCk7CisgICAgcmV0dXJuIHJjOworfQor CisvKgorICogVGFrZXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgc2V0IG9mIGNwdXMgKHNwZWNp ZmllZCBlaXRoZXIgYXMKKyAqIHNpbmdsZSBjcHVzIG9yIGFzIGVpbnRpcmUgTlVNQSBub2Rlcykg YW5kIHR1cm5zIGl0IGludG8gdGhlCisgKiBjb3JyZXNwb25kaW5nIGxpYnhsX2JpdG1hcCAoaW4g Y3B1bWFwKS4KKyAqLworaW50IHBhcnNlX2NwdXJhbmdlKGNvbnN0IGNoYXIgKmNwdSwgbGlieGxf Yml0bWFwICpjcHVtYXApCit7CisgICAgY2hhciAqcHRyLCAqc2F2ZXB0ciA9IE5VTEwsICpidWYg PSB4c3RyZHVwKGNwdSk7CisgICAgaW50IHJjID0gMDsKKworICAgIGZvciAocHRyID0gc3RydG9r X3IoYnVmLCAiLCIsICZzYXZlcHRyKTsgcHRyOworICAgICAgICAgcHRyID0gc3RydG9rX3IoTlVM TCwgIiwiLCAmc2F2ZXB0cikpIHsKKyAgICAgICAgcmMgPSB1cGRhdGVfY3B1bWFwX3JhbmdlKHB0 ciwgY3B1bWFwKTsKKyAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor ICAgIGZyZWUoYnVmKTsKKworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgcGFyc2Vf dG9wX2xldmVsX3ZuY19vcHRpb25zKFhMVV9Db25maWcgKmNvbmZpZywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF92bmNfaW5mbyAqdm5jKQoreworICAgIGxv bmcgbDsKKworICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAidm5jIiwgJnZuYy0+ZW5h YmxlLCAwKTsKKyAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJ2bmNsaXN0ZW4i LCAmdm5jLT5saXN0ZW4sIDApOworICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZpZywg InZuY3Bhc3N3ZCIsICZ2bmMtPnBhc3N3ZCwgMCk7CisgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25n IChjb25maWcsICJ2bmNkaXNwbGF5IiwgJmwsIDApKQorICAgICAgICB2bmMtPmRpc3BsYXkgPSBs OworICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAidm5jdW51c2VkIiwgJnZuYy0+Zmlu ZHVudXNlZCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3RvcF9sZXZlbF9zZGxfb3B0aW9u cyhYTFVfQ29uZmlnICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfc2RsX2luZm8gKnNkbCkKK3sKKyAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNv bmZpZywgInNkbCIsICZzZGwtPmVuYWJsZSwgMCk7CisgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChj b25maWcsICJvcGVuZ2wiLCAmc2RsLT5vcGVuZ2wsIDApOworICAgIHhsdV9jZmdfcmVwbGFjZV9z dHJpbmcgKGNvbmZpZywgImRpc3BsYXkiLCAmc2RsLT5kaXNwbGF5LCAwKTsKKyAgICB4bHVfY2Zn X3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJ4YXV0aG9yaXR5IiwgJnNkbC0+eGF1dGhvcml0eSwg MCk7Cit9CisKK3N0YXRpYyBjaGFyICpwYXJzZV9jbWRsaW5lKFhMVV9Db25maWcgKmNvbmZpZykK K3sKKyAgICBjaGFyICpjbWRsaW5lID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpyb290ID0gTlVM TCwgKmV4dHJhID0gTlVMTCwgKmJ1ZiA9IE5VTEw7CisKKyAgICB4bHVfY2ZnX2dldF9zdHJpbmcg KGNvbmZpZywgImNtZGxpbmUiLCAmYnVmLCAwKTsKKyAgICB4bHVfY2ZnX2dldF9zdHJpbmcgKGNv bmZpZywgInJvb3QiLCAmcm9vdCwgMCk7CisgICAgeGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcs ICJleHRyYSIsICZleHRyYSwgMCk7CisKKyAgICBpZiAoYnVmKSB7CisgICAgICAgIGNtZGxpbmUg PSBzdHJkdXAoYnVmKTsKKyAgICAgICAgaWYgKHJvb3QgfHwgZXh0cmEpCisgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IGlnbm9yaW5nIHJvb3Q9IGFuZCBleHRyYT0gIgorICAg ICAgICAgICAgICAgICAgICAiaW4gZmF2b3VyIG9mIGNtZGxpbmU9XG4iKTsKKyAgICB9IGVsc2Ug eworICAgICAgICBpZiAocm9vdCAmJiBleHRyYSkgeworICAgICAgICAgICAgeGFzcHJpbnRmKCZj bWRsaW5lLCAicm9vdD0lcyAlcyIsIHJvb3QsIGV4dHJhKTsKKyAgICAgICAgfSBlbHNlIGlmIChy b290KSB7CisgICAgICAgICAgICB4YXNwcmludGYoJmNtZGxpbmUsICJyb290PSVzIiwgcm9vdCk7 CisgICAgICAgIH0gZWxzZSBpZiAoZXh0cmEpIHsKKyAgICAgICAgICAgIGNtZGxpbmUgPSBzdHJk dXAoZXh0cmEpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKChidWYgfHwgcm9vdCB8fCBl eHRyYSkgJiYgIWNtZGxpbmUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8g YWxsb2NhdGUgbWVtb3J5IGZvciBjbWRsaW5lXG4iKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxV UkUpOworICAgIH0KKworICAgIHJldHVybiBjbWRsaW5lOworfQorCitzdGF0aWMgdm9pZCBwYXJz ZV92Y3B1X2FmZmluaXR5KGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFhMVV9Db25maWdMaXN0ICpjcHVzLCBjb25zdCBjaGFy ICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fY3B1cywgYm9v bCBpc19oYXJkKQoreworICAgIGxpYnhsX2JpdG1hcCAqdmNwdV9hZmZpbml0eV9hcnJheTsKKwor ICAgIC8qCisgICAgICogSWYgd2UgYXJlIGhlcmUsIGFuZCBidWYgaXMgIU5VTEwsIHdlJ3JlIGRl YWxpbmcgd2l0aCBhIHN0cmluZy4gV2hhdAorICAgICAqIHdlIGRvIGluIHRoaXMgY2FzZSBpcyBw YXJzZSBpdCwgYW5kIGNvcHkgdGhlIHJlc3VsdCBpbiBfYWxsXyAodXAgdG8KKyAgICAgKiBiX2lu Zm8tPm1heF92Y3B1cykgdGhlIGVsZW1lbnRzIG9mIHRoZSB2Y3B1IGFmZmluaXR5IGFycmF5Lgor ICAgICAqCisgICAgICogSWYgYnVmIGlzIE5VTEwsIHdlIGhhdmUgYSBsaXN0LCBhbmQgd2hhdCB3 ZSBkbyBpcyBwdXR0aW5nIGluIHRoZQorICAgICAqIGktZXRoIGVsZW1lbnQgb2YgdGhlIHZjcHUg YWZmaW5pdHkgYXJyYXkgdGhlIHJlc3VsdCBvZiB0aGUgcGFyc2luZworICAgICAqIG9mIHRoZSBp LWV0aCBlbnRyeSBvZiB0aGUgbGlzdC4gSWYgdGhlcmUgYXJlIG1vcmUgdmNwdXMgdGhhbgorICAg ICAqIGVudHJpZXMsIGl0IGlzIGZpbmUgdG8ganVzdCBub3QgdG91Y2ggdGhlIGxhc3QgYXJyYXkg ZWxlbWVudHMuCisgICAgICovCisKKyAgICAvKiBTaWxlbnRseSBpZ25vcmUgdmFsdWVzIGNvcnJl c3BvbmRpbmcgdG8gbm9uIGV4aXN0aW5nIHZjcHVzICovCisgICAgaWYgKGJ1ZiB8fCBudW1fY3B1 cyA+IGJfaW5mby0+bWF4X3ZjcHVzKQorICAgICAgICBudW1fY3B1cyA9IGJfaW5mby0+bWF4X3Zj cHVzOworCisgICAgaWYgKGlzX2hhcmQpIHsKKyAgICAgICAgYl9pbmZvLT5udW1fdmNwdV9oYXJk X2FmZmluaXR5ID0gbnVtX2NwdXM7CisgICAgICAgIGJfaW5mby0+dmNwdV9oYXJkX2FmZmluaXR5 ID0geG1hbGxvYyhudW1fY3B1cyAqIHNpemVvZihsaWJ4bF9iaXRtYXApKTsKKyAgICAgICAgdmNw dV9hZmZpbml0eV9hcnJheSA9IGJfaW5mby0+dmNwdV9oYXJkX2FmZmluaXR5OworICAgIH0gZWxz ZSB7CisgICAgICAgIGJfaW5mby0+bnVtX3ZjcHVfc29mdF9hZmZpbml0eSA9IG51bV9jcHVzOwor ICAgICAgICBiX2luZm8tPnZjcHVfc29mdF9hZmZpbml0eSA9IHhtYWxsb2MobnVtX2NwdXMgKiBz aXplb2YobGlieGxfYml0bWFwKSk7CisgICAgICAgIHZjcHVfYWZmaW5pdHlfYXJyYXkgPSBiX2lu Zm8tPnZjcHVfc29mdF9hZmZpbml0eTsKKyAgICB9CisKKyAgICBpZiAoIWJ1ZikgeworICAgICAg ICBpbnQgaiA9IDA7CisKKyAgICAgICAgd2hpbGUgKChidWYgPSB4bHVfY2ZnX2dldF9saXN0aXRl bShjcHVzLCBqKSkgIT0gTlVMTCAmJiBqIDwgbnVtX2NwdXMpIHsKKyAgICAgICAgICAgIGxpYnhs X2JpdG1hcF9pbml0KCZ2Y3B1X2FmZmluaXR5X2FycmF5W2pdKTsKKyAgICAgICAgICAgIGlmIChs aWJ4bF9jcHVfYml0bWFwX2FsbG9jKGN0eCwgJnZjcHVfYWZmaW5pdHlfYXJyYXlbal0sIDApKSB7 CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gYWxsb2NhdGUgY3B1 bWFwIGZvciB2Y3B1ICVkXG4iLCBqKTsKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVS RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwYXJzZV9jcHVyYW5nZShidWYs ICZ2Y3B1X2FmZmluaXR5X2FycmF5W2pdKSkKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJ TFVSRSk7CisKKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFdlIGhh dmUgYSBsaXN0IG9mIGNwdW1hcHMsIGRpc2FibGUgYXV0b21hdGljIHBsYWNlbWVudCAqLworICAg ICAgICBsaWJ4bF9kZWZib29sX3NldCgmYl9pbmZvLT5udW1hX3BsYWNlbWVudCwgZmFsc2UpOwor ICAgIH0gZWxzZSB7CisgICAgICAgIGludCBpOworCisgICAgICAgIGxpYnhsX2JpdG1hcF9pbml0 KCZ2Y3B1X2FmZmluaXR5X2FycmF5WzBdKTsKKyAgICAgICAgaWYgKGxpYnhsX2NwdV9iaXRtYXBf YWxsb2MoY3R4LCAmdmNwdV9hZmZpbml0eV9hcnJheVswXSwgMCkpIHsKKyAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGNwdW1hcCBmb3IgdmNwdSAwXG4iKTsK KyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm IChwYXJzZV9jcHVyYW5nZShidWYsICZ2Y3B1X2FmZmluaXR5X2FycmF5WzBdKSkKKyAgICAgICAg ICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKworICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYl9pbmZv LT5tYXhfdmNwdXM7IGkrKykgeworICAgICAgICAgICAgbGlieGxfYml0bWFwX2luaXQoJnZjcHVf YWZmaW5pdHlfYXJyYXlbaV0pOworICAgICAgICAgICAgaWYgKGxpYnhsX2NwdV9iaXRtYXBfYWxs b2MoY3R4LCAmdmNwdV9hZmZpbml0eV9hcnJheVtpXSwgMCkpIHsKKyAgICAgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBhbGxvY2F0ZSBjcHVtYXAgZm9yIHZjcHUgJWRcbiIs IGkpOworICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGxpYnhsX2JpdG1hcF9jb3B5KGN0eCwgJnZjcHVfYWZmaW5pdHlfYXJyYXlb aV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmNwdV9hZmZpbml0eV9hcnJheVsw XSk7CisgICAgICAgIH0KKworICAgICAgICBsaWJ4bF9kZWZib29sX3NldCgmYl9pbmZvLT5udW1h X3BsYWNlbWVudCwgZmFsc2UpOworICAgIH0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFy c2VfdWxvbmcoY29uc3QgY2hhciAqc3RyKQoreworICAgIGNoYXIgKmVuZHB0cjsKKyAgICB1bnNp Z25lZCBsb25nIHZhbDsKKworICAgIHZhbCA9IHN0cnRvdWwoc3RyLCAmZW5kcHRyLCAxMCk7Cisg ICAgaWYgKGVuZHB0ciA9PSBzdHIgfHwgdmFsID09IFVMT05HX01BWCkgeworICAgICAgICBmcHJp bnRmKHN0ZGVyciwgInhsOiBmYWlsZWQgdG8gY29udmVydCBcIiVzXCIgdG8gbnVtYmVyXG4iLCBz dHIpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICAgIHJldHVybiB2YWw7 Cit9CisKK3ZvaWQgcmVwbGFjZV9zdHJpbmcoY2hhciAqKnN0ciwgY29uc3QgY2hhciAqdmFsKQor eworICAgIGZyZWUoKnN0cik7CisgICAgKnN0ciA9IHhzdHJkdXAodmFsKTsKK30KKworaW50IG1h dGNoX29wdGlvbl9zaXplKGNvbnN0IGNoYXIgKnByZWZpeCwgc2l6ZV90IGxlbiwKKyAgICAgICAg ICAgICAgICAgICAgICBjaGFyICphcmcsIGNoYXIgKiphcmdvcHQpCit7CisgICAgaW50IHJjID0g c3RybmNtcChwcmVmaXgsIGFyZywgbGVuKTsKKyAgICBpZiAoIXJjKSAqYXJnb3B0ID0gYXJnK2xl bjsKKyAgICByZXR1cm4gIXJjOworfQorCisvKiBQYXJzZXMgbmV0d29yayBkYXRhIGFuZCBhZGRz IGluZm8gaW50byBuaWMKKyAqIFJldHVybnMgMSBpZiB0aGUgaW5wdXQgdG9rZW4gZG9lcyBub3Qg bWF0Y2ggb25lIG9mIHRoZSBrZXlzCisgKiBvciBwYXJzZWQgdmFsdWVzIGFyZSBub3QgY29ycmVj dC4gU3VjY2Vzc2Z1bCBwYXJzZSByZXR1cm5zIDAgKi8KK2ludCBwYXJzZV9uaWNfY29uZmlnKGxp YnhsX2RldmljZV9uaWMgKm5pYywgWExVX0NvbmZpZyAqKmNvbmZpZywgY2hhciAqdG9rZW4pCit7 CisgICAgY2hhciAqZW5kcHRyLCAqb3Bhcmc7CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgaW50 IHZhbDsKKworICAgIGlmIChNQVRDSF9PUFRJT04oInR5cGUiLCB0b2tlbiwgb3BhcmcpKSB7Cisg ICAgICAgIGlmICghc3RyY21wKCJ2aWYiLCBvcGFyZykpIHsKKyAgICAgICAgICAgIG5pYy0+bmlj dHlwZSA9IExJQlhMX05JQ19UWVBFX1ZJRjsKKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKCJp b2VtdSIsIG9wYXJnKSkgeworICAgICAgICAgICAgbmljLT5uaWN0eXBlID0gTElCWExfTklDX1RZ UEVfVklGX0lPRU1VOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICJJbnZhbGlkIHBhcmFtZXRlciBgdHlwZScuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAx OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oIm1hYyIsIHRva2VuLCBv cGFyZykpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworICAgICAgICAgICAg dmFsID0gc3RydG91bChvcGFyZywgJmVuZHB0ciwgMTYpOworICAgICAgICAgICAgaWYgKChvcGFy ZyA9PSBlbmRwdHIpIHx8ICh2YWwgPiAyNTUpKSB7CisgICAgICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJJbnZhbGlkIHBhcmFtZXRlciBgbWFjJy5cbiIpOworICAgICAgICAgICAgICAgIHJl dHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmljLT5tYWNbaV0gPSB2YWw7Cisg ICAgICAgICAgICBvcGFyZyA9IGVuZHB0ciArIDE7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg KE1BVENIX09QVElPTigiYnJpZGdlIiwgdG9rZW4sIG9wYXJnKSkgeworICAgICAgICByZXBsYWNl X3N0cmluZygmbmljLT5icmlkZ2UsIG9wYXJnKTsKKyAgICB9IGVsc2UgaWYgKE1BVENIX09QVElP TigibmV0ZGV2IiwgdG9rZW4sIG9wYXJnKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRo ZSBuZXRkZXYgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQsICIKKyAgICAgICAgICAgICAgICAgICAg ICAgICJwbGVhc2UgdXNlIGdhdGV3YXlkZXYgaW5zdGVhZFxuIik7CisgICAgICAgIHJlcGxhY2Vf c3RyaW5nKCZuaWMtPmdhdGV3YXlkZXYsIG9wYXJnKTsKKyAgICB9IGVsc2UgaWYgKE1BVENIX09Q VElPTigiZ2F0ZXdheWRldiIsIHRva2VuLCBvcGFyZykpIHsKKyAgICAgICAgcmVwbGFjZV9zdHJp bmcoJm5pYy0+Z2F0ZXdheWRldiwgb3BhcmcpOworICAgIH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9O KCJpcCIsIHRva2VuLCBvcGFyZykpIHsKKyAgICAgICAgcmVwbGFjZV9zdHJpbmcoJm5pYy0+aXAs IG9wYXJnKTsKKyAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigic2NyaXB0IiwgdG9rZW4sIG9w YXJnKSkgeworICAgICAgICByZXBsYWNlX3N0cmluZygmbmljLT5zY3JpcHQsIG9wYXJnKTsKKyAg ICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigiYmFja2VuZCIsIHRva2VuLCBvcGFyZykpIHsKKyAg ICAgICAgcmVwbGFjZV9zdHJpbmcoJm5pYy0+YmFja2VuZF9kb21uYW1lLCBvcGFyZyk7CisgICAg fSBlbHNlIGlmIChNQVRDSF9PUFRJT04oInZpZm5hbWUiLCB0b2tlbiwgb3BhcmcpKSB7CisgICAg ICAgIHJlcGxhY2Vfc3RyaW5nKCZuaWMtPmlmbmFtZSwgb3BhcmcpOworICAgIH0gZWxzZSBpZiAo TUFUQ0hfT1BUSU9OKCJtb2RlbCIsIHRva2VuLCBvcGFyZykpIHsKKyAgICAgICAgcmVwbGFjZV9z dHJpbmcoJm5pYy0+bW9kZWwsIG9wYXJnKTsKKyAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigi cmF0ZSIsIHRva2VuLCBvcGFyZykpIHsKKyAgICAgICAgcGFyc2VfdmlmX3JhdGUoY29uZmlnLCBv cGFyZywgbmljKTsKKyAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigiZm9yd2FyZGRldiIsIHRv a2VuLCBvcGFyZykpIHsKKyAgICAgICAgcmVwbGFjZV9zdHJpbmcoJm5pYy0+Y29sb2Z0X2Zvcndh cmRkZXYsIG9wYXJnKTsKKyAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigiYWNjZWwiLCB0b2tl biwgb3BhcmcpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAidGhlIGFjY2VsIHBhcmFtZXRl ciBmb3IgdmlmcyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZFxuIik7CisgICAgfSBlbHNlIGlm IChNQVRDSF9PUFRJT04oImRldmlkIiwgdG9rZW4sIG9wYXJnKSkgeworICAgICAgICBuaWMtPmRl dmlkID0gcGFyc2VfdWxvbmcob3BhcmcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZwcmludGYo c3RkZXJyLCAidW5yZWNvZ25pemVkIGFyZ3VtZW50IGAlcydcbiIsIHRva2VuKTsKKyAgICAgICAg cmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV92 bnVtYV9jb25maWcoY29uc3QgWExVX0NvbmZpZyAqY29uZmlnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8pCit7CisgICAgbGli eGxfcGh5c2luZm8gcGh5c2luZm87CisgICAgdWludDMyX3QgbnJfbm9kZXM7CisgICAgWExVX0Nv bmZpZ0xpc3QgKnZudW1hOworICAgIGludCBpLCBqLCBsZW4sIG51bV92bnVtYTsKKyAgICB1bnNp Z25lZCBsb25nIG1heF92Y3B1cyA9IDAsIG1heF9tZW1rYiA9IDA7CisgICAgLyogVGVtcG9yYXJ5 IHN0b3JhZ2UgZm9yIHBhcnNlZCB2Y3B1cyBpbmZvcm1hdGlvbiB0byBhdm9pZAorICAgICAqIHBh cnNpbmcgY29uZmlnIHR3aWNlLiBUaGlzIGFycmF5IGhhcyBudW1fdm51bWEgZWxlbWVudHMuCisg ICAgICovCisgICAgbGlieGxfYml0bWFwICp2Y3B1X3BhcnNlZDsKKworICAgIGxpYnhsX3BoeXNp bmZvX2luaXQoJnBoeXNpbmZvKTsKKyAgICBpZiAobGlieGxfZ2V0X3BoeXNpbmZvKGN0eCwgJnBo eXNpbmZvKSAhPSAwKSB7CisgICAgICAgIGxpYnhsX3BoeXNpbmZvX2Rpc3Bvc2UoJnBoeXNpbmZv KTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9nZXRfcGh5c2luZm8gZmFpbGVkXG4i KTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIG5yX25vZGVzID0g cGh5c2luZm8ubnJfbm9kZXM7CisgICAgbGlieGxfcGh5c2luZm9fZGlzcG9zZSgmcGh5c2luZm8p OworCisgICAgaWYgKHhsdV9jZmdfZ2V0X2xpc3QoY29uZmlnLCAidm51bWEiLCAmdm51bWEsICZu dW1fdm51bWEsIDEpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW51bV92bnVtYSkKKyAg ICAgICAgcmV0dXJuOworCisgICAgYl9pbmZvLT5udW1fdm51bWFfbm9kZXMgPSBudW1fdm51bWE7 CisgICAgYl9pbmZvLT52bnVtYV9ub2RlcyA9IHhjYWxsb2MobnVtX3ZudW1hLCBzaXplb2YobGli eGxfdm5vZGVfaW5mbykpOworICAgIHZjcHVfcGFyc2VkID0geGNhbGxvYyhudW1fdm51bWEsIHNp emVvZihsaWJ4bF9iaXRtYXApKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3ZudW1hOyBpKysp IHsKKyAgICAgICAgbGlieGxfYml0bWFwX2luaXQoJnZjcHVfcGFyc2VkW2ldKTsKKyAgICAgICAg aWYgKGxpYnhsX2NwdV9iaXRtYXBfYWxsb2MoY3R4LCAmdmNwdV9wYXJzZWRbaV0sIGJfaW5mby0+ bWF4X3ZjcHVzKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9ub2RlX2Jp dG1hcF9hbGxvYyBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsK KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBiX2luZm8tPm51bV92bnVt YV9ub2RlczsgaSsrKSB7CisgICAgICAgIGxpYnhsX3Zub2RlX2luZm8gKnAgPSAmYl9pbmZvLT52 bnVtYV9ub2Rlc1tpXTsKKworICAgICAgICBsaWJ4bF92bm9kZV9pbmZvX2luaXQocCk7CisgICAg ICAgIHAtPmRpc3RhbmNlcyA9IHhjYWxsb2MoYl9pbmZvLT5udW1fdm51bWFfbm9kZXMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpwLT5kaXN0YW5jZXMpKTsKKyAgICAg ICAgcC0+bnVtX2Rpc3RhbmNlcyA9IGJfaW5mby0+bnVtX3ZudW1hX25vZGVzOworICAgIH0KKwor ICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdm51bWE7IGkrKykgeworICAgICAgICBYTFVfQ29uZmln VmFsdWUgKnZub2RlX3NwZWMsICpjb25mX29wdGlvbjsKKyAgICAgICAgWExVX0NvbmZpZ0xpc3Qg KnZub2RlX2NvbmZpZ19saXN0OworICAgICAgICBpbnQgY29uZl9jb3VudDsKKyAgICAgICAgbGli eGxfdm5vZGVfaW5mbyAqcCA9ICZiX2luZm8tPnZudW1hX25vZGVzW2ldOworCisgICAgICAgIHZu b2RlX3NwZWMgPSB4bHVfY2ZnX2dldF9saXN0aXRlbTIodm51bWEsIGkpOworICAgICAgICBhc3Nl cnQodm5vZGVfc3BlYyk7CisKKyAgICAgICAgeGx1X2NmZ192YWx1ZV9nZXRfbGlzdChjb25maWcs IHZub2RlX3NwZWMsICZ2bm9kZV9jb25maWdfbGlzdCwgMCk7CisgICAgICAgIGlmICghdm5vZGVf Y29uZmlnX2xpc3QpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAieGw6IGNhbm5vdCBn ZXQgdm5vZGUgY29uZmlnIG9wdGlvbiBsaXN0XG4iKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9G QUlMVVJFKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoY29uZl9jb3VudCA9IDA7CisgICAg ICAgICAgICAgKGNvbmZfb3B0aW9uID0KKyAgICAgICAgICAgICAgeGx1X2NmZ19nZXRfbGlzdGl0 ZW0yKHZub2RlX2NvbmZpZ19saXN0LCBjb25mX2NvdW50KSk7CisgICAgICAgICAgICAgY29uZl9j b3VudCsrKSB7CisKKyAgICAgICAgICAgIGlmICh4bHVfY2ZnX3ZhbHVlX3R5cGUoY29uZl9vcHRp b24pID09IFhMVV9TVFJJTkcpIHsKKyAgICAgICAgICAgICAgICBjaGFyICpidWYsICpvcHRpb25f dW50cmltbWVkLCAqdmFsdWVfdW50cmltbWVkOworICAgICAgICAgICAgICAgIGNoYXIgKm9wdGlv biwgKnZhbHVlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsOworCisgICAgICAg ICAgICAgICAgeGx1X2NmZ192YWx1ZV9nZXRfc3RyaW5nKGNvbmZpZywgY29uZl9vcHRpb24sICZi dWYsIDApOworCisgICAgICAgICAgICAgICAgaWYgKCFidWYpIGNvbnRpbnVlOworCisgICAgICAg ICAgICAgICAgaWYgKHNwbGl0X3N0cmluZ19pbnRvX3BhaXIoYnVmLCAiPSIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbl91bnRyaW1tZWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlX3VudHJpbW1lZCkp IHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ4bDogZmFpbGVkIHRvIHNw bGl0IFwiJXNcIiBpbnRvIHBhaXJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm KTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICB0cmltKGlzc3BhY2UsIG9wdGlvbl91bnRyaW1tZWQsICZv cHRpb24pOworICAgICAgICAgICAgICAgIHRyaW0oaXNzcGFjZSwgdmFsdWVfdW50cmltbWVkLCAm dmFsdWUpOworCisgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAoInBub2RlIiwgb3B0aW9uKSkg eworICAgICAgICAgICAgICAgICAgICB2YWwgPSBwYXJzZV91bG9uZyh2YWx1ZSk7CisgICAgICAg ICAgICAgICAgICAgIGlmICh2YWwgPj0gbnJfbm9kZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieGw6 IGludmFsaWQgcG5vZGUgbnVtYmVyOiAlbHVcbiIsIHZhbCk7CisgICAgICAgICAgICAgICAgICAg ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgcC0+cG5vZGUgPSB2YWw7CisgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rl ZmJvb2xfc2V0KCZiX2luZm8tPm51bWFfcGxhY2VtZW50LCBmYWxzZSk7CisgICAgICAgICAgICAg ICAgfSBlbHNlIGlmICghc3RyY21wKCJzaXplIiwgb3B0aW9uKSkgeworICAgICAgICAgICAgICAg ICAgICB2YWwgPSBwYXJzZV91bG9uZyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHAtPm1l bWtiID0gdmFsIDw8IDEwOworICAgICAgICAgICAgICAgICAgICBtYXhfbWVta2IgKz0gcC0+bWVt a2I7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKCJ2Y3B1cyIsIG9wdGlvbikp IHsKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfc3RyaW5nX2xpc3QgY3B1X3NwZWNfbGlzdDsK KyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzLCBlOworCisgICAgICAgICAgICAg ICAgICAgIHNwbGl0X3N0cmluZ19pbnRvX3N0cmluZ19saXN0KHZhbHVlLCAiLCIsICZjcHVfc3Bl Y19saXN0KTsKKyAgICAgICAgICAgICAgICAgICAgbGVuID0gbGlieGxfc3RyaW5nX2xpc3RfbGVu Z3RoKCZjcHVfc3BlY19saXN0KTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBq IDwgbGVuOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX3JhbmdlKGNwdV9z cGVjX2xpc3Rbal0sICZzLCAmZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcyA8 PSBlOyBzKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqIE5vdGUgdGhhdCBpZiB3ZSB0cnkgdG8gc2V0IGEgYml0IGJleW9u ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBzaXplIG9mIGJpdG1hcCwgbGli eGxfYml0bWFwX3NldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGhhcyBubyBlZmZl Y3QuIFRoZSByZXN1bHRlZCBiaXRtYXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBk b2Vzbid0IHJlZmxlY3Qgd2hhdCB1c2VyIHdhbnRzLiBUaGUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKiBmYWxsb3V0IGlzIGRlYWx0IHdpdGggbGF0ZXIgYWZ0ZXIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKiBwYXJzaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2JpdG1hcF9zZXQoJnZjcHVf cGFyc2VkW2ldLCBzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfdmNwdXMrKzsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgICAgICAgIGxpYnhsX3N0cmluZ19saXN0X2Rpc3Bvc2UoJmNwdV9zcGVjX2xpc3Qp OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCgidmRpc3RhbmNlcyIsIG9wdGlv bikpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfc3RyaW5nX2xpc3QgdmRpc3Q7CisKKyAg ICAgICAgICAgICAgICAgICAgc3BsaXRfc3RyaW5nX2ludG9fc3RyaW5nX2xpc3QodmFsdWUsICIs IiwgJnZkaXN0KTsKKyAgICAgICAgICAgICAgICAgICAgbGVuID0gbGlieGxfc3RyaW5nX2xpc3Rf bGVuZ3RoKCZ2ZGlzdCk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxl bjsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBwYXJzZV91bG9uZyh2ZGlz dFtqXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwLT5kaXN0YW5jZXNbal0gPSB2YWw7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGlieGxfc3RyaW5nX2xp c3RfZGlzcG9zZSgmdmRpc3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBm cmVlKG9wdGlvbik7CisgICAgICAgICAgICAgICAgZnJlZSh2YWx1ZSk7CisgICAgICAgICAgICAg ICAgZnJlZShvcHRpb25fdW50cmltbWVkKTsKKyAgICAgICAgICAgICAgICBmcmVlKHZhbHVlX3Vu dHJpbW1lZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBVc2Vy IGhhcyBzcGVjaWZpZWQgbWF4dmNwdXM9ICovCisgICAgaWYgKGJfaW5mby0+bWF4X3ZjcHVzICE9 IDApIHsKKyAgICAgICAgaWYgKGJfaW5mby0+bWF4X3ZjcHVzICE9IG1heF92Y3B1cykgeworICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ4bDogdm51bWEgdmNwdXMgYW5kIG1heHZjcHVzPSBt aXNtYXRjaFxuIik7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0K KyAgICB9IGVsc2UgeworICAgICAgICBpbnQgaG9zdF9jcHVzID0gbGlieGxfZ2V0X29ubGluZV9j cHVzKGN0eCk7CisKKyAgICAgICAgaWYgKGhvc3RfY3B1cyA8IDApIHsKKyAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGdldCBvbmxpbmUgY3B1c1xuIik7CisgICAgICAgICAg ICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaG9zdF9jcHVz IDwgbWF4X3ZjcHVzKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInhsOiB2bnVtYSBz cGVjaWZpZXMgbW9yZSB2Y3B1cyB0aGFuIHBjcHVzLCAiXAorICAgICAgICAgICAgICAgICAgICAi dXNlIG1heHZjcHVzPSB0byBvdmVycmlkZSB0aGlzIGNoZWNrLlxuIik7CisgICAgICAgICAgICBl eGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICBiX2luZm8tPm1heF92Y3B1 cyA9IG1heF92Y3B1czsKKyAgICB9CisKKyAgICAvKiBVc2VyIGhhcyBzcGVjaWZpZWQgbWF4bWVt PSAqLworICAgIGlmIChiX2luZm8tPm1heF9tZW1rYiAhPSBMSUJYTF9NRU1LQl9ERUZBVUxUICYm CisgICAgICAgIGJfaW5mby0+bWF4X21lbWtiICE9IG1heF9tZW1rYikgeworICAgICAgICBmcHJp bnRmKHN0ZGVyciwgInhsOiBtYXhtZW0gYW5kIHZudW1hIG1lbW9yeSBzaXplIG1pc21hdGNoXG4i KTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0gZWxzZQorICAgICAgICBiX2lu Zm8tPm1heF9tZW1rYiA9IG1heF9tZW1rYjsKKworICAgIGZvciAoaSA9IDA7IGkgPCBiX2luZm8t Pm51bV92bnVtYV9ub2RlczsgaSsrKSB7CisgICAgICAgIGxpYnhsX3Zub2RlX2luZm8gKnAgPSAm Yl9pbmZvLT52bnVtYV9ub2Rlc1tpXTsKKworICAgICAgICBsaWJ4bF9iaXRtYXBfY29weV9hbGxv YyhjdHgsICZwLT52Y3B1cywgJnZjcHVfcGFyc2VkW2ldKTsKKyAgICAgICAgbGlieGxfYml0bWFw X2Rpc3Bvc2UoJnZjcHVfcGFyc2VkW2ldKTsKKyAgICB9CisKKyAgICBmcmVlKHZjcHVfcGFyc2Vk KTsKK30KKworLyogUGFyc2VzIHVzYmN0cmwgZGF0YSBhbmQgYWRkcyBpbmZvIGludG8gdXNiY3Ry bAorICogUmV0dXJucyAxIGlmIHRoZSBpbnB1dCB0b2tlbiBkb2VzIG5vdCBtYXRjaCBvbmUgb2Yg dGhlIGtleXMKKyAqIG9yIHBhcnNlZCB2YWx1ZXMgYXJlIG5vdCBjb3JyZWN0LiBTdWNjZXNzZnVs IHBhcnNlIHJldHVybnMgMCAqLworaW50IHBhcnNlX3VzYmN0cmxfY29uZmlnKGxpYnhsX2Rldmlj ZV91c2JjdHJsICp1c2JjdHJsLCBjaGFyICp0b2tlbikKK3sKKyAgICBjaGFyICpvcGFyZzsKKwor ICAgIGlmIChNQVRDSF9PUFRJT04oInR5cGUiLCB0b2tlbiwgb3BhcmcpKSB7CisgICAgICAgIGlm IChsaWJ4bF91c2JjdHJsX3R5cGVfZnJvbV9zdHJpbmcob3BhcmcsICZ1c2JjdHJsLT50eXBlKSkg eworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHVzYiBjb250cm9sbGVyIHR5 cGUgJyVzJ1xuIiwgb3BhcmcpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAg ICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigidmVyc2lvbiIsIHRva2VuLCBvcGFyZykpIHsKKyAg ICAgICAgdXNiY3RybC0+dmVyc2lvbiA9IGF0b2kob3BhcmcpOworICAgIH0gZWxzZSBpZiAoTUFU Q0hfT1BUSU9OKCJwb3J0cyIsIHRva2VuLCBvcGFyZykpIHsKKyAgICAgICAgdXNiY3RybC0+cG9y dHMgPSBhdG9pKG9wYXJnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IlVua25vd24gc3RyaW5nIGAlcycgaW4gdXNiY3RybCBzcGVjXG4iLCB0b2tlbik7CisgICAgICAg IHJldHVybiAxOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKiBQYXJzZXMgdXNiZGV2 IGRhdGEgYW5kIGFkZHMgaW5mbyBpbnRvIHVzYmRldgorICogUmV0dXJucyAxIGlmIHRoZSBpbnB1 dCB0b2tlbiBkb2VzIG5vdCBtYXRjaCBvbmUgb2YgdGhlIGtleXMKKyAqIG9yIHBhcnNlZCB2YWx1 ZXMgYXJlIG5vdCBjb3JyZWN0LiBTdWNjZXNzZnVsIHBhcnNlIHJldHVybnMgMCAqLworaW50IHBh cnNlX3VzYmRldl9jb25maWcobGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2LCBjaGFyICp0b2tl bikKK3sKKyAgICBjaGFyICpvcGFyZzsKKworICAgIGlmIChNQVRDSF9PUFRJT04oInR5cGUiLCB0 b2tlbiwgb3BhcmcpKSB7CisgICAgICAgIGlmIChsaWJ4bF91c2JkZXZfdHlwZV9mcm9tX3N0cmlu ZyhvcGFyZywgJnVzYmRldi0+dHlwZSkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi SW52YWxpZCB1c2IgZGV2aWNlIHR5cGU6ICVzXG4iLCBvcHRhcmcpOworICAgICAgICAgICAgcmV0 dXJuIDE7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigiaG9zdGJ1cyIs IHRva2VuLCBvcGFyZykpIHsKKyAgICAgICAgdXNiZGV2LT51Lmhvc3RkZXYuaG9zdGJ1cyA9IHN0 cnRvdWwob3BhcmcsIE5VTEwsIDApOworICAgIH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9OKCJob3N0 YWRkciIsIHRva2VuLCBvcGFyZykpIHsKKyAgICAgICAgdXNiZGV2LT51Lmhvc3RkZXYuaG9zdGFk ZHIgPSBzdHJ0b3VsKG9wYXJnLCBOVUxMLCAwKTsKKyAgICB9IGVsc2UgaWYgKE1BVENIX09QVElP TigiY29udHJvbGxlciIsIHRva2VuLCBvcGFyZykpIHsKKyAgICAgICAgdXNiZGV2LT5jdHJsID0g YXRvaShvcGFyZyk7CisgICAgfSBlbHNlIGlmIChNQVRDSF9PUFRJT04oInBvcnQiLCB0b2tlbiwg b3BhcmcpKSB7CisgICAgICAgIHVzYmRldi0+cG9ydCA9IGF0b2kob3BhcmcpOworICAgIH0gZWxz ZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBzdHJpbmcgYCVzJyBpbiB1c2Jk ZXYgc3BlY1xuIiwgdG9rZW4pOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1 cm4gMDsKK30KKwordm9pZCBwYXJzZV9jb25maWdfZGF0YShjb25zdCBjaGFyICpjb25maWdfc291 cmNlLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb25maWdfZGF0YSwKKyAg ICAgICAgICAgICAgICAgICAgICAgaW50IGNvbmZpZ19sZW4sCisgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmlnKQoreworICAgIGNvbnN0IGNoYXIgKmJ1 ZjsKKyAgICBsb25nIGwsIHZjcHVzID0gMDsKKyAgICBYTFVfQ29uZmlnICpjb25maWc7CisgICAg WExVX0NvbmZpZ0xpc3QgKmNwdXMsICp2YmRzLCAqbmljcywgKnBjaXMsICpjdmZicywgKmNwdWlk cywgKnZ0cG1zLAorICAgICAgICAgICAgICAgICAgICp1c2JjdHJscywgKnVzYmRldnM7CisgICAg WExVX0NvbmZpZ0xpc3QgKmNoYW5uZWxzLCAqaW9wb3J0cywgKmlycXMsICppb21lbSwgKnZpcmlk aWFuLCAqZHRkZXZzOworICAgIGludCBudW1faW9wb3J0cywgbnVtX2lycXMsIG51bV9pb21lbSwg bnVtX2NwdXMsIG51bV92aXJpZGlhbjsKKyAgICBpbnQgcGNpX3Bvd2VyX21nbXQgPSAwOworICAg IGludCBwY2lfbXNpdHJhbnNsYXRlID0gMDsKKyAgICBpbnQgcGNpX3Blcm1pc3NpdmUgPSAwOwor ICAgIGludCBwY2lfc2VpemUgPSAwOworICAgIGludCBpLCBlOworICAgIGNoYXIgKmtlcm5lbF9i YXNlbmFtZTsKKworICAgIGxpYnhsX2RvbWFpbl9jcmVhdGVfaW5mbyAqY19pbmZvID0gJmRfY29u ZmlnLT5jX2luZm87CisgICAgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmJfaW5mbyA9ICZkX2Nv bmZpZy0+Yl9pbmZvOworCisgICAgY29uZmlnPSB4bHVfY2ZnX2luaXQoc3RkZXJyLCBjb25maWdf c291cmNlKTsKKyAgICBpZiAoIWNvbmZpZykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZh aWxlZCB0byBhbGxvY2F0ZSBmb3IgY29uZmlndXJhdGlvblxuIik7CisgICAgICAgIGV4aXQoMSk7 CisgICAgfQorCisgICAgZT0geGx1X2NmZ19yZWFkZGF0YShjb25maWcsIGNvbmZpZ19kYXRhLCBj b25maWdfbGVuKTsKKyAgICBpZiAoZSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxl ZCB0byBwYXJzZSBjb25maWc6ICVzXG4iLCBzdHJlcnJvcihlKSk7CisgICAgICAgIGV4aXQoMSk7 CisgICAgfQorCisgICAgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZpZywgImluaXRfc2Vj bGFiZWwiLCAmYnVmLCAwKSkKKyAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmluZyhjb25maWcs ICJpbml0X3NlY2xhYmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY19pbmZv LT5zc2lkX2xhYmVsLCAwKTsKKworICAgIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcs ICJzZWNsYWJlbCIsICZidWYsIDApKSB7CisgICAgICAgIGlmIChjX2luZm8tPnNzaWRfbGFiZWwp CisgICAgICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nKGNvbmZpZywgInNlY2xhYmVsIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+ZXhlY19zc2lkX2xh YmVsLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgeGx1X2NmZ19yZXBsYWNlX3N0cmlu Zyhjb25maWcsICJzZWNsYWJlbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZjX2luZm8tPnNzaWRfbGFiZWwsIDApOworICAgIH0KKworICAgIGxpYnhsX2RlZmJvb2xfc2V0 KCZjX2luZm8tPnJ1bl9ob3RwbHVnX3NjcmlwdHMsIHJ1bl9ob3RwbHVnX3NjcmlwdHMpOworICAg IGNfaW5mby0+dHlwZSA9IExJQlhMX0RPTUFJTl9UWVBFX1BWOworICAgIGlmICgheGx1X2NmZ19n ZXRfc3RyaW5nIChjb25maWcsICJidWlsZGVyIiwgJmJ1ZiwgMCkgJiYKKyAgICAgICAgIXN0cm5j bXAoYnVmLCAiaHZtIiwgc3RybGVuKGJ1ZikpKQorICAgICAgICBjX2luZm8tPnR5cGUgPSBMSUJY TF9ET01BSU5fVFlQRV9IVk07CisKKyAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgInB2 aCIsICZjX2luZm8tPnB2aCwgMCk7CisgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJo YXAiLCAmY19pbmZvLT5oYXAsIDApOworCisgICAgaWYgKHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcg KGNvbmZpZywgIm5hbWUiLCAmY19pbmZvLT5uYW1lLCAwKSkgeworICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIkRvbWFpbiBuYW1lIG11c3QgYmUgc3BlY2lmaWVkLlxuIik7CisgICAgICAgIGV4aXQo MSk7CisgICAgfQorCisgICAgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcgKGNvbmZpZywgInV1aWQi LCAmYnVmLCAwKSApIHsKKyAgICAgICAgaWYgKCBsaWJ4bF91dWlkX2Zyb21fc3RyaW5nKCZjX2lu Zm8tPnV1aWQsIGJ1ZikgKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0 byBwYXJzZSBVVUlEOiAlc1xuIiwgYnVmKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAg IH0KKyAgICB9ZWxzZXsKKyAgICAgICAgbGlieGxfdXVpZF9nZW5lcmF0ZSgmY19pbmZvLT51dWlk KTsKKyAgICB9CisKKyAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgIm9vcyIsICZjX2lu Zm8tPm9vcywgMCk7CisKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAicG9v bCIsICZidWYsIDApKQorICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nKGNvbmZpZywgInBv b2wiLCAmY19pbmZvLT5wb29sX25hbWUsIDApOworCisgICAgbGlieGxfZG9tYWluX2J1aWxkX2lu Zm9faW5pdF90eXBlKGJfaW5mbywgY19pbmZvLT50eXBlKTsKKyAgICBpZiAoYmxrZGV2X3N0YXJ0 KQorICAgICAgICBiX2luZm8tPmJsa2Rldl9zdGFydCA9IHN0cmR1cChibGtkZXZfc3RhcnQpOwor CisgICAgLyogdGhlIGZvbGxvd2luZyBpcyB0aGUgYWN0dWFsIGNvbmZpZyBwYXJzaW5nIHdpdGgg b3ZlcnJpZGluZworICAgICAqIHZhbHVlcyBpbiB0aGUgc3RydWN0dXJlcyAqLworICAgIGlmICgh eGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAiY3B1X3dlaWdodCIsICZsLCAwKSkKKyAgICAgICAg Yl9pbmZvLT5zY2hlZF9wYXJhbXMud2VpZ2h0ID0gbDsKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xv bmcgKGNvbmZpZywgImNhcCIsICZsLCAwKSkKKyAgICAgICAgYl9pbmZvLT5zY2hlZF9wYXJhbXMu Y2FwID0gbDsKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywgInBlcmlvZCIsICZs LCAwKSkKKyAgICAgICAgYl9pbmZvLT5zY2hlZF9wYXJhbXMucGVyaW9kID0gbDsKKyAgICBpZiAo IXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywgInNsaWNlIiwgJmwsIDApKQorICAgICAgICBiX2lu Zm8tPnNjaGVkX3BhcmFtcy5zbGljZSA9IGw7CisgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChj b25maWcsICJsYXRlbmN5IiwgJmwsIDApKQorICAgICAgICBiX2luZm8tPnNjaGVkX3BhcmFtcy5s YXRlbmN5ID0gbDsKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywgImV4dHJhdGlt ZSIsICZsLCAwKSkKKyAgICAgICAgYl9pbmZvLT5zY2hlZF9wYXJhbXMuZXh0cmF0aW1lID0gbDsK KworICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29uZmlnLCAibWVtb3J5IiwgJmwsIDApKQor ICAgICAgICBiX2luZm8tPnRhcmdldF9tZW1rYiA9IGwgKiAxMDI0OworCisgICAgaWYgKCF4bHVf Y2ZnX2dldF9sb25nIChjb25maWcsICJtYXhtZW0iLCAmbCwgMCkpCisgICAgICAgIGJfaW5mby0+ bWF4X21lbWtiID0gbCAqIDEwMjQ7CisKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZp ZywgInZjcHVzIiwgJmwsIDApKSB7CisgICAgICAgIHZjcHVzID0gbDsKKyAgICAgICAgaWYgKGxp YnhsX2NwdV9iaXRtYXBfYWxsb2MoY3R4LCAmYl9pbmZvLT5hdmFpbF92Y3B1cywgbCkpIHsKKyAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGNwdW1hcFxuIik7 CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICAgIGxpYnhsX2JpdG1hcF9z ZXRfbm9uZSgmYl9pbmZvLT5hdmFpbF92Y3B1cyk7CisgICAgICAgIHdoaWxlIChsLS0gPiAwKQor ICAgICAgICAgICAgbGlieGxfYml0bWFwX3NldCgoJmJfaW5mby0+YXZhaWxfdmNwdXMpLCBsKTsK KyAgICB9CisKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywgIm1heHZjcHVzIiwg JmwsIDApKQorICAgICAgICBiX2luZm8tPm1heF92Y3B1cyA9IGw7CisKKyAgICBwYXJzZV92bnVt YV9jb25maWcoY29uZmlnLCBiX2luZm8pOworCisgICAgLyogU2V0IG1heF9tZW1rYiB0byB0YXJn ZXRfbWVta2IgYW5kIG1heF92Y3B1cyB0byBhdmFpbF92Y3B1cyBpZgorICAgICAqIHRoZXkgYXJl IG5vdCBzZXQgYnkgdXNlciBzcGVjaWZpZWQgY29uZmlnIG9wdGlvbiBvciB2bnVtYS4KKyAgICAg Ki8KKyAgICBpZiAoYl9pbmZvLT5tYXhfbWVta2IgPT0gTElCWExfTUVNS0JfREVGQVVMVCkKKyAg ICAgICAgYl9pbmZvLT5tYXhfbWVta2IgPSBiX2luZm8tPnRhcmdldF9tZW1rYjsKKyAgICBpZiAo Yl9pbmZvLT5tYXhfdmNwdXMgPT0gMCkKKyAgICAgICAgYl9pbmZvLT5tYXhfdmNwdXMgPSB2Y3B1 czsKKworICAgIGlmIChiX2luZm8tPm1heF92Y3B1cyA8IHZjcHVzKSB7CisgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAieGw6IG1heHZjcHVzIDwgdmNwdXNcbiIpOworICAgICAgICBleGl0KDEpOwor ICAgIH0KKworICAgIGJ1ZiA9IE5VTEw7CisgICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0IChjb25m aWcsICJjcHVzIiwgJmNwdXMsICZudW1fY3B1cywgMSkgfHwKKyAgICAgICAgIXhsdV9jZmdfZ2V0 X3N0cmluZyAoY29uZmlnLCAiY3B1cyIsICZidWYsIDApKQorICAgICAgICBwYXJzZV92Y3B1X2Fm ZmluaXR5KGJfaW5mbywgY3B1cywgYnVmLCBudW1fY3B1cywgLyogaXNfaGFyZCAqLyB0cnVlKTsK KworICAgIGJ1ZiA9IE5VTEw7CisgICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0IChjb25maWcsICJj cHVzX3NvZnQiLCAmY3B1cywgJm51bV9jcHVzLCAxKSB8fAorICAgICAgICAheGx1X2NmZ19nZXRf c3RyaW5nIChjb25maWcsICJjcHVzX3NvZnQiLCAmYnVmLCAwKSkKKyAgICAgICAgcGFyc2VfdmNw dV9hZmZpbml0eShiX2luZm8sIGNwdXMsIGJ1ZiwgbnVtX2NwdXMsIGZhbHNlKTsKKworICAgIGxp YnhsX2RlZmJvb2xfc2V0KCZiX2luZm8tPmNsYWltX21vZGUsIGNsYWltX21vZGUpOworCisgICAg aWYgKHhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAib25fcG93ZXJvZmYiLCAmYnVmLCAwKSkK KyAgICAgICAgYnVmID0gImRlc3Ryb3kiOworICAgIGlmICghcGFyc2VfYWN0aW9uX29uX3NodXRk b3duKGJ1ZiwgJmRfY29uZmlnLT5vbl9wb3dlcm9mZikpIHsKKyAgICAgICAgZnByaW50ZihzdGRl cnIsICJVbmtub3duIG9uX3Bvd2Vyb2ZmIGFjdGlvbiBcIiVzXCIgc3BlY2lmaWVkXG4iLCBidWYp OworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGlmICh4bHVfY2ZnX2dldF9zdHJpbmcg KGNvbmZpZywgIm9uX3JlYm9vdCIsICZidWYsIDApKQorICAgICAgICBidWYgPSAicmVzdGFydCI7 CisgICAgaWYgKCFwYXJzZV9hY3Rpb25fb25fc2h1dGRvd24oYnVmLCAmZF9jb25maWctPm9uX3Jl Ym9vdCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9uX3JlYm9vdCBhY3Rp b24gXCIlc1wiIHNwZWNpZmllZFxuIiwgYnVmKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisK KyAgICBpZiAoeGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJvbl93YXRjaGRvZyIsICZidWYs IDApKQorICAgICAgICBidWYgPSAiZGVzdHJveSI7CisgICAgaWYgKCFwYXJzZV9hY3Rpb25fb25f c2h1dGRvd24oYnVmLCAmZF9jb25maWctPm9uX3dhdGNoZG9nKSkgeworICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIlVua25vd24gb25fd2F0Y2hkb2cgYWN0aW9uIFwiJXNcIiBzcGVjaWZpZWRcbiIs IGJ1Zik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisKKyAgICBpZiAoeGx1X2NmZ19nZXRf c3RyaW5nIChjb25maWcsICJvbl9jcmFzaCIsICZidWYsIDApKQorICAgICAgICBidWYgPSAiZGVz dHJveSI7CisgICAgaWYgKCFwYXJzZV9hY3Rpb25fb25fc2h1dGRvd24oYnVmLCAmZF9jb25maWct Pm9uX2NyYXNoKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb25fY3Jhc2gg YWN0aW9uIFwiJXNcIiBzcGVjaWZpZWRcbiIsIGJ1Zik7CisgICAgICAgIGV4aXQoMSk7CisgICAg fQorCisgICAgaWYgKHhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAib25fc29mdF9yZXNldCIs ICZidWYsIDApKQorICAgICAgICBidWYgPSAic29mdC1yZXNldCI7CisgICAgaWYgKCFwYXJzZV9h Y3Rpb25fb25fc2h1dGRvd24oYnVmLCAmZF9jb25maWctPm9uX3NvZnRfcmVzZXQpKSB7CisgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvbl9zb2Z0X3Jlc2V0IGFjdGlvbiBcIiVzXCIg c3BlY2lmaWVkXG4iLCBidWYpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIC8qIGxp YnhsX2dldF9yZXF1aXJlZF9zaGFkb3dfbWVtb3J5KCkgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgZmlu YWwgdmFsdWVzCisgICAgICogKGRlZmF1bHQgb3Igc3BlY2lmaWVkKSBmb3IgdmNwdXMgYW5kIG1l bW9yeSBhcmUgc2V0LCBiZWNhdXNlIHRoZQorICAgICAqIGNhbGN1bGF0aW9uIGRlcGVuZHMgb24g dGhvc2UgdmFsdWVzLiAqLworICAgIGJfaW5mby0+c2hhZG93X21lbWtiID0gIXhsdV9jZmdfZ2V0 X2xvbmcoY29uZmlnLCAic2hhZG93X21lbW9yeSIsICZsLCAwKQorICAgICAgICA/IGwgKiAxMDI0 CisgICAgICAgIDogbGlieGxfZ2V0X3JlcXVpcmVkX3NoYWRvd19tZW1vcnkoYl9pbmZvLT5tYXhf bWVta2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYl9pbmZv LT5tYXhfdmNwdXMpOworCisgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJub21pZ3Jh dGUiLCAmYl9pbmZvLT5kaXNhYmxlX21pZ3JhdGUsIDApOworCisgICAgaWYgKCF4bHVfY2ZnX2dl dF9sb25nKGNvbmZpZywgInRzY19tb2RlIiwgJmwsIDEpKSB7CisgICAgICAgIGNvbnN0IGNoYXIg KnMgPSBsaWJ4bF90c2NfbW9kZV90b19zdHJpbmcobCk7CisgICAgICAgIGZwcmludGYoc3RkZXJy LCAiV0FSTklORzogc3BlY2lmeWluZyBcInRzY19tb2RlXCIgYXMgYW4gaW50ZWdlciBpcyBkZXBy ZWNhdGVkLiAiCisgICAgICAgICAgICAgICAgIlBsZWFzZSB1c2UgdGhlIG5hbWVkIHBhcmFtZXRl ciB2YXJpYW50LiAlcyVzJXNcbiIsCisgICAgICAgICAgICAgICAgcyA/ICJlLmcuIHRzY19tb2Rl PVwiIiA6ICIiLAorICAgICAgICAgICAgICAgIHMgPyBzIDogIiIsCisgICAgICAgICAgICAgICAg cyA/ICJcIiIgOiAiIik7CisKKyAgICAgICAgaWYgKGwgPCBMSUJYTF9UU0NfTU9ERV9ERUZBVUxU IHx8CisgICAgICAgICAgICBsID4gTElCWExfVFNDX01PREVfTkFUSVZFX1BBUkFWSVJUKSB7Cisg ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBpbnZhbGlkIHZhbHVlICVsZCBmb3Ig XCJ0c2NfbW9kZVwiXG4iLCBsKTsKKyAgICAgICAgICAgIGV4aXQgKDEpOworICAgICAgICB9Cisg ICAgICAgIGJfaW5mby0+dHNjX21vZGUgPSBsOworICAgIH0gZWxzZSBpZiAoIXhsdV9jZmdfZ2V0 X3N0cmluZyhjb25maWcsICJ0c2NfbW9kZSIsICZidWYsIDApKSB7CisgICAgICAgIGZwcmludGYo c3RkZXJyLCAiZ290IGEgdHNjIG1vZGUgc3RyaW5nOiBcIiVzXCJcbiIsIGJ1Zik7CisgICAgICAg IGlmIChsaWJ4bF90c2NfbW9kZV9mcm9tX3N0cmluZyhidWYsICZiX2luZm8tPnRzY19tb2RlKSkg eworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogaW52YWxpZCB2YWx1ZSBcIiVz XCIgZm9yIFwidHNjX21vZGVcIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgYnVmKTsKKyAgICAg ICAgICAgIGV4aXQgKDEpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF4bHVfY2ZnX2dl dF9sb25nKGNvbmZpZywgInJ0Y190aW1lb2Zmc2V0IiwgJmwsIDApKQorICAgICAgICBiX2luZm8t PnJ0Y190aW1lb2Zmc2V0ID0gbDsKKworICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyhjb25maWcs ICJ2bmN2aWV3ZXIiLCAmbCwgMCkpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzog aWdub3JpbmcgXCJ2bmN2aWV3ZXJcIiBvcHRpb24uICIKKyAgICAgICAgICAgICAgICAiVXNlIFwi LVZcIiBvcHRpb24gb2YgXCJ4bCBjcmVhdGVcIiB0byBhdXRvbWF0aWNhbGx5IHNwYXduIHZuY3Zp ZXdlci5cbiIpOworCisgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJsb2NhbHRpbWUi LCAmYl9pbmZvLT5sb2NhbHRpbWUsIDApOworCisgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChj b25maWcsICJ2aWRlb3JhbSIsICZsLCAwKSkKKyAgICAgICAgYl9pbmZvLT52aWRlb19tZW1rYiA9 IGwgKiAxMDI0OworCisgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nKGNvbmZpZywgIm1heF9ldmVu dF9jaGFubmVscyIsICZsLCAwKSkKKyAgICAgICAgYl9pbmZvLT5ldmVudF9jaGFubmVscyA9IGw7 CisKKyAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJrZXJuZWwiLCAmYl9pbmZv LT5rZXJuZWwsIDApOworICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZpZywgInJhbWRp c2siLCAmYl9pbmZvLT5yYW1kaXNrLCAwKTsKKyAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChj b25maWcsICJkZXZpY2VfdHJlZSIsICZiX2luZm8tPmRldmljZV90cmVlLCAwKTsKKyAgICBiX2lu Zm8tPmNtZGxpbmUgPSBwYXJzZV9jbWRsaW5lKGNvbmZpZyk7CisKKyAgICB4bHVfY2ZnX2dldF9k ZWZib29sKGNvbmZpZywgImRyaXZlcl9kb21haW4iLCAmY19pbmZvLT5kcml2ZXJfZG9tYWluLCAw KTsKKyAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgImFjcGkiLCAmYl9pbmZvLT5hY3Bp LCAwKTsKKworICAgIHN3aXRjaChiX2luZm8tPnR5cGUpIHsKKyAgICBjYXNlIExJQlhMX0RPTUFJ Tl9UWVBFX0hWTToKKyAgICAgICAga2VybmVsX2Jhc2VuYW1lID0gbGlieGxfYmFzZW5hbWUoYl9p bmZvLT5rZXJuZWwpOworICAgICAgICBpZiAoIXN0cmNtcChrZXJuZWxfYmFzZW5hbWUsICJodm1s b2FkZXIiKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiB5b3Ugc2Vl bSB0byBiZSB1c2luZyBcImtlcm5lbFwiICIKKyAgICAgICAgICAgICAgICAgICAgImRpcmVjdGl2 ZSB0byBvdmVycmlkZSBIVk0gZ3Vlc3QgZmlybXdhcmUuIElnbm9yZSAiCisgICAgICAgICAgICAg ICAgICAgICJ0aGF0LiBVc2UgXCJmaXJtd2FyZV9vdmVycmlkZVwiIGluc3RlYWQgaWYgeW91ICIK KyAgICAgICAgICAgICAgICAgICAgInJlYWxseSB3YW50IGEgbm9uLWRlZmF1bHQgZmlybXdhcmVc biIpOworICAgICAgICAgICAgYl9pbmZvLT5rZXJuZWwgPSBOVUxMOworICAgICAgICB9CisgICAg ICAgIGZyZWUoa2VybmVsX2Jhc2VuYW1lKTsKKworICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3Ry aW5nIChjb25maWcsICJmaXJtd2FyZV9vdmVycmlkZSIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZiX2luZm8tPnUuaHZtLmZpcm13YXJlLCAwKTsKKyAgICAgICAgeGx1X2NmZ19y ZXBsYWNlX3N0cmluZyAoY29uZmlnLCAiYmlvc19wYXRoX292ZXJyaWRlIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0uc3lzdGVtX2Zpcm13YXJlLCAwKTsK KyAgICAgICAgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcoY29uZmlnLCAiYmlvcyIsICZidWYsIDAp KSB7CisgICAgICAgICAgICBpZiAobGlieGxfYmlvc190eXBlX2Zyb21fc3RyaW5nKGJ1ZiwgJmJf aW5mby0+dS5odm0uYmlvcykpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVS Uk9SOiBpbnZhbGlkIHZhbHVlIFwiJXNcIiBmb3IgXCJiaW9zXCJcbiIsCisgICAgICAgICAgICAg ICAgICAgIGJ1Zik7CisgICAgICAgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0gZWxzZSBpZiAoYl9pbmZvLT51Lmh2bS5zeXN0ZW1fZmlybXdhcmUpCisgICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6ICIKKyAgICAgICAgICAgICAgICAgICAgImJp b3NfcGF0aF9vdmVycmlkZSBnaXZlbiB3aXRob3V0IHNwZWNpZmljIGJpb3MgbmFtZVxuIik7CisK KyAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJwYWUiLCAmYl9pbmZvLT51Lmh2 bS5wYWUsIDApOworICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgImFwaWMiLCAm Yl9pbmZvLT51Lmh2bS5hcGljLCAwKTsKKyAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25m aWcsICJhY3BpX3MzIiwgJmJfaW5mby0+dS5odm0uYWNwaV9zMywgMCk7CisgICAgICAgIHhsdV9j ZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAiYWNwaV9zNCIsICZiX2luZm8tPnUuaHZtLmFjcGlfczQs IDApOworICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgIm54IiwgJmJfaW5mby0+ dS5odm0ubngsIDApOworICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgImhwZXQi LCAmYl9pbmZvLT51Lmh2bS5ocGV0LCAwKTsKKyAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChj b25maWcsICJ2cHRfYWxpZ24iLCAmYl9pbmZvLT51Lmh2bS52cHRfYWxpZ24sIDApOworCisgICAg ICAgIHN3aXRjaCAoeGx1X2NmZ19nZXRfbGlzdChjb25maWcsICJ2aXJpZGlhbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlyaWRpYW4sICZudW1fdmlyaWRpYW4sIDEpKQor ICAgICAgICB7CisgICAgICAgIGNhc2UgMDogLyogU3VjY2VzcyAqLworICAgICAgICAgICAgaWYg KG51bV92aXJpZGlhbikgeworICAgICAgICAgICAgICAgIGxpYnhsX2JpdG1hcF9hbGxvYyhjdHgs ICZiX2luZm8tPnUuaHZtLnZpcmlkaWFuX2VuYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTElCWExfQlVJTERJTkZPX0hWTV9WSVJJRElBTl9FTkFCTEVfRElTQUJMRV9X SURUSCk7CisgICAgICAgICAgICAgICAgbGlieGxfYml0bWFwX2FsbG9jKGN0eCwgJmJfaW5mby0+ dS5odm0udmlyaWRpYW5fZGlzYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTElCWExfQlVJTERJTkZPX0hWTV9WSVJJRElBTl9FTkFCTEVfRElTQUJMRV9XSURUSCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3ZpcmlkaWFuOyBp KyspIHsKKyAgICAgICAgICAgICAgICBsaWJ4bF92aXJpZGlhbl9lbmxpZ2h0ZW5tZW50IHY7CisK KyAgICAgICAgICAgICAgICBidWYgPSB4bHVfY2ZnX2dldF9saXN0aXRlbSh2aXJpZGlhbiwgaSk7 CisgICAgICAgICAgICAgICAgaWYgKHN0cmNtcChidWYsICJhbGwiKSA9PSAwKQorICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9iaXRtYXBfc2V0X2FueSgmYl9pbmZvLT51Lmh2bS52aXJpZGlhbl9l bmFibGUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChidWYsICJkZWZhdWx0cyIp ID09IDApCisgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZiX2luZm8tPnUu aHZtLnZpcmlkaWFuLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgbGlieGxfYml0bWFwICpzID0gJmJfaW5mby0+dS5odm0udmlyaWRpYW5fZW5hYmxl OworICAgICAgICAgICAgICAgICAgICBsaWJ4bF9iaXRtYXAgKnIgPSAmYl9pbmZvLT51Lmh2bS52 aXJpZGlhbl9kaXNhYmxlOworCisgICAgICAgICAgICAgICAgICAgIGlmICgqYnVmID09ICchJykg eworICAgICAgICAgICAgICAgICAgICAgICAgcyA9ICZiX2luZm8tPnUuaHZtLnZpcmlkaWFuX2Rp c2FibGU7CisgICAgICAgICAgICAgICAgICAgICAgICByID0gJmJfaW5mby0+dS5odm0udmlyaWRp YW5fZW5hYmxlOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmKys7CisgICAgICAgICAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBlID0gbGlieGxfdmlyaWRpYW5fZW5saWdo dGVubWVudF9mcm9tX3N0cmluZyhidWYsICZ2KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGUp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAieGw6IHVua25vd24gdmlyaWRpYW4gZW5saWdodGVubWVudCAn JXMnXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYpOworICAgICAgICAg ICAgICAgICAgICAgICAgZXhpdCgtRVJST1JfRkFJTCk7CisgICAgICAgICAgICAgICAgICAgIH0K KworICAgICAgICAgICAgICAgICAgICBsaWJ4bF9iaXRtYXBfc2V0KHMsIHYpOworICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9iaXRtYXBfcmVzZXQociwgdik7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVNSQ0g6IGJy ZWFrOyAvKiBPcHRpb24gbm90IHByZXNlbnQgKi8KKyAgICAgICAgY2FzZSBFSU5WQUw6CisgICAg ICAgICAgICB4bHVfY2ZnX2dldF9kZWZib29sKGNvbmZpZywgInZpcmlkaWFuIiwgJmJfaW5mby0+ dS5odm0udmlyaWRpYW4sIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6 CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwieGw6IFVuYWJsZSB0byBwYXJzZSB2aXJpZGlh biBlbmxpZ2h0ZW5tZW50cy5cbiIpOworICAgICAgICAgICAgZXhpdCgtRVJST1JfRkFJTCk7Cisg ICAgICAgIH0KKworICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcoY29uZmlnLCAibW1pb19o b2xlIiwgJmwsIDApKSB7CisgICAgICAgICAgICB1aW50NjRfdCBtbWlvX2hvbGVfc2l6ZTsKKwor ICAgICAgICAgICAgYl9pbmZvLT51Lmh2bS5tbWlvX2hvbGVfbWVta2IgPSBsICogMTAyNDsKKyAg ICAgICAgICAgIG1taW9faG9sZV9zaXplID0gYl9pbmZvLT51Lmh2bS5tbWlvX2hvbGVfbWVta2Ig KiAxMDI0OworICAgICAgICAgICAgaWYgKG1taW9faG9sZV9zaXplIDwgSFZNX0JFTE9XXzRHX01N SU9fTEVOR1RIIHx8CisgICAgICAgICAgICAgICAgbW1pb19ob2xlX3NpemUgPiBIVk1fQkVMT1df NEdfTU1JT19TVEFSVCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAg ICAgICAgICAgICAgICAgICAgIkVSUk9SOiBpbnZhbGlkIHZhbHVlICVsZCBmb3IgXCJtbWlvX2hv bGVcIlxuIiwgbCk7CisgICAgICAgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nKGNvbmZpZywgInRpbWVyX21v ZGUiLCAmbCwgMSkpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMgPSBsaWJ4bF90aW1lcl9t b2RlX3RvX3N0cmluZyhsKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzog c3BlY2lmeWluZyBcInRpbWVyX21vZGVcIiBhcyBhbiBpbnRlZ2VyIGlzIGRlcHJlY2F0ZWQuICIK KyAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSB1c2UgdGhlIG5hbWVkIHBhcmFtZXRlciB2YXJp YW50LiAlcyVzJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHMgPyAiZS5nLiB0aW1lcl9tb2Rl PVwiIiA6ICIiLAorICAgICAgICAgICAgICAgICAgICBzID8gcyA6ICIiLAorICAgICAgICAgICAg ICAgICAgICBzID8gIlwiIiA6ICIiKTsKKworICAgICAgICAgICAgaWYgKGwgPCBMSUJYTF9USU1F Ul9NT0RFX0RFTEFZX0ZPUl9NSVNTRURfVElDS1MgfHwKKyAgICAgICAgICAgICAgICBsID4gTElC WExfVElNRVJfTU9ERV9PTkVfTUlTU0VEX1RJQ0tfUEVORElORykgeworICAgICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGludmFsaWQgdmFsdWUgJWxkIGZvciBcInRpbWVyX21v ZGVcIlxuIiwgbCk7CisgICAgICAgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBiX2luZm8tPnUuaHZtLnRpbWVyX21vZGUgPSBsOworICAgICAgICB9IGVsc2Ug aWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcoY29uZmlnLCAidGltZXJfbW9kZSIsICZidWYsIDApKSB7 CisgICAgICAgICAgICBpZiAobGlieGxfdGltZXJfbW9kZV9mcm9tX3N0cmluZyhidWYsICZiX2lu Zm8tPnUuaHZtLnRpbWVyX21vZGUpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJFUlJPUjogaW52YWxpZCB2YWx1ZSBcIiVzXCIgZm9yIFwidGltZXJfbW9kZVwiXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgYnVmKTsKKyAgICAgICAgICAgICAgICBleGl0ICgxKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29u ZmlnLCAibmVzdGVkaHZtIiwgJmJfaW5mby0+dS5odm0ubmVzdGVkX2h2bSwgMCk7CisKKyAgICAg ICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJhbHRwMm1odm0iLCAmYl9pbmZvLT51Lmh2 bS5hbHRwMm0sIDApOworCisgICAgICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcoY29uZmlnLCAi c21iaW9zX2Zpcm13YXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZv LT51Lmh2bS5zbWJpb3NfZmlybXdhcmUsIDApOworICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3Ry aW5nKGNvbmZpZywgImFjcGlfZmlybXdhcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZiX2luZm8tPnUuaHZtLmFjcGlfZmlybXdhcmUsIDApOworCisgICAgICAgIGlmICgheGx1 X2NmZ19nZXRfc3RyaW5nKGNvbmZpZywgIm1zX3ZtX2dlbmlkIiwgJmJ1ZiwgMCkpIHsKKyAgICAg ICAgICAgIGlmICghc3RyY21wKGJ1ZiwgImdlbmVyYXRlIikpIHsKKyAgICAgICAgICAgICAgICBl ID0gbGlieGxfbXNfdm1fZ2VuaWRfZ2VuZXJhdGUoY3R4LCAmYl9pbmZvLT51Lmh2bS5tc192bV9n ZW5pZCk7CisgICAgICAgICAgICAgICAgaWYgKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJFUlJPUjogZmFpbGVkIHRvIGdlbmVyYXRlIGEgVk0gR2VuZXJhdGlvbiBJ RFxuIik7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgIm5vbmUiKSkgeworICAgICAgICAg ICAgICAgIDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiRVJST1I6IFwibXNfdm1fZ2VuaWRcIiBvcHRpb24gbXVzdCBiZSBcImdlbmVy YXRlXCIgb3IgXCJub25lXCJcbiIpOworICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAg ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChj b25maWcsICJyZG1fbWVtX2JvdW5kYXJ5IiwgJmwsIDApKQorICAgICAgICAgICAgYl9pbmZvLT51 Lmh2bS5yZG1fbWVtX2JvdW5kYXJ5X21lbWtiID0gbCAqIDEwMjQ7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgTElCWExfRE9NQUlOX1RZUEVfUFY6CisgICAgeworICAgICAgICB4bHVfY2ZnX3Jl cGxhY2Vfc3RyaW5nIChjb25maWcsICJib290bG9hZGVyIiwgJmJfaW5mby0+dS5wdi5ib290bG9h ZGVyLCAwKTsKKyAgICAgICAgc3dpdGNoICh4bHVfY2ZnX2dldF9saXN0X2FzX3N0cmluZ19saXN0 KGNvbmZpZywgImJvb3Rsb2FkZXJfYXJncyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZiX2luZm8tPnUucHYuYm9vdGxvYWRlcl9hcmdzLCAxKSkKKyAgICAgICAgewor CisgICAgICAgIGNhc2UgMDogYnJlYWs7IC8qIFN1Y2Nlc3MgKi8KKyAgICAgICAgY2FzZSBFU1JD SDogYnJlYWs7IC8qIE9wdGlvbiBub3QgcHJlc2VudCAqLworICAgICAgICBjYXNlIEVJTlZBTDoK KyAgICAgICAgICAgIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nKGNvbmZpZywgImJvb3Rsb2FkZXJf YXJncyIsICZidWYsIDApKSB7CisKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldB Uk5JTkc6IFNwZWNpZnlpbmcgXCJib290bG9hZGVyX2FyZ3NcIiIKKyAgICAgICAgICAgICAgICAg ICAgICAgICIgYXMgYSBzdHJpbmcgaXMgZGVwcmVjYXRlZC4gIgorICAgICAgICAgICAgICAgICAg ICAgICAgIlBsZWFzZSB1c2UgYSBsaXN0IG9mIGFyZ3VtZW50cy5cbiIpOworICAgICAgICAgICAg ICAgIHNwbGl0X3N0cmluZ19pbnRvX3N0cmluZ19saXN0KGJ1ZiwgIiBcdFxuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51LnB2LmJvb3Rs b2FkZXJfYXJncyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ZGVmYXVsdDoKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJ4bDogVW5hYmxlIHRvIHBhcnNl IGJvb3Rsb2FkZXJfYXJncy5cbiIpOworICAgICAgICAgICAgZXhpdCgtRVJST1JfRkFJTCk7Cisg ICAgICAgIH0KKworICAgICAgICBpZiAoIWJfaW5mby0+dS5wdi5ib290bG9hZGVyICYmICFiX2lu Zm8tPmtlcm5lbCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJOZWl0aGVyIGtlcm5l bCBub3IgYm9vdGxvYWRlciBzcGVjaWZpZWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAg ICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBh Ym9ydCgpOworICAgIH0KKworICAgIGlmICgheGx1X2NmZ19nZXRfbGlzdChjb25maWcsICJpb3Bv cnRzIiwgJmlvcG9ydHMsICZudW1faW9wb3J0cywgMCkpIHsKKyAgICAgICAgYl9pbmZvLT5udW1f aW9wb3J0cyA9IG51bV9pb3BvcnRzOworICAgICAgICBiX2luZm8tPmlvcG9ydHMgPSBjYWxsb2Mo bnVtX2lvcG9ydHMsIHNpemVvZigqYl9pbmZvLT5pb3BvcnRzKSk7CisgICAgICAgIGlmIChiX2lu Zm8tPmlvcG9ydHMgPT0gTlVMTCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmFi bGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBpb3BvcnRzXG4iKTsKKyAgICAgICAgICAgIGV4aXQo LTEpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9pb3BvcnRzOyBp KyspIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1ZjI7CisgICAgICAgICAgICBjaGFyICpl cDsKKyAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0LCBlbmQ7CisgICAgICAgICAgICB1bnNpZ25l ZCBsb25nIHVsOworCisgICAgICAgICAgICBidWYgPSB4bHVfY2ZnX2dldF9saXN0aXRlbSAoaW9w b3J0cywgaSk7CisgICAgICAgICAgICBpZiAoIWJ1ZikgeworICAgICAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgInhsOiBVbmFibGUgdG8gZ2V0IGVs ZW1lbnQgIyVkIGluIGlvcG9ydCBsaXN0XG4iLCBpKTsKKyAgICAgICAgICAgICAgICBleGl0KDEp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdWwgPSBzdHJ0b3VsKGJ1ZiwgJmVwLCAxNik7 CisgICAgICAgICAgICBpZiAoZXAgPT0gYnVmKSB7CisgICAgICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJ4bDogSW52YWxpZCBhcmd1bWVudCBwYXJzaW5nIGlvcG9ydDogJXNcbiIsCisgICAg ICAgICAgICAgICAgICAgICAgICBidWYpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAodWwgPj0gVUlOVDMyX01BWCkgeworICAgICAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAieGw6IGlvcG9ydCAlbHggdG9vIGJpZ1xuIiwgdWwpOwor ICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGFy dCA9IGVuZCA9IHVsOworCisgICAgICAgICAgICBpZiAoKmVwID09ICctJykgeworICAgICAgICAg ICAgICAgIGJ1ZjIgPSBlcCArIDE7CisgICAgICAgICAgICAgICAgdWwgPSBzdHJ0b3VsKGJ1ZjIs ICZlcCwgMTYpOworICAgICAgICAgICAgICAgIGlmIChlcCA9PSBidWYyIHx8ICplcCAhPSAnXDAn IHx8IHN0YXJ0ID4gZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4bDogSW52YWxpZCBhcmd1bWVudCBwYXJzaW5n IGlvcG9ydDogJXNcbiIsIGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh1bCA+PSBVSU5UMzJfTUFYKSB7Cisg ICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAieGw6IGlvcG9ydCAlbHggdG9vIGJp Z1xuIiwgdWwpOworICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBlbmQgPSB1bDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoICpl cCAhPSAnXDAnICkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAg ICAgICAgICAgICAgICJ4bDogSW52YWxpZCBhcmd1bWVudCBwYXJzaW5nIGlvcG9ydDogJXNcbiIs IGJ1Zik7CisgICAgICAgICAgICBiX2luZm8tPmlvcG9ydHNbaV0uZmlyc3QgPSBzdGFydDsKKyAg ICAgICAgICAgIGJfaW5mby0+aW9wb3J0c1tpXS5udW1iZXIgPSBlbmQgLSBzdGFydCArIDE7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QoY29uZmlnLCAiaXJx cyIsICZpcnFzLCAmbnVtX2lycXMsIDApKSB7CisgICAgICAgIGJfaW5mby0+bnVtX2lycXMgPSBu dW1faXJxczsKKyAgICAgICAgYl9pbmZvLT5pcnFzID0gY2FsbG9jKG51bV9pcnFzLCBzaXplb2Yo KmJfaW5mby0+aXJxcykpOworICAgICAgICBpZiAoYl9pbmZvLT5pcnFzID09IE5VTEwpIHsKKyAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Ig aW9wb3J0c1xuIik7CisgICAgICAgICAgICBleGl0KC0xKTsKKyAgICAgICAgfQorICAgICAgICBm b3IgKGkgPSAwOyBpIDwgbnVtX2lycXM7IGkrKykgeworICAgICAgICAgICAgY2hhciAqZXA7Cisg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIHVsOworICAgICAgICAgICAgYnVmID0geGx1X2NmZ19n ZXRfbGlzdGl0ZW0gKGlycXMsIGkpOworICAgICAgICAgICAgaWYgKCFidWYpIHsKKyAgICAgICAg ICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ4bDogVW5h YmxlIHRvIGdldCBlbGVtZW50ICVkIGluIGlycSBsaXN0XG4iLCBpKTsKKyAgICAgICAgICAgICAg ICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdWwgPSBzdHJ0b3VsKGJ1Ziwg JmVwLCAxMCk7CisgICAgICAgICAgICBpZiAoZXAgPT0gYnVmIHx8ICplcCAhPSAnXDAnKSB7Cisg ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAi eGw6IEludmFsaWQgYXJndW1lbnQgcGFyc2luZyBpcnE6ICVzXG4iLCBidWYpOworICAgICAgICAg ICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodWwgPj0gVUlO VDMyX01BWCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAieGw6IGlycSAlbHgg dG9vIGJpZ1xuIiwgdWwpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBiX2luZm8tPmlycXNbaV0gPSB1bDsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIGlmICgheGx1X2NmZ19nZXRfbGlzdChjb25maWcsICJpb21lbSIsICZpb21lbSwgJm51bV9p b21lbSwgMCkpIHsKKyAgICAgICAgaW50IHJldDsKKyAgICAgICAgYl9pbmZvLT5udW1faW9tZW0g PSBudW1faW9tZW07CisgICAgICAgIGJfaW5mby0+aW9tZW0gPSBjYWxsb2MobnVtX2lvbWVtLCBz aXplb2YoKmJfaW5mby0+aW9tZW0pKTsKKyAgICAgICAgaWYgKGJfaW5mby0+aW9tZW0gPT0gTlVM TCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmFibGUgdG8gYWxsb2NhdGUgbWVt b3J5IGZvciBpb21lbVxuIik7CisgICAgICAgICAgICBleGl0KC0xKTsKKyAgICAgICAgfQorICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2lvbWVtOyBpKyspIHsKKyAgICAgICAgICAgIGludCB1 c2VkOworCisgICAgICAgICAgICBidWYgPSB4bHVfY2ZnX2dldF9saXN0aXRlbSAoaW9tZW0sIGkp OworICAgICAgICAgICAgaWYgKCFidWYpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ4bDogVW5hYmxlIHRvIGdldCBlbGVtZW50ICVk IGluIGlvbWVtIGxpc3RcbiIsIGkpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBsaWJ4bF9pb21lbV9yYW5nZV9pbml0KCZiX2luZm8tPmlvbWVt W2ldKTsKKyAgICAgICAgICAgIHJldCA9IHNzY2FuZihidWYsICIlIiBTQ054NjQiLCUiIFNDTng2 NCIlbkAlIiBTQ054NjQiJW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8tPmlv bWVtW2ldLnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8tPmlvbWVtW2ld Lm51bWJlciwgJnVzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+aW9tZW1b aV0uZ2ZuLCAmdXNlZCk7CisgICAgICAgICAgICBpZiAocmV0IDwgMiB8fCBidWZbdXNlZF0gIT0g J1wwJykgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAg ICAgICAgICAgInhsOiBJbnZhbGlkIGFyZ3VtZW50IHBhcnNpbmcgaW9tZW06ICVzXG4iLCBidWYp OworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICB9CisKKworCisgICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0IChjb25maWcsICJkaXNrIiwgJnZi ZHMsIDAsIDApKSB7CisgICAgICAgIGRfY29uZmlnLT5udW1fZGlza3MgPSAwOworICAgICAgICBk X2NvbmZpZy0+ZGlza3MgPSBOVUxMOworICAgICAgICB3aGlsZSAoKGJ1ZiA9IHhsdV9jZmdfZ2V0 X2xpc3RpdGVtICh2YmRzLCBkX2NvbmZpZy0+bnVtX2Rpc2tzKSkgIT0gTlVMTCkgeworICAgICAg ICAgICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2s7CisgICAgICAgICAgICBjaGFyICpidWYyID0g c3RyZHVwKGJ1Zik7CisKKyAgICAgICAgICAgIGRpc2sgPSBBUlJBWV9FWFRFTkRfSU5JVF9OT0RF VklEKGRfY29uZmlnLT5kaXNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRfY29uZmlnLT5udW1fZGlza3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfZGlza19pbml0KTsKKyAgICAgICAgICAg IHBhcnNlX2Rpc2tfY29uZmlnKCZjb25maWcsIGJ1ZjIsIGRpc2spOworCisgICAgICAgICAgICBm cmVlKGJ1ZjIpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0 KGNvbmZpZywgInZ0cG0iLCAmdnRwbXMsIDAsIDApKSB7CisgICAgICAgIGRfY29uZmlnLT5udW1f dnRwbXMgPSAwOworICAgICAgICBkX2NvbmZpZy0+dnRwbXMgPSBOVUxMOworICAgICAgICB3aGls ZSAoKGJ1ZiA9IHhsdV9jZmdfZ2V0X2xpc3RpdGVtICh2dHBtcywgZF9jb25maWctPm51bV92dHBt cykpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGxpYnhsX2RldmljZV92dHBtICp2dHBtOworICAg ICAgICAgICAgY2hhciAqIGJ1ZjIgPSBzdHJkdXAoYnVmKTsKKyAgICAgICAgICAgIGNoYXIgKnAs ICpwMjsKKyAgICAgICAgICAgIGJvb2wgZ290X2JhY2tlbmQgPSBmYWxzZTsKKworICAgICAgICAg ICAgdnRwbSA9IEFSUkFZX0VYVEVORF9JTklUKGRfY29uZmlnLT52dHBtcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkX2NvbmZpZy0+bnVtX3Z0cG1zLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92dHBtX2luaXQpOworCisg ICAgICAgICAgICBwID0gc3RydG9rKGJ1ZjIsICIsIik7CisgICAgICAgICAgICBpZihwKSB7Cisg ICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICB3aGlsZSgqcCA9PSAnICcpCisg ICAgICAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICAgICAgICBpZiAoKHAyID0gc3Ry Y2hyKHAsICc9JykpID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICpwMiA9ICdcMCc7CisgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChw LCAiYmFja2VuZCIpKSB7CisgICAgICAgICAgICAgICAgICAgICB2dHBtLT5iYWNrZW5kX2RvbW5h bWUgPSBzdHJkdXAocDIgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgIGdvdF9iYWNrZW5kID0g dHJ1ZTsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZighc3RyY21wKHAsICJ1dWlkIikpIHsK KyAgICAgICAgICAgICAgICAgICAgIGlmKCBsaWJ4bF91dWlkX2Zyb21fc3RyaW5nKCZ2dHBtLT51 dWlkLCBwMiArIDEpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIHZ0cG0gVVVJ RDogJXNcbiIsIHAyICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIHN0cmluZyBgJXMnIGluIHZ0cG0g c3BlY1xuIiwgcCk7CisgICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgfSB3aGlsZSAoKHAgPSBzdHJ0b2soTlVMTCwgIiwiKSkg IT0gTlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZighZ290X2JhY2tlbmQpIHsK KyAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidnRwbSBzcGVjIG1pc3NpbmcgcmVxdWly ZWQgYmFja2VuZCBmaWVsZCFcbiIpOworICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGZyZWUoYnVmMik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp ZiAoIXhsdV9jZmdfZ2V0X2xpc3QgKGNvbmZpZywgImNoYW5uZWwiLCAmY2hhbm5lbHMsIDAsIDAp KSB7CisgICAgICAgIGRfY29uZmlnLT5udW1fY2hhbm5lbHMgPSAwOworICAgICAgICBkX2NvbmZp Zy0+Y2hhbm5lbHMgPSBOVUxMOworICAgICAgICB3aGlsZSAoKGJ1ZiA9IHhsdV9jZmdfZ2V0X2xp c3RpdGVtIChjaGFubmVscywKKyAgICAgICAgICAgICAgICBkX2NvbmZpZy0+bnVtX2NoYW5uZWxz KSkgIT0gTlVMTCkgeworICAgICAgICAgICAgbGlieGxfZGV2aWNlX2NoYW5uZWwgKmNobjsKKyAg ICAgICAgICAgIGxpYnhsX3N0cmluZ19saXN0IHBhaXJzOworICAgICAgICAgICAgY2hhciAqcGF0 aCA9IE5VTEw7CisgICAgICAgICAgICBpbnQgbGVuOworCisgICAgICAgICAgICBjaG4gPSBBUlJB WV9FWFRFTkRfSU5JVChkX2NvbmZpZy0+Y2hhbm5lbHMsIGRfY29uZmlnLT5udW1fY2hhbm5lbHMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9jaGFubmVs X2luaXQpOworCisgICAgICAgICAgICBzcGxpdF9zdHJpbmdfaW50b19zdHJpbmdfbGlzdChidWYs ICIsIiwgJnBhaXJzKTsKKyAgICAgICAgICAgIGxlbiA9IGxpYnhsX3N0cmluZ19saXN0X2xlbmd0 aCgmcGFpcnMpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAg ICAgICAgICAgICAgY2hhciAqa2V5LCAqa2V5X3VudHJpbW1lZCwgKnZhbHVlLCAqdmFsdWVfdW50 cmltbWVkOworICAgICAgICAgICAgICAgIGludCByYzsKKyAgICAgICAgICAgICAgICByYyA9IHNw bGl0X3N0cmluZ19pbnRvX3BhaXIocGFpcnNbaV0sICI9IiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmtleV91bnRyaW1tZWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZV91bnRyaW1tZWQpOworICAgICAgICAg ICAgICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAiZmFpbGVkIHRvIHBhcnNlIGNoYW5uZWwgY29uZmlndXJhdGlvbjogJXMiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBhaXJzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdCgx KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdHJpbShpc3NwYWNlLCBrZXlf dW50cmltbWVkLCAma2V5KTsKKyAgICAgICAgICAgICAgICB0cmltKGlzc3BhY2UsIHZhbHVlX3Vu dHJpbW1lZCwgJnZhbHVlKTsKKworICAgICAgICAgICAgICAgIGlmICghc3RyY21wKGtleSwgImJh Y2tlbmQiKSkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlX3N0cmluZygmY2huLT5iYWNr ZW5kX2RvbW5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAo a2V5LCAibmFtZSIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZjaG4t Pm5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAi cGF0aCIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZwYXRoLCB2YWx1 ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGtleSwgImNvbm5lY3Rpb24i KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcCh2YWx1ZSwgInB0eSIpKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBjaG4tPmNvbm5lY3Rpb24gPSBMSUJYTF9DSEFOTkVMX0NP Tk5FQ1RJT05fUFRZOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAodmFs dWUsICJzb2NrZXQiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2huLT5jb25uZWN0aW9u ID0gTElCWExfQ0hBTk5FTF9DT05ORUNUSU9OX1NPQ0tFVDsKKyAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5rbm93 biBjaGFubmVsIGNvbm5lY3Rpb24gJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAidW5rbm93biBjaGFubmVsIHBhcmFtZXRlciAnJXMnLCIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGlnbm9yaW5nXG4iLCBrZXkpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcmVlKGtleSk7CisgICAgICAgICAgICAg ICAgZnJlZShrZXlfdW50cmltbWVkKTsKKyAgICAgICAgICAgICAgICBmcmVlKHZhbHVlKTsKKyAg ICAgICAgICAgICAgICBmcmVlKHZhbHVlX3VudHJpbW1lZCk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBzd2l0Y2ggKGNobi0+Y29ubmVjdGlvbikgeworICAgICAgICAgICAgY2FzZSBMSUJY TF9DSEFOTkVMX0NPTk5FQ1RJT05fVU5LTk9XTjoKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgImNoYW5uZWwgaGFzIHVua25vd24gJ2Nvbm5lY3Rpb24nXG4iKTsKKyAgICAgICAgICAg ICAgICBleGl0KDEpOworICAgICAgICAgICAgY2FzZSBMSUJYTF9DSEFOTkVMX0NPTk5FQ1RJT05f U09DS0VUOgorICAgICAgICAgICAgICAgIGlmICghcGF0aCkgeworICAgICAgICAgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgImNoYW5uZWwgY29ubmVjdGlvbiAnc29ja2V0JyByZXF1aXJlcyBw YXRoPS4uXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgY2huLT51LnNvY2tldC5wYXRoID0geHN0cmR1cChwYXRoKTsK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTElCWExfQ0hBTk5FTF9D T05ORUNUSU9OX1BUWToKKyAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIHNpbmNlIFBU WSBoYXMgbm8gYXJndW1lbnRzICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5rbm93biBjaGFu bmVsIGNvbm5lY3Rpb246ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNobi0+Y29ubmVj dGlvbik7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGxpYnhsX3N0cmluZ19saXN0X2Rpc3Bvc2UoJnBhaXJzKTsKKyAgICAgICAgICAgIGZyZWUo cGF0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QgKGNv bmZpZywgInZpZiIsICZuaWNzLCAwLCAwKSkgeworICAgICAgICBkX2NvbmZpZy0+bnVtX25pY3Mg PSAwOworICAgICAgICBkX2NvbmZpZy0+bmljcyA9IE5VTEw7CisgICAgICAgIHdoaWxlICgoYnVm ID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0gKG5pY3MsIGRfY29uZmlnLT5udW1fbmljcykpICE9IE5V TEwpIHsKKyAgICAgICAgICAgIGxpYnhsX2RldmljZV9uaWMgKm5pYzsKKyAgICAgICAgICAgIGNo YXIgKmJ1ZjIgPSBzdHJkdXAoYnVmKTsKKyAgICAgICAgICAgIGNoYXIgKnA7CisKKyAgICAgICAg ICAgIG5pYyA9IEFSUkFZX0VYVEVORF9JTklUKGRfY29uZmlnLT5uaWNzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZF9jb25maWctPm51bV9uaWNzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX25pY19pbml0KTsKKyAgICAgICAg ICAgIHNldF9kZWZhdWx0X25pY192YWx1ZXMobmljKTsKKworICAgICAgICAgICAgcCA9IHN0cnRv ayhidWYyLCAiLCIpOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIGdvdG8g c2tpcF9uaWM7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCpwID09 ICcgJykKKyAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgIHBhcnNlX25p Y19jb25maWcobmljLCAmY29uZmlnLCBwKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKChwID0gc3Ry dG9rKE5VTEwsICIsIikpICE9IE5VTEwpOworc2tpcF9uaWM6CisgICAgICAgICAgICBmcmVlKGJ1 ZjIpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0KGNvbmZp ZywgInZpZjIiLCBOVUxMLCAwLCAwKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5J Tkc6IHZpZjI6IG5ldGNoYW5uZWwyIGlzIGRlcHJlY2F0ZWQgYW5kIG5vdCBzdXBwb3J0ZWQgYnkg eGxcbiIpOworICAgIH0KKworICAgIGRfY29uZmlnLT5udW1fdmZicyA9IDA7CisgICAgZF9jb25m aWctPm51bV92a2JzID0gMDsKKyAgICBkX2NvbmZpZy0+dmZicyA9IE5VTEw7CisgICAgZF9jb25m aWctPnZrYnMgPSBOVUxMOworCisgICAgaWYgKCF4bHVfY2ZnX2dldF9saXN0IChjb25maWcsICJ2 ZmIiLCAmY3ZmYnMsIDAsIDApKSB7CisgICAgICAgIHdoaWxlICgoYnVmID0geGx1X2NmZ19nZXRf bGlzdGl0ZW0gKGN2ZmJzLCBkX2NvbmZpZy0+bnVtX3ZmYnMpKSAhPSBOVUxMKSB7CisgICAgICAg ICAgICBsaWJ4bF9kZXZpY2VfdmZiICp2ZmI7CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2Vfdmti ICp2a2I7CisKKyAgICAgICAgICAgIGNoYXIgKmJ1ZjIgPSBzdHJkdXAoYnVmKTsKKyAgICAgICAg ICAgIGNoYXIgKnAsICpwMjsKKworICAgICAgICAgICAgdmZiID0gQVJSQVlfRVhURU5EX0lOSVQo ZF9jb25maWctPnZmYnMsIGRfY29uZmlnLT5udW1fdmZicywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92ZmJfaW5pdCk7CisKKyAgICAgICAgICAgIHZr YiA9IEFSUkFZX0VYVEVORF9JTklUKGRfY29uZmlnLT52a2JzLCBkX2NvbmZpZy0+bnVtX3ZrYnMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmtiX2lu aXQpOworCisgICAgICAgICAgICBwID0gc3RydG9rKGJ1ZjIsICIsIik7CisgICAgICAgICAgICBp ZiAoIXApCisgICAgICAgICAgICAgICAgZ290byBza2lwX3ZmYjsKKyAgICAgICAgICAgIGRvIHsK KyAgICAgICAgICAgICAgICB3aGlsZSAoKnAgPT0gJyAnKQorICAgICAgICAgICAgICAgICAgICBw Kys7CisgICAgICAgICAgICAgICAgaWYgKChwMiA9IHN0cmNocihwLCAnPScpKSA9PSBOVUxMKQor ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAqcDIgPSAnXDAnOwor ICAgICAgICAgICAgICAgIGlmICghc3RyY21wKHAsICJ2bmMiKSkgeworICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9kZWZib29sX3NldCgmdmZiLT52bmMuZW5hYmxlLCBhdG9pKHAyICsgMSkpOwor ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwLCAidm5jbGlzdGVuIikpIHsKKyAg ICAgICAgICAgICAgICAgICAgZnJlZSh2ZmItPnZuYy5saXN0ZW4pOworICAgICAgICAgICAgICAg ICAgICB2ZmItPnZuYy5saXN0ZW4gPSBzdHJkdXAocDIgKyAxKTsKKyAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKCFzdHJjbXAocCwgInZuY3Bhc3N3ZCIpKSB7CisgICAgICAgICAgICAgICAgICAg IGZyZWUodmZiLT52bmMucGFzc3dkKTsKKyAgICAgICAgICAgICAgICAgICAgdmZiLT52bmMucGFz c3dkID0gc3RyZHVwKHAyICsgMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21w KHAsICJ2bmNkaXNwbGF5IikpIHsKKyAgICAgICAgICAgICAgICAgICAgdmZiLT52bmMuZGlzcGxh eSA9IGF0b2kocDIgKyAxKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAocCwg InZuY3VudXNlZCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZ2 ZmItPnZuYy5maW5kdW51c2VkLCBhdG9pKHAyICsgMSkpOworICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoIXN0cmNtcChwLCAia2V5bWFwIikpIHsKKyAgICAgICAgICAgICAgICAgICAgZnJlZSh2 ZmItPmtleW1hcCk7CisgICAgICAgICAgICAgICAgICAgIHZmYi0+a2V5bWFwID0gc3RyZHVwKHAy ICsgMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHAsICJzZGwiKSkgewor ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZWZib29sX3NldCgmdmZiLT5zZGwuZW5hYmxlLCBh dG9pKHAyICsgMSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChwLCAib3Bl bmdsIikpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJnZmYi0+c2Rs Lm9wZW5nbCwgYXRvaShwMiArIDEpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJj bXAocCwgImRpc3BsYXkiKSkgeworICAgICAgICAgICAgICAgICAgICBmcmVlKHZmYi0+c2RsLmRp c3BsYXkpOworICAgICAgICAgICAgICAgICAgICB2ZmItPnNkbC5kaXNwbGF5ID0gc3RyZHVwKHAy ICsgMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHAsICJ4YXV0aG9yaXR5 IikpIHsKKyAgICAgICAgICAgICAgICAgICAgZnJlZSh2ZmItPnNkbC54YXV0aG9yaXR5KTsKKyAg ICAgICAgICAgICAgICAgICAgdmZiLT5zZGwueGF1dGhvcml0eSA9IHN0cmR1cChwMiArIDEpOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gd2hpbGUgKChwID0gc3RydG9rKE5VTEws ICIsIikpICE9IE5VTEwpOworCitza2lwX3ZmYjoKKyAgICAgICAgICAgIGZyZWUoYnVmMik7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcgKGNvbmZpZywgInBj aV9tc2l0cmFuc2xhdGUiLCAmbCwgMCkpCisgICAgICAgIHBjaV9tc2l0cmFuc2xhdGUgPSBsOwor CisgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJwY2lfcG93ZXJfbWdtdCIsICZs LCAwKSkKKyAgICAgICAgcGNpX3Bvd2VyX21nbXQgPSBsOworCisgICAgaWYgKCF4bHVfY2ZnX2dl dF9sb25nIChjb25maWcsICJwY2lfcGVybWlzc2l2ZSIsICZsLCAwKSkKKyAgICAgICAgcGNpX3Bl cm1pc3NpdmUgPSBsOworCisgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJwY2lf c2VpemUiLCAmbCwgMCkpCisgICAgICAgIHBjaV9zZWl6ZSA9IGw7CisKKyAgICAvKiBUbyBiZSBy ZXdvcmtlZCAoYXV0b21hdGljYWxseSBlbmFibGVkKSBvbmNlIHRoZSBhdXRvIGJhbGxvb25pbmcK KyAgICAgKiBhZnRlciBndWVzdCBzdGFydHMgaXMgZG9uZSAod2l0aCBQQ0kgZGV2aWNlcyBwYXNz ZWQgaW4pLiAqLworICAgIGlmIChjX2luZm8tPnR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfUFYp IHsKKyAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJlODIwX2hvc3QiLCAmYl9p bmZvLT51LnB2LmU4MjBfaG9zdCwgMCk7CisgICAgfQorCisgICAgaWYgKCF4bHVfY2ZnX2dldF9z dHJpbmcoY29uZmlnLCAicmRtIiwgJmJ1ZiwgMCkpIHsKKyAgICAgICAgbGlieGxfcmRtX3Jlc2Vy dmUgcmRtOworICAgICAgICBpZiAoIXhsdV9yZG1fcGFyc2UoY29uZmlnLCAmcmRtLCBidWYpKSB7 CisgICAgICAgICAgICBiX2luZm8tPnUuaHZtLnJkbS5zdHJhdGVneSA9IHJkbS5zdHJhdGVneTsK KyAgICAgICAgICAgIGJfaW5mby0+dS5odm0ucmRtLnBvbGljeSA9IHJkbS5wb2xpY3k7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QgKGNvbmZpZywgInBjaSIs ICZwY2lzLCAwLCAwKSkgeworICAgICAgICBkX2NvbmZpZy0+bnVtX3BjaWRldnMgPSAwOworICAg ICAgICBkX2NvbmZpZy0+cGNpZGV2cyA9IE5VTEw7CisgICAgICAgIGZvcihpID0gMDsgKGJ1ZiA9 IHhsdV9jZmdfZ2V0X2xpc3RpdGVtIChwY2lzLCBpKSkgIT0gTlVMTDsgaSsrKSB7CisgICAgICAg ICAgICBsaWJ4bF9kZXZpY2VfcGNpICpwY2lkZXY7CisKKyAgICAgICAgICAgIHBjaWRldiA9IEFS UkFZX0VYVEVORF9JTklUX05PREVWSUQoZF9jb25maWctPnBjaWRldnMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfY29uZmlnLT5udW1fcGNpZGV2cywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2 aWNlX3BjaV9pbml0KTsKKyAgICAgICAgICAgIHBjaWRldi0+bXNpdHJhbnNsYXRlID0gcGNpX21z aXRyYW5zbGF0ZTsKKyAgICAgICAgICAgIHBjaWRldi0+cG93ZXJfbWdtdCA9IHBjaV9wb3dlcl9t Z210OworICAgICAgICAgICAgcGNpZGV2LT5wZXJtaXNzaXZlID0gcGNpX3Blcm1pc3NpdmU7Cisg ICAgICAgICAgICBwY2lkZXYtPnNlaXplID0gcGNpX3NlaXplOworICAgICAgICAgICAgLyoKKyAg ICAgICAgICAgICAqIExpa2Ugb3RoZXIgcGNpIG9wdGlvbiwgdGhlIHBlci1kZXZpY2UgcG9saWN5 IGFsd2F5cyBmb2xsb3dzCisgICAgICAgICAgICAgKiB0aGUgZ2xvYmFsIHBvbGljeSBieSBkZWZh dWx0LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBwY2lkZXYtPnJkbV9wb2xpY3kgPSBi X2luZm8tPnUuaHZtLnJkbS5wb2xpY3k7CisgICAgICAgICAgICBlID0geGx1X3BjaV9wYXJzZV9i ZGYoY29uZmlnLCBwY2lkZXYsIGJ1Zik7CisgICAgICAgICAgICBpZiAoZSkgeworICAgICAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0 byBwYXJzZSBQQ0kgQkRGIGAlcycgZm9yIHBhc3N0aHJvdWdoXG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgYnVmKTsKKyAgICAgICAgICAgICAgICBleGl0KC1lKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBpZiAoZF9jb25maWctPm51bV9wY2lkZXZzICYmIGNfaW5mby0+ dHlwZSA9PSBMSUJYTF9ET01BSU5fVFlQRV9QVikKKyAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xf c2V0KCZiX2luZm8tPnUucHYuZTgyMF9ob3N0LCB0cnVlKTsKKyAgICB9CisKKyAgICBpZiAoIXhs dV9jZmdfZ2V0X2xpc3QgKGNvbmZpZywgImR0ZGV2IiwgJmR0ZGV2cywgMCwgMCkpIHsKKyAgICAg ICAgZF9jb25maWctPm51bV9kdGRldnMgPSAwOworICAgICAgICBkX2NvbmZpZy0+ZHRkZXZzID0g TlVMTDsKKyAgICAgICAgZm9yIChpID0gMDsgKGJ1ZiA9IHhsdV9jZmdfZ2V0X2xpc3RpdGVtKGR0 ZGV2cywgaSkpICE9IE5VTEw7IGkrKykgeworICAgICAgICAgICAgbGlieGxfZGV2aWNlX2R0ZGV2 ICpkdGRldjsKKworICAgICAgICAgICAgZHRkZXYgPSBBUlJBWV9FWFRFTkRfSU5JVF9OT0RFVklE KGRfY29uZmlnLT5kdGRldnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZF9jb25maWctPm51bV9kdGRldnMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX2R0ZGV2X2luaXQpOworCisgICAgICAg ICAgICBkdGRldi0+cGF0aCA9IHN0cmR1cChidWYpOworICAgICAgICAgICAgaWYgKGR0ZGV2LT5w YXRoID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0 byBkdXBsaWNhdGUgc3RyaW5nIGZvciBkdGRldnNcbiIpOworICAgICAgICAgICAgICAgIGV4aXQo LTEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF4bHVfY2Zn X2dldF9saXN0KGNvbmZpZywgInVzYmN0cmwiLCAmdXNiY3RybHMsIDAsIDApKSB7CisgICAgICAg IGRfY29uZmlnLT5udW1fdXNiY3RybHMgPSAwOworICAgICAgICBkX2NvbmZpZy0+dXNiY3RybHMg PSBOVUxMOworICAgICAgICB3aGlsZSAoKGJ1ZiA9IHhsdV9jZmdfZ2V0X2xpc3RpdGVtKHVzYmN0 cmxzLCBkX2NvbmZpZy0+bnVtX3VzYmN0cmxzKSkKKyAgICAgICAgICAgICAgICE9IE5VTEwpIHsK KyAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJsOworICAgICAgICAgICAg Y2hhciAqYnVmMiA9IHN0cmR1cChidWYpOworICAgICAgICAgICAgY2hhciAqcDsKKworICAgICAg ICAgICAgdXNiY3RybCA9IEFSUkFZX0VYVEVORF9JTklUKGRfY29uZmlnLT51c2JjdHJscywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX2NvbmZpZy0+bnVtX3VzYmN0 cmxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rldmlj ZV91c2JjdHJsX2luaXQpOworICAgICAgICAgICAgcCA9IHN0cnRvayhidWYyLCAiLCIpOworICAg ICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIGdvdG8gc2tpcF91c2JjdHJsOworICAg ICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHdoaWxlICgqcCA9PSAnICcpCisgICAgICAg ICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VfdXNiY3RybF9jb25m aWcodXNiY3RybCwgcCkpCisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAg ICB9IHdoaWxlICgocCA9IHN0cnRvayhOVUxMLCAiLCIpKSAhPSBOVUxMKTsKK3NraXBfdXNiY3Ry bDoKKyAgICAgICAgICAgIGZyZWUoYnVmMik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo IXhsdV9jZmdfZ2V0X2xpc3QoY29uZmlnLCAidXNiZGV2IiwgJnVzYmRldnMsIDAsIDApKSB7Cisg ICAgICAgIGRfY29uZmlnLT5udW1fdXNiZGV2cyA9IDA7CisgICAgICAgIGRfY29uZmlnLT51c2Jk ZXZzID0gTlVMTDsKKyAgICAgICAgd2hpbGUgKChidWYgPSB4bHVfY2ZnX2dldF9saXN0aXRlbSh1 c2JkZXZzLCBkX2NvbmZpZy0+bnVtX3VzYmRldnMpKQorICAgICAgICAgICAgICAgIT0gTlVMTCkg eworICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2OworICAgICAgICAgICAg Y2hhciAqYnVmMiA9IHN0cmR1cChidWYpOworICAgICAgICAgICAgY2hhciAqcDsKKworICAgICAg ICAgICAgdXNiZGV2ID0gQVJSQVlfRVhURU5EX0lOSVRfTk9ERVZJRChkX2NvbmZpZy0+dXNiZGV2 cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9jb25m aWctPm51bV91c2JkZXZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2X2luaXQpOworICAgICAgICAgICAgcCA9IHN0cnRv ayhidWYyLCAiLCIpOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIGdvdG8g c2tpcF91c2JkZXY7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCpw ID09ICcgJykKKyAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgIGlmIChw YXJzZV91c2JkZXZfY29uZmlnKHVzYmRldiwgcCkpCisgICAgICAgICAgICAgICAgICAgIGV4aXQo MSk7CisgICAgICAgICAgICB9IHdoaWxlICgocCA9IHN0cnRvayhOVUxMLCAiLCIpKSAhPSBOVUxM KTsKK3NraXBfdXNiZGV2OgorICAgICAgICAgICAgZnJlZShidWYyKTsKKyAgICAgICAgfQorICAg IH0KKworICAgIHN3aXRjaCAoeGx1X2NmZ19nZXRfbGlzdChjb25maWcsICJjcHVpZCIsICZjcHVp ZHMsIDAsIDEpKSB7CisgICAgY2FzZSAwOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBj aGFyICplcnJzdHI7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IChidWYgPSB4bHVfY2ZnX2dl dF9saXN0aXRlbShjcHVpZHMsIGkpKSAhPSBOVUxMOyBpKyspIHsKKyAgICAgICAgICAgICAgICBl ID0gbGlieGxfY3B1aWRfcGFyc2VfY29uZmlnX3hlbmQoJmJfaW5mby0+Y3B1aWQsIGJ1Zik7Cisg ICAgICAgICAgICAgICAgc3dpdGNoIChlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAwOiBjb250 aW51ZTsKKyAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIGVycnN0 ciA9ICJpbGxlZ2FsIGxlYWYgbnVtYmVyIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICBlcnJzdHIgPSAiaWxs ZWdhbCBzdWJsZWFmIG51bWJlciI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgZXJyc3RyID0gIm1pc3Npbmcg Y29sb24iOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl IDQ6CisgICAgICAgICAgICAgICAgICAgIGVycnN0ciA9ICJpbnZhbGlkIHJlZ2lzdGVyIG5hbWUg KG11c3QgYmUgZVthYmNkXXgpIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICAgICBlcnJzdHIgPSAicG9saWN5IHN0 cmluZyBtdXN0IGJlIGV4YWN0bHkgMzIgY2hhcmFjdGVycyBsb25nIjsKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg ICAgZXJyc3RyID0gInVua25vd24gZXJyb3IiOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3aGls ZSBwYXJzaW5nIENQVUlEIGxpbmU6IFwiJXNcIjpcbiIsIGJ1Zik7CisgICAgICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICIgIGVycm9yICMlaTogJXNcbiIsIGUsIGVycnN0cik7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFSU5WQUw6ICAgIC8q IGNvbmZpZyBvcHRpb24gaXMgbm90IGEgbGlzdCwgcGFyc2UgYXMgYSBzdHJpbmcgKi8KKyAgICAg ICAgaWYgKCF4bHVfY2ZnX2dldF9zdHJpbmcoY29uZmlnLCAiY3B1aWQiLCAmYnVmLCAwKSkgewor ICAgICAgICAgICAgY2hhciAqYnVmMiwgKnAsICpzdHJ0b2tfcHRyID0gTlVMTDsKKyAgICAgICAg ICAgIGNvbnN0IGNoYXIgKmVycnN0cjsKKworICAgICAgICAgICAgYnVmMiA9IHN0cmR1cChidWYp OworICAgICAgICAgICAgcCA9IHN0cnRva19yKGJ1ZjIsICIsIiwgJnN0cnRva19wdHIpOworICAg ICAgICAgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZyZWUoYnVmMik7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3Ry Y21wKHAsICJob3N0IikpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIndoaWxl IHBhcnNpbmcgQ1BVSUQgc3RyaW5nOiBcIiVzXCI6XG4iLCBidWYpOworICAgICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAiICBlcnJvcjogZmlyc3Qgd29yZCBtdXN0IGJlIFwiaG9zdFwiXG4i KTsKKyAgICAgICAgICAgICAgICBmcmVlKGJ1ZjIpOworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChwID0gc3RydG9rX3IoTlVMTCwgIiwiLCAm c3RydG9rX3B0cik7IHAgIT0gTlVMTDsKKyAgICAgICAgICAgICAgICAgcCA9IHN0cnRva19yKE5V TEwsICIsIiwgJnN0cnRva19wdHIpKSB7CisgICAgICAgICAgICAgICAgZSA9IGxpYnhsX2NwdWlk X3BhcnNlX2NvbmZpZygmYl9pbmZvLT5jcHVpZCwgcCk7CisgICAgICAgICAgICAgICAgc3dpdGNo IChlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAwOiBjb250aW51ZTsKKyAgICAgICAgICAgICAg ICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIGVycnN0ciA9ICJtaXNzaW5nIFwiPVwiIGlu IGtleT12YWx1ZSI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg IGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgZXJyc3RyID0gInVua25vd24gQ1BVSUQgZmxh ZyBuYW1lIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz ZSAzOgorICAgICAgICAgICAgICAgICAgICBlcnJzdHIgPSAiaWxsZWdhbCBDUFVJRCB2YWx1ZSAo bXVzdCBiZTogWzB8MXx4fGt8c10pIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgZXJyc3RyID0gInVua25v d24gZXJyb3IiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ3aGlsZSBwYXJzaW5nIENQVUlEIGZs YWc6IFwiJXNcIjpcbiIsIHApOworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICBl cnJvciAjJWk6ICVzXG4iLCBlLCBlcnJzdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg ZnJlZShidWYyKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg ICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBwYXJzZSBkZXZpY2UgbW9kZWwgYXJndW1lbnRz LCB0aGlzIHdvcmtzIGZvciBwdiwgaHZtIGFuZCBzdHViZG9tICovCisgICAgaWYgKCF4bHVfY2Zn X2dldF9zdHJpbmcgKGNvbmZpZywgImRldmljZV9tb2RlbCIsICZidWYsIDApKSB7CisgICAgICAg IGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICJXQVJOSU5HOiBpZ25vcmluZyBkZXZp Y2VfbW9kZWwgZGlyZWN0aXZlLlxuIgorICAgICAgICAgICAgICAgICJXQVJOSU5HOiBVc2UgXCJk ZXZpY2VfbW9kZWxfb3ZlcnJpZGVcIiBpbnN0ZWFkIGlmIHlvdSIKKyAgICAgICAgICAgICAgICAi IHJlYWxseSB3YW50IGEgbm9uLWRlZmF1bHQgZGV2aWNlX21vZGVsXG4iKTsKKyAgICAgICAgaWYg KHN0cnN0cihidWYsICJzdHViZG9tLWRtIikpIHsKKyAgICAgICAgICAgIGlmIChjX2luZm8tPnR5 cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfSFZNKQorICAgICAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiV0FSTklORzogT3IgdXNlIgorICAgICAgICAgICAgICAgICAgICAgICAgIiBcImRldmlj ZV9tb2RlbF9zdHViZG9tYWluX292ZXJyaWRlXCIgaWYgeW91ICIKKyAgICAgICAgICAgICAgICAg ICAgICAgICIgd2FudCB0byBlbmFibGUgc3R1YmRvbWFpbnNcbiIpOworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogaWdub3JpbmciCisg ICAgICAgICAgICAgICAgICAgICAgICAiIFwiZGV2aWNlX21vZGVsX3N0dWJkb21haW5fb3ZlcnJp ZGVcIiBkaXJlY3RpdmUiCisgICAgICAgICAgICAgICAgICAgICAgICAiIGZvciBwdiBndWVzdFxu Iik7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNv bmZpZywgImRldmljZV9tb2RlbF9vdmVycmlkZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmJfaW5mby0+ZGV2aWNlX21vZGVsLCAwKTsKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmlu ZyAoY29uZmlnLCAiZGV2aWNlX21vZGVsX3ZlcnNpb24iLCAmYnVmLCAwKSkgeworICAgICAgICBp ZiAoIXN0cmNtcChidWYsICJxZW11LXhlbi10cmFkaXRpb25hbCIpKSB7CisgICAgICAgICAgICBi X2luZm8tPmRldmljZV9tb2RlbF92ZXJzaW9uCisgICAgICAgICAgICAgICAgPSBMSUJYTF9ERVZJ Q0VfTU9ERUxfVkVSU0lPTl9RRU1VX1hFTl9UUkFESVRJT05BTDsKKyAgICAgICAgfSBlbHNlIGlm ICghc3RyY21wKGJ1ZiwgInFlbXUteGVuIikpIHsKKyAgICAgICAgICAgIGJfaW5mby0+ZGV2aWNl X21vZGVsX3ZlcnNpb24KKyAgICAgICAgICAgICAgICA9IExJQlhMX0RFVklDRV9NT0RFTF9WRVJT SU9OX1FFTVVfWEVOOworICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCAibm9uZSIpKSB7 CisgICAgICAgICAgICBiX2luZm8tPmRldmljZV9tb2RlbF92ZXJzaW9uID0gTElCWExfREVWSUNF X01PREVMX1ZFUlNJT05fTk9ORTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAiVW5rbm93biBkZXZpY2VfbW9kZWxfdmVy c2lvbiBcIiVzXCIgc3BlY2lmaWVkXG4iLCBidWYpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAg ICAgICAgfQorICAgIH0gZWxzZSBpZiAoYl9pbmZvLT5kZXZpY2VfbW9kZWwpCisgICAgICAgIGZw cmludGYoc3RkZXJyLCAiV0FSTklORzogZGV2aWNlIG1vZGVsIG92ZXJyaWRlIGdpdmVuIHdpdGhv dXQgc3BlY2lmaWMgRE0gdmVyc2lvblxuIik7CisgICAgeGx1X2NmZ19nZXRfZGVmYm9vbCAoY29u ZmlnLCAiZGV2aWNlX21vZGVsX3N0dWJkb21haW5fb3ZlcnJpZGUiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICZiX2luZm8tPmRldmljZV9tb2RlbF9zdHViZG9tYWluLCAwKTsKKworICAgIGlm ICgheGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJkZXZpY2VfbW9kZWxfc3R1YmRvbWFpbl9z ZWNsYWJlbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWYsIDApKQorICAgICAg ICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nKGNvbmZpZywgImRldmljZV9tb2RlbF9zdHViZG9tYWlu X3NlY2xhYmVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT5kZXZp Y2VfbW9kZWxfc3NpZF9sYWJlbCwgMCk7CisKKyAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nKGNv bmZpZywgImRldmljZV9tb2RlbF91c2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZi X2luZm8tPmRldmljZV9tb2RlbF91c2VyLCAwKTsKKworI2RlZmluZSBwYXJzZV9leHRyYV9hcmdz KHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ZSA9IHhsdV9jZmdfZ2V0X2xpc3RfYXNfc3RyaW5nX2xpc3QoY29uZmlnLCAiZGV2aWNlX21vZGVs X2FyZ3MiI3R5cGUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiX2lu Zm8tPmV4dHJhIyN0eXBlLCAwKTsgICAgICAgICAgICBcCisgICAgaWYgKGUgJiYgZSAhPSBFU1JD SCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgZnByaW50ZihzdGRlcnIsInhsOiBVbmFibGUgdG8gcGFyc2UgZGV2aWNlX21vZGVsX2Fy Z3MiI3R5cGUiLlxuIik7XAorICAgICAgICBleGl0KC1FUlJPUl9GQUlMKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisgICAgLyogcGFy c2UgZXh0cmEgYXJncyBmb3IgcWVtdSwgY29tbW9uIHRvIGJvdGggcHYsIGh2bSAqLworICAgIHBh cnNlX2V4dHJhX2FyZ3MoKTsKKworICAgIC8qIHBhcnNlIGV4dHJhIGFyZ3MgZGVkaWNhdGVkIHRv IHB2ICovCisgICAgcGFyc2VfZXh0cmFfYXJncyhfcHYpOworCisgICAgLyogcGFyc2UgZXh0cmEg YXJncyBkZWRpY2F0ZWQgdG8gaHZtICovCisgICAgcGFyc2VfZXh0cmFfYXJncyhfaHZtKTsKKwor I3VuZGVmIHBhcnNlX2V4dHJhX2FyZ3MKKworICAgIC8qIElmIHdlJ3ZlIGFscmVhZHkgZ290IHZm Yj1bXSBmb3IgUFYgZ3Vlc3QgdGhlbiBpZ25vcmUgdG9wIGxldmVsCisgICAgICogVk5DIGNvbmZp Zy4gKi8KKyAgICBpZiAoY19pbmZvLT50eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX1BWICYmICFk X2NvbmZpZy0+bnVtX3ZmYnMpIHsKKyAgICAgICAgbG9uZyB2bmNfZW5hYmxlZCA9IDA7CisKKyAg ICAgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nIChjb25maWcsICJ2bmMiLCAmbCwgMCkpCisgICAg ICAgICAgICB2bmNfZW5hYmxlZCA9IGw7CisKKyAgICAgICAgaWYgKHZuY19lbmFibGVkKSB7Cisg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmZiICp2ZmI7CisgICAgICAgICAgICBsaWJ4bF9kZXZp Y2VfdmtiICp2a2I7CisKKyAgICAgICAgICAgIHZmYiA9IEFSUkFZX0VYVEVORF9JTklUKGRfY29u ZmlnLT52ZmJzLCBkX2NvbmZpZy0+bnVtX3ZmYnMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmZiX2luaXQpOworCisgICAgICAgICAgICB2a2IgPSBB UlJBWV9FWFRFTkRfSU5JVChkX2NvbmZpZy0+dmticywgZF9jb25maWctPm51bV92a2JzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZrYl9pbml0KTsK KworICAgICAgICAgICAgcGFyc2VfdG9wX2xldmVsX3ZuY19vcHRpb25zKGNvbmZpZywgJnZmYi0+ dm5jKTsKKyAgICAgICAgICAgIHBhcnNlX3RvcF9sZXZlbF9zZGxfb3B0aW9ucyhjb25maWcsICZ2 ZmItPnNkbCk7CisgICAgICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJr ZXltYXAiLCAmdmZiLT5rZXltYXAsIDApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg ICAgcGFyc2VfdG9wX2xldmVsX3ZuY19vcHRpb25zKGNvbmZpZywgJmJfaW5mby0+dS5odm0udm5j KTsKKyAgICAgICAgcGFyc2VfdG9wX2xldmVsX3NkbF9vcHRpb25zKGNvbmZpZywgJmJfaW5mby0+ dS5odm0uc2RsKTsKKyAgICB9CisKKyAgICBpZiAoY19pbmZvLT50eXBlID09IExJQlhMX0RPTUFJ Tl9UWVBFX0hWTSkgeworICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyAoY29uZmlnLCAi dmdhIiwgJmJ1ZiwgMCkpIHsKKyAgICAgICAgICAgIGlmICghc3RyY21wKGJ1ZiwgInN0ZHZnYSIp KSB7CisgICAgICAgICAgICAgICAgYl9pbmZvLT51Lmh2bS52Z2Eua2luZCA9IExJQlhMX1ZHQV9J TlRFUkZBQ0VfVFlQRV9TVEQ7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCAi Y2lycnVzIikpIHsKKyAgICAgICAgICAgICAgICBiX2luZm8tPnUuaHZtLnZnYS5raW5kID0gTElC WExfVkdBX0lOVEVSRkFDRV9UWVBFX0NJUlJVUzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0 cmNtcChidWYsICJub25lIikpIHsKKyAgICAgICAgICAgICAgICBiX2luZm8tPnUuaHZtLnZnYS5r aW5kID0gTElCWExfVkdBX0lOVEVSRkFDRV9UWVBFX05PTkU7CisgICAgICAgICAgICB9IGVsc2Ug aWYgKCFzdHJjbXAoYnVmLCAicXhsIikpIHsKKyAgICAgICAgICAgICAgICBiX2luZm8tPnUuaHZt LnZnYS5raW5kID0gTElCWExfVkdBX0lOVEVSRkFDRV9UWVBFX1FYTDsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIHZnYSBcIiVz XCIgc3BlY2lmaWVkXG4iLCBidWYpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAg ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcoY29uZmlnLCAic3Rk dmdhIiwgJmwsIDApKQorICAgICAgICAgICAgYl9pbmZvLT51Lmh2bS52Z2Eua2luZCA9IGwgPyBM SUJYTF9WR0FfSU5URVJGQUNFX1RZUEVfU1REIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTElCWExfVkdBX0lOVEVSRkFDRV9UWVBFX0NJUlJVUzsKKworICAgICAg ICBpZiAoIXhsdV9jZmdfZ2V0X3N0cmluZyhjb25maWcsICJoZHR5cGUiLCAmYnVmLCAwKSAmJgor ICAgICAgICAgICAgbGlieGxfaGR0eXBlX2Zyb21fc3RyaW5nKGJ1ZiwgJmJfaW5mby0+dS5odm0u aGR0eXBlKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IGludmFs aWQgdmFsdWUgXCIlc1wiIGZvciBcImhkdHlwZVwiXG4iLAorICAgICAgICAgICAgICAgICAgICBi dWYpOworICAgICAgICAgICAgICAgIGV4aXQgKDEpOworICAgICAgICB9CisKKyAgICAgICAgeGx1 X2NmZ19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAia2V5bWFwIiwgJmJfaW5mby0+dS5odm0ua2V5 bWFwLCAwKTsKKyAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbCAoY29uZmlnLCAic3BpY2UiLCAm Yl9pbmZvLT51Lmh2bS5zcGljZS5lbmFibGUsIDApOworICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0 X2xvbmcgKGNvbmZpZywgInNwaWNlcG9ydCIsICZsLCAwKSkKKyAgICAgICAgICAgIGJfaW5mby0+ dS5odm0uc3BpY2UucG9ydCA9IGw7CisgICAgICAgIGlmICgheGx1X2NmZ19nZXRfbG9uZyAoY29u ZmlnLCAic3BpY2V0bHNfcG9ydCIsICZsLCAwKSkKKyAgICAgICAgICAgIGJfaW5mby0+dS5odm0u c3BpY2UudGxzX3BvcnQgPSBsOworICAgICAgICB4bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25m aWcsICJzcGljZWhvc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZv LT51Lmh2bS5zcGljZS5ob3N0LCAwKTsKKyAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25m aWcsICJzcGljZWRpc2FibGVfdGlja2V0aW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmYl9pbmZvLT51Lmh2bS5zcGljZS5kaXNhYmxlX3RpY2tldGluZywgMCk7CisgICAgICAgIHhs dV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZpZywgInNwaWNlcGFzc3dkIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0uc3BpY2UucGFzc3dkLCAwKTsKKyAg ICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJzcGljZWFnZW50X21vdXNlIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS5zcGljZS5hZ2VudF9tb3Vz ZSwgMCk7CisgICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAic3BpY2V2ZGFnZW50 IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS5zcGljZS52ZGFn ZW50LCAwKTsKKyAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJzcGljZV9jbGlw Ym9hcmRfc2hhcmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5o dm0uc3BpY2UuY2xpcGJvYXJkX3NoYXJpbmcsIDApOworICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0 X2xvbmcgKGNvbmZpZywgInNwaWNldXNicmVkaXJlY3Rpb24iLCAmbCwgMCkpCisgICAgICAgICAg ICBiX2luZm8tPnUuaHZtLnNwaWNlLnVzYnJlZGlyZWN0aW9uID0gbDsKKyAgICAgICAgeGx1X2Nm Z19yZXBsYWNlX3N0cmluZyAoY29uZmlnLCAic3BpY2VfaW1hZ2VfY29tcHJlc3Npb24iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYl9pbmZvLT51Lmh2bS5zcGljZS5pbWFnZV9j b21wcmVzc2lvbiwgMCk7CisgICAgICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZpZywg InNwaWNlX3N0cmVhbWluZ192aWRlbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZiX2luZm8tPnUuaHZtLnNwaWNlLnN0cmVhbWluZ192aWRlbywgMCk7CisgICAgICAgIHhsdV9j ZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAibm9ncmFwaGljIiwgJmJfaW5mby0+dS5odm0ubm9ncmFw aGljLCAwKTsKKyAgICAgICAgaWYgKCF4bHVfY2ZnX2dldF9sb25nKGNvbmZpZywgImdmeF9wYXNz dGhydSIsICZsLCAxKSkgeworICAgICAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJmJfaW5mby0+ dS5odm0uZ2Z4X3Bhc3N0aHJ1LCBsKTsKKyAgICAgICAgfSBlbHNlIGlmICgheGx1X2NmZ19nZXRf c3RyaW5nKGNvbmZpZywgImdmeF9wYXNzdGhydSIsICZidWYsIDApKSB7CisgICAgICAgICAgICBp ZiAobGlieGxfZ2Z4X3Bhc3N0aHJ1X2tpbmRfZnJvbV9zdHJpbmcoYnVmLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8tPnUuaHZtLmdmeF9wYXNzdGhydV9r aW5kKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAg ICAgICAgICAgIkVSUk9SOiBpbnZhbGlkIHZhbHVlIFwiJXNcIiBmb3IgXCJnZnhfcGFzc3RocnVc IlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zik7CisgICAgICAgICAgICAgICAgZXhp dCAoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaWJ4bF9kZWZib29sX3NldCgmYl9p bmZvLT51Lmh2bS5nZnhfcGFzc3RocnUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIHN3aXRj aCAoeGx1X2NmZ19nZXRfbGlzdF9hc19zdHJpbmdfbGlzdChjb25maWcsICJzZXJpYWwiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5o dm0uc2VyaWFsX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxKSkKKyAgICAgICAgeworCisgICAgICAgIGNhc2UgMDogYnJlYWs7IC8qIFN1Y2Nl c3MgKi8KKyAgICAgICAgY2FzZSBFU1JDSDogYnJlYWs7IC8qIE9wdGlvbiBub3QgcHJlc2VudCAq LworICAgICAgICBjYXNlIEVJTlZBTDoKKyAgICAgICAgICAgIC8qIElmIGl0J3Mgbm90IGEgdmFs aWQgbGlzdCwgdHJ5IHJlYWRpbmcgaXQgYXMgYW4gYXRvbSwKKyAgICAgICAgICAgICAqIGZhbGxp bmcgdGhyb3VnaCB0byBhbiBlcnJvciBpZiBpdCBmYWlscyAqLworICAgICAgICAgICAgaWYgKCF4 bHVfY2ZnX3JlcGxhY2Vfc3RyaW5nKGNvbmZpZywgInNlcmlhbCIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0uc2VyaWFsLCAwKSkKKyAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8qIEZBTExUSFJVICovCisgICAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwieGw6IFVuYWJsZSB0byBwYXJzZSBz ZXJpYWwuXG4iKTsKKyAgICAgICAgICAgIGV4aXQoLUVSUk9SX0ZBSUwpOworICAgICAgICB9Cisg ICAgICAgIHhsdV9jZmdfcmVwbGFjZV9zdHJpbmcgKGNvbmZpZywgImJvb3QiLCAmYl9pbmZvLT51 Lmh2bS5ib290LCAwKTsKKyAgICAgICAgeGx1X2NmZ19nZXRfZGVmYm9vbChjb25maWcsICJ1c2Ii LCAmYl9pbmZvLT51Lmh2bS51c2IsIDApOworICAgICAgICBpZiAoIXhsdV9jZmdfZ2V0X2xvbmcg KGNvbmZpZywgInVzYnZlcnNpb24iLCAmbCwgMCkpCisgICAgICAgICAgICBiX2luZm8tPnUuaHZt LnVzYnZlcnNpb24gPSBsOworICAgICAgICBzd2l0Y2ggKHhsdV9jZmdfZ2V0X2xpc3RfYXNfc3Ry aW5nX2xpc3QoY29uZmlnLCAidXNiZGV2aWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZiX2luZm8tPnUuaHZtLnVzYmRldmljZV9saXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkpCisgICAgICAg IHsKKworICAgICAgICBjYXNlIDA6IGJyZWFrOyAvKiBTdWNjZXNzICovCisgICAgICAgIGNhc2Ug RVNSQ0g6IGJyZWFrOyAvKiBPcHRpb24gbm90IHByZXNlbnQgKi8KKyAgICAgICAgY2FzZSBFSU5W QUw6CisgICAgICAgICAgICAvKiBJZiBpdCdzIG5vdCBhIHZhbGlkIGxpc3QsIHRyeSByZWFkaW5n IGl0IGFzIGFuIGF0b20sCisgICAgICAgICAgICAgKiBmYWxsaW5nIHRocm91Z2ggdG8gYW4gZXJy b3IgaWYgaXQgZmFpbHMgKi8KKyAgICAgICAgICAgIGlmICgheGx1X2NmZ19yZXBsYWNlX3N0cmlu Zyhjb25maWcsICJ1c2JkZXZpY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZiX2luZm8tPnUuaHZtLnVzYmRldmljZSwgMCkpCisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAvKiBGQUxMVEhSVSAqLworICAgICAgICBkZWZhdWx0OgorICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsInhsOiBVbmFibGUgdG8gcGFyc2UgdXNiZGV2aWNlLlxuIik7 CisgICAgICAgICAgICBleGl0KC1FUlJPUl9GQUlMKTsKKyAgICAgICAgfQorICAgICAgICB4bHVf Y2ZnX3JlcGxhY2Vfc3RyaW5nIChjb25maWcsICJzb3VuZGh3IiwgJmJfaW5mby0+dS5odm0uc291 bmRodywgMCk7CisgICAgICAgIHhsdV9jZmdfZ2V0X2RlZmJvb2woY29uZmlnLCAieGVuX3BsYXRm b3JtX3BjaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJfaW5mby0+dS5odm0ueGVu X3BsYXRmb3JtX3BjaSwgMCk7CisKKyAgICAgICAgaWYoYl9pbmZvLT51Lmh2bS52bmMubGlzdGVu CisgICAgICAgICAgICYmIGJfaW5mby0+dS5odm0udm5jLmRpc3BsYXkKKyAgICAgICAgICAgJiYg c3RyY2hyKGJfaW5mby0+dS5odm0udm5jLmxpc3RlbiwgJzonKSAhPSBOVUxMKSB7CisgICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgIkVSUk9SOiBEaXNwbGF5 IHNwZWNpZmllZCBib3RoIGluIHZuY2xpc3RlbiIKKyAgICAgICAgICAgICAgICAgICAgIiBhbmQg dm5jZGlzcGxheSFcbiIpOworICAgICAgICAgICAgZXhpdCAoMSk7CisKKyAgICAgICAgfQorCisg ICAgICAgIGlmICgheGx1X2NmZ19nZXRfc3RyaW5nIChjb25maWcsICJ2ZW5kb3JfZGV2aWNlIiwg JmJ1ZiwgMCkpIHsKKyAgICAgICAgICAgIGxpYnhsX3ZlbmRvcl9kZXZpY2UgZDsKKworICAgICAg ICAgICAgZSA9IGxpYnhsX3ZlbmRvcl9kZXZpY2VfZnJvbV9zdHJpbmcoYnVmLCAmZCk7CisgICAg ICAgICAgICBpZiAoZSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAg ICAgICAgICAgICAgICAgICAgInhsOiB1bmtub3duIHZlbmRvcl9kZXZpY2UgJyVzJ1xuIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgIGJ1Zik7CisgICAgICAgICAgICAgICAgZXhpdCgtRVJST1Jf RkFJTCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJfaW5mby0+dS5odm0udmVuZG9y X2RldmljZSA9IGQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X3N0 cmluZyAoY29uZmlnLCAiZ2ljX3ZlcnNpb24iLCAmYnVmLCAxKSkgeworICAgICAgICBlID0gbGli eGxfZ2ljX3ZlcnNpb25fZnJvbV9zdHJpbmcoYnVmLCAmYl9pbmZvLT5hcmNoX2FybS5naWNfdmVy c2lvbik7CisgICAgICAgIGlmIChlKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAg ICAgICAgICAgICAgICAgICAgIlVua25vd24gZ2ljX3ZlcnNpb24gXCIlc1wiIHNwZWNpZmllZFxu IiwgYnVmKTsKKyAgICAgICAgICAgIGV4aXQoLUVSUk9SX0ZBSUwpOworICAgICAgICB9CisgICAg IH0KKworICAgIHhsdV9jZmdfZGVzdHJveShjb25maWcpOworfQorCisvKiBSZXR1cm5zIC0xIG9u IGZhaWx1cmU7IHRoZSBhbW91bnQgb2YgbWVtb3J5IG9uIHN1Y2Nlc3MuICovCitpbnQ2NF90IHBh cnNlX21lbV9zaXplX2tiKGNvbnN0IGNoYXIgKm1lbSkKK3sKKyAgICBjaGFyICplbmRwdHI7Cisg ICAgaW50NjRfdCBrYnl0ZXM7CisKKyAgICBrYnl0ZXMgPSBzdHJ0b2xsKG1lbSwgJmVuZHB0ciwg MTApOworCisgICAgaWYgKHN0cmxlbihlbmRwdHIpID4gMSkKKyAgICAgICAgcmV0dXJuIC0xOwor CisgICAgc3dpdGNoICh0b2xvd2VyKCh1aW50OF90KSplbmRwdHIpKSB7CisgICAgY2FzZSAndCc6 CisgICAgICAgIGtieXRlcyA8PD0gMTA7CisgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAg Y2FzZSAnZyc6CisgICAgICAgIGtieXRlcyA8PD0gMTA7CisgICAgICAgIC8qIGZhbGx0aHJvdWdo ICovCisgICAgY2FzZSAnXDAnOgorICAgIGNhc2UgJ20nOgorICAgICAgICBrYnl0ZXMgPDw9IDEw OworICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgIGNhc2UgJ2snOgorICAgICAgICBicmVh azsKKyAgICBjYXNlICdiJzoKKyAgICAgICAga2J5dGVzID4+PSAxMDsKKyAgICAgICAgYnJlYWs7 CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiBr Ynl0ZXM7Cit9CisKKwordm9pZCBzcGxpdF9zdHJpbmdfaW50b19zdHJpbmdfbGlzdChjb25zdCBj aGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmRlbGltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdHJpbmdf bGlzdCAqcHNsKQoreworICAgIGNoYXIgKnMsICpzYXZlcHRyOworICAgIGNvbnN0IGNoYXIgKnA7 CisgICAgbGlieGxfc3RyaW5nX2xpc3Qgc2w7CisKKyAgICBpbnQgaSA9IDAsIG5yID0gMDsKKwor ICAgIHMgPSBzdHJkdXAoc3RyKTsKKyAgICBpZiAocyA9PSBOVUxMKSB7CisgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSB0byBzcGxpdCBzdHJpbmdcbiIp OworICAgICAgICBleGl0KC0xKTsKKyAgICB9CisKKyAgICAvKiBDb3VudCBudW1iZXIgb2YgZW50 cmllcyAqLworICAgIHAgPSBzdHJ0b2tfcihzLCBkZWxpbSwgJnNhdmVwdHIpOworICAgIGRvIHsK KyAgICAgICAgbnIrKzsKKyAgICB9IHdoaWxlICgocCA9IHN0cnRva19yKE5VTEwsIGRlbGltLCAm c2F2ZXB0cikpKTsKKworICAgIGZyZWUocyk7CisKKyAgICBzID0gc3RyZHVwKHN0cik7CisKKyAg ICBzbCA9IG1hbGxvYygobnIrMSkgKiBzaXplb2YgKGNoYXIgKikpOworICAgIGlmIChzbCA9PSBO VUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9y eSB0byBzcGxpdCBzdHJpbmdcbiIpOworICAgICAgICBleGl0KC0xKTsKKyAgICB9CisKKyAgICBw ID0gc3RydG9rX3IocywgZGVsaW0sICZzYXZlcHRyKTsKKyAgICBkbyB7CisgICAgICAgIGFzc2Vy dChpIDwgbnIpOworICAgICAgICBzbFtpXSA9IHN0cmR1cChwKTsKKyAgICAgICAgaSsrOworICAg IH0gd2hpbGUgKChwID0gc3RydG9rX3IoTlVMTCwgZGVsaW0sICZzYXZlcHRyKSkpOworICAgIHNs W2ldID0gTlVMTDsKKworICAgICpwc2wgPSBzbDsKKworICAgIGZyZWUocyk7Cit9CisKK3ZvaWQg dHJpbShjaGFyX3ByZWRpY2F0ZV90IHByZWRpY2F0ZSwgY29uc3QgY2hhciAqaW5wdXQsIGNoYXIg KipvdXRwdXQpCit7CisgICAgY29uc3QgY2hhciAqZmlyc3QsICphZnRlcjsKKworICAgIGZvciAo Zmlyc3QgPSBpbnB1dDsKKyAgICAgICAgICpmaXJzdCAmJiBwcmVkaWNhdGUoKHVuc2lnbmVkIGNo YXIpZmlyc3RbMF0pOworICAgICAgICAgZmlyc3QrKykKKyAgICAgICAgOworCisgICAgZm9yIChh ZnRlciA9IGZpcnN0ICsgc3RybGVuKGZpcnN0KTsKKyAgICAgICAgIGFmdGVyID4gZmlyc3QgJiYg cHJlZGljYXRlKCh1bnNpZ25lZCBjaGFyKWFmdGVyWy0xXSk7CisgICAgICAgICBhZnRlci0tKQor ICAgICAgICA7CisKKyAgICBzaXplX3QgbGVuX25vbm51bGwgPSBhZnRlciAtIGZpcnN0OworICAg IGNoYXIgKnJlc3VsdCA9IHhtYWxsb2MobGVuX25vbm51bGwgKyAxKTsKKworICAgIG1lbWNweShy ZXN1bHQsIGZpcnN0LCBsZW5fbm9ubnVsbCk7CisgICAgcmVzdWx0W2xlbl9ub25udWxsXSA9IDA7 CisKKyAgICAqb3V0cHV0ID0gcmVzdWx0OworfQorCitpbnQgc3BsaXRfc3RyaW5nX2ludG9fcGFp cihjb25zdCBjaGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpkZWxpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiphLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKmIpCit7CisgICAgY2hhciAqcywgKnAsICpzYXZlcHRy LCAqYWEgPSBOVUxMLCAqYmIgPSBOVUxMOworICAgIGludCByYyA9IDA7CisKKyAgICBzID0geHN0 cmR1cChzdHIpOworCisgICAgcCA9IHN0cnRva19yKHMsIGRlbGltLCAmc2F2ZXB0cik7CisgICAg aWYgKHAgPT0gTlVMTCkgeworICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICBnb3Rv IG91dDsKKyAgICB9CisgICAgYWEgPSB4c3RyZHVwKHApOworICAgIHAgPSBzdHJ0b2tfcihOVUxM LCBkZWxpbSwgJnNhdmVwdHIpOworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgcmMgPSBF UlJPUl9JTlZBTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorICAgIGJiID0geHN0cmR1cChw KTsKKworICAgICphID0gYWE7CisgICAgYWEgPSBOVUxMOworICAgICpiID0gYmI7CisgICAgYmIg PSBOVUxMOworb3V0OgorICAgIGZyZWUocyk7CisgICAgZnJlZShhYSk7CisgICAgZnJlZShiYik7 CisgICAgcmV0dXJuIHJjOworfQorCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2Rl OiBDCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBF bmQ6CisgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX3BhcnNlLmggYi90b29scy94bC94bF9w YXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmRiOGJjM2YwNTEK LS0tIC9kZXYvbnVsbAorKysgYi90b29scy94bC94bF9wYXJzZS5oCkBAIC0wLDAgKzEsNjUgQEAK Ky8qCisgKiBDb3B5cmlnaHQgMjAwOS0yMDE3IENpdHJpeCBMdGQgYW5kIG90aGVyIGNvbnRyaWJ1 dG9ycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNp YWwKKyAqIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBYTF9QQVJTRV9I CisjZGVmaW5lIFhMX1BBUlNFX0gKKworI2luY2x1ZGUgPGxpYnhsLmg+CisKK3ZvaWQgcGFyc2Vf Y29uZmlnX2RhdGEoY29uc3QgY2hhciAqY29uZmlnX3NvdXJjZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqY29uZmlnX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIGlu dCBjb25maWdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fY29uZmln ICpkX2NvbmZpZyk7CitpbnQgcGFyc2VfcmFuZ2UoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBs b25nICphLCB1bnNpZ25lZCBsb25nICpiKTsKK2ludDY0X3QgcGFyc2VfbWVtX3NpemVfa2IoY29u c3QgY2hhciAqbWVtKTsKK3ZvaWQgcGFyc2VfZGlza19jb25maWcoWExVX0NvbmZpZyAqKmNvbmZp ZywgY29uc3QgY2hhciAqc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNl X2Rpc2sgKmRpc2spOworCit2b2lkIHBhcnNlX2Rpc2tfY29uZmlnX211bHRpc3RyaW5nKFhMVV9D b25maWcgKipjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBu c3BlY3MsIGNvbnN0IGNoYXIgKmNvbnN0ICpzcGVjcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2spOworaW50IHBhcnNlX3VzYmN0cmxf Y29uZmlnKGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJsLCBjaGFyICp0b2tlbik7CitpbnQg cGFyc2VfdXNiZGV2X2NvbmZpZyhsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXYsIGNoYXIgKnRv a2VuKTsKK2ludCBwYXJzZV9jcHVyYW5nZShjb25zdCBjaGFyICpjcHUsIGxpYnhsX2JpdG1hcCAq Y3B1bWFwKTsKK2ludCBwYXJzZV9uaWNfY29uZmlnKGxpYnhsX2RldmljZV9uaWMgKm5pYywgWExV X0NvbmZpZyAqKmNvbmZpZywgY2hhciAqdG9rZW4pOworCisKK2ludCBtYXRjaF9vcHRpb25fc2l6 ZShjb25zdCBjaGFyICpwcmVmaXgsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqYXJnLCBjaGFyICoqYXJnb3B0KTsKKyNkZWZpbmUgTUFUQ0hfT1BUSU9OKHByZWZpeCwg YXJnLCBvcGFyZykgXAorICAgIG1hdGNoX29wdGlvbl9zaXplKChwcmVmaXggIj0iKSwgc2l6ZW9m KChwcmVmaXgpKSwgKGFyZyksICYob3BhcmcpKQorCisKK3ZvaWQgc3BsaXRfc3RyaW5nX2ludG9f c3RyaW5nX2xpc3QoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpkZWxpbSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfc3RyaW5nX2xpc3QgKnBzbCk7CitpbnQg c3BsaXRfc3RyaW5nX2ludG9fcGFpcihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmRlbGlt LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmEsIGNoYXIgKipiKTsKK3ZvaWQg cmVwbGFjZV9zdHJpbmcoY2hhciAqKnN0ciwgY29uc3QgY2hhciAqdmFsKTsKKworLyogTkI6IHRo aXMgZm9sbG93cyB0aGUgaW50ZXJmYWNlIHVzZWQgYnkgPGN0eXBlLmg+LiBTZWUgJ21hbiAzIGN0 eXBlJworICAgYW5kIGxvb2sgZm9yIENUWVBFIGluIGxpYnhsX2ludGVybmFsLmggKi8KK3R5cGVk ZWYgaW50ICgqY2hhcl9wcmVkaWNhdGVfdCkoY29uc3QgaW50IGMpOwordm9pZCB0cmltKGNoYXJf cHJlZGljYXRlX3QgcHJlZGljYXRlLCBjb25zdCBjaGFyICppbnB1dCwgY2hhciAqKm91dHB1dCk7 CisKK2NvbnN0IGNoYXIgKmdldF9hY3Rpb25fb25fc2h1dGRvd25fbmFtZShsaWJ4bF9hY3Rpb25f b25fc2h1dGRvd24gYSk7CisKKyNlbmRpZgkvKiBYTF9QQVJTRV9IICovCisKKy8qCisgKiBMb2Nh bCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50 LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=