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=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham 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 DF6CCC54FD0 for ; Mon, 20 Apr 2020 04:18:56 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AF19920672 for ; Mon, 20 Apr 2020 04:18:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="l2bBsnsx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AF19920672 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.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=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=dAsamDCLvLPcfOSEwwjK5g3PnFkA4iWe4r5Zy02Iuow=; b=l2bBsnsxJE3w4MjUM4LilIvxo i0kD7FKdFLZAZMTVSCCvFRx3m1hrkSLBHEaVUdmv1DDhxF3/AmnU6gX0omN1Vn//MDnvJMosz/ZO+ l5avtDHrq9z96Bq3MdmXKR9v4Qd9zZSNDv9IhEX8LIbzu0xoACUvbT+I2JameJ8A2TKYSxuvBqN1a Isway4P5Yk2lf3psimQyF2xLquNdtC76cxFwe3y304AmgBBZ703no+vfMwaeVrLjboKxJtZnFNVaw AKiqXPkalWlIE02U25SK6ekM4TMUVU2d9Qum6OzF2yFcLO77cEVPf7DkkKXuePyL0Ccw2nUSci1BU DPbr0VVmA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jQNtP-00042S-BO; Mon, 20 Apr 2020 04:18:47 +0000 Received: from mga11.intel.com ([192.55.52.93]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jQNtL-00041g-FS for linux-mtd@lists.infradead.org; Mon, 20 Apr 2020 04:18:46 +0000 IronPort-SDR: qZwUcN1YDayKlw14/nwGFRQ3bCHmAJ+K87VzrmT8Nfyc8RsfSoAfT3GwIEre5NrJ3etiWf6X+V 7CM2lTAHORDA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Apr 2020 21:18:43 -0700 IronPort-SDR: 85gVmBVdeDE1JfznfamMH77Dtz8FytPYU50XraWuT3CzsmIEYp2bqpjhtUYS611zXoaYQV7MIV a4CofOkEjiVQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,405,1580803200"; d="scan'208";a="455552348" Received: from linux.intel.com ([10.54.29.200]) by fmsmga005.fm.intel.com with ESMTP; 19 Apr 2020 21:18:42 -0700 Received: from [10.249.68.96] (vramuthx-mobl1.gar.corp.intel.com [10.249.68.96]) by linux.intel.com (Postfix) with ESMTP id 7D3EB580479; Sun, 19 Apr 2020 21:18:35 -0700 (PDT) Subject: Re: [PATCH v2 2/2] mtd: rawnand: Add NAND controller support on Intel LGM SoC To: Boris Brezillon References: <20200417082147.43384-1-vadivel.muruganx.ramuthevar@linux.intel.com> <20200417082147.43384-3-vadivel.muruganx.ramuthevar@linux.intel.com> <20200418105533.477ce529@collabora.com> From: "Ramuthevar, Vadivel MuruganX" Message-ID: <79e186a8-68fb-0e75-910b-9f1b40679ca2@linux.intel.com> Date: Mon, 20 Apr 2020 12:18:34 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200418105533.477ce529@collabora.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200419_211843_584787_766E2C62 X-CRM114-Status: GOOD ( 32.91 ) 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: cheol.yong.kim@intel.com, devicetree@vger.kernel.org, andriy.shevchenko@intel.com, anders.roxell@linaro.org, vigneshr@ti.com, arnd@arndb.de, hauke.mehrtens@intel.com, richard@nod.at, qi-ming.wu@intel.com, brendanhiggins@google.com, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, robh+dt@kernel.org, linux-mtd@lists.infradead.org, miquel.raynal@bootlin.com, tglx@linutronix.de, masonccyang@mxic.com.tw, piotrs@cadence.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGkgQm9yaXMsCgogwqAgVGhhbmsgeW91IHZlcnkgbXVjaCBmb3IgdGhlIHJldmlldyBjb21tZW50 cyBhbmQgeW91ciB0aW1lLi4uCgpPbiAxOC80LzIwMjAgNDo1NSBwbSwgQm9yaXMgQnJlemlsbG9u IHdyb3RlOgo+IE9uIEZyaSwgMTcgQXByIDIwMjAgMTY6MjE6NDcgKzA4MDAKPiAiUmFtdXRoZXZh cixWYWRpdmVsIE11cnVnYW5YIgo+IDx2YWRpdmVsLm11cnVnYW54LnJhbXV0aGV2YXJAbGludXgu aW50ZWwuY29tPiB3cm90ZToKPgo+PiBGcm9tOiBSYW11dGhldmFyIFZhZGl2ZWwgTXVydWdhbiA8 dmFkaXZlbC5tdXJ1Z2FueC5yYW11dGhldmFyQGxpbnV4LmludGVsLmNvbT4KPj4KPj4gVGhpcyBw YXRjaCBhZGRzIHRoZSBuZXcgSVAgb2YgTmFuZCBGbGFzaCBDb250cm9sbGVyKE5GQykgc3VwcG9y dAo+PiBvbiBJbnRlbCdzIExpZ2h0bmluZyBNb3VudGFpbihMR00pIFNvQy4KPj4KPj4gRE1BIGlz IHVzZWQgZm9yIGJ1cnN0IGRhdGEgdHJhbnNmZXIgb3BlcmF0aW9uLCBhbHNvIERNQSBIVyBzdXBw b3J0cwo+PiBhbGlnbmVkIDMyYml0IG1lbW9yeSBhZGRyZXNzIGFuZCBhbGlnbmVkIGRhdGEgYWNj ZXNzIGJ5IGRlZmF1bHQuCj4+IERNQSBidXJzdCBvZiA4IHN1cHBvcnRlZC4gRGF0YSByZWdpc3Rl ciB1c2VkIHRvIHN1cHBvcnQgdGhlIHJlYWQvd3JpdGUKPj4gb3BlcmF0aW9uIGZyb20vdG8gZGV2 aWNlLgo+Pgo+PiBOQU5EIGNvbnRyb2xsZXIgZHJpdmVyIGltcGxlbWVudHMgLT5leGVjX29wKCkg dG8gcmVwbGFjZSBsZWdhY3kgaG9va3MsCj4+IHRoZXNlIHNwZWNpZmljIGNhbGwtYmFjayBtZXRo b2QgdG8gZXhlY3V0ZSBOQU5EIG9wZXJhdGlvbnMuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFJhbXV0 aGV2YXIgVmFkaXZlbCBNdXJ1Z2FuIDx2YWRpdmVsLm11cnVnYW54LnJhbXV0aGV2YXJAbGludXgu aW50ZWwuY29tPgo+PiAtLS0KPj4gICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnICAgICAg ICAgIHwgICA3ICsKPj4gICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmlsZSAgICAgICAgIHwg ICAxICsKPj4gICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9pbnRlbF9sZ21fbmFuZC5jIHwgNzQwICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiBJIHdvbmRlciBpZiB3ZSBzaG91bGRu J3QgbmFtZSB0aGUgZHJpdmVyIGluZmluZW9uLW5hbmQtY29udHJvbGxlci5jCj4gc2luY2UgdGhl IG9yaWdpbmFsIGRlc2lnbiBjb21lcyBmcm9tIEluZmluZW9uIElJVUMuIGludGVsX2xnbV9uYW5k LmMgaXMKPiBkZWZpbml0ZWx5IG1pc2xlYWRpbmcsIGFzIHdlIGFsc28gaGF2ZSBhIG5hbmRfaW50 ZWwuYyBmaWxlIHdoaWNoIGlzIGZvcgo+IEludGVsIE5BTkQgY2hpcHMgKG5vdCBOQU5EIGNvbnRy b2xsZXJzKS4gSWYgd2Uga2VlcCBpbnRlbCBpbiB0aGUgbmFtZSwKPiBsZXQncyBhdCBsZWFzdCBh ZGQgYSAiLWNvbnRyb2xsZXIiIHN1ZmZpeCB0byBtYWtlIGl0IGNsZWFyLgpzdXJlICwgd2lsbCBh ZGQgLWNvbnRyb2xsZXIgc3VmZml4Lgo+Cj4gU2lkZSBub3RlIGZvciBNaXF1ZWw6IEkgZ3Vlc3Mg d2Ugd291bGQgYWxzbyBiZW5lZml0IGZyb20gaGF2aW5nIGEgY2xlYXIKPiBjb3JlIHZzIGNvbnRy b2xsZXItZHJpdmVycyBzcGxpdCBhcyByZWNlbnRseSBkb25lIGZvciBzcGktbm9yIChhCj4gY29u dHJvbGxlciBzdWJkaXIgaGFzIGJlZW4gY3JlYXRlZCkuCj4KPj4gICAzIGZpbGVzIGNoYW5nZWQs IDc0OCBpbnNlcnRpb25zKCspCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbXRkL25h bmQvcmF3L2ludGVsX2xnbV9uYW5kLmMKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25h bmQvcmF3L0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnCj4+IGluZGV4IGE4 MGE0NmJiNWI4Yi4uOWVmYzRiYmFmNGEzIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL210ZC9uYW5k L3Jhdy9LY29uZmlnCj4+ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcKPj4gQEAg LTQ1Nyw2ICs0NTcsMTMgQEAgY29uZmlnIE1URF9OQU5EX0NBREVOQ0UKPj4gICAJICBFbmFibGUg dGhlIGRyaXZlciBmb3IgTkFORCBmbGFzaCBvbiBwbGF0Zm9ybXMgdXNpbmcgYSBDYWRlbmNlIE5B TkQKPj4gICAJICBjb250cm9sbGVyLgo+PiAgIAo+PiArY29uZmlnIE1URF9OQU5EX0lOVEVMX0xH TQo+PiArCXRyaXN0YXRlICJTdXBwb3J0IGZvciBOQU5EIGNvbnRyb2xsZXIgb24gSW50ZWwgTEdN IFNvQyIKPj4gKwlkZXBlbmRzIG9uIFg4Ngo+IERvIHdlIGhhdmUgYSBoYXJkIGRlcGVuZGVuY3kg b24geDg2IGhlcmU/IE1heWJlICdkZXBlbmRzIG9uIEhBU19NTUlPJwo+IHdvdWxkIGJlIGVub3Vn aC4KeWVzIEJvcmlzLCB3ZSBoYXZlIGhhcmQgZGVwZW5kZW5jeSBvbiB4ODYuCj4+ICsJaGVscAo+ PiArCSAgRW5hYmxlcyBzdXBwb3J0IGZvciBOQU5EIEZsYXNoIGNoaXBzIG9uIEludGVsJ3MgTEdN IFNvQy4KPj4gKyAgICAgICAgICBOQU5EIGZsYXNoIGludGVyZmFjZWQgdGhyb3VnaCB0aGUgRXh0 ZXJuYWwgQnVzIFVuaXQuCj4+ICsKPj4gICBjb21tZW50ICJNaXNjIgo+PiAgIAo+PiAgIGNvbmZp ZyBNVERfU01fQ09NTU9OCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtl ZmlsZSBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlCj4+IGluZGV4IDJkMTM2YjE1OGZi Ny4uNDlhMzAxYWUwYzlkIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtl ZmlsZQo+PiArKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmlsZQo+PiBAQCAtNTgsNiAr NTgsNyBAQCBvYmotJChDT05GSUdfTVREX05BTkRfVEVHUkEpCQkrPSB0ZWdyYV9uYW5kLm8KPj4g ICBvYmotJChDT05GSUdfTVREX05BTkRfU1RNMzJfRk1DMikJKz0gc3RtMzJfZm1jMl9uYW5kLm8K Pj4gICBvYmotJChDT05GSUdfTVREX05BTkRfTUVTT04pCQkrPSBtZXNvbl9uYW5kLm8KPj4gICBv YmotJChDT05GSUdfTVREX05BTkRfQ0FERU5DRSkJCSs9IGNhZGVuY2UtbmFuZC1jb250cm9sbGVy Lm8KPj4gK29iai0kKENPTkZJR19NVERfTkFORF9JTlRFTF9MR00pCSs9IGludGVsX2xnbV9uYW5k Lm8KPj4gICAKPj4gICBuYW5kLW9ianMgOj0gbmFuZF9iYXNlLm8gbmFuZF9sZWdhY3kubyBuYW5k X2JidC5vIG5hbmRfdGltaW5ncy5vIG5hbmRfaWRzLm8KPj4gICBuYW5kLW9ianMgKz0gbmFuZF9v bmZpLm8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L2ludGVsX2xnbV9uYW5k LmMgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9pbnRlbF9sZ21fbmFuZC5jCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTZjZDE4MzFmMDcwCj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvaW50ZWxfbGdtX25hbmQuYwo+PiBA QCAtMCwwICsxLDc0MCBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAr Cj4+ICsvKiBDb3B5cmlnaHQgKGMpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uICovCj4+ICsKPj4g KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+ Cj4+ICsjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZG1h LWRpcmVjdGlvbi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Cj4+ICsjaW5j bHVkZSA8bGludXgvZXJyLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+PiArI2luY2x1 ZGUgPGxpbnV4L2lvcG9sbC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+PiArI2lu Y2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4K Pj4gKyNpbmNsdWRlIDxsaW51eC9tdGQvcmF3bmFuZC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L210 ZC9uYW5kX2VjYy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMu aD4KPj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K Pj4gKyNpbmNsdWRlIDxtdGQvbXRkLWFiaS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZp Y2V0YWJsZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+Cj4+ICsKPj4gKyNkZWZp bmUgTEdNX0NMQwkJCTB4MDAwCj4+ICsjZGVmaW5lIExHTV9DTENfUlNUCQkweDAwMDAwMDAwdQo+ PiArCj4+ICsjZGVmaW5lIExHTV9OQU5EX0VDQ19PRkZTRVQJMHgwMDgKPj4gKwo+PiArI2RlZmlu ZSBMR01fQUREUl9TRUwobikJCSgweDIwICsgKG4pICogNCkKPj4gKyNkZWZpbmUgTEdNX0FERFJf TUFTSwkJKDUgPDwgNCkKPj4gKyNkZWZpbmUgTEdNX0FERFJfU0VMX1JFR0VOCTB4MQo+PiArCj4+ ICsjZGVmaW5lIExHTV9CVVNDT04obikJCSgweDYwICsgKG4pICogNCkKPj4gKyNkZWZpbmUgTEdN X0JVU0NPTl9DTVVMVF9WNAkweDEKPj4gKyNkZWZpbmUgTEdNX0JVU0NPTl9SRUNPVkMobikJKChu KSA8PCAyKQo+PiArI2RlZmluZSBMR01fQlVTQ09OX0hPTERDKG4pCSgobikgPDwgNCkKPj4gKyNk ZWZpbmUgTEdNX0JVU0NPTl9XQUlUUkRDKG4pCSgobikgPDwgNikKPj4gKyNkZWZpbmUgTEdNX0JV U0NPTl9XQUlUV1JDKG4pCSgobikgPDwgOCkKPj4gKyNkZWZpbmUgTEdNX0JVU0NPTl9CQ0dFTl9D UwkweDAKPj4gKyNkZWZpbmUgTEdNX0JVU0NPTl9TRVRVUF9FTglCSVQoMjIpCj4+ICsjZGVmaW5l IExHTV9CVVNDT05fQUxFQwkJMHhDMDAwCj4+ICsKPiBIbSwgSSdtIHByZXR0eSBzdXJlIHdlIGRv bid0IG5lZWQgdGhlIExHTV8gcHJlZml4IGhlcmUuCkFncmVlZCEsIHdpbGwgcmVwbGFjZSBFQlVf IHByZWZpeCB0byBMR01fCj4+ICsjZGVmaW5lIE5BTkRfQ09OCQkweDBCMAo+PiArI2RlZmluZSBO QU5EX0NPTl9OQU5ETV9FTglCSVQoMCkKPj4gKyNkZWZpbmUgTkFORF9DT05fTkFORE1fRElTCTB4 MAo+PiArI2RlZmluZSBOQU5EX0NPTl9DU01VWF9FX0VOCUJJVCgxKQo+PiArI2RlZmluZSBOQU5E X0NPTl9BTEVfUF9MT1cJQklUKDIpCj4+ICsjZGVmaW5lIE5BTkRfQ09OX0NMRV9QX0xPVwlCSVQo MykKPj4gKyNkZWZpbmUgTkFORF9DT05fQ1NfUF9MT1cJQklUKDQpCj4+ICsjZGVmaW5lIE5BTkRf Q09OX1NFX1BfTE9XCUJJVCg1KQo+PiArI2RlZmluZSBOQU5EX0NPTl9XUF9QX0xPVwlCSVQoNikK Pj4gKyNkZWZpbmUgTkFORF9DT05fUFJFX1BfTE9XCUJJVCg3KQo+PiArI2RlZmluZSBOQU5EX0NP Tl9JTl9DU19TKG4pCSgobikgPDwgOCkKPj4gKyNkZWZpbmUgTkFORF9DT05fT1VUX0NTX1MobikJ KChuKSA8PCAxMCkKPj4gKyNkZWZpbmUgTkFORF9DT05fTEFUX0VOX0NTX1AJKCgweDNEKSA8PCAx OCkKPj4gKwo+PiArI2RlZmluZSBOQU5EX1dBSVQJCTB4MEI0Cj4+ICsjZGVmaW5lIE5BTkRfV0FJ VF9SREJZCQlCSVQoMCkKPj4gKyNkZWZpbmUgTkFORF9XQUlUX1dSX0MJCUJJVCgzKQo+PiArCj4+ ICsjZGVmaW5lIE5BTkRfQ1RMMQkJMHgxMTAKPj4gKyNkZWZpbmUgTkFORF9DVEwxX0FERFJfM19T SElGVAkyNAo+PiArCj4+ICsjZGVmaW5lIE5BTkRfQ1RMMgkJMHgxMTQKPj4gKyNkZWZpbmUgTkFO RF9DVEwyX0FERFJfNV9TSElGVAk4Cj4+ICsjZGVmaW5lIE5BTkRfQ1RMMl9DWUNfTl9WNQkoMHgy IDw8IDE2KQo+PiArCj4+ICsjZGVmaW5lIE5BTkRfSU5UX01TS19DVEwJMHgxMjQKPj4gKyNkZWZp bmUgTkFORF9JTlRfTVNLX0NUTF9XUl9DCUJJVCg0KQo+PiArCj4+ICsjZGVmaW5lIE5BTkRfSU5U X1NUQQkJMHgxMjgKPj4gKyNkZWZpbmUgTkFORF9JTlRfU1RBX1dSX0MJQklUKDQpCj4+ICsKPj4g KyNkZWZpbmUgTkFORF9DVEwJCTB4MTMwCj4+ICsjZGVmaW5lIE5BTkRfQ1RMX01PREVfRUNDCTB4 MQo+PiArI2RlZmluZSBOQU5EX0NUTF9HTwkJQklUKDIpCj4+ICsjZGVmaW5lIE5BTkRfQ1RMX0NF X1NFTF9DUyhuKQlCSVQoMyArIChuKSkKPj4gKyNkZWZpbmUgTkFORF9DVExfUldfUkVBRAkweDAK Pj4gKyNkZWZpbmUgTkFORF9DVExfUldfV1JJVEUJQklUKDEwKQo+PiArI2RlZmluZSBOQU5EX0NU TF9FQ0NfT0ZGX1Y4VEgJQklUKDExKQo+PiArI2RlZmluZSBOQU5EX0NUTF9DS0ZGX0VOCTB4MAo+ PiArI2RlZmluZSBOQU5EX0NUTF9NU0dfRU4JCUJJVCgxNykKPj4gKwo+PiArI2RlZmluZSBOQU5E X1BBUkEwCQkweDEzYwo+PiArI2RlZmluZSBOQU5EX1BBUkEwX1BBR0VfVjgxOTIJMHgzCj4+ICsj ZGVmaW5lIE5BTkRfUEFSQTBfUElCX1YyNTYJKDB4MyA8PCA0KQo+PiArI2RlZmluZSBOQU5EX1BB UkEwX0JZUF9FTl9OUAkweDAKPj4gKyNkZWZpbmUgTkFORF9QQVJBMF9CWVBfREVDX05QCTB4MAo+ PiArI2RlZmluZSBOQU5EX1BBUkEwX1RZUEVfT05GSQlCSVQoMTgpCj4+ICsjZGVmaW5lIE5BTkRf UEFSQTBfQURFUF9FTglCSVQoMjEpCj4+ICsKPj4gKyNkZWZpbmUgTkFORF9DTVNHXzAJCTB4MTUw Cj4+ICsjZGVmaW5lIE5BTkRfQ01TR18xCQkweDE1NAo+PiArCj4+ICsjZGVmaW5lIE5BTkRfV1JJ VEVfQ01ECQkoTkFORF9DT05fQ1NfUF9MT1cgfCBOQU5EX0NPTl9DTEVfUF9MT1cpCj4+ICsjZGVm aW5lIE5BTkRfV1JJVEVfQUREUgkJKE5BTkRfQ09OX0NTX1BfTE9XIHwgTkFORF9DT05fQUxFX1Bf TE9XKQo+IEkgd291bGQgcmVkZWZpbmUgQUxFLCBDTEUgYW5kIENTIGhlcmUgaW5zdGVhZCBvZiBy ZS11c2luZyB0aGUgTkFORF9DT04KPiBkZWZpbml0aW9ucy4gRXZlbiBpZiB0aGV5IGhhdmUgdGhl IHNhbWUgdmFsdWUgdGhleSByZXByZXNlbnQgZGlmZmVyZW50Cj4gdGhpbmdzIEkgdGhpbmsuIE9u ZSBpcyBlbmNvZGluZyB0aGUgc2lnbmFsIHBvbGFyaXR5IHdoZW4gY29uZmlndXJpbmcKPiB0aGUg TkFORCBjb250cm9sbGVyLCBhbmQgdGhlIG90aGVyIG9uZSBpcyBhbiBvZmZzZXQgaW4gdGhlIG1l bW9yeSBidXMKPiBNTUlPIHJhbmdlIHRoYXQncyB1c2VkIHRvIGNvbnRyb2wgdGhlIENMRS9BTEUv Q1Mgc2lnbmFscy4KTm90ZWQsIHdpbGwgdXBkYXRlLgo+Cj4gI2RlZmluZSBOQU5EX0FMRV9PRkZT CQkJQklUKDIpCj4gI2RlZmluZSBOQU5EX0NMRV9PRkZTCQkJQklUKDMpCj4gI2RlZmluZSBOQU5E X0NTX09GRlMJCQlCSVQoNCkKPgo+PiArI2RlZmluZSBOQU5EX1dSSVRFX0RBVEEJCU5BTkRfQ09O X0NTX1BfTE9XCj4+ICsjZGVmaW5lIE5BTkRfUkVBRF9EQVRBCQlOQU5EX0NPTl9DU19QX0xPVwo+ IENhbiB3ZSBub3QgaGlkZSB0aGF0IGJlaGluZCBtYWNyb3MuIEFuZCB0aGVyZSdzIG5vIHBvaW50 IGhhdmluZyAyCj4gZGlmZmVyZW50IGRlZmluaXRpb25zIGZvciByZWFkL3dyaXRlLCBzaW5jZSBh bGwgdGhleSBkbyBpcyBrZWVwaW5nIHRoZQo+IENTIGxpbmUgYXNzZXJ0ZWQsIHRoZSBkaXJlY3Rp b24gaXMgc2VsZWN0aW9uIGJ5IHRoZSBvcGVyYXRpb24gZG9uZSBvbgo+IHRoZSBidXMgKHJlYWQg b3Igd3JpdGUpLiBCVFcsIHlvdSBldmVuIG1peCB0aG9zZSB3aXRob3V0IHJlYWxpemluZyB0aGUK PiBtaXN0YWtlIGluIHlvdXIgaW1wbGVtZW50YXRpb24gOlAuClN1cmUsIGRvIG9wdGltaXphdGlv biB3aXRoIHNpbmdsZSBtYWNybwo+Cj4+ICsKPj4gKyNkZWZpbmUgTkFORF9DSElQX05PX1NFTEVD VElPTgktMQo+PiArI2RlZmluZSBOQU5EX0NISVBfU0VMRUNUSU9OCTB4MAo+PiArCj4+ICtzdHJ1 Y3QgbGdtX25hbmRfaG9zdCB7Cj4gaW5maW5lb25fbmFuZF9jb250cm9sbGVyPwpiZXR0ZXIgd2Ug a2VlcCBpbnRlbF9uYW5kX2NvbnRyb2xsZXIgLCBpcyBpdCBva2F5Pwo+PiArCXN0cnVjdCBuYW5k X2NvbnRyb2xsZXIJY29udHJvbGxlcjsKPj4gKwlzdHJ1Y3QgbmFuZF9jaGlwCWNoaXA7Cj4+ICsJ dm9pZCBfX2lvbWVtCQkqbGdtX3ZhOwo+PiArCXZvaWQgX19pb21lbQkJKmhzbmFuZF92YTsKPj4g Kwl2b2lkIF9faW9tZW0JCSpuYW5kYWRkcl92YTsKPiBZb3UgY2FuIGRyb3AgdGhlIF92YSBzdWZm aXhlcyBhbmQgcGljayBuYW1lcyBkZXNjcmliaW5nIHdoYXQncyBleHBvc2VkCj4gYnkgdGhlIE1N SU8gcmFuZ2UgKGxnbSBkb2Vzbid0IHNvdW5kcyBsaWtlIGEgZ29vZCBuYW1lIHRvIG1lKS4KTm90 ZWQsIHdpbGwgcGljayB0aGUgcHJvcGVyIG5hbWUKPj4gKwlzdHJ1Y3QgY2xrCQkqY2xrOwo+PiAr CXVuc2lnbmVkIGxvbmcJCWNsa19yYXRlOwo+PiArCXUzMgkJCWNzOwo+PiArCXUzMgkJCW5kX3Bh cmEwOwo+PiArCXN0cnVjdCBkZXZpY2UJCSpkZXY7Cj4+ICsJc3RydWN0IGRtYV9jaGFuCQkqZG1h X3R4Owo+PiArCXN0cnVjdCBkbWFfY2hhbgkJKmRtYV9yeDsKPj4gKwlzdHJ1Y3QgY29tcGxldGlv bglkbWFfYWNjZXNzX2NvbXBsZXRlOwo+PiArCWNvbnN0IGNoYXIgKmNzX25hbWU7Cj4+ICt9Owo+ PiArCj4+ICtzdGF0aWMgdTggbGdtX25hbmRfcmVhZGIoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwg aW50IG9wKQo+IE1ha2Ugb3AgYW4gdW5zaWduZWQgaW50Lgpva2F5LCBub3RlZC4KPj4gK3sKPj4g KwlzdHJ1Y3QgbGdtX25hbmRfaG9zdCAqbGdtX2hvc3QgPSBuYW5kX2dldF9jb250cm9sbGVyX2Rh dGEoY2hpcCk7Cj4+ICsJdm9pZCBfX2lvbWVtICpuYW5kX3dhaXQgPSBsZ21faG9zdC0+bGdtX3Zh ICsgTkFORF9XQUlUOwo+PiArCXUzMiBzdGF0Owo+PiArCWludCByZXQ7Cj4+ICsJdTggdmFsOwo+ PiArCj4+ICsJdmFsID0gcmVhZGIobGdtX2hvc3QtPm5hbmRhZGRyX3ZhICsgb3ApOwo+PiArCj4+ ICsJcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KG5hbmRfd2FpdCwgc3RhdCwgc3RhdCAmIE5BTkRf V0FJVF9XUl9DLAo+PiArCQkJCSAyMCwgMTAwMCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZGV2X3dh cm4obGdtX2hvc3QtPmRldiwKPj4gKwkJCSAibGdtIG5hbmQgd3JpdGUgdGltZW91dC4gbmFuZF93 YWl0KDB4JXApPTB4JXhcbiIsCj4+ICsJCQkgbmFuZF93YWl0LCByZWFkbChuYW5kX3dhaXQpKTsK Pj4gKwo+PiArCXJldHVybiB2YWw7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGxnbV9uYW5k X3dyaXRlYihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgb3AsIHU4IHZhbHVlKQo+PiArewo+ PiArCXN0cnVjdCBsZ21fbmFuZF9ob3N0ICpsZ21faG9zdCA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJf ZGF0YShjaGlwKTsKPj4gKwl2b2lkIF9faW9tZW0gKm5hbmRfd2FpdCA9IGxnbV9ob3N0LT5sZ21f dmEgKyBOQU5EX1dBSVQ7Cj4+ICsJdTMyIHN0YXQ7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCXdy aXRlYih2YWx1ZSwgbGdtX2hvc3QtPm5hbmRhZGRyX3ZhICsgb3ApOwo+IExvb2tzIGxpa2UgTkFO RF9DT05fQ1NfUF9MT1cgaXMgYWx3YXlzIHNldCwgc28gbm8gbmVlZCB0byBmb3JjZSB0aGUKPiBj YWxsZXIgdG8gcGFzcyBpdCBpbiBvcC4KQWdyZWVkIQo+PiArCj4+ICsJcmV0ID0gcmVhZGxfcG9s bF90aW1lb3V0KG5hbmRfd2FpdCwgc3RhdCwgc3RhdCAmIE5BTkRfV0FJVF9XUl9DLAo+PiArCQkJ CSAyMCwgMTAwMCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZGV2X3dhcm4obGdtX2hvc3QtPmRldiwK Pj4gKwkJCSAibGdtIG5hbmQgd3JpdGUgdGltZW91dC4gbmFuZF93YWl0KDB4JXApPTB4JXhcbiIs Cj4+ICsJCQkgbmFuZF93YWl0LCByZWFkbChuYW5kX3dhaXQpKTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIHVuc2lnbmVkIGNoYXIgbGdtX3JlYWRfYnl0ZShzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKQo+ PiArewo+PiArCXJldHVybiBsZ21fbmFuZF9yZWFkYihjaGlwLCBOQU5EX1JFQURfREFUQSk7Cj4+ ICt9Cj4gVGhpcyBvbmUgc2hvdWxkIG5vdCBiZSBuZWVkZWQuCkdvb2QgY2F0Y2ggLCB3aWxsIGRy b3AgaXQuCj4+ICsKPj4gK3N0YXRpYyB2b2lkIGxnbV9yZWFkX2J1ZihzdHJ1Y3QgbmFuZF9jaGlw ICpjaGlwLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKPj4gK3sKPj4gKwlpbnQgaTsKPj4gKwo+PiAr CWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKPj4gKwkJYnVmW2ldID0gbGdtX25hbmRfcmVhZGIo Y2hpcCwgTkFORF9XUklURV9EQVRBKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgbGdtX3dy aXRlX2J1ZihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxl bikKPj4gK3sKPj4gKwlpbnQgaTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykK Pj4gKwkJbGdtX25hbmRfd3JpdGViKGNoaXAsIE5BTkRfV1JJVEVfREFUQSwgYnVmW2ldKTsKPj4g K30KPj4gKwo+PiArc3RhdGljIHZvaWQgbGdtX3NlbGVjdF9jaGlwKHN0cnVjdCBuYW5kX2NoaXAg KmNoaXAsIGludCBzZWxlY3QpCj4+ICt7Cj4+ICsJc3RydWN0IGxnbV9uYW5kX2hvc3QgKmxnbV9o b3N0ID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+PiArCXZvaWQgX19pb21lbSAq bmFuZF9jb24gPSBsZ21faG9zdC0+bGdtX3ZhICsgTkFORF9DT047Cj4+ICsJdTMyIGNzID0gbGdt X2hvc3QtPmNzOwo+PiArCWludCB2YWw7Cj4+ICsKPj4gKwlzd2l0Y2ggKHNlbGVjdCkgewo+PiAr CWNhc2UgTkFORF9DSElQX05PX1NFTEVDVElPTjoKPj4gKwkJdmFsID0gcmVhZGwobmFuZF9jb24p Owo+PiArCQl3cml0ZWwodmFsICYgfk5BTkRfQ09OX05BTkRNX0VOLCBuYW5kX2Nvbik7Cj4+ICsJ CWJyZWFrOwo+IFBsZWFzZSBtb3ZlIHRoYXQgdG8gYW4gdW5zZWxlY3RfY2hpcCgpIGZ1bmN0aW9u LiBJIGFsc28gc2VlIHRoYXQgdGhpcwo+IGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZCB3aXRoIE5B TkRfQ0hJUF9OT19TRUxFQ1RJT04uIE9oLCBhbmQgeW91IGRvbid0Cj4gbmVlZCB0aGUgc2VsZWN0 IGFyZ3VtZW50IHNpbmNlIHlvdSBvbmx5IHN1cHBvcnQgb25lIENTIHBlciBjaGlwLgpTdXJlICwg d2lsbCB1cGRhdGUgYXMgcGVyIHNpbmdsZSBjaGlwIHNlbGVjdGlvbiBzdXBwb3J0Lgo+Cj4+ICsJ Y2FzZSBOQU5EX0NISVBfU0VMRUNUSU9OOgo+PiArCQl3cml0ZWwoTkFORF9DT05fTkFORE1fRU4g fCBOQU5EX0NPTl9DU01VWF9FX0VOIHwKPj4gKwkJICAgICAgIE5BTkRfQ09OX0NTX1BfTE9XIHwg TkFORF9DT05fU0VfUF9MT1cgfAo+PiArCQkgICAgICAgTkFORF9DT05fV1BfUF9MT1cgfCBOQU5E X0NPTl9QUkVfUF9MT1cgfAo+PiArCQkgICAgICAgTkFORF9DT05fSU5fQ1NfUyhjcykgfCBOQU5E X0NPTl9PVVRfQ1NfUyhjcykgfAo+PiArCQkgICAgICAgTkFORF9DT05fTEFUX0VOX0NTX1AsIG5h bmRfY29uKTsKPj4gKwkJYnJlYWs7Cj4+ICsJZGVmYXVsdDoKPj4gKwkJYnJlYWs7Cj4+ICsJfQo+ PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGxnbV9kZXZfcmVhZHkoc3RydWN0IG5hbmRfY2hpcCAq Y2hpcCkKPj4gK3sKPj4gKwlzdHJ1Y3QgbGdtX25hbmRfaG9zdCAqbGdtX2hvc3QgPSBuYW5kX2dl dF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4+ICsKPj4gKwlyZXR1cm4gcmVhZGwobGdtX2hvc3Qt PmxnbV92YSArIE5BTkRfV0FJVCkgJiBOQU5EX1dBSVRfUkRCWTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIHZvaWQgbGdtX2NtZF9jdHJsKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBjbWQsIHVu c2lnbmVkIGludCBjdHJsKQo+PiArewo+PiArCWlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkKPj4g KwkJcmV0dXJuOwo+PiArCj4+ICsJaWYgKGN0cmwgJiBOQU5EX0NMRSkKPj4gKwkJbGdtX25hbmRf d3JpdGViKGNoaXAsIE5BTkRfV1JJVEVfQ01ELCBjbWQpOwo+PiArCWVsc2UgaWYgKGN0cmwgJiBO QU5EX0FMRSkKPj4gKwkJbGdtX25hbmRfd3JpdGViKGNoaXAsIE5BTkRfV1JJVEVfQUREUiwgY21k KTsKPj4gK30KPiBMb29rcyBsaWtlIHlvdSdyZSBzdGlsbCBzdGlja2luZyB0byB0aGUgb2xkIGNt ZF9jdHJsKCkgaW50ZXJmYWNlLgo+IFBsZWFzZSBpbmxpbmUgd2hhdCBjYW4gYmUgaW5saW5lZCBp biBleGVjX29wKCkgKGV2ZXJ5dGhpbmcgdGhhdCdzCj4gcmVsYXRlZCB0byBDTUQvQUREUiBjeWNs ZSBlbWlzc2lvbikgYW5kIGFkZCBoZWxwZXJzIGZvciB0aGUgcmVhZC93cml0ZQo+IGRhdGEgbG9n aWMuClllcywgWW91ciBhcmUgcmlnaHQsIGZ1bmN0aW9uIGRlZmluaXRpb24gbmVlZCB0byBiZSB1 cGRhdGVkIGFuZCBhbGlnbmVkIAp3aXRoIGV4ZWNfb3AoKSBiYXNlZCBkZWZpbml0aW9ucwo+PiAr Cj4+ICtzdGF0aWMgaW50IGxnbV9uYW5kX29vYmxheW91dF9lY2Moc3RydWN0IG10ZF9pbmZvICpt dGQsIGludCBzZWN0aW9uLAo+PiArCQkJCSAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdp b24pCj4+ICt7Cj4+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7 Cj4+ICsKPj4gKwlpZiAoc2VjdGlvbikKPj4gKwkJcmV0dXJuIC1FUkFOR0U7Cj4+ICsKPj4gKwlv b2JyZWdpb24tPm9mZnNldCA9IExHTV9OQU5EX0VDQ19PRkZTRVQ7Cj4+ICsJb29icmVnaW9uLT5s ZW5ndGggPSBjaGlwLT5lY2MudG90YWw7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGludCBsZ21fbmFuZF9vb2JsYXlvdXRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10 ZCwgaW50IHNlY3Rpb24sCj4+ICsJCQkJICAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdp b24pCj4+ICt7Cj4+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7 Cj4+ICsKPj4gKwlpZiAoc2VjdGlvbikKPj4gKwkJcmV0dXJuIC1FUkFOR0U7Cj4+ICsKPj4gKwlv b2JyZWdpb24tPm9mZnNldCA9IGNoaXAtPmVjYy50b3RhbCArIExHTV9OQU5EX0VDQ19PRkZTRVQ7 Cj4+ICsJb29icmVnaW9uLT5sZW5ndGggPSBtdGQtPm9vYnNpemUgLSBvb2JyZWdpb24tPm9mZnNl dDsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG10ZF9vb2JsYXlvdXRfb3BzIGxnbV9uYW5kX29vYmxheW91dF9vcHMgPSB7Cj4+ICsJLmVjYyA9 IGxnbV9uYW5kX29vYmxheW91dF9lY2MsCj4+ICsJLmZyZWUgPSBsZ21fbmFuZF9vb2JsYXlvdXRf ZnJlZSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxnbV9uYW5kX2hvc3Qg Km5hbmRfdG9fbGdtKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXApCj4+ICt7Cj4+ICsJcmV0dXJuIGNv bnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbGdtX25hbmRfaG9zdCwgY2hpcCk7Cj4+ICt9Cj4gUGxl YXNlIG1vdmUgdGhhdCBmdW5jdGlvbiBuZXh0IHRvIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbiwgYW5k IHlvdSBjYW4KPiBkcm9wIHRoZSBpbmxpbmUgc3BlY2lmaWVyLCB0aGUgY29tcGlsZXIgc2hvdWxk IGJlIHNtYXJ0IGVub3VnaCB0bwo+IGlubGluZSBpdCBhbnl3YXkuCk5vdGVkLCB3aWxsIG1vdmUg bmV4dCB0byBzdHJ1Y3R1cmXCoCBhbmQgYWxzbyBkcm9wIGlubGluZS4KPj4gK3N0YXRpYyBpbnQg bGdtX25hbmRfZXhlY19vcChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAo+PiArCQkJICAgIGNvbnN0 IHN0cnVjdCBuYW5kX29wZXJhdGlvbiAqb3AsIGJvb2wgY2hlY2tfb25seSkKPj4gK3sKPj4gKwlz dHJ1Y3QgbGdtX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfdG9fbGdtKGNoaXApOwo+PiArCWNvbnN0 IHN0cnVjdCBuYW5kX29wX2luc3RyICppbnN0ciA9IE5VTEw7Cj4+ICsJdW5zaWduZWQgaW50IG9w X2lkOwo+PiArCWludCBpLCByZXQgPSAwOwo+PiArCj4+ICsJZm9yIChvcF9pZCA9IDA7IG9wX2lk IDwgb3AtPm5pbnN0cnM7IG9wX2lkKyspIHsKPj4gKwkJaW5zdHIgPSAmb3AtPmluc3Ryc1tvcF9p ZF07Cj4+ICsKPj4gKwkJbGdtX3NlbGVjdF9jaGlwKGNoaXAsIGhvc3QtPmNzKTsKPiBTaG91bGQg YmUgbW92ZWQgYmVmb3JlIHRoZSBmb3IoKSBsb29wIChubyBuZWVkIHRvIHNlbGVjdCB0aGUgY2hp cAo+IGV2ZXJ5IHRpbWUgeW91IGV4Y3V0ZSBhbiBpbnN0cnVjdGlvbikuCkdvb2QgY2F0Y2gsIFRo YW5rcyEKPj4gKwo+PiArCQlzd2l0Y2ggKGluc3RyLT50eXBlKSB7Cj4+ICsJCWNhc2UgTkFORF9P UF9DTURfSU5TVFI6Cj4+ICsJCQlsZ21fY21kX2N0cmwoY2hpcCwgaW5zdHItPmN0eC5jbWQub3Bj b2RlLCBOQU5EX0NMRSk7Cj4gCQkJbGdtX25hbmRfd3JpdGViKGNoaXAsIE5BTkRfQ0xFX09GRlMs Cj4gCQkJCQlpbnN0ci0+Y3R4LmNtZC5vcGNvZGUpOwkKPgo+PiArCQlicmVhazsKPiBNaXNzaW5n IHRhYiBoZXJlXi4KTm90ZWQuCj4+ICsKPj4gKwkJY2FzZSBOQU5EX09QX0FERFJfSU5TVFI6Cj4+ ICsJCQlmb3IgKGkgPSAwOyBpIDwgaW5zdHItPmN0eC5hZGRyLm5hZGRyczsgaSsrKQo+PiArCQkJ CWxnbV9jbWRfY3RybChjaGlwLCBpbnN0ci0+Y3R4LmFkZHIuYWRkcnNbaV0sCj4+ICsJCQkJCSAg ICAgTkFORF9BTEUpOwo+IAkJCQlsZ21fbmFuZF93cml0ZWIoY2hpcCwgTkFORF9BTEVfT0ZGUywK PiAJCQkJCQlpbnN0ci0+Y3R4LmFkZHIuYWRkcnNbaV0pOwo+Cj4+ICsJCQlicmVhazsKPj4gKwo+ PiArCQljYXNlIE5BTkRfT1BfREFUQV9JTl9JTlNUUjoKPj4gKwkJCWxnbV9yZWFkX2J1ZihjaGlw LCBpbnN0ci0+Y3R4LmRhdGEuYnVmLmluLAo+PiArCQkJCSAgICAgaW5zdHItPmN0eC5kYXRhLmxl bik7Cj4+ICsJCQlicmVhazsKPj4gKwo+PiArCQljYXNlIE5BTkRfT1BfREFUQV9PVVRfSU5TVFI6 Cj4+ICsJCQlsZ21fd3JpdGVfYnVmKGNoaXAsIGluc3RyLT5jdHguZGF0YS5idWYub3V0LAo+PiAr CQkJCSAgICAgIGluc3RyLT5jdHguZGF0YS5sZW4pOwo+PiArCQkJYnJlYWs7Cj4+ICsKPj4gKwkJ Y2FzZSBOQU5EX09QX1dBSVRSRFlfSU5TVFI6Cj4+ICsJCQlyZXQgPSBsZ21fZGV2X3JlYWR5KGNo aXApOwo+IFRoYXQncyB3cm9uZywgV0FJVFJEWSBzaG91bGQgd2FpdCBmb3IgdGhlIE5BTkRfV0FJ VF9SREJZIGZsYWcgdG8gYmUKPiBzZXQgYnV0IHlvdSBvbmx5IGNoZWNrIGl0cyB2YWx1ZSBvbmNl Lgpva2F5LCBsZXQgbWUgY2hlY2sgYW5kIHVwZGF0ZS4KPgo+IAkJCXJldCA9IHJlYWRsX3BvbGxf dGltZW91dChsZ21faG9zdC0+bGdtX3ZhICsKPiAJCQkJCQkgIE5BTkRfV0FJVCwgc3RhdHVzLAo+ IAkJCQkJCSAgc3RhdHVzICYgTkFORF9XQUlUX1JEQlksIDIwLAo+IAkJCQkJCSAgaW5zdHItPmN0 eC53YWl0cmR5LnRpbWVvdXRfbXMgKiAxMDAwKTsKPj4gKwkJCWJyZWFrOwo+PiArCQl9Cj4+ICsJ fQo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVj dCBuYW5kX2NvbnRyb2xsZXJfb3BzIGxnbV9uYW5kX2NvbnRyb2xsZXJfb3BzIHsKPj4gKwkuYXR0 YWNoX2NoaXAgPSBsZ21fbmFuZF9hdHRhY2hfY2hpcCwKPj4gKwkuZXhlY19vcCA9IGxnbV9uYW5k X2V4ZWNfb3AsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgdm9pZCBsZ21fZG1hX2V4aXQoc3RydWN0 IGxnbV9uYW5kX2hvc3QgKmxnbV9ob3N0KQo+IGxnbV9kbWFfY2xlYW51cCgpPwpOb3RlZCwgd2ls bCB1cGRhdGUgdGhlIGZ1bmN0aW9uIG5hbWUKPj4gK3sKPj4gKwlpZiAobGdtX2hvc3QtPmRtYV9y eCkgewo+PiArCQlkbWFfcmVsZWFzZV9jaGFubmVsKGxnbV9ob3N0LT5kbWFfcngpOwo+PiArCQls Z21faG9zdC0+ZG1hX3J4ID0gTlVMTDsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAobGdtX2hvc3QtPmRt YV90eCkgewo+PiArCQlkbWFfcmVsZWFzZV9jaGFubmVsKGxnbV9ob3N0LT5kbWFfdHgpOwo+PiAr CQlsZ21faG9zdC0+ZG1hX3R4ID0gTlVMTDsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgbGdtX2RtYV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGxnbV9uYW5kX2hvc3Qg KmxnbV9ob3N0KQo+PiArewo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwkvKiBQcmVwYXJlIGZvciBU WCBETUE6ICovCj4+ICsJbGdtX2hvc3QtPmRtYV90eCA9IGRtYV9yZXF1ZXN0X2NoYW4oZGV2LCAi dHgiKTsKPj4gKwlpZiAoSVNfRVJSKGxnbV9ob3N0LT5kbWFfdHgpKSB7Cj4+ICsJCXJldCA9IFBU Ul9FUlIobGdtX2hvc3QtPmRtYV90eCk7Cj4+ICsJCWRldl9lcnIoZGV2LCAiY2FuJ3QgZ2V0IHRo ZSBUWCBETUEgY2hhbm5lbCwgZXJyb3IgJWQhXG4iLCByZXQpOwo+PiArCQlnb3RvIGVycjsKPj4g Kwl9Cj4+ICsKPj4gKwkvKiBQcmVwYXJlIGZvciBSWDogKi8KPj4gKwlsZ21faG9zdC0+ZG1hX3J4 ID0gZG1hX3JlcXVlc3RfY2hhbihkZXYsICJyeCIpOwo+IEhtLCB0b28gYmFkIHRoZXJlJ3Mgbm90 IGRldm1fIHZlcnNpb24gZm9yIHRoYXQgb25lLgo+Cj4+ICsJaWYgKElTX0VSUihsZ21faG9zdC0+ ZG1hX3J4KSkgewo+PiArCQlyZXQgPSBQVFJfRVJSKGxnbV9ob3N0LT5kbWFfcngpOwo+PiArCQlk ZXZfZXJyKGRldiwgImNhbid0IGdldCB0aGUgUlggRE1BIGNoYW5uZWwsIGVycm9yICVkXG4iLCBy ZXQpOwo+PiArCQlnb3RvIGVycjsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK2VycjoK PiBObyBuZWVkIGZvciBhbiBlcnJvciBwYXRoIGlmIHlvdSBqdXN0IHJldHVybiB0aGUgZXJyb3Ig Y29kZS4gQlRXLCBJCj4gZG9uJ3QgbGlrZSB0aG9zZSBmdW5jdGlvbnMgdGhhdCBkb24ndCBjbGVh bnVwIGJlaGluZCB0aGVtIHdoZW4gYW4gZXJyb3IKPiBoYXBwZW5zLiBJIGtub3cgaXQncyBhbGwg aGFuZGxlZCBpbiB0aGUgZG1hX2V4aXQoKSBmdW5jdGlvbiwgYnV0IHN0aWxsLgpva2F5LCB3aWxs IHJldHVybiBlcnJvciBjb2RlIGFuZCBhbHNvIGNsZWFudXAuCj4+ICsJcmV0dXJuIHJldDsKPj4g K30KPj4gKwo+PiArc3RhdGljIGludCBsZ21fbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQo+PiArewo+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4+ ICsJc3RydWN0IGxnbV9uYW5kX2hvc3QgKmxnbV9ob3N0Owo+PiArCXN0cnVjdCBuYW5kX2NoaXAg Km5hbmQ7Cj4+ICsJcGh5c19hZGRyX3QgbmFuZGFkZHJfcGE7Cj4+ICsJc3RydWN0IG10ZF9pbmZv ICptdGQ7Cj4+ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4+ICsJaW50IHJldDsKPj4gKwl1MzIg Y3M7Cj4+ICsKPj4gKwlsZ21faG9zdCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGdtX2hv c3QpLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIWxnbV9ob3N0KQo+PiArCQlyZXR1cm4gLUVOT01F TTsKPj4gKwo+PiArCWxnbV9ob3N0LT5kZXYgPSBkZXY7Cj4+ICsJbmFuZF9jb250cm9sbGVyX2lu aXQoJmxnbV9ob3N0LT5jb250cm9sbGVyKTsKPj4gKwo+PiArCWxnbV9ob3N0LT5sZ21fdmEgPQo+ PiArCWRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZV9ieW5hbWUocGRldiwgImxnbW5hbmQi KTsKPiAJbGdtX2hvc3QtPmxnbV92YSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZV9i eW5hbWUocGRldiwKPiAJCQkJCQkJCSAgImxnbW5hbmQiKTsKPgo+PiArCWlmIChJU19FUlIobGdt X2hvc3QtPmxnbV92YSkpCj4+ICsJCXJldHVybiBQVFJfRVJSKGxnbV9ob3N0LT5sZ21fdmEpOwo+ PiArCj4+ICsJbGdtX2hvc3QtPmhzbmFuZF92YSA9Cj4+ICsJZGV2bV9wbGF0Zm9ybV9pb3JlbWFw X3Jlc291cmNlX2J5bmFtZShwZGV2LCAiaHNuYW5kIik7Cj4+ICsJaWYgKElTX0VSUihsZ21faG9z dC0+aHNuYW5kX3ZhKSkKPj4gKwkJcmV0dXJuIFBUUl9FUlIobGdtX2hvc3QtPmhzbmFuZF92YSk7 Cj4+ICsKPj4gKwlyZXQgPSBkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAibmFuZCxjcyIs ICZjcyk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQg Y2hpcCBzZWxlY3Q6ICVkXG4iLCByZXQpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+ PiArCWxnbV9ob3N0LT5jcyA9IGNzOwo+PiArCj4+ICsJbGdtX2hvc3QtPmNzX25hbWUgPSBkZXZt X2thc3ByaW50ZihkZXYsIEdGUF9LRVJORUwsICJuYW5kX2NzJWQiLCBjcyk7Cj4gWW91IGRvbid0 IG5lZWQgdG8ga2VlcCB0aGUgY3NfbmFtZSBhdHRhY2hlZCB0byBsZ21faG9zdCBhcyBpdCdzCj4g YXV0b21hdGljYWxseSByZWxlYXNlLiBZb3UgY2FuIGp1c3QgZ2V0IHJpZCBvZiB0aGUgbGdtX2hv c3QtPmNzX25hbWUKPiBmaWVsZC4KR29vZCBwb2ludCBmb3IgbWUgdG8gdXBkYXRlLCBUaGFua3Mh Cj4+ICsJaWYgKElTX0VSUihsZ21faG9zdC0+Y3NfbmFtZSkpIHsKPj4gKwkJcmV0ID0gUFRSX0VS UihsZ21faG9zdC0+Y3NfbmFtZSk7Cj4+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBj aGlwIHNlbGVjdCBuYW1lOiAlZFxuIiwgcmV0KTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ ICsKPj4gKwlyZXMgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2VfYnluYW1lKHBkZXYs IGxnbV9ob3N0LT5jc19uYW1lKTsKPj4gKwlsZ21faG9zdC0+bmFuZGFkZHJfdmEgPSByZXM7Cj4+ ICsJbmFuZGFkZHJfcGEgPSByZXMtPnN0YXJ0Owo+PiArCWlmIChJU19FUlIobGdtX2hvc3QtPm5h bmRhZGRyX3ZhKSkKPj4gKwkJcmV0dXJuIFBUUl9FUlIobGdtX2hvc3QtPm5hbmRhZGRyX3ZhKTsK Pj4gKwo+PiArCWxnbV9ob3N0LT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKPj4gKwlp ZiAoSVNfRVJSKGxnbV9ob3N0LT5jbGspKSB7Cj4+ICsJCXJldCA9IFBUUl9FUlIobGdtX2hvc3Qt PmNsayk7Cj4+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9jazogJWRcbiIsIHJl dCk7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gY2xrX3ByZXBhcmVf ZW5hYmxlKGxnbV9ob3N0LT5jbGspOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gZW5hYmxlIGNsb2NrOiAlZFxuIiwgcmV0KTsKPj4gKwkJcmV0dXJuIHJldDsK Pj4gKwl9Cj4+ICsJbGdtX2hvc3QtPmNsa19yYXRlID0gY2xrX2dldF9yYXRlKGxnbV9ob3N0LT5j bGspOwo+PiArCj4+ICsJcmV0ID0gbGdtX2RtYV9pbml0KGRldiwgbGdtX2hvc3QpOwo+PiArCWlm IChyZXQpCj4+ICsJCWdvdG8gZGlzYWJsZV9jbGs7Cj4+ICsKPj4gKwl3cml0ZWwobG93ZXJfMzJf Yml0cyhuYW5kYWRkcl9wYSkgfCBMR01fQUREUl9TRUxfUkVHRU4gfCBMR01fQUREUl9NQVNLLAo+ PiArCSAgICAgICBsZ21faG9zdC0+bGdtX3ZhICsgTEdNX0FERFJfU0VMKGNzKSk7Cj4+ICsKPj4g Kwl3cml0ZWwoTEdNX0JVU0NPTl9DTVVMVF9WNCB8IExHTV9CVVNDT05fUkVDT1ZDKDEpIHwKPj4g KwkgICAgICAgTEdNX0JVU0NPTl9IT0xEQygxKSB8IExHTV9CVVNDT05fV0FJVFJEQygyKSB8Cj4+ ICsJICAgICAgIExHTV9CVVNDT05fV0FJVFdSQygyKSB8IExHTV9CVVNDT05fQkNHRU5fQ1MgfCBM R01fQlVTQ09OX0FMRUMgfAo+PiArCSAgICAgICBMR01fQlVTQ09OX1NFVFVQX0VOLCBsZ21faG9z dC0+bGdtX3ZhICsgTEdNX0JVU0NPTihjcykpOwo+PiArCj4+ICsJLyoKPj4gKwkgKiBOQU5EIHBo eXNpY2FsIGFkZHJlc3Mgc2VsZWN0aW9uIGlzIGJhc2VkIG9uIHRoZSBjaGlwIHNlbGVjdAo+PiAr CSAqIGFuZCB3cml0dGVuIHRvIEFERFJfU0VMIHJlZ2lzdGVyIHRvIGdldCBNZW1vcnkgUmVnaW9u IEJhc2UgYWRkcmVzcy4KPj4gKwkgKiBGUEkgQnVzIGFkZHJlc3NlcyBhcmUgY29tcGFyZWQgdG8g dGhpcyBiYXNlIGFkZHJlc3MgaW4gY29uanVuY3Rpb24KPj4gKwkgKiB3aXRoIHRoZSBtYXNrIGNv bnRyb2wuIERyaXZlciBuZWVkIHRvIHByb2dyYW0gdGhpcyBmaWVsZCEKPj4gKwkgKiBBZGRyZXNz OiAweDE3NDAwIGlmIGNoaXAgc2VsZWN0IGlzIENTXzAKPj4gKwkgKiBBZGRyZXNzOiAweDE3QzAw IGlmIGNoaXAgc2VsZWN0IGlzIENTXzEKPj4gKwkgKiBSZWZlciB0aGUgSW50ZWwgTEdNIFNvQyBk YXRhc2hlZXQuCj4+ICsJICovCj4+ICsJd3JpdGVsKDB4MTc0MDAwNTEsIGxnbV9ob3N0LT5sZ21f dmEgKyBMR01fQUREUl9TRUwoMCkpOwo+PiArCXdyaXRlbCgweDE3QzAwMDUxLCBsZ21faG9zdC0+ bGdtX3ZhICsgTEdNX0FERFJfU0VMKGNzKSk7Cj4gTm8gbWFnaWMgdmFsdWUgcGxlYXNlLiBJIGd1 ZXNzIHRoZSAweDUxIGF0IHRoZSBlbmQgZW5jb2RlIHNvbWUgZmxhZ3MsIHNvCj4gcGxlYXNlIGRl c2NyaWJlIHRob3NlIGZpZWxkcyBhbmQgY29tZSB3aXRoIGEgbWFjcm8gdG8gZ2VuZXJhdGUgdGhl IGJhc2UKPiByYW5nZSB2YWx1ZSAob3IgYSBtYXBwaW5nIHRhYmxlKS4Kc3VyZSwgd2lsbCBhZGQg TUFDUk8gaW5zdGVhZCBvZiBtYWdpYyB2YWx1ZXMuCj4+ICsJbmFuZF9zZXRfZmxhc2hfbm9kZSgm bGdtX2hvc3QtPmNoaXAsIGRldi0+b2Zfbm9kZSk7Cj4+ICsJbXRkID0gbmFuZF90b19tdGQoJmxn bV9ob3N0LT5jaGlwKTsKPj4gKwltdGQtPmRldi5wYXJlbnQgPSBkZXY7Cj4+ICsJbGdtX2hvc3Qt PmRldiA9IGRldjsKPj4gKwo+PiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGxnbV9ob3N0 KTsKPj4gKwluYW5kX3NldF9jb250cm9sbGVyX2RhdGEoJmxnbV9ob3N0LT5jaGlwLCBsZ21faG9z dCk7Cj4+ICsKPj4gKwluYW5kID0gJmxnbV9ob3N0LT5jaGlwOwo+PiArCW5hbmQtPmNvbnRyb2xs ZXIgPSAmbGdtX2hvc3QtPmNvbnRyb2xsZXI7Cj4+ICsJbmFuZC0+Y29udHJvbGxlci0+b3BzID0g JmxnbV9uYW5kX2NvbnRyb2xsZXJfb3BzOwo+PiArCj4+ICsJLyogU2NhbiB0byBmaW5kIGV4aXN0 ZW5jZSBvZiB0aGUgZGV2aWNlICovCj4+ICsJcmV0ID0gbmFuZF9zY2FuKCZsZ21faG9zdC0+Y2hp cCwgMSk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZ290byBleGl0X2RtYTsKPj4gKwo+PiArCXJldCA9 IG10ZF9kZXZpY2VfcmVnaXN0ZXIobXRkLCBOVUxMLCAwKTsKPj4gKwlpZiAocmV0KQo+PiArCQln b3RvIGNsZWFuX25hbmQ7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gKwo+PiArY2xlYW5fbmFuZDoK Pj4gKwluYW5kX2NsZWFudXAoJmxnbV9ob3N0LT5jaGlwKTsKPj4gK2V4aXRfZG1hOgo+PiArCWxn bV9kbWFfZXhpdChsZ21faG9zdCk7Cj4+ICtkaXNhYmxlX2NsazoKPj4gKwljbGtfZGlzYWJsZV91 bnByZXBhcmUobGdtX2hvc3QtPmNsayk7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGxnbV9uYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+PiArewo+PiArCXN0cnVjdCBsZ21fbmFuZF9ob3N0ICpsZ21faG9zdCA9IHBsYXRmb3Jt X2dldF9kcnZkYXRhKHBkZXYpOwo+PiArCj4+ICsJbmFuZF9yZWxlYXNlKCZsZ21faG9zdC0+Y2hp cCk7Cj4gQ2FuIHlvdSB1c2UgbXRkX2RldmljZV91bnJlZ2lzdGVyKCkgKyBuYW5kX2NsZWFudXAo KSBpbnN0ZWFkLCBhbmQgY2hlY2sKPiB0aGVpciByZXR1cm4gdmFsdWU/ClN1cmUsIHdpbGwgdXNl IC4KPj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUobGdtX2hvc3QtPmNsayk7Cj4+ICsJbGdtX2Rt YV9leGl0KGxnbV9ob3N0KTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBsZ21fbmFuZF9tYXRjaFtdID0gewo+PiArCXsg LmNvbXBhdGlibGUgPSAiaW50ZWwsbGdtLW5hbmQiLCB9LAo+PiArCXt9Cj4+ICt9Owo+PiArTU9E VUxFX0RFVklDRV9UQUJMRShvZiwgbGdtX25hbmRfbWF0Y2gpOwo+IFlvdSBwcm9iYWJseSBoYXZl IGEgbWlzc2luZyAiZGVwZW5kcyBvbiBPRiIgaW4geW91ciBLY29uZmlnLgpva2F5ICwgTm90ZWQu Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGxnbV9uYW5kX2RyaXZlciA9 IHsKPj4gKwkucHJvYmUgPSBsZ21fbmFuZF9wcm9iZSwKPj4gKwkucmVtb3ZlID0gbGdtX25hbmRf cmVtb3ZlLAo+PiArCS5kcml2ZXIgPSB7Cj4+ICsJCS5uYW1lID0gImludGVsLWxnbS1uYW5kIiwK Pj4gKwkJLm9mX21hdGNoX3RhYmxlID0gbGdtX25hbmRfbWF0Y2gsCj4+ICsJfSwKPj4gKwo+PiAr fTsKPj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobGdtX25hbmRfZHJpdmVyKTsKPj4gKwo+PiAr TU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+PiArTU9EVUxFX0FVVEhPUigiVmFkaXZlbCBNdXJ1 Z2FuIFIgPHZhZGl2ZWwubXVydWdhbngucmFtdXRoZXZhckBpbnRlbC5jb20+Iik7Cj4+ICtNT0RV TEVfREVTQ1JJUFRJT04oIkludGVsJ3MgTEdNIEV4dGVybmFsIEJ1cyBOQU5EIENvbnRyb2xsZXIg ZHJpdmVyIik7Cj4gSSBkaWRuJ3QgcmV2aWV3IHRoZSBETUEgYW5kIEVDQyBhc3BlY3RzIHlldCwg YnV0IEkgdGhpbmsgeW91IGhhdmUgZW5vdWdoCj4gdGhpbmdzIHRvIGFkZHJlc3MgZm9yIGEgdjMu CgpUaGFua3MgYSBsb3QgZm9yIHRoZSByZXZpZXcgY29tbWVudHMgYW5kIHZhbHVhYmxlIGlucHV0 cyB0byBtZSBmb3IgCmZ1cnRoZXIgZHJpdmVyIHBhdGNoIHByZXBhcmF0aW9uLgoKUmVnYXJkcwpW YWR2aWVsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KTGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo=