From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E78E606A32E for ; Wed, 4 Nov 2026 12:43:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=t7DWcuZ4; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=iQi4w8ku DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Date:References: In-Reply-To:Cc:To:Subject:From:Message-ID:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Unsubscribe-Post:List-Owner; bh=7kuQEI0vBC8g17srzus82TBa9mrfbI/DBsdOLdQfoQg=; b=t7DWcuZ4eka9nWtHiTWNjMVThi oLcHfYPFHfDuY8luPj47mZ8ptcC/qQLtdoLaFAdaOKjZRAqkoeaZ1lV450HVoy1lCYsI190JuJdsp 1oLkHSuUcuIZXGVHvxtxoJLdWURIMMYTH09lrH48uTwoDrFnf3VqvFDtnRdiVbkJpHH5rTca/wu0K AgwbQQlgWuqRKGm2PnMb07xowya8HcOk7UP/Zf1TCEy9puadzqQhRWwge2tqUp46llC7pDLG35wlF eFhpNl+EK0L0K2K6ZBkQYjHR4Plxyccd528Yzgo2oBjU7DlevJ0RLP0TfMjGSIUb2BtVdRwmXWNRg xxqJ+xpg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xOaKz-00000005MMc-3I09; Wed, 04 Nov 2026 12:43:33 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xOaKw-00000005MM3-0gN7 for linux-i3c@lists.infradead.org; Wed, 04 Nov 2026 12:43:32 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 2CBF660F3C; Wed, 4 Nov 2026 12:43:29 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8D3721F000C1; Wed, 4 Nov 2026 12:43:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793796208; bh=MqFeY4ofqsmBTQsOorBAW31xUhyXxQdHTugXt57wPyE=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=iQi4w8kuBfiH2E+eXwX8TigT9mLcFadHb6A+fA+KXZmohX/hMwDMXBJjYaQMPEFEI daE/jEyqRClSXg9Fs0yRdVKIsBufIa9nwrvIvItUH9jUyCuVWW2ZaPKkuRANCbq1Ey aqPpL47VwtISTwaCB4tcbiOTPxaPJQOye5dNlABpMZ0rux2a25ZmuqYXwB2yBy3Bc5 zFOJOmf3O+SiFtNIiVbN97MOuQxmn2nj530n1Eoj6mfaIEz/XLhW1rJt5KKMeuAn8q VKU1ytz5dkuuP99Ke3A0wPLmtRyeFh3D1NXJQ8FBQZZZ6nyafKABqzofOAxvmuX2mC O9H6EfhT1ZcxQ== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v7 2/3] i3c: master: Add Qualcomm I3C controller driver To: "Mukesh Kumar Savaliya" , linux-i3c@lists.infradead.org, devicetree@vger.kernel.org Cc: robh@kernel.org, conor+dt@kernel.org, Frank.Li@kernel.org, "Alexandre Belloni" In-Reply-To: <20261104122155.3789346-3-mukesh.savaliya@oss.qualcomm.com> References: <20261104122155.3789346-1-mukesh.savaliya@oss.qualcomm.com> <20261104122155.3789346-3-mukesh.savaliya@oss.qualcomm.com> Date: Wed, 04 Nov 2026 12:43:28 +0000 X-BeenThere: linux-i3c@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev X-Archived-By: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-i3c" X-Spam-Status: No, score=-8.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MTIgcG90ZW50aWFsIGlzc3VlKHMpIHRvIGNvbnNpZGVyOgotIFtDcml0aWNhbF0gaTNjOiBtYXN0 ZXI6IHVuc2FmZSBETUEgbWFwcGluZyBvZiBpMmNfbXNnIGluIGdlbmlfaTNjX21hc3Rlcl9pMmNf eGZlcnMoKQotIFtIaWdoXSBpM2M6IG1hc3RlcjogY2xvY2sgbG9va3VwIGZhaWx1cmUgaW4gZ2Vu aV9pM2NfY2xrX21hcF9pZHgoKQotIFtIaWdoXSBpM2M6IG1hc3RlcjogNi1iaXQgYWRkcmVzcyB0 cnVuY2F0aW9uIGFuZCBEQUEgYnVncyBpbiBnZW5pX2kzY19wZXJmb3JtX2RhYSgpCi0gW0hpZ2hd IGkzYzogbWFzdGVyOiB1c2VfN2UgaXMgbmV2ZXIgc2V0IGluIGdlbmlfaTNjX21hc3Rlcl9wcml2 X3hmZXJzKCkKLSBbSGlnaF0gaTNjOiBtYXN0ZXI6IE5BQ0sgY2xvYmJlcmluZyBhbmQgRE1BIHJl c2V0IGJ1Z3MgaW4gZ2VuaV9pM2NfaXJxKCkKLSBbSGlnaF0gaTNjOiBxY29tLWdlbmk6IG1pc3Np bmcgcmVpbml0X2NvbXBsZXRpb24oKSBhbmQgVFhfUkVTRVRfRE9ORSBpbiBETUEgeGZlcgotIFtI aWdoXSBpM2M6IHFjb20tZ2VuaTogYnJva2VuIHNob3J0IHJlYWQgYW5kIFJYX0xBU1QgaGFuZGxp bmcgaW4gZ2VuaV9pM2NfaXJxKCkKLSBbSGlnaF0gaTNjOiBxY29tLWdlbmk6IHVuY2xvY2tlZCBy ZWdpc3RlciBhY2Nlc3MgYW5kIGRpc2FibGVkIElSUSB3aGVuICFDT05GSUdfUE0KLSBbSGlnaF0g aTNjOiBxY29tLWdlbmk6IHVubG9ja2VkIGNvbW1hbmQgc3RhcnQgYW5kIFRYIHdhdGVybWFyayBJ UlEgc3Rvcm0gcmFjZQotIFtNZWRpdW1dIGkzYzogbWFzdGVyOiBkb3VibGUgZ2VuaV9zZV9yZXNv dXJjZXNfb2ZmKCkgb24gZ2VuaV9pM2NfaHdfaW5pdCgpIGVycm9yCi0gW01lZGl1bV0gaTNjOiBx Y29tLWdlbmk6IHVuY2hlY2tlZCBnZW5pX3NlX3Jlc291cmNlc19vZmYoKSBpbiBydW50aW1lIHN1 c3BlbmQKLSBbTG93XSBpM2M6IHFjb20tZ2VuaTogdW51c2VkIHZhcmlhYmxlIG1fc3RhdF9tYXNr IGluIGdlbmlfaTNjX2lycSgpCi0tCgpjb21taXQgMTQyZGJkNWI5ZTZlZGRhNDJlZDM0MDdlZjk1 YmVmYThkN2E0NzNiNApBdXRob3I6IE11a2VzaCBLdW1hciBTYXZhbGl5YSA8bXVrZXNoLnNhdmFs aXlhQG9zcy5xdWFsY29tbS5jb20+CgppM2M6IG1hc3RlcjogQWRkIFF1YWxjb21tIEkzQyBjb250 cm9sbGVyIGRyaXZlcgoKVGhpcyBjb21taXQgYWRkcyB0aGUgUXVhbGNvbW0gUVVQdjMgR0VOSS1i YXNlZCBJM0MgbWFzdGVyIGNvbnRyb2xsZXIgZHJpdmVyCnN1cHBvcnRpbmcgU0RSIG1vZGUsIEND QyBjb21tYW5kcywgZHluYW1pYyBhZGRyZXNzIGFzc2lnbm1lbnQsIGFuZCBJMkMKdHJhbnNmZXJz LgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvbWFzdGVyL2kzYy1xY29tLWdlbmkuYyBiL2Ry aXZlcnMvaTNjL21hc3Rlci9pM2MtcWNvbS1nZW5pLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAwMDAuLjJmZWU3N2U2ODFlMjYKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9pM2MvbWFzdGVyL2kzYy1xY29tLWdlbmkuYwo+IEBAIC0wLDAgKzEsMTEzMyBA QAoKWyAuLi4gXQoKPiArI2RlZmluZSBJM0NfQVVUT19TVVNQRU5EX0RFTEFZCTI1MAo+ICsjZGVm aW5lIFBBQ0tJTkdfQllURVNfUEVSX1dPUkQJNAo+ICsjZGVmaW5lIFhGRVJfVElNRU9VVAkJMjUw Cj4gKwo+ICsjZGVmaW5lIEkzQ19BRERSX01BU0sJCShJMkNfTUFYX0FERFIgPj4gMSkKClsgLi4u IF0KCj4gKwlpbnQgY3VyX2xlbjsKPiArCWludCBjdXJfaWR4Owo+ICsJREVDTEFSRV9CSVRNQVAo bmV3YWRkcnNsb3RzLCA2NCk7CgpbIC4uLiBdCgo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmlf aTNjX2Nsa19zZXR0aW5ncyBnZW5pX2kzY19jbGtfbWFwW10gPSB7Cj4gKwl7Cj4gKwkJLmNsa19m cmVxX291dCA9IDEwMCAqIEhaX1BFUl9LSFosCj4gKwkJLmNsa19zcmNfZnJlcSA9IDE5MjAwICog SFpfUEVSX0tIWiwKPiArCQkuY2xrX2RpdiA9IDEsCj4gKwkJLmkyY190X2hpZ2hfY250ID0gNzYs Cj4gKwkJLmkyY190X2xvd19jbnQgPSA5MCwKPiArCQkuaTNjX3RfaGlnaF9jbnQgPSA3LAo+ICsJ CS5pM2NfdF9jeWNsZV9jbnQgPSA4LAo+ICsJCS5pMmNfdF9jeWNsZV9jbnQgPSAxOTIsCj4gKwl9 LAo+ICsJewo+ICsJCS5jbGtfZnJlcV9vdXQgPSA0MDAgKiBIWl9QRVJfS0haLAo+ICsJCS5jbGtf c3JjX2ZyZXEgPSAxOTIwMCAqIEhaX1BFUl9LSFosCj4gKwkJLmNsa19kaXYgPSAxLAo+ICsJCS5p MmNfdF9oaWdoX2NudCA9IDEyLAo+ICsJCS5pMmNfdF9sb3dfY250ID0gMjQsCj4gKwkJLmkzY190 X2hpZ2hfY250ID0gNywKPiArCQkuaTNjX3RfY3ljbGVfY250ID0gOCwKPiArCQkuaTJjX3RfY3lj bGVfY250ID0gNDgKPiArCX0sCj4gKwl7Cj4gKwkJLmNsa19mcmVxX291dCA9IDEwMDAgKiBIWl9Q RVJfS0haLAo+ICsJCS5jbGtfc3JjX2ZyZXEgPSAxOTIwMCAqIEhaX1BFUl9LSFosCj4gKwkJLmNs a19kaXYgPSAxLAo+ICsJCS5pMmNfdF9oaWdoX2NudCA9IDQsCj4gKwkJLmkyY190X2xvd19jbnQg PSA5LAo+ICsJCS5pM2NfdF9oaWdoX2NudCA9IDcsCj4gKwkJLmkzY190X2N5Y2xlX2NudCA9IDAs Cj4gKwkJLmkyY190X2N5Y2xlX2NudCA9IDE5Cj4gKwl9LAo+ICsJewo+ICsJCS5jbGtfZnJlcV9v dXQgPSAxMjUwMCAqIEhaX1BFUl9LSFosCj4gKwkJLmNsa19zcmNfZnJlcSA9IDEwMDAwMCAqIEha X1BFUl9LSFosCj4gKwkJLmNsa19kaXYgPSAxLAo+ICsJCS5pMmNfdF9oaWdoX2NudCA9IDQ1LAo+ ICsJCS5pMmNfdF9sb3dfY250ID0gNjMsCj4gKwkJLmkzY190X2hpZ2hfY250ID0gNiwKPiArCQku aTNjX3RfY3ljbGVfY250ID0gNywKPiArCQkuaTJjX3RfY3ljbGVfY250ID0gMTEwCj4gKwl9Cj4g K307Cj4gKwo+ICtzdGF0aWMgaW50IGdlbmlfaTNjX2Nsa19tYXBfaWR4KHN0cnVjdCBnZW5pX2kz Y19kZXYgKmdpM2MpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBnZW5pX2kzY19jbGtfc2V0dGluZ3Mg KmNsa190YWJsZV9pZHggPSBnZW5pX2kzY19jbGtfbWFwOwo+ICsJc3RydWN0IGkzY19tYXN0ZXJf Y29udHJvbGxlciAqbSA9ICZnaTNjLT5jdHJscjsKPiArCXN0cnVjdCBpM2NfYnVzICpidXMgPSBp M2NfbWFzdGVyX2dldF9idXMobSk7Cj4gKwo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGdlbmlfaTNjX2Nsa19tYXApOyBpKyssIGNsa190YWJsZV9pZHgrKykgewo+ICsJCWlmIChj bGtfdGFibGVfaWR4LT5jbGtfZnJlcV9vdXQgPT0gYnVzLT5zY2xfcmF0ZS5pM2MgJiYKPiArCQkg ICAgY2xrX3RhYmxlX2lkeC0+Y2xrX3NyY19mcmVxID09IGdpM2MtPmNsa19zcmNfZnJlcSkKPiAr CQkJZ2kzYy0+Y2xrX2NmZyA9IGNsa190YWJsZV9pZHg7Cj4gKwo+ICsJCWlmIChjbGtfdGFibGVf aWR4LT5jbGtfZnJlcV9vdXQgPT0gYnVzLT5zY2xfcmF0ZS5pMmMpCj4gKwkJCWdpM2MtPmNsa19v ZF9jZmcgPSBjbGtfdGFibGVfaWR4Owo+ICsJfQo+ICsKPiArCWlmICghZ2kzYy0+Y2xrX2NmZyB8 fCAhZ2kzYy0+Y2xrX29kX2NmZykKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQoKW1NldmVyaXR5OiBIaWdoXQpXaWxsIGdlbmlfaTNjX2Nsa19tYXBfaWR4KCkgZmFp bCB3aXRoIC1FSU5WQUwgZHVyaW5nCmdlbmlfaTNjX21hc3Rlcl9idXNfaW5pdCgpIG9uIHB1cmUg STNDIGJ1c2VzIGFuZCBtaXhlZC1zbG93IGJ1c2VzPwoKSW4gZHJpdmVycy9pM2MvbWFzdGVyLmMs IGkzY19idXNfc2V0X21vZGUoKSBvbmx5IHBvcHVsYXRlcwppM2NidXMtPnNjbF9yYXRlLmkzYyB3 aGVuIGkzY2J1cy0+bW9kZSA9PSBJM0NfQlVTX01PREVfUFVSRSwgbGVhdmluZwppM2NidXMtPnNj bF9yYXRlLmkyYyBhcyAwIHVubGVzcyBhbiBvcHRpb25hbCBpMmMtc2NsLWh6IHByb3BlcnR5IGlz IHByZXNlbnQgaW4KZmlybXdhcmUuIEJlY2F1c2Ugbm8gZW50cnkgaW4gZ2VuaV9pM2NfY2xrX21h cFtdIGhhcyBjbGtfZnJlcV9vdXQgPT0gMCwKZ2kzYy0+Y2xrX29kX2NmZyBzdGF5cyBOVUxMIGFu ZCBnZW5pX2kzY19jbGtfbWFwX2lkeCgpIHJldHVybnMgLUVJTlZBTC4KCkNvbnZlcnNlbHksIGlu IEkzQ19CVVNfTU9ERV9NSVhFRF9TTE9XLCBpM2NfYnVzX3NldF9tb2RlKCkgY2xhbXBzCmJ1cy0+ c2NsX3JhdGUuaTNjIHRvIGJ1cy0+c2NsX3JhdGUuaTJjIChhdCBtb3N0IDEgTUh6KS4gSG93ZXZl ciwKaTNjX2dlbmlfcmVzb3VyY2VzX2luaXQoKSBoYXJkY29kZXMgZ2kzYy0+Y2xrX3NyY19mcmVx IHRvIDEwMCBNSHosIHdoaWxlIHRoZQoxMDAga0h6LCA0MDAga0h6LCBhbmQgMTAwMCBrSHogZW50 cmllcyBpbiBnZW5pX2kzY19jbGtfbWFwW10gYWxsIHVzZSBhCjE5LjIgTUh6IGNsa19zcmNfZnJl cSwgbGVhdmluZyBnaTNjLT5jbGtfY2ZnIE5VTEwuCgpBbHNvLCBpbiB0aGUgMTAwMCBrSHogZW50 cnkgb2YgZ2VuaV9pM2NfY2xrX21hcFtdICh0aGUgZGVmYXVsdCBJMkMgcmF0ZSBmb3IKbWl4ZWQt ZmFzdCBhbmQgbWl4ZWQtbGltaXRlZCBidXNlcyksIGkzY190X2N5Y2xlX2NudCBpcyAwIHdoaWxl IGkzY190X2hpZ2hfY250CmlzIDcuIFdoZW4gcWNvbV9nZW5pX2kzY19jb25mKCkgY29uZmlndXJl cyBPUEVOX0RSQUlOX01PREUsIGlzIHdyaXRpbmcgMCB0bwpTRV9JM0NfU0NMX0NZQ0xFIGludGVu dGlvbmFsIHdoaWxlIHRoZSAxMDAga0h6IGFuZCA0MDAga0h6IGVudHJpZXMgdXNlIDg/CgpbIC4u LiBdCgo+ICtzdGF0aWMgdm9pZCBnZW5pX2kzY19oYW5kbGVfZXJyKHN0cnVjdCBnZW5pX2kzY19k ZXYgKmdpM2MsIHUzMiBzdGF0dXMpCj4gK3sKPiArCWRldl9kYmcoZ2kzYy0+c2UuZGV2LCAibGVu OiVkLCAlc1xuIiwKPiArCQlnaTNjLT5jdXJfbGVuLCBnaTNjLT5jdXJfaXNfd3JpdGUgPyAid3Jp dGUiIDogInJlYWQiKTsKPiArCj4gKwlpZiAoc3RhdHVzICYgTV9HUF9JUlFfMF9FTikgewo+ICsJ CWdpM2MtPmVyciA9IC1FSU5WQUw7Cj4gKwkJZGV2X2RiZyhnaTNjLT5zZS5kZXYsICJJM0Mgc2xh dmUgZWFybHkgcmVhZCB0ZXJtaW5hdGlvblxuIik7Cj4gKwl9Cj4gKwo+ICsJaWYgKHN0YXR1cyAm IE1fR1BfSVJRXzFfRU4pIHsKPiArCQlnaTNjLT5lcnIgPSAtRU5PVENPTk47Cj4gKwkJZGV2X2Ri ZyhnaTNjLT5zZS5kZXYsICJOQUNLOiBzbGF2ZSB1bnJlc3BvbnNpdmUsIGNoZWNrIHBvd2VyL3Jl c2V0XG4iKTsKPiArCX0KPiArCj4gKwlpZiAoc3RhdHVzICYgTV9HUF9JUlFfMl9FTikgewo+ICsJ CWdpM2MtPmVyciA9IC1FSU5WQUw7Cj4gKwkJZGV2X2RiZyhnaTNjLT5zZS5kZXYsICJDUkMgb3Ig cGFyaXR5IGVycm9yXG4iKTsKPiArCX0KPiArCj4gKwlpZiAoc3RhdHVzICYgTV9HUF9JUlFfM19F Tikgewo+ICsJCWdpM2MtPmVyciA9IC1FUFJPVE87Cj4gKwkJZGV2X2RiZyhnaTNjLT5zZS5kZXYs ICJCdXMgcHJvdG8gRXJyb3IsIG5vaXN5L3VuZXhwZWN0ZWQgc3RhcnQvc3RvcFxuIik7Cj4gKwl9 Cj4gKwo+ICsJaWYgKHN0YXR1cyAmIE1fR1BfSVJRXzRfRU4pIHsKPiArCQlnaTNjLT5lcnIgPSAt RUJVU1k7Cj4gKwkJZGV2X2RiZyhnaTNjLT5zZS5kZXYsICJOQUNLIG9uIDdFLCB1bmV4cGVjdGVk IHByb3RvY29sIGVycm9yXG4iKTsKPiArCX0KPiArCj4gKwlpZiAoc3RhdHVzICYgTV9HUF9JUlFf NV9FTikgewo+ICsJCWdpM2MtPmVyciA9IC1FSU5WQUw7Cj4gKwkJZGV2X2RiZyhnaTNjLT5zZS5k ZXYsICJOQUNLIG9uIElCSVxuIik7Cj4gKwl9Cj4gKwo+ICsJaWYgKHN0YXR1cyAmIE1fQ01EX09W RVJSVU5fRU4pIHsKPiArCQlnaTNjLT5lcnIgPSAtRUlPOwo+ICsJCWRldl9kYmcoZ2kzYy0+c2Uu ZGV2LCAiQ21kIG92ZXJydW4sIGNoZWNrIEdFTkkgY21kLXN0YXRlIG1hY2hpbmVcbiIpOwo+ICsJ fQo+ICsKPiArCWlmIChzdGF0dXMgJiBNX0lMTEVHQUxfQ01EX0VOKSB7Cj4gKwkJZ2kzYy0+ZXJy ID0gLUVJTFNFUTsKPiArCQlkZXZfZGJnKGdpM2MtPnNlLmRldiwgIklsbGVnYWwgY21kLCBjaGVj ayBHRU5JIGNtZC1zdGF0ZSBtYWNoaW5lXG4iKTsKPiArCX0KPiArCj4gKwlpZiAoc3RhdHVzICYg TV9DTURfQUJPUlRfRU4pIHsKPiArCQlnaTNjLT5lcnIgPSAtRVRJTUVET1VUOwo+ICsJCWRldl9k YmcoZ2kzYy0+c2UuZGV2LCAiQWJvcnQgYWZ0ZXIgdGltZW91dCBzdWNjZXNzZnVsXG4iKTsKPiAr CX0KPiArCj4gKwlpZiAoc3RhdHVzID09IEdFTklfVElNRU9VVCkgewo+ICsJCWdpM2MtPmVyciA9 IC1FVElNRURPVVQ7Cj4gKwkJZGV2X2RiZyhnaTNjLT5zZS5kZXYsICJJM0MgdHJhbnNhY3Rpb24g dGltZWQgb3V0XG4iKTsKPiArCX0KPiArfQoKW1NldmVyaXR5OiBIaWdoXQpEb2VzIGdlbmlfaTNj X2hhbmRsZV9lcnIoKSBvdmVyd3JpdGUgZWFybGllciBOQUNLIGVycm9yIGNvZGVzICgtRU5PVENP Tk4gYW5kCi1FQlVTWSkgd2l0aCAtRVRJTUVET1VUIGR1cmluZyB0aW1lb3V0IGFuZCBhYm9ydCBy ZWNvdmVyeT8KCldoZW4gTV9HUF9JUlFfMV9FTiBvciBNX0dQX0lSUV80X0VOIGZpcmVzIGluIGdl bmlfaTNjX2lycSgpIHdpdGhvdXQKTV9DTURfRE9ORV9FTiBzZXQsIGdlbmlfaTNjX2hhbmRsZV9l cnIoKSBzZXRzIGdpM2MtPmVyciB0byAtRU5PVENPTk4gb3IKLUVCVVNZLCBhbmQgX2kzY19nZW5p X2V4ZWN1dGVfY29tbWFuZCgpIHdhaXRzIGZvciB0aGUgdGltZW91dCB0byBhYm9ydCB0aGUKY29t bWFuZC4gT24gdGltZW91dCwgX2kzY19nZW5pX2V4ZWN1dGVfY29tbWFuZCgpIGFuZCBnZW5pX2kz Y19hYm9ydF94ZmVyKCkKY2FsbCBnZW5pX2kzY19oYW5kbGVfZXJyKGdpM2MsIEdFTklfVElNRU9V VCksIGZvbGxvd2VkIGJ5IE1fQ01EX0FCT1JUX0VOIGluCmdlbmlfaTNjX2lycSgpLiBCZWNhdXNl IGJvdGggYnJhbmNoZXMgdW5jb25kaXRpb25hbGx5IHNldApnaTNjLT5lcnIgPSAtRVRJTUVET1VU LCB0aGUgb3JpZ2luYWwgTkFDSyBlcnJvciBpcyBsb3N0LCBwcmV2ZW50aW5nCmdlbmlfaTNjX21h c3Rlcl9zZW5kX2NjY19jbWQoKSBmcm9tIHJlcG9ydGluZyBJM0NfRVJST1JfTTIuCgpBbHNvLCBz dGF0dXMgaW4gZ2VuaV9pM2NfaGFuZGxlX2VycigpIG1peGVzIGhhcmR3YXJlIFNFX0dFTklfTV9J UlFfU1RBVFVTIGJpdApmbGFncyB3aXRoIHRoZSBlbnVtIHZhbHVlIEdFTklfVElNRU9VVCAod2hp Y2ggaXMgOSwgZXF1YWwgdG8KTV9DTURfRkFJTFVSRV9FTiB8IE1fQ01EX0RPTkVfRU4pLiBBbmQg d2hlbiBnZW5pX2kzY19pcnEoKSBlbnRlcnMgdGhlIGVycm9yCnBhdGggdmlhIGRtX3J4X3N0ICYg RE1fSTNDX0NCX0VSUiBvciBNX0NNRF9GQUlMVVJFX0VOIHdpdGhvdXQgTV9HUF9JUlFfMC4uNF9F TgpzZXQgaW4gbV9zdGF0LCBnZW5pX2kzY19oYW5kbGVfZXJyKGdpM2MsIG1fc3RhdCkgbGVhdmVz IGdpM2MtPmVyciBhcyAwICh3aGlsZQpNX0dQX0lSUV81X0VOIGlzIG9taXR0ZWQgZnJvbSBTRV9J M0NfRVJSKS4gU2hvdWxkIGdlbmlfaTNjX2hhbmRsZV9lcnIoKQpwcmVzZXJ2ZSBhbiBleGlzdGlu ZyBub24temVybyBnaTNjLT5lcnIgYW5kIHNlcGFyYXRlIGhhcmR3YXJlIHN0YXR1cyBiaXRzIGZy b20KZHJpdmVyIGVycm9yIGNvZGVzPwoKPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBnZW5pX2kz Y19pcnEoaW50IGlycSwgdm9pZCAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZ2VuaV9pM2NfZGV2ICpn aTNjID0gZGV2Owo+ICsJdTMyIG1fc3RhdF9tYXNrLCBkbV90eF9zdCwgZG1fcnhfc3Q7Cj4gKwl1 MzIgbV9zdGF0LCByeF9zdCwgZG1hX21vZGU7Cj4gKwo+ICsJbV9zdGF0ID0gcmVhZGxfcmVsYXhl ZChnaTNjLT5zZS5iYXNlICsgU0VfR0VOSV9NX0lSUV9TVEFUVVMpOwo+ICsJbV9zdGF0X21hc2sg PSByZWFkbF9yZWxheGVkKGdpM2MtPnNlLmJhc2UgKyBTRV9HRU5JX01fSVJRX0VOKTsKCltTZXZl cml0eTogTG93XQpJbiBnZW5pX2kzY19pcnEoKSwgbV9zdGF0X21hc2sgaXMgYXNzaWduZWQgaGVy ZSBidXQgbmV2ZXIgdXNlZCwgd2hpY2ggd2lsbAp0cmlnZ2VyIGFuIHVudXNlZC1idXQtc2V0LXZh cmlhYmxlIGNvbXBpbGVyIHdhcm5pbmcuIFNob3VsZCBtX3N0YXQgYmUgbWFza2VkCndpdGggbV9z dGF0X21hc2ssIG9yIHNob3VsZCBtX3N0YXRfbWFzayBiZSByZW1vdmVkPwoKPiArCXJ4X3N0ID0g cmVhZGxfcmVsYXhlZChnaTNjLT5zZS5iYXNlICsgU0VfR0VOSV9SWF9GSUZPX1NUQVRVUyk7Cj4g KwlkbV90eF9zdCA9IHJlYWRsX3JlbGF4ZWQoZ2kzYy0+c2UuYmFzZSArIFNFX0RNQV9UWF9JUlFf U1RBVCk7Cj4gKwlkbV9yeF9zdCA9IHJlYWRsX3JlbGF4ZWQoZ2kzYy0+c2UuYmFzZSArIFNFX0RN QV9SWF9JUlFfU1RBVCk7Cj4gKwlkbWFfbW9kZSA9IHJlYWRsX3JlbGF4ZWQoZ2kzYy0+c2UuYmFz ZSArIFNFX0dFTklfRE1BX01PREVfRU4pOwo+ICsKPiArCXNjb3BlZF9ndWFyZChzcGlubG9jaywg JmdpM2MtPmlycV9sb2NrKSB7Cj4gKwkJaWYgKG1fc3RhdCAmIFNFX0kzQ19FUlIgfHwgZG1fcnhf c3QgJiBETV9JM0NfQ0JfRVJSKSB7Cj4gKwkJCWdlbmlfaTNjX2hhbmRsZV9lcnIoZ2kzYywgbV9z dGF0KTsKPiArCQkJLyogRGlzYWJsZSB0aGUgVFggV2F0ZXJtYXJrIGludGVycnVwdCB0byBzdG9w IFRYICovCj4gKwkJCWlmICghZG1hX21vZGUpCj4gKwkJCQl3cml0ZWxfcmVsYXhlZCgwLCBnaTNj LT5zZS5iYXNlICsgU0VfR0VOSV9UWF9XQVRFUk1BUktfUkVHKTsKPiArCQl9IGVsc2UgaWYgKGRt YV9tb2RlKSB7Cj4gKwkJCWRldl9kYmcoZ2kzYy0+c2UuZGV2LCAiaTNjIGRtYSB0eDoweCV4LCBk bWEgcng6MHgleFxuIiwgZG1fdHhfc3QsIGRtX3J4X3N0KTsKPiArCQl9IGVsc2UgaWYgKChtX3N0 YXQgJiAoTV9SWF9GSUZPX1dBVEVSTUFSS19FTiB8IE1fUlhfRklGT19MQVNUX0VOKSkgJiYKPiAr CQkJICAgICFnaTNjLT5jdXJfaXNfd3JpdGUgJiYgZ2kzYy0+Y3VyX2J1Zikgewo+ICsJCQkvKiBG SUZPIFJYIGhhbmRsaW5nICovCj4gKwkJCXUzMiByeGNudCA9IHJ4X3N0ICYgUlhfRklGT19XQ19N U0s7Cj4gKwkJCWludCBhdmFpbCA9IHJ4Y250ICogNDsKPiArCQkJaW50IG5lZWQgID0gZ2kzYy0+ Y3VyX2xlbiAtIGdpM2MtPmN1cl9pZHg7Cj4gKwkJCWludCBuICAgICA9IG1pbihuZWVkLCBhdmFp bCk7Cj4gKwo+ICsJCQlpZiAobiA+IDApIHsKPiArCQkJCWkzY19yZWFkbF9maWZvKGdpM2MtPnNl LmJhc2UgKyBTRV9HRU5JX1JYX0ZJRk9uLAo+ICsJCQkJCSAgICAgICBnaTNjLT5jdXJfYnVmICsg Z2kzYy0+Y3VyX2lkeCwgbik7Cj4gKwkJCQlnaTNjLT5jdXJfaWR4ICs9IG47Cj4gKwkJCX0KPiAr CQl9IGVsc2UgaWYgKChtX3N0YXQgJiBNX1RYX0ZJRk9fV0FURVJNQVJLX0VOKSAmJgoKW1NldmVy aXR5OiBIaWdoXQpIb3cgZG9lcyBGSUZPIFJYIGluIGdlbmlfaTNjX2lycSgpIGhhbmRsZSBzaG9y dCBvciB2YXJpYWJsZS1sZW5ndGggSTNDIHJlYWRzPwoKV2hlbiBhbiBJM0MgdGFyZ2V0IHRlcm1p bmF0ZXMgYSByZWFkIGVhcmx5IHZpYSB0aGUgVC1iaXQsIHRoZSBjb250cm9sbGVyIHNldHMKTV9H UF9JUlFfMF9FTiAoIkkzQyBzbGF2ZSBlYXJseSByZWFkIHRlcm1pbmF0aW9uIikuIEJlY2F1c2Ug TV9HUF9JUlFfMF9FTiBpcwppbmNsdWRlZCBpbiBTRV9JM0NfRVJSLCBnZW5pX2kzY19pcnEoKSB0 YWtlcyB0aGUgZXJyb3IgYnJhbmNoLCBzZXRzCmdpM2MtPmVyciA9IC1FSU5WQUwsIGFuZCBza2lw cyBkcmFpbmluZyB0aGUgUlggRklGTy4KCkluIGFkZGl0aW9uLCB0aGUgRklGTyBSWCBjYWxjdWxh dGlvbiB1c2VzIGF2YWlsID0gcnhjbnQgKiA0IHdpdGhvdXQgY2hlY2tpbmcKUlhfTEFTVCBhbmQg UlhfTEFTVF9CWVRFX1ZBTElEX01TSyBpbiBTRV9HRU5JX1JYX0ZJRk9fU1RBVFVTLiBJZiBhIHRh cmdldApyZXR1cm5zIGEgc2hvcnQgcmVzcG9uc2UgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0 IGJ5dGVzIGFuZCBpcyBzbWFsbGVyIHRoYW4KZ2kzYy0+Y3VyX2xlbiAoZm9yIGV4YW1wbGUsIGEg Mi1ieXRlIHJlc3BvbnNlIHRvIGEgNS1ieXRlIEkzQ19DQ0NfR0VUTVhEUyBvciBhCjMtYnl0ZSBJ M0NfQ0NDX0dFVE1STCksIGF2YWlsIGlzIHJvdW5kZWQgdXAgdG8gNCBieXRlcywgc28gZ2kzYy0+ Y3VyX2lkeCBhbmQKY21kLT5kZXN0c1tpXS5wYXlsb2FkLmFjdHVhbF9sZW4gYXJlIG92ZXItY291 bnRlZCwgY2F1c2luZwppM2NfbWFzdGVyX2dldG14ZHNfbG9ja2VkKCkgdG8gZmFpbCB3aXRoIC1F SU8gb3IgaTNjX21hc3Rlcl9nZXRtcmxfbG9ja2VkKCkgdG8KcmVhZCBhbiB1bmluaXRpYWxpemVk IGJ5dGUuCgo+ICsJCQkgICBnaTNjLT5jdXJfaXNfd3JpdGUgJiYgZ2kzYy0+Y3VyX2J1Zikgewo+ ICsJCQkvKiBGSUZPIFRYIGhhbmRsaW5nICovCj4gKwkJCWludCBhdmFpbCA9IGdpM2MtPnR4X3dt ICogNDsKPiArCQkJaW50IG5lZWQgID0gZ2kzYy0+Y3VyX2xlbiAtIGdpM2MtPmN1cl9pZHg7Cj4g KwkJCWludCBuICAgICA9IG1pbihuZWVkLCBhdmFpbCk7Cj4gKwo+ICsJCQlpZiAobiA+IDApIHsK PiArCQkJCWkzY193cml0ZWxfZmlmbyhnaTNjLT5zZS5iYXNlICsgU0VfR0VOSV9UWF9GSUZPbiwK PiArCQkJCQkJKHZvaWQgKikoZ2kzYy0+Y3VyX2J1ZiArIGdpM2MtPmN1cl9pZHgpLCBuKTsKPiAr CQkJCWdpM2MtPmN1cl9pZHggKz0gbjsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJaWYgKCFkbWFf bW9kZSAmJiBnaTNjLT5jdXJfaWR4ID09IGdpM2MtPmN1cl9sZW4pCj4gKwkJCXdyaXRlbF9yZWxh eGVkKDAsIGdpM2MtPnNlLmJhc2UgKyBTRV9HRU5JX1RYX1dBVEVSTUFSS19SRUcpOwo+ICsJfQo+ ICsKPiArCWlmIChtX3N0YXQpCj4gKwkJd3JpdGVsX3JlbGF4ZWQobV9zdGF0LCBnaTNjLT5zZS5i YXNlICsgU0VfR0VOSV9NX0lSUV9DTEVBUik7Cj4gKwo+ICsJaWYgKGRtYV9tb2RlKSB7Cj4gKwkJ aWYgKGRtX3R4X3N0KQo+ICsJCQl3cml0ZWxfcmVsYXhlZChkbV90eF9zdCwgZ2kzYy0+c2UuYmFz ZSArIFNFX0RNQV9UWF9JUlFfQ0xSKTsKPiArCQlpZiAoZG1fcnhfc3QpCj4gKwkJCXdyaXRlbF9y ZWxheGVkKGRtX3J4X3N0LCBnaTNjLT5zZS5iYXNlICsgU0VfRE1BX1JYX0lSUV9DTFIpOwo+ICsJ fQo+ICsKPiArCS8qIGlmIHRoaXMgaXMgZXJyIHdpdGggZG9uZS1iaXQgbm90IHNldCwgaGFuZGxl IHRoYXQgdGhyb3VnaCB0aW1lb3V0LiAqLwo+ICsJaWYgKG1fc3RhdCAmIChNX0NNRF9ET05FX0VO IHwgTV9DTURfQUJPUlRfRU4pKSB7Cj4gKwkJd3JpdGVsX3JlbGF4ZWQoMCwgZ2kzYy0+c2UuYmFz ZSArIFNFX0dFTklfVFhfV0FURVJNQVJLX1JFRyk7Cj4gKwkJY29tcGxldGUoJmdpM2MtPmRvbmUp Owo+ICsJfSBlbHNlIGlmICgoZG1fdHhfc3QgJiBUWF9ETUFfRE9ORSkgfHwgKGRtX3J4X3N0ICYg KFJYX0RNQV9ET05FIHwgUlhfUkVTRVRfRE9ORSkpKSB7Cj4gKwkJY29tcGxldGUoJmdpM2MtPmRv bmUpOwo+ICsJfQo+ICsKPiArCXJldHVybiBJUlFfSEFORExFRDsKPiArfQoKWyAuLi4gXQoKPiAr c3RhdGljIGludCBfaTNjX2dlbmlfZXhlY3V0ZV9jb21tYW5kKHN0cnVjdCBnZW5pX2kzY19kZXYg KmdpM2MsIHN0cnVjdCBnZW5pX2kzY194ZmVyX3BhcmFtcyAqeGZlcikKPiArewo+ICsJYm9vbCBp c193cml0ZSA9IGdpM2MtPmN1cl9pc193cml0ZTsKPiArCWRtYV9hZGRyX3QgdHhfZG1hID0gMCwg cnhfZG1hID0gMDsKPiArCXVuc2lnbmVkIGxvbmcgdGltZV9yZW1haW5pbmc7Cj4gKwl1MzIgbGVu ID0gZ2kzYy0+Y3VyX2xlbjsKPiArCWludCByZXQ7Cj4gKwo+ICsJZ2VuaV9zZV9zZWxlY3RfbW9k ZSgmZ2kzYy0+c2UsIHhmZXItPm1vZGUpOwo+ICsKPiArCWdpM2MtPmVyciA9IDA7Cj4gKwlnaTNj LT5jdXJfaWR4ID0gMDsKPiArCj4gKwlpZiAoaXNfd3JpdGUpIHsKPiArCQlkZXZfZGJnKGdpM2Mt PnNlLmRldiwgIkkzQyBjbWQ6MHgleCBwYXJhbToweCV4IFdSSVRFIGxlbjolZFxuIiwKPiArCQkJ eGZlci0+bV9jbWQsIHhmZXItPm1fcGFyYW0sIGxlbik7Cj4gKwo+ICsJCXdyaXRlbF9yZWxheGVk KGxlbiwgZ2kzYy0+c2UuYmFzZSArIFNFX0kzQ19UWF9UUkFOU19MRU4pOwo+ICsJCWdlbmlfc2Vf c2V0dXBfbV9jbWQoJmdpM2MtPnNlLCB4ZmVyLT5tX2NtZCwgeGZlci0+bV9wYXJhbSk7Cj4gKwo+ ICsJCWlmICh4ZmVyLT5tb2RlID09IEdFTklfU0VfRE1BKSB7Cj4gKwkJCXJldCA9IGdlbmlfc2Vf dHhfZG1hX3ByZXAoJmdpM2MtPnNlLCBnaTNjLT5jdXJfYnVmLCBsZW4sICZ0eF9kbWEpOwo+ICsJ CQlpZiAocmV0KSB7Cj4gKwkJCQl4ZmVyLT5tb2RlID0gR0VOSV9TRV9GSUZPOwo+ICsJCQkJZ2Vu aV9zZV9zZWxlY3RfbW9kZSgmZ2kzYy0+c2UsIHhmZXItPm1vZGUpOwo+ICsJCQl9Cj4gKwkJfQo+ ICsKPiArCQlpZiAoeGZlci0+bW9kZSA9PSBHRU5JX1NFX0ZJRk8gJiYgbGVuID4gMCkgLyogR2V0 IEZJRk8gSVJRICovCj4gKwkJCXdyaXRlbF9yZWxheGVkKDEsIGdpM2MtPnNlLmJhc2UgKyBTRV9H RU5JX1RYX1dBVEVSTUFSS19SRUcpOwo+ICsJfSBlbHNlIHsKPiArCQlkZXZfZGJnKGdpM2MtPnNl LmRldiwgIkkzQyBjbWQ6MHgleCBwYXJhbToweCV4IFJFQUQgbGVuOiVkXG4iLAo+ICsJCQl4ZmVy LT5tX2NtZCwgeGZlci0+bV9wYXJhbSwgbGVuKTsKPiArCQl3cml0ZWxfcmVsYXhlZChsZW4sIGdp M2MtPnNlLmJhc2UgKyBTRV9JM0NfUlhfVFJBTlNfTEVOKTsKPiArCQlnZW5pX3NlX3NldHVwX21f Y21kKCZnaTNjLT5zZSwgeGZlci0+bV9jbWQsIHhmZXItPm1fcGFyYW0pOwo+ICsJCWlmICh4ZmVy LT5tb2RlID09IEdFTklfU0VfRE1BKSB7Cj4gKwkJCXJldCA9IGdlbmlfc2VfcnhfZG1hX3ByZXAo JmdpM2MtPnNlLCBnaTNjLT5jdXJfYnVmLCBsZW4sICZyeF9kbWEpOwo+ICsJCQlpZiAocmV0KSB7 Cj4gKwkJCQl4ZmVyLT5tb2RlID0gR0VOSV9TRV9GSUZPOwo+ICsJCQkJZ2VuaV9zZV9zZWxlY3Rf bW9kZSgmZ2kzYy0+c2UsIHhmZXItPm1vZGUpOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsKPiAr CXRpbWVfcmVtYWluaW5nID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZnaTNjLT5kb25l LCBYRkVSX1RJTUVPVVQpOwo+ICsJaWYgKCF0aW1lX3JlbWFpbmluZykgewo+ICsJCXVuc2lnbmVk IGxvbmcgZmxhZ3M7Cj4gKwo+ICsJCWRldl9kYmcoZ2kzYy0+c2UuZGV2LCAiVGltZW91dCBjb21w bGV0aW5nIHRyYW5zZmVyXG4iKTsKPiArCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2kzYy0+aXJxX2xv Y2ssIGZsYWdzKTsKPiArCQlnZW5pX2kzY19oYW5kbGVfZXJyKGdpM2MsIEdFTklfVElNRU9VVCk7 Cj4gKwkJZ2kzYy0+Y3VyX2J1ZiA9IE5VTEw7Cj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm Z2kzYy0+aXJxX2xvY2ssIGZsYWdzKTsKPiArCQlnZW5pX2kzY19hYm9ydF94ZmVyKGdpM2MpOwo+ ICsJfQoKW1NldmVyaXR5OiBIaWdoXQpDYW4gc3RhcnRpbmcgdGhlIGNvbW1hbmQgaW4gX2kzY19n ZW5pX2V4ZWN1dGVfY29tbWFuZCgpIHdpdGhvdXQgaG9sZGluZwpnaTNjLT5pcnFfbG9jaywgb3Ig Y2xlYXJpbmcgZ2kzYy0+Y3VyX2J1ZiBvbiB0aW1lb3V0IHdpdGhvdXQgemVyb2luZwpTRV9HRU5J X1RYX1dBVEVSTUFSS19SRUcsIGNhdXNlIGFuIGluZmluaXRlIE1fVFhfRklGT19XQVRFUk1BUktf RU4gaW50ZXJydXB0CnN0b3JtPwoKSW4gX2kzY19nZW5pX2V4ZWN1dGVfY29tbWFuZCgpLCBnZW5p X3NlX3NldHVwX21fY21kKCkgc3RhcnRzIHRoZSBoYXJkd2FyZQpjb21tYW5kIGJlZm9yZSBTRV9H RU5JX1RYX1dBVEVSTUFSS19SRUcgaXMgc2V0IHRvIDEuIElmIHRoZSBjb21tYW5kCmltbWVkaWF0 ZWx5IGZhaWxzIG9uIHRoZSBidXMgKHN1Y2ggYXMgb24gYW4gYWRkcmVzcyBvciAweDdFIE5BQ0sp LApnZW5pX2kzY19pcnEoKSBjYW4gcnVuLCBjbGVhciBTRV9HRU5JX1RYX1dBVEVSTUFSS19SRUcg dG8gMCwgYW5kIGNvbXBsZXRlCmdpM2MtPmRvbmUgYmVmb3JlIF9pM2NfZ2VuaV9leGVjdXRlX2Nv bW1hbmQoKSB3cml0ZXMgMSB0bwpTRV9HRU5JX1RYX1dBVEVSTUFSS19SRUcgYW5kIHNldHMgZ2kz Yy0+Y3VyX2J1ZiA9IE5VTEwuIExpa2V3aXNlLCBvbiBhCnRyYW5zZmVyIHRpbWVvdXQsIF9pM2Nf Z2VuaV9leGVjdXRlX2NvbW1hbmQoKSBzZXRzIGdpM2MtPmN1cl9idWYgPSBOVUxMIHdoaWxlCmdp M2MtPmN1cl9pZHggPCBnaTNjLT5jdXJfbGVuIHdpdGhvdXQgd3JpdGluZyAwIHRvIFNFX0dFTklf VFhfV0FURVJNQVJLX1JFRy4KCldoZW4gTV9UWF9GSUZPX1dBVEVSTUFSS19FTiB0aGVuIGZpcmVz IGluIGdlbmlfaTNjX2lycSgpIHdpdGgKZ2kzYy0+Y3VyX2J1ZiA9PSBOVUxMIGFuZCBnaTNjLT5j dXJfaWR4IDwgZ2kzYy0+Y3VyX2xlbiwgbmVpdGhlciB0aGUgVFggRklGTwpicmFuY2ggbm9yIHRo ZSBnaTNjLT5jdXJfaWR4ID09IGdpM2MtPmN1cl9sZW4gY2hlY2sgZGlzYWJsZXMKU0VfR0VOSV9U WF9XQVRFUk1BUktfUkVHLCBsZWF2aW5nIHRoZSBsZXZlbC10cmlnZ2VyZWQgd2F0ZXJtYXJrIGlu dGVycnVwdAphc3NlcnRlZCBpbmRlZmluaXRlbHkuCgo+ICsKPiArCWlmICh4ZmVyLT5tb2RlID09 IEdFTklfU0VfRE1BKSB7Cj4gKwkJaWYgKGdpM2MtPmVycikgewo+ICsJCQlpZiAoaXNfd3JpdGUp Cj4gKwkJCQl3cml0ZWxfcmVsYXhlZCgxLCBnaTNjLT5zZS5iYXNlICsgU0VfRE1BX1RYX0ZTTV9S U1QpOwo+ICsJCQllbHNlCj4gKwkJCQl3cml0ZWxfcmVsYXhlZCgxLCBnaTNjLT5zZS5iYXNlICsg U0VfRE1BX1JYX0ZTTV9SU1QpOwo+ICsKPiArCQkJdGltZV9yZW1haW5pbmcgPSB3YWl0X2Zvcl9j b21wbGV0aW9uX3RpbWVvdXQoJmdpM2MtPmRvbmUsIFhGRVJfVElNRU9VVCk7Cj4gKwkJCWRldl9k YmcoZ2kzYy0+c2UuZGV2LCAiVGltZW91dCBjb21wbGV0aW5nIERNQSB0cmFuc2ZlclxuIik7Cj4g KwkJfQo+ICsKPiArCQlpZiAoaXNfd3JpdGUpCj4gKwkJCWdlbmlfc2VfdHhfZG1hX3VucHJlcCgm Z2kzYy0+c2UsIHR4X2RtYSwgbGVuKTsKPiArCQllbHNlCj4gKwkJCWdlbmlfc2VfcnhfZG1hX3Vu cHJlcCgmZ2kzYy0+c2UsIHJ4X2RtYSwgbGVuKTsKPiArCX0KCltTZXZlcml0eTogSGlnaF0KQXJl IHRoZXJlIGNvbXBsZXRpb24gc3luY2hyb25pemF0aW9uIGFuZCBETUEgcmVzZXQgaXNzdWVzIGJl dHdlZW4KX2kzY19nZW5pX2V4ZWN1dGVfY29tbWFuZCgpIGFuZCBnZW5pX2kzY19pcnEoKT8KCjEu IHJlaW5pdF9jb21wbGV0aW9uKCZnaTNjLT5kb25lKSBpcyBvbmx5IGNhbGxlZCBvbmNlIGJlZm9y ZSB0aGUgb3V0ZXIgbG9vcHMgaW4KICAgZ2VuaV9pM2NfbWFzdGVyX3NlbmRfY2NjX2NtZCgpLCBn ZW5pX2kzY19tYXN0ZXJfcHJpdl94ZmVycygpLCBhbmQKICAgZ2VuaV9pM2NfbWFzdGVyX2kyY194 ZmVycygpLCByYXRoZXIgdGhhbiBiZWZvcmUgZWFjaCBjb21tYW5kIGluCiAgIF9pM2NfZ2VuaV9l eGVjdXRlX2NvbW1hbmQoKSBhbmQgYmVmb3JlIHRoZSBTRV9ETUFfVFhfRlNNX1JTVCAvCiAgIFNF X0RNQV9SWF9GU01fUlNUIHdhaXQuCgoyLiBJbiBnZW5pX2kzY19pcnEoKSwgbV9zdGF0ICYgKE1f Q01EX0RPTkVfRU4gfCBNX0NNRF9BQk9SVF9FTikgY2FsbHMKICAgY29tcGxldGUoJmdpM2MtPmRv bmUpIGV2ZW4gd2hlbiBkbWFfbW9kZSBpcyBhY3RpdmUuIEluIEdFTklfU0VfRE1BIG1vZGUsCiAg IGlmIE1fQ01EX0RPTkVfRU4gaXMgb2JzZXJ2ZWQgYmVmb3JlIFRYX0RNQV9ET05FIG9yIFJYX0RN QV9ET05FLCBnaTNjLT5kb25lCiAgIGlzIGNvbXBsZXRlZCBlYXJseSAodW5tYXBwaW5nIHRoZSBE TUEgYnVmZmVyIHdoaWxlIERNQSBpcyBzdGlsbCBhY3RpdmUpIGFuZAogICB0aGVuIGNvbXBsZXRl ZCBhIHNlY29uZCB0aW1lIHdoZW4gRE1BIGZpbmlzaGVzLCBsZWF2aW5nIGdpM2MtPmRvbmUKICAg cHJlLXNpZ25hbGVkIGZvciB0aGUgbmV4dCB0cmFuc2ZlciBpbiBhIG11bHRpLW1lc3NhZ2UgbG9v cCAoc3VjaCBhcyB0aGUKICAgc3RhY2stYWxsb2NhdGVkIHJ4X2J1ZiBhbmQgdHhfYnVmIHRyYW5z ZmVycyBpbiBnZW5pX2kzY19wZXJmb3JtX2RhYSgpKS4KCjMuIFdoZW4gZ2kzYy0+ZXJyIGlzIHNl dCBvbiBhIERNQSB3cml0ZSwgX2kzY19nZW5pX2V4ZWN1dGVfY29tbWFuZCgpIHdyaXRlcyAxCiAg IHRvIFNFX0RNQV9UWF9GU01fUlNUIGFuZCB3YWl0cyBvbiBnaTNjLT5kb25lLCBidXQgZ2VuaV9p M2NfaXJxKCkgb25seSBjaGVja3MKICAgKGRtX3R4X3N0ICYgVFhfRE1BX0RPTkUpIHx8IChkbV9y eF9zdCAmIChSWF9ETUFfRE9ORSB8IFJYX1JFU0VUX0RPTkUpKSBhbmQKICAgbmV2ZXIgY2hlY2tz IFRYX1JFU0VUX0RPTkUgaW4gZG1fdHhfc3QuCgo0LiBJbiBfaTNjX2dlbmlfZXhlY3V0ZV9jb21t YW5kKCksIGdlbmlfc2Vfc2V0dXBfbV9jbWQoKSBpcyBjYWxsZWQgYmVmb3JlCiAgIGdlbmlfc2Vf dHhfZG1hX3ByZXAoKSAvIGdlbmlfc2VfcnhfZG1hX3ByZXAoKTsgaWYgRE1BIG1hcHBpbmcgZmFp bHMsIGl0CiAgIGNhbGxzIGdlbmlfc2Vfc2VsZWN0X21vZGUoKSBhZnRlciB0aGUgaGFyZHdhcmUg Y29tbWFuZCBoYXMgYWxyZWFkeSBzdGFydGVkLgoKWyAuLi4gXQoKPiArc3RhdGljIGludCBnZW5p X2kzY19wZXJmb3JtX2RhYShzdHJ1Y3QgZ2VuaV9pM2NfZGV2ICpnaTNjKQo+ICt7Cj4gKwlzdHJ1 Y3QgZ2VuaV9pM2NfeGZlcl9wYXJhbXMgeGZlciA9IHsgR0VOSV9TRV9GSUZPIH07Cj4gKwlib29s IGZpcnN0X2RldmljZSA9IHRydWU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXdoaWxlICgxKSB7Cj4g KwkJdTggcnhfYnVmWzhdLCB0eF9idWZbMV07Cj4gKwkJdTggYWRkcjsKPiArCQl1NjQgcGlkOwo+ ICsKPiArCQkvKiBSZWFkIFBJRFs0NzowXSwgQkNSLCBEQ1IgZHVyaW5nIEVOVERBQSBmbG93ICov Cj4gKwkJeGZlci5tX2NtZCA9IEkyQ19SRUFEOwo+ICsJCXhmZXIubV9wYXJhbSA9IFNUT1BfU1RS RVRDSCB8IENPTlRJTlVPVVNfTU9ERV9EQUE7Cj4gKwo+ICsJCWlmIChmaXJzdF9kZXZpY2UpIHsK PiArCQkJeGZlci5tX3BhcmFtIHw9IFVTRV83RTsKPiArCQkJZmlyc3RfZGV2aWNlID0gZmFsc2U7 Cj4gKwkJfQo+ICsKPiArCQlyZXQgPSBpM2NfZ2VuaV9leGVjdXRlX3JlYWRfY29tbWFuZChnaTNj LCAmeGZlciwKPiArCQkJCQkJICAgIHJ4X2J1Ziwgc2l6ZW9mKHJ4X2J1ZikpOwo+ICsJCWlmIChy ZXQpIHsKPiArCQkJZGV2X2RiZyhnaTNjLT5zZS5kZXYsCj4gKwkJCQkiREFBIGNvbXBsZXRlLCBu byBtb3JlIHNsYXZlIGRldmljZXNcbiIpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCXBp ZCA9IEZJRUxEX1BSRVAoR0VOTUFTS19VTEwoNDcsIDQwKSwgKHU2NClyeF9idWZbMF0pIHwKPiAr CQkgICAgICBGSUVMRF9QUkVQKEdFTk1BU0tfVUxMKDM5LCAzMiksICh1NjQpcnhfYnVmWzFdKSB8 Cj4gKwkJICAgICAgRklFTERfUFJFUChHRU5NQVNLX1VMTCgzMSwgMjQpLCAodTY0KXJ4X2J1Zlsy XSkgfAo+ICsJCSAgICAgIEZJRUxEX1BSRVAoR0VOTUFTS19VTEwoMjMsIDE2KSwgKHU2NClyeF9i dWZbM10pIHwKPiArCQkgICAgICBGSUVMRF9QUkVQKEdFTk1BU0tfVUxMKDE1LCA4KSwgICh1NjQp cnhfYnVmWzRdKSB8Cj4gKwkJICAgICAgRklFTERfUFJFUChHRU5NQVNLX1VMTCg3LCAwKSwgICAo dTY0KXJ4X2J1Zls1XSk7Cj4gKwo+ICsJCWRldl9kYmcoZ2kzYy0+c2UuZGV2LCAiREFBIGRldmlj ZSBQSUQ6IDB4JTAxMmxseFxuIiwgcGlkKTsKPiArCj4gKwkJYWRkciA9IGkzY19tYXN0ZXJfZ2V0 X2ZyZWVfYWRkcigmZ2kzYy0+Y3RybHIsCj4gKwkJCQkJCWdpM2MtPmxhc3RfYWRkciArIDEpOwo+ ICsJCWlmIChhZGRyID4gSTNDX0FERFJfTUFTSykKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ ICsJCWdpM2MtPmxhc3RfYWRkciA9IGFkZHI7Cj4gKwkJc2V0X2JpdChhZGRyLCBnaTNjLT5uZXdh ZGRyc2xvdHMpOwo+ICsKPiArCQkvKiBEeW5hbWljIGFkZHJlc3MgKyBvZGQgcGFyaXR5IGJpdCAq Lwo+ICsJCXR4X2J1ZlswXSA9IChhZGRyICYgSTNDX0FERFJfTUFTSykgPDwgMTsKPiArCQl0eF9i dWZbMF0gfD0gIXBhcml0eTgoYWRkciAmIEkzQ19BRERSX01BU0spOwo+ICsKPiArCQl4ZmVyLm1f Y21kID0gSTJDX1dSSVRFOwo+ICsJCXhmZXIubV9wYXJhbSA9IFNUT1BfU1RSRVRDSCB8IEJZUEFT U19BRERSX1BIQVNFOwo+ICsKPiArCQlyZXQgPSBpM2NfZ2VuaV9leGVjdXRlX3dyaXRlX2NvbW1h bmQoZ2kzYywgJnhmZXIsIHR4X2J1ZiwgMSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJYnJlYWs7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KCltTZXZlcml0eTogSGlnaF0KRG9lcyBJM0NfQURE Ul9NQVNLIHRydW5jYXRlIDctYml0IEkzQyBkeW5hbWljIGFkZHJlc3NlcyB0byA2IGJpdHMgaW4K Z2VuaV9pM2NfcGVyZm9ybV9kYWEoKT8KCkluIGluY2x1ZGUvbGludXgvaTNjL21hc3Rlci5oLCBJ MkNfTUFYX0FERFIgYW5kIEkzQ19NQVhfQUREUiBhcmUgYm90aCBkZWZpbmVkCmFzIEdFTk1BU0so NiwgMCkgKDB4N2YpLiBEZWZpbmluZyBJM0NfQUREUl9NQVNLIGFzIChJMkNfTUFYX0FERFIgPj4g MSkKZXZhbHVhdGVzIHRvIDB4M2YgKDYzKSBhbmQgbmV3YWRkcnNsb3RzIGlzIHNpemVkIHRvIDY0 IGJpdHMsIHNvCmdlbmlfaTNjX3BlcmZvcm1fZGFhKCkgcmVqZWN0cyBhbGwgdmFsaWQgNy1iaXQg ZHluYW1pYyBhZGRyZXNzZXMgZnJvbSAweDQwIHRvCjB4N2QuCgpUaGVyZSBhbHNvIGFwcGVhciB0 byBiZSBhIGZldyByZWxhdGVkIGlzc3VlcyBpbiB0aGUgREFBIGZsb3c6CgoxLiBpM2NfbWFzdGVy X2dldF9mcmVlX2FkZHIoKSByZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8gKC1FTk9NRU0pIG9uIGZh aWx1cmUsCiAgIHdoaWNoIGlzIHRydW5jYXRlZCBpbnRvIHU4IGFkZHIuCgoyLiBnaTNjLT5sYXN0 X2FkZHIgaXMgbmV2ZXIgcmVzZXQgdG8gMCBiZWZvcmUgREFBIHN0YXJ0cywgc28gc3Vic2VxdWVu dCBEQUEKICAgcnVucyBvciBhZGRyZXNzIHNlYXJjaGVzIHBhc3QgMHgzZiB3aWxsIGZhaWwgdG8g d3JhcCBhcm91bmQgdG8gbG93ZXIgZnJlZQogICBhZGRyZXNzZXMuCgozLiBzZXRfYml0KGFkZHIs IGdpM2MtPm5ld2FkZHJzbG90cykgaXMgY2FsbGVkIGJlZm9yZQogICBpM2NfZ2VuaV9leGVjdXRl X3dyaXRlX2NvbW1hbmQoKTsgaWYgd3JpdGluZyB0aGUgZHluYW1pYyBhZGRyZXNzIGZhaWxzLCB0 aGUKICAgdW5hc3NpZ25lZCBhZGRyZXNzIHJlbWFpbnMgc2V0IGluIG5ld2FkZHJzbG90cyBhbmQK ICAgZ2VuaV9pM2NfbWFzdGVyX2RvX2RhYSgpIHdpbGwgcGFzcyBpdCB0byBpM2NfbWFzdGVyX2Fk ZF9pM2NfZGV2X2xvY2tlZCgpLAogICBwZXJtYW5lbnRseSBtYXJraW5nIHRoZSBhZGRyZXNzIHNs b3QgYXMgdXNlZC4KCjQuIEluIGdlbmlfaTNjX21hc3Rlcl9zZW5kX2NjY19jbWQoKSwgdGhlIHJl dHVybiB2YWx1ZSBvZgogICBnZW5pX2kzY19wZXJmb3JtX2RhYShnaTNjKSBpcyBpZ25vcmVkLCBz byByZXR1cm5pbmcgLUVJTlZBTCBhZnRlciByZWFkaW5nCiAgIHRoZSA4LWJ5dGUgUElEL0JDUi9E Q1Igd2l0aCBTVE9QX1NUUkVUQ0ggfCBDT05USU5VT1VTX01PREVfREFBIGRyb3BzIHRoZQogICBl cnJvciBhbmQgbGVhdmVzIHRoZSBidXMgc3RhbGxlZCB3aXRob3V0IGEgU1RPUCBjb25kaXRpb24u CgpbIC4uLiBdCgo+ICtzdGF0aWMgaW50IGdlbmlfaTNjX21hc3Rlcl9wcml2X3hmZXJzKHN0cnVj dCBpM2NfZGV2X2Rlc2MgKmRldiwgc3RydWN0IGkzY194ZmVyICp4ZmVycywKPiArCQkJCSAgICAg IGludCBueGZlcnMsIGVudW0gaTNjX3hmZXJfbW9kZSBtb2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgaTNj X21hc3Rlcl9jb250cm9sbGVyICptID0gaTNjX2Rldl9nZXRfbWFzdGVyKGRldik7Cj4gKwlzdHJ1 Y3QgZ2VuaV9pM2NfZGV2ICpnaTNjID0gdG9fZ2VuaV9pM2NfbWFzdGVyKG0pOwo+ICsJYm9vbCB1 c2VfN2UgPSBmYWxzZTsKPiArCWludCByZXQ7Cj4gKwo+ICsJc2NvcGVkX2d1YXJkKG11dGV4LCAm Z2kzYy0+bG9jaykgewo+ICsJCXJlaW5pdF9jb21wbGV0aW9uKCZnaTNjLT5kb25lKTsKPiArCQly ZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKGdpM2MtPnNlLmRldik7Cj4gKwkJaWYgKHJldCA8IDAp IHsKPiArCQkJZGV2X2VycihnaTNjLT5zZS5kZXYsICJlcnJvciB0dXJuaW5nIG9uIFNFIHJlc291 cmNlczolZFxuIiwgcmV0KTsKPiArCQkJcG1fcnVudGltZV9wdXRfbm9pZGxlKGdpM2MtPnNlLmRl dik7Cj4gKwkJCXBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChnaTNjLT5zZS5kZXYpOwo+ICsJCQly ZXR1cm4gcmV0Owo+ICsJCX0KPiArCj4gKwkJcWNvbV9nZW5pX2kzY19jb25mKGdpM2MsIFBVU0hf UFVMTF9NT0RFKTsKPiArCj4gKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBueGZlcnM7IGkrKykgewo+ ICsJCQlib29sIHN0YWxsID0gKGkgPCAobnhmZXJzIC0gMSkpOwo+ICsJCQlzdHJ1Y3QgZ2VuaV9p M2NfeGZlcl9wYXJhbXMgeGZlciA9IHsgR0VOSV9TRV9GSUZPIH07Cj4gKwo+ICsJCQl4ZmVyLm1f cGFyYW0gID0gKHN0YWxsID8gU1RPUF9TVFJFVENIIDogMCk7Cj4gKwkJCXhmZXIubV9wYXJhbSB8 PSBGSUVMRF9QUkVQKFNMQVZFX0FERFJfTUFTSywgZGV2LT5pbmZvLmR5bl9hZGRyKTsKPiArCQkJ eGZlci5tX3BhcmFtIHw9ICh1c2VfN2UpID8gVVNFXzdFIDogMDsKPiArCj4gKwkJCS8qIHVzZV83 ZSA9IHRydWUgb25seSBmb3IgbGFzdCB0cmFuc2ZlciAqLwo+ICsJCQl1c2VfN2UgPSAoaSA9PSBu eGZlcnMgLSAxKTsKCltTZXZlcml0eTogSGlnaF0KSW4gZ2VuaV9pM2NfbWFzdGVyX3ByaXZfeGZl cnMoKSwgaXMgVVNFXzdFIGV2ZXIgc2V0IG9uIGFueSB0cmFuc2Zlcj8KCnVzZV83ZSBpcyBpbml0 aWFsaXplZCB0byBmYWxzZSwgYW5kIGluc2lkZSB0aGUgbG9vcCB4ZmVyLm1fcGFyYW0gfD0gKHVz ZV83ZSkgPwpVU0VfN0UgOiAwIGlzIGV2YWx1YXRlZCBiZWZvcmUgdXNlXzdlID0gKGkgPT0gbnhm ZXJzIC0gMSkuIEZvciBhbGwgaXRlcmF0aW9ucwpiZWZvcmUgdGhlIGxhc3Qgb25lLCB1c2VfN2Ug cmVtYWlucyBmYWxzZTsgb24gdGhlIGxhc3QgaXRlcmF0aW9uIChpID09IG54ZmVycyAtCjEpLCB1 c2VfN2UgaXMgc3RpbGwgZmFsc2Ugd2hlbiB4ZmVyLm1fcGFyYW0gaXMgY29uc3RydWN0ZWQgYW5k IGlzIG9ubHkgc2V0IHRvCnRydWUgcmlnaHQgYmVmb3JlIHRoZSBsb29wIGV4aXRzLiBTaG91bGQg VVNFXzdFIGJlIHNldCBvbiB0aGUgZmlyc3QgdHJhbnNmZXIKKGkgPT0gMCksIG1hdGNoaW5nIGdl bmlfaTNjX21hc3Rlcl9zZW5kX2NjY19jbWQoKSBhbmQgZ2VuaV9pM2NfcGVyZm9ybV9kYWEoKT8K CkFsc28sIGlmIG54ZmVycyA9PSAwLCByZXQgc3RpbGwgaG9sZHMgdGhlIHJldHVybiB2YWx1ZSBv ZgpwbV9ydW50aW1lX2dldF9zeW5jKCksIHdoaWNoIGNhbiBiZSAxIHdoZW4gdGhlIGRldmljZSBp cyBhbHJlYWR5IGFjdGl2ZS4KClsgLi4uIF0KCj4gK3N0YXRpYyBpbnQgZ2VuaV9pM2NfbWFzdGVy X2kyY194ZmVycyhzdHJ1Y3QgaTJjX2Rldl9kZXNjICpkZXYsIHN0cnVjdCBpMmNfbXNnICptc2dz LCBpbnQgbnVtKQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICptID0gaTJj X2Rldl9nZXRfbWFzdGVyKGRldik7Cj4gKwlzdHJ1Y3QgZ2VuaV9pM2NfZGV2ICpnaTNjID0gdG9f Z2VuaV9pM2NfbWFzdGVyKG0pOwo+ICsJaW50IHJldDsKPiArCj4gKwlndWFyZChtdXRleCkoJmdp M2MtPmxvY2spOwo+ICsJcmVpbml0X2NvbXBsZXRpb24oJmdpM2MtPmRvbmUpOwo+ICsKPiArCXJl dCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZ2kzYy0+c2UuZGV2KTsKPiArCWlmIChyZXQgPCAwKSB7 Cj4gKwkJZGV2X2VycihnaTNjLT5zZS5kZXYsICJFcnJvciB0dXJuaW5nIG9uIFNFIHJlc291cmNl czolZFxuIiwgcmV0KTsKPiArCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUoZ2kzYy0+c2UuZGV2KTsK PiArCQlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZ2kzYy0+c2UuZGV2KTsKPiArCQlyZXR1cm4g cmV0Owo+ICsJfQo+ICsKPiArCXFjb21fZ2VuaV9pM2NfY29uZihnaTNjLCBPUEVOX0RSQUlOX01P REUpOwo+ICsKPiArCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKPiArCQlzdHJ1Y3Qg Z2VuaV9pM2NfeGZlcl9wYXJhbXMgeGZlcjsKPiArCj4gKwkJeGZlci5tX2NtZCAgICA9IChtc2dz W2ldLmZsYWdzICYgSTJDX01fUkQpID8gSTJDX1JFQUQgOiBJMkNfV1JJVEU7Cj4gKwkJeGZlci5t X3BhcmFtICA9IChpIDwgKG51bSAtIDEpKSA/IFNUT1BfU1RSRVRDSCA6IDA7Cj4gKwkJeGZlci5t X3BhcmFtIHw9IEZJRUxEX1BSRVAoU0xBVkVfQUREUl9NQVNLLCBtc2dzW2ldLmFkZHIpOwo+ICsJ CXhmZXIubW9kZSAgICAgPSBtc2dzW2ldLmxlbiA+IChnaTNjLT50eF9kZXB0aCAvIDIpID8KPiAr CQkJCUdFTklfU0VfRE1BIDogR0VOSV9TRV9GSUZPOwo+ICsJCWlmIChtc2dzW2ldLmZsYWdzICYg STJDX01fUkQpCj4gKwkJCXJldCA9IGkzY19nZW5pX2V4ZWN1dGVfcmVhZF9jb21tYW5kKGdpM2Ms ICZ4ZmVyLCBtc2dzW2ldLmJ1ZiwKPiArCQkJCQkJCSAgICBtc2dzW2ldLmxlbik7Cj4gKwkJZWxz ZQo+ICsJCQlyZXQgPSBpM2NfZ2VuaV9leGVjdXRlX3dyaXRlX2NvbW1hbmQoZ2kzYywgJnhmZXIs IG1zZ3NbaV0uYnVmLAo+ICsJCQkJCQkJICAgICBtc2dzW2ldLmxlbik7CgpbU2V2ZXJpdHk6IENy aXRpY2FsXQpJcyBpdCBzYWZlIHRvIHBhc3MgbXNnc1tpXS5idWYgZGlyZWN0bHkgdG8gR0VOSV9T RV9ETUEgaW4KZ2VuaV9pM2NfbWFzdGVyX2kyY194ZmVycygpIHdpdGhvdXQgaTJjX2dldF9kbWFf c2FmZV9tc2dfYnVmKCk/CgpUaGUgSTJDL0kzQyBjb3JlIGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0 IGkyY19tc2cgYnVmZmVycyBhcmUgRE1BLXNhZmUgKGZvcgppbnN0YW5jZSwgaTNjX21hc3Rlcl9p MmNfZnVuY3MoKSBhZHZlcnRpc2VzIEkyQ19GVU5DX1NNQlVTX0VNVUwsIHdoZXJlCmkyY19zbWJ1 c194ZmVyX2VtdWxhdGVkKCkgcGFzc2VzIHN0YWNrLWFsbG9jYXRlZCBidWZmZXJzIHVwIHRvIDM0 IGJ5dGVzKS4gV2hlbgptc2dzW2ldLmxlbiA+IChnaTNjLT50eF9kZXB0aCAvIDIpLCBfaTNjX2dl bmlfZXhlY3V0ZV9jb21tYW5kKCkgY2FsbHMKZ2VuaV9zZV90eF9kbWFfcHJlcCgpIC8gZ2VuaV9z ZV9yeF9kbWFfcHJlcCgpLCB3aGljaCBtYXBzIG1zZ3NbaV0uYnVmIGRpcmVjdGx5CndpdGggZG1h X21hcF9zaW5nbGUoKS4gU2hvdWxkIHRoaXMgdXNlIGkyY19nZXRfZG1hX3NhZmVfbXNnX2J1Zigp IGFuZAppMmNfcHV0X2RtYV9zYWZlX21zZ19idWYoKSBsaWtlIGkyYy1xY29tLWdlbmkuYyBkb2Vz PwoKQWxzbywgaW4gaTNjX2dlbmlfcmVzb3VyY2VzX2luaXQoKSwgZ2kzYy0+c2UuaWNjX3BhdGhz W0dFTklfVE9fRERSXS5hdmdfYncgaXMKbGVmdCBhdCAwIGJlZm9yZSBjYWxsaW5nIGdlbmlfaWNj X3NldF9idygmZ2kzYy0+c2UpLCBzbyB0aGUgRERSIGludGVyY29ubmVjdApwYXRoIGlzIG5vdCB2 b3RlZCBmb3Igd2hlbiBHRU5JX1NFX0RNQSBpcyB1c2VkLgoKWyAuLi4gXQoKPiArc3RhdGljIGlu dCBnZW5pX2kzY19od19pbml0KHN0cnVjdCBnZW5pX2kzY19kZXYgKmdpM2MsIHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXUzMiBwcm90bywgZmlmb19kaXNhYmxlOwo+ICsK PiArCXByb3RvID0gZ2VuaV9zZV9yZWFkX3Byb3RvKCZnaTNjLT5zZSk7Cj4gKwlpZiAocHJvdG8g IT0gR0VOSV9TRV9JM0MpIHsKPiArCQlnZW5pX3NlX3Jlc291cmNlc19vZmYoJmdpM2MtPnNlKTsK PiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShnaTNjLT5zZS5kZXYsIC1FTlhJTywgIkludmFsaWQg cHJvdG8gJWRcbiIsIHByb3RvKTsKPiArCX0KPiArCj4gKwlmaWZvX2Rpc2FibGUgPSByZWFkbF9y ZWxheGVkKGdpM2MtPnNlLmJhc2UgKyBHRU5JX0lGX0RJU0FCTEVfUk8pOwo+ICsJaWYgKGZpZm9f ZGlzYWJsZSkgewo+ICsJCWdlbmlfc2VfcmVzb3VyY2VzX29mZigmZ2kzYy0+c2UpOwo+ICsJCXJl dHVybiBkZXZfZXJyX3Byb2JlKGdpM2MtPnNlLmRldiwgLUVOWElPLCAiR1BJIERNQSBtb2RlIG5v dCBzdXBwb3J0ZWRcbiIpOwo+ICsJfQoKWyAuLi4gXQoKPiArCXJldCA9IGRldm1fcmVxdWVzdF9p cnEoJnBkZXYtPmRldiwgZ2kzYy0+aXJxLCBnZW5pX2kzY19pcnEsCj4gKwkJCSAgICAgICBJUlFG X05PX0FVVE9FTiwgZGV2X25hbWUoJnBkZXYtPmRldiksIGdpM2MpOwo+ICsJaWYgKHJldCkKPiAr CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmcGRldi0+ZGV2LCByZXQsICJFcnJvciByZWdpc3Rlcmlu ZyBjb3JlIElSUVxuIik7Cj4gKwo+ICsJcmV0ID0gZ2VuaV9zZV9yZXNvdXJjZXNfb24oJmdpM2Mt PnNlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJnBkZXYtPmRldiwg cmV0LCAiRXJyb3IgdHVybmluZyByZXNvdXJjZXMgT05cbiIpOwo+ICsKPiArCXJldCA9IGdlbmlf aTNjX2h3X2luaXQoZ2kzYywgcGRldik7Cj4gKwlnZW5pX3NlX3Jlc291cmNlc19vZmYoJmdpM2Mt PnNlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKCltTZXZlcml0eTogTWVkaXVtXQpJ ZiBnZW5pX2kzY19od19pbml0KCkgZmFpbHMsIGRvZXNuJ3QgZ2VuaV9pM2NfcHJvYmUoKSBjYWxs Cmdlbmlfc2VfcmVzb3VyY2VzX29mZigmZ2kzYy0+c2UpIGEgc2Vjb25kIHRpbWU/CgpCb3RoIGVy cm9yIHBhdGhzIGluIGdlbmlfaTNjX2h3X2luaXQoKSBhbHJlYWR5IGNhbGwKZ2VuaV9zZV9yZXNv dXJjZXNfb2ZmKCZnaTNjLT5zZSkgYmVmb3JlIHJldHVybmluZywgYW5kIGdlbmlfaTNjX3Byb2Jl KCkgdGhlbgp1bmNvbmRpdGlvbmFsbHkgY2FsbHMgZ2VuaV9zZV9yZXNvdXJjZXNfb2ZmKCZnaTNj LT5zZSkgYWdhaW4sIHVuZGVyZmxvd2luZyB0aGUKY2xvY2sgZW5hYmxlL3ByZXBhcmUgY291bnRz IG9uIHNlLT5jbGsgYW5kIHRoZSBwYXJlbnQgUVVQIHdyYXBwZXIgY2xvY2tzLgoKW1NldmVyaXR5 OiBIaWdoXQpXaGF0IGhhcHBlbnMgZHVyaW5nIGdlbmlfaTNjX3Byb2JlKCkgd2hlbiBDT05GSUdf UE0gaXMgZGlzYWJsZWQ/CgpnZW5pX2kzY19wcm9iZSgpIHJlcXVlc3RzIGdpM2MtPmlycSB3aXRo IElSUUZfTk9fQVVUT0VOIGFuZCBjYWxscwpnZW5pX3NlX3Jlc291cmNlc19vZmYoJmdpM2MtPnNl KSBiZWZvcmUgaTNjX21hc3Rlcl9yZWdpc3RlcigpLiBXaGVuIENPTkZJR19QTQppcyBkaXNhYmxl ZCwgcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldCgpIGluIGdlbmlfaTNjX21hc3Rlcl9idXNfaW5p dCgpIGFuZApwbV9ydW50aW1lX2dldF9zeW5jKCkgaW4gdGhlIHRyYW5zZmVyIHBhdGhzIGRvIG5v dCBpbnZva2UKZ2VuaV9pM2NfcnVudGltZV9yZXN1bWUoKSwgc28gcWNvbV9nZW5pX2kzY19jb25m KCkgd2lsbCBhY2Nlc3MgdW5jbG9ja2VkIEdFTkkKcmVnaXN0ZXJzIGR1cmluZyBpM2NfbWFzdGVy X3JlZ2lzdGVyKCkgYW5kIHRoZSBJUlEgd2lsbCByZW1haW4gZGlzYWJsZWQuCgpbIC4uLiBdCgo+ ICtzdGF0aWMgaW50IGdlbmlfaTNjX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYp Cj4gK3sKPiArCXN0cnVjdCBnZW5pX2kzY19kZXYgKmdpM2MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKPiArCj4gKwlkaXNhYmxlX2lycShnaTNjLT5pcnEpOwo+ICsJZ2VuaV9zZV9yZXNvdXJjZXNf b2ZmKCZnaTNjLT5zZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KCltTZXZlcml0eTogTWVkaXVt XQpTaG91bGQgZ2VuaV9pM2NfcnVudGltZV9zdXNwZW5kKCkgY2hlY2sgdGhlIHJldHVybiB2YWx1 ZSBvZgpnZW5pX3NlX3Jlc291cmNlc19vZmYoKT8KCklmIHBpbmN0cmxfcG1fc2VsZWN0X3NsZWVw X3N0YXRlKCkgZmFpbHMgaW5zaWRlIGdlbmlfc2VfcmVzb3VyY2VzX29mZigpLCB0aGUKY2xvY2tz IHJlbWFpbiBlbmFibGVkIHdoaWxlIGdlbmlfaTNjX3J1bnRpbWVfc3VzcGVuZCgpIGxlYXZlcyBn aTNjLT5pcnEKZGlzYWJsZWQgYW5kIHJldHVybnMgMCwgY2F1c2luZyB0aGUgbmV4dCBydW50aW1l IHJlc3VtZSB0byBjYWxsCmdlbmlfc2VfcmVzb3VyY2VzX29uKCkgYWdhaW4gYW5kIGxlYWsgdGhl IGNsb2NrIGVuYWJsZSBjb3VudC4KCi0tIApTYXNoaWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nh c2hpa28uZGV2LyMvcGF0Y2hzZXQvMjAyNjExMDQxMjIxNTUuMzc4OTM0Ni0xLW11a2VzaC5zYXZh bGl5YUBvc3MucXVhbGNvbW0uY29tP3BhcnQ9MgoKLS0gCmxpbnV4LWkzYyBtYWlsaW5nIGxpc3QK bGludXgtaTNjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1pM2MK