From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5AC31C77B61 for ; Thu, 27 Apr 2023 06:35:22 +0000 (UTC) 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:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:References:Cc:To:Subject: From:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=NvpHJjdUMGaESjFPYF4lrfZKNCfDe//MLkFFjkgG/xo=; b=zDIlWAfWuT1EbP qvgdiU3p9wL1pgcOJhINvDc5sryBjdB47RoQ+OPuCcX/6UE8PPu1ZwxMwnLWcoY0liKjj5PFrUwRe MhGtxWPYwA5JFdC7msIokJd566IQYDDrnklMdsRKytCyIgH4cSzwMui8Gx49V7IKBlnoWKZlLnswG 7hzmDziPvo/AwOE6nb4B07cNOYeTtu++Vap0s6XFsxaDIAFfhaTYOMeN6JfMrP5CJSAbwCxpnk3j5 WspZA39IrFqHuEqKwQa5EgZtmNALYG+cxK8eNsF0iHDSVVqHvuW69gHteCPPCTJo0is2n+XTPAvwa tLwT7eGtLVKZUXd+AOog==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1prvCo-005ZAn-2h; Thu, 27 Apr 2023 06:34:14 +0000 Received: from out30-113.freemail.mail.aliyun.com ([115.124.30.113]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1prvCh-005Z97-3C for linux-arm-kernel@lists.infradead.org; Thu, 27 Apr 2023 06:34:13 +0000 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R911e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018045192;MF=xueshuai@linux.alibaba.com;NM=1;PH=DS;RN=12;SR=0;TI=SMTPD_---0Vh6GU01_1682577233; Received: from 30.240.114.50(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0Vh6GU01_1682577233) by smtp.aliyun-inc.com; Thu, 27 Apr 2023 14:33:54 +0800 Message-ID: <7aec4dbd-91d5-2a14-8779-f239a58cbbae@linux.alibaba.com> Date: Thu, 27 Apr 2023 14:33:50 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 From: Shuai Xue Subject: Re: [PATCH v3 2/3] drivers/perf: add DesignWare PCIe PMU driver To: Robin Murphy , helgaas@kernel.org, yangyicong@huawei.com, will@kernel.org, Jonathan.Cameron@huawei.com, baolin.wang@linux.alibaba.com Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, rdunlap@infradead.org, mark.rutland@arm.com, zhuo.song@linux.alibaba.com References: <20220917121036.14864-1-xueshuai@linux.alibaba.com> <20230417061729.84422-3-xueshuai@linux.alibaba.com> Content-Language: en-US In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230426_233408_611294_2EEFC517 X-CRM114-Status: GOOD ( 29.95 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAyMDIzLzQvMTkgQU03OjMwLCBSb2JpbiBNdXJwaHkgd3JvdGU6Cj4gT24gMjAyMy0wNC0x NyAwNzoxNywgU2h1YWkgWHVlIHdyb3RlOgo+PiBUaGlzIGNvbW1pdCBhZGRzIHRoZSBQQ0llIFBl cmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBkcml2ZXIgc3VwcG9ydAo+PiBmb3IgVC1I ZWFkIFlpdGlhbiBTb0MgY2hpcC4gWWl0aWFuIGlzIGJhc2VkIG9uIHRoZSBTeW5vcHN5cyBQQ0kg RXhwcmVzcwo+PiBDb3JlIGNvbnRyb2xsZXIgSVAgd2hpY2ggcHJvdmlkZXMgc3RhdGlzdGljcyBm ZWF0dXJlLiBUaGUgUE1VIGlzIG5vdCBhIFBDSWUKPj4gUm9vdCBDb21wbGV4IGludGVncmF0ZWQg RW5kIFBvaW50KFJDaUVQKSBkZXZpY2UgYnV0IG9ubHkgcmVnaXN0ZXIgY291bnRlcnMKPj4gcHJv dmlkZWQgYnkgZWFjaCBQQ0llIFJvb3QgUG9ydC4KPj4KPj4gVG8gZmFjaWxpdGF0ZSBjb2xsZWN0 aW9uIG9mIHN0YXRpc3RpY3MgdGhlIGNvbnRyb2xsZXIgcHJvdmlkZXMgdGhlCj4+IGZvbGxvd2lu ZyB0d28gZmVhdHVyZXMgZm9yIGVhY2ggUm9vdCBQb3J0Ogo+Pgo+PiAtIFRpbWUgQmFzZWQgQW5h bHlzaXMgKFJYL1RYIGRhdGEgdGhyb3VnaHB1dCBhbmQgdGltZSBzcGVudCBpbiBlYWNoCj4+IMKg wqAgbG93LXBvd2VyIExUU1NNIHN0YXRlKQo+PiAtIEV2ZW50IGNvdW50ZXJzIChFcnJvciBhbmQg Tm9uLUVycm9yIGZvciBsYW5lcykKPj4KPj4gTm90ZSwgb25seSBvbmUgY291bnRlciBmb3IgZWFj aCB0eXBlIGFuZCBkb2VzIG5vdCBvdmVyZmxvdyBpbnRlcnJ1cHQuCj4+Cj4+IFRoaXMgZHJpdmVy IGFkZHMgUE1VIGRldmljZXMgZm9yIGVhY2ggUENJZSBSb290IFBvcnQuIEFuZCB0aGUgUE1VIGRl dmljZSBpcwo+PiBuYW1lZCBiYXNlZCB0aGUgQkRGIG9mIFJvb3QgUG9ydC4gRm9yIGV4YW1wbGUs Cj4+Cj4+IMKgwqDCoMKgIDMwOjAzLjAgUENJIGJyaWRnZTogRGV2aWNlIDFkZWQ6ODAwMCAocmV2 IDAxKQo+Pgo+PiB0aGUgUE1VIGRldmljZSBuYW1lIGZvciB0aGlzIFJvb3QgUG9ydCBpcyBkd2Nf cm9vdHBvcnRfMzAxOC4KPj4KPj4gRXhhbXBsZSB1c2FnZSBvZiBjb3VudGluZyBQQ0llIFJYIFRM UCBkYXRhIHBheWxvYWQgKFVuaXRzIG9mIDE2IGJ5dGVzKTo6Cj4+Cj4+IMKgwqDCoMKgICQjIHBl cmYgc3RhdCAtYSAtZSBkd2Nfcm9vdHBvcnRfMzAxOC9SeF9QQ0llX1RMUF9EYXRhX1BheWxvYWQv Cj4+Cj4+IGF2ZXJhZ2UgUlggYmFuZHdpZHRoIGNhbiBiZSBjYWxjdWxhdGVkIGxpa2UgdGhpczoK Pj4KPj4gwqDCoMKgwqAgUENJZSBUWCBCYW5kd2lkdGggPSBQQ0lFX1RYX0RBVEEgKiAxNkIgLyBN ZWFzdXJlX1RpbWVfV2luZG93Cj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFNodWFpIFh1ZSA8eHVlc2h1 YWlAbGludXguYWxpYmFiYS5jb20+Cj4+IC0tLQo+PiDCoCBkcml2ZXJzL3BlcmYvS2NvbmZpZ8Kg wqDCoMKgwqDCoMKgIHzCoMKgIDcgKwo+PiDCoCBkcml2ZXJzL3BlcmYvTWFrZWZpbGXCoMKgwqDC oMKgwqAgfMKgwqAgMSArCj4+IMKgIGRyaXZlcnMvcGVyZi9kd2NfcGNpZV9wbXUuYyB8IDg1NSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gwqAgMyBmaWxlcyBjaGFuZ2Vk LCA4NjMgaW5zZXJ0aW9ucygrKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wZXJm L2R3Y19wY2llX3BtdS5jCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BlcmYvS2NvbmZpZyBi L2RyaXZlcnMvcGVyZi9LY29uZmlnCj4+IGluZGV4IDY2YzI1OTAwMGE0NC4uNTdiY2UzODgwY2Jh IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3BlcmYvS2NvbmZpZwo+PiArKysgYi9kcml2ZXJzL3Bl cmYvS2NvbmZpZwo+PiBAQCAtMTk5LDYgKzE5OSwxMyBAQCBjb25maWcgTUFSVkVMTF9DTjEwS19E RFJfUE1VCj4+IMKgwqDCoMKgwqDCoMKgIEVuYWJsZSBwZXJmIHN1cHBvcnQgZm9yIE1hcnZlbGwg RERSIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcKPj4gwqDCoMKgwqDCoMKgwqAgZXZlbnQgb24gQ04x MEsgcGxhdGZvcm0uCj4+IMKgICtjb25maWcgRFdDX1BDSUVfUE1VCj4+ICvCoMKgwqAgdHJpc3Rh dGUgIkVuYWJsZSBTeW5vcHN5cyBEZXNpZ25XYXJlIFBDSWUgUE1VIFN1cHBvcnQiCj4+ICvCoMKg wqAgZGVwZW5kcyBvbiBBUk02NCB8fCAoQ09NUElMRV9URVNUICYmIDY0QklUKQo+IAo+IElzIHRo ZXJlIGFueXRoaW5nIGhlcmUgdGhhdCByZWFsbHkgZGVwZW5kcyBvbiA2NEJJVD8gTm90aGluZyBv YnZpb3VzIHN0YW5kcyBvdXQuCj4gCj4+ICvCoMKgwqAgaGVscAo+PiArwqDCoMKgwqDCoCBFbmFi bGUgcGVyZiBzdXBwb3J0IGZvciBTeW5vcHN5cyBEZXNpZ25XYXJlIFBDSWUgUE1VIFBlcmZvcm1h bmNlCj4+ICvCoMKgwqDCoMKgIG1vbml0b3JpbmcgZXZlbnQgb24gWWl0aWFuIDcxMCBwbGF0Zm9y bS4KPj4gKwo+PiDCoCBzb3VyY2UgImRyaXZlcnMvcGVyZi9hcm1fY3NwbXUvS2NvbmZpZyIKPj4g wqAgwqAgc291cmNlICJkcml2ZXJzL3BlcmYvYW1sb2dpYy9LY29uZmlnIgo+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9wZXJmL01ha2VmaWxlIGIvZHJpdmVycy9wZXJmL01ha2VmaWxlCj4+IGluZGV4 IDEzZTQ1ZGE2MTEwMC4uM2YyMzNlOTY1MjRlIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3BlcmYv TWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy9wZXJmL01ha2VmaWxlCj4+IEBAIC0yMSw1ICsyMSw2 IEBAIG9iai0kKENPTkZJR19NQVJWRUxMX0NOMTBLX1RBRF9QTVUpICs9IG1hcnZlbGxfY24xMGtf dGFkX3BtdS5vCj4+IMKgIG9iai0kKENPTkZJR19NQVJWRUxMX0NOMTBLX0REUl9QTVUpICs9IG1h cnZlbGxfY24xMGtfZGRyX3BtdS5vCj4+IMKgIG9iai0kKENPTkZJR19BUFBMRV9NMV9DUFVfUE1V KSArPSBhcHBsZV9tMV9jcHVfcG11Lm8KPj4gwqAgb2JqLSQoQ09ORklHX0FMSUJBQkFfVU5DT1JF X0RSV19QTVUpICs9IGFsaWJhYmFfdW5jb3JlX2Ryd19wbXUubwo+PiArb2JqLSQoQ09ORklHX0RX Q19QQ0lFX1BNVSkgKz0gZHdjX3BjaWVfcG11Lm8KPj4gwqAgb2JqLSQoQ09ORklHX0FSTV9DT1JF U0lHSFRfUE1VX0FSQ0hfU1lTVEVNX1BNVSkgKz0gYXJtX2NzcG11Lwo+PiDCoCBvYmotJChDT05G SUdfTUVTT05fRERSX1BNVSkgKz0gYW1sb2dpYy8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVy Zi9kd2NfcGNpZV9wbXUuYyBiL2RyaXZlcnMvcGVyZi9kd2NfcGNpZV9wbXUuYwo+PiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmI3NjkxY2ZlMGRmNAo+PiAtLS0g L2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvcGVyZi9kd2NfcGNpZV9wbXUuYwo+PiBAQCAtMCww ICsxLDg1NSBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPj4gKy8q Cj4+ICsgKiBTeW5vcHN5cyBEZXNpZ25XYXJlIFBDSWUgUE1VIGRyaXZlcgo+PiArICoKPj4gKyAq IENvcHlyaWdodCAoQykgMjAyMS0yMDIzIEFsaWJhYmEgSW5jLgo+PiArICovCj4+ICsKPj4gKyNp bmNsdWRlIDxsaW51eC9wY2kuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2NwdWhvdHBsdWcu aD4KPj4gKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZGV2 aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv cGVyZl9ldmVudC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L3NtcC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Cj4+ICsj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPj4gKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTElCQUJB IDB4MWRlZAo+IAo+IFNob3VsZG4ndCB0aGF0IGJlbG9uZyBpbiBsaW51eC9wY2lfaWRzLmg/CgpZ ZXMsIGl0IGFsc28gZXhpc3QgaW4gZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX2h3 LmgKSSB3aWxsIGFkZCBhIHByZXBhcmUgcGF0Y2ggdG8gZGVmaW5lIGl0IGluIGxpbnV4L3BjaV9p ZHMuaC4KCj4gCj4+ICsKPj4gKyNkZWZpbmUgQVRUUklfTkFNRV9NQVhfU0laRcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgMzIKPj4gKyNkZWZpbmUgRFdDX1BDSUVfVlNFQ19SQVNfREVTX0lEwqDCoMKg wqDCoMKgwqAgMHgwMgo+PiArCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0VWRU5UX0NOVF9DVEzCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIDB4OAo+PiArI2RlZmluZSBEV0NfUENJRV9DTlRfRVZFTlRfU0VM wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDI3LCAxNikKPj4gKyNkZWZpbmUgRFdDX1BD SUVfQ05UX0xBTkVfU0VMwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDExLCA4KQo+PiAr I2RlZmluZSBEV0NfUENJRV9DTlRfU1RBVFVTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoNykK Pj4gKyNkZWZpbmUgRFdDX1BDSUVfQ05UX0VOQUJMRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VO TUFTSyg0LCAyKQo+PiArI2RlZmluZSBEV0NfUENJRV9QRVJfRVZFTlRfT0ZGwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBGSUVMRF9QUkVQKERXQ19QQ0lFX0NOVF9FTkFCTEUsIDB4MSkKPj4gKyNkZWZp bmUgRFdDX1BDSUVfUEVSX0VWRU5UX09OwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGSUVMRF9QUkVQ KERXQ19QQ0lFX0NOVF9FTkFCTEUsIDB4MykKPiAKPiBUaG9zZSB0d28gZG9uJ3QgbG9vayByaWdo dC4uLiA6LwoKWW91IGFyZSByaWdodCwgdGhvc2UgdHdvIGFyZSBhIG5lc3RlZCBGSUVMRF9QUkVQ LCB3aWxsIGZpeCBpdCEKCj4gCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0VWRU5UX0NMRUFSwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDEsIDApCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0VWRU5U X1BFUl9DTEVBUsKgwqDCoMKgwqDCoMKgIDB4MQo+PiArCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0VW RU5UX0NOVF9EQVRBwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweEMKPj4gKwo+PiArI2RlZmluZSBE V0NfUENJRV9USU1FX0JBU0VEX0FOQUxfQ1RMwqDCoMKgwqDCoMKgwqAgMHgxMAo+PiArI2RlZmlu ZSBEV0NfUENJRV9USU1FX0JBU0VEX1JFUE9SVF9TRUzCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDMx LCAyNCkKPj4gKyNkZWZpbmUgRFdDX1BDSUVfVElNRV9CQVNFRF9EVVJBVElPTl9TRUzCoMKgwqAg R0VOTUFTSygxNSwgOCkKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVSQVRJT05fTUFOVUFMX0NUTMKg wqDCoMKgwqDCoMKgIDB4MAo+PiArI2RlZmluZSBEV0NfUENJRV9EVVJBVElPTl8xTVPCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIDB4MQo+PiArI2RlZmluZSBEV0NfUENJRV9EVVJBVElPTl8xME1TwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAweDIKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVSQVRJT05fMTAw TVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4Mwo+PiArI2RlZmluZSBEV0NfUENJRV9EVVJBVElP Tl8xU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHg0Cj4+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFU SU9OXzJTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDUKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVS QVRJT05fNFPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4Ngo+PiArI2RlZmluZSBEV0NfUENJRV9E VVJBVElPTl80VVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4ZmYKPj4gKyNkZWZpbmUgRFdDX1BD SUVfVElNRV9CQVNFRF9USU1FUl9TVEFSVMKgwqDCoMKgIEJJVCgwKQo+PiArI2RlZmluZSBEV0Nf UENJRV9USU1FX0JBU0VEX0NOVF9FTkFCTEXCoMKgwqDCoMKgwqDCoCAweDEKPj4gKwo+PiArI2Rl ZmluZSBEV0NfUENJRV9USU1FX0JBU0VEX0FOQUxfREFUQV9SRUdfTE9XwqDCoMKgIDB4MTQKPj4g KyNkZWZpbmUgRFdDX1BDSUVfVElNRV9CQVNFRF9BTkFMX0RBVEFfUkVHX0hJR0jCoMKgwqAgMHgx OAo+PiArCj4+ICsvKiBFdmVudCBhdHRyaWJ1dGVzICovCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0NP TkZJR19FVkVOVElEwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDE1LCAwKQo+PiArI2Rl ZmluZSBEV0NfUENJRV9DT05GSUdfVFlQRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygx OSwgMTYpCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0NPTkZJR19MQU5FwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBHRU5NQVNLKDI3LCAyMCkKPj4gKwo+PiArI2RlZmluZSBEV0NfUENJRV9FVkVOVF9JRChl dmVudCnCoMKgwqAgRklFTERfR0VUKERXQ19QQ0lFX0NPTkZJR19FVkVOVElELCAoZXZlbnQpLT5h dHRyLmNvbmZpZykKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRVZFTlRfVFlQRShldmVudCnCoMKgwqAg RklFTERfR0VUKERXQ19QQ0lFX0NPTkZJR19UWVBFLCAoZXZlbnQpLT5hdHRyLmNvbmZpZykKPj4g KyNkZWZpbmUgRFdDX1BDSUVfRVZFTlRfTEFORShldmVudCnCoMKgwqAgRklFTERfR0VUKERXQ19Q Q0lFX0NPTkZJR19MQU5FLCAoZXZlbnQpLT5hdHRyLmNvbmZpZykKPj4gKwo+PiArZW51bSBkd2Nf cGNpZV9ldmVudF90eXBlIHsKPj4gK8KgwqDCoCBEV0NfUENJRV9UWVBFX0lOVkFMSUQsCj4+ICvC oMKgwqAgRFdDX1BDSUVfVElNRV9CQVNFX0VWRU5ULAo+PiArwqDCoMKgIERXQ19QQ0lFX0xBTkVf RVZFTlQsCj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZHdjX2V2ZW50X2NvdW50ZXJzIHsKPj4gK8Kg wqDCoCBjb25zdCBjaGFyIG5hbWVbMzJdOwo+PiArwqDCoMKgIHUzMiBldmVudF9pZDsKPj4gK307 Cj4+ICsKPj4gK3N0cnVjdCBkd2NfcGNpZV9wbXUgewo+PiArwqDCoMKgIHN0cnVjdCBobGlzdF9u b2RlIG5vZGU7Cj4gCj4gVGhpcyBpc24ndCB1c2VkIGFueXdoZXJlIChidXQgaXQgc2hvdWxkIGJl KS4KClllcywgSSB3aWxsIHJlZmF0b3IgdGhpcyBzdHJ1Y3QuCgo+IAo+PiArwqDCoMKgIHVuc2ln bmVkIGludCBvbl9jcHU7Cj4+ICvCoMKgwqAgc3RydWN0IHBtdSBwbXU7Cj4+ICvCoMKgwqAgc3Ry dWN0IGRldmljZSAqZGV2Owo+PiArfTsKPj4gKwo+PiArc3RydWN0IGR3Y19wY2llX3JwX2luZm8g ewo+PiArwqDCoMKgIHUzMiBiZGY7Cj4+ICvCoMKgwqAgdTMyIHJhc19kZXM7Cj4+ICvCoMKgwqAg dTMyIG51bV9sYW5lczsKPj4gKwo+PiArwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWQgcnBfbm9kZTsK Pj4gK8KgwqDCoCBzdHJ1Y3QgcGNpX2RldiAqcGRldjsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3Bj aWVfcG11IHBjaWVfcG11Owo+PiArwqDCoMKgIGJvb2wgcG11X2lzX3JlZ2lzdGVyOwo+PiArwqDC oMKgIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKPj4gKwo+PiArwqDCoMKgIHN0cnVjdCBkd2Nf cGNpZV9ldmVudF9hdHRyICpsYW5lX2V2ZW50X2F0dHJzOwo+PiArwqDCoMKgIHN0cnVjdCBhdHRy aWJ1dGUgKipwY2llX3BtdV9ldmVudF9hdHRyczsKPj4gK8KgwqDCoCBzdHJ1Y3QgYXR0cmlidXRl X2dyb3VwIHBjaWVfcG11X2V2ZW50X2F0dHJzX2dyb3VwOwo+PiArwqDCoMKgIGNvbnN0IHN0cnVj dCBhdHRyaWJ1dGVfZ3JvdXAgKnBjaWVfcG11X2F0dHJfZ3JvdXBzWzRdOwo+PiArfTsKPiAKPiBJ cyB0aGVyZSBhbnkgcGFydGljdWxhciByZWFzb24gZm9yIHRoZSBzZWVtaW5nbHkgYXJiaXRyYXJ5 IHNwbGl0IGJldHdlZW4gZHdjX3BjaWVfcG11IGFuZCBkd2NfcGNpZV9ycF9pbmZvPyBJdCBkb2Vz bid0IGFwcGVhciBvYnZpb3VzIGZyb20gdGhlIGRlc2lnbiBvZiB0aGUgY29kZTsgaWYgYW55dGhp bmcgaXQgbW9zdGx5IGp1c3Qgc2VlbXMgdG8gbWFrZSB0aGluZ3MgYSBiaXQgbW9yZSBidXN5IHRo YW4gdGhleSBuZWVkIHRvIGJlLgoKTm8gcGFydGljdWxhciByZWFzb24sIEkgaW50ZW5kIHRvIGNv bGxlY3Qgcm9vdCBwb3J0IHNwZWNpZmljIGluZm8gdG8gZHdjX3BjaWVfcnBfaW5mbyBhbmQKZGVm aW5lIFBNVSBzcGVjaWZpYyB0byBkd2NfcGNpZV9wbXUuCgpJIHdpbGwgbW92ZSBpdCB0b2dvdGhl ci4KCj4gCj4+ICsKPj4gK3N0cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiB7Cj4+ICvCoMKgwqAgc3Ry dWN0IGRldmljZSAqZGV2Owo+PiArwqDCoMKgIHUzMiBwY2llX2N0cmxfbnVtOwo+PiArwqDCoMKg IHN0cnVjdCBsaXN0X2hlYWQgcnBfaW5mb3M7Cj4+ICt9Owo+PiArCj4+ICsjZGVmaW5lIHRvX2R3 Y19wY2llX3BtdShwKSAoY29udGFpbmVyX29mKHAsIHN0cnVjdCBkd2NfcGNpZV9wbXUsIHBtdSkp Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkd2NfcGNpZV9wbXVfZGV2 Owo+PiArc3RhdGljIHNzaXplX3QgY3B1bWFza19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRldmljZV9h dHRyaWJ1dGUgKmF0dHIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNoYXIgKmJ1ZikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVfcG11ICpwY2ll X3BtdSA9IHRvX2R3Y19wY2llX3BtdShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7Cj4+ICsKPj4gK8Kg wqDCoCByZXR1cm4gY3B1bWFwX3ByaW50X3RvX3BhZ2VidWYodHJ1ZSwgYnVmLCBjcHVtYXNrX29m KHBjaWVfcG11LT5vbl9jcHUpKTsKPj4gK30KPj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhjcHVt YXNrKTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmR3Y19wY2llX3BtdV9jcHVt YXNrX2F0dHJzW10gPSB7Cj4+ICvCoMKgwqAgJmRldl9hdHRyX2NwdW1hc2suYXR0ciwKPj4gK8Kg wqDCoCBOVUxMCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBw Y2llX3BtdV9jcHVtYXNrX2F0dHJzX2dyb3VwID0gewo+PiArwqDCoMKgIC5hdHRycyA9IGR3Y19w Y2llX3BtdV9jcHVtYXNrX2F0dHJzLAo+PiArfTsKPj4gKwo+PiArc3RydWN0IGR3Y19wY2llX2Zv cm1hdF9hdHRyIHsKPj4gK8KgwqDCoCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyOwo+PiAr wqDCoMKgIHU2NCBmaWVsZDsKPj4gK8KgwqDCoCBpbnQgY29uZmlnOwo+PiArfTsKPj4gKwo+PiAr c3RhdGljIHNzaXplX3QgZHdjX3BjaWVfcG11X2Zvcm1hdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRl diwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZp Y2VfYXR0cmlidXRlICphdHRyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY2hhciAqYnVmKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBkd2NfcGNpZV9mb3JtYXRf YXR0ciAqZm10ID0gY29udGFpbmVyX29mKGF0dHIsIHR5cGVvZigqZm10KSwgYXR0cik7Cj4+ICvC oMKgwqAgaW50IGxvID0gX19mZnMoZm10LT5maWVsZCksIGhpID0gX19mbHMoZm10LT5maWVsZCk7 Cj4+ICsKPj4gK8KgwqDCoCBpZiAobG8gPT0gaGkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g c25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJjb25maWc6JWRcbiIsIGxvKTsKPj4gKwo+PiArwqDC oMKgIGlmICghZm10LT5jb25maWcpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gc25wcmludGYo YnVmLCBQQUdFX1NJWkUsICJjb25maWc6JWQtJWRcbiIsIGxvLCBoaSk7Cj4+ICsKPj4gK8KgwqDC oCByZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJjb25maWclZDolZC0lZFxuIiwgZm10 LT5jb25maWcsIGxvLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoaSk7Cj4gCj4gQSBsb3Qg b2YgdGhpcyBpcyB1bm5lY2Vzc2FyeSAtIHlvdSBkb24ndCBoYXZlIGFueSBzaW5nbGUtYml0IGNv bmZpZyBmaWVsZHMsIGFuZCB5b3UgYXJlbid0IHVzaW5nIGNvbmZpZzEgb3IgY29uZmlnMiwgc28g aXQncyBraW5kIG9mIGNvbmZ1c2luZyB0byBoYXZlIGFsbCB0aGUgY29kZSBhbmQgZGF0YSBmb3Ig aGFuZGxpbmcgdGhlbS4KCldpbGwgcmVtb3ZlIGl0LgoKPiAKPiBBbHNvLCBwbGVhc2UgdXNlIHN5 c2ZzX2VtaXQoKSBpbnN0ZWFkIG9mIGFsbCB0aGUgYXNzb3J0ZWQgc3ByaW50ZigpIGFuZCBzbnBy aW50ZigpIGNhbGxzLgoKT2ssIEkgd2lsbCB1c2Ugc3lzZnNfZW1pdCgpIGluc3RlYWQuCgo+IAo+ PiArfQo+PiArCj4+ICsjZGVmaW5lIF9kd2NfcGNpZV9mb3JtYXRfYXR0cihfbmFtZSwgX2NmZywg X2ZsZCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArwqDCoMKgICgmKChzdHJ1 Y3QgZHdjX3BjaWVfZm9ybWF0X2F0dHJbXSkge3vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgXAo+PiArwqDCoMKgwqDCoMKgwqAgLmF0dHIgPSBfX0FUVFIoX25hbWUsIDA0NDQsIGR3Y19w Y2llX3BtdV9mb3JtYXRfc2hvdywgTlVMTCkswqDCoMKgIFwKPj4gK8KgwqDCoMKgwqDCoMKgIC5j b25maWcgPSBfY2ZnLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgXAo+PiArwqDCoMKgwqDCoMKgwqAgLmZpZWxkID0gX2ZsZCzCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPj4gK8KgwqDCoCB9fSlbMF0uYXR0ci5hdHRy KQo+PiArCj4+ICsjZGVmaW5lIGR3Y19wY2llX2Zvcm1hdF9hdHRyKF9uYW1lLCBfZmxkKcKgwqDC oCBfZHdjX3BjaWVfZm9ybWF0X2F0dHIoX25hbWUsIDAsIF9mbGQpCj4+ICsKPj4gK3N0YXRpYyBz dHJ1Y3QgYXR0cmlidXRlICpkd2NfcGNpZV9mb3JtYXRfYXR0cnNbXSA9IHsKPj4gK8KgwqDCoCBk d2NfcGNpZV9mb3JtYXRfYXR0cih0eXBlLCBEV0NfUENJRV9DT05GSUdfVFlQRSksCj4+ICvCoMKg wqAgZHdjX3BjaWVfZm9ybWF0X2F0dHIoZXZlbnRpZCwgRFdDX1BDSUVfQ09ORklHX0VWRU5USUQp LAo+PiArwqDCoMKgIGR3Y19wY2llX2Zvcm1hdF9hdHRyKGxhbmUsIERXQ19QQ0lFX0NPTkZJR19M QU5FKSwKPj4gK8KgwqDCoCBOVUxMLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBhdHRy aWJ1dGVfZ3JvdXAgcGNpZV9wbXVfZm9ybWF0X2F0dHJzX2dyb3VwID0gewo+PiArwqDCoMKgIC5u YW1lID0gImZvcm1hdCIsCj4+ICvCoMKgwqAgLmF0dHJzID0gZHdjX3BjaWVfZm9ybWF0X2F0dHJz LAo+PiArfTsKPj4gKwo+PiArc3RydWN0IGR3Y19wY2llX2V2ZW50X2F0dHIgewo+PiArwqDCoMKg IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHI7Cj4+ICvCoMKgwqAgZW51bSBkd2NfcGNpZV9l dmVudF90eXBlIHR5cGU7Cj4+ICvCoMKgwqAgdTE2IGV2ZW50aWQ7Cj4+ICvCoMKgwqAgdTggbGFu ZTsKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBzc2l6ZV90IGR3Y19wY2llX2V2ZW50X3Nob3coc3Ry dWN0IGRldmljZSAqZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpwYWdlKQo+PiArewo+PiArwqDCoMKgIHN0 cnVjdCBkd2NfcGNpZV9ldmVudF9hdHRyICplYXR0cjsKPj4gKwo+PiArwqDCoMKgIGVhdHRyID0g Y29udGFpbmVyX29mKGF0dHIsIHR5cGVvZigqZWF0dHIpLCBhdHRyKTsKPj4gKwo+PiArwqDCoMKg IGlmIChlYXR0ci0+dHlwZSA9PSBEV0NfUENJRV9MQU5FX0VWRU5UKQo+PiArwqDCoMKgwqDCoMKg wqAgcmV0dXJuIHNwcmludGYocGFnZSwgImV2ZW50aWQ9MHglbHgsIHR5cGU9MHglbHgsIGxhbmU9 MHglbHhcbiIsCj4gCj4gQ29udmVudGlvbiBzZWVtcyB0byBiZSB0aGF0IHRoZXNlIHN0cmluZ3Mg ZG8gbm90IGhhdmUgc3BhY2VzIGluIHRoZW0sIHNvIHRoZXJlJ3MgYSBzbWFsbCBjaGFuY2UgdGhh dCBpdCBtYXkgY29uZnVzZSBzb21lIHVzZXJzcGFjZSB0b29scy4KClllcywgeW91IGFyZSByaWdo dC4gSSB3aWxsIHJlbW92ZSB0aGUgdW5uZWNlc3Nhcnkgc3BhY2VzLgoKPiAKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodW5zaWduZWQgbG9uZyllYXR0ci0+ZXZlbnRp ZCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodW5zaWduZWQgbG9u ZyllYXR0ci0+dHlwZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAo dW5zaWduZWQgbG9uZyllYXR0ci0+bGFuZSk7Cj4gCj4gSG1tLCB3aHkgdXNlICVseCBhbmQgdGhl biBoYXZlIHRvIGNhc3QgZXZlcnl0aGluZywgcmF0aGVyIHRoYW4ganVzdCAleD8KCkkgbWlzdW5k ZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgZWF0dHItPnZhciwgd2lsbCBqdXN0IHVzZSAleCBpbnN0ZWFk LgoKPiAKPj4gKwo+PiArwqDCoMKgIHJldHVybiBzcHJpbnRmKHBhZ2UsICJldmVudGlkPTB4JWx4 LCB0eXBlPTB4JWx4IiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHVuc2lnbmVk IGxvbmcpZWF0dHItPmV2ZW50aWQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh1 bnNpZ25lZCBsb25nKWVhdHRyLT50eXBlKTsKPj4gK30KPj4gKwo+PiArI2RlZmluZSBEV0NfUENJ RV9FVkVOVF9BVFRSKF9uYW1lLCBfdHlwZSwgX2V2ZW50aWQsIF9sYW5lKcKgwqDCoMKgwqDCoMKg IFwKPj4gK8KgwqDCoCAoJigoc3RydWN0IGR3Y19wY2llX2V2ZW50X2F0dHJbXSkge3vCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArwqDCoMKgwqDCoMKgwqAgLmF0dHIgPSBfX0FU VFIoX25hbWUsIDA0NDQsIGR3Y19wY2llX2V2ZW50X3Nob3csIE5VTEwpLMKgwqDCoCBcCj4+ICvC oMKgwqDCoMKgwqDCoCAudHlwZSA9IF90eXBlLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArwqDCoMKgwqDCoMKgwqAgLmV2ZW50aWQgPSBfZXZlbnRp ZCzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4+ICvCoMKgwqDCoMKg wqDCoCAubGFuZSA9IF9sYW5lLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFwKPj4gK8KgwqDCoCB9fSlbMF0uYXR0ci5hdHRyKQo+PiArCj4+ICsjZGVmaW5lIERXQ19QQ0lF X1BNVV9CQVNFX1RJTUVfQVRUUihfbmFtZSwgX2V2ZW50aWQpwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBcCj4+ICvCoMKgwqAgRFdDX1BDSUVfRVZFTlRfQVRUUihfbmFtZSwgRFdDX1BDSUVfVElNRV9C QVNFX0VWRU5ULCBfZXZlbnRpZCwgMCkKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUg KmR3Y19wY2llX3BtdV90aW1lX2V2ZW50X2F0dHJzW10gPSB7Cj4+ICvCoMKgwqAgLyogR3JvdXAg IzAgKi8KPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIob25lX2N5Y2xlLCAw eDAwKSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVFhfTDBTLCAweDAx KSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoUlhfTDBTLCAweDAyKSwK Pj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoTDAsIDB4MDMpLAo+PiArwqDC oMKgIERXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihMMSwgMHgwNCksCj4+ICvCoMKgwqAgRFdD X1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKEwxXzEsIDB4MDUpLAo+PiArwqDCoMKgIERXQ19QQ0lF X1BNVV9CQVNFX1RJTUVfQVRUUihMMV8yLCAweDA2KSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVf QkFTRV9USU1FX0FUVFIoQ0ZHX1JDVlJZLCAweDA3KSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVf QkFTRV9USU1FX0FUVFIoVFhfUlhfTDBTLCAweDA4KSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVf QkFTRV9USU1FX0FUVFIoTDFfQVVYLCAweDA5KSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFT RV9USU1FX0FUVFIoT05FX2N5Y2xlLCAweDEwKSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFT RV9USU1FX0FUVFIoVFhfTDBTXywgMHgxMSksCj4+ICvCoMKgwqAgRFdDX1BDSUVfUE1VX0JBU0Vf VElNRV9BVFRSKFJYX0wwU18sIDB4MTIpLAo+PiArwqDCoMKgIERXQ19QQ0lFX1BNVV9CQVNFX1RJ TUVfQVRUUihMMF8sIDB4MTMpLAo+PiArwqDCoMKgIERXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRU UihMMV8sIDB4MTcpLAo+PiArwqDCoMKgIERXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihDRkdf UkNWUllfLCAweDE3KSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVFhf UlhfTDBTXywgMHgxOCksCj4+ICvCoMKgwqAgLyogR3JvdXAgIzEgKi8KPj4gK8KgwqDCoCBEV0Nf UENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVHhfUENJZV9UTFBfRGF0YV9QYXlsb2FkLCAweDIwKSwK Pj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoUnhfUENJZV9UTFBfRGF0YV9Q YXlsb2FkLCAweDIxKSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoVHhf Q0NJWF9UTFBfRGF0YV9QYXlsb2FkLCAweDIyKSwKPj4gK8KgwqDCoCBEV0NfUENJRV9QTVVfQkFT RV9USU1FX0FUVFIoUnhfQ0NJWF9UTFBfRGF0YV9QYXlsb2FkLCAweDIzKSwKPj4gK8KgwqDCoCBO VUxMCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHVtb2RlX3QgcGNpZV9wbXVfZXZlbnRf YXR0cl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGF0dHJpYnV0 ZSAqYXR0ciwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGludCB1bnVzZSkKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gYXR0ci0+bW9k ZTsKPiAKPiBUaGVyZSBpcyBubyBwb2ludCBpbXBsZW1lbnRpbmcgYW4gb3B0aW9uYWwgY2FsbGJh Y2sgd2hpY2ggb25seSByZXBsaWNhdGVzIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiBub3QgaGF2 aW5nIHRoZSBjYWxsYmFjay4KPiAKPiBXaGV0aGVyIHRvIHNpbXBseSByZW1vdmUgaXQsIG9yIGlu c3RlYWQgaW1wbGVtZW50IG1vcmUgbWVhbmluZ2Z1bCBiZWhhdmlvdXIgaGVyZSB0byBzYXZlIGNv bXBsZXhpdHkgZWxzZXdoZXJlLCBpcyBzb21ldGhpbmcgSSdsbCBjb21lIGJhY2sgdG8gbGF0ZXIu Li4KCkkgd2lsbCB1c2UgaXQgZm9yIG5ldyBkZWZpbmVkIGxhbmUgZXZlbnQgdHlwZSBpbiBuZXh0 IHZlcnNpb24sIGFzIHlvdSBzdWdnZXN0ZWQgbGF0ZXIuCgo+IAo+PiArfQo+PiArCj4+ICtzdGF0 aWMgaW5saW5lIGJvb2wgcGNpX2Rldl9pc19yb290cG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldikK Pj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gKHBjaV9pc19wY2llKHBkZXYpICYmCj4+ICvCoMKgwqDC oMKgwqDCoCBwY2lfcGNpZV90eXBlKHBkZXYpID09IFBDSV9FWFBfVFlQRV9ST09UX1BPUlQpOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX3Jhc19kZXNfZGlzY292ZXIoc3RydWN0 IGR3Y19wY2llX3BtdV9wcml2ICpwcml2KQo+PiArewo+PiArwqDCoMKgIGludCBpbmRleCA9IDA7 Cj4+ICvCoMKgwqAgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwo+PiArwqDCoMKgIHN0cnVj dCBkd2NfcGNpZV9ycF9pbmZvICpycF9pbmZvOwo+PiArCj4+ICvCoMKgwqAgSU5JVF9MSVNUX0hF QUQoJnByaXYtPnJwX2luZm9zKTsKPj4gKwo+PiArwqDCoMKgIC8qIE1hdGNoIHRoZSByb290cG9y dCB3aXRoIFZTRUNfUkFTX0RFU19JRCAqLwo+PiArwqDCoMKgIGZvcl9lYWNoX3BjaV9kZXYocGRl dikgewo+IAo+IERvZXMgdGhlIFBDSSBsYXllciBub3Qgb2ZmZXIgYSBtb3JlIHJvYnVzdCBtZWNo YW5pc20gZm9yIHRoaXM/IChQQ0kgZml4dXBzIGNvbWUgdG8gbWluZCwgYnV0IEkgZG9uJ3QgYWN0 dWFsbHkga25vdyB3aGV0aGVyIHRoYXQgd291bGQgYmUgYSB2aWFibGUgYXBwcm9hY2ggb3Igbm90 LikgCgpJIGFtIGFmcmFpZCBub3QgeWV0LiBKb25hdGhhbiB0cnkgdG8gYWRkIGEgUE1VIHNlcnZp Y2UgYnV0IGl0IGlzIG5vdCBtZXJnZWQgaW50byBtYWlubGluZS4KCkFzIHRoaW5ncyBzdGFuZCwg aXQgc2VlbXMgbGlrZSB5b3UndmUgZ290IGEgcG90ZW50aWFsIG9yZGVyaW5nIHByb2JsZW0gaWYg dGhpcyBpcyBidWlsdC1pbiBhbmQgcnVucyBiZWZvcmUgUENJIGRldmljZXMgaGF2ZSBiZWVuIGZ1 bGx5IGRpc2NvdmVyZWQuCgpJZiB0aGlzIGlzIGJ1aWx0LWluLCB0aGUgbW9kdWxlIGlzIGluaXQg YnkgZGV2aWNlX2luaXRjYWxsLCBsZXZlbCA2LgpBcyBmYXIgYXMgSSBrb253LCBQQ0kgYW5kIFBD SWUgZGV2aWNlcyBhcmUgaW5pdCBpbiBhY3BpX2luaXQsCmEgc3Vic3lzX2luaXRjYWxsLCBsZXZl bCA0LCBzbyB3ZSB3aWxsIG5vdCBnZXQgYSBwb3RlbnRpYWwgb3JkZXJpbmcKcHJvYmxlbT8gSWYg SSBtaXNzZWQgYW55dGhpbmcsIHBsZWFzZSBjb3JyZWN0IG1lLgoKPiAKPj4gK8KgwqDCoMKgwqDC oMKgIHUxNiB2c2VjOwo+PiArwqDCoMKgwqDCoMKgwqAgdTMyIHZhbDsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqAgaWYgKCFwY2lfZGV2X2lzX3Jvb3Rwb3J0KHBkZXYpKQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjb250aW51ZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgcnBfaW5mbyA9IGRl dm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnJwX2luZm8pLCBHRlBfS0VSTkVMKTsKPj4g K8KgwqDCoMKgwqDCoMKgIGlmICghcnBfaW5mbykKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FTk9NRU07Cj4gCj4gVGhpcyBsZWFrcyBhIHJlZmNvdW50IG9uIHRoZSBkZXZpY2Uu CgpBaGEsIHlvdSBhcmUgcmlnaHQsIEkgc2hvdWxkIHBjaV9kZXZfcHV0IGZpcnN0ISBXaWxsIGZp eCBpdCBpbiBuZXh0IHZlcnNpb24uCgo+IAo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBycF9pbmZv LT5iZGYgPSBQQ0lfREVWSUQocGRldi0+YnVzLT5udW1iZXIsIHBkZXYtPmRldmZuKTsKPiAKPiBE byB5b3UgcmVhbGx5IG5lZWQgdG8gc3RvcmUgdGhpcz8gSXQgY291bGQganVzdCBhcyB3ZWxsIGJl IGEgbG9jYWwgdmFyaWFibGUgaW4gdGhlIG9uZSBzY29wZSB3aGVyZSBpdCdzIHVzZWQgbGF0ZXIu CgpPaywgSSB3aWxsIHJlbW92ZSB0aGUgYmRmIGZyb20gcnBfaW5mbyBhbmQgZ2V0IGl0IGZvcm0g cGRldiBhdCB3aGVyZSBpdCB1c2VkLgkKCj4gCj4+ICvCoMKgwqDCoMKgwqDCoCBycF9pbmZvLT5w ZGV2ID0gcGRldjsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgdnNlYyA9IHBjaV9maW5kX3ZzZWNf Y2FwYWJpbGl0eShwZGV2LCBQQ0lfVkVORE9SX0lEX0FMSUJBQkEsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERXQ19QQ0lFX1ZTRUNfUkFTX0RFU19J RCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIXZzZWMpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNvbnRpbnVlOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBwY2lfcmVhZF9jb25maWdfZHdv cmQocGRldiwgdnNlYyArIFBDSV9WTkRSX0hFQURFUiwgJnZhbCk7Cj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAoUENJX1ZORFJfSEVBREVSX1JFVih2YWwpICE9IDB4MDQgfHwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgUENJX1ZORFJfSEVBREVSX0xFTih2YWwpICE9IDB4MTAwKQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gK8KgwqDCoMKgwqDCoMKgIHBjaV9kYmcocGRl diwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkRldGVjdGVkIFBDSWUgVmVuZG9yLVNwZWNp ZmljIEV4dGVuZGVkIENhcGFiaWxpdHkgUkFTIERFU1xuIik7Cj4+ICsKPiAKPiBDb3VsZCB5b3Ug bm90IGZpbmlzaCBhbGwgdGhlIGNoZWNrcyBiZWZvcmUgYWxsb2NhdGluZyBycF9pbmZvPyBJJ20g Z3Vlc3NpbmcgeW91IHByb2JhYmx5IGRvbid0IGV4cGVjdCB0byBmaW5kIGEgbWl4IG9mIHJvb3Qg cG9ydHMgd2hlcmUgb25seSBzb21lIGhhdmUgdGhpcyBjYXBhYmlsaXR5LCBidXQgaWYgdGhhdCBl dmVyIGRpZCBoYXBwZW4gaXQgd291bGQgYmUgbmljZXIgbm90IHRvIGxlYXZlIGEgYnVuY2ggb2Yg d2FzdGVkIG1lbW9yeSBoYW5naW5nIGFyb3VuZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBkcml2 ZXIuCgpHb29kIHN1Z2dlc3Rpb24sIEkgd2lsbCBkbyBhbGwgY2hlY2sgYmVmb3JlIGFsbG9jYXRp bmcgcnBfaW5mby4KCj4gCj4+ICvCoMKgwqDCoMKgwqDCoCBycF9pbmZvLT5yYXNfZGVzID0gdnNl YzsKPj4gK8KgwqDCoMKgwqDCoMKgIHJwX2luZm8tPm51bV9sYW5lcyA9IHBjaWVfZ2V0X3dpZHRo X2NhcChwZGV2KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgbGlzdF9hZGQoJnJwX2luZm8tPnJw X25vZGUsICZwcml2LT5ycF9pbmZvcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpbmRleCsrOwo+PiAr wqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlmICghaW5kZXgpCj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gLUVOT0RFVjsKPj4gKwo+PiArwqDCoMKgIHByaXYtPnBjaWVfY3RybF9udW0gPSBpbmRl eDsKPiAKPiBZb3UgbmV2ZXIgdXNlIHRoaXMuCgpZZXMsIEkgZm9yZ290IHRvIGRlbGV0ZSBpdCBh ZnRlciBwYXRjaCB2MS4gV2lsbCBkZWxldGUgaXQgaW4gbmV4dCB2ZXJzaW9uLgoKPiAKPj4gKwo+ PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkd2NfcGNpZV9w bXVfc2V0X2V2ZW50X2lkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgcmFzX2RlcywKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGV2ZW50X2lkKQo+PiAr ewo+PiArwqDCoMKgIHUzMiB2YWw7Cj4+ICsKPj4gK8KgwqDCoCBwY2lfcmVhZF9jb25maWdfZHdv cmQocGRldiwgcmFzX2RlcyArIERXQ19QQ0lFX0VWRU5UX0NOVF9DVEwsICZ2YWwpOwo+PiArCj4+ ICvCoMKgwqAgdmFsIHw9IEZJRUxEX1BSRVAoRFdDX1BDSUVfQ05UX0VWRU5UX1NFTCwgZXZlbnRf aWQpOwo+PiArCj4+ICvCoMKgwqAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCByYXNfZGVz ICsgRFdDX1BDSUVfRVZFTlRfQ05UX0NUTCwgdmFsKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgZHdjX3BjaWVfcG11X3dyaXRlX2V2ZW50X2xhbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUx NiByYXNfZGVzLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp bnQgbGFuZSwgaW50IGV2ZW50X2lkKQo+PiArewo+PiArwqDCoMKgIHUzMiB2YWw7Cj4+ICsKPj4g K8KgwqDCoCBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcmFzX2RlcyArIERXQ19QQ0lFX0VW RU5UX0NOVF9DVEwsICZ2YWwpOwo+PiArCj4+ICvCoMKgwqAgdmFsIHw9IEZJRUxEX1BSRVAoRFdD X1BDSUVfQ05UX0VWRU5UX1NFTCwgbGFuZSk7Cj4+ICsKPj4gK8KgwqDCoCBwY2lfd3JpdGVfY29u ZmlnX2R3b3JkKHBkZXYsIHJhc19kZXMgKyBEV0NfUENJRV9FVkVOVF9DTlRfQ1RMLCB2YWwpOwo+ PiArfQo+IAo+IFdoYXQncyB0aGUgcHVycG9zZSBvZiB0aGVzZSB0d28gZnVuY3Rpb25zIGRvaW5n IHRoZSBleGFjdCBzYW1lIHRoaW5nLCBidXQgb25lIGhhdmluZyBhbiBleHRyYSB1bnVzZWQgYXJn dW1lbnQ/CgpHb29kIGNhdGNoLCBJIHNob3VsZCBwdXQgaXQgYWxsIHRvZ2V0aGVyLgoKPiAKPj4g Kwo+PiArc3RhdGljIHZvaWQgZHdjX3BjaWVfcG11X2V2ZW50X2VuYWJsZShzdHJ1Y3QgcGNpX2Rl diAqcGRldiwgdTE2IHJhc19kZXMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHUzMiBlbmFibGUpCj4gCj4gUGFzcyBCb29sZWFuIGFyZ3VtZW50cyBhcyBib29s LgoKV2lsbCBmaXggaXQuCgo+IAo+PiArewo+PiArwqDCoMKgIHUzMiB2YWw7Cj4+ICsKPj4gK8Kg wqDCoCBwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcmFzX2RlcyArIERXQ19QQ0lFX0VWRU5U X0NOVF9DVEwsICZ2YWwpOwo+PiArCj4+ICvCoMKgwqAgaWYgKGVuYWJsZSkKPj4gK8KgwqDCoMKg wqDCoMKgIHZhbCB8PSBGSUVMRF9QUkVQKERXQ19QQ0lFX0NOVF9FTkFCTEUsIERXQ19QQ0lFX1BF Ul9FVkVOVF9PTik7Cj4+ICvCoMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKgwqAgdmFsIHw9IEZJ RUxEX1BSRVAoRFdDX1BDSUVfQ05UX0VOQUJMRSwgRFdDX1BDSUVfUEVSX0VWRU5UX09GRik7Cj4g Cj4gVGhpcyBsb29rcyBzdXNwaWNpb3VzIC0gZXZlbiBpZiB0aGUgdmFsdWVzIHdlcmUgZGVmaW5l ZCBjb3JyZWN0bHksIHRoZSByZWFkLW1vZGlmeS13cml0ZSBpbXBsaWVzIHRoYXQgYSB0cmFuc2l0 aW9uIGZyb20gZW5hYmxlZCB0byBkaXNhYmxlZCB3b3VsZCByZXN1bHQgaW4gT04gfCBPRkYgPT0g T04sIHdoaWNoIGRvZXNuJ3QgYXBwZWFyIHRvIG1ha2UgbXVjaCBzZW5zZS4KCkdvb2QgY2F0Y2gs IEkgd2lsbCBjbGVhciBiaXRzIGluIERXQ19QQ0lFX0NOVF9FTkFCTEUgZmlyc3QuCgo+IAo+PiAr Cj4+ICvCoMKgwqAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCByYXNfZGVzICsgRFdDX1BD SUVfRVZFTlRfQ05UX0NUTCwgdmFsKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHdjX3Bj aWVfcG11X2Jhc2VfdGltZV9lbmFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiByYXNfZGVz LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgZW5hYmxl KQo+IAo+IGJvb2wgYWdhaW4uCgpXaWxsIGZpeCBpdC4KCj4gCj4+ICt7Cj4+ICvCoMKgwqAgdTMy IHZhbDsKPj4gKwo+PiArwqDCoMKgIHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCByYXNfZGVz ICsgRFdDX1BDSUVfVElNRV9CQVNFRF9BTkFMX0NUTCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJnZhbCk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZW5hYmxlKQo+PiArwqDC oMKgwqDCoMKgwqAgdmFsIHw9IERXQ19QQ0lFX1RJTUVfQkFTRURfQ05UX0VOQUJMRTsKPj4gK8Kg wqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoCB2YWwgJj0gfkRXQ19QQ0lFX1RJTUVfQkFTRURf Q05UX0VOQUJMRTsKPj4gKwo+PiArwqDCoMKgIHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwg cmFzX2RlcyArIERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTF9DVEwsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQg ZHdjX3BjaWVfcG11X3JlYWRfZXZlbnRfY291bnRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2 IHJhc19kZXMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHU2NCAqY291bnRlcikKPj4gK3sKPj4gK8KgwqDCoCB1MzIgdmFsOwo+PiArCj4+ICvCoMKg wqAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHJhc19kZXMgKyBEV0NfUENJRV9FVkVOVF9D TlRfREFUQSwgJnZhbCk7Cj4+ICvCoMKgwqAgKmNvdW50ZXIgPSB2YWw7Cj4gCj4gV2h5IG5vdCBq dXN0IHJldHVybiBhIHU2NCBieSB2YWx1ZT8KCldpbGwgY2hhbmdlIGl0IHJldHVybiBhIHU2NCBm cm9tIHZvaWQuCgo+IAo+PiArfQo+PiArCj4+ICsvKiBUaGUgcmVzdWx0cyBhcmUgY2xlYXJlZCB3 aGVuIG5leHQgbWVhc3VyZW1lbnQgc3RhcnRzLiAqLwo+PiArc3RhdGljIHZvaWQgZHdjX3BjaWVf cG11X3JlYWRfYmFzZV90aW1lX2NvdW50ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUxNiByYXNfZGVzLCB1 NjQgKmNvdW50ZXIpCj4+ICt7Cj4+ICvCoMKgwqAgdTMyIHZhbDsKPj4gKwo+PiArwqDCoMKgIHBj aV9yZWFkX2NvbmZpZ19kd29yZCgKPj4gK8KgwqDCoMKgwqDCoMKgIHBkZXYsIHJhc19kZXMgKyBE V0NfUENJRV9USU1FX0JBU0VEX0FOQUxfREFUQV9SRUdfSElHSCwKPj4gK8KgwqDCoMKgwqDCoMKg ICZ2YWwpOwo+PiArwqDCoMKgICpjb3VudGVyID0gdmFsOwo+PiArwqDCoMKgICpjb3VudGVyIDw8 PSAzMjsKPj4gKwo+PiArwqDCoMKgIHBjaV9yZWFkX2NvbmZpZ19kd29yZCgKPj4gK8KgwqDCoMKg wqDCoMKgIHBkZXYsIHJhc19kZXMgKyBEV0NfUENJRV9USU1FX0JBU0VEX0FOQUxfREFUQV9SRUdf TE9XLAo+PiArwqDCoMKgwqDCoMKgwqAgJnZhbCk7Cj4+ICsKPj4gK8KgwqDCoCAqY291bnRlciAr PSB2YWw7Cj4gCj4gRGl0dG8uCgpPaywgSSB3aWxsIGRvIGl0LgoKCj4gCj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyB2b2lkIGR3Y19wY2llX3BtdV9jbGVhcl9ldmVudF9jb3VudGVyKHN0cnVjdCBwY2lf ZGV2ICpwZGV2LCB1MTYgcmFzX2RlcykKPj4gK3sKPj4gK8KgwqDCoCB1MzIgdmFsOwo+PiArCj4+ ICvCoMKgwqAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHJhc19kZXMgKyBEV0NfUENJRV9F VkVOVF9DTlRfQ1RMLCAmdmFsKTsKPj4gKwo+PiArwqDCoMKgIHZhbCB8PSBGSUVMRF9QUkVQKERX Q19QQ0lFX0VWRU5UX0NMRUFSLCBEV0NfUENJRV9FVkVOVF9QRVJfQ0xFQVIpOwo+IAo+IE9LLCBk b2VzIHRoaXMgRVZFTlRfQ05UX0NUTCByZWdpc3RlciBqdXN0IGhhdmUgc29tZSByZWFsbHkgd2Vp cmQgYmVoYXZpb3VyIHdoZXJlIHRoZSBmaWVsZHMgd2UgdG91Y2ggYXJlIHNlbGYtY2xlYXJpbmcg YnV0IG90aGVyIGJpdHMgc3RpbGwgaGF2ZSB0byBiZSBwcmVzZXJ2ZWQgd2hlbiB3cml0dGVuPwo+ IAo+PiArCj4+ICvCoMKgwqAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCByYXNfZGVzICsg RFdDX1BDSUVfRVZFTlRfQ05UX0NUTCwgdmFsKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQg ZHdjX3BjaWVfcG11X2Jhc2VfdGltZV9hZGRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dTE2IHJhc19kZXMsIHUzMiBldmVudF9pZCkKPj4gK3sKPj4gK8KgwqDCoCB1MzIgdmFsOwo+PiAr Cj4+ICvCoMKgwqAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHJhc19kZXMgKyBEV0NfUENJ RV9USU1FX0JBU0VEX0FOQUxfQ1RMLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAmdmFsKTsKPj4gKwo+PiArwqDCoMKgIHZhbCB8PSBGSUVMRF9QUkVQKERXQ19QQ0lFX1RJ TUVfQkFTRURfUkVQT1JUX1NFTCwgZXZlbnRfaWQpOwo+IAo+IERpdHRvIGZvciB0aGlzIG9uZSwg aW4gZmFjdC4KCk5vLCBhbGwgdmFsaWQgZmllbGQgYXJlIHdyaXRlQXNSZWFkLiBZb3UgbWVhbiBJ IHNob3VsZCB3cml0ZSB0byBhbGwgZmlsZWQKd2l0aG91dCBhIHdyaXRlLWFmdGVyLXJlYWQgd2hl biAuYWRkKCkgYSBldmVudCwgcmlnaHQ/Cgo+IAo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDC oMKgICogVElNRV9CQVNFRF9BTkFMX0RBVEFfUkVHIGlzIGEgNjQgYml0IHJlZ2lzdGVyLCB3ZSBj YW4gc2FmZWx5Cj4+ICvCoMKgwqDCoCAqIHVzZSBpdCB3aXRoIGFueSBtYW51YWxseSBjb250cm9s bGVkIGR1cmF0aW9uLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCB2YWwgfD0gRklFTERfUFJF UChEV0NfUENJRV9USU1FX0JBU0VEX0RVUkFUSU9OX1NFTCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIERXQ19QQ0lFX0RVUkFUSU9OX01BTlVBTF9DVEwpOwo+PiArCj4+ICvCoMKgwqAg cGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCByYXNfZGVzICsgRFdDX1BDSUVfVElNRV9CQVNF RF9BTkFMX0NUTCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2YWwp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGR3Y19wY2llX3JwX2luZm8gKnBtdV90b19w Y2llX2luZm8oc3RydWN0IHBtdSAqcG11KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBkd2NfcGNp ZV9ycF9pbmZvICpycF9pbmZvOwo+PiArwqDCoMKgIHN0cnVjdCBkd2NfcGNpZV9wbXUgKnBjaWVf cG11ID0gdG9fZHdjX3BjaWVfcG11KHBtdSk7Cj4+ICsKPj4gK8KgwqDCoCBycF9pbmZvID0gY29u dGFpbmVyX29mKHBjaWVfcG11LCBzdHJ1Y3QgZHdjX3BjaWVfcnBfaW5mbywgcGNpZV9wbXUpOwo+ PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJwX2luZm87Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lk IGR3Y19wY2llX3BtdV9ldmVudF91cGRhdGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+PiAr ewo+PiArwqDCoMKgIHU2NCBjb3VudGVyOwo+PiArwqDCoMKgIHN0cnVjdCBkd2NfcGNpZV9wbXUg KnBjaWVfcG11ID0gdG9fZHdjX3BjaWVfcG11KGV2ZW50LT5wbXUpOwo+PiArwqDCoMKgIHN0cnVj dCBkd2NfcGNpZV9ycF9pbmZvICpycF9pbmZvID0gcG11X3RvX3BjaWVfaW5mbyhldmVudC0+cG11 KTsKPj4gK8KgwqDCoCBzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHJwX2luZm8tPnBkZXY7Cj4+ICvC oMKgwqAgdTE2IHJhc19kZXMgPSBycF9pbmZvLT5yYXNfZGVzOwo+PiArwqDCoMKgIHN0cnVjdCBo d19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owo+PiArwqDCoMKgIGVudW0gZHdjX3BjaWVf ZXZlbnRfdHlwZSB0eXBlID0gRFdDX1BDSUVfRVZFTlRfVFlQRShldmVudCk7Cj4+ICvCoMKgwqAg dTY0IGRlbHRhLCBwcmV2LCBub3c7Cj4gCj4gVGhhdCdzIGFuIGF3ZnVsIGxvdCBvZiBib2lsZXJw bGF0ZSAtIHN0cmFpZ2h0IGF3YXksIHBjaWVfcG11IGlzIHJlZHVuZGFudCBzaW5jZSAmcGRldi0+ ZGV2IHdvdWxkIGdpdmUgeW91IHRoZSBzYW1lIHRoaW5nLCBidXQgdGhlbiB5b3UgZG9uJ3QgYWN0 dWFsbHkgbmVlZCB0aGF0IGFueXdheSwgc28gaXQgd291bGQgYmUgZXZlbiBjbGVhbmVyIHRvIHBh c3MgcnBfaW5mbyBkaXJlY3RseSB0byB0aGUgcmVhZF8qX2NvdW50ZXIgaGVscGVycyBmb3IgdGhl bSB0byBkZXJlZmVyZW5jZSBwZGV2IGFuZCByYXNfZGVzIGZvciB0aGVtc2VsdmVzLiBTYW1lIHRo aW5nIGluIHRoZSBzdGFydCwgc3RvcCBhbmQgYWRkIGNhbGxiYWNrcyBiZWxvdy4KCkdvb2Qgc3Vn Z2VzdGlvbi4gd2lsbCBkbyBpdC4KCj4gCj4+ICsKPj4gK8KgwqDCoCBkbyB7Cj4+ICvCoMKgwqDC oMKgwqDCoCBwcmV2ID0gbG9jYWw2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOwo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoCBpZiAodHlwZSA9PSBEV0NfUENJRV9MQU5FX0VWRU5UKQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkd2NfcGNpZV9wbXVfcmVhZF9ldmVudF9jb3VudGVyKHBkZXYsIHJh c19kZXMsICZjb3VudGVyKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKHR5cGUgPT0gRFdD X1BDSUVfVElNRV9CQVNFX0VWRU5UKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkd2NfcGNp ZV9wbXVfcmVhZF9iYXNlX3RpbWVfY291bnRlcihwZGV2LCByYXNfZGVzLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmNv dW50ZXIpOwo+PiArwqDCoMKgwqDCoMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkZXZfZXJyKHBjaWVfcG11LT5kZXYsICJpbnZhbGlkIGV2ZW50IHR5cGU6IDB4JXhcbiIsIHR5 cGUpOwo+IAo+IElmIHRoYXQgY291bGQgZXZlciBoYXBwZW4sIHlvdSd2ZSBnb3QgYSBidWcgaW4g eW91ciBldmVudF9pbml0IG9yIGV2ZW50X2FkZCwgb3Igc29tZXRoaW5nIGhhcyBjb3JydXB0ZWQg bWVtb3J5IGluIGEgd2F5IHlvdSBjYW5ub3QgcG9zc2libHkgYXR0ZW1wdCB0byByZWFzb24gYWJv dXQuIEluIGZhY3QsIHByZXRlbmRpbmcgdG8gaGFuZGxlIHN1Y2ggYSB0aGVvcmV0aWNhbCBidWcg aGVyZSBpcyBpdHMgb3duICpyZWFsKiBidWcsIHNpbmNlIGlmIHRoYXQgcGF0aCBpcyB0YWtlbiB0 aGVuIGl0IGxlYWRzIHRvIGNvbnN1bWluZyBhbiB1bmluaXRpYWxpc2VkIHZhcmlhYmxlIGJlbG93 LgoKWWVzLCBpdCBzaG91bGQgY2hlY2tlZCBpbiBpbml0IGV2ZW50LgoKPiAKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqAgbm93ID0gY291bnRlcjsKPiAKPiBHZXQgcmlkIG9mIHRoZSByZWR1bmRhbnQg ImNvdW50ZXIiIHZhcmlhYmxlLiBJdCdzIHJlYWxseSBub3QgaGVscGZ1bC4KCkdvdCBpdC4gV2ls bCByZW1vdmUgaXQuCgo+IAo+PiArwqDCoMKgIH0gd2hpbGUgKGxvY2FsNjRfY21weGNoZygmaHdj LT5wcmV2X2NvdW50LCBwcmV2LCBub3cpICE9IHByZXYpOwo+PiArCj4+ICvCoMKgwqAgZGVsdGEg PSBub3cgLSBwcmV2Owo+PiArCj4+ICvCoMKgwqAgbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+ Y291bnQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9ldmVudF9pbml0 KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgaHdfcGVy Zl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVfcG11 ICpwY2llX3BtdSA9IHRvX2R3Y19wY2llX3BtdShldmVudC0+cG11KTsKPj4gK8KgwqDCoCBzdHJ1 Y3QgcGVyZl9ldmVudCAqc2libGluZzsKPj4gKwo+PiArwqDCoMKgIGlmIChldmVudC0+YXR0ci50 eXBlICE9IGV2ZW50LT5wbXUtPnR5cGUpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0VO VDsKPj4gKwo+PiArwqDCoMKgIGlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKPiAKPiBUaGlzIGNv bmZ1c2VkIG1lIC0gaXQgbWlnaHQgd29yaywgYnV0IHBsZWFzZSB1c2UgaXNfc2FtcGxpbmdfZXZl bnQoKSB0byBiZSBjb25zaXN0ZW50IHdpdGggZXZlcnl0aGluZyBlbHNlLgoKT2ssIEknZCBsaWtl IHRvIHVzZSBpc19zYW1wbGluZ19ldmVudCgpLgoKPiAKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl9l cnIocGNpZV9wbXUtPmRldiwgIlNhbXBsaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwo+IAo+IGRldl9k YmcoKSBhdCBiZXN0LCBidXQgVEJIIEknZCBqdXN0IHJlbW92ZSBpdC4gSSBrbm93IHRoaXMgaGFz IGJlZW4gZGViYXRlZCBhIGxvdCwgYnV0IEZXSVcgSSdtIGZpcm1seSBpbiB0aGUgImdpdmluZyB1 c2VycyB0aGUgY2FwYWJpbGl0eSB0byB1c2UgdG8gdXNlIHBlcmYgZXZlbnRzIHNob3VsZCBub3Qg Z2l2ZSB0aGVtIHRoZSBpbXBsaWNpdCBjYXBhYmlsaXR5IHRvIGZsb29kIHRoZSBrZXJuZWwgbG9n IGFuZCBmaWxsIHVwIGpvdXJuYWxkJ3MgZGlzayBxdW90YSIgY2FtcC4KCk9rLCBJIHdpbGwgcmVt b3ZlIGl0Lgo+IAo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FT1BOT1RTVVBQOwo+IAo+IFVz ZSBFSU5WQUwuIEl0J3Mgbm90IHRoYXQgeW91IHNpbXBseSBkb24ndCBzdXBwb3J0IHNhbXBsaW5n LCBpdCdzIHRoYXQgdGhlcmUgaXMgZnVuZGFtZW50YWxseSBubyBtZWFuaW5nZnVsIGNvbnRleHQg aW4gYSBQQ0llIGxhbmUgdG8gc2FtcGxlIGZyb20sIHNvIGl0IGlzIG5vdCBhIHZhbGlkIGV2ZW50 IGF0IGFsbD4KPiAKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZXZlbnQtPmNwdSA8 IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIocGNpZV9wbXUtPmRldiwgIlBlci10YXNr IG1vZGUgbm90IHN1cHBvcnRlZFxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVPUE5P VFNVUFA7Cj4gCj4gU2FtZSBjb21tZW50cyBhcyBhYm92ZS4KClRoYW5rIHlvdSBmb3IgZXhwbGFu YXRpb24uIEkgd2lsbCB1c2UgRUlOVkFMLgoKPiAKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDC oCBldmVudC0+Y3B1ID0gcGNpZV9wbXUtPm9uX2NwdTsKPiAKPiBJdCB3b3VsZCBzZWVtIG5lYXRl ciBub3QgdG8gc3RhcnQgbW9kaWZ5aW5nIHRoZSBldmVudCB1bnRpbCBhZnRlciB5b3UndmUgZmlu aXNoZWQgdmFsaWRhdGluZyBpdC4KCldpbGwgbW92ZSBpdCB0byBsYXRlci4KCj4gCj4+ICsKPj4g K8KgwqDCoCBpZiAoZXZlbnQtPmdyb3VwX2xlYWRlciAhPSBldmVudCAmJgo+PiArwqDCoMKgwqDC oMKgwqAgIWlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50LT5ncm91cF9sZWFkZXIpKQo+PiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCBmb3JfZWFjaF9zaWJsaW5n X2V2ZW50KHNpYmxpbmcsIGV2ZW50LT5ncm91cF9sZWFkZXIpIHsKPj4gK8KgwqDCoMKgwqDCoMKg IGlmIChzaWJsaW5nICE9IGV2ZW50ICYmICFpc19zb2Z0d2FyZV9ldmVudChzaWJsaW5nKSkKPiAK PiBBbiBldmVudCBjYW5ub3QgcG9zc2libHkgYmUgaXRzIG93biBzaWJsaW5nLgoKR29vZCBjYXRj aCwgSSBzaG91bGQgY29tcGFyZSBldmVudC0+cG11IHdpdGggc2libGluZy0+cG11LgoKPiAKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICvCoMKgwqAgfQo+PiAr Cj4+ICvCoMKgwqAgaHdjLT5pZHggPSAtMTsKPiAKPiBZb3UgbmV2ZXIgdXNlIHRoaXMuCgpXaWxs IHJlbW92ZSBpdC4KPiAKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+IAo+IFRoaXMgd291bGQg YmUgdGhlIHBvaW50IHRvIGNoZWNrIHRoYXQgdGhlIGV2ZW50J3MgY29uZmlnIGFjdHVhbGx5IG1h a2VzIHNlbnNlIGFuZCBpcyBzdXBwb3J0ZWQgYnkgdGhpcyBQTVUuCj4gCj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyB2b2lkIGR3Y19wY2llX3BtdV9zZXRfcGVyaW9kKHN0cnVjdCBod19wZXJmX2V2ZW50 ICpod2MpCj4+ICt7Cj4+ICvCoMKgwqAgbG9jYWw2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgMCk7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGR3Y19wY2llX3BtdV9ldmVudF9zdGFydChzdHJ1 Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3Qg aHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3Bj aWVfcG11ICpwY2llX3BtdSA9IHRvX2R3Y19wY2llX3BtdShldmVudC0+cG11KTsKPj4gK8KgwqDC oCBzdHJ1Y3QgZHdjX3BjaWVfcnBfaW5mbyAqcnBfaW5mbyA9IHBtdV90b19wY2llX2luZm8oZXZl bnQtPnBtdSk7Cj4+ICvCoMKgwqAgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBycF9pbmZvLT5wZGV2 Owo+PiArwqDCoMKgIHUxNiByYXNfZGVzID0gcnBfaW5mby0+cmFzX2RlczsKPj4gK8KgwqDCoCBl bnVtIGR3Y19wY2llX2V2ZW50X3R5cGUgdHlwZSA9IERXQ19QQ0lFX0VWRU5UX1RZUEUoZXZlbnQp Owo+PiArCj4+ICvCoMKgwqAgaHdjLT5zdGF0ZSA9IDA7Cj4+ICvCoMKgwqAgZHdjX3BjaWVfcG11 X3NldF9wZXJpb2QoaHdjKTsKPj4gKwo+PiArwqDCoMKgIGlmICh0eXBlID09IERXQ19QQ0lFX0xB TkVfRVZFTlQpCj4+ICvCoMKgwqDCoMKgwqDCoCBkd2NfcGNpZV9wbXVfZXZlbnRfZW5hYmxlKHBk ZXYsIHJhc19kZXMsIDEpOwo+PiArwqDCoMKgIGVsc2UgaWYgKHR5cGUgPT0gRFdDX1BDSUVfVElN RV9CQVNFX0VWRU5UKQo+PiArwqDCoMKgwqDCoMKgwqAgZHdjX3BjaWVfcG11X2Jhc2VfdGltZV9l bmFibGUocGRldiwgcmFzX2RlcywgMSk7Cj4+ICvCoMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKg wqAgZGV2X2VycihwY2llX3BtdS0+ZGV2LCAiaW52YWxpZCBldmVudCB0eXBlOiAweCV4XG4iLCB0 eXBlKTsKPiAKPiBBZ2FpbiwgdGhhdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBpZiB5b3UgdmFsaWRh dGVkIGl0IGNvcnJlY3RseSBpbiBldmVudF9pbml0Pgo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCBkd2NfcGNpZV9wbXVfZXZlbnRfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGlu dCBmbGFncykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVfcG11ICpwY2llX3BtdSA9 IHRvX2R3Y19wY2llX3BtdShldmVudC0+cG11KTsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVf cnBfaW5mbyAqcnBfaW5mbyA9IHBtdV90b19wY2llX2luZm8oZXZlbnQtPnBtdSk7Cj4+ICvCoMKg wqAgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBycF9pbmZvLT5wZGV2Owo+PiArwqDCoMKgIHUxNiBy YXNfZGVzID0gcnBfaW5mby0+cmFzX2RlczsKPj4gKwo+PiArwqDCoMKgIGVudW0gZHdjX3BjaWVf ZXZlbnRfdHlwZSB0eXBlID0gRFdDX1BDSUVfRVZFTlRfVFlQRShldmVudCk7Cj4+ICsKPj4gK8Kg wqDCoCBpZiAoZXZlbnQtPmh3LnN0YXRlICYgUEVSRl9IRVNfU1RPUFBFRCkKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybjsKPj4gKwo+PiArwqDCoMKgIGlmICh0eXBlID09IERXQ19QQ0lFX0xBTkVf RVZFTlQpCj4+ICvCoMKgwqDCoMKgwqDCoCBkd2NfcGNpZV9wbXVfZXZlbnRfZW5hYmxlKHBkZXYs IHJhc19kZXMsIDApOwo+PiArwqDCoMKgIGVsc2UgaWYgKHR5cGUgPT0gRFdDX1BDSUVfVElNRV9C QVNFX0VWRU5UKQo+PiArwqDCoMKgwqDCoMKgwqAgZHdjX3BjaWVfcG11X2Jhc2VfdGltZV9lbmFi bGUocGRldiwgcmFzX2RlcywgMCk7Cj4+ICvCoMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKgwqAg ZGV2X2VycihwY2llX3BtdS0+ZGV2LCAiaW52YWxpZCBldmVudCB0eXBlOiAweCV4XG4iLCB0eXBl KTsKPiAKPiBEaXR0by4KCkdvb2Qgc3VnZ2VzdGlvbiwgSSB3aWxsIHZhbGlkYXRlIGl0IGNvcnJl Y3RseSBpbiBldmVudF9pbml0LgoKPiAKPj4gKwo+PiArwqDCoMKgIGR3Y19wY2llX3BtdV9ldmVu dF91cGRhdGUoZXZlbnQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9l dmVudF9hZGQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpCj4+ICt7Cj4+ICvC oMKgwqAgc3RydWN0IGR3Y19wY2llX3BtdSAqcGNpZV9wbXUgPSB0b19kd2NfcGNpZV9wbXUoZXZl bnQtPnBtdSk7Cj4+ICvCoMKgwqAgc3RydWN0IGR3Y19wY2llX3JwX2luZm8gKnJwX2luZm8gPSBw bXVfdG9fcGNpZV9pbmZvKGV2ZW50LT5wbXUpOwo+PiArwqDCoMKgIHN0cnVjdCBwY2lfZGV2ICpw ZGV2ID0gcnBfaW5mby0+cGRldjsKPj4gK8KgwqDCoCB1MTYgcmFzX2RlcyA9IHJwX2luZm8tPnJh c19kZXM7Cj4+ICvCoMKgwqAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7 Cj4+ICvCoMKgwqAgZW51bSBkd2NfcGNpZV9ldmVudF90eXBlIHR5cGUgPSBEV0NfUENJRV9FVkVO VF9UWVBFKGV2ZW50KTsKPj4gK8KgwqDCoCBpbnQgZXZlbnRfaWQgPSBEV0NfUENJRV9FVkVOVF9J RChldmVudCk7Cj4+ICvCoMKgwqAgaW50IGxhbmUgPSBEV0NfUENJRV9FVkVOVF9MQU5FKGV2ZW50 KTsKPj4gKwo+PiArwqDCoMKgIC8qIE9ubHkgb25lIGNvdW50ZXIgYW5kIGl0IGlzIGluIHVzZSAq Lwo+PiArwqDCoMKgIGlmIChycF9pbmZvLT5ldmVudCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAtRU5PU1BDOwo+IAo+IE91dCBvZiBjdXJpb3NpdHksIGlzIHRoaXMgYSB0ZWNobmljYWwgbGlt aXRhdGlvbiwgb3IganVzdCBhIGNhc2Ugb2Yga2VlcGluZyB0aGUgaW5pdGlhbCBkcml2ZXIgc2lt cGxlPyBUaGUgcmVnaXN0ZXJzIHNlZW0gdG8gaW1wbHkgdGhhdCBsYW5lIGV2ZW50cyBhbmQgdGlt ZSBldmVudHMgYXJlIHByZXR0eSBtdWNoIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIsIHNvIG1h eWJlIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIGZvciBvbmUgb2YgZWFjaCB0byBjb2V4aXN0LgoKVGhl IGFyZSBpbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyLCBJIGp1c3QgdG8ga2VlcCB0aGUgZHJpdmVy IHNpbXBsZSA6KQoKPiAKPj4gKwo+PiArwqDCoMKgIHJwX2luZm8tPmV2ZW50ID0gZXZlbnQ7Cj4+ ICsKPj4gK8KgwqDCoCBod2MtPnN0YXRlID0gUEVSRl9IRVNfU1RPUFBFRCB8IFBFUkZfSEVTX1VQ VE9EQVRFOwo+PiArCj4+ICvCoMKgwqAgaWYgKHR5cGUgPT0gRFdDX1BDSUVfTEFORV9FVkVOVCkg ewo+PiArwqDCoMKgwqDCoMKgwqAgZHdjX3BjaWVfcG11X2V2ZW50X2VuYWJsZShwZGV2LCByYXNf ZGVzLCAwKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGR3Y19wY2llX3BtdV93cml0ZV9ldmVudF9sYW5l KHBkZXYsIHJhc19kZXMsIGxhbmUsIGV2ZW50X2lkKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGR3Y19w Y2llX3BtdV9zZXRfZXZlbnRfaWQocGRldiwgcmFzX2RlcywgZXZlbnRfaWQpOwo+PiArwqDCoMKg wqDCoMKgwqAgZHdjX3BjaWVfcG11X2NsZWFyX2V2ZW50X2NvdW50ZXIocGRldiwgcmFzX2Rlcyk7 Cj4gCj4gRXd3LCB0aGUgaGVscGVycyB3ZXJlIGFscmVhZHkgY29uZnVzaW5nIGVub3VnaCwgYnV0 IGlzIGl0IG5lY2Vzc2FyeSB0byBkbyAqZm91ciogYmFjay10by1iYWNrIFJNVyBvcGVyYXRpb25z IG9uIHRoZSBzYW1lIHJlZ2lzdGVyPyBDYW4geW91IHJlYWxseSBub3QganVzdCB3cml0ZSB0aGUg d2hvbGUgdGhpbmcgaW4gb25lIGdvPwoKU3VyZSwgSSB3aWxsIHdhcnAgdGhlbSBpbiBvbmUgcHJl cGFyZSgpLgoKPiAKPj4gK8KgwqDCoCB9IGVsc2UgaWYgKHR5cGUgPT0gRFdDX1BDSUVfVElNRV9C QVNFX0VWRU5UKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkd2NfcGNpZV9wbXVfYmFzZV90aW1lX2Vu YWJsZShwZGV2LCByYXNfZGVzLCAwKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGR3Y19wY2llX3BtdV9i YXNlX3RpbWVfYWRkX3ByZXBhcmUocGRldiwgcmFzX2RlcywgZXZlbnRfaWQpOwo+PiArwqDCoMKg IH0gZWxzZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKHBjaWVfcG11LT5kZXYsICJpbnZh bGlkIGV2ZW50IHR5cGU6IDB4JXhcbiIsIHR5cGUpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IC1FSU5WQUw7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgaWYgKGZsYWdzICYgUEVSRl9F Rl9TVEFSVCkKPj4gK8KgwqDCoMKgwqDCoMKgIGR3Y19wY2llX3BtdV9ldmVudF9zdGFydChldmVu dCwgUEVSRl9FRl9SRUxPQUQpOwo+PiArCj4+ICvCoMKgwqAgcGVyZl9ldmVudF91cGRhdGVfdXNl cnBhZ2UoZXZlbnQpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyB2b2lkIGR3Y19wY2llX3BtdV9ldmVudF9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50 LCBpbnQgZmxhZ3MpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGR3Y19wY2llX3JwX2luZm8gKnJw X2luZm8gPSBwbXVfdG9fcGNpZV9pbmZvKGV2ZW50LT5wbXUpOwo+PiArCj4+ICvCoMKgwqAgZHdj X3BjaWVfcG11X2V2ZW50X3N0b3AoZXZlbnQsIGZsYWdzIHwgUEVSRl9FRl9VUERBVEUpOwo+PiAr wqDCoMKgIHBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKPj4gK8KgwqDCoCBycF9p bmZvLT5ldmVudCA9IE5VTEw7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGR3Y19wY2llX3Bt dV9ldmVudF9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKPj4gK3sKPj4gK8KgwqDCoCBk d2NfcGNpZV9wbXVfZXZlbnRfdXBkYXRlKGV2ZW50KTsKPj4gK30KPiAKPiBXaGF0IHVzZSBpcyBh IGZ1bmN0aW9uIHdyYXBwZXIgdGhhdCBkb2VzIG5vdGhpbmcgYnV0IGNhbGwgYSBmdW5jdGlvbiB3 aXRoIGFuIGlkZW50aWNhbCBzaWduYXR1cmU/IFdoYXRldmVyIHdvdWxkIGNhbGwgdGhpcyBjYW4g anVzdCBjYWxsIGR3Y19wY2llX3BtdV9ldmVudF91cGRhdGUoKSBkaXJlY3RseS4KCkhhaGEsIEkg aGF2ZSB0byBhZG1pdCB0aGF0IEkgZG8gbm90IGtub3cgd2h5LiBUaGUgZG1jNjIwLCBkc3UsIHNt bXVfcG11LCBhcm0tY2NpLAphcm0tY2NpIGRyaXZlcnMgdXNlIC51cGRhdGUoKSBpbiAucmVhZCgp IHdpdGggdGhlIHNtYWUgaWRlbnRpY2FsIHNpZ25hdHVyZS4KCkFmdGVyIGEgZG91YmxlIGNoZWNr LCB0aGUgZHJpdmVycyBmc2xfaW14OF9kZHJfcGVyZi5jLCBtYXJ2ZWxsX2NuMTBrX2Rkcl9wbXUu Ywp1c2UgLnVwZGF0ZSgpIGFzIC5yZWFkKCksIGUuZy4KCgkucmVhZAkgICAgID0gY24xMGtfZGRy X3BlcmZfZXZlbnRfdXBkYXRlLAoKSSB0aGluayB3ZSBzaG91bGQgdXNlIC51cGRhdGUoKSBhcyAu cmVhZCgpIGRpcmVjdGx5LCByaWdodD8KCj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgZHdjX2V2ZW50 X2NvdW50ZXJzIGV2ZW50X2FycmF5W10gPSB7Cj4+ICvCoMKgwqAgeyJ0eF9hY2tfZGxscCIsIDB4 NjAwfSwKPj4gK8KgwqDCoCB7InR4X3VwZGF0ZV9mY19kbGxwIiwgMHg2MDF9LAo+PiArwqDCoMKg IHsicnhfYWNrX2RsbHAiLCAweDYwMn0sCj4+ICvCoMKgwqAgeyJyeF91cGRhdGVfZmNfZGxscCIs IDB4NjAzfSwKPj4gK8KgwqDCoCB7InJ4X251bGlmaWVkX3RscCIsIDB4NjA0fSwKPj4gK8KgwqDC oCB7InR4X251bGlmaWVkX3RscCIsIDB4NjA1fSwKPj4gK8KgwqDCoCB7InJ4X2R1cGxpY2F0ZV90 bHAiLCAweDYwNn0sCj4+ICvCoMKgwqAgeyJ0eF9tZW1vcnlfd3JpdGUiLCAweDcwMH0sCj4+ICvC oMKgwqAgeyJ0eF9tZW1vcnlfcmVhZCIsIDB4NzAxfSwKPj4gK8KgwqDCoCB7InR4X2NvbmZpZ3Vy YXRpb25fd3JpdGUiLCAweDcwMn0sCj4+ICvCoMKgwqAgeyJ0eF9jb25maWd1cmF0aW9uX3JlYWQi LCAweDcwM30sCj4+ICvCoMKgwqAgeyJ0eF9pb193cml0ZSIsIDB4NzA0fSwKPj4gK8KgwqDCoCB7 InR4X2lvX3JlYWQiLCAweDcwNX0sCj4+ICvCoMKgwqAgeyJ0eF9jb21wbGV0aW9uX3dpdGhvdXRf ZGF0YSIsIDB4NzA2fSwKPj4gK8KgwqDCoCB7InR4X2NvbXBsZXRpb25fd2l0aF9kYXRhIiwgMHg3 MDd9LAo+PiArwqDCoMKgIHsidHhfbWVzc2FnZV90bHAiLCAweDcwOH0sCj4+ICvCoMKgwqAgeyJ0 eF9hdG9taWMiLCAweDcwOX0sCj4+ICvCoMKgwqAgeyJ0eF90bHBfd2l0aF9wcmVmaXgiLCAweDcw QX0sCj4+ICvCoMKgwqAgeyJyeF9tZW1vcnlfd3JpdGUiLCAweDcwQn0sCj4+ICvCoMKgwqAgeyJy eF9tZW1vcnlfcmVhZCIsIDB4NzBDfSwKPj4gK8KgwqDCoCB7InJ4X2lvX3dyaXRlIiwgMHg3MEZ9 LAo+PiArwqDCoMKgIHsicnhfaW9fcmVhZCIsIDB4NzEwfSwKPj4gK8KgwqDCoCB7InJ4X2NvbXBs ZXRpb25fd2l0aG91dF9kYXRhIiwgMHg3MTF9LAo+PiArwqDCoMKgIHsicnhfY29tcGxldGlvbl93 aXRoX2RhdGEiLCAweDcxMn0sCj4+ICvCoMKgwqAgeyJyeF9tZXNzYWdlX3RscCIsIDB4NzEzfSwK Pj4gK8KgwqDCoCB7InJ4X2F0b21pYyIsIDB4NzE0fSwKPj4gK8KgwqDCoCB7InJ4X3RscF93aXRo X3ByZWZpeCIsIDB4NzE1fSwKPj4gK8KgwqDCoCB7InR4X2NjaXhfdGxwIiwgMHg3MTZ9LAo+PiAr wqDCoMKgIHsicnhfY2NpeF90bHAiLCAweDcxN30sCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50 IGR3Y19wY2llX3BtdV9hdHRyX2luaXQoc3RydWN0IGR3Y19wY2llX3BtdV9wcml2ICpwcml2LAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVfcnBf aW5mbyAqcnBfaW5mbykKPj4gK3sKPj4gK8KgwqDCoCBpbnQgaSwgajsKPj4gK8KgwqDCoCBjaGFy IGxhbmVbOF07Cj4+ICvCoMKgwqAgY29uc3QgY2hhciB0bXBbNjRdOwo+PiArwqDCoMKgIGludCBl dmVudHNfcGVyX2xhbmU7Cj4+ICvCoMKgwqAgaW50IG51bV9sYW5lX2V2ZW50czsKPj4gK8KgwqDC oCBpbnQgdGltZV9iYXNlX2NvdW50Owo+PiArwqDCoMKgIGludCBudW1fYXR0cnMsIGF0dHJfaWR4 Owo+PiArwqDCoMKgIHN0cnVjdCBkd2NfcGNpZV9ldmVudF9hdHRyICpsYW5lX2F0dHJzOwo+PiAr wqDCoMKgIHN0cnVjdCBhdHRyaWJ1dGUgKipwbXVfYXR0cnM7Cj4+ICsKPj4gK8KgwqDCoCBtZW1z ZXQoKHZvaWQgKil0bXAsIDAsIHNpemVvZih0bXApKTsKPj4gK8KgwqDCoCBtZW1zZXQoKHZvaWQg KilsYW5lLCAwLCBzaXplb2YobGFuZSkpOwo+PiArwqDCoMKgIHRpbWVfYmFzZV9jb3VudCA9IEFS UkFZX1NJWkUoZHdjX3BjaWVfcG11X3RpbWVfZXZlbnRfYXR0cnMpOwo+PiArwqDCoMKgIGV2ZW50 c19wZXJfbGFuZSA9IEFSUkFZX1NJWkUoZXZlbnRfYXJyYXkpOwo+PiArwqDCoMKgIG51bV9sYW5l X2V2ZW50cyA9IHJwX2luZm8tPm51bV9sYW5lcyAqIGV2ZW50c19wZXJfbGFuZTsKPj4gK8KgwqDC oCBudW1fYXR0cnMgPSB0aW1lX2Jhc2VfY291bnQgKyBudW1fbGFuZV9ldmVudHM7Cj4+ICsKPj4g K8KgwqDCoCBycF9pbmZvLT5sYW5lX2V2ZW50X2F0dHJzID0KPj4gK8KgwqDCoMKgwqDCoMKgIGRl dm1fa2NhbGxvYyhwcml2LT5kZXYsIG51bV9sYW5lX2V2ZW50cywKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzaXplb2Yoc3RydWN0IGR3Y19wY2llX2V2ZW50X2F0dHIpLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdGUF9LRVJORUwpOwo+PiArwqDCoMKgIGlm ICghcnBfaW5mby0+bGFuZV9ldmVudF9hdHRycykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAt RU5PTUVNOwo+PiArwqDCoMKgIGxhbmVfYXR0cnMgPSBycF9pbmZvLT5sYW5lX2V2ZW50X2F0dHJz Owo+PiArwqDCoMKgIHJwX2luZm8tPnBjaWVfcG11X2V2ZW50X2F0dHJzID0KPj4gK8KgwqDCoMKg wqDCoMKgIGRldm1fa2NhbGxvYyhwcml2LT5kZXYsIG51bV9hdHRycywgc2l6ZW9mKHN0cnVjdCBh dHRyaWJ1dGUgKiksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCk7Cj4+ ICvCoMKgwqAgaWYgKCFycF9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRycykKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiArwqDCoMKgIHBtdV9hdHRycyA9IHJwX2luZm8tPnBj aWVfcG11X2V2ZW50X2F0dHJzOwo+PiArCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IG51bV9s YW5lX2V2ZW50czsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBsYW5lX2F0dHJzW2ldLmF0dHIu YXR0ci5uYW1lID0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2bV9remFsbG9jKHByaXYt PmRldiwgc2l6ZW9mKGNoYXIpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq IEFUVFJJX05BTUVfTUFYX1NJWkUsIEdGUF9LRVJORUwpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYg KCFsYW5lX2F0dHJzW2ldLmF0dHIuYXR0ci5uYW1lKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVOT01FTTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBhdHRyX2lkeCA9 IDA7Cj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IHJwX2luZm8tPm51bV9sYW5lczsgaSsrKSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBzcHJpbnRmKGxhbmUsICJfbGFuZSVkIiwgaSk7Cj4+ICsKPj4g K8KgwqDCoMKgwqDCoMKgIGZvciAoaiA9IDA7IGogPCBldmVudHNfcGVyX2xhbmU7IGorKykgewo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgcG9zID0gaSAqIGV2ZW50c19wZXJfbGFuZSAr IGo7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RyY2F0KChjaGFyICopdG1wLCBl dmVudF9hcnJheVtqXS5uYW1lKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RyY2F0KChj aGFyICopdG1wLCBsYW5lKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtY3B5KCh2b2lk ICopbGFuZV9hdHRyc1twb3NdLmF0dHIuYXR0ci5uYW1lLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICh2b2lkICopdG1wLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNpemVvZih0bXApKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBsYW5lX2F0dHJzW3Bvc10uYXR0ci5hdHRyLm1vZGUgPQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIFZFUklGWV9PQ1RBTF9QRVJNSVNTSU9OUygwNDQ0KTsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgbGFuZV9hdHRyc1twb3NdLmF0dHIuc2hvdyA9IGR3Y19wY2llX2V2 ZW50X3Nob3c7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxhbmVfYXR0cnNbcG9zXS5hdHRy LnN0b3JlID0gTlVMTDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGFuZV9hdHRyc1twb3Nd LnR5cGUgPSBEV0NfUENJRV9MQU5FX0VWRU5UOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBs YW5lX2F0dHJzW3Bvc10uZXZlbnRpZCA9IGV2ZW50X2FycmF5W2pdLmV2ZW50X2lkOwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBsYW5lX2F0dHJzW3Bvc10ubGFuZSA9IGk7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHBtdV9hdHRyc1thdHRyX2lkeCsrXSA9ICZsYW5lX2F0dHJzW3Bvc10u YXR0ci5hdHRyOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1lbXNldCgodm9pZCAq KXRtcCwgMCwgc2l6ZW9mKHRtcCkpOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgIH0K Pj4gKwo+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGR3Y19wY2llX3BtdV90 aW1lX2V2ZW50X2F0dHJzKTsgaSsrKQo+PiArwqDCoMKgwqDCoMKgwqAgcG11X2F0dHJzW2F0dHJf aWR4KytdID0gZHdjX3BjaWVfcG11X3RpbWVfZXZlbnRfYXR0cnNbaV07Cj4+ICsKPj4gK8KgwqDC oCBycF9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRyc1thdHRyX2lkeCsrXSA9IE5VTEw7Cj4+ICsK Pj4gK8KgwqDCoCBycF9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRyc19ncm91cC5uYW1lID0gImV2 ZW50cyI7Cj4+ICvCoMKgwqAgcnBfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnNfZ3JvdXAuaXNf dmlzaWJsZSA9Cj4+ICvCoMKgwqDCoMKgwqDCoCBwY2llX3BtdV9ldmVudF9hdHRyX2lzX3Zpc2li bGU7Cj4+ICvCoMKgwqAgcnBfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnNfZ3JvdXAuYXR0cnMg PQo+PiArwqDCoMKgwqDCoMKgwqAgcnBfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnM7Cj4+ICsK Pj4gK8KgwqDCoCBycF9pbmZvLT5wY2llX3BtdV9hdHRyX2dyb3Vwc1swXSA9Cj4+ICvCoMKgwqDC oMKgwqDCoCAmcnBfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnNfZ3JvdXA7Cj4+ICvCoMKgwqAg cnBfaW5mby0+cGNpZV9wbXVfYXR0cl9ncm91cHNbMV0gPSAmcGNpZV9wbXVfZm9ybWF0X2F0dHJz X2dyb3VwOwo+PiArwqDCoMKgIHJwX2luZm8tPnBjaWVfcG11X2F0dHJfZ3JvdXBzWzJdID0gJnBj aWVfcG11X2NwdW1hc2tfYXR0cnNfZ3JvdXA7Cj4+ICvCoMKgwqAgcnBfaW5mby0+cGNpZV9wbXVf YXR0cl9ncm91cHNbM10gPSBOVUxMOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4gCj4gVGhh dCB0b29rIGEgd2hpbGUgdG8gbWFrZSBzZW5zZSBvZi4uLiBkeW5hbWljYWxseSBnZW5lcmF0aW5n IGV2ZW50IGF0dHJzIGlzIGEgYml0IGhvcnJpYmxlLCBlc3BlY2lhbGx5IGlmIGl0IG1lYW5zIHlv dSB3YXN0ZSBhIGJ1bmNoIG9mIG1lbW9yeSBkdXBsaWNhdGluZyB0aGUgc2FtZSBzdHVmZiBvdmVy IGFuZCBvdmVyIGFnYWluIGZvciBldmVyeSBQTVUgaW5zdGFuY2UuCj4gCj4gWW91IGNhbiBhY2hp ZXZlIHRoZSBzYW1lIGVmZmVjdCBmYXIgbW9yZSBuZWF0bHkgYnkgc3RhdGljYWxseSBkZWZpbmlu ZyBhbGwgcG9zc2libGUgZXZlbnRzLCB0aGVuIHVzaW5nIHRoZSAuaXNfdmlzaWJsZSBjYWxsYmFj ayB0byBoaWRlIGFueSB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgZ2l2ZW4gUE1VIGlu c3RhbmNlLgo+IAo+IEhvd2V2ZXIsIEknbSBub3Qgc3VyZSBpdCdzIHJlYWxseSB3b3J0aCBldmVu IGRvaW5nIHRoYXQgKGVzcGVjaWFsbHkgaWYgSSd2ZSBjb3VudGVkIHJpZ2h0IGFuZCBpdCBtZWFu cyA0NjQgZXZlbnRzIGZvciBhIG1heGltdW0gb2YgMTYgbGFuZXMpLiBJdCBkb2Vzbid0IHNlZW0g bGlrZSB0aGUgZGlmZmVyZW5jZSBpbiB0eXBpbmcgInR4X2lvX3JlYWRfbGFuZTAiIHZzLiAidHhf aW9fcmVhZCxsYW5lPTAiIHdpbGwgaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdCBvbiB1c2VyIGV4 cGVyaWVuY2UuIENvbnZlcnNlbHksIEkgaGFwcGVuIHRvIGtub3cgdGhhdCBzb21lIHVzZXJzIGFj dGl2ZWx5IGRpc2xpa2UgdGhlIGV4cGVyaWVuY2Ugb2YgInBlcmYgbGlzdCIgc3Bld2luZyBvdXQg aHVuZHJlZHMgb2YgZXZlbnRzIHRoYXQgc3dhbXAgb3V0IHRoZSBvbmVzIHRoZXkncmUgbG9va2lu ZyBmb3IuIElmIHRoaXMgaXMgdGhlIFNvQyB3aGljaCBhbHNvIGhhcyBhcm0tY21uIHRoZW4gaXQn cyBhbHJlYWR5IG1vcmUgdGhhbiBiYWQgZW5vdWdoIChzb3JyeSEpIC0gZGVzY3JpYmluZyAyOSBk aXN0aW5jdCBldmVudHMgYXMganVzdCAyOSBldmVudHMgd2lsbCBiZSBhIGxvdCBtb3JlIHBvcHVs YXIgYW5kIG1hbmFnZWFibGUuIElmIHlvdSBsaWtlIHlvdSBjYW4gb3V0cHV0ICJsYW5lPT8iIGlu IHRoZSBldmVudCBzdHJpbmcgdG8gbWFrZSBpdCBldmVuIG1vcmUgb2J2aW91cyAtIHBlcmYgdG9v bCB3aWxsIHRoZW4gcmVxdWlyZSB0aGUgdXNlciB0byBwcm92aWRlIGEgbGFuZSB2YWx1ZSBpbnN0 ZWFkIG9mIGRlZmF1bHRpbmcgdG8gMCBpZiBpdCBpc24ndCBzcGVjaWZpZWQuCgpHb3QgeW91ciBw b2ludCwgdGhlIHByb2xlbSBpcyB0aGF0IHdlIGNhbid0IHVzZSBwYXJ0IG9mIHN5bWJvbGljIG5h bWUsCnJpZ2h0PwoKInR4X2lvX3JlYWRfbGFuZTAiIHZzLiAidHhfaW9fcmVhZCxsYW5lPTAiLCBJ IHByZWZlciB0aGUgbGF0dGVyLiBCdXQKdGhlIHJpZ2h0IGxhdHRlciBpcyAiZXZlbnRpZD0weDcw NSxsYW5lPTAiLCByaWdodD8KCkkgc2hvdWxkIGFkZCBhIGRlc2NyaXB0aW9uIGluIGRvY3VtZW50 LgoKPiAKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBfX2R3Y19wY2llX3BtdV9wcm9iZShzdHJ1 Y3QgZHdjX3BjaWVfcG11X3ByaXYgKnByaXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RydWN0IGR3Y19wY2llX3JwX2luZm8gKnJwX2luZm8pCj4+ICt7Cj4+ICvCoMKgwqAg c3RydWN0IGR3Y19wY2llX3BtdSAqcGNpZV9wbXU7Cj4+ICvCoMKgwqAgc3RydWN0IGRldmljZSAq ZGV2Owo+PiArwqDCoMKgIGNoYXIgKm5hbWU7Cj4+ICvCoMKgwqAgaW50IHJldDsKPj4gKwo+PiAr wqDCoMKgIHBjaWVfcG11ID0gJnJwX2luZm8tPnBjaWVfcG11Owo+PiArwqDCoMKgIGRldiA9ICZy cF9pbmZvLT5wZGV2LT5kZXY7Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBkd2NfcGNpZV9wbXVfYXR0 cl9pbml0KHByaXYsIHJwX2luZm8pOwo+PiArwqDCoMKgIGlmIChyZXQpIHsKPj4gK8KgwqDCoMKg wqDCoMKgIHBjaV9lcnIocnBfaW5mby0+cGRldiwgIlBNVSBhdHRyIGluaXQgZmFpbCByZXQ9JWRc biIsIHJldCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIH0KPj4g Kwo+PiArwqDCoMKgIHBjaWVfcG11LT5kZXYgPSBkZXY7Cj4+ICvCoMKgwqAgcGNpZV9wbXUtPnBt dSA9IChzdHJ1Y3QgcG11KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAubW9kdWxlwqDCoMKgwqDCoMKg wqAgPSBUSElTX01PRFVMRSwKPj4gK8KgwqDCoMKgwqDCoMKgIC50YXNrX2N0eF9ucsKgwqDCoCA9 IHBlcmZfaW52YWxpZF9jb250ZXh0LAo+PiArwqDCoMKgwqDCoMKgwqAgLnBtdV9lbmFibGXCoMKg wqAgPSBOVUxMLAo+PiArwqDCoMKgwqDCoMKgwqAgLnBtdV9kaXNhYmxlwqDCoMKgID0gTlVMTCwK PiAKPiBJZiBJIGNvdW50ZWQgcmlnaHQgdGhlcmUgYXJlIHN0aWxsIDI4IG90aGVyIGZpZWxkcyBi ZWluZyBkZWZhdWx0LWluaXRpYWxpc2VkIHRvIDAgb3IgTlVMTCBoZXJlLCB3aGF0J3Mgc3BlY2lh bCBhYm91dCB0aGVzZSB0d28/IDspCgpOb3BlLCBJIHdpbGwgZGVsZXRlIGl0LiBJdCBpcyBvcHRp b25hbCB0byBpbXBsZW1lbnQuCgo+IAo+PiArwqDCoMKgwqDCoMKgwqAgLmV2ZW50X2luaXTCoMKg wqAgPSBkd2NfcGNpZV9wbXVfZXZlbnRfaW5pdCwKPj4gK8KgwqDCoMKgwqDCoMKgIC5hZGTCoMKg wqDCoMKgwqDCoCA9IGR3Y19wY2llX3BtdV9ldmVudF9hZGQsCj4+ICvCoMKgwqDCoMKgwqDCoCAu ZGVswqDCoMKgwqDCoMKgwqAgPSBkd2NfcGNpZV9wbXVfZXZlbnRfZGVsLAo+PiArwqDCoMKgwqDC oMKgwqAgLnN0YXJ0wqDCoMKgwqDCoMKgwqAgPSBkd2NfcGNpZV9wbXVfZXZlbnRfc3RhcnQsCj4+ ICvCoMKgwqDCoMKgwqDCoCAuc3RvcMKgwqDCoMKgwqDCoMKgID0gZHdjX3BjaWVfcG11X2V2ZW50 X3N0b3AsCj4+ICvCoMKgwqDCoMKgwqDCoCAucmVhZMKgwqDCoMKgwqDCoMKgID0gZHdjX3BjaWVf cG11X2V2ZW50X3JlYWQsCj4+ICvCoMKgwqDCoMKgwqDCoCAuYXR0cl9ncm91cHPCoMKgwqAgPSBy cF9pbmZvLT5wY2llX3BtdV9hdHRyX2dyb3VwcywKPj4gK8KgwqDCoMKgwqDCoMKgIC5jYXBhYmls aXRpZXPCoMKgwqAgPSBQRVJGX1BNVV9DQVBfTk9fRVhDTFVERSwKPj4gK8KgwqDCoCB9Owo+PiAr Cj4+ICvCoMKgwqAgbmFtZSA9IGRldm1fa2FzcHJpbnRmKHByaXYtPmRldiwgR0ZQX0tFUk5FTCwg ImR3Y19yb290cG9ydF8leCIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJwX2luZm8tPmJkZik7Cj4+ICvCoMKgwqAgaWYgKCFuYW1lKQo+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBQaWNrIG9u ZSBDUFUgdG8gYmUgdGhlIHByZWZlcnJlZCBvbmUgb24gbG9jYWwgTlVNQSBub2RlLgo+PiArwqDC oMKgwqAgKgo+PiArwqDCoMKgwqAgKiBOb3RlLCB0aGlzIFBNVSBkb2VzIE5PVCBzdXBwb3J0IGlu dGVycnVwdCwgc2V0IG9uX2NwdSB0byBpbmRpY2F0ZSBpdAo+PiArwqDCoMKgwqAgKiBpcyBhIHVu Y29yZSBQTVUgZGV2aWNlLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBwY2llX3BtdS0+b25f Y3B1ID0gY3B1bWFza19sb2NhbF9zcHJlYWQoMCwgZGV2X3RvX25vZGUocGNpZV9wbXUtPmRldikp Owo+IAo+IFlvdSBuZWVkIHRvIGNvcGUgd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgdGhhdCBDUFUg Z29pbmcgb2ZmbGluZS4KCkFzIEkgY29tbWVudGVkIGhlcmUsIHRoZSBQTVUgZG9lcyBOT1Qgc3Vw cG9ydCBpbnRlcnJ1cHQsIGFuZCB0aGUgb25fY3B1Cmp1c3QgaW5kaWNhdGUgaXQgaXMgYSB1bmNv cmUgUE1VIGRldmljZSBhcyBZaWNvbmcgWWFuZyBzdWdnZXN0ZWQuIFNvIHRoZQpzZWxlY3RlZCBD UFUgaXMgbm90IHJlYWxseSB1c2VkLgoKRG8gd2UgbmVlZCB0byBjYXJlIGFib3V0IHRoYXQgQ1BV IGdvaW5nIG9mZmxpbmU/Cgo+IAo+PiArwqDCoMKgIHJldCA9IHBlcmZfcG11X3JlZ2lzdGVyKCZw Y2llX3BtdS0+cG11LCBuYW1lLCAtMSk7Cj4+ICvCoMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKg wqDCoMKgwqAgcGNpX2VycihycF9pbmZvLT5wZGV2LCAiRXJyb3IgJWQgcmVnaXN0ZXJpbmcgUE1V IEAleFxuIiwgcmV0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnBfaW5m by0+YmRmKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICvCoMKgwqAgfQo+PiAr Cj4+ICvCoMKgwqAgcnBfaW5mby0+cG11X2lzX3JlZ2lzdGVyID0gdHJ1ZTsKPj4gKwo+PiArwqDC oMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3Qg ZHdjX3BjaWVfcG11X3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPj4g K8KgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVfcG11ICpwY2llX3BtdTsKPj4gK8KgwqDCoCBzdHJ1Y3Qg ZHdjX3BjaWVfcnBfaW5mbyAqcnBfaW5mbzsKPj4gKwo+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hf ZW50cnkocnBfaW5mbywgJnByaXYtPnJwX2luZm9zLCBycF9ub2RlKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoCBpZiAocnBfaW5mby0+cG11X2lzX3JlZ2lzdGVyKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHBjaWVfcG11ID0gJnJwX2luZm8tPnBjaWVfcG11Owo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwZXJmX3BtdV91bnJlZ2lzdGVyKCZwY2llX3BtdS0+cG11KTsKPj4gK8KgwqDCoMKg wqDCoMKgIH0KPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4+ICt7Cj4+ICvCoMKgwqAgaW50IHJldDsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHdjX3BjaWVf cG11X3ByaXYgKnByaXY7Cj4+ICvCoMKgwqAgc3RydWN0IGR3Y19wY2llX3JwX2luZm8gKnJwX2lu Zm87Cj4+ICsKPj4gK8KgwqDCoCBwcml2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVv ZigqcHJpdiksIEdGUF9LRVJORUwpOwo+PiArwqDCoMKgIGlmICghcHJpdikKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiArCj4+ICvCoMKgwqAgcHJpdi0+ZGV2ID0gJnBkZXYt PmRldjsKPj4gK8KgwqDCoCBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKPj4gKwo+ PiArwqDCoMKgIC8qIElmIFJBU19ERVMgUE1VIGlzIG5vdCBzdXBwb3J0ZWQgb24gY3VycmVudCBw bGF0Zm9ybSwga2VlcCBzaWxlbnQgKi8KPj4gK8KgwqDCoCByZXQgPSBkd2NfcGNpZV9yYXNfZGVz X2Rpc2NvdmVyKHByaXYpOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gcmV0Owo+PiArCj4+ICvCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeShycF9pbmZvLCAm cHJpdi0+cnBfaW5mb3MsIHJwX25vZGUpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBwY2lf ZGV2ICpycCA9IHJwX2luZm8tPnBkZXY7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IF9f ZHdjX3BjaWVfcG11X3Byb2JlKHByaXYsIHJwX2luZm8pOwo+IAo+IElmIHRoZSBQTVVzIGFyZSBp bmRlcGVuZGVudCBvZiBlYWNoIG90aGVyLCB3aHkgbm90IGp1c3QgcHJvYmUgdGhlbSBkaXJlY3Rs eSBkdXJpbmcgdGhlIFBDSWUgY2FwYWJpbGl0eSB3YWxrPyBUaGF0IHdheSB5b3UgY291bGQgZWFz aWx5IGVuc3VyZSB0aGF0IHRoZSBsaXN0IG9ubHkgZXZlciBjb250YWlucyBzdWNjZXNzZnVsbHkt cmVnaXN0ZXJlZCBQTVVzIGJ5IGNvbnN0cnVjdGlvbiwgYW5kIG1ha2UgY2xlYW51cCBldmVuIHNp bXBsZXIuCgpZZXMsIHRoZXkgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIgYW5kIGJlbG9u Z3MgdG8gZGlmZmVyZW50IHJvb3QgcG9ydC4KR29vZCBzdWdnZXN0aW9uLCBJIHdpbGwgcHJvYmUg dGhlbSBkdXJpbmcgdGhlIFBDSWUgY2FwYWJpbGl0eSB3YWxrIGluIG5leHQgdmVyc2lvbi4KCgo+ PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBk ZXZfZXJyKCZycC0+ZGV2LCAiUENJZSBQTVUgcHJvYmUgZmFpbFxuIik7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGdvdG8gcG11X3VucmVnaXN0ZXI7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICsKPj4gK3BtdV91bnJlZ2lz dGVyOgo+PiArwqDCoMKgIGR3Y19wY2llX3BtdV9yZW1vdmUocGRldik7Cj4+ICsKPj4gK8KgwqDC oCByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBkd2NfcGNpZV9wbXVfZHJpdmVyID0gewo+PiArwqDCoMKgIC5wcm9iZSA9IGR3Y19wY2llX3Bt dV9wcm9iZSwKPj4gK8KgwqDCoCAucmVtb3ZlID0gZHdjX3BjaWVfcG11X3JlbW92ZSwKPj4gK8Kg wqDCoCAuZHJpdmVyID0gey5uYW1lID0gImR3Y19wY2llX3BtdSIsfSwKPj4gK307Cj4+ICsKPj4g K3N0YXRpYyBpbnQgX19pbml0IGR3Y19wY2llX3BtdV9pbml0KHZvaWQpCj4+ICt7Cj4+ICvCoMKg wqAgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgIHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rl cigmZHdjX3BjaWVfcG11X2RyaXZlcik7Cj4+ICsKPj4gK8KgwqDCoCBpZiAocmV0KQo+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gKwo+PiArwqDCoMKgIGR3Y19wY2llX3BtdV9kZXYg PSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICJkd2NfcGNpZV9wbXUiLCBQTEFURk9STV9ERVZJRF9OT05FLCBOVUxMLCAw KTsKPj4gK8KgwqDCoCBpZiAoSVNfRVJSKGR3Y19wY2llX3BtdV9kZXYpKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoCBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHdjX3BjaWVfcG11X2RyaXZlcik7 Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihkd2NfcGNpZV9wbXVfZGV2KTsKPj4g K8KgwqDCoCB9Cj4gCj4gV2h5IGdvIHRocm91Z2ggYWxsIHRoaXMgYm90aGVyIG9mIGludmVudGlu ZyBhIGRldmljZSBhbmQgcmVnaXN0ZXJpbmcgYSBkcml2ZXIganVzdCB0byB0YWtlIGEgbG9uZyBy b3VuZC10cmlwIHRocm91Z2ggdGhlIGRyaXZlciBjb3JlIHRvIGNhbGwgZHdjX3BjaWVfcG11X3By b2JlKCk/IFdoeSBub3QganVzdCBkbyB0aGUgd29yayBvZiBkd2NfcGNpZV9wbXVfcHJvYmUoKSBy aWdodCBoZXJlPyBTdXJlLCB5b3UnZCBhbHNvIG5lZWQgdG8gbWFudWFsbHkgY2xlYW4gdXAgYSBj b3VwbGUgb2YgYWxsb2NhdGlvbnMgb24gZmFpbHVyZSBvciBleGl0IGluc3RlYWQgb2YgdXNpbmcg ZGV2cmVzLCBidXQgdGhhdCdzIHN0aWxsIGNvbnNpZGVyYWJseSBsZXNzIGhhc3NsZSB0aGFuIGlu dm9raW5nIHRoZSB3aG9sZSBkcml2ZXIgbW9kZWwganVzdCB0byBkaXNndWlzZSBhIGxpc3RfaGVh ZCBhbmQgYSBjb3VwbGUgb2YgZnVuY3Rpb24gY2FsbHMuCj4gCgpJIGRpcmVjdGx5IGNhbGwgZHdj X3BjaWVfcG11X3Byb2JlIGluIGZpcnN0IGludGVybmFsIHZlcnNpb24uIEkgc2VlCnNvbWUgUE1V IGRyaXZlcnMgcmVnaXN0ZXIgc2ltcGxlIHBsYXRmb3JtIGRldmljZXMsIGxpa2UgcmlzY3ZfcG11 X2xlZ2FjeS5jCmFuZCByaXNjdl9wbXVfc2JpLmMuCgpJZiB5b3UgYXJlIGFza2luZyB0byBjYWxs IGR3Y19wY2llX3BtdV9wcm9iZSgpIGRpcmVjdGx5LCBJJ2QKbGlrZSB0byBjaGFuZ2UgaXQgYmFj ay4KCj4gVGhhbmtzLAo+IFJvYmluLgo+IAoKVGhhbmsgeW91IHZlcnkgbXVjaCBmb3IgeW91ciB2 YWx1YWJsZSBjb21tZW50cy4KCkJlc3QgUmVnYXJkcywKU2h1YWkKCgo+PiArCj4+ICvCoMKgwqAg cmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9fZXhpdCBkd2NfcGNpZV9wbXVf ZXhpdCh2b2lkKQo+PiArewo+PiArwqDCoMKgIHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGR3 Y19wY2llX3BtdV9kZXYpOwo+PiArwqDCoMKgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZk d2NfcGNpZV9wbXVfZHJpdmVyKTsKPj4gK30KPj4gKwo+PiArbW9kdWxlX2luaXQoZHdjX3BjaWVf cG11X2luaXQpOwo+PiArbW9kdWxlX2V4aXQoZHdjX3BjaWVfcG11X2V4aXQpOwo+PiArCj4+ICtN T0RVTEVfREVTQ1JJUFRJT04oIlBNVSBkcml2ZXIgZm9yIERlc2lnbldhcmUgQ29yZXMgUENJIEV4 cHJlc3MgQ29udHJvbGxlciIpOwo+PiArTU9EVUxFX0FVVEhPUigiU2h1YWkgeHVlIDx4dWVzaHVh aUBsaW51eC5hbGliYWJhLmNvbT4iKTsKPj4gK01PRFVMRV9BVVRIT1IoIldlbiBDaGVuZyA8eWlu eHVhbl9jd0BsaW51eC5hbGliYWJhLmNvbT4iKTsKPj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIi KTsKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFy bS1rZXJuZWwK