From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bo Cao Subject: [PATCH v0 RFC 1/2] libxl: Introduce functions in libxl to add and remove USB devices for an PV guest Date: Mon, 11 Aug 2014 04:23:53 +0800 Message-ID: <1407702234-22309-2-git-send-email-caobosimon@gmail.com> References: <1407702234-22309-1-git-send-email-caobosimon@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1407702234-22309-1-git-send-email-caobosimon@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xensource.com Cc: Lars Kurth , Ian Campbell , George Dunlap , Ian Jackson , Bo Cao List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBleHBvc2VzIGEgZ2VuZXJpYyBpbnRlcmZhY2Ugd2hpY2ggY2FuIGJlIGV4cGFu ZGVkIGluIHRoZQpmdXR1cmUgdG8gaW1wbGVtZW50IFVTQiBmb3IgREVWSUNFTU9ERUwuIAoKSW4g dGhpcyBwYXRjaCwgSSBoYXZlIGltcGxlbWVudGVkIGZ1Y250aW9ucyBpbiBsaWJ4bCB0byBhZGQg YW5kIHJlbW92ZSBVU0IKZGV2aWNlcyBmb3IgYW4gUFYgZ3Vlc3QuIE1vc3Qgb2YgdGhlIGZ1Y250 aW9uIGFyZSBpbXBsZW1lbnRlZCBpbiAidG9vbHMvbGlieGwvbGlieGxfdXNiLmMiLgoKU2lnbmVk LW9mZi1ieTogU2ltb24gQ2FvIDxjYW9ib3NpbW9uQGdtYWlsLmNvbT4KLS0tCkNDOiBHZW9yZ2Ug RHVubGFwIDxnZW9yZ2UuZHVubGFwQGV1LmNpdHJpeC5jb20+CkNDOiBJYW4gSmFja3NvbiA8aWFu LmphY2tzb25AY2l0cml4LmNvbT4KQ0M6IElhbiBDYW1wYmVsbCA8aWFuLmNhbXBiZWxsQGNpdHJp eC5jb20+CkNDOiBQYXNpIEvDpHJra8OkaW5lbiA8cGFzaWtAaWtpLmZpPgpDQzogTGFycyBLdXJ0 aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgotLS0KIHRvb2xzL2xpYnhsL01ha2VmaWxlICAgICAg ICAgICAgICAgICB8ICAgIDIgKy0KIHRvb2xzL2xpYnhsL2xpYnhsLmMgICAgICAgICAgICAgICAg ICB8ICAgIDggKy0KIHRvb2xzL2xpYnhsL2xpYnhsLmggICAgICAgICAgICAgICAgICB8ICAgNjkg KysKIHRvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jICAgICAgICAgICB8ICAgNDEgKy0KIHRvb2xz L2xpYnhsL2xpYnhsX2ludGVybmFsLmggICAgICAgICB8ICAgMjYgKwogdG9vbHMvbGlieGwvbGli eGxfdHlwZXMuaWRsICAgICAgICAgIHwgICA1OSArLQogdG9vbHMvbGlieGwvbGlieGxfdHlwZXNf aW50ZXJuYWwuaWRsIHwgICAgMSArCiB0b29scy9saWJ4bC9saWJ4bF91c2IuYyAgICAgICAgICAg ICAgfCAxMjc3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDggZmlsZXMgY2hh bmdlZCwgMTQ3NCBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHRvb2xzL2xpYnhsL2xpYnhsX3VzYi5jCgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvTWFr ZWZpbGUgYi90b29scy9saWJ4bC9NYWtlZmlsZQppbmRleCA0Y2ZhMjc1Li5hNTBlNmNmIDEwMDY0 NAotLS0gYS90b29scy9saWJ4bC9NYWtlZmlsZQorKysgYi90b29scy9saWJ4bC9NYWtlZmlsZQpA QCAtNzYsNyArNzYsNyBAQCBMSUJYTF9PQkpTID0gZmxleGFycmF5Lm8gbGlieGwubyBsaWJ4bF9j cmVhdGUubyBsaWJ4bF9kbS5vIGxpYnhsX3BjaS5vIFwKIAkJCWxpYnhsX2ludGVybmFsLm8gbGli eGxfdXRpbHMubyBsaWJ4bF91dWlkLm8gXAogCQkJbGlieGxfanNvbi5vIGxpYnhsX2FvdXRpbHMu byBsaWJ4bF9udW1hLm8gXAogCQkJbGlieGxfc2F2ZV9jYWxsb3V0Lm8gX2xpYnhsX3NhdmVfbXNn c19jYWxsb3V0Lm8gXAotCQkJbGlieGxfcW1wLm8gbGlieGxfZXZlbnQubyBsaWJ4bF9mb3JrLm8g JChMSUJYTF9PQkpTLXkpCisJCQlsaWJ4bF9xbXAubyBsaWJ4bF9ldmVudC5vIGxpYnhsX2Zvcmsu byBsaWJ4bF91c2IubyAkKExJQlhMX09CSlMteSkKIExJQlhMX09CSlMgKz0gX2xpYnhsX3R5cGVz Lm8gbGlieGxfZmxhc2subyBfbGlieGxfdHlwZXNfaW50ZXJuYWwubwogCiBMSUJYTF9URVNUUyAr PSB0aW1lZGVyZWcKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsLmMgYi90b29scy9saWJ4 bC9saWJ4bC5jCmluZGV4IDkwNTRjM2IuLmVjNjM4MzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhs L2xpYnhsLmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGwuYwpAQCAtMTQzNCw2ICsxNDM0LDggQEAg dm9pZCBsaWJ4bF9fZGVzdHJveV9kb21pZChsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19kZXN0cm95 X2RvbWlkX3N0YXRlICpkaXMpCiAKICAgICBpZiAobGlieGxfX2RldmljZV9wY2lfZGVzdHJveV9h bGwoZ2MsIGRvbWlkKSA8IDApCiAgICAgICAgIExJQlhMX19MT0coY3R4LCBMSUJYTF9fTE9HX0VS Uk9SLCAicGNpIHNodXRkb3duIGZhaWxlZCBmb3IgZG9taWQgJWQiLCBkb21pZCk7CisgICAgaWYg KGxpYnhsX19kZXZpY2VfdXNiX2Rlc3Ryb3lfYWxsKGdjLCBkb21pZCkgPCAwKQorICAgICAgICAg TElCWExfX0xPRyhjdHgsIExJQlhMX19MT0dfRVJST1IsICJ1c2Igc2h1dGRvd24gZmFpbGVkIGZv ciBkb21pZCAlZCIsIGRvbWlkKTsKICAgICByYyA9IHhjX2RvbWFpbl9wYXVzZShjdHgtPnhjaCwg ZG9taWQpOwogICAgIGlmIChyYyA8IDApIHsKICAgICAgICAgTElCWExfX0xPR19FUlJOT1ZBTChj dHgsIExJQlhMX19MT0dfRVJST1IsIHJjLCAieGNfZG9tYWluX3BhdXNlIGZhaWxlZCBmb3IgJWQi LCBkb21pZCk7CkBAIC0xNzM0LDcgKzE3MzYsNyBAQCBvdXQ6CiAvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwogCiAvKiBnZW5lcmljIGNhbGxiYWNrIGZvciBkZXZpY2VzIHRoYXQgb25seSBuZWVkIHRv IHNldCBhb19jb21wbGV0ZSAqLwotc3RhdGljIHZvaWQgZGV2aWNlX2FkZHJtX2FvY29tcGxldGUo bGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fYW9fZGV2aWNlICphb2RldikKK3ZvaWQgZGV2aWNlX2Fk ZHJtX2FvY29tcGxldGUobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fYW9fZGV2aWNlICphb2RldikK IHsKICAgICBTVEFURV9BT19HQyhhb2Rldi0+YW8pOwogCkBAIC0xNzU3LDcgKzE3NTksNyBAQCBv dXQ6CiB9CiAKIC8qIGNvbW1vbiBmdW5jdGlvbiB0byBnZXQgbmV4dCBkZXZpY2UgaWQgKi8KLXN0 YXRpYyBpbnQgbGlieGxfX2RldmljZV9uZXh0aWQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9t aWQsIGNoYXIgKmRldmljZSkKK2ludCBsaWJ4bF9fZGV2aWNlX25leHRpZChsaWJ4bF9fZ2MgKmdj LCB1aW50MzJfdCBkb21pZCwgY2hhciAqZGV2aWNlKQogewogICAgIGNoYXIgKmRvbXBhdGgsICoq bDsKICAgICB1bnNpZ25lZCBpbnQgbmI7CkBAIC0xNzc2LDcgKzE3NzgsNyBAQCBzdGF0aWMgaW50 IGxpYnhsX19kZXZpY2VfbmV4dGlkKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLCBjaGFy ICpkZXZpY2UpCiAgICAgcmV0dXJuIG5leHRpZDsKIH0KIAotc3RhdGljIGludCBsaWJ4bF9fcmVz b2x2ZV9kb21pZChsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICpuYW1lLAoraW50IGxpYnhsX19y ZXNvbHZlX2RvbWlkKGxpYnhsX19nYyAqZ2MsIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpkb21pZCkKIHsKICAgICBpZiAoIW5hbWUp CmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bC5oIGIvdG9vbHMvbGlieGwvbGlieGwuaApp bmRleCAxN2I4YTdiLi42OGYwNzBjIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bC5oCisr KyBiL3Rvb2xzL2xpYnhsL2xpYnhsLmgKQEAgLTkxLDYgKzkxLDEyIEBACiAjZGVmaW5lIExJQlhM X0hBVkVfRE9NQUlOX05PREVBRkZJTklUWSAxCiAKIC8qCisgKiBMSUJYTF9IQVZFX0RFVklDRV9V U0IgaW5kaWNhdGVzIHRoZSBmdW5jdGlvbnMgZm9yIGRvaW5nIGhvdC1wbHVnIG9mCisgKiBVU0Ig ZGV2aWNlcy4KKyAqLworI2RlZmluZSBMSUJYTF9IQVZFX0RFVklDRV9VU0IgMQorCisvKgogICog TElCWExfSEFWRV9CVUlMRElORk9fSFZNX1ZFTkRPUl9ERVZJQ0UgaW5kaWNhdGVzIHRoYXQgdGhl CiAgKiBsaWJ4bF92ZW5kb3JfZGV2aWNlIGZpZWxkIGlzIHByZXNlbnQgaW4gdGhlIGh2bSBzZWN0 aW9ucyBvZgogICogbGlieGxfZG9tYWluX2J1aWxkX2luZm8uIFRoaXMgZmllbGQgdGVsbHMgbGli eGwgd2hpY2gKQEAgLTk1MCw2ICs5NTYsNjQgQEAgaW50IGxpYnhsX2Nkcm9tX2luc2VydChsaWJ4 bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsIGxpYnhsX2RldmljZV9kaXNrICpkaXNrLAogICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQogICAg ICAgICAgICAgICAgICAgICAgICBMSUJYTF9FWFRFUk5BTF9DQUxMRVJTX09OTFk7CiAKKy8qIFVT QiBDb250cm9sbGVycyovCitpbnQgbGlieGxfZGV2aWNlX3VzYmN0cmxfYWRkKGxpYnhsX2N0eCAq Y3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZp Y2VfdXNiY3RybCAqdXNiY3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4 bF9hc3luY29wX2hvdyAqYW9faG93KQorICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0VY VEVSTkFMX0NBTExFUlNfT05MWTsKKworaW50IGxpYnhsX2RldmljZV91c2JjdHJsX3JlbW92ZShs aWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKKyAgICAgICAgICAgICAgICAgICAgICAg ICBMSUJYTF9FWFRFUk5BTF9DQUxMRVJTX09OTFk7CisKK2ludCBsaWJ4bF9kZXZpY2VfdXNiY3Ry bF9kZXN0cm95KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQorICAgICAgICAgICAg ICAgICAgICAgICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNfT05MWTsKKworbGlieGxfZGV2aWNl X3VzYmN0cmwgKmxpYnhsX2RldmljZV91c2JjdHJsX2xpc3QobGlieGxfY3R4ICpjdHgsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsIGludCAqbnVtKTsKKworaW50 IGxpYnhsX2RldmlkX3RvX2RldmljZV91c2JjdHJsKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBk b21pZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldmlkLCBsaWJ4bF9kZXZp Y2VfdXNiY3RybCAqdXNiY3RybCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9F WFRFUk5BTF9DQUxMRVJTX09OTFk7CisKK2ludCBsaWJ4bF9kZXZpY2VfdXNiY3RybF9nZXRpbmZv KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX3VzYmN0cmxpbmZvICp1c2JjdHJsaW5mbykKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfRVhURVJOQUxfQ0FMTEVSU19PTkxZOworCisv KiBVU0IgRGV2aWNlcyAqLworaW50IGxpYnhsX2RldmljZV91c2JfYWRkKGxpYnhsX2N0eCAqY3R4 LCB1aW50MzJfdCBkb21pZCwgbGlieGxfZGV2aWNlX3VzYiAqdXNiLAorICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCisgICAgICAgICAgICAg ICAgICAgICAgICAgTElCWExfRVhURVJOQUxfQ0FMTEVSU19PTkxZOworCitpbnQgbGlieGxfZGV2 aWNlX3VzYl9yZW1vdmUobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBsaWJ4bF9kZXZp Y2VfdXNiICp1c2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5 bmNvcF9ob3cgKmFvX2hvdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9FWFRF Uk5BTF9DQUxMRVJTX09OTFk7CisKK2ludCBsaWJ4bF9kZXZpY2VfdXNiX2Rlc3Ryb3kobGlieGxf Y3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBsaWJ4bF9kZXZpY2VfdXNiICp1c2IsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9FWFRFUk5BTF9DQUxMRVJTX09OTFk7CisK K2xpYnhsX2RldmljZV91c2IgKmxpYnhsX2RldmljZV91c2JfbGlzdChsaWJ4bF9jdHggKmN0eCwg dWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHVzYmN0cmwsIGludCAqbnVtKTsKKworaW50IGxpYnhsX2RldmlkX3RvX2RldmljZV91c2Io bGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBkZXZpZCwgbGlieGxfZGV2aWNlX3VzYiAqdXNiKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNfT05MWTsKKworaW50IGxpYnhsX2hv c3RkZXZfdG9fZGV2aWNlX3VzYihsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldmlkLCBsaWJ4bF9kZXZpY2VfdXNiICp1c2Ip CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfRVhURVJOQUxfQ0FMTEVSU19PTkxZ OworCitpbnQgbGlieGxfaW50Zl90b19kZXZpY2VfdXNiKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJf dCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnRmLCBsaWJ4bF9k ZXZpY2VfdXNiICp1c2IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfRVhURVJO QUxfQ0FMTEVSU19PTkxZOworCitpbnQgbGlieGxfZGV2aWNlX3VzYl9nZXRpbmZvKGxpYnhsX2N0 eCAqY3R4LCBjaGFyICppbnRmLCBsaWJ4bF91c2JpbmZvICp1c2JpbmZvKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMSUJYTF9FWFRFUk5BTF9DQUxMRVJTX09OTFk7CiAvKiBOZXR3b3Jr IEludGVyZmFjZXMgKi8KIGludCBsaWJ4bF9kZXZpY2VfbmljX2FkZChsaWJ4bF9jdHggKmN0eCwg dWludDMyX3QgZG9taWQsIGxpYnhsX2RldmljZV9uaWMgKm5pYywKICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQpAQCAtMTA2NSw2ICsxMTI5 LDExIEBAIGludCBsaWJ4bF9kZXZpY2VfcGNpX2Fzc2lnbmFibGVfYWRkKGxpYnhsX2N0eCAqY3R4 LCBsaWJ4bF9kZXZpY2VfcGNpICpwY2lkZXYsIGluCiBpbnQgbGlieGxfZGV2aWNlX3BjaV9hc3Np Z25hYmxlX3JlbW92ZShsaWJ4bF9jdHggKmN0eCwgbGlieGxfZGV2aWNlX3BjaSAqcGNpZGV2LCBp bnQgcmViaW5kKTsKIGxpYnhsX2RldmljZV9wY2kgKmxpYnhsX2RldmljZV9wY2lfYXNzaWduYWJs ZV9saXN0KGxpYnhsX2N0eCAqY3R4LCBpbnQgKm51bSk7CiAKK2ludCBsaWJ4bF9kZXZpY2VfdXNi X2Fzc2lnbmFibGVfYWRkKGxpYnhsX2N0eCAqY3R4LCBsaWJ4bF9kZXZpY2VfdXNiICp1c2IsIGlu dCByZWJpbmQpOworaW50IGxpYnhsX2RldmljZV91c2JfYXNzaWduYWJsZV9yZW1vdmUobGlieGxf Y3R4ICpjdHgsIGxpYnhsX2RldmljZV91c2IgKnVzYiwgaW50IHJlYmluZCk7CitsaWJ4bF9kZXZp Y2VfdXNiICpsaWJ4bF9kZXZpY2VfdXNiX2Fzc2lnbmFibGVfbGlzdChsaWJ4bF9jdHggKmN0eCwg aW50ICpudW0pOworbGlieGxfZGV2aWNlX3VzYiAqbGlieGxfZGV2aWNlX3VzYl9hc3NpZ25lZF9s aXN0KGxpYnhsX2N0eCAqY3R4LCBpbnQgKm51bSk7CisKIC8qIENQVUlEIGhhbmRsaW5nICovCiBp bnQgbGlieGxfY3B1aWRfcGFyc2VfY29uZmlnKGxpYnhsX2NwdWlkX3BvbGljeV9saXN0ICpjcHVp ZCwgY29uc3QgY2hhciogc3RyKTsKIGludCBsaWJ4bF9jcHVpZF9wYXJzZV9jb25maWdfeGVuZChs aWJ4bF9jcHVpZF9wb2xpY3lfbGlzdCAqY3B1aWQsCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9s aWJ4bF9jcmVhdGUuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCmluZGV4IGQwMTVjZjQu LmZjNTFjNTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCisrKyBiL3Rv b2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCkBAIC02ODUsNiArNjg1LDggQEAgc3RhdGljIHZvaWQg ZG9tY3JlYXRlX2xhdW5jaF9kbShsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19tdWx0aWRldiAqYW9k ZXZzLAogCiBzdGF0aWMgdm9pZCBkb21jcmVhdGVfYXR0YWNoX3Z0cG1zKGxpYnhsX19lZ2MgKmVn YywgbGlieGxfX211bHRpZGV2ICptdWx0aWRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHJldCk7CitzdGF0aWMgdm9pZCBkb21jcmVhdGVfYXR0YWNoX3VzYnMobGli eGxfX2VnYyAqZWdjLCBsaWJ4bF9fbXVsdGlkZXYgKm11bHRpZGV2LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgcmV0KTsKIHN0YXRpYyB2b2lkIGRvbWNyZWF0ZV9hdHRh Y2hfcGNpKGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX211bHRpZGV2ICphb2RldnMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0KTsKIApAQCAtMTIzOSwxMyArMTI0MSwx MyBAQCBzdGF0aWMgdm9pZCBkb21jcmVhdGVfYXR0YWNoX3Z0cG1zKGxpYnhsX19lZ2MgKmVnYywK ICAgIGlmIChkX2NvbmZpZy0+bnVtX3Z0cG1zID4gMCkgewogICAgICAgIC8qIEF0dGFjaCB2dHBt cyAqLwogICAgICAgIGxpYnhsX19tdWx0aWRldl9iZWdpbihhbywgJmRjcy0+bXVsdGlkZXYpOwot ICAgICAgIGRjcy0+bXVsdGlkZXYuY2FsbGJhY2sgPSBkb21jcmVhdGVfYXR0YWNoX3BjaTsKKyAg ICAgICBkY3MtPm11bHRpZGV2LmNhbGxiYWNrID0gZG9tY3JlYXRlX2F0dGFjaF91c2JzOwogICAg ICAgIGxpYnhsX19hZGRfdnRwbXMoZWdjLCBhbywgZG9taWQsIGRfY29uZmlnLCAmZGNzLT5tdWx0 aWRldik7CiAgICAgICAgbGlieGxfX211bHRpZGV2X3ByZXBhcmVkKGVnYywgJmRjcy0+bXVsdGlk ZXYsIDApOwogICAgICAgIHJldHVybjsKICAgIH0KIAotICAgZG9tY3JlYXRlX2F0dGFjaF9wY2ko ZWdjLCBtdWx0aWRldiwgMCk7CisgICBkb21jcmVhdGVfYXR0YWNoX3VzYnMoZWdjLCBtdWx0aWRl diwgMCk7CiAgICByZXR1cm47CiAKIGVycm9yX291dDoKQEAgLTEyNTMsNiArMTI1NSwzOSBAQCBl cnJvcl9vdXQ6CiAgICBkb21jcmVhdGVfY29tcGxldGUoZWdjLCBkY3MsIHJldCk7CiB9CiAKK3N0 YXRpYyB2b2lkIGRvbWNyZWF0ZV9hdHRhY2hfdXNicyhsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19t dWx0aWRldiAqbXVsdGlkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBy ZXQpCit7CisgICAgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcyA9IENPTlRBSU5FUl9P RihtdWx0aWRldiwgKmRjcywgbXVsdGlkZXYpOworICAgIFNUQVRFX0FPX0dDKGRjcy0+YW8pOwor ICAgIGludCBpOworICAgIGxpYnhsX2N0eCAqY3R4ID0gQ1RYOworICAgIGludCBkb21pZCA9IGRj cy0+Z3Vlc3RfZG9taWQ7CisgICAgCisgICAgbGlieGxfZG9tYWluX2NvbmZpZyAqY29uc3QgZF9j b25maWcgPSBkY3MtPmd1ZXN0X2NvbmZpZzsKKyAgICAKKyAgICBpZiAocmV0KSB7CisgICAgICAg IExPRyhFUlJPUiwgInVuYWJsZSB0byBhZGQgdnRwbSBkZXZpY2VzIik7CisgICAgICAgIGdvdG8g ZXJyb3Jfb3V0OworICAgIH0KKyAgICAKKyAgICBmb3IgKGkgPSAwOyBpIDwgZF9jb25maWctPm51 bV91c2JzOyBpKyspIHsKKyAgICAgICAgcmV0ID0gbGlieGxfX2RldmljZV91c2JfYWRkKGdjLCBk b21pZCwgJmRfY29uZmlnLT51c2JzW2ldKTsKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAg ICAgICAgIExJQlhMX19MT0coY3R4LCBMSUJYTF9fTE9HX0VSUk9SLAorICAgICAgICAgICAgICAg ICAgICAgICAibGlieGxfX2RldmljZV91c2JfYWRkIGZhaWxlZDogJWQiLCByZXQpOworICAgICAg ICAgICAgZ290byBlcnJvcl9vdXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZG9tY3Jl YXRlX2F0dGFjaF9wY2koZWdjLCBtdWx0aWRldiwgMCk7CisgICAgcmV0dXJuOworCitlcnJvcl9v dXQ6CisgICBhc3NlcnQocmV0KTsKKyAgIGRvbWNyZWF0ZV9jb21wbGV0ZShlZ2MsIGRjcywgcmV0 KTsKK30KKwogc3RhdGljIHZvaWQgZG9tY3JlYXRlX2F0dGFjaF9wY2kobGlieGxfX2VnYyAqZWdj LCBsaWJ4bF9fbXVsdGlkZXYgKm11bHRpZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IHJldCkKIHsKQEAgLTEyNjYsNyArMTMwMSw3IEBAIHN0YXRpYyB2b2lkIGRvbWNy ZWF0ZV9hdHRhY2hfcGNpKGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX211bHRpZGV2ICptdWx0aWRl diwKICAgICBsaWJ4bF9kb21haW5fY29uZmlnICpjb25zdCBkX2NvbmZpZyA9IGRjcy0+Z3Vlc3Rf Y29uZmlnOwogCiAgICAgaWYgKHJldCkgewotICAgICAgICBMT0coRVJST1IsICJ1bmFibGUgdG8g YWRkIHZ0cG0gZGV2aWNlcyIpOworICAgICAgICBMT0coRVJST1IsICJ1bmFibGUgdG8gYWRkIHVz YiBkZXZpY2VzIik7CiAgICAgICAgIGdvdG8gZXJyb3Jfb3V0OwogICAgIH0KIApkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVy bmFsLmgKaW5kZXggYTBkNGYyNC4uNjI5YTBjMiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGli eGxfaW50ZXJuYWwuaAorKysgYi90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCkBAIC0xMDMx LDYgKzEwMzEsMTIgQEAgX2hpZGRlbiBpbnQgbGlieGxfX3dhaXRfZm9yX2JhY2tlbmQobGlieGxf X2djICpnYywgY29uc3QgY2hhciAqYmVfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKnN0YXRlKTsKIF9oaWRkZW4gaW50IGxpYnhsX19uaWNfdHlw ZShsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9fZGV2aWNlICpkZXYsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfbmljX3R5cGUgKm5pY3R5cGUpOworX2hpZGRlbiBpbnQgbGlieGxfX2Rl dmljZV9uZXh0aWQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsIGNoYXIgKmRldmljZSk7 CitfaGlkZGVuIGludCBsaWJ4bF9fcmVzb2x2ZV9kb21pZChsaWJ4bF9fZ2MgKmdjLCBjb25zdCBj aGFyICpuYW1lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpk b21pZCk7IAorX2hpZGRlbiBpbnQgbGlieGxfX2RvbWFpbl91c2JfaW5pdChsaWJ4bF9fZ2MgKmdj LCB4c190cmFuc2FjdGlvbl90IHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKmxpYnhsX3BhdGgsIHN0cnVjdCB4c19wZXJtaXNzaW9ucyAqcGVybSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBlcm1fc2l6ZSk7CiAKIC8qCiAgKiBGb3Ig ZWFjaCBhZ2dyZWdhdGUgdHlwZSB3aGljaCBjYW4gYmUgdXNlZCBhcyBhbiBpbnB1dCB3ZSBwcm92 aWRlOgpAQCAtMTA1Niw2ICsxMDYyLDggQEAgX2hpZGRlbiBpbnQgbGlieGxfX2RldmljZV92dHBt X3NldGRlZmF1bHQobGlieGxfX2djICpnYywgbGlieGxfZGV2aWNlX3Z0cG0gKnZ0cG0KIF9oaWRk ZW4gaW50IGxpYnhsX19kZXZpY2VfdmZiX3NldGRlZmF1bHQobGlieGxfX2djICpnYywgbGlieGxf ZGV2aWNlX3ZmYiAqdmZiKTsKIF9oaWRkZW4gaW50IGxpYnhsX19kZXZpY2VfdmtiX3NldGRlZmF1 bHQobGlieGxfX2djICpnYywgbGlieGxfZGV2aWNlX3ZrYiAqdmtiKTsKIF9oaWRkZW4gaW50IGxp YnhsX19kZXZpY2VfcGNpX3NldGRlZmF1bHQobGlieGxfX2djICpnYywgbGlieGxfZGV2aWNlX3Bj aSAqcGNpKTsKK19oaWRkZW4gaW50IGxpYnhsX19kZXZpY2VfdXNiY3RybF9zZXRkZWZhdWx0KGxp YnhsX19nYyAqZ2MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf ZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwsIHVpbnQzMl90IGRvbWlkKTsKIAogX2hpZGRlbiBjb25z dCBjaGFyICpsaWJ4bF9fZGV2aWNlX25pY19kZXZuYW1lKGxpYnhsX19nYyAqZ2MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsCkBA IC0yMTQ3LDYgKzIxNTUsOCBAQCBzdHJ1Y3QgbGlieGxfX2FvX2RldmljZSB7CiAKIC8qIFN0YXJ0 cyBwcmVwYXJpbmcgdG8gYWRkL3JlbW92ZSBhIGJ1bmNoIG9mIGRldmljZXMuICovCiBfaGlkZGVu IHZvaWQgbGlieGxfX211bHRpZGV2X2JlZ2luKGxpYnhsX19hbyAqYW8sIGxpYnhsX19tdWx0aWRl diopOworLyogZ2VuZXJpYyBjYWxsYmFjayBmb3IgZGV2aWNlcyB0aGF0IG9ubHkgbmVlZCB0byBz ZXQgYW9fY29tcGxldGUgKi8KK19oaWRkZW4gdm9pZCBkZXZpY2VfYWRkcm1fYW9jb21wbGV0ZShs aWJ4bF9fZWdjICplZ2MsIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KTsKIAogLyogUHJlcGFyZXMg dG8gYWRkL3JlbW92ZSBvbmUgb2YgbWFueSBkZXZpY2VzLiAgUmV0dXJucyBhIGxpYnhsX19hb19k ZXZpY2UKICAqIHdoaWNoIGhhcyBoYWQgbGlieGxfX3ByZXBhcmVfYW9fZGV2aWNlIGNhbGxlZCwg YW5kIHdoaWNoIGhhcyBhbHNvCkBAIC0yMjY2LDYgKzIyNzYsMTggQEAgX2hpZGRlbiB2b2lkIGxp YnhsX19kZXZpY2VfdnRwbV9hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3Z0cG0gKnZ0cG0s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFv ZGV2KTsKIAorLyogZnJvbSBsaWJ4bF91c2IgKi8KK19oaWRkZW4gaW50IGxpYnhsX19kZXZpY2Vf dXNiY3RybF9hZGQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwpOworX2hpZGRlbiBp bnQgbGlieGxfX2RldmljZV91c2JfYWRkKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLCAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiICp1c2IpOworX2hp ZGRlbiBpbnQgbGlieGxfX2RldmljZV91c2JfZGVzdHJveV9hbGwobGlieGxfX2djICpnYywgdWlu dDMyX3QgZG9taWQpOworX2hpZGRlbiBpbnQgbGlieGxfX2RldmljZV91c2JfYXNzaWduZWRfbGlz dChsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9kZXZpY2VfdXNiICoqbGlzdCwgaW50ICpudW0pOworX2hp ZGRlbiBpbnQgbGlieGxfX2RldmljZV91c2JfbGlzdChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBk b21pZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2Ig Kip1c2JzLCBpbnQgdXNiY3RybCwgaW50ICpudW0pOworX2hpZGRlbiBsaWJ4bF9kZXZpY2VfdXNi ICpsaWJ4bF9kZXZpY2VfdXNiX2xpc3RfYWxsKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlk LCBpbnQgKm51bSk7CitfaGlkZGVuIGludCBsaWJ4bF9fZGV2aWNlX3VzYl9zZXRkZWZhdWx0KGxp YnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLCBsaWJ4bF9kZXZpY2VfdXNiICp1c2IpOworCiAv KiBJbnRlcm5hbCBmdW5jdGlvbiB0byBjb25uZWN0IGEgdmtiIGRldmljZSAqLwogX2hpZGRlbiBp bnQgbGlieGxfX2RldmljZV92a2JfYWRkKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92a2IgKnZrYik7 CkBAIC0yNzA3LDYgKzI3MjksMTAgQEAgX2hpZGRlbiB2b2lkIGxpYnhsX19hZGRfdnRwbXMobGli eGxfX2VnYyAqZWdjLCBsaWJ4bF9fYW8gKmFvLCB1aW50MzJfdCBkb21pZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19tdWx0aWRldiAqbXVsdGlkZXYpOwogCitfaGlk ZGVuIHZvaWQgbGlieGxfX2FkZF91c2JzKGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX2FvICphbywg dWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbWFp bl9jb25maWcgKmRfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9f bXVsdGlkZXYgKm11bHRpZGV2KTsKKwogLyotLS0tLSBkZXZpY2UgbW9kZWwgY3JlYXRpb24gLS0t LS0qLwogCiAvKiBGaXJzdCBsYXllcjsgd3JhcHMgbGlieGxfX3NwYXduX3NwYXduLiAqLwpkaWZm IC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsIGIvdG9vbHMvbGlieGwvbGlieGxf dHlwZXMuaWRsCmluZGV4IGYwZjZlMzQuLjkwNTc4NjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhs L2xpYnhsX3R5cGVzLmlkbAorKysgYi90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKQEAgLTg1 LDYgKzg1LDE2IEBAIGxpYnhsX25pY190eXBlID0gRW51bWVyYXRpb24oIm5pY190eXBlIiwgWwog ICAgICgyLCAiVklGIiksCiAgICAgXSkKIAorbGlieGxfdXNiY3RybF90eXBlID0gRW51bWVyYXRp b24oInVzYmN0cmxfdHlwZSIsWworICAgICgwLCAiQVVUTyIpLAorICAgICgxLCAiUFYiKSwKKyAg ICAoMiwgIkRFVklDRU1PREVMIiksCisgICAgXSkKKworbGlieGxfdXNiX3R5cGUgPSBFbnVtZXJh dGlvbigiZGV2aWNlX3VzYl90eXBlIiwgWworICAgICgxLCAiSE9TVERFViIpLAorICAgIF0pCisK IGxpYnhsX2FjdGlvbl9vbl9zaHV0ZG93biA9IEVudW1lcmF0aW9uKCJhY3Rpb25fb25fc2h1dGRv d24iLCBbCiAgICAgKDEsICJERVNUUk9ZIiksCiAKQEAgLTMzMCw3ICszNDAsNyBAQCBsaWJ4bF9k b21haW5fYnVpbGRfaW5mbyA9IFN0cnVjdCgiZG9tYWluX2J1aWxkX2luZm8iLFsKICAgICAoImlv cG9ydHMiLCAgICAgICAgICBBcnJheShsaWJ4bF9pb3BvcnRfcmFuZ2UsICJudW1faW9wb3J0cyIp KSwKICAgICAoImlycXMiLCAgICAgICAgICAgICBBcnJheSh1aW50MzIsICJudW1faXJxcyIpKSwK ICAgICAoImlvbWVtIiwgICAgICAgICAgICBBcnJheShsaWJ4bF9pb21lbV9yYW5nZSwgIm51bV9p b21lbSIpKSwKLSAgICAoImNsYWltX21vZGUiLAkgICAgIGxpYnhsX2RlZmJvb2wpLAorICAgICgi Y2xhaW1fbW9kZSIsICAgICAgIGxpYnhsX2RlZmJvb2wpLAogICAgICgiZXZlbnRfY2hhbm5lbHMi LCAgIHVpbnQzMiksCiAgICAgKCJ1IiwgS2V5ZWRVbmlvbihOb25lLCBsaWJ4bF9kb21haW5fdHlw ZSwgInR5cGUiLAogICAgICAgICAgICAgICAgIFsoImh2bSIsIFN0cnVjdChOb25lLCBbKCJmaXJt d2FyZSIsICAgICAgICAgc3RyaW5nKSwKQEAgLTQ0OCw2ICs0NTgsMjcgQEAgbGlieGxfZGV2aWNl X3BjaSA9IFN0cnVjdCgiZGV2aWNlX3BjaSIsIFsKICAgICAoInNlaXplIiwgYm9vbCksCiAgICAg XSkKIAorbGlieGxfZGV2aWNlX3VzYmN0cmwgPSBTdHJ1Y3QoImRldmljZV91c2JjdHJsIiwgWwor ICAgICgibmFtZSIsIHN0cmluZyksCisgICAgKCJ0eXBlIiwgbGlieGxfdXNiY3RybF90eXBlKSwK KyAgICAoImJhY2tlbmRfZG9taWQiLCBsaWJ4bF9kb21pZCksCisgICAgKCJiYWNrZW5kX2RvbW5h bWUiLCBzdHJpbmcpLAorICAgICgiZGV2aWQiLCBsaWJ4bF9kZXZpZCksCisgICAgKCJ1c2JfdmVy c2lvbiIsIHVpbnQ4KSwKKyAgICAoIm51bV9wb3J0cyIsIHVpbnQ4KSwKKyAgICBdKQorCitsaWJ4 bF9kZXZpY2VfdXNiID0gU3RydWN0KCJkZXZpY2VfdXNiIiwgWworICAgICgiY3RybCIsIGludGVn ZXIpLAorICAgICgicG9ydCIsIGludGVnZXIpLAorICAgICgiaW50ZiIsIHN0cmluZyksCisgICAg KCJ1IiwgS2V5ZWRVbmlvbihOb25lLCBsaWJ4bF91c2JfdHlwZSwgInR5cGUiLAorICAgICAgICBb KCJob3N0ZGV2IiwgU3RydWN0KE5vbmUsIFsKKyAgICAgICAgICAgICgiaG9zdGJ1cyIsICAgaW50 ZWdlciksCisgICAgICAgICAgICAoImhvc3RhZGRyIiwgIGludGVnZXIpIF0pKQorICAgICAgICBd KSkKKyAgICBdKSAKKyAgICAgCiBsaWJ4bF9kZXZpY2VfdnRwbSA9IFN0cnVjdCgiZGV2aWNlX3Z0 cG0iLCBbCiAgICAgKCJiYWNrZW5kX2RvbWlkIiwgICAgbGlieGxfZG9taWQpLAogICAgICgiYmFj a2VuZF9kb21uYW1lIiwgIHN0cmluZyksCkBAIC00NjIsMTAgKzQ5MywxMCBAQCBsaWJ4bF9kb21h aW5fY29uZmlnID0gU3RydWN0KCJkb21haW5fY29uZmlnIiwgWwogICAgICgiZGlza3MiLCBBcnJh eShsaWJ4bF9kZXZpY2VfZGlzaywgIm51bV9kaXNrcyIpKSwKICAgICAoIm5pY3MiLCBBcnJheShs aWJ4bF9kZXZpY2VfbmljLCAibnVtX25pY3MiKSksCiAgICAgKCJwY2lkZXZzIiwgQXJyYXkobGli eGxfZGV2aWNlX3BjaSwgIm51bV9wY2lkZXZzIikpLAorICAgICgidXNicyIsIEFycmF5KGxpYnhs X2RldmljZV91c2IsICJudW1fdXNicyIpKSwKICAgICAoInZmYnMiLCBBcnJheShsaWJ4bF9kZXZp Y2VfdmZiLCAibnVtX3ZmYnMiKSksCiAgICAgKCJ2a2JzIiwgQXJyYXkobGlieGxfZGV2aWNlX3Zr YiwgIm51bV92a2JzIikpLAogICAgICgidnRwbXMiLCBBcnJheShsaWJ4bF9kZXZpY2VfdnRwbSwg Im51bV92dHBtcyIpKSwKLQogICAgICgib25fcG93ZXJvZmYiLCBsaWJ4bF9hY3Rpb25fb25fc2h1 dGRvd24pLAogICAgICgib25fcmVib290IiwgbGlieGxfYWN0aW9uX29uX3NodXRkb3duKSwKICAg ICAoIm9uX3dhdGNoZG9nIiwgbGlieGxfYWN0aW9uX29uX3NodXRkb3duKSwKQEAgLTUwNyw2ICs1 MzgsMzAgQEAgbGlieGxfdnRwbWluZm8gPSBTdHJ1Y3QoInZ0cG1pbmZvIiwgWwogICAgICgidXVp ZCIsIGxpYnhsX3V1aWQpLAogICAgIF0sIGRpcj1ESVJfT1VUKQogCitsaWJ4bF91c2JjdHJsaW5m byA9IFN0cnVjdCgidXNiY3RybGluZm8iLCBbCisgICAgKCJiYWNrZW5kIiwgc3RyaW5nKSwKKyAg ICAoImJhY2tlbmRfaWQiLCB1aW50MzIpLAorICAgICgiZnJvbnRlbmQiLCBzdHJpbmcpLAorICAg ICgiZnJvbnRlbmRfaWQiLCB1aW50MzIpLAorICAgICgiZGV2aWQiLCBsaWJ4bF9kZXZpZCksCisg ICAgKCJzdGF0ZSIsIGludGVnZXIpLAorICAgICgiZXZ0Y2giLCBpbnRlZ2VyKSwKKyAgICAoInZl cnNpb24iLCBpbnRlZ2VyKSwKKyAgICAoInR5cGUiLCBzdHJpbmcpLAorICAgICgicmVmX3VyYiIs IGludGVnZXIpLAorICAgICgicmVmX2Nvbm4iLCBpbnRlZ2VyKSwKKyAgICAoIm51bV9wb3J0cyIs IGludGVnZXIpLAorICAgIF0sIGRpcj1ESVJfT1VUKQorCitsaWJ4bF91c2JpbmZvID0gU3RydWN0 KCJ1c2JpbmZvIiwgWworICAgICgiYnVzIiwgaW50ZWdlciksCisgICAgKCJkZXZudW0iLCBpbnRl Z2VyKSwKKyAgICAoImlkVmVuZG9yIiwgaW50ZWdlciksCisgICAgKCJpZFByb2R1Y3QiLCBpbnRl Z2VyKSwKKyAgICAoInByb2QiLCBzdHJpbmcpLAorICAgICgibWFudWYiLCBzdHJpbmcpLAorICAg IF0sIGRpcj1ESVJfT1VUKQorCiBsaWJ4bF92Y3B1aW5mbyA9IFN0cnVjdCgidmNwdWluZm8iLCBb CiAgICAgKCJ2Y3B1aWQiLCB1aW50MzIpLAogICAgICgiY3B1IiwgdWludDMyKSwKZGlmZiAtLWdp dCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzX2ludGVybmFsLmlkbCBiL3Rvb2xzL2xpYnhsL2xp YnhsX3R5cGVzX2ludGVybmFsLmlkbAppbmRleCBhOTY0ODUxLi5jNWMxN2U3IDEwMDY0NAotLS0g YS90b29scy9saWJ4bC9saWJ4bF90eXBlc19pbnRlcm5hbC5pZGwKKysrIGIvdG9vbHMvbGlieGwv bGlieGxfdHlwZXNfaW50ZXJuYWwuaWRsCkBAIC0yMCw2ICsyMCw3IEBAIGxpYnhsX19kZXZpY2Vf a2luZCA9IEVudW1lcmF0aW9uKCJkZXZpY2Vfa2luZCIsIFsKICAgICAoNiwgIlZLQkQiKSwKICAg ICAoNywgIkNPTlNPTEUiKSwKICAgICAoOCwgIlZUUE0iKSwKKyAgICAoOSwgIlZVU0IiKSwKICAg ICBdKQogCiBsaWJ4bF9fY29uc29sZV9iYWNrZW5kID0gRW51bWVyYXRpb24oImNvbnNvbGVfYmFj a2VuZCIsIFsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3VzYi5jIGIvdG9vbHMvbGli eGwvbGlieGxfdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EwMzQ4 OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3VzYi5jCkBAIC0wLDAgKzEs MTI3NyBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMi4xIG9ubHkuIHdpdGggdGhlIHNw ZWNpYWwKKyAqIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJQ0VOU0Uu CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImxpYnhs X29zZGVwcy5oIiAvKiBtdXN0IGNvbWUgYmVmb3JlIGFueSBvdGhlciBoZWFkZXJzICovCisKKyNp bmNsdWRlICJsaWJ4bF9pbnRlcm5hbC5oIgorLy9kZWZpbmUgdGhlIHVzYiBzeXMgcGF0aAorI2Rl ZmluZSBTWVNGU19VU0JfREVWU19QQVRIICIvc3lzL2J1cy91c2IvZGV2aWNlcyIKKyNkZWZpbmUg U1lTRlNfVVNCQkFDS19EUklWRVIgIi9zeXMvYnVzL3VzYi9kcml2ZXJzL3VzYmJhY2siCisjZGVm aW5lIFVTQkhVQl9DTEFTU19DT0RFIDkKKworaW50IGxpYnhsX19kZXZpY2VfdXNiY3RybF9zZXRk ZWZhdWx0KGxpYnhsX19nYyAqZ2MsIAorICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNi Y3RybCAqdXNiY3RybCwgdWludDMyX3QgZG9taWQpCit7CisgICAgaW50IHJjOworICAgIAorICAg IGlmICghdXNiY3RybC0+dXNiX3ZlcnNpb24pCisgICAgICAgIHVzYmN0cmwtPnVzYl92ZXJzaW9u ID0gMjsKKyAgICBpZiAoIXVzYmN0cmwtPm51bV9wb3J0cykKKyAgICAgICAgdXNiY3RybC0+bnVt X3BvcnRzID0gODsKKworICAgIGlmKCF1c2JjdHJsLT5iYWNrZW5kX2RvbWlkKQorICAgICAgICB1 c2JjdHJsLT5iYWNrZW5kX2RvbWlkID0gMDsKKyAgICAKKyAgICByYyA9IGxpYnhsX19yZXNvbHZl X2RvbWlkKGdjLCB1c2JjdHJsLT5iYWNrZW5kX2RvbW5hbWUsICZ1c2JjdHJsLT5iYWNrZW5kX2Rv bWlkKTsKKyAgICBpZiAocmMgPCAwKSByZXR1cm4gcmM7CisKKyAgICBzd2l0Y2ggKGxpYnhsX19k b21haW5fdHlwZShnYywgZG9taWQpKSB7CisgICAgY2FzZSBMSUJYTF9ET01BSU5fVFlQRV9IVk06 CisgICAgICAgIGlmICghdXNiY3RybC0+dHlwZSkKKyAgICAgICAgICAgIHVzYmN0cmwtPnR5cGUg PSBMSUJYTF9VU0JDVFJMX1RZUEVfREVWSUNFTU9ERUw7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgTElCWExfRE9NQUlOX1RZUEVfUFY6CisgICAgICAgIGlmICh1c2JjdHJsLT50eXBlID09IExJ QlhMX1VTQkNUUkxfVFlQRV9ERVZJQ0VNT0RFTCkgeworICAgICAgICAgICAgTE9HKEVSUk9SLCAi dHJ5aW5nIHRvIGNyZWF0ZSBQViBndWVzdCB3aXRoIGFuIGVtdWxhdGVkIGludGVyZmFjZSIpOwor ICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOworICAgICAgICB9CisgICAgICAgIHVzYmN0 cmwtPnR5cGUgPSBMSUJYTF9VU0JDVFJMX1RZUEVfUFY7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgTElCWExfRE9NQUlOX1RZUEVfSU5WQUxJRDoKKyAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7 CisgICAgZGVmYXVsdDoKKyAgICAgICAgYWJvcnQoKTsKKyAgICB9CisgICAgcmV0dXJuIHJjOwor fQorCitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfZnJvbV91c2JjdHJsKGxpYnhsX19nYyAqZ2Ms IHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfX2RldmljZSAqZGV2aWNlKQoreworICAgIGRldmljZS0+YmFja2VuZF9kZXZp ZCAgID0gdXNiY3RybC0+ZGV2aWQ7CisgICAgZGV2aWNlLT5iYWNrZW5kX2RvbWlkICAgPSB1c2Jj dHJsLT5iYWNrZW5kX2RvbWlkOworICAgIGRldmljZS0+YmFja2VuZF9raW5kICAgID0gTElCWExf X0RFVklDRV9LSU5EX1ZVU0I7CisgICAgZGV2aWNlLT5kZXZpZCAgICAgICAgICAgPSB1c2JjdHJs LT5kZXZpZDsKKyAgICBkZXZpY2UtPmRvbWlkICAgICAgICAgICA9IGRvbWlkOworICAgIGRldmlj ZS0+a2luZCAgICAgICAgICAgID0gTElCWExfX0RFVklDRV9LSU5EX1ZVU0I7CisKKyAgIHJldHVy biAwOyAgICAKK30KKworc3RhdGljIGludCBkb19wdnVzYmN0cmxfYWRkKGxpYnhsX19nYyAqZ2Ms IHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3Vz YmN0cmwgKnVzYmN0cmwpIAoreworICAgIGZsZXhhcnJheV90ICpmcm9udDsKKyAgICBmbGV4YXJy YXlfdCAqYmFjazsKKyAgICBsaWJ4bF9fZGV2aWNlICpkZXZpY2U7CisgICAgdW5zaWduZWQgaW50 IHJjID0gMDsKKworICAgIHJjID0gbGlieGxfX2RldmljZV91c2JjdHJsX3NldGRlZmF1bHQoZ2Ms IHVzYmN0cmwsIGRvbWlkKTsKKyAgICBpZihyYykgZ290byBvdXQ7CisgICAgCisgICAgZnJvbnQg PSBmbGV4YXJyYXlfbWFrZShnYywgNCwgMSk7CisgICAgYmFjayA9IGZsZXhhcnJheV9tYWtlKGdj LCAxMiwgMSk7CisKKyAgICBpZiAodXNiY3RybC0+ZGV2aWQgPT0gLTEpIHsKKyAgICAgICAgaWYg KCh1c2JjdHJsLT5kZXZpZCA9IGxpYnhsX19kZXZpY2VfbmV4dGlkKGdjLCBkb21pZCwgInZ1c2Ii KSkgPCAwKSB7CisgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgICAgICBnb3Rv IG91dDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBHQ05FVyhkZXZpY2UpOworICAgIHJj ID0gbGlieGxfX2RldmljZV9mcm9tX3VzYmN0cmwoZ2MsIGRvbWlkLCB1c2JjdHJsLCBkZXZpY2Up OworICAgIGlmICggcmMgIT0gMCApIGdvdG8gb3V0OworCisgICAgZmxleGFycmF5X2FwcGVuZChi YWNrLCAiZnJvbnRlbmQtaWQiKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIGxpYnhsX19z cHJpbnRmKGdjLCAiJWQiLCBkb21pZCkpOworICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgIm9u bGluZSIpOworICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgIjEiKTsKKyAgICBmbGV4YXJyYXlf YXBwZW5kKGJhY2ssICJzdGF0ZSIpOworICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgbGlieGxf X3NwcmludGYoZ2MsICIlZCIsIDEpKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJ1c2It dmVyIik7CisgICAgZmxleGFycmF5X2FwcGVuZChiYWNrLCBsaWJ4bF9fc3ByaW50ZihnYywgIiVk IiwgdXNiY3RybC0+dXNiX3ZlcnNpb24pKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJu dW0tcG9ydHMiKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssIGxpYnhsX19zcHJpbnRmKGdj LCAiJWQiLCB1c2JjdHJsLT5udW1fcG9ydHMpKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ss ICJ0eXBlIik7CisgICAgc3dpdGNoKHVzYmN0cmwtPnR5cGUpIHsKKyAgICBjYXNlIExJQlhMX1VT QkNUUkxfVFlQRV9QVjp7CisgICAgICAgIGZsZXhhcnJheV9hcHBlbmQoYmFjaywgIlBWVVNCIik7 CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIExJQlhMX1VTQkNUUkxfVFlQRV9ERVZJ Q0VNT0RFTDogeworICAgICAgICBmbGV4YXJyYXlfYXBwZW5kKGJhY2ssICJJT0VNVSIpOworICAg ICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYWJvcnQoKTsKKyAgICB9 CisgICAgZmxleGFycmF5X2FwcGVuZChmcm9udCwgImJhY2tlbmQtaWQiKTsKKyAgICBmbGV4YXJy YXlfYXBwZW5kKGZyb250LCBsaWJ4bF9fc3ByaW50ZihnYywgIiVkIiwgdXNiY3RybC0+YmFja2Vu ZF9kb21pZCkpOworICAgIGZsZXhhcnJheV9hcHBlbmQoZnJvbnQsICJzdGF0ZSIpOworICAgIGZs ZXhhcnJheV9hcHBlbmQoZnJvbnQsIGxpYnhsX19zcHJpbnRmKGdjLCAiJWQiLCAxKSk7CisgICAg bGlieGxfX2RldmljZV9nZW5lcmljX2FkZChnYywgWEJUX05VTEwsIGRldmljZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19rdnNfb2ZfZmxleGFycmF5KGdjLCBiYWNr LCBiYWNrLT5jb3VudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9feHNf a3ZzX29mX2ZsZXhhcnJheShnYywgZnJvbnQsIGZyb250LT5jb3VudCksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAvKklmIHdlIGFkZCB1c2JjdHJsIGZyb20gdXNi LWFkZCwgZW5hYmxlIHRoZSBmdW5jaXRvbiBiZWxvdyB3aWxsIHJlcG9ydCBlcnJvcnMuCisgICAg ICpUaGlzIGlzIGJlY2F1c2UgdGhlIHN0YXRlIG9mIHVzYmN0cmwgY2hhbmdlIHRvbyBmYXN0IGZv ciB0aGUgZGV2aWNlX2FkZHJtX2NvbXBsZXRlIHRvIGNhdGNoLAorICAgICAqZnJvbSAyIHRvIDQu IFNpbmNlIHdlIHdvbid0IG5lZWQgaG90LXBsdWcgc2NyaXB0IGluIHRoaXMgdXNiY3RybF9hZGQs IGl0J3Mgb2theSB0byB0YWtlIGlmIG9mZi4KKyAgICBhb2Rldi0+ZGV2ID0gZGV2aWNlOworICAg IGFvZGV2LT5hY3Rpb24gPSBMSUJYTF9fREVWSUNFX0FDVElPTl9BREQ7CisgICAgLy9saWJ4bF9f d2FpdF9kZXZpY2VfY29ubmVjdGlvbihlZ2MsIGFvZGV2KTsKKyAgICAvL2FvLT5jb21wbGV0ZSA9 IDE7CisKKyAgICByYyA9IDA7CitvdXQ6CisgICAgYW9kZXYtPnJjID0gcmM7CisgICAgaWYgKHJj KSBhb2Rldi0+Y2FsbGJhY2soZWdjLCBhb2Rldik7CisgICAgcmV0dXJuIDA7CisgICAgKi8KK291 dDoKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbGlieGxfcG9ydF9hZGRfeGVuc3Rv cmUobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCkgeworICAgIGxpYnhs X2N0eCAqY3R4ID0gQ1RYOworICAgIGNoYXIgKnBhdGg7CisKKyAgICBwYXRoID0gbGlieGxfX3Nw cmludGYoZ2MsICIlcy9iYWNrZW5kL3Z1c2IvJWQvJWQvcG9ydCIsIAorICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCAwKSwgZG9taWQsIHVzYmN0cmwtPmRl dmlkKTsKKyAgICBpZiAobGlieGxfX3hzX21rZGlyKGdjLCBYQlRfTlVMTCwgcGF0aCwgTlVMTCwg MCkgKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAKKyAgICBpbnQgaSwgbnVtX3Bv cnRzID0gdXNiY3RybC0+bnVtX3BvcnRzOworICAgIGZvciAoIGkgPSAxOyBpIDw9IG51bV9wb3J0 czsgKytpKSB7CisgICAgICAgIGlmIChsaWJ4bF9feHNfd3JpdGUoZ2MsIFhCVF9OVUxMLCAKKyAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fc3ByaW50ZihnYywiJXMvJWQiLCBwYXRoLCBpKSwi JXMiLCAiIikgKSB7CisgICAgICAgICAgICBMSUJYTF9fTE9HX0VSUk5PKGN0eCwgTElCWExfX0xP R19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNyZWF0ZSBwb3J0ICVkIHRvICVz IGZhaWxlZC4iLCBpLCBwYXRoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9Cisg ICAgfQorICAgIHJldHVybiAwOworfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitp bnQgbGlieGxfX2RldmljZV91c2JjdHJsX2FkZChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21p ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2Jj dHJsKSAKK3sKKyAgICBzd2l0Y2ggKGxpYnhsX19kb21haW5fdHlwZShnYywgZG9taWQpKSB7Cisg ICAgY2FzZSBMSUJYTF9ET01BSU5fVFlQRV9IVk06CisgICAgICAgICAvKiBUT19ETyAqLworICAg ICAgICBicmVhazsKKyAgICBjYXNlIExJQlhMX0RPTUFJTl9UWVBFX1BWOgorICAgICAgICBpZiAo ZG9fcHZ1c2JjdHJsX2FkZChnYywgZG9taWQsIHVzYmN0cmwpICkgeworICAgICAgICAgICAgcmV0 dXJuIEVSUk9SX0ZBSUw7CisgICAgICAgIH0KKworICAgICAgICAvKiBBZGQgc3ViLXBvcnQgdG8g WGVuc3RvcmUgKi8KKyAgICAgICAgaWYgKGxpYnhsX3BvcnRfYWRkX3hlbnN0b3JlKGdjLCBkb21p ZCwgdXNiY3RybCkgKSB7CisgICAgICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKKyAgICAgICAg fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIExJQlhMX0RPTUFJTl9UWVBFX0lOVkFMSUQ6Cisg ICAgICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K KworaW50IGxpYnhsX2RldmljZV91c2JjdHJsX2FkZChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3Qg ZG9taWQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNi Y3RybCAqdXNiY3RybCwgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKK3sKKyAgICBB T19DUkVBVEUoY3R4LCBkb21pZCwgYW9faG93KTsKKyAgICBpbnQgcmM7IAorICAgIAorICAgIHJj ID0gbGlieGxfX2RldmljZV91c2JjdHJsX2FkZChnYywgZG9taWQsIHVzYmN0cmwpOworICAgIGxp YnhsX19hb19jb21wbGV0ZShlZ2MsIGFvLCByYyk7CisgICAgcmV0dXJuIEFPX0lOUFJPR1JFU1M7 IAorfQorCitsaWJ4bF9kZXZpY2VfdXNiY3RybCAqbGlieGxfZGV2aWNlX3VzYmN0cmxfbGlzdChs aWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsIGludCAqbnVtKQoreworICAgIEdDX0lOSVQo Y3R4KTsKKworICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJscyA9IE5VTEw7CisgICAg Y2hhciAqZmVfcGF0aCA9IE5VTEwsICpyZXN1bHQgPSBOVUxMOworICAgIGNoYXIgKipkaXIgPSBO VUxMOworICAgIHVuc2lnbmVkIGludCBuZGlycyA9IDA7CisgICAgCisgICAgKm51bSA9IDA7Cisg ICAgCisgICAgZmVfcGF0aCA9IGxpYnhsX19zcHJpbnRmKGdjLCAiJXMvZGV2aWNlL3Z1c2IiLCBs aWJ4bF9feHNfZ2V0X2RvbXBhdGgoZ2MsIGRvbWlkKSk7CisgICAgZGlyID0gbGlieGxfX3hzX2Rp cmVjdG9yeShnYywgWEJUX05VTEwsIGZlX3BhdGgsICZuZGlycyk7CisKKyAgICBpZiAoZGlyICYm IG5kaXJzKSB7CisgICAgICAgIHVzYmN0cmxzID0gbWFsbG9jKHNpemVvZigqdXNiY3RybHMpICog bmRpcnMpOworICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCogdXNiY3RybDsKKyAgICAgICAg bGlieGxfZGV2aWNlX3VzYmN0cmwqIGVuZCA9IHVzYmN0cmxzICsgbmRpcnM7CisgICAgICAgIGZv cih1c2JjdHJsID0gdXNiY3RybHM7IHVzYmN0cmwgPCBlbmQ7ICsrdXNiY3RybCwgKytkaXIsICgq bnVtKSsrKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpiZV9wYXRoID0gbGlieGxfX3hzX3Jl YWQoZ2MsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NT UFJJTlRGKCIlcy8lcy9iYWNrZW5kIiwgZmVfcGF0aCwgKmRpcikpOworCisgICAgICAgICAgICBs aWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0KHVzYmN0cmwpOworCisgICAgICAgICAgICB1c2JjdHJs LT5kZXZpZCA9IGF0b2koKmRpcik7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGxpYnhsX194c19y ZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy8lcy9iYWNrZW5kLWlkIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlX3BhdGgsICpkaXIp KTsKKyAgICAgICAgICAgIGlmKCByZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3Rv IG91dGVycjsKKyAgICAgICAgICAgIHVzYmN0cmwtPmJhY2tlbmRfZG9taWQgPSBhdG9pKHJlc3Vs dCk7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwg R0NTUFJJTlRGKCIlcy91c2ItdmVyIiwgYmVfcGF0aCkpOworICAgICAgICAgICAgdXNiY3RybC0+ dXNiX3ZlcnNpb24gPSAgYXRvaShyZXN1bHQpOworCisgICAgICAgICAgICByZXN1bHQgPSBsaWJ4 bF9feHNfcmVhZChnYywgWEJUX05VTEwsIEdDU1BSSU5URigiJXMvbnVtLXBvcnRzIiwgYmVfcGF0 aCkpOworICAgICAgICAgICAgdXNiY3RybC0+bnVtX3BvcnRzID0gYXRvaShyZXN1bHQpOworICAg ICAgIH0KKyAgICB9CisgICAgKm51bSA9IG5kaXJzOworICAgIAorICAgIHJldHVybiB1c2JjdHJs czsKK291dGVycjoKKyAgICBMSUJYTF9fTE9HKGN0eCwgTElCWExfX0xPR19FUlJPUiwgIlVuYWJs ZSB0byBsaXN0IFVTQiBDb250cm9sbGVycyIpOworICAgIHdoaWxlICgqbnVtKSB7CisgICAgICAg ICgqbnVtKS0tOworICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9kaXNwb3NlKCZ1c2JjdHJs c1sqbnVtXSk7CisgICAgfQorICAgIGZyZWUodXNiY3RybHMpOworICAgIHJldHVybiBOVUxMOwor fQorCitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdXNiX3JlbW92ZV9jb21tb24obGlieGxfX2dj ICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX2RldmljZV91c2IgKnVzYiwgaW50IGZvcmNlKTsKKworc3RhdGljIGludCBsaWJ4bF9fZGV2 aWNlX3VzYmN0cmxfcmVtb3ZlX2NvbW1vbihsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0 cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cg KmFvX2hvdywgaW50IGZvcmNlKQoreworICAgIEFPX0NSRUFURShjdHgsIGRvbWlkLCBhb19ob3cp OworICAgIGxpYnhsX19kZXZpY2UgKmRldmljZTsKKyAgICBsaWJ4bF9fYW9fZGV2aWNlICphb2Rl djsKKyAgICBpbnQgaHZtID0gMCwgcmM7CisgICAgbGlieGxfZGV2aWNlX3VzYiAqdXNiczsKKyAg ICBpbnQgaSwgbnVtdXNiID0gMDsKKyAgICAKKyAgICBHQ05FVyhkZXZpY2UpOyAKKyAgICByYyA9 IGxpYnhsX19kZXZpY2VfZnJvbV91c2JjdHJsKGdjLCBkb21pZCwgdXNiY3RybCwgZGV2aWNlKTsK KyAgICBpZihyYykgZ290byBvdXQ7CisKKyAgICBzd2l0Y2ggKGxpYnhsX19kb21haW5fdHlwZShn YywgZG9taWQpKSB7CisgICAgY2FzZSBMSUJYTF9ET01BSU5fVFlQRV9IVk06CisgICAgICAgIGh2 bSA9IDE7CisgICAgICAgIC8qIFRPX0RPICovCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTElC WExfRE9NQUlOX1RZUEVfUFY6CisgICAgICAgIC8qIFJlbW92ZSB1c2IgZGV2aXZlcyBmaXJzdCAq LworICAgICAgICByYyAgPSBsaWJ4bF9fZGV2aWNlX3VzYl9saXN0KGdjLCBkb21pZCwgJnVzYnMs IHVzYmN0cmwtPmRldmlkLCAmbnVtdXNiKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAg ICAgICAgZm9yIChpID0gMDsgaSA8IG51bXVzYjsgaSsrKSB7CisgICAgICAgICAgICBpZiAobGli eGxfX2RldmljZV91c2JfcmVtb3ZlX2NvbW1vbihnYywgZG9taWQsICZ1c2JzW2ldLCAwKSkgewor ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZGV2aWNlX3VzYl9yZW1vdmUg ZmFpbGVkLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgLyogcmVtb3ZlIHVzYmN0cmwgKi8KKyAgICAgICAgR0NORVcoYW9k ZXYpOworICAgICAgICBsaWJ4bF9fcHJlcGFyZV9hb19kZXZpY2UoYW8sIGFvZGV2KTsKKyAgICAg ICAgYW9kZXYtPmFjdGlvbiA9IExJQlhMX19ERVZJQ0VfQUNUSU9OX1JFTU9WRTsgCisgICAgICAg IGFvZGV2LT5kZXYgPSBkZXZpY2U7CisgICAgICAgIGFvZGV2LT5jYWxsYmFjayA9IGRldmljZV9h ZGRybV9hb2NvbXBsZXRlOworICAgICAgICBhb2Rldi0+Zm9yY2UgPSBmb3JjZTsKKyAgICAgICAg bGlieGxfX2luaXRpYXRlX2RldmljZV9yZW1vdmUoZWdjLCBhb2Rldik7CisgICAgICAgIGJyZWFr OworICAgIGRlZmF1bHQ6CisgICAgICAgIGFib3J0KCk7CisgICAgfQorICAgIAorb3V0OgorICAg IGlmKHJjKSByZXR1cm4gQU9fQUJPUlQocmMpOworICAgIHJldHVybiBBT19JTlBST0dSRVNTOwor fQorCitpbnQgbGlieGxfZGV2aWNlX3VzYmN0cmxfcmVtb3ZlKGxpYnhsX2N0eCAqY3R4LCB1aW50 MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNi Y3RybCAqdXNiY3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9h c3luY29wX2hvdyAqYW9faG93KQoreworICAgIHJldHVybiBsaWJ4bF9fZGV2aWNlX3VzYmN0cmxf cmVtb3ZlX2NvbW1vbihjdHgsIGRvbWlkLCB1c2JjdHJsLCBhb19ob3csIDApOworfQorCitpbnQg bGlieGxfZGV2aWNlX3VzYmN0cmxfZGVzdHJveShsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9t aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVz YmN0cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9o b3cgKmFvX2hvdykKK3sKKyAgICByZXR1cm4gbGlieGxfX2RldmljZV91c2JjdHJsX3JlbW92ZV9j b21tb24oY3R4LCBkb21pZCwgdXNiY3RybCwgYW9faG93LCAxKTsKK30KKworCitpbnQgbGlieGxf ZGV2aWNlX3VzYmN0cmxfZ2V0aW5mbyhsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2Jj dHJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF91c2JjdHJsaW5mbyAq dXNiY3RybGluZm8pCit7CisgICAgR0NfSU5JVChjdHgpOworICAgIGNoYXIgKmRvbXBhdGgsICp1 c2JjdHJscGF0aDsKKyAgICBjaGFyICp2YWw7CisKKyAgICBkb21wYXRoID0gbGlieGxfX3hzX2dl dF9kb21wYXRoKGdjLCBkb21pZCk7CisgICAgdXNiY3RybGluZm8tPmRldmlkID0gdXNiY3RybC0+ ZGV2aWQ7CisgICAgdXNiY3RybGluZm8tPm51bV9wb3J0cyA9IHVzYmN0cmwtPm51bV9wb3J0czsK KyAgICB1c2JjdHJsaW5mby0+dmVyc2lvbiA9IHVzYmN0cmwtPnVzYl92ZXJzaW9uOworCisgICAg dXNiY3RybHBhdGggPSBsaWJ4bF9fc3ByaW50ZihnYywgIiVzL2RldmljZS92dXNiLyVkIiwgZG9t cGF0aCwgdXNiY3RybGluZm8tPmRldmlkKTsKKyAgICB1c2JjdHJsaW5mby0+YmFja2VuZCA9IHhz X3JlYWQoY3R4LT54c2gsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9fc3ByaW50ZihnYywgIiVzL2JhY2tlbmQiLCB1c2JjdHJscGF0aCksIE5VTEwpOwor ICAgIGlmICghdXNiY3RybGluZm8tPmJhY2tlbmQpIHsKKyAgICAgICAgR0NfRlJFRTsKKyAgICAg ICAgcmV0dXJuIEVSUk9SX0ZBSUw7CisgICAgfQorICAgIAorICAgIHZhbCA9IGxpYnhsX194c19y ZWFkKGdjLCBYQlRfTlVMTCwgbGlieGxfX3NwcmludGYoZ2MsICIlcy9iYWNrZW5kLWlkIiwgdXNi Y3RybHBhdGgpKTsKKyAgICB1c2JjdHJsaW5mby0+YmFja2VuZF9pZCA9IHZhbCA/IHN0cnRvdWwo dmFsLCBOVUxMLCAxMCkgOiAtMTsKKyAgICB2YWwgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05V TEwsIGxpYnhsX19zcHJpbnRmKGdjLCAiJXMvc3RhdGUiLCB1c2JjdHJscGF0aCkpOworICAgIHVz YmN0cmxpbmZvLT5zdGF0ZSA9IHZhbCA/IHN0cnRvdWwodmFsLCBOVUxMLCAxMCkgOiAtMTsKKyAg ICB2YWwgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsIGxpYnhsX19zcHJpbnRmKGdjLCAi JXMvZXZlbnQtY2hhbm5lbCIsIHVzYmN0cmxwYXRoKSk7CisgICAgdXNiY3RybGluZm8tPmV2dGNo ID0gdmFsID8gc3RydG91bCh2YWwsIE5VTEwsIDEwKSA6IC0xOworICAgIHZhbCA9IGxpYnhsX194 c19yZWFkKGdjLCBYQlRfTlVMTCwgbGlieGxfX3NwcmludGYoZ2MsICIlcy91cmItcmluZy1yZWYi LCB1c2JjdHJscGF0aCkpOworICAgIHVzYmN0cmxpbmZvLT5yZWZfdXJiID0gdmFsID8gc3RydG91 bCh2YWwsIE5VTEwsIDEwKSA6IC0xOworICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRf TlVMTCwgbGlieGxfX3NwcmludGYoZ2MsICIlcy9jb25uLXJpbmctcmVmIiwgdXNiY3RybHBhdGgp KTsKKyAgICB1c2JjdHJsaW5mby0+cmVmX2Nvbm49IHZhbCA/IHN0cnRvdWwodmFsLCBOVUxMLCAx MCkgOiAtMTsKKyAgICB1c2JjdHJsaW5mby0+dHlwZSA9IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9O VUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fc3ByaW50ZihnYywg IiVzL3R5cGUiLCB1c2JjdHJsaW5mby0+YmFja2VuZCksIE5VTEwpOworICAgIHVzYmN0cmxpbmZv LT5mcm9udGVuZCA9IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfX3NwcmludGYoZ2MsICIlcy9mcm9udGVuZCIsIHVzYmN0 cmxpbmZvLT5iYWNrZW5kKSwgTlVMTCk7CisgICAgdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhC VF9OVUxMLCBsaWJ4bF9fc3ByaW50ZihnYywgIiVzL2Zyb250ZW5kLWlkIiwgdXNiY3RybGluZm8t PmJhY2tlbmQpKTsKKyAgICB1c2JjdHJsaW5mby0+ZnJvbnRlbmRfaWQgPSB2YWwgPyBzdHJ0b3Vs KHZhbCwgTlVMTCwgMTApIDogLTE7CisKKyAgICBHQ19GUkVFOworICAgIHJldHVybiAwOworfQor CitpbnQgbGlieGxfZGV2aWRfdG9fZGV2aWNlX3VzYmN0cmwobGlieGxfY3R4ICpjdHgsIHVpbnQz Ml90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXZpZCwgbGli eGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwpCit7CisgICAgR0NfSU5JVChjdHgpOworICAgIGNo YXIqIGZlX3BhdGggPSBOVUxMLCAqYmVfcGF0aCA9IE5VTEwsICp0bXA7IAorCisgICAgZmVfcGF0 aCA9IGxpYnhsX19zcHJpbnRmKGdjLCAiJXMvZGV2aWNlL3Z1c2IiLCBsaWJ4bF9feHNfZ2V0X2Rv bXBhdGgoZ2MsIGRvbWlkKSk7CisgICAgYmVfcGF0aCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRf TlVMTCwgR0NTUFJJTlRGKCIlcy8lZC9iYWNrZW5kIiwgZmVfcGF0aCwgZGV2aWQpKTsKKyAgICAK KyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0KHVzYmN0cmwpOworICAgIHVzYmN0cmwtPmRl dmlkID0gZGV2aWQ7CisgICAgdG1wID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLCBHQ1NQ UklOVEYoIiVzLyVkL2JhY2tlbmQtaWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmVfcGF0aCwgZGV2aWQpKTsKKyAgICBpZiggdG1wID09IE5V TEwpCisgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOworICAgIHVzYmN0cmwtPmJhY2tlbmRfZG9t aWQgPSBhdG9pKHRtcCk7CisKKyAgICB0bXAgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEws IEdDU1BSSU5URigiJXMvdXNiLXZlciIsIGJlX3BhdGgpKTsKKyAgICB1c2JjdHJsLT51c2JfdmVy c2lvbiA9ICBhdG9pKHRtcCk7CisKKyAgICB0bXAgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05V TEwsIEdDU1BSSU5URigiJXMvbnVtLXBvcnRzIiwgYmVfcGF0aCkpOworICAgIHVzYmN0cmwtPm51 bV9wb3J0cyA9IGF0b2kodG1wKTsKKworICAgIEdDX0ZSRUU7CisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV91c2JfYWRkX3hlbnN0b3JlKGxpYnhsX19nYyAqZ2Ms IHVpbnQzMl90IGRvbWlkLCBsaWJ4bF9kZXZpY2VfdXNiICp1c2IpCit7CisgICAgbGlieGxfY3R4 ICpjdHggPSBDVFg7IAorICAgIGNoYXIgKmJlX3BhdGg7CisgICAgCisgICAgYmVfcGF0aCA9IGxp YnhsX19zcHJpbnRmKGdjLCAiJXMvYmFja2VuZC92dXNiLyVkLyVkIiwgCisgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9feHNfZ2V0X2RvbXBhdGgoZ2MsIDApLCBkb21pZCwgdXNiLT5jdHJs KTsKKyAgICBsaWJ4bF9kb21haW5fdHlwZSBkb210eXBlID0gbGlieGxfX2RvbWFpbl90eXBlKGdj LCBkb21pZCk7CisgICAgaWYgKGRvbXR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfSU5WQUxJRCkK KyAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7CisKKyAgICBpZiAoZG9tdHlwZSA9PSBMSUJYTF9E T01BSU5fVFlQRV9QVikgeworICAgICAgICBpZiAobGlieGxfX3dhaXRfZm9yX2JhY2tlbmQoZ2Ms IGJlX3BhdGgsICI0IikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7CisgICAg fQorCisgICAgYmVfcGF0aCA9IGxpYnhsX19zcHJpbnRmKGdjLCAiJXMvcG9ydC8lZCIsIGJlX3Bh dGgsIHVzYi0+cG9ydCk7CisgICAgTElCWExfX0xPRyhjdHgsIExJQlhMX19MT0dfREVCVUcsICJB ZGRpbmcgbmV3IHVzYiBkZXZpY2UgdG8geGVuc3RvcmUiKTsgCisgICAgaWYgKGxpYnhsX194c193 cml0ZShnYywgWEJUX05VTEwsIGJlX3BhdGgsICIlcyIsIHVzYi0+aW50ZikgKQorICAgICAgICBy ZXR1cm4gMTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaWJ4bF9fZGV2 aWNlX3VzYl9yZW1vdmVfeGVuc3RvcmUobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsIGxp YnhsX2RldmljZV91c2IgKnVzYikKK3sKKyAgICBsaWJ4bF9jdHggKmN0eCA9IENUWDsKKyAgICBj aGFyICpiZV9wYXRoOworCisgICAgYmVfcGF0aCA9IGxpYnhsX19zcHJpbnRmKGdjLCAiJXMvYmFj a2VuZC92dXNiLyVkLyVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRf ZG9tcGF0aChnYywgMCksIGRvbWlkLCB1c2ItPmN0cmwpOworICAgIGxpYnhsX2RvbWFpbl90eXBl IGRvbXR5cGUgPSBsaWJ4bF9fZG9tYWluX3R5cGUoZ2MsIGRvbWlkKTsKKyAgICBpZiAoZG9tdHlw ZSA9PSBMSUJYTF9ET01BSU5fVFlQRV9JTlZBTElEKQorICAgICAgICByZXR1cm4gRVJST1JfRkFJ TDsKKworICAgIGlmIChkb210eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX1BWKSB7CisgICAgICAg IGlmIChsaWJ4bF9fd2FpdF9mb3JfYmFja2VuZChnYywgYmVfcGF0aCwgIjQiKSA8IDApCisgICAg ICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKKyAgICB9CisKKyAgICBiZV9wYXRoID0gbGlieGxf X3NwcmludGYoZ2MsICIlcy9wb3J0LyVkIiwgYmVfcGF0aCwgdXNiLT5wb3J0KTsKKyAgICBMSUJY TF9fTE9HKGN0eCwgTElCWExfX0xPR19ERUJVRywgIlJlbW92aW5nIFVTQiBkZXZpY2UgZnJvbSB4 ZW5zdG9yZSIpOworCisgICAgaWYgKGxpYnhsX194c193cml0ZShnYyxYQlRfTlVMTCwgYmVfcGF0 aCwgIiIpICkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGxp YnhsX19kZXZpY2VfdXNiX2Fzc2lnbmVkX2xpc3QobGlieGxfX2djICpnYywgbGlieGxfZGV2aWNl X3VzYiAqKmxpc3QsIGludCAqbnVtKQoreworICAgIGNoYXIgKipkb21saXN0OworICAgIHVuc2ln bmVkIGludCBuZCA9IDAsIGksIGo7CisgICAgY2hhciAqYmVfcGF0aDsKKyAgICBsaWJ4bF9kZXZp Y2VfdXNiICp1c2I7CisKKyAgICAqbGlzdCA9IE5VTEw7CisgICAgKm51bSA9IDA7CisKKyAgICBk b21saXN0ID0gbGlieGxfX3hzX2RpcmVjdG9yeShnYywgWEJUX05VTEwsICIvbG9jYWwvZG9tYWlu IiwgJm5kKTsKKyAgICBiZV9wYXRoID0gbGlieGxfX3NwcmludGYoZ2MsIi9sb2NhbC9kb21haW4v MC9iYWNrZW5kL3Z1c2IiKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmQ7IGkrKykgeworICAgICAg ICBjaGFyICpwYXRoLCAqbnVtX3BvcnRzLCAqKmN0cmxfbGlzdDsKKyAgICAgICAgdW5zaWduZWQg aW50IG5jID0gMDsKKyAgICAgICAgCisgICAgICAgIHBhdGggPSBsaWJ4bF9fc3ByaW50ZihnYywg IiVzLyVzIiwgYmVfcGF0aCwgZG9tbGlzdFtpXSk7CisgICAgICAgIGN0cmxfbGlzdCA9IGxpYnhs X194c19kaXJlY3RvcnkoZ2MsIFhCVF9OVUxMLCBwYXRoICwgJm5jKTsKKworICAgICAgICBmb3Ig KGogPSAwOyBqIDwgbmM7IGorKykgeworICAgICAgICAgICAgcGF0aCA9IGxpYnhsX19zcHJpbnRm KGdjLCAiJXMvJXMvJXMvbnVtLXBvcnRzIiwgYmVfcGF0aCwgZG9tbGlzdFtpXSwgY3RybF9saXN0 W2pdKTsKKyAgICAgICAgICAgIG51bV9wb3J0cyA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVM TCwgcGF0aCk7CisgICAgICAgICAgICBpZiAoIG51bV9wb3J0cyApIHsKKyAgICAgICAgICAgICAg ICBpbnQgbnBvcnQgPSBhdG9pKG51bV9wb3J0cyksIGs7CisgICAgICAgICAgICAgICAgY2hhciAq ZGV2cGF0aCwgKmludGY7CisKKyAgICAgICAgICAgICAgICBmb3IgKGsgPSAxOyBrIDw9IG5wb3J0 OyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZGV2cGF0aCA9IGxpYnhsX19zcHJpbnRmKGdj LCAiJXMvJXMvJXMvcG9ydC8ldSIsIGJlX3BhdGgsIGRvbWxpc3RbaV0sIGN0cmxfbGlzdFtqXSwg ayk7CisgICAgICAgICAgICAgICAgICAgIGludGYgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05V TEwsIGRldnBhdGgpOworICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGVyZSBhcmUgVVNCIGRl dmljZSBhdHRhY2hlZCwgYWRkIGl0IHRvIGxpc3QgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYg KGludGYgJiYgc3RyY21wKGludGYsICIiKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICps aXN0ID0gcmVhbGxvYygqbGlzdCwgc2l6ZW9mKGxpYnhsX2RldmljZV91c2IpICogKCgqbnVtKSAr IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqbGlzdCA9PSBOVUxMKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9OT01FTTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHVzYiA9ICpsaXN0ICsgKm51bTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVz Yi0+Y3RybCA9IGF0b2koY3RybF9saXN0W2pdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVz Yi0+cG9ydCA9IGs7CisgICAgICAgICAgICAgICAgICAgICAgICB1c2ItPmludGYgPSBzdHJkdXAo aW50Zik7CisgICAgICAgICAgICAgICAgICAgICAgICAoKm51bSkrKzsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0KKyAgICBsaWJ4bF9fcHRyX2FkZChnYywgKmxpc3QpOworCisgICAgcmV0dXJuIDA7Cit9CisK K2xpYnhsX2RldmljZV91c2IgKmxpYnhsX2RldmljZV91c2JfYXNzaWduZWRfbGlzdChsaWJ4bF9j dHggKmN0eCwgaW50ICpudW0pCit7CisgICAgR0NfSU5JVChjdHgpOworICAgIGxpYnhsX2Rldmlj ZV91c2IgKnVzYnM7CisgICAgaW50IHJjOworCisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYl9h c3NpZ25lZF9saXN0KGdjLCAmdXNicywgbnVtKTsKKworICAgIEdDX0ZSRUU7CisgICAgcmV0dXJu IHVzYnM7Cit9CisgICAgCitzdGF0aWMgaW50IGlzX3VzYl9pbl9hcnJheShsaWJ4bF9kZXZpY2Vf dXNiICphc3NpZ25lZCwgaW50IG51bV9hc3NpZ25lZCwgY2hhciAqaW50ZikKK3sKKyAgICBpbnQg aTsKKyAgICAKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2Fzc2lnbmVkOyBpKyspIHsKKyAgICAg ICAgaWYgKCFzdHJjbXAoYXNzaWduZWRbaV0uaW50ZiwgaW50ZikgKQorICAgICAgICAgICAgcmV0 dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3lzZnNfd3Jp dGVfaW50ZihsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICogc3lzZnNfcGF0aCwKKyAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYiAqdXNiKQoreworICAgIGxpYnhsX2N0eCAq Y3R4ID0gQ1RYOworICAgIGNoYXIgKmJ1ZjsKKyAgICBpbnQgcmMsIGZkOworICAgIAorICAgIGZk ID0gb3BlbihzeXNmc19wYXRoLCBPX1dST05MWSk7CisgICAgaWYgKGZkIDwgMCkgeworICAgICAg ICBMSUJYTF9fTE9HX0VSUk5PKGN0eCwgTElCWExfX0xPR19FUlJPUiwgIkNvdWxkbid0IG9wZW4g JXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2ZzX3BhdGgpOworICAgICAgICByZXR1 cm4gRVJST1JfRkFJTDsKKyAgICB9CisKKyAgICAvKiBiaW5kIHRoZSB1c2IgZGV2aWNlIHRvIHVz YmJhY2sgKi8KKyAgICBidWYgPSBsaWJ4bF9fc3ByaW50ZihnYywiJXM6MS4wIiwgdXNiLT5pbnRm KTsKKyAgICByYyA9IHdyaXRlKGZkLCBidWYsIHN0cmxlbihidWYpKTsKKyAgICAvLyBBbm5veWlu ZyB0byBoYXZlIHR3byBpZidzLCBidXQgd2UgbmVlZCB0aGUgZXJybm8gCisgICAgaWYgKHJjIDwg MCkKKyAgICAgICAgTElCWExfX0xPR19FUlJOTyhjdHgsIExJQlhMX19MT0dfRVJST1IsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvICVzIHJldHVybmVkICVkIiwgc3lzZnNfcGF0 aCwgcmMpOworICAgIGNsb3NlKGZkKTsKKworICAgIGlmIChyYyA8IDApCisgICAgICAgIHJldHVy biBFUlJPUl9GQUlMOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF91c2JfYkRl dmljZUNsYXNzKGxpYnhsX19nYyAqZ2MsIGNoYXIgKmludGYsIGNoYXIgKmJ1ZikKK3sKKyAgICBj aGFyICpwYXRoOworICAgIEZJTEUgKmZkOworICAgIGludCByYzsKKworICAgIHBhdGggPSBsaWJ4 bF9fc3ByaW50ZihnYywgU1lTRlNfVVNCX0RFVlNfUEFUSCIvJXMvYkRldmljZUNsYXNzIiwgaW50 Zik7CisgICAgCisgICAgLyogQ2hlY2sgaWYgdGhpcyBwYXRoIGV4aXN0LCBpZiBub3QgcmV0dXJu IDEgKi8KKyAgICBpZiAoYWNjZXNzKHBhdGgsIFJfT0spICkKKyAgICAgICAgcmV0dXJuIDE7Cisg ICAgCisgICAgcGF0aCA9IGxpYnhsX19zcHJpbnRmKGdjLCAiY2F0ICVzIiwgcGF0aCk7CisgICAg ZmQgPSBwb3BlbihwYXRoLCAiciIpOworICAgIHJjID0gZnNjYW5mKGZkLCAiJXMiLCBidWYpOwor ICAgIHBjbG9zZShmZCk7CisKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybiAwOworICAgIHJl dHVybiAxOworfQorCitzdGF0aWMgaW50IGlzX3VzYl9hc3NpZ25hYmxlKGxpYnhsX19nYyAqZ2Ms IGNoYXIgKmludGYpCit7CisgICAgaW50IHVzYl9jbGFzc2NvZGU7CisgICAgY2hhciBidWZbNV07 CisKKyAgICBpZiAoIWdldF91c2JfYkRldmljZUNsYXNzKGdjLCBpbnRmLCBidWYpICl7CisgICAg ICAgIHVzYl9jbGFzc2NvZGUgPSBhdG9pKGJ1Zik7CisgICAgICAgIGlmICh1c2JfY2xhc3Njb2Rl ICE9IFVTQkhVQl9DTEFTU19DT0RFKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg IAorICAgIHJldHVybiAxOworfQorCitsaWJ4bF9kZXZpY2VfdXNiICpsaWJ4bF9kZXZpY2VfdXNi X2Fzc2lnbmFibGVfbGlzdChsaWJ4bF9jdHggKmN0eCwgaW50ICpudW0pCit7CisgICAgR0NfSU5J VChjdHgpOworICAgIGxpYnhsX2RldmljZV91c2IgKnVzYnMgPSBOVUxMLCAqbmV3LCAqYXNzaWdu ZWQ7CisgICAgc3RydWN0IGRpcmVudCAqZGU7CisgICAgRElSICpkaXI7CisgICAgaW50IHJjLCBu dW1fYXNzaWduZWQ7CisKKyAgICAqbnVtID0gMDsKKworICAgIHJjID0gbGlieGxfX2RldmljZV91 c2JfYXNzaWduZWRfbGlzdChnYywgJmFzc2lnbmVkLCAmbnVtX2Fzc2lnbmVkKTsKKyAgICBpZiAo IHJjICkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICBkaXIgPSBvcGVuZGlyKFNZU0ZTX1VTQl9E RVZTX1BBVEgpOworICAgIGlmICggTlVMTCA9PSBkaXIgKSB7CisgICAgICAgIExJQlhMX19MT0df RVJSTk8oY3R4LCBMSUJYTF9fTE9HX0VSUk9SLCAiQ291bGRuJ3Qgb3BlbiAlcyIsIFNZU0ZTX1VT Ql9ERVZTX1BBVEgpOworICAgICAgICBnb3RvIG91dF9jbG9zZWRpcjsKKyAgICB9ICAgCisgICAg CisgICAgd2hpbGUoIChkZSA9IHJlYWRkaXIoZGlyKSkgKSB7CisgICAgICAgIGlmICghZGUtPmRf bmFtZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICggaXNfdXNiX2luX2Fy cmF5KGFzc2lnbmVkLCBudW1fYXNzaWduZWQsIGRlLT5kX25hbWUpICkKKyAgICAgICAgICAgIGNv bnRpbnVlOworCisgICAgICAgIGlmKCBpc191c2JfYXNzaWduYWJsZShnYywgZGUtPmRfbmFtZSkg KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG5ldyA9IHJlYWxsb2ModXNicywgKCgq bnVtKSArIDEpICogc2l6ZW9mKCpuZXcpKTsKKyAgICAgICAgaWYgKCBOVUxMID09IG5ldyApCisg ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB1c2JzID0gbmV3OworICAgICAgICBuZXcg PSB1c2JzICsgKm51bTsKKworICAgICAgICBtZW1zZXQobmV3LCAwLCBzaXplb2YoKm5ldykpOwor ICAgICAgICBuZXctPmludGYgPSBzdHJkdXAoZGUtPmRfbmFtZSk7CisKKyAgICAgICAgKCpudW0p Kys7CisgICAgfQorCitvdXRfY2xvc2VkaXI6CisgICAgY2xvc2VkaXIoZGlyKTsKK291dDoKKyAg ICBHQ19GUkVFOworICAgIHJldHVybiB1c2JzOworfQorCitzdGF0aWMgaW50IHN5c2ZzX2Rldl91 bmJpbmQobGlieGxfX2djICpnYywgbGlieGxfZGV2aWNlX3VzYiAqdXNiLCAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqZHJpdmVyX3BhdGgpCit7CisgICAg bGlieGxfY3R4ICpjdHggPSBDVFg7CisgICAgY2hhciAqIHNwYXRoLCAqZHAgPSBOVUxMOworICAg IHN0cnVjdCBzdGF0IHN0OworCisgICAgc3BhdGggPSBsaWJ4bF9fc3ByaW50ZihnYywgU1lTRlNf VVNCX0RFVlNfUEFUSCIvJXM6MS4wL2RyaXZlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAg IHVzYi0+aW50Zik7CisgICAgaWYgKCAhbHN0YXQoc3BhdGgsICZzdCkgKSB7CisgICAgICAgIC8q IEZpbmQgdGhlIGNhbm91c2JjdHJsYWwgcGF0aCB0byB0aGUgZHJpdmVyLiAqLworICAgICAgICBk cCA9IGxpYnhsX196YWxsb2MoZ2MsIFBBVEhfTUFYKTsKKyAgICAgICAgZHAgPSByZWFscGF0aChz cGF0aCwgZHApOworICAgICAgICBpZiAoICFkcCApIHsKKyAgICAgICAgICAgIExJQlhMX19MT0df RVJSTk8oY3R4LCBMSUJYTF9fTE9HX0VSUk9SLCAicmVhbHBhdGgoKSBmYWlsZWQiKTsKKyAgICAg ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIExJQlhMX19MT0coY3R4LCBM SUJYTF9fTE9HX0RFQlVHLCAiRHJpdmVyIHJlLXBsdWcgcGF0aDogJXMiLAorICAgICAgICAgICAg ICAgICAgIGRwKTsKKworICAgICAgICAvKiBVbmJpbmQgZnJvbSB0aGUgb2xkIGRyaXZlciAqLwor ICAgICAgICBzcGF0aCA9IGxpYnhsX19zcHJpbnRmKGdjLCAiJXMvdW5iaW5kIiwgZHApOworICAg ICAgICBpZiAoIHN5c2ZzX3dyaXRlX2ludGYoZ2MsIHNwYXRoLCB1c2IpIDwgMCApIHsKKyAgICAg ICAgICAgIExJQlhMX19MT0dfRVJSTk8oY3R4LCBMSUJYTF9fTE9HX0VSUk9SLCAiQ291bGRuJ3Qg dW5iaW5kIGRldmljZSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAg fQorCisgICAgaWYgKCBkcml2ZXJfcGF0aCApCisgICAgICAgICpkcml2ZXJfcGF0aCA9IGRwOwor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiYmFja19kZXZfYXNzaWduKGxpYnhs X19nYyAqZ2MsIGxpYnhsX2RldmljZV91c2IgKnVzYikKK3sKKyAgICBsaWJ4bF9jdHggKmN0eCA9 IENUWDsKKworICAgIGlmICggc3lzZnNfd3JpdGVfaW50ZihnYywgU1lTRlNfVVNCQkFDS19EUklW RVIiL2JpbmQiLCB1c2IpIDwgMCApIHsKKyAgICAgICAgTElCWExfX0xPR19FUlJOTyhjdHgsIExJ QlhMX19MT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGJpbmQg ZGV2aWNlIHRvIHVzYmJhY2shIik7CisgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOworICAgIH0K KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2JiYWNrX2Rldl91bmFzc2lnbihsaWJ4 bF9fZ2MgKmdjLCBsaWJ4bF9kZXZpY2VfdXNiICp1c2IpCit7CisgICAgbGlieGxfY3R4ICpjdHgg PSBDVFg7CisKKyAgICAvKiBSZW1vdmUgZnJvbSB1c2JiYWNrICovCisgICAgaWYgKCBzeXNmc19k ZXZfdW5iaW5kKGdjLCB1c2IsIE5VTEwpIDwgMCApIHsKKyAgICAgICAgTElCWExfX0xPRyhjdHgs IExJQlhMX19MT0dfRVJST1IsICJDb3VsZG4ndCB1bmJpbmQgZGV2aWNlISIpOworICAgICAgICBy ZXR1cm4gRVJST1JfRkFJTDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZp bmUgVVNCQkFDS19JTkZPX1BBVEggIi9saWJ4bC91c2JiYWNrIgorCisvKmNhbm4ndCB3cml0ZSAn LicgaW50byBYZW5zdG9yZS4gU28sIGNoYW5nZSBhbGwgJy4nIHRvICdfJyAqLworc3RhdGljIHZv aWQgdXNiX2ludGVyZmFjZV9lbmNvZGUoY2hhciAqaW50ZXJmYWNlKQoreworICAgIGludCBpLCBs ZW4gPSBzdHJsZW4oaW50ZXJmYWNlKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsK KyAgICAgICAgaWYgKGludGVyZmFjZVtpXSA9PSAnLicpCisgICAgICAgICAgICBpbnRlcmZhY2Vb aV0gPSAnXyc7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB1c2JfYXNzaWduYWJsZV9kcml2ZXJf cGF0aF93cml0ZShsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9kZXZpY2VfdXNiICp1c2IsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRyaXZlcl9wYXRoKQor eworICAgIGxpYnhsX2N0eCAqY3R4ID0gQ1RYOworICAgIGNoYXIgKnBhdGgsICppbnRmOworCisg ICAgaW50ZiA9IGxpYnhsX19zdHJkdXAoZ2MsIHVzYi0+aW50Zik7CisgICAgdXNiX2ludGVyZmFj ZV9lbmNvZGUoaW50Zik7CisKKyAgICBwYXRoID0gbGlieGxfX3NwcmludGYoZ2MsIFVTQkJBQ0tf SU5GT19QQVRIIi8lcy9kcml2ZXJfcGF0aCIsIGludGYpOworICAgIGlmICggbGlieGxfX3hzX3dy aXRlKGdjLCBYQlRfTlVMTCwgcGF0aCwgIiVzIiwgZHJpdmVyX3BhdGgpIDwgMCApIHsKKyAgICAg ICAgTElCWExfX0xPR19FUlJOTyhjdHgsIExJQlhMX19MT0dfV0FSTklORywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAiV3JpdGUgb2YgJXMgdG8gbm9kZSAlcyBmYWlsZWQuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBkcml2ZXJfcGF0aCwgcGF0aCk7CisgICAgfQorfQorCitzdGF0aWMg Y2hhciAqIHVzYl9hc3NpZ25hYmxlX2RyaXZlcl9wYXRoX3JlYWQobGlieGxfX2djICpnYywgbGli eGxfZGV2aWNlX3VzYiAqdXNiKQoreworICAgIGNoYXIgKmludGY7CisgICAgaW50ZiA9IGxpYnhs X19zdHJkdXAoZ2MsIHVzYi0+aW50Zik7CisgICAgdXNiX2ludGVyZmFjZV9lbmNvZGUoaW50Zik7 CisKKyAgICByZXR1cm4gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLGxpYnhsX19zcHJpbnRm KGdjLCAKKyAgICAgICAgICAgICAgICAgICAgVVNCQkFDS19JTkZPX1BBVEgiLyVzL2RyaXZlcl9w YXRoIiwgaW50ZikpOworfQorCitzdGF0aWMgdm9pZCB1c2JfYXNzaWduYWJsZV9kcml2ZXJfcGF0 aF9yZW1vdmUobGlieGxfX2djICpnYywgbGlieGxfZGV2aWNlX3VzYiAqdXNiKQoreworICAgIGxp YnhsX2N0eCAqY3R4ID0gQ1RYOworICAgIGNoYXIgKmludGY7CisgICAgaW50ZiA9IGxpYnhsX19z dHJkdXAoZ2MsIHVzYi0+aW50Zik7CisgICAgdXNiX2ludGVyZmFjZV9lbmNvZGUoaW50Zik7CisK KyAgICAvKlJlbW92ZSB0aGUgeGVuc3RvcmUgZW50cnkgKi8KKyAgICB4c19ybShjdHgtPnhzaCwg WEJUX05VTEwsCisgICAgICAgICAgICBsaWJ4bF9fc3ByaW50ZihnYyxVU0JCQUNLX0lORk9fUEFU SCIvJXMvZHJpdmVyX3BhdGgiLCBpbnRmKSk7Cit9CisKKyN1bmRlZiBVU0JCQUNLX0lORk9fUEFU SAorCitzdGF0aWMgaW50IGRvX3VzYl9hZGQgKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlk LCBsaWJ4bF9kZXZpY2VfdXNiICp1c2IpCit7CisgICAgaW50IHJjID0gMDsKKworICAgIHN3aXRj aCAobGlieGxfX2RvbWFpbl90eXBlKGdjLCBkb21pZCkpIHsKKyAgICBjYXNlIExJQlhMX0RPTUFJ Tl9UWVBFX0hWTToKKyAgICAgICAgLyogVE8tRE8gKi8KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBMSUJYTF9ET01BSU5fVFlQRV9QVjoKKyAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYl9h ZGRfeGVuc3RvcmUoZ2MsIGRvbWlkLCB1c2IpOworICAgICAgICBpZihyYykgZ290byBvdXQ7ICAg ICAgIAorICAgICAgICAvKiAgT25seSBhZnRlciB1c2JiYWNrIGF1dG9tYXRpY2FsbHkgYWRkIAor ICAgICAgICAgICAgaW5mdDpkb21pZDpjb250cm9sbGVySWQ6cG9ydElkIHRvICIvc3lzL2J1cy91 c2IvZHJpdmVycy91c2JiYWNrL3BvcnRfaWRzCisgICAgICAgICAgICBjYW4gd2UgYmluZCB0aGUg dXNiIGRldmljZSB0byB1c2JiYWNrLiBTbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoaXMgdG8gYmUg Y29tcGxldGVkLiAgICAgICAgCisgICAgICAgICovCisgICAgICAgIHNsZWVwKDEpOworCisgICAg ICAgIHJjID0gdXNiYmFja19kZXZfYXNzaWduKGdjLCB1c2IpOworICAgICAgICBpZihyYykgewor ICAgICAgICAgICAgbGlieGxfX2RldmljZV91c2JfcmVtb3ZlX3hlbnN0b3JlKGdjLCBkb21pZCwg dXNiKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgTElCWExfRE9NQUlOX1RZUEVfSU5WQUxJRDoKKyAgICAgICAgcmV0dXJuIEVSUk9S X0ZBSUw7CisgICAgfQorICAgIAorb3V0OgorICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGlu dCBsaWJ4bF9fZGV2aWNlX3NldF9kZWZhdWx0X3VzYmN0cmwobGlieGxfX2djICpnYywgdWludDMy X3QgZG9taWQsIGxpYnhsX2RldmljZV91c2IgKnVzYikKK3sKKyAgICBsaWJ4bF9jdHggKmN0eCA9 IENUWDsKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybHM7CisgICAgbGlieGxfZGV2 aWNlX3VzYiAqdXNicyA9IE5VTEw7CisgICAgaW50IG51bWN0cmwsIG51bXVzYiwgaSwgaiwgcmM7 CisgICAgY2hhciAqYmVfcGF0aCwgKnRtcDsKKworICAgIHVzYmN0cmxzID0gbGlieGxfZGV2aWNl X3VzYmN0cmxfbGlzdChjdHgsIGRvbWlkLCAmbnVtY3RybCk7CisgICAgaWYgKCAhbnVtY3RybCkK KyAgICAgICAgZ290byBvdXQ7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtY3RybDsgaSsrKSB7 CisgICAgICAgIHJjID0gbGlieGxfX2RldmljZV91c2JfbGlzdChnYywgZG9taWQsICZ1c2JzLCB1 c2JjdHJsc1tpXS5kZXZpZCwgJm51bXVzYik7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7Cisg ICAgICAgIGlmICggIXVzYmN0cmxzW2ldLm51bV9wb3J0cyB8fCBudW11c2IgPT0gdXNiY3RybHNb aV0ubnVtX3BvcnRzICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKGogPSAx OyBpIDw9IG51bXVzYjsgaisrKSB7CisgICAgICAgICAgICBiZV9wYXRoID0gbGlieGxfX3Nwcmlu dGYoZ2MsICIlcy9iYWNrZW5kL3Z1c2IvJWQvJWQvcG9ydC8lZCIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX194c19nZXRfZG9tcGF0aChnYywgMCksIGRvbWlkLCB1c2JjdHJs c1tpXS5kZXZpZCwgaik7CisgICAgICAgICAgICB0bXAgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJU X05VTEwsIGJlX3BhdGgpOworICAgICAgICAgICAgaWYgKCB0bXAgJiYgIXN0cmNtcCggdG1wLCAi IikgKSB7CisgICAgICAgICAgICAgICAgdXNiLT5jdHJsID0gdXNiY3RybHNbaV0uZGV2aWQ7Cisg ICAgICAgICAgICAgICAgdXNiLT5wb3J0ID0gajsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmcmVlKHVzYnMpOworICAgIH0KKwor b3V0OgorICAgIGZyZWUodXNiY3RybHMpOworICAgIGZyZWUodXNicyk7CisgICAgcmV0dXJuIDE7 Cit9IAorCitpbnQgbGlieGxfX2RldmljZV91c2Jfc2V0ZGVmYXVsdChsaWJ4bF9fZ2MgKmdjLCB1 aW50MzJfdCBkb21pZCwgbGlieGxfZGV2aWNlX3VzYiAqdXNiKQoreworICAgIGludCByYzsKKwor ICAgIHN3aXRjaCAobGlieGxfX2RvbWFpbl90eXBlKGdjLCBkb21pZCkpIHsKKyAgICBjYXNlIExJ QlhMX0RPTUFJTl9UWVBFX0hWTToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMSUJYTF9ET01B SU5fVFlQRV9QVjoKKyAgICAgICAgaWYgKHVzYi0+Y3RybCA9PSAtMSkgeworICAgICAgICAgICAg aWYgKHVzYi0+cG9ydCAhPSAtMSApIHsKKyAgICAgICAgICAgICAgICBMT0coRVJST1IsICJVU0Ig Y29udHJvbGxlciBtdXN0IGJlIHNwZWNpZmllZCBpZiB5b3Ugc3BlY2lmeSBwb3J0IElEIik7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOworICAgICAgICAgICAgfSAgIAorICAg ICAgICAgICAgICAKKyAgICAgICAgICAgIHJjID0gbGlieGxfX2RldmljZV9zZXRfZGVmYXVsdF91 c2JjdHJsKGdjLCBkb21pZCwgdXNiKTsKKyAgICAgICAgICAgIC8qIElmIG5vIGV4aXN0aW5nIGN0 cmwgdG8gaG9zdCB0aGlzIHVzYiBkZXZpY2UsIHNldHVwIGEgbmV3IG9uZSAqLworICAgICAgICAg ICAgaWYgKHJjKSB7CisgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgdXNiY3Ry bDsKKyAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0KCZ1c2JjdHJsKTsK KyAgICAgICAgICAgICAgICBsaWJ4bF9fZGV2aWNlX3VzYmN0cmxfYWRkKGdjLCBkb21pZCwgJnVz YmN0cmwpOworICAgICAgICAgICAgICAgIHVzYi0+Y3RybCA9IHVzYmN0cmwuZGV2aWQ7CisgICAg ICAgICAgICAgICAgdXNiLT5wb3J0ID0gMTsKKyAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2Vf dXNiY3RybF9kaXNwb3NlKCZ1c2JjdHJsKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgIH0KKwor ICAgICAgICBpZiAodXNiLT5wb3J0ID09IC0xKSB7CisgICAgICAgICAgICBjaGFyICpiZV9wYXRo ID0gbGlieGxfX3NwcmludGYoZ2MsICIlcy9iYWNrZW5kL3Z1c2IvJWQvcGF0aC8lZCIsCisgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9feHNfZ2V0X2RvbXBhdGgoZ2MsIDApLCB1c2ItPmN0 cmwsIHVzYi0+cG9ydCk7CisgICAgICAgICAgICBjaGFyICp0bXAgPSBsaWJ4bF9feHNfcmVhZChn YywgWEJUX05VTEwsIGJlX3BhdGgpOworICAgICAgICAgICAgaWYgKCAhdG1wIHx8IHN0cmNtcCh0 bXAsICIiKSApeworICAgICAgICAgICAgICAgIExPRyhFUlJPUiwgIlRoZSBjb250cm9sbGVyIHBv cnQgZG9lc24ndCBleGlzdCBvciBpdCBoYXMgYmVlbiBhc3NpZ25lZCB0byBhbm90aGVyIGRldmlj ZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIExJQlhMX0RPTUFJTl9UWVBFX0lO VkFMSUQ6CisgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOworICAgIGRlZmF1bHQ6CisgICAgICAg IGFib3J0KCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBsaWJ4bF9kZXZpY2Vf dXNiX2FkZChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsIGxpYnhsX2RldmljZV91c2Ig KnVzYiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hv dykKK3sKKyAgICBBT19DUkVBVEUoY3R4LCBkb21pZCwgYW9faG93KTsKKyAgICBpbnQgcmM7CisK KyAgICByYyA9IGxpYnhsX19kZXZpY2VfdXNiX2FkZChnYywgZG9taWQsIHVzYik7CisgICAgbGli eGxfX2FvX2NvbXBsZXRlKGVnYywgYW8sIHJjKTsKKyAgICByZXR1cm4gQU9fSU5QUk9HUkVTUzsK K30KKworaW50IGxpYnhsX19kZXZpY2VfdXNiX2FkZChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBk b21pZCwgbGlieGxfZGV2aWNlX3VzYiAqdXNiKQoreworICAgIGxpYnhsX2N0eCAqY3R4ID0gQ1RY OworICAgIGxpYnhsX2RldmljZV91c2IgKmFzc2lnbmVkOworICAgIGludCByYywgbnVtX2Fzc2ln bmVkOworICAgIGNoYXIgKmRyaXZlcl9wYXRoOworCisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3Vz Yl9zZXRkZWZhdWx0KGdjLCBkb21pZCwgdXNiKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworICAg IAorICAgIHJjID0gbGlieGxfX2RldmljZV91c2JfYXNzaWduZWRfbGlzdChnYywgJmFzc2lnbmVk LCAmbnVtX2Fzc2lnbmVkKTsKKyAgICBpZiAoIHJjICkgeworICAgICAgICBMSUJYTF9fTE9HKGN0 eCwgTElCWExfX0xPR19FUlJPUiwgCisgICAgICAgICAgICAgImNhbm5vdCBkZXRlcm1pbmUgaWYg VVNCIGRldmljZSBpcyBhc3NpZ25lZCwgcmVmdXNpbmcgdG8gY29udGludWUiKTsKKyAgICAgICAg Z290byBvdXQ7CisgICAgfQorCisgICAgaWYgKCBpc191c2JfaW5fYXJyYXkoYXNzaWduZWQsIG51 bV9hc3NpZ25lZCwgdXNiLT5pbnRmKSApIHsKKyAgICAgICAgTElCWExfX0xPRyhjdHgsIExJQlhM X19MT0dfRVJST1IsICJVU0IgZGV2aWNlIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBkb21haW4iKTsK KyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAg CisgICAgLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYWxyZWFkeSBhIGRyaXZlciB0aGF0IHdl IG5lZWQgdG8gdW5iaW5kIGZyb20gKi8KKyAgICBpZiAoIHN5c2ZzX2Rldl91bmJpbmQoZ2MsIHVz YiwgJmRyaXZlcl9wYXRoICkgKSB7CisgICAgICAgIExJQlhMX19MT0coY3R4LCBMSUJYTF9fTE9H X0VSUk9SLAorICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCB1bmJpbmQgJXMgZnJvbSBkcml2 ZXIiLCB1c2ItPmludGYpOworICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKKyAgICB9CisKKyAg ICAvKiBTdG9yZSBkcml2ZXJfcGF0aCBmb3IgcmViaW5kaW5nIHRvIGRvbTAgKi8KKyAgICBpZiAo IGRyaXZlcl9wYXRoICkgeworICAgICAgICB1c2JfYXNzaWduYWJsZV9kcml2ZXJfcGF0aF93cml0 ZShnYywgdXNiLCBkcml2ZXJfcGF0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTElCWExfX0xP RyhjdHgsIExJQlhMX19MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAiJXMgbm90IGJv dW5kIHRvIGEgZHJpdmVyLCB3aWxsIG5vdCBiZSByZWJvdW5kLiIsIHVzYi0+aW50Zik7CisgICAg fQorICAgIAorICAgIGlmIChkb191c2JfYWRkKGdjLCBkb21pZCwgdXNiKSApIAorICAgICAgIHJl dHVybiBFUlJPUl9GQUlMOworIAorb3V0OgorICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGlu dCBkb191c2JfcmVtb3ZlKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYiAqdXNiLCBpbnQgZm9yY2UpCit7CisKKyAg ICBsaWJ4bF9jdHggKmN0eCA9IENUWDsKKyAgICBsaWJ4bF9kZXZpY2VfdXNiICphc3NpZ25lZDsK KyAgICBpbnQgcmMsIG51bTsKKworICAgIGFzc2lnbmVkID0gbGlieGxfZGV2aWNlX3VzYl9saXN0 X2FsbChnYywgZG9taWQsICZudW0pOworICAgIGlmICggYXNzaWduZWQgPT0gTlVMTCApIHsKKyAg ICAgICAgTElCWExfX0xPRyhjdHgsIExJQlhMX19MT0dfRVJST1IsICJUaGVyZSBpcyBubyBVU0Ig ZGV2aWNlIGF0dGFjaGVkIHRvIHRoaXMgZG9tYWluIik7CisgICAgICAgIHJldHVybiBFUlJPUl9G QUlMOworICAgIH0KKworICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgaWYgKCAhaXNfdXNiX2lu X2FycmF5KGFzc2lnbmVkLCBudW0sIHVzYi0+aW50ZikgKSB7CisgICAgICAgIExJQlhMX19MT0co Y3R4LCBMSUJYTF9fTE9HX0VSUk9SLCAiVVNCIGRldmljZSBub3QgYXR0YWNoZWQgdG8gdGhpcyBk b21haW4iKTsKKyAgICAgICAgZ290byBvdXRfZmFpbDsKKyAgICB9CisKKyAgICByYyA9IEVSUk9S X0ZBSUw7CisgICAgc3dpdGNoIChsaWJ4bF9fZG9tYWluX3R5cGUoZ2MsIGRvbWlkKSkgeworICAg IGNhc2UgTElCWExfRE9NQUlOX1RZUEVfSFZNOgorICAgICAgICAvL1RPLURPCisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgTElCWExfRE9NQUlOX1RZUEVfUFY6CisgICAgICAgIC8vdW5iaW5kIFVT QiBkZXZpY2UgZnJvbSB1c2JiYWNrIFRPLURPCisgICAgICAgIHJjID0gdXNiYmFja19kZXZfdW5h c3NpZ24oZ2MsIHVzYik7CisKKyAgICAgICAgaWYgKHJjKSByZXR1cm4gcmM7CisgICAgICAgIHJj ID0gbGlieGxfX2RldmljZV91c2JfcmVtb3ZlX3hlbnN0b3JlKGdjLCBkb21pZCwgdXNiKTsKKyAg ICAgICAgaWYocmMpIAorICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICBicmVhazsKKyAg ICBkZWZhdWx0OgorICAgICAgICBhYm9ydCgpOworICAgIH0KK291dF9mYWlsOgorICAgIHJldHVy biAwOworfQorCitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdXNiX3JlbW92ZV9jb21tb24obGli eGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2RldmljZV91c2IgKnVzYiwgaW50IGZvcmNlKQoreworICAgIGxpYnhsX2N0eCAq Y3R4ID0gQ1RYOworICAgIGludCByYzsKKyAgICBjaGFyICpkcml2ZXJfcGF0aDsKKworICAgIHJj ID0gZG9fdXNiX3JlbW92ZShnYywgZG9taWQsIHVzYiwgZm9yY2UpOworCisgICAgaWYgKHJjKQor ICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7CisgICAgCisgICAgLyogUmViaW5kIGlmIG5lY2Vz c2FyeSAqLworICAgIGRyaXZlcl9wYXRoID0gdXNiX2Fzc2lnbmFibGVfZHJpdmVyX3BhdGhfcmVh ZChnYywgdXNiKTsKKworICAgIGlmICggZHJpdmVyX3BhdGggKSB7CisgICAgICAgIExJQlhMX19M T0coY3R4LCBMSUJYTF9fTE9HX0lORk8sICJSZWJpbmRpbmcgVVNCIGRldmljZSAlcyB0byBkcml2 ZXIgYXQgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYi0+ aW50ZiwgZHJpdmVyX3BhdGgpOworCisgICAgICAgIGlmICggc3lzZnNfd3JpdGVfaW50ZihnYywg bGlieGxfX3NwcmludGYoZ2MsICIlcy9iaW5kIiwgZHJpdmVyX3BhdGgpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdXNiKSA8IDAgKSB7CisgICAgICAgICAgICBMSUJYTF9fTE9H X0VSUk5PKGN0eCwgTElCWExfX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkNvdWxkbid0IGJpbmQgZGV2aWNlIHRvICVzIiwgZHJpdmVyX3BhdGgpOworICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgdXNiX2Fzc2lnbmFibGVfZHJp dmVyX3BhdGhfcmVtb3ZlKGdjLCB1c2IpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBsaWJ4 bF9kZXZpY2VfdXNiX3JlbW92ZShsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYiAqdXNiLCBjb25zdCBsaWJ4 bF9hc3luY29wX2hvdyAqYW9faG93KQorCit7CisgICAgQU9fQ1JFQVRFKGN0eCwgZG9taWQsIGFv X2hvdyk7CisgICAgaW50IHJjOworCisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYl9yZW1vdmVf Y29tbW9uKGdjLCBkb21pZCwgdXNiLCAwKTsKKworICAgIGxpYnhsX19hb19jb21wbGV0ZShlZ2Ms IGFvLCByYyk7CisgICAgcmV0dXJuIEFPX0lOUFJPR1JFU1M7Cit9CisgICAgICAgICAgICAKK2lu dCBsaWJ4bF9kZXZpY2VfdXNiX2Rlc3Ryb3kobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiICp1c2IsIGNv bnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCit7CisgICAgQU9fQ1JFQVRFKGN0eCwgZG9t aWQsIGFvX2hvdyk7CisgICAgaW50IHJjOworCisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYl9y ZW1vdmVfY29tbW9uKGdjLCBkb21pZCwgdXNiLCAxKTsKKworICAgIGxpYnhsX19hb19jb21wbGV0 ZShlZ2MsIGFvLCByYyk7CisgICAgcmV0dXJuIEFPX0lOUFJPR1JFU1M7Cit9CisKKworaW50IGxp YnhsX19kZXZpY2VfdXNiX2xpc3QobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsIGxpYnhs X2RldmljZV91c2IgKip1c2JzLCBpbnQgdXNiY3RybCwgaW50ICpudW0pCit7CisgICAgY2hhciAq YmVfcGF0aCwgKm51bV9kZXZzOworICAgIGludCBuLCBpOworICAgIGxpYnhsX2RldmljZV91c2Ig KnVzYjsKKyAgICAKKyAgICAqdXNicyA9IE5VTEw7CisgICAgKm51bSA9IDA7CisKKyAgICBiZV9w YXRoID0gbGlieGxfX3NwcmludGYoZ2MsICIlcy9iYWNrZW5kL3Z1c2IvJWQvJWQiLCBsaWJ4bF9f eHNfZ2V0X2RvbXBhdGgoZ2MsIDApLCBkb21pZCwgdXNiY3RybCk7CisgICAgbnVtX2RldnMgPSBs aWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsIGxpYnhsX19zcHJpbnRmKGdjLCAiJXMvbnVtLXBv cnRzIiwgYmVfcGF0aCkpOworICAgIGlmICghbnVtX2RldnMpCisgICAgICAgIGdvdG8gb3V0Owor CisgICAgbiA9IGF0b2kobnVtX2RldnMpOworICAgICp1c2JzID0gY2FsbG9jKG4sIHNpemVvZihs aWJ4bF9kZXZpY2VfdXNiKSk7CisKKyAgICBjaGFyICppbnRmOworICAgIGZvciAoaSA9IDA7IGkg PCBuOyBpKyspIHsKKyAgICAgICAgaW50ZiA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwg bGlieGxfX3NwcmludGYoZ2MsIiVzL3BvcnQvJWQiLCBiZV9wYXRoLCBpICsgMSkpOworICAgICAg ICBpZiAoIGludGYgJiYgc3RyY21wKGludGYsICIiKSApIHsKKyAgICAgICAgICAgIHVzYiA9ICp1 c2JzICsgKm51bTsKKyAgICAgICAgICAgIHVzYi0+aW50ZiA9IHN0cmR1cChpbnRmKTsKKyAgICAg ICAgICAgIHVzYi0+cG9ydCA9IGkgKyAxOworICAgICAgICAgICAgdXNiLT5jdHJsID0gdXNiY3Ry bDsKKyAgICAgICAgICAgICgqbnVtKSsrOworICAgICAgICB9CisgICAgfQorb3V0OgorICAgIHJl dHVybiAwOworfQorCitsaWJ4bF9kZXZpY2VfdXNiICpsaWJ4bF9kZXZpY2VfdXNiX2xpc3QobGli eGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBpbnQgdXNiY3RybCwgaW50ICpudW0pCit7Cisg ICAgR0NfSU5JVChjdHgpOworICAgIGxpYnhsX2RldmljZV91c2IgKnVzYnM7CisgICAgaW50IHJj OworCisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYl9saXN0KGdjLCBkb21pZCwgJnVzYnMsIHVz YmN0cmwsIG51bSk7CisKKyAgICBpZiAocmMpCisgICAgICAgIGZyZWUodXNicyk7CisgICAgR0Nf RlJFRTsKKyAgICByZXR1cm4gdXNiczsKK30KKworbGlieGxfZGV2aWNlX3VzYiAqbGlieGxfZGV2 aWNlX3VzYl9saXN0X2FsbChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwgaW50ICpudW0p Cit7CisgICAgY2hhciAqKnVzYmxpc3Q7CisgICAgdW5zaWduZWQgaW50IG5kLCBpLCBqOworICAg IGNoYXIgKmJlX3BhdGg7CisgICAgaW50IHJjOworICAgIGxpYnhsX2RldmljZV91c2IgKnVzYnMg PSBOVUxMOworCisgICAgKm51bSA9IDA7CisKKyAgICBiZV9wYXRoID0gbGlieGxfX3NwcmludGYo Z2MsIi9sb2NhbC9kb21haW4vMC9iYWNrZW5kL3Z1c2IvJWQiLCBkb21pZCk7CisgICAgdXNibGlz dCA9IGxpYnhsX194c19kaXJlY3RvcnkoZ2MsIFhCVF9OVUxMLCBiZV9wYXRoLCAmbmQpOworCisg ICAgZm9yIChpID0gMDsgaSA8IG5kOyBpKyspIHsgCisgICAgICAgIGludCBuYyA9IDA7CisgICAg ICAgIGxpYnhsX2RldmljZV91c2IgKnRtcDsKKyAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3Vz Yl9saXN0KGdjLCBkb21pZCwgJnRtcCwgYXRvaSh1c2JsaXN0W2ldKSwgJm5jKTsKKyAgICAgICAg aWYgKCFuYykgCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdXNicyA9IHJlYWxsb2Mo dXNicywgc2l6ZW9mKGxpYnhsX2RldmljZV91c2IpKigoKm51bSkgKyBuYykpOworICAgICAgICAv KiBUTy1ETworICAgICAgICBpZiAodXNicyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIEVS Uk9SX05PTUVNOworICAgICAgICAqLworICAgICAgICBmb3IoaiA9IDA7IGogPCBuYzsgaisrKSB7 CisgICAgICAgICAgICB1c2JzWypudW1dLmN0cmwgPSB0bXBbal0uY3RybDsKKyAgICAgICAgICAg IHVzYnNbKm51bV0ucG9ydCA9IHRtcFtqXS5wb3J0OworICAgICAgICAgICAgdXNic1sqbnVtXS5p bnRmID0gc3RyZHVwKHRtcFtqXS5pbnRmKTsKKyAgICAgICAgICAgICgqbnVtKSsrOworICAgICAg ICB9CisgICAgICAgIGZyZWUodG1wKTsKKyAgICB9CisgICAgcmV0dXJuIHVzYnM7Cit9CisKK2lu dCBsaWJ4bF9fZGV2aWNlX3VzYl9kZXN0cm95X2FsbChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBk b21pZCkKK3sKKyAgICBsaWJ4bF9jdHggKmN0eCA9IENUWDsKKyAgICBsaWJ4bF9kZXZpY2VfdXNi Y3RybCAqdXNiY3RybHM7CisgICAgaW50IG51bSwgaSwgcmMgPSAwOworCisgICAgdXNiY3RybHMg PSBsaWJ4bF9kZXZpY2VfdXNiY3RybF9saXN0KGN0eCwgZG9taWQsICZudW0pOworICAgIGlmICgg dXNiY3RybHMgPT0gTlVMTCApCisgICAgICAgIHJldHVybiAwOworCisgICAgZm9yIChpID0gMDsg aSA8IG51bTsgaSsrKSB7CisgICAgICAgIC8qIEZvcmNlIHJlbW92ZSBvbiBzaHV0ZG93biBzaW5j ZSwgb24gSFZNLCBxZW11IHdpbGwgbm90IGFsd2F5cworICAgICAgICAgKiByZXNwb25kIHRvIFND SSBpbnRlcnJ1cHQgYmVjYXVzZSB0aGUgZ3Vlc3Qga2VybmVsIGhhcyBzaHV0IGRvd24gdGhlCisg ICAgICAgICAqIGRldmljZXMgYnkgdGhlIHRpbWUgd2UgZXZlbiBnZXQgaGVyZSEKKyAgICAgICAg ICovCisgICAgICAgIGlmIChsaWJ4bF9fZGV2aWNlX3VzYmN0cmxfcmVtb3ZlX2NvbW1vbihjdHgs IGRvbWlkLCB1c2JjdHJscyArIGksIDAsIDEpIDwgMCkKKyAgICAgICAgICAgIHJjID0gRVJST1Jf RkFJTDsKKyAgICB9CisKKyAgICBmcmVlKHVzYmN0cmxzKTsKKyAgICByZXR1cm4gMDsKK30KKwor LyogVE8tRE86IG1hcCB0aGUgImxzdXNiIiBidXM6YWRkciB0byB0aGUgc3lzZnMgdXNiIGFkZHJl c3MKK3N0YXRpYyBpbnQgbGlieGxfaG9zdGRldl90b19pbnRmKGxpYnhsX19nYyAqZ2MsIGxpYnhs X2RldmljZV91c2IgKnVzYikKK3sKKyAgICByZXR1cm4gMDsKK30KKyovCisKKyNkZWZpbmUgQlVG X1NJWkUgMjAKKy8qdXNlIHN5c3RlbSBjYWxsIHBvcGVuIHRvIGdldCB1c2IgZGV2aWNlIGluZm9y bWF0aW9uICovCitzdGF0aWMgaW50IGdldF91c2JfZGV2bnVtIChsaWJ4bF9fZ2MgKmdjLCBjb25z dCBjaGFyICppbnRmLCBjaGFyICpidWYpCit7CisgICAgY2hhciAqcGF0aDsKKyAgICBpbnQgcmM7 CisgICAgRklMRSAqZmQ7CisKKyAgICBwYXRoID0gbGlieGxfX3NwcmludGYoZ2MsICJjYXQgIlNZ U0ZTX1VTQl9ERVZTX1BBVEgiLyVzL2Rldm51bSIsIGludGYpOworICAgIGZkID0gcG9wZW4ocGF0 aCwgInIiKTsKKyAgICByYyA9IGZzY2FuZihmZCwgIiVzIiwgYnVmKTsKKyAgICBwY2xvc2UoZmQp OworCisgICAgaWYgKHJjKSByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGlu dCBnZXRfdXNiX2J1c251bShsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICppbnRmLCBjaGFyICpi dWYpCit7CisgICAgY2hhciAqcGF0aDsKKyAgICBpbnQgcmM7CisgICAgRklMRSAqZmQ7CisKKyAg ICBwYXRoID0gbGlieGxfX3NwcmludGYoZ2MsICJjYXQgIlNZU0ZTX1VTQl9ERVZTX1BBVEgiLyVz L2J1c251bSIsIGludGYpOworICAgIGZkID0gcG9wZW4ocGF0aCwgInIiKTsKKyAgICByYyA9IGZz Y2FuZihmZCwgIiVzIiwgYnVmKTsKKyAgICBwY2xvc2UoZmQpOworCisgICAgaWYgKHJjKSByZXR1 cm4gMDsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBnZXRfdXNiX2lkVmVuZG9yKGxp YnhsX19nYyAqZ2MsIGNvbnN0IGNoYXIgKmludGYsIGNoYXIgKmJ1ZikKK3sKKyAgICBjaGFyICpw YXRoOworICAgIGludCByYzsKKyAgICBGSUxFICpmZDsKKworICAgIHBhdGggPSBsaWJ4bF9fc3By aW50ZihnYywgImNhdCAiU1lTRlNfVVNCX0RFVlNfUEFUSCIvJXMvaWRWZW5kb3IiLCBpbnRmKTsK KyAgICBmZCA9IHBvcGVuKHBhdGgsICJyIik7CisgICAgcmMgPSBmc2NhbmYoZmQsICIlcyIsIGJ1 Zik7CisgICAgcGNsb3NlKGZkKTsKKworICAgIGlmIChyYykgcmV0dXJuIDA7CisgICAgcmV0dXJu IDE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3VzYl9pZFByb2R1Y3QobGlieGxfX2djICpnYywgY29u c3QgY2hhciAqaW50ZiwgY2hhciAqYnVmKQoreworICAgIGNoYXIgKnBhdGg7CisgICAgaW50IHJj OworICAgIEZJTEUgKmZkOworCisgICAgcGF0aCA9IGxpYnhsX19zcHJpbnRmKGdjLCAiY2F0ICJT WVNGU19VU0JfREVWU19QQVRIIi8lcy9pZFByb2R1Y3QiLCBpbnRmKTsKKyAgICBmZCA9IHBvcGVu KHBhdGgsICJyIik7CisgICAgcmMgPSBmc2NhbmYoZmQsICIlcyIsIGJ1Zik7CisgICAgcGNsb3Nl KGZkKTsKKworICAgIGlmIChyYykgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRp YyBpbnQgZ2V0X3VzYl9tYW51ZmFjdHVyZXIobGlieGxfX2djICpnYywgY29uc3QgY2hhciAqaW50 ZiwgY2hhciAqYnVmKQoreworICAgIGNoYXIgKnBhdGg7CisgICAgaW50IHJjOworICAgIEZJTEUg KmZkOworCisgICAgcGF0aCA9IGxpYnhsX19zcHJpbnRmKGdjLCAiY2F0ICJTWVNGU19VU0JfREVW U19QQVRIIi8lcy9tYW51ZmFjdHVyZXIiLCBpbnRmKTsKKyAgICBmZCA9IHBvcGVuKHBhdGgsICJy Iik7CisgICAgcmMgPSBmc2NhbmYoZmQsICIlcyIsIGJ1Zik7CisgICAgcGNsb3NlKGZkKTsKKwor ICAgIGlmIChyYykgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0 X3VzYl9wcm9kdWN0KGxpYnhsX19nYyAqZ2MsIGNvbnN0IGNoYXIgKmludGYsIGNoYXIgKmJ1ZikK K3sKKyAgICBjaGFyICpwYXRoOworICAgIGludCByYzsKKyAgICBGSUxFICpmZDsKKworICAgIHBh dGggPSBsaWJ4bF9fc3ByaW50ZihnYywgImNhdCAiU1lTRlNfVVNCX0RFVlNfUEFUSCIvJXMvcHJv ZHVjdCIsIGludGYpOworICAgIGZkID0gcG9wZW4ocGF0aCwgInIiKTsKKyAgICByYyA9IGZzY2Fu ZihmZCwgIiVzIiwgYnVmKTsKKyAgICBwY2xvc2UoZmQpOworCisgICAgaWYgKHJjKSByZXR1cm4g MDsKKyAgICByZXR1cm4gMTsKK30KKworaW50IGxpYnhsX2RldmljZV91c2JfZ2V0aW5mbyhsaWJ4 bF9jdHggKmN0eCwgY2hhciAqaW50ZiwgbGlieGxfdXNiaW5mbyAqdXNiaW5mbykKK3sKKyAgICBH Q19JTklUKGN0eCk7CisgICAgY2hhciBidWZbMjBdOworCisgICAgLy9jaGFuZ2UgdXNiLCB3aHkh ISEhPz8/PworICAgIC8vIG1heWJlIHNvbWUgYmV0dGVyIG1ldGhvZCB0byBnZXQgdGhpcyBwYXJh bWV0ZXIKKworICAgIGlmICghZ2V0X3VzYl9kZXZudW0oZ2MsIGludGYsIGJ1ZikgKSAKKyAgICAg ICAgdXNiaW5mby0+ZGV2bnVtID0gYXRvaShidWYpOworCisgICAgaWYgKCAhZ2V0X3VzYl9idXNu dW0oZ2MsIGludGYsIGJ1ZikpCisgICAgICAgIHVzYmluZm8tPmJ1cyA9IGF0b2koYnVmKTsKKwor ICAgIGlmICghZ2V0X3VzYl9pZFZlbmRvcihnYywgaW50ZiwgYnVmKSApCisgICAgICAgICB1c2Jp bmZvLT5pZFZlbmRvciA9IGF0b2koYnVmKTsKKworICAgIGlmICghZ2V0X3VzYl9pZFByb2R1Y3Qo Z2MsIGludGYsIGJ1ZikgKQorICAgICAgICB1c2JpbmZvLT5pZFByb2R1Y3QgID0gYXRvaShidWYp OworCisgICAgaWYgKCFnZXRfdXNiX21hbnVmYWN0dXJlcihnYywgaW50ZiwgYnVmKSApCisgICAg ICAgIHVzYmluZm8tPm1hbnVmID0gc3RyZHVwKGJ1Zik7ICAgICAgICAKKyAgICAKKyAgICBpZiAo IWdldF91c2JfcHJvZHVjdChnYywgaW50ZiwgYnVmKSApCisgICAgICAgIHVzYmluZm8tPnByb2Qg PSBzdHJkdXAoYnVmKTsKKyAgICAKKyAgICBHQ19GUkVFOworICAgIHJldHVybiAwOyAKK30KKwor aW50IGxpYnhsX2hvc3RkZXZfdG9fZGV2aWNlX3VzYihsaWJ4bF9jdHggKmN0eCwgdWludDMyX3Qg ZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldmlkLCBsaWJ4bF9k ZXZpY2VfdXNiICp1c2IpCit7CisgICAgcmV0dXJuIDA7Cit9CisKKy8vSWYgc3BlY2lmaWVkIGJ5 IHVzZXIsIG5vIG5lZWQgdG8gY29udmVydDsgb3RoZXJ3aXNlLCBzZWFyY2ggZm9yIGl0CitpbnQg bGlieGxfaW50Zl90b19kZXZpY2VfdXNiKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbnRmLCBsaWJ4bF9kZXZpY2Vf dXNiICp1c2IpCit7CisgICAgR0NfSU5JVChjdHgpOworICAgIGxpYnhsX2RldmljZV91c2IgKnVz YnM7CisKKyAgICBpbnQgcmMsIG51bSwgaTsKKworICAgIHJjID0gbGlieGxfX2RldmljZV91c2Jf YXNzaWduZWRfbGlzdChnYywgJnVzYnMsICZudW0pOworICAgIGlmKHJjKSBnb3RvIG91dDsgCisg ICAgCisgICAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAgIGlmICghc3RyY21w KGludGYsIHVzYnNbaV0uaW50ZikgKSB7CisgICAgICAgICAgICB1c2ItPmN0cmwgPSB1c2JzW2ld LmN0cmw7CisgICAgICAgICAgICB1c2ItPnBvcnQgPSB1c2JzW2ldLnBvcnQ7CisgICAgICAgICAg ICB1c2ItPmludGYgPSBzdHJkdXAodXNic1tpXS5pbnRmKTsKKyAgICAgICAgICAgIGZyZWUodXNi cyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KK291dDoKKyAgICBH Q19GUkVFOworICAgIGZyZWUodXNicyk7CisgICAgcmV0dXJuIDE7Cit9CisKKy8qCisgKiBMb2Nh bCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50 LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjEuNy4xMC40CgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK