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 D44B4C32771 for ; Sat, 24 Sep 2022 08:02:25 +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:MIME-Version:Date: Message-ID:From:References:To:Subject:CC:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=EmHbDRG99KeGIvpLhWVpVXFkB+1bwDZ8y1YMv5g02GE=; b=Mgd2n6dWJsYZHqTPRGD5KhkZz8 FFJHJbvu3StKuCe8RJQc9hH7S3WtxugZv1o6yi/ukCC/sps+bCGXwPBkDeFnTOSCNrCeChqKlOKvN HFu6zUom1ukNuA08/2wqISNvk7vQqhv6swewbEfTBgV06uQ5RSXrWdLeXgOKGS9yGXzhq/bBiH12d T0pmhH5OlteG69BNsV0Akz2bWnowAO12Wfc1jajxFZZBFYzjc79zRLD43h5ejzkQxUXgsaacctfYq ztEDmyxrAlKq8XGIpKLP0RnRpcia6/5h2svDBfxIlV7CxrZxZSqu2SyW3BGmcyYkL7XC8ROuzFZpG 3eidM6HA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oc05a-006bdA-4P; Sat, 24 Sep 2022 08:00:42 +0000 Received: from szxga02-in.huawei.com ([45.249.212.188]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oc05S-006bar-Nu for linux-arm-kernel@lists.infradead.org; Sat, 24 Sep 2022 08:00:40 +0000 Received: from canpemm500009.china.huawei.com (unknown [172.30.72.57]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4MZLt23Mp1zHtgP; Sat, 24 Sep 2022 15:55:38 +0800 (CST) Received: from [10.67.102.169] (10.67.102.169) by canpemm500009.china.huawei.com (7.192.105.203) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Sat, 24 Sep 2022 16:00:22 +0800 CC: , , , , , , , , , Subject: Re: [PATCH v1 2/3] drivers/perf: add DesignWare PCIe PMU driver To: Shuai Xue References: <20220917121036.14864-1-xueshuai@linux.alibaba.com> <20220917121036.14864-3-xueshuai@linux.alibaba.com> From: Yicong Yang Message-ID: <0759a5ad-cb1f-176b-5145-0b27ad69b731@huawei.com> Date: Sat, 24 Sep 2022 16:00:22 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.5.1 MIME-Version: 1.0 In-Reply-To: X-Originating-IP: [10.67.102.169] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To canpemm500009.china.huawei.com (7.192.105.203) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220924_010035_331933_024D4765 X-CRM114-Status: GOOD ( 22.34 ) 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 T24gMjAyMi85LzIzIDIzOjQzLCBTaHVhaSBYdWUgd3JvdGU6Cj4gCj4gCj4g5ZyoIDIwMjIvOS8y MyBBTTExOjMwLCBZaWNvbmcgWWFuZyDlhpnpgZM6Cj4+IE9uIDIwMjIvOS8xNyAyMDoxMCwgU2h1 YWkgWHVlIHdyb3RlOgo+Pj4gVGhpcyBjb21taXQgYWRkcyB0aGUgUENJZSBQZXJmb3JtYW5jZSBN b25pdG9yaW5nIFVuaXQgKFBNVSkgZHJpdmVyIHN1cHBvcnQKPj4+IGZvciBULUhlYWQgWWl0aWFu IFNvQyBjaGlwLiBZaXRpYW4gaXMgYmFzZWQgb24gdGhlIFN5bm9wc3lzIFBDSSBFeHByZXNzCj4+ PiBDb3JlIGNvbnRyb2xsZXIgSVAgd2hpY2ggcHJvdmlkZXMgc3RhdGlzdGljcyBmZWF0dXJlLiBU aGUgUE1VIGlzIG5vdCBhIFBDSWUKPj4+IFJvb3QgQ29tcGxleCBpbnRlZ3JhdGVkIEVuZCBQb2lu dChSQ2lFUCkgZGV2aWNlIGJ1dCBvbmx5IHJlZ2lzdGVyIGNvdW50ZXJzCj4+PiBwcm92aWRlZCBi eSBlYWNoIFBDSWUgUm9vdCBQb3J0Lgo+Pj4KPj4+IFRvIGZhY2lsaXRhdGUgY29sbGVjdGlvbiBv ZiBzdGF0aXN0aWNzIHRoZSBjb250cm9sbGVyIHByb3ZpZGVzIHRoZQo+Pj4gZm9sbG93aW5nIHR3 byBmZWF0dXJlcyBmb3IgZWFjaCBSb290IFBvcnQ6Cj4+Pgo+Pj4gLSBUaW1lIEJhc2VkIEFuYWx5 c2lzIChSWC9UWCBkYXRhIHRocm91Z2hwdXQgYW5kIHRpbWUgc3BlbnQgaW4gZWFjaAo+Pj4gICBs b3ctcG93ZXIgTFRTU00gc3RhdGUpCj4+PiAtIEV2ZW50IGNvdW50ZXJzIChFcnJvciBhbmQgTm9u LUVycm9yIGZvciBsYW5lcykKPj4+Cj4+PiBOb3RlLCBvbmx5IG9uZSBjb3VudGVyIGZvciBlYWNo IHR5cGUuCj4+Pgo+Pj4gVGhpcyBkcml2ZXIgYWRkIFBNVSBkZXZpY2VzIGZvciBlYWNoIFBDSWUg Um9vdCBQb3J0LiBBbmQgdGhlIFBNVSBkZXZpY2UgaXMKPj4+IG5hbWVkIGJhc2VkIHRoZSBCREYg b2YgUm9vdCBQb3J0LiBGb3IgZXhhbXBsZSwKPj4+Cj4+PiAgICAgMTA6MDAuMCBQQ0kgYnJpZGdl OiBEZXZpY2UgMWRlZDo4MDAwIChyZXYgMDEpCj4+Pgo+Pj4gdGhlIFBNVSBkZXZpY2UgbmFtZSBm b3IgdGhpcyBSb290IFBvcnQgaXMgcGNpZV9iZGZfMTAwMDAwLgo+Pj4KPj4+IEV4YW1wbGUgdXNh Z2Ugb2YgY291bnRpbmcgUENJZSBSWCBUTFAgZGF0YSBwYXlsb2FkIChVbml0cyBvZiAxNiBieXRl cyk6Ogo+Pj4KPj4+ICAgICAkIyBwZXJmIHN0YXQgLWEgLWUgcGNpZV9iZGZfMjAwL1J4X1BDSWVf VExQX0RhdGFfUGF5bG9hZC8KPj4+Cj4+PiBhdmVyYWdlIFJYIGJhbmR3aWR0aCBjYW4gYmUgY2Fs Y3VsYXRlZCBsaWtlIHRoaXM6Cj4+Pgo+Pj4gICAgIFBDSWUgVFggQmFuZHdpZHRoID0gUENJRV9U WF9EQVRBICogMTZCIC8gTWVhc3VyZV9UaW1lX1dpbmRvdwo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6 IFNodWFpIFh1ZSA8eHVlc2h1YWlAbGludXguYWxpYmFiYS5jb20+Cj4+PiAtLS0KPj4+ICBkcml2 ZXJzL3BlcmYvS2NvbmZpZyAgICAgICAgfCAgIDcgKwo+Pj4gIGRyaXZlcnMvcGVyZi9NYWtlZmls ZSAgICAgICB8ICAgMSArCj4+PiAgZHJpdmVycy9wZXJmL2R3Y19wY2llX3BtdS5jIHwgOTc2ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4gIDMgZmlsZXMgY2hhbmdlZCwg OTg0IGluc2VydGlvbnMoKykKPj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wZXJmL2R3 Y19wY2llX3BtdS5jCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9LY29uZmlnIGIv ZHJpdmVycy9wZXJmL0tjb25maWcKPj4+IGluZGV4IDFlMmQ2OTQ1Mzc3MS4uMTFhZTk5ZGU1YmJm IDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9wZXJmL0tjb25maWcKPj4+ICsrKyBiL2RyaXZlcnMv cGVyZi9LY29uZmlnCj4+PiBAQCAtMTkyLDQgKzE5MiwxMSBAQCBjb25maWcgTUFSVkVMTF9DTjEw S19ERFJfUE1VCj4+PiAgCSAgRW5hYmxlIHBlcmYgc3VwcG9ydCBmb3IgTWFydmVsbCBERFIgUGVy Zm9ybWFuY2UgbW9uaXRvcmluZwo+Pj4gIAkgIGV2ZW50IG9uIENOMTBLIHBsYXRmb3JtLgo+Pj4g IAo+Pj4gK2NvbmZpZyBDT05GSUdfRFdDX1BDSUVfUE1VCj4+PiArCXRyaXN0YXRlICJFbmFibGUg U3lub3BzeXMgRGVzaWduV2FyZSBQQ0llIFBNVSBTdXBwb3J0Igo+Pj4gKwlkZXBlbmRzIG9uIEFS TTY0IHx8IChDT01QSUxFX1RFU1QgJiYgNjRCSVQpCj4+PiArCWhlbHAKPj4+ICsJICBFbmFibGUg cGVyZiBzdXBwb3J0IGZvciBTeW5vcHN5cyBEZXNpZ25XYXJlIFBDSWUgUE1VIFBlcmZvcm1hbmNl Cj4+PiArCSAgbW9uaXRvcmluZyBldmVudCBvbiBZaXRhbiA3MTAgcGxhdGZvcm0uCj4+PiArCj4+ PiAgZW5kbWVudQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVyZi9NYWtlZmlsZSBiL2RyaXZl cnMvcGVyZi9NYWtlZmlsZQo+Pj4gaW5kZXggNTdhMjc5YzYxZGY1Li4zNmY3NWNiMGYzMjAgMTAw NjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL3BlcmYvTWFrZWZpbGUKPj4+ICsrKyBiL2RyaXZlcnMvcGVy Zi9NYWtlZmlsZQo+Pj4gQEAgLTIwLDMgKzIwLDQgQEAgb2JqLSQoQ09ORklHX0FSTV9ETUM2MjBf UE1VKSArPSBhcm1fZG1jNjIwX3BtdS5vCj4+PiAgb2JqLSQoQ09ORklHX01BUlZFTExfQ04xMEtf VEFEX1BNVSkgKz0gbWFydmVsbF9jbjEwa190YWRfcG11Lm8KPj4+ICBvYmotJChDT05GSUdfTUFS VkVMTF9DTjEwS19ERFJfUE1VKSArPSBtYXJ2ZWxsX2NuMTBrX2Rkcl9wbXUubwo+Pj4gIG9iai0k KENPTkZJR19BUFBMRV9NMV9DUFVfUE1VKSArPSBhcHBsZV9tMV9jcHVfcG11Lm8KPj4+ICtvYmot JChDT05GSUdfRFdDX1BDSUVfUE1VKSArPSBkd2NfcGNpZV9wbXUubwo+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvcGVyZi9kd2NfcGNpZV9wbXUuYyBiL2RyaXZlcnMvcGVyZi9kd2NfcGNpZV9wbXUu Ywo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uODFlNTM0 YmUxM2ZhCj4+PiAtLS0gL2Rldi9udWxsCj4+PiArKysgYi9kcml2ZXJzL3BlcmYvZHdjX3BjaWVf cG11LmMKPj4+IEBAIC0wLDAgKzEsOTc2IEBACj4+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKPj4+ICsvKgo+Pj4gKyAqIFN5bm9wc3lzIERlc2lnbldhcmUgUENJZSBQTVUg ZHJpdmVyCj4+PiArICoKPj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjEsIDIwMjIgQWxpYmFiYSBJ bmMuCj4+PiArICovCj4+PiArwqAKPj4+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4+PiArI2lu Y2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgo+ Pj4gKyNpbmNsdWRlIDxsaW51eC9jcHVob3RwbHVnLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2Nw dW1hc2suaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4+PiArI2luY2x1ZGUgPGxp bnV4L2Vycm5vLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+Pj4gKyNpbmNsdWRl IDxsaW51eC9saXN0Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KPj4+ICsj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3Nt cC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgo+Pj4gKwo+Pj4gKyNkZWZpbmUgRFJWX05BTUUJCQkJImR3Y19wY2llX3BtdSIKPj4+ ICsjZGVmaW5lIERFVl9OQU1FCQkJCSJkd2NfcGNpZV9wbXUiCj4+PiArI2RlZmluZSBSUF9OVU1f TUFYCQkJCTMyIC8qIDJkaWUgKiA0UkMgKiA0Q3Ryb2wgKi8KPj4+ICsjZGVmaW5lIEFUVFJJX05B TUVfTUFYX1NJWkUJCQkzMgo+Pj4gKwo+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfVlNFQ19JRAkJCTB4 MDIKPj4+ICsjZGVmaW5lIERXQ19QQ0lFX1ZTRUNfUkVWCQkJMHgwNAo+Pj4gKwo+Pj4gKyNkZWZp bmUgRFdDX1BDSUVfTElOS19DQVBBQklMSVRJRVNfUkVHCQkweEMKPj4+ICsjZGVmaW5lIERXQ19Q Q0lFX0xBTkVfU0hJRlQJCQk0Cj4+PiArI2RlZmluZSBEV0NfUENJRV9MQU5FX01BU0sJCQlHRU5N QVNLKDksIDQpCj4+PiArCj4+PiArI2RlZmluZSBEV0NfUENJRV9FVkVOVF9DTlRfQ1RSTAkJCTB4 OAo+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfX0NOVF9FVkVOVF9TRUxFQ1RfU0hJRlQJMTYKPj4+ICsj ZGVmaW5lIERXQ19QQ0lFX19DTlRfRVZFTlRfU0VMRUNUX01BU0sJCUdFTk1BU0soMjcsIDE2KQo+ Pj4gKyNkZWZpbmUgRFdDX1BDSUVfX0NOVF9MQU5FX1NFTEVDVF9TSElGVAkJOAo+Pj4gKyNkZWZp bmUgRFdDX1BDSUVfX0NOVF9MQU5FX1NFTEVDVF9NQVNLCQlHRU5NQVNLKDExLCA4KQo+Pj4gKyNk ZWZpbmUgRFdDX1BDSUVfX0NOVF9TVEFUVVNfU0hJRlQJCTcKPj4+ICsjZGVmaW5lIERXQ19QQ0lF X19DTlRfU1RBVFVTX01BU0sJCUJJVCg3KQo+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfX0NOVF9FTkFC TEVfU0hJRlQJCTIKPj4+ICsjZGVmaW5lIERXQ19QQ0lFX19DTlRfRU5BQkxFX01BU0sJCUdFTk1B U0soNCwgMikKPj4+ICsjZGVmaW5lIERXQ19QQ0lFX1BFUl9FVkVOVF9PRkYJCQkoMHgxIDw8IERX Q19QQ0lFX19DTlRfRU5BQkxFX1NISUZUKQo+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfUEVSX0VWRU5U X09OCQkJKDB4MyA8PCBEV0NfUENJRV9fQ05UX0VOQUJMRV9TSElGVCkKPj4+ICsjZGVmaW5lIERX Q19QQ0lFX0VWRU5UX0NMRUFSX01BU0sJCUdFTk1BU0soMSwgMCkKPj4+ICsKPj4+ICsjZGVmaW5l IERXQ19QQ0lFX0VWRU5UX0NOVF9EQVRBCQkJMHhDCj4+PiArCj4+PiArI2RlZmluZSBEV0NfUENJ RV9USU1FX0JBU0VEX0FOQUxZU0lTX0NUUkwJMHgxMAo+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfX1RJ TUVfQkFTRURfUkVQT1JUX1NFTEVDVF9TSElGVAkyNAo+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfX1RJ TUVfQkFTRURfUkVQT1JUX1NFTEVDVF9NQVNLCUdFTk1BU0soMzEsIDI0KQo+Pj4gKyNkZWZpbmUg RFdDX1BDSUVfX1RJTUVfQkFTRURfRFVSQVRJT05fU0hJRlQJOAo+Pj4gKyNkZWZpbmUgRFdDX1BD SUVfX1RJTUVfQkFTRURfRFVSQVRJT05fU0VMRUNUCUdFTk1BU0soMTUsIDgpCj4+PiArI2RlZmlu ZSBEV0NfUENJRV9EVVJBVElPTl9NQU5VQUxfQ1RSTAkJMHgwCj4+PiArI2RlZmluZSBEV0NfUENJ RV9EVVJBVElPTl8xTVMJCQkweDEKPj4+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzEwTVMJ CQkweDIKPj4+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzEwME1TCQkJMHgzCj4+PiArI2Rl ZmluZSBEV0NfUENJRV9EVVJBVElPTl8xUwkJCTB4NAo+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVS QVRJT05fMlMJCQkweDUKPj4+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OXzRTCQkJMHg2Cj4+ PiArI2RlZmluZSBEV0NfUENJRV9EVVJBVElPTl80VVMJCQkweGZmCj4+PiArI2RlZmluZSBEV0Nf UENJRV9fVElNRV9CQVNFRF9DT1VOVEVSX0VOQUJMRQkxCj4+PiArCj4+PiArI2RlZmluZSBEV0Nf UENJRV9USU1FX0JBU0VEX0FOQUxZU0lTX0RBVEFfUkVHX0xPVwkweDE0Cj4+PiArI2RlZmluZSBE V0NfUENJRV9USU1FX0JBU0VEX0FOQUxZU0lTX0RBVEFfUkVHX0hJR0gJMHgxOAo+Pj4gKwo+Pj4g Ky8qIEV2ZW50IGF0dHJpYnV0ZXMgKi8KPj4+ICsjZGVmaW5lIERXQ19QQ0lFX0NPTkZJR19FVkVO VElECQkJR0VOTUFTSygxNSwgMCkKPj4+ICsjZGVmaW5lIERXQ19QQ0lFX0NPTkZJR19UWVBFCQkJ R0VOTUFTSygxOSwgMTYpCj4+PiArI2RlZmluZSBEV0NfUENJRV9DT05GSUdfTEFORQkJCUdFTk1B U0soMjcsIDIwKQo+Pj4gKwo+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfRVZFTlRfSUQoZXZlbnQpCUZJ RUxEX0dFVChEV0NfUENJRV9DT05GSUdfRVZFTlRJRCwgKGV2ZW50KS0+YXR0ci5jb25maWcpCj4+ PiArI2RlZmluZSBEV0NfUENJRV9FVkVOVF9UWVBFKGV2ZW50KQlGSUVMRF9HRVQoRFdDX1BDSUVf Q09ORklHX1RZUEUsIChldmVudCktPmF0dHIuY29uZmlnKQo+Pj4gKyNkZWZpbmUgRFdDX1BDSUVf RVZFTlRfTEFORShldmVudCkJRklFTERfR0VUKERXQ19QQ0lFX0NPTkZJR19MQU5FLCAoZXZlbnQp LT5hdHRyLmNvbmZpZykKPj4+ICsKPj4+ICsjZGVmaW5lIERXQ19QQ0lFX1BNVV9IQVNfUkVHSVNU RVIJCTEKPj4+ICsKPj4+ICtlbnVtIGR3Y19wY2llX2V2ZW50X3R5cGUgewo+Pj4gKwlEV0NfUENJ RV9UWVBFX0lOVkFMSUQsCj4+PiArCURXQ19QQ0lFX1RJTUVfQkFTRV9FVkVOVCwKPj4+ICsJRFdD X1BDSUVfTEFORV9FVkVOVCwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCBkd2NfZXZlbnRfY291 bnRlcnMgewo+Pj4gKwljb25zdCBjaGFyIG5hbWVbMzJdOwo+Pj4gKwl1MzIgZXZlbnRfaWQ7Cj4+ PiArfTsKPj4+ICsKPj4+ICtzdHJ1Y3QgZHdjX3BjaWVfcG11IHsKPj4+ICsJc3RydWN0IGhsaXN0 X25vZGUgbm9kZTsKPj4+ICsJdW5zaWduZWQgaW50IG9uX2NwdTsKPj4+ICsJc3RydWN0IHBtdSBw bXU7Cj4+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCBk d2NfcGNpZV9pbmZvX3RhYmxlIHsKPj4+ICsJdTMyIGJkZjsKPj4+ICsJdTMyIGNhcF9wb3M7Cj4+ PiArCXUzMiBudW1fbGFuZXM7Cj4+PiArCXN0cnVjdCBwY2lfZGV2ICpwZGV2Owo+Pj4gKwlzdHJ1 Y3QgZHdjX3BjaWVfcG11IHBjaWVfcG11Owo+Pj4gKwl1OCBwbXVfaXNfcmVnaXN0ZXI7Cj4+PiAr CXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKPj4+ICsKPj4+ICsJc3RydWN0IGR3Y19wY2llX2V2 ZW50X2F0dHIgKmxhbmVfZXZlbnRfYXR0cnM7Cj4+PiArCXN0cnVjdCBhdHRyaWJ1dGUgKipwY2ll X3BtdV9ldmVudF9hdHRyczsKPj4+ICsJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2llX3BtdV9l dmVudF9hdHRyc19ncm91cDsKPj4+ICsJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcGNp ZV9wbXVfYXR0cl9ncm91cHNbNF07Cj4+PiArfTsKPj4+ICsKPj4+ICtzdHJ1Y3QgZHdjX3BjaWVf cG11X3ByaXYgewo+Pj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+PiArCXUzMiBwY2llX2N0cmxf bnVtOwo+Pj4gKwlzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV90YWJsZTsKPj4+ICt9 Owo+Pj4gKwo+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfQ1JFQVRFX0JERihzZWcsIGJ1cywgZGV2LCBm dW5jKQlcCj4+PiArCSgoKHNlZykgPDwgMjQpIHwgKCgoYnVzKSAmIDB4RkYpIDw8IDE2KSB8ICgo KGRldikgJiAweEZGKSA8PCA4KSB8IChmdW5jKSkKPj4KPj4gSnVzdCBwYXNzIHBkZXYtPmRldmZu IGFuZCB1c2UgUENJX0RFVklEKCkgdG8gc2ltcGxpZnkgaGVyZS4KPiAKPiBTb3JyeSwgYXMgZmFy IGFzIEkga25vdywgUENJX0RFVklEKCkgb3V0cHV0IGlzIG5vdCBleGFjdGx5IHRoZSBiZGYuCj4g Rm9yIGV4YW1wbGUsIGJkZiAzMDAxMDAgaXMgZGVjb2RlZCBhcyAzMDA4Lgo+IAoKU2VlIHRoZSBz dGFuZGFyZCdzIGVuY29kaW5nIG9mIEJERiAoUENJZSBTcGVjIDQuMCBGaWd1cmUgNi0zNDogUm91 dGluZyBJRHMgKFJJRHMpIGFuZCBTdXBwb3J0ZWQKR3JhbnVsYXJpdGllcykuIEFsc28gaW4gdWFw aS9saW51eC9wY2kuaCBhbmQgaW5jbHVkZS9saW51eC9wY2kuaC4gQnVzIG51bWJlciBpcyBlbmNv ZGluZyBpbgpCSVRbMTUsIDhdLCBzbG90IG51bWJlciBpbiBCSVRbNywgM10gYW5kIGZ1bmN0aW9u IG51bWJlciBmb3IgQklUWzIsIDBdLgoKWW91J3JlIHVzZSB5b3VyIGNvZGluZyBvZiAiQkRGIiBo ZXJlIGFuZCB0aG91Z2h0IGl0J3MgbW9yZSBjb252ZW5pZW50IHRvIHRoZSB1c2VyIHRvIHJlY29n bml6ZSwgYnV0CnRoYXQncyBub3Qgd2hhdCBpcyBrbm93biBvZiBCREYuIEp1c3QgdXNlIHRoZSBz dGFuZGFyZCBjb2Rpbmcgb2YgQkRGIHdpbGwgaGF2ZSBsZXNzIGFtYmlndW91cy4KCj4+Cj4+PiAr I2RlZmluZSB0b19wY2llX3BtdShwKSAoY29udGFpbmVyX29mKHAsIHN0cnVjdCBkd2NfcGNpZV9w bXUsIHBtdSkpCj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmR3Y19w Y2llX3BtdV9kZXY7Cj4+PiArc3RhdGljIGNoYXIgKmV2ZW50X2F0dHJfbmFtZSA9ICJldmVudHMi Owo+Pj4gKwo+Pj4gK3N0YXRpYyBzc2l6ZV90IGR3Y19wY2llX3BtdV9jcHVtYXNrX3Nob3coc3Ry dWN0IGRldmljZSAqZGV2LAo+Pj4gKwkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRy LAo+Pj4gKwkJCQkJIGNoYXIgKmJ1ZikKPj4+ICt7Cj4+PiArCXN0cnVjdCBkd2NfcGNpZV9wbXUg KnBjaWVfcG11ID0gdG9fcGNpZV9wbXUoZGV2X2dldF9kcnZkYXRhKGRldikpOwo+Pj4gKwo+Pj4g KwlyZXR1cm4gY3B1bWFwX3ByaW50X3RvX3BhZ2VidWYodHJ1ZSwgYnVmLCBjcHVtYXNrX29mKHBj aWVfcG11LT5vbl9jcHUpKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlIGR3Y19wY2llX3BtdV9jcHVtYXNrX2F0dHIgPQo+Pj4gK19fQVRUUihjcHVtYXNr LCAwNDQ0LCBkd2NfcGNpZV9wbXVfY3B1bWFza19zaG93LCBOVUxMKTsKPj4+ICsKPj4+ICtzdGF0 aWMgc3RydWN0IGF0dHJpYnV0ZSAqZHdjX3BjaWVfcG11X2NwdW1hc2tfYXR0cnNbXSA9IHsKPj4+ ICsJJmR3Y19wY2llX3BtdV9jcHVtYXNrX2F0dHIuYXR0ciwKPj4+ICsJTlVMTAo+Pj4gK307Cj4+ PiArCj4+PiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNpZV9wbXVfY3B1bWFza19h dHRyc19ncm91cCA9IHsKPj4+ICsJLmF0dHJzID0gZHdjX3BjaWVfcG11X2NwdW1hc2tfYXR0cnMs Cj4+PiArfTsKPj4+ICsKPj4+ICtzdHJ1Y3QgZHdjX3BjaWVfZm9ybWF0X2F0dHIgewo+Pj4gKwlz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhdHRyOwo+Pj4gKwl1NjQgZmllbGQ7Cj4+PiArCWludCBj b25maWc7Cj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgc3NpemVfdCBkd2NfcGNpZV9wbXVfZm9y bWF0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+Pj4gKwkJCQkJc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgKmF0dHIsCj4+PiArCQkJCQljaGFyICpidWYpCj4+PiArewo+Pj4gKwlzdHJ1Y3QgZHdj X3BjaWVfZm9ybWF0X2F0dHIgKmZtdCA9IGNvbnRhaW5lcl9vZihhdHRyLCB0eXBlb2YoKmZtdCks IGF0dHIpOwo+Pj4gKwlpbnQgbG8gPSBfX2ZmcyhmbXQtPmZpZWxkKSwgaGkgPSBfX2ZscyhmbXQt PmZpZWxkKTsKPj4+ICsKPj4+ICsJaWYgKGxvID09IGhpKQo+Pj4gKwkJcmV0dXJuIHNucHJpbnRm KGJ1ZiwgUEFHRV9TSVpFLCAiY29uZmlnOiVkXG4iLCBsbyk7Cj4+PiArCj4+PiArCWlmICghZm10 LT5jb25maWcpCj4+PiArCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJjb25maWc6 JWQtJWRcbiIsIGxvLCBoaSk7Cj4+PiArCj4+PiArCXJldHVybiBzbnByaW50ZihidWYsIFBBR0Vf U0laRSwgImNvbmZpZyVkOiVkLSVkXG4iLCBmbXQtPmNvbmZpZywgbG8sCj4+PiArCQkJaGkpOwo+ Pj4gK30KPj4+ICsKPj4+ICsjZGVmaW5lIF9kd2NfcGNpZV9mb3JtYXRfYXR0cihfbmFtZSwgX2Nm ZywgX2ZsZCkJCQkJXAo+Pj4gKwkoJigoc3RydWN0IGR3Y19wY2llX2Zvcm1hdF9hdHRyW10pIHt7 CQkJCVwKPj4+ICsJCS5hdHRyID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBkd2NfcGNpZV9wbXVfZm9y bWF0X3Nob3csIE5VTEwpLAlcCj4+PiArCQkuY29uZmlnID0gX2NmZywJCQkJCQlcCj4+PiArCQku ZmllbGQgPSBfZmxkLAkJCQkJCVwKPj4+ICsJfX0pWzBdLmF0dHIuYXR0cikKPj4+ICsKPj4+ICsj ZGVmaW5lIGR3Y19wY2llX2Zvcm1hdF9hdHRyKF9uYW1lLCBfZmxkKQlfZHdjX3BjaWVfZm9ybWF0 X2F0dHIoX25hbWUsIDAsIF9mbGQpCj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUg KmR3Y19wY2llX2Zvcm1hdF9hdHRyc1tdID0gewo+Pj4gKwlkd2NfcGNpZV9mb3JtYXRfYXR0cih0 eXBlLCBEV0NfUENJRV9DT05GSUdfVFlQRSksCj4+PiArCWR3Y19wY2llX2Zvcm1hdF9hdHRyKGV2 ZW50aWQsIERXQ19QQ0lFX0NPTkZJR19FVkVOVElEKSwKPj4+ICsJZHdjX3BjaWVfZm9ybWF0X2F0 dHIobGFuZSwgRFdDX1BDSUVfQ09ORklHX0xBTkUpLAo+Pj4gKwlOVUxMLAo+Pj4gK307Cj4+PiAr Cj4+PiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNpZV9wbXVfZm9ybWF0X2F0dHJz X2dyb3VwID0gewo+Pj4gKwkubmFtZSA9ICJmb3JtYXQiLAo+Pj4gKwkuYXR0cnMgPSBkd2NfcGNp ZV9mb3JtYXRfYXR0cnMsCj4+PiArfTsKPj4+ICsKPj4+ICtzdHJ1Y3QgZHdjX3BjaWVfZXZlbnRf YXR0ciB7Cj4+PiArCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGF0dHI7Cj4+PiArCWVudW0gZHdj X3BjaWVfZXZlbnRfdHlwZSB0eXBlOwo+Pj4gKwl1MTYgZXZlbnRpZDsKPj4+ICsJdTggbGFuZTsK Pj4+ICt9Owo+Pj4gKwo+Pj4gK3NzaXplX3QgZHdjX3BjaWVfZXZlbnRfc2hvdyhzdHJ1Y3QgZGV2 aWNlICpkZXYsCj4+PiArCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpw YWdlKQo+Pj4gK3sKPj4+ICsJc3RydWN0IGR3Y19wY2llX2V2ZW50X2F0dHIgKmVhdHRyOwo+Pj4g Kwo+Pj4gKwllYXR0ciA9IGNvbnRhaW5lcl9vZihhdHRyLCB0eXBlb2YoKmVhdHRyKSwgYXR0cik7 Cj4+PiArCj4+PiArCWlmIChlYXR0ci0+dHlwZSA9PSBEV0NfUENJRV9MQU5FX0VWRU5UKQo+Pj4g KwkJcmV0dXJuIHNwcmludGYocGFnZSwgImV2ZW50aWQ9MHglbHgsIHR5cGU9MHglbHgsIGxhbmU9 MHglbHhcbiIsCj4+PiArCQkJICAgICAgICh1bnNpZ25lZCBsb25nKWVhdHRyLT5ldmVudGlkLAo+ Pj4gKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyllYXR0ci0+dHlwZSwKPj4+ICsJCQkgICAgICAg KHVuc2lnbmVkIGxvbmcpZWF0dHItPmxhbmUpOwo+Pj4gKwllbHNlCj4+PiArCQlyZXR1cm4gc3By aW50ZihwYWdlLCAiZXZlbnRpZD0weCVseCwgdHlwZT0weCVseCIsCj4+PiArCQkJICAgICAgICh1 bnNpZ25lZCBsb25nKWVhdHRyLT5ldmVudGlkLAo+Pj4gKwkJCSAgICAgICAodW5zaWduZWQgbG9u ZyllYXR0ci0+dHlwZSk7Cj4+PiArfQo+Pgo+PiBJIHJlbWVtYmVyIHN5c2ZzX2VtaXQoKSBpcyBw cmVmZXJyZWQuCj4gCj4gWW91IGFyZSByaWdodCwgSSB3aWxsIHVzZSBzeXNmc19lbWl0KCkgaW4g bmV4dCB2ZXJzaW9uLgo+IAo+Pgo+Pj4gKwo+Pj4gKyNkZWZpbmUgRFdDX1BDSUVfRVZFTlRfQVRU UihfbmFtZSwgX3R5cGUsIF9ldmVudGlkLCBfbGFuZSkJCVwKPj4+ICsJKCYoKHN0cnVjdCBkd2Nf cGNpZV9ldmVudF9hdHRyW10pIHt7CQkJCVwKPj4+ICsJCS5hdHRyID0gX19BVFRSKF9uYW1lLCAw NDQ0LCBkd2NfcGNpZV9ldmVudF9zaG93LCBOVUxMKSwJXAo+Pj4gKwkJLnR5cGUgPSBfdHlwZSwJ CQkJCQlcCj4+PiArCQkuZXZlbnRpZCA9IF9ldmVudGlkLAkJCQkJXAo+Pj4gKwkJLmxhbmUgPSBf bGFuZSwJCQkJCVwKPj4+ICsJfX0pWzBdLmF0dHIuYXR0cikKPj4+ICsKPj4+ICsjZGVmaW5lIERX Q19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihfbmFtZSwgX2V2ZW50aWQpCQkJXAo+Pj4gKwlEV0Nf UENJRV9FVkVOVF9BVFRSKF9uYW1lLCBEV0NfUENJRV9USU1FX0JBU0VfRVZFTlQsIF9ldmVudGlk LCAwKQo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkd2NfcGNpZV9wbXVfdGlt ZV9ldmVudF9hdHRyc1tdID0gewo+Pj4gKwkvKiBHcm91cCAjMCAqLwo+Pj4gKwlEV0NfUENJRV9Q TVVfQkFTRV9USU1FX0FUVFIob25lX2N5Y2xlLCAweDAwKSwKPj4+ICsJRFdDX1BDSUVfUE1VX0JB U0VfVElNRV9BVFRSKFRYX0wwUywgMHgwMSksCj4+PiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVf QVRUUihSWF9MMFMsIDB4MDIpLAo+Pj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoTDAs IDB4MDMpLAo+Pj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoTDEsIDB4MDQpLAo+Pj4g KwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoTDFfMSwgMHgwNSksCj4+PiArCURXQ19QQ0lF X1BNVV9CQVNFX1RJTUVfQVRUUihMMV8yLCAweDA2KSwKPj4+ICsJRFdDX1BDSUVfUE1VX0JBU0Vf VElNRV9BVFRSKENGR19SQ1ZSWSwgMHgwNyksCj4+PiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVf QVRUUihUWF9SWF9MMFMsIDB4MDgpLAo+Pj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIo TDFfQVVYLCAweDA5KSwKPj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKE9ORV9jeWNs ZSwgMHgxMCksCj4+PiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihUWF9MMFNfLCAweDEx KSwKPj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKFJYX0wwU18sIDB4MTIpLAo+Pj4g KwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoTDBfLCAweDEzKSwKPj4+ICsJRFdDX1BDSUVf UE1VX0JBU0VfVElNRV9BVFRSKEwxXywgMHgxNyksCj4+PiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJ TUVfQVRUUihDRkdfUkNWUllfLCAweDE3KSwKPj4+ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9B VFRSKFRYX1JYX0wwU18sIDB4MTgpLAo+Pj4gKwkvKiBHcm91cCAjMSAqLwo+Pj4gKwlEV0NfUENJ RV9QTVVfQkFTRV9USU1FX0FUVFIoVHhfUENJZV9UTFBfRGF0YV9QYXlsb2FkLCAweDIwKSwKPj4+ ICsJRFdDX1BDSUVfUE1VX0JBU0VfVElNRV9BVFRSKFJ4X1BDSWVfVExQX0RhdGFfUGF5bG9hZCwg MHgyMSksCj4+PiArCURXQ19QQ0lFX1BNVV9CQVNFX1RJTUVfQVRUUihUeF9DQ0lYX1RMUF9EYXRh X1BheWxvYWQsIDB4MjIpLAo+Pj4gKwlEV0NfUENJRV9QTVVfQkFTRV9USU1FX0FUVFIoUnhfQ0NJ WF9UTFBfRGF0YV9QYXlsb2FkLCAweDIzKSwKPj4+ICsJTlVMTAo+Pj4gK307Cj4+PiArCj4+PiAr c3RhdGljIGlubGluZSB1bW9kZV90IHBjaWVfcG11X2V2ZW50X2F0dHJfaXNfdmlzaWJsZShzdHJ1 Y3Qga29iamVjdCAqa29iaiwKPj4+ICsJCQkJCQkgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIs Cj4+PiArCQkJCQkJICAgICBpbnQgdW51c2UpCj4+PiArewo+Pj4gKwlyZXR1cm4gYXR0ci0+bW9k ZTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGlubGluZSBib29sIHBjaV9kZXZfaXNfcm9vdHBv cnQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCj4+PiArewo+Pj4gKwlyZXR1cm4gKHBjaV9pc19wY2ll KHBkZXYpICYmCj4+PiArCQlwY2lfcGNpZV90eXBlKHBkZXYpID09IFBDSV9FWFBfVFlQRV9ST09U X1BPUlQpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkd2Nf cGNpZV9nZXRfYmRmKHN0cnVjdCBwY2lfZGV2ICpkZXYpCj4+PiArewo+Pj4gKwlyZXR1cm4gKERX Q19QQ0lFX0NSRUFURV9CREYocGNpX2RvbWFpbl9ucihkZXYtPmJ1cyksIGRldi0+YnVzLT5udW1i ZXIsCj4+PiArCQkJCSAgICBQQ0lfU0xPVChkZXYtPmRldmZuKSwKPj4+ICsJCQkJICAgIFBDSV9G VU5DKGRldi0+ZGV2Zm4pKSk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgZHdjX3BjaWVf ZmluZF9yYXNfZGVzX2NhcF9wb3NpdGlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50ICpwb3Mp Cj4+PiArewo+Pj4gKwl1MzIgaGVhZGVyOwo+Pj4gKwlpbnQgdnNlYyA9IDA7Cj4+PiArCj4+PiAr CXdoaWxlICgodnNlYyA9IHBjaV9maW5kX25leHRfZXh0X2NhcGFiaWxpdHkocGRldiwgdnNlYywK Pj4+ICsJCQkJCQkgICAgUENJX0VYVF9DQVBfSURfVk5EUikpKSB7Cj4+PiArCQlwY2lfcmVhZF9j b25maWdfZHdvcmQocGRldiwgdnNlYyArIFBDSV9WTkRSX0hFQURFUiwgJmhlYWRlcik7Cj4+PiAr CQkvKiBJcyB0aGUgZGV2aWNlIHBhcnQgb2YgYSBEZXNpZ25XYXJlIENvcmVzIFBDSWUgQ29udHJv bGxlciA/ICovCj4+PiArCQlpZiAoUENJX1ZORFJfSEVBREVSX0lEKGhlYWRlcikgPT0gRFdDX1BD SUVfVlNFQ19JRCAmJgo+Pj4gKwkJICAgIFBDSV9WTkRSX0hFQURFUl9SRVYoaGVhZGVyKSA9PSBE V0NfUENJRV9WU0VDX1JFVikgewo+Pj4gKwkJCSpwb3MgPSB2c2VjOwo+Pj4gKwkJCXJldHVybiAw Owo+Pj4gKwkJfQo+Pj4gKwl9Cj4+PiArCj4+PiArCXJldHVybiAtRU5PREVWOwo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9kaXNjb3ZlcihzdHJ1Y3QgZHdjX3BjaWVf cG11X3ByaXYgKnByaXYpCj4+PiArewo+Pj4gKwlpbnQgdmFsLCB3aGVyZSwgaW5kZXggPSAwOwo+ Pj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7Cj4+PiArCXN0cnVjdCBkd2NfcGNpZV9p bmZvX3RhYmxlICpwY2llX2luZm87Cj4+PiArCj4+PiArCXByaXYtPnBjaWVfdGFibGUgPQo+Pj4g KwkgICAgZGV2bV9rY2FsbG9jKHByaXYtPmRldiwgUlBfTlVNX01BWCwgc2l6ZW9mKCpwY2llX2lu Zm8pLCBHRlBfS0VSTkVMKTsKPj4+ICsJaWYgKCFwcml2LT5wY2llX3RhYmxlKQo+Pj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4+PiArCj4+PiArCXBjaWVfaW5mbyA9IHByaXYtPnBjaWVfdGFibGU7Cj4+ PiArCXdoaWxlICgocGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQs IHBkZXYpKSAhPSBOVUxMICYmCj4+Cj4+IEkgbWF5IG1pc3MgYnV0IEkgZG9uJ3QgcGNpX2Rldl9w dXQoKSB0byBiYWxhbmNlIHRoZSByZWZlcmVuY2UgY250Lgo+IAo+IEFzIHRoZSBjb21tZW50cyBp biBwY2lfZ2V0X2RldmljZSwgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBpbmNyZW1lbnRlZCBhbmQK PiBkZWNyZW1lbnRlZCBpbiB0aGUgbG9vcCBhdXRvbWF0aWNhbGx5LiBTbyB3ZSBkbyBub3QgbmVl ZCB0byB1c2UKPiBwY2lfZGV2X3B1dCgpLCByaWdodD8KPiAKPiAJSXRlcmF0ZXMgdGhyb3VnaCB0 aGUgbGlzdCBvZiBrbm93biBQQ0kgZGV2aWNlcy4gIElmIGEgUENJIGRldmljZSBpcwo+IAlmb3Vu ZCB3aXRoIGEgbWF0Y2hpbmcgQHZlbmRvciBhbmQgQGRldmljZSwgKnRoZSByZWZlcmVuY2UgY291 bnQgdG8gdGhlCj4gCWRldmljZSBpcyBpbmNyZW1lbnRlZCogYW5kIGEgcG9pbnRlciB0byBpdHMg ZGV2aWNlIHN0cnVjdHVyZSBpcyByZXR1cm5lZC4KPiAJT3RoZXJ3aXNlLCAlTlVMTCBpcyByZXR1 cm5lZC4gIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTAo+IAlhcyB0 aGUgQGZyb20gYXJndW1lbnQuICBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFy Y2hlcyBjb250aW51ZQo+IAlmcm9tIG5leHQgZGV2aWNlIG9uIHRoZSBnbG9iYWwgbGlzdC4gICpU aGUgcmVmZXJlbmNlIGNvdW50IGZvciBAZnJvbSBpcwo+IAlhbHdheXMgZGVjcmVtZW50ZWQgaWYg aXQgaXMgbm90ICVOVUxMLioKClRoYW5rcyBmb3IgdGhlIGV4cGxhbmF0aW9uLiBUaGUgdXNhZ2Ug aXMgcmlnaHQgaGVyZS4gQ2FuIHdlIHVzZSBmb3JfZWFjaF9wY2lfZGV2KCkgaW5zdGVhZD8KCkFu ZCBhbnkgcmVhc29uIHRvIGxpbWl0IHRoZSBSb290IFBvcnRzIG51bWJlciB0byBSUF9OVU1fTUFY PyBTaG91bGRuJ3Qgd2UgZmluZCBhbGwgdGhlClJvb3QgUG9ydHMgd2l0aCBQTVUgY291bnRlcnMg YW5kIG1ha2UgdXNlIG9mIHRoZW0/IExpbWl0IGl0IHdpdGggUlBfTlVNX01BWCBpcyByYXRoZXIK cGxhdGZvcm0gc3BlY2lmaWMgYW5kIHlvdSBuZWVkIHRvIGV4dGVuZCBpdCBpZiB3ZSBoYXZlIG1v cmUgUm9vdCBQb3J0cyBzb21lZGF5LgoKQW5vdGhlciBwcm9ibGVtIEkgc2VlIGhlcmUgaXMgdGhh dCB5b3Ugd2FsayBhbGwgdGhlIFJvb3QgUG9ydHMgd2l0aCBjb3VudGVycyBhbmQgcmVnaXN0ZXIK YSBQTVUgZm9yIHRoZW0uIEJ1dCB5b3UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZXkncmUgcmVtb3Zl ZCBsYXRlciB3aGVuIHlvdSB1c2UgdGhlbS4uLgoKPj4KPj4+ICsJICAgICAgIGluZGV4IDwgUlBf TlVNX01BWCkgewo+Pj4gKwkJaWYgKCFwY2lfZGV2X2lzX3Jvb3Rwb3J0KHBkZXYpKQo+Pj4gKwkJ CWNvbnRpbnVlOwo+Pj4gKwo+Pj4gKwkJcGNpZV9pbmZvW2luZGV4XS5iZGYgPSBkd2NfcGNpZV9n ZXRfYmRmKHBkZXYpOwo+Pj4gKwkJcGNpZV9pbmZvW2luZGV4XS5wZGV2ID0gcGRldjsKCi4uLnlv dSBzdG9yZSB0aGUgKnBkZXYgYW5kIHVzZSB0aGVtIGRpcmVjdGx5IGluIHRoZSBwbXVfb3BzIGJ1 dCB3aGVuIHRoZSBkZXZpY2UgaXMgaG90IHJlbW92ZWQKeW91J2xsIGFjY2VzcyBhbiBpbnZhbGlk IGFkZHJlc3MgYW5kIGNyYXNoLgoKQSBwb3NzaWJsZSBzb2x1dGlvbiBpcyB0byBiZSBub3RpZmll ZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGRldmljZSBpcyByZW1vdmVkL2FkZGVkIGFuZCBoYW5k bGUKY29ycmVjdGx5LiBPciB5b3UgY2FuIGdldCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBk ZXZpY2UgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHJlbW92ZWQsIGJ1dAp0aGlzIG1heSBub3Qg YmUgYSBnb29kIG9wdGlvbi4KCj4+PiArCj4+PiArCQlpZiAoZHdjX3BjaWVfZmluZF9yYXNfZGVz X2NhcF9wb3NpdGlvbihwZGV2LCAmd2hlcmUpKQo+Pj4gKwkJCWNvbnRpbnVlOwo+Pj4gKwo+Pj4g KwkJcGNpZV9pbmZvW2luZGV4XS5jYXBfcG9zID0gd2hlcmU7Cj4+PiArCj4+PiArCQlwY2lfcmVh ZF9jb25maWdfZHdvcmQocGRldiwKPj4+ICsJCQkJcGRldi0+cGNpZV9jYXAgKyBEV0NfUENJRV9M SU5LX0NBUEFCSUxJVElFU19SRUcsCj4+PiArCQkJCSZ2YWwpOwo+Pj4gKwkJcGNpZV9pbmZvW2lu ZGV4XS5udW1fbGFuZXMgPQo+Pj4gKwkJCSh2YWwgJiBEV0NfUENJRV9MQU5FX01BU0spID4+IERX Q19QQ0lFX0xBTkVfU0hJRlQ7Cj4+PiArCQlpbmRleCsrOwo+Pj4gKwl9Cj4+PiArCj4+PiArCWlm ICghaW5kZXgpCj4+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4+ICsKPj4+ICsJcHJpdi0+cGNpZV9j dHJsX251bSA9IGluZGV4Owo+Pj4gKwo+Pj4gKwlyZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiAr c3RhdGljIGlubGluZSBpbnQgZHdjX3BjaWVfcG11X3JlYWRfZHdvcmQoc3RydWN0IGR3Y19wY2ll X2luZm9fdGFibGUgKnBjaWVfaW5mbywKPj4+ICsJCQkJCSAgdTMyIHJlZywgdTMyICp2YWwpCj4+ PiArewo+Pj4gKwlyZXR1cm4gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaWVfaW5mby0+cGRldiwg cGNpZV9pbmZvLT5jYXBfcG9zICsgcmVnLAo+Pj4gKwkJCQkgICAgIHZhbCk7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyBpbmxpbmUgaW50IGR3Y19wY2llX3BtdV93cml0ZV9kd29yZChzdHJ1Y3Qg ZHdjX3BjaWVfaW5mb190YWJsZQo+Pj4gKwkJCQkJICAgKnBjaWVfaW5mbywgdTMyIHJlZywgdTMy IHZhbCkKPj4+ICt7Cj4+PiArCXJldHVybiBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaWVfaW5m by0+cGRldiwgcGNpZV9pbmZvLT5jYXBfcG9zICsgcmVnLAo+Pj4gKwkJCQkgICAgICB2YWwpOwo+ Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9zZXRfZXZlbnRfaWQoc3Ry dWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5mbywKPj4+ICsJCQkJICAgICBpbnQgZXZl bnRfaWQpCj4+PiArewo+Pj4gKwlpbnQgcmV0Owo+Pj4gKwl1MzIgdmFsOwo+Pj4gKwo+Pj4gKwly ZXQgPSBkd2NfcGNpZV9wbXVfcmVhZF9kd29yZChwY2llX2luZm8sIERXQ19QQ0lFX0VWRU5UX0NO VF9DVFJMLCAmdmFsKTsKPj4+ICsJaWYgKHJldCkgewo+Pj4gKwkJcGNpX2VycihwY2llX2luZm8t PnBkZXYsICJQQ0llIHJlYWQgZmFpbFxuIik7Cj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4gKwl9Cj4+ PiArCj4+PiArCXZhbCAmPSB+RFdDX1BDSUVfX0NOVF9FTkFCTEVfTUFTSzsKPj4+ICsJdmFsICY9 IH5EV0NfUENJRV9fQ05UX0VWRU5UX1NFTEVDVF9NQVNLOwo+Pj4gKwl2YWwgfD0gZXZlbnRfaWQg PDwgRFdDX1BDSUVfX0NOVF9FVkVOVF9TRUxFQ1RfU0hJRlQ7Cj4+PiArCj4+PiArCXJldCA9IGR3 Y19wY2llX3BtdV93cml0ZV9kd29yZChwY2llX2luZm8sIERXQ19QQ0lFX0VWRU5UX0NOVF9DVFJM LCB2YWwpOwo+Pj4gKwlpZiAocmV0KQo+Pj4gKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQ Q0llIHdyaXRlIGZhaWxcbiIpOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4gK30KPj4+ICsK Pj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV93cml0ZV9ldmVudF9sYW5lKHN0cnVjdCBkd2Nf cGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm8sCj4+PiArCQkJCQkgaW50IGxhbmUsIGludCBldmVu dF9pZCkKPj4+ICt7Cj4+PiArCXUzMiByZXQ7Cj4+PiArCXUzMiB2YWw7Cj4+PiArCj4+PiArCXJl dCA9IGR3Y19wY2llX3BtdV9yZWFkX2R3b3JkKHBjaWVfaW5mbywgRFdDX1BDSUVfRVZFTlRfQ05U X0NUUkwsICZ2YWwpOwo+Pj4gKwlpZiAocmV0KSB7Cj4+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+ cGRldiwgIlBDSWUgcmVhZCBmYWlsXG4iKTsKPj4+ICsJCXJldHVybiByZXQ7Cj4+PiArCX0KPj4+ ICsKPj4+ICsJdmFsICY9IH5EV0NfUENJRV9fQ05UX0xBTkVfU0VMRUNUX01BU0s7Cj4+PiArCXZh bCB8PSBsYW5lIDw8IERXQ19QQ0lFX19DTlRfTEFORV9TRUxFQ1RfU0hJRlQ7Cj4+PiArCj4+PiAr CXJldCA9IGR3Y19wY2llX3BtdV93cml0ZV9kd29yZChwY2llX2luZm8sIERXQ19QQ0lFX0VWRU5U X0NOVF9DVFJMLCB2YWwpOwo+Pj4gKwlpZiAocmV0KQo+Pj4gKwkJcGNpX2VycihwY2llX2luZm8t PnBkZXYsICJQQ0llIHdyaXRlIGZhaWxcbiIpOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4g K30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9ldmVudF9lbmFibGUoc3RydWN0 IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5mbywKPj4+ICsJCQkJICAgICB1MzIgZW5hYmxl KQo+Pj4gK3sKPj4+ICsJdTMyIHJldDsKPj4+ICsJdTMyIHZhbDsKPj4+ICsKPj4+ICsJcmV0ID0g ZHdjX3BjaWVfcG11X3JlYWRfZHdvcmQocGNpZV9pbmZvLCBEV0NfUENJRV9FVkVOVF9DTlRfQ1RS TCwgJnZhbCk7Cj4+PiArCWlmIChyZXQpIHsKPj4+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2 LCAiUENJZSByZWFkIGZhaWxcbiIpOwo+Pgo+PiBTb21lYm9keSBtYXkgbWVudGlvbmVkLiBNYXli ZSB5b3UgZG9uJ3QgbmVlZCB0byBwcmludCB0aGVzZSBtZXNzYWdlcyBpbiBQTVUgb3BzLCBqdXN0 Cj4+IHJldHVybiB0aGUgY29ycmVjdCBlcnJvciBjb2RlIGFuZCBsZXQgcGVyZiBoYW5kbGUgaXQu IE9yIHlvdSBzaG91bGQgcHJvdmlkZSBtb3JlCj4+IGluZm9ybWF0aW9uIGZvciB0aGVzZSwgbGlr ZSBmYWlsZWQgaW4gd2hpY2ggZnVuY2lvbiBvciByZWFkL3dyaXRlIHdoaWNoIHZhbHVlLgo+PiBJ ZiBpdCBvbmx5IG5lY2Vzc2FyeSB3aGVuIGRlYnVnZ2luZywgbWFrZSBpdCBwY2lfZGJnKCkuCj4g Cj4gWWVwLCB5b3UgYXJlIHJpZ2h0LCBJIHdpbGwgZHJvcCB0aGUgcHJpbnQgaW5mbyBpbiBuZXh0 IHZlcnNpb24uCj4gCj4+Cj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4gKwl9Cj4+PiArCj4+PiArCXZh bCAmPSB+KERXQ19QQ0lFX19DTlRfRU5BQkxFX01BU0spOwo+Pj4gKwo+Pj4gKwlpZiAoZW5hYmxl KQo+Pj4gKwkJdmFsIHw9IERXQ19QQ0lFX1BFUl9FVkVOVF9PTjsKPj4+ICsJZWxzZQo+Pj4gKwkJ dmFsIHw9IERXQ19QQ0lFX1BFUl9FVkVOVF9PRkY7Cj4+PiArCj4+PiArCXJldCA9IGR3Y19wY2ll X3BtdV93cml0ZV9kd29yZChwY2llX2luZm8sIERXQ19QQ0lFX0VWRU5UX0NOVF9DVFJMLCB2YWwp Owo+Pj4gKwlpZiAocmV0KQo+Pj4gKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQQ0llIHdy aXRlIGZhaWxcbiIpOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgaW50IGR3Y19wY2llX3BtdV9iYXNlX3RpbWVfZW5hYmxlKHN0cnVjdCBkd2NfcGNpZV9p bmZvX3RhYmxlICpwY2llX2luZm8sCj4+PiArCQkJCQkgdTMyIGVuYWJsZSkKPj4+ICt7Cj4+PiAr CXUzMiByZXQ7Cj4+PiArCXUzMiB2YWw7Cj4+PiArCj4+PiArCXJldCA9IGR3Y19wY2llX3BtdV9y ZWFkX2R3b3JkKHBjaWVfaW5mbywKPj4+ICsJCQkJICAgICAgRFdDX1BDSUVfVElNRV9CQVNFRF9B TkFMWVNJU19DVFJMLCAmdmFsKTsKPj4+ICsJaWYgKHJldCkgewo+Pj4gKwkJcGNpX2VycihwY2ll X2luZm8tPnBkZXYsICJQQ0llIHJlYWQgZmFpbFxuIik7Cj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4g Kwl9Cj4+PiArCj4+PiArCWlmIChlbmFibGUpCj4+PiArCQl2YWwgfD0gRFdDX1BDSUVfX1RJTUVf QkFTRURfQ09VTlRFUl9FTkFCTEU7Cj4+PiArCWVsc2UKPj4+ICsJCXZhbCAmPSB+RFdDX1BDSUVf X1RJTUVfQkFTRURfQ09VTlRFUl9FTkFCTEU7Cj4+PiArCj4+PiArCXJldCA9IGR3Y19wY2llX3Bt dV93cml0ZV9kd29yZChwY2llX2luZm8sCj4+PiArCQkJCSAgICAgICBEV0NfUENJRV9USU1FX0JB U0VEX0FOQUxZU0lTX0NUUkwsIHZhbCk7Cj4+PiArCWlmIChyZXQpCj4+PiArCQlwY2lfZXJyKHBj aWVfaW5mby0+cGRldiwgIlBDSWUgd3JpdGUgZmFpbFxuIik7Cj4+PiArCj4+PiArCXJldHVybiBy ZXQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X3JlYWRfZXZlbnRf Y291bnRlcihzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZQo+Pj4gKwkJCQkJICAgKnBjaWVfaW5m bywgdTY0ICpjb3VudGVyKQo+Pj4gK3sKPj4+ICsJdTMyIHJldCwgdmFsOwo+Pj4gKwo+Pj4gKwly ZXQgPSBkd2NfcGNpZV9wbXVfcmVhZF9kd29yZChwY2llX2luZm8sIERXQ19QQ0lFX0VWRU5UX0NO VF9EQVRBLCAmdmFsKTsKPj4+ICsJaWYgKHJldCkgewo+Pj4gKwkJcGNpX2VycihwY2llX2luZm8t PnBkZXYsICJQQ0llIHJlYWQgZmFpbFxuIik7Cj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4gKwl9Cj4+ PiArCSpjb3VudGVyID0gdmFsOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gcmV0Owo+Pj4gK30KPj4+ICsK Pj4+ICtzdGF0aWMgaW50IGR3Y19wY2llX3BtdV9yZWFkX2Jhc2VfdGltZV9jb3VudGVyKHN0cnVj dCBkd2NfcGNpZV9pbmZvX3RhYmxlCj4+PiArCQkJCQkgICAgICAgKnBjaWVfaW5mbywgdTY0ICpj b3VudGVyKQo+Pj4gK3sKPj4+ICsJdTMyIHJldCwgdmFsOwo+Pj4gKwo+Pj4gKwlyZXQgPSBkd2Nf cGNpZV9wbXVfcmVhZF9kd29yZChwY2llX2luZm8sCj4+PiArCQkJCSAgICAgIERXQ19QQ0lFX1RJ TUVfQkFTRURfQU5BTFlTSVNfREFUQV9SRUdfSElHSCwKPj4+ICsJCQkJICAgICAgJnZhbCk7Cj4+ PiArCWlmIChyZXQpIHsKPj4+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJZSByZWFk IGZhaWxcbiIpOwo+Pj4gKwkJcmV0dXJuIHJldDsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwkqY291bnRl ciA9IHZhbDsKPj4+ICsJKmNvdW50ZXIgPDw9IDMyOwo+Pj4gKwo+Pj4gKwlyZXQgPSBkd2NfcGNp ZV9wbXVfcmVhZF9kd29yZChwY2llX2luZm8sCj4+PiArCQkJCSAgICAgIERXQ19QQ0lFX1RJTUVf QkFTRURfQU5BTFlTSVNfREFUQV9SRUdfTE9XLAo+Pj4gKwkJCQkgICAgICAmdmFsKTsKPj4+ICsJ aWYgKHJldCkgewo+Pj4gKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQQ0llIHJlYWQgZmFp bFxuIik7Cj4+PiArCQlyZXR1cm4gcmV0Owo+Pj4gKwl9Cj4+PiArCj4+PiArCSpjb3VudGVyICs9 IHZhbDsKPj4+ICsKPj4+ICsJcmV0dXJuIHJldDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGlu dCBkd2NfcGNpZV9wbXVfY2xlYXJfZXZlbnRfY291bnRlcihzdHJ1Y3QgZHdjX3BjaWVfaW5mb190 YWJsZQo+Pj4gKwkJCQkJICAgICpwY2llX2luZm8pCj4+PiArewo+Pj4gKwl1MzIgcmV0Owo+Pj4g Kwl1MzIgdmFsOwo+Pj4gKwo+Pj4gKwlyZXQgPSBkd2NfcGNpZV9wbXVfcmVhZF9kd29yZChwY2ll X2luZm8sIERXQ19QQ0lFX0VWRU5UX0NOVF9DVFJMLCAmdmFsKTsKPj4+ICsJaWYgKHJldCkgewo+ Pj4gKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQQ0llIHJlYWQgZmFpbFxuIik7Cj4+PiAr CQlyZXR1cm4gcmV0Owo+Pj4gKwl9Cj4+PiArCj4+PiArCXZhbCAmPSB+RFdDX1BDSUVfRVZFTlRf Q0xFQVJfTUFTSzsKPj4+ICsJdmFsIHw9IDE7Cj4+Cj4+IEl0J3MgYmV0dGVyIHRvIHVzZSBhIG1h Y3JvIGZvciAnMScgdG8gbWFrZSBpdCBtb3JlIGNsZWFyLgo+IAo+IEdvb2QgaWRlYSwgd2lsbCBm aXggaXQgaW4gbmV4dCB2ZXJzaW9uLgo+IAo+Pgo+Pj4gKwo+Pj4gKwlyZXQgPSBkd2NfcGNpZV9w bXVfd3JpdGVfZHdvcmQocGNpZV9pbmZvLCBEV0NfUENJRV9FVkVOVF9DTlRfQ1RSTCwgdmFsKTsK Pj4+ICsJaWYgKHJldCkKPj4+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJZSB3cml0 ZSBmYWlsXG4iKTsKPj4+ICsKPj4+ICsJcmV0dXJuIHJldDsKPj4+ICt9Cj4+PiArCj4+PiArc3Rh dGljIGludCBkd2NfcGNpZV9wbXVfYmFzZV90aW1lX2FkZF9wcmVwYXJlKHN0cnVjdCBkd2NfcGNp ZV9pbmZvX3RhYmxlCj4+PiArCQkJCQkgICAgICAqcGNpZV9pbmZvLCB1MzIgZXZlbnRfaWQpCj4+ PiArewo+Pj4gKwl1MzIgcmV0Owo+Pj4gKwl1MzIgdmFsOwo+Pj4gKwo+Pj4gKwlyZXQgPSBkd2Nf cGNpZV9wbXVfcmVhZF9kd29yZChwY2llX2luZm8sCj4+PiArCQkJCSAgICAgIERXQ19QQ0lFX1RJ TUVfQkFTRURfQU5BTFlTSVNfQ1RSTCwgJnZhbCk7Cj4+PiArCWlmIChyZXQpIHsKPj4+ICsJCXBj aV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiUENJZSByZWFkIGZhaWxcbiIpOwo+Pj4gKwkJcmV0dXJu IHJldDsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwl2YWwgJj0gfkRXQ19QQ0lFX19USU1FX0JBU0VEX1JF UE9SVF9TRUxFQ1RfTUFTSzsKPj4+ICsJdmFsIHw9IGV2ZW50X2lkIDw8IERXQ19QQ0lFX19USU1F X0JBU0VEX1JFUE9SVF9TRUxFQ1RfU0hJRlQ7Cj4+PiArCXZhbCAmPSB+RFdDX1BDSUVfX1RJTUVf QkFTRURfRFVSQVRJT05fU0VMRUNUOwo+Pj4gKwo+Pj4gKwkvKgo+Pj4gKwkgKiBUSU1FX0JBU0VE X0FOQUxZU0lTX0RBVEFfUkVHIGlzIGEgNjQgYml0IHJlZ2lzdGVyLCB3ZSBjYW4gc2FmZWx5Cj4+ PiArCSAqIHVzZSBpdCB3aXRoIGFueSBtYW51YWxseSBjb250cm9sbGVyZWQgZHVyYXRpb24uCj4+ PiArCSAqLwo+Pj4gKwl2YWwgJj0gfihEV0NfUENJRV9fVElNRV9CQVNFRF9EVVJBVElPTl9TRUxF Q1QpOwo+Pj4gKwl2YWwgfD0gRFdDX1BDSUVfRFVSQVRJT05fTUFOVUFMX0NUUkw7Cj4+PiArCj4+ PiArCXJldCA9IGR3Y19wY2llX3BtdV93cml0ZV9kd29yZChwY2llX2luZm8sCj4+PiArCQkJCSAg ICAgICBEV0NfUENJRV9USU1FX0JBU0VEX0FOQUxZU0lTX0NUUkwsIHZhbCk7Cj4+PiArCWlmIChy ZXQpCj4+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBDSWUgd3JpdGUgZmFpbFxuIik7 Cj4+PiArCj4+PiArCXJldHVybiByZXQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3Qg ZHdjX3BjaWVfaW5mb190YWJsZSAqcG11X3RvX3BjaWVfaW5mbyhzdHJ1Y3QgcG11ICpwbXUpCj4+ PiArewo+Pj4gKwlzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV9pbmZvOwo+Pj4gKwlz dHJ1Y3QgZHdjX3BjaWVfcG11ICpwY2llX3BtdSA9IHRvX3BjaWVfcG11KHBtdSk7Cj4+PiArCj4+ PiArCXBjaWVfaW5mbyA9IGNvbnRhaW5lcl9vZihwY2llX3BtdSwgc3RydWN0IGR3Y19wY2llX2lu Zm9fdGFibGUsIHBjaWVfcG11KTsKPj4+ICsJaWYgKHBjaWVfaW5mbyA9PSBOVUxMKQo+Pj4gKwkJ cGNpX2VycihwY2llX2luZm8tPnBkZXYsICJDYW4ndCBnZXQgcGNpZSBpbmZvXG4iKTsKPj4+ICsK Pj4+ICsJcmV0dXJuIHBjaWVfaW5mbzsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgZHdj X3BjaWVfcG11X2V2ZW50X3VwZGF0ZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCj4+PiArewo+ Pj4gKwl1NjQgY291bnRlcjsKPj4+ICsJc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVf aW5mbyA9IHBtdV90b19wY2llX2luZm8oZXZlbnQtPnBtdSk7Cj4+PiArCXN0cnVjdCBod19wZXJm X2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Owo+Pj4gKwllbnVtIGR3Y19wY2llX2V2ZW50X3R5cGUg dHlwZSA9IERXQ19QQ0lFX0VWRU5UX1RZUEUoZXZlbnQpOwo+Pj4gKwl1NjQgZGVsdGEsIHByZXYs IG5vdzsKPj4+ICsKPj4+ICsJZG8gewo+Pj4gKwkJcHJldiA9IGxvY2FsNjRfcmVhZCgmaHdjLT5w cmV2X2NvdW50KTsKPj4+ICsKPj4+ICsJCWlmICh0eXBlID09IERXQ19QQ0lFX0xBTkVfRVZFTlQp Cj4+PiArCQkJZHdjX3BjaWVfcG11X3JlYWRfZXZlbnRfY291bnRlcihwY2llX2luZm8sICZjb3Vu dGVyKTsKPj4+ICsJCWVsc2UgaWYgKHR5cGUgPT0gRFdDX1BDSUVfVElNRV9CQVNFX0VWRU5UKQo+ Pj4gKwkJCWR3Y19wY2llX3BtdV9yZWFkX2Jhc2VfdGltZV9jb3VudGVyKHBjaWVfaW5mbywKPj4+ ICsJCQkJCQkJICAgICZjb3VudGVyKTsKPj4+ICsJCWVsc2UKPj4+ICsJCQlwY2lfZXJyKHBjaWVf aW5mby0+cGRldiwgIklucHV0IHBhcmFtIGlzIGludmFsaWRcbiIpOwo+Pj4gKwo+Pgo+PiBGb3Ig dGhlIG1lc3NhZ2VzIGluIFBNVSBvcHMsIHlvdSBzaG91bGQgcHJpbnQgdGhlIG1lc3NhZ2Ugb24g YmVoYWxmIG9mIFBNVSBkZXZpY2UKPj4gcmF0aGVyIHRoYW4gUENJZSBkZXZpY2UuIFNhbWUgZm9y IHRoZSBvdGhlciBwbGFjZXMuCj4gCj4gR29vZCBpZGVhLCB3aWxsIGZpeCBpdCBpbiBuZXh0IHZl cnNpb24uCj4gCj4+Cj4+PiArCQlub3cgPSBjb3VudGVyOwo+Pj4gKwl9IHdoaWxlIChsb2NhbDY0 X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldiwgbm93KSAhPSBwcmV2KTsKPj4+ICsKPj4+ ICsJZGVsdGEgPSBub3cgLSBwcmV2Owo+Pj4gKwo+Pj4gKwlsb2NhbDY0X2FkZChkZWx0YSwgJmV2 ZW50LT5jb3VudCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X2V2 ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+Pj4gK3sKPj4+ICsJc3RydWN0IGh3 X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Cj4+PiArCXN0cnVjdCBkd2NfcGNpZV9wbXUg KnBjaWVfcG11ID0gdG9fcGNpZV9wbXUoZXZlbnQtPnBtdSk7Cj4+PiArCXN0cnVjdCBwZXJmX2V2 ZW50ICpzaWJsaW5nOwo+Pj4gKwo+Pj4gKwlpZiAoZXZlbnQtPmF0dHIudHlwZSAhPSBldmVudC0+ cG11LT50eXBlKQo+Pj4gKwkJcmV0dXJuIC1FTk9FTlQ7Cj4+PiArCj4+PiArCWlmIChod2MtPnNh bXBsZV9wZXJpb2QpIHsKPj4+ICsJCWRldl9kYmcocGNpZV9wbXUtPmRldiwgIlNhbXBsaW5nIG5v dCBzdXBwb3J0ZWRcbiIpOwo+Pj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+Pj4gKwl9Cj4+PiAr Cj4+PiArCWlmIChldmVudC0+Y3B1IDwgMCkgewo+Pj4gKwkJZGV2X2RiZyhwY2llX3BtdS0+ZGV2 LCAiUGVyLXRhc2sgbW9kZSBub3Qgc3VwcG9ydGVkXG4iKTsKPj4+ICsJCXJldHVybiAtRU9QTk9U U1VQUDsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlldmVudC0+Y3B1ID0gcGNpZV9wbXUtPm9uX2NwdTsK Pj4+ICsKPj4+ICsJaWYgKGV2ZW50LT5ncm91cF9sZWFkZXIgIT0gZXZlbnQgJiYKPj4+ICsJICAg ICFpc19zb2Z0d2FyZV9ldmVudChldmVudC0+Z3JvdXBfbGVhZGVyKSkgewo+Pj4gKwkJZGV2X2Ri ZyhwY2llX3BtdS0+ZGV2LCAiRHJpdmUgd2F5IG9ubHkgYWxsb3cgb25lIGV2ZW50IVxuIik7Cj4+ PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlmb3JfZWFjaF9zaWJsaW5n X2V2ZW50KHNpYmxpbmcsIGV2ZW50LT5ncm91cF9sZWFkZXIpIHsKPj4+ICsJCWlmIChzaWJsaW5n ICE9IGV2ZW50ICYmICFpc19zb2Z0d2FyZV9ldmVudChzaWJsaW5nKSkgewo+Pj4gKwkJCWRldl9k YmcocGNpZV9wbXUtPmRldiwgIkRyaXZlIHdheSBldmVudCBub3QgYWxsb3dlZCFcbiIpOwo+Pj4g KwkJCXJldHVybiAtRUlOVkFMOwo+Pj4gKwkJfQo+Pj4gKwl9Cj4+PiArCj4+PiArCWh3Yy0+aWR4 ID0gLTE7Cj4+PiArCj4+PiArCXJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9p ZCBkd2NfcGNpZV9wbXVfc2V0X3BlcmlvZChzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjKQo+Pj4g K3sKPj4+ICsJdTY0IG5ldyA9IDA7Cj4+PiArCj4+Cj4+IHJlZHVuZGFudCAnbmV3Jy4KPj4KPj4+ ICsJbG9jYWw2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgbmV3KTsKPj4+ICt9Cj4gCj4gWWVwLCB3 aWxsIGZpeCBpdCBpbiBuZXh0IHZlcnNpb24uCj4gCj4+PiArCj4+PiArc3RhdGljIHZvaWQgZHdj X3BjaWVfcG11X2V2ZW50X3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdz KQo+Pj4gK3sKPj4+ICsJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Cj4+ PiArCXN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm8gPSBwbXVfdG9fcGNpZV9p bmZvKGV2ZW50LT5wbXUpOwo+Pj4gKwllbnVtIGR3Y19wY2llX2V2ZW50X3R5cGUgdHlwZSA9IERX Q19QQ0lFX0VWRU5UX1RZUEUoZXZlbnQpOwo+Pj4gKwo+Pj4gKwlod2MtPnN0YXRlID0gMDsKPj4+ ICsJZHdjX3BjaWVfcG11X3NldF9wZXJpb2QoaHdjKTsKPj4+ICsKPj4+ICsJaWYgKHR5cGUgPT0g RFdDX1BDSUVfTEFORV9FVkVOVCkKPj4+ICsJCWR3Y19wY2llX3BtdV9ldmVudF9lbmFibGUocGNp ZV9pbmZvLCAxKTsKPj4+ICsJZWxzZSBpZiAodHlwZSA9PSBEV0NfUENJRV9USU1FX0JBU0VfRVZF TlQpCj4+PiArCQlkd2NfcGNpZV9wbXVfYmFzZV90aW1lX2VuYWJsZShwY2llX2luZm8sIDEpOwo+ Pj4gKwllbHNlCj4+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIklucHV0IHBhcmFtIGlz IGludmFsaWRcbiIpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBkd2NfcGNpZV9wbXVf ZXZlbnRfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykKPj4+ICt7Cj4+ PiArCXN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlICpwY2llX2luZm8gPSBwbXVfdG9fcGNpZV9p bmZvKGV2ZW50LT5wbXUpOwo+Pj4gKwllbnVtIGR3Y19wY2llX2V2ZW50X3R5cGUgdHlwZSA9IERX Q19QQ0lFX0VWRU5UX1RZUEUoZXZlbnQpOwo+Pj4gKwo+Pj4gKwlpZiAoZXZlbnQtPmh3LnN0YXRl ICYgUEVSRl9IRVNfU1RPUFBFRCkKPj4+ICsJCXJldHVybjsKPj4+ICsKPj4+ICsJaWYgKHR5cGUg PT0gRFdDX1BDSUVfTEFORV9FVkVOVCkKPj4+ICsJCWR3Y19wY2llX3BtdV9ldmVudF9lbmFibGUo cGNpZV9pbmZvLCAwKTsKPj4+ICsJZWxzZSBpZiAodHlwZSA9PSBEV0NfUENJRV9USU1FX0JBU0Vf RVZFTlQpCj4+PiArCQlkd2NfcGNpZV9wbXVfYmFzZV90aW1lX2VuYWJsZShwY2llX2luZm8sIDAp Owo+Pj4gKwllbHNlCj4+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIklucHV0IHBhcmFt IGlzIGludmFsaWRcbiIpOwo+Pgo+PiBJZiB0aGUgbWVzc2FnZSBpcyBuZWNlc3NhcnksIGl0J2xs IGJlIG1vcmUgaGVscGZ1bCB0byBtZW50aW9uIHdoaWNoIHBhcmFtCj4+IGlzIGludmFsaWQuCj4g Cj4gSSBzZWUsIHdpbGwgZ2l2ZSBtb3JlIGhpbnQgaW4gbG9nLgo+IAo+Pgo+Pj4gKwo+Pj4gKwlk d2NfcGNpZV9wbXVfZXZlbnRfdXBkYXRlKGV2ZW50KTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGlj IGludCBkd2NfcGNpZV9wbXVfZXZlbnRfYWRkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50 IGZsYWdzKQo+Pj4gK3sKPj4+ICsJc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5m byA9IHBtdV90b19wY2llX2luZm8oZXZlbnQtPnBtdSk7Cj4+PiArCXN0cnVjdCBod19wZXJmX2V2 ZW50ICpod2MgPSAmZXZlbnQtPmh3Owo+Pj4gKwllbnVtIGR3Y19wY2llX2V2ZW50X3R5cGUgdHlw ZSA9IERXQ19QQ0lFX0VWRU5UX1RZUEUoZXZlbnQpOwo+Pj4gKwlpbnQgZXZlbnRfaWQgPSBEV0Nf UENJRV9FVkVOVF9JRChldmVudCk7Cj4+PiArCWludCBsYW5lID0gRFdDX1BDSUVfRVZFTlRfTEFO RShldmVudCk7Cj4+PiArCj4+PiArCWlmIChwY2llX2luZm8tPmV2ZW50KQo+Pj4gKwkJcmV0dXJu IC1FTk9TUEM7Cj4+PiArCj4+PiArCXBjaWVfaW5mby0+ZXZlbnQgPSBldmVudDsKPj4+ICsKPj4+ ICsJaHdjLT5zdGF0ZSA9IFBFUkZfSEVTX1NUT1BQRUQgfCBQRVJGX0hFU19VUFRPREFURTsKPj4+ ICsKPj4+ICsJaWYgKHR5cGUgPT0gRFdDX1BDSUVfTEFORV9FVkVOVCkgewo+Pj4gKwkJZHdjX3Bj aWVfcG11X2V2ZW50X2VuYWJsZShwY2llX2luZm8sIDApOwo+Pj4gKwkJZHdjX3BjaWVfcG11X3dy aXRlX2V2ZW50X2xhbmUocGNpZV9pbmZvLCBsYW5lLCBldmVudF9pZCk7Cj4+PiArCQlkd2NfcGNp ZV9wbXVfc2V0X2V2ZW50X2lkKHBjaWVfaW5mbywgZXZlbnRfaWQpOwo+Pj4gKwkJZHdjX3BjaWVf cG11X2NsZWFyX2V2ZW50X2NvdW50ZXIocGNpZV9pbmZvKTsKPj4+ICsJfSBlbHNlIGlmICh0eXBl ID09IERXQ19QQ0lFX1RJTUVfQkFTRV9FVkVOVCkgewo+Pj4gKwkJZHdjX3BjaWVfcG11X2Jhc2Vf dGltZV9lbmFibGUocGNpZV9pbmZvLCAwKTsKPj4+ICsJCWR3Y19wY2llX3BtdV9iYXNlX3RpbWVf YWRkX3ByZXBhcmUocGNpZV9pbmZvLCBldmVudF9pZCk7Cj4+PiArCX0gZWxzZSB7Cj4+PiArCQlw Y2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIklucHV0IHBhcmFtIGlzIGludmFsaWRcbiIpOwo+Pj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4+PiArCX0KPj4+ICsKPj4+ICsJaWYgKGZsYWdzICYgUEVSRl9F Rl9TVEFSVCkKPj4+ICsJCWR3Y19wY2llX3BtdV9ldmVudF9zdGFydChldmVudCwgUEVSRl9FRl9S RUxPQUQpOwo+Pj4gKwo+Pj4gKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7Cj4+ PiArCj4+PiArCXJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBkd2NfcGNp ZV9wbXVfZXZlbnRfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKQo+Pj4g K3sKPj4+ICsJc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5mbyA9IHBtdV90b19w Y2llX2luZm8oZXZlbnQtPnBtdSk7Cj4+PiArCj4+PiArCWR3Y19wY2llX3BtdV9ldmVudF9zdG9w KGV2ZW50LCBmbGFncyB8IFBFUkZfRUZfVVBEQVRFKTsKPj4+ICsJcGVyZl9ldmVudF91cGRhdGVf dXNlcnBhZ2UoZXZlbnQpOwo+Pj4gKwlwY2llX2luZm8tPmV2ZW50ID0gTlVMTDsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIHZvaWQgZHdjX3BjaWVfcG11X2V2ZW50X3JlYWQoc3RydWN0IHBlcmZf ZXZlbnQgKmV2ZW50KQo+Pj4gK3sKPj4+ICsJZHdjX3BjaWVfcG11X2V2ZW50X3VwZGF0ZShldmVu dCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgZHdjX2V2ZW50X2NvdW50ZXJzIGV2 ZW50X2FycmF5W10gPSB7Cj4+PiArCXsidHhfYWNrX2RsbHAiLCAweDYwMH0sCj4+PiArCXsidHhf dXBkYXRlX2ZjX2RsbHAiLCAweDYwMX0sCj4+PiArCXsicnhfYWNrX2RsbHAiLCAweDYwMn0sCj4+ PiArCXsicnhfdXBkYXRlX2ZjX2RsbHAiLCAweDYwM30sCj4+PiArCXsicnhfbnVsaWZpZWRfdGxw IiwgMHg2MDR9LAo+Pj4gKwl7InR4X251bGlmaWVkX3RscCIsIDB4NjA1fSwKPj4+ICsJeyJyeF9k dXBsaWNhdGVfdGxwIiwgMHg2MDZ9LAo+Pj4gKwl7InR4X21lbW9yeV93cml0ZSIsIDB4NzAwfSwK Pj4+ICsJeyJ0eF9tZW1vcnlfcmVhZCIsIDB4NzAxfSwKPj4+ICsJeyJ0eF9jb25maWd1cmF0aW9u X3dyaXRlIiwgMHg3MDJ9LAo+Pj4gKwl7InR4X2NvbmZpZ3VyYXRpb25fcmVhZCIsIDB4NzAzfSwK Pj4+ICsJeyJ0eF9pb193cml0ZSIsIDB4NzA0fSwKPj4+ICsJeyJ0eF9pb19yZWFkIiwgMHg3MDV9 LAo+Pj4gKwl7InR4X2NvbXBsZXRpb25fd2l0aG91dF9kYXRhIiwgMHg3MDZ9LAo+Pj4gKwl7InR4 X2NvbXBsZXRpb25fd2l0aF9kYXRhIiwgMHg3MDd9LAo+Pj4gKwl7InR4X21lc3NhZ2VfdGxwIiwg MHg3MDh9LAo+Pj4gKwl7InR4X2F0b21pYyIsIDB4NzA5fSwKPj4+ICsJeyJ0eF90bHBfd2l0aF9w cmVmaXgiLCAweDcwQX0sCj4+PiArCXsicnhfbWVtb3J5X3dyaXRlIiwgMHg3MEJ9LAo+Pj4gKwl7 InJ4X21lbW9yeV9yZWFkIiwgMHg3MEN9LAo+Pj4gKwl7InJ4X2lvX3dyaXRlIiwgMHg3MEZ9LAo+ Pj4gKwl7InJ4X2lvX3JlYWQiLCAweDcxMH0sCj4+PiArCXsicnhfY29tcGxldGlvbl93aXRob3V0 X2RhdGEiLCAweDcxMX0sCj4+PiArCXsicnhfY29tcGxldGlvbl93aXRoX2RhdGEiLCAweDcxMn0s Cj4+PiArCXsicnhfbWVzc2FnZV90bHAiLCAweDcxM30sCj4+PiArCXsicnhfYXRvbWljIiwgMHg3 MTR9LAo+Pj4gKwl7InJ4X3RscF93aXRoX3ByZWZpeCIsIDB4NzE1fSwKPj4+ICsJeyJ0eF9jY2l4 X3RscCIsIDB4NzE2fSwKPj4+ICsJeyJyeF9jY2l4X3RscCIsIDB4NzE3fSwKPj4+ICt9Owo+Pj4g Kwo+Pj4gK3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X2F0dHJfaW5pdChzdHJ1Y3QgZHdjX3BjaWVf cG11X3ByaXYgKnByaXYsCj4+PiArCQkJCSAgc3RydWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBj aWVfaW5mbykKPj4+ICt7Cj4+PiArCWludCBpLCBqOwo+Pj4gKwljaGFyIGxhbmVbOF07Cj4+PiAr CWNvbnN0IGNoYXIgdG1wWzY0XTsKPj4+ICsJaW50IGV2ZW50c19wZXJfbGFuZTsKPj4+ICsJaW50 IG51bV9sYW5lX2V2ZW50czsKPj4+ICsJaW50IHRpbWVfYmFzZV9jb3VudDsKPj4+ICsJaW50IG51 bV9hdHRycywgYXR0cl9pZHg7Cj4+PiArCXN0cnVjdCBkd2NfcGNpZV9ldmVudF9hdHRyICpsYW5l X2F0dHJzOwo+Pj4gKwlzdHJ1Y3QgYXR0cmlidXRlICoqcG11X2F0dHJzOwo+Pj4gKwo+Pj4gKwlt ZW1zZXQoKHZvaWQgKil0bXAsIDAsIHNpemVvZih0bXApKTsKPj4+ICsJbWVtc2V0KCh2b2lkICop bGFuZSwgMCwgc2l6ZW9mKGxhbmUpKTsKPj4+ICsJdGltZV9iYXNlX2NvdW50ID0gQVJSQVlfU0la RShkd2NfcGNpZV9wbXVfdGltZV9ldmVudF9hdHRycyk7Cj4+PiArCWV2ZW50c19wZXJfbGFuZSA9 IEFSUkFZX1NJWkUoZXZlbnRfYXJyYXkpOwo+Pj4gKwludW1fbGFuZV9ldmVudHMgPSBwY2llX2lu Zm8tPm51bV9sYW5lcyAqIGV2ZW50c19wZXJfbGFuZTsKPj4+ICsJbnVtX2F0dHJzID0gdGltZV9i YXNlX2NvdW50ICsgbnVtX2xhbmVfZXZlbnRzOwo+Pj4gKwo+Pj4gKwlwY2llX2luZm8tPmxhbmVf ZXZlbnRfYXR0cnMgPQo+Pj4gKwkJZGV2bV9rY2FsbG9jKHByaXYtPmRldiwgbnVtX2xhbmVfZXZl bnRzLAo+Pj4gKwkJCQlzaXplb2Yoc3RydWN0IGR3Y19wY2llX2V2ZW50X2F0dHIpLAo+Pj4gKwkJ CQlHRlBfS0VSTkVMKTsKPj4+ICsJaWYgKCFwY2llX2luZm8tPmxhbmVfZXZlbnRfYXR0cnMpCj4+ PiArCQlyZXR1cm4gLUVOT01FTTsKPj4+ICsJbGFuZV9hdHRycyA9IHBjaWVfaW5mby0+bGFuZV9l dmVudF9hdHRyczsKPj4+ICsJcGNpZV9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRycyA9Cj4+PiAr CQlkZXZtX2tjYWxsb2MocHJpdi0+ZGV2LCBudW1fYXR0cnMsIHNpemVvZihzdHJ1Y3QgYXR0cmli dXRlICopLAo+Pj4gKwkJCSBHRlBfS0VSTkVMKTsKPj4+ICsJaWYgKCFwY2llX2luZm8tPnBjaWVf cG11X2V2ZW50X2F0dHJzKQo+Pj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+PiArCXBtdV9hdHRycyA9 IHBjaWVfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnM7Cj4+PiArCj4+PiArCWZvciAoaSA9IDA7 IGkgPCBudW1fbGFuZV9ldmVudHM7IGkrKykgewo+Pj4gKwkJbGFuZV9hdHRyc1tpXS5hdHRyLmF0 dHIubmFtZSA9Cj4+PiArCQkgICAgZGV2bV9remFsbG9jKHByaXYtPmRldiwgc2l6ZW9mKGNoYXIp Cj4+PiArCQkJCSAqIEFUVFJJX05BTUVfTUFYX1NJWkUsIEdGUF9LRVJORUwpOwo+Pj4gKwkJaWYg KCFsYW5lX2F0dHJzW2ldLmF0dHIuYXR0ci5uYW1lKQo+Pj4gKwkJCXJldHVybiAtRU5PTUVNOwo+ Pj4gKwl9Cj4+PiArCj4+PiArCWF0dHJfaWR4ID0gMDsKPj4+ICsJZm9yIChpID0gMDsgaSA8IHBj aWVfaW5mby0+bnVtX2xhbmVzOyBpKyspIHsKPj4+ICsJCXNwcmludGYobGFuZSwgIl9sYW5lJWQi LCBpKTsKPj4+ICsKPj4+ICsJCWZvciAoaiA9IDA7IGogPCBldmVudHNfcGVyX2xhbmU7IGorKykg ewo+Pj4gKwkJCWludCBwb3MgPSBpICogZXZlbnRzX3Blcl9sYW5lICsgajsKPj4+ICsKPj4+ICsJ CQlzdHJjYXQoKGNoYXIgKil0bXAsIGV2ZW50X2FycmF5W2pdLm5hbWUpOwo+Pj4gKwkJCXN0cmNh dCgoY2hhciAqKXRtcCwgbGFuZSk7Cj4+PiArCQkJbWVtY3B5KCh2b2lkICopbGFuZV9hdHRyc1tw b3NdLmF0dHIuYXR0ci5uYW1lLAo+Pj4gKwkJCSAgICAgICAodm9pZCAqKXRtcCwKPj4+ICsJCQkg ICAgICAgc2l6ZW9mKHRtcCkpOwo+Pj4gKwo+Pj4gKwkJCWxhbmVfYXR0cnNbcG9zXS5hdHRyLmF0 dHIubW9kZSA9Cj4+PiArCQkJICAgIFZFUklGWV9PQ1RBTF9QRVJNSVNTSU9OUygwNDQ0KTsKPj4+ ICsJCQlsYW5lX2F0dHJzW3Bvc10uYXR0ci5zaG93ID0gZHdjX3BjaWVfZXZlbnRfc2hvdzsKPj4+ ICsJCQlsYW5lX2F0dHJzW3Bvc10uYXR0ci5zdG9yZSA9IE5VTEw7Cj4+PiArCQkJbGFuZV9hdHRy c1twb3NdLnR5cGUgPSBEV0NfUENJRV9MQU5FX0VWRU5UOwo+Pj4gKwkJCWxhbmVfYXR0cnNbcG9z XS5ldmVudGlkID0gZXZlbnRfYXJyYXlbal0uZXZlbnRfaWQ7Cj4+PiArCQkJbGFuZV9hdHRyc1tw b3NdLmxhbmUgPSBpOwo+Pj4gKwkJCXBtdV9hdHRyc1thdHRyX2lkeCsrXSA9ICZsYW5lX2F0dHJz W3Bvc10uYXR0ci5hdHRyOwo+Pj4gKwo+Pj4gKwkJCW1lbXNldCgodm9pZCAqKXRtcCwgMCwgc2l6 ZW9mKHRtcCkpOwo+Pj4gKwkJfQo+Pj4gKwl9Cj4+PiArCj4+PiArCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGR3Y19wY2llX3BtdV90aW1lX2V2ZW50X2F0dHJzKTsgaSsrKQo+Pj4gKwkJcG11 X2F0dHJzW2F0dHJfaWR4KytdID0gZHdjX3BjaWVfcG11X3RpbWVfZXZlbnRfYXR0cnNbaV07Cj4+ PiArCj4+PiArCXBjaWVfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnNbYXR0cl9pZHgrK10gPSBO VUxMOwo+Pj4gKwo+Pj4gKwlwY2llX2luZm8tPnBjaWVfcG11X2V2ZW50X2F0dHJzX2dyb3VwLm5h bWUgPSBldmVudF9hdHRyX25hbWU7Cj4+PiArCXBjaWVfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0 cnNfZ3JvdXAuaXNfdmlzaWJsZSA9Cj4+PiArCSAgICBwY2llX3BtdV9ldmVudF9hdHRyX2lzX3Zp c2libGU7Cj4+PiArCXBjaWVfaW5mby0+cGNpZV9wbXVfZXZlbnRfYXR0cnNfZ3JvdXAuYXR0cnMg PQo+Pj4gKwkgICAgcGNpZV9pbmZvLT5wY2llX3BtdV9ldmVudF9hdHRyczsKPj4+ICsKPj4+ICsJ cGNpZV9pbmZvLT5wY2llX3BtdV9hdHRyX2dyb3Vwc1swXSA9Cj4+PiArCSAgICAmcGNpZV9pbmZv LT5wY2llX3BtdV9ldmVudF9hdHRyc19ncm91cDsKPj4+ICsJcGNpZV9pbmZvLT5wY2llX3BtdV9h dHRyX2dyb3Vwc1sxXSA9ICZwY2llX3BtdV9mb3JtYXRfYXR0cnNfZ3JvdXA7Cj4+PiArCXBjaWVf aW5mby0+cGNpZV9wbXVfYXR0cl9ncm91cHNbMl0gPSAmcGNpZV9wbXVfY3B1bWFza19hdHRyc19n cm91cDsKPj4+ICsJcGNpZV9pbmZvLT5wY2llX3BtdV9hdHRyX2dyb3Vwc1szXSA9IE5VTEw7Cj4+ PiArCj4+PiArCXJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IF9fZHdjX3Bj aWVfcG11X3Byb2JlKHN0cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiAqcHJpdiwKPj4+ICsJCQkJc3Ry dWN0IGR3Y19wY2llX2luZm9fdGFibGUgKnBjaWVfaW5mbykKPj4+ICt7Cj4+PiArCWludCByZXQ7 Cj4+PiArCWNoYXIgKm5hbWU7Cj4+PiArCXN0cnVjdCBkd2NfcGNpZV9wbXUgKnBjaWVfcG11Owo+ Pj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+PiArCj4+PiArCWlmICghcGNpZV9pbmZvIHx8ICFw Y2llX2luZm8tPnBkZXYpIHsKPj4+ICsJCXBjaV9lcnIocGNpZV9pbmZvLT5wZGV2LCAiSW5wdXQg cGFyYW1ldGVyIGlzIGludmFsaWRcbiIpOwo+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+PiArCX0K Pj4+ICsKPj4+ICsJcGNpZV9wbXUgPSAmcGNpZV9pbmZvLT5wY2llX3BtdTsKPj4+ICsJZGV2ID0g JnBjaWVfaW5mby0+cGRldi0+ZGV2Owo+Pj4gKwo+Pj4gKwlyZXQgPSBkd2NfcGNpZV9wbXVfYXR0 cl9pbml0KHByaXYsIHBjaWVfaW5mbyk7Cj4+PiArCWlmIChyZXQpIHsKPj4+ICsJCXBjaV9lcnIo cGNpZV9pbmZvLT5wZGV2LCAiUE1VIGF0dHIgaW5pdCBmYWlsIHJldD0lZFxuIiwgcmV0KTsKPj4+ ICsJCXJldHVybiByZXQ7Cj4+PiArCX0KPj4+ICsKPj4+ICsJcGNpZV9wbXUtPmRldiA9IGRldjsK Pj4+ICsJcGNpZV9wbXUtPnBtdSA9IChzdHJ1Y3QgcG11KSB7Cj4+PiArCQkubW9kdWxlCQk9IFRI SVNfTU9EVUxFLAo+Pj4gKwkJLnRhc2tfY3R4X25yCT0gcGVyZl9pbnZhbGlkX2NvbnRleHQsCj4+ PiArCQkucG11X2VuYWJsZQk9IE5VTEwsCj4+PiArCQkucG11X2Rpc2FibGUJPSBOVUxMLAo+Pj4g KwkJLmV2ZW50X2luaXQJPSBkd2NfcGNpZV9wbXVfZXZlbnRfaW5pdCwKPj4+ICsJCS5hZGQJCT0g ZHdjX3BjaWVfcG11X2V2ZW50X2FkZCwKPj4+ICsJCS5kZWwJCT0gZHdjX3BjaWVfcG11X2V2ZW50 X2RlbCwKPj4+ICsJCS5zdGFydAkJPSBkd2NfcGNpZV9wbXVfZXZlbnRfc3RhcnQsCj4+PiArCQku c3RvcAkJPSBkd2NfcGNpZV9wbXVfZXZlbnRfc3RvcCwKPj4+ICsJCS5yZWFkCQk9IGR3Y19wY2ll X3BtdV9ldmVudF9yZWFkLAo+Pj4gKwkJLmF0dHJfZ3JvdXBzCT0gcGNpZV9pbmZvLT5wY2llX3Bt dV9hdHRyX2dyb3VwcywKPj4+ICsJCS5jYXBhYmlsaXRpZXMJPSBQRVJGX1BNVV9DQVBfTk9fRVhD TFVERSwKPj4+ICsJfTsKPj4+ICsKPj4+ICsJbmFtZSA9IGRldm1fa2FzcHJpbnRmKHByaXYtPmRl diwgR0ZQX0tFUk5FTCwgInBjaWVfYmRmXyV4IiwKPj4+ICsJCQkgICAgICBwY2llX2luZm8tPmJk Zik7Cj4+PiArCWlmICghbmFtZSkKPj4+ICsJCXJldHVybiAtRU5PTUVNOwo+Pj4gKwo+Pj4gKwkv KiBQaWNrIG9uZSBDUFUgdG8gYmUgdGhlIHByZWZlcnJlZCBvbmUgdG8gdXNlICovCj4+PiArCXBj aWVfcG11LT5vbl9jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwo+Pj4gKwo+Pgo+PiBTbyB3 ZSdsbCBwcm9iYWJsZXkgYmluZCBhbGwgdGhlIHBtdXMgb24gb25lIHNpbmdsZSBDUFUsIGlzIGl0 IGludGVuZGVkPyBTaW5jZSBpdCdzCj4+IGFuIHVuY29yZSBQTVUsIHdlIGNhbiBtYWtlIGl0IHJ1 biBvbiBhbnkgY3B1IChvciBmb3IgbG9jYWxpdHkgQ1BVIG9uIHRoZSBjb250cm9sbGVyJ3MKPj4g TlVNQSBub2RlKS4KPj4KPj4gQW5kIEkgZGlkbid0IHNlZSB5b3UgcmVnaXN0ZXIgYSBob3RwbHVn IGhhbmRsZXIsIHNvIHdoYXQgaWYgdGhlIC0+b25fY3B1IGlzIGhvdCByZW1vdmVkPwo+IAo+IFRo aXMgUE1VIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJydXB0IGF0IGFsbCwgc28gd2UgZG8gbm90IG5l ZWQgdG8gYmluZCBpdCB0byBDUFUuCj4gU2hvdWxkIHdlIHJlbW92ZSB0aGlzIGxpbmU/Cj4gCgpO byBpdCdzIHN0aWxsIG5lZWRlZCB0byBwcm92aWRlIGl0IGFuZCBleHBvcnQgaXQgdGhyb3VnaCB0 aGUgY3B1bWFzayBzeXNmcyBhdHRyaWJ1dGUsIG90aGVyd2lzZQp0aGUgcGVyZiBjYW5ub3QgcmVj b2duaXplIGl0IGFzIGFuIHVuY29yZSBQTVUgZGV2aWNlLiBTZWUgWypdLiBJdCBjYW4gYmUgYSBz aW5nbGUgQ1BVIG1hc2sgYW5kCnRoZSBldmVudCB3aWxsIHN0YXJ0IG9ubHkgb24gdGhlIGdpdmVu IENQVS4gT3IgbWFrZSBpdCBhIHJhbmdlIG9mIENQVXMgYnV0IG9ubHkgbGV0IG9uZSBDUFUgcmVh bGx5CnN0YXJ0IHRoZSBldmVudC4gSXQgbWF5IHN0aWxsIG5lZWQgdG8gaGFuZGxlIHRoZSBjYXNl IHRoYXQgdGhlIENQVSBzdGFydCB0aGUgZXZlbnQgaXMgb2ZmbGluZSwKZXZlbiB3aXRob3V0IGlu dGVycnVwdC4KCkJUVywgc2luY2UgaXQgZG9lc24ndCBzdXBwb3J0IGludGVycnVwdCwgY2FuIGNv dW50ZXJzIG92ZXJmbG93IGFuZCBob3cgdG8gaGFuZGxlIHRoZSBvdmVyZmxvdyBjYXNlPwoKWypd IGh0dHBzOi8vZ2l0aHViLmNvbS90b3J2YWxkcy9saW51eC9ibG9iL3Y2LjAtcmMxL3Rvb2xzL3Bl cmYvdXRpbC9wbXUuYyNMNjE1Cgo+Pgo+Pj4gKwlyZXQgPSBwZXJmX3BtdV9yZWdpc3RlcigmcGNp ZV9wbXUtPnBtdSwgbmFtZSwgLTEpOwo+Pj4gKwlpZiAocmV0KSB7Cj4+PiArCQlwY2lfZXJyKHBj aWVfaW5mby0+cGRldiwgIkVycm9yICVkIHJlZ2lzdGVyaW5nIFBNVSBAJXhcbiIsIHJldCwKPj4+ ICsJCQkJIHBjaWVfaW5mby0+YmRmKTsKPj4KPj4gd2lsbCBiZSBtb3JlIGhlbHBmdWwgdG8gcHJp bnQgdGhlIGJkZiBhcyBmb3JtYXQgPGJ1cz46PGRldj46PGZ1bmM+Lgo+IAo+IEdvb2QgaWRlYSwg d2lsbCBmaXggaW4gbmV4dCB2ZXJzaW9uLgo+IAo+Pgo+Pj4gKwkJcmV0dXJuIHJldDsKPj4+ICsJ fQo+Pj4gKwo+Pj4gKwlwY2llX2luZm8tPnBtdV9pc19yZWdpc3RlciA9IERXQ19QQ0lFX1BNVV9I QVNfUkVHSVNURVI7Cj4+Cj4+IE1ha2UgQHBtdV9pc19yZWdpc3RlciBhIGJvb2xlYW4gd2lsbCBi ZSBtb3JlIGNsZWFyLgo+IAo+IEBwbXVfaXNfcmVnaXN0ZXIgaXMgYWxzbyBkaXNjdXNzZWQgaW4g Sm9uYXRoYW4nIHJlcGx5LiBKb25hdGhhbiBzdWdnZXN0cyB0bwo+IHJlbW92ZSBpdCwgc28gbGV0 IGRpc2N1c3MgaWYgdG8ga2VlcCB0aGlzIGZpZWxkIGZpcnN0IDopIElmIHdlIGRlY2lkZSB0byBr ZWVwCj4gaXQsIEkgd2lsbCBsZXQgaXQgYmUgYm9vbGVhbi4KPiAKPj4KPj4+ICsKPj4+ICsJcmV0 dXJuIHJldDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBkd2NfcGNpZV9wbXVfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+PiArewo+Pj4gKwlzdHJ1Y3QgZHdjX3Bj aWVfcG11X3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPj4+ICsJaW50 IGluZGV4Owo+Pj4gKwlzdHJ1Y3QgZHdjX3BjaWVfcG11ICpwY2llX3BtdTsKPj4KPj4gTWFrZSB0 aGUgbG9uZyBsaW5lIGZpcnN0IHdoZW4gZGVjbGFyaW5nLgo+IAo+IEFncmVlLCB3aWxsIGNoYW5n ZSB0aGUgY29kZSBzdHlsZS4KPiAKPj4KPj4+ICsKPj4+ICsJZm9yIChpbmRleCA9IDA7IGluZGV4 IDwgcHJpdi0+cGNpZV9jdHJsX251bTsgaW5kZXgrKykKPj4+ICsJCWlmIChwcml2LT5wY2llX3Rh YmxlW2luZGV4XS5wbXVfaXNfcmVnaXN0ZXIpIHsKPj4+ICsJCQlwY2llX3BtdSA9ICZwcml2LT5w Y2llX3RhYmxlW2luZGV4XS5wY2llX3BtdTsKPj4+ICsJCQlwZXJmX3BtdV91bnJlZ2lzdGVyKCZw Y2llX3BtdS0+cG11KTsKPj4+ICsJCX0KPj4+ICsJcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyBpbnQgZHdjX3BjaWVfcG11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4+PiArewo+Pj4gKwlpbnQgcmV0ID0gMDsKPj4+ICsJaW50IHBjaWVfaW5kZXg7Cj4+PiAr CXN0cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiAqcHJpdjsKPj4+ICsKPj4+ICsJcHJpdiA9IGRldm1f a3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKPj4+ICsJaWYg KCFwcml2KQo+Pj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+PiArCXByaXYtPmRldiA9ICZwZGV2LT5k ZXY7Cj4+PiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwo+Pj4gKwo+Pj4gKwkv KiBJZiBQTVUgaXMgbm90IHN1cHBvcnQgb24gY3VycmVudCBwbGF0Zm9ybSwga2VlcCBzbGllbnQg Ki8KPj4+ICsJaWYgKGR3Y19wY2llX3BtdV9kaXNjb3Zlcihwcml2KSkKPj4+ICsJCXJldHVybiAw Owo+Pj4gKwo+Pj4gKwlmb3IgKHBjaWVfaW5kZXggPSAwOyBwY2llX2luZGV4IDwgcHJpdi0+cGNp ZV9jdHJsX251bTsgcGNpZV9pbmRleCsrKSB7Cj4+PiArCQlzdHJ1Y3QgcGNpX2RldiAqcnAgPSBw cml2LT5wY2llX3RhYmxlW3BjaWVfaW5kZXhdLnBkZXY7Cj4+PiArCj4+PiArCQlyZXQgPSBfX2R3 Y19wY2llX3BtdV9wcm9iZShwcml2LCAmcHJpdi0+cGNpZV90YWJsZVtwY2llX2luZGV4XSk7Cj4+ PiArCQlpZiAocmV0KSB7Cj4+PiArCQkJZGV2X2VycigmcnAtPmRldiwgIlBDSWUgUE1VIHByb2Jl IGZhaWxcbiIpOwo+Pj4gKwkJCWdvdG8gcG11X3VucmVnaXN0ZXI7Cj4+PiArCQl9Cj4+PiArCX0K Pj4+ICsJZGV2X2luZm8oJnBkZXYtPmRldiwgIlBDSWUgUE1VcyByZWdpc3RlcmVkXG4iKTsKPj4+ ICsKPj4KPj4gQXMgSm9uYXRoYW4gbWVudGlvbmVkIHRoaXMgbWVzc2FnZSBtYXliZSB1bm5lY2Vz c2FyeSwgYnV0IEkgbWF5IGZpbmQgaXQgdXNlZnVsIGlmIHlvdQo+PiBwcmludCBob3cgbWFueSBQ TVUncyByZWdpc3RlcmVkLgo+IAo+IEZpbmUsIEkgY2FuIGFkZCBhIGNvdW50IGhlcmUuCj4gCj4+ Cj4+IE9uIG9uZSBQTVUgcmVnaXN0cmF0aW9uIGZhaWxlZCwgeW91IGp1c3QgcmVtb3ZlIGFsbCB0 aGUgUE1VcyByZWdpc3RlcmVkLiBJIHdvbmRlciBpZgo+PiBpdCdzIGJldHRlciB0byBtYWtlIGFs cmVhZHkgcmVnaXN0ZXJlZCBQTVUgc3RheSBpbnN0ZWFkIG9mIHJlbW92aW5nIHRoZW0gYWxsLgo+ IAo+IElmIHBlcmZfcG11X3JlZ2lzdGVyIGZhaWxzLCBpcyBpdCBuZWNlc3NhcnkgdG8gY2FsbCBw ZXJmX3BtdV91bnJlZ2lzdGVyPyBJIGRpZCBub3QgZmluZAo+IHNpbWlsYXIgaW1wbGVtZW50YXRp b24gdG8gdW5yZWdpc3RlciBwbXUgd2hlbiBwZXJmX3BtdV9yZWdpc3RlciBmYWlscy4KPiAKCk5v IG5lZWQgZm9yIHRoaXMgYnV0IHRoYXQncyBub3Qgd2hhdCBJIG1lYW4gaGVyZS4gSWYgdGhlcmUg c2hvdWxkIGJlIE0gUE1VcyBidXQgb25seSBOIG9mIHRoZW0KYXJlIHByb2JlZCBzdWNjZXNzZnVs bHksIG1heWJlIG5vIG5lZWQgdG8gZmFpbCB0aGUgcHJvYmUgYW5kIHJlbW92ZSB0aGVtIGFsbC4g V2Ugc3RpbGwgY2FuCnVzZSB0aGVtIGJ1dCBqdXN0IG5vdGlmeSB0aGUgdXNlciB0aGF0IGhvdyBt YW55IFBNVXMgYXJlIHJlZ2lzdGVyZWQgYW5kIHRoZSByZXN0IGZhaWwuCkFueXdheSBpdCdzIHVw IHRvIHlvdS4KClRoYW5rcywKWWljb25nCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJt LWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=