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=-5.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=no 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 5ED34C4708F for ; Mon, 31 May 2021 08:43:06 +0000 (UTC) Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (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 EE684610A1 for ; Mon, 31 May 2021 08:43:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EE684610A1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id A861D607C5; Mon, 31 May 2021 08:43:05 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ks8wIlkcAzGH; Mon, 31 May 2021 08:43:03 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTP id 48A0060629; Mon, 31 May 2021 08:43:03 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 1D8B4C000E; Mon, 31 May 2021 08:43:03 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 8F830C0001 for ; Mon, 31 May 2021 08:43:01 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 6C1A24018E for ; Mon, 31 May 2021 08:43:01 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1zbgA5aEAVZ2 for ; Mon, 31 May 2021 08:42:59 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by smtp2.osuosl.org (Postfix) with ESMTPS id F3C4A4015C for ; Mon, 31 May 2021 08:42:58 +0000 (UTC) IronPort-SDR: DlMb49R5bEtTOfjBnCqSC7Z8aVa096N3aYMz+G3zwKBkQBHl5WU7t1RzoCBJDPvkEaLDPFmAJ2 KRMLzKM2I8zQ== X-IronPort-AV: E=McAfee;i="6200,9189,10000"; a="190685030" X-IronPort-AV: E=Sophos;i="5.83,236,1616482800"; d="scan'208";a="190685030" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 May 2021 01:42:57 -0700 IronPort-SDR: rruVj7OFpHPOEbbSAQLhUdwsQhXl2aT87uw4m19gK+XvBEeq6mu3HNtSeWdpez8N0qK2D9+L3u w5fJU9xIwZ4A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,236,1616482800"; d="scan'208";a="482004602" Received: from yiliu-dev.bj.intel.com (HELO yiliu-dev) ([10.238.156.135]) by fmsmga002.fm.intel.com with ESMTP; 31 May 2021 01:42:50 -0700 Date: Mon, 31 May 2021 16:41:18 +0800 From: Liu Yi L To: Jason Wang Subject: Re: [RFC] /dev/ioasid uAPI proposal Message-ID: <20210531164118.265789ee@yiliu-dev> In-Reply-To: References: Organization: IAGS/SSE(OTC) X-Mailer: Claws Mail 3.17.5 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Cc: Jiang@osuosl.org, "Tian, Kevin" , Ashok@osuosl.org, "kvm@vger.kernel.org" , "Alex Williamson (alex.williamson@redhat.com)\" , Eric Auger , Jonathan Corbet , "@osuosl.org, Raj@osuosl.org, LKML , " , Jacob Pan , Jean-Philippe Brucker , David Gibson , Kirti Wankhede , Robin Murphy "@osuosl.org, " , "@osuosl.org, "iommu@lists.linux-foundation.org" , Jason Gunthorpe , Hao@osuosl.org, Dave@osuosl.org, " , "@osuosl.org, David Woodhouse , Wu@osuosl.org X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" T24gRnJpLCAyOCBNYXkgMjAyMSAxMDoyNDo1NiArMDgwMCwgSmFzb24gV2FuZyB3cm90ZToKCj4g 5ZyoIDIwMjEvNS8yNyDkuIvljYgzOjU4LCBUaWFuLCBLZXZpbiDlhpnpgZM6Cj4gPiAvZGV2L2lv YXNpZCBwcm92aWRlcyBhbiB1bmlmaWVkIGludGVyZmFjZSBmb3IgbWFuYWdpbmcgSS9PIHBhZ2Ug dGFibGVzIGZvcgo+ID4gZGV2aWNlcyBhc3NpZ25lZCB0byB1c2Vyc3BhY2UuIERldmljZSBwYXNz dGhyb3VnaCBmcmFtZXdvcmtzIChWRklPLCB2RFBBLAo+ID4gZXRjLikgYXJlIGV4cGVjdGVkIHRv IHVzZSB0aGlzIGludGVyZmFjZSBpbnN0ZWFkIG9mIGNyZWF0aW5nIHRoZWlyIG93biBsb2dpYyB0 bwo+ID4gaXNvbGF0ZSB1bnRydXN0ZWQgZGV2aWNlIERNQXMgaW5pdGlhdGVkIGJ5IHVzZXJzcGFj ZS4gIAo+IAo+IAo+IE5vdCBhIG5hdGl2ZSBzcGVha2VyIGJ1dCAvZGV2L2lvYXMgc2VlbXMgYmV0 dGVyPwoKd2UgYXJlIG9wZW4gb24gaXQuIHVzaW5nIC9kZXYvaW9hc2lkIGlzIGp1c3QgYmVjYXVz ZSBvZiB3ZSBhcmUgdXNpbmcgaXQgaW4gdGhlCnByZXZpb3VzIGRpc2N1c3Npb24uIF5fXgoKPiAK PiA+Cj4gPiBUaGlzIHByb3Bvc2FsIGRlc2NyaWJlcyB0aGUgdUFQSSBvZiAvZGV2L2lvYXNpZCBh bmQgYWxzbyBzYW1wbGUgc2VxdWVuY2VzCj4gPiB3aXRoIFZGSU8gYXMgZXhhbXBsZSBpbiB0eXBp Y2FsIHVzYWdlcy4gVGhlIGRyaXZlci1mYWNpbmcga2VybmVsIEFQSSBwcm92aWRlZAo+ID4gYnkg dGhlIGlvbW11IGxheWVyIGlzIHN0aWxsIFRCRCwgd2hpY2ggY2FuIGJlIGRpc2N1c3NlZCBhZnRl ciBjb25zZW5zdXMgaXMKPiA+IG1hZGUgb24gdGhpcyB1QVBJLgo+ID4KPiA+IEl0J3MgYmFzZWQg b24gYSBsZW5ndGh5IGRpc2N1c3Npb24gc3RhcnRpbmcgZnJvbSBoZXJlOgo+ID4gCWh0dHBzOi8v bG9yZS5rZXJuZWwub3JnL2xpbnV4LWlvbW11LzIwMjEwMzMwMTMyODMwLkdPMjM1NjI4MUBudmlk aWEuY29tLwo+ID4KPiA+IEl0IGVuZHMgdXAgdG8gYmUgYSBsb25nIHdyaXRpbmcgZHVlIHRvIG1h bnkgdGhpbmdzIHRvIGJlIHN1bW1hcml6ZWQgYW5kCj4gPiBub24tdHJpdmlhbCBlZmZvcnQgcmVx dWlyZWQgdG8gY29ubmVjdCB0aGVtIGludG8gYSBjb21wbGV0ZSBwcm9wb3NhbC4KPiA+IEhvcGUg aXQgcHJvdmlkZXMgYSBjbGVhbiBiYXNlIHRvIGNvbnZlcmdlLgo+ID4KPiA+IFRPQwo+ID4gPT09 PQo+ID4gMS4gVGVybWlub2xvZ2llcyBhbmQgQ29uY2VwdHMKPiA+IDIuIHVBUEkgUHJvcG9zYWwK PiA+ICAgICAgMi4xLiAvZGV2L2lvYXNpZCB1QVBJCj4gPiAgICAgIDIuMi4gL2Rldi92ZmlvIHVB UEkKPiA+ICAgICAgMi4zLiAvZGV2L2t2bSB1QVBJCj4gPiAzLiBTYW1wbGUgc3RydWN0dXJlcyBh bmQgaGVscGVyIGZ1bmN0aW9ucwo+ID4gNC4gUEFTSUQgdmlydHVhbGl6YXRpb24KPiA+IDUuIFVz ZSBDYXNlcyBhbmQgRmxvd3MKPiA+ICAgICAgNS4xLiBBIHNpbXBsZSBleGFtcGxlCj4gPiAgICAg IDUuMi4gTXVsdGlwbGUgSU9BU0lEcyAobm8gbmVzdGluZykKPiA+ICAgICAgNS4zLiBJT0FTSUQg bmVzdGluZyAoc29mdHdhcmUpCj4gPiAgICAgIDUuNC4gSU9BU0lEIG5lc3RpbmcgKGhhcmR3YXJl KQo+ID4gICAgICA1LjUuIEd1ZXN0IFNWQSAodlNWQSkKPiA+ICAgICAgNS42LiBJL08gcGFnZSBm YXVsdAo+ID4gICAgICA1LjcuIEJJTkRfUEFTSURfVEFCTEUKPiA+ID09PT0KPiA+ClsuLi5dCj4g Pgo+ID4gV2l0aCBhYm92ZSBkZXNpZ24gL2Rldi9pb2FzaWQgdUFQSSBpcyBhbGwgYWJvdXQgSS9P IGFkZHJlc3Mgc3BhY2VzLgo+ID4gSXQgZG9lc24ndCBpbmNsdWRlIGFueSBkZXZpY2Ugcm91dGlu ZyBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgb25seQo+ID4gaW5kaXJlY3RseSByZWdpc3RlcmVkIHRv IHRoZSBpb2FzaWQgZHJpdmVyIHRocm91Z2ggVkZJTyB1QVBJLiBGb3IKPiA+IGV4YW1wbGUsIEkv TyBwYWdlIGZhdWx0IGlzIGFsd2F5cyByZXBvcnRlZCB0byB1c2Vyc3BhY2UgcGVyIElPQVNJRCwK PiA+IGFsdGhvdWdoIGl0J3MgcGh5c2ljYWxseSByZXBvcnRlZCBwZXIgZGV2aWNlIChSSUQrUEFT SUQpLiBJZiB0aGVyZSBpcyBhCj4gPiBuZWVkIG9mIGZ1cnRoZXIgcmVsYXlpbmcgdGhpcyBmYXVs dCBpbnRvIHRoZSBndWVzdCwgdGhlIHVzZXIgaXMgcmVzcG9uc2libGUKPiA+IG9mIGlkZW50aWZ5 aW5nIHRoZSBkZXZpY2UgYXR0YWNoZWQgdG8gdGhpcyBJT0FTSUQgKHJhbmRvbWx5IHBpY2sgb25l IGlmCj4gPiBtdWx0aXBsZSBhdHRhY2hlZCBkZXZpY2VzKSBhbmQgdGhlbiBnZW5lcmF0ZXMgYSBw ZXItZGV2aWNlIHZpcnR1YWwgSS9PCj4gPiBwYWdlIGZhdWx0IGludG8gZ3Vlc3QuIFNpbWlsYXJs eSB0aGUgaW90bGIgaW52YWxpZGF0aW9uIHVBUEkgZGVzY3JpYmVzIHRoZQo+ID4gZ3JhbnVsYXJp dHkgaW4gdGhlIEkvTyBhZGRyZXNzIHNwYWNlIChhbGwsIG9yIGEgcmFuZ2UpLCBkaWZmZXJlbnQg ZnJvbSB0aGUKPiA+IHVuZGVybHlpbmcgSU9NTVUgc2VtYW50aWNzIChkb21haW4td2lkZSwgUEFT SUQtd2lkZSwgcmFuZ2UtYmFzZWQpLgo+ID4KPiA+IEkvTyBwYWdlIHRhYmxlcyByb3V0ZWQgdGhy b3VnaCBQQVNJRCBhcmUgaW5zdGFsbGVkIGluIGEgcGVyLVJJRCBQQVNJRAo+ID4gdGFibGUgc3Ry dWN0dXJlLiAgCj4gCj4gCj4gSSdtIG5vdCBzdXJlIHRoaXMgaXMgdHJ1ZSBmb3IgYWxsIGFyY2hz LgoKdG9kYXksIHllcy4gYW5kIGVjaG8gSmFzb25HJ3MgY29tbWVudCBvbiBpdC4KCj4gCj4gPiAg IFNvbWUgcGxhdGZvcm1zIGltcGxlbWVudCB0aGUgUEFTSUQgdGFibGUgaW4gdGhlIGd1ZXN0Cj4g PiBwaHlzaWNhbCBzcGFjZSAoR1BBKSwgZXhwZWN0aW5nIGl0IG1hbmFnZWQgYnkgdGhlIGd1ZXN0 LiBUaGUgZ3Vlc3QKPiA+IFBBU0lEIHRhYmxlIGlzIGJvdW5kIHRvIHRoZSBJT01NVSBhbHNvIGJ5 IGF0dGFjaGluZyB0byBhbiBJT0FTSUQsCj4gPiByZXByZXNlbnRpbmcgdGhlIHBlci1SSUQgdlBB U0lEIHNwYWNlLgo+ID4KWy4uLl0KPiA+Cj4gPiAvKgo+ID4gICAgKiBHZXQgaW5mb3JtYXRpb24g YWJvdXQgYW4gSS9PIGFkZHJlc3Mgc3BhY2UKPiA+ICAgICoKPiA+ICAgICogU3VwcG9ydGVkIGNh cGFiaWxpdGllczoKPiA+ICAgICoJLSBWRklPIHR5cGUxIG1hcC91bm1hcDsKPiA+ICAgICoJLSBw Z3RhYmxlL3Bhc2lkX3RhYmxlIGJpbmRpbmcKPiA+ICAgICoJLSBoYXJkd2FyZSBuZXN0aW5nIHZz LiBzb2Z0d2FyZSBuZXN0aW5nOwo+ID4gICAgKgktIC4uLgo+ID4gICAgKgo+ID4gICAgKiBSZWxh dGVkIGF0dHJpYnV0ZXM6Cj4gPiAgICAqIAktIHN1cHBvcnRlZCBwYWdlIHNpemVzLCByZXNlcnZl ZCBJT1ZBIHJhbmdlcyAoRE1BIG1hcHBpbmcpOwo+ID4gICAgKgktIHZlbmRvciBwZ3RhYmxlIGZv cm1hdHMgKHBndGFibGUgYmluZGluZyk7Cj4gPiAgICAqCS0gbnVtYmVyIG9mIGNoaWxkIElPQVNJ RHMgKG5lc3RpbmcpOwo+ID4gICAgKgktIC4uLgo+ID4gICAgKgo+ID4gICAgKiBBYm92ZSBpbmZv cm1hdGlvbiBpcyBhdmFpbGFibGUgb25seSBhZnRlciBvbmUgb3IgbW9yZSBkZXZpY2VzIGFyZQo+ ID4gICAgKiBhdHRhY2hlZCB0byB0aGUgc3BlY2lmaWVkIElPQVNJRC4gT3RoZXJ3aXNlIHRoZSBJ T0FTSUQgaXMganVzdCBhCj4gPiAgICAqIG51bWJlciB3L28gYW55IGNhcGFiaWxpdHkgb3IgYXR0 cmlidXRlLgo+ID4gICAgKgo+ID4gICAgKiBJbnB1dCBwYXJhbWV0ZXJzOgo+ID4gICAgKgktIHUz MiBpb2FzaWQ7Cj4gPiAgICAqCj4gPiAgICAqIE91dHB1dCBwYXJhbWV0ZXJzOgo+ID4gICAgKgkt IG1hbnkuIFRCRC4KPiA+ICAgICovCj4gPiAjZGVmaW5lIElPQVNJRF9HRVRfSU5GTwlfSU8oSU9B U0lEX1RZUEUsIElPQVNJRF9CQVNFICsgNSkKPiA+Cj4gPgo+ID4gLyoKPiA+ICAgICogTWFwL3Vu bWFwIHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzZXMgdG8gSS9PIHZpcnR1YWwgYWRkcmVzc2VzLgo+ ID4gICAgKgo+ID4gICAgKiBQcm92aWRlIFZGSU8gdHlwZTEgZXF1aXZhbGVudCBzZW1hbnRpY3Mu IFN0YXJ0IHdpdGggdGhlIHNhbWUKPiA+ICAgICogcmVzdHJpY3Rpb24gZS5nLiB0aGUgdW5tYXAg c2l6ZSBzaG91bGQgbWF0Y2ggdGhvc2UgdXNlZCBpbiB0aGUKPiA+ICAgICogb3JpZ2luYWwgbWFw cGluZyBjYWxsLgo+ID4gICAgKgo+ID4gICAgKiBJZiBJT0FTSURfUkVHSVNURVJfTUVNT1JZIGhh cyBiZWVuIGNhbGxlZCwgdGhlIG1hcHBlZCB2YWRkcgo+ID4gICAgKiBtdXN0IGJlIGFscmVhZHkg aW4gdGhlIHByZXJlZ2lzdGVyZWQgbGlzdC4KPiA+ICAgICoKPiA+ICAgICogSW5wdXQgcGFyYW1l dGVyczoKPiA+ICAgICoJLSB1MzIgaW9hc2lkOwo+ID4gICAgKgktIHJlZmVyIHRvIHZmaW9faW9t bXVfdHlwZTFfZG1hX3t1bn1tYXAKPiA+ICAgICoKPiA+ICAgICogUmV0dXJuOiAwIG9uIHN1Y2Nl c3MsIC1lcnJubyBvbiBmYWlsdXJlLgo+ID4gICAgKi8KPiA+ICNkZWZpbmUgSU9BU0lEX01BUF9E TUEJX0lPKElPQVNJRF9UWVBFLCBJT0FTSURfQkFTRSArIDYpCj4gPiAjZGVmaW5lIElPQVNJRF9V Tk1BUF9ETUEJX0lPKElPQVNJRF9UWVBFLCBJT0FTSURfQkFTRSArIDcpCj4gPgo+ID4KPiA+IC8q Cj4gPiAgICAqIENyZWF0ZSBhIG5lc3RpbmcgSU9BU0lEIChjaGlsZCkgb24gYW4gZXhpc3Rpbmcg SU9BU0lEIChwYXJlbnQpCj4gPiAgICAqCj4gPiAgICAqIElPQVNJRHMgY2FuIGJlIG5lc3RlZCB0 b2dldGhlciwgaW1wbHlpbmcgdGhhdCB0aGUgb3V0cHV0IGFkZHJlc3MKPiA+ICAgICogZnJvbSBv bmUgSS9PIHBhZ2UgdGFibGUgKGNoaWxkKSBtdXN0IGJlIGZ1cnRoZXIgdHJhbnNsYXRlZCBieQo+ ID4gICAgKiBhbm90aGVyIEkvTyBwYWdlIHRhYmxlIChwYXJlbnQpLgo+ID4gICAgKgo+ID4gICAg KiBBcyB0aGUgY2hpbGQgYWRkcyBlc3NlbnRpYWxseSBhbm90aGVyIHJlZmVyZW5jZSB0byB0aGUg SS9PIHBhZ2UgdGFibGUKPiA+ICAgICogcmVwcmVzZW50ZWQgYnkgdGhlIHBhcmVudCwgYW55IGRl dmljZSBhdHRhY2hlZCB0byB0aGUgY2hpbGQgaW9hc2lkCj4gPiAgICAqIG11c3QgYmUgYWxyZWFk eSBhdHRhY2hlZCB0byB0aGUgcGFyZW50Lgo+ID4gICAgKgo+ID4gICAgKiBJbiBjb25jZXB0IHRo ZXJlIGlzIG5vIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGhlIG5lc3RpbmcgbGV2ZWxzLgo+ID4g ICAgKiBIb3dldmVyIGZvciB0aGUgbWFqb3JpdHkgY2FzZSBvbmUgbmVzdGluZyBsZXZlbCBpcyBz dWZmaWNpZW50LiBUaGUKPiA+ICAgICogdXNlciBzaG91bGQgY2hlY2sgd2hldGhlciBhbiBJT0FT SUQgc3VwcG9ydHMgbmVzdGluZyB0aHJvdWdoCj4gPiAgICAqIElPQVNJRF9HRVRfSU5GTy4gRm9y IGV4YW1wbGUsIGlmIG9ubHkgb25lIG5lc3RpbmcgbGV2ZWwgaXMgYWxsb3dlZCwKPiA+ICAgICog dGhlIG5lc3RpbmcgY2FwYWJpbGl0eSBpcyByZXBvcnRlZCBvbmx5IG9uIHRoZSBwYXJlbnQgaW5z dGVhZCBvZiB0aGUKPiA+ICAgICogY2hpbGQuCj4gPiAgICAqCj4gPiAgICAqIFVzZXIgYWxzbyBu ZWVkcyBjaGVjayAodmlhIElPQVNJRF9HRVRfSU5GTykgd2hldGhlciB0aGUgbmVzdGluZwo+ID4g ICAgKiBpcyBpbXBsZW1lbnRlZCBpbiBoYXJkd2FyZSBvciBzb2Z0d2FyZS4gSWYgc29mdHdhcmUt YmFzZWQsIERNQQo+ID4gICAgKiBtYXBwaW5nIHByb3RvY29sIHNob3VsZCBiZSB1c2VkIG9uIHRo ZSBjaGlsZCBJT0FTSUQuIE90aGVyd2lzZSwKPiA+ICAgICogdGhlIGNoaWxkIHNob3VsZCBiZSBv cGVyYXRlZCB3aXRoIHBndGFibGUgYmluZGluZyBwcm90b2NvbC4KPiA+ICAgICoKPiA+ICAgICog SW5wdXQgcGFyYW1ldGVyczoKPiA+ICAgICoJLSB1MzIgcGFyZW50X2lvYXNpZDsKPiA+ICAgICoK PiA+ICAgICogUmV0dXJuOiBjaGlsZF9pb2FzaWQgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1 cmU7Cj4gPiAgICAqLwo+ID4gI2RlZmluZSBJT0FTSURfQ1JFQVRFX05FU1RJTkcJX0lPKElPQVNJ RF9UWVBFLCBJT0FTSURfQkFTRSArIDgpCj4gPgo+ID4KPiA+IC8qCj4gPiAgICAqIEJpbmQgYW4g dXNlci1tYW5hZ2VkIEkvTyBwYWdlIHRhYmxlIHdpdGggdGhlIElPTU1VCj4gPiAgICAqCj4gPiAg ICAqIEJlY2F1c2UgdXNlciBwYWdlIHRhYmxlIGlzIHVudHJ1c3RlZCwgSU9BU0lEIG5lc3Rpbmcg bXVzdCBiZSBlbmFibGVkCj4gPiAgICAqIGZvciB0aGlzIGlvYXNpZCBzbyB0aGUga2VybmVsIGNh biBlbmZvcmNlIGl0cyBETUEgaXNvbGF0aW9uIHBvbGljeQo+ID4gICAgKiB0aHJvdWdoIHRoZSBw YXJlbnQgaW9hc2lkLgo+ID4gICAgKgo+ID4gICAgKiBQZ3RhYmxlIGJpbmRpbmcgcHJvdG9jb2wg aXMgZGlmZmVyZW50IGZyb20gRE1BIG1hcHBpbmcuIFRoZSBsYXR0ZXIKPiA+ICAgICogaGFzIHRo ZSBJL08gcGFnZSB0YWJsZSBjb25zdHJ1Y3RlZCBieSB0aGUga2VybmVsIGFuZCB1cGRhdGVkCj4g PiAgICAqIGFjY29yZGluZyB0byB1c2VyIE1BUC9VTk1BUCBjb21tYW5kcy4gV2l0aCBwZ3RhYmxl IGJpbmRpbmcgdGhlCj4gPiAgICAqIHdob2xlIHBhZ2UgdGFibGUgaXMgY3JlYXRlZCBhbmQgdXBk YXRlZCBieSB1c2Vyc3BhY2UsIHRodXMgZGlmZmVyZW50Cj4gPiAgICAqIHNldCBvZiBjb21tYW5k cyBhcmUgcmVxdWlyZWQgKGJpbmQsIGlvdGxiIGludmFsaWRhdGlvbiwgcGFnZSBmYXVsdCwgZXRj LikuCj4gPiAgICAqCj4gPiAgICAqIEJlY2F1c2UgdGhlIHBhZ2UgdGFibGUgaXMgZGlyZWN0bHkg d2Fsa2VkIGJ5IHRoZSBJT01NVSwgdGhlIHVzZXIKPiA+ICAgICogbXVzdCAgdXNlIGEgZm9ybWF0 IGNvbXBhdGlibGUgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIEl0IGNhbgo+ID4gICAgKiBj aGVjayB0aGUgZm9ybWF0IGluZm9ybWF0aW9uIHRocm91Z2ggSU9BU0lEX0dFVF9JTkZPLgo+ID4g ICAgKgo+ID4gICAgKiBUaGUgcGFnZSB0YWJsZSBpcyBib3VuZCB0byB0aGUgSU9NTVUgYWNjb3Jk aW5nIHRvIHRoZSByb3V0aW5nCj4gPiAgICAqIGluZm9ybWF0aW9uIG9mIGVhY2ggYXR0YWNoZWQg ZGV2aWNlIHVuZGVyIHRoZSBzcGVjaWZpZWQgSU9BU0lELiBUaGUKPiA+ICAgICogcm91dGluZyBp bmZvcm1hdGlvbiAoUklEIGFuZCBvcHRpb25hbCBQQVNJRCkgaXMgcmVnaXN0ZXJlZCB3aGVuIGEK PiA+ICAgICogZGV2aWNlIGlzIGF0dGFjaGVkIHRvIHRoaXMgSU9BU0lEIHRocm91Z2ggVkZJTyB1 QVBJLgo+ID4gICAgKgo+ID4gICAgKiBJbnB1dCBwYXJhbWV0ZXJzOgo+ID4gICAgKgktIGNoaWxk X2lvYXNpZDsKPiA+ICAgICoJLSBhZGRyZXNzIG9mIHRoZSB1c2VyIHBhZ2UgdGFibGU7Cj4gPiAg ICAqCS0gZm9ybWF0cyAodmVuZG9yLCBhZGRyZXNzX3dpZHRoLCBldGMuKTsKPiA+ICAgICoKPiA+ ICAgICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgo+ID4gICAgKi8K PiA+ICNkZWZpbmUgSU9BU0lEX0JJTkRfUEdUQUJMRQkJX0lPKElPQVNJRF9UWVBFLCBJT0FTSURf QkFTRSArIDkpCj4gPiAjZGVmaW5lIElPQVNJRF9VTkJJTkRfUEdUQUJMRQlfSU8oSU9BU0lEX1RZ UEUsIElPQVNJRF9CQVNFICsgMTApCj4gPgo+ID4KPiA+IC8qCj4gPiAgICAqIEJpbmQgYW4gdXNl ci1tYW5hZ2VkIFBBU0lEIHRhYmxlIHRvIHRoZSBJT01NVQo+ID4gICAgKgo+ID4gICAgKiBUaGlz IGlzIHJlcXVpcmVkIGZvciBwbGF0Zm9ybXMgd2hpY2ggcGxhY2UgUEFTSUQgdGFibGUgaW4gdGhl IEdQQSBzcGFjZS4KPiA+ICAgICogSW4gdGhpcyBjYXNlIHRoZSBzcGVjaWZpZWQgSU9BU0lEIHJl cHJlc2VudHMgdGhlIHBlci1SSUQgUEFTSUQgc3BhY2UuCj4gPiAgICAqCj4gPiAgICAqIEFsdGVy bmF0aXZlbHkgdGhpcyBtYXkgYmUgcmVwbGFjZWQgYnkgSU9BU0lEX0JJTkRfUEdUQUJMRSBwbHVz IGEKPiA+ICAgICogc3BlY2lhbCBmbGFnIHRvIGluZGljYXRlIHRoZSBkaWZmZXJlbmNlIGZyb20g bm9ybWFsIEkvTyBhZGRyZXNzIHNwYWNlcy4KPiA+ICAgICoKPiA+ICAgICogVGhlIGZvcm1hdCBp bmZvIG9mIHRoZSBQQVNJRCB0YWJsZSBpcyByZXBvcnRlZCBpbiBJT0FTSURfR0VUX0lORk8uCj4g PiAgICAqCj4gPiAgICAqIEFzIGV4cGxhaW5lZCBpbiB0aGUgZGVzaWduIHNlY3Rpb24sIHVzZXIt bWFuYWdlZCBJL08gcGFnZSB0YWJsZXMgbXVzdAo+ID4gICAgKiBiZSBleHBsaWNpdGx5IGJvdW5k IHRvIHRoZSBrZXJuZWwgZXZlbiBvbiB0aGVzZSBwbGF0Zm9ybXMuIEl0IGFsbG93cwo+ID4gICAg KiB0aGUga2VybmVsIHRvIHVuaWZvcm1seSBtYW5hZ2UgSS9PIGFkZHJlc3Mgc3BhY2VzIGNyb3Nz IGFsbCBwbGF0Zm9ybXMuCj4gPiAgICAqIE90aGVyd2lzZSwgdGhlIGlvdGxiIGludmFsaWRhdGlv biBhbmQgcGFnZSBmYXVsdGluZyB1QVBJIG11c3QgYmUgaGFja2VkCj4gPiAgICAqIHRvIGNhcnJ5 IGRldmljZSByb3V0aW5nIGluZm9ybWF0aW9uIHRvIGluZGlyZWN0bHkgbWFyayB0aGUgaGlkZGVu IEkvTwo+ID4gICAgKiBhZGRyZXNzIHNwYWNlcy4KPiA+ICAgICoKPiA+ICAgICogSW5wdXQgcGFy YW1ldGVyczoKPiA+ICAgICoJLSBjaGlsZF9pb2FzaWQ7Cj4gPiAgICAqCS0gYWRkcmVzcyBvZiBQ QVNJRCB0YWJsZTsKPiA+ICAgICoJLSBmb3JtYXRzICh2ZW5kb3IsIHNpemUsIGV0Yy4pOwo+ID4g ICAgKgo+ID4gICAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCj4g PiAgICAqLwo+ID4gI2RlZmluZSBJT0FTSURfQklORF9QQVNJRF9UQUJMRQlfSU8oSU9BU0lEX1RZ UEUsIElPQVNJRF9CQVNFICsgMTEpCj4gPiAjZGVmaW5lIElPQVNJRF9VTkJJTkRfUEFTSURfVEFC TEUJX0lPKElPQVNJRF9UWVBFLCBJT0FTSURfQkFTRSArIDEyKQo+ID4KPiA+Cj4gPiAvKgo+ID4g ICAgKiBJbnZhbGlkYXRlIElPVExCIGZvciBhbiB1c2VyLW1hbmFnZWQgSS9PIHBhZ2UgdGFibGUK PiA+ICAgICoKPiA+ICAgICogVW5saWtlIHdoYXQncyBkZWZpbmVkIGluIGluY2x1ZGUvdWFwaS9s aW51eC9pb21tdS5oLCB0aGlzIGNvbW1hbmQKPiA+ICAgICogZG9lc24ndCBhbGxvdyB0aGUgdXNl ciB0byBzcGVjaWZ5IGNhY2hlIHR5cGUgYW5kIGxpa2VseSBzdXBwb3J0IG9ubHkKPiA+ICAgICog dHdvIGdyYW51bGFyaXRpZXMgKGFsbCwgb3IgYSBzcGVjaWZpZWQgcmFuZ2UpIGluIHRoZSBJL08g YWRkcmVzcyBzcGFjZS4KPiA+ICAgICoKPiA+ICAgICogUGh5c2ljYWwgSU9NTVUgaGF2ZSB0aHJl ZSBjYWNoZSB0eXBlcyAoaW90bGIsIGRldl9pb3RsYiBhbmQgcGFzaWQKPiA+ICAgICogY2FjaGUp LiBJZiB0aGUgSU9BU0lEIHJlcHJlc2VudHMgYW4gSS9PIGFkZHJlc3Mgc3BhY2UsIHRoZSBpbnZh bGlkYXRpb24KPiA+ICAgICogYWx3YXlzIGFwcGxpZXMgdG8gdGhlIGlvdGxiIChhbmQgZGV2X2lv dGxiIGlmIGVuYWJsZWQpLiBJZiB0aGUgSU9BU0lECj4gPiAgICAqIHJlcHJlc2VudHMgYSB2UEFT SUQgc3BhY2UsIHRoZW4gdGhpcyBjb21tYW5kIGFwcGxpZXMgdG8gdGhlIFBBU0lECj4gPiAgICAq IGNhY2hlLgo+ID4gICAgKgo+ID4gICAgKiBTaW1pbGFybHkgdGhpcyBjb21tYW5kIGRvZXNuJ3Qg cHJvdmlkZSBJT01NVS1saWtlIGdyYW51bGFyaXR5Cj4gPiAgICAqIGluZm8gKGRvbWFpbi13aWRl LCBwYXNpZC13aWRlLCByYW5nZS1iYXNlZCksIHNpbmNlIGl0J3MgYWxsIGFib3V0IHRoZQo+ID4g ICAgKiBJL08gYWRkcmVzcyBzcGFjZSBpdHNlbGYuIFRoZSBpb2FzaWQgZHJpdmVyIHdhbGtzIHRo ZSBhdHRhY2hlZAo+ID4gICAgKiByb3V0aW5nIGluZm9ybWF0aW9uIHRvIG1hdGNoIHRoZSBJT01N VSBzZW1hbnRpY3MgdW5kZXIgdGhlCj4gPiAgICAqIGhvb2QuCj4gPiAgICAqCj4gPiAgICAqIElu cHV0IHBhcmFtZXRlcnM6Cj4gPiAgICAqCS0gY2hpbGRfaW9hc2lkOwo+ID4gICAgKgktIGdyYW51 bGFyaXR5Cj4gPiAgICAqCj4gPiAgICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24g ZmFpbHVyZQo+ID4gICAgKi8KPiA+ICNkZWZpbmUgSU9BU0lEX0lOVkFMSURBVEVfQ0FDSEUJX0lP KElPQVNJRF9UWVBFLCBJT0FTSURfQkFTRSArIDEzKQo+ID4KPiA+Cj4gPiAvKgo+ID4gICAgKiBQ YWdlIGZhdWx0IHJlcG9ydCBhbmQgcmVzcG9uc2UKPiA+ICAgICoKPiA+ICAgICogVGhpcyBpcyBU QkQuIENhbiBiZSBhZGRlZCBhZnRlciBvdGhlciBwYXJ0cyBhcmUgY2xlYXJlZCB1cC4gTGlrZWx5 IGl0Cj4gPiAgICAqIHdpbGwgYmUgYSByaW5nIGJ1ZmZlciBzaGFyZWQgYmV0d2VlbiB1c2VyL2tl cm5lbCwgYW4gZXZlbnRmZCB0byBub3RpZnkKPiA+ICAgICogdGhlIHVzZXIgYW5kIGFuIGlvY3Rs IHRvIGNvbXBsZXRlIHRoZSBmYXVsdC4KPiA+ICAgICoKPiA+ICAgICogVGhlIGZhdWx0IGRhdGEg aXMgcGVyIEkvTyBhZGRyZXNzIHNwYWNlLCBpLmUuOiBJT0FTSUQgKyBmYXVsdGluZ19hZGRyCj4g PiAgICAqLwo+ID4KPiA+Cj4gPiAvKgo+ID4gICAgKiBEaXJ0eSBwYWdlIHRyYWNraW5nCj4gPiAg ICAqCj4gPiAgICAqIFRyYWNrIGFuZCByZXBvcnQgbWVtb3J5IHBhZ2VzIGRpcnRpZWQgaW4gSS9P IGFkZHJlc3Mgc3BhY2VzLiBUaGVyZQo+ID4gICAgKiBpcyBhbiBvbmdvaW5nIHdvcmsgYnkgS3Vu a3VuIEppYW5nIGJ5IGV4dGVuZGluZyBleGlzdGluZyBWRklPIHR5cGUxLgo+ID4gICAgKiBJdCBu ZWVkcyBiZSBhZGFwdGVkIHRvIC9kZXYvaW9hc2lkIGxhdGVyLgo+ID4gICAgKi8KPiA+Cj4gPgo+ ID4gMi4yLiAvZGV2L3ZmaW8gdUFQSQo+ID4gKysrKysrKysrKysrKysrKwo+ID4KPiA+IC8qCj4g PiAgICAqIEJpbmQgYSB2ZmlvX2RldmljZSB0byB0aGUgc3BlY2lmaWVkIElPQVNJRCBmZAo+ID4g ICAgKgo+ID4gICAgKiBNdWx0aXBsZSB2ZmlvIGRldmljZXMgY2FuIGJlIGJvdW5kIHRvIGEgc2lu Z2xlIGlvYXNpZF9mZCwgYnV0IGEgc2luZ2xlCj4gPiAgICAqIHZmaW8gZGV2aWNlIHNob3VsZCBu b3QgYmUgYm91bmQgdG8gbXVsdGlwbGUgaW9hc2lkX2ZkJ3MuCj4gPiAgICAqCj4gPiAgICAqIElu cHV0IHBhcmFtZXRlcnM6Cj4gPiAgICAqCS0gaW9hc2lkX2ZkOwo+ID4gICAgKgo+ID4gICAgKiBS ZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCj4gPiAgICAqLwo+ID4gI2Rl ZmluZSBWRklPX0JJTkRfSU9BU0lEX0ZECQlfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAyMikK PiA+ICNkZWZpbmUgVkZJT19VTkJJTkRfSU9BU0lEX0ZECV9JTyhWRklPX1RZUEUsIFZGSU9fQkFT RSArIDIzKQo+ID4KPiA+Cj4gPiAvKgo+ID4gICAgKiBBdHRhY2ggYSB2ZmlvIGRldmljZSB0byB0 aGUgc3BlY2lmaWVkIElPQVNJRAo+ID4gICAgKgo+ID4gICAgKiBNdWx0aXBsZSB2ZmlvIGRldmlj ZXMgY2FuIGJlIGF0dGFjaGVkIHRvIHRoZSBzYW1lIElPQVNJRCwgYW5kIHZpY2UKPiA+ICAgICog dmVyc2EuCj4gPiAgICAqCj4gPiAgICAqIFVzZXIgbWF5IG9wdGlvbmFsbHkgcHJvdmlkZSBhICJ2 aXJ0dWFsIFBBU0lEIiB0byBtYXJrIGFuIEkvTyBwYWdlCj4gPiAgICAqIHRhYmxlIG9uIHRoaXMg dmZpbyBkZXZpY2UuIFdoZXRoZXIgdGhlIHZpcnR1YWwgUEFTSUQgaXMgcGh5c2ljYWxseSB1c2Vk Cj4gPiAgICAqIG9yIGNvbnZlcnRlZCB0byBhbm90aGVyIGtlcm5lbC1hbGxvY2F0ZWQgUEFTSUQg aXMgYSBwb2xpY3kgaW4gdmZpbyBkZXZpY2UKPiA+ICAgICogZHJpdmVyLgo+ID4gICAgKgo+ID4g ICAgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHNwZWNpZnkgaW9hc2lkX2ZkIGluIHRoaXMgY2FsbCBk dWUgdG8gdGhlIGFzc3VtcHRpb24KPiA+ICAgICogb2YgMToxIGNvbm5lY3Rpb24gYmV0d2VlbiB2 ZmlvIGRldmljZSBhbmQgdGhlIGJvdW5kIGZkLgo+ID4gICAgKgo+ID4gICAgKiBJbnB1dCBwYXJh bWV0ZXI6Cj4gPiAgICAqCS0gaW9hc2lkOwo+ID4gICAgKgktIGZsYWc7Cj4gPiAgICAqCS0gdXNl cl9wYXNpZCAoaWYgc3BlY2lmaWVkKTsKPiA+ICAgICoKPiA+ICAgICogUmV0dXJuOiAwIG9uIHN1 Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgo+ID4gICAgKi8KPiA+ICNkZWZpbmUgVkZJT19BVFRB Q0hfSU9BU0lECQlfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAyNCkKPiA+ICNkZWZpbmUgVkZJ T19ERVRBQ0hfSU9BU0lECQlfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAyNSkKPiA+Cj4gPgo+ ID4gMi4zLiBLVk0gdUFQSQo+ID4gKysrKysrKysrKysrCj4gPgo+ID4gLyoKPiA+ICAgICogVXBk YXRlIENQVSBQQVNJRCBtYXBwaW5nCj4gPiAgICAqCj4gPiAgICAqIFRoaXMgaXMgbmVjZXNzYXJ5 IHdoZW4gRU5RQ01EIHdpbGwgYmUgdXNlZCBpbiB0aGUgZ3Vlc3Qgd2hpbGUgdGhlCj4gPiAgICAq IHRhcmdldGVkIGRldmljZSBkb2Vzbid0IGFjY2VwdCB0aGUgdlBBU0lEIHNhdmVkIGluIHRoZSBD UFUgTVNSLgo+ID4gICAgKgo+ID4gICAgKiBUaGlzIGNvbW1hbmQgYWxsb3dzIHVzZXIgdG8gc2V0 L2NsZWFyIHRoZSB2UEFTSUQtPnBQQVNJRCBtYXBwaW5nCj4gPiAgICAqIGluIHRoZSBDUFUsIGJ5 IHByb3ZpZGluZyB0aGUgSU9BU0lEIChhbmQgRkQpIGluZm9ybWF0aW9uIHJlcHJlc2VudGluZwo+ ID4gICAgKiB0aGUgSS9PIGFkZHJlc3Mgc3BhY2UgbWFya2VkIGJ5IHRoaXMgdlBBU0lELgo+ID4g ICAgKgo+ID4gICAgKiBJbnB1dCBwYXJhbWV0ZXJzOgo+ID4gICAgKgktIHVzZXJfcGFzaWQ7Cj4g PiAgICAqCS0gaW9hc2lkX2ZkOwo+ID4gICAgKgktIGlvYXNpZDsKPiA+ICAgICovCj4gPiAjZGVm aW5lIEtWTV9NQVBfUEFTSUQJX0lPKEtWTUlPLCAweGYwKQo+ID4gI2RlZmluZSBLVk1fVU5NQVBf UEFTSUQJX0lPKEtWTUlPLCAweGYxKQo+ID4KPiA+Cj4gPiAzLiBTYW1wbGUgc3RydWN0dXJlcyBh bmQgaGVscGVyIGZ1bmN0aW9ucwo+ID4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+Cj4gPiBUaHJlZSBoZWxwZXIgZnVuY3Rpb25zIGFy ZSBwcm92aWRlZCB0byBzdXBwb3J0IFZGSU9fQklORF9JT0FTSURfRkQ6Cj4gPgo+ID4gCXN0cnVj dCBpb2FzaWRfY3R4ICppb2FzaWRfY3R4X2ZkZ2V0KGludCBmZCk7Cj4gPiAJaW50IGlvYXNpZF9y ZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGlvYXNpZF9jdHggKmN0eCwgc3RydWN0IGlvYXNpZF9kZXYg KmRldik7Cj4gPiAJaW50IGlvYXNpZF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgaW9hc2lkX2Rl diAqZGV2KTsKPiA+Cj4gPiBBbiBpb2FzaWRfY3R4IGlzIGNyZWF0ZWQgZm9yIGVhY2ggZmQ6Cj4g Pgo+ID4gCXN0cnVjdCBpb2FzaWRfY3R4IHsKPiA+IAkJLy8gYSBsaXN0IG9mIGFsbG9jYXRlZCBJ T0FTSUQgZGF0YSdzCj4gPiAJCXN0cnVjdCBsaXN0X2hlYWQJCWlvYXNpZF9saXN0Owo+ID4gCQkv LyBhIGxpc3Qgb2YgcmVnaXN0ZXJlZCBkZXZpY2VzCj4gPiAJCXN0cnVjdCBsaXN0X2hlYWQJCWRl dl9saXN0Owo+ID4gCQkvLyBhIGxpc3Qgb2YgcHJlLXJlZ2lzdGVyZWQgdmlydHVhbCBhZGRyZXNz IHJhbmdlcwo+ID4gCQlzdHJ1Y3QgbGlzdF9oZWFkCQlwcmVyZWdfbGlzdDsKPiA+IAl9Owo+ID4K PiA+IEVhY2ggcmVnaXN0ZXJlZCBkZXZpY2UgaXMgcmVwcmVzZW50ZWQgYnkgaW9hc2lkX2RldjoK PiA+Cj4gPiAJc3RydWN0IGlvYXNpZF9kZXYgewo+ID4gCQlzdHJ1Y3QgbGlzdF9oZWFkCQluZXh0 Owo+ID4gCQlzdHJ1Y3QgaW9hc2lkX2N0eAkqY3R4Owo+ID4gCQkvLyBhbHdheXMgYmUgdGhlIHBo eXNpY2FsIGRldmljZQo+ID4gCQlzdHJ1Y3QgZGV2aWNlIAkJKmRldmljZTsKPiA+IAkJc3RydWN0 IGtyZWYJCWtyZWY7Cj4gPiAJfTsKPiA+Cj4gPiBCZWNhdXNlIHdlIGFzc3VtZSBvbmUgdmZpb19k ZXZpY2UgY29ubmVjdGVkIHRvIGF0IG1vc3Qgb25lIGlvYXNpZF9mZCwKPiA+IGhlcmUgaW9hc2lk X2RldiBjb3VsZCBiZSBlbWJlZGRlZCBpbiB2ZmlvX2RldmljZSBhbmQgdGhlbiBsaW5rZWQgdG8K PiA+IGlvYXNpZF9jdHgtPmRldl9saXN0IHdoZW4gcmVnaXN0cmF0aW9uIHN1Y2NlZWRzLiBGb3Ig bWRldiB0aGUgc3RydWN0Cj4gPiBkZXZpY2Ugc2hvdWxkIGJlIHRoZSBwb2ludGVyIHRvIHRoZSBw YXJlbnQgZGV2aWNlLiBQQVNJRCBtYXJraW5nIHRoaXMKPiA+IG1kZXYgaXMgc3BlY2lmaWVkIGxh dGVyIHdoZW4gVkZJT19BVFRBQ0hfSU9BU0lELgo+ID4KPiA+IEFuIGlvYXNpZF9kYXRhIGlzIGNy ZWF0ZWQgd2hlbiBJT0FTSURfQUxMT0MsIGFzIHRoZSBtYWluIG9iamVjdAo+ID4gZGVzY3JpYmlu ZyBjaGFyYWN0ZXJpc3RpY3MgYWJvdXQgYW4gSS9PIHBhZ2UgdGFibGU6Cj4gPgo+ID4gCXN0cnVj dCBpb2FzaWRfZGF0YSB7Cj4gPiAJCS8vIGxpbmsgdG8gaW9hc2lkX2N0eC0+aW9hc2lkX2xpc3QK PiA+IAkJc3RydWN0IGxpc3RfaGVhZAkJbmV4dDsKPiA+Cj4gPiAJCS8vIHRoZSBJT0FTSUQgbnVt YmVyCj4gPiAJCXUzMgkJCWlvYXNpZDsKPiA+Cj4gPiAJCS8vIHRoZSBoYW5kbGUgdG8gY29udmV5 IGlvbW11IG9wZXJhdGlvbnMKPiA+IAkJLy8gaG9sZCB0aGUgcGdkIChUQkQgdW50aWwgZGlzY3Vz c2luZyBpb21tdSBhcGkpCj4gPiAJCXN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsKPiA+Cj4g PiAJCS8vIG1hcCBtZXRhZGF0YSAodmZpbyB0eXBlMSBzZW1hbnRpY3MpCj4gPiAJCXN0cnVjdCBy Yl9ub2RlCQlkbWFfbGlzdDsKPiA+Cj4gPiAJCS8vIHBvaW50ZXIgdG8gdXNlci1tYW5hZ2VkIHBn dGFibGUgKGZvciBuZXN0aW5nIGNhc2UpCj4gPiAJCXU2NAkJCXVzZXJfcGdkOwo+ID4KPiA+IAkJ Ly8gbGluayB0byB0aGUgcGFyZW50IGlvYXNpZCAoZm9yIG5lc3RpbmcpCj4gPiAJCXN0cnVjdCBp b2FzaWRfZGF0YQkqcGFyZW50Owo+ID4KPiA+IAkJLy8gY2FjaGUgdGhlIGdsb2JhbCBQQVNJRCBz aGFyZWQgYnkgRU5RQ01ELWNhcGFibGUKPiA+IAkJLy8gZGV2aWNlcyAoc2VlIGJlbG93IGV4cGxh bmF0aW9uIGluIHNlY3Rpb24gNCkKPiA+IAkJdTMyCQkJcGFzaWQ7Cj4gPgo+ID4gCQkvLyBhIGxp c3Qgb2YgZGV2aWNlIGF0dGFjaCBkYXRhIChyb3V0aW5nIGluZm9ybWF0aW9uKQo+ID4gCQlzdHJ1 Y3QgbGlzdF9oZWFkCQlhdHRhY2hfZGF0YTsKPiA+Cj4gPiAJCS8vIGEgbGlzdCBvZiBwYXJ0aWFs bHktYXR0YWNoZWQgZGV2aWNlcyAoZ3JvdXApCj4gPiAJCXN0cnVjdCBsaXN0X2hlYWQJCXBhcnRp YWxfZGV2aWNlczsKPiA+Cj4gPiAJCS8vIGEgbGlzdCBvZiBmYXVsdF9kYXRhIHJlcG9ydGVkIGZy b20gdGhlIGlvbW11IGxheWVyCj4gPiAJCXN0cnVjdCBsaXN0X2hlYWQJCWZhdWx0X2RhdGE7Cj4g Pgo+ID4gCQkuLi4KPiA+IAl9Cj4gPgo+ID4gaW9hc2lkX2RhdGEgYW5kIGlvbW11X2RvbWFpbiBo YXZlIG92ZXJsYXBwaW5nIHJvbGVzIGFzIGJvdGggYXJlCj4gPiBpbnRyb2R1Y2VkIHRvIHJlcHJl c2VudCBhbiBJL08gYWRkcmVzcyBzcGFjZS4gSXQgaXMgc3RpbGwgYSBiaWcgVEJEIGhvdwo+ID4g dGhlIHR3byBzaG91bGQgYmUgY29yZWxhdGVkIG9yIGV2ZW4gbWVyZ2VkLCBhbmQgd2hldGhlciBu ZXcgaW9tbXUKPiA+IG9wcyBhcmUgcmVxdWlyZWQgdG8gaGFuZGxlIFJJRCtQQVNJRCBleHBsaWNp dGx5LiBXZSBsZWF2ZSB0aGlzIGFzIG9wZW4KPiA+IGZvciBub3cgYXMgdGhpcyBwcm9wb3NhbCBp cyBtYWlubHkgYWJvdXQgdUFQSS4gRm9yIHNpbXBsaWZpY2F0aW9uCj4gPiBwdXJwb3NlIHRoZSB0 d28gb2JqZWN0cyBhcmUga2VwdCBzZXBhcmF0ZSBpbiB0aGlzIGNvbnRleHQsIGFzc3VtaW5nIGFu Cj4gPiAxOjEgY29ubmVjdGlvbiBpbi1iZXR3ZWVuIGFuZCB0aGUgZG9tYWluIGFzIHRoZSBwbGFj ZS1ob2xkZXIKPiA+IHJlcHJlc2VudGluZyB0aGUgMXN0IGNsYXNzIG9iamVjdCBpbiB0aGUgaW9t bXUgb3BzLgo+ID4KPiA+IFR3byBoZWxwZXIgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBzdXBw b3J0IFZGSU9fQVRUQUNIX0lPQVNJRDoKPiA+Cj4gPiAJc3RydWN0IGF0dGFjaF9pbmZvIHsKPiA+ IAkJdTMyCWlvYXNpZDsKPiA+IAkJLy8gSWYgdmFsaWQsIHRoZSBQQVNJRCB0byBiZSB1c2VkIHBo eXNpY2FsbHkKPiA+IAkJdTMyCXBhc2lkOwo+ID4gCX07Cj4gPiAJaW50IGlvYXNpZF9kZXZpY2Vf YXR0YWNoKHN0cnVjdCBpb2FzaWRfZGV2ICpkZXYsCj4gPiAJCXN0cnVjdCBhdHRhY2hfaW5mbyBp bmZvKTsKPiA+IAlpbnQgaW9hc2lkX2RldmljZV9kZXRhY2goc3RydWN0IGlvYXNpZF9kZXYgKmRl diwgdTMyIGlvYXNpZCk7Cj4gPgo+ID4gVGhlIHBhc2lkIHBhcmFtZXRlciBpcyBvcHRpb25hbGx5 IHByb3ZpZGVkIGJhc2VkIG9uIHRoZSBwb2xpY3kgaW4gdmZpbwo+ID4gZGV2aWNlIGRyaXZlci4g SXQgY291bGQgYmUgdGhlIFBBU0lEIG1hcmtpbmcgdGhlIGRlZmF1bHQgSS9PIGFkZHJlc3MKPiA+ IHNwYWNlIGZvciBhIG1kZXYsIG9yIHRoZSB1c2VyLXByb3ZpZGVkIFBBU0lEIG1hcmtpbmcgYW4g dXNlciBJL08gcGFnZQo+ID4gdGFibGUsIG9yIGFub3RoZXIga2VybmVsLWFsbG9jYXRlZCBQQVNJ RCBiYWNraW5nIHRoZSB1c2VyLXByb3ZpZGVkIG9uZS4KPiA+IFBsZWFzZSBjaGVjayBuZXh0IHNl Y3Rpb24gZm9yIGRldGFpbCBleHBsYW5hdGlvbi4KPiA+Cj4gPiBBIG5ldyBvYmplY3QgaXMgaW50 cm9kdWNlZCBhbmQgbGlua2VkIHRvIGlvYXNpZF9kYXRhLT5hdHRhY2hfZGF0YSBmb3IKPiA+IGVh Y2ggc3VjY2Vzc2Z1bCBhdHRhY2ggb3BlcmF0aW9uOgo+ID4KPiA+IAlzdHJ1Y3QgaW9hc2lkX2F0 dGFjaF9kYXRhIHsKPiA+IAkJc3RydWN0IGxpc3RfaGVhZAkJbmV4dDsKPiA+IAkJc3RydWN0IGlv YXNpZF9kZXYJKmRldjsKPiA+IAkJdTMyIAkJCXBhc2lkOwo+ID4gCX0KPiA+Cj4gPiBBcyBleHBs YWluZWQgaW4gdGhlIGRlc2lnbiBzZWN0aW9uLCB0aGVyZSBpcyBubyBleHBsaWNpdCBncm91cCBl bmZvcmNlbWVudAo+ID4gaW4gL2Rldi9pb2FzaWQgdUFQSSBvciBoZWxwZXIgZnVuY3Rpb25zLiBC dXQgdGhlIGlvYXNpZCBkcml2ZXIgZG9lcwo+ID4gaW1wbGljaXQgZ3JvdXAgY2hlY2sgLSBiZWZv cmUgZXZlcnkgZGV2aWNlIHdpdGhpbiBhbiBpb21tdSBncm91cCBpcwo+ID4gYXR0YWNoZWQgdG8g dGhpcyBJT0FTSUQsIHRoZSBwcmV2aW91c2x5LWF0dGFjaGVkIGRldmljZXMgaW4gdGhpcyBncm91 cCBhcmUKPiA+IHB1dCBpbiBpb2FzaWRfZGF0YS0+cGFydGlhbF9kZXZpY2VzLiBUaGUgSU9BU0lE IHJlamVjdHMgYW55IGNvbW1hbmQgaWYKPiA+IHRoZSBwYXJ0aWFsX2RldmljZXMgbGlzdCBpcyBu b3QgZW1wdHkuCj4gPgo+ID4gVGhlbiBpcyB0aGUgbGFzdCBoZWxwZXIgZnVuY3Rpb246Cj4gPiAJ dTMyIGlvYXNpZF9nZXRfZ2xvYmFsX3Bhc2lkKHN0cnVjdCBpb2FzaWRfY3R4ICpjdHgsCj4gPiAJ CXUzMiBpb2FzaWQsIGJvb2wgYWxsb2MpOwo+ID4KPiA+IGlvYXNpZF9nZXRfZ2xvYmFsX3Bhc2lk IGlzIG5lY2Vzc2FyeSBpbiBzY2VuYXJpb3Mgd2hlcmUgbXVsdGlwbGUgZGV2aWNlcwo+ID4gd2Fu dCB0byBzaGFyZSBhIHNhbWUgUEFTSUQgdmFsdWUgb24gdGhlIGF0dGFjaGVkIEkvTyBwYWdlIHRh YmxlIChlLmcuCj4gPiB3aGVuIEVOUUNNRCBpcyBlbmFibGVkLCBhcyBleHBsYWluZWQgaW4gbmV4 dCBzZWN0aW9uKS4gV2UgbmVlZCBhCj4gPiBjZW50cmFsaXplZCBwbGFjZSAoaW9hc2lkX2RhdGEt PnBhc2lkKSB0byBob2xkIHRoaXMgdmFsdWUgKGFsbG9jYXRlZCB3aGVuCj4gPiBmaXJzdCBjYWxs ZWQgd2l0aCBhbGxvYz10cnVlKS4gdmZpbyBkZXZpY2UgZHJpdmVyIGNhbGxzIHRoaXMgZnVuY3Rp b24gKGFsbG9jPQo+ID4gdHJ1ZSkgdG8gZ2V0IHRoZSBnbG9iYWwgUEFTSUQgZm9yIGFuIGlvYXNp ZCBiZWZvcmUgY2FsbGluZyBpb2FzaWRfZGV2aWNlXwo+ID4gYXR0YWNoLiBLVk0gYWxzbyBjYWxs cyB0aGlzIGZ1bmN0aW9uIChhbGxvYz1mYWxzZSkgdG8gc2V0dXAgUEFTSUQgdHJhbnNsYXRpb24K PiA+IHN0cnVjdHVyZSB3aGVuIHVzZXIgY2FsbHMgS1ZNX01BUF9QQVNJRC4KPiA+Cj4gPiA0LiBQ QVNJRCBWaXJ0dWFsaXphdGlvbgo+ID4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4g Pgo+ID4gV2hlbiBndWVzdCBTVkEgKHZTVkEpIGlzIGVuYWJsZWQsIG11bHRpcGxlIEdWQSBhZGRy ZXNzIHNwYWNlcyBhcmUKPiA+IGNyZWF0ZWQgb24gdGhlIGFzc2lnbmVkIHZmaW8gZGV2aWNlLiBU aGlzIGxlYWRzIHRvIHRoZSBjb25jZXB0cyBvZgo+ID4gInZpcnR1YWwgUEFTSUQiICh2UEFTSUQp IHZzLiAicGh5c2ljYWwgUEFTSUQiIChwUEFTSUQpLiB2UEFTSUQgaXMgYXNzaWduZWQKPiA+IGJ5 IHRoZSBndWVzdCB0byBtYXJrIGFuIEdWQSBhZGRyZXNzIHNwYWNlIHdoaWxlIHBQQVNJRCBpcyB0 aGUgb25lCj4gPiBzZWxlY3RlZCBieSB0aGUgaG9zdCBhbmQgYWN0dWFsbHkgcm91dGVkIGluIHRo ZSB3aXJlLgo+ID4KPiA+IHZQQVNJRCBpcyBjb252ZXllZCB0byB0aGUga2VybmVsIHdoZW4gdXNl ciBjYWxscyBWRklPX0FUVEFDSF9JT0FTSUQuCj4gPgo+ID4gdmZpbyBkZXZpY2UgZHJpdmVyIHRy YW5zbGF0ZXMgdlBBU0lEIHRvIHBQQVNJRCBiZWZvcmUgY2FsbGluZyBpb2FzaWRfYXR0YWNoXwo+ ID4gZGV2aWNlLCB3aXRoIHR3byBmYWN0b3JzIHRvIGJlIGNvbnNpZGVyZWQ6Cj4gPgo+ID4gLSAg ICBXaGV0aGVyIHZQQVNJRCBpcyBkaXJlY3RseSB1c2VkICh2UEFTSUQ9PXBQQVNJRCkgaW4gdGhl IHdpcmUsIG9yCj4gPiAgICAgICBzaG91bGQgYmUgaW5zdGVhZCBjb252ZXJ0ZWQgdG8gYSBuZXds eS1hbGxvY2F0ZWQgb25lICh2UEFTSUQhPQo+ID4gICAgICAgcFBBU0lEKTsKPiA+Cj4gPiAtICAg IElmIHZQQVNJRCE9cFBBU0lELCB3aGV0aGVyIHBQQVNJRCBpcyBhbGxvY2F0ZWQgZnJvbSBwZXIt UklEIFBBU0lECj4gPiAgICAgICBzcGFjZSBvciBhIGdsb2JhbCBQQVNJRCBzcGFjZSAoaW1wbHlp bmcgc2hhcmluZyBwUEFTSUQgY3Jvc3MgZGV2aWNlcywKPiA+ICAgICAgIGUuZy4gd2hlbiBzdXBw b3J0aW5nIEludGVsIEVOUUNNRCB3aGljaCBwdXRzIFBBU0lEIGluIGEgQ1BVIE1TUgo+ID4gICAg ICAgYXMgcGFydCBvZiB0aGUgcHJvY2VzcyBjb250ZXh0KTsKPiA+Cj4gPiBUaGUgYWN0dWFsIHBv bGljeSBkZXBlbmRzIG9uIHBkZXYgdnMuIG1kZXYsIGFuZCB3aGV0aGVyIEVOUUNNRCBpcwo+ID4g c3VwcG9ydGVkLiBUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgc2NlbmFyaW9zOgo+ID4KPiA+IChO b3RlOiAvZGV2L2lvYXNpZCB1QVBJIGlzIG5vdCBhZmZlY3RlZCBieSB1bmRlcmx5aW5nIFBBU0lE IHZpcnR1YWxpemF0aW9uCj4gPiBwb2xpY2llcy4pCj4gPgo+ID4gMSkgIHBkZXYgKHcvIG9yIHcv byBFTlFDTUQpOiB2UEFTSUQ9PXBQQVNJRAo+ID4KPiA+ICAgICAgIHZQQVNJRHMgYXJlIGRpcmVj dGx5IHByb2dyYW1tZWQgYnkgdGhlIGd1ZXN0IHRvIHRoZSBhc3NpZ25lZCBNTUlPCj4gPiAgICAg ICBiYXIsIGltcGx5aW5nIGFsbCBETUFzIG91dCBvZiB0aGlzIGRldmljZSBoYXZpbmcgdlBBU0lE IGluIHRoZSBwYWNrZXQKPiA+ICAgICAgIGhlYWRlci4gVGhpcyBtYW5kYXRlcyB2UEFTSUQ9PXBQ QVNJRCwgc29ydCBvZiBkZWxlZ2F0aW5nIHRoZSBlbnRpcmUKPiA+ICAgICAgIHBlci1SSUQgUEFT SUQgc3BhY2UgdG8gdGhlIGd1ZXN0Lgo+ID4KPiA+ICAgICAgIFdoZW4gRU5RQ01EIGlzIGVuYWJs ZWQsIHRoZSBDUFUgTVNSIHdoZW4gcnVubmluZyBhIGd1ZXN0IHRhc2sKPiA+ICAgICAgIGNvbnRh aW5zIGEgdlBBU0lELiBJbiB0aGlzIGNhc2UgdGhlIENQVSBQQVNJRCB0cmFuc2xhdGlvbiBjYXBh YmlsaXR5Cj4gPiAgICAgICBzaG91bGQgYmUgZGlzYWJsZWQgc28gdGhpcyB2UEFTSUQgaW4gQ1BV IE1TUiBpcyBkaXJlY3RseSBzZW50IHRvIHRoZQo+ID4gICAgICAgd2lyZS4KPiA+Cj4gPiAgICAg ICBUaGlzIGVuc3VyZXMgY29uc2lzdGVudCB2UEFTSUQgdXNhZ2Ugb24gcGRldiByZWdhcmRsZXNz IG9mIHRoZQo+ID4gICAgICAgd29ya2xvYWQgc3VibWl0dGVkIHRocm91Z2ggYSBNTUlPIHJlZ2lz dGVyIG9yIEVOUUNNRCBpbnN0cnVjdGlvbi4KPiA+Cj4gPiAyKSAgbWRldjogdlBBU0lEIT1wUEFT SUQgKHBlci1SSUQgaWYgdy9vIEVOUUNNRCwgb3RoZXJ3aXNlIGdsb2JhbCkKPiA+Cj4gPiAgICAg ICBQQVNJRHMgYXJlIGFsc28gdXNlZCBieSBrZXJuZWwgdG8gbWFyayB0aGUgZGVmYXVsdCBJL08g YWRkcmVzcyBzcGFjZQo+ID4gICAgICAgZm9yIG1kZXYsIHRodXMgY2Fubm90IGJlIGRlbGVnYXRl ZCB0byB0aGUgZ3Vlc3QuIEluc3RlYWQsIHRoZSBtZGV2Cj4gPiAgICAgICBkcml2ZXIgbXVzdCBh bGxvY2F0ZSBhIG5ldyBwUEFTSUQgZm9yIGVhY2ggdlBBU0lEICh0aHVzIHZQQVNJRCE9Cj4gPiAg ICAgICBwUEFTSUQpIGFuZCB0aGVuIHVzZSBwUEFTSUQgd2hlbiBhdHRhY2hpbmcgdGhpcyBtZGV2 IHRvIGFuIGlvYXNpZC4KPiA+Cj4gPiAgICAgICBUaGUgbWRldiBkcml2ZXIgbmVlZHMgY2FjaGUg dGhlIFBBU0lEIG1hcHBpbmcgc28gaW4gbWVkaWF0aW9uCj4gPiAgICAgICBwYXRoIHZQQVNJRCBw cm9ncmFtbWVkIGJ5IHRoZSBndWVzdCBjYW4gYmUgY29udmVydGVkIHRvIHBQQVNJRAo+ID4gICAg ICAgYmVmb3JlIHVwZGF0aW5nIHRoZSBwaHlzaWNhbCBNTUlPIHJlZ2lzdGVyLiBUaGUgbWFwcGlu ZyBzaG91bGQKPiA+ICAgICAgIGFsc28gYmUgc2F2ZWQgaW4gdGhlIENQVSBQQVNJRCB0cmFuc2xh dGlvbiBzdHJ1Y3R1cmUgKHZpYSBLVk0gdUFQSSksCj4gPiAgICAgICBzbyB0aGUgdlBBU0lEIHNh dmVkIGluIHRoZSBDUFUgTVNSIGlzIGF1dG8tdHJhbnNsYXRlZCB0byBwUEFTSUQKPiA+ICAgICAg IGJlZm9yZSBzZW50IHRvIHRoZSB3aXJlLCB3aGVuIEVOUUNNRCBpcyBlbmFibGVkLgo+ID4KPiA+ ICAgICAgIEdlbmVyYWxseSBwUEFTSUQgY291bGQgYmUgYWxsb2NhdGVkIGZyb20gdGhlIHBlci1S SUQgUEFTSUQgc3BhY2UKPiA+ICAgICAgIGlmIGFsbCBtZGV2J3MgY3JlYXRlZCBvbiB0aGUgcGFy ZW50IGRldmljZSBkb24ndCBzdXBwb3J0IEVOUUNNRC4KPiA+Cj4gPiAgICAgICBIb3dldmVyIGlm IHRoZSBwYXJlbnQgc3VwcG9ydHMgRU5RQ01ELWNhcGFibGUgbWRldiwgcFBBU0lEcwo+ID4gICAg ICAgbXVzdCBiZSBhbGxvY2F0ZWQgZnJvbSBhIGdsb2JhbCBwb29sIGJlY2F1c2UgdGhlIENQVSBQ QVNJRAo+ID4gICAgICAgdHJhbnNsYXRpb24gc3RydWN0dXJlIGlzIHBlci1WTS4gSXQgaW1wbGll cyB0aGF0IHdoZW4gYW4gZ3Vlc3QgSS9PCj4gPiAgICAgICBwYWdlIHRhYmxlIGlzIGF0dGFjaGVk IHRvIHR3byBtZGV2cyB3aXRoIGEgc2luZ2xlIHZQQVNJRCAoaS5lLiBiaW5kCj4gPiAgICAgICB0 byB0aGUgc2FtZSBndWVzdCBwcm9jZXNzKSwgYSBzYW1lIHBQQVNJRCBzaG91bGQgYmUgdXNlZCBm b3IKPiA+ICAgICAgIGJvdGggbWRldnMgZXZlbiB3aGVuIHRoZXkgYmVsb25nIHRvIGRpZmZlcmVu dCBwYXJlbnRzLiBTaGFyaW5nCj4gPiAgICAgICBwUEFTSUQgY3Jvc3MgbWRldnMgaXMgYWNoaWV2 ZWQgYnkgY2FsbGluZyBhZm9yZW1lbnRpb25lZCBpb2FzaWRfCj4gPiAgICAgICBnZXRfZ2xvYmFs X3Bhc2lkKCkuCj4gPgo+ID4gMykgIE1peCBwZGV2L21kZXYgdG9nZXRoZXIKPiA+Cj4gPiAgICAg ICBBYm92ZSBwb2xpY2llcyBhcmUgcGVyIGRldmljZSB0eXBlIHRodXMgYXJlIG5vdCBhZmZlY3Rl ZCB3aGVuIG1peGluZwo+ID4gICAgICAgdGhvc2UgZGV2aWNlIHR5cGVzIHRvZ2V0aGVyICh3aGVu IGFzc2lnbmVkIHRvIGEgc2luZ2xlIGd1ZXN0KS4gSG93ZXZlciwKPiA+ICAgICAgIHRoZXJlIGlz IG9uZSBleGNlcHRpb24gLSB3aGVuIGJvdGggcGRldi9tZGV2IHN1cHBvcnQgRU5RQ01ELgo+ID4K PiA+ICAgICAgIFJlbWVtYmVyIHRoZSB0d28gdHlwZXMgaGF2ZSBjb25mbGljdGluZyByZXF1aXJl bWVudHMgb24gd2hldGhlcgo+ID4gICAgICAgQ1BVIFBBU0lEIHRyYW5zbGF0aW9uIHNob3VsZCBi ZSBlbmFibGVkLiBUaGlzIGNhcGFiaWxpdHkgaXMgcGVyLVZNLAo+ID4gICAgICAgYW5kIG11c3Qg YmUgZW5hYmxlZCBmb3IgbWRldiBpc29sYXRpb24uIFdoZW4gZW5hYmxlZCwgcGRldiB3aWxsCj4g PiAgICAgICByZWNlaXZlIGEgbWRldiBwUEFTSUQgdmlvbGF0aW5nIGl0cyB2UEFTSUQgZXhwZWN0 YXRpb24uCj4gPgo+ID4gICAgICAgSW4gcHJldmlvdXMgdGhyZWFkIGEgUEFTSUQgcmFuZ2Ugc3Bs aXQgc2NoZW1lIHdhcyBkaXNjdXNzZWQgdG8gc3VwcG9ydAo+ID4gICAgICAgdGhpcyBjb21iaW5h dGlvbiwgYnV0IHdlIGhhdmVuJ3Qgd29ya2VkIG91dCBhIGNsZWFuIHVBUEkgZGVzaWduIHlldC4K PiA+ICAgICAgIFRoZXJlZm9yZSBpbiB0aGlzIHByb3Bvc2FsIHdlIGRlY2lkZSB0byBub3Qgc3Vw cG9ydCBpdCwgaW1wbHlpbmcgdGhlCj4gPiAgICAgICB1c2VyIHNob3VsZCBoYXZlIHNvbWUgaW50 ZWxsaWdlbmNlIHRvIGF2b2lkIHN1Y2ggc2NlbmFyaW8uIEl0IGNvdWxkIGJlCj4gPiAgICAgICBh IFRPRE8gdGFzayBmb3IgZnV0dXJlLgo+ID4KPiA+IEluIHNwaXRlIG9mIHRob3NlIHN1YnRsZSBj b25zaWRlcmF0aW9ucywgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiBjb3VsZAo+ID4gc3RhcnQg c2ltcGxlLCBlLmcuOgo+ID4KPiA+IC0gICAgdj09cCBmb3IgcGRldjsKPiA+IC0gICAgdiE9cCBh bmQgYWx3YXlzIHVzZSBhIGdsb2JhbCBQQVNJRCBwb29sIGZvciBhbGwgbWRldidzOwo+ID4KPiA+ IFJlZ2FyZGxlc3Mgb2YgdGhlIGtlcm5lbCBwb2xpY3ksIHRoZSB1c2VyIHBvbGljeSBpcyB1bmNo YW5nZWQ6Cj4gPgo+ID4gLSAgICBwcm92aWRlIHZQQVNJRCB3aGVuIGNhbGxpbmcgVkZJT19BVFRB Q0hfSU9BU0lEOwo+ID4gLSAgICBjYWxsIEtWTSB1QVBJIHRvIHNldHVwIENQVSBQQVNJRCB0cmFu c2xhdGlvbiBpZiBFTlFDTUQtY2FwYWJsZSBtZGV2Owo+ID4gLSAgICBEb24ndCBleHBvc2UgRU5R Q01EIGNhcGFiaWxpdHkgb24gYm90aCBwZGV2IGFuZCBtZGV2Owo+ID4KPiA+IFNhbXBsZSB1c2Vy IGZsb3cgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gNS41Lgo+ID4KPiA+IDUuIFVzZSBDYXNlcyBh bmQgRmxvd3MKPiA+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+Cj4gPiBIZXJl IGFzc3VtZSBWRklPIHdpbGwgc3VwcG9ydCBhIG5ldyBtb2RlbCB3aGVyZSBldmVyeSBib3VuZCBk ZXZpY2UKPiA+IGlzIGV4cGxpY2l0bHkgbGlzdGVkIHVuZGVyIC9kZXYvdmZpbyB0aHVzIGEgZGV2 aWNlIGZkIGNhbiBiZSBhY3F1aXJlZCB3L28KPiA+IGdvaW5nIHRocm91Z2ggbGVnYWN5IGNvbnRh aW5lci9ncm91cCBpbnRlcmZhY2UuIEZvciBpbGx1c3RyYXRpb24gcHVycG9zZQo+ID4gdGhvc2Ug ZGV2aWNlcyBhcmUganVzdCBjYWxsZWQgZGV2WzEuLi5OXToKPiA+Cj4gPiAJZGV2aWNlX2ZkWzEu Li5OXSA9IG9wZW4oIi9kZXYvdmZpby9kZXZpY2VzL2RldlsxLi4uTl0iLCBtb2RlKTsKPiA+Cj4g PiBBcyBleHBsYWluZWQgZWFybGllciwgb25lIElPQVNJRCBmZCBpcyBzdWZmaWNpZW50IGZvciBh bGwgaW50ZW5kZWQgdXNlIGNhc2VzOgo+ID4KPiA+IAlpb2FzaWRfZmQgPSBvcGVuKCIvZGV2L2lv YXNpZCIsIG1vZGUpOwo+ID4KPiA+IEZvciBzaW1wbGljaXR5IGJlbG93IGV4YW1wbGVzIGFyZSBh bGwgbWFkZSBmb3IgdGhlIHZpcnR1YWxpemF0aW9uIHN0b3J5Lgo+ID4gVGhleSBhcmUgcmVwcmVz ZW50YXRpdmUgYW5kIGNvdWxkIGJlIGVhc2lseSBhZGFwdGVkIHRvIGEgbm9uLXZpcnR1YWxpemF0 aW9uCj4gPiBzY2VuYXJpby4KPiA+Cj4gPiBUaHJlZSB0eXBlcyBvZiBJT0FTSURzIGFyZSBjb25z aWRlcmVkOgo+ID4KPiA+IAlncGFfaW9hc2lkWzEuLi5OXTogCWZvciBHUEEgYWRkcmVzcyBzcGFj ZQo+ID4gCWdpb3ZhX2lvYXNpZFsxLi4uTl06CWZvciBndWVzdCBJT1ZBIGFkZHJlc3Mgc3BhY2UK PiA+IAlndmFfaW9hc2lkWzEuLi5OXToJZm9yIGd1ZXN0IENQVSBWQSBhZGRyZXNzIHNwYWNlCj4g Pgo+ID4gQXQgbGVhc3Qgb25lIGdwYV9pb2FzaWQgbXVzdCBhbHdheXMgYmUgY3JlYXRlZCBwZXIg Z3Vlc3QsIHdoaWxlIHRoZSBvdGhlcgo+ID4gdHdvIGFyZSByZWxldmFudCBhcyBmYXIgYXMgdklP TU1VIGlzIGNvbmNlcm5lZC4KPiA+Cj4gPiBFeGFtcGxlcyBoZXJlIGFwcGx5IHRvIGJvdGggcGRl diBhbmQgbWRldiwgaWYgbm90IGV4cGxpY2l0bHkgbWFya2VkIG91dAo+ID4gKGUuZy4gaW4gc2Vj dGlvbiA1LjUpLiBWRklPIGRldmljZSBkcml2ZXIgaW4gdGhlIGtlcm5lbCB3aWxsIGZpZ3VyZSBv dXQgdGhlCj4gPiBhc3NvY2lhdGVkIHJvdXRpbmcgaW5mb3JtYXRpb24gaW4gdGhlIGF0dGFjaGlu ZyBvcGVyYXRpb24uCj4gPgo+ID4gRm9yIGlsbHVzdHJhdGlvbiBzaW1wbGljaXR5LCBJT0FTSURf Q0hFQ0tfRVhURU5TSU9OIGFuZCBJT0FTSURfR0VUXwo+ID4gSU5GTyBhcmUgc2tpcHBlZCBpbiB0 aGVzZSBleGFtcGxlcy4KPiA+Cj4gPiA1LjEuIEEgc2ltcGxlIGV4YW1wbGUKPiA+ICsrKysrKysr KysrKysrKysrKwo+ID4KPiA+IERldjEgaXMgYXNzaWduZWQgdG8gdGhlIGd1ZXN0LiBPbmUgZ3Bh X2lvYXNpZCBpcyBjcmVhdGVkLiBUaGUgR1BBIGFkZHJlc3MKPiA+IHNwYWNlIGlzIG1hbmFnZWQg dGhyb3VnaCBETUEgbWFwcGluZyBwcm90b2NvbDoKPiA+Cj4gPiAJLyogQmluZCBkZXZpY2UgdG8g SU9BU0lEIGZkICovCj4gPiAJZGV2aWNlX2ZkID0gb3BlbigiL2Rldi92ZmlvL2RldmljZXMvZGV2 MSIsIG1vZGUpOwo+ID4gCWlvYXNpZF9mZCA9IG9wZW4oIi9kZXYvaW9hc2lkIiwgbW9kZSk7Cj4g PiAJaW9jdGwoZGV2aWNlX2ZkLCBWRklPX0JJTkRfSU9BU0lEX0ZELCBpb2FzaWRfZmQpOwo+ID4K PiA+IAkvKiBBdHRhY2ggZGV2aWNlIHRvIElPQVNJRCAqLwo+ID4gCWdwYV9pb2FzaWQgPSBpb2N0 bChpb2FzaWRfZmQsIElPQVNJRF9BTExPQyk7Cj4gPiAJYXRfZGF0YSA9IHsgLmlvYXNpZCA9IGdw YV9pb2FzaWR9Owo+ID4gCWlvY3RsKGRldmljZV9mZCwgVkZJT19BVFRBQ0hfSU9BU0lELCAmYXRf ZGF0YSk7Cj4gPgo+ID4gCS8qIFNldHVwIEdQQSBtYXBwaW5nICovCj4gPiAJZG1hX21hcCA9IHsK PiA+IAkJLmlvYXNpZAk9IGdwYV9pb2FzaWQ7Cj4gPiAJCS5pb3ZhCT0gMDsJCS8vIEdQQQo+ID4g CQkudmFkZHIJPSAweDQwMDAwMDAwOwkvLyBIVkEKPiA+IAkJLnNpemUJPSAxR0I7Cj4gPiAJfTsK PiA+IAlpb2N0bChpb2FzaWRfZmQsIElPQVNJRF9ETUFfTUFQLCAmZG1hX21hcCk7Cj4gPgo+ID4g SWYgdGhlIGd1ZXN0IGlzIGFzc2lnbmVkIHdpdGggbW9yZSB0aGFuIGRldjEsIHVzZXIgZm9sbG93 cyBhYm92ZSBzZXF1ZW5jZQo+ID4gdG8gYXR0YWNoIG90aGVyIGRldmljZXMgdG8gdGhlIHNhbWUg Z3BhX2lvYXNpZCBpLmUuIHNoYXJpbmcgdGhlIEdQQQo+ID4gYWRkcmVzcyBzcGFjZSBjcm9zcyBh bGwgYXNzaWduZWQgZGV2aWNlcy4KPiA+Cj4gPiA1LjIuIE11bHRpcGxlIElPQVNJRHMgKG5vIG5l c3RpbmcpCj4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPgo+ID4gRGV2MSBhbmQg ZGV2MiBhcmUgYXNzaWduZWQgdG8gdGhlIGd1ZXN0LiB2SU9NTVUgaXMgZW5hYmxlZC4gSW5pdGlh bGx5Cj4gPiBib3RoIGRldmljZXMgYXJlIGF0dGFjaGVkIHRvIGdwYV9pb2FzaWQuIEFmdGVyIGJv b3QgdGhlIGd1ZXN0IGNyZWF0ZXMKPiA+IGFuIEdJT1ZBIGFkZHJlc3Mgc3BhY2UgKGdpb3ZhX2lv YXNpZCkgZm9yIGRldjIsIGxlYXZpbmcgZGV2MSBpbiBwYXNzCj4gPiB0aHJvdWdoIG1vZGUgKGdw YV9pb2FzaWQpLgo+ID4KPiA+IFN1cHBvc2UgSU9BU0lEIG5lc3RpbmcgaXMgbm90IHN1cHBvcnRl ZCBpbiB0aGlzIGNhc2UuIFFlbXUgbmVlZCB0bwo+ID4gZ2VuZXJhdGUgc2hhZG93IG1hcHBpbmdz IGluIHVzZXJzcGFjZSBmb3IgZ2lvdmFfaW9hc2lkIChsaWtlIGhvdwo+ID4gVkZJTyB3b3JrcyB0 b2RheSkuCj4gPgo+ID4gVG8gYXZvaWQgZHVwbGljYXRlZCBsb2NrZWQgcGFnZSBhY2NvdW50aW5n LCBpdCdzIHJlY29tbWVuZGVkIHRvIHByZS0KPiA+IHJlZ2lzdGVyIHRoZSB2aXJ0dWFsIGFkZHJl c3MgcmFuZ2UgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIERNQToKPiA+Cj4gPiAJZGV2aWNlX2ZkMSA9 IG9wZW4oIi9kZXYvdmZpby9kZXZpY2VzL2RldjEiLCBtb2RlKTsKPiA+IAlkZXZpY2VfZmQyID0g b3BlbigiL2Rldi92ZmlvL2RldmljZXMvZGV2MiIsIG1vZGUpOwo+ID4gCWlvYXNpZF9mZCA9IG9w ZW4oIi9kZXYvaW9hc2lkIiwgbW9kZSk7Cj4gPiAJaW9jdGwoZGV2aWNlX2ZkMSwgVkZJT19CSU5E X0lPQVNJRF9GRCwgaW9hc2lkX2ZkKTsKPiA+IAlpb2N0bChkZXZpY2VfZmQyLCBWRklPX0JJTkRf SU9BU0lEX0ZELCBpb2FzaWRfZmQpOwo+ID4KPiA+IAkvKiBwcmUtcmVnaXN0ZXIgdGhlIHZpcnR1 YWwgYWRkcmVzcyByYW5nZSBmb3IgYWNjb3VudGluZyAqLwo+ID4gCW1lbV9pbmZvID0geyAudmFk ZHIgPSAweDQwMDAwMDAwOyAuc2l6ZSA9IDFHQiB9Owo+ID4gCWlvY3RsKGlvYXNpZF9mZCwgSU9B U0lEX1JFR0lTVEVSX01FTU9SWSwgJm1lbV9pbmZvKTsKPiA+Cj4gPiAJLyogQXR0YWNoIGRldjEg YW5kIGRldjIgdG8gZ3BhX2lvYXNpZCAqLwo+ID4gCWdwYV9pb2FzaWQgPSBpb2N0bChpb2FzaWRf ZmQsIElPQVNJRF9BTExPQyk7Cj4gPiAJYXRfZGF0YSA9IHsgLmlvYXNpZCA9IGdwYV9pb2FzaWR9 Owo+ID4gCWlvY3RsKGRldmljZV9mZDEsIFZGSU9fQVRUQUNIX0lPQVNJRCwgJmF0X2RhdGEpOwo+ ID4gCWlvY3RsKGRldmljZV9mZDIsIFZGSU9fQVRUQUNIX0lPQVNJRCwgJmF0X2RhdGEpOwo+ID4K PiA+IAkvKiBTZXR1cCBHUEEgbWFwcGluZyAqLwo+ID4gCWRtYV9tYXAgPSB7Cj4gPiAJCS5pb2Fz aWQJPSBncGFfaW9hc2lkOwo+ID4gCQkuaW92YQk9IDA7IAkJLy8gR1BBCj4gPiAJCS52YWRkcgk9 IDB4NDAwMDAwMDA7CS8vIEhWQQo+ID4gCQkuc2l6ZQk9IDFHQjsKPiA+IAl9Owo+ID4gCWlvY3Rs KGlvYXNpZF9mZCwgSU9BU0lEX0RNQV9NQVAsICZkbWFfbWFwKTsKPiA+Cj4gPiAJLyogQWZ0ZXIg Ym9vdCwgZ3Vlc3QgZW5hYmxlcyBhbiBHSU9WQSBzcGFjZSBmb3IgZGV2MiAqLwo+ID4gCWdpb3Zh X2lvYXNpZCA9IGlvY3RsKGlvYXNpZF9mZCwgSU9BU0lEX0FMTE9DKTsKPiA+Cj4gPiAJLyogRmly c3QgZGV0YWNoIGRldjIgZnJvbSBwcmV2aW91cyBhZGRyZXNzIHNwYWNlICovCj4gPiAJYXRfZGF0 YSA9IHsgLmlvYXNpZCA9IGdwYV9pb2FzaWR9Owo+ID4gCWlvY3RsKGRldmljZV9mZDIsIFZGSU9f REVUQUNIX0lPQVNJRCwgJmF0X2RhdGEpOwo+ID4KPiA+IAkvKiBUaGVuIGF0dGFjaCBkZXYyIHRv IHRoZSBuZXcgYWRkcmVzcyBzcGFjZSAqLwo+ID4gCWF0X2RhdGEgPSB7IC5pb2FzaWQgPSBnaW92 YV9pb2FzaWR9Owo+ID4gCWlvY3RsKGRldmljZV9mZDIsIFZGSU9fQVRUQUNIX0lPQVNJRCwgJmF0 X2RhdGEpOwo+ID4KPiA+IAkvKiBTZXR1cCBhIHNoYWRvdyBETUEgbWFwcGluZyBhY2NvcmRpbmcg dG8gdklPTU1VCj4gPiAJICAqIEdJT1ZBICgweDIwMDApIC0+IEdQQSAoMHgxMDAwKSAtPiBIVkEg KDB4NDAwMDEwMDApCj4gPiAJICAqLwo+ID4gCWRtYV9tYXAgPSB7Cj4gPiAJCS5pb2FzaWQJPSBn aW92YV9pb2FzaWQ7Cj4gPiAJCS5pb3ZhCT0gMHgyMDAwOyAJLy8gR0lPVkEKPiA+IAkJLnZhZGRy CT0gMHg0MDAwMTAwMDsJLy8gSFZBCj4gPiAJCS5zaXplCT0gNEtCOwo+ID4gCX07Cj4gPiAJaW9j dGwoaW9hc2lkX2ZkLCBJT0FTSURfRE1BX01BUCwgJmRtYV9tYXApOwo+ID4KPiA+IDUuMy4gSU9B U0lEIG5lc3RpbmcgKHNvZnR3YXJlKQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4K PiA+IFNhbWUgdXNhZ2Ugc2NlbmFyaW8gYXMgNS4yLCB3aXRoIHNvZnR3YXJlLWJhc2VkIElPQVNJ RCBuZXN0aW5nCj4gPiBhdmFpbGFibGUuIEluIHRoaXMgbW9kZSBpdCBpcyB0aGUga2VybmVsIGlu c3RlYWQgb2YgdXNlciB0byBjcmVhdGUgdGhlCj4gPiBzaGFkb3cgbWFwcGluZy4KPiA+Cj4gPiBU aGUgZmxvdyBiZWZvcmUgZ3Vlc3QgYm9vdHMgaXMgc2FtZSBhcyA1LjIsIGV4Y2VwdCBvbmUgcG9p bnQuIEJlY2F1c2UKPiA+IGdpb3ZhX2lvYXNpZCBpcyBuZXN0ZWQgb24gZ3BhX2lvYXNpZCwgbG9j a2VkIGFjY291bnRpbmcgaXMgb25seQo+ID4gY29uZHVjdGVkIGZvciBncGFfaW9hc2lkLiBTbyBp dCdzIG5vdCBuZWNlc3NhcnkgdG8gcHJlLXJlZ2lzdGVyIHZpcnR1YWwKPiA+IG1lbW9yeS4KPiA+ Cj4gPiBUbyBzYXZlIHNwYWNlIHdlIG9ubHkgbGlzdCB0aGUgc3RlcHMgYWZ0ZXIgYm9vdHMgKGku ZS4gYm90aCBkZXYxL2RldjIKPiA+IGhhdmUgYmVlbiBhdHRhY2hlZCB0byBncGFfaW9hc2lkIGJl Zm9yZSBndWVzdCBib290cyk6Cj4gPgo+ID4gCS8qIEFmdGVyIGJvb3RzICovCj4gPiAJLyogTWFr ZSBHSU9WQSBzcGFjZSBuZXN0ZWQgb24gR1BBIHNwYWNlICovCj4gPiAJZ2lvdmFfaW9hc2lkID0g aW9jdGwoaW9hc2lkX2ZkLCBJT0FTSURfQ1JFQVRFX05FU1RJTkcsCj4gPiAJCQkJZ3BhX2lvYXNp ZCk7Cj4gPgo+ID4gCS8qIEF0dGFjaCBkZXYyIHRvIHRoZSBuZXcgYWRkcmVzcyBzcGFjZSAoY2hp bGQpCj4gPiAJICAqIE5vdGUgZGV2MiBpcyBzdGlsbCBhdHRhY2hlZCB0byBncGFfaW9hc2lkIChw YXJlbnQpCj4gPiAJICAqLwo+ID4gCWF0X2RhdGEgPSB7IC5pb2FzaWQgPSBnaW92YV9pb2FzaWR9 Owo+ID4gCWlvY3RsKGRldmljZV9mZDIsIFZGSU9fQVRUQUNIX0lPQVNJRCwgJmF0X2RhdGEpOyAg Cj4gCj4gCj4gRm9yIHZEUEEsIHdlIG5lZWQgc29tZXRoaW5nIHNpbWlsYXIuIEFuZCBpbiB0aGUg ZnV0dXJlLCB2RFBBIG1heSBhbGxvdyAKPiBtdWx0aXBsZSBpb2FzaWQgdG8gYmUgYXR0YWNoZWQg dG8gYSBzaW5nbGUgZGV2aWNlLiBJdCBzaG91bGQgd29yayB3aXRoIAo+IHRoZSBjdXJyZW50IGRl c2lnbi4KPiAKPiAKPiA+Cj4gPiAJLyogU2V0dXAgYSBHSU9WQS0+R1BBIG1hcHBpbmcgZm9yIGdp b3ZhX2lvYXNpZCwgd2hpY2ggd2lsbCBiZQo+ID4gCSAgKiBtZXJnZWQgYnkgdGhlIGtlcm5lbCB3 aXRoIEdQQS0+SFZBIG1hcHBpbmcgb2YgZ3BhX2lvYXNpZAo+ID4gCSAgKiB0byBmb3JtIGEgc2hh ZG93IG1hcHBpbmcuCj4gPiAJICAqLwo+ID4gCWRtYV9tYXAgPSB7Cj4gPiAJCS5pb2FzaWQJPSBn aW92YV9pb2FzaWQ7Cj4gPiAJCS5pb3ZhCT0gMHgyMDAwOwkvLyBHSU9WQQo+ID4gCQkudmFkZHIJ PSAweDEwMDA7CS8vIEdQQQo+ID4gCQkuc2l6ZQk9IDRLQjsKPiA+IAl9Owo+ID4gCWlvY3RsKGlv YXNpZF9mZCwgSU9BU0lEX0RNQV9NQVAsICZkbWFfbWFwKTsKPiA+Cj4gPiA1LjQuIElPQVNJRCBu ZXN0aW5nIChoYXJkd2FyZSkKPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysKPiA+Cj4gPiBT YW1lIHVzYWdlIHNjZW5hcmlvIGFzIDUuMiwgd2l0aCBoYXJkd2FyZS1iYXNlZCBJT0FTSUQgbmVz dGluZwo+ID4gYXZhaWxhYmxlLiBJbiB0aGlzIG1vZGUgdGhlIHBndGFibGUgYmluZGluZyBwcm90 b2NvbCBpcyB1c2VkIHRvCj4gPiBiaW5kIHRoZSBndWVzdCBJT1ZBIHBhZ2UgdGFibGUgd2l0aCB0 aGUgSU9NTVU6Cj4gPgo+ID4gCS8qIEFmdGVyIGJvb3RzICovCj4gPiAJLyogTWFrZSBHSU9WQSBz cGFjZSBuZXN0ZWQgb24gR1BBIHNwYWNlICovCj4gPiAJZ2lvdmFfaW9hc2lkID0gaW9jdGwoaW9h c2lkX2ZkLCBJT0FTSURfQ1JFQVRFX05FU1RJTkcsCj4gPiAJCQkJZ3BhX2lvYXNpZCk7Cj4gPgo+ ID4gCS8qIEF0dGFjaCBkZXYyIHRvIHRoZSBuZXcgYWRkcmVzcyBzcGFjZSAoY2hpbGQpCj4gPiAJ ICAqIE5vdGUgZGV2MiBpcyBzdGlsbCBhdHRhY2hlZCB0byBncGFfaW9hc2lkIChwYXJlbnQpCj4g PiAJICAqLwo+ID4gCWF0X2RhdGEgPSB7IC5pb2FzaWQgPSBnaW92YV9pb2FzaWR9Owo+ID4gCWlv Y3RsKGRldmljZV9mZDIsIFZGSU9fQVRUQUNIX0lPQVNJRCwgJmF0X2RhdGEpOyAgCj4gCj4gCj4g SSBndWVzcyBWRklPX0FUVEFDSF9JT0FTSUQgd2lsbCBmYWlsIGlmIHRoZSB1bmRlcmxheWVyIGRv ZXNuJ3Qgc3VwcG9ydCAKPiBoYXJkd2FyZSBuZXN0aW5nLiBPciBpcyB0aGVyZSB3YXkgdG8gZGV0 ZWN0IHRoZSBjYXBhYmlsaXR5IGJlZm9yZT8KCkkgdGhpbmsgaXQgY291bGQgZmFpbCBpbiB0aGUg SU9BU0lEX0NSRUFURV9ORVNUSU5HLiBJZiB0aGUgZ3BhX2lvYXNpZAppcyBub3QgYWJsZSB0byBz dXBwb3J0IG5lc3RpbmcsIHRoZW4gc2hvdWxkIGZhaWwgaXQuCgo+IEkgdGhpbmsgR0VUX0lORk8g b25seSB3b3JrcyBhZnRlciB0aGUgQVRUQUNILgoKeWVzLiBBZnRlciBhdHRhY2hpbmcgdG8gZ3Bh X2lvYXNpZCwgdXNlcnNwYWNlIGNvdWxkIEdFVF9JTkZPIG9uIHRoZQpncGFfaW9hc2lkIGFuZCBj aGVjayBpZiBuZXN0aW5nIGlzIHN1cHBvcnRlZCBvciBub3QuIHJpZ2h0PwoKPiAKPiAKPiA+Cj4g PiAJLyogQmluZCBndWVzdCBJL08gcGFnZSB0YWJsZSAgKi8KPiA+IAliaW5kX2RhdGEgPSB7Cj4g PiAJCS5pb2FzaWQJPSBnaW92YV9pb2FzaWQ7Cj4gPiAJCS5hZGRyCT0gZ2lvdmFfcGd0YWJsZTsK PiA+IAkJLy8gYW5kIGZvcm1hdCBpbmZvcm1hdGlvbgo+ID4gCX07Cj4gPiAJaW9jdGwoaW9hc2lk X2ZkLCBJT0FTSURfQklORF9QR1RBQkxFLCAmYmluZF9kYXRhKTsKPiA+Cj4gPiAJLyogSW52YWxp ZGF0ZSBJT1RMQiB3aGVuIHJlcXVpcmVkICovCj4gPiAJaW52X2RhdGEgPSB7Cj4gPiAJCS5pb2Fz aWQJPSBnaW92YV9pb2FzaWQ7Cj4gPiAJCS8vIGdyYW51bGFyIGluZm9ybWF0aW9uCj4gPiAJfTsK PiA+IAlpb2N0bChpb2FzaWRfZmQsIElPQVNJRF9JTlZBTElEQVRFX0NBQ0hFLCAmaW52X2RhdGEp Owo+ID4KPiA+IAkvKiBTZWUgNS42IGZvciBJL08gcGFnZSBmYXVsdCBoYW5kbGluZyAqLwo+ID4g CQo+ID4gNS41LiBHdWVzdCBTVkEgKHZTVkEpCj4gPiArKysrKysrKysrKysrKysrKysKPiA+Cj4g PiBBZnRlciBib290cyB0aGUgZ3Vlc3QgZnVydGhlciBjcmVhdGUgYSBHVkEgYWRkcmVzcyBzcGFj ZXMgKGdwYXNpZDEpIG9uCj4gPiBkZXYxLiBEZXYyIGlzIG5vdCBhZmZlY3RlZCAoc3RpbGwgYXR0 YWNoZWQgdG8gZ2lvdmFfaW9hc2lkKS4KPiA+Cj4gPiBBcyBleHBsYWluZWQgaW4gc2VjdGlvbiA0 LCB1c2VyIHNob3VsZCBhdm9pZCBleHBvc2UgRU5RQ01EIG9uIGJvdGgKPiA+IHBkZXYgYW5kIG1k ZXYuCj4gPgo+ID4gVGhlIHNlcXVlbmNlIGFwcGxpZXMgdG8gYWxsIGRldmljZSB0eXBlcyAoYmVp bmcgcGRldiBvciBtZGV2KSwgZXhjZXB0Cj4gPiBvbmUgYWRkaXRpb25hbCBzdGVwIHRvIGNhbGwg S1ZNIGZvciBFTlFDTUQtY2FwYWJsZSBtZGV2OiAgCj4gCj4gCj4gTXkgdW5kZXJzdGFuZGluZyBp cyBFTlFDTUQgaXMgSW50ZWwgc3BlY2lmaWMgYW5kIG5vdCBhIHJlcXVpcmVtZW50IGZvciAKPiBo YXZpbmcgdlNWQS4KCkVOUUNNRCBpcyBub3QgcmVhbGx5IEludGVsIHNwZWNpZmljIGFsdGhvdWdo IG9ubHkgSW50ZWwgc3VwcG9ydHMgaXQgdG9kYXkuClRoZSBQQ0llIERNV3IgY2FwYWJpbGl0eSBp cyB0aGUgY2FwYWJpbGl0eSBmb3Igc29mdHdhcmUgdG8gZW51bWVyYXRlIHRoZQpFTlFDTUQgc3Vw cG9ydCBpbiBkZXZpY2Ugc2lkZS4geWVzLCBpdCBpcyBub3QgYSByZXF1aXJlbWVudCBmb3IgdlNW QS4gVGhleQphcmUgb3J0aG9nb25hbC4KCj4gCj4gPgo+ID4gCS8qIEFmdGVyIGJvb3RzICovCj4g PiAJLyogTWFrZSBHVkEgc3BhY2UgbmVzdGVkIG9uIEdQQSBzcGFjZSAqLwo+ID4gCWd2YV9pb2Fz aWQgPSBpb2N0bChpb2FzaWRfZmQsIElPQVNJRF9DUkVBVEVfTkVTVElORywKPiA+IAkJCQlncGFf aW9hc2lkKTsKPiA+Cj4gPiAJLyogQXR0YWNoIGRldjEgdG8gdGhlIG5ldyBhZGRyZXNzIHNwYWNl IGFuZCBzcGVjaWZ5IHZQQVNJRCAqLwo+ID4gCWF0X2RhdGEgPSB7Cj4gPiAJCS5pb2FzaWQJCT0g Z3ZhX2lvYXNpZDsKPiA+IAkJLmZsYWcgCQk9IElPQVNJRF9BVFRBQ0hfVVNFUl9QQVNJRDsKPiA+ IAkJLnVzZXJfcGFzaWQJPSBncGFzaWQxOwo+ID4gCX07Cj4gPiAJaW9jdGwoZGV2aWNlX2ZkMSwg VkZJT19BVFRBQ0hfSU9BU0lELCAmYXRfZGF0YSk7Cj4gPgo+ID4gCS8qIGlmIGRldjEgaXMgRU5R Q01ELWNhcGFibGUgbWRldiwgdXBkYXRlIENQVSBQQVNJRAo+ID4gCSAgKiB0cmFuc2xhdGlvbiBz dHJ1Y3R1cmUgdGhyb3VnaCBLVk0KPiA+IAkgICovCj4gPiAJcGFfZGF0YSA9IHsKPiA+IAkJLmlv YXNpZF9mZAk9IGlvYXNpZF9mZDsKPiA+IAkJLmlvYXNpZAkJPSBndmFfaW9hc2lkOwo+ID4gCQku Z3Vlc3RfcGFzaWQJPSBncGFzaWQxOwo+ID4gCX07Cj4gPiAJaW9jdGwoa3ZtX2ZkLCBLVk1fTUFQ X1BBU0lELCAmcGFfZGF0YSk7Cj4gPgo+ID4gCS8qIEJpbmQgZ3Vlc3QgSS9PIHBhZ2UgdGFibGUg ICovCj4gPiAJYmluZF9kYXRhID0gewo+ID4gCQkuaW9hc2lkCT0gZ3ZhX2lvYXNpZDsKPiA+IAkJ LmFkZHIJPSBndmFfcGd0YWJsZTE7Cj4gPiAJCS8vIGFuZCBmb3JtYXQgaW5mb3JtYXRpb24KPiA+ IAl9Owo+ID4gCWlvY3RsKGlvYXNpZF9mZCwgSU9BU0lEX0JJTkRfUEdUQUJMRSwgJmJpbmRfZGF0 YSk7Cj4gPgo+ID4gCS4uLgoKLS0gClJlZ2FyZHMsCllpIExpdQpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwppb21tdSBtYWlsaW5nIGxpc3QKaW9tbXVAbGlz dHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3Jn L21haWxtYW4vbGlzdGluZm8vaW9tbXU=