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 X-Spam-Level: X-Spam-Status: No, score=-14.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F0811C43461 for ; Tue, 15 Sep 2020 08:09:09 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 77A4520771 for ; Tue, 15 Sep 2020 08:09:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="2QWkmVH3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 77A4520771 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=kGG7enqNszMESfItFxzJIW7XwjH0BHJHajBZtQjJZj4=; b=2QWkmVH3Ocb7LaKQaScd4dvVN +re+m0xwM+mEgZyiY8HL071sF2NIfI0a9XP9Yt6H4uF3AEodLKuj86qW7BxbdLPPkyadfw1jyLEiH 6j0+thiSdJTj82cVPan5yW9/Lu1PSY7BPP41C1HVYRFv0Jy9JopdjuX17StZcOPJtOa0c4ZAVPDL/ fz8osYeAwBQHTnlGJyUFJpwuOlMV4QSjnuirQmBSWxykBkzVqJZXUMTnGxUH9oYB/SlfDYQqT8qHN Mg6awhqJEpchNgwNBkt6EOu+6O5eHSWZLsvAprKXXO8imt+Gj2/67n+TED9s+yvCtYszBeTrigwHt kYDpJ9gdA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kI60C-0004u2-D2; Tue, 15 Sep 2020 08:07:48 +0000 Received: from relay5-d.mail.gandi.net ([217.70.183.197]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kI600-0004s7-MP; Tue, 15 Sep 2020 08:07:39 +0000 X-Originating-IP: 91.224.148.103 Received: from xps13 (unknown [91.224.148.103]) (Authenticated sender: miquel.raynal@bootlin.com) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 538551C000E; Tue, 15 Sep 2020 08:07:29 +0000 (UTC) Date: Tue, 15 Sep 2020 10:07:28 +0200 From: Miquel Raynal To: Yifeng Zhao Subject: Re: [PATCH v8 2/8] mtd: rawnand: rockchip: NFC drivers for RK3308, RK2928 and others Message-ID: <20200915100728.5c866f89@xps13> In-Reply-To: <20200717092420.19798-3-yifeng.zhao@rock-chips.com> References: <20200717092420.19798-1-yifeng.zhao@rock-chips.com> <20200717092420.19798-3-yifeng.zhao@rock-chips.com> Organization: Bootlin X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200915_040737_099718_FB02F21D X-CRM114-Status: GOOD ( 38.10 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, vigneshr@ti.com, richard@nod.at, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, robh+dt@kernel.org, linux-mtd@lists.infradead.org, linux-arm-kernel@lists.infradead.org, heiko@sntech.de Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGkgWWlmZW5nLAoKSSBhbSB2ZXJ5IHNvcnJ5IGZvciB0aGUgZGVsYXkgaXQgdG9vayBtZSB0byBy ZXZpZXcgdGhpcyBkcml2ZXIsIGJ1dAp0aGVyZSBhcmUgc3RpbGwgc29tZSBzbWFsbCBpbmNvaGVy ZW5jZXMgSU1ITywgc2VlIGJlbG93LgoKWWlmZW5nIFpoYW8gPHlpZmVuZy56aGFvQHJvY2stY2hp cHMuY29tPiB3cm90ZSBvbiBGcmksIDE3IEp1bCAyMDIwCjE3OjI0OjE4ICswODAwOgoKPiBUaGlz IGRyaXZlciBzdXBwb3J0cyBSb2NrY2hpcCBORkMgKE5BTkQgRmxhc2ggQ29udHJvbGxlcikgZm91 bmQgb24gUkszMzA4LAo+IFJLMjkyOCwgUktQWDMwLCBSVjExMDggYW5kIG90aGVyIFNPQ3MuIFRo ZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIHVzaW5nCj4gOC1iaXQgTkFORCBpbnRlcmZhY2Ugb24g dGhlIEFSTSBiYXNlZCBSSzMzMDggcGxhdGZvcm0uCj4gCj4gU3VwcG9ydCBSb2NrY2hpcCBTb0Nz IGFuZCBORkMgdmVyc2lvbnM6Cj4gLSBQWDMwIGFuZCBSSzMzMjYoTkZDdjkwMCkuCj4gCUVDQzog MTYvNDAvNjAvNzAgYml0cy8xS0IuCj4gCUNMT0NLOiBhaGIgYW5kIG5mYy4KPiAtIFJLMzMwOCBh bmQgUlYxMTA4KE5GQ3Y4MDApLgo+IAlFQ0M6IDE2IGJpdHMvMUtCLgo+IAlDTE9DSzogYWhiIGFu ZCBuZmMuCj4gLSBSSzMwMzYgYW5kIFJLMzEyOChORkN2NjIyKS4KPiAJRUNDOiAxNi8yNC80MC82 MCBiaXRzLzFLQi4KPiAJQ0xPQ0s6IGFoYiBhbmQgbmZjLgo+IC0gUkszMDY2LCBSSzMxODggYW5k IFJLMjkyOChORkN2NjAwKS4KPiAJRUNDOiAxNi8yNC80MC82MCBiaXRzLzFLQi4KPiAJQ0xPQ0s6 IGFoYi4KPiAKPiBTdXBwb3J0ZWQgZmVhdHVyZXM6Cj4gLSBSZWFkIGZ1bGwgcGFnZSBkYXRhIGJ5 IERNQS4KPiAtIFN1cHBvcnQgSFcgRUNDKG9uZSBzdGVwIGlzIDFLQikuCj4gLSBTdXBwb3J0IDIg LSAzMksgcGFnZSBzaXplLgo+IC0gU3VwcG9ydCA4IENTKGRlcGVuZCBvbiBTb0NzKQo+IAo+IExp bWl0YXRpb25zOgo+IC0gTm8gc3VwcG9ydCBmb3IgdGhlIGVjYyBzdGVwIHNpemUgaXMgNTEyLgo+ IC0gVW50ZXN0ZWQgb24gc29tZSBTb0NzLgo+IC0gTm8gc3VwcG9ydCBmb3Igc3VicGFnZXMuCj4g LSBObyBzdXBwb3J0IGZvciB0aGUgYnVpbHRpbiByYW5kb21pemVyLgo+IC0gVGhlIG9yaWdpbmFs IGJhZCBibG9jayBtYXNrIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVz ZQo+ICAgdGhlIEJCVChiYWQgYmxvY2sgdGFibGUpLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFlpZmVu ZyBaaGFvIDx5aWZlbmcuemhhb0Byb2NrLWNoaXBzLmNvbT4KPiAtLS0KPiAKPiBDaGFuZ2VzIGlu IHY4OiBOb25lCj4gQ2hhbmdlcyBpbiB2NzoKPiAtIFJlYmFzZSB0byBsaW51eC1uZXh0Lgo+IC0g Rml4IGNvZGluZyBzdHlsZS4KPiAtIFJlc2VydmVkIDQgYnl0ZXMgYXQgdGhlIGJlZ2luaW5nIG9m IHRoZSBvb2IgYXJlYS4KPiAtIFBhZ2UgcmF3IHJlYWQgYW5kIHdyaXRlIGluY2x1ZGVkIGVjYyBk YXRhLgo+IAo+IENoYW5nZXMgaW4gdjY6Cj4gLSBUaGUgbXRkLT5uYW1lIHNldCBieSBOQU5EIGxh YmVsIHByb3BlcnR5Lgo+IC0gQWRkIHNvbWUgY29tbWVudHMuCj4gLSBGaXggY29tcGlsZSBlcnJv ci4KPiAKPiBDaGFuZ2VzIGluIHY1Ogo+IC0gQWRkIGJvb3QgYmxvY2tzIHN1cHBvcnQgIHdpdGgg ZGlmZmVyZW50IEVDQyBmb3IgYm9vdFJPTS4KPiAtIFJlbmFtZSByb2NrY2hpcC1uYW5kLmMgdG8g cm9ja2NoaXAtbmFuZC1jb250cm9sbGVyLmMuCj4gLSBVbmlmaWNhdGlvbiBvZiBvdGhlciB2YXJp YWJsZSBuYW1lcy4KPiAtIFJlbW92ZSBzb21lIGNvbXBhdGlibGUgZGVmaW5lLgo+IAo+IENoYW5n ZXMgaW4gdjQ6Cj4gLSBEZWZpbmUgcGxhdGZvcm0gZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSByZWdp c3RlciBvZmZzZXRzLgo+IC0gVGhlIGNvbXBhdGlibGUgZGVmaW5lIHdpdGggcmt4eF9uZmMuCj4g LSBVc2UgU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMgdG8gZGVmaW5lIFBNX09QUy4KPiAtIFVzZSBl eGVjX29wIGluc3RlYWQgb2YgbGVnYWN5IGhvb2tzLgo+IAo+IENoYW5nZXMgaW4gdjM6IE5vbmUK PiBDaGFuZ2VzIGluIHYyOgo+IC0gRml4IGNvbXBpbGUgZXJyb3IuCj4gLSBJbmNsdWRlIGhlYWRl ciBmaWxlcyBzb3J0ZWQgYnkgZmlsZSBuYW1lLgo+IAo+ICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9L Y29uZmlnICAgICAgICAgICAgICAgICAgfCAgIDEyICsKPiAgZHJpdmVycy9tdGQvbmFuZC9yYXcv TWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAgMSArCj4gIC4uLi9tdGQvbmFuZC9yYXcvcm9j a2NoaXAtbmFuZC1jb250cm9sbGVyLmMgICB8IDE0MjIgKysrKysrKysrKysrKysrKysKPiAgMyBm aWxlcyBjaGFuZ2VkLCAxNDM1IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbXRkL25hbmQvcmF3L3JvY2tjaGlwLW5hbmQtY29udHJvbGxlci5jCj4gCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL3Jh dy9LY29uZmlnCj4gaW5kZXggMTEzZjYxMDUyMjY5Li42NDkyODU1ZDRhNTUgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQv cmF3L0tjb25maWcKPiBAQCAtNDYxLDYgKzQ2MSwxOCBAQCBjb25maWcgTVREX05BTkRfQVJBU0FO Cj4gIAkgIEVuYWJsZXMgdGhlIGRyaXZlciBmb3IgdGhlIEFyYXNhbiBOQU5EIGZsYXNoIGNvbnRy b2xsZXIgb24KPiAgCSAgWnlucSBVbHRyYXNjYWxlKyBNUFNvQy4KPiAgCj4gK2NvbmZpZyBNVERf TkFORF9ST0NLQ0hJUAo+ICsJdHJpc3RhdGUgIlJvY2tjaGlwIE5BTkQgY29udHJvbGxlciIKPiAr CWRlcGVuZHMgb24gQVJDSF9ST0NLQ0hJUCAmJiBIQVNfSU9NRU0KPiArCWhlbHAKPiArCSAgRW5h YmxlcyBzdXBwb3J0IGZvciBOQU5EIGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgU29Dcy4KPiArCSAg VGhlcmUgYXJlIGZvdXIgZGlmZmVyZW50IHZlcnNpb25zIG9mIE5BTkQgRkxBU0ggQ29udHJvbGxl cnMsCj4gKwkgIGluY2x1ZGluZzoKPiArCSAgICBORkMgdjYwMDogUksyOTI4LCBSSzMwNjYsIFJL MzE4OAo+ICsJICAgIE5GQyB2NjIyOiBSSzMwMzYsIFJLMzEyOAo+ICsJICAgIE5GQyB2ODAwOiBS SzMzMDgsIFJWMTEwOAo+ICsJICAgIE5GQyB2OTAwOiBQWDMwLCBSSzMzMjYKPiArCj4gIGNvbW1l bnQgIk1pc2MiCj4gIAo+ICBjb25maWcgTVREX1NNX0NPTU1PTgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxl Cj4gaW5kZXggMjkzMGY1YjkwMTVkLi45NjBjOWJlMjUyMDQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtl ZmlsZQo+IEBAIC01OCw2ICs1OCw3IEBAIG9iai0kKENPTkZJR19NVERfTkFORF9TVE0zMl9GTUMy KQkrPSBzdG0zMl9mbWMyX25hbmQubwo+ICBvYmotJChDT05GSUdfTVREX05BTkRfTUVTT04pCQkr PSBtZXNvbl9uYW5kLm8KPiAgb2JqLSQoQ09ORklHX01URF9OQU5EX0NBREVOQ0UpCQkrPSBjYWRl bmNlLW5hbmQtY29udHJvbGxlci5vCj4gIG9iai0kKENPTkZJR19NVERfTkFORF9BUkFTQU4pCQkr PSBhcmFzYW4tbmFuZC1jb250cm9sbGVyLm8KPiArb2JqLSQoQ09ORklHX01URF9OQU5EX1JPQ0tD SElQKQkJKz0gcm9ja2NoaXAtbmFuZC1jb250cm9sbGVyLm8KPiAgCj4gIG5hbmQtb2JqcyA6PSBu YW5kX2Jhc2UubyBuYW5kX2xlZ2FjeS5vIG5hbmRfYmJ0Lm8gbmFuZF90aW1pbmdzLm8gbmFuZF9p ZHMubwo+ICBuYW5kLW9ianMgKz0gbmFuZF9vbmZpLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9t dGQvbmFuZC9yYXcvcm9ja2NoaXAtbmFuZC1jb250cm9sbGVyLmMgYi9kcml2ZXJzL210ZC9uYW5k L3Jhdy9yb2NrY2hpcC1uYW5kLWNvbnRyb2xsZXIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMDAwMDAwLi5mZWMxMzYwNjAzZTAKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9tdGQvbmFuZC9yYXcvcm9ja2NoaXAtbmFuZC1jb250cm9sbGVyLmMKPiBAQCAtMCww ICsxLDE0MjIgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlU Cj4gKy8qCj4gKyAqIFJvY2tjaGlwIE5BTkQgRmxhc2ggY29udHJvbGxlciBkcml2ZXIuCj4gKyAq IENvcHlyaWdodCAoQykgMjAyMCBSb2NrY2hpcCBJbmMuCj4gKyAqIEF1dGhvcjogWWlmZW5nIFpo YW8gPHlpZmVuZy56aGFvQHJvY2stY2hpcHMuY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxs aW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9kbWEtbWFwcGluZy5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgo+ICsj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9tdGQvcmF3bmFuZC5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4K PiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZv cm1fZGV2aWNlLmg+Cj4gKwo+ICsvKgo+ICsgKiBORkMgUGFnZSBEYXRhIExheW91dDoKPiArICoJ MTAyNCBCeXRlcyBEYXRhICsgNEJ5dGVzIHN5cyBkYXRhICsgMjhCeXRlc34xMjRCeXRlcyBlY2Mg Kwo+ICsgKgkxMDI0IEJ5dGVzIERhdGEgKyA0Qnl0ZXMgc3lzIGRhdGEgKyAyOEJ5dGVzfjEyNEJ5 dGVzIGVjYyArCj4gKyAqCS4uLi4uLgo+ICsgKiBOQU5EIFBhZ2UgRGF0YSBMYXlvdXQ6Cj4gKyAq CTEwMjQgKiBuIERhdGEgKyBtIEJ5dGVzIG9vYgo+ICsgKiBPcmlnaW5hbCBCYWQgQmxvY2sgTWFz ayBMb2NhdGlvbjoKPiArICoJRmlyc3QgYnl0ZSBvZiBvb2Ioc3BhcmUpLgo+ICsgKiBuYW5kX2No aXAtPm9vYl9wb2kgZGF0YSBsYXlvdXQ6Cj4gKyAqCTRCeXRlcyBzeXMgZGF0YSArIC4uLi4gKyA0 Qnl0ZXMgc3lzIGRhdGEgKyBlY2MgZGF0YS4KPiArICovCj4gKwo+ICsvKiBOQU5EIGNvbnRyb2xs ZXIgcmVnaXN0ZXIgZGVmaW5pdGlvbiAqLwo+ICsjZGVmaW5lCU5GQ19SRUFECQkoMCkKPiArI2Rl ZmluZQlORkNfV1JJVEUJCSgxKQo+ICsjZGVmaW5lCU5GQ19GTUNUTAkJKDB4MDApCj4gKyNkZWZp bmUJCUZNQ1RMX0NFX1NFTF9NCQkweEZGCgpOaXRwaWNraW5nOiBJJ2QgcHJlZmVyCgojZGVmaW5l CU5GQ19GTUNUTAkJMHgwMAojZGVmaW5lCSAgRk1DVExfQ0VfU0VMX00JMHhGRgoKCj4gKyNkZWZp bmUJCUZNQ1RMX0NFX1NFTCh4KQkJKDEgPDwgKHgpKQo+ICsjZGVmaW5lCQlGTUNUTF9XUAkJQklU KDgpCj4gKyNkZWZpbmUJCUZNQ1RMX1JEWQkJQklUKDkpCj4gKyNkZWZpbmUJTkZDX0ZNV0FJVAkJ KDB4MDQpCj4gKyNkZWZpbmUJCUZMQ1RMX1JTVAkJQklUKDApCj4gKyNkZWZpbmUJCUZMQ1RMX1dS CQkoMSkJLyogMDogcmVhZCwgMTogd3JpdGUgKi8KPiArI2RlZmluZQkJRkxDVExfWEZFUl9TVAkJ QklUKDIpCj4gKyNkZWZpbmUJCUZMQ1RMX1hGRVJfRU4JCUJJVCgzKQo+ICsjZGVmaW5lCQlGTENU TF9BQ09SUkVDVAkJQklUKDEwKSAvKiBBdXRvIGNvcnJlY3QgZXJyb3IgYml0cy4gKi8KPiArI2Rl ZmluZQkJRkxDVExfWEZFUl9SRUFEWQlCSVQoMjApCj4gKyNkZWZpbmUJCUZMQ1RMX1hGRVJfU0VD VE9SCSgyMikKPiArI2RlZmluZQkJRkxDVExfVE9HX0ZJWAkJQklUKDI5KQo+ICsjZGVmaW5lCQlC Q0hDVExfQkFOS19NCSg3IDw8IDUpCj4gKyNkZWZpbmUJCUJDSENUTF9CQU5LCSg1KQo+ICsjZGVm aW5lCQlETUFfU1QJCQlCSVQoMCkKPiArI2RlZmluZQkJRE1BX1dSCQkJKDEpCS8qIDA6IHdyaXRl LCAxOiByZWFkICovCj4gKyNkZWZpbmUJCURNQV9FTgkJCUJJVCgyKQo+ICsjZGVmaW5lCQlETUFf QUhCX1NJWkUJCSgzKQkvKiAwOiAxLCAxOiAyLCAyOiA0ICovCj4gKyNkZWZpbmUJCURNQV9CVVJT VF9TSVpFCQkoNikJLyogMDogMSwgMzogNCwgNTogOCwgNzogMTYgKi8KPiArI2RlZmluZQkJRE1B X0lOQ19OVU0JCSg5KQkvKiAxIC0gMTYgKi8KPiArI2RlZmluZQkJRUNDX0VSUl9DTlQoeCwgZSkg KCgoKHgpID4+IChlKS5sb3cpICYgKGUpLmxvd19tYXNrKSBcCj4gKwkJCXwgKCgoeCkgPj4gKGUp LmhpZ2gpICYgKGUpLmhpZ2hfbWFzaykgPDwgKGUpLmxvd19ibikKPiArI2RlZmluZQkJSU5UX0RN QQkJCUJJVCgwKQo+ICsjZGVmaW5lCU5GQ19CQU5LCQkoMHg4MDApCj4gKyNkZWZpbmUJTkZDX0JB TktfU1RFUAkJKDB4MTAwKQo+ICsjZGVmaW5lCQlCQU5LX0RBVEEJCSgweDAwKQo+ICsjZGVmaW5l CQlCQU5LX0FERFIJCSgweDA0KQo+ICsjZGVmaW5lCQlCQU5LX0NNRAkJKDB4MDgpCj4gKyNkZWZp bmUJTkZDX1NSQU0wCQkoMHgxMDAwKQo+ICsjZGVmaW5lCU5GQ19TUkFNMQkJKDB4MTQwMCkKPiAr I2RlZmluZQlORkNfU1JBTV9TSVpFCQkoMHg0MDApCj4gKyNkZWZpbmUJTkZDX1RJTUVPVVQJCSg1 MDAwMDApCj4gKyNkZWZpbmUJTkZDX01BWF9PT0JfUEVSX1NURVAJMTI4Cj4gKyNkZWZpbmUJTkZD X01JTl9PT0JfUEVSX1NURVAJNjQKPiArI2RlZmluZQlNQVhfREFUQV9TSVpFCQkweEZGRkMKPiAr I2RlZmluZQlNQVhfQUREUkVTU19DWUMJCTYKPiArI2RlZmluZQlORkNfRUNDX01BWF9NT0RFUwk0 Cj4gKyNkZWZpbmUJTkZDX01BWF9OU0VMUwkJKDgpIC8qIFNvbWUgU29jcyBvbmx5IGhhdmUgMSBv ciAyIENTcy4gKi8KPiArI2RlZmluZQlORkNfU1lTX0RBVEFfU0laRQkoNCkgLyogNCBieXRlcyBz eXMgZGF0YSBpbiBvb2IgcHJlIDEwMjQgZGF0YS4qLwo+ICsjZGVmaW5lCVJLX0RFRkFVTFRfQ0xP Q0tfUkFURQkoMTUwICogMTAwMCAqIDEwMDApIC8qIDE1MCBNaHogKi8KPiArI2RlZmluZQlBQ0NU SU1JTkcoY3NydywgcndwdywgcndjcykgKChjc3J3KSA8PCAxMiB8IChyd3B3KSA8PCA1IHwgKHJ3 Y3MpKQo+ICsKPiArZW51bSBuZmNfdHlwZSB7Cj4gKwlORkNfVjYsCj4gKwlORkNfVjgsCj4gKwlO RkNfVjksCj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IHJrX2VjY19jbnRfc3RhdHVzOiBy ZXByZXNlbnQgYSBlY2Mgc3RhdHVzIGRhdGEuCj4gKyAqIEBlcnJfZmxhZ19iaXQ6IGVycm9yIGZs YWcgYml0IGluZGV4IGF0IHJlZ2lzdGVyLgo+ICsgKiBAbG93OiBlY2MgY291bnQgbG93IGJpdCBp bmRleCBhdCByZWdpc3Rlci4KPiArICogQGxvd19tYXNrOiBtYXNrIGJpdC4KPiArICogQGxvd19i bjogZWNjIGNvdW50IGxvdyBiaXQgbnVtYmVyLgo+ICsgKiBAaGlnaDogZWNjIGNvdW50IGhpZ2gg Yml0IGluZGV4IGF0IHJlZ2lzdGVyLgo+ICsgKiBAaGlnaF9tYXNrOiBtYXNrIGJpdAo+ICsgKi8K PiArc3RydWN0IGVjY19jbnRfc3RhdHVzIHsKPiArCXU4IGVycl9mbGFnX2JpdDsKPiArCXU4IGxv dzsKPiArCXU4IGxvd19tYXNrOwo+ICsJdTggbG93X2JuOwo+ICsJdTggaGlnaDsKPiArCXU4IGhp Z2hfbWFzazsKPiArfTsKPiArCj4gKy8qCj4gKyAqIEB0eXBlOiBuZmMgdmVyc2lvbgo+ICsgKiBA ZWNjX3N0cmVuZ3RoczogZWNjIHN0cmVuZ3Rocwo+ICsgKiBAZWNjX2NmZ3M6IGVjYyBjb25maWcg dmFsdWVzCj4gKyAqIEBmbGN0bF9vZmY6IEZMQ1RMIHJlZ2lzdGVyIG9mZnNldAo+ICsgKiBAYmNo Y3RsX29mZjogQkNIQ1RMIHJlZ2lzdGVyIG9mZnNldAo+ICsgKiBAZG1hX2RhdGFfYnVmX29mZjog RE1BX0RBVEFfQlVGIHJlZ2lzdGVyIG9mZnNldAo+ICsgKiBAZG1hX29vYl9idWZfb2ZmOiBETUFf T09CX0JVRiByZWdpc3RlciBvZmZzZXQKPiArICogQGRtYV9jZmdfb2ZmOiBETUFfQ0ZHIHJlZ2lz dGVyIG9mZnNldAo+ICsgKiBAZG1hX3N0X29mZjogRE1BX1NUIHJlZ2lzdGVyIG9mZnNldAo+ICsg KiBAYmNoX3N0X29mZjogQkNHX1NUIHJlZ2lzdGVyIG9mZnNldAo+ICsgKiBAcmFuZG16X29mZjog UkFORE1aIHJlZ2lzdGVyIG9mZnNldAo+ICsgKiBAaW50X2VuX29mZjogaW50ZXJydXB0IGVuYWJs ZSByZWdpc3RlciBvZmZzZXQKPiArICogQGludF9jbHJfb2ZmOiBpbnRlcnJ1cHQgY2xlYW4gcmVn aXN0ZXIgb2Zmc2V0Cj4gKyAqIEBpbnRfc3Rfb2ZmOiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVy IG9mZnNldAo+ICsgKiBAb29iMF9vZmY6IG9vYjAgcmVnaXN0ZXIgb2Zmc2V0Cj4gKyAqIEBvb2Ix X29mZjogb29iMSByZWdpc3RlciBvZmZzZXQKPiArICogQGVjYzA6IHJlcHJlc2VudCBFQ0MwIHN0 YXR1cyBkYXRhCj4gKyAqIEBlY2MxOiByZXByZXNlbnQgRUNDMSBzdGF0dXMgZGF0YQo+ICsgKi8K PiArc3RydWN0IG5mY19jZmcgewo+ICsJZW51bSBuZmNfdHlwZSB0eXBlOwo+ICsJdTggZWNjX3N0 cmVuZ3Roc1tORkNfRUNDX01BWF9NT0RFU107Cj4gKwl1MzIgZWNjX2NmZ3NbTkZDX0VDQ19NQVhf TU9ERVNdOwo+ICsJdTMyIGZsY3RsX29mZjsKPiArCXUzMiBiY2hjdGxfb2ZmOwo+ICsJdTMyIGRt YV9jZmdfb2ZmOwo+ICsJdTMyIGRtYV9kYXRhX2J1Zl9vZmY7Cj4gKwl1MzIgZG1hX29vYl9idWZf b2ZmOwo+ICsJdTMyIGRtYV9zdF9vZmY7Cj4gKwl1MzIgYmNoX3N0X29mZjsKPiArCXUzMiByYW5k bXpfb2ZmOwo+ICsJdTMyIGludF9lbl9vZmY7Cj4gKwl1MzIgaW50X2Nscl9vZmY7Cj4gKwl1MzIg aW50X3N0X29mZjsKPiArCXUzMiBvb2IwX29mZjsKPiArCXUzMiBvb2IxX29mZjsKPiArCXN0cnVj dCBlY2NfY250X3N0YXR1cyBlY2MwOwo+ICsJc3RydWN0IGVjY19jbnRfc3RhdHVzIGVjYzE7Cj4g K307Cj4gKwo+ICtzdHJ1Y3QgcmtfbmZjX25hbmRfY2hpcCB7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFk IG5vZGU7Cj4gKwlzdHJ1Y3QgbmFuZF9jaGlwIGNoaXA7Cj4gKwo+ICsJdTE2IHNwYXJlX3Blcl9z ZWN0b3I7Cj4gKwl1MTYgb29iX2J1Zl9wZXJfc2VjdG9yOwo+ICsJdTE2IGJvb3RfYmxrczsKPiAr CXUxNiBib290X2VjYzsKPiArCXUxNiBtZXRhZGF0YV9zaXplOwo+ICsKPiArCXU4IG5zZWxzOwo+ ICsJdTggc2Vsc1swXTsKPiArCS8qIE5vdGhpbmcgYWZ0ZXIgdGhpcyBmaWVsZC4gKi8KPiArfTsK PiArCj4gK3N0cnVjdCBya19uZmNfY2xrIHsKPiArCWludCBuZmNfcmF0ZTsKPiArCXN0cnVjdCBj bGsgKm5mY19jbGs7Cj4gKwlzdHJ1Y3QgY2xrICphaGJfY2xrOwoKTm90IHN1cmUgdGhpcyBkZXNl cnZlcyBpdHMgb3duIHN0cnVjdHVyZT8KCj4gK307Cj4gKwo+ICtzdHJ1Y3QgcmtfbmZjIHsKPiAr CXN0cnVjdCBuYW5kX2NvbnRyb2xsZXIgY29udHJvbGxlcjsKPiArCXN0cnVjdCBya19uZmNfY2xr IGNsazsKPiArCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwljb25zdCBzdHJ1Y3QgbmZjX2Nm ZyAqY2ZnOwo+ICsJdm9pZCBfX2lvbWVtICpyZWdzOwo+ICsKPiArCWludCBzZWxlY3RlZF9iYW5r Owo+ICsJaW50IGJhbmRfb2Zmc2V0Owo+ICsKPiArCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7Cj4g KwlzdHJ1Y3QgbGlzdF9oZWFkIGNoaXBzOwo+ICsKPiArCXU4ICpidWZmZXI7Cj4gKwl1OCAqcGFn ZV9idWY7Cj4gKwl1MzIgKm9vYl9idWY7Cj4gKwo+ICsJdW5zaWduZWQgbG9uZyBhc3NpZ25lZF9j czsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJrX25mY19uYW5kX2NoaXAgKnRv X3JrbmFuZChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVy X29mKGNoaXAsIHN0cnVjdCBya19uZmNfbmFuZF9jaGlwLCBjaGlwKTsKPiArfQo+ICsKPiArc3Rh dGljIGlubGluZSB1OCAqZGF0YV9wdHIoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgY29uc3QgdTgg KnAsIGludCBpKQoKcmtfbmZjX2J1Zl90b19kYXRhX3B0ciA/Cgo+ICt7Cj4gKwlyZXR1cm4gKHU4 ICopcCArIGkgKiBjaGlwLT5lY2Muc2l6ZTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1OCAq b29iX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgaSkKCnNhbWUgaGVyZQoKPiArewo+ ICsJdTggKnBvaTsKPiArCj4gKwlwb2kgPSBjaGlwLT5vb2JfcG9pICsgaSAqIE5GQ19TWVNfREFU QV9TSVpFOwo+ICsKPiArCXJldHVybiBwb2k7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdTgg Km9vYl9lY2NfcHRyKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBpKQoKc2FtZSBoZXJlCgo+ ICt7Cj4gKwlzdHJ1Y3QgcmtfbmZjX25hbmRfY2hpcCAqcmtuYW5kID0gdG9fcmtuYW5kKGNoaXAp Owo+ICsJdTggKnBvaTsKPiArCj4gKwlwb2kgPSBjaGlwLT5vb2JfcG9pICsgcmtuYW5kLT5tZXRh ZGF0YV9zaXplICsKPiArCSAgICAgIGNoaXAtPmVjYy5ieXRlcyAqIGk7Cj4gKwo+ICsJcmV0dXJu IHBvaTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgcmtfZGF0YV9sZW4oc3RydWN0IG5h bmRfY2hpcCAqY2hpcCkKClBsZWFzZSBwcmVwZW5kIGFsbCB5b3UgZnVuY3Rpb25zIHdpdGggcmtf bmZjXwoKPiArewo+ICsJc3RydWN0IHJrX25mY19uYW5kX2NoaXAgKnJrbmFuZCA9IHRvX3JrbmFu ZChjaGlwKTsKPiArCj4gKwlyZXR1cm4gY2hpcC0+ZWNjLnNpemUgKyBya25hbmQtPnNwYXJlX3Bl cl9zZWN0b3I7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdTggKnJrX2RhdGFfcHRyKHN0cnVj dCBuYW5kX2NoaXAgKmNoaXAsICBpbnQgaSkKPiArewo+ICsJc3RydWN0IHJrX25mYyAqbmZjID0g bmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+ICsKPiArCXJldHVybiBuZmMtPmJ1ZmZl ciArIGkgKiBya19kYXRhX2xlbihjaGlwKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1OCAq cmtfb29iX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgaSkKPiArewo+ICsJc3RydWN0 IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+ICsKPiArCXJl dHVybiBuZmMtPmJ1ZmZlciArIGkgKiBya19kYXRhX2xlbihjaGlwKSArIGNoaXAtPmVjYy5zaXpl Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBya19uZmNfc2VsZWN0X2NoaXAoc3RydWN0IG5hbmRf Y2hpcCAqY2hpcCwgaW50IGNzKQo+ICt7Cj4gKwlzdHJ1Y3QgcmtfbmZjICpuZmMgPSBuYW5kX2dl dF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4gKwlzdHJ1Y3QgcmtfbmZjX25hbmRfY2hpcCAqcmtu YW5kID0gdG9fcmtuYW5kKGNoaXApOwo+ICsJdTMyIHZhbDsKPiArCj4gKwlpZiAoY3MgPCAwKSB7 Cj4gKwkJbmZjLT5zZWxlY3RlZF9iYW5rID0gLTE7Cj4gKwkJLyogRGVzZWxlY3QgdGhlIGN1cnJl bnRseSBzZWxlY3RlZCB0YXJnZXQuICovCj4gKwkJdmFsID0gcmVhZGxfcmVsYXhlZChuZmMtPnJl Z3MgKyBORkNfRk1DVEwpOwo+ICsJCXZhbCAmPSB+Rk1DVExfQ0VfU0VMX007Cj4gKwkJd3JpdGVs KHZhbCwgbmZjLT5yZWdzICsgTkZDX0ZNQ1RMKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJ bmZjLT5zZWxlY3RlZF9iYW5rID0gcmtuYW5kLT5zZWxzW2NzXTsKPiArCW5mYy0+YmFuZF9vZmZz ZXQgPSBORkNfQkFOSyArIG5mYy0+c2VsZWN0ZWRfYmFuayAqIE5GQ19CQU5LX1NURVA7Cj4gKwo+ ICsJdmFsID0gcmVhZGxfcmVsYXhlZChuZmMtPnJlZ3MgKyBORkNfRk1DVEwpOwo+ICsJdmFsICY9 IH5GTUNUTF9DRV9TRUxfTTsKPiArCXZhbCB8PSBGTUNUTF9DRV9TRUwobmZjLT5zZWxlY3RlZF9i YW5rKTsKPiArCj4gKwl3cml0ZWwodmFsLCBuZmMtPnJlZ3MgKyBORkNfRk1DVEwpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW5saW5lIGludCBya19uZmNfd2FpdF9pb3JlYWR5KHN0cnVjdCBya19uZmMg Km5mYykKPiArewo+ICsJaW50IHJjOwo+ICsJdTMyIHZhbDsKPiArCj4gKwlyYyA9IHJlYWRsX3Bv bGxfdGltZW91dF9hdG9taWMobmZjLT5yZWdzICsgTkZDX0ZNQ1RMLCB2YWwsCj4gKwkJCQkgICAg ICAgdmFsICYgRk1DVExfUkRZLCAxMCwgTkZDX1RJTUVPVVQpOwoKRG8geW91IHJlYWxseSBuZWVk IGl0IHRvIGJlIGF0b21pYyA/IC0+ZXhlY19vcCgpIGlzIG5vdCBjYWxsZWQgaW4gYW4KYXRvbWlj IGNvbnRleHQuCgo+ICsKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1 OCBya19uZmNfcmVhZF9ieXRlKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXApCj4gK3sKPiArCXN0cnVj dCBya19uZmMgKm5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsKPiArCj4gKwly ZXR1cm4gcmVhZGJfcmVsYXhlZChuZmMtPnJlZ3MgKyBuZmMtPmJhbmRfb2Zmc2V0ICsgQkFOS19E QVRBKTsKCm5vIG5lZWQgZm9yIHRoaXMgaGVscGVyLCBqdXN0IG1vdmUgdGhlIGNvZGUgYmVsb3cu Cgo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBya19uZmNfcmVhZF9idWYoc3RydWN0IG5hbmRfY2hp cCAqY2hpcCwgdTggKmJ1ZiwgaW50IGxlbikKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IGxlbjsgaSsrKQo+ICsJCWJ1ZltpXSA9IHJrX25mY19yZWFkX2J5dGUoY2hpcCk7 CgpFaXRoZXIgeW91IGZpbmQgbW9yZSBwbGFjZXMgd2hlcmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9u LCBvciB5b3UgY2FuCm1vdmUgdGhpcyBjb2RlIGRpcmVjdGx5IHRvIHRoZSB1bmlxdWUgbG9jYXRp b24gd2hlcmUgaXQgaXMgY2FsbGVkLgoKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmtfbmZjX3dy aXRlX2J5dGUoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgdTggYnl0ZSkKClNhbWUgaGVyZQoKPiAr ewo+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXAp Owo+ICsKPiArCXdyaXRlYihieXRlLCBuZmMtPnJlZ3MgKyBuZmMtPmJhbmRfb2Zmc2V0ICsgQkFO S19EQVRBKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmtfbmZjX3dyaXRlX2J1ZihzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwLCBjb25zdCB1OCAqYnVmLCBpbnQgbGVuKQo+ICt7Cj4gKwlpbnQgaTsK PiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCj4gKwkJcmtfbmZjX3dyaXRlX2J5dGUo Y2hpcCwgYnVmW2ldKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBya19uZmNfY21kKHN0cnVjdCBu YW5kX2NoaXAgKmNoaXAsCj4gKwkJICAgICAgY29uc3Qgc3RydWN0IG5hbmRfc3Vib3AgKnN1Ym9w KQo+ICt7Cj4gKwlzdHJ1Y3QgcmtfbmZjICpuZmMgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEo Y2hpcCk7Cj4gKwl1bnNpZ25lZCBpbnQgaSwgaiwgcmVtYWluaW5nLCBzdGFydDsKPiArCWludCBy ZWdfb2Zmc2V0ID0gbmZjLT5iYW5kX29mZnNldDsKPiArCXZvaWQgX19pb21lbSAqZGF0YV9yZWc7 Cj4gKwl1OCAqaW5idWYgPSBOVUxMOwo+ICsJY29uc3QgdTggKm91dGJ1ZjsKPiArCXUzMiBjbnQg PSAwOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHN1Ym9wLT5uaW5z dHJzOyBpKyspIHsKPiArCQljb25zdCBzdHJ1Y3QgbmFuZF9vcF9pbnN0ciAqaW5zdHIgPSAmc3Vi b3AtPmluc3Ryc1tpXTsKPiArCj4gKwkJc3dpdGNoIChpbnN0ci0+dHlwZSkgewo+ICsJCWNhc2Ug TkFORF9PUF9DTURfSU5TVFI6Cj4gKwkJCXdyaXRlYihpbnN0ci0+Y3R4LmNtZC5vcGNvZGUsCj4g KwkJCSAgICAgICBuZmMtPnJlZ3MgKyByZWdfb2Zmc2V0ICsgQkFOS19DTUQpOwo+ICsJCQlicmVh azsKPiArCj4gKwkJY2FzZSBOQU5EX09QX0FERFJfSU5TVFI6Cj4gKwkJCXJlbWFpbmluZyA9IG5h bmRfc3Vib3BfZ2V0X251bV9hZGRyX2N5YyhzdWJvcCwgaSk7Cj4gKwkJCXN0YXJ0ID0gbmFuZF9z dWJvcF9nZXRfYWRkcl9zdGFydF9vZmYoc3Vib3AsIGkpOwo+ICsKPiArCQkJZm9yIChqID0gMDsg aiA8IDggJiYgaiArIHN0YXJ0IDwgcmVtYWluaW5nOyBqKyspCj4gKwkJCQl3cml0ZWIoaW5zdHIt PmN0eC5hZGRyLmFkZHJzW2ogKyBzdGFydF0sCj4gKwkJCQkgICAgICAgbmZjLT5yZWdzICsgcmVn X29mZnNldCArIEJBTktfQUREUik7Cj4gKwkJCWJyZWFrOwo+ICsKPiArCQljYXNlIE5BTkRfT1Bf REFUQV9JTl9JTlNUUjoKPiArCQljYXNlIE5BTkRfT1BfREFUQV9PVVRfSU5TVFI6Cj4gKwkJCXN0 YXJ0ID0gbmFuZF9zdWJvcF9nZXRfZGF0YV9zdGFydF9vZmYoc3Vib3AsIGkpOwo+ICsJCQljbnQg PSBuYW5kX3N1Ym9wX2dldF9kYXRhX2xlbihzdWJvcCwgaSk7Cj4gKwkJCWRhdGFfcmVnID0gbmZj LT5yZWdzICsgbmZjLT5iYW5kX29mZnNldCArIEJBTktfREFUQTsKPiArCj4gKwkJCWlmIChpbnN0 ci0+dHlwZSA9PSBOQU5EX09QX0RBVEFfT1VUX0lOU1RSKSB7Cj4gKwkJCQlvdXRidWYgPSBpbnN0 ci0+Y3R4LmRhdGEuYnVmLm91dCArIHN0YXJ0Owo+ICsJCQkJZm9yIChqID0gMDsgaiA8IGNudDsg aisrKQo+ICsJCQkJCXdyaXRlYihvdXRidWZbal0sIGRhdGFfcmVnKTsKCldoeSBub3QgY2FsbGlu ZyB0aGUgcmVhZC93cml0ZSBidWYgaGVscGVycyBoZXJlPyBXaGljaCB3b3VsZCBiZSBiZXR0ZXIK bmFtZWQgcmVhZC93cml0ZV9kYXRhIGluc3RlYWQgZHVlIHRvIHRoZSByZWdpc3RlciBuYW1lcyBv ZiB5b3VyIElQLgoKPiArCQkJfSBlbHNlIHsKPiArCQkJCWluYnVmID0gaW5zdHItPmN0eC5kYXRh LmJ1Zi5pbiArIHN0YXJ0Owo+ICsJCQkJZm9yIChqID0gMDsgaiA8IGNudDsgaisrKQo+ICsJCQkJ CWluYnVmW2pdID0gcmVhZGJfcmVsYXhlZChkYXRhX3JlZyk7Cj4gKwkJCX0KPiArCQkJYnJlYWs7 Cj4gKwo+ICsJCWNhc2UgTkFORF9PUF9XQUlUUkRZX0lOU1RSOgo+ICsJCQlpZiAocmtfbmZjX3dh aXRfaW9yZWFkeShuZmMpIDwgMCkgewo+ICsJCQkJcmV0ID0gLUVUSU1FRE9VVDsKPiArCQkJCWRl dl9lcnIobmZjLT5kZXYsICJJTyBub3QgcmVhZHlcbiIpOwo+ICsJCQl9Cj4gKwkJCWJyZWFrOwo+ ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IG5hbmRfb3BfcGFyc2VyIHJrX25mY19vcF9wYXJzZXIgPSBOQU5EX09QX1BBUlNFUigK PiArCU5BTkRfT1BfUEFSU0VSX1BBVFRFUk4oCj4gKwkJcmtfbmZjX2NtZCwKPiArCQlOQU5EX09Q X1BBUlNFUl9QQVRfQ01EX0VMRU0odHJ1ZSksCj4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0FERFJf RUxFTSh0cnVlLCBNQVhfQUREUkVTU19DWUMpLAo+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9DTURf RUxFTSh0cnVlKSwKPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfV0FJVFJEWV9FTEVNKHRydWUpLAo+ ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9EQVRBX0lOX0VMRU0odHJ1ZSwgTUFYX0RBVEFfU0laRSkp LAo+ICsJTkFORF9PUF9QQVJTRVJfUEFUVEVSTigKPiArCQlya19uZmNfY21kLAo+ICsJCU5BTkRf T1BfUEFSU0VSX1BBVF9DTURfRUxFTSh0cnVlKSwKPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQURE Ul9FTEVNKHRydWUsIE1BWF9BRERSRVNTX0NZQyksCj4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0RB VEFfT1VUX0VMRU0odHJ1ZSwgTUFYX0RBVEFfU0laRSksCj4gKwkJTkFORF9PUF9QQVJTRVJfUEFU X0NNRF9FTEVNKHRydWUpLAo+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9XQUlUUkRZX0VMRU0odHJ1 ZSkpLAo+ICspOwo+ICsKPiArc3RhdGljIGludCBya19uZmNfZXhlY19vcChzdHJ1Y3QgbmFuZF9j aGlwICpjaGlwLAo+ICsJCQkgIGNvbnN0IHN0cnVjdCBuYW5kX29wZXJhdGlvbiAqb3AsCj4gKwkJ CSAgYm9vbCBjaGVja19vbmx5KQo+ICt7Cj4gKwlya19uZmNfc2VsZWN0X2NoaXAoY2hpcCwgb3At PmNzKTsKCkRvbid0IHNlbGVjdCB0aGUgZGllIGlmIGNoZWNrX29ubHkgPT0gdHJ1ZQoKPiArCXJl dHVybiBuYW5kX29wX3BhcnNlcl9leGVjX29wKGNoaXAsICZya19uZmNfb3BfcGFyc2VyLCBvcCwK PiArCQkJCSAgICAgIGNoZWNrX29ubHkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJrX25mY19z ZXR1cF9kYXRhX2ludGVyZmFjZShzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgY3NsaW5lLAo+ ICsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuYW5kX2RhdGFfaW50ZXJmYWNlICpjb25mKQo+ICt7 Cj4gKwlzdHJ1Y3QgcmtfbmZjICpuZmMgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEoY2hpcCk7 Cj4gKwljb25zdCBzdHJ1Y3QgbmFuZF9zZHJfdGltaW5ncyAqdGltaW5nczsKPiArCXUzMiByYXRl LCB0YzJydywgdHJ3cHcsIHRydzJjOwo+ICsJdTMyIHRlbXA7Cj4gKwo+ICsJaWYgKGNzbGluZSA9 PSBOQU5EX0RBVEFfSUZBQ0VfQ0hFQ0tfT05MWSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAo IWNoaXAtPnBhcmFtZXRlcnMub25maSkKPiArCQlyZXR1cm4gMDsKCllvdSBtdXN0IGFjY2VwdCBh bGwga2luZCBvZiB0aW1pbmdzIGlmIHRoZXkgZml0IHRoZSBjb250cm9sbGVyCnBvc3NpYmlsaXRp ZXMsIHBsZWFzZSBkcm9wIGl0IG9mZi4gSWYgeW91IGRvbid0IHN1cHBvcnQgYSBnaXZlbgpjb25m aWd1cmF0aW9uLCBqdXN0IGNoZWNrIGl0IGFuZCByZXR1cm4gYW4gZXJyb3Igd2hlbiBDSEVDS19P TkxZIGlzCnVzZWQuCgo+ICsKPiArCXRpbWluZ3MgPSBuYW5kX2dldF9zZHJfdGltaW5ncyhjb25m KTsKPiArCWlmIChJU19FUlIodGltaW5ncykpCj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICsK PiArCWlmIChJU19FUlIobmZjLT5jbGsubmZjX2NsaykpCj4gKwkJcmF0ZSA9IGNsa19nZXRfcmF0 ZShuZmMtPmNsay5haGJfY2xrKTsKPiArCWVsc2UKPiArCQlyYXRlID0gY2xrX2dldF9yYXRlKG5m Yy0+Y2xrLm5mY19jbGspOwo+ICsKPiArCS8qIFR1cm4gY2xvY2sgcmF0ZSBpbnRvIGtIei4gKi8K PiArCXJhdGUgLz0gMTAwMDsKPiArCj4gKwl0YzJydyA9IDE7Cj4gKwl0cncyYyA9IDE7Cj4gKwo+ ICsJdHJ3cHcgPSBtYXgodGltaW5ncy0+dFdDX21pbiwgdGltaW5ncy0+dFJDX21pbikgLyAxMDAw Owo+ICsJdHJ3cHcgPSBESVZfUk9VTkRfVVAodHJ3cHcgKiByYXRlLCAxMDAwMDAwKTsKPiArCj4g Kwl0ZW1wID0gdGltaW5ncy0+dFJFQV9tYXggLyAxMDAwOwo+ICsJdGVtcCA9IERJVl9ST1VORF9V UCh0ZW1wICogcmF0ZSwgMTAwMDAwMCk7Cj4gKwo+ICsJaWYgKHRyd3B3IDwgdGVtcCkKPiArCQl0 cndwdyA9IHRlbXA7Cj4gKwo+ICsJLyoKPiArCSAqIEFDQ09OOiBhY2Nlc3MgdGltaW5nIGNvbnRy b2wgcmVnaXN0ZXIKPiArCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K PiArCSAqIDMxOjE4OiByZXNlcnZlZAo+ICsJICogMTc6MTI6IGNzcncsIGNsb2NrIGN5Y2xlcyBm cm9tIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgQ1NuIHRvIHRoZQo+ICsJCSBmYWxsaW5nIGVkZ2Ugb2Yg UkRuIG9yIFdSbgoKU3R5bGUgY2hlY2s6ICcqJyB0byBzdGFydCBldmVyeSBjb21tZW50IGxpbmUK Cj4gKwkgKiAxMToxMTogcmVzZXJ2ZWQKPiArCSAqIDEwOjA1OiByd3B3LCB0aGUgd2lkdGggb2Yg UkRuIG9yIFdSbiBpbiBwcm9jZXNzb3IgY2xvY2sgY3ljbGVzCj4gKwkgKiAwNDowMDogcndjcywg Y2xvY2sgY3ljbGVzIGZyb20gdGhlIHJpc2luZyBlZGdlIG9mIFJEbiBvciBXUm4gdG8gdGhlCj4g KwkJIHJpc2luZyBlZGdlIG9mIENTbgo+ICsJICovCj4gKwl0ZW1wID0gQUNDVElNSU5HKHRjMnJ3 LCB0cndwdywgdHJ3MmMpOwo+ICsJd3JpdGVsKHRlbXAsIG5mYy0+cmVncyArIE5GQ19GTVdBSVQp Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJrX25mY19od19lY2Nf c2V0dXAoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKPiArCQkJICAgICAgIHN0cnVjdCBuYW5kX2Vj Y19jdHJsICplY2MsCj4gKwkJCSAgICAgICB1aW50MzJfdCBzdHJlbmd0aCkKPiArewo+ICsJc3Ry dWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+ICsJdTMy IHJlZywgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgTkZDX0VDQ19NQVhfTU9ERVM7IGkrKykg ewo+ICsJCWlmIChlY2MtPnN0cmVuZ3RoID09IG5mYy0+Y2ZnLT5lY2Nfc3RyZW5ndGhzW2ldKSB7 Cj4gKwkJCXJlZyA9IG5mYy0+Y2ZnLT5lY2NfY2Znc1tpXTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ ICsJfQo+ICsKPiArCWlmIChpID49IE5GQ19FQ0NfTUFYX01PREVTKQo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsKPiArCXdyaXRlbChyZWcsIG5mYy0+cmVncyArIG5mYy0+Y2ZnLT5iY2hjdGxfb2Zm KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmtfbmZjX3hmZXJf c3RhcnQoc3RydWN0IHJrX25mYyAqbmZjLCB1OCBydywgdTggbl9LQiwKPiArCQkJICAgICAgZG1h X2FkZHJfdCBkbWFfZGF0YSwgZG1hX2FkZHJfdCBkbWFfb29iKQo+ICt7Cj4gKwl1MzIgZG1hX3Jl ZywgZmxfcmVnLCBiY2hfcmVnOwo+ICsKPiArCWRtYV9yZWcgPSBETUFfU1QgfCAoKCFydykgPDwg RE1BX1dSKSB8IERNQV9FTiB8ICgyIDw8IERNQV9BSEJfU0laRSkgfAo+ICsJICAgICAgKDcgPDwg RE1BX0JVUlNUX1NJWkUpIHwgKDE2IDw8IERNQV9JTkNfTlVNKTsKPiArCj4gKwlmbF9yZWcgPSAo cncgPDwgRkxDVExfV1IpIHwgRkxDVExfWEZFUl9FTiB8IEZMQ1RMX0FDT1JSRUNUIHwKPiArCQkg KG5fS0IgPDwgRkxDVExfWEZFUl9TRUNUT1IpIHwgRkxDVExfVE9HX0ZJWDsKPiArCj4gKwlpZiAo bmZjLT5jZmctPnR5cGUgPT0gTkZDX1Y2IHx8IG5mYy0+Y2ZnLT50eXBlID09IE5GQ19WOCkgewo+ ICsJCWJjaF9yZWcgPSByZWFkbF9yZWxheGVkKG5mYy0+cmVncyArIG5mYy0+Y2ZnLT5iY2hjdGxf b2ZmKTsKPiArCQliY2hfcmVnID0gKGJjaF9yZWcgJiAofkJDSENUTF9CQU5LX00pKSB8Cj4gKwkJ CSAgKG5mYy0+c2VsZWN0ZWRfYmFuayA8PCBCQ0hDVExfQkFOSyk7Cj4gKwkJd3JpdGVsKGJjaF9y ZWcsIG5mYy0+cmVncyArIG5mYy0+Y2ZnLT5iY2hjdGxfb2ZmKTsKPiArCX0KPiArCj4gKwl3cml0 ZWwoZG1hX3JlZywgbmZjLT5yZWdzICsgbmZjLT5jZmctPmRtYV9jZmdfb2ZmKTsKPiArCXdyaXRl bCgodTMyKWRtYV9kYXRhLCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+ZG1hX2RhdGFfYnVmX29mZik7 Cj4gKwl3cml0ZWwoKHUzMilkbWFfb29iLCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+ZG1hX29vYl9i dWZfb2ZmKTsKPiArCXdyaXRlbChmbF9yZWcsIG5mYy0+cmVncyArIG5mYy0+Y2ZnLT5mbGN0bF9v ZmYpOwo+ICsJZmxfcmVnIHw9IEZMQ1RMX1hGRVJfU1Q7Cj4gKwl3cml0ZWwoZmxfcmVnLCBuZmMt PnJlZ3MgKyBuZmMtPmNmZy0+ZmxjdGxfb2ZmKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBya19u ZmNfd2FpdF9mb3JfeGZlcl9kb25lKHN0cnVjdCBya19uZmMgKm5mYykKPiArewo+ICsJdm9pZCBf X2lvbWVtICpwdHI7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCXUzMiByZWc7Cj4gKwo+ICsJcHRyID0g bmZjLT5yZWdzICsgbmZjLT5jZmctPmZsY3RsX29mZjsKPiArCj4gKwlyZXQgPSByZWFkbF9wb2xs X3RpbWVvdXRfYXRvbWljKHB0ciwgcmVnLAo+ICsJCQkJCXJlZyAmIEZMQ1RMX1hGRVJfUkVBRFks Cj4gKwkJCQkJMTAsIE5GQ19USU1FT1VUKTsKClNhbWUgcXVlc3Rpb24sIGRvIHlvdSBuZWVkIGl0 IHRvIGJlIGF0b21pYz8KCj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBya19uZmNfd3JpdGVfcGFnZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hp cCAqY2hpcCwKPiArCQkJICAgICBjb25zdCB1OCAqYnVmLCBpbnQgcGFnZSwgaW50IHJhdykKPiAr ewo+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXAp Owo+ICsJc3RydWN0IHJrX25mY19uYW5kX2NoaXAgKnJrbmFuZCA9IHRvX3JrbmFuZChjaGlwKTsK PiArCXN0cnVjdCBuYW5kX2VjY19jdHJsICplY2MgPSAmY2hpcC0+ZWNjOwo+ICsJaW50IG9vYl9z dGVwID0gKGVjYy0+Ynl0ZXMgPiA2MCkgPyBORkNfTUFYX09PQl9QRVJfU1RFUCA6Cj4gKwkJCU5G Q19NSU5fT09CX1BFUl9TVEVQOwo+ICsJaW50IHBhZ2VzX3Blcl9ibGsgPSBtdGQtPmVyYXNlc2l6 ZSAvIG10ZC0+d3JpdGVzaXplOwo+ICsJaW50IHJldCA9IDAsIGksIGJvb3Rfcm9tX21vZGUgPSAw Owo+ICsJZG1hX2FkZHJfdCBkbWFfZGF0YSwgZG1hX29vYjsKPiArCXUzMiByZWc7Cj4gKwl1OCAq b29iOwo+ICsKPiArCW5hbmRfcHJvZ19wYWdlX2JlZ2luX29wKGNoaXAsIHBhZ2UsIDAsIE5VTEws IDApOwo+ICsKPiArCWlmICghcmF3KQoKSSB0aGluayBpdCB3aWxsIGJlIG11Y2ggYmV0dGVyIHRv IGhhdmUgdHdvIHJrX25mY193cml0ZV9wYWdlIGFuZApya19uZmNfd3JpdGVfcGFnZV9yYXcgZGlz dGluY3QgaGVscGVycy4KCj4gKwkJbWVtY3B5KG5mYy0+cGFnZV9idWYsIGJ1ZiwgbXRkLT53cml0 ZXNpemUpOwo+ICsJCW1lbXNldChuZmMtPm9vYl9idWYsIDB4ZmYsIG9vYl9zdGVwICogZWNjLT5z dGVwcyk7CgpZb3UgYXJlIGRpc2NhcmRpbmcgT09CIGRhdGEgaW50ZW50aW9uYWxseSwgdGhpcyBp cyBzdHJhbmdlLgoKPiArCj4gKwkJLyoKPiArCQkgKiBUaGUgZmlyc3QgOChzb21lIGRldmljZXMg YXJlIDQgb3IgMTYpIGJsb2NrcyBhcmUgaW4gdXNlIGJ5CgoiVGhlIGZpcnN0IGJsb2NrcyAoNCwg OCBvciAxNiBkZXBlbmRpbmcgb24gdGhlIGRldmljZSkgYXJlIHVzZWQgYnkuLi4KCj4gKwkJICog dGhlIGJvb3QgUk9NIGFuZCB0aGUgZmlyc3QgMzIgYml0cyBvZiBvb2IgbmVlZCB0byBsaW5rCj4g KwkJICogdG8gdGhlIG5leHQgcGFnZSBhZGRyZXNzIGluIHRoZSBzYW1lIGJsb2NrLgo+ICsJCSAq IENvbmZpZyB0aGUgRUNDIGFsZ29yaXRobSBzdXBwb3J0ZWQgYnkgdGhlIGJvb3QgUk9NLgoKcy9j b25maWcvY29uZmlndXJlLwoKVGhpcyBjb25mbGljdHMgd2l0aCBiYWQgYmxvY2sgbWFya2Vycy4u LgoKPiArCQkgKi8KPiArCQlpZiAocGFnZSA8IHBhZ2VzX3Blcl9ibGsgKiBya25hbmQtPmJvb3Rf YmxrcyAmJgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKQoKPiArCQkgICAgY2hpcC0+b3B0aW9ucyAmIE5BTkRfSVNfQk9PVF9NRURJ VU0pIHsKPiArCQkJYm9vdF9yb21fbW9kZSA9IDE7Cj4gKwkJCWlmIChya25hbmQtPmJvb3RfZWNj ICE9IGVjYy0+c3RyZW5ndGgpCj4gKwkJCQlya19uZmNfaHdfZWNjX3NldHVwKGNoaXAsIGVjYywK PiArCQkJCQkJICAgIHJrbmFuZC0+Ym9vdF9lY2MpOwo+ICsJCX0KPiArCj4gKwkJZm9yIChpID0g MDsgaSA8IGVjYy0+c3RlcHM7IGkrKykgewo+ICsJCQlpZiAoIWkpIHsKPiArCQkJCXJlZyA9IDB4 RkZGRkZGRkY7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlvb2IgPSBjaGlwLT5vb2JfcG9pICsgKGkg LSAxKSAqIE5GQ19TWVNfREFUQV9TSVpFOwo+ICsJCQkJcmVnID0gb29iWzBdIHwgb29iWzFdIDw8 IDggfCBvb2JbMl0gPDwgMTYgfAo+ICsJCQkJICAgICAgb29iWzNdIDw8IDI0Owo+ICsJCQl9Cj4g KwkJCWlmICghaSAmJiBib290X3JvbV9tb2RlKQo+ICsJCQkJcmVnID0gKHBhZ2UgJiAocGFnZXNf cGVyX2JsayAtIDEpKSAqIDQ7Cj4gKwo+ICsJCQlpZiAobmZjLT5jZmctPnR5cGUgPT0gTkZDX1Y5 KQo+ICsJCQkJbmZjLT5vb2JfYnVmW2ldID0gcmVnOwo+ICsJCQllbHNlCj4gKwkJCQluZmMtPm9v Yl9idWZbaSAqIG9vYl9zdGVwIC8gNF0gPSByZWc7CgpQbGVhc2UgdXNlIGJyYWNrZXRzLgoKPiAr CQl9Cj4gKwo+ICsJCWRtYV9kYXRhID0gZG1hX21hcF9zaW5nbGUobmZjLT5kZXYsICh2b2lkICop bmZjLT5wYWdlX2J1ZiwKCkRvIHlvdSBuZWVkIHRoaXMgY2FzdD8KCj4gKwkJCQkJICBtdGQtPndy aXRlc2l6ZSwgRE1BX1RPX0RFVklDRSk7Cj4gKwkJZG1hX29vYiA9IGRtYV9tYXBfc2luZ2xlKG5m Yy0+ZGV2LCBuZmMtPm9vYl9idWYsCj4gKwkJCQkJIGVjYy0+c3RlcHMgKiBvb2Jfc3RlcCwKPiAr CQkJCQkgRE1BX1RPX0RFVklDRSk7Cj4gKwo+ICsJCXJlaW5pdF9jb21wbGV0aW9uKCZuZmMtPmRv bmUpOwo+ICsJCXdyaXRlbChJTlRfRE1BLCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+aW50X2VuX29m Zik7Cj4gKwo+ICsJCXJrX25mY194ZmVyX3N0YXJ0KG5mYywgTkZDX1dSSVRFLCBlY2MtPnN0ZXBz LCBkbWFfZGF0YSwKPiArCQkJCSAgZG1hX29vYik7Cj4gKwkJcmV0ID0gd2FpdF9mb3JfY29tcGxl dGlvbl90aW1lb3V0KCZuZmMtPmRvbmUsCj4gKwkJCQkJCSAgbXNlY3NfdG9famlmZmllcygxMDAp KTsKPiArCQlpZiAoIXJldCkKPiArCQkJZGV2X3dhcm4obmZjLT5kZXYsICJ3cml0ZTogd2FpdCBk bWEgZG9uZSB0aW1lb3V0LlxuIik7Cj4gKwkJLyoKPiArCQkgKiBXaGV0aGVyIHRoZSBETUEgdHJh bnNmZXIgaXMgY29tcGxldGVkIG9yIG5vdC4gVGhlIGRyaXZlcgo+ICsJCSAqIG5lZWRzIHRvIGNo ZWNrIHRoZSBORkNgcyBzdGF0dXMgcmVnaXN0ZXIgdG8gc2VlIGlmIHRoZSBkYXRhCj4gKwkJICog dHJhbnNmZXIgd2FzIGNvbXBsZXRlZC4KPiArCQkgKi8KPiArCQlyZXQgPSBya19uZmNfd2FpdF9m b3JfeGZlcl9kb25lKG5mYyk7Cj4gKwo+ICsJCWRtYV91bm1hcF9zaW5nbGUobmZjLT5kZXYsIGRt YV9kYXRhLCBtdGQtPndyaXRlc2l6ZSwKPiArCQkJCSBETUFfVE9fREVWSUNFKTsKPiArCQlkbWFf dW5tYXBfc2luZ2xlKG5mYy0+ZGV2LCBkbWFfb29iLCBlY2MtPnN0ZXBzICogb29iX3N0ZXAsCj4g KwkJCQkgRE1BX1RPX0RFVklDRSk7Cj4gKwo+ICsJCWlmIChib290X3JvbV9tb2RlICYmIHJrbmFu ZC0+Ym9vdF9lY2MgIT0gZWNjLT5zdHJlbmd0aCkKPiArCQkJcmtfbmZjX2h3X2VjY19zZXR1cChj aGlwLCBlY2MsIGVjYy0+c3RyZW5ndGgpOwo+ICsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCXJldCA9 IC1FSU87Cj4gKwkJCWRldl9lcnIobmZjLT5kZXYsCj4gKwkJCQkid3JpdGU6IHdhaXQgdHJhbnNm ZXIgZG9uZSB0aW1lb3V0LlxuIik7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQlya19uZmNfd3Jp dGVfYnVmKGNoaXAsIGJ1ZiwgbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUpOwo+ICsJfQo+ ICsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSBuYW5kX3Byb2df cGFnZV9lbmRfb3AoY2hpcCk7Cj4gKwo+ICsJLyogRGVzZWxlY3QgdGhlIGN1cnJlbnRseSBzZWxl Y3RlZCB0YXJnZXQuICovCj4gKwlya19uZmNfc2VsZWN0X2NoaXAoY2hpcCwgLTEpOwoKTm90IHN1 cmUgdGhpcyBpcyBuZWVkZWQ/Cgo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgcmtfbmZjX3dyaXRlX3BhZ2VfcmF3KHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGNvbnN0 IHU4ICpidWYsCj4gKwkJCQkgaW50IG9vYl9vbiwgaW50IHBhZ2UpCj4gK3sKPiArCXN0cnVjdCBt dGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7Cj4gKwlzdHJ1Y3QgcmtfbmZjICpuZmMg PSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4gKwl1MzIgaTsKPiArCj4gKwltZW1z ZXQobmZjLT5idWZmZXIsIDB4ZmYsIG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplKTsKPiAr Cj4gKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+ZWNjLnN0ZXBzOyBpKyspIHsKPiArCQlpZiAoYnVm KQoKQ2FuIHRoaXMgY29uZGl0aW9uIGJlIHVubWV0IHJlYWxseT8KCj4gKwkJCW1lbWNweShya19k YXRhX3B0cihjaGlwLCBpKSwgZGF0YV9wdHIoY2hpcCwgYnVmLCBpKSwKPiArCQkJICAgICAgIGNo aXAtPmVjYy5zaXplKTsKPiArCj4gKwkJaWYgKCFpKQo+ICsJCQltZW1jcHkocmtfb29iX3B0cihj aGlwLCBpKSwKPiArCQkJICAgICAgIG9vYl9wdHIoY2hpcCwgY2hpcC0+ZWNjLnN0ZXBzIC0gMSks Cj4gKwkJCSAgICAgICBORkNfU1lTX0RBVEFfU0laRSk7CgpXaGF0IGlzIHRoaXM/Cgo+ICsJCWVs c2UKPiArCQkJbWVtY3B5KHJrX29vYl9wdHIoY2hpcCwgaSksIG9vYl9wdHIoY2hpcCwgaSAtIDEp LAo+ICsJCQkgICAgICAgTkZDX1NZU19EQVRBX1NJWkUpOwo+ICsKPiArCQltZW1jcHkocmtfb29i X3B0cihjaGlwLCBpKSArIE5GQ19TWVNfREFUQV9TSVpFLAo+ICsJCSAgICAgICBvb2JfZWNjX3B0 cihjaGlwLCBpKSwKPiArCQkgICAgICAgY2hpcC0+ZWNjLmJ5dGVzKTsKPiArCX0KPiArCj4gKwly ZXR1cm4gcmtfbmZjX3dyaXRlX3BhZ2UobXRkLCBjaGlwLCBuZmMtPmJ1ZmZlciwgcGFnZSwgMSk7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcmtfbmZjX3dyaXRlX29vYl9zdGQoc3RydWN0IG5hbmRf Y2hpcCAqY2hpcCwgaW50IHBhZ2UpCj4gK3sKPiArCXJldHVybiBya19uZmNfd3JpdGVfcGFnZV9y YXcoY2hpcCwgTlVMTCwgMSwgcGFnZSk7Cj4gK30KCldoYXQgaXMgdGhlIHB1cnBvc2Ugb2YgdGhp cyBpbmRpcmVjdGlvbj8gUGxlYXNlIGdldCByaWQgb2YgaXQuCgo+ICsKPiArc3RhdGljIGludCBy a19uZmNfcmVhZF9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpj aGlwLAo+ICsJCQkgICAgdTMyIGRhdGFfb2ZmcywgdTMyIHJlYWRsZW4sCj4gKwkJCSAgICB1OCAq YnVmLCBpbnQgcGFnZSwgaW50IHJhdykKPiArewo+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFu ZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+ICsJc3RydWN0IHJrX25mY19uYW5kX2NoaXAg KnJrbmFuZCA9IHRvX3JrbmFuZChjaGlwKTsKPiArCXN0cnVjdCBuYW5kX2VjY19jdHJsICplY2Mg PSAmY2hpcC0+ZWNjOwo+ICsJaW50IG9vYl9zdGVwID0gKGVjYy0+Ynl0ZXMgPiA2MCkgPyBORkNf TUFYX09PQl9QRVJfU1RFUCA6Cj4gKwkJCU5GQ19NSU5fT09CX1BFUl9TVEVQOwo+ICsJaW50IHBh Z2VzX3Blcl9ibGsgPSBtdGQtPmVyYXNlc2l6ZSAvIG10ZC0+d3JpdGVzaXplOwo+ICsJZG1hX2Fk ZHJfdCBkbWFfZGF0YSwgZG1hX29vYjsKPiArCWludCByZXQgPSAwLCBpLCBib290X3JvbV9tb2Rl ID0gMDsKPiArCWludCBiaXRmbGlwcyA9IDAsIGJjaF9zdDsKPiArCXU4ICpvb2I7Cj4gKwl1MzIg dG1wOwo+ICsKPiArCW5hbmRfcmVhZF9wYWdlX29wKGNoaXAsIHBhZ2UsIDAsIE5VTEwsIDApOwo+ ICsJaWYgKCFyYXcpIHsKClNhbWUgY29tbWVudCwgcGxlYXNlIHdyaXRlIHR3byBoZWxwZXJzLgoK PiArCQlkbWFfZGF0YSA9IGRtYV9tYXBfc2luZ2xlKG5mYy0+ZGV2LCBuZmMtPnBhZ2VfYnVmLAo+ ICsJCQkJCSAgbXRkLT53cml0ZXNpemUsCj4gKwkJCQkJICBETUFfRlJPTV9ERVZJQ0UpOwo+ICsJ CWRtYV9vb2IgPSBkbWFfbWFwX3NpbmdsZShuZmMtPmRldiwgbmZjLT5vb2JfYnVmLAo+ICsJCQkJ CSBlY2MtPnN0ZXBzICogb29iX3N0ZXAsCj4gKwkJCQkJIERNQV9GUk9NX0RFVklDRSk7Cj4gKwo+ ICsJCS8qCj4gKwkJICogVGhlIGZpcnN0IDgoc29tZSBkZXZpY2VzIGFyZSA0IG9yIDE2KSBibG9j a3MgYXJlIGluIHVzZSBieQoKU2FtZSByZXdvcmRpbmcKCj4gKwkJICogdGhlIGJvb3QgUk9NLgo+ ICsJCSAqIENvbmZpZyB0aGUgRUNDIGFsZ29yaXRobSBzdXBwb3J0ZWQgYnkgdGhlIGJvb3QgUk9N Lgo+ICsJCSAqLwo+ICsJCWlmIChwYWdlIDwgcGFnZXNfcGVyX2JsayAqIHJrbmFuZC0+Ym9vdF9i bGtzICYmCj4gKwkJICAgIGNoaXAtPm9wdGlvbnMgJiBOQU5EX0lTX0JPT1RfTUVESVVNKSB7Cj4g KwkJCWJvb3Rfcm9tX21vZGUgPSAxOwo+ICsJCQlpZiAocmtuYW5kLT5ib290X2VjYyAhPSBlY2Mt PnN0cmVuZ3RoKQo+ICsJCQkJcmtfbmZjX2h3X2VjY19zZXR1cChjaGlwLCBlY2MsCj4gKwkJCQkJ CSAgICBya25hbmQtPmJvb3RfZWNjKTsKPiArCQl9Cj4gKwo+ICsJCXJlaW5pdF9jb21wbGV0aW9u KCZuZmMtPmRvbmUpOwo+ICsJCXdyaXRlbChJTlRfRE1BLCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+ aW50X2VuX29mZik7Cj4gKwkJcmtfbmZjX3hmZXJfc3RhcnQobmZjLCBORkNfUkVBRCwgZWNjLT5z dGVwcywgZG1hX2RhdGEsCj4gKwkJCQkgIGRtYV9vb2IpOwo+ICsJCXJldCA9IHdhaXRfZm9yX2Nv bXBsZXRpb25fdGltZW91dCgmbmZjLT5kb25lLAo+ICsJCQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMo MTAwKSk7Cj4gKwkJaWYgKCFyZXQpCj4gKwkJCWRldl93YXJuKG5mYy0+ZGV2LCAicmVhZDogd2Fp dCBkbWEgZG9uZSB0aW1lb3V0LlxuIik7Cj4gKwkJLyoKPiArCQkgKiBXaGV0aGVyIHRoZSBETUEg dHJhbnNmZXIgaXMgY29tcGxldGVkIG9yIG5vdC4gVGhlIGRyaXZlcgo+ICsJCSAqIG5lZWRzIHRv IGNoZWNrIHRoZSBORkNgcyBzdGF0dXMgcmVnaXN0ZXIgdG8gc2VlIGlmIHRoZSBkYXRhCj4gKwkJ ICogdHJhbnNmZXIgd2FzIGNvbXBsZXRlZC4KPiArCQkgKi8KPiArCQlyZXQgPSBya19uZmNfd2Fp dF9mb3JfeGZlcl9kb25lKG5mYyk7Cj4gKwkJZG1hX3VubWFwX3NpbmdsZShuZmMtPmRldiwgZG1h X2RhdGEsIG10ZC0+d3JpdGVzaXplLAo+ICsJCQkJIERNQV9GUk9NX0RFVklDRSk7Cj4gKwkJZG1h X3VubWFwX3NpbmdsZShuZmMtPmRldiwgZG1hX29vYiwgZWNjLT5zdGVwcyAqIG9vYl9zdGVwLAo+ ICsJCQkJIERNQV9GUk9NX0RFVklDRSk7Cj4gKwo+ICsJCWlmIChyZXQpIHsKPiArCQkJYml0Zmxp cHMgPSAtRUlPOwo+ICsJCQlkZXZfZXJyKG5mYy0+ZGV2LAo+ICsJCQkJInJlYWQ6IHdhaXQgdHJh bnNmZXIgZG9uZSB0aW1lb3V0LlxuIik7Cj4gKwkJCWdvdG8gb3V0Owo+ICsJCX0KPiArCj4gKwkJ Zm9yIChpID0gMTsgaSA8IGVjYy0+c3RlcHM7IGkrKykgewo+ICsJCQlvb2IgPSBjaGlwLT5vb2Jf cG9pICsgKGkgLSAxKSAqIE5GQ19TWVNfREFUQV9TSVpFOwo+ICsJCQlpZiAobmZjLT5jZmctPnR5 cGUgPT0gTkZDX1Y5KQo+ICsJCQkJdG1wID0gbmZjLT5vb2JfYnVmW2ldOwo+ICsJCQllbHNlCj4g KwkJCQl0bXAgPSBuZmMtPm9vYl9idWZbaSAqIG9vYl9zdGVwIC8gNF07Cj4gKwkJCSpvb2IrKyA9 ICh1OCl0bXA7Cj4gKwkJCSpvb2IrKyA9ICh1OCkodG1wID4+IDgpOwo+ICsJCQkqb29iKysgPSAo dTgpKHRtcCA+PiAxNik7Cj4gKwkJCSpvb2IrKyA9ICh1OCkodG1wID4+IDI0KTsKPiArCQl9Cj4g Kwo+ICsJCWZvciAoaSA9IDA7IGkgPCBlY2MtPnN0ZXBzIC8gMjsgaSsrKSB7CgpCcmFja2V0cyBo ZXJlIGFzIHdlbGwgcGxlYXNlCgo+ICsJCQliY2hfc3QgPSByZWFkbF9yZWxheGVkKG5mYy0+cmVn cyArCj4gKwkJCQkJICAgICAgIG5mYy0+Y2ZnLT5iY2hfc3Rfb2ZmICsgaSAqIDQpOwo+ICsJCQlp ZiAoYmNoX3N0ICYgQklUKG5mYy0+Y2ZnLT5lY2MwLmVycl9mbGFnX2JpdCkgfHwKPiArCQkJICAg IGJjaF9zdCAmIEJJVChuZmMtPmNmZy0+ZWNjMS5lcnJfZmxhZ19iaXQpKSB7Cj4gKwkJCQltdGQt PmVjY19zdGF0cy5mYWlsZWQrKzsKPiArCQkJCWJpdGZsaXBzID0gLTE7CgpJIHRoaW5rIHlvdSBz aG91bGQgcmV0dXJuIDAuCgpUaGVuIHRoZSB1cHBlciBsYXllciB3aWxsIGNoZWNrIGZvciBmYWls dXJlcy4KCj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlyZXQgPSBFQ0NfRVJSX0NOVChiY2hfc3QsIG5m Yy0+Y2ZnLT5lY2MwKTsKPiArCQkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSByZXQ7Cj4g KwkJCQliaXRmbGlwcyA9IG1heF90KHUzMiwgYml0ZmxpcHMsIHJldCk7Cj4gKwo+ICsJCQkJcmV0 ID0gRUNDX0VSUl9DTlQoYmNoX3N0LCBuZmMtPmNmZy0+ZWNjMSk7Cj4gKwkJCQltdGQtPmVjY19z dGF0cy5jb3JyZWN0ZWQgKz0gcmV0Owo+ICsJCQkJYml0ZmxpcHMgPSBtYXhfdCh1MzIsIGJpdGZs aXBzLCByZXQpOwo+ICsJCQl9Cj4gKwkJfQo+ICtvdXQ6Cj4gKwkJbWVtY3B5KGJ1ZiwgbmZjLT5w YWdlX2J1ZiwgbXRkLT53cml0ZXNpemUpOwo+ICsKPiArCQlpZiAoYm9vdF9yb21fbW9kZSAmJiBy a25hbmQtPmJvb3RfZWNjICE9IGVjYy0+c3RyZW5ndGgpCj4gKwkJCXJrX25mY19od19lY2Nfc2V0 dXAoY2hpcCwgZWNjLCBlY2MtPnN0cmVuZ3RoKTsKPiArCj4gKwkJaWYgKGJpdGZsaXBzIDwgMCkK PiArCQkJZGV2X2VycihuZmMtPmRldiwgInJlYWQgcGFnZTogJXggZWNjIGVycm9yIVxuIiwgcGFn ZSk7Cj4gKwl9IGVsc2Ugewo+ICsJCXJrX25mY19yZWFkX2J1ZihjaGlwLCBidWYsIG10ZC0+d3Jp dGVzaXplICsgbXRkLT5vb2JzaXplKTsKPiArCX0KPiArCS8qIERlc2VsZWN0IHRoZSBjdXJyZW50 bHkgc2VsZWN0ZWQgdGFyZ2V0LiAqLwo+ICsJcmtfbmZjX3NlbGVjdF9jaGlwKGNoaXAsIC0xKTsK PiArCj4gKwlyZXR1cm4gYml0ZmxpcHM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcmtfbmZjX3dy aXRlX3BhZ2VfaHdlY2Moc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgY29uc3QgdTggKmJ1ZiwKPiAr CQkJCSAgIGludCBvb2Jfb24sIGludCBwYWdlKQo+ICt7Cj4gKwlyZXR1cm4gcmtfbmZjX3dyaXRl X3BhZ2UobmFuZF90b19tdGQoY2hpcCksIGNoaXAsIGJ1ZiwgcGFnZSwgMCk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgcmtfbmZjX3JlYWRfcGFnZV9od2VjYyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlw LCB1OCAqcCwgaW50IG9vYl9vbiwKPiArCQkJCSAgaW50IHBnKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRk X2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOwo+ICsKPiArCXJldHVybiBya19uZmNfcmVh ZF9wYWdlKG10ZCwgY2hpcCwgMCwgbXRkLT53cml0ZXNpemUsIHAsIHBnLCAwKTsKPiArfQo+ICsK PiArc3RhdGljIGludCBya19uZmNfcmVhZF9wYWdlX3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlw LCB1OCAqYnVmLCBpbnQgb29iX29uLAo+ICsJCQkJaW50IHBhZ2UpCj4gK3sKPiArCXN0cnVjdCBt dGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7Cj4gKwlzdHJ1Y3QgcmtfbmZjICpuZmMg PSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4gKwlpbnQgaSwgcmV0Owo+ICsKPiAr CXJldCA9IHJrX25mY19yZWFkX3BhZ2UobXRkLCBjaGlwLCAwLCBtdGQtPndyaXRlc2l6ZSwgbmZj LT5idWZmZXIsCj4gKwkJCSAgICAgICBwYWdlLCAxKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJl dHVybiByZXQ7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGNoaXAtPmVjYy5zdGVwczsgaSsrKSB7 Cj4gKwkJaWYgKCFpKQo+ICsJCQltZW1jcHkob29iX3B0cihjaGlwLCBjaGlwLT5lY2Muc3RlcHMg LSAxKSwKPiArCQkJICAgICAgIHJrX29vYl9wdHIoY2hpcCwgaSksCj4gKwkJCSAgICAgICBORkNf U1lTX0RBVEFfU0laRSk7Cj4gKwkJZWxzZQo+ICsJCQltZW1jcHkob29iX3B0cihjaGlwLCBpIC0g MSksIHJrX29vYl9wdHIoY2hpcCwgaSksCj4gKwkJCSAgICAgICBORkNfU1lTX0RBVEFfU0laRSk7 Cj4gKwo+ICsJCW1lbWNweShvb2JfZWNjX3B0cihjaGlwLCBpKSwKPiArCQkgICAgICAgcmtfb29i X3B0cihjaGlwLCBpKSArIE5GQ19TWVNfREFUQV9TSVpFLAo+ICsJCSAgICAgICBjaGlwLT5lY2Mu Ynl0ZXMpOwo+ICsKPiArCQlpZiAoYnVmKQo+ICsJCQltZW1jcHkoZGF0YV9wdHIoY2hpcCwgYnVm LCBpKSwgcmtfZGF0YV9wdHIoY2hpcCwgaSksCj4gKwkJCSAgICAgICBjaGlwLT5lY2Muc2l6ZSk7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBya19uZmNf cmVhZF9vb2Jfc3RkKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBwYWdlKQo+ICt7Cj4gKwly ZXR1cm4gcmtfbmZjX3JlYWRfcGFnZV9yYXcoY2hpcCwgTlVMTCwgMSwgcGFnZSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBya19uZmNfaHdfaW5pdChzdHJ1Y3QgcmtfbmZjICpuZmMp Cj4gK3sKPiArCS8qIERpc2FibGUgZmxhc2ggd3AuICovCj4gKwl3cml0ZWwoRk1DVExfV1AsIG5m Yy0+cmVncyArIE5GQ19GTUNUTCk7Cj4gKwkvKiBDb25maWcgZGVmYXVsdCB0aW1pbmcgNDBucyBh dCAxNTAgTWh6IG5mYyBjbG9jay4gKi8KPiArCXdyaXRlbCgweDEwODEsIG5mYy0+cmVncyArIE5G Q19GTVdBSVQpOwo+ICsJLyogRGlzYWJsZSByYW5kb21pemVyIGFuZCBETUEuICovCj4gKwl3cml0 ZWwoMCwgbmZjLT5yZWdzICsgbmZjLT5jZmctPnJhbmRtel9vZmYpOwo+ICsJd3JpdGVsKDAsIG5m Yy0+cmVncyArIG5mYy0+Y2ZnLT5kbWFfY2ZnX29mZik7Cj4gKwl3cml0ZWwoRkxDVExfUlNULCBu ZmMtPnJlZ3MgKyBuZmMtPmNmZy0+ZmxjdGxfb2ZmKTsKPiArfQo+ICsKPiArc3RhdGljIGlycXJl dHVybl90IHJrX25mY19pcnEoaW50IGlycSwgdm9pZCAqaWQpCj4gK3sKPiArCXN0cnVjdCBya19u ZmMgKm5mYyA9IGlkOwo+ICsJdTMyIHN0YSwgaWVuOwo+ICsKPiArCXN0YSA9IHJlYWRsX3JlbGF4 ZWQobmZjLT5yZWdzICsgbmZjLT5jZmctPmludF9zdF9vZmYpOwo+ICsJaWVuID0gcmVhZGxfcmVs YXhlZChuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+aW50X2VuX29mZik7Cj4gKwo+ICsJaWYgKCEoc3Rh ICYgaWVuKSkKPiArCQlyZXR1cm4gSVJRX05PTkU7Cj4gKwo+ICsJd3JpdGVsKHN0YSwgbmZjLT5y ZWdzICsgbmZjLT5jZmctPmludF9jbHJfb2ZmKTsKPiArCXdyaXRlbCh+c3RhICYgaWVuLCBuZmMt PnJlZ3MgKyBuZmMtPmNmZy0+aW50X2VuX29mZik7Cj4gKwo+ICsJY29tcGxldGUoJm5mYy0+ZG9u ZSk7Cj4gKwo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJr X25mY19lbmFibGVfY2xrKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJrX25mY19jbGsgKmNs aykKCl9jbGtzIHdpdGggYW4gcyB0byBpbmZvcm0gdGhhdCB0aGVyZSBhcmUgc2V2ZXJhbCBvZiB0 aGVtPwoKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIUlTX0VSUihjbGstPm5mY19jbGsp KSB7Cj4gKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNsay0+bmZjX2Nsayk7Cj4gKwkJaWYg KHJldCkgewo+ICsJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgbmZjIGNsa1xuIik7 Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldCA9IGNsa19wcmVwYXJl X2VuYWJsZShjbGstPmFoYl9jbGspOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIGVuYWJsZSBhaGIgY2xrXG4iKTsKPiArCQlpZiAoIUlTX0VSUihjbGstPm5mY19j bGspKQo+ICsJCQljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrLT5uZmNfY2xrKTsKPiArCQlyZXR1 cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBy a19uZmNfZGlzYWJsZV9jbGsoc3RydWN0IHJrX25mY19jbGsgKmNsaykKCmRpdHRvCgo+ICt7Cj4g KwlpZiAoIUlTX0VSUihjbGstPm5mY19jbGspKQo+ICsJCWNsa19kaXNhYmxlX3VucHJlcGFyZShj bGstPm5mY19jbGspOwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsay0+YWhiX2Nsayk7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgcmtfbmZjX29vYmxheW91dF9mcmVlKHN0cnVjdCBtdGRfaW5m byAqbXRkLCBpbnQgc2VjdGlvbiwKPiArCQkJCSBzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYl9y ZWdpb24pCj4gK3sKPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQp Owo+ICsJc3RydWN0IHJrX25mY19uYW5kX2NoaXAgKnJrbmFuZCA9IHRvX3JrbmFuZChjaGlwKTsK PiArCj4gKwlpZiAoc2VjdGlvbikKPiArCQlyZXR1cm4gLUVSQU5HRTsKPiArCj4gKwkvKgo+ICsJ ICogVGhlIGJlZ2lubmluZyBvZiB0aGUgb29iIGFyZWEgc3RvcmVzIHRoZSByZXNlcnZlZCBkYXRh IGZvciB0aGUgTkZDLAo+ICsJICogdGhlIHNpemUgb2YgdGhlIHJlc2VydmVkIGRhdGEgaXMgTkZD X1NZU19EQVRBX1NJWkUgYnl0ZXMuCj4gKwkgKi8KPiArCW9vYl9yZWdpb24tPmxlbmd0aCA9IHJr bmFuZC0+bWV0YWRhdGFfc2l6ZSAtIE5GQ19TWVNfREFUQV9TSVpFIC0gMjsKPiArCW9vYl9yZWdp b24tPm9mZnNldCA9IE5GQ19TWVNfREFUQV9TSVpFICsgMjsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBya19uZmNfb29ibGF5b3V0X2VjYyhzdHJ1Y3QgbXRkX2luZm8g Km10ZCwgaW50IHNlY3Rpb24sCj4gKwkJCQlzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYl9yZWdp b24pCj4gK3sKPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOwo+ ICsJc3RydWN0IHJrX25mY19uYW5kX2NoaXAgKnJrbmFuZCA9IHRvX3JrbmFuZChjaGlwKTsKPiAr Cj4gKwlpZiAoc2VjdGlvbikKPiArCQlyZXR1cm4gLUVSQU5HRTsKPiArCj4gKwlvb2JfcmVnaW9u LT5vZmZzZXQgPSBya25hbmQtPm1ldGFkYXRhX3NpemU7Cj4gKwlvb2JfcmVnaW9uLT5sZW5ndGgg PSBtdGQtPm9vYnNpemUgLSBvb2JfcmVnaW9uLT5vZmZzZXQ7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgcmtfbmZjX29v YmxheW91dF9vcHMgPSB7Cj4gKwkuZnJlZSA9IHJrX25mY19vb2JsYXlvdXRfZnJlZSwKPiArCS5l Y2MgPSBya19uZmNfb29ibGF5b3V0X2VjYywKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgcmtfbmZj X2VjY19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG10ZF9pbmZvICptdGQpCj4gK3sK PiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOwo+ICsJc3RydWN0 IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+ICsJc3RydWN0 IG5hbmRfZWNjX2N0cmwgKmVjYyA9ICZjaGlwLT5lY2M7Cj4gKwljb25zdCB1OCAqc3RyZW5ndGhz ID0gbmZjLT5jZmctPmVjY19zdHJlbmd0aHM7Cj4gKwl1OCBtYXhfc3RyZW5ndGgsIG5mY19tYXhf c3RyZW5ndGg7Cj4gKwlpbnQgaTsKPiArCj4gKwluZmNfbWF4X3N0cmVuZ3RoID0gbmZjLT5jZmct PmVjY19zdHJlbmd0aHNbMF07Cj4gKwkvKiBJZiBvcHRpb25hbCBkdCBzZXR0aW5ncyBub3QgcHJl c2VudC4gKi8KPiArCWlmICghZWNjLT5zaXplIHx8ICFlY2MtPnN0cmVuZ3RoIHx8Cj4gKwkgICAg ZWNjLT5zdHJlbmd0aCA+IG5mY19tYXhfc3RyZW5ndGgpIHsKPiArCQkvKiBVc2UgZGF0YXNoZWV0 IHJlcXVpcmVtZW50cy4gKi8KPiArCQllY2MtPnN0cmVuZ3RoID0gY2hpcC0+YmFzZS5lY2NyZXEu c3RyZW5ndGg7Cj4gKwkJZWNjLT5zaXplID0gY2hpcC0+YmFzZS5lY2NyZXEuc3RlcF9zaXplOwo+ ICsKPiArCQkvKiBBbGlnbiBFQ0Mgc3RyZW5ndGggYW5kIEVDQyBzaXplLiAqLwo+ICsJCWlmIChj aGlwLT5lY2Muc2l6ZSA8IDEwMjQpIHsKPiArCQkJaWYgKG10ZC0+d3JpdGVzaXplID4gNTEyKSB7 Cj4gKwkJCQljaGlwLT5lY2Muc2l6ZSA9IDEwMjQ7Cj4gKwkJCQljaGlwLT5lY2Muc3RyZW5ndGgg PDw9IDE7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlkZXZfZXJyKGRldiwgIlVuc3VwcG9ydGVkIGVj Yy5zaXplXG4iKTsKPiArCQkJCXJldHVybiAtRUlOVkFMOwo+ICsJCQl9Cj4gKwkJfSBlbHNlIHsK PiArCQkJY2hpcC0+ZWNjLnNpemUgPSAxMDI0Owo+ICsJCX0KPiArCj4gKwkJZWNjLT5zdGVwcyA9 IG10ZC0+d3JpdGVzaXplIC8gZWNjLT5zaXplOwo+ICsKPiArCQkvKgo+ICsJCSAqIEhXIEVDQyBh bHdheXMgcmVxdWVzdHMgdGhlIG51bWJlciBvZiBFQ0MgYnl0ZXMgcGVyIDEwMjQgYnl0ZQo+ICsJ CSAqIGJsb2Nrcy4gNCBCeXRlcyBpcyBvb2IgZm9yIHN5cyBkYXRhLgo+ICsJCSAqLwo+ICsJCW1h eF9zdHJlbmd0aCA9ICgobXRkLT5vb2JzaXplIC8gZWNjLT5zdGVwcykgLSA0KSAqIDggLwo+ICsJ CQkJIGZscyg4ICogMTAyNCk7Cj4gKwkJaWYgKG1heF9zdHJlbmd0aCA+IG5mY19tYXhfc3RyZW5n dGgpCj4gKwkJCW1heF9zdHJlbmd0aCA9IG5mY19tYXhfc3RyZW5ndGg7Cj4gKwo+ICsJCWZvciAo aSA9IDA7IGkgPCA0OyBpKyspIHsKPiArCQkJaWYgKG1heF9zdHJlbmd0aCA+PSBzdHJlbmd0aHNb aV0pCj4gKwkJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWlmIChpID49IDQpIHsKPiArCQkJZGV2 X2VycihuZmMtPmRldiwgIlVuc3VwcG9ydGVkIEVDQyBzdHJlbmd0aFxuIik7Cj4gKwkJCXJldHVy biAtRU9QTk9UU1VQUDsKPiArCQl9Cj4gKwo+ICsJCWVjYy0+c3RyZW5ndGggPSBzdHJlbmd0aHNb aV07Cj4gKwl9Cj4gKwllY2MtPnN0ZXBzID0gbXRkLT53cml0ZXNpemUgLyBlY2MtPnNpemU7Cj4g KwllY2MtPmJ5dGVzID0gRElWX1JPVU5EX1VQKGVjYy0+c3RyZW5ndGggKiBmbHMoOCAqIDEwMjQp LCA4KTsKPiArCS8qIEhXIEVDQyBhbHdheXMgd29yayB3aXRoIGV2ZW4gbnVtYmVycyBvZiBFQ0Mg Ynl0ZXMuICovCj4gKwllY2MtPmJ5dGVzID0gQUxJR04oZWNjLT5ieXRlcywgMik7Cj4gKwo+ICsJ cmtfbmZjX2h3X2VjY19zZXR1cChjaGlwLCBlY2MsIGVjYy0+c3RyZW5ndGgpOwo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJrX25mY19hdHRhY2hfY2hpcChzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9f bXRkKGNoaXApOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gbXRkLT5kZXYucGFyZW50Owo+ICsJ c3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+ICsJ c3RydWN0IHJrX25mY19uYW5kX2NoaXAgKnJrbmFuZCA9IHRvX3JrbmFuZChjaGlwKTsKPiArCXN0 cnVjdCBuYW5kX2VjY19jdHJsICplY2MgPSAmY2hpcC0+ZWNjOwo+ICsJaW50IGxlbjsKPiArCWlu dCByZXQ7Cj4gKwo+ICsJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSB7Cj4g KwkJZGV2X2VycihkZXYsICIxNiBiaXRzIGJ1cyB3aWR0aCBub3Qgc3VwcG9ydGVkIik7Cj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKGVjYy0+bW9kZSAhPSBOQU5EX0VDQ19I VykKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXQgPSBya19uZmNfZWNjX2luaXQoZGV2LCBtdGQp Owo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsJcmtuYW5kLT5zcGFyZV9wZXJfc2Vj dG9yID0gZWNjLT5ieXRlcyArIE5GQ19TWVNfREFUQV9TSVpFOwo+ICsJcmtuYW5kLT5tZXRhZGF0 YV9zaXplID0gTkZDX1NZU19EQVRBX1NJWkUgKiBlY2MtPnN0ZXBzOwo+ICsKPiArCWlmIChya25h bmQtPm1ldGFkYXRhX3NpemUgPCBORkNfU1lTX0RBVEFfU0laRSArIDIpIHsKPiArCQlkZXZfZXJy KGRldiwKPiArCQkJIkRyaXZlciBuZWVkcyBhdCBsZWFzdCAlZCBieXRlcyBvZiBtZXRhIGRhdGFc biIsCj4gKwkJCU5GQ19TWVNfREFUQV9TSVpFICsgMik7Cj4gKwkJcmV0dXJuIC1FSU87Cj4gKwl9 Cj4gKwkvKiBDaGVjayBidWZmZXIgZmlyc3QsIGF2b2lkIGR1cGxpY2F0ZSBhbGxvYyBidWZmZXIu ICovCj4gKwlpZiAobmZjLT5idWZmZXIpCj4gKwkJcmV0dXJuIDA7CgpZb3UgY2FuJ3QgZG8gdGhh dCB0aGlzIHdheTogd2hhdCBpZiB0aGUgZmlyc3QgbXRkIHRvIGJlIHJlZ2lzdGVyZWQgdXNlcwph IHNtYWxsZXIgcGFnZSBzaXplIHRoYW4gdGhlIHNlY29uZD8KCj4gKwo+ICsJbGVuID0gbXRkLT53 cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7Cj4gKwluZmMtPmJ1ZmZlciA9IGRldm1fa3phbGxvYyhk ZXYsIGxlbiwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwo+ICsJaWYgKCFuZmMtPmJ1ZmZlcikKPiAr CQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwluZmMtPnBhZ2VfYnVmID0gbmZjLT5idWZmZXI7Cj4g KwlsZW4gPSBlY2MtPnN0ZXBzICogTkZDX01BWF9PT0JfUEVSX1NURVA7Cj4gKwluZmMtPm9vYl9i dWYgPSBkZXZtX2t6YWxsb2MoZGV2LCBsZW4sIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKPiArCWlm ICghbmZjLT5vb2JfYnVmKSB7Cj4gKwkJbmZjLT5idWZmZXIgPSBOVUxMOwo+ICsJCW5mYy0+b29i X2J1ZiA9IE5VTEw7CgpJIGRvbid0IHRoaW5rIHRoaXMgaXMgbmVlZGVkCgo+ICsJCXJldHVybiAt RU5PTUVNOwo+ICsJfQo+ICsKPiArCWNoaXAtPmVjYy53cml0ZV9wYWdlX3JhdyA9IHJrX25mY193 cml0ZV9wYWdlX3JhdzsKPiArCWNoaXAtPmVjYy53cml0ZV9wYWdlID0gcmtfbmZjX3dyaXRlX3Bh Z2VfaHdlY2M7Cj4gKwljaGlwLT5lY2Mud3JpdGVfb29iX3JhdyA9IHJrX25mY193cml0ZV9vb2Jf c3RkOwo+ICsJY2hpcC0+ZWNjLndyaXRlX29vYiA9IHJrX25mY193cml0ZV9vb2Jfc3RkOwo+ICsK PiArCWNoaXAtPmVjYy5yZWFkX3BhZ2VfcmF3ID0gcmtfbmZjX3JlYWRfcGFnZV9yYXc7Cj4gKwlj aGlwLT5lY2MucmVhZF9wYWdlID0gcmtfbmZjX3JlYWRfcGFnZV9od2VjYzsKPiArCWNoaXAtPmVj Yy5yZWFkX29vYl9yYXcgPSBya19uZmNfcmVhZF9vb2Jfc3RkOwo+ICsJY2hpcC0+ZWNjLnJlYWRf b29iID0gcmtfbmZjX3JlYWRfb29iX3N0ZDsKCkkgZG9uJ3QgbGlrZSB0aGUgX3N0ZCBwcmVmaXgs IGJ1dCBpdCBzaG91bGQgYmUgZ29uZSB3aGVuIHNwbGl0dGluZyB0aGUKZnVuY3Rpb25zIGFzIGFk dmlzZWQuCgo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG5hbmRfY29udHJvbGxlcl9vcHMgcmtfbmZjX2NvbnRyb2xsZXJfb3BzID0gewo+ICsJLmF0dGFj aF9jaGlwID0gcmtfbmZjX2F0dGFjaF9jaGlwLAo+ICsJLmV4ZWNfb3AgPSBya19uZmNfZXhlY19v cCwKPiArCS5zZXR1cF9kYXRhX2ludGVyZmFjZSA9IHJrX25mY19zZXR1cF9kYXRhX2ludGVyZmFj ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgcmtfbmZjX25hbmRfY2hpcF9pbml0KHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IHJrX25mYyAqbmZjLAo+ICsJCQkJIHN0cnVjdCBkZXZpY2Vfbm9k ZSAqbnApCj4gK3sKPiArCXN0cnVjdCBya19uZmNfbmFuZF9jaGlwICpya25hbmQ7Cj4gKwlzdHJ1 Y3QgbmFuZF9jaGlwICpjaGlwOwo+ICsJc3RydWN0IG10ZF9pbmZvICptdGQ7Cj4gKwlpbnQgbnNl bHM7Cj4gKwl1MzIgdG1wOwo+ICsJaW50IHJldDsKPiArCWludCBpOwo+ICsKPiArCWlmICghb2Zf Z2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJm5zZWxzKSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiAr CW5zZWxzIC89IHNpemVvZih1MzIpOwo+ICsJaWYgKCFuc2VscyB8fCBuc2VscyA+IE5GQ19NQVhf TlNFTFMpIHsKPiArCQlkZXZfZXJyKGRldiwgImludmFsaWQgcmVnIHByb3BlcnR5IHNpemUgJWRc biIsIG5zZWxzKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlya25hbmQgPSBk ZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnJrbmFuZCkgKyBuc2VscyAqIHNpemVvZih1OCksCj4g KwkJCSAgICAgIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFya25hbmQpCj4gKwkJcmV0dXJuIC1FTk9N RU07Cj4gKwo+ICsJcmtuYW5kLT5uc2VscyA9IG5zZWxzOwo+ICsJZm9yIChpID0gMDsgaSA8IG5z ZWxzOyBpKyspIHsKPiArCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgInJl ZyIsIGksICZ0bXApOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJZGV2X2VycihkZXYsICJyZWcgcHJv cGVydHkgZmFpbHVyZSA6ICVkXG4iLCByZXQpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiAr Cj4gKwkJaWYgKHRtcCA+PSBORkNfTUFYX05TRUxTKSB7Cj4gKwkJCWRldl9lcnIoZGV2LCAiaW52 YWxpZCBDUzogJXVcbiIsIHRtcCk7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCj4g KwkJaWYgKHRlc3RfYW5kX3NldF9iaXQodG1wLCAmbmZjLT5hc3NpZ25lZF9jcykpIHsKPiArCQkJ ZGV2X2VycihkZXYsICJDUyAldSBhbHJlYWR5IGFzc2lnbmVkXG4iLCB0bXApOwo+ICsJCQlyZXR1 cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ICsJCXJrbmFuZC0+c2Vsc1tpXSA9IHRtcDsKPiArCX0K PiArCj4gKwljaGlwID0gJnJrbmFuZC0+Y2hpcDsKPiArCWNoaXAtPmNvbnRyb2xsZXIgPSAmbmZj LT5jb250cm9sbGVyOwo+ICsKPiArCW5hbmRfc2V0X2ZsYXNoX25vZGUoY2hpcCwgbnApOwo+ICsK PiArCW5hbmRfc2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwLCBuZmMpOwo+ICsKPiArCWNoaXAtPm9w dGlvbnMgfD0gTkFORF9VU0VTX0RNQSB8IE5BTkRfTk9fU1VCUEFHRV9XUklURTsKPiArCWNoaXAt PmJidF9vcHRpb25zID0gTkFORF9CQlRfVVNFX0ZMQVNIIHwgTkFORF9CQlRfTk9fT09COwo+ICsK PiArCS8qIFNldCBkZWZhdWx0IG1vZGUgaW4gY2FzZSBkdCBlbnRyeSBpcyBtaXNzaW5nLiAqLwo+ ICsJY2hpcC0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKPiArCj4gKwltdGQgPSBuYW5kX3RvX210 ZChjaGlwKTsKPiArCW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKPiArCW10ZC0+ZGV2LnBhcmVu dCA9IGRldjsKPiArCj4gKwlpZiAoIW10ZC0+bmFtZSkgewo+ICsJCWRldl9lcnIobmZjLT5kZXYs ICJOQU5EIGxhYmVsIHByb3BlcnR5IGlzIG1hbmRhdG9yeVxuIik7Cj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwl9Cj4gKwo+ICsJbXRkX3NldF9vb2JsYXlvdXQobXRkLCAmcmtfbmZjX29vYmxheW91 dF9vcHMpOwo+ICsJcmtfbmZjX2h3X2luaXQobmZjKTsKPiArCXJldCA9IG5hbmRfc2NhbihjaGlw LCBuc2Vscyk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYgKGNoaXAt Pm9wdGlvbnMgJiBOQU5EX0lTX0JPT1RfTUVESVVNKSB7Cj4gKwkJcmV0ID0gb2ZfcHJvcGVydHlf cmVhZF91MzIobnAsICJyb2NrY2hpcCxib290LWJsa3MiLCAmdG1wKTsKPiArCQlya25hbmQtPmJv b3RfYmxrcyA9IHJldCA/IDAgOiB0bXA7CgpDYW4ndCB5b3UgZ3Vlc3MgdGhpcyBlbnRyeSBrbm93 aW5nIHRoZSBJUCB2ZXJzaW9uL1NvQyB2ZXJzaW9uPwoKPiArCj4gKwkJcmV0ID0gb2ZfcHJvcGVy dHlfcmVhZF91MzIobnAsICJyb2NrY2hpcCxib290LWVjYy1zdHJlbmd0aCIsCj4gKwkJCQkJICAg JnRtcCk7Cj4gKwkJcmtuYW5kLT5ib290X2VjYyA9IHJldCA/IGNoaXAtPmVjYy5zdHJlbmd0aCA6 IHRtcDsKPiArCX0KPiArCj4gKwlyZXQgPSBtdGRfZGV2aWNlX3JlZ2lzdGVyKG10ZCwgTlVMTCwg MCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJtdGQgcGFyc2UgcGFydGl0aW9u IGVycm9yXG4iKTsKPiArCQluYW5kX2NsZWFudXAoY2hpcCk7Cj4gKwkJcmV0dXJuIHJldDsKPiAr CX0KPiArCj4gKwlsaXN0X2FkZF90YWlsKCZya25hbmQtPm5vZGUsICZuZmMtPmNoaXBzKTsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmtfbmZjX2NoaXBzX2NsZWFu dXAoc3RydWN0IHJrX25mYyAqbmZjKQo+ICt7Cj4gKwlzdHJ1Y3QgcmtfbmZjX25hbmRfY2hpcCAq cmtuYW5kLCAqdG1wOwo+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcDsKPiArCWludCByZXQ7Cj4g Kwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJrbmFuZCwgdG1wLCAmbmZjLT5jaGlwcywg bm9kZSkgewo+ICsJCWNoaXAgPSAmcmtuYW5kLT5jaGlwOwo+ICsJCXJldCA9IG10ZF9kZXZpY2Vf dW5yZWdpc3RlcihuYW5kX3RvX210ZChjaGlwKSk7Cj4gKwkJV0FSTl9PTihyZXQpOwo+ICsJCW5h bmRfY2xlYW51cChjaGlwKTsKPiArCQlsaXN0X2RlbCgmcmtuYW5kLT5ub2RlKTsKPiArCX0KPiAr fQo+ICsKPiArc3RhdGljIGludCBya19uZmNfbmFuZF9jaGlwc19pbml0KHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IHJrX25mYyAqbmZjKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w ID0gZGV2LT5vZl9ub2RlLCAqbmFuZF9ucDsKPiArCWludCBuY2hpcHMgPSBvZl9nZXRfY2hpbGRf Y291bnQobnApOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIW5jaGlwcyB8fCBuY2hpcHMgPiBO RkNfTUFYX05TRUxTKSB7Cj4gKwkJZGV2X2VycihuZmMtPmRldiwgIkluY29ycmVjdCBudW1iZXIg b2YgTkFORCBjaGlwcyAoJWQpXG4iLAo+ICsJCQluY2hpcHMpOwo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsJfQo+ICsKPiArCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIG5hbmRfbnApIHsKPiAr CQlyZXQgPSBya19uZmNfbmFuZF9jaGlwX2luaXQoZGV2LCBuZmMsIG5hbmRfbnApOwo+ICsJCWlm IChyZXQpIHsKPiArCQkJb2Zfbm9kZV9wdXQobmFuZF9ucCk7Cj4gKwkJCXJrX25mY19jaGlwc19j bGVhbnVwKG5mYyk7Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IG5mY19jZmcgbmZjX3Y2X2NmZyA9IHsKPiAr CQkudHlwZQkJCT0gTkZDX1Y2LAo+ICsJCS5lY2Nfc3RyZW5ndGhzCQk9IHs2MCwgNDAsIDI0LCAx Nn0sCj4gKwkJLmVjY19jZmdzCQk9IHsKPiArCQkJMHgwMDA0MDAxMSwgMHgwMDA0MDAwMSwgMHgw MDAwMDAxMSwgMHgwMDAwMDAwMSwKPiArCQl9LAo+ICsJCS5mbGN0bF9vZmYJCT0gMHgwOCwKPiAr CQkuYmNoY3RsX29mZgkJPSAweDBDLAo+ICsJCS5kbWFfY2ZnX29mZgkJPSAweDEwLAo+ICsJCS5k bWFfZGF0YV9idWZfb2ZmCT0gMHgxNCwKPiArCQkuZG1hX29vYl9idWZfb2ZmCT0gMHgxOCwKPiAr CQkuZG1hX3N0X29mZgkJPSAweDFDLAo+ICsJCS5iY2hfc3Rfb2ZmCQk9IDB4MjAsCj4gKwkJLnJh bmRtel9vZmYJCT0gMHgxNTAsCj4gKwkJLmludF9lbl9vZmYJCT0gMHgxNkMsCj4gKwkJLmludF9j bHJfb2ZmCQk9IDB4MTcwLAo+ICsJCS5pbnRfc3Rfb2ZmCQk9IDB4MTc0LAo+ICsJCS5vb2IwX29m ZgkJPSAweDIwMCwKPiArCQkub29iMV9vZmYJCT0gMHgyMzAsCj4gKwkJLmVjYzAJCQk9IHsKPiAr CQkJLmVycl9mbGFnX2JpdAk9IDIsCj4gKwkJCS5sb3cJCT0gMywKPiArCQkJLmxvd19tYXNrCT0g MHgxRiwKPiArCQkJLmxvd19ibgkJPSA1LAo+ICsJCQkuaGlnaAkJPSAyNywKPiArCQkJLmhpZ2hf bWFzawk9IDB4MSwKPiArCQl9LAo+ICsJCS5lY2MxCQkJPSB7Cj4gKwkJCS5lcnJfZmxhZ19iaXQJ PSAxNSwKPiArCQkJLmxvdwkJPSAxNiwKPiArCQkJLmxvd19tYXNrCT0gMHgxRiwKPiArCQkJLmxv d19ibgkJPSA1LAo+ICsJCQkuaGlnaAkJPSAyOSwKPiArCQkJLmhpZ2hfbWFzawk9IDB4MSwKPiAr CQl9LAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBuZmNfY2ZnIG5mY192OF9jZmcgPSB7Cj4g KwkJLnR5cGUJCQk9IE5GQ19WOCwKPiArCQkuZWNjX3N0cmVuZ3RocwkJPSB7MTYsIDE2LCAxNiwg MTZ9LAo+ICsJCS5lY2NfY2ZncwkJPSB7Cj4gKwkJCTB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4 MDAwMDAwMDEsIDB4MDAwMDAwMDEsCj4gKwkJfSwKPiArCQkuZmxjdGxfb2ZmCQk9IDB4MDgsCj4g KwkJLmJjaGN0bF9vZmYJCT0gMHgwQywKPiArCQkuZG1hX2NmZ19vZmYJCT0gMHgxMCwKPiArCQku ZG1hX2RhdGFfYnVmX29mZgk9IDB4MTQsCj4gKwkJLmRtYV9vb2JfYnVmX29mZgk9IDB4MTgsCj4g KwkJLmRtYV9zdF9vZmYJCT0gMHgxQywKPiArCQkuYmNoX3N0X29mZgkJPSAweDIwLAo+ICsJCS5y YW5kbXpfb2ZmCQk9IDB4MTUwLAo+ICsJCS5pbnRfZW5fb2ZmCQk9IDB4MTZDLAo+ICsJCS5pbnRf Y2xyX29mZgkJPSAweDE3MCwKPiArCQkuaW50X3N0X29mZgkJPSAweDE3NCwKPiArCQkub29iMF9v ZmYJCT0gMHgyMDAsCj4gKwkJLm9vYjFfb2ZmCQk9IDB4MjMwLAo+ICsJCS5lY2MwCQkJPSB7Cj4g KwkJCS5lcnJfZmxhZ19iaXQJPSAyLAo+ICsJCQkubG93CQk9IDMsCj4gKwkJCS5sb3dfbWFzawk9 IDB4MUYsCj4gKwkJCS5sb3dfYm4JCT0gNSwKPiArCQkJLmhpZ2gJCT0gMjcsCj4gKwkJCS5oaWdo X21hc2sJPSAweDEsCj4gKwkJfSwKPiArCQkuZWNjMQkJCT0gewo+ICsJCQkuZXJyX2ZsYWdfYml0 CT0gMTUsCj4gKwkJCS5sb3cJCT0gMTYsCj4gKwkJCS5sb3dfbWFzawk9IDB4MUYsCj4gKwkJCS5s b3dfYm4JCT0gNSwKPiArCQkJLmhpZ2gJCT0gMjksCj4gKwkJCS5oaWdoX21hc2sJPSAweDEsCj4g KwkJfSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgbmZjX2NmZyBuZmNfdjlfY2ZnID0gewo+ ICsJCS50eXBlCQkJPSBORkNfVjksCj4gKwkJLmVjY19zdHJlbmd0aHMJCT0gezcwLCA2MCwgNDAs IDE2fSwKPiArCQkuZWNjX2NmZ3MJCT0gewo+ICsJCQkweDAwMDAwMDAxLCAweDA2MDAwMDAxLCAw eDA0MDAwMDAxLCAweDAyMDAwMDAxLAo+ICsJCX0sCj4gKwkJLmZsY3RsX29mZgkJPSAweDEwLAo+ ICsJCS5iY2hjdGxfb2ZmCQk9IDB4MjAsCj4gKwkJLmRtYV9jZmdfb2ZmCQk9IDB4MzAsCj4gKwkJ LmRtYV9kYXRhX2J1Zl9vZmYJPSAweDM0LAo+ICsJCS5kbWFfb29iX2J1Zl9vZmYJPSAweDM4LAo+ ICsJCS5kbWFfc3Rfb2ZmCQk9IDB4M0MsCj4gKwkJLmJjaF9zdF9vZmYJCT0gMHgxNTAsCj4gKwkJ LnJhbmRtel9vZmYJCT0gMHgyMDgsCj4gKwkJLmludF9lbl9vZmYJCT0gMHgxMjAsCj4gKwkJLmlu dF9jbHJfb2ZmCQk9IDB4MTI0LAo+ICsJCS5pbnRfc3Rfb2ZmCQk9IDB4MTI4LAo+ICsJCS5vb2Iw X29mZgkJPSAweDIwMCwKPiArCQkub29iMV9vZmYJCT0gMHgyMDQsCj4gKwkJLmVjYzAJCQk9IHsK PiArCQkJLmVycl9mbGFnX2JpdAk9IDIsCj4gKwkJCS5sb3cJCT0gMywKPiArCQkJLmxvd19tYXNr CT0gMHg3RiwKPiArCQkJLmxvd19ibgkJPSA3LAo+ICsJCQkuaGlnaAkJPSAwLAo+ICsJCQkuaGln aF9tYXNrCT0gMHgwLAo+ICsJCX0sCj4gKwkJLmVjYzEJCQk9IHsKPiArCQkJLmVycl9mbGFnX2Jp dAk9IDE4LAo+ICsJCQkubG93CQk9IDE5LAo+ICsJCQkubG93X21hc2sJPSAweDdGLAo+ICsJCQku bG93X2JuCQk9IDcsCj4gKwkJCS5oaWdoCQk9IDAsCj4gKwkJCS5oaWdoX21hc2sJPSAweDAsCj4g KwkJfSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJrX25m Y19pZF90YWJsZVtdID0gewo+ICsJey5jb21wYXRpYmxlID0gInJvY2tjaGlwLHB4MzAtbmZjIiwK PiArCQkuZGF0YSA9ICZuZmNfdjlfY2ZnIH0sCgoJewoJCS5jb21wYXRpYmxlID0KCQkuZGF0YSA9 Cgl9LAoKb3IKCgl7IC5jb21wYXRpYmxlID0gLCAuZGF0YSA9IH0sCgpidXQgbm90OgoKPiArCXsu Y29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazI5MjgtbmZjIiwKPiArCQkuZGF0YSA9ICZuZmNfdjZf Y2ZnIH0sCj4gKwl7LmNvbXBhdGlibGUgPSAicm9ja2NoaXAscnYxMTA4LW5mYyIsCj4gKwkJLmRh dGEgPSAmbmZjX3Y4X2NmZyB9LAo+ICsJeyAvKiBzZW50aW5lbCAqLyB9Cj4gK307Cj4gK01PRFVM RV9ERVZJQ0VfVEFCTEUob2YsIHJrX25mY19pZF90YWJsZSk7Cj4gKwo+ICtzdGF0aWMgaW50IHJr X25mY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3RydWN0IHJrX25mYyAqbmZjOwo+ICsJaW50 IHJldCwgaXJxOwo+ICsKPiArCW5mYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbmZjKSwg R0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIW5mYykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlu YW5kX2NvbnRyb2xsZXJfaW5pdCgmbmZjLT5jb250cm9sbGVyKTsKPiArCUlOSVRfTElTVF9IRUFE KCZuZmMtPmNoaXBzKTsKPiArCW5mYy0+Y29udHJvbGxlci5vcHMgPSAmcmtfbmZjX2NvbnRyb2xs ZXJfb3BzOwo+ICsKPiArCW5mYy0+Y2ZnID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7 Cj4gKwluZmMtPmRldiA9IGRldjsKPiArCj4gKwlpbml0X2NvbXBsZXRpb24oJm5mYy0+ZG9uZSk7 Cj4gKwo+ICsJbmZjLT5yZWdzID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYs IDApOwo+ICsJaWYgKElTX0VSUihuZmMtPnJlZ3MpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihuZmMt PnJlZ3MpOwo+ICsJCWdvdG8gcmVsZWFzZV9uZmM7Cj4gKwl9Cj4gKwo+ICsJbmZjLT5jbGsubmZj X2NsayA9IGRldm1fY2xrX2dldChkZXYsICJuZmMiKTsKPiArCWlmIChJU19FUlIobmZjLT5jbGsu bmZjX2NsaykpIHsKPiArCQlkZXZfZGJnKGRldiwgIm5vIG5mYyBjbGtcbiIpOwo+ICsJCS8qIFNv bWUgZWFybGllciBtb2RlbHMsIHN1Y2ggYXMgcmszMDY2LCBoYXZlIG5vIG5mYyBjbGsuICovCj4g Kwl9Cj4gKwo+ICsJbmZjLT5jbGsuYWhiX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJhaGIiKTsK PiArCWlmIChJU19FUlIobmZjLT5jbGsuYWhiX2NsaykpIHsKPiArCQlkZXZfZXJyKGRldiwgIm5v IGFoYiBjbGtcbiIpOwo+ICsJCXJldCA9IFBUUl9FUlIobmZjLT5jbGsuYWhiX2Nsayk7Cj4gKwkJ Z290byByZWxlYXNlX25mYzsKPiArCX0KPiArCj4gKwlyZXQgPSBya19uZmNfZW5hYmxlX2Nsayhk ZXYsICZuZmMtPmNsayk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gcmVsZWFzZV9uZmM7Cj4gKwo+ ICsJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKPiArCWlmIChpcnEgPCAwKSB7Cj4g KwkJZGV2X2VycihkZXYsICJubyBuZmMgaXJxIHJlc291cmNlXG4iKTsKPiArCQlyZXQgPSAtRUlO VkFMOwo+ICsJCWdvdG8gY2xrX2Rpc2FibGU7Cj4gKwl9Cj4gKwo+ICsJd3JpdGVsKDAsIG5mYy0+ cmVncyArIG5mYy0+Y2ZnLT5pbnRfZW5fb2ZmKTsKPiArCXJldCA9IGRldm1fcmVxdWVzdF9pcnEo ZGV2LCBpcnEsIHJrX25mY19pcnEsIDB4MCwgInJrLW5hbmQiLCBuZmMpOwo+ICsJaWYgKHJldCkg ewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgbmZjIGlycVxuIik7Cj4gKwkJ Z290byBjbGtfZGlzYWJsZTsKPiArCX0KPiArCj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCBuZmMpOwo+ICsKPiArCXJldCA9IHJrX25mY19uYW5kX2NoaXBzX2luaXQoZGV2LCBuZmMpOwo+ ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgTkFORCBjaGlw c1xuIik7Cj4gKwkJZ290byBjbGtfZGlzYWJsZTsKPiArCX0KPiArCXJldHVybiAwOwo+ICsKPiAr Y2xrX2Rpc2FibGU6Cj4gKwlya19uZmNfZGlzYWJsZV9jbGsoJm5mYy0+Y2xrKTsKPiArcmVsZWFz ZV9uZmM6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJrX25mY19yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IHJrX25mYyAq bmZjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gKwo+ICsJcmtfbmZjX2NoaXBzX2Ns ZWFudXAobmZjKTsKPiArCXJrX25mY19kaXNhYmxlX2NsaygmbmZjLT5jbGspOwoKRG9uJ3QgeW91 IGhhdmUgRE1BIHJlc291cmNlcyBhbmQgIWRldm0gYWxsb2NhdGVkIGJ1ZmZlcnMgdG8gZnJlZT8K Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQg cmtfbmZjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgcmtfbmZj ICpuZmMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCj4gKwlya19uZmNfZGlzYWJsZV9jbGso Jm5mYy0+Y2xrKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX21h eWJlX3VudXNlZCBya19uZmNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3Ry dWN0IHJrX25mYyAqbmZjID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlzdHJ1Y3QgcmtfbmZj X25hbmRfY2hpcCAqcmtuYW5kOwo+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcDsKPiArCWludCBy ZXQ7Cj4gKwl1MzIgaTsKPiArCj4gKwlyZXQgPSBya19uZmNfZW5hYmxlX2NsayhkZXYsICZuZmMt PmNsayk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJLyogUmVzZXQgTkFO RCBjaGlwIGlmIFZDQyB3YXMgcG93ZXJlZCBvZmYuICovCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KHJrbmFuZCwgJm5mYy0+Y2hpcHMsIG5vZGUpIHsKPiArCQljaGlwID0gJnJrbmFuZC0+Y2hpcDsK PiArCQlmb3IgKGkgPSAwOyBpIDwgcmtuYW5kLT5uc2VsczsgaSsrKQo+ICsJCQluYW5kX3Jlc2V0 KGNoaXAsIGkpOwoKSSBhc3N1bWUgdGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBjb3JlIGFscmVhZHkg KHBsZWFzZSB2ZXJpZnkgaXQpCgo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcmtfbmZjX3BtX29wcyA9IHsKPiArCVNFVF9T WVNURU1fU0xFRVBfUE1fT1BTKHJrX25mY19zdXNwZW5kLCBya19uZmNfcmVzdW1lKQo+ICt9Owo+ ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmtfbmZjX2RyaXZlciA9IHsKPiAr CS5wcm9iZSA9IHJrX25mY19wcm9iZSwKPiArCS5yZW1vdmUgPSBya19uZmNfcmVtb3ZlLAo+ICsJ LmRyaXZlciA9IHsKPiArCQkubmFtZSA9ICJyb2NrY2hpcC1uZmMiLAo+ICsJCS5vZl9tYXRjaF90 YWJsZSA9IHJrX25mY19pZF90YWJsZSwKPiArCQkucG0gPSAmcmtfbmZjX3BtX29wcywKPiArCX0s Cj4gK307Cj4gKwo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHJrX25mY19kcml2ZXIpOwo+ICsK PiArTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTUlUL0dQTCIpOwo+ICtNT0RVTEVfQVVUSE9SKCJZaWZl bmcgWmhhbyA8eWlmZW5nLnpoYW9Acm9jay1jaGlwcy5jb20+Iik7Cj4gK01PRFVMRV9ERVNDUklQ VElPTigiUm9ja2NoaXAgTmFuZCBGbGFzaCBDb250cm9sbGVyIERyaXZlciIpOwo+ICtNT0RVTEVf QUxJQVMoInBsYXRmb3JtOnJvY2tjaGlwLW5hbmQtY29udHJvbGxlciIpOwoKVGhhbmtzLApNaXF1 w6hsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KTGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo=