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 B9E5AC433EF for ; Sun, 24 Jul 2022 15:31:13 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=6i5JOcZUDcsBFFAl+5f7rjd1Ui9SolyOcVkJDr4Sgz4=; b=R9wYuIssXAbM5v5qypo/NCGgB1 uvMQylCls8J1meIt9V/WAvZWyYs53IV+UbM6OTu1T9l/TJYsQb3M96YW2leY2F5WMMAEkdAeA4Py1 t5dW/Je12HYnaa1B+V+PpkkaCQSl2GCqopPvvkhunK7dPVq7n8SIt2B90CGEOOq4BIsbOauOM4XIc ckCLUqJkZol7SI1WinsoOHCsnzNlcGbZgDI9WUOEGqM0PKjJqmVzHnJaJl6XIrLKtU634J9oSJTFo KrSf6PDMWlO0qIAS75zA9KKJwe2j5+0L/thFARFVxVuLjyCHBJFVWVrj8Fq7W/eIgA6QF/mCIxfge cBVYYdjQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oFdYg-006vky-LR; Sun, 24 Jul 2022 15:30:18 +0000 Received: from out28-170.mail.aliyun.com ([115.124.28.170]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oFdYa-006ve8-Kb for linux-mtd@lists.infradead.org; Sun, 24 Jul 2022 15:30:17 +0000 X-Alimail-AntiSpam: AC=CONTINUE;BC=0.07436282|-1;CH=green;DM=|CONTINUE|false|;DS=CONTINUE|ham_system_inform|0.100595-0.00118248-0.898223;FP=0|0|0|0|0|-1|-1|-1;HT=ay29a033018047206;MF=zhouyanjie@wanyeetech.com;NM=1;PH=DS;RN=23;RT=23;SR=0;TI=SMTPD_---.OcQGU0P_1658676583; Received: from 192.168.10.152(mailfrom:zhouyanjie@wanyeetech.com fp:SMTPD_---.OcQGU0P_1658676583) by smtp.aliyun-inc.com; Sun, 24 Jul 2022 23:29:45 +0800 Subject: Re: [PATCH 3/3] SPI: Ingenic: Add SFC support for Ingenic SoCs. To: Paul Cercueil Cc: tudor.ambarus@microchip.com, p.yadav@ti.com, michael@walle.cc, miquel.raynal@bootlin.com, richard@nod.at, vigneshr@ti.com, broonie@kernel.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, linux-mtd@lists.infradead.org, linux-spi@vger.kernel.org, linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, aidanmacdonald.0x0@gmail.com, tmn505@gmail.com, dongsheng.qiu@ingenic.com, aric.pzqi@ingenic.com, rick.tyliu@ingenic.com, jinghui.liu@ingenic.com, sernia.zhou@foxmail.com, reimu@sudomaker.com References: <1658508510-15400-1-git-send-email-zhouyanjie@wanyeetech.com> <1658508510-15400-4-git-send-email-zhouyanjie@wanyeetech.com> <21QHFR.943AANPP6PH41@crapouillou.net> From: Zhou Yanjie Message-ID: <8b463072-2aa0-476e-ab8f-be6c44122c74@wanyeetech.com> Date: Sun, 24 Jul 2022 23:29:43 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: <21QHFR.943AANPP6PH41@crapouillou.net> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220724_083013_178403_CD632F3A X-CRM114-Status: GOOD ( 21.89 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGkgUGF1bCwKCk9uIDIwMjIvNy8yNCDkuIrljYg0OjI0LCBQYXVsIENlcmN1ZWlsIHdyb3RlOgo+ IEhpIFpob3UsCj4KPiBMZSBkaW0uLCBqdWlsLiAyNCAyMDIyIGF0IDAxOjI2OjU2ICswODAwLCBa aG91IFlhbmppZSAKPiA8emhvdXlhbmppZUB3YW55ZWV0ZWNoLmNvbT4gYSDDqWNyaXQgOgo+PiBI aSBQYXVsLAo+Pgo+PiBPbiAyMDIyLzcvMjMg5LiK5Y2INDowMywgUGF1bCBDZXJjdWVpbCB3cm90 ZToKPj4+IEhpIFpob3UsCj4+Pgo+Pj4KPj4+IExlIHNhbS4sIGp1aWwuIDIzIDIwMjIgYXQgMDA6 NDg6MzAgKzA4MDAsIOWRqOeQsOadsCAoWmhvdSBZYW5qaWUpIAo+Pj4gfzx6aG91eWFuamllQHdh bnllZXRlY2guY29tPiBhIMOpY3JpdCA6Cj4+Pj4gQWRkIFNGQyBzdXBwb3J0IGZvciB0aGUgWDEw MDAgU29DLCB0aGUgWDE2MDAgU29DLCBhbmQgdGhlIFgyMDAwIFNvQwo+Pj4+IGZyb20gSW5nZW5p Yy4KPj4+Pgo+Pj4+IFNpZ25lZC1vZmYtYnk6IOWRqOeQsOadsCAoWmhvdSBZYW5qaWUpIDx6aG91 eWFuamllQHdhbnllZXRlY2guY29tPgo+Pj4+IC0tLQo+Pj4+IMKgZHJpdmVycy9zcGkvS2NvbmZp Z8KgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDkgKwo+Pj4+IMKgZHJpdmVycy9zcGkvTWFrZWZp bGXCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4+Pj4gwqBkcml2ZXJzL3NwaS9zcGktaW5n ZW5pYy1zZmMuYyB8IDY2MiAKPj4+PiB/fysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+Pj4+IMKgMyBmaWxlcyBjaGFuZ2VkLCA2NzIgaW5zZXJ0aW9ucygrKQo+Pj4+ IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3BpL3NwaS1pbmdlbmljLXNmYy5jCj4+Pj4K Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvS2NvbmZpZyBiL2RyaXZlcnMvc3BpL0tjb25m aWcKPj4+PiBpbmRleCAzYjEwNDRlLi4xMDc3YmQzIDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZlcnMv c3BpL0tjb25maWcKPj4+PiArKysgYi9kcml2ZXJzL3NwaS9LY29uZmlnCj4+Pj4gQEAgLTQzNyw2 ICs0MzcsMTUgQEAgY29uZmlnIFNQSV9JTkdFTklDCj4+Pj4gwqDCoMKgwqDCoMKgIFRvIGNvbXBp bGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKPj4+ PiDCoMKgwqDCoMKgwqAgd2lsbCBiZSBjYWxsZWQgc3BpLWluZ2VuaWMuCj4+Pj4KPj4+PiArY29u ZmlnIFNQSV9JTkdFTklDX1NGQwo+Pj4+ICvCoMKgwqAgdHJpc3RhdGUgIkluZ2VuaWMgU29DcyBT UEkgRmxhc2ggQ29udHJvbGxlciIKPj4+PiArwqDCoMKgIGRlcGVuZHMgb24gTUFDSF9JTkdFTklD IHx8IENPTVBJTEVfVEVTVAo+Pj4+ICvCoMKgwqAgaGVscAo+Pj4+ICvCoMKgwqDCoMKgIFRoaXMg ZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgSW5nZW5pYyBTb0NzIFNQSSBmbGFzaCBjb250cm9sbGVy Lgo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoCBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9k dWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCj4+Pj4gK8KgwqDCoMKgwqAgd2lsbCBiZSBj YWxsZWQgaW5nZW5pYy1zZmMuCj4+Pj4gKwo+Pj4+IMKgY29uZmlnIFNQSV9JTlRFTAo+Pj4+IMKg wqDCoMKgIHRyaXN0YXRlCj4+Pj4KPj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvTWFrZWZp bGUgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQo+Pj4+IGluZGV4IDBmNDRlYjYuLmYzZTQyYzAgMTAw NjQ0Cj4+Pj4gLS0tIGEvZHJpdmVycy9zcGkvTWFrZWZpbGUKPj4+PiArKysgYi9kcml2ZXJzL3Nw aS9NYWtlZmlsZQo+Pj4+IEBAIC02Miw2ICs2Miw3IEBAIG9iai0kKENPTkZJR19TUElfSElTSV9T RkNfVjNYWCnCoMKgwqDCoMKgwqDCoCArPSAKPj4+PiB/f3NwaS1oaXNpLXNmYy12M3h4Lm8KPj4+ PiDCoG9iai0kKENPTkZJR19TUElfSU1HX1NQRkkpwqDCoMKgwqDCoMKgwqAgKz0gc3BpLWltZy1z cGZpLm8KPj4+PiDCoG9iai0kKENPTkZJR19TUElfSU1YKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Kz0gc3BpLWlteC5vCj4+Pj4gwqBvYmotJChDT05GSUdfU1BJX0lOR0VOSUMpwqDCoMKgwqDCoMKg wqAgKz0gc3BpLWluZ2VuaWMubwo+Pj4+ICtvYmotJChDT05GSUdfU1BJX0lOR0VOSUNfU0ZDKcKg wqDCoCArPSBzcGktaW5nZW5pYy1zZmMubwo+Pj4+IMKgb2JqLSQoQ09ORklHX1NQSV9JTlRFTCnC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IHNwaS1pbnRlbC5vCj4+Pj4gwqBvYmotJChDT05GSUdf U1BJX0lOVEVMX1BDSSnCoMKgwqDCoMKgwqDCoCArPSBzcGktaW50ZWwtcGNpLm8KPj4+PiDCoG9i ai0kKENPTkZJR19TUElfSU5URUxfUExBVEZPUk0pwqDCoMKgICs9IHNwaS1pbnRlbC1wbGF0Zm9y bS5vCj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1pbmdlbmljLXNmYy5jIAo+Pj4+ IH9/Yi9kcml2ZXJzL3NwaS9zcGktaW5nZW5pYy1zZmMuYwo+Pj4+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4+Pj4gaW5kZXggMDAwMDAwMDAuLmE1NjU1NDYKPj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4g KysrIGIvZHJpdmVycy9zcGkvc3BpLWluZ2VuaWMtc2ZjLmMKPj4+PiBAQCAtMCwwICsxLDY2MiBA QAo+Pj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0Qt Mi1DbGF1c2UpCj4+Pgo+Pj4gRHVhbC1saWNlbnNlIGRyaXZlcj8gVGhhdCdzIG5vdCB3aGF0IE1P RFVMRV9MSUNFTlNFKCkgc2F5cy4KPj4+Cj4+Cj4+IE15IGZhdWx0LCBmb3Jnb3QgdG8gbW9kaWZ5 IE1PRFVMRV9MSUNFTlNFKCksIHdpbGwgZml4IGl0IGluIHRoZSBuZXh0IAo+PiB2ZXJzaW9uLgo+ Pgo+Pgo+Pj4+ICsvKgo+Pj4+ICsgKiBJbmdlbmljIFNvQ3MgU1BJIEZsYXNoIENvbnRyb2xsZXIg RHJpdmVyCj4+Pj4gKyAqIENvcHlyaWdodCAoYykgMjAyMiDlkajnkLDmnbAgKFpob3UgWWFuamll KSAKPj4+PiA8emhvdXlhbmppZUB3YW55ZWV0ZWNoLmNvbT4KPj4+PiArICovCj4+Pj4gKwo+Pj4+ ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L2JpdG9w cy5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9j b21wbGV0aW9uLmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+Pj4+ICsj aW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwu aD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgv bXRkL210ZC5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4+Pj4gKyNpbmNs dWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KPj4+PiArI2luY2x1ZGUgPGxpbnV4 L3NwaS9zcGktbWVtLmg+Cj4+Pj4gKwo+Pj4+ICsvKiBTRkMgcmVnaXN0ZXIgb2Zmc2V0cyAqLwo+ Pj4+ICsjZGVmaW5lIFNGQ19SRUdfR0xCwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAweDAwMDAKPj4+PiArI2RlZmluZSBTRkNfUkVHX0RFVl9DT05GwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MDAwNAo+Pj4+ICsjZGVmaW5lIFNGQ19SRUdfREVW X1NUQV9FWFDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgwMDA4Cj4+Pj4gKyNkZWZp bmUgU0ZDX1JFR19ERVZfU1RBX1JUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MDAw Ywo+Pj4+ICsjZGVmaW5lIFNGQ19SRUdfREVWX1NUQV9NU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgMHgwMDEwCj4+Pj4gKyNkZWZpbmUgU0ZDX1JFR19UUkFOX0NPTkYobinCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICgweDAwMTQgKyBuICogNCkKPj4+PiArI2RlZmluZSBTRkNfUkVHX1RS QU5fQ0ZHMChuKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKDB4MDAxNCArIG4gKiA0KQo+Pj4KPj4+ IFlvdSBzaG91bGQgcHJvdGVjdCB0aGUgbWFjcm8gcGFyYW1ldGVyLiBJZiB5b3UgZG8gZm9yIGlu c3RhbmNlIAo+Pj4gf1NGQ19SRUdfVFJBTl9DT05GKHggKyAxKSBpdCB3b3VsZCByZXNvbHZlIHRv ICgweDAwMTQgKyB4ICsgMSAqIDQpIAo+Pj4gf3doaWNoIGlzIG5vdCB3aGF0IHlvdSdkIHdhbnQu Cj4+Pgo+Pgo+PiBTdXJlLCB3aWxsIGZpeCBpdC4KPj4KPj4KPj4+IEFsc28gLSBsb29rcyBsaWtl IFNGQ19SRUdfVFJBTl9DT05GKCkgYW5kIFNGQ19SRUdfVFJBTl9DRkcwKCkgYXJlIAo+Pj4gdGhl IH9zYW1lIHRoaW5nLCB0aGF0J3Mgb24gcHVycG9zZT8KPj4+Cj4+Pj4gKyNkZWZpbmUgU0ZDX1JF R19UUkFOX0xFTiAweDAwMmMKPj4+PiArI2RlZmluZSBTRkNfUkVHX0RFVl9BRERSKG4pwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgweDAwMzAgKyBuICogNCkKPj4+PiArI2RlZmluZSBT RkNfUkVHX0RFVl9BRERSX1BMVVMobinCoMKgwqDCoMKgwqDCoCAoMHgwMDQ4ICsgbiAqIDQpCj4+ Pj4gKyNkZWZpbmUgU0ZDX1JFR19NRU1fQUREUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAweDAwNjAKPj4+PiArI2RlZmluZSBTRkNfUkVHX1RSSUfCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAweDAwNjQKPj4+PiArI2RlZmluZSBTRkNfUkVHX1NSwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDAwNjgKPj4+PiArI2RlZmlu ZSBTRkNfUkVHX1NDUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgMHgwMDZjCj4+Pj4gKyNkZWZpbmUgU0ZDX1JFR19JTlRDwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgMHgwMDcwCj4+Pj4gKyNkZWZpbmUgU0ZDX1JFR19GU03CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MDA3NAo+Pj4+ICsjZGVm aW5lIFNGQ19SRUdfQ0dFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAweDAwNzgKPj4+PiArI2RlZmluZSBTRkNfUkVHX1RSQU5fQ0ZHMShuKcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKDB4MDA5YyArIG4gKiA0KQo+Pj4+ICsjZGVmaW5lIFNGQ19SRUdfRFLCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MTAwMAo+Pj4+ICsK Pj4+PiArLyogYml0cyB3aXRoaW4gdGhlIEdMQiByZWdpc3RlciAqLwo+Pj4+ICsjZGVmaW5lIEdM Ql9UUkFOX0RJUl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTk1BU0soMTMs IDEzKQo+Pj4+ICsjZGVmaW5lIEdMQl9UUkFOX0RJUl9XUklURcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAweDEKPj4+PiArI2RlZmluZSBHTEJfVFJBTl9ESVJfUkVBRMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAweDAKPj4+Cj4+PiBXaGVuIGl0J3MgYSBzaW5nbGUgYml0IC0g anVzdCB1c2UgQklUKCkuCj4+Cj4+Cj4+IFN1cmUuCj4+Cj4+Cj4+Pgo+Pj4+ICsjZGVmaW5lIEdM Ql9USFJFU0hPTERfTUFTSyBHRU5NQVNLKDEyLCA3KQo+Pj4+ICsjZGVmaW5lIEdMQl9PUF9NT0RF X01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOTUFTSyg2LCA2KQo+Pj4KPj4+ IFNhbWUgaGVyZSwgYW5kIEkgc2VlIGl0IGEgZmV3IHRpbWVzIGJlbG93IGFzIHdlbGwuCj4+Pgo+ Pgo+PiBTdXJlLgo+Pgo+Pgo+Pj4+ICsjZGVmaW5lIEdMQl9PUF9NT0RFX0RNQcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MQo+Pj4+ICsjZGVmaW5lIEdMQl9PUF9NT0RF X1NMQVZFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MAo+Pj4+ICsjZGVmaW5lIEdM Ql9QSEFTRV9OVU1fTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDUs IDMpCj4+Pj4gKyNkZWZpbmUgR0xCX1dQX0VOwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBCSVQoMikKPj4+PiArI2RlZmluZSBHTEJfQlVSU1RfTURfTUFTS8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDEsIDApCj4+Pj4gKyNkZWZpbmUg R0xCX0JVUlNUX01EX0lOQ1IzMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDMKPj4+ PiArI2RlZmluZSBHTEJfQlVSU1RfTURfSU5DUjE2wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIDB4Mgo+Pj4+ICsjZGVmaW5lIEdMQl9CVVJTVF9NRF9JTkNSOMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAweDEKPj4+PiArI2RlZmluZSBHTEJfQlVSU1RfTURfSU5DUjTCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgwCj4+Pj4gKwo+Pj4+ICsvKiBiaXRzIHdpdGhpbiB0 aGUgREVWX0NPTkYgcmVnaXN0ZXIgKi8KPj4+PiArI2RlZmluZSBERVZfQ09ORl9TTVBfREVMQVlf TUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygyMCwgMTYpCj4+Pj4gKyNkZWZpbmUg REVWX0NPTkZfU01QX0RFTEFZXzE4MERFR8KgwqDCoMKgwqDCoMKgIDB4NAo+Pj4+ICsjZGVmaW5l IERFVl9DT05GX1NNUF9ERUxBWV9IQUxGX0NZQ0xFwqDCoMKgIDB4MQo+Pj4+ICsjZGVmaW5lIERF Vl9DT05GX0NNRF9UWVBFX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTk1BU0soMTUsIDE1 KQo+Pj4+ICsjZGVmaW5lIERFVl9DT05GX0NNRF9UWVBFXzE2QklUwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAweDEKPj4+PiArI2RlZmluZSBERVZfQ09ORl9DTURfVFlQRV84QklUwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAweDAKPj4+PiArI2RlZmluZSBERVZfQ09ORl9TVEFfVFlQRV9NQVNLwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDE0LCAxMykKPj4+PiArI2RlZmluZSBERVZfQ09ORl9U SE9MRF9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTk1BU0soMTIsIDExKQo+ Pj4+ICsjZGVmaW5lIERFVl9DT05GX1RTRVRVUF9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBH RU5NQVNLKDEwLCA5KQo+Pj4+ICsjZGVmaW5lIERFVl9DT05GX1RTSF9NQVNLwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIEdFTk1BU0soOCwgNSkKPj4+PiArI2RlZmluZSBERVZfQ09ORl9D UEhBwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDQpCj4+Pj4gKyNk ZWZpbmUgREVWX0NPTkZfQ1BPTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEJJVCgzKQo+Pj4+ICsjZGVmaW5lIERFVl9DT05GX0NFX0RMwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgQklUKDIpCj4+Pj4gKyNkZWZpbmUgREVWX0NPTkZfSE9MRF9ETMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMSkKPj4+PiArI2RlZmluZSBERVZfQ09O Rl9XUF9ETMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgwKQo+Pj4+ ICsKPj4+PiArLyogYml0cyB3aXRoaW4gdGhlIFRSQU5fQ09ORihuKSByZWdpc3RlciAqLwo+Pj4+ ICsjZGVmaW5lIFRSQU5fQ09ORl9UUkFOX01PREVfTUFTS8KgwqDCoMKgwqDCoMKgIEdFTk1BU0so MzEsIDI5KQo+Pj4+ICsjZGVmaW5lIFRSQU5fQ09ORl9BRERSX1dJRFRIX01BU0vCoMKgwqDCoMKg wqDCoCBHRU5NQVNLKDI4LCAyNikKPj4+PiArI2RlZmluZSBUUkFOX0NPTkZfUE9MTF9FTsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMjUpCj4+Pj4gKyNkZWZpbmUgVFJBTl9DT05G X0NNRF9FTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMjQpCj4+Pj4gKyNkZWZp bmUgVFJBTl9DT05GX1BIQVNFX0ZPUk1BVF9NQVNLwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygyMywg MjMpCj4+Pj4gKyNkZWZpbmUgVFJBTl9DT05GX0RNWV9CSVRTX01BU0vCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEdFTk1BU0soMjIsIDE3KQo+Pj4+ICsjZGVmaW5lIFRSQU5fQ09ORl9EQVRBX0VOwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgxNikKPj4+PiArI2RlZmluZSBUUkFOX0NP TkZfQ01EX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygxNSwgMCkK Pj4+PiArCj4+Pj4gKy8qIGJpdHMgd2l0aGluIHRoZSBUUklHIHJlZ2lzdGVyICovCj4+Pj4gKyNk ZWZpbmUgVFJJR19GTFVTSMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgQklUKDIpCj4+Pj4gKyNkZWZpbmUgVFJJR19TVE9QwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMSkKPj4+PiArI2RlZmluZSBUUklHX1NUQVJU wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMCkKPj4+ PiArCj4+Pj4gKy8qIGJpdHMgd2l0aGluIHRoZSBTUiByZWdpc3RlciAqLwo+Pj4+ICsjZGVmaW5l IFNSX0ZJRk9fTlVNX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygy MiwgMTYpCj4+Pj4gKyNkZWZpbmUgU1JfRU5EwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCg0KQo+Pj4+ICsjZGVmaW5lIFNSX1RSQU5fUkVR wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMykKPj4+ PiArI2RlZmluZSBTUl9SRUNFX1JFUcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgQklUKDIpCj4+Pj4gKyNkZWZpbmUgU1JfT1ZFUsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMSkKPj4+PiArI2RlZmlu ZSBTUl9VTkRFUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg QklUKDApCj4+Pj4gKwo+Pj4+ICsvKiBiaXRzIHdpdGhpbiB0aGUgU0NSIHJlZ2lzdGVyICovCj4+ Pj4gKyNkZWZpbmUgU0NSX0NMUl9FTkTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEJJVCg0KQo+Pj4+ICsjZGVmaW5lIFNDUl9DTFJfVFJFUcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgzKQo+Pj4+ICsjZGVmaW5lIFNDUl9DTFJf UlJFUcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgyKQo+Pj4+ICsj ZGVmaW5lIFNDUl9DTFJfT1ZFUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEJJVCgxKQo+Pj4+ICsjZGVmaW5lIFNDUl9DTFJfVU5ERVLCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBCSVQoMCkKPj4+PiArCj4+Pj4gKy8qIGJpdHMgd2l0aGluIHRoZSBJ TlRDIHJlZ2lzdGVyICovCj4+Pj4gKyNkZWZpbmUgSU5UQ19NQVNLX0VORMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCg0KQo+Pj4+ICsjZGVmaW5lIElOVENfTUFTS19U UkVRwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDMpCj4+Pj4gKyNk ZWZpbmUgSU5UQ19NQVNLX1JSRVHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBCSVQoMikKPj4+PiArI2RlZmluZSBJTlRDX01BU0tfT1ZFUsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgxKQo+Pj4+ICsjZGVmaW5lIElOVENfTUFTS19VTkRFUsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgwKQo+Pj4+ICsKPj4+PiAr LyogYml0cyB3aXRoaW4gdGhlIFRSQU5fQ0ZHMShuKSByZWdpc3RlciAqLwo+Pj4+ICsjZGVmaW5l IFRSQU5fQ0ZHMV9UUkFOX01PREVfTUFTS8KgwqDCoMKgwqDCoMKgIEdFTk1BU0soNywgNCkKPj4+ PiArCj4+Pj4gKyNkZWZpbmUgVFJBTl9NT0RFX1NUQU5EQVJEwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIDAKPj4+PiArI2RlZmluZSBUUkFOX01PREVfRFVBTF9EQVRBwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIDEKPj4+PiArI2RlZmluZSBUUkFOX01PREVfRFVBTF9JT8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAyCj4+Pj4gKyNkZWZpbmUgVFJBTl9NT0RFX0RVQUxf RlVMTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAzCj4+Pj4gKyNkZWZpbmUgVFJBTl9N T0RFX1FVQURfREFUQcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA1Cj4+Pj4gKyNkZWZp bmUgVFJBTl9NT0RFX1FVQURfSU/CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgNgo+Pj4+ ICsjZGVmaW5lIFRSQU5fTU9ERV9RVUFEX0ZVTEzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgNwo+Pj4+ICsjZGVmaW5lIFRSQU5fTU9ERV9PQ1RBTF9EQVRBwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCA5Cj4+Pj4gKyNkZWZpbmUgVFJBTl9NT0RFX09DVEFMX0lPwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIDEwCj4+Pj4gKyNkZWZpbmUgVFJBTl9NT0RFX09DVEFMX0ZVTEzCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIDExCj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIElOR0VOSUNfU0ZDX0ZJRk9f U0laRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKDY0ICogNCkKPj4+PiArCj4+Pj4gKyNkZWZpbmUg SU5HRU5JQ19TRkNfVFJBTlNGRVJfVElNRU9VVMKgwqDCoCAxMDAwCj4+Pgo+Pj4gTWF5YmUgYWRk IHRoZSB1bml0IG5hbWUgaW4gdGhlIG1hY3JvIGFzIHdlbGwgLSAKPj4+IH9JTkdFTklDX1NGQ19U UkFOU0ZFUl9USU1FT1VUX01TLgo+Pgo+Pgo+PiBTdXJlLgo+Pgo+Pgo+Pj4KPj4+PiArCj4+Pj4g K2VudW0gaW5nZW5pY19zZmNfdmVyc2lvbiB7Cj4+Pj4gK8KgwqDCoCBJRF9YMTAwMCwKPj4+PiAr wqDCoMKgIElEX1gxNjAwLAo+Pj4+ICvCoMKgwqAgSURfWDIwMDAsCj4+Pj4gK307Cj4+Pj4gKwo+ Pj4+ICtzdHJ1Y3QgaW5nZW5pY19zb2NfaW5mbyB7Cj4+Pj4gK8KgwqDCoCBlbnVtIGluZ2VuaWNf c2ZjX3ZlcnNpb24gdmVyc2lvbjsKPj4+PiArCj4+Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgbWF4 X2J1c193aWR0aDsKPj4+PiArCj4+Pj4gK8KgwqDCoCBjb25zdCB1MzIgdHJhbl9tb2RlX21hc2s7 Cj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtzdHJ1Y3QgaW5nZW5pY19zZmMgewo+Pj4+ICvCoMKgwqAg Y29uc3Qgc3RydWN0IGluZ2VuaWNfc29jX2luZm8gKnNvY19pbmZvOwo+Pj4+ICsKPj4+PiArwqDC oMKgIHZvaWQgX19pb21lbSAqYmFzZTsKPj4+PiArwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldjsK Pj4+PiArwqDCoMKgIHN0cnVjdCBjbGsgKmNsazsKPj4+PiArwqDCoMKgIGludCBpcnE7Cj4+Pj4g Kwo+Pj4+ICvCoMKgwqAgc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjsKPj4+PiArfTsKPj4+ PiArCj4+Pj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBpbmdlbmljX3NmY19pcnFfaGFuZGxlcihpbnQg aXJxLCB2b2lkICpkYXRhKQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgaW5nZW5pY19zZmMg KnNmYyA9IGRhdGE7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgd3JpdGVsKDB4MWYsIHNmYy0+YmFzZSAr IFNGQ19SRUdfSU5UQyk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgY29tcGxldGUoJnNmYy0+Y29tcGxl dGlvbik7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgcmV0dXJuIElSUV9IQU5ETEVEOwo+Pj4+ICt9Cj4+ Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGluZ2VuaWNfc2ZjX2FkanVzdF9vcF9zaXplKHN0cnVjdCBz cGlfbWVtICptZW0sIHN0cnVjdCAKPj4+PiB/f3NwaV9tZW1fb3AgKm9wKQo+Pj4+ICt7Cj4+Pj4g K8KgwqDCoCB1aW50cHRyX3QgYWRkciA9ICh1aW50cHRyX3Qpb3AtPmRhdGEuYnVmLmluOwo+Pj4+ ICsKPj4+PiArwqDCoMKgIGlmIChvcC0+ZGF0YS5uYnl0ZXMgPiBJTkdFTklDX1NGQ19GSUZPX1NJ WkUgJiYgCj4+Pj4gIUlTX0FMSUdORUQoYWRkciwgf380KSkKPj4+PiArwqDCoMKgwqDCoMKgwqAg b3AtPmRhdGEubmJ5dGVzID0gSU5HRU5JQ19TRkNfRklGT19TSVpFOwo+Pj4+ICsKPj4+PiArwqDC oMKgIHJldHVybiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgYm9vbCBpbmdlbmljX3Nm Y19zdXBwb3J0c19vcChzdHJ1Y3Qgc3BpX21lbSAqbWVtLCBjb25zdCAKPj4+PiB/f3N0cnVjdCBz cGlfbWVtX29wICpvcCkKPj4+PiArewo+Pj4+ICvCoMKgwqAgc3RydWN0IHNwaV9kZXZpY2UgKnNw aSA9IG1lbS0+c3BpOwo+Pj4+ICvCoMKgwqAgc3RydWN0IGluZ2VuaWNfc2ZjICpzZmMgPSAKPj4+ PiBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Cj4+Pj4gK8KgwqDCoCB1 aW50cHRyX3QgYWRkciA9ICh1aW50cHRyX3Qpb3AtPmRhdGEuYnVmLmluOwo+Pj4+ICsKPj4+PiAr wqDCoMKgIC8qIFRoZSBjb250cm9sbGVyIG9ubHkgc3VwcG9ydHMgU3RhbmRhcmQgU1BJIG1vZGUs IER1YWxsIG1vZGUsIAo+Pj4+IH9/UXVhZCBtb2RlIGFuZCBPY3RhbCBtb2RlLiAqLwo+Pj4KPj4+ IER1YWwqCj4+Cj4+Cj4+IE9vcHMsIHdpbGwgZml4IGl0Lgo+Pgo+Pgo+Pj4KPj4+PiArwqDCoMKg IGlmIChvcC0+Y21kLmJ1c3dpZHRoID4gc2ZjLT5zb2NfaW5mby0+bWF4X2J1c193aWR0aCB8fAo+ Pj4+ICvCoMKgwqDCoMKgwqDCoCBvcC0+YWRkci5idXN3aWR0aCA+IHNmYy0+c29jX2luZm8tPm1h eF9idXNfd2lkdGggfHwKPj4+PiArwqDCoMKgwqDCoMKgwqAgb3AtPmR1bW15LmJ1c3dpZHRoID4g c2ZjLT5zb2NfaW5mby0+bWF4X2J1c193aWR0aCB8fAo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBvcC0+ ZGF0YS5idXN3aWR0aCA+IHNmYy0+c29jX2luZm8tPm1heF9idXNfd2lkdGgpCj4+Pj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiBmYWxzZTsKPj4+PiArCj4+Pj4gK8KgwqDCoCAvKiBNYXggMzIgZHVt bXkgY2xvY2sgY3ljbGVzIHN1cHBvcnRlZCAqLwo+Pj4+ICvCoMKgwqAgaWYgKG9wLT5kdW1teS5u Ynl0ZXMgJiYgb3AtPmR1bW15Lm5ieXRlcyAqIDggLyAKPj4+PiB/f29wLT5kdW1teS5idXN3aWR0 aCA+IDMyKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7Cj4+Pj4gKwo+Pj4+ICvC oMKgwqAgLyogTWF4IHJ4IGRhdGEgbGVuZ3RoLCBjaGVjayBjb250cm9sbGVyIGxpbWl0cyBhbmQg YWxpZ25tZW50ICovCj4+Pj4gK8KgwqDCoCBpZiAob3AtPmRhdGEuZGlyID09IFNQSV9NRU1fREFU QV9JTiAmJgo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBvcC0+ZGF0YS5uYnl0ZXMgPiBJTkdFTklDX1NG Q19GSUZPX1NJWkUgJiYgCj4+Pj4gIUlTX0FMSUdORUQoYWRkciwgf380KSkKPj4+Cj4+PiBUaGlz IGRvZXMgdGhlIHNhbWUgY2hlY2sgdGhhbiBpbiBpbmdlbmljX3NmY19hZGp1c3Rfb3Bfc2l6ZSgp LCBtYXliZSAKPj4+IH9tb3ZlIGl0IHRvIGEgbmV3IGlubGluZSBmdW5jdGlvbj8KPj4+Cj4+Cj4+ IFN1cmUuCj4+Cj4+Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsKPj4+PiArCj4+ Pj4gK8KgwqDCoCAvKiBNYXggNiBieXRlcyBhZGRyZXNzIHdpZHRoIHN1cHBvcnRlZCAqLwo+Pj4+ ICvCoMKgwqAgaWYgKG9wLT5hZGRyLm5ieXRlcyA+IDYpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiBmYWxzZTsKPj4+PiArCj4+Pj4gK8KgwqDCoCByZXR1cm4gc3BpX21lbV9kZWZhdWx0X3N1 cHBvcnRzX29wKG1lbSwgb3ApOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCBpbmdl bmljX3NmY19zZXRfdHJhbnNmZXJfbW9kZShzdHJ1Y3QgaW5nZW5pY19zZmMgKnNmYywgCj4+Pj4g f39jb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApCj4+Pj4gK3sKPj4+PiArwqDCoMKgIGludCB2 YWw7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgdmFsID0gcmVhZGwoc2ZjLT5iYXNlICsgKHNmYy0+c29j X2luZm8tPnZlcnNpb24gPj0gSURfWDE2MDAgPwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFNGQ19SRUdfVFJBTl9DRkcxKDApIDogU0ZDX1JFR19UUkFOX0NPTkYoMCkpKTsKPj4+Cj4+PiBB cyBLcnp5c3p0b2Ygc2FpZCAtIHVnaC4KPj4+Cj4+Cj4+IFdpbGwgZml4IGl0Lgo+Pgo+Pgo+Pj4g QWxzbywgaW5zdGVhZCBvZiBoYXZpbmcgYSAidmVyc2lvbiIgZW51bSBpbiB5b3VyIHNvY19pbmZv LCB3aHkgbm90IAo+Pj4gf2p1c3QgaGF2ZSBhICJyZWdfY29uZiIgZmllbGQgdGhhdCBnaXZlcyB5 b3UgZGlyZWN0bHkgdGhlIHJpZ2h0IAo+Pj4gcmVnaXN0ZXI/Cj4+Pgo+Pgo+PiBXZSBzdGlsbCBu ZWVkIGEgdmVyc2lvbiB0byBkaXN0aW5ndWlzaCB0aGUgU0ZDIGJlZm9yZSBYMTYwMCBTb0MgYW5k Cj4+IHRoZSBTRkMgYWZ0ZXIgWDE2MDAgU29DLCBiZWNhdXNlIGluIGFkZGl0aW9uIHRvIHRoZSBk aWZmZXJlbmNlIGluIHRoZQo+PiBjZmcgcmVnaXN0ZXIsIGFub3RoZXIgZGlmZmVyZW5jZSBpcyB0 aGF0IHRoZSBTRkMgYmVmb3JlIFgxNjAwIFNvQyBkb2VzCj4+IG5vdCBzdXBwb3J0IGFkZHJlc3Mg dW5hbGlnbmVkIFJYIERNQSB0cmFuc2Zlciwgd2hpbGUgU0ZDIGluIFgxNjAwIGFuZAo+PiBsYXRl ciBTb0NzIGNhbiBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KPgo+IFRoZW4gYWRkIGEgLmRtYV9zdXBw b3J0c191bmFsaWduZWRfYWRkcmVzcyBmaWVsZC4KCgpTdXJlLCBJIHdpbGwgdHJ5LgoKCj4KPj4K Pj4KPj4+Cj4+Pj4gK8KgwqDCoCB2YWwgJj0gfnNmYy0+c29jX2luZm8tPnRyYW5fbW9kZV9tYXNr Owo+Pj4+ICvCoMKgwqAgaWYgKG9wLT5jbWQuYnVzd2lkdGggPT0gOCkKPj4+PiArwqDCoMKgwqDC oMKgwqAgdmFsIHw9IChUUkFOX01PREVfT0NUQUxfRlVMTCA8PCAKPj4+PiB/fyhmZnMoc2ZjLT5z b2NfaW5mby0+dHJhbl9tb2RlX21hc2spIC0gMSkpICYKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHNmYy0+c29jX2luZm8tPnRyYW5fbW9kZV9tYXNrOwo+Pj4KPj4+IExvb2tz IGxpa2UgeW91J3JlIHJlYWxseSB0cnlpbmcgdG8gcmVpbnZlbnQgdGhlIHdoZWVsLgo+Pj4KPj4+ IHZhbCB8PSBGSUVMRF9QUkVQKHNmYy0+c29jX2luZm8tPnRyYW5fbW9kZV9tYXNrLCBUUkFOX01P REVfT0NUQUxfRlVMTCk7Cj4+Pgo+Pj4gdXNpbmcgPGxpbnV4L2JpdGZpZWxkLmg+Lgo+Pj4KPj4+ IEFsc28sIGp1c3QgZGVmaW5lIGEgJ21vZGUnIHZhcmlhYmxlIGFuZCBzZXQgaXQgaW4geW91ciBp Zi9lbHNlIAo+Pj4gYmxvY2tzLCB/dGhhdCB3b3VsZCBsb29rIG11Y2ggYmV0dGVyLiBUaGVuIHlv dSBjYW4gc2V0IHZhbCB8PSAKPj4+IEZJRUxEX1BSRVAoLi4uLCB/bW9kZSkgYXQgdGhlIGVuZC4K Pj4KPj4KPj4gU3VyZSwgd2lsbCBjaGFuZ2UgdGhpcyBpbiB0aGUgbmV4dCB2ZXJzaW9uLgo+Pgo+ Pgo+Pj4KPj4+PiArwqDCoMKgIGVsc2UgaWYgKG9wLT5jbWQuYnVzd2lkdGggPT0gNCkKPj4+PiAr wqDCoMKgwqDCoMKgwqAgdmFsIHw9IChUUkFOX01PREVfUVVBRF9GVUxMIDw8IAo+Pj4+IH9/KGZm cyhzZmMtPnNvY19pbmZvLT50cmFuX21vZGVfbWFzaykgLSAxKSkgJgo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2ZjLT5zb2NfaW5mby0+dHJhbl9tb2RlX21hc2s7Cj4+Pj4g K8KgwqDCoCBlbHNlIGlmIChvcC0+Y21kLmJ1c3dpZHRoID09IDIpCj4+Pj4gK8KgwqDCoMKgwqDC oMKgIHZhbCB8PSAoVFJBTl9NT0RFX0RVQUxfRlVMTCA8PCAKPj4+PiB/fyhmZnMoc2ZjLT5zb2Nf aW5mby0+dHJhbl9tb2RlX21hc2spIC0gMSkpICYKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNmYy0+c29jX2luZm8tPnRyYW5fbW9kZV9tYXNrOwo+Pj4+ICvCoMKgwqAgZWxz ZSBpZiAob3AtPmFkZHIuYnVzd2lkdGggPT0gOCkKPj4+PiArwqDCoMKgwqDCoMKgwqAgdmFsIHw9 IChUUkFOX01PREVfT0NUQUxfSU8gPDwgCj4+Pj4gf38oZmZzKHNmYy0+c29jX2luZm8tPnRyYW5f bW9kZV9tYXNrKSAtIDEpKSAmCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz ZmMtPnNvY19pbmZvLT50cmFuX21vZGVfbWFzazsKPj4+PiArwqDCoMKgIGVsc2UgaWYgKG9wLT5h ZGRyLmJ1c3dpZHRoID09IDQpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHZhbCB8PSAoVFJBTl9NT0RF X1FVQURfSU8gPDwgCj4+Pj4gf38oZmZzKHNmYy0+c29jX2luZm8tPnRyYW5fbW9kZV9tYXNrKSAt IDEpKSAmCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZmMtPnNvY19pbmZv LT50cmFuX21vZGVfbWFzazsKPj4+PiArwqDCoMKgIGVsc2UgaWYgKG9wLT5hZGRyLmJ1c3dpZHRo ID09IDIpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHZhbCB8PSAoVFJBTl9NT0RFX0RVQUxfSU8gPDwg Cj4+Pj4gf38oZmZzKHNmYy0+c29jX2luZm8tPnRyYW5fbW9kZV9tYXNrKSAtIDEpKSAmCj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZmMtPnNvY19pbmZvLT50cmFuX21vZGVf bWFzazsKPj4+PiArwqDCoMKgIGVsc2UgaWYgKG9wLT5kYXRhLmJ1c3dpZHRoID09IDgpCj4+Pj4g K8KgwqDCoMKgwqDCoMKgIHZhbCB8PSAoVFJBTl9NT0RFX09DVEFMX0RBVEEgPDwgCj4+Pj4gf38o ZmZzKHNmYy0+c29jX2luZm8tPnRyYW5fbW9kZV9tYXNrKSAtIDEpKSAmCj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZmMtPnNvY19pbmZvLT50cmFuX21vZGVfbWFzazsKPj4+ PiArwqDCoMKgIGVsc2UgaWYgKG9wLT5kYXRhLmJ1c3dpZHRoID09IDQpCj4+Pj4gK8KgwqDCoMKg wqDCoMKgIHZhbCB8PSAoVFJBTl9NT0RFX1FVQURfREFUQSA8PCAKPj4+PiB/fyhmZnMoc2ZjLT5z b2NfaW5mby0+dHJhbl9tb2RlX21hc2spIC0gMSkpICYKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHNmYy0+c29jX2luZm8tPnRyYW5fbW9kZV9tYXNrOwo+Pj4+ICvCoMKgwqAg ZWxzZSBpZiAob3AtPmRhdGEuYnVzd2lkdGggPT0gMikKPj4+PiArwqDCoMKgwqDCoMKgwqAgdmFs IHw9IChUUkFOX01PREVfRFVBTF9EQVRBIDw8IAo+Pj4+IH9/KGZmcyhzZmMtPnNvY19pbmZvLT50 cmFuX21vZGVfbWFzaykgLSAxKSkgJgo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc2ZjLT5zb2NfaW5mby0+dHJhbl9tb2RlX21hc2s7Cj4+Pj4gK8KgwqDCoCBlbHNlCj4+Pj4g K8KgwqDCoMKgwqDCoMKgIHZhbCB8PSAoVFJBTl9NT0RFX1NUQU5EQVJEIDw8IAo+Pj4+IH9/KGZm cyhzZmMtPnNvY19pbmZvLT50cmFuX21vZGVfbWFzaykgLSAxKSkgJgo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2ZjLT5zb2NfaW5mby0+dHJhbl9tb2RlX21hc2s7Cj4+Pj4g K8KgwqDCoCB3cml0ZWwodmFsLCBzZmMtPmJhc2UgKyAoc2ZjLT5zb2NfaW5mby0+dmVyc2lvbiA+ PSBJRF9YMTYwMCA/Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU0ZDX1JFR19UUkFOX0NG RzEoMCkgOiBTRkNfUkVHX1RSQU5fQ09ORigwKSkpOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsvKgo+ Pj4+ICsgKiBXZSBvbmx5IG5lZWQgUElPIG1vZGUgdG8gaGFuZGxlIHRoZSBTUElfTUVNX05PX0RB VEEgdHJhbnNmZXJzLAo+Pj4+ICsgKiBhbmQgdGhlIHVuYWxpZ25lZCBhY2Nlc3NlcyBpbiBTUElf TUVNX0RBVEFfSU4gdHJhbnNmZXJzLgo+Pj4+ICsgKi8KPj4+PiArc3RhdGljIHZvaWQgaW5nZW5p Y19zZmNfcmVhZF9yeGZpZm8oc3RydWN0IGluZ2VuaWNfc2ZjICpzZmMsIHU4IAo+Pj4+ICp0bywg f391bnNpZ25lZCBpbnQgbGVuKQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoCB2b2lkIF9faW9tZW0gKmZy b207Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgZnJvbSA9IHNmYy0+YmFzZSArIFNGQ19SRUdfRFI7Cj4+ Pj4gKwo+Pj4+ICvCoMKgwqAgZm9yICg7IGxlbiA+PSA0OyBsZW4gLT0gNCwgdG8gKz0gNCkgewo+ Pj4+ICvCoMKgwqDCoMKgwqDCoCB1MzIgdmFsID0gX19yYXdfcmVhZGwoZnJvbSk7Cj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIG1lbWNweSh0bywgJnZhbCwgNCk7Cj4+Pgo+Pj4gTm8gbmVlZCB0byB1c2Ug bWVtY3B5IGZvciA0IGJ5dGVzLiBZb3UgY2FuIGRvOiBwdXRfdW5hbGlnbmVkKHZhbCwgCj4+PiAo dTMyIH8qKXRvKTsKPj4+Cj4+Cj4+IFN1cmUuCj4+Cj4+Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gKwo+ Pj4+ICvCoMKgwqAgaWYgKGxlbikgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB1MzIgdmFsID0gX19y YXdfcmVhZGwoZnJvbSk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIG1lbWNweSh0bywgJnZhbCwgbGVu KTsKPj4+Cj4+PiBIbW0sIEknbSBub3Qgc3VyZSB0aGF0IGlzIGVuZGlhbi1zYWZlLiBJIHdvdWxk IHByZWZlciBpZiB5b3UgY29waWVkIAo+Pj4gf2J5dGUgYnkgYnl0ZS4KPj4+Cj4+Cj4+IFN1cmUu Cj4+Cj4+Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgaW5n ZW5pY19zZmNfZXhlY19vcF9waW8oc3RydWN0IGluZ2VuaWNfc2ZjICpzZmMsIGNvbnN0IAo+Pj4+ IH9/c3RydWN0IHNwaV9tZW1fb3AgKm9wKQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoCBpbnQgcmV0LCB2 YWw7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgdmFsID0gcmVhZGwoc2ZjLT5iYXNlICsgU0ZDX1JFR19H TEIpOwo+Pj4+ICvCoMKgwqAgdTMycF9yZXBsYWNlX2JpdHMoJnZhbCwgR0xCX1RSQU5fRElSX1JF QUQsIEdMQl9UUkFOX0RJUl9NQVNLKTsKPj4+PiArwqDCoMKgIHUzMnBfcmVwbGFjZV9iaXRzKCZ2 YWwsIEdMQl9PUF9NT0RFX1NMQVZFLCBHTEJfT1BfTU9ERV9NQVNLKTsKPj4+PiArwqDCoMKgIHdy aXRlbCh2YWwsIHNmYy0+YmFzZSArIFNGQ19SRUdfR0xCKTsKPj4+Cj4+PiBCeSB0aGUgd2F5LCBo YXZlIHlvdSBjb25zaWRlcmVkIHVzaW5nIHJlZ21hcD8KPj4+Cj4+PiBJdCB3b3VsZCBnaXZlIHlv dSB0aGluZ3MgbGlrZSByZWdtYXBfdXBkYXRlX2JpdHMoKSBmb3IgdGhpcyBraW5kIG9mIAo+Pj4g f3RoaW5ncywgYW5kIHJlZ21hcF9maWVsZCgpIHRvIGhhbmRsZSB5b3VyIGNvbmYgcmVnaXN0ZXIg YmVpbmcgYXQgYSAKPj4+IH9kaWZmZXJlbnQgYWRkcmVzcyBhY3Jvc3MgU29Dcy4KPj4+Cj4+Cj4+ IEl0IHNlZW1zIHRoYXQgdGhlIG92ZXJoZWFkIG9mIHVzaW5nIHJlZ21hcCB3aWxsIGJlIGdyZWF0 ZXIgdGhhbiB1c2luZyAKPj4gcmVhZGwgYW5kIHdyaXRlbCwKPj4gdGhlIHB1cnBvc2Ugb2YgdXNp bmcgcmVhZGwgYW5kIHdyaXRlbCBpcyB0byBtaW5pbWl6ZSBvdmVyaGVhZCBhbmQgCj4+IG1heGlt aXplIHBlcmZvcm1hbmNlLiA6KQo+Cj4gSWYgeW91IHJlYWxseSB0aGluayB0aGF0IHRoaXMgaXMg YSB2YWxpZCByZWFzb24gbm90IHRvIHVzZSByZWdtYXAsIAo+IHRoZW4gcHJvdmUgaXQgd2l0aCBh IGJlbmNobWFyaywgYmVjYXVzZSBJJ20gKnZlcnkqIGRvdWJ0ZnVsIGFib3V0IHlvdXIgCj4gY2xh aW0uCj4KCkkgaGF2ZSB0ZXN0ZWQgeW91ciB3cml0ZWwvcmVhZGwgdmVyc2lvbiBvZiB0aGUgc3Bp IGRyaXZlciBhbmQgdGhlIApjdXJyZW50IHJlZ21hcAp2ZXJzaW9uIG9mIHRoZSBzcGkgZHJpdmVy LCBhbmQgaW5kZWVkIHRoZSBtZWFzdXJlZCBwZXJmb3JtYW5jZSAKZGlmZmVyZW5jZXMgYXJlCnBl cmNlaXZhYmxlLiBJIHdpbGwgZG8gYW5vdGhlciB0ZXN0IGZvciB0aGUgc2ZjIGRyaXZlciB0byBk ZXRlcm1pbmUgaWYgCml0J3MgdGhlCnNhbWUgY2FzZS4gQnkgdGhlIHdheSwgSSdtIHRyeWluZyB0 byB1c2UgaW50ZXJydXB0cyBpbiB0aGUgc3BpIGRyaXZlciAKaW5zdGVhZCBvZgp1c2luZyByZWdt YXBfcmVhZF9wb2xsX3RpbWVvdXQoKSwgd2hpY2ggY2FuIGluZGVlZCBpbXByb3ZlIHNvbWUgcGVy Zm9ybWFuY2UuCgoKVGhhbmtzIGFuZCBiZXN0IHJlZ2FyZHMhCgoKPiBDaGVlcnMsCj4gLVBhdWwK Pgo+Pj4+ICsKPj4+PiArwqDCoMKgIHZhbCA9IFRSQU5fQ09ORl9DTURfRU4gfCBvcC0+Y21kLm9w Y29kZTsKPj4+PiArCj4+Pj4gK8KgwqDCoCBpZiAob3AtPmFkZHIubmJ5dGVzID4gMCkgewo+Pj4+ ICvCoMKgwqDCoMKgwqDCoCB2YWwgfD0gRklFTERfUFJFUChUUkFOX0NPTkZfQUREUl9XSURUSF9N QVNLLCAKPj4+PiBvcC0+YWRkci5uYnl0ZXMpOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqAg d3JpdGVsKG9wLT5hZGRyLnZhbCAmIDB4ZmZmZmZmZmYsIHNmYy0+YmFzZSArIAo+Pj4+IH9/U0ZD X1JFR19ERVZfQUREUigwKSk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbChvcC0+YWRkci52 YWwgPj4gMzIsIHNmYy0+YmFzZSArIAo+Pj4+IH9/U0ZDX1JFR19ERVZfQUREUl9QTFVTKDApKTsK Pj4+PiArwqDCoMKgIH0KPj4+PiArCj4+Pj4gK8KgwqDCoCBpZiAob3AtPmR1bW15Lm5ieXRlcyA+ IDApCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHZhbCB8PSBGSUVMRF9QUkVQKFRSQU5fQ09ORl9ETVlf QklUU19NQVNLLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtPmR1bW15 Lm5ieXRlcyAqIDggLyBvcC0+ZHVtbXkuYnVzd2lkdGgpOwo+Pj4+ICsKPj4+PiArwqDCoMKgIGlm IChvcC0+ZGF0YS5uYnl0ZXMgPiAwKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB2YWwgfD0gVFJBTl9D T05GX0RBVEFfRU47Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgd3JpdGVsKHZhbCwgc2ZjLT5iYXNlICsg U0ZDX1JFR19UUkFOX0NPTkYoMCkpOwo+Pj4+ICvCoMKgwqAgd3JpdGVsKG9wLT5kYXRhLm5ieXRl cywgc2ZjLT5iYXNlICsgU0ZDX1JFR19UUkFOX0xFTik7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgaW5n ZW5pY19zZmNfc2V0X3RyYW5zZmVyX21vZGUoc2ZjLCBvcCk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAg d3JpdGVsKDB4MWYsIHNmYy0+YmFzZSArIFNGQ19SRUdfU0NSKTsKPj4+Cj4+PiBSYW5kb20gMHgx ZiB2YWx1ZSBoZXJlLCBtYXliZSB1c2UgYSBtYWNybz8KPj4KPj4KPj4gU3VyZS4KPj4KPj4KPj4+ Cj4+Pj4gK8KgwqDCoCB3cml0ZWwofihJTlRDX01BU0tfRU5EIHwgSU5UQ19NQVNLX1JSRVEpLCBz ZmMtPmJhc2UgKyAKPj4+PiB/f1NGQ19SRUdfSU5UQyk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgd3Jp dGVsKDAsIHNmYy0+YmFzZSArIFNGQ19SRUdfTUVNX0FERFIpOwo+Pj4+ICsKPj4+PiArwqDCoMKg IHdyaXRlbChUUklHX0ZMVVNILCBzZmMtPmJhc2UgKyBTRkNfUkVHX1RSSUcpOwo+Pj4+ICvCoMKg wqAgd3JpdGVsKFRSSUdfU1RBUlQsIHNmYy0+YmFzZSArIFNGQ19SRUdfVFJJRyk7Cj4+Pj4gKwo+ Pj4+ICvCoMKgwqAgcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzZmMtPmNvbXBs ZXRpb24sCj4+Pj4gKyBtc2Vjc190b19qaWZmaWVzKElOR0VOSUNfU0ZDX1RSQU5TRkVSX1RJTUVP VVQpKTsKPj4+PiArwqDCoMKgIGlmICghcmV0KSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRl bCgweDFmLCBzZmMtPmJhc2UgKyBTRkNfUkVHX0lOVEMpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB3 cml0ZWwoMHgxZiwgc2ZjLT5iYXNlICsgU0ZDX1JFR19TQ1IpOwo+Pj4+ICvCoMKgwqDCoMKgwqDC oCBkZXZfZXJyKHNmYy0+ZGV2LCAibGluZTolZCBUaW1lb3V0IGZvciBBQ0sgZnJvbSBTRkMgCj4+ Pj4gf39kZXZpY2VcbiIsIF9fTElORV9fKTsKPj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1F VElNRURPVVQ7Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgaW5nZW5pY19zZmNf cmVhZF9yeGZpZm8oc2ZjLCBvcC0+ZGF0YS5idWYuaW4sIG9wLT5kYXRhLm5ieXRlcyk7Cj4+Pj4g K8KgwqDCoCByZWFkbF9wb2xsX3RpbWVvdXQoc2ZjLT5iYXNlICsgU0ZDX1JFR19TUiwgdmFsLCB2 YWwgJiBTUl9FTkQsIAo+Pj4+IH9/MTAsIDApOwo+Pj4KPj4+IEluZmluaXRlIHRpbWVvdXQ/IElz IHRoYXQgdmVyeSB3aXNlPwo+Pgo+Pgo+PiBXaWxsIGZpeCBpdCBpbiB0aGUgbmV4dCB2ZXJzaW9u Lgo+Pgo+Pgo+Pj4KPj4+PiArCj4+Pj4gK8KgwqDCoCB3cml0ZWwoSU5UQ19NQVNLX0VORCB8IElO VENfTUFTS19SUkVRLCBzZmMtPmJhc2UgKyBTRkNfUkVHX1NDUik7Cj4+Pj4gK8KgwqDCoCB3cml0 ZWwoVFJJR19TVE9QLCBzZmMtPmJhc2UgKyBTRkNfUkVHX1RSSUcpOwo+Pj4+ICsKPj4+PiArwqDC oMKgIHJldHVybiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGluZ2VuaWNfc2Zj X2V4ZWNfb3BfZG1hKHN0cnVjdCBpbmdlbmljX3NmYyAqc2ZjLCBjb25zdCAKPj4+PiB/f3N0cnVj dCBzcGlfbWVtX29wICpvcCkKPj4+PiArewo+Pj4+ICvCoMKgwqAgZG1hX2FkZHJfdCBhZGRyOwo+ Pj4+ICvCoMKgwqAgaW50IHJldCwgdmFsOwo+Pj4+ICsKPj4+PiArwqDCoMKgIHZhbCA9IHJlYWRs KHNmYy0+YmFzZSArIFNGQ19SRUdfR0xCKTsKPj4+PiArwqDCoMKgIHUzMnBfcmVwbGFjZV9iaXRz KCZ2YWwsIG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfSU4gPwo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEdMQl9UUkFOX0RJUl9SRUFEIDogR0xCX1RSQU5fRElSX1dSSVRFLCAKPj4+ PiBHTEJfVFJBTl9ESVJfTUFTSyk7Cj4+Pj4gK8KgwqDCoCB1MzJwX3JlcGxhY2VfYml0cygmdmFs LCBHTEJfT1BfTU9ERV9ETUEsIEdMQl9PUF9NT0RFX01BU0spOwo+Pj4+ICvCoMKgwqAgd3JpdGVs KHZhbCwgc2ZjLT5iYXNlICsgU0ZDX1JFR19HTEIpOwo+Pj4+ICsKPj4+PiArwqDCoMKgIHZhbCA9 IFRSQU5fQ09ORl9DTURfRU4gfCBvcC0+Y21kLm9wY29kZTsKPj4+PiArCj4+Pj4gK8KgwqDCoCBp ZiAob3AtPmFkZHIubmJ5dGVzID4gMCkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB2YWwgfD0gRklF TERfUFJFUChUUkFOX0NPTkZfQUREUl9XSURUSF9NQVNLLCAKPj4+PiBvcC0+YWRkci5uYnl0ZXMp Owo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB3cml0ZWwob3AtPmFkZHIudmFsICYgMHhmZmZmZmZmZiwg c2ZjLT5iYXNlICsgCj4+Pj4gf39TRkNfUkVHX0RFVl9BRERSKDApKTsKPj4+PiArwqDCoMKgwqDC oMKgwqAgd3JpdGVsKG9wLT5hZGRyLnZhbCA+PiAzMiwgc2ZjLT5iYXNlICsgCj4+Pj4gf39TRkNf UkVHX0RFVl9BRERSX1BMVVMoMCkpOwo+Pj4+ICvCoMKgwqAgfQo+Pj4+ICsKPj4+PiArwqDCoMKg IGlmIChvcC0+ZHVtbXkubmJ5dGVzID4gMCkKPj4+PiArwqDCoMKgwqDCoMKgwqAgdmFsIHw9IEZJ RUxEX1BSRVAoVFJBTl9DT05GX0RNWV9CSVRTX01BU0ssCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBvcC0+ZHVtbXkubmJ5dGVzICogOCAvIG9wLT5kdW1teS5idXN3aWR0aCk7 Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgaWYgKG9wLT5kYXRhLm5ieXRlcyA+IDApCj4+Pj4gK8KgwqDC oMKgwqDCoMKgIHZhbCB8PSBUUkFOX0NPTkZfREFUQV9FTjsKPj4+Cj4+PiBUaGVyZSdzIGEgbG90 IG9mIGNvZGUgZHVwbGljYXRpb24gaGVyZSB3aXRoIAo+Pj4gaW5nZW5pY19zZmNfZXhlY19vcF9w aW8oKS4gf0EgbG90IGNhbiBiZSBmYWN0b3JpemVkLgo+Pgo+Pgo+PiBTdXJlLCBJIHdpbGwgdHJ5 IHRvIGRvIGl0Lgo+Pgo+Pgo+Pj4KPj4+PiArCj4+Pj4gK8KgwqDCoCB3cml0ZWwodmFsLCBzZmMt PmJhc2UgKyBTRkNfUkVHX1RSQU5fQ09ORigwKSk7Cj4+Pj4gK8KgwqDCoCB3cml0ZWwob3AtPmRh dGEubmJ5dGVzLCBzZmMtPmJhc2UgKyBTRkNfUkVHX1RSQU5fTEVOKTsKPj4+PiArCj4+Pj4gK8Kg wqDCoCBpbmdlbmljX3NmY19zZXRfdHJhbnNmZXJfbW9kZShzZmMsIG9wKTsKPj4+PiArCj4+Pj4g K8KgwqDCoCB3cml0ZWwoMHgxZiwgc2ZjLT5iYXNlICsgU0ZDX1JFR19TQ1IpOwo+Pj4+ICvCoMKg wqAgd3JpdGVsKH5JTlRDX01BU0tfRU5ELCBzZmMtPmJhc2UgKyBTRkNfUkVHX0lOVEMpOwo+Pj4+ ICsKPj4+PiArwqDCoMKgIHN3aXRjaCAob3AtPmRhdGEuZGlyKSB7Cj4+Pj4gK8KgwqDCoCBjYXNl IFNQSV9NRU1fREFUQV9JTjoKPj4+PiArwqDCoMKgwqDCoMKgwqAgYWRkciA9IGRtYV9tYXBfc2lu Z2xlKHNmYy0+ZGV2LCBvcC0+ZGF0YS5idWYuaW4sIAo+Pj4+IH9/b3AtPmRhdGEubmJ5dGVzLCBE TUFfRlJPTV9ERVZJQ0UpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZG1hX21hcHBpbmdfZXJy b3Ioc2ZjLT5kZXYsIGFkZHIpKSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2Vy cihzZmMtPmRldiwgIlJYIERNQeOAgG1lbW9yeSBub3QgbWFwcGVkXG4iKTsKPj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+ Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqAgd3JpdGVsKGFkZHIsIHNmYy0+YmFzZSArIFNGQ19S RUdfTUVNX0FERFIpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+PiArCj4+Pj4gK8Kg wqDCoCBjYXNlIFNQSV9NRU1fREFUQV9PVVQ6Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGFkZHIgPSBk bWFfbWFwX3NpbmdsZShzZmMtPmRldiwgKHZvaWQgKilvcC0+ZGF0YS5idWYub3V0LAo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3AtPmRhdGEubmJ5dGVzLCBETUFfVE9fREVW SUNFKTsKPj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGRtYV9tYXBwaW5nX2Vycm9yKHNmYy0+ZGV2 LCBhZGRyKSkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoc2ZjLT5kZXYs ICJUWCBETUHjgIBtZW1vcnkgbm90IG1hcHBlZFxuIik7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+PiArCj4+Pj4g K8KgwqDCoMKgwqDCoMKgIHdyaXRlbChhZGRyLCBzZmMtPmJhc2UgKyBTRkNfUkVHX01FTV9BRERS KTsKPj4+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgZGVmYXVs dDoKPj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4gK8KgwqDCoCB9Cj4+ Pj4gKwo+Pj4+ICvCoMKgwqAgd3JpdGVsKFRSSUdfU1RBUlQsIHNmYy0+YmFzZSArIFNGQ19SRUdf VFJJRyk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1l b3V0KCZzZmMtPmNvbXBsZXRpb24sCj4+Pj4gKyBtc2Vjc190b19qaWZmaWVzKElOR0VOSUNfU0ZD X1RSQU5TRkVSX1RJTUVPVVQpKTsKPj4+PiArwqDCoMKgIGlmICghcmV0KSB7Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgIHdyaXRlbCgweDFmLCBzZmMtPmJhc2UgKyBTRkNfUkVHX0lOVEMpOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoCB3cml0ZWwoMHgxZiwgc2ZjLT5iYXNlICsgU0ZDX1JFR19TQ1IpOwo+Pj4+ ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKHNmYy0+ZGV2LCAibGluZTolZCBUaW1lb3V0IGZvciBB Q0sgZnJvbSBTRkMgCj4+Pj4gf39kZXZpY2VcbiIsIF9fTElORV9fKTsKPj4+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FVElNRURPVVQ7Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gKwo+Pj4+ICvCoMKg wqAgZG1hX3VubWFwX3NpbmdsZShzZmMtPmRldiwgYWRkciwgb3AtPmRhdGEubmJ5dGVzLAo+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfSU4g PyBETUFfRlJPTV9ERVZJQ0UgOiAKPj4+PiB/f0RNQV9UT19ERVZJQ0UpOwo+Pj4KPj4+IFVzZSBh IHNtYWxsIGlubGluZSBmdW5jdGlvbiBmb3IgdGhhdCB0b28uIE15IHBlcnNvbmFsIHJ1bGUgaXMg dGhhdCAKPj4+ID86IH9pcyBmaW5lIGlmIHRoZSBsaW5lIGZpdHMgaW4gODAgY2hhcmFjdGVycywg YnV0IGlmIHlvdSBoYXZlIHRvIAo+Pj4gYnJlYWssIH90aGVuIHlvdSByZWFsbHkgbmVlZCB0byBt b3ZlIGl0IHNvbWV3aGVyZSBlbHNlLgo+Pj4KPj4KPj4gU3VyZS4KPj4KPj4KPj4+PiArCj4+Pj4g K8KgwqDCoCB3cml0ZWwoSU5UQ19NQVNLX0VORCwgc2ZjLT5iYXNlICsgU0ZDX1JFR19TQ1IpOwo+ Pj4+ICvCoMKgwqAgd3JpdGVsKFRSSUdfU1RPUCwgc2ZjLT5iYXNlICsgU0ZDX1JFR19UUklHKTsK Pj4+PiArCj4+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGlj IGludCBpbmdlbmljX3NmY19leGVjX29wKHN0cnVjdCBzcGlfbWVtICptZW0sIGNvbnN0IHN0cnVj dCAKPj4+PiB/f3NwaV9tZW1fb3AgKm9wKQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qgc3Bp X2RldmljZSAqc3BpID0gbWVtLT5zcGk7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgaW5nZW5pY19zZmMg KnNmYyA9IAo+Pj4+IHNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKPj4+ PiArwqDCoMKgIHVpbnRwdHJfdCBhZGRyID0gKHVpbnRwdHJfdClvcC0+ZGF0YS5idWYuaW47Cj4+ Pj4gKwo+Pj4+ICvCoMKgwqAgaW5pdF9jb21wbGV0aW9uKCZzZmMtPmNvbXBsZXRpb24pOwo+Pj4+ ICsKPj4+PiArwqDCoMKgIHN3aXRjaCAob3AtPmRhdGEuZGlyKSB7Cj4+Pj4gK8KgwqDCoCBjYXNl IFNQSV9NRU1fREFUQV9JTjoKPj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHNmYy0+c29jX2luZm8t PnZlcnNpb24gPj0gSURfWDE2MDAgfHwgSVNfQUxJR05FRChhZGRyLCAKPj4+PiA0KSkKPj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKg IGZhbGx0aHJvdWdoOwo+Pj4+ICsKPj4+PiArwqDCoMKgIGNhc2UgU1BJX01FTV9OT19EQVRBOgo+ Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gaW5nZW5pY19zZmNfZXhlY19vcF9waW8oc2ZjLCBv cCk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgZGVmYXVsdDoKPj4+PiArwqDCoMKgwqDCoMKgwqAgYnJl YWs7Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgcmV0dXJuIGluZ2VuaWNfc2Zj X2V4ZWNfb3BfZG1hKHNmYywgb3ApOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IGlu Z2VuaWNfc2ZjX3BvbGxfc3RhdHVzKHN0cnVjdCBzcGlfbWVtICptZW0sIGNvbnN0IAo+Pj4+IHN0 cnVjdCB/f3NwaV9tZW1fb3AgKm9wLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUxNiBt YXNrLCB1MTYgbWF0Y2gsIHVuc2lnbmVkIGxvbmcgaW5pdGlhbF9kZWxheV91cywKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIHBvbGxpbmdfZGVsYXlfdXMsIHVuc2ln bmVkIGxvbmcgdGltZW91dF9tcykKPj4+PiArewo+Pj4+ICvCoMKgwqAgc3RydWN0IHNwaV9kZXZp Y2UgKnNwaSA9IG1lbS0+c3BpOwo+Pj4+ICvCoMKgwqAgc3RydWN0IGluZ2VuaWNfc2ZjICpzZmMg PSAKPj4+PiBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Cj4+Pj4gK8Kg wqDCoCBpbnQgcmV0LCB2YWw7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgaW5pdF9jb21wbGV0aW9uKCZz ZmMtPmNvbXBsZXRpb24pOwo+Pj4+ICsKPj4+PiArwqDCoMKgIHZhbCA9IHJlYWRsKHNmYy0+YmFz ZSArIFNGQ19SRUdfR0xCKTsKPj4+PiArwqDCoMKgIHUzMnBfcmVwbGFjZV9iaXRzKCZ2YWwsIEdM Ql9UUkFOX0RJUl9SRUFELCBHTEJfVFJBTl9ESVJfTUFTSyk7Cj4+Pj4gK8KgwqDCoCB1MzJwX3Jl cGxhY2VfYml0cygmdmFsLCBHTEJfT1BfTU9ERV9TTEFWRSwgR0xCX09QX01PREVfTUFTSyk7Cj4+ Pj4gK8KgwqDCoCB3cml0ZWwodmFsLCBzZmMtPmJhc2UgKyBTRkNfUkVHX0dMQik7Cj4+Pj4gKwo+ Pj4+ICvCoMKgwqAgd3JpdGVsKG1hdGNoLCBzZmMtPmJhc2UgKyBTRkNfUkVHX0RFVl9TVEFfRVhQ KTsKPj4+PiArwqDCoMKgIHdyaXRlbChtYXNrLCBzZmMtPmJhc2UgKyBTRkNfUkVHX0RFVl9TVEFf TVNLKTsKPj4+PiArCj4+Pj4gK8KgwqDCoCB2YWwgPSBUUkFOX0NPTkZfUE9MTF9FTiB8IFRSQU5f Q09ORl9DTURfRU4gfCBvcC0+Y21kLm9wY29kZTsKPj4+PiArCj4+Pj4gK8KgwqDCoCBpZiAob3At PmFkZHIubmJ5dGVzID4gMCkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB2YWwgfD0gRklFTERfUFJF UChUUkFOX0NPTkZfQUREUl9XSURUSF9NQVNLLCAKPj4+PiBvcC0+YWRkci5uYnl0ZXMpOwo+Pj4+ ICsKPj4+PiArwqDCoMKgwqDCoMKgwqAgd3JpdGVsKG9wLT5hZGRyLnZhbCAmIDB4ZmZmZmZmZmYs IHNmYy0+YmFzZSArIAo+Pj4+IH9/U0ZDX1JFR19ERVZfQUREUigwKSk7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgIHdyaXRlbChvcC0+YWRkci52YWwgPj4gMzIsIHNmYy0+YmFzZSArIAo+Pj4+IH9/U0ZD X1JFR19ERVZfQUREUl9QTFVTKDApKTsKPj4+PiArwqDCoMKgIH0KPj4+PiArCj4+Pj4gK8KgwqDC oCBpZiAob3AtPmR1bW15Lm5ieXRlcyA+IDApCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHZhbCB8PSBG SUVMRF9QUkVQKFRSQU5fQ09ORl9ETVlfQklUU19NQVNLLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgb3AtPmR1bW15Lm5ieXRlcyAqIDggLyBvcC0+ZHVtbXkuYnVzd2lkdGgp Owo+Pj4+ICsKPj4+PiArwqDCoMKgIGlmIChvcC0+ZGF0YS5uYnl0ZXMgPiAwKQo+Pj4+ICvCoMKg wqDCoMKgwqDCoCB2YWwgfD0gVFJBTl9DT05GX0RBVEFfRU47Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAg d3JpdGVsKHZhbCwgc2ZjLT5iYXNlICsgU0ZDX1JFR19UUkFOX0NPTkYoMCkpOwo+Pj4+ICvCoMKg wqAgd3JpdGVsKG9wLT5kYXRhLm5ieXRlcywgc2ZjLT5iYXNlICsgU0ZDX1JFR19UUkFOX0xFTik7 Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgaW5nZW5pY19zZmNfc2V0X3RyYW5zZmVyX21vZGUoc2ZjLCBv cCk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgd3JpdGVsKDB4MWYsIHNmYy0+YmFzZSArIFNGQ19SRUdf U0NSKTsKPj4+PiArwqDCoMKgIHdyaXRlbCh+SU5UQ19NQVNLX0VORCwgc2ZjLT5iYXNlICsgU0ZD X1JFR19JTlRDKTsKPj4+PiArCj4+Pj4gK8KgwqDCoCB3cml0ZWwoMCwgc2ZjLT5iYXNlICsgU0ZD X1JFR19NRU1fQUREUik7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgd3JpdGVsKFRSSUdfU1RBUlQsIHNm Yy0+YmFzZSArIFNGQ19SRUdfVFJJRyk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgcmV0ID0gd2FpdF9m b3JfY29tcGxldGlvbl90aW1lb3V0KCZzZmMtPmNvbXBsZXRpb24sCj4+Pj4gKyBtc2Vjc190b19q aWZmaWVzKElOR0VOSUNfU0ZDX1RSQU5TRkVSX1RJTUVPVVQpKTsKPj4+PiArwqDCoMKgIGlmICgh cmV0KSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHdyaXRlbCgweDFmLCBzZmMtPmJhc2UgKyBTRkNf UkVHX0lOVEMpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB3cml0ZWwoMHgxZiwgc2ZjLT5iYXNlICsg U0ZDX1JFR19TQ1IpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKHNmYy0+ZGV2LCAibGlu ZTolZCBUaW1lb3V0IGZvciBBQ0sgZnJvbSBTRkMgCj4+Pj4gf39kZXZpY2VcbiIsIF9fTElORV9f KTsKPj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FVElNRURPVVQ7Cj4+Pj4gK8KgwqDCoCB9 Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgd3JpdGVsKFNDUl9DTFJfRU5ELCBzZmMtPmJhc2UgKyBTRkNf UkVHX1NDUik7Cj4+Pj4gK8KgwqDCoCB3cml0ZWwoVFJJR19TVE9QLCBzZmMtPmJhc2UgKyBTRkNf UkVHX1RSSUcpOwo+Pj4+ICsKPj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+ Pj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9jb250cm9sbGVyX21lbV9vcHMgaW5nZW5pY19z ZmNfbWVtX29wcyA9IHsKPj4+PiArwqDCoMKgIC5hZGp1c3Rfb3Bfc2l6ZSA9IGluZ2VuaWNfc2Zj X2FkanVzdF9vcF9zaXplLAo+Pj4+ICvCoMKgwqAgLnN1cHBvcnRzX29wID0gaW5nZW5pY19zZmNf c3VwcG9ydHNfb3AsCj4+Pj4gK8KgwqDCoCAuZXhlY19vcCA9IGluZ2VuaWNfc2ZjX2V4ZWNfb3As Cj4+Pj4gK8KgwqDCoCAucG9sbF9zdGF0dXMgPSBpbmdlbmljX3NmY19wb2xsX3N0YXR1cywKPj4+ PiArfTsKPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgaW5nZW5pY19zZmNfc2V0dXAoc3RydWN0IHNw aV9kZXZpY2UgKnNwaSkKPj4+PiArewo+Pj4+ICvCoMKgwqAgc3RydWN0IGluZ2VuaWNfc2ZjICpz ZmMgPSAKPj4+PiBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Cj4+Pj4g K8KgwqDCoCB1bnNpZ25lZCBsb25nIHJhdGU7Cj4+Pj4gK8KgwqDCoCBpbnQgcmV0LCB2YWw7Cj4+ Pj4gKwo+Pj4+ICvCoMKgwqAgaWYgKCFzcGktPm1heF9zcGVlZF9oeikKPj4+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+Pgo+Pj4gTWF5YmUgc2V0IGEgc2FuZSBkZWZhdWx0Pwo+ Pgo+Pgo+PiBTdXJlLgo+Pgo+Pgo+Pj4KPj4+PiArCj4+Pj4gK8KgwqDCoCByZXQgPSBjbGtfc2V0 X3JhdGUoc2ZjLT5jbGssIHNwaS0+bWF4X3NwZWVkX2h6ICogMik7Cj4+Pj4gK8KgwqDCoCBpZiAo cmV0KQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+PiArCj4+Pj4gK8Kg wqDCoCB3cml0ZWwoVFJJR19TVE9QLCBzZmMtPmJhc2UgKyBTRkNfUkVHX1RSSUcpOwo+Pj4+ICvC oMKgwqAgd3JpdGVsKDAsIHNmYy0+YmFzZSArIFNGQ19SRUdfREVWX0NPTkYpOwo+Pj4+ICvCoMKg wqAgd3JpdGVsKDAsIHNmYy0+YmFzZSArIFNGQ19SRUdfQ0dFKTsKPj4+PiArCj4+Pj4gK8KgwqDC oCB2YWwgPSByZWFkbChzZmMtPmJhc2UgKyBTRkNfUkVHX0dMQik7Cj4+Pj4gK8KgwqDCoCB1MzJw X3JlcGxhY2VfYml0cygmdmFsLCA2NCAtIDEsIEdMQl9USFJFU0hPTERfTUFTSyk7Cj4+Pj4gK8Kg wqDCoCB3cml0ZWwodmFsLCBzZmMtPmJhc2UgKyBTRkNfUkVHX0dMQik7Cj4+Pj4gKwo+Pj4+ICvC oMKgwqAgdmFsID0gcmVhZGwoc2ZjLT5iYXNlICsgU0ZDX1JFR19ERVZfQ09ORik7Cj4+Pj4gKwo+ Pj4+ICvCoMKgwqAgLyogY3BoYSBiaXQ6MCAsIGNwb2wgYml0OjAgKi8KPj4+PiArwqDCoMKgIHZh bCAmPSB+KERFVl9DT05GX0NQSEEgfCBERVZfQ09ORl9DUE9MKTsKPj4+PiArwqDCoMKgIHZhbCB8 PSBzcGktPm1vZGUgJiBTUElfQ1BIQSA/IERFVl9DT05GX0NQSEEgOiAwOwo+Pj4+ICvCoMKgwqAg dmFsIHw9IHNwaS0+bW9kZSAmIFNQSV9DUE9MID8gREVWX0NPTkZfQ1BPTCA6IDA7Cj4+Pj4gKwo+ Pj4+ICvCoMKgwqAgLyogY2VfZGwgYml0OjEsIGhvbGQgYml0OjEsIHdwIGJpdDoxICovCj4+Pj4g K8KgwqDCoCB2YWwgfD0gKERFVl9DT05GX0NFX0RMIHwgREVWX0NPTkZfSE9MRF9ETCB8IERFVl9D T05GX1dQX0RMKTsKPj4+PiArCj4+Pj4gK8KgwqDCoCB3cml0ZWwodmFsLCBzZmMtPmJhc2UgKyBT RkNfUkVHX0RFVl9DT05GKTsKPj4+PiArCj4+Pj4gK8KgwqDCoCB2YWwgPSByZWFkbChzZmMtPmJh c2UgKyBTRkNfUkVHX0dMQik7Cj4+Pj4gK8KgwqDCoCB1MzJwX3JlcGxhY2VfYml0cygmdmFsLCBH TEJfT1BfTU9ERV9TTEFWRSwgR0xCX09QX01PREVfTUFTSyk7Cj4+Pj4gK8KgwqDCoCB3cml0ZWwo dmFsLCBzZmMtPmJhc2UgKyBTRkNfUkVHX0dMQik7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgcmF0ZSA9 IGNsa19nZXRfcmF0ZShzZmMtPmNsayk7Cj4+Pgo+Pj4gSSdkIHN1Z2dlc3QgdXNpbmcgY2xrX3Jv dW5kX3JhdGUoKSBiZWZvcmUgY2xrX3NldF9yYXRlKCkgYmVjYXVzZSAKPj4+IHRoZW4gf3lvdSBr bm93IHdoYXQgZnJlcXVlbmN5IGl0J3MgZ29pbmcgdG8gYmUsIGFuZCB5b3UgZG9uJ3QgaGF2ZSAK Pj4+IHRvIGNhbGwgf2Nsa19nZXRfcmF0ZSgpIGFmdGVyd2FyZHMuCj4+Pgo+Pgo+PiBTdXJlLCB3 aWxsIHRyeS4KPj4KPj4KPj4gVGhhbmtzIGFuZCBiZXN0IHJlZ2FyZHMhCj4+Cj4+Cj4+PiBDaGVl cnMsCj4+PiAtUGF1bAo+Pj4KPj4+PiArwqDCoMKgIHZhbCA9IHJlYWRsKHNmYy0+YmFzZSArIFNG Q19SRUdfREVWX0NPTkYpOwo+Pj4+ICvCoMKgwqAgaWYgKHNmYy0+c29jX2luZm8tPnZlcnNpb24g Pj0gSURfWDE2MDAgJiYgcmF0ZSA+PSAyMDAwMDAwMDApCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHUz MnBfcmVwbGFjZV9iaXRzKCZ2YWwsIERFVl9DT05GX1NNUF9ERUxBWV8xODBERUcsIAo+Pj4+IH9/ REVWX0NPTkZfU01QX0RFTEFZX01BU0spOwo+Pj4+ICvCoMKgwqAgZWxzZSBpZiAoc2ZjLT5zb2Nf aW5mby0+dmVyc2lvbiA9PSBJRF9YMTAwMCAmJiByYXRlID49IDEwMDAwMDAwMCkKPj4+PiArwqDC oMKgwqDCoMKgwqAgdTMycF9yZXBsYWNlX2JpdHMoJnZhbCwgREVWX0NPTkZfU01QX0RFTEFZX0hB TEZfQ1lDTEUsIAo+Pj4+IH9/REVWX0NPTkZfU01QX0RFTEFZX01BU0spOwo+Pj4+ICvCoMKgwqAg d3JpdGVsKHZhbCwgc2ZjLT5iYXNlICsgU0ZDX1JFR19ERVZfQ09ORik7Cj4+Pj4gKwo+Pj4+ICvC oMKgwqAgcmV0dXJuIDA7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgaW5nZW5pY19z ZmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+PiArewo+Pj4+ICvCoMKg wqAgc3RydWN0IGluZ2VuaWNfc2ZjICpzZmM7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qgc3BpX2NvbnRy b2xsZXIgKmN0bHI7Cj4+Pj4gK8KgwqDCoCBpbnQgcmV0Owo+Pj4+ICsKPj4+PiArwqDCoMKgIGN0 bHIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZigqc2ZjKSk7Cj4+Pj4gK8Kg wqDCoCBpZiAoIWN0bHIpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pj4+ ICsKPj4+PiArwqDCoMKgIHNmYyA9IHNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKGN0bHIpOwo+ Pj4+ICsKPj4+PiArwqDCoMKgIHNmYy0+c29jX2luZm8gPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2Rh dGEoJnBkZXYtPmRldik7Cj4+Pj4gK8KgwqDCoCBpZiAoIXNmYy0+c29jX2luZm8pIHsKPj4+PiAr wqDCoMKgwqDCoMKgwqAgZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gb2YgbWF0Y2ggZGF0YSBwcm92 aWRlZFxuIik7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IC1FTk9ERVY7Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgIGdvdG8gZXJyX3B1dF9tYXN0ZXI7Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gKwo+Pj4+ ICvCoMKgwqAgc2ZjLT5iYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYs IDApOwo+Pj4+ICvCoMKgwqAgaWYgKElTX0VSUihzZmMtPmJhc2UpKSB7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgIHJldCA9IFBUUl9FUlIoc2ZjLT5iYXNlKTsKPj4+PiArwqDCoMKgwqDCoMKgwqAgZ290 byBlcnJfcHV0X21hc3RlcjsKPj4+PiArwqDCoMKgIH0KPj4+PiArCj4+Pj4gK8KgwqDCoCBzZmMt PmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAic2ZjIik7Cj4+Pj4gK8KgwqDCoCBpZiAo SVNfRVJSKHNmYy0+Y2xrKSkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBJU19FUlIoc2Zj LT5jbGspOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9wdXRfbWFzdGVyOwo+Pj4+ICvC oMKgwqAgfQo+Pj4+ICsKPj4+PiArwqDCoMKgIHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShzZmMt PmNsayk7Cj4+Pj4gK8KgwqDCoCBpZiAocmV0KQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVy cl9wdXRfbWFzdGVyOwo+Pj4+ICsKPj4+PiArwqDCoMKgIHNmYy0+aXJxID0gcGxhdGZvcm1fZ2V0 X2lycShwZGV2LCAwKTsKPj4+PiArwqDCoMKgIGlmIChzZmMtPmlycSA8IDApIHsKPj4+PiArwqDC oMKgwqDCoMKgwqAgcmV0ID0gc2ZjLT5pcnE7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJy X3B1dF9tYXN0ZXI7Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgc2ZjLT5kZXYg PSAmcGRldi0+ZGV2Owo+Pj4+ICsKPj4+PiArwqDCoMKgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIHNmYyk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRl di0+ZGV2LCBzZmMtPmlycSwgCj4+Pj4gf39pbmdlbmljX3NmY19pcnFfaGFuZGxlciwgMCwKPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgc2ZjKTsKPj4+ PiArwqDCoMKgIGlmIChyZXQpIHsKPj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycigmcGRldi0+ ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxJWQsIHJldCA9ICVkXG4iLCAKPj4+PiB/f3NmYy0+ aXJxLCByZXQpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9wdXRfbWFzdGVyOwo+Pj4+ ICvCoMKgwqAgfQo+Pj4+ICsKPj4+PiArwqDCoMKgIGN0bHItPmJ1c19udW0gPSAtMTsKPj4+PiAr wqDCoMKgIGN0bHItPm51bV9jaGlwc2VsZWN0ID0gMTsKPj4+PiArwqDCoMKgIGN0bHItPm1lbV9v cHMgPSAmaW5nZW5pY19zZmNfbWVtX29wczsKPj4+PiArwqDCoMKgIGN0bHItPmRldi5vZl9ub2Rl ID0gcGRldi0+ZGV2Lm9mX25vZGU7Cj4+Pj4gK8KgwqDCoCBjdGxyLT5zZXR1cCA9IGluZ2VuaWNf c2ZjX3NldHVwOwo+Pj4+ICvCoMKgwqAgY3Rsci0+bW9kZV9iaXRzID0gU1BJX0NQSEEgfCBTUElf Q1BPTCB8Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU1BJX1JYX0RVQUwgfCBTUElfUlhf UVVBRCB8IFNQSV9UWF9EVUFMIHwgU1BJX1RYX1FVQUQ7Cj4+Pj4gK8KgwqDCoCBpZiAoc2ZjLT5z b2NfaW5mby0+dmVyc2lvbiA+PSBJRF9YMjAwMCkKPj4+PiArwqDCoMKgwqDCoMKgwqAgY3Rsci0+ bW9kZV9iaXRzIHw9IFNQSV9SWF9PQ1RBTCB8IFNQSV9UWF9PQ1RBTDsKPj4+PiArCj4+Pj4gK8Kg wqDCoCByZXQgPSBkZXZtX3NwaV9yZWdpc3Rlcl9jb250cm9sbGVyKCZwZGV2LT5kZXYsIGN0bHIp Owo+Pj4+ICvCoMKgwqAgaWYgKHJldCkKPj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfcHV0 X21hc3RlcjsKPj4+PiArCj4+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+PiArCj4+Pj4gK2Vycl9w dXRfbWFzdGVyOgo+Pj4+ICvCoMKgwqAgc3BpX21hc3Rlcl9wdXQoY3Rscik7Cj4+Pj4gKwo+Pj4+ ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGNvbnN0IHN0 cnVjdCBpbmdlbmljX3NvY19pbmZvIHgxMDAwX3NvY19pbmZvID0gewo+Pj4+ICvCoMKgwqAgLnZl cnNpb24gPSBJRF9YMTAwMCwKPj4+PiArCj4+Pj4gK8KgwqDCoCAubWF4X2J1c193aWR0aCA9IDQs Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgLnRyYW5fbW9kZV9tYXNrID0gVFJBTl9DT05GX1RSQU5fTU9E RV9NQVNLLAo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpbmdlbmlj X3NvY19pbmZvIHgxNjAwX3NvY19pbmZvID0gewo+Pj4+ICvCoMKgwqAgLnZlcnNpb24gPSBJRF9Y MTYwMCwKPj4+PiArCj4+Pj4gK8KgwqDCoCAubWF4X2J1c193aWR0aCA9IDQsCj4+Pj4gKwo+Pj4+ ICvCoMKgwqAgLnRyYW5fbW9kZV9tYXNrID0gVFJBTl9DT05GX1RSQU5fTU9ERV9NQVNLLAo+Pj4+ ICt9Owo+Pj4+ICsKPj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpbmdlbmljX3NvY19pbmZvIHgy MDAwX3NvY19pbmZvID0gewo+Pj4+ICvCoMKgwqAgLnZlcnNpb24gPSBJRF9YMjAwMCwKPj4+PiAr Cj4+Pj4gK8KgwqDCoCAubWF4X2J1c193aWR0aCA9IDgsCj4+Pj4gKwo+Pj4+ICvCoMKgwqAgLnRy YW5fbW9kZV9tYXNrID0gVFJBTl9DRkcxX1RSQU5fTU9ERV9NQVNLLAo+Pj4+ICt9Owo+Pj4+ICsK Pj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW5nZW5pY19zZmNfb2ZfbWF0 Y2hlc1tdID0gewo+Pj4+ICvCoMKgwqAgeyAuY29tcGF0aWJsZSA9ICJpbmdlbmljLHgxMDAwLXNm YyIsIC5kYXRhID0gJngxMDAwX3NvY19pbmZvIH0sCj4+Pj4gK8KgwqDCoCB7IC5jb21wYXRpYmxl ID0gImluZ2VuaWMseDE2MDAtc2ZjIiwgLmRhdGEgPSAmeDE2MDBfc29jX2luZm8gfSwKPj4+PiAr wqDCoMKgIHsgLmNvbXBhdGlibGUgPSAiaW5nZW5pYyx4MjAwMC1zZmMiLCAuZGF0YSA9ICZ4MjAw MF9zb2NfaW5mbyB9LAo+Pj4+ICvCoMKgwqAgeyAvKiBzZW50aW5lbCAqLyB9Cj4+Pj4gK307Cj4+ Pj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGluZ2VuaWNfc2ZjX29mX21hdGNoZXMpOwo+Pj4+ ICsKPj4+PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW5nZW5pY19zZmNfZHJpdmVy ID0gewo+Pj4+ICvCoMKgwqAgLmRyaXZlciA9IHsKPj4+PiArwqDCoMKgwqDCoMKgwqAgLm5hbWUg PSAiaW5nZW5pYy1zZmMiLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoCAub2ZfbWF0Y2hfdGFibGUgPSBp bmdlbmljX3NmY19vZl9tYXRjaGVzLAo+Pj4+ICvCoMKgwqAgfSwKPj4+PiArwqDCoMKgIC5wcm9i ZSA9IGluZ2VuaWNfc2ZjX3Byb2JlLAo+Pj4+ICt9Owo+Pj4+ICttb2R1bGVfcGxhdGZvcm1fZHJp dmVyKGluZ2VuaWNfc2ZjX2RyaXZlcik7Cj4+Pj4gKwo+Pj4+ICtNT0RVTEVfTElDRU5TRSgiR1BM Iik7Cj4+Pj4gK01PRFVMRV9BVVRIT1IoIuWRqOeQsOadsCAoWmhvdSBZYW5qaWUpIDx6aG91eWFu amllQHdhbnllZXRlY2guY29tPiIpOwo+Pj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkluZ2VuaWMg U29DcyBTUEkgRmxhc2ggQ29udHJvbGxlciBEcml2ZXIiKTsKPj4+PiAtLSAKPj4+PiAyLjcuNAo+ Pj4+Cj4+Pgo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KTGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo=