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 34A56C2D0C0 for ; Mon, 23 Dec 2019 11:39:00 +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 F357C206D3 for ; Mon, 23 Dec 2019 11:38:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="U9n3V/Vj"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="I+4to0KC" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F357C206D3 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=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-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:References:To:From:Subject:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=EaG+hJ/xUm5WyKS5//xvsSoymX03iXjUKLdxT9GrLFg=; b=U9n3V/VjT4FIgy SU44Lgx3V/WdKWTykBUfdUmY0LuYM/BFQQOHVib0CtboayNzWRIXhJcBqPhPGeTretJcxgxXW/cwF XT1kx80ajNCtNdHJgJ30HlpsyUseSUvbZ8od4XjYvCD9F5xmZSCrF6elFKv4UN1kqm6vAi8GKlflM 1JBrfz8+RM2F3T+84K+zp/gnuOXhtCFoz6RWlfhqiAHHUCMxEdE2pHv5164ob+44RJA//MJBTsZty 8vAKdpjHwX2FrG65gSj7Ypya1burtXHZND1XR3tt+dVIdDvuyLcfy296UE3OhZIE7vOX7LdaM4HuV YnFRGxcEUviyRJw+MNVQ==; 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 1ijM39-0002A7-K8; Mon, 23 Dec 2019 11:38:59 +0000 Received: from lelv0142.ext.ti.com ([198.47.23.249]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1ijM33-00029V-Qb for linux-arm-kernel@lists.infradead.org; Mon, 23 Dec 2019 11:38:57 +0000 Received: from lelv0265.itg.ti.com ([10.180.67.224]) by lelv0142.ext.ti.com (8.15.2/8.15.2) with ESMTP id xBNBcgIS120581; Mon, 23 Dec 2019 05:38:42 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1577101122; bh=sVeMrk6DbdlcVMlH/iqQI+54U0Qp8FYL9Geb3PSBk0Y=; h=Subject:From:To:CC:References:Date:In-Reply-To; b=I+4to0KCEuSJjbv+BnL7mgVXvupjwkMdICtJ/TmHz8vc5b05iBFSsmpc6n2OJ7A94 yGRKlFDk+2i9CjepTBfB0/1qlH+EewlcwYKcBQzE6nLcjoEb7Bc+n6odOO2rMo1u+2 BK8TykCLZYiCJVDoYgrKwrGcOFaJtPAnWZWNz6fc= Received: from DLEE108.ent.ti.com (dlee108.ent.ti.com [157.170.170.38]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id xBNBcgeu085285 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 23 Dec 2019 05:38:42 -0600 Received: from DLEE110.ent.ti.com (157.170.170.21) by DLEE108.ent.ti.com (157.170.170.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3; Mon, 23 Dec 2019 05:38:42 -0600 Received: from lelv0326.itg.ti.com (10.180.67.84) by DLEE110.ent.ti.com (157.170.170.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3 via Frontend Transport; Mon, 23 Dec 2019 05:38:42 -0600 Received: from [192.168.2.6] (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0326.itg.ti.com (8.15.2/8.15.2) with ESMTP id xBNBccAR063163; Mon, 23 Dec 2019 05:38:39 -0600 Subject: Re: [PATCH v8 02/18] soc: ti: k3: add navss ringacc driver From: Peter Ujfalusi To: , , , References: <20191223110458.30766-1-peter.ujfalusi@ti.com> <20191223110458.30766-3-peter.ujfalusi@ti.com> Message-ID: <6d70686b-a94e-18d1-7b33-ff9df7176089@ti.com> Date: Mon, 23 Dec 2019 13:38:56 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: <20191223110458.30766-3-peter.ujfalusi@ti.com> Content-Language: en-US X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191223_033853_994685_21B9B6BC X-CRM114-Status: GOOD ( 31.31 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, grygorii.strashko@ti.com, vigneshr@ti.com, lokeshvutla@ti.com, j-keerthy@ti.com, linux-kernel@vger.kernel.org, t-kristo@ti.com, tony@atomide.com, dmaengine@vger.kernel.org, dan.j.williams@intel.com, frowand.list@gmail.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgU2FudG9zaCwKCk9uIDIzLzEyLzIwMTkgMTMuMDQsIFBldGVyIFVqZmFsdXNpIHdyb3RlOgo+ IEZyb206IEdyeWdvcmlpIFN0cmFzaGtvIDxncnlnb3JpaS5zdHJhc2hrb0B0aS5jb20+Cj4gCj4g VGhlIFJpbmcgQWNjZWxlcmF0b3IgKFJJTkdBQ0Mgb3IgUkEpIHByb3ZpZGVzIGhhcmR3YXJlIGFj Y2VsZXJhdGlvbiB0bwo+IGVuYWJsZSBzdHJhaWdodGZvcndhcmQgcGFzc2luZyBvZiB3b3JrIGJl dHdlZW4gYSBwcm9kdWNlciBhbmQgYSBjb25zdW1lci4KPiBUaGVyZSBpcyBvbmUgUklOR0FDQyBt b2R1bGUgcGVyIE5BVlNTIG9uIFRJIEFNNjV4IFNvQ3MuCj4gCj4gVGhlIFJJTkdBQ0MgY29udmVy dHMgY29uc3RhbnQtYWRkcmVzcyByZWFkIGFuZCB3cml0ZSBhY2Nlc3NlcyB0byBlcXVpdmFsZW50 Cj4gcmVhZCBvciB3cml0ZSBhY2Nlc3NlcyB0byBhIGNpcmN1bGFyIGRhdGEgc3RydWN0dXJlIGlu IG1lbW9yeS4gVGhlIFJJTkdBQ0MKPiBlbGltaW5hdGVzIHRoZSBuZWVkIGZvciBlYWNoIERNQSBj b250cm9sbGVyIHdoaWNoIG5lZWRzIHRvIGFjY2VzcyByaW5nCj4gZWxlbWVudHMgZnJvbSBoYXZp bmcgdG8ga25vdyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcmluZyAoYmFzZSBhZGRyZXNzLAo+ IGN1cnJlbnQgb2Zmc2V0KS4gVGhlIERNQSBjb250cm9sbGVyIHBlcmZvcm1zIGEgcmVhZCBvciB3 cml0ZSBhY2Nlc3MgdG8gYQo+IHNwZWNpZmljIGFkZHJlc3MgcmFuZ2UgKHdoaWNoIG1hcHMgdG8g dGhlIHNvdXJjZSBpbnRlcmZhY2Ugb24gdGhlIFJJTkdBQ0MpCj4gYW5kIHRoZSBSSU5HQUNDIHJl cGxhY2VzIHRoZSBhZGRyZXNzIGZvciB0aGUgdHJhbnNhY3Rpb24gd2l0aCBhIG5ldyBhZGRyZXNz Cj4gd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIGhlYWQgb3IgdGFpbCBlbGVtZW50IG9mIHRoZSBy aW5nIChoZWFkIGZvciByZWFkcywKPiB0YWlsIGZvciB3cml0ZXMpLiBTaW5jZSB0aGUgUklOR0FD QyBtYWludGFpbnMgdGhlIHN0YXRlLCBtdWx0aXBsZSBETUEKPiBjb250cm9sbGVycyBvciBjaGFu bmVscyBhcmUgYWxsb3dlZCB0byBjb2hlcmVudGx5IHNoYXJlIHRoZSBzYW1lIHJpbmdzIGFzCj4g YXBwbGljYWJsZS4gVGhlIFJJTkdBQ0MgaXMgYWJsZSB0byBwbGFjZSBkYXRhIHdoaWNoIGlzIGRl c3RpbmVkIHRvd2FyZHMKPiBzb2Z0d2FyZSBpbnRvIGNhY2hlZCBtZW1vcnkgZGlyZWN0bHkuCj4g Cj4gU3VwcG9ydGVkIHJpbmcgbW9kZXM6Cj4gLSBSaW5nIE1vZGUKPiAtIE1lc3NhZ2luZyBNb2Rl Cj4gLSBDcmVkZW50aWFscyBNb2RlCj4gLSBRdWV1ZSBNYW5hZ2VyIE1vZGUKPiAKPiBUSS1TQ0kg aW50ZWdyYXRpb246Cj4gCj4gVGV4YXMgSW5zdHJ1bWVudCdzIFN5c3RlbSBDb250cm9sIEludGVy ZmFjZSAoVEktU0NJKSBNZXNzYWdlIFByb3RvY29sIG5vdwo+IGhhcyBjb250cm9sIG92ZXIgUmlu Z2FjYyBtb2R1bGUgcmVzb3VyY2VzIG1hbmFnZW1lbnQgKFJNKSBhbmQgUmluZ3MKPiBjb25maWd1 cmF0aW9uLgo+IAo+IFRoZSBjb3JyZXNwb25kaW5nIHN1cHBvcnQgb2YgVEktU0NJIFJpbmdhY2Mg bW9kdWxlIFJNIHByb3RvY29sCj4gaW50cm9kdWNlZCBhcyBvcHRpb24gdGhyb3VnaCBEVCBwYXJh bWV0ZXJzOgo+IC0gdGksc2NpOiBwaGFuZGxlIG9uIFRJLVNDSSBmaXJtd2FyZSBjb250cm9sbGVy IERUIG5vZGUKPiAtIHRpLHNjaS1kZXYtaWQ6IFRJLVNDSSBkZXZpY2UgaWRlbnRpZmllciBhcyBw ZXIgVEktU0NJIGZpcm13YXJlIHNwZWMKPiAKPiBpZiBib3RoIHBhcmFtZXRlcnMgcHJlc2VudCAt IFJpbmdhY2MgZHJpdmVyIHdpbGwgY29uZmlndXJlL2ZyZWUvcmVzZXQgUmluZ3MKPiB1c2luZyBU SS1TQ0kgTWVzc2FnZSBSaW5nYWNjIFJNIFByb3RvY29sLgo+IAo+IFRoZSBSaW5nYWNjIGRyaXZl ciBtYW5hZ2VzIFJpbmdzIGFsbG9jYXRpb24gYnkgaXRzZWxmIG5vdyBhbmQgcmVxdWVzdHMKPiBU SS1TQ0kgZmlybXdhcmUgdG8gYWxsb2NhdGUgYW5kIGNvbmZpZ3VyZSBzcGVjaWZpYyBSaW5ncyBv bmx5LiBJdCdzIGRvbmUKPiB0aGlzIHdheSBiZWNhdXNlLCBMaW51eCBkcml2ZXIgaW1wbGVtZW50 cyB0d28gc3RhZ2UgUmluZ3MgYWxsb2NhdGlvbiBhbmQKPiBjb25maWd1cmF0aW9uIChhbGxvY2F0 ZSByaW5nIGFuZCBjb25maWd1cmUgcmluZykgd2hpbGUgVEktU0NJIE1lc3NhZ2UKPiBQcm90b2Nv bCBzdXBwb3J0cyBvbmx5IG9uZSBjb21iaW5lZCBvcGVyYXRpb24gKGFsbG9jYXRlK2NvbmZpZ3Vy ZSkuCj4gCj4gU2lnbmVkLW9mZi1ieTogR3J5Z29yaWkgU3RyYXNoa28gPGdyeWdvcmlpLnN0cmFz aGtvQHRpLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1 c2lAdGkuY29tPgo+IFJldmlld2VkLWJ5OiBUZXJvIEtyaXN0byA8dC1rcmlzdG9AdGkuY29tPgo+ IFRlc3RlZC1ieTogS2VlcnRoeSA8ai1rZWVydGh5QHRpLmNvbT4KCkNhbiB5b3UgcGxlYXNlIGdp dmVyIHlvdXIgQWNrZWQtYnkgZm9yIHRoZSByaW5nYWNjIHBhdGNoZXMgaWYgdGhleSBhcmUKc3Rp bGwgT0sgZnJvbSB5b3VyIHBvaW50IG9mIHZpZXcgYXMgeW91IGhhZCBvZmZlcmVkIHRvIHRha2Ug dGhlbSBiZWZvcmUKSSBnb3QgY29tbWVudHMgZnJvbSBMb2tlc2guCgpUaGFuayB5b3UsCi0gUMOp dGVyCgo+IC0tLQo+ICBkcml2ZXJzL3NvYy90aS9LY29uZmlnICAgICAgICAgICAgfCAgIDExICsK PiAgZHJpdmVycy9zb2MvdGkvTWFrZWZpbGUgICAgICAgICAgIHwgICAgMSArCj4gIGRyaXZlcnMv c29jL3RpL2szLXJpbmdhY2MuYyAgICAgICB8IDExNTcgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiAgaW5jbHVkZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oIHwgIDI0NCArKysrKysK PiAgNCBmaWxlcyBjaGFuZ2VkLCAxNDEzIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvc29jL3RpL2szLXJpbmdhY2MuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5j bHVkZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv c29jL3RpL0tjb25maWcgYi9kcml2ZXJzL3NvYy90aS9LY29uZmlnCj4gaW5kZXggY2Y1NDVmNDI4 ZDAzLi40NDg2ZTA1NTc5NGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zb2MvdGkvS2NvbmZpZwo+ ICsrKyBiL2RyaXZlcnMvc29jL3RpL0tjb25maWcKPiBAQCAtODAsNiArODAsMTcgQEAgY29uZmln IFRJX1NDSV9QTV9ET01BSU5TCj4gIAkgIGNhbGxlZCB0aV9zY2lfcG1fZG9tYWlucy4gTm90ZSB0 aGlzIGlzIG5lZWRlZCBlYXJseSBpbiBib290IGJlZm9yZQo+ICAJICByb290ZnMgbWF5IGJlIGF2 YWlsYWJsZS4KPiAgCj4gK2NvbmZpZyBUSV9LM19SSU5HQUNDCj4gKwlib29sICJLMyBSaW5nIGFj Y2VsZXJhdG9yIFN1YiBTeXN0ZW0iCj4gKwlkZXBlbmRzIG9uIEFSQ0hfSzMgfHwgQ09NUElMRV9U RVNUCj4gKwlkZXBlbmRzIG9uIFRJX1NDSV9JTlRBX0lSUUNISVAKPiArCWhlbHAKPiArCSAgU2F5 IHkgaGVyZSB0byBzdXBwb3J0IHRoZSBLMyBSaW5nIGFjY2VsZXJhdG9yIG1vZHVsZS4KPiArCSAg VGhlIFJpbmcgQWNjZWxlcmF0b3IgKFJJTkdBQ0Mgb3IgUkEpICBwcm92aWRlcyBoYXJkd2FyZSBh Y2NlbGVyYXRpb24KPiArCSAgdG8gZW5hYmxlIHN0cmFpZ2h0Zm9yd2FyZCBwYXNzaW5nIG9mIHdv cmsgYmV0d2VlbiBhIHByb2R1Y2VyCj4gKwkgIGFuZCBhIGNvbnN1bWVyLiBUaGVyZSBpcyBvbmUg UklOR0FDQyBtb2R1bGUgcGVyIE5BVlNTIG9uIFRJIEFNNjV4IFNvQ3MKPiArCSAgSWYgdW5zdXJl LCBzYXkgTi4KPiArCj4gIGVuZGlmICMgU09DX1RJCj4gIAo+ICBjb25maWcgVElfU0NJX0lOVEFf TVNJX0RPTUFJTgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9NYWtlZmlsZSBiL2RyaXZl cnMvc29jL3RpL01ha2VmaWxlCj4gaW5kZXggNzg4YjVjZDFlMTgwLi5iZWM4Mjc5MzdhNWYgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9zb2MvdGkvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL3NvYy90 aS9NYWtlZmlsZQo+IEBAIC0xMCwzICsxMCw0IEBAIG9iai0kKENPTkZJR19BUkNIX09NQVAyUExV UykJCSs9IG9tYXBfcHJtLm8KPiAgb2JqLSQoQ09ORklHX1dLVVBfTTNfSVBDKQkJKz0gd2t1cF9t M19pcGMubwo+ICBvYmotJChDT05GSUdfVElfU0NJX1BNX0RPTUFJTlMpCQkrPSB0aV9zY2lfcG1f ZG9tYWlucy5vCj4gIG9iai0kKENPTkZJR19USV9TQ0lfSU5UQV9NU0lfRE9NQUlOKQkrPSB0aV9z Y2lfaW50YV9tc2kubwo+ICtvYmotJChDT05GSUdfVElfSzNfUklOR0FDQykJCSs9IGszLXJpbmdh Y2Mubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9rMy1yaW5nYWNjLmMgYi9kcml2ZXJz L3NvYy90aS9rMy1yaW5nYWNjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uNWZiMmVlMmFjOTc4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvc29j L3RpL2szLXJpbmdhY2MuYwo+IEBAIC0wLDAgKzEsMTE1NyBAQAo+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBUSSBLMyBOQVZTUyBSaW5nIEFjY2VsZXJh dG9yIHN1YnN5c3RlbSBkcml2ZXIKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE5IFRleGFz IEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tCj4gKyAqLwo+ICsK PiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pby5o Pgo+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvc29j L3RpL2szLXJpbmdhY2MuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NvYy90aS90aV9zY2lfcHJvdG9j b2wuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NvYy90aS90aV9zY2lfaW50YV9tc2kuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L29mX2lycS5oPgo+ICsjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+Cj4g Kwo+ICtzdGF0aWMgTElTVF9IRUFEKGszX3JpbmdhY2NfbGlzdCk7Cj4gK3N0YXRpYyBERUZJTkVf TVVURVgoazNfcmluZ2FjY19saXN0X2xvY2spOwo+ICsKPiArI2RlZmluZSBLM19SSU5HQUNDX0NG R19SSU5HX1NJWkVfRUxDTlRfTUFTSwkJR0VOTUFTSygxOSwgMCkKPiArCj4gKy8qKgo+ICsgKiBz dHJ1Y3QgazNfcmluZ19ydF9yZWdzIC0gVGhlIFJBIHJlYWx0aW1lIENvbnRyb2wvU3RhdHVzIFJl Z2lzdGVycyByZWdpb24KPiArICoKPiArICogQHJlc3ZfMTY6IFJlc2VydmVkCj4gKyAqIEBkYjog UmluZyBEb29yYmVsbCBSZWdpc3Rlcgo+ICsgKiBAcmVzdl80OiBSZXNlcnZlZAo+ICsgKiBAb2Nj OiBSaW5nIE9jY3VwYW5jeSBSZWdpc3Rlcgo+ICsgKiBAaW5keDogUmluZyBDdXJyZW50IEluZGV4 IFJlZ2lzdGVyCj4gKyAqIEBod29jYzogUmluZyBIYXJkd2FyZSBPY2N1cGFuY3kgUmVnaXN0ZXIK PiArICogQGh3aW5keDogUmluZyBIYXJkd2FyZSBDdXJyZW50IEluZGV4IFJlZ2lzdGVyCj4gKyAq Lwo+ICtzdHJ1Y3QgazNfcmluZ19ydF9yZWdzIHsKPiArCXUzMglyZXN2XzE2WzRdOwo+ICsJdTMy CWRiOwo+ICsJdTMyCXJlc3ZfNFsxXTsKPiArCXUzMglvY2M7Cj4gKwl1MzIJaW5keDsKPiArCXUz Mglod29jYzsKPiArCXUzMglod2luZHg7Cj4gK307Cj4gKwo+ICsjZGVmaW5lIEszX1JJTkdBQ0Nf UlRfUkVHU19TVEVQCTB4MTAwMAo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBrM19yaW5nX2ZpZm9f cmVncyAtIFRoZSBSaW5nIEFjY2VsZXJhdG9yIFF1ZXVlcyBSZWdpc3RlcnMgcmVnaW9uCj4gKyAq Cj4gKyAqIEBoZWFkX2RhdGE6IFJpbmcgSGVhZCBFbnRyeSBEYXRhIFJlZ2lzdGVycwo+ICsgKiBA dGFpbF9kYXRhOiBSaW5nIFRhaWwgRW50cnkgRGF0YSBSZWdpc3RlcnMKPiArICogQHBlZWtfaGVh ZF9kYXRhOiBSaW5nIFBlZWsgSGVhZCBFbnRyeSBEYXRhIFJlZ3MKPiArICogQHBlZWtfdGFpbF9k YXRhOiBSaW5nIFBlZWsgVGFpbCBFbnRyeSBEYXRhIFJlZ3MKPiArICovCj4gK3N0cnVjdCBrM19y aW5nX2ZpZm9fcmVncyB7Cj4gKwl1MzIJaGVhZF9kYXRhWzEyOF07Cj4gKwl1MzIJdGFpbF9kYXRh WzEyOF07Cj4gKwl1MzIJcGVla19oZWFkX2RhdGFbMTI4XTsKPiArCXUzMglwZWVrX3RhaWxfZGF0 YVsxMjhdOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBrM19yaW5nYWNjX3Byb3h5X2dj ZmdfcmVncyAtIFJBIFByb3h5IEdsb2JhbCBDb25maWcgTU1JTyBSZWdpb24KPiArICoKPiArICog QHJldmlzaW9uOiBSZXZpc2lvbiBSZWdpc3Rlcgo+ICsgKiBAY29uZmlnOiBDb25maWcgUmVnaXN0 ZXIKPiArICovCj4gK3N0cnVjdCBrM19yaW5nYWNjX3Byb3h5X2djZmdfcmVncyB7Cj4gKwl1MzIJ cmV2aXNpb247Cj4gKwl1MzIJY29uZmlnOwo+ICt9Owo+ICsKPiArI2RlZmluZSBLM19SSU5HQUND X1BST1hZX0NGR19USFJFQURTX01BU0sJCUdFTk1BU0soMTUsIDApCj4gKwo+ICsvKioKPiArICog c3RydWN0IGszX3JpbmdhY2NfcHJveHlfdGFyZ2V0X3JlZ3MgLSBQcm94eSBEYXRhcGF0aCBNTUlP IFJlZ2lvbgo+ICsgKgo+ICsgKiBAY29udHJvbDogUHJveHkgQ29udHJvbCBSZWdpc3Rlcgo+ICsg KiBAc3RhdHVzOiBQcm94eSBTdGF0dXMgUmVnaXN0ZXIKPiArICogQHJlc3ZfNTEyOiBSZXNlcnZl ZAo+ICsgKiBAZGF0YTogUHJveHkgRGF0YSBSZWdpc3Rlcgo+ICsgKi8KPiArc3RydWN0IGszX3Jp bmdhY2NfcHJveHlfdGFyZ2V0X3JlZ3Mgewo+ICsJdTMyCWNvbnRyb2w7Cj4gKwl1MzIJc3RhdHVz Owo+ICsJdTgJcmVzdl81MTJbNTA0XTsKPiArCXUzMglkYXRhWzEyOF07Cj4gK307Cj4gKwo+ICsj ZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfVEFSR0VUX1NURVAJMHgxMDAwCj4gKyNkZWZpbmUgSzNf UklOR0FDQ19QUk9YWV9OT1RfVVNFRAkoLTEpCj4gKwo+ICtlbnVtIGszX3JpbmdhY2NfcHJveHlf YWNjZXNzX21vZGUgewo+ICsJUFJPWFlfQUNDRVNTX01PREVfSEVBRCA9IDAsCj4gKwlQUk9YWV9B Q0NFU1NfTU9ERV9UQUlMID0gMSwKPiArCVBST1hZX0FDQ0VTU19NT0RFX1BFRUtfSEVBRCA9IDIs Cj4gKwlQUk9YWV9BQ0NFU1NfTU9ERV9QRUVLX1RBSUwgPSAzLAo+ICt9Owo+ICsKPiArI2RlZmlu ZSBLM19SSU5HQUNDX0ZJRk9fV0lORE9XX1NJWkVfQllURVMgICg1MTJVKQo+ICsjZGVmaW5lIEsz X1JJTkdBQ0NfRklGT19SRUdTX1NURVAJMHgxMDAwCj4gKyNkZWZpbmUgSzNfUklOR0FDQ19NQVhf REJfUklOR19DTlQgICAgKDEyN1UpCj4gKwo+ICtzdHJ1Y3QgazNfcmluZ19vcHMgewo+ICsJaW50 ICgqcHVzaF90YWlsKShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxtKTsKPiArCWludCAo KnB1c2hfaGVhZCkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsbSk7Cj4gKwlpbnQgKCpw b3BfdGFpbCkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsbSk7Cj4gKwlpbnQgKCpwb3Bf aGVhZCkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsbSk7Cj4gK307Cj4gKwo+ICsvKioK PiArICogc3RydWN0IGszX3JpbmcgLSBSQSBSaW5nIGRlc2NyaXB0b3IKPiArICoKPiArICogQHJ0 OiBSaW5nIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVycwo+ICsgKiBAZmlmb3M6IFJpbmcgcXVldWVz IHJlZ2lzdGVycwo+ICsgKiBAcHJveHk6IFJpbmcgUHJveHkgRGF0YXBhdGggcmVnaXN0ZXJzCj4g KyAqIEByaW5nX21lbV9kbWE6IFJpbmcgYnVmZmVyIGRtYSBhZGRyZXNzCj4gKyAqIEByaW5nX21l bV92aXJ0OiBSaW5nIGJ1ZmZlciB2aXJ0IGFkZHJlc3MKPiArICogQG9wczogUmluZyBvcGVyYXRp b25zCj4gKyAqIEBzaXplOiBSaW5nIHNpemUgaW4gZWxlbWVudHMKPiArICogQGVsbV9zaXplOiBT aXplIG9mIHRoZSByaW5nIGVsZW1lbnQKPiArICogQG1vZGU6IFJpbmcgbW9kZQo+ICsgKiBAZmxh Z3M6IGZsYWdzCj4gKyAqIEBmcmVlOiBOdW1iZXIgb2YgZnJlZSBlbGVtZW50cwo+ICsgKiBAb2Nj OiBSaW5nIG9jY3VwYW5jeQo+ICsgKiBAd2luZGV4OiBXcml0ZSBpbmRleCAob25seSBmb3IgQEsz X1JJTkdBQ0NfUklOR19NT0RFX1JJTkcpCj4gKyAqIEByaW5kZXg6IFJlYWQgaW5kZXggKG9ubHkg Zm9yIEBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HKQo+ICsgKiBAcmluZ19pZDogUmluZyBJZAo+ ICsgKiBAcGFyZW50OiBQb2ludGVyIG9uIHN0cnVjdCBAazNfcmluZ2FjYwo+ICsgKiBAdXNlX2Nv dW50OiBVc2UgY291bnQgZm9yIHNoYXJlZCByaW5ncwo+ICsgKiBAcHJveHlfaWQ6IFJBIFJpbmcg UHJveHkgSWQgKG9ubHkgaWYgQEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFkpCj4gKyAqLwo+ICtz dHJ1Y3QgazNfcmluZyB7Cj4gKwlzdHJ1Y3QgazNfcmluZ19ydF9yZWdzIF9faW9tZW0gKnJ0Owo+ ICsJc3RydWN0IGszX3JpbmdfZmlmb19yZWdzIF9faW9tZW0gKmZpZm9zOwo+ICsJc3RydWN0IGsz X3JpbmdhY2NfcHJveHlfdGFyZ2V0X3JlZ3MgIF9faW9tZW0gKnByb3h5Owo+ICsJZG1hX2FkZHJf dAlyaW5nX21lbV9kbWE7Cj4gKwl2b2lkCQkqcmluZ19tZW1fdmlydDsKPiArCXN0cnVjdCBrM19y aW5nX29wcyAqb3BzOwo+ICsJdTMyCQlzaXplOwo+ICsJZW51bSBrM19yaW5nX3NpemUgZWxtX3Np emU7Cj4gKwllbnVtIGszX3JpbmdfbW9kZSBtb2RlOwo+ICsJdTMyCQlmbGFnczsKPiArI2RlZmlu ZSBLM19SSU5HX0ZMQUdfQlVTWQlCSVQoMSkKPiArI2RlZmluZSBLM19SSU5HX0ZMQUdfU0hBUkVE CUJJVCgyKQo+ICsJdTMyCQlmcmVlOwo+ICsJdTMyCQlvY2M7Cj4gKwl1MzIJCXdpbmRleDsKPiAr CXUzMgkJcmluZGV4Owo+ICsJdTMyCQlyaW5nX2lkOwo+ICsJc3RydWN0IGszX3JpbmdhY2MJKnBh cmVudDsKPiArCXUzMgkJdXNlX2NvdW50Owo+ICsJaW50CQlwcm94eV9pZDsKPiArfTsKPiArCj4g Ky8qKgo+ICsgKiBzdHJ1Y3QgazNfcmluZ2FjYyAtIFJpbmdzIGFjY2VsZXJhdG9yIGRlc2NyaXB0 b3IKPiArICoKPiArICogQGRldjogcG9pbnRlciBvbiBSQSBkZXZpY2UKPiArICogQHByb3h5X2dj Zmc6IFJBIHByb3h5IGdsb2JhbCBjb25maWcgcmVnaXN0ZXJzCj4gKyAqIEBwcm94eV90YXJnZXRf YmFzZTogUkEgcHJveHkgZGF0YXBhdGggcmVnaW9uCj4gKyAqIEBudW1fcmluZ3M6IG51bWJlciBv ZiByaW5nIGluIFJBCj4gKyAqIEByaW5nc19pbnVzZTogYml0ZmllbGQgZm9yIHJpbmcgdXNhZ2Ug dHJhY2tpbmcKPiArICogQHJtX2dwX3JhbmdlOiBnZW5lcmFsIHB1cnBvc2UgcmluZ3MgcmFuZ2Ug ZnJvbSB0aXNjaQo+ICsgKiBAZG1hX3JpbmdfcmVzZXRfcXVpcms6IERNQSByZXNldCB3L2EgZW5h YmxlCj4gKyAqIEBudW1fcHJveGllczogbnVtYmVyIG9mIFJBIHByb3hpZXMKPiArICogQHByb3h5 X2ludXNlOiBiaXRmaWVsZCBmb3IgcHJveHkgdXNhZ2UgdHJhY2tpbmcKPiArICogQHJpbmdzOiBh cnJheSBvZiByaW5ncyBkZXNjcmlwdG9ycyAoc3RydWN0IEBrM19yaW5nKQo+ICsgKiBAbGlzdDog bGlzdCBvZiBSQXMgaW4gdGhlIHN5c3RlbQo+ICsgKiBAcmVxX2xvY2s6IHByb3RlY3QgcmluZ3Mg YWxsb2NhdGlvbgo+ICsgKiBAdGlzY2k6IHBvaW50ZXIgdGktc2NpIGhhbmRsZQo+ICsgKiBAdGlz Y2lfcmluZ19vcHM6IHRpLXNjaSByaW5ncyBvcHMKPiArICogQHRpc2NpX2Rldl9pZDogdGktc2Np IGRldmljZSBpZAo+ICsgKi8KPiArc3RydWN0IGszX3JpbmdhY2Mgewo+ICsJc3RydWN0IGRldmlj ZSAqZGV2Owo+ICsJc3RydWN0IGszX3JpbmdhY2NfcHJveHlfZ2NmZ19yZWdzIF9faW9tZW0gKnBy b3h5X2djZmc7Cj4gKwl2b2lkIF9faW9tZW0gKnByb3h5X3RhcmdldF9iYXNlOwo+ICsJdTMyIG51 bV9yaW5nczsgLyogbnVtYmVyIG9mIHJpbmdzIGluIFJpbmdhY2MgbW9kdWxlICovCj4gKwl1bnNp Z25lZCBsb25nICpyaW5nc19pbnVzZTsKPiArCXN0cnVjdCB0aV9zY2lfcmVzb3VyY2UgKnJtX2dw X3JhbmdlOwo+ICsKPiArCWJvb2wgZG1hX3JpbmdfcmVzZXRfcXVpcms7Cj4gKwl1MzIgbnVtX3By b3hpZXM7Cj4gKwl1bnNpZ25lZCBsb25nICpwcm94eV9pbnVzZTsKPiArCj4gKwlzdHJ1Y3QgazNf cmluZyAqcmluZ3M7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4gKwlzdHJ1Y3QgbXV0ZXgg cmVxX2xvY2s7IC8qIHByb3RlY3QgcmluZ3MgYWxsb2NhdGlvbiAqLwo+ICsKPiArCWNvbnN0IHN0 cnVjdCB0aV9zY2lfaGFuZGxlICp0aXNjaTsKPiArCWNvbnN0IHN0cnVjdCB0aV9zY2lfcm1fcmlu Z2FjY19vcHMgKnRpc2NpX3Jpbmdfb3BzOwo+ICsJdTMyIHRpc2NpX2Rldl9pZDsKPiArfTsKPiAr Cj4gK3N0YXRpYyBsb25nIGszX3JpbmdhY2NfcmluZ19nZXRfZmlmb19wb3Moc3RydWN0IGszX3Jp bmcgKnJpbmcpCj4gK3sKPiArCXJldHVybiBLM19SSU5HQUNDX0ZJRk9fV0lORE9XX1NJWkVfQllU RVMgLQo+ICsJICAgICAgICg0IDw8IHJpbmctPmVsbV9zaXplKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgKmszX3JpbmdhY2NfZ2V0X2VsbV9hZGRyKHN0cnVjdCBrM19yaW5nICpyaW5nLCB1MzIg aWR4KQo+ICt7Cj4gKwlyZXR1cm4gKHJpbmctPnJpbmdfbWVtX3ZpcnQgKyBpZHggKiAoNCA8PCBy aW5nLT5lbG1fc2l6ZSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19w dXNoX21lbShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7Cj4gK3N0YXRpYyBpbnQg azNfcmluZ2FjY19yaW5nX3BvcF9tZW0oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0p Owo+ICsKPiArc3RhdGljIHN0cnVjdCBrM19yaW5nX29wcyBrM19yaW5nX21vZGVfcmluZ19vcHMg PSB7Cj4gKwkJLnB1c2hfdGFpbCA9IGszX3JpbmdhY2NfcmluZ19wdXNoX21lbSwKPiArCQkucG9w X2hlYWQgPSBrM19yaW5nYWNjX3JpbmdfcG9wX21lbSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQg azNfcmluZ2FjY19yaW5nX3B1c2hfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0p Owo+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfaW8oc3RydWN0IGszX3JpbmcgKnJp bmcsIHZvaWQgKmVsZW0pOwo+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWRf aW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOwo+ICtzdGF0aWMgaW50IGszX3Jp bmdhY2NfcmluZ19wb3BfdGFpbF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7 Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGszX3Jpbmdfb3BzIGszX3JpbmdfbW9kZV9tc2dfb3BzID0g ewo+ICsJCS5wdXNoX3RhaWwgPSBrM19yaW5nYWNjX3JpbmdfcHVzaF9pbywKPiArCQkucHVzaF9o ZWFkID0gazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9pbywKPiArCQkucG9wX3RhaWwgPSBrM19y aW5nYWNjX3JpbmdfcG9wX3RhaWxfaW8sCj4gKwkJLnBvcF9oZWFkID0gazNfcmluZ2FjY19yaW5n X3BvcF9pbywKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVh ZF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7Cj4gK3N0YXRpYyBpbnQg azNfcmluZ2FjY19yaW5nX3B1c2hfdGFpbF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9p ZCAqZWxlbSk7Cj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF9oZWFkX3Byb3h5KHN0 cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKPiArc3RhdGljIGludCBrM19yaW5nYWNj X3JpbmdfcG9wX3RhaWxfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOwo+ ICsKPiArc3RhdGljIHN0cnVjdCBrM19yaW5nX29wcyBrM19yaW5nX21vZGVfcHJveHlfb3BzID0g ewo+ICsJCS5wdXNoX3RhaWwgPSBrM19yaW5nYWNjX3JpbmdfcHVzaF90YWlsX3Byb3h5LAo+ICsJ CS5wdXNoX2hlYWQgPSBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkX3Byb3h5LAo+ICsJCS5wb3Bf dGFpbCA9IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9wcm94eSwKPiArCQkucG9wX2hlYWQgPSBr M19yaW5nYWNjX3JpbmdfcG9wX2hlYWRfcHJveHksCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBr M19yaW5nYWNjX3JpbmdfZHVtcChzdHJ1Y3QgazNfcmluZyAqcmluZykKPiArewo+ICsJc3RydWN0 IGRldmljZSAqZGV2ID0gcmluZy0+cGFyZW50LT5kZXY7Cj4gKwo+ICsJZGV2X2RiZyhkZXYsICJk dW1wIHJpbmc6ICVkXG4iLCByaW5nLT5yaW5nX2lkKTsKPiArCWRldl9kYmcoZGV2LCAiZHVtcCBt ZW0gdmlydCAlcCwgZG1hICVwYWRcbiIsIHJpbmctPnJpbmdfbWVtX3ZpcnQsCj4gKwkJJnJpbmct PnJpbmdfbWVtX2RtYSk7Cj4gKwlkZXZfZGJnKGRldiwgImR1bXAgZWxtc2l6ZSAlZCwgc2l6ZSAl ZCwgbW9kZSAlZCwgcHJveHlfaWQgJWRcbiIsCj4gKwkJcmluZy0+ZWxtX3NpemUsIHJpbmctPnNp emUsIHJpbmctPm1vZGUsIHJpbmctPnByb3h5X2lkKTsKPiArCj4gKwlkZXZfZGJnKGRldiwgImR1 bXAgcmluZ19ydF9yZWdzOiBkYiUwOHhcbiIsIHJlYWRsKCZyaW5nLT5ydC0+ZGIpKTsKPiArCWRl dl9kYmcoZGV2LCAiZHVtcCBvY2MlMDh4XG4iLCByZWFkbCgmcmluZy0+cnQtPm9jYykpOwo+ICsJ ZGV2X2RiZyhkZXYsICJkdW1wIGluZHglMDh4XG4iLCByZWFkbCgmcmluZy0+cnQtPmluZHgpKTsK PiArCWRldl9kYmcoZGV2LCAiZHVtcCBod29jYyUwOHhcbiIsIHJlYWRsKCZyaW5nLT5ydC0+aHdv Y2MpKTsKPiArCWRldl9kYmcoZGV2LCAiZHVtcCBod2luZHglMDh4XG4iLCByZWFkbCgmcmluZy0+ cnQtPmh3aW5keCkpOwo+ICsKPiArCWlmIChyaW5nLT5yaW5nX21lbV92aXJ0KQo+ICsJCXByaW50 X2hleF9kdW1wX2RlYnVnKCJkdW1wIHJpbmdfbWVtX3ZpcnQgIiwgRFVNUF9QUkVGSVhfTk9ORSwK PiArCQkJCSAgICAgMTYsIDEsIHJpbmctPnJpbmdfbWVtX3ZpcnQsIDE2ICogOCwgZmFsc2UpOwo+ ICt9Cj4gKwo+ICtzdHJ1Y3QgazNfcmluZyAqazNfcmluZ2FjY19yZXF1ZXN0X3Jpbmcoc3RydWN0 IGszX3JpbmdhY2MgKnJpbmdhY2MsCj4gKwkJCQkJaW50IGlkLCB1MzIgZmxhZ3MpCj4gK3sKPiAr CWludCBwcm94eV9pZCA9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQ7Cj4gKwo+ICsJbXV0ZXhf bG9jaygmcmluZ2FjYy0+cmVxX2xvY2spOwo+ICsKPiArCWlmIChpZCA9PSBLM19SSU5HQUNDX1JJ TkdfSURfQU5ZKSB7Cj4gKwkJLyogUmVxdWVzdCBmb3IgYW55IGdlbmVyYWwgcHVycG9zZSByaW5n ICovCj4gKwkJc3RydWN0IHRpX3NjaV9yZXNvdXJjZV9kZXNjICpncF9yaW5ncyA9Cj4gKwkJCQkJ CSZyaW5nYWNjLT5ybV9ncF9yYW5nZS0+ZGVzY1swXTsKPiArCQl1bnNpZ25lZCBsb25nIHNpemU7 Cj4gKwo+ICsJCXNpemUgPSBncF9yaW5ncy0+c3RhcnQgKyBncF9yaW5ncy0+bnVtOwo+ICsJCWlk ID0gZmluZF9uZXh0X3plcm9fYml0KHJpbmdhY2MtPnJpbmdzX2ludXNlLCBzaXplLAo+ICsJCQkJ CWdwX3JpbmdzLT5zdGFydCk7Cj4gKwkJaWYgKGlkID09IHNpemUpCj4gKwkJCWdvdG8gZXJyb3I7 Cj4gKwl9IGVsc2UgaWYgKGlkIDwgMCkgewo+ICsJCWdvdG8gZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJ aWYgKHRlc3RfYml0KGlkLCByaW5nYWNjLT5yaW5nc19pbnVzZSkgJiYKPiArCSAgICAhKHJpbmdh Y2MtPnJpbmdzW2lkXS5mbGFncyAmIEszX1JJTkdfRkxBR19TSEFSRUQpKQo+ICsJCWdvdG8gZXJy b3I7Cj4gKwllbHNlIGlmIChyaW5nYWNjLT5yaW5nc1tpZF0uZmxhZ3MgJiBLM19SSU5HX0ZMQUdf U0hBUkVEKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCWlmIChmbGFncyAmIEszX1JJTkdBQ0NfUklO R19VU0VfUFJPWFkpIHsKPiArCQlwcm94eV9pZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChyaW5nYWNj LT5wcm94eV9pbnVzZSwKPiArCQkJCQkgICAgICByaW5nYWNjLT5udW1fcHJveGllcywgMCk7Cj4g KwkJaWYgKHByb3h5X2lkID09IHJpbmdhY2MtPm51bV9wcm94aWVzKQo+ICsJCQlnb3RvIGVycm9y Owo+ICsJfQo+ICsKPiArCWlmIChwcm94eV9pZCAhPSBLM19SSU5HQUNDX1BST1hZX05PVF9VU0VE KSB7Cj4gKwkJc2V0X2JpdChwcm94eV9pZCwgcmluZ2FjYy0+cHJveHlfaW51c2UpOwo+ICsJCXJp bmdhY2MtPnJpbmdzW2lkXS5wcm94eV9pZCA9IHByb3h5X2lkOwo+ICsJCWRldl9kYmcocmluZ2Fj Yy0+ZGV2LCAiR2l2aW5nIHJpbmcjJWQgcHJveHkjJWRcbiIsIGlkLAo+ICsJCQlwcm94eV9pZCk7 Cj4gKwl9IGVsc2Ugewo+ICsJCWRldl9kYmcocmluZ2FjYy0+ZGV2LCAiR2l2aW5nIHJpbmcjJWRc biIsIGlkKTsKPiArCX0KPiArCj4gKwlzZXRfYml0KGlkLCByaW5nYWNjLT5yaW5nc19pbnVzZSk7 Cj4gK291dDoKPiArCXJpbmdhY2MtPnJpbmdzW2lkXS51c2VfY291bnQrKzsKPiArCW11dGV4X3Vu bG9jaygmcmluZ2FjYy0+cmVxX2xvY2spOwo+ICsJcmV0dXJuICZyaW5nYWNjLT5yaW5nc1tpZF07 Cj4gKwo+ICtlcnJvcjoKPiArCW11dGV4X3VubG9jaygmcmluZ2FjYy0+cmVxX2xvY2spOwo+ICsJ cmV0dXJuIE5VTEw7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yZXF1ZXN0 X3JpbmcpOwo+ICsKPiArc3RhdGljIHZvaWQgazNfcmluZ2FjY19yaW5nX3Jlc2V0X3NjaShzdHJ1 Y3QgazNfcmluZyAqcmluZykKPiArewo+ICsJc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MgPSBy aW5nLT5wYXJlbnQ7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHJpbmdhY2MtPnRpc2NpX3Jp bmdfb3BzLT5jb25maWcoCj4gKwkJCXJpbmdhY2MtPnRpc2NpLAo+ICsJCQlUSV9TQ0lfTVNHX1ZB TFVFX1JNX1JJTkdfQ09VTlRfVkFMSUQsCj4gKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKPiAr CQkJcmluZy0+cmluZ19pZCwKPiArCQkJMCwKPiArCQkJMCwKPiArCQkJcmluZy0+c2l6ZSwKPiAr CQkJMCwKPiArCQkJMCwKPiArCQkJMCk7Cj4gKwlpZiAocmV0KQo+ICsJCWRldl9lcnIocmluZ2Fj Yy0+ZGV2LCAiVElTQ0kgcmVzZXQgcmluZyBmYWlsICglZCkgcmluZ19pZHggJWRcbiIsCj4gKwkJ CXJldCwgcmluZy0+cmluZ19pZCk7Cj4gK30KPiArCj4gK3ZvaWQgazNfcmluZ2FjY19yaW5nX3Jl c2V0KHN0cnVjdCBrM19yaW5nICpyaW5nKQo+ICt7Cj4gKwlpZiAoIXJpbmcgfHwgIShyaW5nLT5m bGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJcmluZy0+b2Nj ID0gMDsKPiArCXJpbmctPmZyZWUgPSAwOwo+ICsJcmluZy0+cmluZGV4ID0gMDsKPiArCXJpbmct PndpbmRleCA9IDA7Cj4gKwo+ICsJazNfcmluZ2FjY19yaW5nX3Jlc2V0X3NjaShyaW5nKTsKPiAr fQo+ICtFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfcmVzZXQpOwo+ICsKPiArc3Rh dGljIHZvaWQgazNfcmluZ2FjY19yaW5nX3JlY29uZmlnX3Ftb2RlX3NjaShzdHJ1Y3QgazNfcmlu ZyAqcmluZywKPiArCQkJCQkgICAgICAgZW51bSBrM19yaW5nX21vZGUgbW9kZSkKPiArewo+ICsJ c3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCXJldCA9IHJpbmdhY2MtPnRpc2NpX3Jpbmdfb3BzLT5jb25maWcoCj4gKwkJCXJpbmdh Y2MtPnRpc2NpLAo+ICsJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX1JJTkdfTU9ERV9WQUxJRCwKPiAr CQkJcmluZ2FjYy0+dGlzY2lfZGV2X2lkLAo+ICsJCQlyaW5nLT5yaW5nX2lkLAo+ICsJCQkwLAo+ ICsJCQkwLAo+ICsJCQkwLAo+ICsJCQltb2RlLAo+ICsJCQkwLAo+ICsJCQkwKTsKPiArCWlmIChy ZXQpCj4gKwkJZGV2X2VycihyaW5nYWNjLT5kZXYsICJUSVNDSSByZWNvbmYgcW1vZGUgZmFpbCAo JWQpIHJpbmdfaWR4ICVkXG4iLAo+ICsJCQlyZXQsIHJpbmctPnJpbmdfaWQpOwo+ICt9Cj4gKwo+ ICt2b2lkIGszX3JpbmdhY2NfcmluZ19yZXNldF9kbWEoc3RydWN0IGszX3JpbmcgKnJpbmcsIHUz MiBvY2MpCj4gK3sKPiArCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFH X0JVU1kpKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoIXJpbmctPnBhcmVudC0+ZG1hX3Jpbmdf cmVzZXRfcXVpcmspCj4gKwkJZ290byByZXNldDsKPiArCj4gKwlpZiAoIW9jYykKPiArCQlvY2Mg PSByZWFkbCgmcmluZy0+cnQtPm9jYyk7Cj4gKwo+ICsJaWYgKG9jYykgewo+ICsJCXUzMiBkYl9y aW5nX2NudCwgZGJfcmluZ19jbnRfY3VyOwo+ICsKPiArCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ ZGV2LCAiJXMgJXUgb2NjOiAldVxuIiwgX19mdW5jX18sCj4gKwkJCXJpbmctPnJpbmdfaWQsIG9j Yyk7Cj4gKwkJLyogVEktU0NJIHJpbmcgcmVzZXQgKi8KPiArCQlrM19yaW5nYWNjX3JpbmdfcmVz ZXRfc2NpKHJpbmcpOwo+ICsKPiArCQkvKgo+ICsJCSAqIFNldHVwIHRoZSByaW5nIGluIHJpbmcv ZG9vcmJlbGwgbW9kZSAoaWYgbm90IGFscmVhZHkgaW4gdGhpcwo+ICsJCSAqIG1vZGUpCj4gKwkJ ICovCj4gKwkJaWYgKHJpbmctPm1vZGUgIT0gSzNfUklOR0FDQ19SSU5HX01PREVfUklORykKPiAr CQkJazNfcmluZ2FjY19yaW5nX3JlY29uZmlnX3Ftb2RlX3NjaSgKPiArCQkJCQlyaW5nLCBLM19S SU5HQUNDX1JJTkdfTU9ERV9SSU5HKTsKPiArCQkvKgo+ICsJCSAqIFJpbmcgdGhlIGRvb3JiZWxs IDIqKjIyIOKAkyByaW5nT2NjIHRpbWVzLgo+ICsJCSAqIFRoaXMgd2lsbCB3cmFwIHRoZSBpbnRl cm5hbCBVRE1BUCByaW5nIHN0YXRlIG9jY3VwYW5jeQo+ICsJCSAqIGNvdW50ZXIgKHdoaWNoIGlz IDIxLWJpdHMgd2lkZSkgdG8gMC4KPiArCQkgKi8KPiArCQlkYl9yaW5nX2NudCA9ICgxVSA8PCAy MikgLSBvY2M7Cj4gKwo+ICsJCXdoaWxlIChkYl9yaW5nX2NudCAhPSAwKSB7Cj4gKwkJCS8qCj4g KwkJCSAqIFJpbmcgdGhlIGRvb3JiZWxsIHdpdGggdGhlIG1heGltdW0gY291bnQgZWFjaAo+ICsJ CQkgKiBpdGVyYXRpb24gaWYgcG9zc2libGUgdG8gbWluaW1pemUgdGhlIHRvdGFsCj4gKwkJCSAq IG9mIHdyaXRlcwo+ICsJCQkgKi8KPiArCQkJaWYgKGRiX3JpbmdfY250ID4gSzNfUklOR0FDQ19N QVhfREJfUklOR19DTlQpCj4gKwkJCQlkYl9yaW5nX2NudF9jdXIgPSBLM19SSU5HQUNDX01BWF9E Ql9SSU5HX0NOVDsKPiArCQkJZWxzZQo+ICsJCQkJZGJfcmluZ19jbnRfY3VyID0gZGJfcmluZ19j bnQ7Cj4gKwo+ICsJCQl3cml0ZWwoZGJfcmluZ19jbnRfY3VyLCAmcmluZy0+cnQtPmRiKTsKPiAr CQkJZGJfcmluZ19jbnQgLT0gZGJfcmluZ19jbnRfY3VyOwo+ICsJCX0KPiArCj4gKwkJLyogUmVz dG9yZSB0aGUgb3JpZ2luYWwgcmluZyBtb2RlIChpZiBub3QgcmluZyBtb2RlKSAqLwo+ICsJCWlm IChyaW5nLT5tb2RlICE9IEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcpCj4gKwkJCWszX3Jpbmdh Y2NfcmluZ19yZWNvbmZpZ19xbW9kZV9zY2kocmluZywgcmluZy0+bW9kZSk7Cj4gKwl9Cj4gKwo+ ICtyZXNldDoKPiArCS8qIFJlc2V0IHRoZSByaW5nICovCj4gKwlrM19yaW5nYWNjX3JpbmdfcmVz ZXQocmluZyk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX3Jlc2V0 X2RtYSk7Cj4gKwo+ICtzdGF0aWMgdm9pZCBrM19yaW5nYWNjX3JpbmdfZnJlZV9zY2koc3RydWN0 IGszX3JpbmcgKnJpbmcpCj4gK3sKPiArCXN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjID0gcmlu Zy0+cGFyZW50Owo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSByaW5nYWNjLT50aXNjaV9yaW5n X29wcy0+Y29uZmlnKAo+ICsJCQlyaW5nYWNjLT50aXNjaSwKPiArCQkJVElfU0NJX01TR19WQUxV RV9STV9BTExfTk9fT1JERVIsCj4gKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKPiArCQkJcmlu Zy0+cmluZ19pZCwKPiArCQkJMCwKPiArCQkJMCwKPiArCQkJMCwKPiArCQkJMCwKPiArCQkJMCwK PiArCQkJMCk7Cj4gKwlpZiAocmV0KQo+ICsJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kg cmluZyBmcmVlIGZhaWwgKCVkKSByaW5nX2lkeCAlZFxuIiwKPiArCQkJcmV0LCByaW5nLT5yaW5n X2lkKTsKPiArfQo+ICsKPiAraW50IGszX3JpbmdhY2NfcmluZ19mcmVlKHN0cnVjdCBrM19yaW5n ICpyaW5nKQo+ICt7Cj4gKwlzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYzsKPiArCj4gKwlpZiAo IXJpbmcpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcmluZ2FjYyA9IHJpbmctPnBhcmVu dDsKPiArCj4gKwlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAiZmxhZ3M6IDB4JTA4eFxuIiwg cmluZy0+ZmxhZ3MpOwo+ICsKPiArCWlmICghdGVzdF9iaXQocmluZy0+cmluZ19pZCwgcmluZ2Fj Yy0+cmluZ3NfaW51c2UpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCW11dGV4X2xvY2so JnJpbmdhY2MtPnJlcV9sb2NrKTsKPiArCj4gKwlpZiAoLS1yaW5nLT51c2VfY291bnQpCj4gKwkJ Z290byBvdXQ7Cj4gKwo+ICsJaWYgKCEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkp Cj4gKwkJZ290byBub19pbml0Owo+ICsKPiArCWszX3JpbmdhY2NfcmluZ19mcmVlX3NjaShyaW5n KTsKPiArCj4gKwlkbWFfZnJlZV9jb2hlcmVudChyaW5nYWNjLT5kZXYsCj4gKwkJCSAgcmluZy0+ c2l6ZSAqICg0IDw8IHJpbmctPmVsbV9zaXplKSwKPiArCQkJICByaW5nLT5yaW5nX21lbV92aXJ0 LCByaW5nLT5yaW5nX21lbV9kbWEpOwo+ICsJcmluZy0+ZmxhZ3MgPSAwOwo+ICsJcmluZy0+b3Bz ID0gTlVMTDsKPiArCWlmIChyaW5nLT5wcm94eV9pZCAhPSBLM19SSU5HQUNDX1BST1hZX05PVF9V U0VEKSB7Cj4gKwkJY2xlYXJfYml0KHJpbmctPnByb3h5X2lkLCByaW5nYWNjLT5wcm94eV9pbnVz ZSk7Cj4gKwkJcmluZy0+cHJveHkgPSBOVUxMOwo+ICsJCXJpbmctPnByb3h5X2lkID0gSzNfUklO R0FDQ19QUk9YWV9OT1RfVVNFRDsKPiArCX0KPiArCj4gK25vX2luaXQ6Cj4gKwljbGVhcl9iaXQo cmluZy0+cmluZ19pZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpOwo+ICsKPiArb3V0Ogo+ICsJbXV0 ZXhfdW5sb2NrKCZyaW5nYWNjLT5yZXFfbG9jayk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICtFWFBP UlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZnJlZSk7Cj4gKwo+ICt1MzIgazNfcmluZ2Fj Y19nZXRfcmluZ19pZChzdHJ1Y3QgazNfcmluZyAqcmluZykKPiArewo+ICsJaWYgKCFyaW5nKQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXJldHVybiByaW5nLT5yaW5nX2lkOwo+ICt9Cj4g K0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfZ2V0X3JpbmdfaWQpOwo+ICsKPiArdTMyIGsz X3JpbmdhY2NfZ2V0X3Rpc2NpX2Rldl9pZChzdHJ1Y3QgazNfcmluZyAqcmluZykKPiArewo+ICsJ aWYgKCFyaW5nKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXJldHVybiByaW5nLT5wYXJl bnQtPnRpc2NpX2Rldl9pZDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX2dl dF90aXNjaV9kZXZfaWQpOwo+ICsKPiAraW50IGszX3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bShz dHJ1Y3QgazNfcmluZyAqcmluZykKPiArewo+ICsJaW50IGlycV9udW07Cj4gKwo+ICsJaWYgKCFy aW5nKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlycV9udW0gPSB0aV9zY2lfaW50YV9t c2lfZ2V0X3ZpcnEocmluZy0+cGFyZW50LT5kZXYsIHJpbmctPnJpbmdfaWQpOwo+ICsJaWYgKGly cV9udW0gPD0gMCkKPiArCQlpcnFfbnVtID0gLUVJTlZBTDsKPiArCXJldHVybiBpcnFfbnVtOwo+ ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bSk7Cj4g Kwo+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19jZmdfc2NpKHN0cnVjdCBrM19yaW5nICpy aW5nKQo+ICt7Cj4gKwlzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYyA9IHJpbmctPnBhcmVudDsK PiArCXUzMiByaW5nX2lkeDsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKCFyaW5nYWNjLT50aXNj aSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlyaW5nX2lkeCA9IHJpbmctPnJpbmdfaWQ7 Cj4gKwlyZXQgPSByaW5nYWNjLT50aXNjaV9yaW5nX29wcy0+Y29uZmlnKAo+ICsJCQlyaW5nYWNj LT50aXNjaSwKPiArCQkJVElfU0NJX01TR19WQUxVRV9STV9BTExfTk9fT1JERVIsCj4gKwkJCXJp bmdhY2MtPnRpc2NpX2Rldl9pZCwKPiArCQkJcmluZ19pZHgsCj4gKwkJCWxvd2VyXzMyX2JpdHMo cmluZy0+cmluZ19tZW1fZG1hKSwKPiArCQkJdXBwZXJfMzJfYml0cyhyaW5nLT5yaW5nX21lbV9k bWEpLAo+ICsJCQlyaW5nLT5zaXplLAo+ICsJCQlyaW5nLT5tb2RlLAo+ICsJCQlyaW5nLT5lbG1f c2l6ZSwKPiArCQkJMCk7Cj4gKwlpZiAocmV0KQo+ICsJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAi VElTQ0kgY29uZmlnIHJpbmcgZmFpbCAoJWQpIHJpbmdfaWR4ICVkXG4iLAo+ICsJCQlyZXQsIHJp bmdfaWR4KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgazNfcmluZ2FjY19y aW5nX2NmZyhzdHJ1Y3QgazNfcmluZyAqcmluZywgc3RydWN0IGszX3JpbmdfY2ZnICpjZmcpCj4g K3sKPiArCXN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50Owo+ICsJaW50 IHJldCA9IDA7Cj4gKwo+ICsJaWYgKCFyaW5nIHx8ICFjZmcpCj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4gKwlpZiAoY2ZnLT5lbG1fc2l6ZSA+IEszX1JJTkdBQ0NfUklOR19FTFNJWkVfMjU2IHx8Cj4g KwkgICAgY2ZnLT5tb2RlID49IEszX1JJTkdBQ0NfUklOR19NT0RFX0lOVkFMSUQgfHwKPiArCSAg ICBjZmctPnNpemUgJiB+SzNfUklOR0FDQ19DRkdfUklOR19TSVpFX0VMQ05UX01BU0sgfHwKPiAr CSAgICAhdGVzdF9iaXQocmluZy0+cmluZ19pZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpKQo+ICsJ CXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmIChjZmctPm1vZGUgPT0gSzNfUklOR0FDQ19SSU5H X01PREVfTUVTU0FHRSAmJgo+ICsJICAgIHJpbmctPnByb3h5X2lkID09IEszX1JJTkdBQ0NfUFJP WFlfTk9UX1VTRUQgJiYKPiArCSAgICBjZmctPmVsbV9zaXplID4gSzNfUklOR0FDQ19SSU5HX0VM U0laRV84KSB7Cj4gKwkJZGV2X2VycihyaW5nYWNjLT5kZXYsCj4gKwkJCSJNZXNzYWdlIG1vZGUg bXVzdCB1c2UgcHJveHkgZm9yICV1IGVsZW1lbnQgc2l6ZVxuIiwKPiArCQkJNCA8PCByaW5nLT5l bG1fc2l6ZSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIElu IGNhc2Ugb2Ygc2hhcmVkIHJpbmcgb25seSB0aGUgZmlyc3QgdXNlciAobWFzdGVyIHVzZXIpIGNh bgo+ICsJICogY29uZmlndXJlIHRoZSByaW5nLiBUaGUgc2VxdWVuY2Ugc2hvdWxkIGJlIGJ5IHRo ZSBjbGllbnQ6Cj4gKwkgKiByaW5nID0gazNfcmluZ2FjY19yZXF1ZXN0X3JpbmcocmluZ2FjYywg cmluZ19pZCwgMCk7ICMgbWFzdGVyIHVzZXIKPiArCSAqIGszX3JpbmdhY2NfcmluZ19jZmcocmlu ZywgY2ZnKTsgIyBtYXN0ZXIgY29uZmlndXJhdGlvbgo+ICsJICogazNfcmluZ2FjY19yZXF1ZXN0 X3JpbmcocmluZ2FjYywgcmluZ19pZCwgSzNfUklOR19GTEFHX1NIQVJFRCk7Cj4gKwkgKiBrM19y aW5nYWNjX3JlcXVlc3RfcmluZyhyaW5nYWNjLCByaW5nX2lkLCBLM19SSU5HX0ZMQUdfU0hBUkVE KTsKPiArCSAqLwo+ICsJaWYgKHJpbmctPnVzZV9jb3VudCAhPSAxKQo+ICsJCXJldHVybiAwOwo+ ICsKPiArCXJpbmctPnNpemUgPSBjZmctPnNpemU7Cj4gKwlyaW5nLT5lbG1fc2l6ZSA9IGNmZy0+ ZWxtX3NpemU7Cj4gKwlyaW5nLT5tb2RlID0gY2ZnLT5tb2RlOwo+ICsJcmluZy0+b2NjID0gMDsK PiArCXJpbmctPmZyZWUgPSAwOwo+ICsJcmluZy0+cmluZGV4ID0gMDsKPiArCXJpbmctPndpbmRl eCA9IDA7Cj4gKwo+ICsJaWYgKHJpbmctPnByb3h5X2lkICE9IEszX1JJTkdBQ0NfUFJPWFlfTk9U X1VTRUQpCj4gKwkJcmluZy0+cHJveHkgPSByaW5nYWNjLT5wcm94eV90YXJnZXRfYmFzZSArCj4g KwkJCSAgICAgIHJpbmctPnByb3h5X2lkICogSzNfUklOR0FDQ19QUk9YWV9UQVJHRVRfU1RFUDsK PiArCj4gKwlzd2l0Y2ggKHJpbmctPm1vZGUpIHsKPiArCWNhc2UgSzNfUklOR0FDQ19SSU5HX01P REVfUklORzoKPiArCQlyaW5nLT5vcHMgPSAmazNfcmluZ19tb2RlX3Jpbmdfb3BzOwo+ICsJCWJy ZWFrOwo+ICsJY2FzZSBLM19SSU5HQUNDX1JJTkdfTU9ERV9NRVNTQUdFOgo+ICsJCWlmIChyaW5n LT5wcm94eSkKPiArCQkJcmluZy0+b3BzID0gJmszX3JpbmdfbW9kZV9wcm94eV9vcHM7Cj4gKwkJ ZWxzZQo+ICsJCQlyaW5nLT5vcHMgPSAmazNfcmluZ19tb2RlX21zZ19vcHM7Cj4gKwkJYnJlYWs7 Cj4gKwlkZWZhdWx0Ogo+ICsJCXJpbmctPm9wcyA9IE5VTEw7Cj4gKwkJcmV0ID0gLUVJTlZBTDsK PiArCQlnb3RvIGVycl9mcmVlX3Byb3h5Owo+ICsJfTsKPiArCj4gKwlyaW5nLT5yaW5nX21lbV92 aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KHJpbmdhY2MtPmRldiwKPiArCQkJCQlyaW5nLT5zaXpl ICogKDQgPDwgcmluZy0+ZWxtX3NpemUpLAo+ICsJCQkJCSZyaW5nLT5yaW5nX21lbV9kbWEsIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFyaW5nLT5yaW5nX21lbV92aXJ0KSB7Cj4gKwkJZGV2X2Vycihy aW5nYWNjLT5kZXYsICJGYWlsZWQgdG8gYWxsb2MgcmluZyBtZW1cbiIpOwo+ICsJCXJldCA9IC1F Tk9NRU07Cj4gKwkJZ290byBlcnJfZnJlZV9vcHM7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gazNfcmlu Z2FjY19yaW5nX2NmZ19zY2kocmluZyk7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9m cmVlX21lbTsKPiArCj4gKwlyaW5nLT5mbGFncyB8PSBLM19SSU5HX0ZMQUdfQlVTWTsKPiArCXJp bmctPmZsYWdzIHw9IChjZmctPmZsYWdzICYgSzNfUklOR0FDQ19SSU5HX1NIQVJFRCkgPwo+ICsJ CQlLM19SSU5HX0ZMQUdfU0hBUkVEIDogMDsKPiArCj4gKwlrM19yaW5nYWNjX3JpbmdfZHVtcChy aW5nKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9mcmVlX21lbToKPiArCWRtYV9mcmVl X2NvaGVyZW50KHJpbmdhY2MtPmRldiwKPiArCQkJICByaW5nLT5zaXplICogKDQgPDwgcmluZy0+ ZWxtX3NpemUpLAo+ICsJCQkgIHJpbmctPnJpbmdfbWVtX3ZpcnQsCj4gKwkJCSAgcmluZy0+cmlu Z19tZW1fZG1hKTsKPiArZXJyX2ZyZWVfb3BzOgo+ICsJcmluZy0+b3BzID0gTlVMTDsKPiArZXJy X2ZyZWVfcHJveHk6Cj4gKwlyaW5nLT5wcm94eSA9IE5VTEw7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9 Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19jZmcpOwo+ICsKPiArdTMyIGsz X3JpbmdhY2NfcmluZ19nZXRfc2l6ZShzdHJ1Y3QgazNfcmluZyAqcmluZykKPiArewo+ICsJaWYg KCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gKwo+ICsJcmV0dXJuIHJpbmctPnNpemU7Cj4gK30KPiArRVhQT1JUX1NZTUJP TF9HUEwoazNfcmluZ2FjY19yaW5nX2dldF9zaXplKTsKPiArCj4gK3UzMiBrM19yaW5nYWNjX3Jp bmdfZ2V0X2ZyZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpCj4gK3sKPiArCWlmICghcmluZyB8fCAh KHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsKPiArCWlmICghcmluZy0+ZnJlZSkKPiArCQlyaW5nLT5mcmVlID0gcmluZy0+c2l6ZSAtIHJl YWRsKCZyaW5nLT5ydC0+b2NjKTsKPiArCj4gKwlyZXR1cm4gcmluZy0+ZnJlZTsKPiArfQo+ICtF WFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZ2V0X2ZyZWUpOwo+ICsKPiArdTMyIGsz X3JpbmdhY2NfcmluZ19nZXRfb2NjKHN0cnVjdCBrM19yaW5nICpyaW5nKQo+ICt7Cj4gKwlpZiAo IXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKPiArCQlyZXR1cm4g LUVJTlZBTDsKPiArCj4gKwlyZXR1cm4gcmVhZGwoJnJpbmctPnJ0LT5vY2MpOwo+ICt9Cj4gK0VY UE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19nZXRfb2NjKTsKPiArCj4gK3UzMiBrM19y aW5nYWNjX3JpbmdfaXNfZnVsbChzdHJ1Y3QgazNfcmluZyAqcmluZykKPiArewo+ICsJcmV0dXJu ICFrM19yaW5nYWNjX3JpbmdfZ2V0X2ZyZWUocmluZyk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9H UEwoazNfcmluZ2FjY19yaW5nX2lzX2Z1bGwpOwo+ICsKPiArZW51bSBrM19yaW5nYWNjX2FjY2Vz c19tb2RlIHsKPiArCUszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9IRUFELAo+ICsJSzNfUklO R0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRCwKPiArCUszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVT SF9UQUlMLAo+ICsJSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfVEFJTCwKPiArCUszX1JJTkdB Q0NfQUNDRVNTX01PREVfUEVFS19IRUFELAo+ICsJSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QRUVL X1RBSUwsCj4gK307Cj4gKwo+ICsjZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfTU9ERSh4KQkoKCh4 KSAmIDB4MykgPDwgMTYpCj4gKyNkZWZpbmUgSzNfUklOR0FDQ19QUk9YWV9FTFNJWkUoeCkJKCgo eCkgJiAweDcpIDw8IDI0KQo+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19jZmdfcHJveHko c3RydWN0IGszX3JpbmcgKnJpbmcsCj4gKwkJCQkgICAgIGVudW0gazNfcmluZ2FjY19wcm94eV9h Y2Nlc3NfbW9kZSBtb2RlKQo+ICt7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCXZhbCA9IHJpbmctPnJp bmdfaWQ7Cj4gKwl2YWwgfD0gSzNfUklOR0FDQ19QUk9YWV9NT0RFKG1vZGUpOwo+ICsJdmFsIHw9 IEszX1JJTkdBQ0NfUFJPWFlfRUxTSVpFKHJpbmctPmVsbV9zaXplKTsKPiArCXdyaXRlbCh2YWws ICZyaW5nLT5wcm94eS0+Y29udHJvbCk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGludCBrM19yaW5nYWNjX3JpbmdfYWNjZXNzX3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2 b2lkICplbGVtLAo+ICsJCQkJCWVudW0gazNfcmluZ2FjY19hY2Nlc3NfbW9kZSBhY2Nlc3NfbW9k ZSkKPiArewo+ICsJdm9pZCBfX2lvbWVtICpwdHI7Cj4gKwo+ICsJcHRyID0gKHZvaWQgX19pb21l bSAqKSZyaW5nLT5wcm94eS0+ZGF0YTsKPiArCj4gKwlzd2l0Y2ggKGFjY2Vzc19tb2RlKSB7Cj4g KwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9IRUFEOgo+ICsJY2FzZSBLM19SSU5H QUNDX0FDQ0VTU19NT0RFX1BPUF9IRUFEOgo+ICsJCWszX3JpbmdhY2NfcmluZ19jZmdfcHJveHko cmluZywgUFJPWFlfQUNDRVNTX01PREVfSEVBRCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEszX1JJ TkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMOgo+ICsJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19N T0RFX1BPUF9UQUlMOgo+ICsJCWszX3JpbmdhY2NfcmluZ19jZmdfcHJveHkocmluZywgUFJPWFlf QUNDRVNTX01PREVfVEFJTCk7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiAt RUlOVkFMOwo+ICsJfQo+ICsKPiArCXB0ciArPSBrM19yaW5nYWNjX3JpbmdfZ2V0X2ZpZm9fcG9z KHJpbmcpOwo+ICsKPiArCXN3aXRjaCAoYWNjZXNzX21vZGUpIHsKPiArCWNhc2UgSzNfUklOR0FD Q19BQ0NFU1NfTU9ERV9QT1BfSEVBRDoKPiArCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9Q T1BfVEFJTDoKPiArCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LAo+ICsJCQkicHJveHk6bWVt Y3B5X2Zyb21pbyh4KTogLS0+IHB0ciglcCksIG1vZGU6JWRcbiIsIHB0ciwKPiArCQkJYWNjZXNz X21vZGUpOwo+ICsJCW1lbWNweV9mcm9taW8oZWxlbSwgcHRyLCAoNCA8PCByaW5nLT5lbG1fc2l6 ZSkpOwo+ICsJCXJpbmctPm9jYy0tOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBLM19SSU5HQUNDX0FD Q0VTU19NT0RFX1BVU0hfVEFJTDoKPiArCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNI X0hFQUQ6Cj4gKwkJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwKPiArCQkJInByb3h5Om1lbWNw eV90b2lvKHgpOiAtLT4gcHRyKCVwKSwgbW9kZTolZFxuIiwgcHRyLAo+ICsJCQlhY2Nlc3NfbW9k ZSk7Cj4gKwkJbWVtY3B5X3RvaW8ocHRyLCBlbGVtLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOwo+ ICsJCXJpbmctPmZyZWUtLTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInByb3h5OiBm cmVlJWQgb2NjJWRcbiIsIHJpbmctPmZyZWUsCj4gKwkJcmluZy0+b2NjKTsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWRfcHJveHko c3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCj4gK3sKPiArCXJldHVybiBrM19yaW5n YWNjX3JpbmdfYWNjZXNzX3Byb3h5KHJpbmcsIGVsZW0sCj4gKwkJCQkJICAgIEszX1JJTkdBQ0Nf QUNDRVNTX01PREVfUFVTSF9IRUFEKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBrM19yaW5nYWNj X3JpbmdfcHVzaF90YWlsX3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQo+ ICt7Cj4gKwlyZXR1cm4gazNfcmluZ2FjY19yaW5nX2FjY2Vzc19wcm94eShyaW5nLCBlbGVtLAo+ ICsJCQkJCSAgICBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJTCk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF9oZWFkX3Byb3h5KHN0cnVjdCBrM19yaW5n ICpyaW5nLCB2b2lkICplbGVtKQo+ICt7Cj4gKwlyZXR1cm4gazNfcmluZ2FjY19yaW5nX2FjY2Vz c19wcm94eShyaW5nLCBlbGVtLAo+ICsJCQkJCSAgICBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BP UF9IRUFEKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWxf cHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCj4gK3sKPiArCXJldHVybiBr M19yaW5nYWNjX3JpbmdfYWNjZXNzX3Byb3h5KHJpbmcsIGVsZW0sCj4gKwkJCQkJICAgIEszX1JJ TkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGszX3Jp bmdhY2NfcmluZ19hY2Nlc3NfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0sCj4g KwkJCQkgICAgIGVudW0gazNfcmluZ2FjY19hY2Nlc3NfbW9kZSBhY2Nlc3NfbW9kZSkKPiArewo+ ICsJdm9pZCBfX2lvbWVtICpwdHI7Cj4gKwo+ICsJc3dpdGNoIChhY2Nlc3NfbW9kZSkgewo+ICsJ Y2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRDoKPiArCWNhc2UgSzNfUklOR0FD Q19BQ0NFU1NfTU9ERV9QT1BfSEVBRDoKPiArCQlwdHIgPSAodm9pZCBfX2lvbWVtICopJnJpbmct PmZpZm9zLT5oZWFkX2RhdGE7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNT X01PREVfUFVTSF9UQUlMOgo+ICsJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlM Ogo+ICsJCXB0ciA9ICh2b2lkIF9faW9tZW0gKikmcmluZy0+Zmlmb3MtPnRhaWxfZGF0YTsKPiAr CQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJ cHRyICs9IGszX3JpbmdhY2NfcmluZ19nZXRfZmlmb19wb3MocmluZyk7Cj4gKwo+ICsJc3dpdGNo IChhY2Nlc3NfbW9kZSkgewo+ICsJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9IRUFE Ogo+ICsJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlMOgo+ICsJCWRldl9kYmco cmluZy0+cGFyZW50LT5kZXYsCj4gKwkJCSJtZW1jcHlfZnJvbWlvKHgpOiAtLT4gcHRyKCVwKSwg bW9kZTolZFxuIiwgcHRyLAo+ICsJCQlhY2Nlc3NfbW9kZSk7Cj4gKwkJbWVtY3B5X2Zyb21pbyhl bGVtLCBwdHIsICg0IDw8IHJpbmctPmVsbV9zaXplKSk7Cj4gKwkJcmluZy0+b2NjLS07Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMOgo+ICsJY2Fz ZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRDoKPiArCQlkZXZfZGJnKHJpbmctPnBh cmVudC0+ZGV2LAo+ICsJCQkibWVtY3B5X3RvaW8oeCk6IC0tPiBwdHIoJXApLCBtb2RlOiVkXG4i LCBwdHIsCj4gKwkJCWFjY2Vzc19tb2RlKTsKPiArCQltZW1jcHlfdG9pbyhwdHIsIGVsZW0sICg0 IDw8IHJpbmctPmVsbV9zaXplKSk7Cj4gKwkJcmluZy0+ZnJlZS0tOwo+ICsJCWJyZWFrOwo+ICsJ ZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlkZXZfZGJnKHJpbmct PnBhcmVudC0+ZGV2LCAiZnJlZSVkIGluZGV4JWQgb2NjJWQgaW5kZXglZFxuIiwgcmluZy0+ZnJl ZSwKPiArCQlyaW5nLT53aW5kZXgsIHJpbmctPm9jYywgcmluZy0+cmluZGV4KTsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWRfaW8o c3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCj4gK3sKPiArCXJldHVybiBrM19yaW5n YWNjX3JpbmdfYWNjZXNzX2lvKHJpbmcsIGVsZW0sCj4gKwkJCQkJIEszX1JJTkdBQ0NfQUNDRVNT X01PREVfUFVTSF9IRUFEKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBrM19yaW5nYWNjX3Jpbmdf cHVzaF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKPiArewo+ICsJcmV0dXJu IGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfaW8ocmluZywgZWxlbSwKPiArCQkJCQkgSzNfUklOR0FD Q19BQ0NFU1NfTU9ERV9QVVNIX1RBSUwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGszX3Jpbmdh Y2NfcmluZ19wb3BfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCj4gK3sKPiAr CXJldHVybiBrM19yaW5nYWNjX3JpbmdfYWNjZXNzX2lvKHJpbmcsIGVsZW0sCj4gKwkJCQkJIEsz X1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGsz X3JpbmdhY2NfcmluZ19wb3BfdGFpbF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxl bSkKPiArewo+ICsJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfaW8ocmluZywgZWxlbSwK PiArCQkJCQkgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRCk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfbWVtKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2 b2lkICplbGVtKQo+ICt7Cj4gKwl2b2lkICplbGVtX3B0cjsKPiArCj4gKwllbGVtX3B0ciA9IGsz X3JpbmdhY2NfZ2V0X2VsbV9hZGRyKHJpbmcsIHJpbmctPndpbmRleCk7Cj4gKwo+ICsJbWVtY3B5 KGVsZW1fcHRyLCBlbGVtLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOwo+ICsKPiArCXJpbmctPndp bmRleCA9IChyaW5nLT53aW5kZXggKyAxKSAlIHJpbmctPnNpemU7Cj4gKwlyaW5nLT5mcmVlLS07 Cj4gKwl3cml0ZWwoMSwgJnJpbmctPnJ0LT5kYik7Cj4gKwo+ICsJZGV2X2RiZyhyaW5nLT5wYXJl bnQtPmRldiwgInJpbmdfcHVzaF9tZW06IGZyZWUlZCBpbmRleCVkXG4iLAo+ICsJCXJpbmctPmZy ZWUsIHJpbmctPndpbmRleCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgazNfcmluZ2FjY19yaW5nX3BvcF9tZW0oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVs ZW0pCj4gK3sKPiArCXZvaWQgKmVsZW1fcHRyOwo+ICsKPiArCWVsZW1fcHRyID0gazNfcmluZ2Fj Y19nZXRfZWxtX2FkZHIocmluZywgcmluZy0+cmluZGV4KTsKPiArCj4gKwltZW1jcHkoZWxlbSwg ZWxlbV9wdHIsICg0IDw8IHJpbmctPmVsbV9zaXplKSk7Cj4gKwo+ICsJcmluZy0+cmluZGV4ID0g KHJpbmctPnJpbmRleCArIDEpICUgcmluZy0+c2l6ZTsKPiArCXJpbmctPm9jYy0tOwo+ICsJd3Jp dGVsKC0xLCAmcmluZy0+cnQtPmRiKTsKPiArCj4gKwlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2 LCAicmluZ19wb3BfbWVtOiBvY2MlZCBpbmRleCVkIHBvc19wdHIlcFxuIiwKPiArCQlyaW5nLT5v Y2MsIHJpbmctPnJpbmRleCwgZWxlbV9wdHIpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2lu dCBrM19yaW5nYWNjX3JpbmdfcHVzaChzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkK PiArewo+ICsJaW50IHJldCA9IC1FT1BOT1RTVVBQOwo+ICsKPiArCWlmICghcmluZyB8fCAhKHJp bmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsK PiArCWRldl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJyaW5nX3B1c2g6IGZyZWUlZCBpbmRleCVk XG4iLCByaW5nLT5mcmVlLAo+ICsJCXJpbmctPndpbmRleCk7Cj4gKwo+ICsJaWYgKGszX3Jpbmdh Y2NfcmluZ19pc19mdWxsKHJpbmcpKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWlmIChy aW5nLT5vcHMgJiYgcmluZy0+b3BzLT5wdXNoX3RhaWwpCj4gKwkJcmV0ID0gcmluZy0+b3BzLT5w dXNoX3RhaWwocmluZywgZWxlbSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtFWFBPUlRf U1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfcHVzaCk7Cj4gKwo+ICtpbnQgazNfcmluZ2FjY19y aW5nX3B1c2hfaGVhZChzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKPiArewo+ICsJ aW50IHJldCA9IC1FT1BOT1RTVVBQOwo+ICsKPiArCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdz ICYgSzNfUklOR19GTEFHX0JVU1kpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWRldl9k YmcocmluZy0+cGFyZW50LT5kZXYsICJyaW5nX3B1c2hfaGVhZDogZnJlZSVkIGluZGV4JWRcbiIs Cj4gKwkJcmluZy0+ZnJlZSwgcmluZy0+d2luZGV4KTsKPiArCj4gKwlpZiAoazNfcmluZ2FjY19y aW5nX2lzX2Z1bGwocmluZykpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJaWYgKHJpbmct Pm9wcyAmJiByaW5nLT5vcHMtPnB1c2hfaGVhZCkKPiArCQlyZXQgPSByaW5nLT5vcHMtPnB1c2hf aGVhZChyaW5nLCBlbGVtKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1C T0xfR1BMKGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWQpOwo+ICsKPiAraW50IGszX3JpbmdhY2Nf cmluZ19wb3Aoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCj4gK3sKPiArCWludCBy ZXQgPSAtRU9QTk9UU1VQUDsKPiArCj4gKwlpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEsz X1JJTkdfRkxBR19CVVNZKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAoIXJpbmct Pm9jYykKPiArCQlyaW5nLT5vY2MgPSBrM19yaW5nYWNjX3JpbmdfZ2V0X29jYyhyaW5nKTsKPiAr Cj4gKwlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LCAicmluZ19wb3A6IG9jYyVkIGluZGV4JWRc biIsIHJpbmctPm9jYywKPiArCQlyaW5nLT5yaW5kZXgpOwo+ICsKPiArCWlmICghcmluZy0+b2Nj KQo+ICsJCXJldHVybiAtRU5PREFUQTsKPiArCj4gKwlpZiAocmluZy0+b3BzICYmIHJpbmctPm9w cy0+cG9wX2hlYWQpCj4gKwkJcmV0ID0gcmluZy0+b3BzLT5wb3BfaGVhZChyaW5nLCBlbGVtKTsK PiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2Nf cmluZ19wb3ApOwo+ICsKPiAraW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbChzdHJ1Y3QgazNf cmluZyAqcmluZywgdm9pZCAqZWxlbSkKPiArewo+ICsJaW50IHJldCA9IC1FT1BOT1RTVVBQOwo+ ICsKPiArCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmICghcmluZy0+b2NjKQo+ICsJCXJpbmctPm9j YyA9IGszX3JpbmdhY2NfcmluZ19nZXRfb2NjKHJpbmcpOwo+ICsKPiArCWRldl9kYmcocmluZy0+ cGFyZW50LT5kZXYsICJyaW5nX3BvcF90YWlsOiBvY2MlZCBpbmRleCVkXG4iLCByaW5nLT5vY2Ms Cj4gKwkJcmluZy0+cmluZGV4KTsKPiArCj4gKwlpZiAoIXJpbmctPm9jYykKPiArCQlyZXR1cm4g LUVOT0RBVEE7Cj4gKwo+ICsJaWYgKHJpbmctPm9wcyAmJiByaW5nLT5vcHMtPnBvcF90YWlsKQo+ ICsJCXJldCA9IHJpbmctPm9wcy0+cG9wX3RhaWwocmluZywgZWxlbSk7Cj4gKwo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWwp Owo+ICsKPiArc3RydWN0IGszX3JpbmdhY2MgKm9mX2szX3JpbmdhY2NfZ2V0X2J5X3BoYW5kbGUo c3RydWN0IGRldmljZV9ub2RlICpucCwKPiArCQkJCQkJY29uc3QgY2hhciAqcHJvcGVydHkpCj4g K3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmluZ2FjY19ucDsKPiArCXN0cnVjdCBrM19yaW5n YWNjICpyaW5nYWNjID0gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKPiArCXN0cnVjdCBrM19yaW5n YWNjICplbnRyeTsKPiArCj4gKwlyaW5nYWNjX25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgcHJv cGVydHksIDApOwo+ICsJaWYgKCFyaW5nYWNjX25wKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9E RVYpOwo+ICsKPiArCW11dGV4X2xvY2soJmszX3JpbmdhY2NfbGlzdF9sb2NrKTsKPiArCWxpc3Rf Zm9yX2VhY2hfZW50cnkoZW50cnksICZrM19yaW5nYWNjX2xpc3QsIGxpc3QpCj4gKwkJaWYgKGVu dHJ5LT5kZXYtPm9mX25vZGUgPT0gcmluZ2FjY19ucCkgewo+ICsJCQlyaW5nYWNjID0gZW50cnk7 Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCW11dGV4X3VubG9jaygmazNfcmluZ2FjY19saXN0X2xv Y2spOwo+ICsJb2Zfbm9kZV9wdXQocmluZ2FjY19ucCk7Cj4gKwo+ICsJcmV0dXJuIHJpbmdhY2M7 Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwob2ZfazNfcmluZ2FjY19nZXRfYnlfcGhhbmRsZSk7 Cj4gKwo+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcHJvYmVfZHQoc3RydWN0IGszX3JpbmdhY2Mg KnJpbmdhY2MpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHJpbmdhY2MtPmRl di0+b2Zfbm9kZTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJpbmdhY2MtPmRldjsKPiArCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPiAr CWludCByZXQ7Cj4gKwo+ICsJaWYgKCFub2RlKSB7Cj4gKwkJZGV2X2VycihkZXYsICJkZXZpY2Ug dHJlZSBpbmZvIHVuYXZhaWxhYmxlXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiAr Cj4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAidGksbnVtLXJpbmdzIiwgJnJp bmdhY2MtPm51bV9yaW5ncyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJ0aSxu dW0tcmluZ3MgcmVhZCBmYWlsdXJlICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKwo+ICsJcmluZ2FjYy0+ZG1hX3JpbmdfcmVzZXRfcXVpcmsgPQo+ICsJCQlvZl9wcm9wZXJ0 eV9yZWFkX2Jvb2wobm9kZSwgInRpLGRtYS1yaW5nLXJlc2V0LXF1aXJrIik7Cj4gKwo+ICsJcmlu Z2FjYy0+dGlzY2kgPSB0aV9zY2lfZ2V0X2J5X3BoYW5kbGUobm9kZSwgInRpLHNjaSIpOwo+ICsJ aWYgKElTX0VSUihyaW5nYWNjLT50aXNjaSkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHJpbmdhY2Mt PnRpc2NpKTsKPiArCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCj4gKwkJCWRldl9lcnIoZGV2 LCAidGksc2NpIHJlYWQgZmFpbCAlZFxuIiwgcmV0KTsKPiArCQlyaW5nYWNjLT50aXNjaSA9IE5V TEw7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFk X3UzMihub2RlLCAidGksc2NpLWRldi1pZCIsCj4gKwkJCQkgICAmcmluZ2FjYy0+dGlzY2lfZGV2 X2lkKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgInRpLHNjaS1kZXYtaWQgcmVh ZCBmYWlsICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcGRldi0+ aWQgPSByaW5nYWNjLT50aXNjaV9kZXZfaWQ7Cj4gKwo+ICsJcmluZ2FjYy0+cm1fZ3BfcmFuZ2Ug PSBkZXZtX3RpX3NjaV9nZXRfb2ZfcmVzb3VyY2UocmluZ2FjYy0+dGlzY2ksIGRldiwKPiArCQkJ CQkJcmluZ2FjYy0+dGlzY2lfZGV2X2lkLAo+ICsJCQkJCQkidGksc2NpLXJtLXJhbmdlLWdwLXJp bmdzIik7Cj4gKwlpZiAoSVNfRVJSKHJpbmdhY2MtPnJtX2dwX3JhbmdlKSkgewo+ICsJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIE1TSSBpbnRlcnJ1cHRzXG4iKTsKPiArCQlyZXR1 cm4gUFRSX0VSUihyaW5nYWNjLT5ybV9ncF9yYW5nZSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRp X3NjaV9pbnRhX21zaV9kb21haW5fYWxsb2NfaXJxcyhyaW5nYWNjLT5kZXYsCj4gKwkJCQkJCSBy aW5nYWNjLT5ybV9ncF9yYW5nZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19w cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgazNfcmlu Z2FjYyAqcmluZ2FjYzsKPiArCXZvaWQgX19pb21lbSAqYmFzZV9maWZvLCAqYmFzZV9ydDsKPiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJl czsKPiArCWludCByZXQsIGk7Cj4gKwo+ICsJcmluZ2FjYyA9IGRldm1fa3phbGxvYyhkZXYsIHNp emVvZigqcmluZ2FjYyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFyaW5nYWNjKQo+ICsJCXJldHVy biAtRU5PTUVNOwo+ICsKPiArCXJpbmdhY2MtPmRldiA9IGRldjsKPiArCW11dGV4X2luaXQoJnJp bmdhY2MtPnJlcV9sb2NrKTsKPiArCj4gKwlkZXYtPm1zaV9kb21haW4gPSBvZl9tc2lfZ2V0X2Rv bWFpbihkZXYsIGRldi0+b2Zfbm9kZSwKPiArCQkJCQkgICAgRE9NQUlOX0JVU19USV9TQ0lfSU5U QV9NU0kpOwo+ICsJaWYgKCFkZXYtPm1zaV9kb21haW4pIHsKPiArCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byBnZXQgTVNJIGRvbWFpblxuIik7Cj4gKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Cj4g Kwl9Cj4gKwo+ICsJcmV0ID0gazNfcmluZ2FjY19wcm9iZV9kdChyaW5nYWNjKTsKPiArCWlmIChy ZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2Vf YnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicnQiKTsKPiArCWJhc2VfcnQgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+ICsJaWYgKElTX0VSUihiYXNlX3J0KSkKPiArCQly ZXR1cm4gUFRSX0VSUihiYXNlX3J0KTsKPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiZmlmb3MiKTsKPiArCWJhc2VfZmlmbyA9 IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7Cj4gKwlpZiAoSVNfRVJSKGJhc2VfZmlm bykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoYmFzZV9maWZvKTsKPiArCj4gKwlyZXMgPSBwbGF0Zm9y bV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicHJveHlfZ2NmZyIp Owo+ICsJcmluZ2FjYy0+cHJveHlfZ2NmZyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJl cyk7Cj4gKwlpZiAoSVNfRVJSKHJpbmdhY2MtPnByb3h5X2djZmcpKQo+ICsJCXJldHVybiBQVFJf RVJSKHJpbmdhY2MtPnByb3h5X2djZmcpOwo+ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNv dXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sCj4gKwkJCQkJICAgInByb3h5X3Rhcmdl dCIpOwo+ICsJcmluZ2FjYy0+cHJveHlfdGFyZ2V0X2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3Vy Y2UoZGV2LCByZXMpOwo+ICsJaWYgKElTX0VSUihyaW5nYWNjLT5wcm94eV90YXJnZXRfYmFzZSkp Cj4gKwkJcmV0dXJuIFBUUl9FUlIocmluZ2FjYy0+cHJveHlfdGFyZ2V0X2Jhc2UpOwo+ICsKPiAr CXJpbmdhY2MtPm51bV9wcm94aWVzID0gcmVhZGwoJnJpbmdhY2MtPnByb3h5X2djZmctPmNvbmZp ZykgJgo+ICsJCQkJICAgICBLM19SSU5HQUNDX1BST1hZX0NGR19USFJFQURTX01BU0s7Cj4gKwo+ ICsJcmluZ2FjYy0+cmluZ3MgPSBkZXZtX2t6YWxsb2MoZGV2LAo+ICsJCQkJICAgICAgc2l6ZW9m KCpyaW5nYWNjLT5yaW5ncykgKgo+ICsJCQkJICAgICAgcmluZ2FjYy0+bnVtX3JpbmdzLAo+ICsJ CQkJICAgICAgR0ZQX0tFUk5FTCk7Cj4gKwlyaW5nYWNjLT5yaW5nc19pbnVzZSA9IGRldm1fa2Nh bGxvYyhkZXYsCj4gKwkJCQkJICAgIEJJVFNfVE9fTE9OR1MocmluZ2FjYy0+bnVtX3JpbmdzKSwK PiArCQkJCQkgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKPiArCXJpbmdh Y2MtPnByb3h5X2ludXNlID0gZGV2bV9rY2FsbG9jKGRldiwKPiArCQkJCQkgICAgQklUU19UT19M T05HUyhyaW5nYWNjLT5udW1fcHJveGllcyksCj4gKwkJCQkJICAgIHNpemVvZih1bnNpZ25lZCBs b25nKSwgR0ZQX0tFUk5FTCk7Cj4gKwo+ICsJaWYgKCFyaW5nYWNjLT5yaW5ncyB8fCAhcmluZ2Fj Yy0+cmluZ3NfaW51c2UgfHwgIXJpbmdhY2MtPnByb3h5X2ludXNlKQo+ICsJCXJldHVybiAtRU5P TUVNOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCByaW5nYWNjLT5udW1fcmluZ3M7IGkrKykgewo+ ICsJCXJpbmdhY2MtPnJpbmdzW2ldLnJ0ID0gYmFzZV9ydCArCj4gKwkJCQkgICAgICAgSzNfUklO R0FDQ19SVF9SRUdTX1NURVAgKiBpOwo+ICsJCXJpbmdhY2MtPnJpbmdzW2ldLmZpZm9zID0gYmFz ZV9maWZvICsKPiArCQkJCQkgIEszX1JJTkdBQ0NfRklGT19SRUdTX1NURVAgKiBpOwo+ICsJCXJp bmdhY2MtPnJpbmdzW2ldLnBhcmVudCA9IHJpbmdhY2M7Cj4gKwkJcmluZ2FjYy0+cmluZ3NbaV0u cmluZ19pZCA9IGk7Cj4gKwkJcmluZ2FjYy0+cmluZ3NbaV0ucHJveHlfaWQgPSBLM19SSU5HQUND X1BST1hZX05PVF9VU0VEOwo+ICsJfQo+ICsJZGV2X3NldF9kcnZkYXRhKGRldiwgcmluZ2FjYyk7 Cj4gKwo+ICsJcmluZ2FjYy0+dGlzY2lfcmluZ19vcHMgPSAmcmluZ2FjYy0+dGlzY2ktPm9wcy5y bV9yaW5nX29wczsKPiArCj4gKwltdXRleF9sb2NrKCZrM19yaW5nYWNjX2xpc3RfbG9jayk7Cj4g KwlsaXN0X2FkZF90YWlsKCZyaW5nYWNjLT5saXN0LCAmazNfcmluZ2FjY19saXN0KTsKPiArCW11 dGV4X3VubG9jaygmazNfcmluZ2FjY19saXN0X2xvY2spOwo+ICsKPiArCWRldl9pbmZvKGRldiwg IlJpbmcgQWNjZWxlcmF0b3IgcHJvYmVkIHJpbmdzOiV1LCBncC1yaW5nc1sldSwldV0gc2NpLWRl di1pZDoldVxuIiwKPiArCQkgcmluZ2FjYy0+bnVtX3JpbmdzLAo+ICsJCSByaW5nYWNjLT5ybV9n cF9yYW5nZS0+ZGVzY1swXS5zdGFydCwKPiArCQkgcmluZ2FjYy0+cm1fZ3BfcmFuZ2UtPmRlc2Nb MF0ubnVtLAo+ICsJCSByaW5nYWNjLT50aXNjaV9kZXZfaWQpOwo+ICsJZGV2X2luZm8oZGV2LCAi ZG1hLXJpbmctcmVzZXQtcXVpcms6ICVzXG4iLAo+ICsJCSByaW5nYWNjLT5kbWFfcmluZ19yZXNl dF9xdWlyayA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwo+ICsJZGV2X2luZm8oZGV2LCAiUkEg UHJveHkgcmV2LiAlMDh4LCBudW1fcHJveGllczoldVxuIiwKPiArCQkgcmVhZGwoJnJpbmdhY2Mt PnByb3h5X2djZmctPnJldmlzaW9uKSwgcmluZ2FjYy0+bnVtX3Byb3hpZXMpOwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gKy8qIE1hdGNoIHRhYmxlIGZvciBvZl9wbGF0Zm9ybSBiaW5kaW5nICov Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGszX3JpbmdhY2Nfb2ZfbWF0Y2hb XSA9IHsKPiArCXsgLmNvbXBhdGlibGUgPSAidGksYW02NTQtbmF2c3MtcmluZ2FjYyIsIH0sCj4g Kwl7fSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGszX3Jpbmdh Y2NfZHJpdmVyID0gewo+ICsJLnByb2JlCQk9IGszX3JpbmdhY2NfcHJvYmUsCj4gKwkuZHJpdmVy CQk9IHsKPiArCQkubmFtZQk9ICJrMy1yaW5nYWNjIiwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBr M19yaW5nYWNjX29mX21hdGNoLAo+ICsJCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwKPiAr CX0sCj4gK307Cj4gK2J1aWx0aW5fcGxhdGZvcm1fZHJpdmVyKGszX3JpbmdhY2NfZHJpdmVyKTsK PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oIGIvaW5jbHVk ZS9saW51eC9zb2MvdGkvazMtcmluZ2FjYy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAuLjI2ZjczZGYwYTUyNAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNs dWRlL2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmgKPiBAQCAtMCwwICsxLDI0NCBAQAo+ICsvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ICsvKgo+ICsgKiBLMyBSaW5nIEFj Y2VsZXJhdG9yIChSQSkgc3Vic3lzdGVtIGludGVyZmFjZQo+ICsgKgo+ICsgKiBDb3B5cmlnaHQg KEMpIDIwMTkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5j b20KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fU09DX1RJX0szX1JJTkdBQ0NfQVBJX0hfCj4gKyNk ZWZpbmUgX19TT0NfVElfSzNfUklOR0FDQ19BUElfSF8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgo+ICsKPiArc3RydWN0IGRldmljZV9ub2RlOwo+ICsKPiArLyoqCj4gKyAqIGVudW0g azNfcmluZ19tb2RlIC0gJnN0cnVjdCBrM19yaW5nX2NmZyBtb2RlCj4gKyAqCj4gKyAqIFJBIHJp bmcgb3BlcmF0aW9uYWwgbW9kZXMKPiArICoKPiArICogQEszX1JJTkdBQ0NfUklOR19NT0RFX1JJ Tkc6IEV4cG9zZWQgUmluZyBtb2RlIGZvciBTVyBkaXJlY3QgYWNjZXNzCj4gKyAqIEBLM19SSU5H QUNDX1JJTkdfTU9ERV9NRVNTQUdFOiBNZXNzYWdpbmcgbW9kZS4gTWVzc2FnaW5nIG1vZGUgcmVx dWlyZXMKPiArICoJdGhhdCBhbGwgYWNjZXNzZXMgdG8gdGhlIHF1ZXVlIG11c3QgZ28gdGhyb3Vn aCB0aGlzIElQIHNvIHRoYXQgYWxsCj4gKyAqCWFjY2Vzc2VzIHRvIHRoZSBtZW1vcnkgYXJlIGNv bnRyb2xsZWQgYW5kIG9yZGVyZWQuIFRoaXMgSVAgdGhlbgo+ICsgKgljb250cm9scyB0aGUgZW50 aXJlIHN0YXRlIG9mIHRoZSBxdWV1ZSwgYW5kIFNXIGhhcyBubyBkaXJlY3RseSBjb250cm9sLAo+ ICsgKglzdWNoIGFzIHRocm91Z2ggZG9vcmJlbGxzIGFuZCBjYW5ub3QgYWNjZXNzIHRoZSBzdG9y YWdlIG1lbW9yeSBkaXJlY3RseS4KPiArICoJVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdo ZW4gbW9yZSB0aGFuIG9uZSBTVyBvciBIVyBlbnRpdHkgY2FuIGJlCj4gKyAqCXRoZSBwcm9kdWNl ciBhbmQvb3IgY29uc3VtZXIgYXQgdGhlIHNhbWUgdGltZQo+ICsgKiBASzNfUklOR0FDQ19SSU5H X01PREVfQ1JFREVOVElBTFM6IENyZWRlbnRpYWxzIG1vZGUgaXMgbWVzc2FnZSBtb2RlIHBsdXMK PiArICoJc3RvcmVzIGNyZWRlbnRpYWxzIHdpdGggZWFjaCBtZXNzYWdlLCByZXF1aXJpbmcgdGhl IGVsZW1lbnQgc2l6ZSB0byBiZQo+ICsgKglkb3VibGVkIHRvIGZpdCB0aGUgY3JlZGVudGlhbHMu IEFueSBleHBvc2VkIG1lbW9yeSBzaG91bGQgYmUgcHJvdGVjdGVkCj4gKyAqCWJ5IGEgZmlyZXdh bGwgZnJvbSB1bndhbnRlZCBhY2Nlc3MKPiArICovCj4gK2VudW0gazNfcmluZ19tb2RlIHsKPiAr CUszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcgPSAwLAo+ICsJSzNfUklOR0FDQ19SSU5HX01PREVf TUVTU0FHRSwKPiArCUszX1JJTkdBQ0NfUklOR19NT0RFX0NSRURFTlRJQUxTLAo+ICsJSzNfUklO R0FDQ19SSU5HX01PREVfSU5WQUxJRAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGVudW0gazNfcmlu Z19zaXplIC0gJnN0cnVjdCBrM19yaW5nX2NmZyBlbG1fc2l6ZQo+ICsgKgo+ICsgKiBSQSByaW5n IGVsZW1lbnQncyBzaXplcyBpbiBieXRlcy4KPiArICovCj4gK2VudW0gazNfcmluZ19zaXplIHsK PiArCUszX1JJTkdBQ0NfUklOR19FTFNJWkVfNCA9IDAsCj4gKwlLM19SSU5HQUNDX1JJTkdfRUxT SVpFXzgsCj4gKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzE2LAo+ICsJSzNfUklOR0FDQ19SSU5H X0VMU0laRV8zMiwKPiArCUszX1JJTkdBQ0NfUklOR19FTFNJWkVfNjQsCj4gKwlLM19SSU5HQUND X1JJTkdfRUxTSVpFXzEyOCwKPiArCUszX1JJTkdBQ0NfUklOR19FTFNJWkVfMjU2LAo+ICsJSzNf UklOR0FDQ19SSU5HX0VMU0laRV9JTlZBTElECj4gK307Cj4gKwo+ICtzdHJ1Y3QgazNfcmluZ2Fj YzsKPiArc3RydWN0IGszX3Jpbmc7Cj4gKwo+ICsvKioKPiArICogZW51bSBrM19yaW5nX2NmZyAt IFJBIHJpbmcgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKPiArICoKPiArICogQHNpemU6IFJpbmcg c2l6ZSwgbnVtYmVyIG9mIGVsZW1lbnRzCj4gKyAqIEBlbG1fc2l6ZTogUmluZyBlbGVtZW50IHNp emUKPiArICogQG1vZGU6IFJpbmcgb3BlcmF0aW9uYWwgbW9kZQo+ICsgKiBAZmxhZ3M6IFJpbmcg Y29uZmlndXJhdGlvbiBmbGFncy4gUG9zc2libGUgdmFsdWVzOgo+ICsgKgkgQEszX1JJTkdBQ0Nf UklOR19TSEFSRUQ6IHdoZW4gc2V0IGFsbG93cyB0byByZXF1ZXN0IHRoZSBzYW1lIHJpbmcKPiAr ICoJIGZldyB0aW1lcy4gSXQncyB1c2FibGUgd2hlbiB0aGUgc2FtZSByaW5nIGlzIHVzZWQgYXMg RnJlZSBIb3N0IFBEIHJpbmcKPiArICoJIGZvciBkaWZmZXJlbnQgZmxvd3MsIGZvciBleGFtcGxl Lgo+ICsgKgkgTm90ZTogTG9ja2luZyBzaG91bGQgYmUgZG9uZSBieSBjb25zdW1lciBpZiByZXF1 aXJlZAo+ICsgKi8KPiArc3RydWN0IGszX3JpbmdfY2ZnIHsKPiArCXUzMiBzaXplOwo+ICsJZW51 bSBrM19yaW5nX3NpemUgZWxtX3NpemU7Cj4gKwllbnVtIGszX3JpbmdfbW9kZSBtb2RlOwo+ICsj ZGVmaW5lIEszX1JJTkdBQ0NfUklOR19TSEFSRUQgQklUKDEpCj4gKwl1MzIgZmxhZ3M7Cj4gK307 Cj4gKwo+ICsjZGVmaW5lIEszX1JJTkdBQ0NfUklOR19JRF9BTlkgKC0xKQo+ICsKPiArLyoqCj4g KyAqIG9mX2szX3JpbmdhY2NfZ2V0X2J5X3BoYW5kbGUgLSBmaW5kIGEgUkEgYnkgcGhhbmRsZSBw cm9wZXJ0eQo+ICsgKiBAbnA6IGRldmljZSBub2RlCj4gKyAqIEBwcm9wbmFtZTogcHJvcGVydHkg bmFtZSBjb250YWluaW5nIHBoYW5kbGUgb24gUkEgbm9kZQo+ICsgKgo+ICsgKiBSZXR1cm5zIHBv aW50ZXIgb24gdGhlIFJBIC0gc3RydWN0IGszX3JpbmdhY2MKPiArICogb3IgLUVOT0RFViBpZiBu b3QgZm91bmQsCj4gKyAqIG9yIC1FUFJPQkVfREVGRVIgaWYgbm90IHlldCByZWdpc3RlcmVkCj4g KyAqLwo+ICtzdHJ1Y3QgazNfcmluZ2FjYyAqb2ZfazNfcmluZ2FjY19nZXRfYnlfcGhhbmRsZShz dHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAo+ICsJCQkJCQljb25zdCBjaGFyICpwcm9wZXJ0eSk7Cj4g Kwo+ICsjZGVmaW5lIEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFkgQklUKDEpCj4gKwo+ICsvKioK PiArICogazNfcmluZ2FjY19yZXF1ZXN0X3JpbmcgLSByZXF1ZXN0IHJpbmcgZnJvbSByaW5nYWNj Cj4gKyAqIEByaW5nYWNjOiBwb2ludGVyIG9uIHJpbmdhY2MKPiArICogQGlkOiByaW5nIGlkIG9y IEszX1JJTkdBQ0NfUklOR19JRF9BTlkgZm9yIGFueSBnZW5lcmFsIHB1cnBvc2UgcmluZwo+ICsg KiBAZmxhZ3M6Cj4gKyAqCUBLM19SSU5HQUNDX1JJTkdfVVNFX1BST1hZOiBpZiBzZXQgLSBwcm94 eSB3aWxsIGJlIGFsbG9jYXRlZCBhbmQKPiArICoJCXVzZWQgdG8gYWNjZXNzIHJpbmcgbWVtb3J5 LiBTb3Bwb3J0ZWQgb25seSBmb3IgcmluZ3MgaW4KPiArICoJCU1lc3NhZ2UvQ3JlZGVudGlhbHMv UXVldWUgbW9kZS4KPiArICoKPiArICogUmV0dXJucyBwb2ludGVyIG9uIHRoZSBSaW5nIC0gc3Ry dWN0IGszX3JpbmcKPiArICogb3IgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUuCj4gKyAqLwo+ICtz dHJ1Y3QgazNfcmluZyAqazNfcmluZ2FjY19yZXF1ZXN0X3Jpbmcoc3RydWN0IGszX3JpbmdhY2Mg KnJpbmdhY2MsCj4gKwkJCQkJaW50IGlkLCB1MzIgZmxhZ3MpOwo+ICsKPiArLyoqCj4gKyAqIGsz X3JpbmdhY2NfcmluZ19yZXNldCAtIHJpbmcgcmVzZXQKPiArICogQHJpbmc6IHBvaW50ZXIgb24g UmluZwo+ICsgKgo+ICsgKiBSZXNldHMgcmluZyBpbnRlcm5hbCBzdGF0ZSAoKGh3KW9jYywgKGh3 KWlkeCkuCj4gKyAqLwo+ICt2b2lkIGszX3JpbmdhY2NfcmluZ19yZXNldChzdHJ1Y3QgazNfcmlu ZyAqcmluZyk7Cj4gKy8qKgo+ICsgKiBrM19yaW5nYWNjX3JpbmdfcmVzZXQgLSByaW5nIHJlc2V0 IGZvciBETUEgcmluZ3MKPiArICogQHJpbmc6IHBvaW50ZXIgb24gUmluZwo+ICsgKgo+ICsgKiBS ZXNldHMgcmluZyBpbnRlcm5hbCBzdGF0ZSAoKGh3KW9jYywgKGh3KWlkeCkuIFNob3VsZCBiZSB1 c2VkIGZvciByaW5ncwo+ICsgKiB3aGljaCBhcmUgcmVhZCBieSBLMyBVRE1BLCBsaWtlIFRYIG9y IEZyZWUgSG9zdCBQRCByaW5ncy4KPiArICovCj4gK3ZvaWQgazNfcmluZ2FjY19yaW5nX3Jlc2V0 X2RtYShzdHJ1Y3QgazNfcmluZyAqcmluZywgdTMyIG9jYyk7Cj4gKwo+ICsvKioKPiArICogazNf cmluZ2FjY19yaW5nX2ZyZWUgLSByaW5nIGZyZWUKPiArICogQHJpbmc6IHBvaW50ZXIgb24gUmlu Zwo+ICsgKgo+ICsgKiBSZXNldHMgcmluZyBhbmQgZnJlZSBhbGwgYWxvY2F0ZWQgcmVzb3VyY2Vz Lgo+ICsgKi8KPiAraW50IGszX3JpbmdhY2NfcmluZ19mcmVlKHN0cnVjdCBrM19yaW5nICpyaW5n KTsKPiArCj4gKy8qKgo+ICsgKiBrM19yaW5nYWNjX2dldF9yaW5nX2lkIC0gR2V0IHRoZSBSaW5n IElECj4gKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcKPiArICoKPiArICogUmV0dXJucyB0aGUg UmluZyBJRAo+ICsgKi8KPiArdTMyIGszX3JpbmdhY2NfZ2V0X3JpbmdfaWQoc3RydWN0IGszX3Jp bmcgKnJpbmcpOwo+ICsKPiArLyoqCj4gKyAqIGszX3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bSAt IEdldCB0aGUgaXJxIG51bWJlciBmb3IgdGhlIHJpbmcKPiArICogQHJpbmc6IHBvaW50ZXIgb24g cmluZwo+ICsgKgo+ICsgKiBSZXR1cm5zIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIHdoaWNoIGNhbiBi ZSB1c2VkIHRvIHJlcXVlc3QgdGhlIGludGVycnVwdAo+ICsgKi8KPiAraW50IGszX3JpbmdhY2Nf Z2V0X3JpbmdfaXJxX251bShzdHJ1Y3QgazNfcmluZyAqcmluZyk7Cj4gKwo+ICsvKioKPiArICog azNfcmluZ2FjY19yaW5nX2NmZyAtIHJpbmcgY29uZmlndXJlCj4gKyAqIEByaW5nOiBwb2ludGVy IG9uIHJpbmcKPiArICogQGNmZzogUmluZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKHNlZSAm c3RydWN0IGszX3JpbmdfY2ZnKQo+ICsgKgo+ICsgKiBDb25maWd1cmVzIHJpbmcsIGluY2x1ZGlu ZyByaW5nIG1lbW9yeSBhbGxvY2F0aW9uLgo+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJy bm8gb3RoZXJ3aXNlLgo+ICsgKi8KPiAraW50IGszX3JpbmdhY2NfcmluZ19jZmcoc3RydWN0IGsz X3JpbmcgKnJpbmcsIHN0cnVjdCBrM19yaW5nX2NmZyAqY2ZnKTsKPiArCj4gKy8qKgo+ICsgKiBr M19yaW5nYWNjX3JpbmdfZ2V0X3NpemUgLSBnZXQgcmluZyBzaXplCj4gKyAqIEByaW5nOiBwb2lu dGVyIG9uIHJpbmcKPiArICoKPiArICogUmV0dXJucyByaW5nIHNpemUgaW4gbnVtYmVyIG9mIGVs ZW1lbnRzLgo+ICsgKi8KPiArdTMyIGszX3JpbmdhY2NfcmluZ19nZXRfc2l6ZShzdHJ1Y3QgazNf cmluZyAqcmluZyk7Cj4gKwo+ICsvKioKPiArICogazNfcmluZ2FjY19yaW5nX2dldF9mcmVlIC0g Z2V0IGZyZWUgZWxlbWVudHMKPiArICogQHJpbmc6IHBvaW50ZXIgb24gcmluZwo+ICsgKgo+ICsg KiBSZXR1cm5zIG51bWJlciBvZiBmcmVlIGVsZW1lbnRzIGluIHRoZSByaW5nLgo+ICsgKi8KPiAr dTMyIGszX3JpbmdhY2NfcmluZ19nZXRfZnJlZShzdHJ1Y3QgazNfcmluZyAqcmluZyk7Cj4gKwo+ ICsvKioKPiArICogazNfcmluZ2FjY19yaW5nX2dldF9vY2MgLSBnZXQgcmluZyBvY2N1cGFuY3kK PiArICogQHJpbmc6IHBvaW50ZXIgb24gcmluZwo+ICsgKgo+ICsgKiBSZXR1cm5zIHRvdGFsIG51 bWJlciBvZiB2YWxpZCBlbnRyaWVzIG9uIHRoZSByaW5nCj4gKyAqLwo+ICt1MzIgazNfcmluZ2Fj Y19yaW5nX2dldF9vY2Moc3RydWN0IGszX3JpbmcgKnJpbmcpOwo+ICsKPiArLyoqCj4gKyAqIGsz X3JpbmdhY2NfcmluZ19pc19mdWxsIC0gY2hlY2tzIGlmIHJpbmcgaXMgZnVsbAo+ICsgKiBAcmlu ZzogcG9pbnRlciBvbiByaW5nCj4gKyAqCj4gKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmluZyBp cyBmdWxsCj4gKyAqLwo+ICt1MzIgazNfcmluZ2FjY19yaW5nX2lzX2Z1bGwoc3RydWN0IGszX3Jp bmcgKnJpbmcpOwo+ICsKPiArLyoqCj4gKyAqIGszX3JpbmdhY2NfcmluZ19wdXNoIC0gcHVzaCBl bGVtZW50IHRvIHRoZSByaW5nIHRhaWwKPiArICogQHJpbmc6IHBvaW50ZXIgb24gcmluZwo+ICsg KiBAZWxlbTogcG9pbnRlciBvbiByaW5nIGVsZW1lbnQgYnVmZmVyCj4gKyAqCj4gKyAqIFB1c2gg b25lIHJpbmcgZWxlbWVudCB0byB0aGUgcmluZyB0YWlsLiBTaXplIG9mIHRoZSByaW5nIGVsZW1l bnQgaXMKPiArICogZGV0ZXJtaW5lZCBieSByaW5nIGNvbmZpZ3VyYXRpb24gJnN0cnVjdCBrM19y aW5nX2NmZyBlbG1fc2l6ZS4KPiArICoKPiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5v IG90aGVyd2lzZS4KPiArICovCj4gK2ludCBrM19yaW5nYWNjX3JpbmdfcHVzaChzdHJ1Y3QgazNf cmluZyAqcmluZywgdm9pZCAqZWxlbSk7Cj4gKwo+ICsvKioKPiArICogazNfcmluZ2FjY19yaW5n X3BvcCAtIHBvcCBlbGVtZW50IGZyb20gdGhlIHJpbmcgaGVhZAo+ICsgKiBAcmluZzogcG9pbnRl ciBvbiByaW5nCj4gKyAqIEBlbGVtOiBwb2ludGVyIG9uIHJpbmcgZWxlbWVudCBidWZmZXIKPiAr ICoKPiArICogUHVzaCBvbmUgcmluZyBlbGVtZW50IGZyb20gdGhlIHJpbmcgaGVhZC4gU2l6ZSBv ZiB0aGUgcmluZyBlbGVtZW50IGlzCj4gKyAqIGRldGVybWluZWQgYnkgcmluZyBjb25maWd1cmF0 aW9uICZzdHJ1Y3QgazNfcmluZ19jZmcgZWxtX3NpemUuLgo+ICsgKgo+ICsgKiBSZXR1cm5zIDAg b24gc3VjY2VzcywgZXJybm8gb3RoZXJ3aXNlLgo+ICsgKi8KPiAraW50IGszX3JpbmdhY2Nfcmlu Z19wb3Aoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOwo+ICsKPiArLyoqCj4gKyAq IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWQgLSBwdXNoIGVsZW1lbnQgdG8gdGhlIHJpbmcgaGVh ZAo+ICsgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCj4gKyAqIEBlbGVtOiBwb2ludGVyIG9uIHJp bmcgZWxlbWVudCBidWZmZXIKPiArICoKPiArICogUHVzaCBvbmUgcmluZyBlbGVtZW50IHRvIHRo ZSByaW5nIGhlYWQuIFNpemUgb2YgdGhlIHJpbmcgZWxlbWVudCBpcwo+ICsgKiBkZXRlcm1pbmVk IGJ5IHJpbmcgY29uZmlndXJhdGlvbiAmc3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplLgo+ICsg Kgo+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb3RoZXJ3aXNlLgo+ICsgKiBOb3Qg U3VwcG9ydGVkIGJ5IHJpbmcgbW9kZXM6IEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcKPiArICov Cj4gK2ludCBrM19yaW5nYWNjX3JpbmdfcHVzaF9oZWFkKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2 b2lkICplbGVtKTsKPiArCj4gKy8qKgo+ICsgKiBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWwgLSBw b3AgZWxlbWVudCBmcm9tIHRoZSByaW5nIHRhaWwKPiArICogQHJpbmc6IHBvaW50ZXIgb24gcmlu Zwo+ICsgKiBAZWxlbTogcG9pbnRlciBvbiByaW5nIGVsZW1lbnQgYnVmZmVyCj4gKyAqCj4gKyAq IFB1c2ggb25lIHJpbmcgZWxlbWVudCBmcm9tIHRoZSByaW5nIHRhaWwuIFNpemUgb2YgdGhlIHJp bmcgZWxlbWVudCBpcwo+ICsgKiBkZXRlcm1pbmVkIGJ5IHJpbmcgY29uZmlndXJhdGlvbiAmc3Ry dWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplLgo+ICsgKgo+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2Vz cywgZXJybm8gb3RoZXJ3aXNlLgo+ICsgKiBOb3QgU3VwcG9ydGVkIGJ5IHJpbmcgbW9kZXM6IEsz X1JJTkdBQ0NfUklOR19NT0RFX1JJTkcKPiArICovCj4gK2ludCBrM19yaW5nYWNjX3JpbmdfcG9w X3RhaWwoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOwo+ICsKPiArdTMyIGszX3Jp bmdhY2NfZ2V0X3Rpc2NpX2Rldl9pZChzdHJ1Y3QgazNfcmluZyAqcmluZyk7Cj4gKwo+ICsjZW5k aWYgLyogX19TT0NfVElfSzNfUklOR0FDQ19BUElfSF8gKi8KPiAKClRleGFzIEluc3RydW1lbnRz IEZpbmxhbmQgT3ksIFBvcmtrYWxhbmthdHUgMjIsIDAwMTgwIEhlbHNpbmtpLgpZLXR1bm51cy9C dXNpbmVzcyBJRDogMDYxNTUyMS00LiBLb3RpcGFpa2thL0RvbWljaWxlOiBIZWxzaW5raQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtl cm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5l bAo=