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=-11.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 6B56AC4363A for ; Wed, 28 Oct 2020 10:49:19 +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 97A5124697 for ; Wed, 28 Oct 2020 10:49:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="alKpO7zu" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 97A5124697 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=DECG2qN4CPnD1r9ujsi+GS7rHs+GLSgGxItLirtwDQ4=; b=alKpO7zu/z/4dRcLjNEOeUjWn HRKRIdsk5PE0vy4t0MvcPqVA/VSUlGKcffeSmcdjMBcnFJYj/O+uy/W7TUNL5+cPp0uuM/pM1hgpi RQeyBRtwvAKSgAm+bY+5g/fXYWErmXMbKIBLa1nRdjCNZwunUMni31zmMEFAmc1YxzFmXsMB1vNID 5kvguBcTiy/J6EN7GzXHayLljakOeIE+HAu4KrnbpFZdJx8t44muSU4yy17cM6z5s7u5zhnNtngI0 9VxRhGWuHkbutfIfdmC1Gg/hov7Cm1pP/4whtRg4i0MADD3FJ5TXJuSAsb2bhSyMU9g+lI4QPG6bA Caw53vkVg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kXj0Q-0001kP-NI; Wed, 28 Oct 2020 10:48:38 +0000 Received: from relay3-d.mail.gandi.net ([217.70.183.195]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kXj0L-0001jE-5V; Wed, 28 Oct 2020 10:48:35 +0000 X-Originating-IP: 91.224.148.103 Received: from xps13 (unknown [91.224.148.103]) (Authenticated sender: miquel.raynal@bootlin.com) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 9E8F66001A; Wed, 28 Oct 2020 10:48:27 +0000 (UTC) Date: Wed, 28 Oct 2020 11:48:26 +0100 From: Miquel Raynal To: Yifeng Zhao Subject: Re: [PATCH v13 2/8] mtd: rawnand: rockchip: NFC drivers for RK3308, RK2928 and others Message-ID: <20201028114826.6cd6b841@xps13> In-Reply-To: <20201028095326.15562-3-yifeng.zhao@rock-chips.com> References: <20201028095326.15562-1-yifeng.zhao@rock-chips.com> <20201028095326.15562-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-20201028_064833_444741_41509BB4 X-CRM114-Status: GOOD ( 38.03 ) 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 SGkgWWlmZW5nLAoKQSBmZXcgbW9yZSBjb21tZW50cyBiZWxvdywgYnV0IG92ZXJhbGwgbG9va3Mg YmV0dGVyLgoKWWlmZW5nIFpoYW8gPHlpZmVuZy56aGFvQHJvY2stY2hpcHMuY29tPiB3cm90ZSBv biBXZWQsIDI4IE9jdCAyMDIwCjE3OjUzOjI0ICswODAwOgoKPiBUaGlzIGRyaXZlciBzdXBwb3J0 cyBSb2NrY2hpcCBORkMgKE5BTkQgRmxhc2ggQ29udHJvbGxlcikgZm91bmQgb24gUkszMzA4LAo+ IFJLMjkyOCwgUktQWDMwLCBSVjExMDggYW5kIG90aGVyIFNPQ3MuIFRoZSBkcml2ZXIgaGFzIGJl ZW4gdGVzdGVkIHVzaW5nCj4gOC1iaXQgTkFORCBpbnRlcmZhY2Ugb24gdGhlIEFSTSBiYXNlZCBS SzMzMDggcGxhdGZvcm0uCj4gCj4gU3VwcG9ydCBSb2NrY2hpcCBTb0NzIGFuZCBORkMgdmVyc2lv bnM6Cj4gLSBQWDMwIGFuZCBSSzMzMjYoTkZDdjkwMCkuCj4gCUVDQzogMTYvNDAvNjAvNzAgYml0 cy8xS0IuCj4gCUNMT0NLOiBhaGIgYW5kIG5mYy4KPiAtIFJLMzMwOCBhbmQgUlYxMTA4KE5GQ3Y4 MDApLgo+IAlFQ0M6IDE2IGJpdHMvMUtCLgo+IAlDTE9DSzogYWhiIGFuZCBuZmMuCj4gLSBSSzMw MzYgYW5kIFJLMzEyOChORkN2NjIyKS4KPiAJRUNDOiAxNi8yNC80MC82MCBiaXRzLzFLQi4KPiAJ Q0xPQ0s6IGFoYiBhbmQgbmZjLgo+IC0gUkszMDY2LCBSSzMxODggYW5kIFJLMjkyOChORkN2NjAw KS4KPiAJRUNDOiAxNi8yNC80MC82MCBiaXRzLzFLQi4KPiAJQ0xPQ0s6IGFoYi4KPiAKPiBTdXBw b3J0ZWQgZmVhdHVyZXM6Cj4gLSBSZWFkIGZ1bGwgcGFnZSBkYXRhIGJ5IERNQS4KPiAtIFN1cHBv cnQgSFcgRUNDKG9uZSBzdGVwIGlzIDFLQikuCj4gLSBTdXBwb3J0IDIgLSAzMksgcGFnZSBzaXpl Lgo+IC0gU3VwcG9ydCA4IENTKGRlcGVuZCBvbiBTb0NzKQo+IAo+IExpbWl0YXRpb25zOgo+IC0g Tm8gc3VwcG9ydCBmb3IgdGhlIGVjYyBzdGVwIHNpemUgaXMgNTEyLgo+IC0gVW50ZXN0ZWQgb24g c29tZSBTb0NzLgo+IC0gTm8gc3VwcG9ydCBmb3Igc3VicGFnZXMuCj4gLSBObyBzdXBwb3J0IGZv ciB0aGUgYnVpbHRpbiByYW5kb21pemVyLgo+IC0gVGhlIG9yaWdpbmFsIGJhZCBibG9jayBtYXNr IGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZQo+ICAgdGhlIEJCVChi YWQgYmxvY2sgdGFibGUpLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFlpZmVuZyBaaGFvIDx5aWZlbmcu emhhb0Byb2NrLWNoaXBzLmNvbT4KPiAtLS0KPiAKPiBDaGFuZ2VzIGluIHYxMzoKPiAtIFRoZSBu ZmMtPmJ1ZmZlciB3aWxsIHJlYWxsb2Mgd2hpbGUgdGhlIHBhZ2Ugc2l6ZSBvZiB0aGUgc2Vjb25k IG10ZAo+ICAgaXMgbGFyZ2UgdGhhbiB0aGUgZmlyc3Qgb25lLgo+IC0gRml4IGNvZGluZyBzdHls ZS4KPiAtIEZpeCBzb21lIGNvbW1lbnRzLgo+IAo+IENoYW5nZXMgaW4gdjEyOiBOb25lCj4gQ2hh bmdlcyBpbiB2MTE6Cj4gLSBGaXggY29tcGlsZSBlcnJvci4KPiAKPiBDaGFuZ2VzIGluIHYxMDoK PiAtIEZpeCBjb21waWxlIGVycm9yIG9uIG1hc3RlciB2NS45LXJjNy4KPiAKPiBDaGFuZ2VzIGlu IHY5Ogo+IC0gVGhlIG5mYy0+YnVmZmVyIHdpbGwgcmVhbGxvYyB3aGlsZSB0aGUgcGFnZSBzaXpl IG9mIHRoZSBzZWNvbmQgbXRkCj4gICBpcyBsYXJnZSB0aGFuIHRoZSBmaXJzdCBvbmUKPiAtIEZp eCBjb2Rpbmcgc3R5bGUuCj4gLSBSZW1vdmUgc3RydWN0IHJrX25mY19jbGsuCj4gLSBQcmVwZW5k IHNvbWUgZnVuY3Rpb24gd2l0aCBya19uZmNfLgo+IC0gUmVwbGFjZSBmdW5jdGlvbiByZWFkbF9w b2xsX3RpbWVvdXRfYXRvbWljIHdpdGggcmVhZGxfcmVsYXhlZF9wb2xsX3RpbWVvdXQuCj4gLSBS ZW1vdmUgZnVuY3Rpb24gcmtfbmZjX3JlYWRfYnl0ZSBhbmQgcmtfbmZjX3dyaXRlX2J5dGUuCj4g LSBEb24ndCBzZWxlY3QgdGhlIGRpZSBpZiAnY2hlY2tfb25seSA9PSB0cnVlJyBpbiBmdW5jdGlv biBya19uZmNfZXhlY19vcC4KPiAtIE1vZGlmeSBmdW5jdGlvbiBya19uZmNfd3JpdGVfcGFnZSBh bmQgcmtfbmZjX3dyaXRlX3BhZ2VfcmF3Lgo+IAo+IENoYW5nZXMgaW4gdjg6IE5vbmUKPiBDaGFu Z2VzIGluIHY3Ogo+IC0gUmViYXNlIHRvIGxpbnV4LW5leHQuCj4gLSBGaXggY29kaW5nIHN0eWxl Lgo+IC0gUmVzZXJ2ZWQgNCBieXRlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBvb2IgYXJlYS4K PiAtIFBhZ2UgcmF3IHJlYWQgYW5kIHdyaXRlIGluY2x1ZGVkIGVjYyBkYXRhLgo+IAo+IENoYW5n ZXMgaW4gdjY6Cj4gLSBUaGUgbXRkLT5uYW1lIHNldCBieSBOQU5EIGxhYmVsIHByb3BlcnR5Lgo+ IC0gQWRkIHNvbWUgY29tbWVudHMuCj4gLSBGaXggY29tcGlsZSBlcnJvci4KPiAKPiBDaGFuZ2Vz IGluIHY1Ogo+IC0gQWRkIGJvb3QgYmxvY2tzIHN1cHBvcnQgIHdpdGggZGlmZmVyZW50IEVDQyBm b3IgYm9vdFJPTS4KPiAtIFJlbmFtZSByb2NrY2hpcC1uYW5kLmMgdG8gcm9ja2NoaXAtbmFuZC1j b250cm9sbGVyLmMuCj4gLSBVbmlmaWNhdGlvbiBvZiBvdGhlciB2YXJpYWJsZSBuYW1lcy4KPiAt IFJlbW92ZSBzb21lIGNvbXBhdGlibGUgZGVmaW5lLgo+IAo+IENoYW5nZXMgaW4gdjQ6Cj4gLSBE ZWZpbmUgcGxhdGZvcm0gZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSByZWdpc3RlciBvZmZzZXRzLgo+ IC0gVGhlIGNvbXBhdGlibGUgZGVmaW5lIHdpdGggcmt4eF9uZmMuCj4gLSBVc2UgU0VUX1NZU1RF TV9TTEVFUF9QTV9PUFMgdG8gZGVmaW5lIFBNX09QUy4KPiAtIFVzZSBleGVjX29wIGluc3RlYWQg b2YgbGVnYWN5IGhvb2tzLgo+IAo+IENoYW5nZXMgaW4gdjM6IE5vbmUKPiBDaGFuZ2VzIGluIHYy Ogo+IC0gRml4IGNvbXBpbGUgZXJyb3IuCj4gLSBJbmNsdWRlIGhlYWRlciBmaWxlcyBzb3J0ZWQg YnkgZmlsZSBuYW1lLgo+IAo+ICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnICAgICAgICAg ICAgICAgICAgfCAgIDEyICsKPiAgZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUgICAgICAg ICAgICAgICAgIHwgICAgMSArCj4gIC4uLi9tdGQvbmFuZC9yYXcvcm9ja2NoaXAtbmFuZC1jb250 cm9sbGVyLmMgICB8IDE0NjAgKysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCAx NDczIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbXRkL25hbmQv cmF3L3JvY2tjaGlwLW5hbmQtY29udHJvbGxlci5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bXRkL25hbmQvcmF3L0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnCj4gaW5k ZXggNmM0NmYyNWI1N2UyLi4yY2M1MzNlNGUyMzkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tdGQv bmFuZC9yYXcvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcKPiBA QCAtNDYyLDYgKzQ2MiwxOCBAQCBjb25maWcgTVREX05BTkRfQVJBU0FOCj4gIAkgIEVuYWJsZXMg dGhlIGRyaXZlciBmb3IgdGhlIEFyYXNhbiBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgb24KPiAgCSAg WnlucSBVbHRyYXNjYWxlKyBNUFNvQy4KPiAgCj4gK2NvbmZpZyBNVERfTkFORF9ST0NLQ0hJUAo+ ICsJdHJpc3RhdGUgIlJvY2tjaGlwIE5BTkQgY29udHJvbGxlciIKPiArCWRlcGVuZHMgb24gQVJD SF9ST0NLQ0hJUCAmJiBIQVNfSU9NRU0KPiArCWhlbHAKPiArCSAgRW5hYmxlcyBzdXBwb3J0IGZv ciBOQU5EIGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgU29Dcy4KPiArCSAgVGhlcmUgYXJlIGZvdXIg ZGlmZmVyZW50IHZlcnNpb25zIG9mIE5BTkQgRkxBU0ggQ29udHJvbGxlcnMsCj4gKwkgIGluY2x1 ZGluZzoKPiArCSAgICBORkMgdjYwMDogUksyOTI4LCBSSzMwNjYsIFJLMzE4OAo+ICsJICAgIE5G QyB2NjIyOiBSSzMwMzYsIFJLMzEyOAo+ICsJICAgIE5GQyB2ODAwOiBSSzMzMDgsIFJWMTEwOAo+ ICsJICAgIE5GQyB2OTAwOiBQWDMwLCBSSzMzMjYKPiArCj4gIGNvbW1lbnQgIk1pc2MiCj4gIAo+ ICBjb25maWcgTVREX1NNX0NPTU1PTgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jh dy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlCj4gaW5kZXggMjkzMGY1 YjkwMTVkLi45NjBjOWJlMjUyMDQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9yYXcv TWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmlsZQo+IEBAIC01OCw2 ICs1OCw3IEBAIG9iai0kKENPTkZJR19NVERfTkFORF9TVE0zMl9GTUMyKQkrPSBzdG0zMl9mbWMy X25hbmQubwo+ICBvYmotJChDT05GSUdfTVREX05BTkRfTUVTT04pCQkrPSBtZXNvbl9uYW5kLm8K PiAgb2JqLSQoQ09ORklHX01URF9OQU5EX0NBREVOQ0UpCQkrPSBjYWRlbmNlLW5hbmQtY29udHJv bGxlci5vCj4gIG9iai0kKENPTkZJR19NVERfTkFORF9BUkFTQU4pCQkrPSBhcmFzYW4tbmFuZC1j b250cm9sbGVyLm8KPiArb2JqLSQoQ09ORklHX01URF9OQU5EX1JPQ0tDSElQKQkJKz0gcm9ja2No aXAtbmFuZC1jb250cm9sbGVyLm8KPiAgCj4gIG5hbmQtb2JqcyA6PSBuYW5kX2Jhc2UubyBuYW5k X2xlZ2FjeS5vIG5hbmRfYmJ0Lm8gbmFuZF90aW1pbmdzLm8gbmFuZF9pZHMubwo+ICBuYW5kLW9i anMgKz0gbmFuZF9vbmZpLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvcm9j a2NoaXAtbmFuZC1jb250cm9sbGVyLmMgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9yb2NrY2hpcC1u YW5kLWNvbnRyb2xsZXIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAw MDAwLi4yZTk2ZmQzMTQzNDYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9tdGQvbmFu ZC9yYXcvcm9ja2NoaXAtbmFuZC1jb250cm9sbGVyLmMKPiBAQCAtMCwwICsxLDE0NjAgQEAKPiAr Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCj4gKy8qCj4gKyAqIFJv Y2tjaGlwIE5BTkQgRmxhc2ggY29udHJvbGxlciBkcml2ZXIuCj4gKyAqIENvcHlyaWdodCAoQykg MjAyMCBSb2NrY2hpcCBJbmMuCj4gKyAqIEF1dGhvcjogWWlmZW5nIFpoYW8gPHlpZmVuZy56aGFv QHJvY2stY2hpcHMuY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5o Pgo+ICsjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbnRl cnJ1cHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgo+ICsjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9tdGQvcmF3bmFuZC5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPGxp bnV4L29mX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gKwo+ICsvKgo+ICsgKiBORkMgUGFnZSBEYXRhIExh eW91dDoKPiArICoJMTAyNCBCeXRlcyBEYXRhICsgNEJ5dGVzIHN5cyBkYXRhICsgMjhCeXRlc34x MjRCeXRlcyBlY2MgKwo+ICsgKgkxMDI0IEJ5dGVzIERhdGEgKyA0Qnl0ZXMgc3lzIGRhdGEgKyAy OEJ5dGVzfjEyNEJ5dGVzIGVjYyArCj4gKyAqCS4uLi4uLgo+ICsgKiBOQU5EIFBhZ2UgRGF0YSBM YXlvdXQ6Cj4gKyAqCTEwMjQgKiBuIERhdGEgKyBtIEJ5dGVzIG9vYgo+ICsgKiBPcmlnaW5hbCBC YWQgQmxvY2sgTWFzayBMb2NhdGlvbjoKPiArICoJRmlyc3QgYnl0ZSBvZiBvb2Ioc3BhcmUpLgo+ ICsgKiBuYW5kX2NoaXAtPm9vYl9wb2kgZGF0YSBsYXlvdXQ6Cj4gKyAqCTRCeXRlcyBzeXMgZGF0 YSArIC4uLi4gKyA0Qnl0ZXMgc3lzIGRhdGEgKyBlY2MgZGF0YS4KPiArICovCj4gKwo+ICsvKiBO QU5EIGNvbnRyb2xsZXIgcmVnaXN0ZXIgZGVmaW5pdGlvbiAqLwo+ICsjZGVmaW5lIE5GQ19SRUFE CQkJKDApCj4gKyNkZWZpbmUgTkZDX1dSSVRFCQkJKDEpCj4gKwo+ICsjZGVmaW5lIE5GQ19GTUNU TAkJCSgweDAwKQo+ICsjZGVmaW5lICAgRk1DVExfQ0VfU0VMX00JCTB4RkYKPiArI2RlZmluZSAg IEZNQ1RMX0NFX1NFTCh4KQkJKDEgPDwgKHgpKQo+ICsjZGVmaW5lICAgRk1DVExfV1AJCQlCSVQo OCkKPiArI2RlZmluZSAgIEZNQ1RMX1JEWQkJCUJJVCg5KQo+ICsKPiArI2RlZmluZSBORkNfRk1X QUlUCQkJKDB4MDQpCj4gKyNkZWZpbmUgICBGTENUTF9SU1QJCQlCSVQoMCkKPiArI2RlZmluZSAg IEZMQ1RMX1dSCQkJKDEpCS8qIDA6IHJlYWQsIDE6IHdyaXRlICovCj4gKyNkZWZpbmUgICBGTENU TF9YRkVSX1NUCQkJQklUKDIpCj4gKyNkZWZpbmUgICBGTENUTF9YRkVSX0VOCQkJQklUKDMpCj4g KyNkZWZpbmUgICBGTENUTF9BQ09SUkVDVAkJQklUKDEwKSAvKiBBdXRvIGNvcnJlY3QgZXJyb3Ig Yml0cy4gKi8KPiArI2RlZmluZSAgIEZMQ1RMX1hGRVJfUkVBRFkJCUJJVCgyMCkKPiArI2RlZmlu ZSAgIEZMQ1RMX1hGRVJfU0VDVE9SCQkoMjIpCj4gKyNkZWZpbmUgICBGTENUTF9UT0dfRklYCQkJ QklUKDI5KQo+ICsKPiArI2RlZmluZSAgIEJDSENUTF9CQU5LX00JCQkoNyA8PCA1KQo+ICsjZGVm aW5lICAgQkNIQ1RMX0JBTksJCQkoNSkKPiArCj4gKyNkZWZpbmUgICBETUFfU1QJCQlCSVQoMCkK PiArI2RlZmluZSAgIERNQV9XUgkJCSgxKQkvKiAwOiB3cml0ZSwgMTogcmVhZCAqLwo+ICsjZGVm aW5lICAgRE1BX0VOCQkJQklUKDIpCj4gKyNkZWZpbmUgICBETUFfQUhCX1NJWkUJCQkoMykJLyog MDogMSwgMTogMiwgMjogNCAqLwo+ICsjZGVmaW5lICAgRE1BX0JVUlNUX1NJWkUJCSg2KQkvKiAw OiAxLCAzOiA0LCA1OiA4LCA3OiAxNiAqLwo+ICsjZGVmaW5lICAgRE1BX0lOQ19OVU0JCQkoOSkJ LyogMSAtIDE2ICovCj4gKwo+ICsjZGVmaW5lIEVDQ19FUlJfQ05UKHgsIGUpICgoKCh4KSA+PiAo ZSkubG93KSAmIChlKS5sb3dfbWFzaykgfFwKPiArCSAgKCgoeCkgPj4gKGUpLmhpZ2gpICYgKGUp LmhpZ2hfbWFzaykgPDwgKGUpLmxvd19ibikKPiArI2RlZmluZSAgIElOVF9ETUEJCQlCSVQoMCkK PiArI2RlZmluZSBORkNfQkFOSwkJCSgweDgwMCkKPiArI2RlZmluZSBORkNfQkFOS19TVEVQCQkJ KDB4MTAwKQo+ICsjZGVmaW5lICAgQkFOS19EQVRBCQkJKDB4MDApCj4gKyNkZWZpbmUgICBCQU5L X0FERFIJCQkoMHgwNCkKPiArI2RlZmluZSAgIEJBTktfQ01ECQkJKDB4MDgpCj4gKyNkZWZpbmUg TkZDX1NSQU0wCQkJKDB4MTAwMCkKPiArI2RlZmluZSBORkNfU1JBTTEJCQkoMHgxNDAwKQo+ICsj ZGVmaW5lIE5GQ19TUkFNX1NJWkUJCQkoMHg0MDApCj4gKyNkZWZpbmUgTkZDX1RJTUVPVVQJCQko NTAwMDAwKQo+ICsjZGVmaW5lIE5GQ19NQVhfT09CX1BFUl9TVEVQCQkxMjgKPiArI2RlZmluZSBO RkNfTUlOX09PQl9QRVJfU1RFUAkJNjQKPiArI2RlZmluZSBNQVhfREFUQV9TSVpFCQkJMHhGRkZD Cj4gKyNkZWZpbmUgTUFYX0FERFJFU1NfQ1lDCQkJNgo+ICsjZGVmaW5lIE5GQ19FQ0NfTUFYX01P REVTCQk0Cj4gKyNkZWZpbmUgTkZDX01BWF9OU0VMUwkJCSg4KSAvKiBTb21lIFNvY3Mgb25seSBo YXZlIDEgb3IgMiBDU3MuICovCj4gKyNkZWZpbmUgTkZDX1NZU19EQVRBX1NJWkUJCSg0KSAvKiA0 IGJ5dGVzIHN5cyBkYXRhIGluIG9vYiBwcmUgMTAyNCBkYXRhLiovCj4gKyNkZWZpbmUgUktfREVG QVVMVF9DTE9DS19SQVRFCQkoMTUwICogMTAwMCAqIDEwMDApIC8qIDE1MCBNaHogKi8KPiArI2Rl ZmluZSBBQ0NUSU1JTkcoY3NydywgcndwdywgcndjcykJKChjc3J3KSA8PCAxMiB8IChyd3B3KSA8 PCA1IHwgKHJ3Y3MpKQo+ICsKPiArZW51bSBuZmNfdHlwZSB7Cj4gKwlORkNfVjYsCj4gKwlORkNf VjgsCj4gKwlORkNfVjksCj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IHJrX2VjY19jbnRf c3RhdHVzOiByZXByZXNlbnQgYSBlY2Mgc3RhdHVzIGRhdGEuCj4gKyAqIEBlcnJfZmxhZ19iaXQ6 IGVycm9yIGZsYWcgYml0IGluZGV4IGF0IHJlZ2lzdGVyLgo+ICsgKiBAbG93OiBlY2MgY291bnQg bG93IGJpdCBpbmRleCBhdCByZWdpc3Rlci4KPiArICogQGxvd19tYXNrOiBtYXNrIGJpdC4KPiAr ICogQGxvd19ibjogZWNjIGNvdW50IGxvdyBiaXQgbnVtYmVyLgo+ICsgKiBAaGlnaDogZWNjIGNv dW50IGhpZ2ggYml0IGluZGV4IGF0IHJlZ2lzdGVyLgo+ICsgKiBAaGlnaF9tYXNrOiBtYXNrIGJp dAo+ICsgKi8KPiArc3RydWN0IGVjY19jbnRfc3RhdHVzIHsKPiArCXU4IGVycl9mbGFnX2JpdDsK PiArCXU4IGxvdzsKPiArCXU4IGxvd19tYXNrOwo+ICsJdTggbG93X2JuOwo+ICsJdTggaGlnaDsK PiArCXU4IGhpZ2hfbWFzazsKPiArfTsKPiArCj4gKy8qCj4gKyAqIEB0eXBlOiBuZmMgdmVyc2lv bgo+ICsgKiBAZWNjX3N0cmVuZ3RoczogZWNjIHN0cmVuZ3Rocwo+ICsgKiBAZWNjX2NmZ3M6IGVj YyBjb25maWcgdmFsdWVzCj4gKyAqIEBmbGN0bF9vZmY6IEZMQ1RMIHJlZ2lzdGVyIG9mZnNldAo+ ICsgKiBAYmNoY3RsX29mZjogQkNIQ1RMIHJlZ2lzdGVyIG9mZnNldAo+ICsgKiBAZG1hX2RhdGFf YnVmX29mZjogRE1BX0RBVEFfQlVGIHJlZ2lzdGVyIG9mZnNldAo+ICsgKiBAZG1hX29vYl9idWZf b2ZmOiBETUFfT09CX0JVRiByZWdpc3RlciBvZmZzZXQKPiArICogQGRtYV9jZmdfb2ZmOiBETUFf Q0ZHIHJlZ2lzdGVyIG9mZnNldAo+ICsgKiBAZG1hX3N0X29mZjogRE1BX1NUIHJlZ2lzdGVyIG9m ZnNldAo+ICsgKiBAYmNoX3N0X29mZjogQkNHX1NUIHJlZ2lzdGVyIG9mZnNldAo+ICsgKiBAcmFu ZG16X29mZjogUkFORE1aIHJlZ2lzdGVyIG9mZnNldAo+ICsgKiBAaW50X2VuX29mZjogaW50ZXJy dXB0IGVuYWJsZSByZWdpc3RlciBvZmZzZXQKPiArICogQGludF9jbHJfb2ZmOiBpbnRlcnJ1cHQg Y2xlYW4gcmVnaXN0ZXIgb2Zmc2V0Cj4gKyAqIEBpbnRfc3Rfb2ZmOiBpbnRlcnJ1cHQgc3RhdHVz IHJlZ2lzdGVyIG9mZnNldAo+ICsgKiBAb29iMF9vZmY6IG9vYjAgcmVnaXN0ZXIgb2Zmc2V0Cj4g KyAqIEBvb2IxX29mZjogb29iMSByZWdpc3RlciBvZmZzZXQKPiArICogQGVjYzA6IHJlcHJlc2Vu dCBFQ0MwIHN0YXR1cyBkYXRhCj4gKyAqIEBlY2MxOiByZXByZXNlbnQgRUNDMSBzdGF0dXMgZGF0 YQo+ICsgKi8KPiArc3RydWN0IG5mY19jZmcgewo+ICsJZW51bSBuZmNfdHlwZSB0eXBlOwo+ICsJ dTggZWNjX3N0cmVuZ3Roc1tORkNfRUNDX01BWF9NT0RFU107Cj4gKwl1MzIgZWNjX2NmZ3NbTkZD X0VDQ19NQVhfTU9ERVNdOwo+ICsJdTMyIGZsY3RsX29mZjsKPiArCXUzMiBiY2hjdGxfb2ZmOwo+ ICsJdTMyIGRtYV9jZmdfb2ZmOwo+ICsJdTMyIGRtYV9kYXRhX2J1Zl9vZmY7Cj4gKwl1MzIgZG1h X29vYl9idWZfb2ZmOwo+ICsJdTMyIGRtYV9zdF9vZmY7Cj4gKwl1MzIgYmNoX3N0X29mZjsKPiAr CXUzMiByYW5kbXpfb2ZmOwo+ICsJdTMyIGludF9lbl9vZmY7Cj4gKwl1MzIgaW50X2Nscl9vZmY7 Cj4gKwl1MzIgaW50X3N0X29mZjsKPiArCXUzMiBvb2IwX29mZjsKPiArCXUzMiBvb2IxX29mZjsK PiArCXN0cnVjdCBlY2NfY250X3N0YXR1cyBlY2MwOwo+ICsJc3RydWN0IGVjY19jbnRfc3RhdHVz IGVjYzE7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgcmtfbmZjX25hbmRfY2hpcCB7Cj4gKwlzdHJ1Y3Qg bGlzdF9oZWFkIG5vZGU7Cj4gKwlzdHJ1Y3QgbmFuZF9jaGlwIGNoaXA7Cj4gKwo+ICsJdTE2IHNw YXJlX3Blcl9zZWN0b3I7Cj4gKwl1MTYgb29iX2J1Zl9wZXJfc2VjdG9yOwo+ICsJdTE2IGJvb3Rf YmxrczsKPiArCXUxNiBib290X2VjYzsKPiArCXUxNiBtZXRhZGF0YV9zaXplOwo+ICsKPiArCXU4 IG5zZWxzOwo+ICsJdTggc2Vsc1swXTsKPiArCS8qIE5vdGhpbmcgYWZ0ZXIgdGhpcyBmaWVsZC4g Ki8KPiArfTsKPiArCj4gK3N0cnVjdCBya19uZmMgewo+ICsJc3RydWN0IG5hbmRfY29udHJvbGxl ciBjb250cm9sbGVyOwo+ICsJY29uc3Qgc3RydWN0IG5mY19jZmcgKmNmZzsKPiArCXN0cnVjdCBk ZXZpY2UgKmRldjsKPiArCj4gKwlzdHJ1Y3QgY2xrICpuZmNfY2xrOwo+ICsJc3RydWN0IGNsayAq YWhiX2NsazsKPiArCXZvaWQgX19pb21lbSAqcmVnczsKPiArCj4gKwl1MzIgc2VsZWN0ZWRfYmFu azsKPiArCXUzMiBiYW5kX29mZnNldDsKPiArCXUzMiBjdXJfY2xrOwo+ICsKPiArCXN0cnVjdCBj b21wbGV0aW9uIGRvbmU7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGNoaXBzOwo+ICsKPiArCXU4ICpi dWZmZXI7Cj4gKwl1OCAqcGFnZV9idWY7Cj4gKwl1MzIgKm9vYl9idWY7Cj4gKwl1MzIgYnVmZmVy X3NpemU7Cj4gKwl1MzIgb29iX2J1Zl9zaXplOwo+ICsKPiArCXVuc2lnbmVkIGxvbmcgYXNzaWdu ZWRfY3M7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBya19uZmNfbmFuZF9jaGlw ICpya19uZmNfdG9fcmtuYW5kKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXApCj4gK3sKPiArCXJldHVy biBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHJrX25mY19uYW5kX2NoaXAsIGNoaXApOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHU4ICpya19uZmNfYnVmX3RvX2RhdGFfcHRyKHN0cnVjdCBu YW5kX2NoaXAgKmNoaXAsIGNvbnN0IHU4ICpwLCBpbnQgaSkKPiArewo+ICsJcmV0dXJuICh1OCAq KXAgKyBpICogY2hpcC0+ZWNjLnNpemU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdTggKnJr X25mY19idWZfdG9fb29iX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgaSkKPiArewo+ ICsJdTggKnBvaTsKPiArCj4gKwlwb2kgPSBjaGlwLT5vb2JfcG9pICsgaSAqIE5GQ19TWVNfREFU QV9TSVpFOwo+ICsKPiArCXJldHVybiBwb2k7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdTgg KnJrX25mY19idWZfdG9fb29iX2VjY19wdHIoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IGkp Cj4gK3sKPiArCXN0cnVjdCBya19uZmNfbmFuZF9jaGlwICpya25hbmQgPSBya19uZmNfdG9fcmtu YW5kKGNoaXApOwo+ICsJdTggKnBvaTsKPiArCj4gKwlwb2kgPSBjaGlwLT5vb2JfcG9pICsgcmtu YW5kLT5tZXRhZGF0YV9zaXplICsKPiArCSAgICAgIGNoaXAtPmVjYy5ieXRlcyAqIGk7Cj4gKwo+ ICsJcmV0dXJuIHBvaTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgcmtfbmZjX2RhdGFf bGVuKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXApCj4gK3sKPiArCXN0cnVjdCBya19uZmNfbmFuZF9j aGlwICpya25hbmQgPSBya19uZmNfdG9fcmtuYW5kKGNoaXApOwo+ICsKPiArCXJldHVybiBjaGlw LT5lY2Muc2l6ZSArIHJrbmFuZC0+c3BhcmVfcGVyX3NlY3RvcjsKPiArfQo+ICsKPiArc3RhdGlj IGlubGluZSB1OCAqcmtfbmZjX2RhdGFfcHRyKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsICBpbnQg aSkKPiArewo+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRh KGNoaXApOwo+ICsKPiArCXJldHVybiBuZmMtPmJ1ZmZlciArIGkgKiBya19uZmNfZGF0YV9sZW4o Y2hpcCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdTggKnJrX25mY19vb2JfcHRyKHN0cnVj dCBuYW5kX2NoaXAgKmNoaXAsIGludCBpKQo+ICt7Cj4gKwlzdHJ1Y3QgcmtfbmZjICpuZmMgPSBu YW5kX2dldF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4gKwo+ICsJcmV0dXJuIG5mYy0+YnVmZmVy ICsgaSAqIHJrX25mY19kYXRhX2xlbihjaGlwKSArIGNoaXAtPmVjYy5zaXplOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBya19uZmNfc2VsZWN0X2NoaXAoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwg aW50IGNzKQo+ICt7Cj4gKwlzdHJ1Y3QgcmtfbmZjICpuZmMgPSBuYW5kX2dldF9jb250cm9sbGVy X2RhdGEoY2hpcCk7Cj4gKwlzdHJ1Y3QgcmtfbmZjX25hbmRfY2hpcCAqcmtuYW5kID0gcmtfbmZj X3RvX3JrbmFuZChjaGlwKTsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJaWYgKGNzIDwgMCkgewo+ICsJ CW5mYy0+c2VsZWN0ZWRfYmFuayA9IC0xOwo+ICsJCS8qIERlc2VsZWN0IHRoZSBjdXJyZW50bHkg c2VsZWN0ZWQgdGFyZ2V0LiAqLwo+ICsJCXZhbCA9IHJlYWRsX3JlbGF4ZWQobmZjLT5yZWdzICsg TkZDX0ZNQ1RMKTsKPiArCQl2YWwgJj0gfkZNQ1RMX0NFX1NFTF9NOwo+ICsJCXdyaXRlbCh2YWws IG5mYy0+cmVncyArIE5GQ19GTUNUTCk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCW5mYy0+ c2VsZWN0ZWRfYmFuayA9IHJrbmFuZC0+c2Vsc1tjc107Cj4gKwluZmMtPmJhbmRfb2Zmc2V0ID0g TkZDX0JBTksgKyBuZmMtPnNlbGVjdGVkX2JhbmsgKiBORkNfQkFOS19TVEVQOwo+ICsKPiArCXZh bCA9IHJlYWRsX3JlbGF4ZWQobmZjLT5yZWdzICsgTkZDX0ZNQ1RMKTsKPiArCXZhbCAmPSB+Rk1D VExfQ0VfU0VMX007Cj4gKwl2YWwgfD0gRk1DVExfQ0VfU0VMKG5mYy0+c2VsZWN0ZWRfYmFuayk7 Cj4gKwo+ICsJd3JpdGVsKHZhbCwgbmZjLT5yZWdzICsgTkZDX0ZNQ1RMKTsKPiArfQo+ICsKPiAr c3RhdGljIGlubGluZSBpbnQgcmtfbmZjX3dhaXRfaW9yZWFkeShzdHJ1Y3QgcmtfbmZjICpuZmMp Cj4gK3sKPiArCWludCByYzsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJcmMgPSByZWFkbF9yZWxheGVk X3BvbGxfdGltZW91dChuZmMtPnJlZ3MgKyBORkNfRk1DVEwsIHZhbCwKPiArCQkJCQl2YWwgJiBG TUNUTF9SRFksIDEwLCBORkNfVElNRU9VVCk7Cj4gKwo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBya19uZmNfcmVhZF9idWYoc3RydWN0IHJrX25mYyAqbmZjLCB1OCAqYnVm LCBpbnQgbGVuKQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBp KyspCj4gKwkJYnVmW2ldID0gcmVhZGJfcmVsYXhlZChuZmMtPnJlZ3MgKyBuZmMtPmJhbmRfb2Zm c2V0ICsKPiArCQkJCSAgICAgICBCQU5LX0RBVEEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBy a19uZmNfd3JpdGVfYnVmKHN0cnVjdCBya19uZmMgKm5mYywgY29uc3QgdTggKmJ1ZiwgaW50IGxl bikKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQo+ICsJ CXdyaXRlYihidWZbaV0sIG5mYy0+cmVncyArIG5mYy0+YmFuZF9vZmZzZXQgKyBCQU5LX0RBVEEp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJrX25mY19jbWQoc3RydWN0IG5hbmRfY2hpcCAqY2hp cCwKPiArCQkgICAgICBjb25zdCBzdHJ1Y3QgbmFuZF9zdWJvcCAqc3Vib3ApCj4gK3sKPiArCXN0 cnVjdCBya19uZmMgKm5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsKPiArCXVu c2lnbmVkIGludCBpLCBqLCByZW1haW5pbmcsIHN0YXJ0Owo+ICsJaW50IHJlZ19vZmZzZXQgPSBu ZmMtPmJhbmRfb2Zmc2V0Owo+ICsJdTggKmluYnVmID0gTlVMTDsKPiArCWNvbnN0IHU4ICpvdXRi dWY7Cj4gKwl1MzIgY250ID0gMDsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWZvciAoaSA9IDA7 IGkgPCBzdWJvcC0+bmluc3RyczsgaSsrKSB7Cj4gKwkJY29uc3Qgc3RydWN0IG5hbmRfb3BfaW5z dHIgKmluc3RyID0gJnN1Ym9wLT5pbnN0cnNbaV07Cj4gKwo+ICsJCXN3aXRjaCAoaW5zdHItPnR5 cGUpIHsKPiArCQljYXNlIE5BTkRfT1BfQ01EX0lOU1RSOgo+ICsJCQl3cml0ZWIoaW5zdHItPmN0 eC5jbWQub3Bjb2RlLAo+ICsJCQkgICAgICAgbmZjLT5yZWdzICsgcmVnX29mZnNldCArIEJBTktf Q01EKTsKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWNhc2UgTkFORF9PUF9BRERSX0lOU1RSOgo+ICsJ CQlyZW1haW5pbmcgPSBuYW5kX3N1Ym9wX2dldF9udW1fYWRkcl9jeWMoc3Vib3AsIGkpOwo+ICsJ CQlzdGFydCA9IG5hbmRfc3Vib3BfZ2V0X2FkZHJfc3RhcnRfb2ZmKHN1Ym9wLCBpKTsKPiArCj4g KwkJCWZvciAoaiA9IDA7IGogPCA4ICYmIGogKyBzdGFydCA8IHJlbWFpbmluZzsgaisrKQo+ICsJ CQkJd3JpdGViKGluc3RyLT5jdHguYWRkci5hZGRyc1tqICsgc3RhcnRdLAo+ICsJCQkJICAgICAg IG5mYy0+cmVncyArIHJlZ19vZmZzZXQgKyBCQU5LX0FERFIpOwo+ICsJCQlicmVhazsKPiArCj4g KwkJY2FzZSBOQU5EX09QX0RBVEFfSU5fSU5TVFI6Cj4gKwkJY2FzZSBOQU5EX09QX0RBVEFfT1VU X0lOU1RSOgo+ICsJCQlzdGFydCA9IG5hbmRfc3Vib3BfZ2V0X2RhdGFfc3RhcnRfb2ZmKHN1Ym9w LCBpKTsKPiArCQkJY250ID0gbmFuZF9zdWJvcF9nZXRfZGF0YV9sZW4oc3Vib3AsIGkpOwo+ICsK PiArCQkJaWYgKGluc3RyLT50eXBlID09IE5BTkRfT1BfREFUQV9PVVRfSU5TVFIpIHsKPiArCQkJ CW91dGJ1ZiA9IGluc3RyLT5jdHguZGF0YS5idWYub3V0ICsgc3RhcnQ7Cj4gKwkJCQlya19uZmNf d3JpdGVfYnVmKG5mYywgb3V0YnVmLCBjbnQpOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJaW5idWYg PSBpbnN0ci0+Y3R4LmRhdGEuYnVmLmluICsgc3RhcnQ7Cj4gKwkJCQlya19uZmNfcmVhZF9idWYo bmZjLCBpbmJ1ZiwgY250KTsKPiArCQkJfQo+ICsJCQlicmVhazsKPiArCj4gKwkJY2FzZSBOQU5E X09QX1dBSVRSRFlfSU5TVFI6Cj4gKwkJCWlmIChya19uZmNfd2FpdF9pb3JlYWR5KG5mYykgPCAw KSB7Cj4gKwkJCQlyZXQgPSAtRVRJTUVET1VUOwo+ICsJCQkJZGV2X2VycihuZmMtPmRldiwgIklP IG5vdCByZWFkeVxuIik7Cj4gKwkJCX0KPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsKPiAr CXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmFuZF9vcF9wYXJz ZXIgcmtfbmZjX29wX3BhcnNlciA9IE5BTkRfT1BfUEFSU0VSKAo+ICsJTkFORF9PUF9QQVJTRVJf UEFUVEVSTigKPiArCQlya19uZmNfY21kLAo+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9DTURfRUxF TSh0cnVlKSwKPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQUREUl9FTEVNKHRydWUsIE1BWF9BRERS RVNTX0NZQyksCj4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9FTEVNKHRydWUpLAo+ICsJCU5B TkRfT1BfUEFSU0VSX1BBVF9XQUlUUkRZX0VMRU0odHJ1ZSksCj4gKwkJTkFORF9PUF9QQVJTRVJf UEFUX0RBVEFfSU5fRUxFTSh0cnVlLCBNQVhfREFUQV9TSVpFKSksCj4gKwlOQU5EX09QX1BBUlNF Ul9QQVRURVJOKAo+ICsJCXJrX25mY19jbWQsCj4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9F TEVNKHRydWUpLAo+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9BRERSX0VMRU0odHJ1ZSwgTUFYX0FE RFJFU1NfQ1lDKSwKPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfREFUQV9PVVRfRUxFTSh0cnVlLCBN QVhfREFUQV9TSVpFKSwKPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQ01EX0VMRU0odHJ1ZSksCj4g KwkJTkFORF9PUF9QQVJTRVJfUEFUX1dBSVRSRFlfRUxFTSh0cnVlKSksCj4gKyk7Cj4gKwo+ICtz dGF0aWMgaW50IHJrX25mY19leGVjX29wKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCj4gKwkJCSAg Y29uc3Qgc3RydWN0IG5hbmRfb3BlcmF0aW9uICpvcCwKPiArCQkJICBib29sIGNoZWNrX29ubHkp Cj4gK3sKPiArCWlmICghY2hlY2tfb25seSkKPiArCQlya19uZmNfc2VsZWN0X2NoaXAoY2hpcCwg b3AtPmNzKTsKPiArCj4gKwlyZXR1cm4gbmFuZF9vcF9wYXJzZXJfZXhlY19vcChjaGlwLCAmcmtf bmZjX29wX3BhcnNlciwgb3AsCj4gKwkJCQkgICAgICBjaGVja19vbmx5KTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBya19uZmNfc2V0dXBfZGF0YV9pbnRlcmZhY2Uoc3RydWN0IG5hbmRfY2hpcCAq Y2hpcCwgaW50IGNzbGluZSwKPiArCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmFuZF9pbnRlcmZh Y2VfY29uZmlnICpjb25mKQoKUGxlYXNlIGhhdmUgYSBsb29rIGF0IHRoZSByZWNlbnQgY2hhbmdl cyBpbiB0aGUgY29yZSwgdGhpcyBoZWxwZXIKc2hvdWxkIGJlIG5hbWVkICJzZXR1cF9pbnRlcmZh Y2UiLgoKPiArewo+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9k YXRhKGNoaXApOwo+ICsJY29uc3Qgc3RydWN0IG5hbmRfc2RyX3RpbWluZ3MgKnRpbWluZ3M7Cj4g Kwl1MzIgcmF0ZSwgdGMycncsIHRyd3B3LCB0cncyYzsKPiArCXUzMiB0ZW1wOwo+ICsKPiArCWlm IChjc2xpbmUgPT0gTkFORF9EQVRBX0lGQUNFX0NIRUNLX09OTFkpCj4gKwkJcmV0dXJuIDA7Cj4g Kwo+ICsJdGltaW5ncyA9IG5hbmRfZ2V0X3Nkcl90aW1pbmdzKGNvbmYpOwo+ICsJaWYgKElTX0VS Uih0aW1pbmdzKSkKPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwo+ICsJaWYgKElTX0VSUihu ZmMtPm5mY19jbGspKQo+ICsJCXJhdGUgPSBjbGtfZ2V0X3JhdGUobmZjLT5haGJfY2xrKTsKPiAr CWVsc2UKPiArCQlyYXRlID0gY2xrX2dldF9yYXRlKG5mYy0+bmZjX2Nsayk7Cj4gKwo+ICsJLyog VHVybiBjbG9jayByYXRlIGludG8ga0h6LiAqLwo+ICsJcmF0ZSAvPSAxMDAwOwo+ICsKPiArCXRj MnJ3ID0gMTsKPiArCXRydzJjID0gMTsKPiArCj4gKwl0cndwdyA9IG1heCh0aW1pbmdzLT50V0Nf bWluLCB0aW1pbmdzLT50UkNfbWluKSAvIDEwMDA7Cj4gKwl0cndwdyA9IERJVl9ST1VORF9VUCh0 cndwdyAqIHJhdGUsIDEwMDAwMDApOwo+ICsKPiArCXRlbXAgPSB0aW1pbmdzLT50UkVBX21heCAv IDEwMDA7Cj4gKwl0ZW1wID0gRElWX1JPVU5EX1VQKHRlbXAgKiByYXRlLCAxMDAwMDAwKTsKPiAr Cj4gKwlpZiAodHJ3cHcgPCB0ZW1wKQo+ICsJCXRyd3B3ID0gdGVtcDsKPiArCj4gKwkvKgo+ICsJ ICogQUNDT046IGFjY2VzcyB0aW1pbmcgY29udHJvbCByZWdpc3Rlcgo+ICsJICogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsJICogMzE6MTg6IHJlc2VydmVkCj4gKwkg KiAxNzoxMjogY3NydywgY2xvY2sgY3ljbGVzIGZyb20gdGhlIGZhbGxpbmcgZWRnZSBvZiBDU24g dG8gdGhlCj4gKwkgKiAgIGZhbGxpbmcgZWRnZSBvZiBSRG4gb3IgV1JuCj4gKwkgKiAxMToxMTog cmVzZXJ2ZWQKPiArCSAqIDEwOjA1OiByd3B3LCB0aGUgd2lkdGggb2YgUkRuIG9yIFdSbiBpbiBw cm9jZXNzb3IgY2xvY2sgY3ljbGVzCj4gKwkgKiAwNDowMDogcndjcywgY2xvY2sgY3ljbGVzIGZy b20gdGhlIHJpc2luZyBlZGdlIG9mIFJEbiBvciBXUm4gdG8gdGhlCj4gKwkgKiAgIHJpc2luZyBl ZGdlIG9mIENTbgo+ICsJICovCj4gKwl0ZW1wID0gQUNDVElNSU5HKHRjMnJ3LCB0cndwdywgdHJ3 MmMpOwo+ICsJd3JpdGVsKHRlbXAsIG5mYy0+cmVncyArIE5GQ19GTVdBSVQpOwoKWW91IHNob3Vs ZCBzYXZlIHRoZSBjaGlwJ3MgdGltaW5nIGNvbmZpZ3VyYXRpb24gaW5zdGVhZCBvZiB3cml0aW5n IGl0CmhlcmUsIGFuZCBzZXR0aW5nIHRoZSByZWdpc3RlciB2YWx1ZSBkdXJpbmcgY2hpcCBzZWxl Y3Rpb24uIFRoaXMgd2F5CnlvdSBtYXkgaGFuZGxlIHNldmVyYWwgY2hpcHMgd2l0aCBkaWZmZXJl bnQgdGltaW5nCmNvbnN0cmFpbnRzL2NvbmZpZ3VyYXRpb25zLgoKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGludCBya19uZmNfaHdfZWNjX3NldHVwKHN0cnVjdCBuYW5kX2No aXAgKmNoaXAsCj4gKwkJCSAgICAgICBzdHJ1Y3QgbmFuZF9lY2NfY3RybCAqZWNjLAo+ICsJCQkg ICAgICAgdWludDMyX3Qgc3RyZW5ndGgpCj4gK3sKPiArCXN0cnVjdCBya19uZmMgKm5mYyA9IG5h bmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsKPiArCXUzMiByZWcsIGk7Cj4gKwo+ICsJZm9y IChpID0gMDsgaSA8IE5GQ19FQ0NfTUFYX01PREVTOyBpKyspIHsKPiArCQlpZiAoZWNjLT5zdHJl bmd0aCA9PSBuZmMtPmNmZy0+ZWNjX3N0cmVuZ3Roc1tpXSkgewo+ICsJCQlyZWcgPSBuZmMtPmNm Zy0+ZWNjX2NmZ3NbaV07Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoaSA+ PSBORkNfRUNDX01BWF9NT0RFUykKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwl3cml0ZWwo cmVnLCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+YmNoY3RsX29mZik7CgpTYW1lIGhlcmUsIGlmIHlv dSBoYW5kbGUgZGlmZmVyZW50IGNoaXBzLCB0aGV5IG1heSB1c2UgZGlmZmVyZW50IEVDQwpjb25m aWd1cmF0aW9ucywgdGhpcyBzaG91bGQgYmUgaGFuZGxlZC4KCj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHJrX25mY194ZmVyX3N0YXJ0KHN0cnVjdCBya19uZmMgKm5m YywgdTggcncsIHU4IG5fS0IsCj4gKwkJCSAgICAgIGRtYV9hZGRyX3QgZG1hX2RhdGEsIGRtYV9h ZGRyX3QgZG1hX29vYikKPiArewo+ICsJdTMyIGRtYV9yZWcsIGZsX3JlZywgYmNoX3JlZzsKPiAr Cj4gKwlkbWFfcmVnID0gRE1BX1NUIHwgKCghcncpIDw8IERNQV9XUikgfCBETUFfRU4gfCAoMiA8 PCBETUFfQUhCX1NJWkUpIHwKPiArCSAgICAgICg3IDw8IERNQV9CVVJTVF9TSVpFKSB8ICgxNiA8 PCBETUFfSU5DX05VTSk7Cj4gKwo+ICsJZmxfcmVnID0gKHJ3IDw8IEZMQ1RMX1dSKSB8IEZMQ1RM X1hGRVJfRU4gfCBGTENUTF9BQ09SUkVDVCB8Cj4gKwkJIChuX0tCIDw8IEZMQ1RMX1hGRVJfU0VD VE9SKSB8IEZMQ1RMX1RPR19GSVg7Cj4gKwo+ICsJaWYgKG5mYy0+Y2ZnLT50eXBlID09IE5GQ19W NiB8fCBuZmMtPmNmZy0+dHlwZSA9PSBORkNfVjgpIHsKPiArCQliY2hfcmVnID0gcmVhZGxfcmVs YXhlZChuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+YmNoY3RsX29mZik7Cj4gKwkJYmNoX3JlZyA9IChi Y2hfcmVnICYgKH5CQ0hDVExfQkFOS19NKSkgfAo+ICsJCQkgIChuZmMtPnNlbGVjdGVkX2Jhbmsg PDwgQkNIQ1RMX0JBTkspOwo+ICsJCXdyaXRlbChiY2hfcmVnLCBuZmMtPnJlZ3MgKyBuZmMtPmNm Zy0+YmNoY3RsX29mZik7Cj4gKwl9Cj4gKwo+ICsJd3JpdGVsKGRtYV9yZWcsIG5mYy0+cmVncyAr IG5mYy0+Y2ZnLT5kbWFfY2ZnX29mZik7Cj4gKwl3cml0ZWwoKHUzMilkbWFfZGF0YSwgbmZjLT5y ZWdzICsgbmZjLT5jZmctPmRtYV9kYXRhX2J1Zl9vZmYpOwo+ICsJd3JpdGVsKCh1MzIpZG1hX29v YiwgbmZjLT5yZWdzICsgbmZjLT5jZmctPmRtYV9vb2JfYnVmX29mZik7Cj4gKwl3cml0ZWwoZmxf cmVnLCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+ZmxjdGxfb2ZmKTsKPiArCWZsX3JlZyB8PSBGTENU TF9YRkVSX1NUOwo+ICsJd3JpdGVsKGZsX3JlZywgbmZjLT5yZWdzICsgbmZjLT5jZmctPmZsY3Rs X29mZik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcmtfbmZjX3dhaXRfZm9yX3hmZXJfZG9uZShz dHJ1Y3QgcmtfbmZjICpuZmMpCj4gK3sKPiArCXZvaWQgX19pb21lbSAqcHRyOwo+ICsJaW50IHJl dCA9IDA7Cj4gKwl1MzIgcmVnOwo+ICsKPiArCXB0ciA9IG5mYy0+cmVncyArIG5mYy0+Y2ZnLT5m bGN0bF9vZmY7Cj4gKwo+ICsJcmV0ID0gcmVhZGxfcmVsYXhlZF9wb2xsX3RpbWVvdXQocHRyLCBy ZWcsCj4gKwkJCQkJIHJlZyAmIEZMQ1RMX1hGRVJfUkVBRFksCj4gKwkJCQkJIDEwLCBORkNfVElN RU9VVCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBya19uZmNf d3JpdGVfcGFnZV9yYXcoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgY29uc3QgdTggKmJ1ZiwKPiAr CQkJCSBpbnQgb29iX29uLCBpbnQgcGFnZSkKPiArewo+ICsJc3RydWN0IG10ZF9pbmZvICptdGQg PSBuYW5kX3RvX210ZChjaGlwKTsKPiArCXN0cnVjdCBya19uZmMgKm5mYyA9IG5hbmRfZ2V0X2Nv bnRyb2xsZXJfZGF0YShjaGlwKTsKPiArCXN0cnVjdCBuYW5kX2VjY19jdHJsICplY2MgPSAmY2hp cC0+ZWNjOwo+ICsJaW50IHJldCA9IDA7Cj4gKwl1MzIgaTsKPiArCj4gKwlpZiAoIWJ1ZikKPiAr CQltZW1zZXQobmZjLT5idWZmZXIsIDB4ZmYsIG10ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXpl KTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgZWNjLT5zdGVwczsgaSsrKSB7Cj4gKwkJLyogQ29w eSBkYXRhIHRvIG5mYyBidWZmZXIuICovCj4gKwkJaWYgKGJ1ZikKPiArCQkJbWVtY3B5KHJrX25m Y19kYXRhX3B0cihjaGlwLCBpKSwKPiArCQkJICAgICAgIHJrX25mY19idWZfdG9fZGF0YV9wdHIo Y2hpcCwgYnVmLCBpKSwKPiArCQkJICAgICAgIGVjYy0+c2l6ZSk7Cj4gKwkJLyoKPiArCQkgKiBU aGUgZmlyc3QgZm91ciBieXRlcyBvZiBPT0IgYXJlIHJlc2VydmVkIGZvciB0aGUKPiArCQkgKiBi b290IFJPTS4gSW4gc29tZSBkZWJ1Z2dpbmcgY2FzZXMsIHN1Y2ggYXMgd2l0aCBhCj4gKwkJICog cmVhZCwgZXJhc2UgYW5kIHdyaXRlIGJhY2sgdGVzdCB0aGVzZSA0IGJ5dGVzIHN0b3JlZAo+ICsJ CSAqIGluIE9PQiBhbHNvIG5lZWQgdG8gYmUgd3JpdHRlbiBiYWNrLgo+ICsJCSAqLwoKVGhlIGNv bnRyb2xsZXIgZHJpdmVyIHNob3VsZCBub3QgYXJiaXRyYXRlIHRoaXMuIElmIHlvdSBkb24ndCB3 YW50IHRvCmV4cG9zZSB0aGVzZSBieXRlcywgdGhleSBzaG91bGQgbm90IGFwcGVhciAiZnJlZSIg aW4gdGhlIE9PQiBsYXlvdXQsCmJ1dCBhIHJhdyBhY2Nlc3MgKm11c3QqIGJ1dCBhYmxlIHRvIGFk ZHJlc3MgdGhlIGVudGlyZSBwYWdlL29vYi4KCj4gKwkJaWYgKCFpKQo+ICsJCQltZW1jcHkocmtf bmZjX29vYl9wdHIoY2hpcCwgaSksCj4gKwkJCSAgICAgICBya19uZmNfYnVmX3RvX29vYl9wdHIo Y2hpcCwgZWNjLT5zdGVwcyAtIDEpLAo+ICsJCQkgICAgICAgTkZDX1NZU19EQVRBX1NJWkUpOwo+ ICsJCWVsc2UKPiArCQkJbWVtY3B5KHJrX25mY19vb2JfcHRyKGNoaXAsIGkpLAo+ICsJCQkgICAg ICAgcmtfbmZjX2J1Zl90b19vb2JfcHRyKGNoaXAsIGkgLSAxKSwKPiArCQkJICAgICAgIE5GQ19T WVNfREFUQV9TSVpFKTsKPiArCQkvKiBDb3B5IEVDQyBkYXRhIHRvIHRoZSBORkMgYnVmZmVyLiAq Lwo+ICsJCW1lbWNweShya19uZmNfb29iX3B0cihjaGlwLCBpKSArIE5GQ19TWVNfREFUQV9TSVpF LAo+ICsJCSAgICAgICBya19uZmNfYnVmX3RvX29vYl9lY2NfcHRyKGNoaXAsIGkpLAo+ICsJCSAg ICAgICBlY2MtPmJ5dGVzKTsKPiArCX0KPiArCj4gKwluYW5kX3Byb2dfcGFnZV9iZWdpbl9vcChj aGlwLCBwYWdlLCAwLCBOVUxMLCAwKTsKPiArCXJrX25mY193cml0ZV9idWYobmZjLCBidWYsIG10 ZC0+d3JpdGVzaXplICsgbXRkLT5vb2JzaXplKTsKPiArCXJldCA9IG5hbmRfcHJvZ19wYWdlX2Vu ZF9vcChjaGlwKTsKPiArCj4gKwkvKgo+ICsJICogRGVzZWxlY3QgdGhlIGN1cnJlbnRseSBzZWxl Y3RlZCB0YXJnZXQgYWZ0ZXIgdGhlIG9wcyBpcyBkb25lCj4gKwkgKiB0byByZWR1Y2UgdGhlIHBv d2VyIGNvbnN1bXB0aW9uLgo+ICsJICovCj4gKwlya19uZmNfc2VsZWN0X2NoaXAoY2hpcCwgLTEp Owo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcmtfbmZjX3dyaXRl X29vYihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgcGFnZSkKPiArewo+ICsJcmV0dXJuIHJr X25mY193cml0ZV9wYWdlX3JhdyhjaGlwLCBOVUxMLCAxLCBwYWdlKTsKCk5vdCBzdXJlIHRoaXMg aXMgcmVsZXZhbnQuIFlvdSBzaG91bGQgbm90IGRvIHRoYXQsIEkgZ3Vlc3MgdGhlIGNvcmUKd2ls bCBhdXRvbWF0aWNhbGx5IHRha2UgY2FyZSBvZiBpdC4KCj4gK30KPiArCj4gK3N0YXRpYyBpbnQg cmtfbmZjX3dyaXRlX3BhZ2VfaHdlY2Moc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgY29uc3QgdTgg KmJ1ZiwKPiArCQkJCSAgIGludCBvb2Jfb24sIGludCBwYWdlKQo+ICt7Cj4gKwlzdHJ1Y3QgbXRk X2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOwo+ICsJc3RydWN0IHJrX25mYyAqbmZjID0g bmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+ICsJc3RydWN0IHJrX25mY19uYW5kX2No aXAgKnJrbmFuZCA9IHJrX25mY190b19ya25hbmQoY2hpcCk7Cj4gKwlzdHJ1Y3QgbmFuZF9lY2Nf Y3RybCAqZWNjID0gJmNoaXAtPmVjYzsKPiArCWludCBvb2Jfc3RlcCA9IChlY2MtPmJ5dGVzID4g NjApID8gTkZDX01BWF9PT0JfUEVSX1NURVAgOgo+ICsJCQlORkNfTUlOX09PQl9QRVJfU1RFUDsK PiArCWludCBwYWdlc19wZXJfYmxrID0gbXRkLT5lcmFzZXNpemUgLyBtdGQtPndyaXRlc2l6ZTsK PiArCWludCByZXQgPSAwLCBpLCBib290X3JvbV9tb2RlID0gMDsKPiArCWRtYV9hZGRyX3QgZG1h X2RhdGEsIGRtYV9vb2I7Cj4gKwl1MzIgcmVnOwo+ICsJdTggKm9vYjsKPiArCj4gKwluYW5kX3By b2dfcGFnZV9iZWdpbl9vcChjaGlwLCBwYWdlLCAwLCBOVUxMLCAwKTsKPiArCj4gKwltZW1jcHko bmZjLT5wYWdlX2J1ZiwgYnVmLCBtdGQtPndyaXRlc2l6ZSk7Cj4gKwo+ICsJLyoKPiArCSAqIFRo ZSBmaXJzdCBibG9ja3MgKDQsIDggb3IgMTYgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UpIGFyZSB1 c2VkCj4gKwkgKiBieSB0aGUgYm9vdCBST00gYW5kIHRoZSBmaXJzdCAzMiBiaXRzIG9mIE9PQiBu ZWVkIHRvIGxpbmsgdG8KPiArCSAqIHRoZSBuZXh0IHBhZ2UgYWRkcmVzcyBpbiB0aGUgc2FtZSBi bG9jay4gV2UgY2FuJ3QgZGlyZWN0bHkgY29weQo+ICsJICogT09CIGRhdGEgZnJvbSB0aGUgTVRE IGZyYW1ld29yaywgYmVjYXVzZSB0aGlzIHBhZ2UgYWRkcmVzcwo+ICsJICogY29uZmxpY3RzIGZv ciBleGFtcGxlIHdpdGggdGhlIGJhZCBibG9jayBtYXJrZXIgKEJCTSksCj4gKwkgKiBzbyB3ZSBz aGlmdCBhbGwgT09CIGRhdGEgaW5jbHVkaW5nIHRoZSBCQk0gd2l0aCA0IGJ5dGUgcG9zaXRpb25z Lgo+ICsJICogQXMgYSBjb25zZXF1ZW5jZSB0aGUgT09CIHNpemUgYXZhaWxhYmxlIHRvIHRoZSBN VEQgZnJhbWV3b3JrIGlzCj4gKwkgKiBhbHNvIHJlZHVjZWQgd2l0aCA0IGJ5dGVzLgo+ICsJICoK PiArCSAqICAgIFBBMCBQQTEgUEEyIFBBMyB8IEJCTSBPT0IxIE9PQjIgT09CMyB8IC4uLgo+ICsJ ICoKPiArCSAqIElmIGEgTkFORCBpcyBub3QgYSBib290IG1lZGl1bSBvciB0aGUgcGFnZSBpcyBu b3QgYSBib290IGJsb2NrLAo+ICsJICogdGhlIGZpcnN0IDQgYnl0ZXMgYXJlIGxlZnQgdW50b3Vj aGVkIGJ5IHdyaXRpbmcgMHhGRiB0byB0aGVtLgo+ICsJICoKPiArCSAqICAgMHhGRiAweEZGIDB4 RkYgMHhGRiB8IEJCTSBPT0IxIE9PQjIgT09CMyB8IC4uLgo+ICsJICoKPiArCSAqIENvbmZpZ3Vy ZSB0aGUgRUNDIGFsZ29yaXRobSBzdXBwb3J0ZWQgYnkgdGhlIGJvb3QgUk9NLgo+ICsJICovCj4g KwlpZiAoKHBhZ2UgPCBwYWdlc19wZXJfYmxrICogcmtuYW5kLT5ib290X2Jsa3MpICYmCj4gKwkg ICAgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0lTX0JPT1RfTUVESVVNKSkgewo+ICsJCWJvb3Rfcm9t X21vZGUgPSAxOwo+ICsJCWlmIChya25hbmQtPmJvb3RfZWNjICE9IGVjYy0+c3RyZW5ndGgpCj4g KwkJCXJrX25mY19od19lY2Nfc2V0dXAoY2hpcCwgZWNjLAo+ICsJCQkJCSAgICBya25hbmQtPmJv b3RfZWNjKTsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgZWNjLT5zdGVwczsgaSsrKSB7 Cj4gKwkJaWYgKCFpKSB7Cj4gKwkJCXJlZyA9IDB4RkZGRkZGRkY7Cj4gKwkJfSBlbHNlIHsKPiAr CQkJb29iID0gY2hpcC0+b29iX3BvaSArIChpIC0gMSkgKiBORkNfU1lTX0RBVEFfU0laRTsKPiAr CQkJcmVnID0gb29iWzBdIHwgb29iWzFdIDw8IDggfCBvb2JbMl0gPDwgMTYgfAo+ICsJCQkgICAg ICBvb2JbM10gPDwgMjQ7Cj4gKwkJfQo+ICsJCWlmICghaSAmJiBib290X3JvbV9tb2RlKQo+ICsJ CQlyZWcgPSAocGFnZSAmIChwYWdlc19wZXJfYmxrIC0gMSkpICogNDsKPiArCj4gKwkJaWYgKG5m Yy0+Y2ZnLT50eXBlID09IE5GQ19WOSkKPiArCQkJbmZjLT5vb2JfYnVmW2ldID0gcmVnOwo+ICsJ CWVsc2UKPiArCQkJbmZjLT5vb2JfYnVmW2kgKiAob29iX3N0ZXAgLyA0KV0gPSByZWc7Cj4gKwl9 Cj4gKwo+ICsJZG1hX2RhdGEgPSBkbWFfbWFwX3NpbmdsZShuZmMtPmRldiwgKHZvaWQgKiluZmMt PnBhZ2VfYnVmLAo+ICsJCQkJICBtdGQtPndyaXRlc2l6ZSwgRE1BX1RPX0RFVklDRSk7Cj4gKwlk bWFfb29iID0gZG1hX21hcF9zaW5nbGUobmZjLT5kZXYsIG5mYy0+b29iX2J1ZiwKPiArCQkJCSBl Y2MtPnN0ZXBzICogb29iX3N0ZXAsCj4gKwkJCQkgRE1BX1RPX0RFVklDRSk7Cj4gKwo+ICsJcmVp bml0X2NvbXBsZXRpb24oJm5mYy0+ZG9uZSk7Cj4gKwl3cml0ZWwoSU5UX0RNQSwgbmZjLT5yZWdz ICsgbmZjLT5jZmctPmludF9lbl9vZmYpOwo+ICsKPiArCXJrX25mY194ZmVyX3N0YXJ0KG5mYywg TkZDX1dSSVRFLCBlY2MtPnN0ZXBzLCBkbWFfZGF0YSwKPiArCQkJICBkbWFfb29iKTsKPiArCXJl dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmbmZjLT5kb25lLAo+ICsJCQkJCSAgbXNl Y3NfdG9famlmZmllcygxMDApKTsKPiArCWlmICghcmV0KQo+ICsJCWRldl93YXJuKG5mYy0+ZGV2 LCAid3JpdGU6IHdhaXQgZG1hIGRvbmUgdGltZW91dC5cbiIpOwo+ICsJLyoKPiArCSAqIFdoZXRo ZXIgdGhlIERNQSB0cmFuc2ZlciBpcyBjb21wbGV0ZWQgb3Igbm90LiBUaGUgZHJpdmVyCj4gKwkg KiBuZWVkcyB0byBjaGVjayB0aGUgTkZDYHMgc3RhdHVzIHJlZ2lzdGVyIHRvIHNlZSBpZiB0aGUg ZGF0YQo+ICsJICogdHJhbnNmZXIgd2FzIGNvbXBsZXRlZC4KPiArCSAqLwo+ICsJcmV0ID0gcmtf bmZjX3dhaXRfZm9yX3hmZXJfZG9uZShuZmMpOwo+ICsKPiArCWRtYV91bm1hcF9zaW5nbGUobmZj LT5kZXYsIGRtYV9kYXRhLCBtdGQtPndyaXRlc2l6ZSwKPiArCQkJIERNQV9UT19ERVZJQ0UpOwo+ ICsJZG1hX3VubWFwX3NpbmdsZShuZmMtPmRldiwgZG1hX29vYiwgZWNjLT5zdGVwcyAqIG9vYl9z dGVwLAo+ICsJCQkgRE1BX1RPX0RFVklDRSk7Cj4gKwo+ICsJaWYgKGJvb3Rfcm9tX21vZGUgJiYg cmtuYW5kLT5ib290X2VjYyAhPSBlY2MtPnN0cmVuZ3RoKQo+ICsJCXJrX25mY19od19lY2Nfc2V0 dXAoY2hpcCwgZWNjLCBlY2MtPnN0cmVuZ3RoKTsKPiArCj4gKwlpZiAocmV0KSB7Cj4gKwkJcmV0 ID0gLUVJTzsKPiArCQlkZXZfZXJyKG5mYy0+ZGV2LAo+ICsJCQkid3JpdGU6IHdhaXQgdHJhbnNm ZXIgZG9uZSB0aW1lb3V0LlxuIik7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g cmV0Owo+ICsKPiArCXJldCA9IG5hbmRfcHJvZ19wYWdlX2VuZF9vcChjaGlwKTsKPiArCj4gKwkv Kgo+ICsJICogRGVzZWxlY3QgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0YXJnZXQgYWZ0ZXIgdGhl IG9wcyBpcyBkb25lCj4gKwkgKiB0byByZWR1Y2UgdGhlIHBvd2VyIGNvbnN1bXB0aW9uLgo+ICsJ ICovCgpJZiB5b3UgZm9yY2UgdGhpcyBkZXNlbGVjdGlvbiwgeW91ciBzaG91bGQgcHJvYmFibHkg ZG8gaXQgZXZlbiBpbiBjYXNlCm9mIGVycm9yPwoKPiArCXJrX25mY19zZWxlY3RfY2hpcChjaGlw LCAtMSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBya19uZmNf cmVhZF9wYWdlX3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1OCAqYnVmLCBpbnQgb29iX29u LAo+ICsJCQkJaW50IHBhZ2UpCj4gK3sKPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90 b19tdGQoY2hpcCk7Cj4gKwlzdHJ1Y3QgcmtfbmZjICpuZmMgPSBuYW5kX2dldF9jb250cm9sbGVy X2RhdGEoY2hpcCk7Cj4gKwlzdHJ1Y3QgbmFuZF9lY2NfY3RybCAqZWNjID0gJmNoaXAtPmVjYzsK PiArCWludCBpOwo+ICsKPiArCW5hbmRfcmVhZF9wYWdlX29wKGNoaXAsIHBhZ2UsIDAsIE5VTEws IDApOwo+ICsJcmtfbmZjX3JlYWRfYnVmKG5mYywgbmZjLT5idWZmZXIsIG10ZC0+d3JpdGVzaXpl ICsgbXRkLT5vb2JzaXplKTsKPiArCj4gKwkvKgo+ICsJICogRGVzZWxlY3QgdGhlIGN1cnJlbnRs eSBzZWxlY3RlZCB0YXJnZXQgYWZ0ZXIgdGhlIG9wcyBpcyBkb25lCj4gKwkgKiB0byByZWR1Y2Ug dGhlIHBvd2VyIGNvbnN1bXB0aW9uLgo+ICsJICovCj4gKwlya19uZmNfc2VsZWN0X2NoaXAoY2hp cCwgLTEpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBlY2MtPnN0ZXBzOyBpKyspIHsKPiArCQkv Kgo+ICsJCSAqIFRoZSBmaXJzdCBmb3VyIGJ5dGVzIG9mIE9PQiBhcmUgcmVzZXJ2ZWQgZm9yIHRo ZQo+ICsJCSAqIGJvb3QgUk9NLiBJbiBzb21lIGRlYnVnZ2luZyBjYXNlcywgc3VjaCBhcyB3aXRo IGEgcmVhZCwKPiArCQkgKiBlcmFzZSBhbmQgd3JpdGUgYmFjayB0ZXN0LCB0aGVzZSA0IGJ5dGVz IGFsc28gbXVzdCBiZQo+ICsJCSAqIHNhdmVkIHNvbWV3aGVyZSwgb3RoZXJ3aXNlIHRoaXMgaW5m b3JtYXRpb24gd2lsbCBiZQo+ICsJCSAqIGxvc3QgZHVyaW5nIGEgd3JpdGUgYmFjay4KCkRpdHRv Cgo+ICsJCSAqLwo+ICsJCWlmICghaSkKPiArCQkJbWVtY3B5KHJrX25mY19idWZfdG9fb29iX3B0 cihjaGlwLCBlY2MtPnN0ZXBzIC0gMSksCj4gKwkJCSAgICAgICBya19uZmNfb29iX3B0cihjaGlw LCBpKSwKPiArCQkJICAgICAgIE5GQ19TWVNfREFUQV9TSVpFKTsKPiArCQllbHNlCj4gKwkJCW1l bWNweShya19uZmNfYnVmX3RvX29vYl9wdHIoY2hpcCwgaSAtIDEpLAo+ICsJCQkgICAgICAgcmtf bmZjX29vYl9wdHIoY2hpcCwgaSksCj4gKwkJCSAgICAgICBORkNfU1lTX0RBVEFfU0laRSk7Cj4g KwkJLyogQ29weSBFQ0MgZGF0YSBmcm9tIHRoZSBORkMgYnVmZmVyLiAqLwo+ICsJCW1lbWNweShy a19uZmNfYnVmX3RvX29vYl9lY2NfcHRyKGNoaXAsIGkpLAo+ICsJCSAgICAgICBya19uZmNfb29i X3B0cihjaGlwLCBpKSArIE5GQ19TWVNfREFUQV9TSVpFLAo+ICsJCSAgICAgICBlY2MtPmJ5dGVz KTsKPiArCQkvKiBDb3B5IGRhdGEgZnJvbSB0aGUgTkZDIGJ1ZmZlci4gKi8KPiArCQlpZiAoYnVm KQo+ICsJCQltZW1jcHkocmtfbmZjX2J1Zl90b19kYXRhX3B0cihjaGlwLCBidWYsIGkpLAo+ICsJ CQkgICAgICAgcmtfbmZjX2RhdGFfcHRyKGNoaXAsIGkpLAo+ICsJCQkgICAgICAgZWNjLT5zaXpl KTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBya19uZmNf cmVhZF9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IHBhZ2UpCj4gK3sKPiArCXJldHVy biBya19uZmNfcmVhZF9wYWdlX3JhdyhjaGlwLCBOVUxMLCAxLCBwYWdlKTsKCkRpdHRvCgo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHJrX25mY19yZWFkX3BhZ2VfaHdlY2Moc3RydWN0IG5hbmRfY2hp cCAqY2hpcCwgdTggKmJ1ZiwgaW50IG9vYl9vbiwKPiArCQkJCSAgaW50IHBhZ2UpCj4gK3sKPiAr CXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7Cj4gKwlzdHJ1Y3Qgcmtf bmZjICpuZmMgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4gKwlzdHJ1Y3Qgcmtf bmZjX25hbmRfY2hpcCAqcmtuYW5kID0gcmtfbmZjX3RvX3JrbmFuZChjaGlwKTsKPiArCXN0cnVj dCBuYW5kX2VjY19jdHJsICplY2MgPSAmY2hpcC0+ZWNjOwo+ICsJaW50IG9vYl9zdGVwID0gKGVj Yy0+Ynl0ZXMgPiA2MCkgPyBORkNfTUFYX09PQl9QRVJfU1RFUCA6Cj4gKwkJCU5GQ19NSU5fT09C X1BFUl9TVEVQOwo+ICsJaW50IHBhZ2VzX3Blcl9ibGsgPSBtdGQtPmVyYXNlc2l6ZSAvIG10ZC0+ d3JpdGVzaXplOwo+ICsJZG1hX2FkZHJfdCBkbWFfZGF0YSwgZG1hX29vYjsKPiArCWludCByZXQg PSAwLCBpLCBib290X3JvbV9tb2RlID0gMDsKPiArCWludCBiaXRmbGlwcyA9IDAsIGJjaF9zdDsK PiArCXU4ICpvb2I7Cj4gKwl1MzIgdG1wOwo+ICsKPiArCW5hbmRfcmVhZF9wYWdlX29wKGNoaXAs IHBhZ2UsIDAsIE5VTEwsIDApOwo+ICsKPiArCWRtYV9kYXRhID0gZG1hX21hcF9zaW5nbGUobmZj LT5kZXYsIG5mYy0+cGFnZV9idWYsCj4gKwkJCQkgIG10ZC0+d3JpdGVzaXplLAo+ICsJCQkJICBE TUFfRlJPTV9ERVZJQ0UpOwo+ICsJZG1hX29vYiA9IGRtYV9tYXBfc2luZ2xlKG5mYy0+ZGV2LCBu ZmMtPm9vYl9idWYsCj4gKwkJCQkgZWNjLT5zdGVwcyAqIG9vYl9zdGVwLAo+ICsJCQkJIERNQV9G Uk9NX0RFVklDRSk7Cj4gKwo+ICsJLyoKPiArCSAqIFRoZSBmaXJzdCBibG9ja3MgKDQsIDggb3Ig MTYgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UpCj4gKwkgKiBhcmUgdXNlZCBieSB0aGUgYm9vdCBS T00uCj4gKwkgKiBDb25maWd1cmUgdGhlIEVDQyBhbGdvcml0aG0gc3VwcG9ydGVkIGJ5IHRoZSBi b290IFJPTS4KPiArCSAqLwo+ICsJaWYgKChwYWdlIDwgcGFnZXNfcGVyX2JsayAqIHJrbmFuZC0+ Ym9vdF9ibGtzKSAmJgo+ICsJICAgIChjaGlwLT5vcHRpb25zICYgTkFORF9JU19CT09UX01FRElV TSkpIHsKPiArCQlib290X3JvbV9tb2RlID0gMTsKPiArCQlpZiAocmtuYW5kLT5ib290X2VjYyAh PSBlY2MtPnN0cmVuZ3RoKQo+ICsJCQlya19uZmNfaHdfZWNjX3NldHVwKGNoaXAsIGVjYywKPiAr CQkJCQkgICAgcmtuYW5kLT5ib290X2VjYyk7Cj4gKwl9Cj4gKwo+ICsJcmVpbml0X2NvbXBsZXRp b24oJm5mYy0+ZG9uZSk7Cj4gKwl3cml0ZWwoSU5UX0RNQSwgbmZjLT5yZWdzICsgbmZjLT5jZmct PmludF9lbl9vZmYpOwo+ICsJcmtfbmZjX3hmZXJfc3RhcnQobmZjLCBORkNfUkVBRCwgZWNjLT5z dGVwcywgZG1hX2RhdGEsCj4gKwkJCSAgZG1hX29vYik7Cj4gKwlyZXQgPSB3YWl0X2Zvcl9jb21w bGV0aW9uX3RpbWVvdXQoJm5mYy0+ZG9uZSwKPiArCQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoMTAw KSk7Cj4gKwlpZiAoIXJldCkKPiArCQlkZXZfd2FybihuZmMtPmRldiwgInJlYWQ6IHdhaXQgZG1h IGRvbmUgdGltZW91dC5cbiIpOwo+ICsJLyoKPiArCSAqIFdoZXRoZXIgdGhlIERNQSB0cmFuc2Zl ciBpcyBjb21wbGV0ZWQgb3Igbm90LiBUaGUgZHJpdmVyCj4gKwkgKiBuZWVkcyB0byBjaGVjayB0 aGUgTkZDYHMgc3RhdHVzIHJlZ2lzdGVyIHRvIHNlZSBpZiB0aGUgZGF0YQo+ICsJICogdHJhbnNm ZXIgd2FzIGNvbXBsZXRlZC4KPiArCSAqLwo+ICsJcmV0ID0gcmtfbmZjX3dhaXRfZm9yX3hmZXJf ZG9uZShuZmMpOwo+ICsJZG1hX3VubWFwX3NpbmdsZShuZmMtPmRldiwgZG1hX2RhdGEsIG10ZC0+ d3JpdGVzaXplLAo+ICsJCQkgRE1BX0ZST01fREVWSUNFKTsKPiArCWRtYV91bm1hcF9zaW5nbGUo bmZjLT5kZXYsIGRtYV9vb2IsIGVjYy0+c3RlcHMgKiBvb2Jfc3RlcCwKPiArCQkJIERNQV9GUk9N X0RFVklDRSk7Cj4gKwo+ICsJaWYgKHJldCkgewo+ICsJCWJpdGZsaXBzID0gLUVJTzsKPiArCQlk ZXZfZXJyKG5mYy0+ZGV2LAo+ICsJCQkicmVhZDogd2FpdCB0cmFuc2ZlciBkb25lIHRpbWVvdXQu XG4iKTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAxOyBpIDwgZWNjLT5z dGVwczsgaSsrKSB7Cj4gKwkJb29iID0gY2hpcC0+b29iX3BvaSArIChpIC0gMSkgKiBORkNfU1lT X0RBVEFfU0laRTsKPiArCQlpZiAobmZjLT5jZmctPnR5cGUgPT0gTkZDX1Y5KQo+ICsJCQl0bXAg PSBuZmMtPm9vYl9idWZbaV07Cj4gKwkJZWxzZQo+ICsJCQl0bXAgPSBuZmMtPm9vYl9idWZbaSAq IChvb2Jfc3RlcCAvIDQpXTsKPiArCQkqb29iKysgPSAodTgpdG1wOwo+ICsJCSpvb2IrKyA9ICh1 OCkodG1wID4+IDgpOwo+ICsJCSpvb2IrKyA9ICh1OCkodG1wID4+IDE2KTsKPiArCQkqb29iKysg PSAodTgpKHRtcCA+PiAyNCk7Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IChlY2MtPnN0 ZXBzIC8gMik7IGkrKykgewo+ICsJCWJjaF9zdCA9IHJlYWRsX3JlbGF4ZWQobmZjLT5yZWdzICsK PiArCQkJCSAgICAgICBuZmMtPmNmZy0+YmNoX3N0X29mZiArIGkgKiA0KTsKPiArCQlpZiAoYmNo X3N0ICYgQklUKG5mYy0+Y2ZnLT5lY2MwLmVycl9mbGFnX2JpdCkgfHwKPiArCQkgICAgYmNoX3N0 ICYgQklUKG5mYy0+Y2ZnLT5lY2MxLmVycl9mbGFnX2JpdCkpIHsKPiArCQkJbXRkLT5lY2Nfc3Rh dHMuZmFpbGVkKys7Cj4gKwkJCWJpdGZsaXBzID0gMDsKPiArCQl9IGVsc2Ugewo+ICsJCQlyZXQg PSBFQ0NfRVJSX0NOVChiY2hfc3QsIG5mYy0+Y2ZnLT5lY2MwKTsKPiArCQkJbXRkLT5lY2Nfc3Rh dHMuY29ycmVjdGVkICs9IHJldDsKPiArCQkJYml0ZmxpcHMgPSBtYXhfdCh1MzIsIGJpdGZsaXBz LCByZXQpOwo+ICsKPiArCQkJcmV0ID0gRUNDX0VSUl9DTlQoYmNoX3N0LCBuZmMtPmNmZy0+ZWNj MSk7Cj4gKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSByZXQ7Cj4gKwkJCWJpdGZsaXBz ID0gbWF4X3QodTMyLCBiaXRmbGlwcywgcmV0KTsKPiArCQl9Cj4gKwl9Cj4gK291dDoKPiArCW1l bWNweShidWYsIG5mYy0+cGFnZV9idWYsIG10ZC0+d3JpdGVzaXplKTsKPiArCj4gKwlpZiAoYm9v dF9yb21fbW9kZSAmJiBya25hbmQtPmJvb3RfZWNjICE9IGVjYy0+c3RyZW5ndGgpCj4gKwkJcmtf bmZjX2h3X2VjY19zZXR1cChjaGlwLCBlY2MsIGVjYy0+c3RyZW5ndGgpOwo+ICsKPiArCWlmIChi aXRmbGlwcyA+IGVjYy0+c3RyZW5ndGgpCj4gKwkJZGV2X2VycihuZmMtPmRldiwgInJlYWQgcGFn ZTogJXggZWNjIGVycm9yIVxuIiwgcGFnZSk7Cj4gKwo+ICsJLyoKPiArCSAqIERlc2VsZWN0IHRo ZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGFyZ2V0IGFmdGVyIHRoZSBvcHMgaXMgZG9uZQo+ICsJICog dG8gcmVkdWNlIHRoZSBwb3dlciBjb25zdW1wdGlvbi4KPiArCSAqLwo+ICsJcmtfbmZjX3NlbGVj dF9jaGlwKGNoaXAsIC0xKTsKPiArCj4gKwlyZXR1cm4gYml0ZmxpcHM7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBya19uZmNfaHdfaW5pdChzdHJ1Y3QgcmtfbmZjICpuZmMpCj4gK3sK PiArCS8qIERpc2FibGUgZmxhc2ggd3AuICovCj4gKwl3cml0ZWwoRk1DVExfV1AsIG5mYy0+cmVn cyArIE5GQ19GTUNUTCk7Cj4gKwkvKiBDb25maWcgZGVmYXVsdCB0aW1pbmcgNDBucyBhdCAxNTAg TWh6IG5mYyBjbG9jay4gKi8KPiArCXdyaXRlbCgweDEwODEsIG5mYy0+cmVncyArIE5GQ19GTVdB SVQpOwo+ICsJLyogRGlzYWJsZSByYW5kb21pemVyIGFuZCBETUEuICovCj4gKwl3cml0ZWwoMCwg bmZjLT5yZWdzICsgbmZjLT5jZmctPnJhbmRtel9vZmYpOwo+ICsJd3JpdGVsKDAsIG5mYy0+cmVn cyArIG5mYy0+Y2ZnLT5kbWFfY2ZnX29mZik7Cj4gKwl3cml0ZWwoRkxDVExfUlNULCBuZmMtPnJl Z3MgKyBuZmMtPmNmZy0+ZmxjdGxfb2ZmKTsKPiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90 IHJrX25mY19pcnEoaW50IGlycSwgdm9pZCAqaWQpCj4gK3sKPiArCXN0cnVjdCBya19uZmMgKm5m YyA9IGlkOwo+ICsJdTMyIHN0YSwgaWVuOwo+ICsKPiArCXN0YSA9IHJlYWRsX3JlbGF4ZWQobmZj LT5yZWdzICsgbmZjLT5jZmctPmludF9zdF9vZmYpOwo+ICsJaWVuID0gcmVhZGxfcmVsYXhlZChu ZmMtPnJlZ3MgKyBuZmMtPmNmZy0+aW50X2VuX29mZik7Cj4gKwo+ICsJaWYgKCEoc3RhICYgaWVu KSkKPiArCQlyZXR1cm4gSVJRX05PTkU7Cj4gKwo+ICsJd3JpdGVsKHN0YSwgbmZjLT5yZWdzICsg bmZjLT5jZmctPmludF9jbHJfb2ZmKTsKPiArCXdyaXRlbCh+c3RhICYgaWVuLCBuZmMtPnJlZ3Mg KyBuZmMtPmNmZy0+aW50X2VuX29mZik7Cj4gKwo+ICsJY29tcGxldGUoJm5mYy0+ZG9uZSk7Cj4g Kwo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJrX25mY19l bmFibGVfY2xrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBya19uZmMgKm5mYykKPiArewo+ ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIUlTX0VSUihuZmMtPm5mY19jbGspKSB7Cj4gKwkJcmV0 ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG5mYy0+bmZjX2Nsayk7Cj4gKwkJaWYgKHJldCkgewo+ICsJ CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgbmZjIGNsa1xuIik7Cj4gKwkJCXJldHVy biByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShuZmMt PmFoYl9jbGspOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVu YWJsZSBhaGIgY2xrXG4iKTsKPiArCQlpZiAoIUlTX0VSUihuZmMtPm5mY19jbGspKQo+ICsJCQlj bGtfZGlzYWJsZV91bnByZXBhcmUobmZjLT5uZmNfY2xrKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJ fQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBya19uZmNfZGlzYWJs ZV9jbGtzKHN0cnVjdCBya19uZmMgKm5mYykKPiArewo+ICsJaWYgKCFJU19FUlIobmZjLT5uZmNf Y2xrKSkKPiArCQljbGtfZGlzYWJsZV91bnByZXBhcmUobmZjLT5uZmNfY2xrKTsKPiArCWNsa19k aXNhYmxlX3VucHJlcGFyZShuZmMtPmFoYl9jbGspOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJr X25mY19vb2JsYXlvdXRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCj4g KwkJCQkgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JfcmVnaW9uKQo+ICt7Cj4gKwlzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsKPiArCXN0cnVjdCBya19uZmNfbmFu ZF9jaGlwICpya25hbmQgPSBya19uZmNfdG9fcmtuYW5kKGNoaXApOwo+ICsKPiArCWlmIChzZWN0 aW9uKQo+ICsJCXJldHVybiAtRVJBTkdFOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUgYmVnaW5uaW5n IG9mIHRoZSBPT0IgYXJlYSBzdG9yZXMgdGhlIHJlc2VydmVkIGRhdGEgZm9yIHRoZSBORkMsCj4g KwkgKiB0aGUgc2l6ZSBvZiB0aGUgcmVzZXJ2ZWQgZGF0YSBpcyBORkNfU1lTX0RBVEFfU0laRSBi eXRlcy4KPiArCSAqLwo+ICsJb29iX3JlZ2lvbi0+bGVuZ3RoID0gcmtuYW5kLT5tZXRhZGF0YV9z aXplIC0gTkZDX1NZU19EQVRBX1NJWkUgLSAyOwo+ICsJb29iX3JlZ2lvbi0+b2Zmc2V0ID0gTkZD X1NZU19EQVRBX1NJWkUgKyAyOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHJrX25mY19vb2JsYXlvdXRfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlv biwKPiArCQkJCXN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqb29iX3JlZ2lvbikKPiArewo+ICsJc3Ry dWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7Cj4gKwlzdHJ1Y3QgcmtfbmZj X25hbmRfY2hpcCAqcmtuYW5kID0gcmtfbmZjX3RvX3JrbmFuZChjaGlwKTsKPiArCj4gKwlpZiAo c2VjdGlvbikKPiArCQlyZXR1cm4gLUVSQU5HRTsKPiArCj4gKwlvb2JfcmVnaW9uLT5sZW5ndGgg PSBtdGQtPm9vYnNpemUgLSBya25hbmQtPm1ldGFkYXRhX3NpemU7Cj4gKwlvb2JfcmVnaW9uLT5v ZmZzZXQgPSBya25hbmQtPm1ldGFkYXRhX3NpemU7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgcmtfbmZjX29vYmxheW91 dF9vcHMgPSB7Cj4gKwkuZnJlZSA9IHJrX25mY19vb2JsYXlvdXRfZnJlZSwKPiArCS5lY2MgPSBy a19uZmNfb29ibGF5b3V0X2VjYywKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgcmtfbmZjX2VjY19p bml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG10ZF9pbmZvICptdGQpCj4gK3sKPiArCXN0 cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOwo+ICsJc3RydWN0IHJrX25m YyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+ICsJc3RydWN0IG5hbmRf ZWNjX2N0cmwgKmVjYyA9ICZjaGlwLT5lY2M7Cj4gKwljb25zdCB1OCAqc3RyZW5ndGhzID0gbmZj LT5jZmctPmVjY19zdHJlbmd0aHM7Cj4gKwl1OCBtYXhfc3RyZW5ndGgsIG5mY19tYXhfc3RyZW5n dGg7Cj4gKwlpbnQgaTsKPiArCj4gKwluZmNfbWF4X3N0cmVuZ3RoID0gbmZjLT5jZmctPmVjY19z dHJlbmd0aHNbMF07Cj4gKwkvKiBJZiBvcHRpb25hbCBkdCBzZXR0aW5ncyBub3QgcHJlc2VudC4g Ki8KPiArCWlmICghZWNjLT5zaXplIHx8ICFlY2MtPnN0cmVuZ3RoIHx8Cj4gKwkgICAgZWNjLT5z dHJlbmd0aCA+IG5mY19tYXhfc3RyZW5ndGgpIHsKPiArCQljaGlwLT5lY2Muc2l6ZSA9IDEwMjQ7 Cj4gKwkJZWNjLT5zdGVwcyA9IG10ZC0+d3JpdGVzaXplIC8gZWNjLT5zaXplOwo+ICsKPiArCQkv Kgo+ICsJCSAqIEhXIEVDQyBhbHdheXMgcmVxdWVzdHMgdGhlIG51bWJlciBvZiBFQ0MgYnl0ZXMg cGVyIDEwMjQgYnl0ZQo+ICsJCSAqIGJsb2Nrcy4gVGhlIGZpcnN0IDQgT09CIGJ5dGVzIGFyZSBy ZXNlcnZlZCBmb3Igc3lzIGRhdGEuCj4gKwkJICovCj4gKwkJbWF4X3N0cmVuZ3RoID0gKChtdGQt Pm9vYnNpemUgLyBlY2MtPnN0ZXBzKSAtIDQpICogOCAvCj4gKwkJCQkgZmxzKDggKiAxMDI0KTsK PiArCQlpZiAobWF4X3N0cmVuZ3RoID4gbmZjX21heF9zdHJlbmd0aCkKPiArCQkJbWF4X3N0cmVu Z3RoID0gbmZjX21heF9zdHJlbmd0aDsKPiArCj4gKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykg ewo+ICsJCQlpZiAobWF4X3N0cmVuZ3RoID49IHN0cmVuZ3Roc1tpXSkKPiArCQkJCWJyZWFrOwo+ ICsJCX0KPiArCj4gKwkJaWYgKGkgPj0gNCkgewo+ICsJCQlkZXZfZXJyKG5mYy0+ZGV2LCAiVW5z dXBwb3J0ZWQgRUNDIHN0cmVuZ3RoXG4iKTsKPiArCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICsJ CX0KPiArCj4gKwkJZWNjLT5zdHJlbmd0aCA9IHN0cmVuZ3Roc1tpXTsKPiArCX0KPiArCWVjYy0+ c3RlcHMgPSBtdGQtPndyaXRlc2l6ZSAvIGVjYy0+c2l6ZTsKPiArCWVjYy0+Ynl0ZXMgPSBESVZf Uk9VTkRfVVAoZWNjLT5zdHJlbmd0aCAqIGZscyg4ICogMTAyNCksIDgpOwoKSGVyZSB5b3UgYXNz dW1lIDEwMjQgRUNDIHN0ZXAgc2l6ZSwgdGhpcyBpcyB3cm9uZy4gRWl0aGVyIHRoZQpjb250cm9s bGVyIG9ubHkgc3VwcG9ydHMgMTAyNCBieXRlcyBvciB5b3Ugb2ZmaWNpYWxseSBzdGF0ZSBzb21l d2hlcmUKdGhhdCB5b3UgZG9uJ3Qgc3VwcG9ydCBtb3JlIEVDQyBzdGVwIHNpemVzIHlldC4KCj4g KwkvKiBIVyBFQ0MgYWx3YXlzIHdvcmsgd2l0aCBldmVuIG51bWJlcnMgb2YgRUNDIGJ5dGVzLiAq Lwo+ICsJZWNjLT5ieXRlcyA9IEFMSUdOKGVjYy0+Ynl0ZXMsIDIpOwoKU2hvdWxkbid0IHlvdSBl bnN1cmUgdGhlIG51bWJlciBvZiBieXRlcyBpcyByb3VuZGVkIHVwID8KCj4gKwo+ICsJcmtfbmZj X2h3X2VjY19zZXR1cChjaGlwLCBlY2MsIGVjYy0+c3RyZW5ndGgpOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwoKClRoYW5rcywKTWlxdcOobAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcg bGlzdApodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW10 ZC8K