From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olaf Hering Subject: [PATCH v11 1/2] libxl: add support for vscsi Date: Fri, 8 Apr 2016 07:01:30 +0000 Message-ID: <1460098891-13278-2-git-send-email-olaf@aepfle.de> References: <1460098891-13278-1-git-send-email-olaf@aepfle.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1460098891-13278-1-git-send-email-olaf@aepfle.de> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Wei Liu , Olaf Hering , Ian Jackson , Ian Campbell , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org UG9ydCBwdnNjc2kgc3VwcG9ydCBmcm9tIHhlbmQgdG8gbGlieGw6CgogdnNjc2k9WydwZGV2LHZk ZXZ7LG9wdGlvbnN9J10KIHhsIHNjc2ktYXR0YWNoCiB4bCBzY3NpLWRldGFjaAogeGwgc2NzaS1s aXN0CgpTaWduZWQtb2ZmLWJ5OiBPbGFmIEhlcmluZyA8b2xhZkBhZXBmbGUuZGU+CkNjOiBJYW4g SmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNvbT4KQ2M6IFN0ZWZhbm8gU3RhYmVsbGlu aSA8c3RlZmFuby5zdGFiZWxsaW5pQGV1LmNpdHJpeC5jb20+CkNjOiBJYW4gQ2FtcGJlbGwgPGlh bi5jYW1wYmVsbEBjaXRyaXguY29tPgpDYzogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4K LS0tCiBkb2NzL21hbi94bC5jZmcucG9kLjUgICAgICAgICAgICAgICAgfCAgIDU2ICsrCiBkb2Nz L21hbi94bC5wb2QuMSAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICsKIHRvb2xzL2xpYnhsL01h a2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDIgKwogdG9vbHMvbGlieGwvbGlieGwuYyAgICAg ICAgICAgICAgICAgIHwgICAgOSArCiB0b29scy9saWJ4bC9saWJ4bC5oICAgICAgICAgICAgICAg ICAgfCAgIDQyICsrCiB0b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYyAgICAgICAgICAgfCAgIDQx ICstCiB0b29scy9saWJ4bC9saWJ4bF9kZXZpY2UuYyAgICAgICAgICAgfCAgICAyICsKIHRvb2xz L2xpYnhsL2xpYnhsX2ludGVybmFsLmggICAgICAgICB8ICAgIDggKwogdG9vbHMvbGlieGwvbGli eGxfdHlwZXMuaWRsICAgICAgICAgIHwgICA1MyArKwogdG9vbHMvbGlieGwvbGlieGxfdHlwZXNf aW50ZXJuYWwuaWRsIHwgICAgMSArCiB0b29scy9saWJ4bC9saWJ4bF92c2NzaS5jICAgICAgICAg ICAgfCAxMTYwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRvb2xzL2xpYnhs L2xpYnhsdV92c2NzaS5jICAgICAgICAgICB8ICA2NjQgKysrKysrKysrKysrKysrKysrKwogdG9v bHMvbGlieGwvbGlieGx1dGlsLmggICAgICAgICAgICAgIHwgICAxOCArCiB0b29scy9saWJ4bC94 bC5oICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKIHRvb2xzL2xpYnhsL3hsX2NtZGltcGwu YyAgICAgICAgICAgICB8ICAyMjUgKysrKysrLQogdG9vbHMvbGlieGwveGxfY21kdGFibGUuYyAg ICAgICAgICAgIHwgICAxNSArCiAxNiBmaWxlcyBjaGFuZ2VkLCAyMzEzIGluc2VydGlvbnMoKyks IDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jcy9tYW4veGwuY2ZnLnBvZC41IGIvZG9j cy9tYW4veGwuY2ZnLnBvZC41CmluZGV4IGE0Y2MxYjMuLmJlNDU0NmIgMTAwNjQ0Ci0tLSBhL2Rv Y3MvbWFuL3hsLmNmZy5wb2QuNQorKysgYi9kb2NzL21hbi94bC5jZmcucG9kLjUKQEAgLTUxNyw2 ICs1MTcsNjIgQEAgdmFsdWUgaXMgb3B0aW9uYWwgaWYgdGhpcyBpcyBhIGd1ZXN0IGRvbWFpbi4K IAogPWJhY2sKIAorPWl0ZW0gQjx2c2NzaT1bICJWU0NTSV9TUEVDX1NUUklORyIsICJWU0NTSV9T UEVDX1NUUklORyIsIC4uLl0+CisKK1NwZWNpZmllcyB0aGUgUFZTQ1NJIGRldmljZXMgdG8gYmUg cHJvdmlkZWQgdG8gdGhlIGd1ZXN0LiBQVlNDU0kgcGFzc2VzCitTQ1NJIGRldmljZXMgZnJvbSB0 aGUgYmFja2VuZCBkb21haW4gdG8gdGhlIGd1ZXN0LgorCitFYWNoIFZTQ1NJX1NQRUNfU1RSSU5H IGNvbnNpc3RzIG9mICJwZGV2LHZkZXZbLG9wdGlvbnNdIi4KKydwZGV2JyBkZXNjcmliZXMgdGhl IHBoeXNpY2FsIGRldmljZSwgcHJlZmVyYWJsZSBpbiBhIHBlcnNpc3RlbnQgZm9ybWF0CitzdWNo IGFzIC9kZXYvZGlzay9ieS0qLyouCisndmRldicgaXMgdGhlIGRvbVUgZGV2aWNlIGluIHZIT1NU OkNIQU5ORUw6VEFSR0VUOkxVTiBub3RhdGlvbiwgYWxsIGludGVnZXJzLgorJ29wdGlvbnMnIGxp c3RzIGFkZGl0aW9uYWwgZmxhZ3Mgd2hpY2ggYSBiYWNrZW5kIG1heSByZWNvZ25pemUuCisKK1Ro ZSBzdXBwb3J0ZWQgdmFsdWVzIGZvciAicGRldiIgYW5kICJvcHRpb25zIiBkZXBlbmRzIG9uIHRo ZSBiYWNrZW5kIGRyaXZlciB1c2VkOgorCis9b3ZlciA0CisKKz1pdGVtIEI8TGludXg+CisKKz1v dmVyIDQKKworPWl0ZW0gQzxwZGV2PgorCitUaGUgYmFja2VuZCBkcml2ZXIgaW4gdGhlIHB2b3Bz IGtlcm5lbCBpcyBwYXJ0IG9mIHRoZSBMaW51eC1JTyBUYXJnZXQgZnJhbWV3b3JrCisoTElPKS4g QXMgc3VjaCB0aGUgU0NTSSBkZXZpY2VzIGhhdmUgdG8gYmUgY29uZmlndXJlZCBmaXJzdCB3aXRo IHRoZSB0b29scworcHJvdmlkZWQgYnkgdGhpcyBmcmFtZXdvcmssIHN1Y2ggYXMgYSB4ZW4tc2Nz aWJhY2sgYXdhcmUgdGFyZ2V0Y2xpLiBUaGUgInBkZXYiCitpbiBkb21VLmNmZyBoYXMgdG8gcmVm ZXIgdG8gYSBjb25maWcgaXRlbSBpbiB0aGF0IGZyYW1ld29yayBpbnN0ZWFkIG9mIHRoZSByYXcK K2RldmljZS4gVXN1YWxseSB0aGlzIGlzIGEgV1dOIGluIHRoZSBmb3JtIG9mICJuYWEuV1dOOkxV TiIuCisKKz1pdGVtIEM8b3B0aW9ucz4KKworTm8gb3B0aW9ucyByZWNvZ25pemVkLgorCis9YmFj aworCis9aXRlbSBCPExpbnV4IGJhc2VkIG9uIGNsYXNzaWMgWGVuIGtlcm5lbD4KKworPW92ZXIg NAorCis9aXRlbSBDPHBkZXY+CisKK1RoZSBkb20wIGRldmljZSBpbiBlaXRoZXIgL2Rldi9zY3Np ZGV2IG9yIHBIT1NUOkNIQU5ORUw6VEFSR0VUOkxVTiBub3RhdGlvbi4KKworSXQncyByZWNvbW1l bmRlZCB0byB1c2UgcGVyc2lzdGVudCBuYW1lcyAiL2Rldi9kaXNrL2J5LSovKiIgdG8gcmVmZXIg dG8gYSAicGRldiIuCitUaGUgdG9vbHN0YWNrIHdpbGwgdHJhbnNsYXRlIHRoaXMgaW50ZXJuYWxs eSB0byAiaDpjOnQ6bCIgbm90YXRpb24sIHdoaWNoIGlzIGhvdwordGhlIGJhY2tlbmQgZHJpdmVy IHdpbGwgYWNjZXNzIHRoZSBkZXZpY2UuIFVzaW5nIHRoZSAiaDpjOnQ6bCIgbm90YXRpb24gZm9y CisicGRldiIgaW4gZG9tVS5jZmcgaXMgZGlzY291cmFnZWQgYmVjYXVzZSB0aGlzIHZhbHVlIHdp bGwgY2hhbmdlIGFjcm9zcyByZWJvb3RzLAorZGVwZW5kaW5nIG9uIHRoZSBkZXRlY3Rpb24gb3Jk ZXIgaW4gdGhlIE9TLgorCis9aXRlbSBDPG9wdGlvbnM+CisKK0N1cnJlbnRseSBvbmx5IHRoZSBv cHRpb24gdmFsdWUgImZlYXR1cmUtaG9zdCIgaXMgcmVjb2duaXplZC4gU0NTSSBjb21tYW5kCitl bXVsYXRpb24gaW4gYmFja2VuZCBkcml2ZXIgaXMgYnlwYXNzZWQgd2hlbiAiZmVhdHVyZS1ob3N0 IiBpcyBzcGVjaWZpZWQuCisKKz1iYWNrCisKKz1iYWNrCisKID1pdGVtIEI8dmZiPVsgIlZGQl9T UEVDX1NUUklORyIsICJWRkJfU1BFQ19TVFJJTkciLCAuLi5dPgogCiBTcGVjaWZpZXMgdGhlIHBh cmF2aXJ0dWFsIGZyYW1lYnVmZmVyIGRldmljZXMgd2hpY2ggc2hvdWxkIGJlIHN1cHBsaWVkCmRp ZmYgLS1naXQgYS9kb2NzL21hbi94bC5wb2QuMSBiL2RvY3MvbWFuL3hsLnBvZC4xCmluZGV4IGUy YmQzMmQuLmQzYTRhNWYgMTAwNjQ0Ci0tLSBhL2RvY3MvbWFuL3hsLnBvZC4xCisrKyBiL2RvY3Mv bWFuL3hsLnBvZC4xCkBAIC0xNDE2LDYgKzE0MTYsMjQgQEAgTGlzdCB2aXJ0dWFsIHRydXN0ZWQg cGxhdGZvcm0gbW9kdWxlcyBmb3IgYSBkb21haW4uCiAKID1iYWNrCiAKKz1oZWFkMiBQVlNDU0kg REVWSUNFUworCis9b3ZlciA0CisKKz1pdGVtIEI8c2NzaS1hdHRhY2g+IEk8ZG9tYWluLWlkPiBJ PHBkZXY+IEk8dmRldj4sSTxbZmVhdHVyZS1ob3N0XT4KKworQ3JlYXRlcyBhIG5ldyB2c2NzaSBk ZXZpY2UgaW4gdGhlIGRvbWFpbiBzcGVjaWZpZWQgYnkgSTxkb21haW4taWQ+LgorCis9aXRlbSBC PHNjc2ktZGV0YWNoPiBJPGRvbWFpbi1pZD4gSTx2ZGV2PgorCitSZW1vdmVzIHRoZSB2c2NzaSBk ZXZpY2UgZnJvbSBkb21haW4gc3BlY2lmaWVkIGJ5IEk8ZG9tYWluLWlkPi4KKworPWl0ZW0gQjxz Y3NpLWxpc3Q+IEk8ZG9tYWluLWlkPiBJPFtkb21haW4taWRdIC4uLj4KKworTGlzdCB2c2NzaSBk ZXZpY2VzIGZvciB0aGUgZG9tYWluIHNwZWNpZmllZCBieSBJPGRvbWFpbi1pZD4uCisKKz1iYWNr CisKID1oZWFkMSBQQ0kgUEFTUy1USFJPVUdICiAKID1vdmVyIDQKZGlmZiAtLWdpdCBhL3Rvb2xz L2xpYnhsL01ha2VmaWxlIGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKaW5kZXggNGZjMjY0ZC4uNjYw ZTZmNSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvTWFrZWZpbGUKKysrIGIvdG9vbHMvbGlieGwv TWFrZWZpbGUKQEAgLTEwOCw2ICsxMDgsNyBAQCBlbmRpZgogTElCWExfTElCUyArPSAtbHlhamwK IAogTElCWExfT0JKUyA9IGZsZXhhcnJheS5vIGxpYnhsLm8gbGlieGxfY3JlYXRlLm8gbGlieGxf ZG0ubyBsaWJ4bF9wY2kubyBcCisJCQlsaWJ4bF92c2NzaS5vIFwKIAkJCWxpYnhsX2RvbS5vIGxp YnhsX2V4ZWMubyBsaWJ4bF94c2hlbHAubyBsaWJ4bF9kZXZpY2UubyBcCiAJCQlsaWJ4bF9pbnRl cm5hbC5vIGxpYnhsX3V0aWxzLm8gbGlieGxfdXVpZC5vIFwKIAkJCWxpYnhsX2pzb24ubyBsaWJ4 bF9hb3V0aWxzLm8gbGlieGxfbnVtYS5vIGxpYnhsX3ZudW1hLm8gXApAQCAtMTUxLDYgKzE1Miw3 IEBAIEFVVE9JTkNTPSBsaWJ4bHVfY2ZnX3kuaCBsaWJ4bHVfY2ZnX2wuaCBfbGlieGxfbGlzdC5o IF9wYXRocy5oIFwKIEFVVE9TUkNTPSBsaWJ4bHVfY2ZnX3kuYyBsaWJ4bHVfY2ZnX2wuYwogQVVU T1NSQ1MgKz0gX2xpYnhsX3NhdmVfbXNnc19jYWxsb3V0LmMgX2xpYnhsX3NhdmVfbXNnc19oZWxw ZXIuYwogTElCWExVX09CSlMgPSBsaWJ4bHVfY2ZnX3kubyBsaWJ4bHVfY2ZnX2wubyBsaWJ4bHVf Y2ZnLm8gXAorCWxpYnhsdV92c2NzaS5vIFwKIAlsaWJ4bHVfZGlza19sLm8gbGlieGx1X2Rpc2su byBsaWJ4bHVfdmlmLm8gbGlieGx1X3BjaS5vCiAkKExJQlhMVV9PQkpTKTogQ0ZMQUdTICs9ICQo Q0ZMQUdTX2xpYnhlbmN0cmwpICMgRm9yIHhlbnRvb2xsb2cuaAogCmRpZmYgLS1naXQgYS90b29s cy9saWJ4bC9saWJ4bC5jIGIvdG9vbHMvbGlieGwvbGlieGwuYwppbmRleCA4NzE5ZjU0Li42MGUz ODAzIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bC5jCisrKyBiL3Rvb2xzL2xpYnhsL2xp YnhsLmMKQEAgLTQzMTUsNiArNDMxNSw3IEBAIERFRklORV9ERVZJQ0VfUkVNT1ZFX0NVU1RPTSh1 c2JjdHJsLCBkZXN0cm95LCAxKQogLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGRlZmlu ZWQ6CiAgKiBsaWJ4bF9kZXZpY2VfZGlza19hZGQKICAqIGxpYnhsX2RldmljZV9uaWNfYWRkCisg KiBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2FkZAogICogbGlieGxfZGV2aWNlX3Z0cG1fYWRkCiAg KiBsaWJ4bF9kZXZpY2VfdXNiY3RybF9hZGQKICAqIGxpYnhsX2RldmljZV91c2JkZXZfYWRkCkBA IC00MzQ2LDYgKzQzNDcsOSBAQCBERUZJTkVfREVWSUNFX0FERChkaXNrKQogLyogbmljICovCiBE RUZJTkVfREVWSUNFX0FERChuaWMpCiAKKy8qIHZzY3NpICovCitERUZJTkVfREVWSUNFX0FERCh2 c2NzaWN0cmwpCisKIC8qIHZ0cG0gKi8KIERFRklORV9ERVZJQ0VfQUREKHZ0cG0pCiAKQEAgLTcy NzUsNiArNzI3OSwxMSBAQCBpbnQgbGlieGxfcmV0cmlldmVfZG9tYWluX2NvbmZpZ3VyYXRpb24o bGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAogCiAgICAgTUVSR0UobmljLCBuaWNzLCBD T01QQVJFX0RFVklELCB7fSk7CiAKKyAgICBNRVJHRSh2c2NzaWN0cmwsIHZzY3NpY3RybHMsIENP TVBBUkVfREVWSUQsIHsKKyAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmxfZGlzcG9z ZShkc3QpOworICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9jb3B5KENUWCwgZHN0 LCBzcmMpOworICAgICAgICAgIH0pOworCiAgICAgTUVSR0UodnRwbSwgdnRwbXMsIENPTVBBUkVf REVWSUQsIHt9KTsKIAogICAgIE1FUkdFKHBjaSwgcGNpZGV2cywgQ09NUEFSRV9QQ0ksIHt9KTsK ZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsLmggYi90b29scy9saWJ4bC9saWJ4bC5oCmlu ZGV4IGZiOThiOGUuLjY0MjEyMDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsLmgKKysr IGIvdG9vbHMvbGlieGwvbGlieGwuaApAQCAtODc0LDYgKzg3NCwxMyBAQCB2b2lkIGxpYnhsX21h Y19jb3B5KGxpYnhsX2N0eCAqY3R4LCBsaWJ4bF9tYWMgKmRzdCwgbGlieGxfbWFjICpzcmMpOwog I2RlZmluZSBMSUJYTF9IQVZFX1BDSVRPUE9MT0dZIDEKIAogLyoKKyAqIExJQlhMX0hBVkVfVlND U0kKKyAqCisgKiBJZiB0aGlzIGlzIGRlZmluZWQsIHRoZSBQViBTQ1NJIGZlYXR1cmUgaXMgc3Vw cG9ydGVkLgorICovCisjZGVmaW5lIExJQlhMX0hBVkVfVlNDU0kgMQorCisvKgogICogTElCWExf SEFWRV9TT0NLRVRfQklUTUFQCiAgKgogICogSWYgdGhpcyBpcyBkZWZpbmVkLCB0aGVuIGxpYnhs X3NvY2tldF9iaXRtYXBfYWxsb2MgYW5kCkBAIC0xNjk1LDYgKzE3MDIsNDEgQEAgaW50IGxpYnhs X2RldmljZV9jaGFubmVsX2dldGluZm8obGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX2NoYW5uZWwgKmNo YW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9jaGFubmVsaW5m byAqY2hhbm5lbGluZm8pOwogCisvKiBWaXJ0dWFsIFNDU0kgKi8KK2ludCBsaWJ4bF9kZXZpY2Vf dnNjc2ljdHJsX2FkZChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqdnNjc2ksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hv dykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9FWFRFUk5BTF9DQUxMRVJT X09OTFk7CitpbnQgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9yZW1vdmUobGlieGxfY3R4ICpjdHgs IHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X2RldmljZV92c2NzaWN0cmwgKnZzY3NpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTElCWExfRVhURVJOQUxfQ0FMTEVSU19PTkxZOworaW50IGxpYnhsX2Rl dmljZV92c2NzaWN0cmxfZGVzdHJveShsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwg KnZzY3NpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9h c3luY29wX2hvdyAqYW9faG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM SUJYTF9FWFRFUk5BTF9DQUxMRVJTX09OTFk7CisKK2xpYnhsX2RldmljZV92c2NzaWN0cmwgKmxp YnhsX2RldmljZV92c2NzaWN0cmxfbGlzdChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQs IGludCAqbnVtKTsKK2ludCBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2dldGluZm8obGlieGxfY3R4 ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICp2c2NzaWN0cmwsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWRldiAqdnNjc2lkZXYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3ZzY3NpaW5mbyAqdnNjc2lpbmZvKTsK K2ludCBsaWJ4bF9kZXZpY2VfdnNjc2lkZXZfYWRkKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBk b21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWRl diAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNv cF9ob3cgKmFvX2hvdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0VYVEVS TkFMX0NBTExFUlNfT05MWTsKKy8qIFJlbW92ZSB2c2NzaWRldiBjb25uZWN0ZWQgdG8gdnNjc2lj dHJsICovCitpbnQgbGlieGxfZGV2aWNlX3ZzY3NpZGV2X3JlbW92ZShsaWJ4bF9jdHggKmN0eCwg dWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9k ZXZpY2VfdnNjc2lkZXYgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMSUJYTF9FWFRFUk5BTF9DQUxMRVJTX09OTFk7Cit2b2lkIGxpYnhsX2RldmljZV92 c2NzaWN0cmxfYXBwZW5kX3ZzY3NpZGV2KGxpYnhsX2N0eCAqY3R4LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICpjdHJs LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZp Y2VfdnNjc2lkZXYgKmRldik7Cit2b2lkIGxpYnhsX2RldmljZV92c2NzaWN0cmxfcmVtb3ZlX3Zz Y3NpZGV2KGxpYnhsX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICpjdHJsLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaWR4KTsKKwogLyogVmly dHVhbCBUUE1zICovCiBpbnQgbGlieGxfZGV2aWNlX3Z0cG1fYWRkKGxpYnhsX2N0eCAqY3R4LCB1 aW50MzJfdCBkb21pZCwgbGlieGxfZGV2aWNlX3Z0cG0gKnZ0cG0sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCmRpZmYgLS1naXQgYS90 b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCmlu ZGV4IGNhZTdhYjAuLjYzNzI5ZDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0 ZS5jCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCkBAIC03NDAsNiArNzQwLDggQEAg c3RhdGljIHZvaWQgZG9tY3JlYXRlX2Jvb3Rsb2FkZXJfZG9uZShsaWJ4bF9fZWdjICplZ2MsCiBz dGF0aWMgdm9pZCBkb21jcmVhdGVfbGF1bmNoX2RtKGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX211 bHRpZGV2ICphb2RldnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXQp OwogCitzdGF0aWMgdm9pZCBkb21jcmVhdGVfYXR0YWNoX3ZzY3NpY3RybHMobGlieGxfX2VnYyAq ZWdjLCBsaWJ4bF9fbXVsdGlkZXYgKm11bHRpZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCByZXQpOwogc3RhdGljIHZvaWQgZG9tY3JlYXRlX2F0dGFjaF92 dHBtcyhsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19tdWx0aWRldiAqbXVsdGlkZXYsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXQpOwogc3RhdGljIHZvaWQgZG9tY3Jl YXRlX2F0dGFjaF91c2JjdHJscyhsaWJ4bF9fZWdjICplZ2MsCkBAIC0xNDI2LDEzICsxNDI4LDEz IEBAIHN0YXRpYyB2b2lkIGRvbWNyZWF0ZV9kZXZtb2RlbF9zdGFydGVkKGxpYnhsX19lZ2MgKmVn YywKICAgICBpZiAoZF9jb25maWctPm51bV9uaWNzID4gMCkgewogICAgICAgICAvKiBBdHRhY2gg bmljcyAqLwogICAgICAgICBsaWJ4bF9fbXVsdGlkZXZfYmVnaW4oYW8sICZkY3MtPm11bHRpZGV2 KTsKLSAgICAgICAgZGNzLT5tdWx0aWRldi5jYWxsYmFjayA9IGRvbWNyZWF0ZV9hdHRhY2hfdnRw bXM7CisgICAgICAgIGRjcy0+bXVsdGlkZXYuY2FsbGJhY2sgPSBkb21jcmVhdGVfYXR0YWNoX3Zz Y3NpY3RybHM7CiAgICAgICAgIGxpYnhsX19hZGRfbmljcyhlZ2MsIGFvLCBkb21pZCwgZF9jb25m aWcsICZkY3MtPm11bHRpZGV2KTsKICAgICAgICAgbGlieGxfX211bHRpZGV2X3ByZXBhcmVkKGVn YywgJmRjcy0+bXVsdGlkZXYsIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZG9t Y3JlYXRlX2F0dGFjaF92dHBtcyhlZ2MsICZkY3MtPm11bHRpZGV2LCAwKTsKKyAgICBkb21jcmVh dGVfYXR0YWNoX3ZzY3NpY3RybHMoZWdjLCAmZGNzLT5tdWx0aWRldiwgMCk7CiAgICAgcmV0dXJu OwogCiBlcnJvcl9vdXQ6CkBAIC0xNDQwLDcgKzE0NDIsNyBAQCBlcnJvcl9vdXQ6CiAgICAgZG9t Y3JlYXRlX2NvbXBsZXRlKGVnYywgZGNzLCByZXQpOwogfQogCi1zdGF0aWMgdm9pZCBkb21jcmVh dGVfYXR0YWNoX3Z0cG1zKGxpYnhsX19lZ2MgKmVnYywKK3N0YXRpYyB2b2lkIGRvbWNyZWF0ZV9h dHRhY2hfdnNjc2ljdHJscyhsaWJ4bF9fZWdjICplZ2MsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX19tdWx0aWRldiAqbXVsdGlkZXYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCByZXQpCiB7CkBAIC0xNDU1LDYgKzE0NTcsMzkgQEAgc3Rh dGljIHZvaWQgZG9tY3JlYXRlX2F0dGFjaF92dHBtcyhsaWJ4bF9fZWdjICplZ2MsCiAgICAgICAg Z290byBlcnJvcl9vdXQ7CiAgICB9CiAKKyAgICAvKiBQbHVnIHZzY3NpIGRldmljZXMgKi8KKyAg IGlmIChkX2NvbmZpZy0+bnVtX3ZzY3NpY3RybHMgPiAwKSB7CisgICAgICAgLyogQXR0YWNoIHZz Y3NpY3RybHMgKi8KKyAgICAgICBsaWJ4bF9fbXVsdGlkZXZfYmVnaW4oYW8sICZkY3MtPm11bHRp ZGV2KTsKKyAgICAgICBkY3MtPm11bHRpZGV2LmNhbGxiYWNrID0gZG9tY3JlYXRlX2F0dGFjaF92 dHBtczsKKyAgICAgICBsaWJ4bF9fYWRkX3ZzY3NpY3RybHMoZWdjLCBhbywgZG9taWQsIGRfY29u ZmlnLCAmZGNzLT5tdWx0aWRldik7CisgICAgICAgbGlieGxfX211bHRpZGV2X3ByZXBhcmVkKGVn YywgJmRjcy0+bXVsdGlkZXYsIDApOworICAgICAgIHJldHVybjsKKyAgIH0KKworICAgZG9tY3Jl YXRlX2F0dGFjaF92dHBtcyhlZ2MsIG11bHRpZGV2LCAwKTsKKyAgIHJldHVybjsKKworZXJyb3Jf b3V0OgorICAgYXNzZXJ0KHJldCk7CisgICBkb21jcmVhdGVfY29tcGxldGUoZWdjLCBkY3MsIHJl dCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvbWNyZWF0ZV9hdHRhY2hfdnRwbXMobGlieGxfX2VnYyAq ZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fbXVsdGlkZXYg Km11bHRpZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0KQor eworICAgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcyA9IENPTlRBSU5FUl9PRihtdWx0 aWRldiwgKmRjcywgbXVsdGlkZXYpOworICAgU1RBVEVfQU9fR0MoZGNzLT5hbyk7CisgICBpbnQg ZG9taWQgPSBkY3MtPmd1ZXN0X2RvbWlkOworCisgICBsaWJ4bF9kb21haW5fY29uZmlnKiBjb25z dCBkX2NvbmZpZyA9IGRjcy0+Z3Vlc3RfY29uZmlnOworCisgICBpZihyZXQpIHsKKyAgICAgICBM T0coRVJST1IsICJ1bmFibGUgdG8gYWRkIHZzY3NpIGRldmljZXMiKTsKKyAgICAgICBnb3RvIGVy cm9yX291dDsKKyAgIH0KKwogICAgIC8qIFBsdWcgdnRwbSBkZXZpY2VzICovCiAgICBpZiAoZF9j b25maWctPm51bV92dHBtcyA+IDApIHsKICAgICAgICAvKiBBdHRhY2ggdnRwbXMgKi8KZGlmZiAt LWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2RldmljZS5jIGIvdG9vbHMvbGlieGwvbGlieGxfZGV2 aWNlLmMKaW5kZXggZGZkZjg2MC4uMjRkODFjNSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGli eGxfZGV2aWNlLmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfZGV2aWNlLmMKQEAgLTYyMyw2ICs2 MjMsNyBAQCB2b2lkIGxpYnhsX19tdWx0aWRldl9wcmVwYXJlZChsaWJ4bF9fZWdjICplZ2MsCiAg KiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZDoKICAqIGxpYnhsX19hZGRfZGlz a3MKICAqIGxpYnhsX19hZGRfbmljcworICogbGlieGxfX2FkZF92c2NzaWN0cmxzCiAgKiBsaWJ4 bF9fYWRkX3Z0cG1zCiAgKiBsaWJ4bF9fYWRkX3VzYmN0cmxzCiAgKiBsaWJ4bF9fYWRkX3VzYnMK QEAgLTY0NCw2ICs2NDUsNyBAQCB2b2lkIGxpYnhsX19tdWx0aWRldl9wcmVwYXJlZChsaWJ4bF9f ZWdjICplZ2MsCiAKIERFRklORV9ERVZJQ0VTX0FERChkaXNrKQogREVGSU5FX0RFVklDRVNfQURE KG5pYykKK0RFRklORV9ERVZJQ0VTX0FERCh2c2NzaWN0cmwpCiBERUZJTkVfREVWSUNFU19BREQo dnRwbSkKIERFRklORV9ERVZJQ0VTX0FERCh1c2JjdHJsKQogREVGSU5FX0RFVklDRVNfQUREKHVz YmRldikKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmggYi90b29scy9s aWJ4bC9saWJ4bF9pbnRlcm5hbC5oCmluZGV4IDZkY2U5M2YuLmU1NzAxYjggMTAwNjQ0Ci0tLSBh L3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfaW50 ZXJuYWwuaApAQCAtMjYyNiw2ICsyNjI2LDEwIEBAIF9oaWRkZW4gdm9pZCBsaWJ4bF9fZGV2aWNl X25pY19hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX25pYyAqbmljLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fYW9fZGV2aWNlICphb2Rldik7CiAKK19oaWRk ZW4gdm9pZCBsaWJ4bF9fZGV2aWNlX3ZzY3NpY3RybF9hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50 MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZGV2aWNlX3ZzY3NpY3RybCAqdnNjc2ljdHJsLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9fYW9fZGV2aWNlICphb2Rldik7CisKIF9oaWRkZW4gdm9p ZCBsaWJ4bF9fZGV2aWNlX3Z0cG1fYWRkKGxpYnhsX19lZ2MgKmVnYywgdWludDMyX3QgZG9taWQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92dHBtICp2 dHBtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fYW9fZGV2aWNl ICphb2Rldik7CkBAIC0zNDg0LDYgKzM0ODgsMTAgQEAgX2hpZGRlbiB2b2lkIGxpYnhsX19hZGRf bmljcyhsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19hbyAqYW8sIHVpbnQzMl90IGRvbWlkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fY29uZmlnICpkX2NvbmZpZywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX211bHRpZGV2ICptdWx0aWRldik7 CiAKK19oaWRkZW4gdm9pZCBsaWJ4bF9fYWRkX3ZzY3NpY3RybHMobGlieGxfX2VnYyAqZWdjLCBs aWJ4bF9fYW8gKmFvLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX19tdWx0aWRldiAqbXVsdGlkZXYpOworCiBfaGlkZGVu IHZvaWQgbGlieGxfX2FkZF92dHBtcyhsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19hbyAqYW8sIHVp bnQzMl90IGRvbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5f Y29uZmlnICpkX2NvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX211 bHRpZGV2ICptdWx0aWRldik7CmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF90eXBlcy5p ZGwgYi90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKaW5kZXggYzMxNjFmMy4uMjI2YzU5YyAx MDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCisrKyBiL3Rvb2xzL2xpYnhs L2xpYnhsX3R5cGVzLmlkbApAQCAtNjk2LDYgKzY5Niw0MyBAQCBsaWJ4bF9kZXZpY2VfY2hhbm5l bCA9IFN0cnVjdCgiZGV2aWNlX2NoYW5uZWwiLCBbCiAgICAgICAgICAgIF0pKSwKIF0pCiAKK2xp YnhsX3ZzY3NpX3BkZXZfdHlwZSA9IEVudW1lcmF0aW9uKCJ2c2NzaV9wZGV2X3R5cGUiLCBbCisg ICAgKDAsICJJTlZBTElEIiksCisgICAgKDEsICJIQ1RMIiksCisgICAgKDIsICJXV04iKSwKKyAg ICBdKQorCitsaWJ4bF92c2NzaV9oY3RsID0gU3RydWN0KCJ2c2NzaV9oY3RsIiwgWworICAgICgi aHN0IiwgdWludDMyKSwKKyAgICAoImNobiIsIHVpbnQzMiksCisgICAgKCJ0Z3QiLCB1aW50MzIp LAorICAgICgibHVuIiwgdWludDY0KSwKKyAgICBdKQorCitsaWJ4bF92c2NzaV9wZGV2ID0gU3Ry dWN0KCJ2c2NzaV9wZGV2IiwgWworICAgICgicF9kZXZuYW1lIiwgICAgICAgIHN0cmluZyksCisg ICAgKCJ1IiwgS2V5ZWRVbmlvbihOb25lLCBsaWJ4bF92c2NzaV9wZGV2X3R5cGUsICJ0eXBlIiwK KyAgICAgICAgWworICAgICAgICAgKCJpbnZhbGlkIiwgTm9uZSksCisgICAgICAgICAoImhjdGwi LCBTdHJ1Y3QoTm9uZSwgWygibSIsIGxpYnhsX3ZzY3NpX2hjdGwpXSkpLAorICAgICAgICAgKCJ3 d24iLCBTdHJ1Y3QoTm9uZSwgWygibSIsIHN0cmluZyldKSksCisgICAgICAgIF0pKSwKKyAgICBd KQorCitsaWJ4bF9kZXZpY2VfdnNjc2lkZXYgPSBTdHJ1Y3QoImRldmljZV92c2NzaWRldiIsIFsK KyAgICAoInZzY3NpZGV2X2lkIiwgICAgICBsaWJ4bF9kZXZpZCksCisgICAgKCJwZGV2IiwgICAg ICAgICAgICAgbGlieGxfdnNjc2lfcGRldiksCisgICAgKCJ2ZGV2IiwgICAgICAgICAgICAgbGli eGxfdnNjc2lfaGN0bCksCisgICAgXSkKKworbGlieGxfZGV2aWNlX3ZzY3NpY3RybCA9IFN0cnVj dCgiZGV2aWNlX3ZzY3NpY3RybCIsIFsKKyAgICAoImJhY2tlbmRfZG9taWQiLCAgICBsaWJ4bF9k b21pZCksCisgICAgKCJkZXZpZCIsICAgICAgICAgICAgbGlieGxfZGV2aWQpLAorICAgICgiaWR4 IiwgICAgICAgICAgICAgIGxpYnhsX2RldmlkKSwKKyAgICAoInZzY3NpZGV2cyIsICAgICAgICBB cnJheShsaWJ4bF9kZXZpY2VfdnNjc2lkZXYsICJudW1fdnNjc2lkZXZzIikpLAorICAgICgic2Nz aV9yYXdfY21kcyIsICAgIGxpYnhsX2RlZmJvb2wpLAorICAgIF0pCisKIGxpYnhsX2RvbWFpbl9j b25maWcgPSBTdHJ1Y3QoImRvbWFpbl9jb25maWciLCBbCiAgICAgKCJjX2luZm8iLCBsaWJ4bF9k b21haW5fY3JlYXRlX2luZm8pLAogICAgICgiYl9pbmZvIiwgbGlieGxfZG9tYWluX2J1aWxkX2lu Zm8pLApAQCAtNzA3LDYgKzc0NCw3IEBAIGxpYnhsX2RvbWFpbl9jb25maWcgPSBTdHJ1Y3QoImRv bWFpbl9jb25maWciLCBbCiAgICAgKCJkdGRldnMiLCBBcnJheShsaWJ4bF9kZXZpY2VfZHRkZXYs ICJudW1fZHRkZXZzIikpLAogICAgICgidmZicyIsIEFycmF5KGxpYnhsX2RldmljZV92ZmIsICJu dW1fdmZicyIpKSwKICAgICAoInZrYnMiLCBBcnJheShsaWJ4bF9kZXZpY2VfdmtiLCAibnVtX3Zr YnMiKSksCisgICAgKCJ2c2NzaWN0cmxzIiwgQXJyYXkobGlieGxfZGV2aWNlX3ZzY3NpY3RybCwg Im51bV92c2NzaWN0cmxzIikpLAogICAgICgidnRwbXMiLCBBcnJheShsaWJ4bF9kZXZpY2VfdnRw bSwgIm51bV92dHBtcyIpKSwKICAgICAjIGEgY2hhbm5lbCBtYW5pZmVzdHMgYXMgYSBjb25zb2xl IHdpdGggYSBuYW1lLAogICAgICMgc2VlIGRvY3MvbWlzYy9jaGFubmVscy50eHQKQEAgLTc0NCw2 ICs3ODIsMjEgQEAgbGlieGxfbmljaW5mbyA9IFN0cnVjdCgibmljaW5mbyIsIFsKICAgICAoInJy ZWZfcngiLCBpbnRlZ2VyKSwKICAgICBdLCBkaXI9RElSX09VVCkKIAorbGlieGxfdnNjc2lpbmZv ID0gU3RydWN0KCJ2c2NzaWluZm8iLCBbCisgICAgKCJiYWNrZW5kIiwgc3RyaW5nKSwKKyAgICAo ImJhY2tlbmRfaWQiLCB1aW50MzIpLAorICAgICgiZnJvbnRlbmQiLCBzdHJpbmcpLAorICAgICgi ZnJvbnRlbmRfaWQiLCB1aW50MzIpLAorICAgICgiZGV2aWQiLCBsaWJ4bF9kZXZpZCksCisgICAg KCJwZGV2IiwgbGlieGxfdnNjc2lfcGRldiksCisgICAgKCJ2ZGV2IiwgbGlieGxfdnNjc2lfaGN0 bCksCisgICAgKCJpZHgiLCBsaWJ4bF9kZXZpZCksCisgICAgKCJ2c2NzaWRldl9pZCIsIGxpYnhs X2RldmlkKSwKKyAgICAoInNjc2lfcmF3X2NtZHMiLCBib29sKSwKKyAgICAoInZzY3NpY3RybF9z dGF0ZSIsIGludGVnZXIpLAorICAgICgidnNjc2lkZXZfc3RhdGUiLCBpbnRlZ2VyKSwKKyAgICBd LCBkaXI9RElSX09VVCkKKwogbGlieGxfdnRwbWluZm8gPSBTdHJ1Y3QoInZ0cG1pbmZvIiwgWwog ICAgICgiYmFja2VuZCIsIHN0cmluZyksCiAgICAgKCJiYWNrZW5kX2lkIiwgdWludDMyKSwKZGlm ZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzX2ludGVybmFsLmlkbCBiL3Rvb2xzL2xp YnhsL2xpYnhsX3R5cGVzX2ludGVybmFsLmlkbAppbmRleCAxNzdmOWI3Li41MTA3NmU2IDEwMDY0 NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF90eXBlc19pbnRlcm5hbC5pZGwKKysrIGIvdG9vbHMv bGlieGwvbGlieGxfdHlwZXNfaW50ZXJuYWwuaWRsCkBAIC0yNCw2ICsyNCw3IEBAIGxpYnhsX19k ZXZpY2Vfa2luZCA9IEVudW1lcmF0aW9uKCJkZXZpY2Vfa2luZCIsIFsKICAgICAoOCwgIlZUUE0i KSwKICAgICAoOSwgIlZVU0IiKSwKICAgICAoMTAsICJRVVNCIiksCisgICAgKDExLCAiVlNDU0ki KSwKICAgICBdKQogCiBsaWJ4bF9fY29uc29sZV9iYWNrZW5kID0gRW51bWVyYXRpb24oImNvbnNv bGVfYmFja2VuZCIsIFsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3ZzY3NpLmMgYi90 b29scy9saWJ4bC9saWJ4bF92c2NzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmNiYWJhODIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9saWJ4bC9saWJ4bF92c2NzaS5j CkBAIC0wLDAgKzEsMTE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiAgICAgIFNVU0Ug TGludXggR21iSAorICogQXV0aG9yIE9sYWYgSGVyaW5nIDxvbGFmQGFlcGZsZS5kZT4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIuMSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBleGNl cHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSBMSUNFTlNFLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSAibGlieGxfb3NkZXBzLmgiIC8qIG11 c3QgY29tZSBiZWZvcmUgYW55IG90aGVyIGhlYWRlcnMgKi8KKyNpbmNsdWRlICJsaWJ4bF9pbnRl cm5hbC5oIgorCit0eXBlZGVmIHN0cnVjdCB2c2NzaWRldl9ybSB7CisgICAgbGlieGxfZGV2aWNl X3ZzY3NpY3RybCAqY3RybDsKKyAgICBjaGFyICpiZV9wYXRoOworICAgIGludCBkZXZfd2FpdDsK KyAgICBsaWJ4bF9fZGV2aWNlIGRldjsKK30gdnNjc2lkZXZfcm1fdDsKKwordHlwZWRlZiB2b2lk ICgqdnNjc2ljdHJsX2FkZCkobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICp2c2NzaWN0cmwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fY29uZmlnICpkX2NvbmZpZyk7CisKKyNkZWZp bmUgWExVX1dXTl9MRU4gMTYKKworc3RhdGljIGludCB2c2NzaV9wYXJzZV9oY3RsKGNoYXIgKnN0 ciwgbGlieGxfdnNjc2lfaGN0bCAqaGN0bCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaHN0LCBjaG4s IHRndDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbHVuOworCisgICAgaWYgKHNzY2FuZihzdHIs ICIldToldToldTolbGx1IiwgJmhzdCwgJmNobiwgJnRndCwgJmx1bikgIT0gNCkKKyAgICAgICAg cmV0dXJuIEVSUk9SX0lOVkFMOworCisgICAgaGN0bC0+aHN0ID0gaHN0OworICAgIGhjdGwtPmNo biA9IGNobjsKKyAgICBoY3RsLT50Z3QgPSB0Z3Q7CisgICAgaGN0bC0+bHVuID0gbHVuOworICAg IHJldHVybiAwOworfQorCisvKiBUcmFuc2xhdGUgcC1kZXYgYmFjayBpbnRvIHBkZXYudHlwZSAq Lworc3RhdGljIGJvb2wgdnNjc2lfcGFyc2VfcGRldihsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9kZXZp Y2VfdnNjc2lkZXYgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYywg Y2hhciAqcCwgY2hhciAqdikKK3sKKyAgICBsaWJ4bF92c2NzaV9oY3RsIGhjdGw7CisgICAgdW5z aWduZWQgbG9uZyBsb25nIGx1bjsKKyAgICBjaGFyIHd3bltYTFVfV1dOX0xFTiArIDFdOworICAg IGJvb2wgcGFyc2VkX29rID0gZmFsc2U7CisKKyAgICBsaWJ4bF92c2NzaV9oY3RsX2luaXQoJmhj dGwpOworCisgICAgZGV2LT5wZGV2LnBfZGV2bmFtZSA9IGxpYnhsX19zdHJkdXAoTk9HQywgYyk7 CisKKyAgICBpZiAoc3RybmNtcChwLCAibmFhLiIsIDQpID09IDApIHsKKyAgICAgICAgLyogV1dO IGFzIHVuZGVyc3Rvb2QgYnkgcHZvcHMgKi8KKyAgICAgICAgbWVtc2V0KHd3biwgMCwgc2l6ZW9m KHd3bikpOworICAgICAgICBpZiAoc3NjYW5mKHAsICJuYWEuJTE2WzAtOWEtZkEtRl06JWxsdSIs IHd3biwgJmx1bikgPT0gMikgeworICAgICAgICAgICAgbGlieGxfdnNjc2lfcGRldl9pbml0X3R5 cGUoJmRldi0+cGRldiwgTElCWExfVlNDU0lfUERFVl9UWVBFX1dXTik7CisgICAgICAgICAgICBk ZXYtPnBkZXYudS53d24ubSA9IGxpYnhsX19zdHJkdXAoTk9HQywgcCk7CisgICAgICAgICAgICBw YXJzZWRfb2sgPSB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh2c2NzaV9wYXJzZV9o Y3RsKHAsICZoY3RsKSA9PSAwKSB7CisgICAgICAgIC8qIEVpdGhlciB4ZW5saW51eCwgb3IgcHZv cHMgd2l0aCBwcm9wZXJseSBjb25maWd1cmVkIGFsaWFzIGluIHN5c2ZzICovCisgICAgICAgIGxp YnhsX3ZzY3NpX3BkZXZfaW5pdF90eXBlKCZkZXYtPnBkZXYsIExJQlhMX1ZTQ1NJX1BERVZfVFlQ RV9IQ1RMKTsKKyAgICAgICAgbGlieGxfdnNjc2lfaGN0bF9jb3B5KENUWCwgJmRldi0+cGRldi51 LmhjdGwubSwgJmhjdGwpOworICAgICAgICBwYXJzZWRfb2sgPSB0cnVlOworICAgIH0KKworICAg IGlmIChwYXJzZWRfb2sgJiYgdnNjc2lfcGFyc2VfaGN0bCh2LCAmZGV2LT52ZGV2KSAhPSAwKQor ICAgICAgICBwYXJzZWRfb2sgPSBmYWxzZTsKKworICAgIGxpYnhsX3ZzY3NpX2hjdGxfZGlzcG9z ZSgmaGN0bCk7CisKKyAgICByZXR1cm4gcGFyc2VkX29rOworfQorCitzdGF0aWMgYm9vbCB2c2Nz aV9maWxsX2RldihsaWJ4bF9fZ2MgKmdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeHNf dHJhbnNhY3Rpb25fdCB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq ZGV2c19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2X2Rp ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWRldiAqZGV2 KQoreworICAgIGNoYXIgKnBhdGgsICpjLCAqcCwgKnYsICpzOworICAgIHVuc2lnbmVkIGludCBk ZXZpZDsKKyAgICBpbnQgcjsKKworICAgIHIgPSBzc2NhbmYoZGV2X2RpciwgImRldi0ldSIsICZk ZXZpZCk7CisgICAgaWYgKHIgIT0gMSkgeworICAgICAgICBMT0coRVJST1IsICJleHBlY3RlZCBk ZXYtTiwgZ290ICclcyciLCBkZXZfZGlyKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K KyAgICBkZXYtPnZzY3NpZGV2X2lkID0gZGV2aWQ7CisKKyAgICBwYXRoID0gR0NTUFJJTlRGKCIl cy8lcyIsIGRldnNfcGF0aCwgZGV2X2Rpcik7CisgICAgYyA9IGxpYnhsX194c19yZWFkKGdjLCB0 LCBHQ1NQUklOVEYoIiVzL3AtZGV2bmFtZSIsIHBhdGgpKTsKKyAgICBwID0gbGlieGxfX3hzX3Jl YWQoZ2MsIHQsIEdDU1BSSU5URigiJXMvcC1kZXYiLCBwYXRoKSk7CisgICAgdiA9IGxpYnhsX194 c19yZWFkKGdjLCB0LCBHQ1NQUklOVEYoIiVzL3YtZGV2IiwgcGF0aCkpOworICAgIHMgPSBsaWJ4 bF9feHNfcmVhZChnYywgdCwgR0NTUFJJTlRGKCIlcy9zdGF0ZSIsIHBhdGgpKTsKKyAgICBMT0co REVCVUcsICIlcy9zdGF0ZSBpcyAlcyIsIHBhdGgsIHMpOworICAgIGlmICghKGMgJiYgcCAmJiB2 ICYmIHMpKSB7CisgICAgICAgIExPRyhFUlJPUiwgInAtZGV2bmFtZSAnJXMnIHAtZGV2ICclcycg di1kZXYgJyVzJyIsIGMsIHAsIHYpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg ICAgaWYgKCF2c2NzaV9wYXJzZV9wZGV2KGdjLCBkZXYsIGMsIHAsIHYpKSB7CisgICAgICAgIExP RyhFUlJPUiwgImZhaWxlZCB0byBwYXJzZSAlczogJXMgJXMgJXMgJXMiLCBwYXRoLCBjLCBwLCB2 LCBzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor fQorCitzdGF0aWMgYm9vbCB2c2NzaV9maWxsX2N0cmwobGlieGxfX2djICpnYywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB4c190cmFuc2FjdGlvbl90IHQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqZmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf ZGV2aWNlX3ZzY3NpY3RybCAqY3RybCkKK3sKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXYgZGV2 OworICAgIGNoYXIgKnRtcCwgKmJlX3BhdGgsICpkZXZzX3BhdGg7CisgICAgY2hhciAqKmRldl9k aXJzOworICAgIHVuc2lnbmVkIGludCBuZGV2X2RpcnMsIGRldl9kaXI7CisgICAgYm9vbCBvazsK KworICAgIGN0cmwtPmRldmlkID0gYXRvaShkaXIpOworCisgICAgYmVfcGF0aCA9IGxpYnhsX194 c19yZWFkKGdjLCB0LCBHQ1NQUklOVEYoIiVzLyVzL2JhY2tlbmQiLCBmZV9wYXRoLCBkaXIpKTsK KyAgICBpZiAoIWJlX3BhdGgpCisgICAgICAgIGdvdG8gb3V0OworCisgICAgdG1wID0gbGlieGxf X3hzX3JlYWQoZ2MsIHQsIEdDU1BSSU5URigiJXMvJXMvYmFja2VuZC1pZCIsIGZlX3BhdGgsIGRp cikpOworICAgIGlmICghdG1wKQorICAgICAgICBnb3RvIG91dDsKKyAgICBjdHJsLT5iYWNrZW5k X2RvbWlkID0gYXRvaSh0bXApOworCisgICAgdG1wID0gbGlieGxfX3hzX3JlYWQoZ2MsIHQsIEdD U1BSSU5URigiJXMvaWR4IiwgYmVfcGF0aCkpOworICAgIGlmICghdG1wKQorICAgICAgICBnb3Rv IG91dDsKKyAgICBjdHJsLT5pZHggPSBhdG9pKHRtcCk7CisKKyAgICB0bXAgPSBsaWJ4bF9feHNf cmVhZChnYywgdCwgR0NTUFJJTlRGKCIlcy9mZWF0dXJlLWhvc3QiLCBiZV9wYXRoKSk7CisgICAg aWYgKCF0bXApCisgICAgICAgIGdvdG8gb3V0OworICAgIG9rID0gYXRvaSh0bXApICE9IDA7Cisg ICAgbGlieGxfZGVmYm9vbF9zZXQoJmN0cmwtPnNjc2lfcmF3X2NtZHMsIG9rKTsKKworICAgIG9r ID0gdHJ1ZTsKKyAgICBkZXZzX3BhdGggPSBHQ1NQUklOVEYoIiVzL3ZzY3NpLWRldnMiLCBiZV9w YXRoKTsKKyAgICBkZXZfZGlycyA9IGxpYnhsX194c19kaXJlY3RvcnkoZ2MsIHQsIGRldnNfcGF0 aCwgJm5kZXZfZGlycyk7CisgICAgZm9yIChkZXZfZGlyID0gMDsgZGV2X2RpcnMgJiYgZGV2X2Rp ciA8IG5kZXZfZGlyczsgZGV2X2RpcisrKSB7CisgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWRl dl9pbml0KCZkZXYpOworICAgICAgICBvayA9IHZzY3NpX2ZpbGxfZGV2KGdjLCB0LCBkZXZzX3Bh dGgsIGRldl9kaXJzW2Rldl9kaXJdLCAmZGV2KTsKKyAgICAgICAgaWYgKG9rID09IHRydWUpCisg ICAgICAgICAgICBvayA9IGN0cmwtPmlkeCA9PSBkZXYudmRldi5oc3Q7CisgICAgICAgIGlmIChv ayA9PSB0cnVlKQorICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9hcHBlbmRfdnNj c2lkZXYoQ1RYLCBjdHJsLCAmZGV2KTsKKyAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2X2Rp c3Bvc2UoJmRldik7CisgICAgICAgIGlmIChvayA9PSBmYWxzZSkKKyAgICAgICAgICAgIGJyZWFr OworICAgIH0KKworICAgIHJldHVybiBvazsKKworb3V0OgorICAgIGxpYnhsX2RlZmJvb2xfc2V0 KCZjdHJsLT5zY3NpX3Jhd19jbWRzLCBmYWxzZSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisv KiByZXR1cm4gYW4gYXJyYXkgb2YgdnNjc2ljdHJscyB3aXRoIG51bSBlbGVtZW50cyAqLworc3Rh dGljIGludCB2c2NzaV9jb2xsZWN0X2N0cmxzKGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqKmN0cmxzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCAqbnVtKQoreworICAgIHhzX3RyYW5zYWN0aW9uX3QgdCA9IFhC VF9OVUxMOworICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgY3RybDsKKyAgICBjaGFyICpmZV9w YXRoOworICAgIGNoYXIgKipkaXJzOworICAgIHVuc2lnbmVkIGludCBuZGlycyA9IDAsIGRpcjsK KyAgICBpbnQgcmM7CisKKyAgICBmZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdnNjc2ki LCBsaWJ4bF9feHNfZ2V0X2RvbXBhdGgoZ2MsIGRvbWlkKSk7CisKKyAgICBmb3IgKDs7KSB7Cisg ICAgICAgICpudW0gPSAwOworCisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX3N0 YXJ0KGdjLCAmdCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgZGlycyA9 IGxpYnhsX194c19kaXJlY3RvcnkoZ2MsIHQsIGZlX3BhdGgsICZuZGlycyk7CisgICAgICAgIC8q IE5vdGhpbmcgdG8gZG8gKi8KKyAgICAgICAgaWYgKCEoZGlycyAmJiBuZGlycykpCisgICAgICAg ICAgICBicmVhazsKKworICAgICAgICAvKiBMaXN0IG9mIGN0cmxzIHRvIGJlIHJldHVybmVkIHRv IHRoZSBjYWxsZXIgKi8KKyAgICAgICAgKmN0cmxzID0gbGlieGxfX21hbGxvYyhOT0dDLCBuZGly cyAqIHNpemVvZigqKmN0cmxzKSk7CisKKyAgICAgICAgZm9yIChkaXIgPSAwOyBkaXIgPCBuZGly czsgZGlyKyspIHsKKyAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmxfaW5pdCgqY3Ry bHMgKyBkaXIpOworCisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2luaXQoJmN0 cmwpOworICAgICAgICAgICAgaWYgKHZzY3NpX2ZpbGxfY3RybChnYywgdCwgZmVfcGF0aCwgZGly c1tkaXJdLCAmY3RybCkpIHsKKyAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJs X2NvcHkoQ1RYLCAqY3RybHMgKyAqbnVtLCAmY3RybCk7CisgICAgICAgICAgICAgICAgKCpudW0p Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2Rp c3Bvc2UoJmN0cmwpOworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNh Y3Rpb25fY29tbWl0KGdjLCAmdCk7CisgICAgICAgIGlmICghcmMpIGJyZWFrOworCisgICAgICAg IGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgIGZvciAoZGlyID0gMDsgZGlyIDwgbmRpcnM7IGRp cisrKQorICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmxfZGlzcG9zZSgqY3Ry bHMgKyBkaXIpOworICAgICAgICAgICAgZnJlZSgqY3RybHMpOworICAgICAgICAgICAgKmN0cmxz ID0gTlVMTDsKKyAgICAgICAgICAgICpudW0gPSAwOworICAgICAgICAgICAgZ290byBvdXQ7Cisg ICAgICAgIH0KKyAgICB9CisKK291dDoKKyAgICBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fYWJvcnQo Z2MsICZ0KTsKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qIFNpbXBsaWZpZWQgdmFyaWFudCBvZiBk ZXZpY2VfYWRkcm1fYW9jb21wbGV0ZSAqLworc3RhdGljIHZvaWQgdnNjc2lfYW9kZXZfY29tcGxl dGUobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fYW9fZGV2aWNlICphb2RldikKK3sKKyAgICBTVEFU RV9BT19HQyhhb2Rldi0+YW8pOworICAgIGxpYnhsX19hb19jb21wbGV0ZShlZ2MsIGFvLCBhb2Rl di0+cmMpOworfQorCitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfZnJvbV92c2NzaWN0cmwobGli eGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqdnNjc2ljdHJsLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2UgKmRldmljZSkKK3sK KyAgICBkZXZpY2UtPmJhY2tlbmRfZGV2aWQgPSB2c2NzaWN0cmwtPmRldmlkOworICAgIGRldmlj ZS0+YmFja2VuZF9kb21pZCA9IHZzY3NpY3RybC0+YmFja2VuZF9kb21pZDsKKyAgICBkZXZpY2Ut PmRldmlkICAgICAgICAgPSB2c2NzaWN0cmwtPmRldmlkOworICAgIGRldmljZS0+ZG9taWQgICAg ICAgICA9IGRvbWlkOworICAgIGRldmljZS0+YmFja2VuZF9raW5kICA9IExJQlhMX19ERVZJQ0Vf S0lORF9WU0NTSTsKKyAgICBkZXZpY2UtPmtpbmQgICAgICAgICAgPSBMSUJYTF9fREVWSUNFX0tJ TkRfVlNDU0k7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2c2NzaWN0cmxfcmVt b3ZlKGxpYnhsX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90 IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0 cmwgKnZzY3NpY3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9h c3luY29wX2hvdyAqYW9faG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmb3Jj ZSkKK3sKKyAgICBBT19DUkVBVEUoY3R4LCBkb21pZCwgYW9faG93KTsKKyAgICBsaWJ4bF9fZGV2 aWNlICpkZXZpY2U7CisgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXY7CisgICAgaW50IHJjOwor CisgICAgR0NORVcoZGV2aWNlKTsKKyAgICByYyA9IGxpYnhsX19kZXZpY2VfZnJvbV92c2NzaWN0 cmwoZ2MsIGRvbWlkLCB2c2NzaWN0cmwsIGRldmljZSk7CisgICAgaWYgKHJjICE9IDApIGdvdG8g b3V0OworCisgICAgR0NORVcoYW9kZXYpOworICAgIGxpYnhsX19wcmVwYXJlX2FvX2RldmljZShh bywgYW9kZXYpOworICAgIGFvZGV2LT5hY3Rpb24gPSBMSUJYTF9fREVWSUNFX0FDVElPTl9SRU1P VkU7CisgICAgYW9kZXYtPmRldiA9IGRldmljZTsKKyAgICBhb2Rldi0+Y2FsbGJhY2sgPSB2c2Nz aV9hb2Rldl9jb21wbGV0ZTsKKyAgICBhb2Rldi0+Zm9yY2UgPSBmb3JjZTsKKyAgICBsaWJ4bF9f aW5pdGlhdGVfZGV2aWNlX2dlbmVyaWNfcmVtb3ZlKGVnYywgYW9kZXYpOworCitvdXQ6CisgICAg aWYgKHJjKSByZXR1cm4gQU9fQ1JFQVRFX0ZBSUwocmMpOworICAgIHJldHVybiBBT19JTlBST0dS RVNTOworfQorCitzdGF0aWMgaW50IHZzY3NpZGV2X2JlX3NldF9ybShsaWJ4bF9fZ2MgKmdjLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICp2LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleGFycmF5X3QgKmJhY2spCit7CisgICAg aW50IHJjOworICAgIGNoYXIgKmRpcjsKKworICAgIGRpciA9IEdDU1BSSU5URigidnNjc2ktZGV2 cy9kZXYtJXUiLCB2LT52c2NzaWRldl9pZCk7CisgICAgcmMgPSBmbGV4YXJyYXlfYXBwZW5kX3Bh aXIoYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL3N0 YXRlIiwgZGlyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVk IiwgWGVuYnVzU3RhdGVDbG9zaW5nKSk7CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50 IHZzY3NpY3RybF9yZWNvbmZpZ3VyZV9ybShsaWJ4bF9fYW9fZGV2aWNlICphb2RldiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0YXRlX3BhdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmJlX3dhaXQpCisKK3sKKyAg ICBTVEFURV9BT19HQyhhb2Rldi0+YW8pOworICAgIHZzY3NpZGV2X3JtX3QgKnZzY3NpZGV2X3Jt ID0gQ09OVEFJTkVSX09GKGFvZGV2LT5kZXYsICp2c2NzaWRldl9ybSwgZGV2KTsKKyAgICBsaWJ4 bF9kZXZpY2VfdnNjc2ljdHJsICpjdHJsID0gdnNjc2lkZXZfcm0tPmN0cmw7CisgICAgY29uc3Qg Y2hhciAqYmVfcGF0aCA9IHZzY3NpZGV2X3JtLT5iZV9wYXRoOworICAgIGludCByYywgaSwgYmVf c3RhdGU7CisgICAgY2hhciAqZGV2X3BhdGgsICpzdGF0ZV92YWw7CisgICAgZmxleGFycmF5X3Qg KmJhY2s7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICp2OworICAgIHhzX3RyYW5zYWN0aW9u X3QgdCA9IFhCVF9OVUxMOworCisgICAgLyogUHJlYWxsb2Mga2V5K3ZhbHVlOiAxIHRvcGxldmVs ICsgMSBwZXIgZGV2aWNlICovCisgICAgaSA9IDIgKiAoMSArIDEpOworICAgIGJhY2sgPSBmbGV4 YXJyYXlfbWFrZShnYywgaSwgMSk7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHJjID0gbGli eGxfX3hzX3RyYW5zYWN0aW9uX3N0YXJ0KGdjLCAmdCk7CisgICAgICAgIGlmIChyYykgZ290byBv dXQ7CisKKyAgICAgICAgc3RhdGVfdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIHQsIHN0YXRlX3Bh dGgpOworICAgICAgICBMT0coREVCVUcsICIlcyBpcyAlcyIsIHN0YXRlX3BhdGgsIHN0YXRlX3Zh bCk7CisgICAgICAgIGlmICghc3RhdGVfdmFsKSB7CisgICAgICAgICAgICByYyA9IEVSUk9SX05P VEZPVU5EOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICBiZV9z dGF0ZSA9IGF0b2koc3RhdGVfdmFsKTsKKyAgICAgICAgc3dpdGNoIChiZV9zdGF0ZSkgeworICAg ICAgICBjYXNlIFhlbmJ1c1N0YXRlVW5rbm93bjoKKyAgICAgICAgY2FzZSBYZW5idXNTdGF0ZUlu aXRpYWxpc2luZzoKKyAgICAgICAgY2FzZSBYZW5idXNTdGF0ZUNsb3Npbmc6CisgICAgICAgIGNh c2UgWGVuYnVzU3RhdGVDbG9zZWQ6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBU aGUgYmFja2VuZCBpcyBpbiBhIGJhZCBzdGF0ZSAqLworICAgICAgICAgICAgcmMgPSBFUlJPUl9G QUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVJbml0 aWFsaXNlZDoKKyAgICAgICAgY2FzZSBYZW5idXNTdGF0ZVJlY29uZmlndXJpbmc6CisgICAgICAg IGNhc2UgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyZWQ6CisgICAgICAgICAgICAvKiBCYWNrZW5kIGlz IHN0aWxsIGJ1c3ksIGNhbGxlciBoYXMgdG8gcmV0cnkgKi8KKyAgICAgICAgICAgIHJjID0gRVJS T1JfTk9UX1JFQURZOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIGNhc2UgWGVuYnVz U3RhdGVJbml0V2FpdDoKKyAgICAgICAgICAgIC8qIFRoZSBmcm9udGVuZCBkaWQgbm90IGNvbm5l Y3QgeWV0ICovCisgICAgICAgICAgICAqYmVfd2FpdCA9IFhlbmJ1c1N0YXRlSW5pdFdhaXQ7Cisg ICAgICAgICAgICB2c2NzaWRldl9ybS0+ZGV2X3dhaXQgPSBYZW5idXNTdGF0ZUNsb3Npbmc7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYZW5idXNTdGF0ZUNvbm5lY3RlZDoKKyAg ICAgICAgICAgIC8qIFRoZSBiYWNrZW5kIGNhbiBoYW5kbGUgcmVjb25maWd1cmUgKi8KKyAgICAg ICAgICAgICpiZV93YWl0ID0gWGVuYnVzU3RhdGVDb25uZWN0ZWQ7CisgICAgICAgICAgICB2c2Nz aWRldl9ybS0+ZGV2X3dhaXQgPSBYZW5idXNTdGF0ZUNsb3NlZDsKKyAgICAgICAgICAgIGZsZXhh cnJheV9hcHBlbmRfcGFpcihiYWNrLCAic3RhdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdDU1BSSU5URigiJWQiLCBYZW5idXNTdGF0ZVJlY29uZmlndXJpbmcpKTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogQXBwZW5kIG5ldyB2c2Nz aWRldiBvciBza2lwIGV4aXN0aW5nICAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3RybC0+ bnVtX3ZzY3NpZGV2czsgaSsrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmIgPSAwOwor ICAgICAgICAgICAgdiA9IGN0cmwtPnZzY3NpZGV2cyArIGk7CisgICAgICAgICAgICBkZXZfcGF0 aCA9IEdDU1BSSU5URigiJXMvdnNjc2ktZGV2cy9kZXYtJXUiLCBiZV9wYXRoLCB2LT52c2NzaWRl dl9pZCk7CisgICAgICAgICAgICBpZiAoIWxpYnhsX194c19kaXJlY3RvcnkoZ2MsIFhCVF9OVUxM LCBkZXZfcGF0aCwgJm5iKSkgeworICAgICAgICAgICAgICAgIC8qIEZJWE1FIFNhbml0eSBjaGVj ayAqLworICAgICAgICAgICAgICAgIExPRyhERUJVRywgIiVzIGRvZXMgbm90IGV4aXN0IGFueW1v cmUiLCBkZXZfcGF0aCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICByYyA9IHZzY3NpZGV2X2JlX3NldF9ybShnYywgdiwgYmFjayk7CisgICAg ICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgbGlieGxfX3hz X3dyaXRldihnYywgdCwgYmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9f eHNfa3ZzX29mX2ZsZXhhcnJheShnYywgYmFjaywgYmFjay0+Y291bnQpKTsKKworICAgICAgICBy YyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ0KTsKKyAgICAgICAgaWYgKCFy YykgYnJlYWs7CisgICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0OworICAgIH0KKworICAgIHJj ID0gMDsKKworb3V0OgorICAgIGxpYnhsX194c190cmFuc2FjdGlvbl9hYm9ydChnYywgJnQpOwor ICAgIHJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgdnNjc2ljdHJsX3JlbW92ZV9iZV9kZXYo bGlieGxfX2djICpnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X2RldmljZV92c2NzaWRldiAqdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHhzX3RyYW5zYWN0aW9uX3QgdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmJlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZGV2X3dhaXQpCit7CisgICAgY2hhciAqZGlyLCAqcGF0aCwgKnZhbDsKKworICAgIGRp ciA9IEdDU1BSSU5URigiJXMvdnNjc2ktZGV2cy9kZXYtJXUiLCBiZV9wYXRoLCB2LT52c2NzaWRl dl9pZCk7CisgICAgcGF0aCA9IEdDU1BSSU5URigiJXMvc3RhdGUiLCBkaXIpOworICAgIHZhbCA9 IGxpYnhsX194c19yZWFkKGdjLCB0LCBwYXRoKTsKKyAgICBMT0coREVCVUcsICIlcyBpcyAlcyIs IHBhdGgsIHZhbCk7CisgICAgaWYgKHZhbCAmJiBzdHJjbXAodmFsLCBHQ1NQUklOVEYoIiVkIiwg ZGV2X3dhaXQpKSA9PSAwKSB7CisgICAgICAgIHhzX3JtKENUWC0+eHNoLCB0LCBHQ1NQUklOVEYo IiVzL3N0YXRlIiwgZGlyKSk7CisgICAgICAgIHhzX3JtKENUWC0+eHNoLCB0LCBHQ1NQUklOVEYo IiVzL3AtZGV2bmFtZSIsIGRpcikpOworICAgICAgICB4c19ybShDVFgtPnhzaCwgdCwgR0NTUFJJ TlRGKCIlcy9wLWRldiIsIGRpcikpOworICAgICAgICB4c19ybShDVFgtPnhzaCwgdCwgR0NTUFJJ TlRGKCIlcy92LWRldiIsIGRpcikpOworICAgICAgICB4c19ybShDVFgtPnhzaCwgdCwgZGlyKTsK KyAgICB9IGVsc2UgeworICAgICAgICBMT0coRVJST1IsICIlcyBoYXMgJXMsIGV4cGVjdGVkICVk IiwgcGF0aCwgdmFsLCBkZXZfd2FpdCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB2c2NzaWN0 cmxfcmVtb3ZlX2JlX2NiKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfX2V2X2RldnN0YXRlICpkcywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHJjKQoreworICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2ID0g Q09OVEFJTkVSX09GKGRzLCAqYW9kZXYsIGJhY2tlbmRfZHMpOworICAgIFNUQVRFX0FPX0dDKGFv ZGV2LT5hbyk7CisgICAgdnNjc2lkZXZfcm1fdCAqdnNjc2lkZXZfcm0gPSBDT05UQUlORVJfT0Yo YW9kZXYtPmRldiwgKnZzY3NpZGV2X3JtLCBkZXYpOworICAgIGxpYnhsX2RldmljZV92c2NzaWN0 cmwgKmN0cmwgPSB2c2NzaWRldl9ybS0+Y3RybDsKKyAgICB4c190cmFuc2FjdGlvbl90IHQgPSBY QlRfTlVMTDsKKyAgICBpbnQgaTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgcmMgPSBsaWJ4 bF9feHNfdHJhbnNhY3Rpb25fc3RhcnQoZ2MsICZ0KTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91 dDsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3RybC0+bnVtX3ZzY3NpZGV2czsgaSsrKQor ICAgICAgICAgICAgdnNjc2ljdHJsX3JlbW92ZV9iZV9kZXYoZ2MsIGN0cmwtPnZzY3NpZGV2cyAr IGksIHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2NzaWRldl9ybS0+ YmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzY3NpZGV2X3Jt LT5kZXZfd2FpdCk7CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fY29tbWl0 KGdjLCAmdCk7CisgICAgICAgIGlmICghcmMpIGJyZWFrOworICAgICAgICBpZiAocmMgPCAwKSBn b3RvIG91dDsKKyAgICB9CisKK291dDoKKyAgICBhb2Rldi0+cmMgPSByYzsKKyAgICBhb2Rldi0+ Y2FsbGJhY2soZWdjLCBhb2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIHZzY3NpZGV2X19yZW1vdmUo bGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fYW9fZGV2aWNlICphb2RldikKK3sKKyAgICBTVEFURV9B T19HQyhhb2Rldi0+YW8pOworICAgIHZzY3NpZGV2X3JtX3QgKnZzY3NpZGV2X3JtID0gQ09OVEFJ TkVSX09GKGFvZGV2LT5kZXYsICp2c2NzaWRldl9ybSwgZGV2KTsKKyAgICBjaGFyICpzdGF0ZV9w YXRoOworICAgIGludCByYywgYmVfd2FpdDsKKworICAgIHZzY3NpZGV2X3JtLT5iZV9wYXRoID0g bGlieGxfX2RldmljZV9iYWNrZW5kX3BhdGgoZ2MsIGFvZGV2LT5kZXYpOworICAgIHN0YXRlX3Bh dGggPSBHQ1NQUklOVEYoIiVzL3N0YXRlIiwgdnNjc2lkZXZfcm0tPmJlX3BhdGgpOworCisgICAg cmMgPSB2c2NzaWN0cmxfcmVjb25maWd1cmVfcm0oYW9kZXYsIHN0YXRlX3BhdGgsICZiZV93YWl0 KTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgcmMgPSBsaWJ4bF9fZXZfZGV2c3RhdGVf d2FpdChhbywgJmFvZGV2LT5iYWNrZW5kX2RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdnNjc2ljdHJsX3JlbW92ZV9iZV9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0YXRlX3BhdGgsIGJlX3dhaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMSUJYTF9ERVNUUk9ZX1RJTUVPVVQgKiAxMDAwKTsKKyAgICBpZiAocmMpIHsKKyAgICAg ICAgTE9HKEVSUk9SLCAidW5hYmxlIHRvIHdhaXQgZm9yICVzIiwgc3RhdGVfcGF0aCk7CisgICAg ICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJldHVybjsKKworb3V0OgorICAgIGFvZGV2LT5y YyA9IHJjOworICAgIC8qIE5vdGlmeSB0aGF0IHRoaXMgaXMgZG9uZSAqLworICAgIGFvZGV2LT5j YWxsYmFjayhlZ2MsIGFvZGV2KTsKK30KKworc3RhdGljIGludCB2c2NzaWRldl9yZW1vdmUobGli eGxfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKnZzY3Np Y3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93 ICphb19ob3cpCit7CisgICAgQU9fQ1JFQVRFKGN0eCwgZG9taWQsIGFvX2hvdyk7CisgICAgbGli eGxfX2FvX2RldmljZSAqYW9kZXY7CisgICAgdnNjc2lkZXZfcm1fdCAqdnNjc2lkZXZfcm07Cisg ICAgbGlieGxfX2RldmljZSAqZGV2aWNlOworICAgIGludCByYzsKKworICAgIEdDTkVXKGFvZGV2 KTsKKworICAgIEdDTkVXKHZzY3NpZGV2X3JtKTsKKyAgICB2c2NzaWRldl9ybS0+Y3RybCA9IHZz Y3NpY3RybDsKKyAgICBkZXZpY2UgPSAmdnNjc2lkZXZfcm0tPmRldjsKKworICAgIHJjID0gbGli eGxfX2RldmljZV9mcm9tX3ZzY3NpY3RybChnYywgZG9taWQsIHZzY3NpY3RybCwgZGV2aWNlKTsK KyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgbGlieGxfX3ByZXBhcmVfYW9fZGV2aWNlKGFv LCBhb2Rldik7CisgICAgYW9kZXYtPmRldiA9IGRldmljZTsKKyAgICBhb2Rldi0+YWN0aW9uID0g TElCWExfX0RFVklDRV9BQ1RJT05fUkVNT1ZFOworICAgIGFvZGV2LT5jYWxsYmFjayA9IHZzY3Np X2FvZGV2X2NvbXBsZXRlOworCisgICAgdnNjc2lkZXZfX3JlbW92ZShlZ2MsIGFvZGV2KTsKKwor b3V0OgorICAgIGlmIChyYykgQU9fQ1JFQVRFX0ZBSUwocmMpOworICAgIHJldHVybiBBT19JTlBS T0dSRVNTOworfQorCitzdGF0aWMgaW50IHZzY3NpZGV2X2JhY2tlbmRfYWRkKGxpYnhsX19nYyAq Z2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWRl diAqdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleGFycmF5X3QgKmJhY2sp Cit7CisgICAgaW50IHJjOworICAgIGNoYXIgKmRpcjsKKyAgICB1bnNpZ25lZCBpbnQgaHN0LCBj aG4sIHRndDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbHVuOworCisKKyAgICBkaXIgPSBHQ1NQ UklOVEYoInZzY3NpLWRldnMvZGV2LSV1Iiwgdi0+dnNjc2lkZXZfaWQpOworICAgIHN3aXRjaCAo di0+cGRldi50eXBlKSB7CisgICAgY2FzZSBMSUJYTF9WU0NTSV9QREVWX1RZUEVfV1dOOgorICAg ICAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdDU1BSSU5URigiJXMvcC1kZXYiLCBkaXIpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdi0+cGRldi51Lnd3bi5tKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMSUJY TF9WU0NTSV9QREVWX1RZUEVfSENUTDoKKyAgICAgICAgaHN0ID0gdi0+cGRldi51LmhjdGwubS5o c3Q7CisgICAgICAgIGNobiA9IHYtPnBkZXYudS5oY3RsLm0uY2huOworICAgICAgICB0Z3QgPSB2 LT5wZGV2LnUuaGN0bC5tLnRndDsKKyAgICAgICAgbHVuID0gdi0+cGRldi51LmhjdGwubS5sdW47 CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9wLWRldiIsIGRpciksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHQ1NQUklOVEYoIiV1OiV1OiV1OiVsbHUiLCBoc3QsIGNobiwgdGd0LCBs dW4pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMSUJYTF9WU0NTSV9QREVWX1RZUEVfSU5W QUxJRDoKKyAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KKyAgICBkZWZhdWx0OgorICAgICAgICBy YyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICBmbGV4YXJyYXlf YXBwZW5kX3BhaXIoYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIl cy9wLWRldm5hbWUiLCBkaXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2LT5wZGV2LnBf ZGV2bmFtZSk7CisgICAgaHN0ID0gdi0+dmRldi5oc3Q7CisgICAgY2huID0gdi0+dmRldi5jaG47 CisgICAgdGd0ID0gdi0+dmRldi50Z3Q7CisgICAgbHVuID0gdi0+dmRldi5sdW47CisgICAgZmxl eGFycmF5X2FwcGVuZF9wYWlyKGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BS SU5URigiJXMvdi1kZXYiLCBkaXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklO VEYoIiV1OiV1OiV1OiVsbHUiLCBoc3QsIGNobiwgdGd0LCBsdW4pKTsKKyAgICBmbGV4YXJyYXlf YXBwZW5kX3BhaXIoYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIl cy9zdGF0ZSIsIGRpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJWQi LCBYZW5idXNTdGF0ZUluaXRpYWxpc2luZykpOworICAgIHJjID0gMDsKK291dDoKKyAgICByZXR1 cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHZzY3NpY3RybF9uZXdfYmFja2VuZChsaWJ4bF9fZWdj ICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FvX2Rldmlj ZSAqYW9kZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNl X3ZzY3NpY3RybCAqdnNjc2ljdHJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX2RvbWFpbl9jb25maWcgKmRfY29uZmlnKQoreworICAgIFNUQVRFX0FPX0dDKGFvZGV2 LT5hbyk7CisgICAgaW50IHJjLCBpOworICAgIGZsZXhhcnJheV90ICpiYWNrOworICAgIGZsZXhh cnJheV90ICpmcm9udDsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXYgKnY7CisgICAgeHNfdHJh bnNhY3Rpb25fdCB0ID0gWEJUX05VTEw7CisKKyAgICAvKiBQcmVhbGxvYyBrZXkrdmFsdWU6IDQg dG9wbGV2ZWwgKyA0IHBlciBkZXZpY2UgKi8KKyAgICBpID0gMiAqICg0ICsgKDQgKiB2c2NzaWN0 cmwtPm51bV92c2NzaWRldnMpKTsKKyAgICBiYWNrID0gZmxleGFycmF5X21ha2UoZ2MsIGksIDEp OworICAgIGZyb250ID0gZmxleGFycmF5X21ha2UoZ2MsIDIgKiAyLCAxKTsKKworICAgIGZsZXhh cnJheV9hcHBlbmRfcGFpcihiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbnRl bmQtaWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVkIiwgYW9kZXYt PmRldi0+ZG9taWQpKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgIm9ubGluZSIs ICIxIik7CisgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGJhY2ssCisgICAgICAgICAgICAgICAg ICAgICAgICAgICJzdGF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigi JWQiLCBYZW5idXNTdGF0ZUluaXRpYWxpc2luZykpOworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFp cihiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAibGlieGxfY3RybF9pbmRleCIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJWQiLCB2c2NzaWN0cmwtPmlkeCkp OworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAiZmVhdHVyZS1ob3N0IiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGVmYm9vbF92YWwodnNjc2ljdHJsLT5zY3NpX3Jh d19jbWRzKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA6ICIwIik7CisKKyAgICBm bGV4YXJyYXlfYXBwZW5kX3BhaXIoZnJvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJi YWNrZW5kLWlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlZCIsIHZz Y3NpY3RybC0+YmFja2VuZF9kb21pZCkpOworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihmcm9u dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXRlIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgR0NTUFJJTlRGKCIlZCIsIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nKSk7CisKKyAg ICBmb3IgKGkgPSAwOyBpIDwgdnNjc2ljdHJsLT5udW1fdnNjc2lkZXZzOyBpKyspIHsKKyAgICAg ICAgdiA9IHZzY3NpY3RybC0+dnNjc2lkZXZzICsgaTsKKyAgICAgICAgcmMgPSB2c2NzaWRldl9i YWNrZW5kX2FkZChnYywgdiwgYmFjayk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAg fQorCisgICAgZm9yICg7OykgeworICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9z dGFydChnYywgJnQpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHJjID0g bGlieGxfX2RldmljZV9leGlzdHMoZ2MsIHQsIGFvZGV2LT5kZXYpOworICAgICAgICBpZiAocmMg PCAwKSBnb3RvIG91dDsKKyAgICAgICAgaWYgKHJjID09IDEpIHsgICAgICAgICAgICAgIC8qIGFs cmVhZHkgZXhpc3RzIGluIHhlbnN0b3JlICovCisgICAgICAgICAgICBMT0coRVJST1IsICJkZXZp Y2UgYWxyZWFkeSBleGlzdHMgaW4geGVuc3RvcmUiKTsKKyAgICAgICAgICAgIHJjID0gRVJST1Jf REVWSUNFX0VYSVNUUzsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAg ICAgaWYgKGFvZGV2LT51cGRhdGVfanNvbikgeworICAgICAgICAgICAgcmMgPSBsaWJ4bF9fc2V0 X2RvbWFpbl9jb25maWd1cmF0aW9uKGdjLCBhb2Rldi0+ZGV2LT5kb21pZCwgZF9jb25maWcpOwor ICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGxpYnhs X19kZXZpY2VfZ2VuZXJpY19hZGQoZ2MsIHQsIGFvZGV2LT5kZXYsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfX3hzX2t2c19vZl9mbGV4YXJyYXkoZ2MsIGJhY2ssCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYmFjay0+Y291bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X194c19rdnNfb2ZfZmxleGFycmF5KGdjLCBmcm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9udC0+Y291bnQpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgICAgIHJjID0gbGli eGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywgJnQpOworICAgICAgICBpZiAoIXJjKSBicmVh azsKKyAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7CisgICAgfQorCisgICAgbGlieGxfX3dh aXRfZGV2aWNlX2Nvbm5lY3Rpb24oZWdjLCBhb2Rldik7CisgICAgcmV0dXJuOworCitvdXQ6Cisg ICAgbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Fib3J0KGdjLCAmdCk7CisgICAgYW9kZXYtPnJjID0g cmM7CisgICAgYW9kZXYtPmNhbGxiYWNrKGVnYywgYW9kZXYpOworfQorCitzdGF0aWMgdm9pZCB2 c2NzaWN0cmxfZG9fcmVjb25maWd1cmVfYWRkX2NiKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2V2X2RldnN0YXRlICpk cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKQor eworICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2ID0gQ09OVEFJTkVSX09GKGRzLCAqYW9kZXYs IGJhY2tlbmRfZHMpOworICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7CisgICAgYW9kZXYtPnJj ID0gcmM7CisgICAgYW9kZXYtPmNhbGxiYWNrKGVnYywgYW9kZXYpOworfQorCitzdGF0aWMgdm9p ZCB2c2NzaWN0cmxfZG9fcmVjb25maWd1cmVfYWRkKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92 c2NzaWN0cmwgKnZzY3NpY3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcpCit7CisgICAgU1RBVEVfQU9fR0Mo YW9kZXYtPmFvKTsKKyAgICBpbnQgcmMsIGksIGJlX3N0YXRlLCBiZV93YWl0OworICAgIGNvbnN0 IGNoYXIgKmJlX3BhdGg7CisgICAgY2hhciAqZGV2X3BhdGgsICpzdGF0ZV9wYXRoLCAqc3RhdGVf dmFsOworICAgIGZsZXhhcnJheV90ICpiYWNrOworICAgIGxpYnhsX2RldmljZV92c2NzaWRldiAq djsKKyAgICB4c190cmFuc2FjdGlvbl90IHQgPSBYQlRfTlVMTDsKKyAgICBib29sIGRvX3JlY29u ZmlndXJlID0gZmFsc2U7CisKKyAgICAvKiBQcmVhbGxvYyBrZXkrdmFsdWU6IDEgdG9wbGV2ZWwg KyA0IHBlciBkZXZpY2UgKi8KKyAgICBpID0gMiAqICgxICsgKDQgKiB2c2NzaWN0cmwtPm51bV92 c2NzaWRldnMpKTsKKyAgICBiYWNrID0gZmxleGFycmF5X21ha2UoZ2MsIGksIDEpOworCisgICAg YmVfcGF0aCA9IGxpYnhsX19kZXZpY2VfYmFja2VuZF9wYXRoKGdjLCBhb2Rldi0+ZGV2KTsKKyAg ICBzdGF0ZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9zdGF0ZSIsIGJlX3BhdGgpOworCisgICAgZm9y ICg7OykgeworICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9zdGFydChnYywgJnQp OworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHN0YXRlX3ZhbCA9IGxpYnhs X194c19yZWFkKGdjLCB0LCBzdGF0ZV9wYXRoKTsKKyAgICAgICAgTE9HKERFQlVHLCAiJXMgaXMg JXMiLCBzdGF0ZV9wYXRoLCBzdGF0ZV92YWwpOworICAgICAgICBpZiAoIXN0YXRlX3ZhbCkgewor ICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAg ICAgIH0KKworICAgICAgICBiZV9zdGF0ZSA9IGF0b2koc3RhdGVfdmFsKTsKKyAgICAgICAgc3dp dGNoIChiZV9zdGF0ZSkgeworICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlVW5rbm93bjoKKyAgICAg ICAgY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2luZzoKKyAgICAgICAgY2FzZSBYZW5idXNTdGF0 ZUNsb3Npbmc6CisgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVDbG9zZWQ6CisgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICAvKiBUaGUgYmFja2VuZCBpcyBpbiBhIGJhZCBzdGF0ZSAqLworICAg ICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAg IGNhc2UgWGVuYnVzU3RhdGVJbml0aWFsaXNlZDoKKyAgICAgICAgY2FzZSBYZW5idXNTdGF0ZVJl Y29uZmlndXJpbmc6CisgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyZWQ6CisgICAg ICAgICAgICAvKiBCYWNrZW5kIGlzIHN0aWxsIGJ1c3ksIGNhbGxlciBoYXMgdG8gcmV0cnkgKi8K KyAgICAgICAgICAgIHJjID0gRVJST1JfTk9UX1JFQURZOworICAgICAgICAgICAgZ290byBvdXQ7 CisgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVJbml0V2FpdDoKKyAgICAgICAgICAgIC8qIFRoZSBm cm9udGVuZCBkaWQgbm90IGNvbm5lY3QgeWV0ICovCisgICAgICAgICAgICBiZV93YWl0ID0gWGVu YnVzU3RhdGVJbml0V2FpdDsKKyAgICAgICAgICAgIGRvX3JlY29uZmlndXJlID0gZmFsc2U7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYZW5idXNTdGF0ZUNvbm5lY3RlZDoKKyAg ICAgICAgICAgIC8qIFRoZSBiYWNrZW5kIGNhbiBoYW5kbGUgcmVjb25maWd1cmUgKi8KKyAgICAg ICAgICAgIGJlX3dhaXQgPSBYZW5idXNTdGF0ZUNvbm5lY3RlZDsKKyAgICAgICAgICAgIGZsZXhh cnJheV9hcHBlbmRfcGFpcihiYWNrLCAic3RhdGUiLCBHQ1NQUklOVEYoIiVkIiwgWGVuYnVzU3Rh dGVSZWNvbmZpZ3VyaW5nKSk7CisgICAgICAgICAgICBkb19yZWNvbmZpZ3VyZSA9IHRydWU7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEFwcGVuZCBuZXcgdnNj c2lkZXYgb3Igc2tpcCBleGlzdGluZyAgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHZzY3Np Y3RybC0+bnVtX3ZzY3NpZGV2czsgaSsrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmIg PSAwOworICAgICAgICAgICAgdiA9IHZzY3NpY3RybC0+dnNjc2lkZXZzICsgaTsKKyAgICAgICAg ICAgIGRldl9wYXRoID0gR0NTUFJJTlRGKCIlcy92c2NzaS1kZXZzL2Rldi0ldSIsIGJlX3BhdGgs IHYtPnZzY3NpZGV2X2lkKTsKKyAgICAgICAgICAgIGlmIChsaWJ4bF9feHNfZGlyZWN0b3J5KGdj LCBYQlRfTlVMTCwgZGV2X3BhdGgsICZuYikpIHsKKyAgICAgICAgICAgICAgICAvKiBGSVhNRSBT YW5pdHkgY2hlY2sgKi8KKyAgICAgICAgICAgICAgICBMT0coREVCVUcsICIlcyBleGlzdHMgYWxy ZWFkeSB3aXRoICV1IGVudHJpZXMiLCBkZXZfcGF0aCwgbmIpOworICAgICAgICAgICAgICAgIGNv bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmMgPSB2c2NzaWRldl9iYWNrZW5k X2FkZChnYywgdiwgYmFjayk7CisgICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgICAg ICB9CisKKyAgICAgICAgaWYgKGFvZGV2LT51cGRhdGVfanNvbikgeworICAgICAgICAgICAgcmMg PSBsaWJ4bF9fc2V0X2RvbWFpbl9jb25maWd1cmF0aW9uKGdjLCBhb2Rldi0+ZGV2LT5kb21pZCwg ZF9jb25maWcpOworICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgfQorCisg ICAgICAgIGxpYnhsX194c193cml0ZXYoZ2MsIHQsIGJlX3BhdGgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfX3hzX2t2c19vZl9mbGV4YXJyYXkoZ2MsIGJhY2ssIGJhY2stPmNvdW50 KSk7CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmdCk7 CisgICAgICAgIGlmICghcmMpIGJyZWFrOworICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsK KyAgICB9CisKKyAgICBpZiAoZG9fcmVjb25maWd1cmUpIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9f ZXZfZGV2c3RhdGVfd2FpdChhbywgJmFvZGV2LT5iYWNrZW5kX2RzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZzY3NpY3RybF9kb19yZWNvbmZpZ3VyZV9hZGRfY2IsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfcGF0aCwgYmVfd2FpdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9JTklUX1RJTUVPVVQg KiAxMDAwKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICB9CisgICAgcmV0dXJuOwor CitvdXQ6CisgICAgbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Fib3J0KGdjLCAmdCk7CisgICAgYW9k ZXYtPnJjID0gcmM7CisgICAgYW9kZXYtPmNhbGxiYWNrKGVnYywgYW9kZXYpOworfQorCitzdGF0 aWMgaW50IHZzY3NpY3RybF9uZXh0X3ZzY3NpZGV2X2lkKGxpYnhsX19nYyAqZ2MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxpYnhsX3BhdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmlkICp2c2NzaWRl dl9pZCkKK3sKKyAgICBjb25zdCBjaGFyICp2YWw7CisgICAgeHNfdHJhbnNhY3Rpb25fdCB0ID0g WEJUX05VTEw7CisgICAgdW5zaWduZWQgaW50IGlkOworICAgIGludCByYzsKKworICAgIGZvciAo OzspIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fc3RhcnQoZ2MsICZ0KTsK KyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICB2YWwgPSBsaWJ4bF9feHNfcmVh ZChnYywgdCwgbGlieGxfcGF0aCk7CisgICAgICAgIGlkID0gdmFsID8gc3RydG91bCh2YWwsIE5V TEwsIDEwKSA6IDA7CisKKyAgICAgICAgTE9HKERFQlVHLCAiJXMgPSAlcyB2c2NzaWRldl9pZCAl dSIsIGxpYnhsX3BhdGgsIHZhbCwgaWQpOworCisgICAgICAgIHZhbCA9IEdDU1BSSU5URigiJXUi LCBpZCArIDEpOworICAgICAgICByYyA9IGxpYnhsX194c193cml0ZV9jaGVja2VkKGdjLCB0LCBs aWJ4bF9wYXRoLCB2YWwpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHJj ID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywgJnQpOworICAgICAgICBpZiAoIXJj KSBicmVhazsKKyAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7CisgICAgfQorCisgICAgKnZz Y3NpZGV2X2lkID0gaWQ7CisgICAgcmMgPSAwOworCitvdXQ6CisgICAgbGlieGxfX3hzX3RyYW5z YWN0aW9uX2Fib3J0KGdjLCAmdCk7CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHZz Y3NpY3RybF9hc3NpZ25fdnNjc2lkZXZfaWRzKGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICp2c2Nz aWN0cmwpCit7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICpkZXY7CisgICAgbGlieGxfZGV2 aWQgdnNjc2lkZXZfaWQ7CisgICAgY29uc3QgY2hhciAqbGlieGxfcGF0aDsKKyAgICBpbnQgcmMs IGk7CisKKyAgICBsaWJ4bF9wYXRoID0gR0NTUFJJTlRGKCIlcy92c2NzaS8ldS9uZXh0X3ZzY3Np ZGV2X2lkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19saWJ4bF9wYXRo KGdjLCBkb21pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2NzaWN0cmwtPmRldmlk KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnNjc2ljdHJsLT5udW1fdnNjc2lkZXZzOyBpKyspIHsK KyAgICAgICAgZGV2ID0gJnZzY3NpY3RybC0+dnNjc2lkZXZzW2ldOworICAgICAgICBpZiAoZGV2 LT52c2NzaWRldl9pZCA+PSAwKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJjID0g dnNjc2ljdHJsX25leHRfdnNjc2lkZXZfaWQoZ2MsIGxpYnhsX3BhdGgsICZ2c2NzaWRldl9pZCk7 CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgTE9HKEVSUk9SLCAiZmFpbGVkIHRvIGFz c2lnbiB2c2NzaWRldl9pZCB0byAlcyBmb3IgJXMiLAorICAgICAgICAgICAgICAgIGxpYnhsX3Bh dGgsIGRldi0+cGRldi5wX2Rldm5hbWUpOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAg IH0KKyAgICAgICAgZGV2LT52c2NzaWRldl9pZCA9IHZzY3NpZGV2X2lkOworICAgIH0KKworICAg IHJjID0gMDsKK291dDoKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHZzY3NpY3Ry bF91cGRhdGVfanNvbihsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqdnNjc2ljdHJsLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZzY3NpY3RybF9hZGQgZm4pCit7CisgICAgU1RBVEVf QU9fR0MoYW9kZXYtPmFvKTsKKyAgICBpbnQgcmM7CisgICAgdWludDMyX3QgZG9taWQgPSBhb2Rl di0+ZGV2LT5kb21pZDsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsIHZzY3NpY3RybF9zYXZl ZDsKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnIGRfY29uZmlnOworICAgIGxpYnhsX19kb21haW5f dXNlcmRhdGFfbG9jayAqbG9jayA9IE5VTEw7CisKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnX2lu aXQoJmRfY29uZmlnKTsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2luaXQoJnZzY3NpY3Ry bF9zYXZlZCk7CisKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2NvcHkoQ1RYLCAmdnNjc2lj dHJsX3NhdmVkLCB2c2NzaWN0cmwpOworCisgICAgcmMgPSB2c2NzaWN0cmxfYXNzaWduX3ZzY3Np ZGV2X2lkcyhnYywgZG9taWQsICZ2c2NzaWN0cmxfc2F2ZWQpOworICAgIGlmIChyYykgZ290byBv dXQ7CisKKyAgICBpZiAoYW9kZXYtPnVwZGF0ZV9qc29uKSB7CisgICAgICAgIGxvY2sgPSBsaWJ4 bF9fbG9ja19kb21haW5fdXNlcmRhdGEoZ2MsIGRvbWlkKTsKKyAgICAgICAgaWYgKCFsb2NrKSB7 CisgICAgICAgICAgICByYyA9IEVSUk9SX0xPQ0tfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0 OworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJ4bF9fZ2V0X2RvbWFpbl9jb25maWd1cmF0 aW9uKGdjLCBkb21pZCwgJmRfY29uZmlnKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKwor ICAgICAgICAvKiBSZXBsYWNlIG9yIGFwcGVuZCB0aGUgY29weSB0byB0aGUgZG9tYWluIGNvbmZp ZyAqLworICAgICAgICBERVZJQ0VfQUREKHZzY3NpY3RybCwgdnNjc2ljdHJscywgZG9taWQsICZ2 c2NzaWN0cmxfc2F2ZWQsIENPTVBBUkVfREVWSUQsICZkX2NvbmZpZyk7CisgICAgfQorCisgICAg Zm4oZWdjLCBhb2RldiwgJnZzY3NpY3RybF9zYXZlZCwgJmRfY29uZmlnKTsKKworb3V0OgorICAg IGlmIChsb2NrKSBsaWJ4bF9fdW5sb2NrX2RvbWFpbl91c2VyZGF0YShsb2NrKTsKKyAgICBsaWJ4 bF9kZXZpY2VfdnNjc2ljdHJsX2Rpc3Bvc2UoJnZzY3NpY3RybF9zYXZlZCk7CisgICAgbGlieGxf ZG9tYWluX2NvbmZpZ19kaXNwb3NlKCZkX2NvbmZpZyk7CisgICAgaWYgKHJjKSB7CisgICAgICAg IGFvZGV2LT5yYyA9IHJjOworICAgICAgICBhb2Rldi0+Y2FsbGJhY2soZWdjLCBhb2Rldik7Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZCB2c2NzaWN0cmxfX3JlY29uZmlndXJlX2FkZChsaWJ4bF9f ZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf dCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rl dmljZV92c2NzaWN0cmwgKnZzY3NpY3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KQoreworICAgIFNUQVRFX0FPX0dDKGFv ZGV2LT5hbyk7CisgICAgbGlieGxfX2RldmljZSAqZGV2aWNlOworICAgIHZzY3NpY3RybF9hZGQg Zm47CisgICAgaW50IHJjOworCisgICAgR0NORVcoZGV2aWNlKTsKKyAgICByYyA9IGxpYnhsX19k ZXZpY2VfZnJvbV92c2NzaWN0cmwoZ2MsIGRvbWlkLCB2c2NzaWN0cmwsIGRldmljZSk7CisgICAg aWYgKHJjKSBnb3RvIG91dDsKKyAgICBhb2Rldi0+ZGV2ID0gZGV2aWNlOworCisgICAgZm4gPSB2 c2NzaWN0cmxfZG9fcmVjb25maWd1cmVfYWRkOworICAgIHZzY3NpY3RybF91cGRhdGVfanNvbihl Z2MsIGFvZGV2LCB2c2NzaWN0cmwsIGZuKTsKKyAgICByZXR1cm47CisKK291dDoKKyAgICBhb2Rl di0+cmMgPSByYzsKKyAgICBhb2Rldi0+Y2FsbGJhY2soZWdjLCBhb2Rldik7Cit9CisKK3N0YXRp YyBpbnQgdnNjc2ljdHJsX3JlY29uZmlndXJlX2FkZChsaWJ4bF9jdHggKmN0eCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICp2c2NzaWN0 cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5 bmNvcF9ob3cgKmFvX2hvdykKK3sKKyAgICBBT19DUkVBVEUoY3R4LCBkb21pZCwgYW9faG93KTsK KyAgICBsaWJ4bF9fYW9fZGV2aWNlICphb2RldjsKKworICAgIEdDTkVXKGFvZGV2KTsKKyAgICBs aWJ4bF9fcHJlcGFyZV9hb19kZXZpY2UoYW8sIGFvZGV2KTsKKyAgICBhb2Rldi0+YWN0aW9uID0g TElCWExfX0RFVklDRV9BQ1RJT05fQUREOworICAgIGFvZGV2LT5jYWxsYmFjayA9IHZzY3NpX2Fv ZGV2X2NvbXBsZXRlOworICAgIGFvZGV2LT51cGRhdGVfanNvbiA9IHRydWU7CisgICAgdnNjc2lj dHJsX19yZWNvbmZpZ3VyZV9hZGQoZWdjLCBkb21pZCwgdnNjc2ljdHJsLCBhb2Rldik7CisKKyAg ICByZXR1cm4gQU9fSU5QUk9HUkVTUzsKK30KKwordm9pZCBsaWJ4bF9fZGV2aWNlX3ZzY3NpY3Ry bF9hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKnZzY3NpY3RybCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KQorewor ICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7CisgICAgbGlieGxfX2RldmljZSAqZGV2aWNlOwor ICAgIHZzY3NpY3RybF9hZGQgZm47CisgICAgaW50IHJjOworCisgICAgaWYgKHZzY3NpY3RybC0+ ZGV2aWQgPT0gLTEpIHsKKyAgICAgICAgaWYgKCh2c2NzaWN0cmwtPmRldmlkID0gbGlieGxfX2Rl dmljZV9uZXh0aWQoZ2MsIGRvbWlkLCAidnNjc2kiKSkgPCAwKSB7CisgICAgICAgICAgICByYyA9 IEVSUk9SX0ZBSUw7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIEdDTkVXKGRldmljZSk7CisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Zyb21fdnNjc2ljdHJs KGdjLCBkb21pZCwgdnNjc2ljdHJsLCBkZXZpY2UpOworICAgIGlmIChyYykgZ290byBvdXQ7Cisg ICAgYW9kZXYtPmRldiA9IGRldmljZTsKKworICAgIGZuID0gdnNjc2ljdHJsX25ld19iYWNrZW5k OworICAgIHZzY3NpY3RybF91cGRhdGVfanNvbihlZ2MsIGFvZGV2LCB2c2NzaWN0cmwsIGZuKTsK KyAgICByZXR1cm47CisKK291dDoKKyAgICBhb2Rldi0+cmMgPSByYzsKKyAgICBhb2Rldi0+Y2Fs bGJhY2soZWdjLCBhb2Rldik7Cit9CisKK2ludCBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX3JlbW92 ZShsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqdnNjc2ljdHJsLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cp Cit7CisgICAgcmV0dXJuIHZzY3NpY3RybF9yZW1vdmUoY3R4LCBkb21pZCwgdnNjc2ljdHJsLCBh b19ob3csIDApOworfQorCitpbnQgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9kZXN0cm95KGxpYnhs X2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqdnNjc2ljdHJsLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQorewor ICAgIHJldHVybiB2c2NzaWN0cmxfcmVtb3ZlKGN0eCwgZG9taWQsIHZzY3NpY3RybCwgYW9faG93 LCAxKTsKK30KKworbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqbGlieGxfZGV2aWNlX3ZzY3NpY3Ry bF9saXN0KGxpYnhsX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbnVtKQoreworICAgIEdDX0lOSVQo Y3R4KTsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICpjdHJscyA9IE5VTEw7CisgICAgaW50 IHJjLCBudW1fY3RybHMgPSAwOworCisgICAgKm51bSA9IDA7CisKKyAgICByYyA9IHZzY3NpX2Nv bGxlY3RfY3RybHMoZ2MsIGRvbWlkLCAmY3RybHMsICZudW1fY3RybHMpOworICAgIGlmIChyYyA9 PSAwKQorICAgICAgICAqbnVtID0gbnVtX2N0cmxzOworCisgICAgR0NfRlJFRTsKKyAgICByZXR1 cm4gY3RybHM7Cit9CisKK2ludCBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2dldGluZm8obGlieGxf Y3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICp2c2NzaWN0cmwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWRldiAqdnNjc2lkZXYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3ZzY3NpaW5mbyAqdnNjc2lpbmZv KQoreworICAgIEdDX0lOSVQoY3R4KTsKKyAgICBjaGFyICpkb21wYXRoLCAqdnNjc2lwYXRoOwor ICAgIGNoYXIgKnZhbDsKKyAgICBpbnQgcmMgPSBFUlJPUl9GQUlMOworCisgICAgbGlieGxfdnNj c2lpbmZvX2luaXQodnNjc2lpbmZvKTsKKyAgICBkb21wYXRoID0gbGlieGxfX3hzX2dldF9kb21w YXRoKGdjLCBkb21pZCk7CisgICAgdnNjc2lpbmZvLT5kZXZpZCA9IHZzY3NpY3RybC0+ZGV2aWQ7 CisgICAgdnNjc2lpbmZvLT52c2NzaWRldl9pZCA9IHZzY3NpZGV2LT52c2NzaWRldl9pZDsKKyAg ICBsaWJ4bF92c2NzaV9wZGV2X2NvcHkoY3R4LCAmdnNjc2lpbmZvLT5wZGV2LCAmdnNjc2lkZXYt PnBkZXYpOworICAgIGxpYnhsX3ZzY3NpX2hjdGxfY29weShjdHgsICZ2c2NzaWluZm8tPnZkZXYs ICZ2c2NzaWRldi0+dmRldik7CisKKyAgICB2c2NzaXBhdGggPSBHQ1NQUklOVEYoIiVzL2Rldmlj ZS92c2NzaS8lZCIsIGRvbXBhdGgsIHZzY3NpaW5mby0+ZGV2aWQpOworICAgIHZzY3NpaW5mby0+ YmFja2VuZCA9IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9iYWNrZW5kIiwgdnNjc2lwYXRoKSwgTlVMTCk7 CisgICAgaWYgKCF2c2NzaWluZm8tPmJhY2tlbmQpCisgICAgICAgIGdvdG8gb3V0OworICAgIGlm KCFsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsIHZzY3NpaW5mby0+YmFja2VuZCkpCisgICAg ICAgIGdvdG8gb3V0OworCisgICAgdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLCBH Q1NQUklOVEYoIiVzL2JhY2tlbmQtaWQiLCB2c2NzaXBhdGgpKTsKKyAgICB2c2NzaWluZm8tPmJh Y2tlbmRfaWQgPSB2YWwgPyBzdHJ0b3VsKHZhbCwgTlVMTCwgMTApIDogLTE7CisKKyAgICB2YWwg PSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsIEdDU1BSSU5URigiJXMvc3RhdGUiLCB2c2Nz aXBhdGgpKTsKKyAgICB2c2NzaWluZm8tPnZzY3NpY3RybF9zdGF0ZSA9IHZhbCA/IHN0cnRvdWwo dmFsLCBOVUxMLCAxMCkgOiAtMTsKKworICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRf TlVMTCwgR0NTUFJJTlRGKCIlcy9pZHgiLCB2c2NzaXBhdGgpKTsKKyAgICB2c2NzaWluZm8tPmlk eCA9IHZhbCA/IHN0cnRvdWwodmFsLCBOVUxMLCAxMCkgOiAtMTsKKworICAgIHZzY3NpaW5mby0+ ZnJvbnRlbmQgPSB4c19yZWFkKGN0eC0+eHNoLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL2Zyb250ZW5kIiwgdnNjc2lpbmZvLT5iYWNr ZW5kKSwgTlVMTCk7CisKKyAgICB2YWwgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsCisg ICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9mcm9udGVuZC1pZCIsIHZzY3Np aW5mby0+YmFja2VuZCkpOworICAgIHZzY3NpaW5mby0+ZnJvbnRlbmRfaWQgPSB2YWwgPyBzdHJ0 b3VsKHZhbCwgTlVMTCwgMTApIDogLTE7CisKKyAgICB2YWwgPSBsaWJ4bF9feHNfcmVhZChnYywg WEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy92c2NzaS1k ZXZzL2Rldi0ldS9zdGF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdnNjc2lpbmZvLT5i YWNrZW5kLCB2c2NzaWRldi0+dnNjc2lkZXZfaWQpKTsKKyAgICB2c2NzaWluZm8tPnZzY3NpZGV2 X3N0YXRlID0gdmFsID8gc3RydG91bCh2YWwsIE5VTEwsIDEwKSA6IC0xOworCisgICAgcmMgPSAw Oworb3V0OgorICAgIEdDX0ZSRUU7CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgbGlieGxfZGV2 aWNlX3ZzY3NpZGV2X2FkZChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXYgKnZzY3NpZGV2LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFv X2hvdykKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAq dmMsICpjdHJscyA9IE5VTEw7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICp2ZDsKKyAgICBp bnQgYywgZCwgcmMsIG51bV9jdHJscyA9IDA7CisgICAgaW50IGR1cGxpY2F0ZSA9IDA7CisKKyAg ICByYyA9IHZzY3NpX2NvbGxlY3RfY3RybHMoZ2MsIGRvbWlkLCAmY3RybHMsICZudW1fY3RybHMp OworICAgIGlmIChyYyAhPSAwKSBnb3RvIG91dDsKKworCisgICAgZm9yIChjID0gMDsgYyA8IG51 bV9jdHJsczsgKytjKSB7CisgICAgICAgIHZjID0gY3RybHMgKyBjOworICAgICAgICBpZiAodmMt PmlkeCAhPSB2c2NzaWRldi0+dmRldi5oc3QpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg ICAgICBmb3IgKGQgPSAwOyBkIDwgdmMtPm51bV92c2NzaWRldnM7IGQrKykgeworICAgICAgICAg ICAgdmQgPSB2Yy0+dnNjc2lkZXZzICsgZDsKKyAgICAgICAgICAgIGlmICh2ZC0+dmRldi5oc3Qg PT0gdnNjc2lkZXYtPnZkZXYuaHN0ICYmCisgICAgICAgICAgICAgICAgdmQtPnZkZXYuY2huID09 IHZzY3NpZGV2LT52ZGV2LmNobiAmJgorICAgICAgICAgICAgICAgIHZkLT52ZGV2LnRndCA9PSB2 c2NzaWRldi0+dmRldi50Z3QgJiYKKyAgICAgICAgICAgICAgICB2ZC0+dmRldi5sdW4gPT0gdnNj c2lkZXYtPnZkZXYubHVuKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGx1 biA9IHZkLT52ZGV2Lmx1bjsKKyAgICAgICAgICAgICAgICBMT0coRVJST1IsICJ2ZGV2ICcldTol dToldTolbGx1JyBpcyBhbHJlYWR5IHVzZWQuXG4iLAorICAgICAgICAgICAgICAgICAgICB2ZC0+ dmRldi5oc3QsIHZkLT52ZGV2LmNobiwgdmQtPnZkZXYudGd0LCBsdW4pOworICAgICAgICAgICAg ICAgIHJjID0gRVJST1JfREVWSUNFX0VYSVNUUzsKKyAgICAgICAgICAgICAgICBkdXBsaWNhdGUg PSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK KyAgICAgICAgaWYgKCFkdXBsaWNhdGUpIHsKKyAgICAgICAgICAgIC8qIEFwcGVuZCB2c2NzaWRl diB0byB0aGlzIHZzY3NpY3RybCwgdHJpZ2dlciByZWNvbmZpZ3VyZSAqLworICAgICAgICAgICAg bGlieGxfZGV2aWNlX3ZzY3NpY3RybF9hcHBlbmRfdnNjc2lkZXYoY3R4LCB2YywgdnNjc2lkZXYp OworICAgICAgICAgICAgcmMgPSB2c2NzaWN0cmxfcmVjb25maWd1cmVfYWRkKGN0eCwgZG9taWQs IHZjLCBhb19ob3cpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZv ciAoYyA9IDA7IGMgPCBudW1fY3RybHM7ICsrYykKKyAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3Np Y3RybF9kaXNwb3NlKGN0cmxzICsgYyk7CisgICAgZnJlZShjdHJscyk7CisKK291dDoKKyAgICBH Q19GUkVFOworICAgIHJldHVybiByYzsKK30KKworaW50IGxpYnhsX2RldmljZV92c2NzaWRldl9y ZW1vdmUobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICp2c2NzaWRldiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cp Cit7CisgICAgR0NfSU5JVChjdHgpOworICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKnZjLCAq Y3RybHMgPSBOVUxMOworICAgIGxpYnhsX2RldmljZV92c2NzaWRldiAqdmQ7CisgICAgaW50IGMs IGQsIHJjLCBudW1fY3RybHMgPSAwOworICAgIGludCBmb3VuZCA9IDAsIGlkeDsKKyAgICBpbnQg aGVhZCwgdGFpbCwgaTsKKworICAgIHJjID0gdnNjc2lfY29sbGVjdF9jdHJscyhnYywgZG9taWQs ICZjdHJscywgJm51bV9jdHJscyk7CisgICAgaWYgKHJjICE9IDApIGdvdG8gb3V0OworCisKKyAg ICBmb3IgKGMgPSAwOyBjIDwgbnVtX2N0cmxzOyArK2MpIHsKKyAgICAgICAgdmMgPSBjdHJscyAr IGM7CisKKyAgICAgICAgZm9yIChkID0gMDsgZCA8IHZjLT5udW1fdnNjc2lkZXZzOyBkKyspIHsK KyAgICAgICAgICAgIHZkID0gdmMtPnZzY3NpZGV2cyArIGQ7CisgICAgICAgICAgICBpZiAodmQt PnZkZXYuaHN0ID09IHZzY3NpZGV2LT52ZGV2LmhzdCAmJgorICAgICAgICAgICAgICAgIHZkLT52 ZGV2LmNobiA9PSB2c2NzaWRldi0+dmRldi5jaG4gJiYKKyAgICAgICAgICAgICAgICB2ZC0+dmRl di50Z3QgPT0gdnNjc2lkZXYtPnZkZXYudGd0ICYmCisgICAgICAgICAgICAgICAgdmQtPnZkZXYu bHVuID09IHZzY3NpZGV2LT52ZGV2Lmx1bikgeworICAgICAgICAgICAgICAgIGZvdW5kID0gMTsK KyAgICAgICAgICAgICAgICBpZHggPSBkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICBp ZiAodmMtPm51bV92c2NzaWRldnMgPiAxKSB7CisgICAgICAgICAgICAgICAgLyogUHJlcGFyZSB2 c2NzaWN0cmwsIGxlYXZlIG9ubHkgZGVzaXJlZCB2c2NzaWRldiAqLworICAgICAgICAgICAgICAg IGhlYWQgPSBpZHg7CisgICAgICAgICAgICAgICAgdGFpbCA9IHZjLT5udW1fdnNjc2lkZXZzIC0g aWR4IC0gMTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGVhZDsgaSsrKQorICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX3JlbW92ZV92c2NzaWRldihj dHgsIHZjLCAwKTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGFpbDsgaSsrKQor ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX3JlbW92ZV92c2NzaWRl dihjdHgsIHZjLCAxKTsKKworICAgICAgICAgICAgICAgIC8qIFJlbW92ZSBzaW5nbGUgdnNjc2lk ZXYgY29ubmVjdGVkIHRvIHRoaXMgdnNjc2ljdHJsICovCisgICAgICAgICAgICAgICAgcmMgPSB2 c2NzaWRldl9yZW1vdmUoY3R4LCBkb21pZCwgdmMsIGFvX2hvdyk7CisgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIC8qIFdpcGUgZW50aXJlIHZzY3NpY3RybCAqLzsKKyAgICAg ICAgICAgICAgICByYyA9IHZzY3NpY3RybF9yZW1vdmUoY3R4LCBkb21pZCwgdmMsIGFvX2hvdywg MCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K KworICAgIGZvciAoYyA9IDA7IGMgPCBudW1fY3RybHM7ICsrYykKKyAgICAgICAgbGlieGxfZGV2 aWNlX3ZzY3NpY3RybF9kaXNwb3NlKGN0cmxzICsgYyk7CisgICAgZnJlZShjdHJscyk7CisKKyAg ICBpZiAoIWZvdW5kKQorICAgICAgICByYyA9IEVSUk9SX05PVEZPVU5EOworCitvdXQ6CisgICAg R0NfRlJFRTsKKyAgICByZXR1cm4gcmM7Cit9CisKK3ZvaWQgbGlieGxfZGV2aWNlX3ZzY3NpY3Ry bF9hcHBlbmRfdnNjc2lkZXYobGlieGxfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKmN0cmwsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2Nz aWRldiAqZGV2KQoreworICAgIEdDX0lOSVQoY3R4KTsKKyAgICBjdHJsLT52c2NzaWRldnMgPSBs aWJ4bF9fcmVhbGxvYyhOT0dDLCBjdHJsLT52c2NzaWRldnMsIHNpemVvZigqZGV2KSAqIChjdHJs LT5udW1fdnNjc2lkZXZzICsgMSkpOworICAgIGxpYnhsX2RldmljZV92c2NzaWRldl9pbml0KGN0 cmwtPnZzY3NpZGV2cyArIGN0cmwtPm51bV92c2NzaWRldnMpOworICAgIGxpYnhsX2RldmljZV92 c2NzaWRldl9jb3B5KENUWCwgY3RybC0+dnNjc2lkZXZzICsgY3RybC0+bnVtX3ZzY3NpZGV2cywg ZGV2KTsKKyAgICBjdHJsLT5udW1fdnNjc2lkZXZzKys7CisgICAgR0NfRlJFRTsKK30KKwordm9p ZCBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX3JlbW92ZV92c2NzaWRldihsaWJ4bF9jdHggKmN0eCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNl X3ZzY3NpY3RybCAqY3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IGlkeCkKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgaWYgKGlk eCA+PSBjdHJsLT5udW1fdnNjc2lkZXZzKQorICAgICAgICByZXR1cm47CisgICAgbGlieGxfZGV2 aWNlX3ZzY3NpZGV2X2Rpc3Bvc2UoJmN0cmwtPnZzY3NpZGV2c1tpZHhdKTsKKyAgICBpZiAoY3Ry bC0+bnVtX3ZzY3NpZGV2cyA+IGlkeCArIDEpCisgICAgICAgIG1lbW1vdmUoJmN0cmwtPnZzY3Np ZGV2c1tpZHhdLAorICAgICAgICAgICAgICAgICZjdHJsLT52c2NzaWRldnNbaWR4ICsgMV0sCisg ICAgICAgICAgICAgICAgKGN0cmwtPm51bV92c2NzaWRldnMgLSBpZHggLSAxKSAqIHNpemVvZigq Y3RybC0+dnNjc2lkZXZzKSk7CisgICAgY3RybC0+dnNjc2lkZXZzID0gbGlieGxfX3JlYWxsb2Mo Tk9HQywgY3RybC0+dnNjc2lkZXZzLCBzaXplb2YoKmN0cmwtPnZzY3NpZGV2cykgKiAoY3RybC0+ bnVtX3ZzY3NpZGV2cyAtIDEpKTsKKyAgICBjdHJsLT5udW1fdnNjc2lkZXZzLS07CisgICAgR0Nf RlJFRTsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtYmFz aWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZm IC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGx1X3ZzY3NpLmMgYi90b29scy9saWJ4bC9saWJ4bHVf dnNjc2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQ5MTdiCi0tLSAv ZGV2L251bGwKKysrIGIvdG9vbHMvbGlieGwvbGlieGx1X3ZzY3NpLmMKQEAgLTAsMCArMSw2NjQg QEAKKy8qCisgKiBsaWJ4bHVfdnNjc2kuYyAtIHhsIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXJzaW5n OiBzZXR1cCBhbmQgaGVscGVyIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNiAg ICAgIFNVU0UgTGludXggR21iSAorICogQXV0aG9yIE9sYWYgSGVyaW5nIDxvbGFmQGFlcGZsZS5k ZT4KKyAqIEF1dGhvciBPbmTFmWVqIEhvbGXEjWVrIDxhYWFubnpAZ21haWwuY29tPgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IHZlcnNpb24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNpYWwKKyAqIGV4Y2Vw dGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlICJsaWJ4bF9vc2RlcHMuaCIgLyogbXVz dCBjb21lIGJlZm9yZSBhbnkgb3RoZXIgaGVhZGVycyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgor I2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8c3lzL3N0 YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgImxpYnhsdV9pbnRlcm5hbC5oIgor CisjaWZkZWYgX19saW51eF9fCisjZGVmaW5lIExPRyhfYywgX3gsIF9hLi4uKSBcCisgICAgICAg IGlmKChfYykgJiYgKF9jKS0+cmVwb3J0KSBmcHJpbnRmKChfYyktPnJlcG9ydCwgIiVzKCV1KTog IiBfeCAiXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sICMjX2EpCisKKyNkZWZpbmUgWExVX1NZU0ZT X1RBUkdFVF9QVlNDU0kgIi9zeXMva2VybmVsL2NvbmZpZy90YXJnZXQveGVuLXB2c2NzaSIKKyNk ZWZpbmUgWExVX1dXTl9MRU4gMTYKK3N0cnVjdCB4bHVfX3ZzY3NpX3RhcmdldCB7CisgICAgWExV X0NvbmZpZyAqY2ZnOworICAgIGxpYnhsX3ZzY3NpX2hjdGwgKnBkZXZfaGN0bDsKKyAgICBsaWJ4 bF92c2NzaV9wZGV2ICpwZGV2OworICAgIGNoYXIgcGF0aFtQQVRIX01BWF07CisgICAgY2hhciB1 ZGV2X3BhdGhbUEFUSF9NQVhdOworICAgIGNoYXIgd3duW1hMVV9XV05fTEVOICsgMV07CisgICAg dW5zaWduZWQgbG9uZyBsb25nIGx1bjsKK307CisKK3N0YXRpYyBpbnQgeGx1X192c2NzaV9wYXJz ZV9oY3RsKGNoYXIgKnN0ciwgbGlieGxfdnNjc2lfaGN0bCAqaGN0bCkKK3sKKyAgICB1bnNpZ25l ZCBpbnQgaHN0LCBjaG4sIHRndDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbHVuOworCisgICAg aWYgKHNzY2FuZihzdHIsICIldToldToldTolbGx1IiwgJmhzdCwgJmNobiwgJnRndCwgJmx1bikg IT0gNCkKKyAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOworCisgICAgaGN0bC0+aHN0ID0gaHN0 OworICAgIGhjdGwtPmNobiA9IGNobjsKKyAgICBoY3RsLT50Z3QgPSB0Z3Q7CisgICAgaGN0bC0+ bHVuID0gbHVuOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqeGx1X192c2NzaV90 cmltX3N0cmluZyhjaGFyICpzKQoreworICAgIHNpemVfdCBsZW47CisKKyAgICB3aGlsZSAoaXNz cGFjZSgqcykpCisgICAgICAgIHMrKzsKKyAgICBsZW4gPSBzdHJsZW4ocyk7CisgICAgd2hpbGUg KGxlbi0tID4gMSAmJiBpc3NwYWNlKHNbbGVuXSkpCisgICAgICAgIHNbbGVuXSA9ICdcMCc7Cisg ICAgcmV0dXJuIHM7Cit9CisKKworc3RhdGljIGludCB4bHVfX3ZzY3NpX3BhcnNlX2RldihYTFVf Q29uZmlnICpjZmcsIGNoYXIgKnBkZXYsIGxpYnhsX3ZzY3NpX2hjdGwgKmhjdGwpCit7CisgICAg c3RydWN0IHN0YXQgZGVudHJ5OworICAgIGNoYXIgKnN5c2ZzID0gTlVMTDsKKyAgICBjb25zdCBj aGFyICp0eXBlOworICAgIGludCByYywgZm91bmQgPSAwOworICAgIERJUiAqZGlycDsKKyAgICBz dHJ1Y3QgZGlyZW50ICpkZTsKKworICAgIC8qIHN0YXQgcGRldiB0byBnZXQgZGV2aWNlJ3Mgc3lz ZnMgZW50cnkgKi8KKyAgICBpZiAoc3RhdCAocGRldiwgJmRlbnRyeSkgPCAwKSB7CisgICAgICAg IExPRyhjZmcsICIlcywgZGV2aWNlIG5vZGUgbm90IGZvdW5kIiwgcGRldik7CisgICAgICAgIHJj ID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmIChTX0lT QkxLIChkZW50cnkuc3RfbW9kZSkpIHsKKyAgICAgICAgdHlwZSA9ICJibG9jayI7CisgICAgfSBl bHNlIGlmIChTX0lTQ0hSIChkZW50cnkuc3RfbW9kZSkpIHsKKyAgICAgICAgdHlwZSA9ICJjaGFy IjsKKyAgICB9IGVsc2UgeworICAgICAgICBMT0coY2ZnLCAiJXMsIGRldmljZSBub2RlIG5vdCBh IGJsb2NrIG9yIGNoYXIgZGV2aWNlIiwgcGRldik7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7 CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qIC9zeXMvZGV2L3R5cGUvbWFqb3I6 bWlub3Igc3ltbGluayBhZGRlZCBpbiAyLjYuMjcgKi8KKyAgICBpZiAoYXNwcmludGYoJnN5c2Zz LCAiL3N5cy9kZXYvJXMvJXU6JXUvZGV2aWNlL3Njc2lfZGV2aWNlIiwgdHlwZSwKKyAgICAgICAg ICAgICAgICAgbWFqb3IoZGVudHJ5LnN0X3JkZXYpLCBtaW5vcihkZW50cnkuc3RfcmRldikpIDwg MCkgeworICAgICAgICBzeXNmcyA9IE5VTEw7CisgICAgICAgIHJjID0gRVJST1JfTk9NRU07Cisg ICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGRpcnAgPSBvcGVuZGlyKHN5c2ZzKTsKKyAg ICBpZiAoIWRpcnApIHsKKyAgICAgICAgTE9HKGNmZywgIiVzLCBubyBtYWpvcjptaW5vciBsaW5r IGluIHN5c2ZzIiwgcGRldik7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdv dG8gb3V0OworICAgIH0KKworICAgIHdoaWxlICgoZGUgPSByZWFkZGlyKGRpcnApKSkgeworICAg ICAgICBpZiAoIXN0cmNtcChkZS0+ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZGUtPmRfbmFtZSwg Ii4uIikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoeGx1X192c2NzaV9w YXJzZV9oY3RsKGRlLT5kX25hbWUsIGhjdGwpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg ICAgICAgZm91bmQgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2xvc2VkaXIoZGly cCk7CisKKyAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgIExPRyhjZmcsICIlcywgbm8gaDpjOnQ6 bCBsaW5rIGluIHN5c2ZzIiwgcGRldik7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAg ICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gMDsKK291dDoKKyAgICBmcmVlKHN5c2Zz KTsKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBib29sIHhsdV9fdnNjc2lfY29tcGFyZV9o Y3RsKGxpYnhsX3ZzY3NpX2hjdGwgKmEsIGxpYnhsX3ZzY3NpX2hjdGwgKmIpCit7CisgICAgaWYg KGEtPmhzdCA9PSBiLT5oc3QgJiYKKyAgICAgICAgYS0+Y2huID09IGItPmNobiAmJgorICAgICAg ICBhLT50Z3QgPT0gYi0+dGd0ICYmCisgICAgICAgIGEtPmx1biA9PSBiLT5sdW4pCisgICAgICAg IHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworLyogRmluYWxseSBhdAorICog L3N5cy9rZXJuZWwvY29uZmlnL3RhcmdldC94ZW4tcHZzY3NpL25hYS48d3duPi90cGd0XzEvbHVu L2x1bl8wLzxYPi91ZGV2X3BhdGgKKyAqLworc3RhdGljIGJvb2wgeGx1X192c2NzaV9jb21wYXJl X3VkZXYoc3RydWN0IHhsdV9fdnNjc2lfdGFyZ2V0ICp0Z3QpCit7CisgICAgYm9vbCByZXQ7Cisg ICAgaW50IGZkOworICAgIHNzaXplX3QgcmVhZF9zejsKKyAgICBsaWJ4bF92c2NzaV9oY3RsIHVk ZXZfaGN0bDsKKworICAgIGxpYnhsX3ZzY3NpX2hjdGxfaW5pdCgmdWRldl9oY3RsKTsKKworICAg IGZkID0gb3Blbih0Z3QtPnBhdGgsIE9fUkRPTkxZKTsKKyAgICBpZiAoZmQgPCAwKXsKKyAgICAg ICAgcmV0ID0gZmFsc2U7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICByZWFkX3N6ID0g cmVhZChmZCwgJnRndC0+dWRldl9wYXRoLCBzaXplb2YodGd0LT51ZGV2X3BhdGgpIC0gMSk7Cisg ICAgY2xvc2UoZmQpOworCisgICAgaWYgKHJlYWRfc3ogPD0gMCB8fCByZWFkX3N6ID4gc2l6ZW9m KHRndC0+dWRldl9wYXRoKSAtIDEpIHsKKyAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgIGdv dG8gb3V0OworICAgIH0KKyAgICB0Z3QtPnVkZXZfcGF0aFtyZWFkX3N6XSA9ICdcMCc7CisgICAg cmVhZF9zei0tOworICAgIGlmICh0Z3QtPnVkZXZfcGF0aFtyZWFkX3N6XSA9PSAnXG4nKQorICAg ICAgICB0Z3QtPnVkZXZfcGF0aFtyZWFkX3N6XSA9ICdcMCc7CisKKyAgICBpZiAoeGx1X192c2Nz aV9wYXJzZV9kZXYodGd0LT5jZmcsIHRndC0+dWRldl9wYXRoLCAmdWRldl9oY3RsKSkgeworICAg ICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorICAgIHJldCA9IHhs dV9fdnNjc2lfY29tcGFyZV9oY3RsKHRndC0+cGRldl9oY3RsLCAmdWRldl9oY3RsKTsKKworb3V0 OgorICAgIGxpYnhsX3ZzY3NpX2hjdGxfZGlzcG9zZSgmdWRldl9oY3RsKTsKKyAgICByZXR1cm4g cmV0OworfQorCisvKiAvc3lzL2tlcm5lbC9jb25maWcvdGFyZ2V0L3hlbi1wdnNjc2kvbmFhLjx3 d24+L3RwZ3RfMS9sdW4vbHVuXzAvPFg+L3VkZXZfcGF0aCAqLworc3RhdGljIGJvb2wgeGx1X192 c2NzaV93YWxrX2Rpcl9sdW4oc3RydWN0IHhsdV9fdnNjc2lfdGFyZ2V0ICp0Z3QpCit7CisgICAg Ym9vbCBmb3VuZDsKKyAgICBESVIgKmRpcnA7CisgICAgc3RydWN0IGRpcmVudCAqZGU7CisgICAg c2l6ZV90IHBhdGhfbGVuID0gc3RybGVuKHRndC0+cGF0aCk7CisgICAgY2hhciAqc3ViZGlyID0g JnRndC0+cGF0aFtwYXRoX2xlbl07CisKKyAgICBkaXJwID0gb3BlbmRpcih0Z3QtPnBhdGgpOwor ICAgIGlmICghZGlycCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm91bmQgPSBmYWxz ZTsKKyAgICB3aGlsZSAoKGRlID0gcmVhZGRpcihkaXJwKSkpIHsKKyAgICAgICAgaWYgKCFzdHJj bXAoZGUtPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGRlLT5kX25hbWUsICIuLiIpKQorICAgICAg ICAgICAgY29udGludWU7CisKKyAgICAgICAgc25wcmludGYoc3ViZGlyLCBzaXplb2YodGd0LT5w YXRoKSAtIHBhdGhfbGVuLCAiLyVzL3VkZXZfcGF0aCIsIGRlLT5kX25hbWUpOworCisgICAgICAg IGZvdW5kID0geGx1X192c2NzaV9jb21wYXJlX3VkZXYodGd0KTsKKyAgICAgICAgaWYgKGZvdW5k KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgKnN1YmRpciA9ICdcMCc7CisgICAgfQor ICAgIGNsb3NlZGlyKGRpcnApOworICAgIHJldHVybiBmb3VuZDsKK30KKworLyogL3N5cy9rZXJu ZWwvY29uZmlnL3RhcmdldC94ZW4tcHZzY3NpL25hYS48d3duPi90cGd0XzEvbHVuL2x1bl8wICov CitzdGF0aWMgYm9vbCB4bHVfX3ZzY3NpX3dhbGtfZGlyX2x1bnMoc3RydWN0IHhsdV9fdnNjc2lf dGFyZ2V0ICp0Z3QpCit7CisgICAgYm9vbCBmb3VuZDsKKyAgICBESVIgKmRpcnA7CisgICAgc3Ry dWN0IGRpcmVudCAqZGU7CisgICAgc2l6ZV90IHBhdGhfbGVuID0gc3RybGVuKHRndC0+cGF0aCk7 CisgICAgY2hhciAqc3ViZGlyID0gJnRndC0+cGF0aFtwYXRoX2xlbl07CisKKyAgICBkaXJwID0g b3BlbmRpcih0Z3QtPnBhdGgpOworICAgIGlmICghZGlycCkKKyAgICAgICAgcmV0dXJuIGZhbHNl OworCisgICAgZm91bmQgPSBmYWxzZTsKKyAgICB3aGlsZSAoKGRlID0gcmVhZGRpcihkaXJwKSkp IHsKKyAgICAgICAgaWYgKCFzdHJjbXAoZGUtPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGRlLT5k X25hbWUsICIuLiIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHNzY2Fu ZihkZS0+ZF9uYW1lLCAibHVuXyVsbHUiLCAmdGd0LT5sdW4pICE9IDEpCisgICAgICAgICAgICBj b250aW51ZTsKKworCisgICAgICAgIHNucHJpbnRmKHN1YmRpciwgc2l6ZW9mKHRndC0+cGF0aCkg LSBwYXRoX2xlbiwgIi8lcyIsIGRlLT5kX25hbWUpOworCisgICAgICAgIGZvdW5kID0geGx1X192 c2NzaV93YWxrX2Rpcl9sdW4odGd0KTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAg YnJlYWs7CisKKyAgICAgICAgKnN1YmRpciA9ICdcMCc7CisgICAgfQorICAgIGNsb3NlZGlyKGRp cnApOworICAgIHJldHVybiBmb3VuZDsKK30KKworLyogL3N5cy9rZXJuZWwvY29uZmlnL3Rhcmdl dC94ZW4tcHZzY3NpL25hYS48d3duPi90cGd0XzEgKi8KK3N0YXRpYyBib29sIHhsdV9fdnNjc2lf d2Fsa19kaXJfbmFhKHN0cnVjdCB4bHVfX3ZzY3NpX3RhcmdldCAqdGd0KQoreworICAgIGJvb2wg Zm91bmQ7CisgICAgRElSICpkaXJwOworICAgIHN0cnVjdCBkaXJlbnQgKmRlOworICAgIHNpemVf dCBwYXRoX2xlbiA9IHN0cmxlbih0Z3QtPnBhdGgpOworICAgIGNoYXIgKnN1YmRpciA9ICZ0Z3Qt PnBhdGhbcGF0aF9sZW5dOworICAgIHVuc2lnbmVkIGludCB0cGd0OworCisgICAgZGlycCA9IG9w ZW5kaXIodGd0LT5wYXRoKTsKKyAgICBpZiAoIWRpcnApCisgICAgICAgIHJldHVybiBmYWxzZTsK KworICAgIGZvdW5kID0gZmFsc2U7CisgICAgd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlycCkpKSB7 CisgICAgICAgIGlmICghc3RyY21wKGRlLT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChkZS0+ZF9u YW1lLCAiLi4iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChzc2NhbmYo ZGUtPmRfbmFtZSwgInRwZ3RfJXUiLCAmdHBndCkgIT0gMSkKKyAgICAgICAgICAgIGNvbnRpbnVl OworCisgICAgICAgIHNucHJpbnRmKHN1YmRpciwgc2l6ZW9mKHRndC0+cGF0aCkgLSBwYXRoX2xl biwgIi8lcy9sdW4iLCBkZS0+ZF9uYW1lKTsKKworICAgICAgICBmb3VuZCA9IHhsdV9fdnNjc2lf d2Fsa19kaXJfbHVucyh0Z3QpOworICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICBicmVh azsKKworICAgICAgICAqc3ViZGlyID0gJ1wwJzsKKyAgICB9CisgICAgY2xvc2VkaXIoZGlycCk7 CisgICAgcmV0dXJuIGZvdW5kOworfQorCisvKiAvc3lzL2tlcm5lbC9jb25maWcvdGFyZ2V0L3hl bi1wdnNjc2kvbmFhLjx3d24+ICovCitzdGF0aWMgYm9vbCB4bHVfX3ZzY3NpX2ZpbmRfdGFyZ2V0 X3d3bihzdHJ1Y3QgeGx1X192c2NzaV90YXJnZXQgKnRndCkKK3sKKyAgICBib29sIGZvdW5kOwor ICAgIERJUiAqZGlycDsKKyAgICBzdHJ1Y3QgZGlyZW50ICpkZTsKKyAgICBzaXplX3QgcGF0aF9s ZW4gPSBzdHJsZW4odGd0LT5wYXRoKTsKKyAgICBjaGFyICpzdWJkaXIgPSAmdGd0LT5wYXRoW3Bh dGhfbGVuXTsKKworICAgIGRpcnAgPSBvcGVuZGlyKHRndC0+cGF0aCk7CisgICAgaWYgKCFkaXJw KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3VuZCA9IGZhbHNlOworICAgIHdoaWxl ICgoZGUgPSByZWFkZGlyKGRpcnApKSkgeworICAgICAgICBpZiAoIXN0cmNtcChkZS0+ZF9uYW1l LCAiLiIpIHx8ICFzdHJjbXAoZGUtPmRfbmFtZSwgIi4uIikpCisgICAgICAgICAgICBjb250aW51 ZTsKKworICAgICAgICBpZiAoc3NjYW5mKGRlLT5kX25hbWUsICJuYWEuJTE2WzAtOWEtZkEtRl0i LCB0Z3QtPnd3bikgIT0gMSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHNucHJp bnRmKHN1YmRpciwgc2l6ZW9mKHRndC0+cGF0aCkgLSBwYXRoX2xlbiwgIi8lcyIsIGRlLT5kX25h bWUpOworCisgICAgICAgIGZvdW5kID0geGx1X192c2NzaV93YWxrX2Rpcl9uYWEodGd0KTsKKyAg ICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgKnN1YmRpciA9 ICdcMCc7CisgICAgfQorICAgIGNsb3NlZGlyKGRpcnApOworICAgIHJldHVybiBmb3VuZDsKK30K KworLyoKKyAqIENvbnZlcnQgcGRldiBmcm9tIGNvbmZpZyBzdHJpbmcgaW50byBwZGV2IHByb3Bl cnR5IGZvciBiYWNrZW5kLAorICogd2hpY2ggaXMgZWl0aGVyIGg6Yzp0OmwgZm9yIHhlbmxpbnV4 IG9yIG5hYS53d246bHVuIGZvciBwdm9wcworICovCitzdGF0aWMgaW50IHhsdV9fdnNjc2lfZGV2 X3RvX3BkZXYoWExVX0NvbmZpZyAqY2ZnLCBsaWJ4bF9jdHggKmN0eCwgY2hhciAqc3RyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3ZzY3NpX2hjdGwgKnBkZXZfaGN0 bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF92c2NzaV9wZGV2ICpw ZGV2KQoreworICAgIGludCByYyA9IEVSUk9SX0lOVkFMOworICAgIHN0cnVjdCB4bHVfX3ZzY3Np X3RhcmdldCAqdGd0OworICAgIHN0YXRpYyBjb25zdCBjaGFyIHhlbl9wdnNjc2lbXSA9IFhMVV9T WVNGU19UQVJHRVRfUFZTQ1NJOworCisgICAgLyogRmlyc3QgZ2V0IGhjdGwgcmVwcmVzZW50YXRp b24gb2YgY29uZmlnIGl0ZW0gKi8KKyAgICBpZiAoeGx1X192c2NzaV9wYXJzZV9kZXYoY2ZnLCBz dHIsIHBkZXZfaGN0bCkpCisgICAgICAgIGdvdG8gb3V0OworCisgICAgLyogQ2hlY2sgaWYgYSBT Q1NJIHRhcmdldCBpdGVtIGV4aXN0cyBmb3IgdGhlIGNvbmZpZyBpdGVtICovCisgICAgaWYgKGFj Y2Vzcyh4ZW5fcHZzY3NpLCBGX09LKSA9PSAwKSB7CisgICAgICAgIHRndCA9IGNhbGxvYygxLCBz aXplb2YoKnRndCkpOworICAgICAgICBpZiAoIXRndCkgeworICAgICAgICAgICAgcmMgPSBFUlJP Ul9OT01FTTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAgIHRndC0+ Y2ZnID0gY2ZnOworICAgICAgICB0Z3QtPnBkZXZfaGN0bCA9IHBkZXZfaGN0bDsKKyAgICAgICAg dGd0LT5wZGV2ID0gcGRldjsKKyAgICAgICAgc25wcmludGYodGd0LT5wYXRoLCBzaXplb2YodGd0 LT5wYXRoKSwgIiVzIiwgeGVuX3B2c2NzaSk7CisgICAgICAgIGlmICh4bHVfX3ZzY3NpX2ZpbmRf dGFyZ2V0X3d3bih0Z3QpID09IHRydWUpIHsKKyAgICAgICAgICAgIExPRyhjZmcsICInJXMnIG1h cHMgdG8gJyVzKCVzKSciLCBzdHIsIHRndC0+cGF0aCwgdGd0LT51ZGV2X3BhdGgpOworICAgICAg ICAgICAgbGlieGxfdnNjc2lfcGRldl9pbml0X3R5cGUocGRldiwgTElCWExfVlNDU0lfUERFVl9U WVBFX1dXTik7CisgICAgICAgICAgICBpZiAoYXNwcmludGYoJnBkZXYtPnUud3duLm0sICJuYWEu JXM6JWxsdSIsIHRndC0+d3duLCB0Z3QtPmx1bikgPCAwKSB7CisgICAgICAgICAgICAgICAgcmMg PSBFUlJPUl9OT01FTTsKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBmcmVlKHRndCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyog QXNzdW1lIHhlbmxpbnV4IGJhY2tlbmQgKi8KKyAgICAgICAgbGlieGxfdnNjc2lfcGRldl9pbml0 X3R5cGUocGRldiwgTElCWExfVlNDU0lfUERFVl9UWVBFX0hDVEwpOworICAgICAgICBsaWJ4bF92 c2NzaV9oY3RsX2NvcHkoY3R4LCAmcGRldi0+dS5oY3RsLm0sIHBkZXZfaGN0bCk7CisgICAgfQor ICAgIHJjID0gMDsKKworb3V0OgorICAgIHJldHVybiByYzsKK30KKworLyogV1dOIGFzIHVuZGVy c3Rvb2QgYnkgcHZvcHMgKi8KK3N0YXRpYyBpbnQgeGx1X192c2NzaV93d25fdG9fcGRldihYTFVf Q29uZmlnICpjZmcsIGNoYXIgKnN0ciwgbGlieGxfdnNjc2lfcGRldiAqcGRldikKK3sKKyAgICBp bnQgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbHVuOworICAgIGNo YXIgd3duW1hMVV9XV05fTEVOICsgMV07CisKKyAgICBtZW1zZXQod3duLCAwLCBzaXplb2Yod3du KSk7CisgICAgaWYgKHNzY2FuZihzdHIsICJuYWEuJTE2WzAtOWEtZkEtRl06JWxsdSIsIHd3biwg Jmx1bikgPT0gMikgeworICAgICAgICBsaWJ4bF92c2NzaV9wZGV2X2luaXRfdHlwZShwZGV2LCBM SUJYTF9WU0NTSV9QREVWX1RZUEVfV1dOKTsKKyAgICAgICAgcGRldi0+dS53d24ubSA9IHN0cmR1 cChzdHIpOworICAgICAgICByYyA9IHBkZXYtPnUud3duLm0gPyAwIDogRVJST1JfTk9NRU07Cisg ICAgfQorICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCB4bHVfX3ZzY3NpX3BhcnNlX3Bk ZXYoWExVX0NvbmZpZyAqY2ZnLCBsaWJ4bF9jdHggKmN0eCwgY2hhciAqc3RyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfdnNjc2lfcGRldiAqcGRldikKK3sKKyAgICBp bnQgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICBsaWJ4bF92c2NzaV9oY3RsIHBkZXZfaGN0bDsKKwor ICAgIGxpYnhsX3ZzY3NpX2hjdGxfaW5pdCgmcGRldl9oY3RsKTsKKyAgICBpZiAoc3RybmNtcChz dHIsICIvZGV2LyIsIDUpID09IDApIHsKKyAgICAgICAgcmMgPSB4bHVfX3ZzY3NpX2Rldl90b19w ZGV2KGNmZywgY3R4LCBzdHIsICZwZGV2X2hjdGwsIHBkZXYpOworICAgIH0gZWxzZSBpZiAoc3Ry bmNtcChzdHIsICJuYWEuIiwgNCkgPT0gMCkgeworICAgICAgICByYyA9IHhsdV9fdnNjc2lfd3du X3RvX3BkZXYoY2ZnLCBzdHIsIHBkZXYpOworICAgIH0gZWxzZSBpZiAoeGx1X192c2NzaV9wYXJz ZV9oY3RsKHN0ciwgJnBkZXZfaGN0bCkgPT0gMCkgeworICAgICAgICAvKiBFaXRoZXIgeGVubGlu dXgsIG9yIHB2b3BzIHdpdGggcHJvcGVybHkgY29uZmlndXJlZCBhbGlhcyBpbiBzeXNmcyAqLwor ICAgICAgICBsaWJ4bF92c2NzaV9wZGV2X2luaXRfdHlwZShwZGV2LCBMSUJYTF9WU0NTSV9QREVW X1RZUEVfSENUTCk7CisgICAgICAgIGxpYnhsX3ZzY3NpX2hjdGxfY29weShjdHgsICZwZGV2LT51 LmhjdGwubSwgJnBkZXZfaGN0bCk7CisgICAgICAgIHJjID0gMDsKKyAgICB9CisKKyAgICBpZiAo cmMgPT0gMCkgeworICAgICAgICAgICAgcGRldi0+cF9kZXZuYW1lID0gc3RyZHVwKHN0cik7Cisg ICAgICAgICAgICBpZiAoIXBkZXYtPnBfZGV2bmFtZSkKKyAgICAgICAgICAgICAgICByYyA9IEVS Uk9SX05PTUVNOworICAgIH0KKworICAgIGxpYnhsX3ZzY3NpX2hjdGxfZGlzcG9zZSgmcGRldl9o Y3RsKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCB4bHVfdnNjc2lfcGFyc2UoWExVX0NvbmZp ZyAqY2ZnLCBsaWJ4bF9jdHggKmN0eCwgY29uc3QgY2hhciAqc3RyLAorICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICpuZXdfY3RybCwKKyAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICpuZXdfZGV2KQoreworICAgIGludCByYzsKKyAgICBj aGFyICp0bXAsICpwZGV2LCAqdmRldiwgKmZob3N0OworCisgICAgdG1wID0gc3RyZHVwKHN0cik7 CisgICAgaWYgKCF0bXApIHsKKyAgICAgICAgcmMgPSBFUlJPUl9OT01FTTsKKyAgICAgICAgZ290 byBvdXQ7CisgICAgfQorCisgICAgcGRldiA9IHN0cnRvayh0bXAsICIsIik7CisgICAgdmRldiA9 IHN0cnRvayhOVUxMLCAiLCIpOworICAgIGZob3N0ID0gc3RydG9rKE5VTEwsICIsIik7CisgICAg aWYgKCEocGRldiAmJiB2ZGV2KSkgeworICAgICAgICBMT0coY2ZnLCAiaW52YWxpZCBkZXZzcGVj OiAnJXMnXG4iLCBzdHIpOworICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICBnb3Rv IG91dDsKKyAgICB9CisKKyAgICBwZGV2ID0geGx1X192c2NzaV90cmltX3N0cmluZyhwZGV2KTsK KyAgICB2ZGV2ID0geGx1X192c2NzaV90cmltX3N0cmluZyh2ZGV2KTsKKworICAgIHJjID0geGx1 X192c2NzaV9wYXJzZV9wZGV2KGNmZywgY3R4LCBwZGV2LCAmbmV3X2Rldi0+cGRldik7CisgICAg aWYgKHJjKSB7CisgICAgICAgIExPRyhjZmcsICJmYWlsZWQgdG8gcGFyc2UgJXMsIHJjID09ICVk IiwgcGRldiwgcmMpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBpZiAoeGx1X192 c2NzaV9wYXJzZV9oY3RsKHZkZXYsICZuZXdfZGV2LT52ZGV2KSkgeworICAgICAgICBMT0coY2Zn LCAiaW52YWxpZCAnJXMnLCBleHBlY3RpbmcgaHN0OmNobjp0Z3Q6bHVuIiwgdmRldik7CisgICAg ICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIG5l d19jdHJsLT5pZHggPSBuZXdfZGV2LT52ZGV2LmhzdDsKKworICAgIGlmIChmaG9zdCkgeworICAg ICAgICBmaG9zdCA9IHhsdV9fdnNjc2lfdHJpbV9zdHJpbmcoZmhvc3QpOworICAgICAgICBpZiAo c3RyY21wKGZob3N0LCAiZmVhdHVyZS1ob3N0IikgPT0gMCkgeworICAgICAgICAgICAgbGlieGxf ZGVmYm9vbF9zZXQoJm5ld19jdHJsLT5zY3NpX3Jhd19jbWRzLCB0cnVlKTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIExPRyhjZmcsICJpbnZhbGlkIG9wdGlvbiAnJXMnLCBleHBlY3Rp bmcgJXMiLCBmaG9zdCwgImZlYXR1cmUtaG9zdCIpOworICAgICAgICAgICAgcmMgPSBFUlJPUl9J TlZBTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfSBlbHNlCisgICAg ICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZuZXdfY3RybC0+c2NzaV9yYXdfY21kcywgZmFsc2UpOwor ICAgIHJjID0gMDsKKworb3V0OgorICAgIGZyZWUodG1wKTsKKyAgICByZXR1cm4gcmM7Cit9CisK K2ludCB4bHVfdnNjc2lfZ2V0X2N0cmwoWExVX0NvbmZpZyAqY2ZnLCBsaWJ4bF9jdHggKmN0eCwg dWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciwK KyAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqY3RybCwKKyAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2ICpkZXYsCisgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKipleGlzdGluZykKK3sKKyAg ICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICp2c2NzaWN0cmxzID0gTlVMTCwgKnRtcDsKKyAgICBp bnQgcmMsIGZvdW5kX2N0cmwgPSAtMSwgaTsKKyAgICBpbnQgbnVtX2N0cmxzOworCisKKyAgICBy YyA9IHhsdV92c2NzaV9wYXJzZShjZmcsIGN0eCwgc3RyLCBjdHJsLCBkZXYpOworICAgIGlmIChy YykKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICAvKiBMb29rIGZvciBleGlzdGluZyB2c2NzaWN0 cmwgZm9yIGdpdmVuIGRvbWFpbiAqLworICAgIHZzY3NpY3RybHMgPSBsaWJ4bF9kZXZpY2VfdnNj c2ljdHJsX2xpc3QoY3R4LCBkb21pZCwgJm51bV9jdHJscyk7CisgICAgaWYgKHZzY3NpY3RybHMp IHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9jdHJsczsgKytpKSB7CisgICAgICAgICAg ICBpZiAodnNjc2ljdHJsc1tpXS5pZHggPT0gZGV2LT52ZGV2LmhzdCkgeworICAgICAgICAgICAg ICAgIGZvdW5kX2N0cmwgPSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZvdW5kX2N0cmwgPT0gLTEpIHsKKyAgICAg ICAgKmV4aXN0aW5nID0gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgICB0bXAgPSB2c2NzaWN0 cmxzICsgZm91bmRfY3RybDsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGUgdmRldiBhZGRyZXNz IGlzIGFscmVhZHkgdGFrZW4gKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHRtcC0+bnVtX3Zz Y3NpZGV2czsgKytpKSB7CisgICAgICAgICAgICBpZiAodG1wLT52c2NzaWRldnNbaV0udmRldi5j aG4gPT0gZGV2LT52ZGV2LmNobiAmJgorICAgICAgICAgICAgICAgIHRtcC0+dnNjc2lkZXZzW2ld LnZkZXYudGd0ID09IGRldi0+dmRldi50Z3QgJiYKKyAgICAgICAgICAgICAgICB0bXAtPnZzY3Np ZGV2c1tpXS52ZGV2Lmx1biA9PSBkZXYtPnZkZXYubHVuKSB7CisgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBsb25nIGx1biA9IGRldi0+dmRldi5sdW47CisgICAgICAgICAgICAgICAgTE9H KGNmZywgInZkZXYgJyV1OiV1OiV1OiVsbHUnIGlzIGFscmVhZHkgdXNlZC5cbiIsCisgICAgICAg ICAgICAgICAgICAgIGRldi0+dmRldi5oc3QsIGRldi0+dmRldi5jaG4sIGRldi0+dmRldi50Z3Qs IGx1bik7CisgICAgICAgICAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgICAgICAg ICBnb3RvIG91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChsaWJ4 bF9kZWZib29sX3ZhbChjdHJsLT5zY3NpX3Jhd19jbWRzKSAhPQorICAgICAgICAgICAgbGlieGxf ZGVmYm9vbF92YWwodG1wLT5zY3NpX3Jhd19jbWRzKSkgeworICAgICAgICAgICAgTE9HKGNmZywg ImRpZmZlcmVudCBmZWF0dXJlLWhvc3Qgc2V0dGluZzogIgorICAgICAgICAgICAgICAgICAgICAg ICJleGlzdGluZyBjdHJsIGhhcyBpdCAlcywgbmV3IGN0cmwgaGFzIGl0ICVzXG4iLAorICAgICAg ICAgICAgICAgIGxpYnhsX2RlZmJvb2xfdmFsKGN0cmwtPnNjc2lfcmF3X2NtZHMpID8gInNldCIg OiAidW5zZXQiLAorICAgICAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfdmFsKHRtcC0+c2NzaV9y YXdfY21kcykgPyAic2V0IiA6ICJ1bnNldCIpOworICAgICAgICAgICAgcmMgPSBFUlJPUl9JTlZB TDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgbGlieGxfZGV2 aWNlX3ZzY3NpY3RybF9jb3B5KGN0eCwgKmV4aXN0aW5nLCB0bXApOworICAgIH0KKworICAgIHJj ID0gMDsKKworb3V0OgorICAgIGlmICh2c2NzaWN0cmxzKSB7CisgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBudW1fY3RybHM7ICsraSkKKyAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmxf ZGlzcG9zZSh2c2NzaWN0cmxzICsgaSk7CisgICAgICAgIGZyZWUodnNjc2ljdHJscyk7CisgICAg fQorICAgIHJldHVybiByYzsKK30KKworaW50IHhsdV92c2NzaV9kZXRhY2goWExVX0NvbmZpZyAq Y2ZnLCBsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsIGNoYXIgKnN0cikKK3sKKyAgICBs aWJ4bF9kZXZpY2VfdnNjc2lkZXYgZGV2ID0geyB9OworICAgIGxpYnhsX2RldmljZV92c2NzaWN0 cmwgY3RybCA9IHsgfTsKKyAgICBpbnQgcmM7CisgICAgY2hhciAqdG1wID0gTlVMTDsKKworICAg IGxpYnhsX2RldmljZV92c2NzaWN0cmxfaW5pdCgmY3RybCk7CisgICAgbGlieGxfZGV2aWNlX3Zz Y3NpZGV2X2luaXQoJmRldik7CisKKyAgICAvKiBDcmVhdGUgYSBkdW1teSBjZmcgKi8KKyAgICBp ZiAoYXNwcmludGYoJnRtcCwgIjA6MDowOjAsJXMiLCBzdHIpIDwgMCkgeworICAgICAgICBMT0co Y2ZnLCAiYXNwcmludGYgZmFpbGVkIHdoaWxlIHJlbW92aW5nICVzIGZyb20gZG9taWQgJXUiLCBz dHIsIGRvbWlkKTsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICBnb3RvIG91dDsK KyAgICB9CisKKyAgICByYyA9IHhsdV92c2NzaV9wYXJzZShjZmcsIGN0eCwgdG1wLCAmY3RybCwg JmRldik7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgIHJjID0gbGlieGxfZGV2aWNlX3Zz Y3NpZGV2X3JlbW92ZShjdHgsIGRvbWlkLCAmZGV2LCBOVUxMKTsKKyAgICBzd2l0Y2ggKHJjKSB7 CisgICAgY2FzZSBFUlJPUl9OT1RGT1VORDoKKyAgICAgICAgTE9HKGNmZywgImRldGFjaCBmYWls ZWQ6ICVzIGRvZXMgbm90IGV4aXN0IGluIGRvbWlkICV1Iiwgc3RyLCBkb21pZCk7CisgICAgICAg IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworb3V0OgorICAg IGZyZWUodG1wKTsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXZfZGlzcG9zZSgmZGV2KTsKKyAg ICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2Rpc3Bvc2UoJmN0cmwpOworICAgIHJldHVybiByYzsK K30KKworaW50IHhsdV92c2NzaV9jb25maWdfYWRkKFhMVV9Db25maWcgKmNmZywKKyAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpudW1fdnNj c2lzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKip2 c2NzaXMpCit7CisgICAgaW50IHJjLCBpOworICAgIGxpYnhsX2RldmljZV92c2NzaWRldiBkZXYg PSB7IH07CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqdG1wX2N0cmwsIGN0cmwgPSB7IH07 CisgICAgYm9vbCBjdHJsX2ZvdW5kID0gZmFsc2U7CisKKyAgICAvKgorICAgICAqICMxOiBwYXJz ZSB0aGUgZGV2c3BlYyBhbmQgcGxhY2UgaXQgaW4gdGVtcG9yYXJ5IGN0cmwrZGV2IHBhcnQKKyAg ICAgKiAjMjogZmluZCBleGlzdGluZyB2c2NzaWN0cmwgd2l0aCBudW1iZXIgdmRldi5oc3QKKyAg ICAgKiAgICAgaWYgZm91bmQsIGFwcGVuZCB0aGUgdnNjc2lkZXYgdG8gdGhpcyB2c2NzaWN0cmwK KyAgICAgKiAjMzogb3RoZXJ3aXNlLCBjcmVhdGUgbmV3IHZzY3NpY3RybCBhbmQgYXBwZW5kIHZz Y3NpZGV2CisgICAgICogTm90ZTogdmRldi5oc3QgZG9lcyBub3QgcmVwcmVzZW50IHRoZSBpbmRl eCBuYW1lZCAibnVtX3ZzY3NpcyIsCisgICAgICogICAgICAgaXQgaXMgYSBwcml2YXRlIGluZGV4 IHVzZWQganVzdCBpbiB0aGUgY29uZmlnIGZpbGUKKyAgICAgKi8KKyAgICBsaWJ4bF9kZXZpY2Vf dnNjc2ljdHJsX2luaXQoJmN0cmwpOworICAgIGxpYnhsX2RldmljZV92c2NzaWRldl9pbml0KCZk ZXYpOworCisgICAgcmMgPSB4bHVfdnNjc2lfcGFyc2UoY2ZnLCBjdHgsIHN0ciwgJmN0cmwsICZk ZXYpOworICAgIGlmIChyYykKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICBpZiAoKm51bV92c2Nz aXMpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8ICpudW1fdnNjc2lzOyBpKyspIHsKKyAgICAg ICAgICAgIHRtcF9jdHJsID0gKnZzY3NpcyArIGk7CisgICAgICAgICAgICBpZiAodG1wX2N0cmwt PmlkeCA9PSBkZXYudmRldi5oc3QpIHsKKyAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNj c2ljdHJsX2FwcGVuZF92c2NzaWRldihjdHgsIHRtcF9jdHJsLCAmZGV2KTsKKyAgICAgICAgICAg ICAgICBjdHJsX2ZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghY3RybF9mb3VuZCB8fCAhKm51bV92 c2NzaXMpIHsKKyAgICAgICAgdG1wX2N0cmwgPSByZWFsbG9jKCp2c2NzaXMsIHNpemVvZihjdHJs KSAqICgqbnVtX3ZzY3NpcyArIDEpKTsKKyAgICAgICAgaWYgKCF0bXBfY3RybCkgeworICAgICAg ICAgICAgTE9HKGNmZywgInJlYWxsb2MgIyVkIGZhaWxlZCIsICpudW1fdnNjc2lzICsgMSk7Cisg ICAgICAgICAgICByYyA9IEVSUk9SX05PTUVNOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAg ICAgIH0KKyAgICAgICAgKnZzY3NpcyA9IHRtcF9jdHJsOworICAgICAgICB0bXBfY3RybCA9ICp2 c2NzaXMgKyAqbnVtX3ZzY3NpczsKKyAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9pbml0 KHRtcF9jdHJsKTsKKworICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2NvcHkoY3R4LCB0 bXBfY3RybCwgJmN0cmwpOworCisgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmxfYXBwZW5k X3ZzY3NpZGV2KGN0eCwgdG1wX2N0cmwsICZkZXYpOworCisgICAgICAgICgqbnVtX3ZzY3Npcykr KzsKKyAgICB9CisKKyAgICByYyA9IDA7CitvdXQ6CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2 X2Rpc3Bvc2UoJmRldik7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybF9kaXNwb3NlKCZjdHJs KTsKKyAgICByZXR1cm4gcmM7Cit9CisjZWxzZSAvKiAhIF9fbGludXhfXyAqLworaW50IHhsdV92 c2NzaV9nZXRfY3RybChYTFVfQ29uZmlnICpjZmcsIGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBk b21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyLAorICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICpjdHJsLAorICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXYgKmRldiwKKyAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqKmV4aXN0aW5nKQoreworICAgIHJldHVybiBF UlJPUl9JTlZBTDsKK30KKworaW50IHhsdV92c2NzaV9wYXJzZShYTFVfQ29uZmlnICpjZmcsCisg ICAgICAgICAgICAgICAgICAgIGxpYnhsX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0 cmwgKm5ld19jdHJsLAorICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXYg Km5ld19kZXYpCit7CisgICAgcmV0dXJuIEVSUk9SX0lOVkFMOworfQorCitpbnQgeGx1X3ZzY3Np X2RldGFjaChYTFVfQ29uZmlnICpjZmcsCisgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9jdHgg KmN0eCwKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAg ICAgICAgICAgY2hhciAqc3RyKQoreworICAgIHJldHVybiBFUlJPUl9JTlZBTDsKK30KKworaW50 IHhsdV92c2NzaV9jb25maWdfYWRkKFhMVV9Db25maWcgKmNmZywKKyAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpudW1fdnNjc2lzLAorICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmwgKip2c2NzaXMpCit7 CisgICAgcmV0dXJuIEVSUk9SX0lOVkFMOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9s aWJ4bC9saWJ4bHV0aWwuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsdXRpbC5oCmluZGV4IGU4MWI2NDQu LjhmOGU0MzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsdXRpbC5oCisrKyBiL3Rvb2xz L2xpYnhsL2xpYnhsdXRpbC5oCkBAIC0xMTgsNiArMTE4LDI0IEBAIGludCB4bHVfcmRtX3BhcnNl KFhMVV9Db25maWcgKmNmZywgbGlieGxfcmRtX3Jlc2VydmUgKnJkbSwgY29uc3QgY2hhciAqc3Ry KTsKIGludCB4bHVfdmlmX3BhcnNlX3JhdGUoWExVX0NvbmZpZyAqY2ZnLCBjb25zdCBjaGFyICpy YXRlLAogICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfbmljICpuaWMpOwogCisv KiBGaWxsIGN0cmwvZGV2IHdpdGggZGV2aWNlIGRlc2NyaWJlZCBpbiBzdHIgKHBkZXYsdmRldlss b3B0aW9uc10pICovCitpbnQgeGx1X3ZzY3NpX2dldF9jdHJsKFhMVV9Db25maWcgKmNmZywgbGli eGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWN0 cmwgKmN0cmwsCisgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaWRldiAq ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICoqZXhp c3RpbmcpOworLyogUGFyc2UgY29uZmlnIHN0cmluZyBhbmQgZmlsbCBwcm92aWRlZCB2c2NzaSBj dHJsIGFuZCB2c2NzaSBkZXZpY2UgKi8KK2ludCB4bHVfdnNjc2lfcGFyc2UoWExVX0NvbmZpZyAq Y2ZnLCBsaWJ4bF9jdHggKmN0eCwgY29uc3QgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsICpuZXdfY3RybCwKKyAgICAgICAgICAgICAgICAgICAg bGlieGxfZGV2aWNlX3ZzY3NpZGV2ICpuZXdfZGV2KTsKKy8qIERldGFjaCB2c2NzaSBkZXZpY2Ug ZGVzY3JpYmVkIGluIGNvbmZpZyBzdHJpbmcgKHBkZXYsdmRldlssb3B0aW9uc10pICovCitpbnQg eGx1X3ZzY3NpX2RldGFjaChYTFVfQ29uZmlnICpjZmcsIGxpYnhsX2N0eCAqY3R4LCB1aW50MzJf dCBkb21pZCwgY2hhciAqc3RyKTsKKy8qIEFkZCB2c2NzaSBkZXZpY2UgZGVzY3JpYmVkIGluIGNv bmZpZyBzdHJpbmcgKHBkZXYsdmRldlssb3B0aW9uc10pIHRvIGRfY29uZmlnICovCitpbnQgeGx1 X3ZzY3NpX2NvbmZpZ19hZGQoWExVX0NvbmZpZyAqY2ZnLAorICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm51bV92c2NzaXMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqKnZzY3Npcyk7CiAjZW5k aWYgLyogTElCWExVVElMX0ggKi8KIAogLyoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL3hsLmgg Yi90b29scy9saWJ4bC94bC5oCmluZGV4IGU2MDFjYTEuLjA2MGE2YzQgMTAwNjQ0Ci0tLSBhL3Rv b2xzL2xpYnhsL3hsLmgKKysrIGIvdG9vbHMvbGlieGwveGwuaApAQCAtODksNiArODksOSBAQCBp bnQgbWFpbl9jaGFubmVsbGlzdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogaW50IG1haW5fYmxv Y2thdHRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKIGludCBtYWluX2Jsb2NrbGlzdChpbnQg YXJnYywgY2hhciAqKmFyZ3YpOwogaW50IG1haW5fYmxvY2tkZXRhY2goaW50IGFyZ2MsIGNoYXIg Kiphcmd2KTsKK2ludCBtYWluX3ZzY3NpYXR0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndik7Citp bnQgbWFpbl92c2NzaWxpc3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2ludCBtYWluX3ZzY3Np ZGV0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndik7CiBpbnQgbWFpbl92dHBtYXR0YWNoKGludCBh cmdjLCBjaGFyICoqYXJndik7CiBpbnQgbWFpbl92dHBtbGlzdChpbnQgYXJnYywgY2hhciAqKmFy Z3YpOwogaW50IG1haW5fdnRwbWRldGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwpkaWZmIC0t Z2l0IGEvdG9vbHMvbGlieGwveGxfY21kaW1wbC5jIGIvdG9vbHMvbGlieGwveGxfY21kaW1wbC5j CmluZGV4IDJlZTZjNzQuLjE2M2ZhYzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL3hsX2NtZGlt cGwuYworKysgYi90b29scy9saWJ4bC94bF9jbWRpbXBsLmMKQEAgLTEzMjUsNyArMTMyNSw3IEBA IHN0YXRpYyB2b2lkIHBhcnNlX2NvbmZpZ19kYXRhKGNvbnN0IGNoYXIgKmNvbmZpZ19zb3VyY2Us CiAgICAgbG9uZyBsLCB2Y3B1cyA9IDA7CiAgICAgWExVX0NvbmZpZyAqY29uZmlnOwogICAgIFhM VV9Db25maWdMaXN0ICpjcHVzLCAqdmJkcywgKm5pY3MsICpwY2lzLCAqY3ZmYnMsICpjcHVpZHMs ICp2dHBtcywKLSAgICAgICAgICAgICAgICAgICAqdXNiY3RybHMsICp1c2JkZXZzOworICAgICAg ICAgICAgICAgICAgICp1c2JjdHJscywgKnVzYmRldnMsICp2c2NzaWN0cmxzOwogICAgIFhMVV9D b25maWdMaXN0ICpjaGFubmVscywgKmlvcG9ydHMsICppcnFzLCAqaW9tZW0sICp2aXJpZGlhbiwg KmR0ZGV2czsKICAgICBpbnQgbnVtX2lvcG9ydHMsIG51bV9pcnFzLCBudW1faW9tZW0sIG51bV9j cHVzLCBudW1fdmlyaWRpYW47CiAgICAgaW50IHBjaV9wb3dlcl9tZ210ID0gMDsKQEAgLTE4NTUs NiArMTg1NSwxNyBAQCBzdGF0aWMgdm9pZCBwYXJzZV9jb25maWdfZGF0YShjb25zdCBjaGFyICpj b25maWdfc291cmNlLAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKCF4bHVfY2ZnX2dldF9s aXN0KGNvbmZpZywgInZzY3NpIiwgJnZzY3NpY3RybHMsIDAsIDApKSB7CisgICAgICAgIGludCBu dW1fdnNjc2lfaXRlbXMgPSAwOworICAgICAgICBkX2NvbmZpZy0+bnVtX3ZzY3NpY3RybHMgPSAw OworICAgICAgICBkX2NvbmZpZy0+dnNjc2ljdHJscyA9IE5VTEw7CisgICAgICAgIHdoaWxlICgo YnVmID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0gKHZzY3NpY3RybHMsIG51bV92c2NzaV9pdGVtcykp ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICh4bHVfdnNjc2lfY29uZmlnX2FkZChjb25maWcs IGN0eCwgYnVmLCAmZF9jb25maWctPm51bV92c2NzaWN0cmxzLCAmZF9jb25maWctPnZzY3NpY3Ry bHMpKQorICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICBudW1fdnNjc2lfaXRl bXMrKzsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICgheGx1X2NmZ19nZXRfbGlzdChjb25m aWcsICJ2dHBtIiwgJnZ0cG1zLCAwLCAwKSkgewogICAgICAgICBkX2NvbmZpZy0+bnVtX3Z0cG1z ID0gMDsKICAgICAgICAgZF9jb25maWctPnZ0cG1zID0gTlVMTDsKQEAgLTc0MDcsNiArNzQxOCwy MTggQEAgaW50IG1haW5fYmxvY2tkZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgIHJl dHVybiByYzsKIH0KIAoraW50IG1haW5fdnNjc2lhdHRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQoreworICAgIHVpbnQzMl90IGRvbWlkOworICAgIGludCBvcHQsIHJjOworICAgIFhMVV9Db25m aWcgKmNvbmZpZyA9IE5VTEw7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCBjdHJsLCAqZXhp c3RpbmcgPSBOVUxMOworICAgIGxpYnhsX2RldmljZV92c2NzaWRldiBkZXY7CisgICAgY2hhciAq c3RyID0gTlVMTCwgKmZlYXRfYnVmID0gTlVMTDsKKyAgICBjaGFyICpqc29uOworCisgICAgU1dJ VENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJzY3NpLWF0dGFjaCIsIDEpIHsKKyAgICAg ICAgLyogTm8gb3B0aW9ucyAqLworICAgIH0KKworICAgIGlmIChhcmdjIDwgNCB8fCBhcmdjID4g NSkgeworICAgICAgICBoZWxwKCJzY3NpLWF0dGFjaCIpOworICAgICAgICByZXR1cm4gMTsKKyAg ICB9CisKKyAgICBpZiAobGlieGxfZG9tYWluX3F1YWxpZmllcl90b19kb21pZChjdHgsIGFyZ3Zb b3B0aW5kXSwgJmRvbWlkKSA8IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBpcyBh biBpbnZhbGlkIGRvbWFpbiBpZGVudGlmaWVyXG4iLCBhcmd2W29wdGluZF0pOworICAgICAgICBy ZXR1cm4gMTsKKyAgICB9CisKKyAgICBvcHRpbmQrKzsKKworICAgIGlmIChhcmdjID09IDUpIHsK KyAgICAgICAgaWYgKGFzcHJpbnRmKCZmZWF0X2J1ZiwgIiwlcyIsIGFyZ3ZbNF0pIDwgMCkgewor ICAgICAgICAgICAgcGVycm9yKCJhc3ByaW50ZiIpOworICAgICAgICAgICAgcmV0dXJuIDE7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYXNwcmludGYoJnN0ciwgIiVzLCVzJXMiLCBhcmd2 WzJdLCBhcmd2WzNdLCBmZWF0X2J1ZiA/OiAiIikgPCAwKSB7CisgICAgICAgIHBlcnJvcigiYXNw cmludGYiKTsKKyAgICAgICAgcmMgPSAxOworICAgICAgICBnb3RvIG91dDs7CisgICAgfQorCisg ICAgZXhpc3RpbmcgPSB4bWFsbG9jKHNpemVvZigqZXhpc3RpbmcpKTsKKyAgICBsaWJ4bF9kZXZp Y2VfdnNjc2ljdHJsX2luaXQoZXhpc3RpbmcpOworICAgIGxpYnhsX2RldmljZV92c2NzaWN0cmxf aW5pdCgmY3RybCk7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpZGV2X2luaXQoJmRldik7CisKKyAg ICBjb25maWcgPSB4bHVfY2ZnX2luaXQoc3RkZXJyLCAiY29tbWFuZCBsaW5lIik7CisgICAgaWYg KCFjb25maWcpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUg Zm9yIGNvbmZpZ3VyYXRpb25cbiIpOworICAgICAgICByYyA9IDE7CisgICAgICAgIGdvdG8gb3V0 OworICAgIH0KKworICAgIC8qIFBhcnNlIGNvbmZpZyBzdHJpbmcgYW5kIHN0b3JlIHJlc3VsdCAq LworICAgIHJjID0geGx1X3ZzY3NpX2dldF9jdHJsKGNvbmZpZywgY3R4LCBkb21pZCwgc3RyLCAm Y3RybCwgJmRldiwgJmV4aXN0aW5nKTsKKyAgICBpZiAocmMgPCAwKQorICAgICAgICBnb3RvIG91 dDsKKworICAgIGlmIChkcnlydW5fb25seSkgeworICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2lj dHJsX2FwcGVuZF92c2NzaWRldihjdHgsIGV4aXN0aW5nID8gOiAmY3RybCwgJmRldik7CisgICAg ICAgIGpzb24gPSBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX3RvX2pzb24oY3R4LCBleGlzdGluZyA/ IDogJmN0cmwpOworICAgICAgICBwcmludGYoInZzY3NpOiAlc1xuIiwganNvbik7CisgICAgICAg IGZyZWUoanNvbik7CisgICAgICAgIGlmIChmZXJyb3Ioc3Rkb3V0KSB8fCBmZmx1c2goc3Rkb3V0 KSkgeyBwZXJyb3IoInN0ZG91dCIpOyBleGl0KC0xKTsgfQorICAgICAgICByYyA9IDA7CisgICAg ICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qIEZpbmFsbHkgYWRkIHRoZSBkZXZpY2UgKi8K KyAgICBpZiAoZXhpc3RpbmcpIHsKKyAgICAgICAgaWYgKGxpYnhsX2RldmljZV92c2NzaWRldl9h ZGQoY3R4LCBkb21pZCwgJmRldiwgTlVMTCkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAibGlieGxfZGV2aWNlX3ZzY3NpZGV2X2FkZCBmYWlsZWRcbiIpOworICAgICAgICAgICAgcmMg PSAxOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg ICAgICBsaWJ4bF9kZXZpY2VfdnNjc2ljdHJsX2FwcGVuZF92c2NzaWRldihjdHgsICZjdHJsLCAm ZGV2KTsKKyAgICAgICAgaWYgKGxpYnhsX2RldmljZV92c2NzaWN0cmxfYWRkKGN0eCwgZG9taWQs ICZjdHJsLCBOVUxMKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9kZXZp Y2VfdnNjc2ljdHJsX2FkZCBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIHJjID0gMTsKKyAgICAg ICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQorCisgICAgcmMgPSAwOworb3V0Ogor ICAgIGlmIChjb25maWcpCisgICAgICAgIHhsdV9jZmdfZGVzdHJveShjb25maWcpOworICAgIGxp YnhsX2RldmljZV92c2NzaWN0cmxfZGlzcG9zZShleGlzdGluZyk7CisgICAgbGlieGxfZGV2aWNl X3ZzY3NpY3RybF9kaXNwb3NlKCZjdHJsKTsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2lkZXZfZGlz cG9zZSgmZGV2KTsKKyAgICBmcmVlKGV4aXN0aW5nKTsKKyAgICBmcmVlKHN0cik7CisgICAgZnJl ZShmZWF0X2J1Zik7CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgbWFpbl92c2NzaWxpc3QoaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBvcHQ7CisgICAgdWludDMyX3QgZG9taWQ7 CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpY3RybCAqdnNjc2ljdHJsczsKKyAgICBsaWJ4bF92c2Nz aWluZm8gdnNjc2lpbmZvOworICAgIGludCBudW1fY3RybHMsIGgsIGQ7CisKKyAgICBTV0lUQ0hf Rk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInNjc2ktbGlzdCIsIDEpIHsKKyAgICAgICAgLyog Tm8gb3B0aW9ucyAqLworICAgIH0KKyAgICBpZiAoYXJnYyA8IDIpIHsKKyAgICAgICAgaGVscCgi c2NzaS1saXN0Iik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8qICAgICAgSWR4 ICBCRSAgc3RhdGUgY3RybCBwX2hzdCB2X2hzdCBzdGF0ZSAqLworICAgIHByaW50ZigiJS0zcyAl LTNzICUtNXMgJS01cyAlLTEwcyAlLTEwcyAlLTVzXG4iLAorICAgICAgICAgICAiSWR4IiwgIkJF IiwgInN0YXRlIiwgImN0cmwiLCAicGh5LWhjdGwiLCAidmlyLWhjdGwiLCAiZGV2c3RhdGUiKTsK KyAgICBmb3IgKGFyZ3YgKz0gb3B0aW5kLCBhcmdjIC09IG9wdGluZDsgYXJnYyA+IDA7IC0tYXJn YywgKythcmd2KSB7CisgICAgICAgIGlmIChsaWJ4bF9kb21haW5fcXVhbGlmaWVyX3RvX2RvbWlk KGN0eCwgKmFyZ3YsICZkb21pZCkgPCAwKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IiVzIGlzIGFuIGludmFsaWQgZG9tYWluIGlkZW50aWZpZXJcbiIsICphcmd2KTsKKyAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHZzY3NpY3RybHMgPSBsaWJ4bF9kZXZp Y2VfdnNjc2ljdHJsX2xpc3QoY3R4LCBkb21pZCwgJm51bV9jdHJscyk7CisgICAgICAgIGlmICgh dnNjc2ljdHJscykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAoaCA9IDA7 IGggPCBudW1fY3RybHM7ICsraCkgeworICAgICAgICAgICAgZm9yIChkID0gMDsgZCA8IHZzY3Np Y3RybHNbaF0ubnVtX3ZzY3NpZGV2czsgZCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCFsaWJ4 bF9kZXZpY2VfdnNjc2ljdHJsX2dldGluZm8oY3R4LCBkb21pZCwgJnZzY3NpY3RybHNbaF0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdnNjc2ljdHJs c1toXS52c2NzaWRldnNbZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmdnNjc2lpbmZvKSkgeworICAgICAgICAgICAgICAgICAgICBjaGFyIHBkZXZb NjRdLCB2ZGV2WzY0XTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGx1 bjsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2c2NzaWluZm8ucGRldi50eXBlKSB7Cisg ICAgICAgICAgICAgICAgICAgIGNhc2UgTElCWExfVlNDU0lfUERFVl9UWVBFX0hDVEw6CisgICAg ICAgICAgICAgICAgICAgICAgICBsdW4gPSB2c2NzaWluZm8ucGRldi51LmhjdGwubS5sdW47Cisg ICAgICAgICAgICAgICAgICAgICAgICBzbnByaW50ZihwZGV2LCBzaXplb2YocGRldiksICIldTol dToldTolbGx1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzY3NpaW5mby5w ZGV2LnUuaGN0bC5tLmhzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzY3Np aW5mby5wZGV2LnUuaGN0bC5tLmNobiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZzY3NpaW5mby5wZGV2LnUuaGN0bC5tLnRndCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGx1bik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgICAgY2FzZSBMSUJYTF9WU0NTSV9QREVWX1RZUEVfV1dOOgorICAgICAgICAgICAgICAg ICAgICAgICAgc25wcmludGYocGRldiwgc2l6ZW9mKHBkZXYpLCAiJXMiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdnNjc2lpbmZvLnBkZXYudS53d24ubSk7CisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgICAgICAgICAgICAgIHBkZXZbMF0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbHVu ID0gdnNjc2lpbmZvLnZkZXYubHVuOworICAgICAgICAgICAgICAgICAgICBzbnByaW50Zih2ZGV2 LCBzaXplb2YodmRldiksICIldToldToldTolbGx1IiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdnNjc2lpbmZvLnZkZXYuaHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 c2NzaWluZm8udmRldi5jaG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzY3NpaW5m by52ZGV2LnRndCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHVuKTsKKyAgICAgICAg ICAgICAgICAgICAgLyogICAgICBJZHggIEJFICBzdGF0ZSBTdGEgKi8KKyAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCIlLTNkICUtM2QgJS01ZCAlLTVkICUtMTBzICUtMTBzICVkXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgdnNjc2lpbmZvLmRldmlkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgdnNjc2lpbmZvLmJhY2tlbmRfaWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICB2c2NzaWluZm8udnNjc2ljdHJsX3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgdnNjc2lpbmZvLmJhY2tlbmRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGV2 LCB2ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNjc2lpbmZvLnZzY3NpZGV2X3N0 YXRlKTsKKworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaWJ4bF92c2NzaWlu Zm9fZGlzcG9zZSgmdnNjc2lpbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpYnhs X2RldmljZV92c2NzaWN0cmxfZGlzcG9zZSgmdnNjc2ljdHJsc1toXSk7CisgICAgICAgIH0KKyAg ICAgICAgZnJlZSh2c2NzaWN0cmxzKTsKKworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitp bnQgbWFpbl92c2NzaWRldGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50IG9w dDsKKyAgICBjaGFyICpkb20gPSBhcmd2WzFdLCAqc3RyID0gYXJndlsyXTsKKyAgICB1aW50MzJf dCBkb21pZDsKKyAgICBYTFVfQ29uZmlnICpjb25maWcgPSBOVUxMOworICAgIGludCByYyA9IDA7 CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInNjc2ktZGV0YWNoIiwg MSkgeworICAgICAgICAvKiBObyBvcHRpb25zICovCisgICAgfQorCisgICAgaWYgKGFyZ2MgPCAz KSB7CisgICAgICAgIGhlbHAoInNjc2ktZGV0YWNoIik7CisgICAgICAgIHJldHVybiAxOworICAg IH0KKworICAgIGlmIChsaWJ4bF9kb21haW5fcXVhbGlmaWVyX3RvX2RvbWlkKGN0eCwgZG9tLCAm ZG9taWQpIDwgMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIGlzIGFuIGludmFsaWQg ZG9tYWluIGlkZW50aWZpZXJcbiIsIGRvbSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKwor ICAgIGNvbmZpZyA9IHhsdV9jZmdfaW5pdChzdGRlcnIsICJjb21tYW5kIGxpbmUiKTsKKyAgICBp ZiAoIWNvbmZpZykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhbGxvY2F0 ZSBmb3IgY29uZmlndXJhdGlvblxuIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAg IHJjID0geGx1X3ZzY3NpX2RldGFjaChjb25maWcsIGN0eCwgZG9taWQsIHN0cik7CisgICAgaWYg KHJjKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNjc2ktZGV0YWNoICVzICVzIGZhaWxlZDog JWRcbiIsIGRvbSwgc3RyLCByYyk7CisKK291dDoKKyAgICBpZiAoY29uZmlnKQorICAgICAgICB4 bHVfY2ZnX2Rlc3Ryb3koY29uZmlnKTsKKyAgICByZXR1cm4gISFyYzsKK30KKwogaW50IG1haW5f dnRwbWF0dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAgICAgaW50IG9wdDsKZGlmZiAt LWdpdCBhL3Rvb2xzL2xpYnhsL3hsX2NtZHRhYmxlLmMgYi90b29scy9saWJ4bC94bF9jbWR0YWJs ZS5jCmluZGV4IGJmNjlmZmIuLmM0MzFlMzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL3hsX2Nt ZHRhYmxlLmMKKysrIGIvdG9vbHMvbGlieGwveGxfY21kdGFibGUuYwpAQCAtMzU0LDYgKzM1NCwy MSBAQCBzdHJ1Y3QgY21kX3NwZWMgY21kX3RhYmxlW10gPSB7CiAgICAgICAiRGVzdHJveSBhIGRv bWFpbidzIHZpcnR1YWwgYmxvY2sgZGV2aWNlIiwKICAgICAgICI8RG9tYWluPiA8RGV2SWQ+IiwK ICAgICB9LAorICAgIHsgInNjc2ktYXR0YWNoIiwKKyAgICAgICZtYWluX3ZzY3NpYXR0YWNoLCAx LCAxLAorICAgICAgIkF0dGFjaCBhIGRvbTAgU0NTSSBkZXZpY2UgdG8gYSBkb21haW4uIiwKKyAg ICAgICI8RG9tYWluPiA8UGh5c0RldmljZT4gPFZpcnREZXZpY2U+IiwKKyAgICB9LAorICAgIHsg InNjc2ktbGlzdCIsCisgICAgICAmbWFpbl92c2NzaWxpc3QsIDAsIDAsCisgICAgICAiTGlzdCBh bGwgZG9tMCBTQ1NJIGRldmljZXMgY3VycmVudGx5IGF0dGFjaGVkIHRvIGEgZG9tYWluLiIsCisg ICAgICAiPERvbWFpbihzKT4iLAorICAgIH0sCisgICAgeyAic2NzaS1kZXRhY2giLAorICAgICAg Jm1haW5fdnNjc2lkZXRhY2gsIDAsIDEsCisgICAgICAiRGV0YWNoIGEgc3BlY2lmaWVkIFNDU0kg ZGV2aWNlIGZyb20gYSBkb21haW4uIiwKKyAgICAgICI8RG9tYWluPiA8VmlydERldmljZT4iLAor ICAgIH0sCiAgICAgeyAidnRwbS1hdHRhY2giLAogICAgICAgJm1haW5fdnRwbWF0dGFjaCwgMSwg MSwKICAgICAgICJDcmVhdGUgYSBuZXcgdmlydHVhbCBUUE0gZGV2aWNlIiwKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxp c3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs Cg==