From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chunyan Liu Subject: [PATCH V17 4/6] libxl: add pvusb API Date: Wed, 9 Mar 2016 10:10:12 +0800 Message-ID: <1457489414-885-5-git-send-email-cyliu@suse.com> References: <1457489414-885-1-git-send-email-cyliu@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1457489414-885-1-git-send-email-cyliu@suse.com> 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: jgross@suse.com, wei.liu2@citrix.com, ian.campbell@citrix.com, george.dunlap@eu.citrix.com, Ian.Jackson@eu.citrix.com, Chunyan Liu , George Dunlap , jfehlig@suse.com, Simon Cao List-Id: xen-devel@lists.xenproject.org QWRkIHB2dXNiIEFQSXMsIGluY2x1ZGluZzoKIC0gYXR0YWNoL2RldGFjaCAoY3JlYXRlL2Rlc3Ry b3kpIHZpcnR1YWwgdXNiIGNvbnRyb2xsZXIuCiAtIGF0dGFjaC9kZXRhY2ggdXNiIGRldmljZQog LSBsaXN0IHVzYiBjb250cm9sbGVyIGFuZCB1c2IgZGV2aWNlcwogLSBzb21lIG90aGVyIGhlbHBl ciBmdW5jdGlvbnMKClNpZ25lZC1vZmYtYnk6IFNpbW9uIENhbyA8Y2FvYm9zaW1vbkBnbWFpbC5j b20+ClNpZ25lZC1vZmYtYnk6IEdlb3JnZSBEdW5sYXAgPGdlb3JnZS5kdW5sYXBAY2l0cml4LmNv bT4KU2lnbmVkLW9mZi1ieTogQ2h1bnlhbiBMaXUgPGN5bGl1QHN1c2UuY29tPgpSZXZpZXdlZC1i eTogR2VvcmdlIER1bmxhcCA8Z2VvcmdlLmR1bmxhcEBjaXRyaXguY29tPgotLS0KIHRvb2xzL2xp YnhsL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KIHRvb2xzL2xpYnhsL2xpYnhs LmMgICAgICAgICAgICAgICAgICB8ICAgMTggKwogdG9vbHMvbGlieGwvbGlieGwuaCAgICAgICAg ICAgICAgICAgIHwgICA3NyArKwogdG9vbHMvbGlieGwvbGlieGxfZGV2aWNlLmMgICAgICAgICAg IHwgICAgNSArLQogdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaCAgICAgICAgIHwgICAxOCAr CiB0b29scy9saWJ4bC9saWJ4bF9vc2RlcHMuaCAgICAgICAgICAgfCAgIDEzICsKIHRvb2xzL2xp YnhsL2xpYnhsX3B2dXNiLmMgICAgICAgICAgICB8IDE2MjAgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsICAgICAgICAgIHwgICA0 NiArCiB0b29scy9saWJ4bC9saWJ4bF90eXBlc19pbnRlcm5hbC5pZGwgfCAgICAxICsKIHRvb2xz L2xpYnhsL2xpYnhsX3V0aWxzLmMgICAgICAgICAgICB8ICAgMTggKwogdG9vbHMvbGlieGwvbGli eGxfdXRpbHMuaCAgICAgICAgICAgIHwgICAgNSArCiAxMSBmaWxlcyBjaGFuZ2VkLCAxODIyIGlu c2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvbGli eGwvbGlieGxfcHZ1c2IuYwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL01ha2VmaWxlIGIvdG9v bHMvbGlieGwvTWFrZWZpbGUKaW5kZXggNzg5YTEyZS4uOGZhN2I4NyAxMDA2NDQKLS0tIGEvdG9v bHMvbGlieGwvTWFrZWZpbGUKKysrIGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKQEAgLTEwNSw3ICsx MDUsOCBAQCBMSUJYTF9PQkpTID0gZmxleGFycmF5Lm8gbGlieGwubyBsaWJ4bF9jcmVhdGUubyBs aWJ4bF9kbS5vIGxpYnhsX3BjaS5vIFwKIAkJCWxpYnhsX3N0cmVhbV9yZWFkLm8gbGlieGxfc3Ry ZWFtX3dyaXRlLm8gXAogCQkJbGlieGxfc2F2ZV9jYWxsb3V0Lm8gX2xpYnhsX3NhdmVfbXNnc19j YWxsb3V0Lm8gXAogCQkJbGlieGxfcW1wLm8gbGlieGxfZXZlbnQubyBsaWJ4bF9mb3JrLm8gXAot CQkJbGlieGxfZG9tX3N1c3BlbmQubyBsaWJ4bF9kb21fc2F2ZS5vICQoTElCWExfT0JKUy15KQor CQkJbGlieGxfZG9tX3N1c3BlbmQubyBsaWJ4bF9kb21fc2F2ZS5vIGxpYnhsX3B2dXNiLm8gXAor ICAgICAgICAgICAgICAgICAgICAgICAgJChMSUJYTF9PQkpTLXkpCiBMSUJYTF9PQkpTICs9IGxp YnhsX2dlbmlkLm8KIExJQlhMX09CSlMgKz0gX2xpYnhsX3R5cGVzLm8gbGlieGxfZmxhc2subyBf bGlieGxfdHlwZXNfaW50ZXJuYWwubwogCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bC5j IGIvdG9vbHMvbGlieGwvbGlieGwuYwppbmRleCAyYWI1YWQzLi4xZTY4Njg4IDEwMDY0NAotLS0g YS90b29scy9saWJ4bC9saWJ4bC5jCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsLmMKQEAgLTQxMDIs NiArNDEwMiw4IEBAIG91dDoKICAqIGxpYnhsX2RldmljZV92a2JfZGVzdHJveQogICogbGlieGxf ZGV2aWNlX3ZmYl9yZW1vdmUKICAqIGxpYnhsX2RldmljZV92ZmJfZGVzdHJveQorICogbGlieGxf ZGV2aWNlX3VzYmN0cmxfcmVtb3ZlCisgKiBsaWJ4bF9kZXZpY2VfdXNiY3RybF9kZXN0cm95CiAg Ki8KICNkZWZpbmUgREVGSU5FX0RFVklDRV9SRU1PVkVfRVhUKHR5cGUsIHJlbXR5cGUsIHJlbW92 ZWRlc3Ryb3ksIGYpICAgICAgICBcCiAgICAgaW50IGxpYnhsX2RldmljZV8jI3R5cGUjI18jI3Jl bW92ZWRlc3Ryb3kobGlieGxfY3R4ICpjdHgsICAgICAgICAgICBcCkBAIC00MTU5LDYgKzQxNjEs MTAgQEAgREVGSU5FX0RFVklDRV9SRU1PVkUodmZiLCBkZXN0cm95LCAxKQogREVGSU5FX0RFVklD RV9SRU1PVkUodnRwbSwgcmVtb3ZlLCAwKQogREVGSU5FX0RFVklDRV9SRU1PVkUodnRwbSwgZGVz dHJveSwgMSkKIAorLyogdXNiY3RybCAqLworREVGSU5FX0RFVklDRV9SRU1PVkVfQ1VTVE9NKHVz YmN0cmwsIHJlbW92ZSwgMCkKK0RFRklORV9ERVZJQ0VfUkVNT1ZFX0NVU1RPTSh1c2JjdHJsLCBk ZXN0cm95LCAxKQorCiAvKiBjaGFubmVsL2NvbnNvbGUgaG90dW5wbHVnIGlzIG5vdCBpbXBsZW1l bnRlZC4gVGhlcmUgYXJlIDIgcG9zc2liaWxpdGllczoKICAqIDEuIGFkZCBzdXBwb3J0IGZvciBz ZWNvbmRhcnkgY29uc29sZXMgdG8geGVuY29uc29sZWQKICAqIDIuIGR5bmFtaWNhbGx5IGFkZC9y ZW1vdmUgcWVtdSBjaGFyZGV2cyB2aWEgcW1wIG1lc3NhZ2VzLiAqLwpAQCAtNDE3NCw2ICs0MTgw LDggQEAgREVGSU5FX0RFVklDRV9SRU1PVkUodnRwbSwgZGVzdHJveSwgMSkKICAqIGxpYnhsX2Rl dmljZV9kaXNrX2FkZAogICogbGlieGxfZGV2aWNlX25pY19hZGQKICAqIGxpYnhsX2RldmljZV92 dHBtX2FkZAorICogbGlieGxfZGV2aWNlX3VzYmN0cmxfYWRkCisgKiBsaWJ4bF9kZXZpY2VfdXNi ZGV2X2FkZAogICovCiAKICNkZWZpbmUgREVGSU5FX0RFVklDRV9BREQodHlwZSkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTQyMDUsNiArNDIxMywxMiBAQCBE RUZJTkVfREVWSUNFX0FERChuaWMpCiAvKiB2dHBtICovCiBERUZJTkVfREVWSUNFX0FERCh2dHBt KQogCisvKiB1c2JjdHJsICovCitERUZJTkVfREVWSUNFX0FERCh1c2JjdHJsKQorCisvKiB1c2Ig Ki8KK0RFRklORV9ERVZJQ0VfQUREKHVzYmRldikKKwogI3VuZGVmIERFRklORV9ERVZJQ0VfQURE CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02NzUwLDYgKzY3NjQsMTAgQEAgaW50IGxp YnhsX3JldHJpZXZlX2RvbWFpbl9jb25maWd1cmF0aW9uKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJf dCBkb21pZCwKIAogICAgIE1FUkdFKHBjaSwgcGNpZGV2cywgQ09NUEFSRV9QQ0ksIHt9KTsKIAor ICAgIE1FUkdFKHVzYmN0cmwsIHVzYmN0cmxzLCBDT01QQVJFX1VTQkNUUkwsIHt9KTsKKworICAg IE1FUkdFKHVzYmRldiwgdXNiZGV2cywgQ09NUEFSRV9VU0IsIHt9KTsKKwogICAgIC8qIFRha2Ug Y2FyZSBvZiByZW1vdmFibGUgZGV2aWNlLiBXZSBtYWludGFpbiBpbnZhcmlhbnQgaW4gdGhlCiAg ICAgICogaW5zZXJ0IC8gcmVtb3ZlIG9wZXJhdGlvbiBzbyB0aGF0OgogICAgICAqIDEuIGlmIHhl bnN0b3JlIGlzICJlbXB0eSIgd2hpbGUgSlNPTiBpcyBub3QsIHRoZSByZXN1bHQKZGlmZiAtLWdp dCBhL3Rvb2xzL2xpYnhsL2xpYnhsLmggYi90b29scy9saWJ4bC9saWJ4bC5oCmluZGV4IDA4NTkz ODMuLjVjYzNjZTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsLmgKKysrIGIvdG9vbHMv bGlieGwvbGlieGwuaApAQCAtMTIzLDYgKzEyMywxMiBAQAogI2RlZmluZSBMSUJYTF9IQVZFX0RP TUFJTl9OT0RFQUZGSU5JVFkgMQogCiAvKgorICogTElCWExfSEFWRV9QVlVTQiBpbmRpY2F0ZXMg ZnVuY3Rpb25zIGZvciBwbHVnZ2luZyBpbiBVU0IgZGV2aWNlcworICogdGhyb3VnaCBwdnVzYiAt LSBib3RoIGhvdHBsdWcgYW5kIGF0IGRvbWFpbiBjcmVhdGlvbiB0aW1lLi4KKyAqLworI2RlZmlu ZSBMSUJYTF9IQVZFX1BWVVNCIDEKKworLyoKICAqIExJQlhMX0hBVkVfQlVJTERJTkZPX0hWTV9W RU5ET1JfREVWSUNFIGluZGljYXRlcyB0aGF0IHRoZQogICogbGlieGxfdmVuZG9yX2RldmljZSBm aWVsZCBpcyBwcmVzZW50IGluIHRoZSBodm0gc2VjdGlvbnMgb2YKICAqIGxpYnhsX2RvbWFpbl9i dWlsZF9pbmZvLiBUaGlzIGZpZWxkIHRlbGxzIGxpYnhsIHdoaWNoCkBAIC0xNTM2LDYgKzE1NDIs NzcgQEAgaW50IGxpYnhsX2Nkcm9tX2luc2VydChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9t aWQsIGxpYnhsX2RldmljZV9kaXNrICpkaXNrLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQogICAgICAgICAgICAgICAgICAgICAgICBMSUJY TF9FWFRFUk5BTF9DQUxMRVJTX09OTFk7CiAKKy8qCisgKiBVU0IKKyAqCisgKiBGb3IgZWFjaCBk ZXZpY2UgcmVtb3ZlZCBvciBhZGRlZCwgb25lIG9mIHRoZXNlIHByb3RvY29scyBpcyBhdmFpbGFi bGU6CisgKiAtIFBWIChpLmUuLCBQVlVTQikKKyAqIC0gREVWSUNFTU9ERUwgKGkuZSwgcWVtdSkK KyAqCisgKiBQViBpcyBhdmFpbGFibGUgZm9yIGVpdGhlciBQViBvciBIVk0gZG9tYWlucy4gIERF VklDRU1PREVMIGlzIG9ubHkKKyAqIGF2YWlsYWJsZSBmb3IgSFZNIGRvbWFpbnMuICBUaGUgY2Fs bGVyIGNhbiBhZGRpdGlvbmFsbHkgc3BlY2lmeQorICogIkFVVE8iLCBpbiB3aGljaCBjYXNlIHRo ZSBsaWJyYXJ5IHdpbGwgdHJ5IHRvIGRldGVybWluZSB0aGUgYmVzdAorICogcHJvdG9jb2wgYXV0 b21hdGljYWxseS4KKyAqCisgKiBBdCB0aGUgbW9tZW50LCB0aGUgb25seSBwcm90b2NvbCBpbXBs ZW1lbnRlZCBpcyBQVi4KKyAqCisgKiBPbmUgY2FuIGFkZC9yZW1vdmUgVVNCIGNvbnRyb2xsZXJz IHRvL2Zyb20gZ3Vlc3QsIGFuZCBhdHRhY2gvZGV0YWNoIFVTQgorICogZGV2aWNlcyB0by9mcm9t IFVTQiBjb250cm9sbGVycy4KKyAqCisgKiBUbyBhZGQgVVNCIGNvbnRyb2xsZXJzIGFuZCBVU0Ig ZGV2aWNlcywgb25lIGNhbiBhZGRpbmcgVVNCIGNvbnRyb2xsZXJzCisgKiBmaXJzdCBhbmQgdGhl biBhdHRhY2hpbmcgVVNCIGRldmljZXMgdG8gc29tZSBVU0IgY29udHJvbGxlciwgb3IgYWRkaW5n CisgKiBVU0IgZGV2aWNlcyB0byBndWVzdCBkaXJlY3RseSwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5 IGNyZWF0ZSBhIFVTQgorICogY29udHJvbGxlciBmb3IgVVNCIGRldmljZXMgdG8gYXR0YWNoLgor ICoKKyAqIFRvIHJlbW92ZSBVU0IgY29udHJvbGxlcnMgb3IgVVNCIGRldmljZXMsIG9uZSBjYW4g cmVtb3ZlIFVTQiBkZXZpY2VzCisgKiB1bmRlciBVU0IgY29udHJvbGxlciBvbmUgYnkgb25lIGFu ZCB0aGVuIHJlbW92ZSBVU0IgY29udHJvbGxlciwgb3IKKyAqIHJlbW92ZSBVU0IgY29udHJvbGxl ciBkaXJlY3RseSwgaXQgd2lsbCByZW1vdmUgYWxsIFVTQiBkZXZpY2VzIHVuZGVyCisgKiBpdCBh dXRvbWF0aWNhbGx5LgorICoKKyAqLworLyogVVNCIENvbnRyb2xsZXJzKi8KK2ludCBsaWJ4bF9k ZXZpY2VfdXNiY3RybF9hZGQobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hv dykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfRVhURVJOQUxfQ0FMTEVSU19P TkxZOworCitpbnQgbGlieGxfZGV2aWNlX3VzYmN0cmxfcmVtb3ZlKGxpYnhsX2N0eCAqY3R4LCB1 aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2 aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNfT05MWTsKKworaW50IGxpYnhsX2RldmljZV91 c2JjdHJsX2Rlc3Ryb3kobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAq YW9faG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfRVhURVJOQUxf Q0FMTEVSU19PTkxZOworCitsaWJ4bF9kZXZpY2VfdXNiY3RybCAqbGlieGxfZGV2aWNlX3VzYmN0 cmxfbGlzdChsaWJ4bF9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLCBpbnQgKm51bSk7CisKK3ZvaWQgbGlieGxf ZGV2aWNlX3VzYmN0cmxfbGlzdF9mcmVlKGxpYnhsX2RldmljZV91c2JjdHJsICpsaXN0LCBpbnQg bnIpOworCisKK2ludCBsaWJ4bF9kZXZpY2VfdXNiY3RybF9nZXRpbmZvKGxpYnhsX2N0eCAqY3R4 LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X2RldmljZV91c2JjdHJsICp1c2JjdHJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfdXNiY3RybGluZm8gKnVzYmN0cmxpbmZvKTsKKworLyogVVNCIERldmljZXMgKi8K KworaW50IGxpYnhsX2RldmljZV91c2JkZXZfYWRkKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBk b21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1 c2JkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9o b3cgKmFvX2hvdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9FWFRFUk5BTF9D QUxMRVJTX09OTFk7CisKK2ludCBsaWJ4bF9kZXZpY2VfdXNiZGV2X3JlbW92ZShsaWJ4bF9jdHgg KmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTElCWExfRVhURVJOQUxfQ0FMTEVSU19PTkxZOworCitsaWJ4bF9kZXZpY2VfdXNi ZGV2ICoKK2xpYnhsX2RldmljZV91c2JkZXZfbGlzdChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3Qg ZG9taWQsIGludCAqbnVtKTsKKwordm9pZCBsaWJ4bF9kZXZpY2VfdXNiZGV2X2xpc3RfZnJlZShs aWJ4bF9kZXZpY2VfdXNiZGV2ICpsaXN0LCBpbnQgbnIpOworCiAvKiBOZXR3b3JrIEludGVyZmFj ZXMgKi8KIGludCBsaWJ4bF9kZXZpY2VfbmljX2FkZChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3Qg ZG9taWQsIGxpYnhsX2RldmljZV9uaWMgKm5pYywKICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwv bGlieGxfZGV2aWNlLmMgYi90b29scy9saWJ4bC9saWJ4bF9kZXZpY2UuYwppbmRleCBhMzU2ZTJh Li5iN2E2YTEzIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9kZXZpY2UuYworKysgYi90 b29scy9saWJ4bC9saWJ4bF9kZXZpY2UuYwpAQCAtNjc2LDcgKzY3NiwxMCBAQCB2b2lkIGxpYnhs X19kZXZpY2VzX2Rlc3Ryb3kobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fZGV2aWNlc19yZW1vdmVf c3RhdGUgKmRycykKICAgICAgICAgICAgICAgICBhb2Rldi0+YWN0aW9uID0gTElCWExfX0RFVklD RV9BQ1RJT05fUkVNT1ZFOwogICAgICAgICAgICAgICAgIGFvZGV2LT5kZXYgPSBkZXY7CiAgICAg ICAgICAgICAgICAgYW9kZXYtPmZvcmNlID0gZHJzLT5mb3JjZTsKLSAgICAgICAgICAgICAgICBs aWJ4bF9faW5pdGlhdGVfZGV2aWNlX2dlbmVyaWNfcmVtb3ZlKGVnYywgYW9kZXYpOworICAgICAg ICAgICAgICAgIGlmIChkZXYtPmJhY2tlbmRfa2luZCA9PSBMSUJYTF9fREVWSUNFX0tJTkRfVlVT QikKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfX2luaXRpYXRlX2RldmljZV91c2JjdHJsX3Jl bW92ZShlZ2MsIGFvZGV2KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg ICAgIGxpYnhsX19pbml0aWF0ZV9kZXZpY2VfZ2VuZXJpY19yZW1vdmUoZWdjLCBhb2Rldik7CiAg ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9s aWJ4bF9pbnRlcm5hbC5oIGIvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaAppbmRleCAwODJm NjU2Li5mNzhjYjcyIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCisr KyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgKQEAgLTI1ODcsNiArMjU4NywxNCBAQCBf aGlkZGVuIHZvaWQgbGlieGxfX2RldmljZV92dHBtX2FkZChsaWJ4bF9fZWdjICplZ2MsIHVpbnQz Ml90IGRvbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZp Y2VfdnRwbSAqdnRwbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf X2FvX2RldmljZSAqYW9kZXYpOwogCitfaGlkZGVuIHZvaWQgbGlieGxfX2RldmljZV91c2JjdHJs X2FkZChsaWJ4bF9fZWdjICplZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fYW9fZGV2aWNlICphb2Rl dik7CisKK19oaWRkZW4gdm9pZCBsaWJ4bF9fZGV2aWNlX3VzYmRldl9hZGQobGlieGxfX2VnYyAq ZWdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9fYW9fZGV2aWNlICphb2Rldik7CisKIC8qIEludGVybmFsIGZ1 bmN0aW9uIHRvIGNvbm5lY3QgYSB2a2IgZGV2aWNlICovCiBfaGlkZGVuIGludCBsaWJ4bF9fZGV2 aWNlX3ZrYl9hZGQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZrYiAqdmtiKTsKQEAgLTI2MTksNiAr MjYyNywxMyBAQCBfaGlkZGVuIHZvaWQgbGlieGxfX3dhaXRfZGV2aWNlX2Nvbm5lY3Rpb24obGli eGxfX2VnYyosCiBfaGlkZGVuIHZvaWQgbGlieGxfX2luaXRpYXRlX2RldmljZV9nZW5lcmljX3Jl bW92ZShsaWJ4bF9fZWdjICplZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9fYW9fZGV2aWNlICphb2Rldik7CiAKK19oaWRkZW4gaW50 IGxpYnhsX19kZXZpY2VfZnJvbV91c2JjdHJsKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1 c2JjdHJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2UgKmRl dmljZSk7CisKK19oaWRkZW4gdm9pZCBsaWJ4bF9faW5pdGlhdGVfZGV2aWNlX3VzYmN0cmxfcmVt b3ZlKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KTsKKwogLyoKICAqIGxpYnhs X19nZXRfaG90cGx1Z19zY3JpcHRfaW5mbyByZXR1cm5zIHRoZSBhcmdzIGFuZCBlbnYgdGhhdCBz aG91bGQKICAqIGJlIHBhc3NlZCB0byB0aGUgaG90cGx1ZyBzY3JpcHQgZm9yIHRoZSByZXF1ZXN0 ZWQgZGV2aWNlLgpAQCAtNDAxNCw2ICs0MDI5LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGxpYnhs X191cGRhdGVfY29uZmlnX3Z0cG0obGlieGxfX2djICpnYywKICNkZWZpbmUgQ09NUEFSRV9QQ0ko YSwgYikgKChhKS0+ZnVuYyA9PSAoYiktPmZ1bmMgJiYgICAgXAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGEpLT5idXMgPT0gKGIpLT5idXMgJiYgICAgICBcCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoYSktPmRldiA9PSAoYiktPmRldikKKyNkZWZpbmUgQ09NUEFSRV9VU0IoYSwg YikgKChhKS0+Y3RybCA9PSAoYiktPmN0cmwgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGEpLT5wb3J0ID09IChiKS0+cG9ydCkKKyNkZWZpbmUgQ09NUEFSRV9VU0JDVFJMKGEsIGIp ICgoYSktPmRldmlkID09IChiKS0+ZGV2aWQpCiAKIC8qIERFVklDRV9BREQKICAqCmRpZmYgLS1n aXQgYS90b29scy9saWJ4bC9saWJ4bF9vc2RlcHMuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX29zZGVw cy5oCmluZGV4IGQ5NjYxYzkuLjgwMmM3NjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhs X29zZGVwcy5oCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX29zZGVwcy5oCkBAIC0yNCw2ICsyNCw4 IEBACiAjZGVmaW5lIF9HTlVfU09VUkNFCiAKICNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisjZGVm aW5lIFNZU0ZTX1VTQl9ERVYgICAgICAgICAgIi9zeXMvYnVzL3VzYi9kZXZpY2VzIgorI2RlZmlu ZSBTWVNGU19VU0JCQUNLX0RSSVZFUiAgICIva2Vybi94ZW4vdXNiIgogI2RlZmluZSBTWVNGU19Q Q0lfREVWICAgICAgICAgICIvc3lzL2J1cy9wY2kvZGV2aWNlcyIKICNkZWZpbmUgU1lTRlNfUENJ QkFDS19EUklWRVIgICAiL2tlcm4veGVuL3BjaSIKICNkZWZpbmUgTkVUQkFDS19OSUNfTkFNRSAg ICAgICAieHZpZiV1aSVkIgpAQCAtMzEsNiArMzMsOCBAQAogI2VsaWYgZGVmaW5lZChfX09wZW5C U0RfXykKICNpbmNsdWRlIDx1dGlsLmg+CiAjZWxpZiBkZWZpbmVkKF9fbGludXhfXykKKyNkZWZp bmUgU1lTRlNfVVNCX0RFViAgICAgICAgICAiL3N5cy9idXMvdXNiL2RldmljZXMiCisjZGVmaW5l IFNZU0ZTX1VTQkJBQ0tfRFJJVkVSICAgIi9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYmJhY2siCiAj ZGVmaW5lIFNZU0ZTX1BDSV9ERVYgICAgICAgICAgIi9zeXMvYnVzL3BjaS9kZXZpY2VzIgogI2Rl ZmluZSBTWVNGU19QQ0lCQUNLX0RSSVZFUiAgICIvc3lzL2J1cy9wY2kvZHJpdmVycy9wY2liYWNr IgogI2RlZmluZSBORVRCQUNLX05JQ19OQU1FICAgICAgICJ2aWYldS4lZCIKQEAgLTM4LDYgKzQy LDggQEAKICNlbGlmIGRlZmluZWQoX19zdW5fXykKICNpbmNsdWRlIDxzdHJvcHRzLmg+CiAjZWxp ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2RlZmluZSBTWVNGU19VU0JfREVWICAgICAgICAgICIv ZGV2L251bGwiCisjZGVmaW5lIFNZU0ZTX1VTQkJBQ0tfRFJJVkVSICAgIi9kZXYvbnVsbCIKICNk ZWZpbmUgU1lTRlNfUENJX0RFViAgICAgICAgICAiL2Rldi9udWxsIgogI2RlZmluZSBTWVNGU19Q Q0lCQUNLX0RSSVZFUiAgICIvZGV2L251bGwiCiAjZGVmaW5lIE5FVEJBQ0tfTklDX05BTUUgICAg ICAgInhuYiV1LiVkIgpAQCAtNDUsNiArNTEsMTMgQEAKICNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+ CiAjZW5kaWYKIAorI2lmbmRlZiBTWVNGU19VU0JCQUNLX0RSSVZFUgorI2Vycm9yIGRlZmluZSBT WVNGU19VU0JCQUNLX0RSSVZFUiBmb3IgeW91ciBwbGF0Zm9ybQorI2VuZGlmCisjaWZuZGVmIFNZ U0ZTX1VTQl9ERVYKKyNlcnJvciBkZWZpbmUgU1lTRlNfVVNCX0RFViBmb3IgeW91ciBwbGF0Zm9y bQorI2VuZGlmCisKICNpZm5kZWYgU1lTRlNfUENJQkFDS19EUklWRVIKICNlcnJvciBkZWZpbmUg U1lTRlNfUENJQkFDS19EUklWRVIgZm9yIHlvdXIgcGxhdGZvcm0KICNlbmRpZgpkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlieGwvbGlieGxfcHZ1c2IuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3B2dXNiLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY5MjYyOAotLS0gL2Rldi9udWxs CisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3B2dXNiLmMKQEAgLTAsMCArMSwxNjIwIEBACisvKgor ICogQ29weXJpZ2h0IChDKSAyMDE1IFNVU0UgTElOVVggUHJvZHVjdHMgR21iSCwgTnVlcm5iZXJn LCBHZXJtYW55LgorICogQXV0aG9yIENodW55YW4gTGl1IDxjeWxpdUBzdXNlLmNvbT4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIuMSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBleGNl cHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSBMSUNFTlNFLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJsaWJ4bF9vc2RlcHMuaCIgLyog bXVzdCBjb21lIGJlZm9yZSBhbnkgb3RoZXIgaGVhZGVycyAqLworCisjaW5jbHVkZSAibGlieGxf aW50ZXJuYWwuaCIKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisjZGVmaW5lIFVTQkJBQ0tfSU5G T19QQVRIICIvbGlieGwvdXNiYmFjayIKKworI2RlZmluZSBVU0JIVUJfQ0xBU1NfQ09ERSA5CisK K3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV91c2JjdHJsX3NldGRlZmF1bHQobGlieGxfX2djICpn YywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJsKQoreworICAgIGludCByYzsKKyAg ICBsaWJ4bF9kb21haW5fdHlwZSBkb210eXBlID0gbGlieGxfX2RvbWFpbl90eXBlKGdjLCBkb21p ZCk7CisKKyAgICBpZiAoIXVzYmN0cmwtPnZlcnNpb24pCisgICAgICAgIHVzYmN0cmwtPnZlcnNp b24gPSAyOworCisgICAgaWYgKCF1c2JjdHJsLT5wb3J0cykKKyAgICAgICAgdXNiY3RybC0+cG9y dHMgPSA4OworCisgICAgaWYgKHVzYmN0cmwtPnR5cGUgPT0gTElCWExfVVNCQ1RSTF9UWVBFX0FV VE8pIHsKKyAgICAgICAgaWYgKGRvbXR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfUFYpIHsKKyAg ICAgICAgICAgIHVzYmN0cmwtPnR5cGUgPSBMSUJYTF9VU0JDVFJMX1RZUEVfUFY7CisgICAgICAg IH0gZWxzZSBpZiAoZG9tdHlwZSA9PSBMSUJYTF9ET01BSU5fVFlQRV9IVk0pIHsKKyAgICAgICAg ICAgIC8qIEZJWE1FOiBTZWUgaWYgd2UgY2FuIGRldGVjdCBQViBmcm9udGVuZCAqLworICAgICAg ICAgICAgdXNiY3RybC0+dHlwZSA9IExJQlhMX1VTQkNUUkxfVFlQRV9ERVZJQ0VNT0RFTDsKKyAg ICAgICAgfQorICAgIH0KKworICAgIHJjID0gbGlieGxfX3Jlc29sdmVfZG9taWQoZ2MsIHVzYmN0 cmwtPmJhY2tlbmRfZG9tbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2Jj dHJsLT5iYWNrZW5kX2RvbWlkKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBsaWJ4bF9fZGV2 aWNlX2Zyb21fdXNiY3RybChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZGV2aWNlICpkZXZpY2UpCit7Cisg ICAgZGV2aWNlLT5iYWNrZW5kX2RldmlkICAgPSB1c2JjdHJsLT5kZXZpZDsKKyAgICBkZXZpY2Ut PmJhY2tlbmRfZG9taWQgICA9IHVzYmN0cmwtPmJhY2tlbmRfZG9taWQ7CisgICAgZGV2aWNlLT5i YWNrZW5kX2tpbmQgICAgPSBMSUJYTF9fREVWSUNFX0tJTkRfVlVTQjsKKyAgICBkZXZpY2UtPmRl dmlkICAgICAgICAgICA9IHVzYmN0cmwtPmRldmlkOworICAgIGRldmljZS0+ZG9taWQgICAgICAg ICAgID0gZG9taWQ7CisgICAgZGV2aWNlLT5raW5kICAgICAgICAgICAgPSBMSUJYTF9fREVWSUNF X0tJTkRfVlVTQjsKKworICAgIHJldHVybiAwOworfQorCisvKiBBZGQgdXNiY3RybCBpbmZvcm1h dGlvbiB0byB4ZW5zdG9yZS4KKyAqCisgKiBBZGRpbmcgYSB1c2IgY29udHJvbGxlciB3aWxsIGFk ZCBhIG5ldyAndnVzYicgZGV2aWNlIGluIHhlbnN0b3JlLCBhbmQKKyAqIGFkZCBjb3JyZXNwb25k aW5nIGZyb250ZW5kLCBiYWNrZW5kIGluZm9ybWF0aW9uIHRvIGl0LiBBY2NvcmRpbmcgdG8KKyAq ICJ1cGRhdGVfanNvbiIsIGRlY2lkZSB3ZXRoZXIgdG8gdXBkYXRlIGpzb24gY29uZmlnIGZpbGUu CisgKi8KK3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV91c2JjdHJsX2FkZF94ZW5zdG9yZShsaWJ4 bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVwZGF0ZV9qc29uKQor eworICAgIGxpYnhsX19kZXZpY2UgKmRldmljZTsKKyAgICBmbGV4YXJyYXlfdCAqZnJvbnQ7Cisg ICAgZmxleGFycmF5X3QgKmJhY2s7CisgICAgeHNfdHJhbnNhY3Rpb25fdCB0ID0gWEJUX05VTEw7 CisgICAgaW50IGksIHJjOworICAgIGxpYnhsX2RvbWFpbl9jb25maWcgZF9jb25maWc7CisgICAg bGlieGxfZGV2aWNlX3VzYmN0cmwgdXNiY3RybF9zYXZlZDsKKyAgICBsaWJ4bF9fZG9tYWluX3Vz ZXJkYXRhX2xvY2sgKmxvY2sgPSBOVUxMOworCisgICAgbGlieGxfZG9tYWluX2NvbmZpZ19pbml0 KCZkX2NvbmZpZyk7CisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfaW5pdCgmdXNiY3RybF9zYXZl ZCk7CisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfY29weShDVFgsICZ1c2JjdHJsX3NhdmVkLCB1 c2JjdHJsKTsKKworICAgIEdDTkVXKGRldmljZSk7CisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX2Zy b21fdXNiY3RybChnYywgZG9taWQsIHVzYmN0cmwsIGRldmljZSk7CisgICAgaWYgKHJjKSBnb3Rv IG91dDsKKworICAgIGZyb250ID0gZmxleGFycmF5X21ha2UoZ2MsIDQsIDEpOworICAgIGJhY2sg PSBmbGV4YXJyYXlfbWFrZShnYywgMTIsIDEpOworCisgICAgZmxleGFycmF5X2FwcGVuZF9wYWly KGJhY2ssICJmcm9udGVuZC1pZCIsIEdDU1BSSU5URigiJWQiLCBkb21pZCkpOworICAgIGZsZXhh cnJheV9hcHBlbmRfcGFpcihiYWNrLCAib25saW5lIiwgIjEiKTsKKyAgICBmbGV4YXJyYXlfYXBw ZW5kX3BhaXIoYmFjaywgInN0YXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJ TlRGKCIlZCIsIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nKSk7CisgICAgZmxleGFycmF5X2FwcGVu ZF9wYWlyKGJhY2ssICJ0eXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKils aWJ4bF91c2JjdHJsX3R5cGVfdG9fc3RyaW5nKHVzYmN0cmwtPnR5cGUpKTsKKyAgICBmbGV4YXJy YXlfYXBwZW5kX3BhaXIoYmFjaywgInVzYi12ZXIiLCBHQ1NQUklOVEYoIiVkIiwgdXNiY3RybC0+ dmVyc2lvbikpOworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAibnVtLXBvcnRzIiwg R0NTUFJJTlRGKCIlZCIsIHVzYmN0cmwtPnBvcnRzKSk7CisgICAgZmxleGFycmF5X2FwcGVuZF9w YWlyKGJhY2ssICJwb3J0IiwgIiIpOworICAgIGZvciAoaSA9IDA7IGkgPCB1c2JjdHJsLT5wb3J0 czsgaSsrKQorICAgICAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgR0NTUFJJTlRGKCJw b3J0LyVkIiwgaSArIDEpLCAiIik7CisKKyAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoZnJvbnQs ICJiYWNrZW5kLWlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlZCIs IHVzYmN0cmwtPmJhY2tlbmRfZG9taWQpKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoZnJv bnQsICJzdGF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJWQiLCBY ZW5idXNTdGF0ZUluaXRpYWxpc2luZykpOworCisgICAgaWYgKHVwZGF0ZV9qc29uKSB7CisgICAg ICAgIGxvY2sgPSBsaWJ4bF9fbG9ja19kb21haW5fdXNlcmRhdGEoZ2MsIGRvbWlkKTsKKyAgICAg ICAgaWYgKCFsb2NrKSB7CisgICAgICAgICAgICByYyA9IEVSUk9SX0xPQ0tfRkFJTDsKKyAgICAg ICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJ4bF9fZ2V0X2Rv bWFpbl9jb25maWd1cmF0aW9uKGdjLCBkb21pZCwgJmRfY29uZmlnKTsKKyAgICAgICAgaWYgKHJj KSBnb3RvIG91dDsKKworICAgICAgICBERVZJQ0VfQUREKHVzYmN0cmwsIHVzYmN0cmxzLCBkb21p ZCwgJnVzYmN0cmxfc2F2ZWQsCisgICAgICAgICAgICAgICAgICAgQ09NUEFSRV9VU0JDVFJMLCAm ZF9jb25maWcpOworICAgIH0KKworICAgIGZvciAoOzspIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9f eHNfdHJhbnNhY3Rpb25fc3RhcnQoZ2MsICZ0KTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsK KworICAgICAgICByYyA9IGxpYnhsX19kZXZpY2VfZXhpc3RzKGdjLCB0LCBkZXZpY2UpOworICAg ICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsKKyAgICAgICAgaWYgKHJjID09IDEpIHsKKyAgICAg ICAgICAgIC8qIGFscmVhZHkgZXhpc3RzIGluIHhlbnN0b3JlICovCisgICAgICAgICAgICBMT0co RVJST1IsICJkZXZpY2UgYWxyZWFkeSBleGlzdHMgaW4geGVuc3RvcmUiKTsKKyAgICAgICAgICAg IHJjID0gRVJST1JfREVWSUNFX0VYSVNUUzsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAg ICB9CisKKyAgICAgICAgaWYgKHVwZGF0ZV9qc29uKSB7CisgICAgICAgICAgICByYyA9IGxpYnhs X19zZXRfZG9tYWluX2NvbmZpZ3VyYXRpb24oZ2MsIGRvbWlkLCAmZF9jb25maWcpOworICAgICAg ICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGxpYnhsX19kZXZp Y2VfZ2VuZXJpY19hZGQoZ2MsIHQsIGRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX3hzX2t2c19vZl9mbGV4YXJyYXkoZ2MsIGJhY2ssIGJhY2stPmNvdW50KSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3hzX2t2c19vZl9mbGV4YXJyYXkoZ2MsIGZyb250 LCBmcm9udC0+Y291bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAg ICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ0KTsKKyAgICAgICAg aWYgKCFyYykgYnJlYWs7CisgICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0OworICAgIH0KKwor b3V0OgorICAgIGxpYnhsX194c190cmFuc2FjdGlvbl9hYm9ydChnYywgJnQpOworICAgIGlmIChs b2NrKSBsaWJ4bF9fdW5sb2NrX2RvbWFpbl91c2VyZGF0YShsb2NrKTsKKyAgICBsaWJ4bF9kZXZp Y2VfdXNiY3RybF9kaXNwb3NlKCZ1c2JjdHJsX3NhdmVkKTsKKyAgICBsaWJ4bF9kb21haW5fY29u ZmlnX2Rpc3Bvc2UoJmRfY29uZmlnKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qIEFPIG9wZXJh dGlvbiB0byBhZGQgYSB1c2IgY29udHJvbGxlci4KKyAqCisgKiBHZW5lcmFsbHksIGl0IGRvZXM6 CisgKiAxKSBmaWxsIGluIG5lY2Vzc2FyeSB1c2IgY29udHJvbGVyIGluZm9ybWF0aW9uIHdpdGgg ZGVmYXVsdCB2YWx1ZQorICogMikgd3JpdGUgdXNiIGNvbnRyb2xsZXIgZnJvbnRlbmQvYmFja2Vu ZCBpbmZvIHRvIHhlbnN0b3JlLCB1cGRhdGUganNvbgorICogICAgY29uZmlnIGZpbGUgaWYgbmVj ZXNzYXJ5LgorICogMykgd2FpdCBmb3IgZGV2aWNlIGNvbm5lY3Rpb24uIFBWVVNCIGZyb250ZW5k IGFuZCBiYWNrZW5kIGRyaXZlciB3aWxsCisgKiAgICBwcm9iZSB4ZW5zdG9yZSBwYXRocyBhbmQg YnVpbGQgY29ubmVjdGlvbiBiZXR3ZWVuIGZyb250ZW5kIGFuZCBiYWNrZW5kLgorICoKKyAqIEJl Zm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGFvZGV2IHNob3VsZCBiZSBwcm9wZXJseSBmaWxs ZWQ6CisgKiBhb2Rldi0+YW8sIGFvZGV2LT5jYWxsYmFjaywgYW9kZXYtPnVwZGF0ZV9qc29uLCAu Li4KKyAqLwordm9pZCBsaWJ4bF9fZGV2aWNlX3VzYmN0cmxfYWRkKGxpYnhsX19lZ2MgKmVnYywg dWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2 aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfX2FvX2RldmljZSAqYW9kZXYpCit7CisgICAgU1RBVEVfQU9fR0MoYW9kZXYtPmFvKTsKKyAg ICBsaWJ4bF9fZGV2aWNlICpkZXZpY2U7CisgICAgaW50IHJjOworCisgICAgcmMgPSBsaWJ4bF9f ZGV2aWNlX3VzYmN0cmxfc2V0ZGVmYXVsdChnYywgZG9taWQsIHVzYmN0cmwpOworICAgIGlmIChy YyA8IDApIGdvdG8gb3V0OworCisgICAgaWYgKHVzYmN0cmwtPmRldmlkID09IC0xKSB7CisgICAg ICAgIHVzYmN0cmwtPmRldmlkID0gbGlieGxfX2RldmljZV9uZXh0aWQoZ2MsIGRvbWlkLCAidnVz YiIpOworICAgICAgICBpZiAodXNiY3RybC0+ZGV2aWQgPCAwKSB7CisgICAgICAgICAgICByYyA9 IEVSUk9SX0ZBSUw7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIGlmICh1c2JjdHJsLT50eXBlICE9IExJQlhMX1VTQkNUUkxfVFlQRV9QVikgeworICAgICAg ICBMT0coRVJST1IsICJVbnN1cHBvcnRlZCBVU0IgY29udHJvbGxlciB0eXBlIik7CisgICAgICAg IHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgcmMgPSBs aWJ4bF9fZGV2aWNlX3VzYmN0cmxfYWRkX3hlbnN0b3JlKGdjLCBkb21pZCwgdXNiY3RybCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW9kZXYtPnVwZGF0ZV9q c29uKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgR0NORVcoZGV2aWNlKTsKKyAgICBy YyA9IGxpYnhsX19kZXZpY2VfZnJvbV91c2JjdHJsKGdjLCBkb21pZCwgdXNiY3RybCwgZGV2aWNl KTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgYW9kZXYtPmRldiA9IGRldmljZTsKKyAg ICBhb2Rldi0+YWN0aW9uID0gTElCWExfX0RFVklDRV9BQ1RJT05fQUREOworICAgIGxpYnhsX193 YWl0X2RldmljZV9jb25uZWN0aW9uKGVnYywgYW9kZXYpOworICAgIHJldHVybjsKKworb3V0Ogor ICAgIGFvZGV2LT5yYyA9IHJjOworICAgIGFvZGV2LT5jYWxsYmFjayhlZ2MsIGFvZGV2KTsKKyAg ICByZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV91c2JkZXZfbGlzdF9mb3Jf dXNiY3RybChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpZCB1c2JjdHJsLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rldmlj ZV91c2JkZXYgKip1c2JkZXZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCAqbnVtKTsKKworc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX3VzYmRl dl9yZW1vdmUobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXYpOworCisv KiBBTyBmdW5jdGlvbiB0byByZW1vdmUgYSB1c2IgY29udHJvbGxlci4KKyAqCisgKiBHZW5lcmFs bHksIGl0IGRvZXM6CisgKiAxKSBjaGVjayBpZiB0aGUgdXNiIGNvbnRyb2xsZXIgZXhpc3RzIG9y IG5vdAorICogMikgcmVtb3ZlIGFsbCB1c2IgZGV2aWNlcyB1bmRlciBjb250cm9sbGVyCisgKiAz KSByZW1vdmUgdXNiIGNvbnRyb2xsZXIgaW5mb3JtYXRpb24gZnJvbSB4ZW5zdG9yZQorICoKKyAq IEJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGFvZGV2IHNob3VsZCBiZSBwcm9wZXJseSBm aWxsZWQ6CisgKiBhb2Rldi0+YW8sIGFvZGV2LT5kZXYsIGFvZGV2LT5jYWxsYmFjaywgLi4uCisg Ki8KK3ZvaWQgbGlieGxfX2luaXRpYXRlX2RldmljZV91c2JjdHJsX3JlbW92ZShsaWJ4bF9fZWdj ICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf X2FvX2RldmljZSAqYW9kZXYpCit7CisgICAgU1RBVEVfQU9fR0MoYW9kZXYtPmFvKTsKKyAgICBs aWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXZzID0gTlVMTDsKKyAgICBpbnQgbnVtX3VzYmRldiA9 IDA7CisgICAgaW50IGksIHJjOworICAgIHVpbnQzMl90IGRvbWlkID0gYW8tPmRvbWlkOworICAg IGludCB1c2JjdHJsX2RldmlkID0gYW9kZXYtPmRldi0+ZGV2aWQ7CisgICAgbGlieGxfZGV2aWNl X3VzYmN0cmwgdXNiY3RybDsKKyAgICBsaWJ4bF91c2JjdHJsaW5mbyB1c2JjdHJsaW5mbzsKKwor ICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2luaXQoJnVzYmN0cmwpOworICAgIGxpYnhsX3VzYmN0 cmxpbmZvX2luaXQoJnVzYmN0cmxpbmZvKTsKKyAgICB1c2JjdHJsLmRldmlkID0gdXNiY3RybF9k ZXZpZDsKKworICAgIHJjID0gbGlieGxfZGV2aWNlX3VzYmN0cmxfZ2V0aW5mbyhDVFgsIGRvbWlk LCAmdXNiY3RybCwgJnVzYmN0cmxpbmZvKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAg aWYgKHVzYmN0cmxpbmZvLnR5cGUgIT0gTElCWExfVVNCQ1RSTF9UWVBFX1BWKSB7CisgICAgICAg IExPRyhFUlJPUiwgIlVuc3VwcG9ydGVkIFVTQiBjb250cm9sbGVyIHR5cGUiKTsKKyAgICAgICAg cmMgPSBFUlJPUl9GQUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBSZW1v dmUgdXNiIGRldmljZXMgZmlyc3QgKi8KKyAgICByYyA9IGxpYnhsX19kZXZpY2VfdXNiZGV2X2xp c3RfZm9yX3VzYmN0cmwoZ2MsIGRvbWlkLCB1c2JjdHJsX2RldmlkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNiZGV2cywgJm51bV91c2JkZXYpOwor ICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3VzYmRldjsg aSsrKSB7CisgICAgICAgIHJjID0gbGlieGxfX2RldmljZV91c2JkZXZfcmVtb3ZlKGdjLCBkb21p ZCwgJnVzYmRldnNbaV0pOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIExPRyhFUlJP UiwgImxpYnhsX19kZXZpY2VfdXNiZGV2X3JlbW92ZSBmYWlsZWQ6IGNvbnRyb2xsZXIgJWQsICIK KyAgICAgICAgICAgICAgICAicG9ydCAlZCIsIHVzYmRldnNbaV0uY3RybCwgdXNiZGV2c1tpXS5w b3J0KTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQorCisgICAgbGli eGxfZGV2aWNlX3VzYmN0cmxfZGlzcG9zZSgmdXNiY3RybCk7CisgICAgbGlieGxfdXNiY3RybGlu Zm9fZGlzcG9zZSgmdXNiY3RybGluZm8pOworCisgICAgLyogUmVtb3ZlIHVzYmN0cmwgKi8KKyAg ICBsaWJ4bF9faW5pdGlhdGVfZGV2aWNlX2dlbmVyaWNfcmVtb3ZlKGVnYywgYW9kZXYpOworICAg IHJldHVybjsKKworb3V0OgorICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2Rpc3Bvc2UoJnVzYmN0 cmwpOworICAgIGxpYnhsX3VzYmN0cmxpbmZvX2Rpc3Bvc2UoJnVzYmN0cmxpbmZvKTsKKyAgICBh b2Rldi0+cmMgPSByYzsKKyAgICBhb2Rldi0+Y2FsbGJhY2soZWdjLCBhb2Rldik7CisgICAgcmV0 dXJuOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdnVzYl9iZV9mcm9tX3hzX2ZlKGxpYnhsX19n YyAqZ2MsIGNvbnN0IGNoYXIgKmZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90IHRndF9kb21pZCkKK3sKKyAgICBjb25zdCBjaGFyICpiZV9wYXRo OworICAgIGludCByOworICAgIHVpbnQzMl90IGJlX2RvbWlkLCBmZV9kb21pZDsKKworICAgIHIg PSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy9iYWNr ZW5kIiwgZmVfcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJlX3BhdGgp OworICAgIGlmIChyIHx8ICFiZV9wYXRoKSByZXR1cm4gTlVMTDsKKworICAgIC8qIENoZWNrIHRv IHNlZSB0aGF0IGl0IGhhcyB0aGUgcHJvcGVyIGZvcm0sIGFuZCB0aGF0IGZlX2RvbWlkID09Cisg ICAgICogdGFyZ2V0IGRvbWlkICovCisgICAgciA9IHNzY2FuZihiZV9wYXRoLCAiL2xvY2FsL2Rv bWFpbi8lZC9iYWNrZW5kL3Z1c2IvJWQiLAorICAgICAgICAgICAgICAgJmJlX2RvbWlkLCAmZmVf ZG9taWQpOworCisgICAgaWYgKHIgIT0gMiB8fCBmZV9kb21pZCAhPSB0Z3RfZG9taWQpIHsKKyAg ICAgICAgTE9HKEVSUk9SLCAiTWFsZm9ybWVkIGJhY2tlbmQsIHJlZnVzaW5nIHRvIHVzZSIpOwor ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gYmVfcGF0aDsKK30KKwor bGlieGxfZGV2aWNlX3VzYmN0cmwgKgorbGlieGxfZGV2aWNlX3VzYmN0cmxfbGlzdChsaWJ4bF9j dHggKmN0eCwgdWludDMyX3QgZG9taWQsIGludCAqbnVtKQoreworICAgIEdDX0lOSVQoY3R4KTsK KyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybHMgPSBOVUxMOworICAgIGNoYXIgKnBh dGggPSBOVUxMOworICAgIGNoYXIgKiplbnRyeSA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IG5l bnRyaWVzID0gMDsKKworICAgICpudW0gPSAwOworCisgICAgcGF0aCA9IEdDU1BSSU5URigiJXMv ZGV2aWNlL3Z1c2IiLAorICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3hzX2dldF9kb21wYXRo KGdjLCBkb21pZCkpOworICAgIGVudHJ5ID0gbGlieGxfX3hzX2RpcmVjdG9yeShnYywgWEJUX05V TEwsIHBhdGgsICZuZW50cmllcyk7CisKKyAgICBpZiAoZW50cnkgJiYgbmVudHJpZXMpIHsKKyAg ICAgICAgdXNiY3RybHMgPSBsaWJ4bF9femFsbG9jKE5PR0MsIHNpemVvZigqdXNiY3RybHMpICog bmVudHJpZXMpOworICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybDsKKyAgICAg ICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKmVuZCA9IHVzYmN0cmxzICsgbmVudHJpZXM7CisgICAg ICAgIGZvciAodXNiY3RybCA9IHVzYmN0cmxzOworICAgICAgICAgICAgIHVzYmN0cmwgPCBlbmQ7 CisgICAgICAgICAgICAgdXNiY3RybCsrLCBlbnRyeSsrLCAoKm51bSkrKykgeworICAgICAgICAg ICAgY29uc3QgY2hhciAqdG1wLCAqYmVfcGF0aCwgKmZlX3BhdGg7CisgICAgICAgICAgICBpbnQg cmV0OworCisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0KHVzYmN0cmwpOwor ICAgICAgICAgICAgdXNiY3RybC0+ZGV2aWQgPSBhdG9pKCplbnRyeSk7CisKKyNkZWZpbmUgUkVB RF9TVUJQQVRIKHBhdGgsIHN1YnBhdGgpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgcmV0ID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgWEJUX05VTEws ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHQ1NQUklOVEYoIiVzLyIgc3VicGF0aCwgcGF0aCksICAgIFwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmdG1wKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAgaWYgKHJldCkgZ290byBvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGNoYXIgKil0bXA7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5l IFJFQURfU1VCUEFUSF9JTlQocGF0aCwgc3VicGF0aCkgKHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgICAgIHJldCA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9O VUxMLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR0NTUFJJTlRGKCIlcy8iIHN1YnBhdGgsIHBhdGgpLCAgICBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgIGlmIChyZXQpIGdvdG8gb3V0OyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRtcCA/IGF0b2kodG1wKSA6IC0xOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSkKKworICAg ICAgICAgICAgZmVfcGF0aCA9IEdDU1BSSU5URigiJXMvJXMiLCBwYXRoLCAqZW50cnkpOworICAg ICAgICAgICAgYmVfcGF0aCA9IHZ1c2JfYmVfZnJvbV94c19mZShnYywgZmVfcGF0aCwgZG9taWQp OworICAgICAgICAgICAgaWYgKCFiZV9wYXRoKSBnb3RvIG91dDsKKyAgICAgICAgICAgIHVzYmN0 cmwtPmJhY2tlbmRfZG9taWQgPSBSRUFEX1NVQlBBVEhfSU5UKGZlX3BhdGgsICJiYWNrZW5kLWlk Iik7CisgICAgICAgICAgICB1c2JjdHJsLT52ZXJzaW9uID0gUkVBRF9TVUJQQVRIX0lOVChiZV9w YXRoLCAidXNiLXZlciIpOworICAgICAgICAgICAgdXNiY3RybC0+cG9ydHMgPSBSRUFEX1NVQlBB VEhfSU5UKGJlX3BhdGgsICJudW0tcG9ydHMiKTsKKyAgICAgICAgICAgIGxpYnhsX3VzYmN0cmxf dHlwZV9mcm9tX3N0cmluZyhSRUFEX1NVQlBBVEgoYmVfcGF0aCwgInR5cGUiKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNiY3RybC0+dHlwZSk7CisKKyN1 bmRlZiBSRUFEX1NVQlBBVEgKKyN1bmRlZiBSRUFEX1NVQlBBVEhfSU5UCisgICAgICAgfQorICAg IH0KKworICAgIEdDX0ZSRUU7CisgICAgcmV0dXJuIHVzYmN0cmxzOworCitvdXQ6CisgICAgTE9H KEVSUk9SLCAiVW5hYmxlIHRvIGxpc3QgVVNCIENvbnRyb2xsZXJzIik7CisgICAgbGlieGxfZGV2 aWNlX3VzYmN0cmxfbGlzdF9mcmVlKHVzYmN0cmxzLCAqbnVtKTsKKyAgICBHQ19GUkVFOworICAg ICpudW0gPSAwOworICAgIHJldHVybiBOVUxMOworfQorCitpbnQgbGlieGxfZGV2aWNlX3VzYmN0 cmxfZ2V0aW5mbyhsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3VzYmN0cmxpbmZvICp1c2JjdHJsaW5m bykKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgY29uc3QgY2hhciAqZG9tcGF0aCwgKmZlX3Bh dGgsICpiZV9wYXRoLCAqdG1wOworICAgIGludCByYzsKKworICAgIHVzYmN0cmxpbmZvLT5kZXZp ZCA9IHVzYmN0cmwtPmRldmlkOworCisjZGVmaW5lIFJFQURfU1VCUEFUSChwYXRoLCBzdWJwYXRo KSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJjID0gbGli eGxfX3hzX3JlYWRfY2hlY2tlZChnYywgWEJUX05VTEwsICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzLyIgc3Vi cGF0aCwgcGF0aCksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm dG1wKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChyYykgZ290 byBvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgIChjaGFyICopdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgfSkKKworI2RlZmluZSBSRUFEX1NVQlBBVEhfSU5UKHBhdGgs IHN1YnBhdGgpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByYyA9 IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLCAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy8i IHN1YnBhdGgsIHBhdGgpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnRtcCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAocmMp IGdvdG8gb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICB0bXAgPyBhdG9pKHRtcCkgOiAtMTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIH0pCisKKyAgICBkb21wYXRoID0gbGlieGxfX3hzX2dl dF9kb21wYXRoKGdjLCBkb21pZCk7CisgICAgZmVfcGF0aCA9IEdDU1BSSU5URigiJXMvZGV2aWNl L3Z1c2IvJWQiLCBkb21wYXRoLCB1c2JjdHJsLT5kZXZpZCk7CisgICAgYmVfcGF0aCA9IFJFQURf U1VCUEFUSChmZV9wYXRoLCAiYmFja2VuZCIpOworICAgIHVzYmN0cmxpbmZvLT5iYWNrZW5kID0g bGlieGxfX3N0cmR1cChOT0dDLCBiZV9wYXRoKTsKKyAgICB1c2JjdHJsaW5mby0+YmFja2VuZF9p ZCA9IFJFQURfU1VCUEFUSF9JTlQoZmVfcGF0aCwgImJhY2tlbmQtaWQiKTsKKyAgICB1c2JjdHJs aW5mby0+c3RhdGUgPSBSRUFEX1NVQlBBVEhfSU5UKGZlX3BhdGgsICJzdGF0ZSIpOworICAgIHVz YmN0cmxpbmZvLT5ldnRjaCA9IFJFQURfU1VCUEFUSF9JTlQoZmVfcGF0aCwgImV2ZW50LWNoYW5u ZWwiKTsKKyAgICB1c2JjdHJsaW5mby0+cmVmX3VyYiA9IFJFQURfU1VCUEFUSF9JTlQoZmVfcGF0 aCwgInVyYi1yaW5nLXJlZiIpOworICAgIHVzYmN0cmxpbmZvLT5yZWZfY29ubiA9IFJFQURfU1VC UEFUSF9JTlQoZmVfcGF0aCwgInVyYi1yaW5nLXJlZiIpOworICAgIHRtcCA9IFJFQURfU1VCUEFU SChiZV9wYXRoLCAiZnJvbnRlbmQiKTsKKyAgICB1c2JjdHJsaW5mby0+ZnJvbnRlbmQgPSBsaWJ4 bF9fc3RyZHVwKE5PR0MsIHRtcCk7CisgICAgdXNiY3RybGluZm8tPmZyb250ZW5kX2lkID0gUkVB RF9TVUJQQVRIX0lOVChiZV9wYXRoLCAiZnJvbnRlbmQtaWQiKTsKKyAgICB1c2JjdHJsaW5mby0+ cG9ydHMgPSBSRUFEX1NVQlBBVEhfSU5UKGJlX3BhdGgsICJudW0tcG9ydHMiKTsKKyAgICB1c2Jj dHJsaW5mby0+dmVyc2lvbiA9IFJFQURfU1VCUEFUSF9JTlQoYmVfcGF0aCwgInVzYi12ZXIiKTs7 CisgICAgdG1wID0gUkVBRF9TVUJQQVRIKGJlX3BhdGgsICJ0eXBlIik7CisgICAgbGlieGxfdXNi Y3RybF90eXBlX2Zyb21fc3RyaW5nKHRtcCwgJnVzYmN0cmxpbmZvLT50eXBlKTsKKworI3VuZGVm IFJFQURfU1VCUEFUSAorI3VuZGVmIFJFQURfU1VCUEFUSF9JTlQKKworICAgIHJjID0gMDsKKwor b3V0OgorICAgIEdDX0ZSRUU7CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgbGlieGxfZGV2aWRf dG9fZGV2aWNlX3VzYmN0cmwobGlieGxfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGRldmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X2RldmljZV91c2JjdHJsICp1c2JjdHJsKQoreworICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1 c2JjdHJsczsKKyAgICBpbnQgbmIgPSAwOworICAgIGludCBpLCByYzsKKworICAgIHVzYmN0cmxz ID0gbGlieGxfZGV2aWNlX3VzYmN0cmxfbGlzdChjdHgsIGRvbWlkLCAmbmIpOworICAgIGlmICgh dXNiY3RybHMpIHJldHVybiBFUlJPUl9GQUlMOworCisgICAgcmMgPSBFUlJPUl9GQUlMOworICAg IGZvciAoaSA9IDA7IGkgPCBuYjsgaSsrKSB7CisgICAgICAgIGlmIChkZXZpZCA9PSB1c2JjdHJs c1tpXS5kZXZpZCkgeworICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfY29weShjdHgs IHVzYmN0cmwsICZ1c2JjdHJsc1tpXSk7CisgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2xp c3RfZnJlZSh1c2JjdHJscywgbmIpOworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQg KnphbGxvY19kaXJlbnQobGlieGxfX2djICpnYywgY29uc3QgY2hhciAqZGlycGF0aCkKK3sKKyAg ICBzaXplX3QgbmVlZCA9IG9mZnNldG9mKHN0cnVjdCBkaXJlbnQsIGRfbmFtZSkgKworICAgICAg ICAgICAgICAgICAgcGF0aGNvbmYoZGlycGF0aCwgX1BDX05BTUVfTUFYKSArIDE7CisKKyAgICBy ZXR1cm4gbGlieGxfX3phbGxvYyhnYywgbmVlZCk7Cit9CisKK3N0YXRpYyBjaGFyICp1c2JkZXZf YnVzYWRkcl90b19idXNpZChsaWJ4bF9fZ2MgKmdjLCBpbnQgYnVzLCBpbnQgYWRkcikKK3sKKyAg ICBESVIgKmRpcjsKKyAgICBjaGFyICpidXNpZCA9IE5VTEw7CisgICAgc3RydWN0IGRpcmVudCAq ZGVfYnVmOworICAgIHN0cnVjdCBkaXJlbnQgKmRlOworCisgICAgLyogaW52YWxpZCBob3N0YnVz IG9yIGhvc3RhZGRyICovCisgICAgaWYgKGJ1cyA8IDEgfHwgYWRkciA8IDEpCisgICAgICAgIHJl dHVybiBOVUxMOworCisgICAgZGlyID0gb3BlbmRpcihTWVNGU19VU0JfREVWKTsKKyAgICBpZiAo IWRpcikgeworICAgICAgICBMT0dFKEVSUk9SLCAib3BlbmRpciBmYWlsZWQ6ICclcyciLCBTWVNG U19VU0JfREVWKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZGVfYnVmID0g emFsbG9jX2RpcmVudChnYywgU1lTRlNfVVNCX0RFVik7CisKKyAgICBmb3IgKDs7KSB7CisgICAg ICAgIGNoYXIgKmZpbGVuYW1lOworICAgICAgICB2b2lkICpidWY7CisgICAgICAgIGludCBidXNu dW0gPSAtMTsKKyAgICAgICAgaW50IGRldm51bSA9IC0xOworCisgICAgICAgIGludCByID0gcmVh ZGRpcl9yKGRpciwgZGVfYnVmLCAmZGUpOworICAgICAgICBpZiAocikgeworICAgICAgICAgICAg TE9HRShFUlJPUiwgImZhaWxlZCB0byByZWFkZGlyICVzIiwgU1lTRlNfVVNCX0RFVik7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWRlKQorICAgICAgICAgICAg YnJlYWs7CisKKyAgICAgICAgaWYgKCFzdHJjbXAoZGUtPmRfbmFtZSwgIi4iKSB8fAorICAgICAg ICAgICAgIXN0cmNtcChkZS0+ZF9uYW1lLCAiLi4iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor CisgICAgICAgIGZpbGVuYW1lID0gR0NTUFJJTlRGKFNZU0ZTX1VTQl9ERVYgIi8lcy9kZXZudW0i LCBkZS0+ZF9uYW1lKTsKKyAgICAgICAgaWYgKCFsaWJ4bF9fcmVhZF9zeXNmc19maWxlX2NvbnRl bnRzKGdjLCBmaWxlbmFtZSwgJmJ1ZiwgTlVMTCkpCisgICAgICAgICAgICBkZXZudW0gPSBhdG9p KGJ1Zik7CisKKyAgICAgICAgZmlsZW5hbWUgPSBHQ1NQUklOVEYoU1lTRlNfVVNCX0RFViAiLyVz L2J1c251bSIsIGRlLT5kX25hbWUpOworICAgICAgICBpZiAoIWxpYnhsX19yZWFkX3N5c2ZzX2Zp bGVfY29udGVudHMoZ2MsIGZpbGVuYW1lLCAmYnVmLCBOVUxMKSkKKyAgICAgICAgICAgIGJ1c251 bSA9IGF0b2koYnVmKTsKKworICAgICAgICBpZiAoYnVzID09IGJ1c251bSAmJiBhZGRyID09IGRl dm51bSkgeworICAgICAgICAgICAgYnVzaWQgPSBsaWJ4bF9fc3RyZHVwKGdjLCBkZS0+ZF9uYW1l KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgY2xvc2VkaXIo ZGlyKTsKKyAgICByZXR1cm4gYnVzaWQ7Cit9CisKK3N0YXRpYyBpbnQgdXNiZGV2X2J1c2FkZHJf ZnJvbV9idXNpZChsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICpidXNpZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpidXMsIHVpbnQ4X3QgKmFkZHIpCit7 CisgICAgY2hhciAqZmlsZW5hbWU7CisgICAgdm9pZCAqYnVmOworCisgICAgZmlsZW5hbWUgPSBH Q1NQUklOVEYoU1lTRlNfVVNCX0RFViAiLyVzL2J1c251bSIsIGJ1c2lkKTsKKyAgICBpZiAoIWxp YnhsX19yZWFkX3N5c2ZzX2ZpbGVfY29udGVudHMoZ2MsIGZpbGVuYW1lLCAmYnVmLCBOVUxMKSkK KyAgICAgICAgKmJ1cyA9IGF0b2koYnVmKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBFUlJP Ul9GQUlMOworCisgICAgZmlsZW5hbWUgPSBHQ1NQUklOVEYoU1lTRlNfVVNCX0RFViAiLyVzL2Rl dm51bSIsIGJ1c2lkKTsKKyAgICBpZiAoIWxpYnhsX19yZWFkX3N5c2ZzX2ZpbGVfY29udGVudHMo Z2MsIGZpbGVuYW1lLCAmYnVmLCBOVUxMKSkKKyAgICAgICAgKmFkZHIgPSBhdG9pKGJ1Zik7Cisg ICAgZWxzZQorICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IGdldF9hc3NpZ25lZF9kZXZpY2VzKGxpYnhsX19nYyAqZ2MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYgKipsaXN0LCBpbnQg Km51bSkKK3sKKyAgICBjaGFyICoqZG9tbGlzdDsKKyAgICB1bnNpZ25lZCBpbnQgbmRvbSA9IDA7 CisgICAgaW50IGksIGosIGs7CisgICAgaW50IHJjOworCisgICAgKmxpc3QgPSBOVUxMOworICAg ICpudW0gPSAwOworCisgICAgZG9tbGlzdCA9IGxpYnhsX194c19kaXJlY3RvcnkoZ2MsIFhCVF9O VUxMLCAiL2xvY2FsL2RvbWFpbiIsICZuZG9tKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmRvbTsg aSsrKSB7CisgICAgICAgIGNoYXIgKnBhdGg7CisgICAgICAgIGNoYXIgKip1c2JjdHJsczsKKyAg ICAgICAgdW5zaWduZWQgaW50IG5jID0gMDsKKyAgICAgICAgdWludDMyX3QgZG9taWQgPSBhdG9p KGRvbWxpc3RbaV0pOworCisgICAgICAgIHBhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92dXNi IiwgbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCkpOworICAgICAgICB1c2JjdHJscyA9 IGxpYnhsX194c19kaXJlY3RvcnkoZ2MsIFhCVF9OVUxMLCBwYXRoLCAmbmMpOworCisgICAgICAg IGZvciAoaiA9IDA7IGogPCBuYzsgaisrKSB7CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNi ZGV2ICp0bXAgPSBOVUxMOworICAgICAgICAgICAgaW50IG5kID0gMDsKKworICAgICAgICAgICAg cmMgPSBsaWJ4bF9fZGV2aWNlX3VzYmRldl9saXN0X2Zvcl91c2JjdHJsKGdjLCBkb21pZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9p KHVzYmN0cmxzW2pdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmdG1wLCAmbmQpOworICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsK KworICAgICAgICAgICAgaWYgKCFuZCkgY29udGludWU7CisKKyAgICAgICAgICAgIEdDUkVBTExP Q19BUlJBWSgqbGlzdCwgKm51bSArIG5kKTsKKyAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBu ZDsgaysrKSB7CisgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldl9jb3B5KENUWCwg Kmxpc3QgKyAqbnVtLCB0bXAgKyBrKTsKKyAgICAgICAgICAgICAgICAoKm51bSkrKzsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworCitvdXQ6CisgICAg TE9HKEVSUk9SLCAiZmFpbCB0byBnZXQgYXNzaWduZWQgZGV2aWNlcyIpOworICAgIHJldHVybiBy YzsKK30KKworc3RhdGljIGJvb2wgaXNfdXNiZGV2X2luX2FycmF5KGxpYnhsX2RldmljZV91c2Jk ZXYgKnVzYmRldnMsIGludCBudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2KQoreworICAgIGludCBpOworCisgICAgZm9yIChpID0g MDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAgIGlmICh1c2JkZXZzW2ldLnUuaG9zdGRldi5ob3N0 YnVzID09IHVzYmRldi0+dS5ob3N0ZGV2Lmhvc3RidXMgJiYKKyAgICAgICAgICAgIHVzYmRldnNb aV0udS5ob3N0ZGV2Lmhvc3RhZGRyID09IHVzYmRldi0+dS5ob3N0ZGV2Lmhvc3RhZGRyKQorICAg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisv KiBjaGVjayBpZiBVU0IgZGV2aWNlIHR5cGUgaXMgYXNzaWduYWJsZSAqLworc3RhdGljIGJvb2wg aXNfdXNiZGV2X2Fzc2lnbmFibGUobGlieGxfX2djICpnYywgbGlieGxfZGV2aWNlX3VzYmRldiAq dXNiZGV2KQoreworICAgIGludCBjbGFzc2NvZGU7CisgICAgY2hhciAqZmlsZW5hbWU7CisgICAg dm9pZCAqYnVmID0gTlVMTDsKKyAgICBjaGFyICpidXNpZCA9IE5VTEw7CisKKyAgICBidXNpZCA9 IHVzYmRldl9idXNhZGRyX3RvX2J1c2lkKGdjLCB1c2JkZXYtPnUuaG9zdGRldi5ob3N0YnVzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiZGV2LT51Lmhvc3RkZXYuaG9z dGFkZHIpOworICAgIGlmICghYnVzaWQpIHJldHVybiBmYWxzZTsKKworICAgIGZpbGVuYW1lID0g R0NTUFJJTlRGKFNZU0ZTX1VTQl9ERVYgIi8lcy9iRGV2aWNlQ2xhc3MiLCBidXNpZCk7CisgICAg aWYgKGxpYnhsX19yZWFkX3N5c2ZzX2ZpbGVfY29udGVudHMoZ2MsIGZpbGVuYW1lLCAmYnVmLCBO VUxMKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2xhc3Njb2RlID0gYXRvaShidWYp OworICAgIHJldHVybiBjbGFzc2NvZGUgIT0gVVNCSFVCX0NMQVNTX0NPREU7Cit9CisKKy8qIGdl dCB1c2IgZGV2aWNlcyB1bmRlciBjZXJ0YWluIHVzYiBjb250cm9sbGVyICovCitzdGF0aWMgaW50 CitsaWJ4bF9fZGV2aWNlX3VzYmRldl9saXN0X2Zvcl91c2JjdHJsKGxpYnhsX19nYyAqZ2MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpZCB1c2JjdHJsLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2 ICoqdXNiZGV2cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpu dW0pCit7CisgICAgY29uc3QgY2hhciAqZmVfcGF0aCwgKmJlX3BhdGgsICpudW1fZGV2czsKKyAg ICBpbnQgbiwgaSwgcmM7CisKKyAgICAqdXNiZGV2cyA9IE5VTEw7CisgICAgKm51bSA9IDA7CisK KyAgICBmZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdnVzYi8lZCIsCisgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9feHNfZ2V0X2RvbXBhdGgoZ2MsIGRvbWlkKSwgdXNiY3RybCk7 CisKKyAgICBiZV9wYXRoID0gdnVzYl9iZV9mcm9tX3hzX2ZlKGdjLCBmZV9wYXRoLCBkb21pZCk7 CisgICAgaWYgKCFiZV9wYXRoKSB7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAg Z290byBvdXQ7CisgICAgfQorCisgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCBY QlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9u dW0tcG9ydHMiLCBiZV9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm51 bV9kZXZzKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgbiA9IG51bV9kZXZzID8gYXRv aShudW1fZGV2cykgOiAwOworCisgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAg ICBjb25zdCBjaGFyICpidXNpZDsKKyAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2 OworCisgICAgICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgWEJUX05VTEwsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL3BvcnQvJWQi LCBiZV9wYXRoLCBpICsgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm YnVzaWQpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIGlmIChidXNpZCAm JiBzdHJjbXAoYnVzaWQsICIiKSkgeworICAgICAgICAgICAgR0NSRUFMTE9DX0FSUkFZKCp1c2Jk ZXZzLCAqbnVtICsgMSk7CisgICAgICAgICAgICB1c2JkZXYgPSAqdXNiZGV2cyArICpudW07Cisg ICAgICAgICAgICAoKm51bSkrKzsKKyAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXZfaW5p dCh1c2JkZXYpOworICAgICAgICAgICAgdXNiZGV2LT5jdHJsID0gdXNiY3RybDsKKyAgICAgICAg ICAgIHVzYmRldi0+cG9ydCA9IGkgKyAxOworICAgICAgICAgICAgdXNiZGV2LT50eXBlID0gTElC WExfVVNCREVWX1RZUEVfSE9TVERFVjsKKyAgICAgICAgICAgIHJjID0gdXNiZGV2X2J1c2FkZHJf ZnJvbV9idXNpZChnYywgYnVzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnVzYmRldi0+dS5ob3N0ZGV2Lmhvc3RidXMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnVzYmRldi0+dS5ob3N0ZGV2Lmhvc3RhZGRyKTsKKyAg ICAgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByYyA9 IDA7CisKK291dDoKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qIGdldCBhbGwgdXNiIGRldmljZXMg b2YgdGhlIGRvbWFpbiAqLworbGlieGxfZGV2aWNlX3VzYmRldiAqCitsaWJ4bF9kZXZpY2VfdXNi ZGV2X2xpc3QobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBpbnQgKm51bSkKK3sKKyAg ICBHQ19JTklUKGN0eCk7CisgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2cyA9IE5VTEw7 CisgICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICBjaGFyICoqdXNiY3RybHM7CisgICAgdW5zaWdu ZWQgaW50IG5jID0gMDsKKyAgICBpbnQgaSwgajsKKworICAgICpudW0gPSAwOworCisgICAgcGF0 aCA9IEdDU1BSSU5URigiJXMvZGV2aWNlL3Z1c2IiLAorICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCkpOworICAgIHVzYmN0cmxzID0gbGlieGxf X3hzX2RpcmVjdG9yeShnYywgWEJUX05VTEwsIHBhdGgsICZuYyk7CisKKyAgICBmb3IgKGkgPSAw OyBpIDwgbmM7IGkrKykgeworICAgICAgICBpbnQgciwgbmQgPSAwOworICAgICAgICBsaWJ4bF9k ZXZpY2VfdXNiZGV2ICp0bXAgPSBOVUxMOworCisgICAgICAgIHIgPSBsaWJ4bF9fZGV2aWNlX3Vz YmRldl9saXN0X2Zvcl91c2JjdHJsKGdjLCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvaSh1c2JjdHJsc1tpXSksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXAsICZuZCk7CisgICAg ICAgIGlmICghciB8fCAhbmQpIGNvbnRpbnVlOworCisgICAgICAgIHVzYmRldnMgPSBsaWJ4bF9f cmVhbGxvYyhOT0dDLCB1c2JkZXZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mKCp1c2JkZXZzKSAqICgqbnVtICsgbmQpKTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8 IG5kOyBqKyspIHsKKyAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXZfY29weShjdHgsIHVz YmRldnMgKyAqbnVtLCB0bXAgKyBqKTsKKyAgICAgICAgICAgICgqbnVtKSsrOworICAgICAgICB9 CisgICAgfQorCisgICAgR0NfRlJFRTsKKyAgICByZXR1cm4gdXNiZGV2czsKK30KKworLyogZmlu ZCBmaXJzdCB1bnVzZWQgY29udHJvbGxlcjpwb3J0IGFuZCBnaXZlIHRoYXQgdG8gdXNiIGRldmlj ZSAqLworc3RhdGljIGludAorbGlieGxfX2RldmljZV91c2JkZXZfc2V0X2RlZmF1bHRfdXNiY3Ry bChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2KQoreworICAgIGxp YnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJscyA9IE5VTEw7CisgICAgaW50IG51bWN0cmwgPSAw OworICAgIGludCBpLCBqLCByYzsKKworICAgIHVzYmN0cmxzID0gbGlieGxfZGV2aWNlX3VzYmN0 cmxfbGlzdChDVFgsIGRvbWlkLCAmbnVtY3RybCk7CisgICAgaWYgKCFudW1jdHJsIHx8ICF1c2Jj dHJscykgeworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAg IH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1jdHJsOyBpKyspIHsKKyAgICAgICAgZm9yIChq ID0gMDsgaiA8IHVzYmN0cmxzW2ldLnBvcnRzOyBqKyspIHsKKyAgICAgICAgICAgIGNvbnN0IGNo YXIgKnBhdGgsICp0bXA7CisKKyAgICAgICAgICAgIHBhdGggPSBHQ1NQUklOVEYoIiVzL2JhY2tl bmQvdnVzYi8lZC8lZC9wb3J0LyVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfX3hzX2dldF9kb21wYXRoKGdjLCBMSUJYTF9UT09MU1RBQ0tfRE9NSUQpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkb21pZCwgdXNiY3RybHNbaV0uZGV2aWQsIGogKyAxKTsKKyAg ICAgICAgICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgWEJUX05VTEwsIHBhdGgs ICZ0bXApOworICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICAgICAgaWYg KHRtcCAmJiAhc3RyY21wKHRtcCwgIiIpKSB7CisgICAgICAgICAgICAgICAgdXNiZGV2LT5jdHJs ID0gdXNiY3RybHNbaV0uZGV2aWQ7CisgICAgICAgICAgICAgICAgdXNiZGV2LT5wb3J0ID0gaiAr IDE7CisgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgIGdvdG8gb3V0Owor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogbm8gYXZhaWxhYmxlIGNv bnRyb2xsZXI6cG9ydCAqLworICAgIHJjID0gRVJST1JfRkFJTDsKKworb3V0OgorICAgIGxpYnhs X2RldmljZV91c2JjdHJsX2xpc3RfZnJlZSh1c2JjdHJscywgbnVtY3RybCk7CisgICAgcmV0dXJu IHJjOworfQorCisvKiBGaWxsIGluIHVzYiBpbmZvcm1hdGlvbiB3aXRoIGRlZmF1bHQgdmFsdWUu CisgKgorICogR2VuZXJhbGx5LCBpdCBkb2VzOgorICogMSkgaWYgImNvbnRyb2xsZXIiIGlzIG5v dCBzcGVjaWZpZWQ6CisgKiAgICAtIGlmICJwb3J0IiBpcyBub3Qgc3BlY2lmaWVkLCB0cnkgdG8g ZmluZCBhbiBhdmFpbGFibGUgY29udHJvbGxlcjpwb3J0LAorICogICAgICBpZiBmb3VuZCwgdXNl IHRoYXQ7IG90aGVyd2lzZSwgY3JlYXRlIGEgbmV3IGNvbnRyb2xsZXIsIHVzZSB0aGlzCisgKiAg ICAgIGNvbnRyb2xsZXIgYW5kIGl0cyBmaXJzdCBwb3J0CisgKiAgICAtIGlmICJwb3J0IiBpcyBz cGVjaWZpZWQsIHJlcG9ydCBlcnJvci4KKyAqIDIpIGlmICJjb250cm9sbGVyIiBpcyBzcGVjaWZp ZWQsIGJ1dCBwb3J0IGlzIG5vdCBzcGVjaWZpZWQ6CisgKiAgICB0cnkgdG8gZmluZCBhbiBhdmFp bGFibGUgcG9ydCB1bmRlciB0aGlzIGNvbnRyb2xsZXIsIGlmIGZvdW5kLCB1c2UKKyAqICAgIHRo YXQsIG90aGVyd2lzZSwgcmVwb3J0IGVycm9yLgorICogMykgaWYgYm90aCAiY29udHJvbGxlciIg YW5kICJwb3J0IiBhcmUgc3BlY2lmaWVkOgorICogICAgY2hlY2sgdGhlIGNvbnRyb2xsZXI6cG9y dCBpcyBhdmFpbGFibGUsIGlmIG5vdCwgcmVwb3J0IGVycm9yLgorICovCitzdGF0aWMgaW50IGxp YnhsX19kZXZpY2VfdXNiZGV2X3NldGRlZmF1bHQobGlieGxfX2djICpnYywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1 c2JkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1 cGRhdGVfanNvbikKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoIXVzYmRldi0+dHlwZSkKKyAg ICAgICAgdXNiZGV2LT50eXBlID0gTElCWExfVVNCREVWX1RZUEVfSE9TVERFVjsKKworICAgIGlm ICh1c2JkZXYtPmN0cmwgPT0gLTEpIHsKKyAgICAgICAgaWYgKHVzYmRldi0+cG9ydCkgeworICAg ICAgICAgICAgTE9HKEVSUk9SLCAiVVNCIGNvbnRyb2xsZXIgbXVzdCBiZSBzcGVjaWZpZWQgaWYg eW91IHNwZWNpZnkgcG9ydCIpOworICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOworICAg ICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYmRldl9zZXRfZGVmYXVsdF91 c2JjdHJsKGdjLCBkb21pZCwgdXNiZGV2KTsKKyAgICAgICAgLyogSWYgbm8gZXhpc3RpbmcgY29u dHJvbGxlciB0byBob3N0IHRoaXMgdXNiIGRldmljZSwgYWRkIGEgbmV3IG9uZSAqLworICAgICAg ICBpZiAocmMpIHsKKyAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJsOwor CisgICAgICAgICAgICBHQ05FVyh1c2JjdHJsKTsKKyAgICAgICAgICAgIGxpYnhsX2RldmljZV91 c2JjdHJsX2luaXQodXNiY3RybCk7CisgICAgICAgICAgICByYyA9IGxpYnhsX19kZXZpY2VfdXNi Y3RybF9zZXRkZWZhdWx0KGdjLCBkb21pZCwgdXNiY3RybCk7CisgICAgICAgICAgICBpZiAocmMg PCAwKSBnb3RvIG91dDsKKworICAgICAgICAgICAgaWYgKHVzYmN0cmwtPmRldmlkID09IC0xKSB7 CisgICAgICAgICAgICAgICAgdXNiY3RybC0+ZGV2aWQgPSBsaWJ4bF9fZGV2aWNlX25leHRpZChn YywgZG9taWQsICJ2dXNiIik7CisgICAgICAgICAgICAgICAgaWYgKHVzYmN0cmwtPmRldmlkIDwg MCkgeworICAgICAgICAgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgICAgICAg ICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYmN0cmxfYWRkX3hlbnN0b3JlKGdjLCBkb21p ZCwgdXNiY3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1cGRhdGVfanNvbik7CisgICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisg ICAgICAgICAgICB1c2JkZXYtPmN0cmwgPSB1c2JjdHJsLT5kZXZpZDsKKyAgICAgICAgICAgIHVz YmRldi0+cG9ydCA9IDE7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvKiBBIGNv bnRyb2xsZXIgd2FzIHNwZWNpZmllZDsgbG9vayBpdCB1cCAqLworICAgICAgICBjb25zdCBjaGFy ICpmZV9wYXRoLCAqYmVfcGF0aCwgKnRtcDsKKworICAgICAgICBmZV9wYXRoID0gR0NTUFJJTlRG KCIlcy9kZXZpY2UvdnVzYi8lZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf X3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg dXNiZGV2LT5jdHJsKTsKKworICAgICAgICBiZV9wYXRoID0gdnVzYl9iZV9mcm9tX3hzX2ZlKGdj LCBmZV9wYXRoLCBkb21pZCk7CisgICAgICAgIGlmICghYmVfcGF0aCkgeworICAgICAgICAgICAg cmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAg ICAgICBpZiAodXNiZGV2LT5wb3J0KSB7CisgICAgICAgICAgICAvKiBBIHNwZWNpZmljIHBvcnQg d2FzIHJlcXVlc3RlZDsgc2VlIGlmIGl0J3MgYXZhaWxhYmxlICovCisgICAgICAgICAgICByYyA9 IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvcG9ydC8lZCIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlX3BhdGgsIHVzYmRldi0+ cG9ydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcCk7Cisg ICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgICAgICBpZiAodG1wICYmIHN0 cmNtcCh0bXAsICIiKSkgeworICAgICAgICAgICAgICAgIExPRyhFUlJPUiwgIlRoZSBjb250cm9s bGVyIHBvcnQgaXNuJ3QgYXZhaWxhYmxlIik7CisgICAgICAgICAgICAgICAgcmMgPSBFUlJPUl9G QUlMOworICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgfQorICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgLyogTm8gcG9ydCB3YXMgcmVxdWVzdGVkLiBDaG9vc2UgZnJl ZSBwb3J0LiAqLworICAgICAgICAgICAgaW50IGksIHBvcnRzOworCisgICAgICAgICAgICByYyA9 IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvbnVtLXBvcnRzIiwgYmVfcGF0aCks ICZ0bXApOworICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICAgICAgcG9y dHMgPSB0bXAgPyBhdG9pKHRtcCkgOiAwOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg cG9ydHM7IGkrKykgeworICAgICAgICAgICAgICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tl ZChnYywgWEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdDU1BSSU5URigiJXMvcG9ydC8lZCIsIGJlX3BhdGgsIGkgKyAxKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcCk7CisgICAgICAgICAgICAgICAg aWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICAgICAgICAgIGlmICh0bXAgJiYgIXN0cmNtcCh0 bXAsICIiKSkgeworICAgICAgICAgICAgICAgICAgICB1c2JkZXYtPnBvcnQgPSBpICsgMTsKKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorCisgICAgICAgICAgICBpZiAoIXVzYmRldi0+cG9ydCkgeworICAgICAgICAgICAgICAgIExP RyhFUlJPUiwgIk5vIGF2YWlsYWJsZSBwb3J0IHVuZGVyIHNwZWNpZmllZCBjb250cm9sbGVyIik7 CisgICAgICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgICAgIGdvdG8g b3V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmMgPSAwOworCitv dXQ6CisgICAgcmV0dXJuIHJjOworfQorCisvKiBBZGQgdXNiIGluZm9ybWF0aW9uIHRvIHhlbnN0 b3JlCisgKgorICogQWRkaW5nIGEgdXNiIGRldmljZSB3b24ndCBjcmVhdGUgbmV3ICd2dXNiJyBk ZXZpY2UsIGJ1dCBvbmx5IHdyaXRlCisgKiB0aGUgZGV2aWNlIGJ1c2lkIHRvIHRoZSBjb250cm9s bGVyOnBvcnQgaW4geGVuc3RvcmUuCisgKi8KK3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV91c2Jk ZXZfYWRkX3hlbnN0b3JlKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAq dXNiZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v bCB1cGRhdGVfanNvbikKK3sKKyAgICBjaGFyICpiZV9wYXRoLCAqYnVzaWQ7CisgICAgaW50IHJj OworICAgIHhzX3RyYW5zYWN0aW9uX3QgdCA9IFhCVF9OVUxMOworICAgIGxpYnhsX2RvbWFpbl9j b25maWcgZF9jb25maWc7CisgICAgbGlieGxfZGV2aWNlX3VzYmRldiB1c2JkZXZfc2F2ZWQ7Cisg ICAgbGlieGxfX2RvbWFpbl91c2VyZGF0YV9sb2NrICpsb2NrID0gTlVMTDsKKworICAgIGxpYnhs X2RvbWFpbl9jb25maWdfaW5pdCgmZF9jb25maWcpOworICAgIGxpYnhsX2RldmljZV91c2JkZXZf aW5pdCgmdXNiZGV2X3NhdmVkKTsKKyAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2X2NvcHkoQ1RYLCAm dXNiZGV2X3NhdmVkLCB1c2JkZXYpOworCisgICAgYnVzaWQgPSB1c2JkZXZfYnVzYWRkcl90b19i dXNpZChnYywgdXNiZGV2LT51Lmhvc3RkZXYuaG9zdGJ1cywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVzYmRldi0+dS5ob3N0ZGV2Lmhvc3RhZGRyKTsKKyAgICBpZiAoIWJ1 c2lkKSB7CisgICAgICAgIExPRyhERUJVRywgIkZhaWwgdG8gZ2V0IGJ1c2lkIG9mIHVzYiBkZXZp Y2UiKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKHVwZGF0ZV9qc29uKSB7 CisgICAgICAgIGxvY2sgPSBsaWJ4bF9fbG9ja19kb21haW5fdXNlcmRhdGEoZ2MsIGRvbWlkKTsK KyAgICAgICAgaWYgKCFsb2NrKSB7CisgICAgICAgICAgICByYyA9IEVSUk9SX0xPQ0tfRkFJTDsK KyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJ4bF9f Z2V0X2RvbWFpbl9jb25maWd1cmF0aW9uKGdjLCBkb21pZCwgJmRfY29uZmlnKTsKKyAgICAgICAg aWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICBERVZJQ0VfQUREKHVzYmRldiwgdXNiZGV2cywg ZG9taWQsICZ1c2JkZXZfc2F2ZWQsCisgICAgICAgICAgICAgICAgICAgQ09NUEFSRV9VU0IsICZk X2NvbmZpZyk7CisgICAgfQorCisgICAgZm9yICg7OykgeworICAgICAgICByYyA9IGxpYnhsX194 c190cmFuc2FjdGlvbl9zdGFydChnYywgJnQpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0Owor CisgICAgICAgIGlmICh1cGRhdGVfanNvbikgeworICAgICAgICAgICAgcmMgPSBsaWJ4bF9fc2V0 X2RvbWFpbl9jb25maWd1cmF0aW9uKGdjLCBkb21pZCwgJmRfY29uZmlnKTsKKyAgICAgICAgICAg IGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICBiZV9wYXRoID0gR0NTUFJJ TlRGKCIlcy9iYWNrZW5kL3Z1c2IvJWQvJWQvcG9ydC8lZCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBMSUJYTF9UT09MU1RBQ0tfRE9NSUQp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkLCB1c2JkZXYtPmN0cmwsIHVzYmRl di0+cG9ydCk7CisKKyAgICAgICAgTE9HKERFQlVHLCAiQWRkaW5nIHVzYiBkZXZpY2UgJXMgdG8g eGVuc3RvcmU6IGNvbnRyb2xsZXIgJWQsIHBvcnQgJWQiLAorICAgICAgICAgICAgYnVzaWQsIHVz YmRldi0+Y3RybCwgdXNiZGV2LT5wb3J0KTsKKworICAgICAgICByYyA9IGxpYnhsX194c193cml0 ZV9jaGVja2VkKGdjLCB0LCBiZV9wYXRoLCBidXNpZCk7CisgICAgICAgIGlmIChyYykgZ290byBv dXQ7CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmdCk7 CisgICAgICAgIGlmICghcmMpIGJyZWFrOworICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsK KyAgICB9CisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBpZiAobG9jaykgbGlieGxfX3VubG9j a19kb21haW5fdXNlcmRhdGEobG9jayk7CisgICAgbGlieGxfZGV2aWNlX3VzYmRldl9kaXNwb3Nl KCZ1c2JkZXZfc2F2ZWQpOworICAgIGxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgmZF9jb25m aWcpOworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX3VzYmRl dl9yZW1vdmVfeGVuc3RvcmUobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNi ZGV2ICp1c2JkZXYpCit7CisgICAgY2hhciAqYmVfcGF0aDsKKworICAgIGJlX3BhdGggPSBHQ1NQ UklOVEYoIiVzL2JhY2tlbmQvdnVzYi8lZC8lZC9wb3J0LyVkIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX194c19nZXRfZG9tcGF0aChnYywgTElCWExfVE9PTFNUQUNLX0RPTUlEKSwK KyAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkLCB1c2JkZXYtPmN0cmwsIHVzYmRldi0+cG9y dCk7CisKKyAgICBMT0coREVCVUcsICJSZW1vdmluZyB1c2IgZGV2aWNlIGZyb20geGVuc3RvcmU6 IGNvbnRyb2xsZXIgJWQsIHBvcnQgJWQiLAorICAgICAgICB1c2JkZXYtPmN0cmwsIHVzYmRldi0+ cG9ydCk7CisKKyAgICByZXR1cm4gbGlieGxfX3hzX3dyaXRlX2NoZWNrZWQoZ2MsIFhCVF9OVUxM LCBiZV9wYXRoLCAiIik7Cit9CisKK3N0YXRpYyBjaGFyICp1c2JkZXZfYnVzaWRfZnJvbV9jdHJs cG9ydChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXYpCit7CisgICAg cmV0dXJuIGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgR0NTUFJJTlRGKCIlcy9iYWNrZW5kL3Z1c2IvJWQvJWQvcG9ydC8lZCIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9feHNfZ2V0X2RvbXBhdGgoZ2MsIExJQlhMX1RP T0xTVEFDS19ET01JRCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkLCB1c2JkZXYt PmN0cmwsIHVzYmRldi0+cG9ydCkpOworfQorCisvKiBnZXQgb3JpZ2luYWwgZHJpdmVyIHBhdGgg b2YgdXNiIGludGVyZmFjZSwgc3RvcmVkIGluIEBkcnZwYXRoICovCitzdGF0aWMgaW50IHVzYmlu dGZfZ2V0X2RydnBhdGgobGlieGxfX2djICpnYywgY29uc3QgY2hhciAqaW50ZiwgY2hhciAqKmRy dnBhdGgpCit7CisgICAgY2hhciAqc3BhdGgsICpkcCA9IE5VTEw7CisgICAgc3RydWN0IHN0YXQg c3Q7CisgICAgaW50IHI7CisKKyAgICBzcGF0aCA9IEdDU1BSSU5URihTWVNGU19VU0JfREVWICIv JXMvZHJpdmVyIiwgaW50Zik7CisKKyAgICByID0gbHN0YXQoc3BhdGgsICZzdCk7CisgICAgaWYg KHIgPT0gMCkgeworICAgICAgICAvKiBGaW5kIHRoZSBjYW5vbmljYWwgcGF0aCB0byB0aGUgZHJp dmVyLiAqLworICAgICAgICBkcCA9IGxpYnhsX196YWxsb2MoZ2MsIFBBVEhfTUFYKTsKKyAgICAg ICAgZHAgPSByZWFscGF0aChzcGF0aCwgZHApOworICAgICAgICBpZiAoIWRwKSB7CisgICAgICAg ICAgICBMT0dFKEVSUk9SLCAiZ2V0IHJlYWxwYXRoIGZhaWxlZDogJyVzJyIsIHNwYXRoKTsKKyAg ICAgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChl cnJubyA9PSBFTk9FTlQpIHsKKyAgICAgICAgLyogZHJpdmVyIHBhdGggZG9lc24ndCBleGlzdCAq LworICAgICAgICBkcCA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HRShFUlJPUiwg ImxzdGF0IGZhaWxlZDogJyVzJyIsIHNwYXRoKTsKKyAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7 CisgICAgfQorCisgICAgKmRydnBhdGggPSBkcDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHVuYmluZF91c2JpbnRmKGxpYnhsX19nYyAqZ2MsIGNvbnN0IGNoYXIgKmludGYpCit7 CisgICAgY2hhciAqcGF0aDsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBpbnQgcmM7CisKKyAgICBw YXRoID0gR0NTUFJJTlRGKFNZU0ZTX1VTQl9ERVYgIi8lcy9kcml2ZXIvdW5iaW5kIiwgaW50Zik7 CisKKyAgICBmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpOworICAgIGlmIChmZCA8IDApIHsKKyAg ICAgICAgTE9HRShFUlJPUiwgIm9wZW4gZmlsZSBmYWlsZWQ6ICclcyciLCBwYXRoKTsKKyAgICAg ICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBpZiAo bGlieGxfd3JpdGVfZXhhY3RseShDVFgsIGZkLCBpbnRmLCBzaXplb2YoaW50ZiksIHBhdGgsIGlu dGYpKSB7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAg fQorCisgICAgcmMgPSAwOworCitvdXQ6CisgICAgaWYgKGZkID49IDApIGNsb3NlKGZkKTsKKyAg ICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYmluZF91c2JpbnRmKGxpYnhsX19nYyAqZ2Ms IGNvbnN0IGNoYXIgKmludGYsIGNvbnN0IGNoYXIgKmRydnBhdGgpCit7CisgICAgY2hhciAqcGF0 aDsKKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBpbnQgcmMsIHI7 CisKKyAgICBwYXRoID0gR0NTUFJJTlRGKCIlcy8lcyIsIGRydnBhdGgsIGludGYpOworCisgICAg LyogY2hlY2sgdGhyb3VnaCBsc3RhdCwgaWYgaW50ZiBhbHJlYWR5IGV4aXN0cyB1bmRlciBkcnZw YXRoLAorICAgICAqIGl0J3MgYWxyZWFkeSBib3VuZCwgcmV0dXJuIGRpcmVjdGx5OyBpZiBpdCBk b2Vzbid0IGV4aXN0LAorICAgICAqIGNvbnRpbnVlIHRvIGRvIGJpbmQgd29yazsgb3RoZXJ3aXNl LCByZXR1cm4gZXJyb3IuCisgICAgICovCisgICAgciA9IGxzdGF0KHBhdGgsICZzdCk7CisgICAg aWYgKHIgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHIgPCAwICYmIGVycm5vICE9 IEVOT0VOVCkKKyAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7CisKKyAgICBwYXRoID0gR0NTUFJJ TlRGKCIlcy9iaW5kIiwgZHJ2cGF0aCk7CisKKyAgICBmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkp OworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgTE9HRShFUlJPUiwgIm9wZW4gZmlsZSBmYWls ZWQ6ICclcyciLCBwYXRoKTsKKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICBnb3Rv IG91dDsKKyAgICB9CisKKyAgICBpZiAobGlieGxfd3JpdGVfZXhhY3RseShDVFgsIGZkLCBpbnRm LCBzaXplb2YoaW50ZiksIHBhdGgsIGludGYpKSB7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsK KyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgcmMgPSAwOworCitvdXQ6CisgICAgaWYg KGZkID49IDApIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qIElzIHVzYiBpbnRl cmZhY2UgYm91bmQgdG8gdXNiYmFjaz8gKi8KK3N0YXRpYyBpbnQgdXNiaW50Zl9pc19hc3NpZ25l ZChsaWJ4bF9fZ2MgKmdjLCBjaGFyICppbnRmKQoreworICAgIGNoYXIgKnNwYXRoOworICAgIGlu dCByOworICAgIHN0cnVjdCBzdGF0IHN0OworCisgICAgc3BhdGggPSBHQ1NQUklOVEYoU1lTRlNf VVNCQkFDS19EUklWRVIgIi8lcyIsIGludGYpOworICAgIHIgPSBsc3RhdChzcGF0aCwgJnN0KTsK KworICAgIGlmIChyID09IDApCisgICAgICAgIHJldHVybiAxOworICAgIGlmIChyIDwgMCAmJiBl cnJubyA9PSBFTk9FTlQpCisgICAgICAgIHJldHVybiAwOworICAgIExPR0UoRVJST1IsICJBY2Nl c3NpbmcgJXMiLCBzcGF0aCk7CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHVzYmRl dl9nZXRfYWxsX2ludGVyZmFjZXMobGlieGxfX2djICpnYywgY29uc3QgY2hhciAqYnVzaWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKippbnRmcywgaW50ICpu dW0pCit7CisgICAgRElSICpkaXI7CisgICAgY2hhciAqYnVmOworICAgIHN0cnVjdCBkaXJlbnQg KmRlX2J1ZjsKKyAgICBzdHJ1Y3QgZGlyZW50ICpkZTsKKyAgICBpbnQgcmM7CisKKyAgICAqaW50 ZnMgPSBOVUxMOworICAgICpudW0gPSAwOworCisgICAgYnVmID0gR0NTUFJJTlRGKCIlczoiLCBi dXNpZCk7CisKKyAgICBkaXIgPSBvcGVuZGlyKFNZU0ZTX1VTQl9ERVYpOworICAgIGlmICghZGly KSB7CisgICAgICAgIExPR0UoRVJST1IsICJvcGVuZGlyIGZhaWxlZDogJyVzJyIsIFNZU0ZTX1VT Ql9ERVYpOworICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKKyAgICB9CisKKyAgICBkZV9idWYg PSB6YWxsb2NfZGlyZW50KGdjLCBTWVNGU19VU0JfREVWKTsKKworICAgIGZvciAoOzspIHsKKyAg ICAgICAgaW50IHIgPSByZWFkZGlyX3IoZGlyLCBkZV9idWYsICZkZSk7CisKKyAgICAgICAgaWYg KHIpIHsKKyAgICAgICAgICAgIExPR0UoRVJST1IsICJmYWlsZWQgdG8gcmVhZGRpciAlcyIsIFNZ U0ZTX1VTQl9ERVYpOworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAg Z290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkZSkKKyAgICAgICAgICAgIGJyZWFr OworCisgICAgICAgIGlmICghc3RyY21wKGRlLT5kX25hbWUsICIuIikgfHwKKyAgICAgICAgICAg ICFzdHJjbXAoZGUtPmRfbmFtZSwgIi4uIikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg ICAgICBpZiAoIXN0cm5jbXAoZGUtPmRfbmFtZSwgYnVmLCBzdHJsZW4oYnVmKSkpIHsKKyAgICAg ICAgICAgIEdDUkVBTExPQ19BUlJBWSgqaW50ZnMsICpudW0gKyAxKTsKKyAgICAgICAgICAgICgq aW50ZnMpWypudW1dID0gbGlieGxfX3N0cmR1cChnYywgZGUtPmRfbmFtZSk7CisgICAgICAgICAg ICAoKm51bSkrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJjID0gMDsKKworb3V0OgorICAg IGNsb3NlZGlyKGRpcik7CisgICAgcmV0dXJuIHJjOworfQorCisvKiBFbmNvZGUgdXNiIGludGVy ZmFjZSBzbyB0aGF0IGl0IGNvdWxkIGJlIHdyaXR0ZW4gdG8geGVuc3RvcmUgYXMgYSBrZXkuCisg KgorICogU2luY2UgeGVuc3RvcmUga2V5IGNhbm5vdCBpbmNsdWRlICcuJyBvciAnOicsIHdlJ2xs IGNoYW5nZSAnLicgdG8gJ18nLAorICogY2hhbmdlICc6JyB0byAnQCcuIEZvciBleGFtcGxlLCAz LTE6Mi4xIHdpbGwgYmUgZW5jb2RlZCB0byAzLTFAMl8xLgorICogVGhpcyB3aWxsIGJlIHVzZWQg dG8gc2F2ZSBvcmlnaW5hbCBkcml2ZXIgb2YgVVNCIGRldmljZSB0byB4ZW5zdG9yZS4KKyAqLwor c3RhdGljIGNoYXIgKnVzYl9pbnRlcmZhY2VfeGVuc3RvcmVfZW5jb2RlKGxpYnhsX19nYyAqZ2Ms IGNvbnN0IGNoYXIgKmJ1c2lkKQoreworICAgIGNoYXIgKnN0ciA9IGxpYnhsX19zdHJkdXAoZ2Ms IGJ1c2lkKTsKKyAgICBpbnQgaSwgbGVuID0gc3RybGVuKHN0cik7CisKKyAgICBmb3IgKGkgPSAw OyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgaWYgKHN0cltpXSA9PSAnLicpIHN0cltpXSA9ICdf JzsKKyAgICAgICAgaWYgKHN0cltpXSA9PSAnOicpIHN0cltpXSA9ICdAJzsKKyAgICB9CisgICAg cmV0dXJuIHN0cjsKK30KKworLyogVW5iaW5kIFVTQiBkZXZpY2UgZnJvbSAidXNiYmFjayIgZHJp dmVyLgorICoKKyAqIElmIHRoZXJlIGFyZSBtYW55IGludGVyZmFjZXMgdW5kZXIgVVNCIGRldmlj ZSwgY2hlY2sgZWFjaCBpbnRlcmZhY2UsCisgKiB1bmJpbmQgZnJvbSAidXNiYmFjayIgZHJpdmVy LgorICovCitzdGF0aWMgaW50IHVzYmJhY2tfZGV2X3VuYXNzaWduKGxpYnhsX19nYyAqZ2MsIGNv bnN0IGNoYXIgKmJ1c2lkKQoreworICAgIGNoYXIgKippbnRmcyA9IE5VTEw7CisgICAgaW50IGks IG51bSA9IDA7CisgICAgaW50IHJjOworCisgICAgcmMgPSB1c2JkZXZfZ2V0X2FsbF9pbnRlcmZh Y2VzKGdjLCBidXNpZCwgJmludGZzLCAmbnVtKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisg ICAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAgIGNoYXIgKmludGYgPSBpbnRm c1tpXTsKKworICAgICAgICAvKiBjaGVjayBpZiB0aGUgVVNCIGludGVyZmFjZSBpcyBhbHJlYWR5 IGJvdW5kIHRvICJ1c2JiYWNrIiAqLworICAgICAgICBpZiAodXNiaW50Zl9pc19hc3NpZ25lZChn YywgaW50ZikgPiAwKSB7CisgICAgICAgICAgICAvKiB1bmJpbmQgaW50ZXJmYWNlIGZyb20gdXNi YmFjayBkcml2ZXIgKi8KKyAgICAgICAgICAgIHJjID0gdW5iaW5kX3VzYmludGYoZ2MsIGludGYp OworICAgICAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICAgICAgTE9HRShFUlJPUiwgIkNv dWxkbid0IHVuYmluZCAlcyBmcm9tIHVzYmJhY2siLCBpbnRmKTsKKyAgICAgICAgICAgICAgICBn b3RvIG91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJjID0gMDsK Kworb3V0OgorICAgIHJldHVybiByYzsKK30KKworLyogcmViaW5kIFVTQiBkZXZpY2UgdG8gb3Jp Z2luYWwgZHJpdmVyLgorICoKKyAqIElmIHRoZXJlIGFyZSBtYW55IGludGVyZmFjZXMgdW5kZXIg VVNCIGRldmljZSwgZm9yIHJlYWNoIGludGVyZmFjZSwKKyAqIHJlYWQgZHJpdmVyX3BhdGggZnJv bSB4ZW5zdG9yZSAoaWYgdGhlcmUgaXMpIGFuZCByZWJpbmQgdG8gaXRzCisgKiBvcmlnaW5hbCBk cml2ZXIsIHRoZW4gcmVtb3ZlIGRyaXZlcl9wYXRoIGluZm9ybWF0aW9uIGZyb20geGVuc3RvcmUu CisgKi8KK3N0YXRpYyBpbnQgdXNiZGV2X3JlYmluZChsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFy ICpidXNpZCkKK3sKKyAgICBjaGFyICoqaW50ZnMgPSBOVUxMOworICAgIGNoYXIgKnVzYmRldl9l bmNvZGUgPSBOVUxMOworICAgIGNoYXIgKnBhdGggPSBOVUxMOworICAgIGludCBpLCBudW0gPSAw OworICAgIGludCByYzsKKworICAgIHJjID0gdXNiZGV2X2dldF9hbGxfaW50ZXJmYWNlcyhnYywg YnVzaWQsICZpbnRmcywgJm51bSk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgIHVzYmRl dl9lbmNvZGUgPSB1c2JfaW50ZXJmYWNlX3hlbnN0b3JlX2VuY29kZShnYywgYnVzaWQpOworCisg ICAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAgIGNoYXIgKmludGYgPSBpbnRm c1tpXTsKKyAgICAgICAgY2hhciAqdXNiaW50Zl9lbmNvZGUgPSBOVUxMOworICAgICAgICBjb25z dCBjaGFyICpkcnZwYXRoOworCisgICAgICAgIC8qIHJlYmluZCBVU0IgaW50ZXJmYWNlIHRvIGl0 cyBvcmlnaW5pYWwgZHJpdmVyICovCisgICAgICAgIHVzYmludGZfZW5jb2RlID0gdXNiX2ludGVy ZmFjZV94ZW5zdG9yZV9lbmNvZGUoZ2MsIGludGYpOworICAgICAgICBwYXRoID0gR0NTUFJJTlRG KFVTQkJBQ0tfSU5GT19QQVRIICIvJXMvJXMvZHJpdmVyX3BhdGgiLAorICAgICAgICAgICAgICAg ICAgICAgICAgIHVzYmRldl9lbmNvZGUsIHVzYmludGZfZW5jb2RlKTsKKyAgICAgICAgcmMgPSBs aWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwgcGF0aCwgJmRydnBhdGgpOworICAg ICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIGlmIChkcnZwYXRoKSB7CisgICAgICAg ICAgICByYyA9IGJpbmRfdXNiaW50ZihnYywgaW50ZiwgZHJ2cGF0aCk7CisgICAgICAgICAgICBp ZiAocmMpIHsKKyAgICAgICAgICAgICAgICBMT0dFKEVSUk9SLCAiQ291bGRuJ3QgcmViaW5kICVz IHRvICVzIiwgaW50ZiwgZHJ2cGF0aCk7CisgICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK291dDoKKyAgICBwYXRoID0gR0NTUFJJTlRG KFVTQkJBQ0tfSU5GT19QQVRIICIvJXMiLCB1c2JkZXZfZW5jb2RlKTsKKyAgICBsaWJ4bF9feHNf cm1fY2hlY2tlZChnYywgWEJUX05VTEwsIHBhdGgpOworICAgIHJldHVybiByYzsKK30KKworCisv KiBCaW5kIFVTQiBkZXZpY2UgdG8gInVzYmJhY2siIGRyaXZlci4KKyAqCisgKiBJZiB0aGVyZSBh cmUgbWFueSBpbnRlcmZhY2VzIHVuZGVyIFVTQiBkZXZpY2UsIGNoZWNrIGVhY2ggaW50ZXJmYWNl LAorICogdW5iaW5kIGZyb20gb3JpZ2luYWwgZHJpdmVyIGFuZCBiaW5kIHRvICJ1c2JiYWNrIiBk cml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgdXNiYmFja19kZXZfYXNzaWduKGxpYnhsX19nYyAqZ2Ms IGNvbnN0IGNoYXIgKmJ1c2lkKQoreworICAgIGNoYXIgKippbnRmcyA9IE5VTEw7CisgICAgaW50 IG51bSA9IDAsIGk7CisgICAgaW50IHJjOworICAgIGNoYXIgKnVzYmRldl9lbmNvZGUgPSBOVUxM OworCisgICAgcmMgPSB1c2JkZXZfZ2V0X2FsbF9pbnRlcmZhY2VzKGdjLCBidXNpZCwgJmludGZz LCAmbnVtKTsKKyAgICBpZiAocmMpIHJldHVybiByYzsKKworICAgIHVzYmRldl9lbmNvZGUgPSB1 c2JfaW50ZXJmYWNlX3hlbnN0b3JlX2VuY29kZShnYywgYnVzaWQpOworCisgICAgZm9yIChpID0g MDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAgIGNoYXIgKmludGYgPSBpbnRmc1tpXTsKKyAgICAg ICAgY2hhciAqZHJ2cGF0aCA9IE5VTEw7CisKKyAgICAgICAgLyogYWxyZWFkeSBhc3NpZ25lZCB0 byB1c2JiYWNrICovCisgICAgICAgIGlmICh1c2JpbnRmX2lzX2Fzc2lnbmVkKGdjLCBpbnRmKSA+ IDApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IHVzYmludGZfZ2V0X2Ry dnBhdGgoZ2MsIGludGYsICZkcnZwYXRoKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKwor ICAgICAgICBpZiAoZHJ2cGF0aCkgeworICAgICAgICAgICAgLyogd3JpdGUgZHJpdmVyIHBhdGgg dG8geGVuc3RvcmUgZm9yIGxhdGVyIHJlYmluZGluZyAqLworICAgICAgICAgICAgY2hhciAqdXNi aW50Zl9lbmNvZGUgPSBOVUxMOworICAgICAgICAgICAgY2hhciAqcGF0aDsKKworICAgICAgICAg ICAgdXNiaW50Zl9lbmNvZGUgPSB1c2JfaW50ZXJmYWNlX3hlbnN0b3JlX2VuY29kZShnYywgaW50 Zik7CisgICAgICAgICAgICBwYXRoID0gR0NTUFJJTlRGKFVTQkJBQ0tfSU5GT19QQVRIICIvJXMv JXMvZHJpdmVyX3BhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JkZXZfZW5j b2RlLCB1c2JpbnRmX2VuY29kZSk7CisgICAgICAgICAgICByYyA9IGxpYnhsX194c193cml0ZV9j aGVja2VkKGdjLCBYQlRfTlVMTCwgcGF0aCwgZHJ2cGF0aCk7CisgICAgICAgICAgICBpZiAocmMp IGdvdG8gb3V0OworCisgICAgICAgICAgICAvKiB1bmJpbmQgaW50ZXJmYWNlIGZyb20gb3JpZ2lu YWwgZHJpdmVyICovCisgICAgICAgICAgICByYyA9IHVuYmluZF91c2JpbnRmKGdjLCBpbnRmKTsK KyAgICAgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBi aW5kIGludGVyZmFjZSB0byB1c2JiYWNrICovCisgICAgICAgIHJjID0gYmluZF91c2JpbnRmKGdj LCBpbnRmLCBTWVNGU19VU0JCQUNLX0RSSVZFUik7CisgICAgICAgIGlmIChyYykgeworICAgICAg ICAgICAgTE9HKEVSUk9SLCAiQ291bGRuJ3QgYmluZCAlcyB0byAlcyIsIGludGYsIFNZU0ZTX1VT QkJBQ0tfRFJJVkVSKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQor CisgICAgcmV0dXJuIDA7CisKK291dDoKKyAgICAvKiBzb21lIGludGVyZmFjZXMgbWlnaHQgYmUg Ym91bmQgdG8gdXNiYmFjaywgdW5iaW5kIGl0IGFuZAorICAgICAqIHJlYmluZCBpdCB0byBpdHMg b3JpZ2luYWwgZHJpdmVyCisgICAgICovCisgICAgdXNiYmFja19kZXZfdW5hc3NpZ24oZ2MsIGJ1 c2lkKTsKKyAgICB1c2JkZXZfcmViaW5kKGdjLCBidXNpZCk7CisgICAgcmV0dXJuIHJjOworfQor CitzdGF0aWMgaW50IGRvX3VzYmRldl9hZGQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2LAor ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXBkYXRlX2pzb24pCit7CisgICAgaW50IHJj OworICAgIGNoYXIgKmJ1c2lkOworICAgIGxpYnhsX2RldmljZV91c2JjdHJsIHVzYmN0cmw7Cisg ICAgbGlieGxfdXNiY3RybGluZm8gdXNiY3RybGluZm87CisKKyAgICBsaWJ4bF9kZXZpY2VfdXNi Y3RybF9pbml0KCZ1c2JjdHJsKTsKKyAgICBsaWJ4bF91c2JjdHJsaW5mb19pbml0KCZ1c2JjdHJs aW5mbyk7CisgICAgdXNiY3RybC5kZXZpZCA9IHVzYmRldi0+Y3RybDsKKworICAgIHJjID0gbGli eGxfZGV2aWNlX3VzYmN0cmxfZ2V0aW5mbyhDVFgsIGRvbWlkLCAmdXNiY3RybCwgJnVzYmN0cmxp bmZvKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgc3dpdGNoICh1c2JjdHJsaW5mby50 eXBlKSB7CisgICAgY2FzZSBMSUJYTF9VU0JDVFJMX1RZUEVfUFY6CisgICAgICAgIGJ1c2lkID0g dXNiZGV2X2J1c2FkZHJfdG9fYnVzaWQoZ2MsIHVzYmRldi0+dS5ob3N0ZGV2Lmhvc3RidXMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiZGV2LT51Lmhvc3RkZXYu aG9zdGFkZHIpOworICAgICAgICBpZiAoIWJ1c2lkKSB7CisgICAgICAgICAgICByYyA9IEVSUk9S X0ZBSUw7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0g bGlieGxfX2RldmljZV91c2JkZXZfYWRkX3hlbnN0b3JlKGdjLCBkb21pZCwgdXNiZGV2LCB1cGRh dGVfanNvbik7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgcmMgPSB1c2Ji YWNrX2Rldl9hc3NpZ24oZ2MsIGJ1c2lkKTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAg ICBsaWJ4bF9fZGV2aWNlX3VzYmRldl9yZW1vdmVfeGVuc3RvcmUoZ2MsIGRvbWlkLCB1c2JkZXYp OworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBMSUJYTF9VU0JDVFJMX1RZUEVfREVWSUNFTU9ERUw6CisgICAgZGVmYXVsdDoKKyAgICAg ICAgTE9HKEVSUk9SLCAiVW5zdXBwb3J0ZWQgdXNiIGNvbnRyb2xsZXIgdHlwZSIpOworICAgICAg ICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0g MDsKKworb3V0OgorICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2Rpc3Bvc2UoJnVzYmN0cmwpOwor ICAgIGxpYnhsX3VzYmN0cmxpbmZvX2Rpc3Bvc2UoJnVzYmN0cmxpbmZvKTsKKyAgICByZXR1cm4g cmM7Cit9CisKKy8qIEFPIG9wZXJhdGlvbiB0byBhZGQgYSB1c2IgZGV2aWNlLgorICoKKyAqIEdl bmVyYWxseSwgaXQgZG9lczoKKyAqIDEpIGNoZWNrIGlmIHRoZSB1c2IgZGV2aWNlIHR5cGUgaXMg YXNzaWduYWJsZQorICogMikgY2hlY2sgaWYgdGhlIHVzYiBkZXZpY2UgaXMgYWxyZWFkeSBhc3Np Z25lZCB0byBhIGRvbWFpbgorICogMykgYWRkICdidXNpZCcgb2YgdGhlIHVzYiBkZXZpY2UgdG8g eGVuc3RvcmUgY29udG9sbGVyL3BvcnQvLgorICogICAgKFBWVVNCIGRyaXZlciB3YXRjaGVzIHRo ZSB4ZW5zdG9yZSBjaGFuZ2VzIGFuZCB3aWxsIGRldGVjdCB0aGF0LikKKyAqIDQpIHVuYmluZCB1 c2IgZGV2aWNlIGZyb20gb3JpZ2luYWwgZHJpdmVyIGFuZCBiaW5kIHRvIHVzYmJhY2suCisgKiAg ICBJZiB1c2IgZGV2aWNlIGhhcyBtYW55IGludGVyZmFjZXMsIHRoZW46CisgKiAgICAtIHVuYmlu ZCBlYWNoIGludGVyZmFjZSBmcm9tIGl0cyBvcmlnaW5hbCBkcml2ZXIgYW5kIGJpbmQgdG8gdXNi YmFjay4KKyAqICAgIC0gc3RvcmUgdGhlIG9yaWdpbmFsIGRyaXZlciB0byB4ZW5zdG9yZSBmb3Ig bGF0ZXIgcmViaW5kaW5nIHdoZW4KKyAqICAgICAgZGV0YWNoaW5nIHRoZSBkZXZpY2UuCisgKgor ICogQmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgYW9kZXYgc2hvdWxkIGJlIHByb3Blcmx5 IGZpbGxlZDoKKyAqIGFvZGV2LT5hbywgYW9kZXYtPmNhbGxiYWNrLCBhb2Rldi0+dXBkYXRlX2pz b24sIC4uLgorICovCit2b2lkIGxpYnhsX19kZXZpY2VfdXNiZGV2X2FkZChsaWJ4bF9fZWdjICpl Z2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf ZGV2aWNlX3VzYmRldiAqdXNiZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfX2FvX2RldmljZSAqYW9kZXYpCit7CisgICAgU1RBVEVfQU9fR0MoYW9kZXYtPmFvKTsKKyAg ICBpbnQgcmM7CisgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqYXNzaWduZWQ7CisgICAgaW50IG51 bV9hc3NpZ25lZDsKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCB1c2JjdHJsOworICAgIGxpYnhs X3VzYmN0cmxpbmZvIHVzYmN0cmxpbmZvOworCisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfaW5p dCgmdXNiY3RybCk7CisgICAgbGlieGxfdXNiY3RybGluZm9faW5pdCgmdXNiY3RybGluZm8pOwor CisgICAgLyogQ3VycmVudGx5IG9ubHkgc3VwcG9ydCBhZGRpbmcgVVNCIGRldmljZSBmcm9tIERv bTAgYmFja2VuZC4KKyAgICAgKiBTbywgaWYgVVNCIGNvbnRyb2xsZXIgaXMgc3BlY2lmaWVkLCBj aGVjayBpdHMgYmFja2VuZCBkb21haW4sCisgICAgICogaWYgaXQncyBub3QgRG9tMCwgcmVwb3J0 IGVycm9yLgorICAgICAqLworICAgIGlmICh1c2JkZXYtPmN0cmwgIT0gLTEpIHsKKyAgICAgICAg dXNiY3RybC5kZXZpZCA9IHVzYmRldi0+Y3RybDsKKyAgICAgICAgcmMgPSBsaWJ4bF9kZXZpY2Vf dXNiY3RybF9nZXRpbmZvKENUWCwgZG9taWQsICZ1c2JjdHJsLCAmdXNiY3RybGluZm8pOworICAg ICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIGlmICh1c2JjdHJsaW5mby5iYWNrZW5k X2lkICE9IExJQlhMX1RPT0xTVEFDS19ET01JRCkgeworICAgICAgICAgICAgTE9HKEVSUk9SLCAi RG9uJ3Qgc3VwcG9ydCBhZGRpbmcgVVNCIGRldmljZSBmcm9tIG5vbi1Eb20wIGJhY2tlbmQiKTsK KyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAg ICAgICAgfQorICAgIH0KKworICAgIC8qIGNoZWNrIHVzYiBkZXZpY2UgaXMgYXNzaWduYWJsZSB0 eXBlICovCisgICAgaWYgKCFpc191c2JkZXZfYXNzaWduYWJsZShnYywgdXNiZGV2KSkgeworICAg ICAgICBMT0coRVJST1IsICJVU0IgZGV2aWNlIGlzIG5vdCBhc3NpZ25hYmxlLiIpOworICAgICAg ICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qIGNo ZWNrIHVzYiBkZXZpY2UgaXMgYWxyZWFkeSBhc3NpZ25lZCAqLworICAgIHJjID0gZ2V0X2Fzc2ln bmVkX2RldmljZXMoZ2MsICZhc3NpZ25lZCwgJm51bV9hc3NpZ25lZCk7CisgICAgaWYgKHJjKSB7 CisgICAgICAgIExPRyhFUlJPUiwgImNhbm5vdCBkZXRlcm1pbmUgaWYgZGV2aWNlIGlzIGFzc2ln bmVkLCIKKyAgICAgICAgICAgICAgICAgICAiIHJlZnVzaW5nIHRvIGNvbnRpbnVlIik7CisgICAg ICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmIChpc191c2JkZXZfaW5fYXJyYXkoYXNzaWdu ZWQsIG51bV9hc3NpZ25lZCwgdXNiZGV2KSkgeworICAgICAgICBMT0coRVJST1IsICJVU0IgZGV2 aWNlIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBkb21haW4iKTsKKyAgICAgICAgcmMgPSBFUlJPUl9J TlZBTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogZmlsbCBkZWZhdWx0IHZh bHVlcywgZS5nLCBpZiB1c2JkZXYtPmN0cmwgYW5kIHVzYmRldi0+cG9ydAorICAgICAqIG5vdCBz cGVjaWZpZWQsIGNob29zZSBhdmFpbGFibGUgY29udHJvbGxlcjpwb3J0IGFuZCBmaWxsIGluLiAq LworICAgIHJjID0gbGlieGxfX2RldmljZV91c2JkZXZfc2V0ZGVmYXVsdChnYywgZG9taWQsIHVz YmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW9kZXYtPnVw ZGF0ZV9qc29uKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgLyogZG8gYWN0dWFsIGFk ZGluZyB1c2IgZGV2aWNlIG9wZXJhdGlvbiAqLworICAgIHJjID0gZG9fdXNiZGV2X2FkZChnYywg ZG9taWQsIHVzYmRldiwgYW9kZXYtPnVwZGF0ZV9qc29uKTsKKworb3V0OgorICAgIGxpYnhsX2Rl dmljZV91c2JjdHJsX2Rpc3Bvc2UoJnVzYmN0cmwpOworICAgIGxpYnhsX3VzYmN0cmxpbmZvX2Rp c3Bvc2UoJnVzYmN0cmxpbmZvKTsKKyAgICBhb2Rldi0+cmMgPSByYzsKKyAgICBhb2Rldi0+Y2Fs bGJhY2soZWdjLCBhb2Rldik7CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgaW50IGRvX3VzYmRl dl9yZW1vdmUobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2KQoreworICAgIGludCByYzsK KyAgICBjaGFyICpidXNpZDsKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCB1c2JjdHJsOworICAg IGxpYnhsX3VzYmN0cmxpbmZvIHVzYmN0cmxpbmZvOworCisgICAgbGlieGxfZGV2aWNlX3VzYmN0 cmxfaW5pdCgmdXNiY3RybCk7CisgICAgbGlieGxfdXNiY3RybGluZm9faW5pdCgmdXNiY3RybGlu Zm8pOworICAgIHVzYmN0cmwuZGV2aWQgPSB1c2JkZXYtPmN0cmw7CisKKyAgICByYyA9IGxpYnhs X2RldmljZV91c2JjdHJsX2dldGluZm8oQ1RYLCBkb21pZCwgJnVzYmN0cmwsICZ1c2JjdHJsaW5m byk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgIHN3aXRjaCAodXNiY3RybGluZm8udHlw ZSkgeworICAgIGNhc2UgTElCWExfVVNCQ1RSTF9UWVBFX1BWOgorICAgICAgICBidXNpZCA9IHVz YmRldl9idXNpZF9mcm9tX2N0cmxwb3J0KGdjLCBkb21pZCwgdXNiZGV2KTsKKyAgICAgICAgaWYg KCFidXNpZCkgeworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290 byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBUaGluZ3MgYXJlIGRvbmUgaW4gb3JkZXIg b2Y6CisgICAgICAgICAqICAgdW5iaW5kIFVTQiBkZXZpY2UgZnJvbSB1c2JiYWNrLAorICAgICAg ICAgKiAgIHJlbW92ZSBVU0IgZGV2aWNlIGZyb20geGVuc3RvcmUsCisgICAgICAgICAqICAgcmVi aW5kIFVTQiBkZXZpY2UgdG8gb3JpZ2luYWwgZHJpdmVyLgorICAgICAgICAgKiBJdCBpcyB0byBi YWxhbmNlIHNpbXBsaWNpdHkgd2l0aCByb2J1c3RuZXNzIGluIGNhc2Ugb2YgZmFpbHVyZToKKyAg ICAgICAgICogLSBXZSB1bmJpbmQgYWxsIGludGVyZmFjZXMgYmVmb3JlIHJlYmluZGluZyBhbnkg aW50ZXJmYWNlcywgc28KKyAgICAgICAgICogICB0aGF0IHdlIG5ldmVyIGdldCBpbnRvIGEgc2l0 dWF0aW9uIHdoZXJlIHNvbWUgaW50ZXJmYWNlcyBhcmUKKyAgICAgICAgICogICBhc3NpZ25lZCB0 byB1c2JiYWNrIGFuZCBzb21lIGFyZSBhc3NpZ25lZCB0byB0aGUgb3JpZ2luYWwgZHJpdmVycy4K KyAgICAgICAgICogLSBXZSBhbHNvIHVuYmluZCB0aGUgaW50ZXJmYWNlcyBiZWZvcmUgcmVtb3Zp bmcgdGhlIHB2dXNiIHhlbnN0b3JlCisgICAgICAgICAqICAgbm9kZXMsIHNvIHRoYXQgaWYgdGhl IHVuYmluZCBmYWlscyBpbiB0aGUgbWlkZGxlLCB0aGUgZGV2aWNlIHN0aWxsCisgICAgICAgICAq ICAgc2hvd3MgdXAgaW4geGwgdXNiLWxpc3QsIGFuZCB0aGUgdXNlciBjYW4gcmUtdHJ5IHJlbW92 aW5nIGl0LgorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSB1c2JiYWNrX2Rldl91bmFzc2lnbihn YywgYnVzaWQpOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIExPRyhFUlJPUiwgIkVy cm9yIHJlbW92aW5nIGRldmljZSBmcm9tIGd1ZXN0LiIKKyAgICAgICAgICAgICAgICAiIFRyeSBy dW5uaW5nIHVzYmRldi1kZXRhY2ggYWdhaW4uIik7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAg ICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX2RldmljZV91c2JkZXZfcmVtb3ZlX3hlbnN0 b3JlKGdjLCBkb21pZCwgdXNiZGV2KTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBM T0coRVJST1IsICJFcnJvciByZW1vdmluZyBkZXZpY2UgZnJvbSBndWVzdC4iCisgICAgICAgICAg ICAgICAgIiBUcnkgcnVubmluZyB1c2JkZXYtZGV0YWNoIGFnYWluLiIpOworICAgICAgICAgICAg Z290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICByYyA9IHVzYmRldl9yZWJpbmQoZ2MsIGJ1 c2lkKTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBMT0coRVJST1IsICJVU0IgZGV2 aWNlIHJlbW92ZWQgZnJvbSBndWVzdCwgYnV0IGNvdWxkbid0IgorICAgICAgICAgICAgICAgICIg cmUtYmluZCB0byBkb21haW4gMC4gVHJ5IHJlbW92aW5nIGFuZCByZS1pbnNlcnRpbmciCisgICAg ICAgICAgICAgICAgIiB0aGUgVVNCIGRldmljZSBvciByZWxvYWRpbmcgdGhlIGRyaXZlciBtb2R1 bGVzLiIpOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICBicmVh azsKKyAgICBjYXNlIExJQlhMX1VTQkNUUkxfVFlQRV9ERVZJQ0VNT0RFTDoKKyAgICBkZWZhdWx0 OgorICAgICAgICBMT0coRVJST1IsICJVbnN1cHBvcnRlZCB1c2IgY29udHJvbGxlciB0eXBlIik7 CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisg ICAgcmMgPSAwOworCitvdXQ6CisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfZGlzcG9zZSgmdXNi Y3RybCk7CisgICAgbGlieGxfdXNiY3RybGluZm9fZGlzcG9zZSgmdXNiY3RybGluZm8pOworICAg IHJldHVybiByYzsKK30KKworLyogT3BlcmF0aW9uIHRvIHJlbW92ZSB1c2IgZGV2aWNlLgorICoK KyAqIEdlbmVyYWxseSwgaXQgZG9lczoKKyAqIDEpIGNoZWNrIGlmIHRoZSB1c2IgZGV2aWNlIGlz IGFzc2lnbmVkIHRvIHRoZSBkb21haW4KKyAqIDIpIHJlbW92ZSB0aGUgdXNiIGRldmljZSBmcm9t IHhlbnN0b3JlIGNvbnRyb2xsZXIvcG9ydC4KKyAqIDMpIHVuYmluZCB1c2IgZGV2aWNlIGZyb20g dXNiYmFjayBhbmQgcmViaW5kIHRvIGl0cyBvcmlnaW5hbCBkcml2ZXIuCisgKiAgICBJZiB1c2Ig ZGV2aWNlIGhhcyBtYW55IGludGVyZmFjZXMsIGRvIGl0IHRvIGVhY2ggaW50ZXJmYWNlLgorICov CitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdXNiZGV2X3JlbW92ZShsaWJ4bF9fZ2MgKmdjLCB1 aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX2RldmljZV91c2JkZXYgKnVzYmRldikKK3sKKyAgICBsaWJ4bF91c2JjdHJsaW5mbyB1c2Jj dHJsaW5mbzsKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCB1c2JjdHJsOworICAgIGludCByYzsK KworICAgIGlmICh1c2JkZXYtPmN0cmwgPCAwIHx8IHVzYmRldi0+cG9ydCA8IDEpIHsKKyAgICAg ICAgTE9HKEVSUk9SLCAiSW52YWxpZCBVU0IgZGV2aWNlIik7CisgICAgICAgIHJldHVybiBFUlJP Ul9GQUlMOworICAgIH0KKworICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2luaXQoJnVzYmN0cmwp OworICAgIGxpYnhsX3VzYmN0cmxpbmZvX2luaXQoJnVzYmN0cmxpbmZvKTsKKyAgICB1c2JjdHJs LmRldmlkID0gdXNiZGV2LT5jdHJsOworCisgICAgcmMgPSBsaWJ4bF9kZXZpY2VfdXNiY3RybF9n ZXRpbmZvKENUWCwgZG9taWQsICZ1c2JjdHJsLCAmdXNiY3RybGluZm8pOworICAgIGlmIChyYykg Z290byBvdXQ7CisKKyAgICBpZiAodXNiY3RybGluZm8uYmFja2VuZF9pZCAhPSBMSUJYTF9UT09M U1RBQ0tfRE9NSUQpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiRG9uJ3Qgc3VwcG9ydCByZW1vdmlu ZyBVU0IgZGV2aWNlIGZyb20gbm9uLURvbTAgYmFja2VuZCIpOworICAgICAgICByYyA9IEVSUk9S X0lOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBkbyBhY3R1YWwgcmVt b3ZpbmcgdXNiIGRldmljZSBvcGVyYXRpb24gKi8KKyAgICByYyA9IGRvX3VzYmRldl9yZW1vdmUo Z2MsIGRvbWlkLCB1c2JkZXYpOworCitvdXQ6CisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfZGlz cG9zZSgmdXNiY3RybCk7CisgICAgbGlieGxfdXNiY3RybGluZm9fZGlzcG9zZSgmdXNiY3RybGlu Zm8pOworICAgIHJldHVybiByYzsKK30KKworaW50IGxpYnhsX2RldmljZV91c2JkZXZfcmVtb3Zl KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXYsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKKworeworICAgIEFP X0NSRUFURShjdHgsIGRvbWlkLCBhb19ob3cpOworICAgIGludCByYzsKKworICAgIHJjID0gbGli eGxfX2RldmljZV91c2JkZXZfcmVtb3ZlKGdjLCBkb21pZCwgdXNiZGV2KTsKKworICAgIGxpYnhs X19hb19jb21wbGV0ZShlZ2MsIGFvLCByYyk7CisgICAgcmV0dXJuIEFPX0lOUFJPR1JFU1M7Cit9 CisKK2ludCBsaWJ4bF9jdHJscG9ydF90b19kZXZpY2VfdXNiZGV2KGxpYnhsX2N0eCAqY3R4LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3RybCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2KQoreworICAgIEdDX0lOSVQo Y3R4KTsKKyAgICBjb25zdCBjaGFyICpkb21wYXRoLCAqZmVfcGF0aCwgKmJlX3BhdGgsICpidXNp ZDsKKyAgICBpbnQgcmM7CisKKyAgICBkb21wYXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdj LCBkb21pZCk7CisKKyAgICBmZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdnVzYi8lZCIs IGRvbXBhdGgsIGN0cmwpOworCisgICAgYmVfcGF0aCA9IHZ1c2JfYmVfZnJvbV94c19mZShnYywg ZmVfcGF0aCwgZG9taWQpOworICAgIGlmICghYmVfcGF0aCkgeworICAgICAgICByYyA9IEVSUk9S X0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gbGlieGxfX3hzX3Jl YWRfY2hlY2tlZChnYywgWEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQ UklOVEYoIiVzL3BvcnQvJWQiLCBiZV9wYXRoLCBwb3J0KSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICZidXNpZCk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgIGlmICghYnVzaWQg fHwgIXN0cmNtcChidXNpZCwgIiIpKSB7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAg ICAgZ290byBvdXQ7CisgICAgfQorCisgICAgdXNiZGV2LT5jdHJsID0gY3RybDsKKyAgICB1c2Jk ZXYtPnBvcnQgPSBwb3J0OworICAgIHVzYmRldi0+dHlwZSA9IExJQlhMX1VTQkRFVl9UWVBFX0hP U1RERVY7CisgICAgcmMgPSB1c2JkZXZfYnVzYWRkcl9mcm9tX2J1c2lkKGdjLCBidXNpZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzYmRldi0+dS5ob3N0ZGV2Lmhvc3Ri dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2JkZXYtPnUuaG9zdGRl di5ob3N0YWRkcik7CisKK291dDoKKyAgICBHQ19GUkVFOworICAgIHJldHVybiByYzsKK30KKy8q CisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWJhc2ljLW9mZnNldDogNAor ICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3Rvb2xz L2xpYnhsL2xpYnhsX3R5cGVzLmlkbCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbAppbmRl eCA2MzJjMDA5Li4yYTk5ZWViIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF90eXBlcy5p ZGwKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCkBAIC02MTMsNiArNjEzLDM1IEBA IGxpYnhsX2RldmljZV9yZG0gPSBTdHJ1Y3QoImRldmljZV9yZG0iLCBbCiAgICAgKCJwb2xpY3ki LCBsaWJ4bF9yZG1fcmVzZXJ2ZV9wb2xpY3kpLAogICAgIF0pCiAKK2xpYnhsX3VzYmN0cmxfdHlw ZSA9IEVudW1lcmF0aW9uKCJ1c2JjdHJsX3R5cGUiLCBbCisgICAgKDAsICJBVVRPIiksCisgICAg KDEsICJQViIpLAorICAgICgyLCAiREVWSUNFTU9ERUwiKSwKKyAgICBdKQorCitsaWJ4bF91c2Jk ZXZfdHlwZSA9IEVudW1lcmF0aW9uKCJ1c2JkZXZfdHlwZSIsIFsKKyAgICAoMSwgImhvc3RkZXYi KSwKKyAgICBdKQorCitsaWJ4bF9kZXZpY2VfdXNiY3RybCA9IFN0cnVjdCgiZGV2aWNlX3VzYmN0 cmwiLCBbCisgICAgKCJ0eXBlIiwgbGlieGxfdXNiY3RybF90eXBlKSwKKyAgICAoImRldmlkIiwg bGlieGxfZGV2aWQpLAorICAgICgidmVyc2lvbiIsIGludGVnZXIpLAorICAgICgicG9ydHMiLCBp bnRlZ2VyKSwKKyAgICAoImJhY2tlbmRfZG9taWQiLCBsaWJ4bF9kb21pZCksCisgICAgKCJiYWNr ZW5kX2RvbW5hbWUiLCBzdHJpbmcpLAorICAgXSkKKworbGlieGxfZGV2aWNlX3VzYmRldiA9IFN0 cnVjdCgiZGV2aWNlX3VzYmRldiIsIFsKKyAgICAoImN0cmwiLCBsaWJ4bF9kZXZpZCksCisgICAg KCJwb3J0IiwgaW50ZWdlciksCisgICAgKCJ1IiwgS2V5ZWRVbmlvbihOb25lLCBsaWJ4bF91c2Jk ZXZfdHlwZSwgInR5cGUiLAorICAgICAgICAgICBbKCJob3N0ZGV2IiwgU3RydWN0KE5vbmUsIFsK KyAgICAgICAgICAgICAgICAgKCJob3N0YnVzIiwgICB1aW50OCksCisgICAgICAgICAgICAgICAg ICgiaG9zdGFkZHIiLCAgdWludDgpXSkpLAorICAgICAgICAgICBdKSksCisgICAgXSkKKwogbGli eGxfZGV2aWNlX2R0ZGV2ID0gU3RydWN0KCJkZXZpY2VfZHRkZXYiLCBbCiAgICAgKCJwYXRoIiwg c3RyaW5nKSwKICAgICBdKQpAQCAtNjUxLDYgKzY4MCw4IEBAIGxpYnhsX2RvbWFpbl9jb25maWcg PSBTdHJ1Y3QoImRvbWFpbl9jb25maWciLCBbCiAgICAgIyBhIGNoYW5uZWwgbWFuaWZlc3RzIGFz IGEgY29uc29sZSB3aXRoIGEgbmFtZSwKICAgICAjIHNlZSBkb2NzL21pc2MvY2hhbm5lbHMudHh0 CiAgICAgKCJjaGFubmVscyIsIEFycmF5KGxpYnhsX2RldmljZV9jaGFubmVsLCAibnVtX2NoYW5u ZWxzIikpLAorICAgICgidXNiY3RybHMiLCBBcnJheShsaWJ4bF9kZXZpY2VfdXNiY3RybCwgIm51 bV91c2JjdHJscyIpKSwKKyAgICAoInVzYmRldnMiLCBBcnJheShsaWJ4bF9kZXZpY2VfdXNiZGV2 LCAibnVtX3VzYmRldnMiKSksCiAKICAgICAoIm9uX3Bvd2Vyb2ZmIiwgbGlieGxfYWN0aW9uX29u X3NodXRkb3duKSwKICAgICAoIm9uX3JlYm9vdCIsIGxpYnhsX2FjdGlvbl9vbl9zaHV0ZG93biks CkBAIC02OTQsNiArNzI1LDIxIEBAIGxpYnhsX3Z0cG1pbmZvID0gU3RydWN0KCJ2dHBtaW5mbyIs IFsKICAgICAoInV1aWQiLCBsaWJ4bF91dWlkKSwKICAgICBdLCBkaXI9RElSX09VVCkKIAorbGli eGxfdXNiY3RybGluZm8gPSBTdHJ1Y3QoInVzYmN0cmxpbmZvIiwgWworICAgICgidHlwZSIsIGxp YnhsX3VzYmN0cmxfdHlwZSksCisgICAgKCJkZXZpZCIsIGxpYnhsX2RldmlkKSwKKyAgICAoInZl cnNpb24iLCBpbnRlZ2VyKSwKKyAgICAoInBvcnRzIiwgaW50ZWdlciksCisgICAgKCJiYWNrZW5k Iiwgc3RyaW5nKSwKKyAgICAoImJhY2tlbmRfaWQiLCB1aW50MzIpLAorICAgICgiZnJvbnRlbmQi LCBzdHJpbmcpLAorICAgICgiZnJvbnRlbmRfaWQiLCB1aW50MzIpLAorICAgICgic3RhdGUiLCBp bnRlZ2VyKSwKKyAgICAoImV2dGNoIiwgaW50ZWdlciksCisgICAgKCJyZWZfdXJiIiwgaW50ZWdl ciksCisgICAgKCJyZWZfY29ubiIsIGludGVnZXIpLAorICAgIF0sIGRpcj1ESVJfT1VUKQorCiBs aWJ4bF92Y3B1aW5mbyA9IFN0cnVjdCgidmNwdWluZm8iLCBbCiAgICAgKCJ2Y3B1aWQiLCB1aW50 MzIpLAogICAgICgiY3B1IiwgdWludDMyKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhs X3R5cGVzX2ludGVybmFsLmlkbCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzX2ludGVybmFsLmlk bAppbmRleCA1ZTU1Njg1Li42OTZmNWY4IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF90 eXBlc19pbnRlcm5hbC5pZGwKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfdHlwZXNfaW50ZXJuYWwu aWRsCkBAIC0yMiw2ICsyMiw3IEBAIGxpYnhsX19kZXZpY2Vfa2luZCA9IEVudW1lcmF0aW9uKCJk ZXZpY2Vfa2luZCIsIFsKICAgICAoNiwgIlZLQkQiKSwKICAgICAoNywgIkNPTlNPTEUiKSwKICAg ICAoOCwgIlZUUE0iKSwKKyAgICAoOSwgIlZVU0IiKSwKICAgICBdKQogCiBsaWJ4bF9fY29uc29s ZV9iYWNrZW5kID0gRW51bWVyYXRpb24oImNvbnNvbGVfYmFja2VuZCIsIFsKZGlmZiAtLWdpdCBh L3Rvb2xzL2xpYnhsL2xpYnhsX3V0aWxzLmMgYi90b29scy9saWJ4bC9saWJ4bF91dGlscy5jCmlu ZGV4IGIwY2I5ZTEuLmNlYjg4MjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3V0aWxz LmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfdXRpbHMuYwpAQCAtMTMxMSw2ICsxMzExLDI0IEBA IGludCBsaWJ4bF9fcmFuZG9tX2J5dGVzKGxpYnhsX19nYyAqZ2MsIHVpbnQ4X3QgKmJ1Ziwgc2l6 ZV90IGxlbikKICAgICByZXR1cm4gcmV0OwogfQogCit2b2lkIGxpYnhsX2RldmljZV91c2JjdHJs X2xpc3RfZnJlZShsaWJ4bF9kZXZpY2VfdXNiY3RybCAqbGlzdCwgaW50IG5yKQoreworICAgaW50 IGk7CisKKyAgIGZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorICAgICAgIGxpYnhsX2RldmljZV91 c2JjdHJsX2Rpc3Bvc2UoJmxpc3RbaV0pOworICAgZnJlZShsaXN0KTsKK30KKwordm9pZCBsaWJ4 bF9kZXZpY2VfdXNiZGV2X2xpc3RfZnJlZShsaWJ4bF9kZXZpY2VfdXNiZGV2ICpsaXN0LCBpbnQg bnIpCit7CisgICBpbnQgaTsKKworICAgZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisgICAgICAg bGlieGxfZGV2aWNlX3VzYmRldl9kaXNwb3NlKCZsaXN0W2ldKTsKKyAgIGZyZWUobGlzdCk7Cit9 CisKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBtb2RlOiBDCmRpZmYgLS1naXQgYS90b29s cy9saWJ4bC9saWJ4bF91dGlscy5oIGIvdG9vbHMvbGlieGwvbGlieGxfdXRpbHMuaAppbmRleCAz MzllYmRmLi40NDk1NDE3IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF91dGlscy5oCisr KyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3V0aWxzLmgKQEAgLTc2LDYgKzc2LDExIEBAIGludCBsaWJ4 bF91dWlkX3RvX2RldmljZV92dHBtKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF91dWlkICp1dWlkLCBsaWJ4bF9kZXZp Y2VfdnRwbSAqdnRwbSk7CiBpbnQgbGlieGxfZGV2aWRfdG9fZGV2aWNlX3Z0cG0obGlieGxfY3R4 ICpjdHgsIHVpbnQzMl90IGRvbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBkZXZpZCwgbGlieGxfZGV2aWNlX3Z0cG0gKnZ0cG0pOworaW50IGxpYnhsX2RldmlkX3RvX2Rl dmljZV91c2JjdHJsKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV2aWQsIGxpYnhsX2RldmljZV91c2JjdHJsICp1 c2JjdHJsKTsKK2ludCBsaWJ4bF9jdHJscG9ydF90b19kZXZpY2VfdXNiZGV2KGxpYnhsX2N0eCAq Y3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBjdHJsLCBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldik7CiAKIGludCBsaWJ4bF9iaXRtYXBfYWxsb2Mo bGlieGxfY3R4ICpjdHgsIGxpYnhsX2JpdG1hcCAqYml0bWFwLCBpbnQgbl9iaXRzKTsKICAgICAv KiBBbGxvY2F0ZWQgYmltYXAgaXMgZnJvbSBtYWxsb2MsIGxpYnhsX2JpdG1hcF9kaXNwb3NlKCkg dG8gYmUKLS0gCjIuMS40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpo dHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK