From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 93632893C0 for ; Fri, 9 Aug 2019 10:19:27 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Fri, 9 Aug 2019 12:19:21 +0200 Message-Id: <20190809101922.12981-2-zbigniew.kempczynski@intel.com> In-Reply-To: <20190809101922.12981-1-zbigniew.kempczynski@intel.com> References: <20190809101922.12981-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v3 1/2] Introduce multi-device selection API 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 List-ID: Q2hhbmdlIGFkZHMgZGV2aWNlIHNlbGVjdGlvbiBiYXNlZCBvbiBzY2FubmluZyBkcm0gc3Vic3lz dGVtCnVzaW5nIHVkZXYgbGlicmFyeS4KClRvb2wgJ2xzZ3B1JyB3aGljaCB1c2VzIGRldmljZSBz Y2FubmluZyBhbmQgc2VsZWN0aW9uIGZlYXR1cmUgd2FzIGFkZGVkLgotLS0KIC4uLi9pZ3QtZ3B1 LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwgICAgICB8ICAgIDEgKwogbGliL01ha2VmaWxl LnNvdXJjZXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBsaWIvaWd0X2Rldmlj ZV9zY2FuLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMTg4ICsrKysrKysrKysrKysrKysr CiBsaWIvaWd0X2RldmljZV9zY2FuLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY5ICsK IGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwog dG9vbHMvTWFrZWZpbGUuc291cmNlcyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiB0 b29scy9sc2dwdS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTgzICsrKwog dG9vbHMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiA4 IGZpbGVzIGNoYW5nZWQsIDE0NDYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxp Yi9pZ3RfZGV2aWNlX3NjYW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfZGV2aWNlX3Nj YW4uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xzZ3B1LmMKCmRpZmYgLS1naXQgYS9kb2Nz L3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwgYi9kb2NzL3Jl ZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwKaW5kZXggYWM4MzI3 MmYuLjRiM2MzOGFmIDEwMDY0NAotLS0gYS9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2ln dC1ncHUtdG9vbHMtZG9jcy54bWwKKysrIGIvZG9jcy9yZWZlcmVuY2UvaWd0LWdwdS10b29scy9p Z3QtZ3B1LXRvb2xzLWRvY3MueG1sCkBAIC0yMyw2ICsyMyw3IEBACiAgICAgPHhpOmluY2x1ZGUg aHJlZj0ieG1sL2lndF9jb3JlLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3Rf ZGVidWdmcy54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2RldmljZS54bWwi Lz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2RldmljZV9zY2FuLnhtbCIvPgogICAg IDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3RfZHJhdy54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBo cmVmPSJ4bWwvaWd0X2R1bW15bG9hZC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwv aWd0X2ZiLnhtbCIvPgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvTWFr ZWZpbGUuc291cmNlcwppbmRleCBlMTZkZTg2ZS4uYzM4M2E4MTcgMTAwNjQ0Ci0tLSBhL2xpYi9N YWtlZmlsZS5zb3VyY2VzCisrKyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCkBAIC0yNSw2ICsyNSw4 IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJXAogCWlndF9kZWJ1Z2ZzLmgJCVwKIAlpZ3RfZGV2aWNl LmMJCVwKIAlpZ3RfZGV2aWNlLmgJCVwKKwlpZ3RfZGV2aWNlX3NjYW4uYwlcCisJaWd0X2Rldmlj ZV9zY2FuLmgJXAogCWlndF9hdXguYwkJXAogCWlndF9hdXguaAkJXAogCWlndF9jb2xvcl9lbmNv ZGluZy5jCVwKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZGV2aWNlX3NjYW4uYyBiL2xpYi9pZ3RfZGV2 aWNlX3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMjQ0NmMzMWEK LS0tIC9kZXYvbnVsbAorKysgYi9saWIvaWd0X2RldmljZV9zY2FuLmMKQEAgLTAsMCArMSwxMTg4 IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRl ICJpZ3QuaCIKKyNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKKyNpbmNsdWRlICJpZ3RfZGV2aWNlLmgi CisjaW5jbHVkZSAiaWd0X2RldmljZV9zY2FuLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1 ZGUgPGxpYnVkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMv c3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2lu Y2x1ZGUgPGZjbnRsLmg+CisKKy8qKgorICogU0VDVElPTjppZ3RfZGV2aWNlX3NjYW4KKyAqIEBz aG9ydF9kZXNjcmlwdGlvbjogTXVsdGktZGV2aWNlIHNjYW5uaW5nIGFuZCBzZWxlY3Rpb24KKyAq IEB0aXRsZTogTXVsdGktZGV2aWNlIHNlbGVjdGlvbgorICogQGluY2x1ZGU6IGlndC5oCisgKgor ICogRGV2aWNlIHNlbGVjdGlvbiBzY2FucyBkZXZpY2VzIG9uICdkcm0nIHN1YnN5c3RlbSB1c2lu ZyB1ZGV2IGxpYnJhcnkuCisgKiBGb3IgZWFjaCBkcm0gZGV2aWNlIHdlIGFsc28gZ2V0IGFuZCBz dG9yZSBpdHMgcGFyZW50IGluIHNjYW5uZWQgZGV2aWNlIGFycmF5CisgKiB0byBhbGxvdyBkZXZp Y2Ugc2VsZWN0aW9uIGluIG1vcmUgY29udGV4dHVhbCB3YXkuCisgKgorICogUGFyZW50IGRldmlj ZXMgYXJlIGJ1cyBkZXZpY2VzIChsaWtlIHBjaSwgcGxhdGZvcm0sIGV0Yy4pIGFuZCBjb250YWlu IGEgbG90CisgKiBvZiB1c2FibGUgaW5mb3JtYXRpb24gdGhhbiBzaW5nbGUgZHJtIGRldmljZSBm b3IgaW1wbGVtZW50aW5nIGZpbHRlcnMuCisgKgorICogVWRldiBjb250YWlucyBwcm9wZXJ0aWVz IGFuZCBzeXNhdHRycyBmb3IgZGV2aWNlIGFzIGEgbGlzdCB3aGF0IGlzIG5vdAorICogY29udmlu aWVudCBmb3Iga2V5L3ZhbHVlIHNlYXJjaGluZy4gU28gdWRldiBkZXZpY2UgaXMgcmV3cml0dGVu CisgKiB0byBpbnRlcm5hbCBpZ3RfZGV2aWNlIHRvIGhhbmRsZSBwcm9wZXJ0aWVzIGFuZCBzeXNh dHRycyBpbiBoYXNoIHRhYmxlcworICogdG8gZ2V0IGFuIGluc3RhbnQgYWNjZXNzIHRvIHRoZSBr ZXkvdmFsdWUuCisgKgorICogRGV2aWNlIHNlbGVjdGlvbiBjYW4gYmUgZG9uZSB1c2luZyBmaWx0 ZXJzLiBEaXJlY3QgZGV2aWNlIHNlbGVjdGlvbiBmaWx0ZXIKKyAqIGlzIHNwZWNpYWwgZmlsdGVy IGFuZCBpdCBpcyBjaGVja2VkIGZpcnN0LiBUaGVuIGNvbnRleHR1YWwgZmlsdGVyIGlzIGNob3Nl bgorICogZGVwZW5kaW5nIG9uIGZpbHRlciBuYW1lLgorICoKKyAqIERpcmVjdCBkZXZpY2Ugc2Vs ZWN0aW9uIGZpbHRlciBtdXN0IGJlOgorICoKKyAqIHN1YnN5c3RlbTovc3lzCisgKgorICogU28s IHdoZW4gdXNlciBwYXNzZXMgZmlsdGVyIHdoaWNoIGxvb2tzIGxpa2UgZm9sbG93czoKKyAqIC0g ZHJtOi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMC9kcm0vY2FyZDAKKyAqIC0g cGNpOi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMAorICogLSBwbGF0Zm9ybTov c3lzL2RldmljZXMvcGxhdGZvcm0vdmdlbQorICoKKyAqIGRldmljZSBmcm9tIGFycmF5IHdoaWNo IGhhdmUgc3Vic3lzdGVtIGFuZCBzeXMgcGF0aCB3aWxsIGJlIHJldHVybmVkLgorICoKKyAqIFdo ZW4gL3N5cyBpcyBub3Qgc3BlY2lmaWVkIGFmdGVyIGNvbG9uIGNvbnRleHR1YWwgZmlsdGVycyBh cmUgdGFrZW4KKyAqIGludG8gYWNjb3VudC4gRHJtIGRldmljZSBvY2N1cnMgaW4gdGhlIHN5c3Rl bSB3aGVuIGFwcHJvcHJpYXRlIG1vZHVsZQorICogaXMgbG9hZGVkIGFuZCBkZXZpY2UgaXMgZGV0 ZWN0ZWQgKG9yIGV4cG9zZWQgZm9yIHBsYXRmb3JtIGRldmljZXMpLiBMb2FkaW5nCisgKiBkcml2 ZXJzIGluIGRpZmZlcmVudCBvcmRlciBjYW4gYmUgcHJvYmxlbWF0aWMgZnJvbSBDSSBwb2ludCBv ZiB2aWV3LCB3aGVyZQorICogeW91IHdhbnQgdG8gZ2V0IHNhbWUgZGV2aWNlIGVzcGVjaWFsbHkg d2hlbiBtdWx0aXBsZSBncHUgZGV2aWNlcyBjYW4gcmVzaWRlCisgKiBpbiB0aGUgc3lzdGVtLiBG b3Igc3VjaCBkZXZpY2VzIGl0cyBwYXJlbnQgbG9jYXRpb24gb24gcGNpIGJ1cyBpcyBjb25zdGFu dAorICogYW5kIGFsbG93cyBhcHByb3ByaWF0ZSBkZXZpY2Ugc2VsZWN0aW9uIHVzaW5nIGZvciBl eGFtcGxlIHZlbmRvciAvIGRldmljZQorICogaWRzLgorICoKKyAqIEZvciB0ZXN0cyB3aGljaCBv cGVucyBtb3JlIHRoYW4gb25lIGRldmljZSBkZXZpY2UgZmlsdGVyIGNvbGxlY3Rpb24gQVBJCisg KiBjYW4gYmUgdXNlZC4gWW91IGNhbiBhZGQgZmlsdGVyIHRvIHRoZSBhcnJheSB1c2luZyBpZ3Rf ZGV2aWNlX2ZpbHRlcl9hZGQoKSwKKyAqIGdldCBudGggZmlsdGVyIHN0b3JlZCB1c2luZyBpZ3Rf ZGV2aWNlX2ZpbHRlcl9nZXQoKSBhbmQgcmV0dXJuCisgKiBpZ3RfZGV2aWNlX2NhcmQgdXNpbmcg ZmlsdGVyIGluIGlndF9kZXZpY2VfY2FyZF9tYXRjaCgpLgorICoKKyovCisKKy8vI2RlZmluZSBE RUJVR19ERVZJQ0VfU0NBTgorI2lmZGVmIERFQlVHX0RFVklDRV9TQ0FOCisjZGVmaW5lIERCRygu Li4pIFwKK3sgXAorCXN0cnVjdCB0aW1ldmFsIHRtOyBcCisJZ2V0dGltZW9mZGF5KCZ0bSwgTlVM TCk7IFwKKwlwcmludGYoIiUxMGxkLiUwM2xkOiAiLCB0bS50dl9zZWMsIHRtLnR2X3VzZWMpOyBc CisJcHJpbnRmKF9fVkFfQVJHU19fKTsgXAorCX0KKworI2Vsc2UKKyNkZWZpbmUgREJHKC4uLikg e30KKyNlbmRpZgorCisjZGVmaW5lIHN0cmVxdWFsKHgsIHkpICgoeCkgJiYgKHkpICYmICFzdHJj bXAoKHgpLCAoeSkpKQorI2RlZmluZSBJR1RfRFJNX1BBVEggIi9kZXYvZHJpIgorCitzdGF0aWMg R0hhc2hUYWJsZSAqc3lzYXR0cnNfYmxhY2tsaXN0X2h0OyAgLy9zeXNhdHRycyB3ZSBkb24ndCB3 YW50IHRvIHJlYWQKK3N0YXRpYyBHSGFzaFRhYmxlICpncHVfdmVuZG9yX2h0OyAgICAgICAgICAv L3NlYXJjaCBpZCAtPiB2ZW5kb3Jfc3BlYyBtYXBwaW5nCitzdGF0aWMgR0hhc2hUYWJsZSAqZmls dGVyX2RlZmluaXRpb25faHQ7ICAgLy9zdXBwb3J0ZWQgZmlsdGVycyAocGNpPS4uLiwgZXRjLikK KworLyogR2VuZXJpYyBuYW1lLT52YWx1ZSBzdHJ1Y3QgKi8KK3N0cnVjdCBuYW1lX3ZhbHVlIHsK Kwljb25zdCBjaGFyICpuYW1lOworCWdwb2ludGVyICp2YWx1ZTsKK307CisKKy8qIFZlbmRvciBz cGVjaWZpYyBkYXRhICovCitzdHJ1Y3QgdmVuZG9yX3NwZWMgeworCWNvbnN0IGNoYXIgKnZlbmRv cjsKKwljb25zdCBjaGFyICptYXRjaDsKKwlpbnQgY2hpcHNldDsKK307CisKK3N0cnVjdCBpZ3Rf ZGV2aWNlIHsKKwkvKiBGaWxsZWQgZm9yIGRybSBkZXZpY2VzICovCisJc3RydWN0IGlndF9kZXZp Y2UgKnBhcmVudDsKKworCS8qIFBvaW50IHRvIHZlbmRvciBzcGVjIGlmIGNhbiBiZSBmb3VuZCAq LworCXN0cnVjdCB2ZW5kb3Jfc3BlYyAqdnM7CisKKwkvKiBQcm9wZXJ0aWVzIC8gc3lzYXR0cnMg cmV3cml0ZW4gZnJvbSB1ZGV2IGxpc3RzICovCisJR0hhc2hUYWJsZSAqcHJvcHNfaHQ7CisJR0hh c2hUYWJsZSAqYXR0cnNfaHQ7CisKKwkvKiBNb3N0IHVzYWJsZSB2YXJpYWJsZXMgZnJvbSB1ZGV2 IGRldmljZSAqLworCWNoYXIgKnN1YnN5c3RlbTsKKwljaGFyICpzeXNwYXRoOworCWNoYXIgKmRl dm5vZGU7CisKKwkvKiAvZGV2L2RyaS8uLi4gcGF0aHMgKi8KKwljaGFyICpkcm1fY2FyZDsKKwlj aGFyICpkcm1fcmVuZGVyOworCisJLyogRm9yIHBjaSBzdWJzeXN0ZW0gKi8KKwljaGFyICp2ZW5k b3I7CisJY2hhciAqZGV2aWNlOworfTsKKworLyogU2Nhbm5lZCBkZXZpY2VzICovCitzdHJ1Y3Qg aWd0X2RldmljZXMgeworCUdQdHJBcnJheSAqZGV2czsJCS8vYWxsIGRldmljZXMKKwlHUHRyQXJy YXkgKnZpZXc7CQkvL2ZpbHRlcmVkIHZpZXcKKwlib29sIGRldnNfc2Nhbm5lZDsKK307CisKKy8q IFNjYW5uZWQgZGV2aWNlcyBob2xkZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgaWd0X2RldmljZXMgaWd0 X2RldnM7CisKK3N0YXRpYyBzdHJ1Y3QgdmVuZG9yX3NwZWMgdl9pbnRlbCAgPSB7IC52ZW5kb3Ig PSAiSW50ZWwiLAorCQkJCSAgICAgICAuY2hpcHNldCA9IERSSVZFUl9JTlRFTAorCQkJCSAgICAg fTsKK3N0YXRpYyBzdHJ1Y3QgdmVuZG9yX3NwZWMgdl9hbWQgICAgPSB7IC52ZW5kb3IgPSAiQU1E IiwKKwkJCQkgICAgICAgLmNoaXBzZXQgPSBEUklWRVJfQU1ER1BVCisJCQkJICAgICB9Oworc3Rh dGljIHN0cnVjdCB2ZW5kb3Jfc3BlYyB2X3ZnZW0gICA9IHsgLnZlbmRvciA9ICJWaXJ0dWFsLUdF TSIsCisJCQkJICAgICAgIC5jaGlwc2V0ID0gRFJJVkVSX1ZHRU0KKwkJCQkgICAgIH07CitzdGF0 aWMgc3RydWN0IHZlbmRvcl9zcGVjIHZfdmM0ICAgID0geyAudmVuZG9yID0gIkJyb2FkY29tIiwK KwkJCQkgICAgICAgLmNoaXBzZXQgPSBEUklWRVJfVkM0CisJCQkJICAgICB9OworCisvKiBNYXBw aW5nIHZlbmRvciBpZCA9PiB2ZW5kb3Jfc3BlYyBzaG91bGQgYmUgdW5pcXVlICh2ZW5kb3Igc3Ry aW5nIG1hdGNoaW5nCisgKiBpcyB3cml0dGVuIGFyb3VuZCB0aGlzKS4KKyAqCisgKiBLZXlzIG11 c3QgYmUgZGVmaW5lZCBhcyBmb2xsb3dzOgorICogUENJIGRldmljZXM6IFBDSV9TTE9UX0lEIC0+ IHZlbmRvcl9zcGVjLgorKi8KK3N0cnVjdCBuYW1lX3ZhbHVlIGdwdV92ZW5kb3JfbGlzdFtdID0g eworCXsgIjgwODYiLCAoZ3BvaW50ZXIpICZ2X2ludGVsIH0sCisJeyAiMTAwMiIsIChncG9pbnRl cikgJnZfYW1kIH0sCisJeyBOVUxMLCB9LAorfTsKKworLyogR2VuZXJpYyBoYXNoIHRhYmxlIGZp bGwgZnVuY3Rpb24sIHJlcXVpcmVzIG5hbWUgLyB2YWx1ZSBwdHJzIGFycmF5ICovCitzdGF0aWMg dm9pZCBmaWxsX2h0KEdIYXNoVGFibGUgKipodCwgc3RydWN0IG5hbWVfdmFsdWUgKmRhdGEpCit7 CisJaWYgKCpodCkKKwkJcmV0dXJuOworCisJKmh0ID0gZ19oYXNoX3RhYmxlX25ldyhnX3N0cl9o YXNoLCBnX3N0cl9lcXVhbCk7CisJaWd0X2Fzc2VydCgqaHQpOworCisJd2hpbGUgKGRhdGEtPm5h bWUpIHsKKwkJZ19oYXNoX3RhYmxlX2luc2VydCgqaHQsCisJCQkJICAgIChncG9pbnRlcikgZGF0 YS0+bmFtZSwKKwkJCQkgICAgZGF0YS0+dmFsdWUpOworCQlkYXRhKys7CisJfQorfQorCisjZGVm aW5lIGdldF92ZW5kb3Jfc3BlYyhwcm9wKSBcCisJZ19oYXNoX3RhYmxlX2xvb2t1cChncHVfdmVu ZG9yX2h0LCBwcm9wKQorCisvKiBHbyB0aHJvdWdoIHdob2xlIHZlbmRvciBsaXN0IGFuZCBjb21w YXJlIGFnYWluc3QgdmVuZG9yIGZpZWxkLgorICogVXNlZCBtb3N0bHkgd2l0aCB2ZW5kb3I9Li4u IGZpbHRlciBwYXJhbWV0ZXIgd2hlbiBQQ0kgaWQgaXMgbm90IG1hdGNoZWQuCisqLworc3RhdGlj IGNvbnN0IGNoYXIgKmdldF9wY2lfdmVuZG9yX2lkX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkK K3sKKwlzdHJ1Y3QgbmFtZV92YWx1ZSAqZGF0YSA9ICZncHVfdmVuZG9yX2xpc3RbMF07CisKKwl3 aGlsZSAoZGF0YS0+bmFtZSkgeworCQlzdHJ1Y3QgdmVuZG9yX3NwZWMgKnZzID0gKHN0cnVjdCB2 ZW5kb3Jfc3BlYyAqKSBkYXRhLT52YWx1ZTsKKwkJaWYgKCFzdHJjYXNlY21wKG5hbWUsIHZzLT52 ZW5kb3IpKQorCQkJcmV0dXJuIGRhdGEtPm5hbWU7CisJCWRhdGErKzsKKwl9CisKKwlyZXR1cm4g TlVMTDsKK30KKworLyogUmVhZGluZyBzeXNhdHRyIHZhbHVlcyBjYW4gdGFrZSB0aW1lIChldmVu IHNlY29uZHMpLAorICogd2Ugd2FudCB0byBhdm9pZCByZWFkaW5nIHN1Y2gga2V5cy4KKyovCitz dGF0aWMgdm9pZCBwb3B1bGF0ZV9ibGFja2xpc3Rfa2V5cyh2b2lkKQoreworCWNvbnN0IGNoYXIg KmtleXNbXSA9IHsgImNvbmZpZyIsICJtb2RhbGlhcyIsICJtb2RlcyIsCisJCQkgICAgICAgInJl c291cmNlIiwKKwkJCSAgICAgICAicmVzb3VyY2UwIiwgInJlc291cmNlMSIsICJyZXNvdXJjZTIi LAorCQkJICAgICAgICJyZXNvdXJjZTMiLCAicmVzb3VyY2U0IiwgInJlc291cmNlNSIsCisJCQkg ICAgICAgInJlc291cmNlMF93YyIsICJyZXNvdXJjZTFfd2MiLCAicmVzb3VyY2UyX3djIiwKKwkJ CSAgICAgICAicmVzb3VyY2UzX3djIiwgInJlc291cmNlNF93YyIsICJyZXNvdXJjZTVfd2MiLAor CQkJICAgICAgICJkcml2ZXIiLAorCQkJICAgICAgICJ1ZXZlbnQiLCBOVUxMfTsKKwljb25zdCBj aGFyICprZXk7CisJaW50IGkgPSAwOworCisJaWYgKHN5c2F0dHJzX2JsYWNrbGlzdF9odCkKKwkJ cmV0dXJuOworCisJc3lzYXR0cnNfYmxhY2tsaXN0X2h0ID0gZ19oYXNoX3RhYmxlX25ldyhnX3N0 cl9oYXNoLCBnX3N0cl9lcXVhbCk7CisJaWd0X2Fzc2VydChzeXNhdHRyc19ibGFja2xpc3RfaHQp OworCisJd2hpbGUgKChrZXkgPSBrZXlzW2krK10pKQorCQlnX2hhc2hfdGFibGVfYWRkKHN5c2F0 dHJzX2JsYWNrbGlzdF9odCwgKGdwb2ludGVyKSBrZXkpOworfQorCisjZGVmaW5lIGlzX29uX2Js YWNrbGlzdChrZXkpIFwKKwlnX2hhc2hfdGFibGVfY29udGFpbnMoc3lzYXR0cnNfYmxhY2tsaXN0 X2h0LCBrZXkpCisKK3N0YXRpYyBzdHJ1Y3QgaWd0X2RldmljZSAqaWd0X2RldmljZV9uZXcodm9p ZCkKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2OworCWRldiA9IGNhbGxvYygxLCBzaXplb2Yo c3RydWN0IGlndF9kZXZpY2UpKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIE5VTEw7CisKKwlkZXYt PmF0dHJzX2h0ID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFs LAorCQkJCQkgICAgICBmcmVlLCBmcmVlKTsKKwlkZXYtPnByb3BzX2h0ID0gZ19oYXNoX3RhYmxl X25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLAorCQkJCQkgICAgICBmcmVlLCBmcmVl KTsKKworCWlmIChkZXYtPmF0dHJzX2h0ICYmIGRldi0+cHJvcHNfaHQpCisJCXJldHVybiBkZXY7 CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaWd0X2RldmljZV9hZGRfcHJvcChz dHJ1Y3QgaWd0X2RldmljZSAqZGV2LAorCQkJCWNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAq dmFsdWUpCit7CisJaWYgKCFrZXkgfHwgIXZhbHVlKQorCQlyZXR1cm47CisKKwlnX2hhc2hfdGFi bGVfaW5zZXJ0KGRldi0+cHJvcHNfaHQsIHN0cmR1cChrZXkpLCBzdHJkdXAodmFsdWUpKTsKK30K Kworc3RhdGljIHZvaWQgaWd0X2RldmljZV9hZGRfYXR0cihzdHJ1Y3QgaWd0X2RldmljZSAqZGV2 LAorCQkJCWNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJY29uc3QgY2hh ciAqdiA9IHZhbHVlOworCisJaWYgKCFrZXkpCisJCXJldHVybjsKKworCS8qIEl0J3MgcG9zc2li bGUgd2UgaGF2ZSBzeW1saW5rIGF0IGtleSBmaWxlbmFtZSwgYnV0IHVkZXYKKwkgKiBsaWJyYXJ5 IHJlc29sdmVzIG9ubHkgZmV3IG9mIHRoZW0gKi8KKwlpZiAoIXYpIHsKKwkJc3RydWN0IHN0YXQg c3Q7CisJCWNoYXIgcGF0aFtQQVRIX01BWF07CisJCWNoYXIgbGlua3RvW1BBVEhfTUFYXTsKKwkJ aW50IGxlbjsKKworCQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy8lcyIsIGRldi0+ c3lzcGF0aCwga2V5KTsKKwkJaWYgKGxzdGF0KHBhdGgsICZzdCkgIT0gMCkKKwkJCXJldHVybjsK KworCQlsZW4gPSByZWFkbGluayhwYXRoLCBsaW5rdG8sIHNpemVvZihsaW5rdG8pKTsKKwkJaWYg KGxlbiA8PSAwIHx8IGxlbiA9PSAoc3NpemVfdCkgc2l6ZW9mKGxpbmt0bykpCisJCQlyZXR1cm47 CisJCWxpbmt0b1tsZW5dID0gJ1wwJzsKKwkJdiA9IHN0cnJjaHIobGlua3RvLCAnLycpOworCQlp ZiAodiA9PSBOVUxMKQorCQkJcmV0dXJuOworCQl2Kys7CisJfQorCisJZ19oYXNoX3RhYmxlX2lu c2VydChkZXYtPmF0dHJzX2h0LCBzdHJkdXAoa2V5KSwgc3RyZHVwKHYpKTsKK30KKworLyogSXRl cmF0ZSBvdmVyIHVkZXYgcHJvcGVydGllcyBsaXN0IGFuZCByZXdyaXRlIGl0IHRvIGlndF9kZXZp Y2UgcHJvcGVydGllcworICogaGFzaCB0YWJsZSBmb3IgaW5zdGFudCBhY2Nlc3MuCisgKi8KK3N0 YXRpYyB2b2lkIGdldF9wcm9wcyhzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldiwgc3RydWN0IGlndF9k ZXZpY2UgKmlkZXYpCit7CisJc3RydWN0IHVkZXZfbGlzdF9lbnRyeSAqZW50cnk7CisKKwllbnRy eSA9IHVkZXZfZGV2aWNlX2dldF9wcm9wZXJ0aWVzX2xpc3RfZW50cnkoZGV2KTsKKwl3aGlsZSAo ZW50cnkpIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmFtZShl bnRyeSk7CisJCWNvbnN0IGNoYXIgKnZhbHVlID0gdWRldl9saXN0X2VudHJ5X2dldF92YWx1ZShl bnRyeSk7CisJCWlndF9kZXZpY2VfYWRkX3Byb3AoaWRldiwgbmFtZSwgdmFsdWUpOworCQllbnRy eSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmV4dChlbnRyeSk7CisJCURCRygicHJvcDogJXMsIHZh bDogJXNcbiIsIG5hbWUsIHZhbHVlKTsKKwl9Cit9CisKKy8qIFNhbWUgYXMgZ2V0X3Byb3BzKCks IGJ1dCByZXdyaXRlcyBzeXNhdHRycy4gUmVzb2x2ZXMgc3ltYm9saWMgbGlua3MKKyAqIG5vdCBo YW5kbGVkIGJ5IHVkZXYgZ2V0X3N5c2F0dHJfdmFsdWUoKS4KKyAqIEZ1bmN0aW9uIHNraXBzIHN5 c2F0dHJzIGZyb20gYmxhY2tsaXN0IGh0IChhY3F1aXJpbmcgc29tZSB2YWx1ZXMgY2FuIHRha2UK KyAqIHNlY29uZHMpLgorICovCitzdGF0aWMgdm9pZCBnZXRfYXR0cnMoc3RydWN0IHVkZXZfZGV2 aWNlICpkZXYsIHN0cnVjdCBpZ3RfZGV2aWNlICppZGV2KQoreworCXN0cnVjdCB1ZGV2X2xpc3Rf ZW50cnkgKmVudHJ5OworCisJZW50cnkgPSB1ZGV2X2RldmljZV9nZXRfc3lzYXR0cl9saXN0X2Vu dHJ5KGRldik7CisJd2hpbGUgKGVudHJ5KSB7CisJCWNvbnN0IGNoYXIgKmtleSA9IHVkZXZfbGlz dF9lbnRyeV9nZXRfbmFtZShlbnRyeSk7CisJCWNvbnN0IGNoYXIgKnZhbHVlOworCisJCWlmIChp c19vbl9ibGFja2xpc3Qoa2V5KSkgeworCQkJZW50cnkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25l eHQoZW50cnkpOworCQkJY29udGludWU7CisJCX0KKworCQl2YWx1ZSA9IHVkZXZfZGV2aWNlX2dl dF9zeXNhdHRyX3ZhbHVlKGRldiwga2V5KTsKKwkJaWd0X2RldmljZV9hZGRfYXR0cihpZGV2LCBr ZXksIHZhbHVlKTsKKwkJZW50cnkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25leHQoZW50cnkpOwor CQlEQkcoImF0dHI6ICVzLCB2YWw6ICVzXG4iLCBrZXksIHZhbHVlKTsKKwl9Cit9CisKKyNkZWZp bmUgZ2V0X3Byb3AoZGV2LCBwcm9wKSAoY2hhciAqKSBnX2hhc2hfdGFibGVfbG9va3VwKGRldi0+ cHJvcHNfaHQsIHByb3ApCisjZGVmaW5lIGdldF9hdHRyKGRldiwgYXR0cikgKGNoYXIgKikgZ19o YXNoX3RhYmxlX2xvb2t1cChkZXYtPmF0dHJzX2h0LCBhdHRyKQorI2RlZmluZSBnZXRfcHJvcF9z dWJzeXN0ZW0oZGV2KSBnZXRfcHJvcChkZXYsICJTVUJTWVNURU0iKQorI2RlZmluZSBpc19kcm1f c3Vic3lzdGVtKGRldikgICAoIXN0cmNtcChnZXRfcHJvcF9zdWJzeXN0ZW0oZGV2KSwgImRybSIp KQorI2RlZmluZSBpc19wY2lfc3Vic3lzdGVtKGRldikgICAoIXN0cmNtcChnZXRfcHJvcF9zdWJz eXN0ZW0oZGV2KSwgInBjaSIpKQorI2RlZmluZSBpc19wbGF0Zm9ybV9zdWJzeXN0ZW0oZGV2KSAo IXN0cmNtcChnZXRfcHJvcF9zdWJzeXN0ZW0oZGV2KSwgInBsYXRmb3JtIikpCisKKy8qIEdldHMg UENJX0lEIHByb3BlcnR5LCBzcGxpdHMgdG8geHh4eDp5eXl5IGFuZCBzdG9yZXMKKyAqIHh4eHgg dG8gZGV2LT52ZW5kb3IgYW5kIHl5eXkgdG8gZGV2LT5kZXZpY2UgZm9yCisgKiBmYXN0ZXIgYWNj ZXNzLgorICovCitzdGF0aWMgdm9pZCBzZXRfdmVuZG9yX2RldmljZShzdHJ1Y3QgaWd0X2Rldmlj ZSAqZGV2KQoreworCWNvbnN0IGNoYXIgKnBjaV9pZCA9IGdldF9wcm9wKGRldiwgIlBDSV9JRCIp OworCWlmICghcGNpX2lkIHx8IHN0cmxlbihwY2lfaWQpICE9IDkpCisJCXJldHVybjsKKwlkZXYt PnZlbmRvciA9IHN0cm5kdXAocGNpX2lkLCA0KTsKKwlkZXYtPmRldmljZSA9IHN0cm5kdXAocGNp X2lkICsgNSwgNCk7Cit9CisKKy8qIEFsbG9jYXRlIGFycmF5cyBmb3Iga2VlcGluZyBzY2FubmVk IGRldmljZXMgKi8KK3N0YXRpYyBib29sIHByZXBhcmVfc2Nhbih2b2lkKQoreworCWlmICghaWd0 X2RldnMuZGV2cykKKwkJaWd0X2RldnMuZGV2cyA9IGdfcHRyX2FycmF5X3NpemVkX25ldyg0KTsK KwlpZiAoIWlndF9kZXZzLnZpZXcpCisJCWlndF9kZXZzLnZpZXcgPSBnX3B0cl9hcnJheV9zaXpl ZF9uZXcoNCk7CisKKwlpZiAoIWlndF9kZXZzLmRldnMgfHwgIWlndF9kZXZzLnZpZXcpCisJCXJl dHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKiBDcmVhdGUgbmV3IGlndF9kZXZp Y2UgZnJvbSB1ZGV2IGRldmljZS4KKyAgIEZpbGxzIHN0cnVjdHVyZSB3aXRoIG1vc3QgdXNhYmxl IHVkZXYgZGV2aWNlIHZhcmlhYmxlcywgcHJvcGVydGllcworICAgYW5kIHN5c2F0dHJzLgorKi8K K3N0YXRpYyBzdHJ1Y3QgaWd0X2RldmljZSAqaWd0X2RldmljZV9uZXdfZnJvbV91ZGV2KHN0cnVj dCB1ZGV2X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZ3RfZGV2aWNlICppZGV2ID0gaWd0X2Rl dmljZV9uZXcoKTsKKwlpZ3RfYXNzZXJ0KGlkZXYpOworCisJaWRldi0+c3lzcGF0aCA9IGdfc3Ry ZHVwKHVkZXZfZGV2aWNlX2dldF9zeXNwYXRoKGRldikpOworCWlkZXYtPnN1YnN5c3RlbSA9IGdf c3RyZHVwKHVkZXZfZGV2aWNlX2dldF9zdWJzeXN0ZW0oZGV2KSk7CisJaWRldi0+ZGV2bm9kZSA9 IGdfc3RyZHVwKHVkZXZfZGV2aWNlX2dldF9kZXZub2RlKGRldikpOworCisJaWYgKGlkZXYtPmRl dm5vZGUgJiYgc3Ryc3RyKGlkZXYtPmRldm5vZGUsICIvZGV2L2RyaS9jYXJkIikpCisJCWlkZXYt PmRybV9jYXJkID0gZ19zdHJkdXAoaWRldi0+ZGV2bm9kZSk7CisJZWxzZSBpZiAoaWRldi0+ZGV2 bm9kZSAmJiBzdHJzdHIoaWRldi0+ZGV2bm9kZSwgIi9kZXYvZHJpL3JlbmRlciIpKQorCQlpZGV2 LT5kcm1fcmVuZGVyID0gZ19zdHJkdXAoaWRldi0+ZGV2bm9kZSk7CisKKwlnZXRfcHJvcHMoZGV2 LCBpZGV2KTsKKwlnZXRfYXR0cnMoZGV2LCBpZGV2KTsKKworCXJldHVybiBpZGV2OworfQorCisv KiBJdGVyYXRlIG92ZXIgYWxsIGlndF9kZXZpY2VzIGFycmF5IGFuZCBmaW5kIG9uZSBtYXRjaGVk IHRvCisgKiBzdWJzeXN0ZW0gYW5kIHN5c3BhdGguCisqLworc3RhdGljIHN0cnVjdCBpZ3RfZGV2 aWNlICppZ3RfZGV2aWNlX2ZpbmQoY29uc3QgY2hhciAqc3Vic3lzdGVtLAorCQkJCQkgIGNvbnN0 IGNoYXIgKnN5c3BhdGgpCit7CisJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKKworCWZvciAoaW50 IGkgPSAwOyBpIDwgaWd0X2RldnMuZGV2cy0+bGVuOyBpKyspIHsKKwkJZGV2ID0gZ19wdHJfYXJy YXlfaW5kZXgoaWd0X2RldnMuZGV2cywgaSk7CisJCWlmICghc3RyY21wKGRldi0+c3Vic3lzdGVt LCBzdWJzeXN0ZW0pICYmCisJCQkhc3RyY21wKGRldi0+c3lzcGF0aCwgc3lzcGF0aCkpCisJCQly ZXR1cm4gZGV2OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogRm9yIGVhY2ggZHJtIGlndF9k ZXZpY2UgYWRkIG9yIHVwZGF0ZSBpdHMgcGFyZW50IGlndF9kZXZpY2UgdG8gdGhlIGFycmF5Lgor ICAgQXMgY2FyZC9yZW5kZXIgZHJtIGRldmljZXMgbW9zdGx5IGhhdmUgc2FtZSBwYXJlbnQgKHZr bXMgaXMgYW4gZXhjZXB0aW9uKQorICAgbGluayB0byBpdCBhbmQgdXBkYXRlIGNvcnJlc3BvbmRp bmcgZHJtX2NhcmQgLyBkcm1fcmVuZGVyIGZpZWxkcy4KKyovCitzdGF0aWMgdm9pZCB1cGRhdGVf b3JfYWRkX3BhcmVudChzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGlndF9k ZXZpY2UgKmlkZXYpCit7CisJc3RydWN0IHVkZXZfZGV2aWNlICpwYXJlbnRfZGV2OworCXN0cnVj dCBpZ3RfZGV2aWNlICpwYXJlbnRfaWRldjsKKwljb25zdCBjaGFyICpzdWJzeXN0ZW0sICpzeXNw YXRoLCAqZGV2bmFtZTsKKworCXBhcmVudF9kZXYgPSB1ZGV2X2RldmljZV9nZXRfcGFyZW50KGRl dik7CisJaWd0X2Fzc2VydChwYXJlbnRfZGV2KTsKKworCXN1YnN5c3RlbSA9IHVkZXZfZGV2aWNl X2dldF9zdWJzeXN0ZW0ocGFyZW50X2Rldik7CisJc3lzcGF0aCA9IHVkZXZfZGV2aWNlX2dldF9z eXNwYXRoKHBhcmVudF9kZXYpOworCisJcGFyZW50X2lkZXYgPSBpZ3RfZGV2aWNlX2ZpbmQoc3Vi c3lzdGVtLCBzeXNwYXRoKTsKKwlpZiAoIXBhcmVudF9pZGV2KSB7CisJCXBhcmVudF9pZGV2ID0g aWd0X2RldmljZV9uZXdfZnJvbV91ZGV2KHBhcmVudF9kZXYpOworCQlpZiAoaXNfcGNpX3N1YnN5 c3RlbShwYXJlbnRfaWRldikpIHsKKwkJCXNldF92ZW5kb3JfZGV2aWNlKHBhcmVudF9pZGV2KTsK KwkJCXBhcmVudF9pZGV2LT52cyA9IGdldF92ZW5kb3Jfc3BlYyhwYXJlbnRfaWRldi0+dmVuZG9y KTsKKwkJfQorCQlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMuZGV2cywgcGFyZW50X2lkZXYpOwor CX0KKwlkZXZuYW1lID0gdWRldl9kZXZpY2VfZ2V0X2Rldm5vZGUoZGV2KTsKKwlpZiAoc3Ryc3Ry KGRldm5hbWUsICIvZGV2L2RyaS9jYXJkIikpCisJCXBhcmVudF9pZGV2LT5kcm1fY2FyZCA9IGdf c3RyZHVwKGRldm5hbWUpOworCWVsc2UgaWYgKHN0cnN0cihkZXZuYW1lLCAiL2Rldi9kcmkvcmVu ZGVyIikpCisJCXBhcmVudF9pZGV2LT5kcm1fcmVuZGVyPSBnX3N0cmR1cChkZXZuYW1lKTsKKwor CWlkZXYtPnBhcmVudCA9IHBhcmVudF9pZGV2OworfQorCitzdGF0aWMgZ2ludCBkZXZzX2NvbXBh cmUoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCit7CisJc3RydWN0IGlndF9kZXZp Y2UgKmRldjEsICpkZXYyOworCWludCByZXQ7CisKKwlkZXYxID0gKihzdHJ1Y3QgaWd0X2Rldmlj ZSAqKikgYTsKKwlkZXYyID0gKihzdHJ1Y3QgaWd0X2RldmljZSAqKikgYjsKKwlyZXQgPSBzdHJj bXAoZGV2MS0+c3Vic3lzdGVtLCBkZXYyLT5zdWJzeXN0ZW0pOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlyZXR1cm4gc3RyY21wKGRldjEtPnN5c3BhdGgsIGRldjItPnN5c3BhdGgpOwor fQorCisvKiBDb3JlIHNjYW5uaW5nIGZ1bmN0aW9uLgorICoKKyAqIEFsbCBzY2FubmVkIGRldmlj ZXMgYXJlIGtlcHQgaW5zaWRlIGlndF9kZXZzLmRldnMgcG9pbnRlciBhcnJheS4KKyAqIEVhY2gg YWRkZWQgZGV2aWNlIGlzIGlndF9kZXZpY2Ugc3RydWN0dXJlLCB3aGljaCBjb250cmFyeSB0byB1 ZGV2IGRldmljZQorICogaGFzIHByb3BlcnRpZXMgLyBzeXNhdHRycyBzdG9yZWQgaW5zaWRlIGhh c2ggdGFibGUgaW5zdGVhZCBvZiBsaXN0LgorICoKKyAqIEZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIg ZGV2aWNlcyBvbiAnZHJtJyBzdWJzeXN0ZW0uIEZvciBlYWNoIGRybSBkZXZpY2UKKyAqIGl0cyBw YXJlbnQgaXMgdGFrZW4gKGJ1cyBkZXZpY2UpIGFuZCBzdG9yZWQgaW5zaWRlIHNhbWUgYXJyYXku CisgKiBGdW5jdGlvbiBzb3J0cyBhbGwgZm91bmQgZGV2aWNlcyB0byBrZWVwIHNhbWUgb3JkZXIg b2YgYnVzIGRldmljZXMKKyAqIGZvciBwcm92aWRpbmcgcHJlZGljdGFibGUgc2VhcmNoLgorICov CitzdGF0aWMgdm9pZCBzY2FuX2RybV9kZXZpY2VzKHZvaWQpCit7CisJc3RydWN0IHVkZXYgKnVk ZXY7CisJc3RydWN0IHVkZXZfZW51bWVyYXRlICplbnVtZXJhdGU7CisJc3RydWN0IHVkZXZfbGlz dF9lbnRyeSAqZGV2aWNlcywgKmRldl9saXN0X2VudHJ5OworCWludCByZXQ7CisKKwl1ZGV2ID0g dWRldl9uZXcoKTsKKwlpZ3RfYXNzZXJ0KHVkZXYpOworCisJZW51bWVyYXRlID0gdWRldl9lbnVt ZXJhdGVfbmV3KHVkZXYpOworCWlndF9hc3NlcnQoZW51bWVyYXRlKTsKKworCURCRygiU2Nhbm5p bmcgZHJtIHN1YnN5c3RlbVxuIik7CisJcmV0ID0gdWRldl9lbnVtZXJhdGVfYWRkX21hdGNoX3N1 YnN5c3RlbShlbnVtZXJhdGUsICJkcm0iKTsKKwlpZ3RfYXNzZXJ0KCFyZXQpOworCisJdWRldl9l bnVtZXJhdGVfYWRkX21hdGNoX3Byb3BlcnR5KGVudW1lcmF0ZSwgIkRFVk5BTUUiLCAiL2Rldi9k cmkvKiIpOworCWlndF9hc3NlcnQoIXJldCk7CisKKwlyZXQgPSB1ZGV2X2VudW1lcmF0ZV9zY2Fu X2RldmljZXMoZW51bWVyYXRlKTsKKwlpZ3RfYXNzZXJ0KCFyZXQpOworCisJZGV2aWNlcyA9IHVk ZXZfZW51bWVyYXRlX2dldF9saXN0X2VudHJ5KGVudW1lcmF0ZSk7CisJaWYgKCFkZXZpY2VzKQor CQlyZXR1cm47CisKKwl1ZGV2X2xpc3RfZW50cnlfZm9yZWFjaChkZXZfbGlzdF9lbnRyeSwgZGV2 aWNlcykgeworCQljb25zdCBjaGFyICpwYXRoOworCQlzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldjsK KwkJc3RydWN0IGlndF9kZXZpY2UgKmlkZXY7CisKKwkJcGF0aCA9IHVkZXZfbGlzdF9lbnRyeV9n ZXRfbmFtZShkZXZfbGlzdF9lbnRyeSk7CisJCWRldiA9IHVkZXZfZGV2aWNlX25ld19mcm9tX3N5 c3BhdGgodWRldiwgcGF0aCk7CisJCWlkZXYgPSBpZ3RfZGV2aWNlX25ld19mcm9tX3VkZXYoZGV2 KTsKKwkJdXBkYXRlX29yX2FkZF9wYXJlbnQoZGV2LCBpZGV2KTsKKwkJZ19wdHJfYXJyYXlfYWRk KGlndF9kZXZzLmRldnMsIGlkZXYpOworCisJCXVkZXZfZGV2aWNlX3VucmVmKGRldik7CisJfQor CXVkZXZfZW51bWVyYXRlX3VucmVmKGVudW1lcmF0ZSk7CisJdWRldl91bnJlZih1ZGV2KTsKKwor CWdfcHRyX2FycmF5X3NvcnQoaWd0X2RldnMuZGV2cywgZGV2c19jb21wYXJlKTsKKwlmb3IgKGlu dCBpID0gMDsgaSA8IGlndF9kZXZzLmRldnMtPmxlbjsgaSsrKSB7CisJCWdfcHRyX2FycmF5X2Fk ZChpZ3RfZGV2cy52aWV3LAorCQkJCWdfcHRyX2FycmF5X2luZGV4KGlndF9kZXZzLmRldnMsIGkp KTsKKwl9Cit9CisKK3N0cnVjdCBuYW1lX3ZhbHVlIGZpbHRlcl9kZWZpbml0aW9uX2xpc3RbXTsK K3N0YXRpYyB2b2lkIHBvcHVsYXRlX2dwdV9kYXRhKHZvaWQpCit7CisJZmlsbF9odCgmZ3B1X3Zl bmRvcl9odCwgJmdwdV92ZW5kb3JfbGlzdFswXSk7CisJZmlsbF9odCgmZmlsdGVyX2RlZmluaXRp b25faHQsICZmaWx0ZXJfZGVmaW5pdGlvbl9saXN0WzBdKTsKK30KKworc3RhdGljIHZvaWQgaWd0 X2RldmljZV9mcmVlKHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYpCit7CisJZnJlZShkZXYtPmRldm5v ZGUpOworCWZyZWUoZGV2LT5zdWJzeXN0ZW0pOworCWZyZWUoZGV2LT5zeXNwYXRoKTsKKwlmcmVl KGRldi0+ZHJtX2NhcmQpOworCWZyZWUoZGV2LT5kcm1fcmVuZGVyKTsKKwlmcmVlKGRldi0+dmVu ZG9yKTsKKwlmcmVlKGRldi0+ZGV2aWNlKTsKKwlnX2hhc2hfdGFibGVfZGVzdHJveShkZXYtPmF0 dHJzX2h0KTsKKwlnX2hhc2hfdGFibGVfZGVzdHJveShkZXYtPnByb3BzX2h0KTsKK30KKworLyoq CisgKiBpZ3RfZGV2aWNlc19zY2FuCisgKiBAZm9yY2U6IGVuZm9yY2Ugc2Nhbm5pbmcgZGV2aWNl cworICoKKyAqIEZ1bmN0aW9uIHNjYW5zIHVkZXYgaW4gc2VhcmNoIG9mIGdwdSBkZXZpY2VzLiBG b3IgZmlyc3QgcnVuIGl0IGNhbiBiZQorICogY2FsbGVkIHdpdGggQGZvcmNlID0gZmFsc2UuIElm IHNvbWV0aGluZyBjaGFuZ2VzIGR1cmluZyB0aGUgdGhlIHRlc3QKKyAqIG9yIHRlc3QgZG9lcyBz b21lIG1vZHVsZSBsb2FkaW5nIChuZXcgZHJtIGRldmljZXMgb2NjdXJzIGR1cmluZyBleGVjdXRp b24pCisgKiBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZ2FpbiB3aXRoIEBmb3JjZSA9IHRydWUg dG8gcmVmcmVzaCBkZXZpY2UgYXJyYXkuCisgKi8KK3ZvaWQgaWd0X2RldmljZXNfc2Nhbihib29s IGZvcmNlKQoreworCWlmIChmb3JjZSAmJiBpZ3RfZGV2cy5kZXZzX3NjYW5uZWQpIHsKKwkJZm9y IChpbnQgaSA9IDA7IGkgPCBpZ3RfZGV2cy5kZXZzLT5sZW47IGkrKykgeworCQkJc3RydWN0IGln dF9kZXZpY2UgKmRldiA9CisJCQkJCWdfcHRyX2FycmF5X2luZGV4KGlndF9kZXZzLmRldnMsIGkp OworCQkJaWd0X2RldmljZV9mcmVlKGRldik7CisJCQlmcmVlKGRldik7CisJCX0KKwkJaWd0X2Rl dnMuZGV2c19zY2FubmVkID0gZmFsc2U7CisJCWdfcHRyX2FycmF5X2ZyZWUoaWd0X2RldnMudmll dywgdHJ1ZSk7CisJCWdfcHRyX2FycmF5X2ZyZWUoaWd0X2RldnMuZGV2cywgdHJ1ZSk7CisJCWln dF9kZXZzLnZpZXcgPSBOVUxMOworCQlpZ3RfZGV2cy5kZXZzID0gTlVMTDsKKwl9CisKKwlpZiAo aWd0X2RldnMuZGV2c19zY2FubmVkKQorCQlyZXR1cm47CisKKwlwb3B1bGF0ZV9ibGFja2xpc3Rf a2V5cygpOyAgICAgIC8va2V5cyBmcm9tIHN5c2F0dHIgd2Ugc2tpcAorCXBvcHVsYXRlX2dwdV9k YXRhKCk7CisKKwlwcmVwYXJlX3NjYW4oKTsKKwlzY2FuX2RybV9kZXZpY2VzKCk7CisKKwlpZ3Rf ZGV2cy5kZXZzX3NjYW5uZWQgPSB0cnVlOworfQorCisjZGVmaW5lIHByX3NpbXBsZShrLCB2KSBw cmludGYoIiAgICAlLTE2czogJXNcbiIsIGssIHYpCisjZGVmaW5lIHByX3NpbXBsZTIoaywgdjEs IHYyKSBwcmludGYoIiAgICAlLTE2czogJXM6JXNcbiIsIGssIHYxLCB2MikKKyNkZWZpbmUgcHJf c2ltcGxlX3Byb3AoZGV2LCBrZXkpIHByX3NpbXBsZShrZXksIGdldF9wcm9wKGRldiwga2V5KSkK KyNkZWZpbmUgcHJfc2ltcGxlX2F0dHIoZGV2LCBrZXkpIHByX3NpbXBsZShrZXksIGdldF9hdHRy KGRldiwga2V5KSkKKworc3RhdGljIHZvaWQgaWd0X2RldnNfcHJpbnRfc2ltcGxlKEdQdHJBcnJh eSAqdmlldykKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2OworCWludCBpOworCisJaWYgKCF2 aWV3KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgdmlldy0+bGVuOyBpKyspIHsKKwkJ ZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgodmlldywgaSk7CisJCXByaW50ZigiJXM6JXNcbiIsIGRl di0+c3Vic3lzdGVtLCBkZXYtPnN5c3BhdGgpOworCQlpZiAoZGV2LT5kcm1fY2FyZCkKKwkJCXBy X3NpbXBsZSgiZHJtIGNhcmQiLCBkZXYtPmRybV9jYXJkKTsKKwkJaWYgKGRldi0+ZHJtX3JlbmRl cikKKwkJCXByX3NpbXBsZSgiZHJtIHJlbmRlciIsIGRldi0+ZHJtX3JlbmRlcik7CisJCWlmIChp c19kcm1fc3Vic3lzdGVtKGRldikpIHsKKwkJCXByX3NpbXBsZTIoInBhcmVudCIsIGRldi0+cGFy ZW50LT5zdWJzeXN0ZW0sCisJCQkJICAgZGV2LT5wYXJlbnQtPnN5c3BhdGgpOworCQl9IGVsc2Ug eworCQkJaWYgKGlzX3BjaV9zdWJzeXN0ZW0oZGV2KSkgeworCQkJCXByX3NpbXBsZSgidmVuZG9y IiwgZGV2LT52ZW5kb3IpOworCQkJCXByX3NpbXBsZSgiZGV2aWNlIiwgZGV2LT5kZXZpY2UpOwor CQkJfQorCQl9CisJCXByaW50ZigiXG4iKTsKKwl9Cit9CisKKyNkZWZpbmUgcHJfZGV0YWlsKGss IHYpIHByaW50ZigiJS0zMnM6ICVzXG4iLCBrLCB2KQorCitzdGF0aWMgdm9pZCBwcmludF9odChH SGFzaFRhYmxlICpodCkKK3sKKwlHTGlzdCAqa2V5cyA9IGdfaGFzaF90YWJsZV9nZXRfa2V5cyho dCk7CisJa2V5cyA9IGdfbGlzdF9zb3J0KGtleXMsIChHQ29tcGFyZUZ1bmMpIHN0cmNtcCk7CisJ d2hpbGUgKGtleXMpIHsKKwkJY2hhciAqayA9IChjaGFyICopIGtleXMtPmRhdGE7CisJCWNoYXIg KnYgPSBnX2hhc2hfdGFibGVfbG9va3VwKGh0LCBrKTsKKwkJcHJfZGV0YWlsKGssIHYpOworCQlr ZXlzID0gZ19saXN0X25leHQoa2V5cyk7CisJfQorCWdfbGlzdF9mcmVlKGtleXMpOworfQorCitz dGF0aWMgdm9pZCBpZ3RfZGV2c19wcmludF9kZXRhaWwoR1B0ckFycmF5ICp2aWV3KQoreworCXN0 cnVjdCBpZ3RfZGV2aWNlICpkZXY7CisJaW50IGk7CisKKwlpZiAoIXZpZXcpCisJCXJldHVybjsK KworCWZvciAoaSA9IDA7IGkgPCB2aWV3LT5sZW47IGkrKykgeworCQlkZXYgPSBnX3B0cl9hcnJh eV9pbmRleCh2aWV3LCBpKTsKKwkJcHJpbnRmKCI9PT09PT09PT09ICVzOiVzID09PT09PT09PT1c biIsCisJCSAgICAgICBkZXYtPnN1YnN5c3RlbSwgZGV2LT5zeXNwYXRoKTsKKwkJaWYgKCFpc19k cm1fc3Vic3lzdGVtKGRldikpIHsKKwkJCXByX2RldGFpbCgiY2FyZCBkZXZpY2UiLCBkZXYtPmRy bV9jYXJkKTsKKwkJCXByX2RldGFpbCgicmVuZGVyIGRldmljZSIsIGRldi0+ZHJtX3JlbmRlcik7 CisJCX0KKworCQlwcmludGYoIlxuW3Byb3BlcnRpZXNdXG4iKTsKKwkJcHJpbnRfaHQoZGV2LT5w cm9wc19odCk7CisJCXByaW50ZigiXG5bYXR0cmlidXRlc11cbiIpOworCQlwcmludF9odChkZXYt PmF0dHJzX2h0KTsKKwkJcHJpbnRmKCJcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBwcmlu dF9mdW5jIHsKKwl2b2lkICgqcHJuKShHUHRyQXJyYXkgKik7Cit9IHByaW50X2Z1bmN0aW9uc1td ID0geworCVtJR1RfUFJJTlRfU0lNUExFXSA9IHsgLnBybiA9IGlndF9kZXZzX3ByaW50X3NpbXBs ZSB9LAorCVtJR1RfUFJJTlRfREVUQUlMXSA9IHsgLnBybiA9IGlndF9kZXZzX3ByaW50X2RldGFp bCB9LAorfTsKKworLyoqCisgKiBpZ3RfZGV2aWNlc19wcmludAorICogQHByaW50dHlwZTogSUdU X1BSSU5UX1NJTVBMRSBvciBJR1RfUFJJTlRfREVUQUlMCisgKgorICogRnVuY3Rpb24gaXMgdXNl ZCBieSAnbHNncHUnIHRvb2wgdG8gcHJpbnQgZGV2aWNlIGFycmF5IGluIHNpbXBsZSBvciBkZXRh aWxlZAorICogZm9ybS4gVGhpcyBmdW5jdGlvbiBpcyBhZGRlZCBoZXJlIGluc3RlYWQgaW4gJ2xz Z3B1JyB0byBhdm9pZCBleHBvc2luZworICogaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGF0YSBz dHJ1Y3R1cmVzLgorICovCit2b2lkIGlndF9kZXZpY2VzX3ByaW50KGVudW0gaWd0X2RldmljZXNf cHJpbnRfdHlwZSBwcmludHR5cGUpCit7CisJcHJpbnRfZnVuY3Rpb25zW3ByaW50dHlwZV0ucHJu KGlndF9kZXZzLnZpZXcpOworfQorCisvKioKKyAqIGlndF9kZXZpY2VzX3ByaW50X3ZlbmRvcnMK KyAqCisgKiBQcmludCBwY2kgaWQgLT4gdmVuZG9yIG1hcHBpbmdzLiBWZW5kb3IgbmFtZXMgcHJp bnRlZCBieSB0aGlzIGZ1bmN0aW9uCisgKiBjYW4gYmUgdXNlZCBmb3IgZmlsdGVycyBsaWtlIHBj aSB3aGljaCBhbGxvd3MgcGFzc2luZyB2ZW5kb3IgLSBsaWtlCisgKiB2ZW5kb3IgaWQgKDgwODYp IG9yIGFzIGEgc3RyaW5nIChJbnRlbCkuCisgKi8KK3ZvaWQgaWd0X2RldmljZXNfcHJpbnRfdmVu ZG9ycyh2b2lkKQoreworCXN0cnVjdCBuYW1lX3ZhbHVlICpsaXN0ID0gJmdwdV92ZW5kb3JfbGlz dFswXTsKKwlwcmludGYoIlJlY29nbml6ZWQgdmVuZG9yczpcbiIpOworCisJcHJpbnRmKCIlLThz ICUtMTZzXG4iLCAiUENJIElEIiwgInZlbmRvciIpOworCXdoaWxlIChsaXN0LT5uYW1lKSB7CisJ CXN0cnVjdCB2ZW5kb3Jfc3BlYyAqdnMgPSAoc3RydWN0IHZlbmRvcl9zcGVjICopIGxpc3QtPnZh bHVlOworCQlpZiAodnMpCisJCQlwcmludGYoIiUtOHMgJS0xNnNcbiIsIGxpc3QtPm5hbWUsIHZz LT52ZW5kb3IpOworCQlsaXN0Kys7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisj ZGVmaW5lIEZJTFRFUl9TUEVDX05BTUVfTEVOIDMyCisjZGVmaW5lIEZJTFRFUl9TUEVDX0RBVEFf TEVOIDI1Ngorc3RydWN0IGZpbHRlcl9zcGVjIHsKKwljaGFyIG5hbWVbRklMVEVSX1NQRUNfTkFN RV9MRU5dOworCWNoYXIgZGF0YVtGSUxURVJfU1BFQ19EQVRBX0xFTl07Cit9OworCitzdHJ1Y3Qg ZmlsdGVyX2Z1bmMgeworCUdQdHJBcnJheSAqKCpmaWx0ZXJfZnVuY3Rpb24pKHN0cnVjdCBmaWx0 ZXJfc3BlYyAqZnNwZWMsCisJCQkJICAgICAgc3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYyk7CisJ Y29uc3QgY2hhciAqaGVscDsKKwljb25zdCBjaGFyICpkZXRhaWw7CisKKwljb25zdCBjaGFyICpw cm9wZXJ0eTsKKwljb25zdCBjaGFyICp2YWx1ZTsKK307CisKK3N0cnVjdCBmaWx0ZXJfZGF0YSB7 CisJY2hhciAqdmVuZG9yOworCWNoYXIgKmRldmljZTsKKwljaGFyICpjYXJkOworCWNoYXIgKmRy bTsKK307CisKK3N0YXRpYyBHSGFzaFRhYmxlICpzcGxpdF9maWx0ZXJfZGF0YShjb25zdCBjaGFy ICpkYXRhKQoreworCUdIYXNoVGFibGUgKmh0ID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3Ry X2hhc2gsIGdfc3RyX2VxdWFsLAorCQkJCQkgICAgICAgZnJlZSwgZnJlZSk7CisJZ2NoYXIgKipz OworCWdjaGFyICoqc3RydiA9IGdfc3Ryc3BsaXQoZGF0YSwgIiwiLCAtMSk7CisKKwlzID0gc3Ry djsKKwl3aGlsZSAoKnMpIHsKKwkJY2hhciAqaywgKnY7CisJCXYgPSBzdHJjaHIoKnMsICc9Jyk7 CisJCWlmICghdikgeworCQkJcysrOworCQkJY29udGludWU7CisJCX0KKwkJayA9IHN0cm5kdXAo KnMsIHYgLSAoKnMpKTsKKwkJdiA9IHN0cmR1cCh2ICsgMSk7CisJCWdfaGFzaF90YWJsZV9pbnNl cnQoaHQsIGssIHYpOworCQlzKys7CisJfQorCWdfc3RyZnJlZXYoc3Rydik7CisKKwlyZXR1cm4g aHQ7Cit9CisKK3N0YXRpYyBib29sIGdldF9maWx0ZXJfc3BlYyhjb25zdCBjaGFyICpmaWx0ZXIs IHN0cnVjdCBmaWx0ZXJfc3BlYyAqc3BlYykKK3sKKwlpZiAoIWZpbHRlcikKKwkJcmV0dXJuIGZh bHNlOworCisJaWYgKHNzY2FuZihmaWx0ZXIsICIlMzFbXjpdOiUyNTVzIiwgc3BlYy0+bmFtZSwg c3BlYy0+ZGF0YSkgPj0gMSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisK K3N0YXRpYyBib29sIGlzX3ZlbmRvcl9tYXRjaGVkKHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYsIGNv bnN0IGNoYXIgKnZlbmRvcikKK3sKKwljb25zdCBjaGFyICp2ZW5kb3JfaWQ7CisKKwlpZiAoIWRl di0+dmVuZG9yIHx8ICF2ZW5kb3IpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEZpcnN0IHdlIGNv bXBhcmUgdmVuZG9yIGlkLCBsaWtlIDgwODYgKi8KKwlpZiAoIXN0cmNhc2VjbXAoZGV2LT52ZW5k b3IsIHZlbmRvcikpCisJCXJldHVybiB0cnVlOworCisJLyogTGlrZWx5IHdlIGhhdmUgdmVuZG9y IHN0cmluZyBpbnN0ZWFkIG9mIGlkICovCisJdmVuZG9yX2lkID0gZ2V0X3BjaV92ZW5kb3JfaWRf YnlfbmFtZSh2ZW5kb3IpOworCWlmICghdmVuZG9yX2lkKQorCQlyZXR1cm4gZmFsc2U7CisKKwly ZXR1cm4gIXN0cmNhc2VjbXAoZGV2LT52ZW5kb3IsIHZlbmRvcl9pZCk7Cit9CisKKy8qIEZpbHRl ciB3aGljaCBtYXRjaGVzIHN1YnN5c3RlbTovc3lzLy4uLiBwYXRoLgorICogVXNlZCBhcyBmaXJz dCBmaWx0ZXIgaW4gY2hhaW4uCisgKi8KK3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl9zeXMoc3Ry dWN0IGZpbHRlcl9zcGVjICpmc3BlYywKKwkJCSAgICAgc3RydWN0IGZpbHRlcl9mdW5jICpmZnVu YykKK3sKKwkodm9pZCkgZmZ1bmM7CisKKwlEQkcoImZpbHRlciBzeXNcbiIpOworCWlmICghc3Ry bGVuKGZzcGVjLT5kYXRhKSkKKwkJcmV0dXJuIGlndF9kZXZzLnZpZXc7CisKKwlmb3IgKGludCBp ID0gMDsgaSA8IGlndF9kZXZzLmRldnMtPmxlbjsgaSsrKSB7CisJCXN0cnVjdCBpZ3RfZGV2aWNl ICpkZXYgPSBnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2cy5kZXZzLCBpKTsKKworCQlpZiAoc3Ry ZXF1YWwoZGV2LT5zdWJzeXN0ZW0sIGZzcGVjLT5uYW1lKSAmJgorCQkJc3RyZXF1YWwoZGV2LT5z eXNwYXRoLCBmc3BlYy0+ZGF0YSkpIHsKKwkJCWdfcHRyX2FycmF5X2FkZChpZ3RfZGV2cy52aWV3 LCBkZXYpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlEQkcoIkZpbHRlciBzeXMgdmlldyBzaXpl OiAlZFxuIiwgaWd0X2RldnMudmlldy0+bGVuKTsKKworCXJldHVybiBpZ3RfZGV2cy52aWV3Owor fQorCisvKiBGaW5kIGRybSBkZXZpY2UgdXNpbmcgZGlyZWN0IHBhdGggdG8gL2Rldi9kcmkvLgor ICogSXQgZXh0ZW5kcyBmaWx0ZXJfc3lzIHRvIGFsbG93IHVzaW5nIGRybTovZGV2L2RyaS9jYXJk WCBhbmQKKyAqIGRybTovZGV2L2RyaS9yZW5kZXJEWCBmaWx0ZXIgc3ludGF4LgorICovCitzdGF0 aWMgR1B0ckFycmF5ICpmaWx0ZXJfZHJtKHN0cnVjdCBmaWx0ZXJfc3BlYyAqZnNwZWMsCisJCQkg ICAgIHN0cnVjdCBmaWx0ZXJfZnVuYyAqZmZ1bmMpCit7CisJKHZvaWQpIGZmdW5jOworCisJREJH KCJmaWx0ZXIgZHJtXG4iKTsKKwlpZiAoIXN0cmxlbihmc3BlYy0+ZGF0YSkpCisJCXJldHVybiBp Z3RfZGV2cy52aWV3OworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBpZ3RfZGV2cy5kZXZzLT5sZW47 IGkrKykgeworCQlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgoaWd0 X2RldnMuZGV2cywgaSk7CisJCWlmICghaXNfZHJtX3N1YnN5c3RlbShkZXYpKQorCQkJY29udGlu dWU7CisKKwkJaWYgKHN0cmVxdWFsKGRldi0+c3lzcGF0aCwgZnNwZWMtPmRhdGEpIHx8CisJCQlz dHJlcXVhbChkZXYtPmRybV9jYXJkLCBmc3BlYy0+ZGF0YSkgfHwKKwkJCXN0cmVxdWFsKGRldi0+ ZHJtX3JlbmRlciwgZnNwZWMtPmRhdGEpKSB7CisJCQlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMu dmlldywgZGV2KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJREJHKCJGaWx0ZXIgZHJtIHZpZXcg c2l6ZTogJWRcbiIsIGlndF9kZXZzLnZpZXctPmxlbik7CisKKwlyZXR1cm4gaWd0X2RldnMudmll dzsKK30KKworLyogRmluZCBhcHByb3ByaWF0ZSBwY2kgZGV2aWNlIG1hdGNoaW5nIHZlbmRvci9k ZXZpY2UvY2FyZCBmaWx0ZXIgYXJndW1lbnRzCisqLworc3RhdGljIEdQdHJBcnJheSAqZmlsdGVy X3BjaShzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAorCQkJICAgICBzdHJ1Y3QgZmlsdGVyX2Z1 bmMgKmZmdW5jKQoreworCUdIYXNoVGFibGUgKmh0OworCXN0cnVjdCBmaWx0ZXJfZGF0YSBmZGF0 YTsKKwlpbnQgY2FyZCA9IC0xOworCSh2b2lkKSBmZnVuYzsKKworCURCRygiZmlsdGVyIHBjaVxu Iik7CisKKwlodCA9IHNwbGl0X2ZpbHRlcl9kYXRhKGZzcGVjLT5kYXRhKTsKKwlmZGF0YS52ZW5k b3IgPSBnX2hhc2hfdGFibGVfbG9va3VwKGh0LCAidmVuZG9yIik7CisJZmRhdGEuZGV2aWNlID0g Z19oYXNoX3RhYmxlX2xvb2t1cChodCwgImRldmljZSIpOworCWZkYXRhLmNhcmQgPSBnX2hhc2hf dGFibGVfbG9va3VwKGh0LCAiY2FyZCIpOworCisJaWYgKGZkYXRhLmNhcmQpIHsKKwkJc3NjYW5m KGZkYXRhLmNhcmQsICIlZCIsICZjYXJkKTsKKwkJaWYgKGNhcmQgPCAwKSB7CisJCQlnX2hhc2hf dGFibGVfZGVzdHJveShodCk7CisJCQlyZXR1cm4gaWd0X2RldnMudmlldzsKKwkJfQorCX0gZWxz ZSB7CisJCWNhcmQgPSAwOworCX0KKworCWZvciAoaW50IGkgPSAwOyBpIDwgaWd0X2RldnMuZGV2 cy0+bGVuOyBpKyspIHsKKwkJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdfcHRyX2FycmF5X2lu ZGV4KGlndF9kZXZzLmRldnMsIGkpOworCisJCWlmICghaXNfcGNpX3N1YnN5c3RlbShkZXYpKQor CQkJY29udGludWU7CisKKwkJLyogU2tpcCBpZiAndmVuZG9yJyBkb2Vzbid0IG1hdGNoIChoZXgg b3IgbmFtZSkgKi8KKwkJaWYgKGZkYXRhLnZlbmRvciAmJiAhaXNfdmVuZG9yX21hdGNoZWQoZGV2 LCBmZGF0YS52ZW5kb3IpKQorCQkJY29udGludWU7CisKKwkJLyogU2tpcCBpZiAnZGV2aWNlJyBk b2Vzbid0IG1hdGNoICovCisJCWlmIChmZGF0YS5kZXZpY2UgJiYgc3RyY2FzZWNtcChmZGF0YS5k ZXZpY2UsIGRldi0+ZGV2aWNlKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFdlIGdldCBuLXRoIGNh cmQgKi8KKwkJaWYgKCFjYXJkKSB7CisJCQlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMudmlldywg ZGV2KTsKKwkJCWJyZWFrOworCQl9CisJCWNhcmQtLTsKKwl9CisKKwlEQkcoIkZpbHRlciBwY2kg dmlldyBzaXplOiAlZFxuIiwgaWd0X2RldnMudmlldy0+bGVuKTsKKworCWdfaGFzaF90YWJsZV9k ZXN0cm95KGh0KTsKKworCXJldHVybiBpZ3RfZGV2cy52aWV3OworfQorCisvKiBIZWxwZXIgZm9y IGZpbmRpbmcgZmlyc3QgZGV2aWNlIG1hdGNoaW5nIHByb3BlcnR5OnZhbHVlLgorKi8KK3N0YXRp YyBHUHRyQXJyYXkgKmZpbHRlcl9wcm9wZXJ0eShzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAor CQkJCSAgc3RydWN0IGZpbHRlcl9mdW5jICpmZnVuYykKK3sKKwlHSGFzaFRhYmxlICpodDsKKwlz dHJ1Y3QgZmlsdGVyX2RhdGEgZmRhdGE7CisJaW50IGNhcmQgPSAtMTsKKwljb25zdCBjaGFyICpw cm9wZXJ0eSA9IGZmdW5jLT5wcm9wZXJ0eTsKKwljb25zdCBjaGFyICp2YWx1ZSA9IGZmdW5jLT52 YWx1ZTsKKworCWlmICghcHJvcGVydHkgfHwgIXZhbHVlKQorCQlyZXR1cm4gaWd0X2RldnMudmll dzsKKworCURCRygiZmlsdGVyIHByb3BlcnR5L3ZhbHVlIFslcy8lc11cbiIsIHByb3BlcnR5LCB2 YWx1ZSk7CisKKwlodCA9IHNwbGl0X2ZpbHRlcl9kYXRhKGZzcGVjLT5kYXRhKTsKKwlmZGF0YS5j YXJkID0gZ19oYXNoX3RhYmxlX2xvb2t1cChodCwgImNhcmQiKTsKKworCWlmIChmZGF0YS5jYXJk KSB7CisJCXNzY2FuZihmZGF0YS5jYXJkLCAiJWQiLCAmY2FyZCk7CisJCWlmIChjYXJkIDwgMCkg eworCQkJZ19oYXNoX3RhYmxlX2Rlc3Ryb3koaHQpOworCQkJcmV0dXJuIGlndF9kZXZzLnZpZXc7 CisJCX0KKwl9IGVsc2UgeworCQljYXJkID0gMDsKKwl9CisKKwlmb3IgKGludCBpID0gMDsgaSA8 IGlndF9kZXZzLmRldnMtPmxlbjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnByb3BfdmFsdWU7CisJ CXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2cy5kZXZz LCBpKTsKKworCQlwcm9wX3ZhbHVlID0gZ2V0X3Byb3AoZGV2LCBwcm9wZXJ0eSk7CisJCWlmIChw cm9wX3ZhbHVlICYmICFzdHJjbXAocHJvcF92YWx1ZSwgdmFsdWUpKSB7CisJCQlpZiAoIWNhcmQp IHsKKwkJCQlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMudmlldywgZGV2KTsKKwkJCQlicmVhazsK KwkJCX0KKwkJCWNhcmQtLTsKKwkJfQorCX0KKworCURCRygiRmlsdGVyIHZpZXcgc2l6ZTogJWRc biIsIGlndF9kZXZzLnZpZXctPmxlbik7CisKKwlnX2hhc2hfdGFibGVfZGVzdHJveShodCk7CisK KwlyZXR1cm4gaWd0X2RldnMudmlldzsKK30KKworc3RhdGljIEdQdHJBcnJheSAqZmlsdGVyX3Zn ZW0oc3RydWN0IGZpbHRlcl9zcGVjICpmc3BlYywKKwkJCSAgICAgIHN0cnVjdCBmaWx0ZXJfZnVu YyAqZmZ1bmMpCit7CisJR1B0ckFycmF5ICp2aWV3ID0gZmlsdGVyX3Byb3BlcnR5KGZzcGVjLCBm ZnVuYyk7CisJaWYgKHZpZXcpIHsKKwkJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdfcHRyX2Fy cmF5X2luZGV4KHZpZXcsIDApOworCQlkZXYtPnZzID0gJnZfdmdlbTsKKwl9CisJcmV0dXJuIHZp ZXc7Cit9CisKK3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl92a21zKHN0cnVjdCBmaWx0ZXJfc3Bl YyAqZnNwZWMsCisJCQkgICAgICBzdHJ1Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jKQoreworCXJldHVy biBmaWx0ZXJfcHJvcGVydHkoZnNwZWMsIGZmdW5jKTsKK30KKworc3RhdGljIEdQdHJBcnJheSAq ZmlsdGVyX3ZjNChzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAorCQkJICAgICBzdHJ1Y3QgZmls dGVyX2Z1bmMgKmZmdW5jKQoreworCUdQdHJBcnJheSAqdmlldyA9IGZpbHRlcl9wcm9wZXJ0eShm c3BlYywgZmZ1bmMpOworCWlmICh2aWV3KSB7CisJCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXYgPSBn X3B0cl9hcnJheV9pbmRleCh2aWV3LCAwKTsKKwkJZGV2LT52cyA9ICZ2X3ZjNDsKKwl9CisJcmV0 dXJuIGZpbHRlcl9wcm9wZXJ0eShmc3BlYywgZmZ1bmMpOworfQorCitzdGF0aWMgc3RydWN0IGZp bHRlcl9mdW5jIGZfZHJtID0geyAuZmlsdGVyX2Z1bmN0aW9uID0gZmlsdGVyX2RybSwKKwkJCQkg ICAgLmhlbHAgPSAiZHJtOi9kZXYvZHJpLyogcGF0aCIsCisJCQkJICAgIC5kZXRhaWwgPSAiZmlu ZCBkcm0gZGV2aWNlIGJ5IC9kZXYvZHJpLyogbm9kZVxuIiwKKwkJCQkgIH07CisKK3N0YXRpYyBz dHJ1Y3QgZmlsdGVyX2Z1bmMgZl9wY2kgPSB7IC5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfcGNp LAorCQkJCSAgICAuaGVscCA9ICJwY2k6W3ZlbmRvcj0lMDR4L25hbWVdWyxkZXZpY2U9JTA0eF1b LGNhcmQ9JWRdIiwKKwkJCQkgICAgLmRldGFpbCA9ICJ2ZW5kb3IgaXMgaGV4IG51bWJlciBvciB2 ZW5kb3IgbmFtZVxuIiwKKwkJCQkgIH07CisKK3N0YXRpYyBzdHJ1Y3QgZmlsdGVyX2Z1bmMgZl92 Z2VtID0geyAuZmlsdGVyX2Z1bmN0aW9uID0gZmlsdGVyX3ZnZW0sCisJCQkJICAgICAuaGVscCA9 ICJ2Z2VtOltjYXJkPSVkXSIsCisJCQkJICAgICAuZGV0YWlsID0gImNhcmQgaXMgbi10aCB2Z2Vt IGNhcmQgbnVtYmVyXG4iLAorCQkJCSAgICAgLnByb3BlcnR5ID0gIk1PREFMSUFTIiwKKwkJCQkg ICAgIC52YWx1ZSA9ICJwbGF0Zm9ybTp2Z2VtIiwKKwkJCQkgICB9OworCitzdGF0aWMgc3RydWN0 IGZpbHRlcl9mdW5jIGZfdmttcyA9IHsgLmZpbHRlcl9mdW5jdGlvbiA9IGZpbHRlcl92a21zLAor CQkJCSAgICAgLmhlbHAgPSAidmttczpbY2FyZD0lZF0iLAorCQkJCSAgICAgLmRldGFpbCA9ICJj YXJkIGlzIG4tdGggdmttcyBjYXJkIG51bWJlclxuIiwKKwkJCQkgICAgIC5wcm9wZXJ0eSA9ICJN T0RBTElBUyIsCisJCQkJICAgICAudmFsdWUgPSAicGxhdGZvcm06dmttcyIsCisJCQkJICAgfTsK Kworc3RhdGljIHN0cnVjdCBmaWx0ZXJfZnVuYyBmX3ZjNCA9IHsgLmZpbHRlcl9mdW5jdGlvbiA9 IGZpbHRlcl92YzQsCisJCQkJICAgIC5oZWxwID0gInZjNDpbY2FyZD0lZF0iLAorCQkJCSAgICAu ZGV0YWlsID0gImNhcmQgaXMgbi10aCB2YzQgY2FyZCBudW1iZXJcbiIsCisJCQkJICAgIC5wcm9w ZXJ0eSA9ICJPRl9DT01QQVRJQkxFXzAiLAorCQkJCSAgICAudmFsdWUgPSAiYnJjbSxiY20yODM1 LXZjNCIsCisJCQkJICB9OworCitzdHJ1Y3QgbmFtZV92YWx1ZSBmaWx0ZXJfZGVmaW5pdGlvbl9s aXN0W10gPSB7CisJeyAiZHJtIiwgICAgIChncG9pbnRlcikgJmZfZHJtIH0sCisJeyAicGNpIiwg ICAgIChncG9pbnRlcikgJmZfcGNpIH0sCisJeyAidmdlbSIsICAgIChncG9pbnRlcikgJmZfdmdl bSB9LAorCXsgInZrbXMiLCAgICAoZ3BvaW50ZXIpICZmX3ZrbXMgfSwKKwl7ICJ2YzQiLCAgICAg KGdwb2ludGVyKSAmZl92YzQgfSwKKwl7IE5VTEwsIH0sCit9OworCisvKioKKyAqIEBpZ3RfZGV2 aWNlX3ByaW50X2ZpbHRlcl90eXBlcworICoKKyAqIFByaW50IGFsbCBmaWx0ZXJzIHN5bnRheCBm b3IgZGV2aWNlIHNlbGVjdGlvbi4KKyAqLwordm9pZCBpZ3RfZGV2aWNlX3ByaW50X2ZpbHRlcl90 eXBlcyh2b2lkKQoreworCXN0cnVjdCBuYW1lX3ZhbHVlICpsaXN0ID0gJmZpbHRlcl9kZWZpbml0 aW9uX2xpc3RbMF07CisJcHJpbnRmKCJGaWx0ZXIgdHlwZXM6XG4tLS1cbiIpOworCXByaW50Zigi JS0xMnMgICVzXG4tLS1cbiIsICJmaWx0ZXIiLCAic3ludGF4Iik7CisKKwlwcmludGYoIiUtMTJz ICAlc1xuIiwgIiIsICJkaXJlY3Qgc3Vic3lzdGVtOi9zeXMvLi4uIHBhdGggc2VsZWN0aW9uXG4i KTsKKwlwcmludGYoIiUtMTJzICAlc1xuIiwgIiIsCisJICAgICAgICJleDogZHJtOi9zeXMvZGV2 aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMC9kcm0vY2FyZDAiKTsKKwlwcmludGYoIiUtMTJz ICAlc1xuIiwgIiIsCisJICAgICAgICIgICAgcGNpOi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAw MDA6MDA6MDIuMCIpOworCXByaW50ZigiJS0xMnMgICVzXG4iLCAiIiwKKwkgICAgICAgIiAgICBw bGF0Zm9ybTovc3lzL2RldmljZXMvcGxhdGZvcm0vdmdlbVxuIik7CisKKwl3aGlsZSAobGlzdC0+ bmFtZSkgeworCQlzdHJ1Y3QgZmlsdGVyX2Z1bmMgKnYgPSAoc3RydWN0IGZpbHRlcl9mdW5jICop IGxpc3QtPnZhbHVlOworCQlwcmludGYoIiUtMTJzICAlc1xuIiwgbGlzdC0+bmFtZSwgdi0+aGVs cCk7CisJCXByaW50ZigiJS0xMnMgICVzXG4iLCAiIiwgdi0+ZGV0YWlsKTsKKwkJbGlzdCsrOwor CX0KK30KKworc3RhdGljIEdQdHJBcnJheSAqZGV2aWNlX2ZpbHRlcnMgPSBOVUxMOworCisjZGVm aW5lIERFVklDRV9GSUxURVJfQ0hFQ0tfQUxMT0MoKSBcCisJZG8geyBcCisJCWlmICghZGV2aWNl X2ZpbHRlcnMpIFwKKwkJCWRldmljZV9maWx0ZXJzID0gZ19wdHJfYXJyYXlfbmV3X2Z1bGwoMiwg ZnJlZSk7IFwKKwkJaWd0X2Fzc2VydChkZXZpY2VfZmlsdGVycyk7IFwKKwl9IHdoaWxlKDApCisK Ky8qKgorICogaWd0X2RldmljZV9maWx0ZXJfY291bnQKKyAqCisgKiBSZXR1cm5zIG51bWJlciBv ZiBmaWx0ZXJzIGNvbGxlY3RlZCBpbiB0aGUgZmlsdGVyIGFycmF5LgorICovCitpbnQgaWd0X2Rl dmljZV9maWx0ZXJfY291bnQodm9pZCkKK3sKKwlERVZJQ0VfRklMVEVSX0NIRUNLX0FMTE9DKCk7 CisKKwlyZXR1cm4gZGV2aWNlX2ZpbHRlcnMtPmxlbjsKK30KKworLyoqCisgKiBpZ3RfZGV2aWNl X2ZpbHRlcl9hZGQKKyAqIEBmaWx0ZXI6IGZpbHRlciB0byBiZSBzdG9yZWQgaW4gZmlsdGVyIGFy cmF5CisgKgorICogRnVuY3Rpb24gYWxsb3dzIHBhc3Npbmcgc2luZ2xlIG9yIG1vcmUgZmlsdGVy cyB3aXRoaW4gb25lIHN0cmluZy4gVGhpcyBpcworICogZm9yIENJIHdoZW4gaXQgY2FuIGV4dHJh Y3QgZmlsdGVyIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGUgKGFuZCBpdCBtdXN0CisgKiBiZSBz aW5nbGUgc3RyaW5nKS4gU28gaWYgQGZpbHRlciBjb250YWlucyBzZW1pY29sb24gJzsnIGl0IHRy ZWF0cworICogZWFjaCBwYXJ0IGFzIHNlcGFyYXRlIGZpbHRlciBhbmQgYWRkcyB0byB0aGUgZmls dGVyIGFycmF5LgorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIGZpbHRlcnMgYWRkZWQgdG8gZmls dGVyIGFycmF5LiBDYW4gYmUgZ3JlYXRlciB0aGFuCisgKiAxIGlmIEBmaWx0ZXIgY29udGFpbnMg bW9yZSB0aGFuIG9uZSBmaWx0ZXIgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbi4KKyAqLworaW50IGln dF9kZXZpY2VfZmlsdGVyX2FkZChjb25zdCBjaGFyICpmaWx0ZXIpCit7CisJZ2NoYXIgKipzdHJ2 LCAqKnM7CisJaW50IGMgPSAwOworCisJREVWSUNFX0ZJTFRFUl9DSEVDS19BTExPQygpOworCisJ c3RydiA9IGdfc3Ryc3BsaXQoZmlsdGVyLCAiOyIsIC0xKTsKKworCXMgPSBzdHJ2OworCXdoaWxl ICgqcykgeworCQlnX3B0cl9hcnJheV9hZGQoZGV2aWNlX2ZpbHRlcnMsIHN0cmR1cCgqcykpOwor CQlzKys7CisJfQorCWdfc3RyZnJlZXYoc3Rydik7CisKKwlyZXR1cm4gYzsKK30KKworLyoqCisg KiBpZ3RfZGV2aWNlX2ZpbHRlcl9nZXQKKyAqIEBudW06IE51bWJlciBvZiBmaWx0ZXIgZnJvbSBm aWx0ZXIgYXJyYXkKKyAqCisgKiBSZXR1cm5zIGZpbHRlciBzdHJpbmcgb3IgTlVMTCBpZiBAbnVt IGlzIG91dCBvZiByYW5nZSBvZiBmaWx0ZXIgYXJyYXkuCisqLworY29uc3QgY2hhciAqaWd0X2Rl dmljZV9maWx0ZXJfZ2V0KGludCBudW0pCit7CisJREVWSUNFX0ZJTFRFUl9DSEVDS19BTExPQygp OworCisJaWYgKG51bSA8IDAgfHwgbnVtID49IGRldmljZV9maWx0ZXJzLT5sZW4pCisJCXJldHVy biBOVUxMOworCisJcmV0dXJuIGdfcHRyX2FycmF5X2luZGV4KGRldmljZV9maWx0ZXJzLCBudW0p OworfQorCitzdGF0aWMgYm9vbCBpZ3RfZGV2aWNlX2ZpbHRlcl9hcHBseShjb25zdCBjaGFyICpm aWx0ZXIpCit7CisJc3RydWN0IGZpbHRlcl9zcGVjIGZzcGVjOworCWJvb2wgcmV0OworCisJaWYg KCFmaWx0ZXIpCisJCXJldHVybiBmYWxzZTsKKworCW1lbXNldCgmZnNwZWMsIDAsIHNpemVvZihm c3BlYykpOworCXJldCA9IGdldF9maWx0ZXJfc3BlYyhmaWx0ZXIsICZmc3BlYyk7CisJaWYgKCFy ZXQpIHsKKwkJaWd0X3dhcm4oIkNhbid0IHNwbGl0IGZpbHRlciBbJXNdXG4iLCBmaWx0ZXIpOwor CQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogQ2xlYW4gdmlldyAqLworCWdfcHRyX2FycmF5X3Jl bW92ZV9yYW5nZShpZ3RfZGV2cy52aWV3LCAwLCBpZ3RfZGV2cy52aWV3LT5sZW4pOworCisJLyog SWYgZnNwZWMuZGF0YSBjb250YWlucyAiL3N5cyIgdXNlIGRpcmVjdCBwYXRoIGluc3RlYWQKKwkg KiBjb250ZXh0dWFsIGZpbHRlciAqLworCWlmICghc3RybmNtcChmc3BlYy5kYXRhLCAiL3N5cyIs IDQpKQorCQlmaWx0ZXJfc3lzKCZmc3BlYywgTlVMTCk7CisJZWxzZSB7CisJCXN0cnVjdCBmaWx0 ZXJfZnVuYyAqZmZ1bmM7CisJCWZmdW5jID0gZ19oYXNoX3RhYmxlX2xvb2t1cChmaWx0ZXJfZGVm aW5pdGlvbl9odCwgZnNwZWMubmFtZSk7CisJCWlmICghZmZ1bmMpIHsKKwkJCWlndF93YXJuKCJO byBmaWx0ZXIgd2l0aCBuYW1lIFslc11cbiIsIGZzcGVjLm5hbWUpOworCQkJcmV0dXJuIGZhbHNl OworCQl9CisJCWZmdW5jLT5maWx0ZXJfZnVuY3Rpb24oJmZzcGVjLCBmZnVuYyk7CisJfQorCisJ cmV0dXJuIHRydWU7Cit9CisKKyNkZWZpbmUgc2FmZV9zdHJuY3B5KGRzdCwgc3JjLCBzaXplKSBc CisJaWYgKChkc3QpICYmIChzcmMpKSBzdHJuY3B5KChkc3QpLCAoc3JjKSwgKHNpemUpKQorCisv KioKKyAqIGlndF9kZXZpY2VfY2FyZF9tYXRjaAorICogQGZpbHRlcjogZmlsdGVyIHN0cmluZwor ICogQGNhcmQ6IHBvaW50ZXIgdG8gaWd0X2RldmljZV9jYXJkIHN0cnVjdAorICoKKyAqIEZ1bmN0 aW9uIGFwcGxpZXMgZmlsdGVyIHRvIG1hdGNoIGRldmljZSBmcm9tIGRldmljZSBhcnJheS4KKyAq CisgKiBSZXR1cm5zOgorICogZmFsc2UgLSBubyBjYXJkIHBvaW50ZXIgd2FzIHBhc3NlZCBvciBj YXJkIHdhc24ndCBtYXRjaGVkLAorICogdHJ1ZSAtIGNhcmQgbWF0Y2hlZCBhbmQgcmV0dXJuZWQu CisgKi8KK2Jvb2wgaWd0X2RldmljZV9jYXJkX21hdGNoKGNvbnN0IGNoYXIgKmZpbHRlciwgc3Ry dWN0IGlndF9kZXZpY2VfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2ID0g TlVMTDsKKworCWlmICghY2FyZCkKKwkJcmV0dXJuIGZhbHNlOworCW1lbXNldChjYXJkLCAwLCBz aXplb2YoKmNhcmQpKTsKKworCWlndF9kZXZpY2VzX3NjYW4oZmFsc2UpOworCisJaWYgKGlndF9k ZXZpY2VfZmlsdGVyX2FwcGx5KGZpbHRlcikgPT0gZmFsc2UpCisJCXJldHVybiBmYWxzZTsKKwor CWlmICghaWd0X2RldnMudmlldy0+bGVuKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBXZSB0YWtl IGZpcnN0IG9uZSBpZiBtb3JlIHRoYW4gb25lIGNhcmQgbWF0Y2hlcyBmaWx0ZXIgKi8KKwlkZXYg PSBnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2cy52aWV3LCAwKTsKKwljYXJkLT5jaGlwc2V0ID0g RFJJVkVSX0FOWTsKKwlpZiAoZGV2LT52cykKKwkJY2FyZC0+Y2hpcHNldCA9IGRldi0+dnMtPmNo aXBzZXQ7CisKKwlzYWZlX3N0cm5jcHkoY2FyZC0+c3Vic3lzdGVtLCBkZXYtPnN1YnN5c3RlbSwg TkFNRV9NQVgpOworCXNhZmVfc3RybmNweShjYXJkLT5jYXJkLCBkZXYtPmRybV9jYXJkLCBOQU1F X01BWCk7CisJc2FmZV9zdHJuY3B5KGNhcmQtPnJlbmRlciwgZGV2LT5kcm1fcmVuZGVyLCBOQU1F X01BWCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZGV2aWNlX3Nj YW4uaCBiL2xpYi9pZ3RfZGV2aWNlX3NjYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMC4uNjJmN2YzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaWd0X2RldmljZV9zY2Fu LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBv cmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl CisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoK KyAqLworCisjaWZuZGVmIF9fSUdUX0RFVklDRV9TQ0FOX0hfXworI2RlZmluZSBfX0lHVF9ERVZJ Q0VfU0NBTl9IX18KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGlndC5oPgorCitl bnVtIGlndF9kZXZpY2VzX3ByaW50X3R5cGUgeworCUlHVF9QUklOVF9TSU1QTEUsCisJSUdUX1BS SU5UX0RFVEFJTCwKK307CisKK3N0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgeworCWludCBjaGlwc2V0 OworCWNoYXIgc3Vic3lzdGVtW05BTUVfTUFYXTsKKwljaGFyIGNhcmRbTkFNRV9NQVhdOworCWNo YXIgcmVuZGVyW05BTUVfTUFYXTsKK307CisKKy8qIFNjYW4gdWRldiBzdWJzeXN0ZW1zLiBEbyBp dCBvbmNlIHVubGVzcyBmb3JjZSBpcyB0cnVlLCB3aGF0IHJlc2NhbnMKKyAqIGRldmljZXMgYWdh aW4gKi8KK3ZvaWQgaWd0X2RldmljZXNfc2Nhbihib29sIGZvcmNlKTsKKwordm9pZCBpZ3RfZGV2 aWNlc19wcmludChlbnVtIGlndF9kZXZpY2VzX3ByaW50X3R5cGUgcHJpbnR0eXBlKTsKK3ZvaWQg aWd0X2RldmljZXNfcHJpbnRfdmVuZG9ycyh2b2lkKTsKK3ZvaWQgaWd0X2RldmljZV9wcmludF9m aWx0ZXJfdHlwZXModm9pZCk7CisKKy8qCisgKiBIYW5kbGUgZGV2aWNlIGZpbHRlciBjb2xsZWN0 aW9uIGFycmF5LgorICogSUdUIGNhbiBzdG9yZS9yZXRyaWV2ZSBmaWx0ZXJzIHBhc3NlZCBieSB1 c2VyIHVzaW5nICctLWRldmljZScgYXJncy4KKyovCisKKy8qIFJldHVybiBudW1iZXIgb2YgZmls dGVycyBjb2xsZWN0ZWQgKi8KK2ludCBpZ3RfZGV2aWNlX2ZpbHRlcl9jb3VudCh2b2lkKTsKKwor LyogQWRkIGZpbHRlcihzKSB0byB0aGUgYXJyYXkuIFJldHVybnMgbnVtYmVyIG9mIGZpbHRlcnMg YWRkZWQgKD4xIGlmCisgKiB1c2VyIHBhc3NlcyBtb3JlIHRoYW4gb25lIGZpbHRlciBzZXBhcmF0 aW5lZCBieSAnOycpICovCitpbnQgaWd0X2RldmljZV9maWx0ZXJfYWRkKGNvbnN0IGNoYXIgKmZp bHRlcik7CisKKy8qIEdldCBuLXRoIGZpbHRlciBzdG9yZWQgaW4gdGhlIGFycmF5IG9yIE5VTEwg Ki8KK2NvbnN0IGNoYXIgKmlndF9kZXZpY2VfZmlsdGVyX2dldChpbnQgbnVtKTsKKworLyogVXNl IGZpbHRlciB0byBtYXRjaCB0aGUgZGV2aWNlIGFuZCBmaWxsIGNhcmQgc3RydWN0dXJlICovCiti b29sIGlndF9kZXZpY2VfY2FyZF9tYXRjaChjb25zdCBjaGFyICpmaWx0ZXIsIHN0cnVjdCBpZ3Rf ZGV2aWNlX2NhcmQgKmNhcmQpOworCisjZW5kaWYgLyogX19JR1RfREVWSUNFX1NDQU5fSF9fICov CmRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQKaW5kZXggMTU3 NjI0ZTcuLjgyNmViYmUzIDEwMDY0NAotLS0gYS9saWIvbWVzb24uYnVpbGQKKysrIGIvbGliL21l c29uLmJ1aWxkCkBAIC0xMCw2ICsxMCw3IEBAIGxpYl9zb3VyY2VzID0gWwogCSdpZ3RfY29sb3Jf ZW5jb2RpbmcuYycsCiAJJ2lndF9kZWJ1Z2ZzLmMnLAogCSdpZ3RfZGV2aWNlLmMnLAorCSdpZ3Rf ZGV2aWNlX3NjYW4uYycsCiAJJ2lndF9hdXguYycsCiAJJ2lndF9ncHVfcG93ZXIuYycsCiAJJ2ln dF9ndC5jJywKZGlmZiAtLWdpdCBhL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMgYi90b29scy9NYWtl ZmlsZS5zb3VyY2VzCmluZGV4IDUwNzA2ZjQxLi4wZTY3YjY1NCAxMDA2NDQKLS0tIGEvdG9vbHMv TWFrZWZpbGUuc291cmNlcworKysgYi90b29scy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0zMyw2ICsz Myw3IEBAIHRvb2xzX3Byb2dfbGlzdHMgPQkJXAogCWludGVsX3dhdGVybWFyawkJXAogCWludGVs X2dlbV9pbmZvCQlcCiAJaW50ZWxfZ3Z0Z190ZXN0ICAgICBcCisJbHNncHUJCQlcCiAJJChOVUxM KQogCiBkaXN0X2Jpbl9TQ1JJUFRTID0gaW50ZWxfZ3B1X2FicnQKZGlmZiAtLWdpdCBhL3Rvb2xz L2xzZ3B1LmMgYi90b29scy9sc2dwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwLi5lNzIzZjBiMgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xzZ3B1LmMKQEAgLTAsMCAr MSwxODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lu Y2x1ZGUgImlndF9kZXZpY2Vfc2Nhbi5oIgorI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgPHN5 cy9pb2N0bC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNs dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworZW51bSB7CisJT1BUX1BSSU5U X0RFVEFJTCAgID0gJ0QnLAorCU9QVF9MSVNUX1ZFTkRPUlMgICA9ICd2JywKKwlPUFRfTElTVF9G SUxURVJTICAgPSAnbCcsCisJT1BUX0RFVklDRSAgICAgICAgID0gJ2QnLAorCU9QVF9IRUxQICAg ICAgICAgICA9ICdoJworfTsKKworYm9vbCBnX3Nob3dfdmVuZG9yczsKK2Jvb2wgZ19saXN0X2Zp bHRlcnM7Citib29sIGdfZGV2aWNlOworYm9vbCBnX2hlbHA7CisKK3N0YXRpYyBjb25zdCBjaGFy ICp1c2FnZV9zdHIgPQorCSJ1c2FnZTogbHNncHUgW29wdGlvbnNdXG5cbiIKKwkiT3B0aW9uczpc biIKKwkiICAtRCwgLS1wcmludC1kZXRhaWxzICAgICAgICAgUHJpbnQgZGV2aWNlcyB3aXRoIGRl dGFpbHNcbiIKKwkiICAtdiwgLS1saXN0LXZlbmRvcnMgICAgICAgICAgTGlzdCByZWNvZ25pemVk IHZlbmRvcnNcbiIKKwkiICAtbCwgLS1saXN0LWZpbHRlci10eXBlcyAgICAgTGlzdCByZWdpc3Rl cmVkIGRldmljZSBmaWx0ZXJzIHR5cGVzXG4iCisJIiAgLWQsIC0tZGV2aWNlIGZpbHRlciAgICAg ICAgIERldmljZSBmaWx0ZXIsIGNhbiBiZSBnaXZlbiBtdWx0aXBsZSB0aW1lc1xuIgorCSIgIC1o LCAtLWhlbHAgICAgICAgICAgICAgICAgICBTaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0 XG4iOworCitzdGF0aWMgdm9pZCB0ZXN0X2RldmljZV9vcGVuKHN0cnVjdCBpZ3RfZGV2aWNlX2Nh cmQgKmNhcmQpCit7CisJaW50IGZkOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm47CisKKwlmZCA9 IGRybV9vcGVuX2NhcmQoY2FyZCk7CisJaWYgKGZkID49IDApIHsKKwkJcHJpbnRmKCJEZXZpY2Ug JXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZFxuIiwgY2FyZC0+Y2FyZCk7CisJCWNsb3NlKGZkKTsKKwl9 IGVsc2UgeworCQlpZiAoc3RybGVuKGNhcmQtPmNhcmQpKQorCQkJcHJpbnRmKCJDYW5ub3Qgb3Bl biBjYXJkICVzIGRldmljZVxuIiwgY2FyZC0+Y2FyZCk7CisJCWVsc2UKKwkJCXByaW50ZigiQ2Fu bm90IG9wZW4gY2FyZCBkZXZpY2UsIGVtcHR5IG5hbWVcbiIpOworCX0KKworCWZkID0gZHJtX29w ZW5fcmVuZGVyKGNhcmQpOworCWlmIChmZCA+PSAwKSB7CisJCXByaW50ZigiRGV2aWNlICVzIHN1 Y2Nlc3NmdWxseSBvcGVuZWRcbiIsIGNhcmQtPnJlbmRlcik7CisJCWNsb3NlKGZkKTsKKwl9IGVs c2UgeworCQlpZiAoc3RybGVuKGNhcmQtPnJlbmRlcikpCisJCQlwcmludGYoIkNhbm5vdCBvcGVu IHJlbmRlciAlcyBkZXZpY2VcbiIsIGNhcmQtPnJlbmRlcik7CisJCWVsc2UKKwkJCXByaW50Zigi Q2Fubm90IG9wZW4gcmVuZGVyIGRldmljZSwgZW1wdHkgbmFtZVxuIik7CisJfQorfQorCitzdGF0 aWMgdm9pZCBwcmludF9jYXJkKHN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgKmNhcmQpCit7CisJaWYg KCFjYXJkKQorCQlyZXR1cm47CisKKwlwcmludGYoInN1YnN5c3RlbSAgIDogJXNcbiIsIGNhcmQt PnN1YnN5c3RlbSk7CisJcHJpbnRmKCJjaGlwc2V0ICAgICA6ICV4XG4iLCBjYXJkLT5jaGlwc2V0 KTsKKwlwcmludGYoImRybSBjYXJkICAgIDogJXNcbiIsIGNhcmQtPmNhcmQpOworCXByaW50Zigi ZHJtIHJlbmRlciAgOiAlc1xuIiwgY2FyZC0+cmVuZGVyKTsKK30KKworaW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNb XSA9IHsKKwkJeyJwcmludC1kZXRhaWwiLCAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBP UFRfUFJJTlRfREVUQUlMfSwKKwkJeyJsaXN0LXZlbmRvcnMiLCAgICAgIG5vX2FyZ3VtZW50LCAg ICAgICBOVUxMLCBPUFRfTElTVF9WRU5ET1JTfSwKKwkJeyJsaXN0LWZpbHRlci10eXBlcyIsIG5v X2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRfTElTVF9GSUxURVJTfSwKKwkJeyJkZXZpY2UiLCAg ICAgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRfREVWSUNFfSwKKwkJeyJoZWxw IiwgICAgICAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRfSEVMUH0sCisJCXsw LCAwLCAwLCAwfQorCX07CisJaW50IGMsIGluZGV4ID0gMDsKKwljb25zdCBjaGFyICplbnY7CisJ ZW51bSBpZ3RfZGV2aWNlc19wcmludF90eXBlIHByaW50dHlwZSA9IElHVF9QUklOVF9TSU1QTEU7 CisKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiRHZsZDpoIiwKKwkJCQls b25nX29wdGlvbnMsICZpbmRleCkpICE9IC0xKSB7CisJCXN3aXRjaChjKSB7CisKKwkJY2FzZSBP UFRfUFJJTlRfREVUQUlMOgorCQkJcHJpbnR0eXBlID0gSUdUX1BSSU5UX0RFVEFJTDsKKwkJCWJy ZWFrOworCQljYXNlIE9QVF9MSVNUX1ZFTkRPUlM6CisJCQlnX3Nob3dfdmVuZG9ycyA9IHRydWU7 CisJCQlicmVhazsKKwkJY2FzZSBPUFRfTElTVF9GSUxURVJTOgorCQkJZ19saXN0X2ZpbHRlcnMg PSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX0RFVklDRToKKwkJCWdfZGV2aWNlID0gdHJ1 ZTsKKwkJCWlndF9kZXZpY2VfZmlsdGVyX2FkZChvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2Ug T1BUX0hFTFA6CisJCQlnX2hlbHAgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAo Z19oZWxwKSB7CisJCXByaW50ZigiJXNcbiIsIHVzYWdlX3N0cik7CisJCWV4aXQoMCk7CisJfQor CisJZW52ID0gZ2V0ZW52KCJJR1RfREVWSUNFIik7CisJaWYgKGVudikgeworCQlpZ3RfZGV2aWNl X2ZpbHRlcl9hZGQoZW52KTsKKwkJZ19kZXZpY2UgPSB0cnVlOworCX0KKworCWlmIChnX3Nob3df dmVuZG9ycykgeworCQlpZ3RfZGV2aWNlc19wcmludF92ZW5kb3JzKCk7CisJCXJldHVybiAwOwor CX0KKworCWlmIChnX2xpc3RfZmlsdGVycykgeworCQlpZ3RfZGV2aWNlX3ByaW50X2ZpbHRlcl90 eXBlcygpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZ3RfZGV2aWNlc19zY2FuKGZhbHNlKTsKKwor CWlmIChnX2RldmljZSkgeworCQlpbnQgbiA9IGlndF9kZXZpY2VfZmlsdGVyX2NvdW50KCk7CisJ CXByaW50ZigiPT09IERldmljZSBmaWx0ZXIgbGlzdCA9PT1cbiIpOworCQlmb3IgKGludCBpID0g MDsgaSA8IG47IGkrKykgeworCQkJcHJpbnRmKCJbJTJkXTogJXNcbiIsIGksCisJCQkgICAgICAg aWd0X2RldmljZV9maWx0ZXJfZ2V0KGkpKTsKKwkJfQorCQlwcmludGYoIlxuIik7CisKKwkJcHJp bnRmKCI9PT0gVGVzdGluZyBkZXZpY2Ugb3BlbiA9PT1cbiIpOworCQlmb3IgKGludCBpID0gMDsg aSA8IG47IGkrKykgeworCQkJc3RydWN0IGlndF9kZXZpY2VfY2FyZCBjYXJkOworCQkJY29uc3Qg Y2hhciAqZmlsdGVyID0gaWd0X2RldmljZV9maWx0ZXJfZ2V0KGkpOworCisJCQlpZiAoIWlndF9k ZXZpY2VfY2FyZF9tYXRjaChmaWx0ZXIsICZjYXJkKSkKKwkJCQljb250aW51ZTsKKwkJCXByaW50 X2NhcmQoJmNhcmQpOworCQkJdGVzdF9kZXZpY2Vfb3BlbigmY2FyZCk7CisJCQlwcmludGYoIi0t LVxuIik7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwlpZ3RfZGV2aWNlc19wcmludChwcmlu dHR5cGUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9tZXNvbi5idWlsZCBi L3Rvb2xzL21lc29uLmJ1aWxkCmluZGV4IDZlNzJiMjYzLi45YjNhMmE2OSAxMDA2NDQKLS0tIGEv dG9vbHMvbWVzb24uYnVpbGQKKysrIGIvdG9vbHMvbWVzb24uYnVpbGQKQEAgLTM2LDYgKzM2LDcg QEAgdG9vbHNfcHJvZ3MgPSBbCiAJJ2ludGVsX2dlbV9pbmZvJywKIAknaW50ZWxfZ3Z0Z190ZXN0 JywKIAknZHBjZF9yZWcnLAorCSdsc2dwdScsCiBdCiB0b29sX2RlcHMgPSBpZ3RfZGVwcwogCi0t IAoyLjIxLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==