From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 109D289A88 for ; Mon, 1 Jul 2019 13:03:42 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Mon, 1 Jul 2019 15:03:26 +0200 Message-Id: <20190701130326.8887-2-zbigniew.kempczynski@intel.com> In-Reply-To: <20190701130326.8887-1-zbigniew.kempczynski@intel.com> References: <20190701130326.8887-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [EARLY RFC 1/1] Introduce new method of device selection List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Daniel Vetter , Petri Latvala List-ID: Q2hhbmdlIGFkZHMgZGV2aWNlIHNlbGVjdGlvbiBiYXNlZCBvbiBpbXBsZW1lbnRlZCBmaWx0ZXJz LiBDdXJyZW50bHkKZHJtLCBkZXYgYW5kIHBjaSBmaWx0ZXJzIHdlcmUgYWRkZWQgdG8gYWRkcmVz cyBkaWZmZXJlbnQgZGV2aWNlCnNlbGVjdGlvbiBwb3NzaWJpbGl0aWVzLgoKZHJtIGZpbHRlciBh bGxvd3Mgc2VsZWN0aW9uIC9kZXYvZHJpL2NhcmROIG5vZGUgYnkgdXNpbmcgZmlsdGVyCiAgICAg ICAgZHJtOmNhcmQ9Tgp3aGVyZSBOIGlzIG51bWJlciBvZiBjYXJkLgoKZGV2IGZpbHRlciBhbGxv d3Mgc2VsZWN0aW9uIG9mIE4tdGggZGV2aWNlIGluIGFsbCBncHVzIGF2aWxhYmxlCihQQ0kgZGV2 aWNlcyBhdCB0aGUgbW9tZW50KS4gUmVnYXJkbGVzcyBvZiBkcml2ZXIgbG9hZCB0aW1lCmFuZCAv ZGV2L2RyaS9jYXJkTiB0aGlzIGZpbHRlciB3aWxsIHNlbGVjdCBzYW1lIGRldmljZSB1bnRpbApu ZXcgY2FyZCB3aWxsIGJlIGFkZGVkLiBGaWx0ZXIgc3ludGF4IGlzIGFzIGZvbGxvd3M6CiAgICAg ICAgZGV2OmNhcmQ9TgoKcGNpIGZpbHRlciBnaXZlcyB2ZW5kb3IgLyBkZXZpY2UgLyBjYXJkIG51 bWJlciBzZWxlY3Rpb24uIE9ubHkKY2FyZHMgd2hpY2ggbWF0Y2ggdGhpcyBmaWx0ZXIgd2lsbCBi ZSByZXR1cm5lZC4gRmlsdGVyIHN5bnRheDoKICAgICAgICBwY2k6dmVuZG9yPXh4eHgsZGV2aWNl PXl5eXksY2FyZD1OCndoZXJlIHh4eHgsIHl5eXkgYXJlIGhleCBudW1iZXJzIHdoaWNoIGlkZW50 aWZ5IHZlbmRvciBhbmQgZGV2aWNlLApjYXJkIHNlbGVjdHMgTi10aCBtYXRjaGluZyBjYXJkLgoK TmV3IGRldmljZSBzZWxlY3Rpb24gdXNlcyAtLWRldmljZSBmaWx0ZXIgb3IgSUdUX0RFVklDRSBl bnZpcm9uZW50CnZhcmlhYmxlLgoKVG9vbCAnbHNncHUnIHdoaWNoIHVzZXMgZGV2aWNlIHNjYW5u aW5nIGZlYXR1cmUgd2FzIGFkZGVkLgoKU2lnbmVkLW9mZi1ieTogWmJpZ25pZXcgS2VtcGN6ecWE c2tpIDx6Ymlnbmlldy5rZW1wY3p5bnNraUBpbnRlbC5jb20+CkNjOiBBcmthZGl1c3ogSGlsZXIg PGFya2FkaXVzei5oaWxlckBpbnRlbC5jb20+CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3 bGwuY2g+CkNjOiBQZXRyaSBMYXR2YWxhIDxwZXRyaS5sYXR2YWxhQGludGVsLmNvbT4KLS0tCiBs aWIvTWFrZWZpbGUuc291cmNlcyAgIHwgICAyICsKIGxpYi9kcm10ZXN0LmMgICAgICAgICAgfCAg NTMgKystCiBsaWIvZHJtdGVzdC5oICAgICAgICAgIHwgICAxICsKIGxpYi9pZ3RfY29yZS5jICAg ICAgICAgfCAgMTIgKwogbGliL2lndF9jb3JlLmggICAgICAgICB8ICAgMSArCiBsaWIvaWd0X2Rl dmljZV9zY2FuLmMgIHwgOTM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBsaWIvaWd0X2RldmljZV9zY2FuLmggIHwgIDY0ICsrKwogbGliL21lc29uLmJ1aWxkICAg ICAgICB8ICAgMSArCiB0b29scy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsKIHRvb2xzL2xzZ3B1 LmMgICAgICAgICAgfCAyMjIgKysrKysrKysrKwogdG9vbHMvbWVzb24uYnVpbGQgICAgICB8ICAg MSArCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMjkyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9kZXZpY2Vfc2Nhbi5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgbGliL2lndF9kZXZpY2Vfc2Nhbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvbHNn cHUuYwoKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzIGIvbGliL01ha2VmaWxlLnNv dXJjZXMKaW5kZXggZTE2ZGU4NmUuLmMzODNhODE3IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUu c291cmNlcworKysgYi9saWIvTWFrZWZpbGUuc291cmNlcwpAQCAtMjUsNiArMjUsOCBAQCBsaWJf c291cmNlX2xpc3QgPQkgCVwKIAlpZ3RfZGVidWdmcy5oCQlcCiAJaWd0X2RldmljZS5jCQlcCiAJ aWd0X2RldmljZS5oCQlcCisJaWd0X2RldmljZV9zY2FuLmMJXAorCWlndF9kZXZpY2Vfc2Nhbi5o CVwKIAlpZ3RfYXV4LmMJCVwKIAlpZ3RfYXV4LmgJCVwKIAlpZ3RfY29sb3JfZW5jb2RpbmcuYwlc CmRpZmYgLS1naXQgYS9saWIvZHJtdGVzdC5jIGIvbGliL2RybXRlc3QuYwppbmRleCAyNWYyMDM1 My4uZWFmZmI5YjMgMTAwNjQ0Ci0tLSBhL2xpYi9kcm10ZXN0LmMKKysrIGIvbGliL2RybXRlc3Qu YwpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgImlndF9ndC5oIgogI2luY2x1ZGUgImlndF9r bW9kLmgiCiAjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCisjaW5jbHVkZSAiaWd0X2RldmljZV9zY2Fu LmgiCiAjaW5jbHVkZSAidmVyc2lvbi5oIgogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg ImludGVsX3JlZy5oIgpAQCAtMjk2LDIyICsyOTcsNzAgQEAgc3RhdGljIGludCBfX29wZW5fZHJp dmVyKGNvbnN0IGNoYXIgKmJhc2UsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBjaGlwc2V0KQog CXJldHVybiBfX3NlYXJjaF9hbmRfb3BlbihiYXNlLCBvZmZzZXQsIGNoaXBzZXQpOwogfQogCitz dGF0aWMgaW50IF9fb3Blbl9kcml2ZXJfZXhhY3QoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQg aW50IGNoaXBzZXQpCit7CisJc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURf TVVURVhfSU5JVElBTElaRVI7CisJaW50IGZkOworCisJZmQgPSBvcGVuX2RldmljZShuYW1lLCBj aGlwc2V0KTsKKwlpZiAoZmQgIT0gLTEpCisJCXJldHVybiBmZDsKKworCXB0aHJlYWRfbXV0ZXhf bG9jaygmbXV0ZXgpOworCWZvciAoY29uc3Qgc3RydWN0IG1vZHVsZSAqbSA9IG1vZHVsZXM7IG0t Pm1vZHVsZTsgbSsrKSB7CisJCWlmIChjaGlwc2V0ICYgbS0+Yml0KSB7CisJCQlpZiAobS0+bW9k cHJvYmUpCisJCQkJbS0+bW9kcHJvYmUobS0+bW9kdWxlKTsKKwkJCWVsc2UKKwkJCQltb2Rwcm9i ZShtLT5tb2R1bGUpOworCQl9CisJfQorCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdXRleCk7CisK KwlyZXR1cm4gb3Blbl9kZXZpY2UobmFtZSwgY2hpcHNldCk7Cit9CisKKwogLyoqCiAgKiBfX2Ry bV9vcGVuX2RyaXZlcjoKICAqIEBjaGlwc2V0OiBPUidkIGZsYWdzIGZvciBlYWNoIGNoaXBzZXQg dG8gc2VhcmNoLCBlZy4gI0RSSVZFUl9JTlRFTAogICoKLSAqIE9wZW4gdGhlIGZpcnN0IERSTSBk ZXZpY2Ugd2UgY2FuIGZpbmQsIHNlYXJjaGluZyB1cCB0byAxNiBkZXZpY2Ugbm9kZXMKKyAqIEZ1 bmN0aW9uIG9wZW5zIGRldmljZSB3aXRoIGZvbGxvd2luZyBvcmRlcjoKKyAqIDEuIHdoZW4gLS1k ZXZpY2UgYXJndW1lbnQgaXMgcHJlc2VudCBkZXZpY2Ugc2Nhbm5pbmcgd2lsbCBiZSBleGVjdXRl ZCwKKyAqIHRoZW4gZGV2aWNlIHdoaWNoIG1hdGNoZXMgZmlsdGVyIGFyZ3VtZW50IHdpbGwgYmUg c2VsZWN0ZWQuCisgKiAyLiBjb21wYXRpYmlsaXR5IG1vZGUgLSBvcGVuIHRoZSBmaXJzdCBEUk0g ZGV2aWNlIHdlIGNhbiBmaW5kLAorICogc2VhcmNoaW5nIHVwIHRvIDE2IGRldmljZSBub2Rlcy4K ICAqCiAgKiBSZXR1cm5zOgogICogQW4gb3BlbiBEUk0gZmQgb3IgLTEgb24gZXJyb3IKICAqLwog aW50IF9fZHJtX29wZW5fZHJpdmVyKGludCBjaGlwc2V0KQogeworCWlmIChpZ3RfZGV2aWNlX2Fy ZykgeworCQlzdHJ1Y3QgaWd0X2RldmljZV9jYXJkIGNhcmQ7CisJCWludCBtYXRjaDsKKwkJaWd0 X2RldmljZXNfc2NhbihJR1RfU0NBTl9QQ0ksIGZhbHNlKTsKKwkJbWF0Y2ggPSBpZ3RfZGV2aWNl X2NhcmRfbWF0Y2goaWd0X2RldmljZV9hcmcsICZjYXJkKTsKKwkJaWYgKG1hdGNoIDwgMCB8fCAo Y2FyZC5jaGlwc2V0ICE9IGNoaXBzZXQgJiYgY2hpcHNldCAhPSBEUklWRVJfQU5ZKSkKKwkJCXJl dHVybiAtMTsKKwkJcmV0dXJuIF9fb3Blbl9kcml2ZXJfZXhhY3QoY2FyZC5jYXJkLCBjaGlwc2V0 KTsKKwl9CisKIAlyZXR1cm4gX19vcGVuX2RyaXZlcigiL2Rldi9kcmkvY2FyZCIsIDAsIGNoaXBz ZXQpOwogfQogCi1zdGF0aWMgaW50IF9fZHJtX29wZW5fZHJpdmVyX3JlbmRlcihpbnQgY2hpcHNl dCkKK2ludCBfX2RybV9vcGVuX2RyaXZlcl9yZW5kZXIoaW50IGNoaXBzZXQpCiB7CisJaWYgKGln dF9kZXZpY2VfYXJnKSB7CisJCXN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgY2FyZDsKKwkJaW50IG1h dGNoOworCQlpZ3RfZGV2aWNlc19zY2FuKElHVF9TQ0FOX1BDSSwgZmFsc2UpOworCQltYXRjaCA9 IGlndF9kZXZpY2VfY2FyZF9tYXRjaChpZ3RfZGV2aWNlX2FyZywgJmNhcmQpOworCQlpZiAobWF0 Y2ggPCAwIHx8IChjYXJkLmNoaXBzZXQgIT0gY2hpcHNldCAmJiBjaGlwc2V0ICE9IERSSVZFUl9B TlkpKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gX19vcGVuX2RyaXZlcl9leGFjdChjYXJkLnJl bmRlciwgY2hpcHNldCk7CisJfQorCiAJcmV0dXJuIF9fb3Blbl9kcml2ZXIoIi9kZXYvZHJpL3Jl bmRlckQiLCAxMjgsIGNoaXBzZXQpOwogfQogCmRpZmYgLS1naXQgYS9saWIvZHJtdGVzdC5oIGIv bGliL2RybXRlc3QuaAppbmRleCA2YzRjMzg5OS4uNDJiN2Q1OGMgMTAwNjQ0Ci0tLSBhL2xpYi9k cm10ZXN0LmgKKysrIGIvbGliL2RybXRlc3QuaApAQCAtNzYsNiArNzYsNyBAQCBpbnQgZHJtX29w ZW5fZHJpdmVyKGludCBjaGlwc2V0KTsKIGludCBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKGludCBj aGlwc2V0KTsKIGludCBkcm1fb3Blbl9kcml2ZXJfcmVuZGVyKGludCBjaGlwc2V0KTsKIGludCBf X2RybV9vcGVuX2RyaXZlcihpbnQgY2hpcHNldCk7CitpbnQgX19kcm1fb3Blbl9kcml2ZXJfcmVu ZGVyKGludCBjaGlwc2V0KTsKIAogdm9pZCBnZW1fcXVpZXNjZW50X2dwdShpbnQgZmQpOwogCmRp ZmYgLS1naXQgYS9saWIvaWd0X2NvcmUuYyBiL2xpYi9pZ3RfY29yZS5jCmluZGV4IDZiOWYwNDI1 Li4zZDRmODgzMyAxMDA2NDQKLS0tIGEvbGliL2lndF9jb3JlLmMKKysrIGIvbGliL2lndF9jb3Jl LmMKQEAgLTI1Nyw2ICsyNTcsOSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBleGl0X2hhbmRsZXJf Y291bnQ7CiBjb25zdCBjaGFyICppZ3RfaW50ZXJhY3RpdmVfZGVidWc7CiAKKy8qIGRldmljZSBz ZWxlY3Rpb24gKi8KK2NvbnN0IGNoYXIgKmlndF9kZXZpY2VfYXJnID0gTlVMTDsKKwogLyogc3Vi dGVzdHMgaGVscGVycyAqLwogc3RhdGljIGJvb2wgbGlzdF9zdWJ0ZXN0cyA9IGZhbHNlOwogc3Rh dGljIGNoYXIgKnJ1bl9zaW5nbGVfc3VidGVzdCA9IE5VTEw7CkBAIC0yODksNiArMjkyLDcgQEAg ZW51bSB7CiAJT1BUX0RFU0NSSVBUSU9OLAogCU9QVF9ERUJVRywKIAlPUFRfSU5URVJBQ1RJVkVf REVCVUcsCisJT1BUX0RFVklDRSwKIAlPUFRfSEVMUCA9ICdoJwogfTsKIApAQCAtNTU4LDYgKzU2 Miw3IEBAIHN0YXRpYyB2b2lkIHByaW50X3VzYWdlKGNvbnN0IGNoYXIgKmhlbHBfc3RyLCBib29s IG91dHB1dF9vbl9zdGRlcnIpCiAJCSAgICIgIC0tZGVidWdbPWxvZy1kb21haW5dXG4iCiAJCSAg ICIgIC0taW50ZXJhY3RpdmUtZGVidWdbPWRvbWFpbl1cbiIKIAkJICAgIiAgLS1oZWxwLWRlc2Ny aXB0aW9uXG4iCisJCSAgICIgIC0tZGV2aWNlIGZpbHRlclxuIgogCQkgICAiICAtLWhlbHB8LWhc biIpOwogCWlmIChoZWxwX3N0cikKIAkJZnByaW50ZihmLCAiJXNcbiIsIGhlbHBfc3RyKTsKQEAg LTY1OSw2ICs2NjQsOCBAQCBzdGF0aWMgdm9pZCBjb21tb25faW5pdF9lbnYodm9pZCkKIAlpZiAo ZW52KSB7CiAJCV9fc2V0X2ZvcmNlZF9kcml2ZXIoZW52KTsKIAl9CisKKwlpZ3RfZGV2aWNlX2Fy ZyA9IGdldGVudigiSUdUX0RFVklDRSIpOwogfQogCiBzdGF0aWMgaW50IGNvbW1vbl9pbml0KGlu dCAqYXJnYywgY2hhciAqKmFyZ3YsCkBAIC02NzUsNiArNjgyLDcgQEAgc3RhdGljIGludCBjb21t b25faW5pdChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2LAogCQl7ImhlbHAtZGVzY3JpcHRpb24iLCAg bm9fYXJndW1lbnQsICAgICAgIE5VTEwsIE9QVF9ERVNDUklQVElPTn0sCiAJCXsiZGVidWciLCAg ICAgICAgICAgICBvcHRpb25hbF9hcmd1bWVudCwgTlVMTCwgT1BUX0RFQlVHfSwKIAkJeyJpbnRl cmFjdGl2ZS1kZWJ1ZyIsIG9wdGlvbmFsX2FyZ3VtZW50LCBOVUxMLCBPUFRfSU5URVJBQ1RJVkVf REVCVUd9LAorCQl7ImRldmljZSIsICAgICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEws IE9QVF9ERVZJQ0V9LAogCQl7ImhlbHAiLCAgICAgICAgICAgICAgbm9fYXJndW1lbnQsICAgICAg IE5VTEwsIE9QVF9IRUxQfSwKIAkJezAsIDAsIDAsIDB9CiAJfTsKQEAgLTc4Niw2ICs3OTQsMTAg QEAgc3RhdGljIGludCBjb21tb25faW5pdChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2LAogCQkJcHJp bnRfdGVzdF9kZXNjcmlwdGlvbigpOwogCQkJcmV0ID0gLTE7CiAJCQlnb3RvIG91dDsKKwkJY2Fz ZSBPUFRfREVWSUNFOgorCQkJYXNzZXJ0KG9wdGFyZyk7CisJCQkJaWd0X2RldmljZV9hcmcgPSBz dHJkdXAob3B0YXJnKTsKKwkJCWJyZWFrOwogCQljYXNlIE9QVF9IRUxQOgogCQkJcHJpbnRfdXNh Z2UoaGVscF9zdHIsIGZhbHNlKTsKIAkJCXJldCA9IC0xOwpkaWZmIC0tZ2l0IGEvbGliL2lndF9j b3JlLmggYi9saWIvaWd0X2NvcmUuaAppbmRleCA4OGE5NWVjMi4uNmE2N2JlYzAgMTAwNjQ0Ci0t LSBhL2xpYi9pZ3RfY29yZS5oCisrKyBiL2xpYi9pZ3RfY29yZS5oCkBAIC04NzcsNiArODc3LDcg QEAgYm9vbCBpZ3RfcnVuX2luX3NpbXVsYXRpb24odm9pZCk7CiB2b2lkIGlndF9za2lwX29uX3Np bXVsYXRpb24odm9pZCk7CiAKIGV4dGVybiBjb25zdCBjaGFyICppZ3RfaW50ZXJhY3RpdmVfZGVi dWc7CitleHRlcm4gY29uc3QgY2hhciAqaWd0X2RldmljZV9hcmc7CiAKIC8qKgogICogaWd0X2xv Z19sZXZlbDoKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZGV2aWNlX3NjYW4uYyBiL2xpYi9pZ3RfZGV2 aWNlX3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNGU5ODFhZTcK LS0tIC9kZXYvbnVsbAorKysgYi9saWIvaWd0X2RldmljZV9zY2FuLmMKQEAgLTAsMCArMSw5MzYg QEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgor ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisg KgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUg ImlndC5oIgorI2luY2x1ZGUgImlndF9rbW9kLmgiCisjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCisj aW5jbHVkZSAiaWd0X2RldmljZS5oIgorI2luY2x1ZGUgImlndF9kZXZpY2Vfc2Nhbi5oIgorI2lu Y2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxsaWJ1ZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbGlt aXRzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworLy8jZGVmaW5lIERFQlVHX0RFVklDRV9T Q0FOCisjaWZkZWYgREVCVUdfREVWSUNFX1NDQU4KKyNkZWZpbmUgREJHKC4uLikgXAoreyBcCisJ c3RydWN0IHRpbWV2YWwgdG07IFwKKwlnZXR0aW1lb2ZkYXkoJnRtLCBOVUxMKTsgXAorCXByaW50 ZigiJTEwbGQuJTAzbGQ6ICIsIHRtLnR2X3NlYywgdG0udHZfdXNlYyk7IFwKKwlwcmludGYoX19W QV9BUkdTX18pOyBcCisJfQorCisjZWxzZQorI2RlZmluZSBEQkcoLi4uKSB7fQorI2VuZGlmCisK KyNkZWZpbmUgSUdUX0JVU19QQ0lfRFJJVkVSU19ESVIgIi9zeXMvYnVzL3BjaS9kcml2ZXJzIgor I2RlZmluZSBJR1RfRFJNX1BBVEggIi9kZXYvZHJpIgorCitzdGF0aWMgR0hhc2hUYWJsZSAqYmxh Y2tsaXN0X2tleXNfaHQ7IC8vc3lzYXR0cnMgd2UgZG9uJ3Qgd2FudCB0byByZWFkCitzdGF0aWMg R0hhc2hUYWJsZSAqZ3B1X3BjaV9jbGFzc19odDsgIC8vZ3B1IHBjaSBjbGFzc2VzIHdlIGtub3cK K3N0YXRpYyBHSGFzaFRhYmxlICpncHVfdmVuZG9yX2h0Oworc3RhdGljIEdIYXNoVGFibGUgKmZp bHRlcl9kZWZfaHQ7CisKK3N0cnVjdCBpZ3RfZGV2aWNlIHsKKwlHSGFzaFRhYmxlICpwcm9wc19o dDsKKwlHSGFzaFRhYmxlICphdHRyc19odDsKKwljaGFyICpzeXNwYXRoOworCWNoYXIgKmRydnBh dGg7CisJY2hhciAqZHJtX2NhcmRfcGF0aDsKKwljaGFyICpkcm1fcmVuZGVyX3BhdGg7CisJY2hh ciAqdmVuZG9yOworCWNoYXIgKmRldmljZTsKK307CisKK3N0cnVjdCBpZ3RfZGV2aWNlcyB7CisJ Y29uc3QgY2hhciAqZmlsdGVyX25hbWU7CisJY29uc3QgY2hhciAqZmlsdGVyX2RhdGE7CisJR1B0 ckFycmF5ICpwY2lfZGV2czsJCS8vYWxsIGdwdSBkZXZpY2VzIGFycmF5CisJR1B0ckFycmF5ICpw Y2lfZGV2c192aWV3OwkvL2ZpbHRlcmVkIHZpZXcKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWd0X2Rl dmljZXMgaWd0X2RldnM7CitzdGF0aWMgY2hhciAqaWd0X2RldnNfZmlsdGVyOworc3RhdGljIGJv b2wgaWd0X2RldnNfc2Nhbm5lZCA9IGZhbHNlOworCitzdHJ1Y3QgbmFtZV92YWx1ZSB7CisJY29u c3QgY2hhciAqbmFtZTsKKwlncG9pbnRlciAqdmFsdWU7Cit9OworCitzdHJ1Y3QgdmVuZG9yX3Nw ZWMgeworCWNvbnN0IGNoYXIgKnZlbmRvcjsKKwljb25zdCBjaGFyICptb2R1bGU7CisJaW50IGNo aXBzZXQ7Cit9OworCitzdHJ1Y3QgbmFtZV92YWx1ZSBncHVfcGNpX2NsYXNzX2xpc3RbXSA9IHsK Kwl7ICIzMDAwMCIsIChncG9pbnRlcikgIlZHQSBjb21wYXRpYmlsZSBjb250cm9sbGVyIiB9LAor CXsgIjMwMTAwIiwgKGdwb2ludGVyKSAiWEdBIGNvbXBhdGliaWxlIGNvbnRyb2xsZXIiIH0sCisJ eyAiMzAyMDAiLCAoZ3BvaW50ZXIpICIzRCBjb250cm9sbGVyIiB9LAorCXsgIjM4MDAwIiwgKGdw b2ludGVyKSAiRGlzcGxheSBjb250cm9sbGVyIiB9LAorCXsgTlVMTCwgfSwKK307CisKK3N0YXRp YyBzdHJ1Y3QgdmVuZG9yX3NwZWMgdl9pbnRlbCAgPSB7IC52ZW5kb3IgPSAiSW50ZWwiLCAubW9k dWxlID0gImk5MTUiLAorCQkJCSAgICAgLmNoaXBzZXQgPSBEUklWRVJfSU5URUwgfTsKK3N0YXRp YyBzdHJ1Y3QgdmVuZG9yX3NwZWMgdl9hbWQgICAgPSB7IC52ZW5kb3IgPSAiQU1EIiwgLm1vZHVs ZSA9ICJhbWRncHUiLAorCQkJCSAgICAgLmNoaXBzZXQgPSBEUklWRVJfQU1ER1BVIH07CitzdGF0 aWMgc3RydWN0IHZlbmRvcl9zcGVjIHZfbnZpZGlhID0geyAudmVuZG9yID0gIk5WSURJQSIsIC5t b2R1bGUgPSAibnZpZGlhIiwKKwkJCQkgICAgIC5jaGlwc2V0ID0gRFJJVkVSX0FOWSB9OworCitz dHJ1Y3QgbmFtZV92YWx1ZSBncHVfdmVuZG9yX2xpc3RbXSA9IHsKKwl7ICI4MDg2IiwgKGdwb2lu dGVyKSAmdl9pbnRlbCB9LAorCXsgIjEwMDIiLCAoZ3BvaW50ZXIpICZ2X2FtZCB9LAorCXsgIjEw MjIiLCAoZ3BvaW50ZXIpICZ2X2FtZCB9LAorCXsgIjEwZGUiLCAoZ3BvaW50ZXIpICZ2X252aWRp YSB9LAorCXsgTlVMTCwgfSwKK307CisKKy8qIEdlbmVyaWMgaGFzaCB0YWJsZSBmaWxsIGZ1bmN0 aW9uLCByZXF1aXJlcyBuYW1lIC8gdmFsdWUgcHRycyBhcnJheSAqLworc3RhdGljIHZvaWQgZmls bF9odChHSGFzaFRhYmxlICoqaHQsIHN0cnVjdCBuYW1lX3ZhbHVlICpkYXRhKQoreworCWlmICgq aHQpCisJCXJldHVybjsKKworCSpodCA9IGdfaGFzaF90YWJsZV9uZXcoZ19zdHJfaGFzaCwgZ19z dHJfZXF1YWwpOworCWlndF9hc3NlcnQoKmh0KTsKKworCXdoaWxlIChkYXRhLT5uYW1lKSB7CisJ CWdfaGFzaF90YWJsZV9pbnNlcnQoKmh0LAorCQkJCSAgICAoZ3BvaW50ZXIpIGRhdGEtPm5hbWUs CisJCQkJICAgIGRhdGEtPnZhbHVlKTsKKwkJZGF0YSsrOworCX0KK30KKworI2RlZmluZSBnZXRf Z3B1X3BjaV9jbGFzcyhwY2lfY2xhc3MpIFwKKwlnX2hhc2hfdGFibGVfbG9va3VwKGdwdV9wY2lf Y2xhc3NfaHQsIHBjaV9jbGFzcykKKworI2RlZmluZSBpc19wY2lfY2xhc3NfZ3B1KHBjaV9jbGFz cykgXAorCWdfaGFzaF90YWJsZV9jb250YWlucyhncHVfcGNpX2NsYXNzX2h0LCBwY2lfY2xhc3Mp CisKKyNkZWZpbmUgZ2V0X3ZlbmRvcl9zcGVjKGlkKSBcCisJZ19oYXNoX3RhYmxlX2xvb2t1cChn cHVfdmVuZG9yX2h0LCBpZCkKKworLyogUmVhZGluZyBzeXNhdHRyIHZhbHVlcyBjYW4gdGFrZSB0 aW1lIChldmVuIHNlY29uZHMpLAorICogd2Ugd2FudCB0byBhdm9pZCByZWFkaW5nIHN1Y2gga2V5 cy4KKyovCitzdGF0aWMgdm9pZCBwb3B1bGF0ZV9ibGFja2xpc3Rfa2V5cyh2b2lkKQoreworCWNv bnN0IGNoYXIgKmtleXNbXSA9IHsgImNvbmZpZyIsICJtb2RhbGlhcyIsCisJCQkgICAgICAgInJl c291cmNlIiwKKwkJCSAgICAgICAicmVzb3VyY2UwIiwgInJlc291cmNlMSIsICJyZXNvdXJjZTIi LAorCQkJICAgICAgICJyZXNvdXJjZTMiLCAicmVzb3VyY2U0IiwgInJlc291cmNlNSIsCisJCQkg ICAgICAgInJlc291cmNlMF93YyIsICJyZXNvdXJjZTFfd2MiLCAicmVzb3VyY2UyX3djIiwKKwkJ CSAgICAgICAicmVzb3VyY2UzX3djIiwgInJlc291cmNlNF93YyIsICJyZXNvdXJjZTVfd2MiLAor CQkJICAgICAgICJkcml2ZXIiLAorCQkJICAgICAgICJ1ZXZlbnQiLCBOVUxMfTsKKwljb25zdCBj aGFyICprZXk7CisJaW50IGkgPSAwOworCisJaWYgKGJsYWNrbGlzdF9rZXlzX2h0KQorCQlyZXR1 cm47CisKKwlibGFja2xpc3Rfa2V5c19odCA9IGdfaGFzaF90YWJsZV9uZXcoZ19zdHJfaGFzaCwg Z19zdHJfZXF1YWwpOworCWlndF9hc3NlcnQoYmxhY2tsaXN0X2tleXNfaHQpOworCisJd2hpbGUg KChrZXkgPSBrZXlzW2krK10pKQorCQlnX2hhc2hfdGFibGVfYWRkKGJsYWNrbGlzdF9rZXlzX2h0 LCAoZ3BvaW50ZXIpIGtleSk7Cit9CisKK3N0YXRpYyBib29sIGlzX29uX2JsYWNrbGlzdChjb25z dCBjaGFyICprZXkpCit7CisJcmV0dXJuIGdfaGFzaF90YWJsZV9jb250YWlucyhibGFja2xpc3Rf a2V5c19odCwga2V5KTsKK30KKworc3RhdGljIHN0cnVjdCBpZ3RfZGV2aWNlICppZ3RfZGV2aWNl X25ldyh2b2lkKQoreworCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXY7CisJZGV2ID0gY2FsbG9jKDEs IHNpemVvZihzdHJ1Y3QgaWd0X2RldmljZSkpOworCWlmICghZGV2KQorCQlyZXR1cm4gTlVMTDsK KworCWRldi0+YXR0cnNfaHQgPSBnX2hhc2hfdGFibGVfbmV3KGdfc3RyX2hhc2gsIGdfc3RyX2Vx dWFsKTsKKwlkZXYtPnByb3BzX2h0ID0gZ19oYXNoX3RhYmxlX25ldyhnX3N0cl9oYXNoLCBnX3N0 cl9lcXVhbCk7CisKKwlpZiAoZGV2LT5hdHRyc19odCAmJiBkZXYtPnByb3BzX2h0KQorCQlyZXR1 cm4gZGV2OworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGlndF9kZXZpY2VfYWRk X3Byb3Aoc3RydWN0IGlndF9kZXZpY2UgKmRldiwKKwkJCQljb25zdCBjaGFyICprZXksIGNvbnN0 IGNoYXIgKnZhbHVlKQoreworCWlmICgha2V5IHx8ICF2YWx1ZSkKKwkJcmV0dXJuOworCisJZ19o YXNoX3RhYmxlX2luc2VydChkZXYtPnByb3BzX2h0LCBzdHJkdXAoa2V5KSwgc3RyZHVwKHZhbHVl KSk7Cit9CisKK3N0YXRpYyB2b2lkIGlndF9kZXZpY2VfYWRkX2F0dHIoc3RydWN0IGlndF9kZXZp Y2UgKmRldiwKKwkJCQljb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWNv bnN0IGNoYXIgKnYgPSB2YWx1ZTsKKworCWlmICgha2V5KQorCQlyZXR1cm47CisKKwkvKiBJdCdz IHBvc3NpYmxlIHdlIGhhdmUgc3ltbGluayBhdCBrZXkgZmlsZW5hbWUsIGJ1dCB1ZGV2CisJICog bGlicmFyeSByZXNvbHZlcyBvbmx5IGZldyBvZiB0aGVtICovCisJaWYgKCF2KSB7CisJCXN0cnVj dCBzdGF0IHN0OworCQljaGFyIHBhdGhbUEFUSF9NQVhdOworCQljaGFyIGxpbmt0b1tQQVRIX01B WF07CisJCWludCBsZW47CisKKwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMi LCBkZXYtPnN5c3BhdGgsIGtleSk7CisJCWlmIChsc3RhdChwYXRoLCAmc3QpICE9IDApCisJCQly ZXR1cm47CisKKwkJbGVuID0gcmVhZGxpbmsocGF0aCwgbGlua3RvLCBzaXplb2YobGlua3RvKSk7 CisJCWlmIChsZW4gPD0gMCB8fCBsZW4gPT0gKHNzaXplX3QpIHNpemVvZihsaW5rdG8pKQorCQkJ cmV0dXJuOworCQlsaW5rdG9bbGVuXSA9ICdcMCc7CisJCXYgPSBzdHJyY2hyKGxpbmt0bywgJy8n KTsKKwkJaWYgKHYgPT0gTlVMTCkKKwkJCXJldHVybjsKKwkJdisrOworCX0KKworCWdfaGFzaF90 YWJsZV9pbnNlcnQoZGV2LT5hdHRyc19odCwgc3RyZHVwKGtleSksIHN0cmR1cCh2KSk7Cit9CisK K3N0YXRpYyB2b2lkIHNjYW5fcHJvcHMoc3RydWN0IHVkZXZfZGV2aWNlICpkZXYsIHN0cnVjdCBp Z3RfZGV2aWNlICppZGV2KQoreworCXN0cnVjdCB1ZGV2X2xpc3RfZW50cnkgKmVudHJ5OworCisJ ZW50cnkgPSB1ZGV2X2RldmljZV9nZXRfcHJvcGVydGllc19saXN0X2VudHJ5KGRldik7CisJd2hp bGUgKGVudHJ5KSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25h bWUoZW50cnkpOworCQljb25zdCBjaGFyICp2YWx1ZSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfdmFs dWUoZW50cnkpOworCQlpZ3RfZGV2aWNlX2FkZF9wcm9wKGlkZXYsIG5hbWUsIHZhbHVlKTsKKwkJ ZW50cnkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25leHQoZW50cnkpOworCQlEQkcoInByb3A6ICVz LCB2YWw6ICVzXG4iLCBuYW1lLCB2YWx1ZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzY2FuX2F0 dHJzKHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWd0X2RldmljZSAqaWRldikKK3sK KwlzdHJ1Y3QgdWRldl9saXN0X2VudHJ5ICplbnRyeTsKKworCWVudHJ5ID0gdWRldl9kZXZpY2Vf Z2V0X3N5c2F0dHJfbGlzdF9lbnRyeShkZXYpOworCXdoaWxlIChlbnRyeSkgeworCQljb25zdCBj aGFyICprZXkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25hbWUoZW50cnkpOworCQljb25zdCBjaGFy ICp2YWx1ZTsKKworCQlpZiAoaXNfb25fYmxhY2tsaXN0KGtleSkpIHsKKwkJCWVudHJ5ID0gdWRl dl9saXN0X2VudHJ5X2dldF9uZXh0KGVudHJ5KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdmFs dWUgPSB1ZGV2X2RldmljZV9nZXRfc3lzYXR0cl92YWx1ZShkZXYsIGtleSk7CisJCWlndF9kZXZp Y2VfYWRkX2F0dHIoaWRldiwga2V5LCB2YWx1ZSk7CisJCWVudHJ5ID0gdWRldl9saXN0X2VudHJ5 X2dldF9uZXh0KGVudHJ5KTsKKwkJREJHKCJhdHRyOiAlcywgdmFsOiAlc1xuIiwga2V5LCB2YWx1 ZSk7CisJfQorfQorCisjZGVmaW5lIGdldF9wcm9wKGRldiwgcHJvcCkgKGNoYXIgKikgZ19oYXNo X3RhYmxlX2xvb2t1cChkZXYtPnByb3BzX2h0LCBwcm9wKQorI2RlZmluZSBnZXRfYXR0cihkZXYs IGF0dHIpIChjaGFyICopIGdfaGFzaF90YWJsZV9sb29rdXAoZGV2LT5hdHRyc19odCwgYXR0cikK KyNkZWZpbmUgZ2V0X3Byb3BfcGNpX2lkKGRldikgZ2V0X3Byb3AoZGV2LCAiUENJX0lEIikKKyNk ZWZpbmUgZ2V0X3Byb3BfcGNpX3Nsb3QoZGV2KSBnZXRfcHJvcChkZXYsICJQQ0lfU0xPVF9OQU1F IikKKworLyogc2NhbnMgUENJX0lEIHByb3BlcnR5LCBzcGxpdHMgdG8geHh4eDp5eXl5IGFuZCBz dG9yZXMKKyAqIHh4eHggdG8gZGV2LT52ZW5kb3IgYW5kIHl5eXkgdG8gZGV2LT5kZXZpY2UgZm9y CisgKiBmYXN0ZXIgYWNjZXNzLgorICovCitzdGF0aWMgdm9pZCBzZXRfdmVuZG9yX2RldmljZShz dHJ1Y3QgaWd0X2RldmljZSAqZGV2KQoreworCWNvbnN0IGNoYXIgKnBjaV9pZCA9IGdldF9wcm9w X3BjaV9pZChkZXYpOworCWlmICghcGNpX2lkIHx8IHN0cmxlbihwY2lfaWQpICE9IDkpCisJCXJl dHVybjsKKwlkZXYtPnZlbmRvciA9IHN0cm5kdXAocGNpX2lkLCA0KTsKKwlkZXYtPmRldmljZSA9 IHN0cm5kdXAocGNpX2lkICsgNSwgNCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfZHJtX3BhdGhz KHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYpCit7CisJY2hhciBkaXJuYW1lW1BBVEhfTUFYXTsKKwlE SVIgKmRpcjsKKwljb25zdCBjaGFyICpkcml2ZXIgPSBnZXRfcHJvcChkZXYsICJEUklWRVIiKTsK Kwljb25zdCBjaGFyICpkZXZwYXRoID0gZ2V0X3Byb3AoZGV2LCAiREVWUEFUSCIpOworCXN0cnVj dCBkaXJlbnQgKmU7CisKKwkvKiBUaGVyZSdzIG5vIERSSVZFUiwgc28gbm8gL2Rldi9kcmkvY2Fy ZFggYW5kIC9kZXYvZHJpL3JlbmRlckQKKwkgKiBmaWxlcyBleGlzdHMuIElmIHRoZXJlJ3Mgbm8g REVWUEFUSCB0aGVyZSdzIHNvbWV0aGluZyB3cm9uZworCSAqIGFzIHdlbGwuICovCisJaWYgKCFk cml2ZXIgfHwgIWRldnBhdGgpCisJCXJldHVybjsKKworCXNucHJpbnRmKGRpcm5hbWUsIFBBVEhf TUFYLCAiJXMvZHJtIiwgZGV2LT5zeXNwYXRoKTsKKwlkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOwor CWlmICghZGlyKQorCQlyZXR1cm47CisKKwl3aGlsZSgoZSA9IHJlYWRkaXIoZGlyKSkpIHsKKwkJ aW50IG47CisJCWlmIChzc2NhbmYoZS0+ZF9uYW1lLCAiY2FyZCVkIiwgJm4pID09IDEpCisJCQlk ZXYtPmRybV9jYXJkX3BhdGggPSBnX3N0cmR1cF9wcmludGYoIiVzLyVzIiwKKwkJCQkJCQkgICAg IElHVF9EUk1fUEFUSCwKKwkJCQkJCQkgICAgIGUtPmRfbmFtZSk7CisJCWVsc2UgaWYgKHNzY2Fu ZihlLT5kX25hbWUsICJyZW5kZXJEJWQiLCAmbikgPT0gMSkKKwkJCWRldi0+ZHJtX3JlbmRlcl9w YXRoID0gZ19zdHJkdXBfcHJpbnRmKCIlcy8lcyIsCisJCQkJCQkJICAgICAgIElHVF9EUk1fUEFU SCwKKwkJCQkJCQkgICAgICAgZS0+ZF9uYW1lKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKworCWlm IChkZXYtPmRybV9jYXJkX3BhdGgpCisJCURCRygiY2FyZDogJXNcbiIsIGRldi0+ZHJtX2NhcmRf cGF0aCk7CisJaWYgKGRldi0+ZHJtX3JlbmRlcl9wYXRoKQorCQlEQkcoInJlbmQ6ICVzXG4iLCBk ZXYtPmRybV9yZW5kZXJfcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjYW5fcGNpX2RldmljZXMo dm9pZCkKK3sKKwlzdHJ1Y3QgdWRldiAqdWRldjsKKwlzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldjsK KwlzdHJ1Y3QgdWRldl9lbnVtZXJhdGUgKmVudW1lcmF0ZTsKKwlzdHJ1Y3QgdWRldl9saXN0X2Vu dHJ5ICpkZXZpY2VzLCAqZGV2X2xpc3RfZW50cnk7CisKKwl1ZGV2ID0gdWRldl9uZXcoKTsKKwlp Z3RfYXNzZXJ0KHVkZXYpOworCisJZW51bWVyYXRlID0gdWRldl9lbnVtZXJhdGVfbmV3KHVkZXYp OworCWlndF9hc3NlcnQoZW51bWVyYXRlKTsKKworCXVkZXZfZW51bWVyYXRlX2FkZF9tYXRjaF9z dWJzeXN0ZW0oZW51bWVyYXRlLCAicGNpIik7CisJdWRldl9lbnVtZXJhdGVfc2Nhbl9kZXZpY2Vz KGVudW1lcmF0ZSk7CisKKwlkZXZpY2VzID0gdWRldl9lbnVtZXJhdGVfZ2V0X2xpc3RfZW50cnko ZW51bWVyYXRlKTsKKwlpZ3RfYXNzZXJ0KGRldmljZXMpOworCisJaWYgKCFpZ3RfZGV2cy5wY2lf ZGV2cykKKwkJaWd0X2RldnMucGNpX2RldnMgPSBnX3B0cl9hcnJheV9zaXplZF9uZXcoNCk7CisJ aWYgKCFpZ3RfZGV2cy5wY2lfZGV2c192aWV3KQorCQlpZ3RfZGV2cy5wY2lfZGV2c192aWV3ID0g Z19wdHJfYXJyYXlfc2l6ZWRfbmV3KDQpOworCisJdWRldl9saXN0X2VudHJ5X2ZvcmVhY2goZGV2 X2xpc3RfZW50cnksIGRldmljZXMpIHsKKwkJc3RydWN0IGlndF9kZXZpY2UgKmlkZXY7CisJCWNv bnN0IGNoYXIgKnBhdGg7CisJCWNvbnN0IGNoYXIgKnBjaV9jbGFzczsKKworCQlwYXRoID0gdWRl dl9saXN0X2VudHJ5X2dldF9uYW1lKGRldl9saXN0X2VudHJ5KTsKKwkJZGV2ID0gdWRldl9kZXZp Y2VfbmV3X2Zyb21fc3lzcGF0aCh1ZGV2LCBwYXRoKTsKKworCQlwY2lfY2xhc3MgPSB1ZGV2X2Rl dmljZV9nZXRfcHJvcGVydHlfdmFsdWUoZGV2LCAiUENJX0NMQVNTIik7CisJCWlmICghaXNfcGNp X2NsYXNzX2dwdShwY2lfY2xhc3MpKSB7CisJCQl1ZGV2X2RldmljZV91bnJlZihkZXYpOworCQkJ Y29udGludWU7CisJCX0KKwkJaWRldiA9IGlndF9kZXZpY2VfbmV3KCk7CisJCWlndF9hc3NlcnQo aWRldik7CisKKwkJaWRldi0+c3lzcGF0aCA9IHN0cmR1cCh1ZGV2X2RldmljZV9nZXRfc3lzcGF0 aChkZXYpKTsKKwkJc2Nhbl9wcm9wcyhkZXYsIGlkZXYpOworCQlzY2FuX2F0dHJzKGRldiwgaWRl dik7CisJCXNldF92ZW5kb3JfZGV2aWNlKGlkZXYpOworCQlmaW5kX2RybV9wYXRocyhpZGV2KTsK KworCQlEQkcoIi0tLVxuIik7CisKKwkJZ19wdHJfYXJyYXlfYWRkKGlndF9kZXZzLnBjaV9kZXZz LCBpZGV2KTsKKwkJZ19wdHJfYXJyYXlfYWRkKGlndF9kZXZzLnBjaV9kZXZzX3ZpZXcsIGlkZXYp OworCisJCXVkZXZfZGV2aWNlX3VucmVmKGRldik7CisJfQorCXVkZXZfZW51bWVyYXRlX3VucmVm KGVudW1lcmF0ZSk7CisJdWRldl91bnJlZih1ZGV2KTsKK30KKworc3RhdGljIHZvaWQgc2Nhbl9w bGF0Zm9ybV9kZXZpY2VzKHZvaWQpCit7Cit9CisKK3N0cnVjdCBuYW1lX3ZhbHVlIGZpbHRlcl9k ZWZfbGlzdFtdOworc3RhdGljIHZvaWQgcG9wdWxhdGVfZ3B1X2RhdGEodm9pZCkKK3sKKwlmaWxs X2h0KCZncHVfcGNpX2NsYXNzX2h0LCAmZ3B1X3BjaV9jbGFzc19saXN0WzBdKTsKKwlmaWxsX2h0 KCZncHVfdmVuZG9yX2h0LCAmZ3B1X3ZlbmRvcl9saXN0WzBdKTsKKwlmaWxsX2h0KCZmaWx0ZXJf ZGVmX2h0LCAmZmlsdGVyX2RlZl9saXN0WzBdKTsKK30KKwordm9pZCBpZ3RfZGV2aWNlc19zY2Fu KGVudW0gaWd0X2RldmljZXNfc2Nhbl90eXBlIHNjYW50eXBlLCBib29sIGZvcmNlKQoreworCS8q IFNraXAgc2Nhbm5pbmcgaWYgYWxyZWFkeSBkb25lICovCisJaWYgKGlndF9kZXZzX3NjYW5uZWQg JiYgIWZvcmNlKQorCQlyZXR1cm47CisKKwlwb3B1bGF0ZV9ibGFja2xpc3Rfa2V5cygpOyAgICAg IC8va2V5cyBmcm9tIHN5c2F0dHIgd2Ugc2tpcAorCXBvcHVsYXRlX2dwdV9kYXRhKCk7CisKKwlp ZiAoc2NhbnR5cGUgJiBJR1RfU0NBTl9QQ0kpCisJCXNjYW5fcGNpX2RldmljZXMoKTsKKwlpZiAo c2NhbnR5cGUgJiBJR1RfU0NBTl9QTEFURk9STSkKKwkJc2Nhbl9wbGF0Zm9ybV9kZXZpY2VzKCk7 CisKKwlpZ3RfZGV2c19zY2FubmVkID0gdHJ1ZTsKK30KKworI2RlZmluZSBwcl9zaW1wbGUoaywg dikgcHJpbnRmKCIgICAgJS0xNnM6ICVzXG4iLCBrLCB2KQorI2RlZmluZSBwcl9zaW1wbGVfcHJv cChkZXYsIGtleSkgcHJfc2ltcGxlKGtleSwgZ2V0X3Byb3AoZGV2LCBrZXkpKQorI2RlZmluZSBw cl9zaW1wbGVfYXR0cihkZXYsIGtleSkgcHJfc2ltcGxlKGtleSwgZ2V0X2F0dHIoZGV2LCBrZXkp KQorCitzdGF0aWMgdm9pZCBfX3ByaW50X3ZlbmRvcihzdHJ1Y3QgaWd0X2RldmljZSAqZGV2KQor eworCXN0cnVjdCB2ZW5kb3Jfc3BlYyAqdnM7CisJY2hhciAqaW5mbyA9IGFsbG9jYSgyNTYpOwor CisJdnMgPSBnZXRfdmVuZG9yX3NwZWMoZGV2LT52ZW5kb3IpOworCXNucHJpbnRmKGluZm8sIDI1 NiwgIiVzICglcywgbW9kdWxlOiAlcyVzKSIsIGRldi0+dmVuZG9yLAorCQkgdnMgPyB2cy0+dmVu ZG9yIDogInVua25vd24iLAorCQkgdnMgPyB2cy0+bW9kdWxlIDogInVua25vd24iLAorCQkgZGV2 LT5kcm1fY2FyZF9wYXRoID8gIiIgOiAiIFtub3QgYmluZGVkL2xvYWRlZF0iKTsKKwlwcl9zaW1w bGUoInZlbmRvciIsIGluZm8pOworfQorCitzdGF0aWMgdm9pZCBpZ3RfZGV2c19wcmludF9zaW1w bGUoYm9vbCBzaG93X3Byb3BzLCBib29sIHNob3dfYXR0cnMpCit7CisJc3RydWN0IGlndF9kZXZp Y2UgKmRldjsKKwlpbnQgaTsKKwlHUHRyQXJyYXkgKnZpZXcgPSBpZ3RfZGV2cy5wY2lfZGV2c192 aWV3OworCisJaWYgKCF2aWV3KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgdmlldy0+ bGVuOyBpKyspIHsKKwkJZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgodmlldywgaSk7CisJCXByaW50 ZigiJXNcbiIsIGdldF9wcm9wX3BjaV9zbG90KGRldikpOworCQlwcl9zaW1wbGUoInN5c3BhdGgi LCBkZXYtPnN5c3BhdGgpOworCQlwcl9zaW1wbGUoImRybSBjYXJkIiwgZGV2LT5kcm1fY2FyZF9w YXRoKTsKKwkJcHJfc2ltcGxlKCJkcm0gcmVuZGVyIiwgZGV2LT5kcm1fcmVuZGVyX3BhdGgpOwor CisJCWlmIChzaG93X3Byb3BzKSB7CisJCQlwcl9zaW1wbGVfcHJvcChkZXYsICJQQ0lfSUQiKTsK KwkJCXByX3NpbXBsZV9wcm9wKGRldiwgIkRSSVZFUiIpOworCQl9CisKKwkJaWYgKHNob3dfYXR0 cnMpIHsKKwkJCV9fcHJpbnRfdmVuZG9yKGRldik7CisJCQlwcl9zaW1wbGUoImRldmljZSIsIGRl di0+ZGV2aWNlKTsKKwkJfQorCX0KK30KKworI2RlZmluZSBwcl9kZXRhaWwoaywgdikgcHJpbnRm KCIlLTMyczogJXNcbiIsIGssIHYpCisKK3N0YXRpYyB2b2lkIHByaW50X2h0KEdIYXNoVGFibGUg Kmh0KQoreworCUdMaXN0ICprZXlzID0gZ19oYXNoX3RhYmxlX2dldF9rZXlzKGh0KTsKKwlrZXlz ID0gZ19saXN0X3NvcnQoa2V5cywgKEdDb21wYXJlRnVuYykgc3RyY21wKTsKKwl3aGlsZSAoa2V5 cykgeworCQljaGFyICprID0gKGNoYXIgKikga2V5cy0+ZGF0YTsKKwkJY2hhciAqdiA9IGdfaGFz aF90YWJsZV9sb29rdXAoaHQsIGspOworCQlwcl9kZXRhaWwoaywgdik7CisJCWtleXMgPSBnX2xp c3RfbmV4dChrZXlzKTsKKwl9CisJZ19saXN0X2ZyZWUoa2V5cyk7Cit9CisKK3N0YXRpYyB2b2lk IGlndF9kZXZzX3ByaW50X2RldGFpbChib29sIHNob3dfcHJvcHMsIGJvb2wgc2hvd19hdHRycykK K3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2OworCWludCBpOworCUdQdHJBcnJheSAqdmlldyA9 IGlndF9kZXZzLnBjaV9kZXZzX3ZpZXc7CisKKwlpZiAoIXZpZXcpCisJCXJldHVybjsKKworCWZv ciAoaSA9IDA7IGkgPCB2aWV3LT5sZW47IGkrKykgeworCQlkZXYgPSBnX3B0cl9hcnJheV9pbmRl eCh2aWV3LCBpKTsKKworCQlwcmludGYoIj09PT09PT09PT0gJXMgPT09PT09PT09PVxuIiwKKwkJ ICAgICAgIGdldF9wcm9wKGRldiwgIlBDSV9TTE9UX05BTUUiKSk7CisJCXByaW50ZigiW2RybV1c biIpOworCQlwcl9kZXRhaWwoImNhcmQgZGV2aWNlIiwgZGV2LT5kcm1fY2FyZF9wYXRoKTsKKwkJ cHJfZGV0YWlsKCJyZW5kZXIgZGV2aWNlIiwgZGV2LT5kcm1fcmVuZGVyX3BhdGgpOworCQlwcl9k ZXRhaWwoInN5c3BhdGgiLCBkZXYtPnN5c3BhdGgpOworCisJCXByaW50ZigiXG5bcHJvcGVydGll c11cbiIpOworCQlwcmludF9odChkZXYtPnByb3BzX2h0KTsKKwkJcHJpbnRmKCJcblthdHRyaWJ1 dGVzXVxuIik7CisJCXByaW50X2h0KGRldi0+YXR0cnNfaHQpOworCX0KK30KKworc3RhdGljIHN0 cnVjdCBwcmludF9mdW5jIHsKKwl2b2lkICgqcHJuKShib29sLCBib29sKTsKK30gcHJpbnRfZnVu Y3Rpb25zW10gPSB7CisJW0lHVF9QUklOVF9TSU1QTEVdID0geyAucHJuID0gaWd0X2RldnNfcHJp bnRfc2ltcGxlIH0sCisJW0lHVF9QUklOVF9ERVRBSUxdID0geyAucHJuID0gaWd0X2RldnNfcHJp bnRfZGV0YWlsIH0sCit9OworCit2b2lkIGlndF9kZXZpY2VzX3ByaW50KGVudW0gaWd0X2Rldmlj ZXNfcHJpbnRfdHlwZSBwcmludHR5cGUsCisJCSAgICAgICBib29sIHNob3dfcHJvcHMsCisJCSAg ICAgICBib29sIHNob3dfYXR0cnMpCit7CisJcHJpbnRfZnVuY3Rpb25zW3ByaW50dHlwZV0ucHJu KHNob3dfcHJvcHMsIHNob3dfYXR0cnMpOworfQorCit2b2lkIGlndF9kZXZpY2VzX3ByaW50X3Zl bmRvcnModm9pZCkKK3sKKwlHTGlzdCAqa2V5cyA9IGdfaGFzaF90YWJsZV9nZXRfa2V5cyhncHVf dmVuZG9yX2h0KTsKKwlwcmludGYoIlJlY29nbml6ZWQgdmVuZG9yczpcbiIpOworCisJcHJpbnRm KCIlLThzICAlLTE2cyAlLTE2c1xuIiwgIlBDSSBJRDoiLCAidmVuZG9yIiwgIm1vZHVsZSIpOwor CXdoaWxlIChrZXlzKSB7CisJCWNoYXIgKmsgPSAoY2hhciAqKSBrZXlzLT5kYXRhOworCQlzdHJ1 Y3QgdmVuZG9yX3NwZWMgKnYgPSBnX2hhc2hfdGFibGVfbG9va3VwKGdwdV92ZW5kb3JfaHQsIGsp OworCQlwcmludGYoIiUtOHMgICUtMTZzICUtMTZzXG4iLCBrLCB2LT52ZW5kb3IsIHYtPm1vZHVs ZSk7CisJCWtleXMgPSBnX2xpc3RfbmV4dChrZXlzKTsKKwl9CisJZ19saXN0X2ZyZWUoa2V5cyk7 Cit9CisKK3N0YXRpYyBib29sIHN5c193cml0ZV9hdHRyKGNvbnN0IGNoYXIgKmRpcm5hbWUsIGNv bnN0IGNoYXIgKmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpzdHIpCit7CisJaW50IGRpcjsKKwor CWRpciA9IG9wZW4oZGlybmFtZSwgT19SRE9OTFkpOworCWlmIChkaXIgPCAwKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlpZiAoaWd0X3N5c2ZzX3ByaW50ZihkaXIsIGF0dHIsICIlcyIsIHN0cikgPCAw KSB7CisJCXByaW50ZigiRXJyb3IsIGNhbid0IHdyaXRlIHRvICVzLCBlcnI6ICVzXG4iLAorCQkg ICAgICAgYXR0ciwgc3RyZXJyb3IoZXJybm8pKTsKKwkJY2xvc2UoZGlyKTsKKwkJcmV0dXJuIGZh bHNlOworCX0KKworCWNsb3NlKGRpcik7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgaWd0X2RldmljZSAqaWd0X2RldmljZXNfZmluZF9wY2lfaWQoY29uc3QgY2hhciAqcGNpX3Ns b3QpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKKwlpbnQgaTsKKwlHUHRyQXJyYXkgKmFy ciA9IGlndF9kZXZzLnBjaV9kZXZzOworCisJaWYgKCFwY2lfc2xvdCkKKwkJcmV0dXJuIE5VTEw7 CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJyLT5sZW47IGkrKykgeworCQlkZXYgPSBnX3B0cl9hcnJh eV9pbmRleChhcnIsIGkpOworCQlpZiAoIXN0cmNtcChwY2lfc2xvdCwgZ2V0X3Byb3BfcGNpX3Ns b3QoZGV2KSkpCisJCQlyZXR1cm4gZGV2OworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0 aWMgY29uc3QgY2hhciAqZmluZF9tb2R1bGVfZm9yX2RldihzdHJ1Y3QgaWd0X2RldmljZSAqZGV2 KQoreworCXN0cnVjdCB2ZW5kb3Jfc3BlYyAqdnM7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIE5V TEw7CisKKwl2cyA9IGdldF92ZW5kb3Jfc3BlYyhkZXYtPnZlbmRvcik7CisJaWYgKCF2cykKKwkJ cmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gdnMtPm1vZHVsZTsKK30KKworYm9vbCBpZ3RfZGV2aWNl X3BjaV91bmJpbmRfbW9kdWxlKGNvbnN0IGNoYXIgKnBjaV9zbG90KQoreworCWNoYXIgcGF0aFtQ QVRIX01BWF07CisJY29uc3QgY2hhciAqbW9kbmFtZTsKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2 ID0gaWd0X2RldmljZXNfZmluZF9wY2lfaWQocGNpX3Nsb3QpOworCisJaWYgKCFkZXYpCisJCXJl dHVybiBmYWxzZTsKKworCW1vZG5hbWUgPSBmaW5kX21vZHVsZV9mb3JfZGV2KGRldik7CisJaWYg KCFtb2RuYW1lKQorCQlyZXR1cm4gZmFsc2U7CisKKwlwcmludGYoIlVuYmluZGluZyBkcml2ZXIg JXMgb24gJXNcbiIsIG1vZG5hbWUsIHBjaV9zbG90KTsKKwlzbnByaW50ZihwYXRoLCBQQVRIX01B WCwgIiVzLyVzIiwgSUdUX0JVU19QQ0lfRFJJVkVSU19ESVIsIG1vZG5hbWUpOworCisJcmV0dXJu IHN5c193cml0ZV9hdHRyKHBhdGgsICJ1bmJpbmQiLCBwY2lfc2xvdCk7Cit9CisKK2Jvb2wgaWd0 X2RldmljZV9wY2lfYmluZF9tb2R1bGUoY29uc3QgY2hhciAqcGNpX3Nsb3QpCit7CisJY2hhciBw YXRoW1BBVEhfTUFYXTsKKwljb25zdCBjaGFyICptb2RuYW1lOworCXN0cnVjdCBpZ3RfZGV2aWNl ICpkZXYgPSBpZ3RfZGV2aWNlc19maW5kX3BjaV9pZChwY2lfc2xvdCk7CisKKwlpZiAoIWRldikK KwkJcmV0dXJuIGZhbHNlOworCisJbW9kbmFtZSA9IGZpbmRfbW9kdWxlX2Zvcl9kZXYoZGV2KTsK KwlpZiAoIW1vZG5hbWUpCisJCXJldHVybiBmYWxzZTsKKworCXByaW50ZigiQmluZGluZyBkcml2 ZXIgJXMgdG8gJXNcbiIsIG1vZG5hbWUsIHBjaV9zbG90KTsKKwlzbnByaW50ZihwYXRoLCBQQVRI X01BWCwgIiVzLyVzIiwgSUdUX0JVU19QQ0lfRFJJVkVSU19ESVIsIG1vZG5hbWUpOworCisJcmV0 dXJuIHN5c193cml0ZV9hdHRyKHBhdGgsICJiaW5kIiwgcGNpX3Nsb3QpOworfQorCitzdGF0aWMg Ym9vbCBwY2lfcmViaW5kX21vZHVsZShzdHJ1Y3QgaWd0X2RldmljZSAqZGV2KQoreworCWNvbnN0 IGNoYXIgKm1vZG5hbWU7CisKKwltb2RuYW1lID0gZmluZF9tb2R1bGVfZm9yX2RldihkZXYpOwor CWlmICghbW9kbmFtZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFpZ3Rfa21vZF9pc19sb2Fk ZWQobW9kbmFtZSkpIHsKKwkJaW50IHJldDsKKwkJcHJpbnRmKCJMb2FkaW5nIG1vZHVsZSAlc1xu IiwgbW9kbmFtZSk7CisJCXJldCA9IGlndF9rbW9kX2xvYWQobW9kbmFtZSwgTlVMTCk7CisJCWlm IChyZXQpIHsKKwkJCXByaW50ZigiQ2FuJ3QgbG9hZCBtb2R1bGUsIGVycm9yOiAlcyIsCisJCQkg ICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCWln dF9kZXZpY2VfcGNpX3VuYmluZF9tb2R1bGUoZ2V0X3Byb3BfcGNpX3Nsb3QoZGV2KSk7CisJaWd0 X2RldmljZV9wY2lfYmluZF9tb2R1bGUoZ2V0X3Byb3BfcGNpX3Nsb3QoZGV2KSk7CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKwordm9pZCBpZ3RfZGV2aWNlc19iaW5kX21vZHVsZXModm9pZCkKK3sKKwlz dHJ1Y3QgaWd0X2RldmljZSAqZGV2OworCWludCBpOworCUdQdHJBcnJheSAqYXJyID0gaWd0X2Rl dnMucGNpX2RldnNfdmlldzsKKwlwcmludGYoIkJpbmRpbmcgbW9kdWxlcy4uLlxuIik7CisKKwlm b3IgKGkgPSAwOyBpIDwgYXJyLT5sZW47IGkrKykgeworCQlkZXYgPSBnX3B0cl9hcnJheV9pbmRl eChhcnIsIGkpOworCQlpZiAoIWRldi0+ZHJtX2NhcmRfcGF0aCkgeworCQkJcGNpX3JlYmluZF9t b2R1bGUoZGV2KTsKKwkJfQorCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RydWN0 IGZpbHRlcl9mdW5jIHsKKwlHUHRyQXJyYXkgKigqZmlsdGVyX2Z1bmN0aW9uKSh2b2lkKTsKKwlj b25zdCBjaGFyICpoZWxwOworCWNvbnN0IGNoYXIgKmRldGFpbDsKK307CisKK3VuaW9uIGZpbHRl cl9zcGVjIHsKKwlzdHJ1Y3QgeworCQljaGFyICpjYXJkOworCX0gZHJtOworCXN0cnVjdCB7CisJ CWNoYXIgKmNhcmQ7CisJfSBkZXY7CisJc3RydWN0IHsKKwkJY2hhciAqdmVuZG9yOworCQljaGFy ICpkZXZpY2U7CisJCWNoYXIgKmNhcmQ7CisJfSBwY2k7Cit9OworCitzdGF0aWMgR0hhc2hUYWJs ZSAqc3BsaXRfZmlsdGVyX2RhdGEoY29uc3QgY2hhciAqZGF0YSkKK3sKKwlHSGFzaFRhYmxlICpo dCA9IGdfaGFzaF90YWJsZV9uZXcoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwpOworCWdjaGFyICoq czsKKwlnY2hhciAqKnN0cnYgPSBnX3N0cnNwbGl0KGRhdGEsICIsIiwgLTEpOworCisJcyA9IHN0 cnY7CisJd2hpbGUgKCpzKSB7CisJCWNoYXIgKmssICp2OworCQl2ID0gc3RyY2hyKCpzLCAnPScp OworCQlpZiAoIXYpIHsKKwkJCXMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWsgPSBzdHJuZHVw KCpzLCB2IC0gKCpzKSk7CisJCXYgPSBzdHJkdXAodiArIDEpOworCQlnX2hhc2hfdGFibGVfaW5z ZXJ0KGh0LCBrLCB2KTsKKwkJcysrOworCX0KKwlnX3N0cmZyZWV2KHN0cnYpOworCisJcmV0dXJu IGh0OworfQorCitzdGF0aWMgR1B0ckFycmF5ICpmaWx0ZXJfZHJtKHZvaWQpCit7CisJR0hhc2hU YWJsZSAqaHQ7CisJR1B0ckFycmF5ICpkZXZzLCAqdmlldzsKKwl1bmlvbiBmaWx0ZXJfc3BlYyBm c3BlYzsKKwlpbnQgY2FyZCA9IC0xOworCWNoYXIgY2FyZHN0cltOQU1FX01BWF07CisKKwlEQkco ImZpbHRlciBkcm1cbiIpOworCisJaHQgPSBzcGxpdF9maWx0ZXJfZGF0YShpZ3RfZGV2cy5maWx0 ZXJfZGF0YSk7CisJZnNwZWMuZHJtLmNhcmQgPSBnX2hhc2hfdGFibGVfbG9va3VwKGh0LCAiY2Fy ZCIpOworCWdfaGFzaF90YWJsZV9kZXN0cm95KGh0KTsKKworCWdfcHRyX2FycmF5X2ZyZWUoaWd0 X2RldnMucGNpX2RldnNfdmlldywgRkFMU0UpOworCXZpZXcgPSBpZ3RfZGV2cy5wY2lfZGV2c192 aWV3ID0gZ19wdHJfYXJyYXlfc2l6ZWRfbmV3KDEpOworCWRldnMgPSBpZ3RfZGV2cy5wY2lfZGV2 czsKKworCWdfcHRyX2FycmF5X3JlbW92ZV9yYW5nZSh2aWV3LCAwLCB2aWV3LT5sZW4pOworCisJ aWYgKGZzcGVjLmRybS5jYXJkKSB7CisJCXNzY2FuZihmc3BlYy5kcm0uY2FyZCwgIiVkIiwgJmNh cmQpOworCQlpZiAoY2FyZCA8IDApIHsKKwkJCWdfcHRyX2FycmF5X2ZyZWUodmlldywgRkFMU0Up OworCQkJcmV0dXJuIHZpZXc7CisJCX0KKwl9CisKKwlzbnByaW50ZihjYXJkc3RyLCBOQU1FX01B WCwgIiVzL2NhcmQlZCIsIElHVF9EUk1fUEFUSCwgY2FyZCk7CisJZm9yIChpbnQgaSA9IDA7IGkg PCBkZXZzLT5sZW47IGkrKykgeworCQlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2ID0gZ19wdHJfYXJy YXlfaW5kZXgoZGV2cywgaSk7CisJCWlmICghc3RyY21wKGNhcmRzdHIsIGRldi0+ZHJtX2NhcmRf cGF0aCkpIHsKKwkJCWdfcHRyX2FycmF5X2FkZCh2aWV3LCBkZXYpOworCQkJYnJlYWs7CisJCX0K Kwl9CisKKwlEQkcoIkZpbHRlciBkcm0gdmlldyBzaXplOiAlZFxuIiwgdmlldy0+bGVuKTsKKwor CWZyZWUoZnNwZWMuZHJtLmNhcmQpOworCisJcmV0dXJuIHZpZXc7Cit9CisKK3N0YXRpYyBHUHRy QXJyYXkgKmZpbHRlcl9kZXYodm9pZCkKK3sKKwlHSGFzaFRhYmxlICpodDsKKwlHUHRyQXJyYXkg KmRldnMsICp2aWV3OworCXVuaW9uIGZpbHRlcl9zcGVjIGZzcGVjOworCisJREJHKCJmaWx0ZXIg ZGV2XG4iKTsKKworCWh0ID0gc3BsaXRfZmlsdGVyX2RhdGEoaWd0X2RldnMuZmlsdGVyX2RhdGEp OworCWZzcGVjLmRldi5jYXJkID0gZ19oYXNoX3RhYmxlX2xvb2t1cChodCwgImNhcmQiKTsKKwln X2hhc2hfdGFibGVfZGVzdHJveShodCk7CisKKwlnX3B0cl9hcnJheV9mcmVlKGlndF9kZXZzLnBj aV9kZXZzX3ZpZXcsIEZBTFNFKTsKKwl2aWV3ID0gaWd0X2RldnMucGNpX2RldnNfdmlldyA9IGdf cHRyX2FycmF5X3NpemVkX25ldyg0KTsKKwlkZXZzID0gaWd0X2RldnMucGNpX2RldnM7CisKKwlm b3IgKGludCBpID0gMDsgaSA8IGRldnMtPmxlbjsgaSsrKSB7CisJCXN0cnVjdCBpZ3RfZGV2aWNl ICpkZXYgPSBnX3B0cl9hcnJheV9pbmRleChkZXZzLCBpKTsKKwkJZ19wdHJfYXJyYXlfYWRkKHZp ZXcsIGRldik7CisJfQorCisJaWYgKGZzcGVjLmRldi5jYXJkKSB7CisJCWludCBjYXJkID0gLTE7 CisJCXNzY2FuZihmc3BlYy5kZXYuY2FyZCwgIiVkIiwgJmNhcmQpOworCisJCWlmIChjYXJkID49 IDAgJiYgY2FyZCA8IHZpZXctPmxlbikgeworCQkJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdf cHRyX2FycmF5X2luZGV4KHZpZXcsIGNhcmQpOworCQkJZ19wdHJfYXJyYXlfcmVtb3ZlX3Jhbmdl KHZpZXcsIDAsIHZpZXctPmxlbik7CisJCQlnX3B0cl9hcnJheV9hZGQodmlldywgZGV2KTsKKwkJ fSBlbHNlIHsKKwkJCWdfcHRyX2FycmF5X2ZyZWUodmlldywgRkFMU0UpOworCQl9CisJfQorCURC RygiRmlsdGVyIGRldiB2aWV3IHNpemU6ICVkXG4iLCB2aWV3LT5sZW4pOworCisJZnJlZShmc3Bl Yy5kZXYuY2FyZCk7CisKKwlyZXR1cm4gdmlldzsKK30KKworc3RhdGljIEdQdHJBcnJheSAqZmls dGVyX3BjaSh2b2lkKQoreworCUdIYXNoVGFibGUgKmh0OworCUdQdHJBcnJheSAqZGV2cywgKnZp ZXc7CisJdW5pb24gZmlsdGVyX3NwZWMgZnNwZWM7CisKKwlEQkcoImZpbHRlciBwY2lcbiIpOwor CisJaHQgPSBzcGxpdF9maWx0ZXJfZGF0YShpZ3RfZGV2cy5maWx0ZXJfZGF0YSk7CisJZnNwZWMu cGNpLnZlbmRvciA9IGdfaGFzaF90YWJsZV9sb29rdXAoaHQsICJ2ZW5kb3IiKTsKKwlmc3BlYy5w Y2kuZGV2aWNlID0gZ19oYXNoX3RhYmxlX2xvb2t1cChodCwgImRldmljZSIpOworCWZzcGVjLnBj aS5jYXJkID0gZ19oYXNoX3RhYmxlX2xvb2t1cChodCwgImNhcmQiKTsKKwlnX2hhc2hfdGFibGVf ZGVzdHJveShodCk7CisKKwlnX3B0cl9hcnJheV9mcmVlKGlndF9kZXZzLnBjaV9kZXZzX3ZpZXcs IEZBTFNFKTsKKwl2aWV3ID0gaWd0X2RldnMucGNpX2RldnNfdmlldyA9IGdfcHRyX2FycmF5X3Np emVkX25ldyg0KTsKKwlkZXZzID0gaWd0X2RldnMucGNpX2RldnM7CisKKwlmb3IgKGludCBpID0g MDsgaSA8IGRldnMtPmxlbjsgaSsrKSB7CisJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0 cl9hcnJheV9pbmRleChkZXZzLCBpKTsKKworCQkvKiBTa2lwIGlmICd2ZW5kb3InIGRvZXNuJ3Qg bWF0Y2ggKi8KKwkJaWYgKGZzcGVjLnBjaS52ZW5kb3IgJiYKKwkJCXN0cmNhc2VjbXAoZnNwZWMu cGNpLnZlbmRvciwgZGV2LT52ZW5kb3IpKQorCQkJY29udGludWU7CisKKwkJLyogU2tpcCBpZiAn ZGV2aWNlJyBkb2Vzbid0IG1hdGNoICovCisJCWlmIChmc3BlYy5wY2kuZGV2aWNlICYmCisJCQlz dHJjYXNlY21wKGZzcGVjLnBjaS5kZXZpY2UsIGRldi0+ZGV2aWNlKSkKKwkJCWNvbnRpbnVlOwor CisJCWdfcHRyX2FycmF5X2FkZCh2aWV3LCBkZXYpOworCX0KKworCS8qIExlYXZlIG9ubHkgbi10 aCBlbGVtZW50IGlmIGNhcmQgaXMgc2V0ICovCisJaWYgKGZzcGVjLnBjaS5jYXJkKSB7CisJCWlu dCBjYXJkID0gLTE7CisJCXNzY2FuZihmc3BlYy5wY2kuY2FyZCwgIiVkIiwgJmNhcmQpOworCisJ CWlmIChjYXJkID49IDAgJiYgY2FyZCA8IHZpZXctPmxlbikgeworCQkJc3RydWN0IGlndF9kZXZp Y2UgKmRldiA9IGdfcHRyX2FycmF5X2luZGV4KHZpZXcsIGNhcmQpOworCQkJZ19wdHJfYXJyYXlf cmVtb3ZlX3JhbmdlKHZpZXcsIDAsIHZpZXctPmxlbik7CisJCQlnX3B0cl9hcnJheV9hZGQodmll dywgZGV2KTsKKwkJfSBlbHNlIHsKKwkJCWdfcHRyX2FycmF5X2ZyZWUodmlldywgRkFMU0UpOwor CQl9CisJfQorCURCRygiRmlsdGVyIHBjaSB2aWV3IHNpemU6ICVkXG4iLCB2aWV3LT5sZW4pOwor CisJZnJlZShmc3BlYy5wY2kudmVuZG9yKTsKKwlmcmVlKGZzcGVjLnBjaS5kZXZpY2UpOworCWZy ZWUoZnNwZWMucGNpLmNhcmQpOworCisJcmV0dXJuIHZpZXc7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg ZmlsdGVyX2Z1bmMgZl9kcm0gPSB7IC5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfZHJtLAorCQkJ CSAgICAuaGVscCA9ICJkcm06W2NhcmQ9JWRdIiwKKwkJCQkgICAgLmRldGFpbCA9ICJjYXJkIGlz IE4tY2FyZCBudW1iZXIgKGZyb20gL2Rldi9kcmkvY2FyZE4pXG4ifTsKKworc3RhdGljIHN0cnVj dCBmaWx0ZXJfZnVuYyBmX2RldiA9IHsgLmZpbHRlcl9mdW5jdGlvbiA9IGZpbHRlcl9kZXYsCisJ CQkJICAgIC5oZWxwID0gImRldjpbY2FyZD0lZF0iLAorCQkJCSAgICAuZGV0YWlsID0gImNhcmQg aXMgY2FyZCBudW1iZXIgaW4gUENJIGdwdSBzb3J0ZWQgbGlzdFxuIn07CisKK3N0YXRpYyBzdHJ1 Y3QgZmlsdGVyX2Z1bmMgZl9wY2kgPSB7IC5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfcGNpLAor CQkJCSAgICAuaGVscCA9ICJwY2k6W3ZlbmRvcj0lMDR4XVssZGV2aWNlPSUwNHhdWyxjYXJkPSVk XSIsCisJCQkJICAgIC5kZXRhaWwgPSAidmVuZG9yIGlzIGhleCBudW1iZXIsIGV4LiA4MDg2In07 CisKK3N0cnVjdCBuYW1lX3ZhbHVlIGZpbHRlcl9kZWZfbGlzdFtdID0geworCXsgImRybSIsICAo Z3BvaW50ZXIpICZmX2RybSB9LAorCXsgImRldiIsICAoZ3BvaW50ZXIpICZmX2RldiB9LAorCXsg InBjaSIsICAoZ3BvaW50ZXIpICZmX3BjaSB9LAorCXsgTlVMTCwgfSwKK307CisKK3ZvaWQgaWd0 X2RldmljZV9saXN0X2ZpbHRlcnModm9pZCkKK3sKKwlHTGlzdCAqa2V5cyA9IGdfaGFzaF90YWJs ZV9nZXRfa2V5cyhmaWx0ZXJfZGVmX2h0KTsKKworCXByaW50ZigiTGlzdCBvZiByZWdpc3RlcmVk IGZpbHRlcnM6XG4tLS1cbiIpOworCXByaW50ZigiJS04cyAgJXNcbi0tLVxuIiwgImZpbHRlciIs ICJzeW50YXgiKTsKKwl3aGlsZSAoa2V5cykgeworCQljaGFyICprID0gKGNoYXIgKikga2V5cy0+ ZGF0YTsKKwkJc3RydWN0IGZpbHRlcl9mdW5jICp2ID0gZ19oYXNoX3RhYmxlX2xvb2t1cChmaWx0 ZXJfZGVmX2h0LCBrKTsKKwkJcHJpbnRmKCIlLThzICAlc1xuIiwgaywgdi0+aGVscCk7CisJCXBy aW50ZigiJS04cyAgJXNcbiIsICIiLCB2LT5kZXRhaWwpOworCQlrZXlzID0gZ19saXN0X25leHQo a2V5cyk7CisJfQorCWdfbGlzdF9mcmVlKGtleXMpOworfQorCitib29sIGlndF9kZXZpY2Vfc2V0 X2ZpbHRlcihjb25zdCBjaGFyICpmaWx0ZXIpCit7CisJc3RydWN0IGZpbHRlcl9mdW5jICpmc3Bl YzsKKwljaGFyICpkYXRhOworCisJaWYgKCFmaWx0ZXIpCisJCXJldHVybiBmYWxzZTsKKworCWZy ZWUoaWd0X2RldnNfZmlsdGVyKTsKKwlpZ3RfZGV2c19maWx0ZXIgPSBzdHJkdXAoZmlsdGVyKTsK KwlkYXRhID0gc3RyY2hyKGlndF9kZXZzX2ZpbHRlciwgJzonKTsKKwlpZiAoIWRhdGEpIHsKKwkJ cHJpbnRmKCJJbnZhbGlkIGZpbHRlciBbJXNdXG5cbiIsIGZpbHRlcik7CisJCWlndF9kZXZpY2Vf bGlzdF9maWx0ZXJzKCk7CisJCWlndF9kZXZzLmZpbHRlcl9uYW1lID0gTlVMTDsKKwkJaWd0X2Rl dnMuZmlsdGVyX2RhdGEgPSBOVUxMOworCQlyZXR1cm4gZmFsc2U7CisJfQorCSpkYXRhID0gJ1ww JzsKKwlpZ3RfZGV2cy5maWx0ZXJfbmFtZSA9IGlndF9kZXZzX2ZpbHRlcjsKKwlpZ3RfZGV2cy5m aWx0ZXJfZGF0YSA9IGRhdGEgKyAxOworCWZzcGVjID0gZ19oYXNoX3RhYmxlX2xvb2t1cChmaWx0 ZXJfZGVmX2h0LCBpZ3RfZGV2cy5maWx0ZXJfbmFtZSk7CisJaWYgKCFmc3BlYykgeworCQlwcmlu dGYoIkZpbHRlciBbJXNdIG5vdCBzdXBwb3J0ZWRcblxuIiwgaWd0X2RldnMuZmlsdGVyX25hbWUp OworCQlpZ3RfZGV2aWNlX2xpc3RfZmlsdGVycygpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ ZnNwZWMtPmZpbHRlcl9mdW5jdGlvbigpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBS ZXR1cm5zOiAtMSAobm8gY2FyZCBwb2ludGVyIHdhcyBwYXNzZWQgb3IgY2FyZCB3YXNuJ3QgbWF0 Y2hlZCwKKyAqIDAgLSBjYXJkIG1hdGNoZWQgYW5kIHJldHVybmVkLgorICovCitpbnQgaWd0X2Rl dmljZV9jYXJkX21hdGNoKGNvbnN0IGNoYXIgKmZpbHRlciwgc3RydWN0IGlndF9kZXZpY2VfY2Fy ZCAqY2FyZCkKK3sJCisJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IE5VTEw7CisJaW50IHJldCA9 IC0xOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gcmV0OworCW1lbXNldChjYXJkLCAwLCBzaXpl b2YoKmNhcmQpKTsKKworCWlmIChpZ3RfZGV2aWNlX3NldF9maWx0ZXIoZmlsdGVyKSA9PSBmYWxz ZSkKKwkJcmV0dXJuIHJldDsKKworCS8qIFdlIHRha2UgZmlyc3Qgb25lIGlmIG1vcmUgdGhhbiBv bmUgY2FyZCBtYXRjaGVzIGZpbHRlciAqLworCWlmIChpZ3RfZGV2cy5wY2lfZGV2c192aWV3LT5s ZW4pIHsKKwkJc3RydWN0IHZlbmRvcl9zcGVjICp2czsKKwkJZGV2ID0gZ19wdHJfYXJyYXlfaW5k ZXgoaWd0X2RldnMucGNpX2RldnNfdmlldywgMCk7CisJCXZzID0gZ2V0X3ZlbmRvcl9zcGVjKGRl di0+dmVuZG9yKTsKKwkJaWYgKHZzKSB7CisJCQljYXJkLT5jaGlwc2V0ID0gdnMtPmNoaXBzZXQ7 CisJCQlzdHJuY3B5KGNhcmQtPm1vZHVsZSwgdnMtPm1vZHVsZSwgTkFNRV9NQVgpOworCQl9CisJ CXN0cm5jcHkoY2FyZC0+cGNpX3Nsb3QsIGdldF9wcm9wX3BjaV9zbG90KGRldiksCisJCQlQQ0lf U0xPVF9MRU5HVEgpOworCQlzdHJuY3B5KGNhcmQtPmNhcmQsIGRldi0+ZHJtX2NhcmRfcGF0aCwg TkFNRV9NQVgpOworCQlzdHJuY3B5KGNhcmQtPnJlbmRlciwgZGV2LT5kcm1fcmVuZGVyX3BhdGgs IE5BTUVfTUFYKTsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0 IGEvbGliL2lndF9kZXZpY2Vfc2Nhbi5oIGIvbGliL2lndF9kZXZpY2Vfc2Nhbi5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4wNWJhZTFhNgotLS0gL2Rldi9udWxsCisrKyBi L2xpYi9pZ3RfZGV2aWNlX3NjYW4uaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0 IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQK KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJ TiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX19JR1RfREVWSUNFX1NDQU5fSF9f CisjZGVmaW5lIF9fSUdUX0RFVklDRV9TQ0FOX0hfXworCisjaW5jbHVkZSA8bGltaXRzLmg+Cisj aW5jbHVkZSA8aWd0Lmg+CisKK2VudW0gaWd0X2RldmljZXNfc2Nhbl90eXBlIHsKKwlJR1RfU0NB Tl9QQ0kgICAgICAgICAgID0gKDEgPDwgMCksCisJSUdUX1NDQU5fUExBVEZPUk0gICAgICA9ICgx IDw8IDEpLAorfTsKKworZW51bSBpZ3RfZGV2aWNlc19wcmludF90eXBlIHsKKwlJR1RfUFJJTlRf U0lNUExFLAorCUlHVF9QUklOVF9ERVRBSUwsCit9OworCisjZGVmaW5lIFBDSV9TTE9UX0xFTkdU SCAxMworc3RydWN0IGlndF9kZXZpY2VfY2FyZCB7CisJdW5zaWduZWQgaW50IGNoaXBzZXQ7IC8v Y29udGFpbnMgRFJJVkVSX1hYWCB2YWx1ZQorCWNoYXIgbW9kdWxlW05BTUVfTUFYXTsKKwljaGFy IGNhcmRbTkFNRV9NQVhdOworCWNoYXIgcmVuZGVyW05BTUVfTUFYXTsKKwljaGFyIHBjaV9zbG90 W1BDSV9TTE9UX0xFTkdUSF07Cit9OworCit2b2lkIGlndF9kZXZpY2VzX3NjYW4oZW51bSBpZ3Rf ZGV2aWNlc19zY2FuX3R5cGUgc2NhbnR5cGUsIGJvb2wgZm9yY2UpOwordm9pZCBpZ3RfZGV2aWNl c19wcmludChlbnVtIGlndF9kZXZpY2VzX3ByaW50X3R5cGUgcHJpbnR0eXBlLAorCQkgICAgICAg Ym9vbCBzaG93X3Byb3BzLCBib29sIHNob3dfYXR0cnMpOworCit2b2lkIGlndF9kZXZpY2VzX3By aW50X3ZlbmRvcnModm9pZCk7CisKK2Jvb2wgaWd0X2RldmljZV9wY2lfdW5iaW5kX21vZHVsZShj b25zdCBjaGFyICpwY2lfc2xvdCk7Citib29sIGlndF9kZXZpY2VfcGNpX2JpbmRfbW9kdWxlKGNv bnN0IGNoYXIgKnBjaV9zbG90KTsKK3ZvaWQgaWd0X2RldmljZXNfYmluZF9tb2R1bGVzKHZvaWQp OworCit2b2lkIGlndF9kZXZpY2VfbGlzdF9maWx0ZXJzKHZvaWQpOworYm9vbCBpZ3RfZGV2aWNl X3NldF9maWx0ZXIoY29uc3QgY2hhciAqZmlsdGVyKTsKK2ludCBpZ3RfZGV2aWNlX2NhcmRfbWF0 Y2goY29uc3QgY2hhciAqZmlsdGVyLCBzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKTsKKwor I2VuZGlmIC8qIF9fSUdUX0RFVklDRV9TQ0FOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGliL21lc29u LmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCmluZGV4IDE1NzYyNGU3Li44MjZlYmJlMyAxMDA2NDQK LS0tIGEvbGliL21lc29uLmJ1aWxkCisrKyBiL2xpYi9tZXNvbi5idWlsZApAQCAtMTAsNiArMTAs NyBAQCBsaWJfc291cmNlcyA9IFsKIAknaWd0X2NvbG9yX2VuY29kaW5nLmMnLAogCSdpZ3RfZGVi dWdmcy5jJywKIAknaWd0X2RldmljZS5jJywKKwknaWd0X2RldmljZV9zY2FuLmMnLAogCSdpZ3Rf YXV4LmMnLAogCSdpZ3RfZ3B1X3Bvd2VyLmMnLAogCSdpZ3RfZ3QuYycsCmRpZmYgLS1naXQgYS90 b29scy9NYWtlZmlsZS5zb3VyY2VzIGIvdG9vbHMvTWFrZWZpbGUuc291cmNlcwppbmRleCA1MDcw NmY0MS4uMGU2N2I2NTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIv dG9vbHMvTWFrZWZpbGUuc291cmNlcwpAQCAtMzMsNiArMzMsNyBAQCB0b29sc19wcm9nX2xpc3Rz ID0JCVwKIAlpbnRlbF93YXRlcm1hcmsJCVwKIAlpbnRlbF9nZW1faW5mbwkJXAogCWludGVsX2d2 dGdfdGVzdCAgICAgXAorCWxzZ3B1CQkJXAogCSQoTlVMTCkKIAogZGlzdF9iaW5fU0NSSVBUUyA9 IGludGVsX2dwdV9hYnJ0CmRpZmYgLS1naXQgYS90b29scy9sc2dwdS5jIGIvdG9vbHMvbHNncHUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNDhlMWU4ODEKLS0tIC9kZXYv bnVsbAorKysgYi90b29scy9sc2dwdS5jCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogQ29weXJp Z2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisg KiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRl ICJpZ3RfZGV2aWNlX3NjYW4uaCIKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxm Y250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVk ZSA8c2lnbmFsLmg+CisKK2VudW0geworCU9QVF9TQ0FOX1BDSSAgICAgICA9ICdQJywKKwlPUFRf U0NBTl9QTEFURk9STSAgPSAncCcsCisJT1BUX1NIT1dfUFJPUFMgICAgID0gJ3InLAorCU9QVF9T SE9XX0FUVFJTICAgICA9ICdhJywKKwlPUFRfUFJJTlRfU0lNUExFICAgPSAnaScsCisJT1BUX1BS SU5UX0RFVEFJTCAgID0gJ2QnLAorCU9QVF9MSVNUX1ZFTkRPUlMgICA9ICd2JywKKwlPUFRfQklO RF9NT0RVTEVTICAgPSAnQicsCisJT1BUX1VOQklORF9NT0RVTEUgID0gJ3UnLAorCU9QVF9CSU5E X01PRFVMRSAgICA9ICdiJywKKwlPUFRfTElTVF9GSUxURVJTICAgPSAnbCcsCisJT1BUX1NFVF9G SUxURVIgICAgID0gJ3MnLAorCU9QVF9NQVRDSF9ERVZJQ0UgICA9ICdtJywKKwlPUFRfSEVMUCAg ICAgICAgICAgPSAnaCcKK307CisKK2Jvb2wgZ19zaG93X3Byb3BzOworYm9vbCBnX3Nob3dfYXR0 cnM7Citib29sIGdfc2hvd192ZW5kb3JzOworYm9vbCBnX2JpbmRfbW9kdWxlczsKK2NoYXIgKmdf cGNpX2lkOworYm9vbCBnX3VuYmluZF9tb2R1bGU7Citib29sIGdfYmluZF9tb2R1bGU7Citib29s IGdfbGlzdF9maWx0ZXJzOworY2hhciAqZ19maWx0ZXI7CitjaGFyICpnX21hdGNoX2ZpbHRlcjsK K2Jvb2wgZ19oZWxwOworCitzdGF0aWMgY29uc3QgY2hhciAqdXNhZ2Vfc3RyID0KKwkidXNhZ2U6 IGxzZ3B1IFtvcHRpb25zXVxuXG4iCisJIk9wdGlvbnM6XG4iCisJIiAgLVAsIC0tc2Nhbi1wY2kg ICAgICAgICAgICAgIFNjYW4gUENJIGRldmljZXMgKGRlZmF1bHQpXG4iCisJIiAgLXAsIC0tc2Nh bi1wbGF0Zm9ybSAgICAgICAgIFNjYW4gcGxhdGZvcm0gZGV2aWNlc1xuIgorCSIgIC1yLCAtLXNo b3ctcHJvcHMgICAgICAgICAgICBTaG93IGRldmljZSBwcm9wZXJ0aWVzXG4iCisJIiAgLWEsIC0t c2hvdy1hdHRycyAgICAgICAgICAgIFNob3cgZGV2aWNlIGF0dHJpYnV0ZXNcbiIKKwkiICAtaSwg LS1wcmludC1zaW1wbGUgICAgICAgICAgUHJpbnQgZGV2aWNlcyBhcyBzaW1wbGUgbGlzdCAoZGVm YXVsdClcbiIKKwkiICAtZCwgLS1wcmludC1kZXRhaWxzICAgICAgICAgUHJpbnQgZGV2aWNlcyB3 aXRoIGRldGFpbHNcbiIKKwkiICAtdiwgLS1saXN0LXZlbmRvcnMgICAgICAgICAgTGlzdCByZWNv Z25pemVkIHZlbmRvcnNcbiIKKwkiICAtQiwgLS1iaW5kLW1vZHVsZXMgICAgICAgICAgQmluZCBt b2R1bGVzIHRvIHVuYm91bmQgUENJIGNhcmRzXG4iCisJIiAgLXUsIC0tdW5iaW5kLW1vZHVsZSBw Y2lfaWQgIFVuYmluZCBtb2R1bGUgZnJvbSBwY2kgaWQgZGV2aWNlXG4iCisJIiAgLWIsIC0tYmlu ZC1tb2R1bGUgcGNpX2lkICAgIEJpbmQgbW9kdWxlIHRvIHBjaSBpZCBkZXZpY2VcbiIKKwkiICAt bCwgLS1saXN0LWZpbHRlcnMgICAgICAgICAgTGlzdCByZWdpc3RlcmVkIGRldmljZSBmaWx0ZXJz XG4iCisJIiAgLXMsIC0tc2V0LWZpbHRlciBmaWx0ZXIgICAgIFNldCBmaWx0ZXIgZm9yIHByb2Nl c3NpbmcgZGV2aWNlc1xuIgorCSIgIC1tLCAtLW1hdGNoLWRldmljZSBmaWx0ZXIgICBGaW5kIGRl dmljZSBtYXRjaGluZyB0byBmaWx0ZXJcbiIKKwkiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAg ICAgU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdFxuIjsKKworaW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNb XSA9IHsKKwkJeyJzY2FuLXBjaSIsICAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBP UFRfU0NBTl9QQ0l9LAorCQl7InNjYW4tcGxhdGZvcm0iLCAgICAgbm9fYXJndW1lbnQsICAgICAg IE5VTEwsIE9QVF9TQ0FOX1BMQVRGT1JNfSwKKwkJeyJzaG93LXByb3BzIiwgICAgICAgIG5vX2Fy Z3VtZW50LCAgICAgICBOVUxMLCBPUFRfU0hPV19QUk9QU30sCisJCXsic2hvdy1hdHRycyIsICAg ICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgT1BUX1NIT1dfQVRUUlN9LAorCQl7InByaW50 LXNpbXBsZSIsICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIE9QVF9QUklOVF9TSU1QTEV9 LAorCQl7InByaW50LWRldGFpbCIsICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIE9QVF9Q UklOVF9ERVRBSUx9LAorCQl7Imxpc3QtdmVuZG9ycyIsICAgICAgbm9fYXJndW1lbnQsICAgICAg IE5VTEwsIE9QVF9MSVNUX1ZFTkRPUlN9LAorCQl7ImJpbmQtbW9kdWxlcyIsICAgICAgbm9fYXJn dW1lbnQsICAgICAgIE5VTEwsIE9QVF9CSU5EX01PRFVMRVN9LAorCQl7InVuYmluZC1tb2R1bGUi LCAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9QVF9VTkJJTkRfTU9EVUxFfSwKKwkJeyJi aW5kLW1vZHVsZSIsICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRfQklORF9NT0RV TEV9LAorCQl7Imxpc3QtZmlsdGVycyIsICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIE9Q VF9MSVNUX0ZJTFRFUlN9LAorCQl7InNldC1maWx0ZXIiLCAgICAgICAgcmVxdWlyZWRfYXJndW1l bnQsIE5VTEwsIE9QVF9TRVRfRklMVEVSfSwKKwkJeyJtYXRjaC1kZXZpY2UiLCAgICAgIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRfTUFUQ0hfREVWSUNFfSwKKwkJeyJoZWxwIiwgICAgICAg ICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRfSEVMUH0sCisJCXswLCAwLCAwLCAw fQorCX07CisJaW50IGMsIGluZGV4ID0gMCwgc2NhbnR5cGUgPSAwOworCWVudW0gaWd0X2Rldmlj ZXNfcHJpbnRfdHlwZSBwcmludHR5cGUgPSBJR1RfUFJJTlRfU0lNUExFOworCisJd2hpbGUgKChj ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIlBwcmFpZHZCdTpiOmxzOm06aCIsCisJCQkJbG9u Z19vcHRpb25zLCAmaW5kZXgpKSAhPSAtMSkgeworCQlzd2l0Y2goYykgeworCQljYXNlIE9QVF9T Q0FOX1BDSToKKwkJCXNjYW50eXBlIHw9IElHVF9TQ0FOX1BDSTsKKwkJCWJyZWFrOworCQljYXNl IE9QVF9TQ0FOX1BMQVRGT1JNOgorCQkJc2NhbnR5cGUgfD0gSUdUX1NDQU5fUExBVEZPUk07CisJ CQlicmVhazsKKwkJY2FzZSBPUFRfU0hPV19QUk9QUzoKKwkJCWdfc2hvd19wcm9wcyA9IHRydWU7 CisJCQlicmVhazsKKwkJY2FzZSBPUFRfU0hPV19BVFRSUzoKKwkJCWdfc2hvd19hdHRycyA9IHRy dWU7CisJCQlicmVhazsKKwkJY2FzZSBPUFRfUFJJTlRfU0lNUExFOgorCQkJcHJpbnR0eXBlID0g SUdUX1BSSU5UX1NJTVBMRTsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9QUklOVF9ERVRBSUw6CisJ CQlwcmludHR5cGUgPSBJR1RfUFJJTlRfREVUQUlMOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX0xJ U1RfVkVORE9SUzoKKwkJCWdfc2hvd192ZW5kb3JzID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNl IE9QVF9CSU5EX01PRFVMRVM6CisJCQlnX2JpbmRfbW9kdWxlcyA9IHRydWU7CisJCQlicmVhazsK KwkJY2FzZSBPUFRfVU5CSU5EX01PRFVMRToKKwkJCWdfcGNpX2lkID0gc3RyZHVwKG9wdGFyZyk7 CisJCQlnX3VuYmluZF9tb2R1bGUgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX0JJTkRf TU9EVUxFOgorCQkJZ19wY2lfaWQgPSBzdHJkdXAob3B0YXJnKTsKKwkJCWdfYmluZF9tb2R1bGUg PSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX1NFVF9GSUxURVI6CisJCQlnX2ZpbHRlciA9 IHN0cmR1cChvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX0xJU1RfRklMVEVSUzoKKwkJ CWdfbGlzdF9maWx0ZXJzID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9NQVRDSF9ERVZJ Q0U6CisJCQlnX21hdGNoX2ZpbHRlciA9IHN0cmR1cChvcHRhcmcpOworCQkJYnJlYWs7CisJCWNh c2UgT1BUX0hFTFA6CisJCQlnX2hlbHAgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlp ZiAoZ19oZWxwKSB7CisJCXByaW50ZigiJXNcbiIsIHVzYWdlX3N0cik7CisJCWV4aXQoMCk7CisJ fQorCisJaWYgKCFzY2FudHlwZSkgLy9pZiBubyBzY2FudHlwZSBjaG9vc2VuIHNldCBwY2kgc2Nh bm5pbmcKKwkJc2NhbnR5cGUgfD0gSUdUX1NDQU5fUENJOworCisJaWd0X2RldmljZXNfc2Nhbihz Y2FudHlwZSwgZmFsc2UpOworCWlmIChnX3Nob3dfdmVuZG9ycykgeworCQlpZ3RfZGV2aWNlc19w cmludF92ZW5kb3JzKCk7CisJCXJldHVybiAwOworCX0KKwlpZiAoZ19iaW5kX21vZHVsZXMpIHsK KwkJaWd0X2RldmljZXNfYmluZF9tb2R1bGVzKCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChn X3VuYmluZF9tb2R1bGUpIHsKKwkJaWd0X2RldmljZV9wY2lfdW5iaW5kX21vZHVsZShnX3BjaV9p ZCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChnX2JpbmRfbW9kdWxlKSB7CisJCWlndF9kZXZp Y2VfcGNpX2JpbmRfbW9kdWxlKGdfcGNpX2lkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGdf bGlzdF9maWx0ZXJzKSB7CisJCWlndF9kZXZpY2VfbGlzdF9maWx0ZXJzKCk7CisJCXJldHVybiAw OworCX0KKworCWlmIChnX2ZpbHRlcikgeworCQlpZ3RfZGV2aWNlX3NldF9maWx0ZXIoZ19maWx0 ZXIpOworCX0KKworCWlmIChnX21hdGNoX2ZpbHRlcikgeworCQlzdHJ1Y3QgaWd0X2RldmljZV9j YXJkIGNhcmQ7CisJCWludCBmZDsKKwkJaWYgKGlndF9kZXZpY2VfY2FyZF9tYXRjaChnX21hdGNo X2ZpbHRlciwgJmNhcmQpID09IDApIHsKKwkJCXByaW50ZigiUENJIHNsb3QgICAgOiAlc1xuIiwg Y2FyZC5wY2lfc2xvdCk7CisJCQlwcmludGYoImRybSBjYXJkICAgIDogJXNcbiIsIGNhcmQuY2Fy ZCk7CisJCQlwcmludGYoImRybSByZW5kZXIgIDogJXNcbiIsIGNhcmQucmVuZGVyKTsKKwkJCXBy aW50ZigiZHJ2IGNoaXBzZXQgOiAleFxuIiwgY2FyZC5jaGlwc2V0KTsKKwkJCXByaW50ZigiZHJ2 IG1vZHVsZSAgOiAlc1xuIiwgY2FyZC5tb2R1bGUpOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJO byBkZXZpY2UgbWF0Y2hpbmcgZmlsdGVyIFslc10gZm91bmQuXG4iLAorCQkJICAgICAgIGdfbWF0 Y2hfZmlsdGVyKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJZmQgPSBfX2RybV9vcGVuX2RyaXZl cihEUklWRVJfQU5ZKTsKKwkJaWYgKGZkID49IDApIHsKKwkJCXByaW50ZigiRGV2aWNlICVzIHN1 Y2Nlc3NmdWxseSBvcGVuZWRcbiIsIGNhcmQuY2FyZCk7CisJCQljbG9zZShmZCk7CisJCX0KKwor CQlmZCA9IF9fZHJtX29wZW5fZHJpdmVyX3JlbmRlcihEUklWRVJfQU5ZKTsKKwkJaWYgKGZkID49 IDApIHsKKwkJCXByaW50ZigiRGV2aWNlICVzIHN1Y2Nlc3NmdWxseSBvcGVuZWRcbiIsIGNhcmQu cmVuZGVyKTsKKwkJCWNsb3NlKGZkKTsKKwkJfQorCisJCXJldHVybiAwOworCX0KKworCWlndF9k ZXZpY2VzX3ByaW50KHByaW50dHlwZSwgZ19zaG93X3Byb3BzLCBnX3Nob3dfYXR0cnMpOworCisJ cmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9tZXNvbi5idWlsZCBiL3Rvb2xzL21lc29u LmJ1aWxkCmluZGV4IDZlNzJiMjYzLi45YjNhMmE2OSAxMDA2NDQKLS0tIGEvdG9vbHMvbWVzb24u YnVpbGQKKysrIGIvdG9vbHMvbWVzb24uYnVpbGQKQEAgLTM2LDYgKzM2LDcgQEAgdG9vbHNfcHJv Z3MgPSBbCiAJJ2ludGVsX2dlbV9pbmZvJywKIAknaW50ZWxfZ3Z0Z190ZXN0JywKIAknZHBjZF9y ZWcnLAorCSdsc2dwdScsCiBdCiB0b29sX2RlcHMgPSBpZ3RfZGVwcwogCi0tIAoyLjIxLjAKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFp bGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==