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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id B1E90C54E65 for ; Thu, 22 May 2025 13:06:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=F1XU05CjjUkfyESQamanhTFXeuIO2L1mszTuohX+pbU=; b=xia6ywNNVb6CA4 cxpmV5NwLXeAX39SdQMGn2j+gYt5SjE9eDBGplyOrYeNQ9WfN2NYy7zpw/2XM6ALvUTqfRS5qFUjo 2KvM8lz1iyBkM4yGijectHjyyV5lx1poKemC8yXExFBxF48/vQ2SF+GsiCP2WyQ0nFzdGjNxvcHT6 6VBf6Md2X8nmGEzTM7OdiYgol02gKP2Ol6a/h4mYROM7LUAZANtqIZyiFe/dXFrdCrKY7QonHYnWI gHIePKLh4WIivKoZIoUGJIICzCv/aX+UvzlZ5Az+sBiyALLY34BQWJ895RILof56hxlsNY4bSK1GB UTgZ6aBGZWoFZfdZWgmQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uI5cY-0000000144l-4BNk; Thu, 22 May 2025 13:06:03 +0000 Received: from sender4-pp-f112.zoho.com ([136.143.188.112]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uI5ZZ-000000013ev-2fQw; Thu, 22 May 2025 13:02:58 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1747918959; cv=none; d=zohomail.com; s=zohoarc; b=M/xFiBagEKR2Ya2kcXXxy6kLBV3zzmtEhWu9yB1vpCuDHugM3XN3xh9fyKMy7DEI37fdD6Essd55B+Muy9wyEMbqXN4ZFHybbMbG7GoX024Q9H4mYVra5Z/A4ZA02nVkmxl8MZFl5hXsbaTgEu2X4aztI948dnR1m3LKFLFIhxI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747918959; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=yAzVUYHblSoPTB0olb5aawXBsuLsX+i/Vja0SSAs4yM=; b=Iy1MI7rk6DydTqZt+PsgWIcPQojnJmeNjx9Gjr/1FLPSUS37Ma/gQUClvo3EtfltDEHgoDPyt9iytkpMf+hMBHEZMQQia2Z/ct7oC+7g9aoPJo/aUxoa30JSXVq9AOXtLNi/M8/ZgjUqCjEdDueyWrz0YiWJF0GFGamPavwgisA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1747918959; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Content-Type:Message-Id:Reply-To; bh=yAzVUYHblSoPTB0olb5aawXBsuLsX+i/Vja0SSAs4yM=; b=e+ThdrWj/dCeYWjXT7Sn2wa3UbL1rJgVHxXHJDk9Cka0ViwZKX6DutfJbRLcFfr1 oITFGrcjbesSdKS33jfnRZjh3BxeoCkTAwrv2+1rH+CrKdZgI6012kkmvTQ0ksyq2ML WSG3YjJx6iZ93fVUhbMO+a8z/c5yS1I9dgVviLpw= Received: by mx.zohomail.com with SMTPS id 1747918955405526.6068930201867; Thu, 22 May 2025 06:02:35 -0700 (PDT) From: Nicolas Frattaroli To: Uwe =?UTF-8?B?S2xlaW5lLUvDtm5pZw==?= Cc: Linus Walleij , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Heiko Stuebner , William Breathitt Gray , Sebastian Reichel , Kever Yang , linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, linux-iio@vger.kernel.org, kernel@collabora.com, Jonas Karlman , Detlev Casanova Subject: Re: [PATCH 5/7] pwm: Add rockchip PWMv4 driver Date: Thu, 22 May 2025 15:02:29 +0200 Message-ID: <4313739.kQq0lBPeGt@workhorse> In-Reply-To: References: <20250408-rk3576-pwm-v1-0-a49286c2ca8e@collabora.com> <20250408-rk3576-pwm-v1-5-a49286c2ca8e@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250522_060257_747310_0081D6DB X-CRM114-Status: GOOD ( 53.38 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGkgVXdlLAoKdGhhbmtzIGZvciB0aGUgcmV2aWV3LiBKdXN0IGdvdCBzdGFydGVkIG9uIHYyLCBJ J2xsIHJlc3BvbmQgb3IgYWNrIGNvbW1lbnRzCmlubGluZS4KCk9uIFR1ZXNkYXksIDEzIE1heSAy MDI1IDE5OjI2OjMxIENlbnRyYWwgRXVyb3BlYW4gU3VtbWVyIFRpbWUgVXdlIEtsZWluZS1Lw7Zu aWcgd3JvdGU6Cj4gSGVsbG8gTmljb2xhcywKPiAKPiBPbiBUdWUsIEFwciAwOCwgMjAyNSBhdCAw MjozMjoxN1BNICswMjAwLCBOaWNvbGFzIEZyYXR0YXJvbGkgd3JvdGU6Cj4gPiBUaGUgUm9ja2No aXAgUkszNTc2IGJyaW5ncyB3aXRoIGl0IGEgbmV3IFBXTSBJUCwgaW4gZG93bnN0cmVhbSBjb2Rl Cj4gPiByZWZlcnJlZCB0byBhcyAidjQiLiBUaGlzIG5ldyBJUCBpcyBkaWZmZXJlbnQgZW5vdWdo IGZyb20gdGhlIHByZXZpb3VzCj4gPiBSb2NrY2hpcCBJUCB0aGF0IEkgZmVsdCBpdCBuZWNlc3Nh cnkgdG8gYWRkIGEgbmV3IGRyaXZlciBmb3IgaXQsIGluc3RlYWQKPiA+IG9mIHNob2Vob3JuaW5n IGl0IGluIHRoZSBvbGQgb25lLgo+ID4gCj4gPiBBZGQgdGhpcyBuZXcgZHJpdmVyLCBiYXNlZCBv biB0aGUgUFdNIGNvcmUncyB3YXZlZm9ybSBBUElzLiBJdHMgcGxhdGZvcm0KPiA+IGRldmljZSBp cyByZWdpc3RlcmVkIGJ5IHRoZSBwYXJlbnQgbWZwd20gZHJpdmVyLCBmcm9tIHdoaWNoIGl0IGFs c28KPiA+IHJlY2VpdmVzIGEgbGl0dGxlIHBsYXRmb3JtIGRhdGEgc3RydWN0LCBzbyB0aGF0IG1m cHdtIGNhbiBndWFyYW50ZWUgdGhhdAo+ID4gYWxsIHRoZSBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVy cyBzcHJlYWQgYWNyb3NzIGRpZmZlcmVudCBzdWJzeXN0ZW1zIGZvcgo+ID4gdGhpcyBzcGVjaWZp YyBoYXJkd2FyZSBJUCBkbyBub3QgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlci4KPiA+IAo+ID4g U2lnbmVkLW9mZi1ieTogTmljb2xhcyBGcmF0dGFyb2xpIDxuaWNvbGFzLmZyYXR0YXJvbGlAY29s bGFib3JhLmNvbT4KPiA+IC0tLQo+ID4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgIHwg ICAxICsKPiA+ICBkcml2ZXJzL3B3bS9LY29uZmlnICAgICAgICAgICB8ICAxMyArKwo+ID4gIGRy aXZlcnMvcHdtL01ha2VmaWxlICAgICAgICAgIHwgICAxICsKPiA+ICBkcml2ZXJzL3B3bS9wd20t cm9ja2NoaXAtdjQuYyB8IDMzNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDM1MSBpbnNlcnRpb25zKCspCj4gPiAKPiA+IGRp ZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCj4gPiBpbmRleCBlNmE5MzQ3YmUx ZTc4ODkwODllMWQ5ZTY1NWNiMjNjMmQ4Mzk5YjQwLi4zZGRkMjQ1ZmQ0YWQ4ZDllZDJlNzYyOTEw YTdhMWY2NDM2ZjkzZTM0IDEwMDY0NAo+ID4gLS0tIGEvTUFJTlRBSU5FUlMKPiA+ICsrKyBiL01B SU5UQUlORVJTCj4gPiBAQCAtMjA4OTEsNiArMjA4OTEsNyBAQCBMOglsaW51eC1yb2NrY2hpcEBs aXN0cy5pbmZyYWRlYWQub3JnCj4gPiAgTDoJbGludXgtcHdtQHZnZXIua2VybmVsLm9yZwo+ID4g IFM6CU1haW50YWluZWQKPiA+ICBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mv cHdtL3JvY2tjaGlwLHJrMzU3Ni1wd20ueWFtbAo+ID4gK0Y6CWRyaXZlcnMvcHdtL3B3bS1yb2Nr Y2hpcC12NC5jCj4gPiAgRjoJZHJpdmVycy9zb2Mvcm9ja2NoaXAvbWZwd20uYwo+ID4gIEY6CWlu Y2x1ZGUvc29jL3JvY2tjaGlwL21mcHdtLmgKPiA+ICAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3B3bS9LY29uZmlnIGIvZHJpdmVycy9wd20vS2NvbmZpZwo+ID4gaW5kZXggNDczMWQ1YjkwZDdl ZGNjNjExMzhlNGE1YmY3ZTk4OTA2OTUzZWNlNC4uMjQyMDM5ZjYyYWIwOTFjZWEzMzdiZjI3ZWYz MTBiY2Y2OTZiNmVkMCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvcHdtL0tjb25maWcKPiA+ICsr KyBiL2RyaXZlcnMvcHdtL0tjb25maWcKPiA+IEBAIC01NDAsNiArNTQwLDE5IEBAIGNvbmZpZyBQ V01fUk9DS0NISVAKPiA+ICAJICBHZW5lcmljIFBXTSBmcmFtZXdvcmsgZHJpdmVyIGZvciB0aGUg UFdNIGNvbnRyb2xsZXIgZm91bmQgb24KPiA+ICAJICBSb2NrY2hpcCBTb0NzLgo+ID4gIAo+ID4g K2NvbmZpZyBQV01fUk9DS0NISVBfVjQKPiA+ICsJdHJpc3RhdGUgIlJvY2tjaGlwIFBXTSB2NCBz dXBwb3J0Igo+ID4gKwlkZXBlbmRzIG9uIEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUCj4g PiArCWRlcGVuZHMgb24gUk9DS0NISVBfTUZQV00KPiA+ICsJZGVwZW5kcyBvbiBIQVNfSU9NRU0K PiA+ICsJaGVscAo+ID4gKwkgIEdlbmVyaWMgUFdNIGZyYW1ld29yayBkcml2ZXIgZm9yIHRoZSBQ V00gY29udHJvbGxlciBmb3VuZCBvbgo+ID4gKwkgIGxhdGVyIFJvY2tjaGlwIFNvQ3Mgc3VjaCBh cyB0aGUgUkszNTc2Lgo+ID4gKwo+ID4gKwkgIFVzZXMgdGhlIFJvY2tjaGlwIE11bHRpLWZ1bmN0 aW9uIFBXTSBjb250cm9sbGVyIGRyaXZlciBpbmZyYXN0cnVjdHVyZQo+ID4gKwkgIHRvIGd1YXJh bnRlZSBmZWFybGVzc2x5IGNvbmN1cnJlbnQgb3BlcmF0aW9uIHdpdGggb3RoZXIgZnVuY3Rpb25z IG9mCj4gPiArCSAgdGhlIHNhbWUgZGV2aWNlIGltcGxlbWVudGVkIGJ5IGRyaXZlcnMgaW4gb3Ro ZXIgc3Vic3lzdGVtcy4KPiA+ICsKPiA+ICBjb25maWcgUFdNX1JaX01UVTMKPiA+ICAJdHJpc3Rh dGUgIlJlbmVzYXMgUlovRzJMIE1UVTNhIFBXTSBUaW1lciBzdXBwb3J0Igo+ID4gIAlkZXBlbmRz IG9uIFJaX01UVTMKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3B3bS9NYWtlZmlsZSBiL2RyaXZl cnMvcHdtL01ha2VmaWxlCj4gPiBpbmRleCA1MzllMGRlZjNmODJmY2I4NjZhYjgzYTAzNDZhMTVm N2VmZGQ3MTI3Li5iNWFjYTdmZjU4YWM4M2Y4NDQ1ODFkZjUyNjYyNDYxNzAyNTI5MWRlIDEwMDY0 NAo+ID4gLS0tIGEvZHJpdmVycy9wd20vTWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvcHdtL01h a2VmaWxlCj4gPiBAQCAtNDksNiArNDksNyBAQCBvYmotJChDT05GSUdfUFdNX1JBU1BCRVJSWVBJ X1BPRSkJKz0gcHdtLXJhc3BiZXJyeXBpLXBvZS5vCj4gPiAgb2JqLSQoQ09ORklHX1BXTV9SQ0FS KQkJKz0gcHdtLXJjYXIubwo+ID4gIG9iai0kKENPTkZJR19QV01fUkVORVNBU19UUFUpCSs9IHB3 bS1yZW5lc2FzLXRwdS5vCj4gPiAgb2JqLSQoQ09ORklHX1BXTV9ST0NLQ0hJUCkJKz0gcHdtLXJv Y2tjaGlwLm8KPiA+ICtvYmotJChDT05GSUdfUFdNX1JPQ0tDSElQX1Y0KQkrPSBwd20tcm9ja2No aXAtdjQubwo+ID4gIG9iai0kKENPTkZJR19QV01fUlpfTVRVMykJKz0gcHdtLXJ6LW10dTMubwo+ ID4gIG9iai0kKENPTkZJR19QV01fU0FNU1VORykJKz0gcHdtLXNhbXN1bmcubwo+ID4gIG9iai0k KENPTkZJR19QV01fU0lGSVZFKQkrPSBwd20tc2lmaXZlLm8KPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3B3bS9wd20tcm9ja2NoaXAtdjQuYyBiL2RyaXZlcnMvcHdtL3B3bS1yb2NrY2hpcC12NC5j Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTgwYjI3NDU0ZWY5YjkzMGJlZjA0OTZjYTUyODUzM2NmNDE5 ZmEwZQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9wd20vcHdtLXJvY2tjaGlw LXY0LmMKPiA+IEBAIC0wLDAgKzEsMzM2IEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb3ItbGF0ZXIKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAyNSBD b2xsYWJvcmEgTHRkLgo+ID4gKyAqCj4gPiArICogQSBQdWxzZS1XaWR0aC1Nb2R1bGF0aW9uIChQ V00pIGdlbmVyYXRvciBkcml2ZXIgZm9yIHRoZSBnZW5lcmF0b3JzIGZvdW5kIGluCj4gPiArICog Um9ja2NoaXAgU29DcyBzdWNoIGFzIHRoZSBSSzM1NzYsIGludGVybmFsbHkgcmVmZXJyZWQgdG8g YXMgIlBXTSB2NCIuIFVzZXMKPiA+ICsgKiB0aGUgTUZQV00gaW5mcmFzdHJ1Y3R1cmUgdG8gZ3Vh cmFudGVlIGV4Y2x1c2l2ZSB1c2Ugb3ZlciB0aGUgZGV2aWNlIHdpdGhvdXQKPiA+ICsgKiBvdGhl ciBmdW5jdGlvbnMgb2YgdGhlIGRldmljZSBmcm9tIGRpZmZlcmVudCBkcml2ZXJzIGludGVyZmVy aW5nIHdpdGggaXRzCj4gPiArICogb3BlcmF0aW9uIHdoaWxlIGl0J3MgYWN0aXZlLgo+IAo+IENh biB5b3UgcGxlYXNlIGFkZCBhICJMaW1pdGF0aW9ucyIgcGFyYWdyYXBoIGhlcmUgc2ltaWxhciB0 byB0aGUgb3RoZXIKPiBuZXdlciBkcml2ZXJzIHRoYXQgZXhwbGFpbnMgaG93IHRoZSBoYXJkd2Fy ZSBiZWhhdmUgb24gZGlzYWJsZQo+IChpbmFjdGl2ZT8gSGlnaC1aPyBmcmVlemU/KSwgaWYgdGhl cmUgYXJlIGdsaXRjaGVzIHBvc3NpYmxlIHdoZW4KPiBzZXR0aW5ncyBhcmUgY2hhbmdlZCBvciBp ZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgcGVyaW9kIGlzIGNvbXBsZXRlZCBvbgo+IHJlY29uZmln dXJhdGlvbi4KCldpbGwgZG8uIE1pZ2h0IG5lZWQgYSBmZXcgbG9uZyBob3VycyB3aXRoIHRoZSBs b2dpYyBhbmFseXplciBhbmQgcG9raW5nIGF0CnRoZSBjb21tb24gY2xvY2sgZnJhbWV3b3JrIHRv IGNvdmVyIGFsbCBiYXNlcy4KCj4gCj4gPiArICoKPiA+ICsgKiBBdXRob3JzOgo+ID4gKyAqICAg ICBOaWNvbGFzIEZyYXR0YXJvbGkgPG5pY29sYXMuZnJhdHRhcm9saUBjb2xsYWJvcmEuY29tPgo+ ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiA+ ICsjaW5jbHVkZSA8bGludXgvcHdtLmg+Cj4gPiArI2luY2x1ZGUgPHNvYy9yb2NrY2hpcC9tZnB3 bS5oPgo+ID4gKwo+ID4gK3N0cnVjdCByb2NrY2hpcF9wd21fdjQgewo+ID4gKwlzdHJ1Y3Qgcm9j a2NoaXBfbWZwd21fZnVuYyAqcHdtZjsKPiA+ICsJc3RydWN0IHB3bV9jaGlwIGNoaXA7Cj4gPiAr fTsKPiA+ICsKPiA+ICtzdHJ1Y3Qgcm9ja2NoaXBfcHdtX3Y0X3dmIHsKPiA+ICsJdTMyIHBlcmlv ZDsKPiA+ICsJdTMyIGR1dHk7Cj4gPiArCXUzMiBvZmZzZXQ7Cj4gPiArCXU4IGVuYWJsZTsKPiA+ ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJvY2tjaGlwX3B3bV92NCAqdG9f cm9ja2NoaXBfcHdtX3Y0KHN0cnVjdCBwd21fY2hpcCAqY2hpcCkKPiA+ICt7Cj4gPiArCXJldHVy biBwd21jaGlwX2dldF9kcnZkYXRhKGNoaXApOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsg KiByb2NrY2hpcF9wd21fdjRfcm91bmRfc2luZ2xlIC0gY29udmVydCBhIFBXTSBwYXJhbWV0ZXIg dG8gaGFyZHdhcmUKPiA+ICsgKiBAcmF0ZTogY2xvY2sgcmF0ZSBvZiB0aGUgUFdNIGNsb2NrLCBh cyBwZXIgY2xrX2dldF9yYXRlCj4gPiArICogQGluX3ZhbDogcGFyYW1ldGVyIGluIG5hbm9zZWNv bmRzIHRvIGNvbnZlcnQKPiA+ICsgKiBAb3V0X3ZhbDogcG9pbnRlciB0byBsb2NhdGlvbiB3aGVy ZSBjb252ZXJ0ZWQgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQuCj4gPiArICoKPiA+ICsgKiBJZiBA b3V0X3ZhbCBpcyAlTlVMTCwgbm8gY2FsY3VsYXRpb24gaXMgcGVyZm9ybWVkLgo+ID4gKyAqCj4g PiArICogUmV0dXJuOgo+ID4gKyAqICogJTAgICAgICAgICAgLSBTdWNjZXNzCj4gPiArICogKiAl LUVPVkVSRkxPVyAtIFJlc3VsdCB0b28gbGFyZ2UgZm9yIHRhcmdldCB0eXBlCj4gPiArICovCj4g PiArc3RhdGljIGludCByb2NrY2hpcF9wd21fdjRfcm91bmRfc2luZ2xlKHVuc2lnbmVkIGxvbmcg cmF0ZSwgdTY0IGluX3ZhbCwKPiA+ICsJCQkJCXUzMiAqb3V0X3ZhbCkKPiA+ICt7Cj4gPiArCXU2 NCB0bXA7Cj4gPiArCj4gPiArCWlmICghb3V0X3ZhbCkKPiA+ICsJCXJldHVybiAwOwo+IAo+IFRo aXMgaXMgbmV2ZXIgaGl0LCBzbyBiZXR0ZXIgZHJvcCBpdC4KCldpbGwgZG8uCgo+IAo+ID4gKwl0 bXAgPSBtdWx0X2ZyYWMocmF0ZSwgaW5fdmFsLCBOU0VDX1BFUl9TRUMpOwo+ID4gKwlpZiAodG1w ID4gVTMyX01BWCkKPiA+ICsJCXJldHVybiAtRU9WRVJGTE9XOwo+IAo+IElzIGl0IGNsZWFyIHRo YXQgdGhpcyBjYW5ub3Qgb3ZlcmZsb3cgdGhlIHU2ND8KCkdvb2QgcG9pbnQuIG11bHRfZnJhYyBp biB0aGlzIGNhc2Ugd2lsbCBleHBhbmQgdG8KICB7CiAgCXVuc2lnbmVkIGxvbmcgeF8gPSAocmF0 ZSk7CiAgCXU2NCBuXyA9IChpbl92YWwpOwogIAlsb25nIGRfID0gKE5TRUNfUEVSX1NFQyk7CiAg CQogIAl1bnNpZ25lZCBsb25nIHEgPSB4XyAvIGRfOwogIAl1bnNpZ25lZCBsb25nIHIgPSB4XyAl IGRfOwogIAlxICogbl8gKyByICogbl8gLyBkXzsKICB9CgpXaGV0aGVyIG9yIG5vdCB0aGlzIHdv cmtzIG91dCBkZXBlbmRzIG9uIHRoZSBzaXplIG9mIHRoZSB1bnNpZ25lZCBsb25nCnR5cGUgdGhh dCBpdCBpbmZlcnMgZnJvbSByYXRlLCB3aGljaCB3aWxsIGJlIDY0IGJpdHMgb24gYXJtNjQgYW5k IGl0CnNob3VsZCBvbmx5IG92ZXJmbG93IGluIGV4dHJlbWUgY2FzZXMsIG9yIDMyIGJpdHMgb24g YXJtMzIgKHdoZXJlIHRoaXMKZHJpdmVyIG1heSBnZXQgdXNlZCBhcyB3ZWxsKSB3aGVyZSBpdCBn b2VzIGhvcnJpYmx5IHdyb25nIHdheSBtb3JlIG9mdGVuCmFzIGEgcmVzdWx0LgoKSSdsbCByZXBs YWNlIGl0IHdpdGggdGhlIGxlc3Mgc3VzcGVjdAoKICBtdWxfdTY0X3U2NF9kaXZfdTY0KHJhdGUs IGluX3ZhbCwgTlNFQ19QRVJfU0VDKQoKdG8gYXZvaWQgdGhlIEMgZm9vdGd1bnMuCgo+IAo+ID4g Kwkqb3V0X3ZhbCA9IHRtcDsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4g Ky8qKgo+ID4gKyAqIHJvY2tjaGlwX3B3bV92NF9yb3VuZF9wYXJhbXMgLSBjb252ZXJ0IFBXTSBw YXJhbWV0ZXJzIHRvIGhhcmR3YXJlCj4gPiArICogQHJhdGU6IFBXTSBjbG9jayByYXRlIHRvIGRv IHRoZSBjYWxjdWxhdGlvbnMgYXQKPiA+ICsgKiBAZHV0eTogUFdNIGR1dHkgY3ljbGUgaW4gbmFu b3NlY29uZHMKPiA+ICsgKiBAcGVyaW9kOiBQV00gcGVyaW9kIGluIG5hbm9zZWNvbmRzCj4gPiAr ICogQG9mZnNldDogUFdNIG9mZnNldCBpbiBuYW5vc2Vjb25kcwo+ID4gKyAqIEBvdXRfZHV0eTog cG9pbnRlciB0byB3aGVyZSB0aGUgcm91bmRlZCBkdXR5IHZhbHVlIHNob3VsZCBiZSBzdG9yZWQK PiA+ICsgKiAgICAgICAgICAgIGlmIE5VTEwsIGRvbid0IGNhbGN1bGF0ZSBvciBzdG9yZSBpdAo+ ID4gKyAqIEBvdXRfcGVyaW9kOiBwb2ludGVyIHRvIHdoZXJlIHRoZSByb3VuZGVkIHBlcmlvZCB2 YWx1ZSBzaG91bGQgYmUgc3RvcmVkCj4gPiArICogICAgICAgICAgICAgIGlmIE5VTEwsIGRvbid0 IGNhbGN1bGF0ZSBvciBzdG9yZSBpdAo+ID4gKyAqIEBvdXRfb2Zmc2V0OiBwb2ludGVyIHRvIHdo ZXJlIHRoZSByb3VuZGVkIG9mZnNldCB2YWx1ZSBzaG91bGQgYmUgc3RvcmVkCj4gPiArICogICAg ICAgICAgICAgIGlmIE5VTEwsIGRvbid0IGNhbGN1bGF0ZSBvciBzdG9yZSBpdAo+ID4gKyAqCj4g PiArICogQ29udmVydCBuYW5vc2Vjb25kLWJhc2VkIGR1dHkvcGVyaW9kL29mZnNldCBwYXJhbWV0 ZXJzIHRvIHRoZSBQV00gaGFyZHdhcmUncwo+ID4gKyAqIG5hdGl2ZSByb3VuZGVkIHJlcHJlc2Vu dGF0aW9uIGluIG51bWJlciBvZiBjeWNsZXMgYXQgY2xvY2sgcmF0ZSBAcmF0ZS4gSWYgYW4KPiA+ ICsgKiBvdXRfIHBhcmFtZXRlciBpcyBhIE5VTEwgcG9pbnRlciwgdGhlIGNvcnJlc3BvbmRpbmcg cGFyYW1ldGVyIHdpbGwgbm90IGJlCj4gPiArICogY2FsY3VsYXRlZCBvciBzdG9yZWQuIFNob3Vs ZCBhbiBvdmVyZmxvdyBlcnJvciBvY2N1ciBmb3IgYW55IG9mIHRoZQo+ID4gKyAqIHBhcmFtZXRl cnMsIGFzc3VtZSB0aGUgZGF0YSBhdCBhbGwgdGhlIG91dF8gbG9jYXRpb25zIGlzIGludmFsaWQg YW5kIG1heSBub3QKPiA+ICsgKiBldmVuIGhhdmUgYmVlbiB0b3VjaGVkIGF0IGFsbC4KPiA+ICsg Kgo+ID4gKyAqIFJldHVybjoKPiA+ICsgKiAqICUwICAgICAgICAgIC0gU3VjY2Vzcwo+ID4gKyAq ICogJS1FT1ZFUkZMT1cgLSBPbmUgb2YgdGhlIHJlc3VsdHMgaXMgdG9vIGxhcmdlIGZvciB0aGUg UFdNIGhhcmR3YXJlCj4gPiArICovCj4gPiArc3RhdGljIGludCByb2NrY2hpcF9wd21fdjRfcm91 bmRfcGFyYW1zKHVuc2lnbmVkIGxvbmcgcmF0ZSwgdTY0IGR1dHksCj4gPiArCQkJCQl1NjQgcGVy aW9kLCB1NjQgb2Zmc2V0LCB1MzIgKm91dF9kdXR5LAo+ID4gKwkJCQkJdTMyICpvdXRfcGVyaW9k LCB1MzIgKm91dF9vZmZzZXQpCj4gPiArewo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlyZXQg PSByb2NrY2hpcF9wd21fdjRfcm91bmRfc2luZ2xlKHJhdGUsIGR1dHksIG91dF9kdXR5KTsKPiA+ ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCXJldCA9IHJvY2tjaGlw X3B3bV92NF9yb3VuZF9zaW5nbGUocmF0ZSwgcGVyaW9kLCBvdXRfcGVyaW9kKTsKPiA+ICsJaWYg KHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCXJldCA9IHJvY2tjaGlwX3B3bV92 NF9yb3VuZF9zaW5nbGUocmF0ZSwgb2Zmc2V0LCBvdXRfb2Zmc2V0KTsKPiA+ICsJaWYgKHJldCkK PiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaW50IHJvY2tjaGlwX3B3bV92NF9yb3VuZF93Zl90b2h3KHN0cnVjdCBwd21fY2hp cCAqY2hpcCwKPiA+ICsJCQkJCSBzdHJ1Y3QgcHdtX2RldmljZSAqcHdtLAo+ID4gKwkJCQkJIGNv bnN0IHN0cnVjdCBwd21fd2F2ZWZvcm0gKndmLAo+ID4gKwkJCQkJIHZvaWQgKl93Zmh3KQo+ID4g K3sKPiA+ICsJc3RydWN0IHJvY2tjaGlwX3B3bV92NCAqcGMgPSB0b19yb2NrY2hpcF9wd21fdjQo Y2hpcCk7Cj4gPiArCXN0cnVjdCByb2NrY2hpcF9wd21fdjRfd2YgKndmaHcgPSBfd2ZodzsKPiA+ ICsJdW5zaWduZWQgbG9uZyByYXRlOwo+ID4gKwlpbnQgcmV0ID0gMDsKPiA+ICsKPiA+ICsJLyog V2UgZG8gbm90IHdhbnQgY2hvc2VuX2NsayB0byBjaGFuZ2Ugb3V0IGZyb20gdW5kZXIgdXMgaGVy ZSAqLwo+ID4gKwlyZXQgPSBtZnB3bV9hY3F1aXJlKHBjLT5wd21mKTsKPiA+ICsJaWYgKHJldCkK PiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4gPiArCXJhdGUgPSBtZnB3bV9jbGtfZ2V0X3JhdGUo cGMtPnB3bWYtPnBhcmVudCk7Cj4gPiArCj4gPiArCXJldCA9IHJvY2tjaGlwX3B3bV92NF9yb3Vu ZF9wYXJhbXMocmF0ZSwgd2YtPmR1dHlfbGVuZ3RoX25zLAo+ID4gKwkJCQkJICAgd2YtPnBlcmlv ZF9sZW5ndGhfbnMsCj4gPiArCQkJCQkgICB3Zi0+ZHV0eV9vZmZzZXRfbnMsICZ3Zmh3LT5kdXR5 LAo+ID4gKwkJCQkJICAgJndmaHctPnBlcmlvZCwgJndmaHctPm9mZnNldCk7Cj4gPiArCj4gPiAr CWlmICh3Zi0+cGVyaW9kX2xlbmd0aF9ucyA+IDApCj4gPiArCQl3Zmh3LT5lbmFibGUgPSBQV01W NF9FTl9CT1RIX01BU0s7Cj4gPiArCWVsc2UKPiA+ICsJCXdmaHctPmVuYWJsZSA9IDA7Cj4gPiAr Cj4gPiArCWRldl9kYmcoJmNoaXAtPmRldiwgInRvaHc6IGR1dHkgPSAldSwgcGVyaW9kID0gJXUs IG9mZnNldCA9ICV1LCByYXRlICVsdVxuIiwKPiA+ICsJCXdmaHctPmR1dHksIHdmaHctPnBlcmlv ZCwgd2Zody0+b2Zmc2V0LCByYXRlKTsKPiA+ICsKPiA+ICsJbWZwd21fcmVsZWFzZShwYy0+cHdt Zik7Cj4gPiArCXJldHVybiByZXQ7Cj4gCj4gVGhpcyBpcyB3cm9uZy4gSWYgYSB0b28gaGlnaCB2 YWx1ZSBmb3IgKHNheSkgcGVyaW9kX2xlbmd0aF9ucyBpcwo+IHJlcXVlc3RlZCwgeW91J3JlIHN1 cHBvc2VkIHRvIGNvbmZpZ3VyZSB0aGUgbWF4aW1hbCBwb3NzaWJsZQo+IHBlcmlvZF9sZW5ndGgg YW5kIG5vdCByZXR1cm4gYSBmYWlsdXJlLgoKQWNrLiBXaGF0IGlmIG9mZnNldCA+IHBlcmlvZCAt IGR1dHkgaXMgcmVxdWVzdGVkPyBTaG91bGQgSSBqdXN0IHNhdHVyYXRlIGl0CnRvIHBlcmlvZCAt IGR1dHkgaW4gdGhhdCBjYXNlPwoKPiAKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCByb2Nr Y2hpcF9wd21fdjRfcm91bmRfd2ZfZnJvbWh3KHN0cnVjdCBwd21fY2hpcCAqY2hpcCwKPiA+ICsJ CQkJCSAgIHN0cnVjdCBwd21fZGV2aWNlICpwd20sCj4gPiArCQkJCQkgICBjb25zdCB2b2lkICpf d2ZodywKPiA+ICsJCQkJCSAgIHN0cnVjdCBwd21fd2F2ZWZvcm0gKndmKQo+ID4gK3sKPiA+ICsJ c3RydWN0IHJvY2tjaGlwX3B3bV92NCAqcGMgPSB0b19yb2NrY2hpcF9wd21fdjQoY2hpcCk7Cj4g PiArCWNvbnN0IHN0cnVjdCByb2NrY2hpcF9wd21fdjRfd2YgKndmaHcgPSBfd2ZodzsKPiA+ICsJ dW5zaWduZWQgbG9uZyByYXRlOwo+ID4gKwlpbnQgcmV0ID0gMDsKPiA+ICsKPiA+ICsJLyogV2Ug ZG8gbm90IHdhbnQgY2hvc2VuX2NsayB0byBjaGFuZ2Ugb3V0IGZyb20gdW5kZXIgdXMgaGVyZSAq Lwo+IAo+IFRoaXMgaXMgYWxzbyB0cnVlIHdoaWxlIHRoZSBQV00gaXMgZW5hYmxlZC4gCj4gCj4g PiArCXJldCA9IG1mcHdtX2FjcXVpcmUocGMtPnB3bWYpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJ cmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJcmF0ZSA9IG1mcHdtX2Nsa19nZXRfcmF0ZShwYy0+cHdt Zi0+cGFyZW50KTsKPiAKPiBXaHkgaXNuJ3QgdGhhdCBhIHByb3BlciBjbG9jayB0aGF0IHlvdSBj YW4gY2FsbCBjbGtfZ2V0X3JhdGUoKSAoYW5kCj4gY2xrX3JhdGVfZXhjbHVzaXZlX2dldCgpKSBm b3I/CgpCZWNhdXNlIEkgZGlkbid0IGtub3cgY2xrLW11eC5jIGV4aXN0ZWQgOiggQnV0IGV2ZW4g d2l0aCBpdCwgSSdtIG5vdCBzdXJlCmlmIGxldHRpbmcgbWZwd20gZnVuY3Rpb24gZHJpdmVycyB0 b3VjaCB0aGUgY2xrIGRpcmVjdGx5IGlzIGEgZ29vZCBpZGVhLAphcyB0aGlzIGVpdGhlciBtZWFu cyBzdG9yaW5nIGl0IGluIHRoZWlyIHB3bWYgc3RydWN0IG9yIG1ha2luZyB0aGUgbWVtYmVycwpv ZiB0aGUgbWZwd20gc3RydWN0IHBhcnQgb2YgdGhlIHNoYXJlZCBoZWFkZXIuCgo+IAo+ID4gKwkv KiBMZXQncyBhdm9pZCBhIGNvb2wgZGl2aXNpb24tYnktemVybyBpZiB0aGUgY2xvY2sncyBidXN0 ZWQuICovCj4gPiArCWlmICghcmF0ZSkgewo+ID4gKwkJcmV0ID0gLUVJTlZBTDsKPiA+ICsJCWdv dG8gb3V0X21mcHdtX3JlbGVhc2U7Cj4gPiArCX0KPiA+ICsKPiA+ICsJd2YtPmR1dHlfbGVuZ3Ro X25zID0gbXVsdF9mcmFjKHdmaHctPmR1dHksIE5TRUNfUEVSX1NFQywgcmF0ZSk7Cj4gPiArCj4g PiArCWlmIChwd212NF9pc19lbmFibGVkKHdmaHctPmVuYWJsZSkpCj4gPiArCQl3Zi0+cGVyaW9k X2xlbmd0aF9ucyA9IG11bHRfZnJhYyh3Zmh3LT5wZXJpb2QsIE5TRUNfUEVSX1NFQywKPiA+ICsJ CQkJCQkgcmF0ZSk7Cj4gPiArCWVsc2UKPiA+ICsJCXdmLT5wZXJpb2RfbGVuZ3RoX25zID0gMDsK PiA+ICsKPiA+ICsJd2YtPmR1dHlfb2Zmc2V0X25zID0gbXVsdF9mcmFjKHdmaHctPm9mZnNldCwg TlNFQ19QRVJfU0VDLCByYXRlKTsKCk5vdGU6IEknbGwgYWxzbyBuZWVkIHRvIHJlcGxhY2UgYWxs IHRoZSBtdWx0X2ZyYWMncyBoZXJlIEkgdGhpbmssIGFzIHRoZQptYWNybyBpbmZlcnMgdTMyIGFz IHRoZSByZXN1bHQgdHlwZSBoZXJlLCB3aGljaCBpcyBuZWVkbGVzc2x5IHJlc3RyaWN0aXZlCmFu ZCBwcm9iYWJseSBwcm9uZSB0byBvdmVyZmxvd2luZy4KCj4gPiArCj4gPiArCWRldl9kYmcoJmNo aXAtPmRldiwgImZyb21odzogZHV0eSA9ICVsbHUsIHBlcmlvZCA9ICVsbHUsIG9mZnNldCA9ICVs bHVcbiIsCj4gPiArCQl3Zi0+ZHV0eV9sZW5ndGhfbnMsIHdmLT5wZXJpb2RfbGVuZ3RoX25zLCB3 Zi0+ZHV0eV9vZmZzZXRfbnMpOwo+IAo+IEluIG15IGV4cGVyaWVuY2UgaXQndCBoZWxwZnVsIHRv IGluY2x1ZGUgcmF0ZSBpbiB0aGUgb3V0cHV0IGhlcmUuCgpXaWxsIGRvLgoKPiAKPiA+ICtvdXRf bWZwd21fcmVsZWFzZToKPiA+ICsJbWZwd21fcmVsZWFzZShwYy0+cHdtZik7Cj4gPiArCXJldHVy biByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgcm9ja2NoaXBfcHdtX3Y0X3JlYWRf d2Yoc3RydWN0IHB3bV9jaGlwICpjaGlwLCBzdHJ1Y3QgcHdtX2RldmljZSAqcHdtLAo+ID4gKwkJ CQkgICB2b2lkICpfd2ZodykKPiA+ICt7Cj4gPiArCXN0cnVjdCByb2NrY2hpcF9wd21fdjQgKnBj ID0gdG9fcm9ja2NoaXBfcHdtX3Y0KGNoaXApOwo+ID4gKwlzdHJ1Y3Qgcm9ja2NoaXBfcHdtX3Y0 X3dmICp3Zmh3ID0gX3dmaHc7Cj4gPiArCWludCByZXQgPSAwOwo+ID4gKwo+ID4gKwo+ID4gKwly ZXQgPSBtZnB3bV9hY3F1aXJlKHBjLT5wd21mKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVy biByZXQ7Cj4gPiArCj4gPiArCXdmaHctPnBlcmlvZCA9IG1mcHdtX3JlZ19yZWFkKHBjLT5wd21m LT5iYXNlLCBQV01WNF9SRUdfUEVSSU9EKTsKPiA+ICsJd2Zody0+ZHV0eSA9IG1mcHdtX3JlZ19y ZWFkKHBjLT5wd21mLT5iYXNlLCBQV01WNF9SRUdfRFVUWSk7Cj4gPiArCXdmaHctPm9mZnNldCA9 IG1mcHdtX3JlZ19yZWFkKHBjLT5wd21mLT5iYXNlLCBQV01WNF9SRUdfT0ZGU0VUKTsKPiA+ICsJ d2Zody0+ZW5hYmxlID0gbWZwd21fcmVnX3JlYWQocGMtPnB3bWYtPmJhc2UsIFBXTVY0X1JFR19F TkFCTEUpICYgUFdNVjRfRU5fQk9USF9NQVNLOwo+ID4gKwo+ID4gKwltZnB3bV9yZWxlYXNlKHBj LT5wd21mKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBp bnQgcm9ja2NoaXBfcHdtX3Y0X3dyaXRlX3dmKHN0cnVjdCBwd21fY2hpcCAqY2hpcCwgc3RydWN0 IHB3bV9kZXZpY2UgKnB3bSwKPiA+ICsJCQkJICAgIGNvbnN0IHZvaWQgKl93Zmh3KQo+ID4gK3sK PiA+ICsJc3RydWN0IHJvY2tjaGlwX3B3bV92NCAqcGMgPSB0b19yb2NrY2hpcF9wd21fdjQoY2hp cCk7Cj4gPiArCWNvbnN0IHN0cnVjdCByb2NrY2hpcF9wd21fdjRfd2YgKndmaHcgPSBfd2ZodzsK PiA+ICsJYm9vbCB3YXNfZW5hYmxlZCA9IGZhbHNlOwo+ID4gKwlpbnQgcmV0ID0gMDsKPiA+ICsK PiA+ICsJcmV0ID0gbWZwd21fYWNxdWlyZShwYy0+cHdtZik7Cj4gPiArCWlmIChyZXQpCj4gPiAr CQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwl3YXNfZW5hYmxlZCA9IHB3bXY0X2lzX2VuYWJsZWQo bWZwd21fcmVnX3JlYWQocGMtPnB3bWYtPmJhc2UsCj4gPiArCQkJCQkJICAgICAgUFdNVjRfUkVH X0VOQUJMRSkpOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiAiQnV0IE5pY29sYXMiLCB5b3UgYXNr IHdpdGggdmFsaWQgY29uY2VybnMsICJ3aHkgd291bGQgeW91IGVuYWJsZSB0aGUKPiA+ICsJICog UFdNIGJlZm9yZSBzZXR0aW5nIGFsbCB0aGUgcGFyYW1ldGVyIHJlZ2lzdGVycz8iCj4gCj4gRnVu bnksIEkgaGFkIHRoaXMgdGhvdWdodCBhbHJlYWQgZm9yIG1mcHdtX2FjcXVpcmUoKSBhYm92ZS4g RG8geW91IGFsc28KPiBuZWVkIHRoYXQgaWYgd2Zody0+ZW5hYmxlID09IDA/CgpUaGUgb25seSB0 aGluZyBtZnB3bV9hY3F1aXJlIGRvZXMgaXMgY2hlY2sgdGhhdCB0aGlzIGRyaXZlciBpcyB0aGUg b25seQpvbmUgdXNpbmcgdGhlIGhhcmR3YXJlLCBhbmQgZW5hYmxpbmcgdGhlIGJ1cyBjbGsgc28g cmVnaXN0ZXJzIGNhbiBiZQphY2Nlc3NlZC4gVGhlIGNsb2NrIHRoYXQgdGhlIFBXTSBzaWduYWwg aXMgZGVyaXZlZCBmcm9tLCBhcyB3ZWxsIGFzCmVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgUFdNLCBp cyBhIHNlcGFyYXRlIHN0ZXAuIEluIHRoaXMgY2FzZSwgd2UgbmVlZAp0byBoYXZlIGFjcXVpcmVk IG1mcHdtIGJlZm9yZWhhbmQgdG8gZG8gdGhlIHJlZyByZWFkIGZvciB3YXNfZW5hYmxlZC4KCj4g Cj4gPiArCSAqIEV4Y2VsbGVudCBxdWVzdGlvbiwgTXIuIFJlYWRlciBNLiBTdHJhd21hbiEgVGhl IFJLMzU3NiBUUk0gUGFydCAxCj4gPiArCSAqIFNlY3Rpb24gMzQuNi4zIHNwZWNpZmllcyB0aGF0 IHRoaXMgaXMgdGhlIGludGVuZGVkIG9yZGVyIG9mIHdyaXRlcy4KPiA+ICsJICogRG9pbmcgdGhl IFBXTV9FTiBhbmQgUFdNX0NMS19FTiB3cml0ZXMgYWZ0ZXIgdGhlIHBhcmFtcyBidXQgYmVmb3Jl Cj4gPiArCSAqIHRoZSBDVFJMX1VQREFURV9FTiwgb3IgZXZlbiBhZnRlciB0aGUgQ1RSTF9VUERB VEVfRU4sIHJlc3VsdHMgaW4KPiA+ICsJICogZXJyYXRpYyBiZWhhdmlvdXIgd2hlcmUgcmVwZWF0 ZWQgdHVybmluZyBvbiBhbmQgb2ZmIG9mIHRoZSBQV00gbWF5Cj4gPiArCSAqIG5vdCB0dXJuIGl0 IG9mZiB1bmRlciBhbGwgY2lyY3Vtc3RhbmNlcy4gVGhpcyBpcyBhbHNvIHdoeSB3ZSBkb24ndAo+ ID4gKwkgKiB1c2UgcmVsYXhlZCB3cml0ZXM7IGl0J3Mgbm90IHdvcnRoIHRoZSBmb290Z3VuLgo+ ID4gKwkgKi8KPiA+ICsJbWZwd21fcmVnX3dyaXRlKHBjLT5wd21mLT5iYXNlLCBQV01WNF9SRUdf RU5BQkxFLAo+ID4gKwkJCVJFR19VUERBVEVfV0Uod2Zody0+ZW5hYmxlLCAwLCAxKSk7Cj4gPiAr Cj4gPiArCW1mcHdtX3JlZ193cml0ZShwYy0+cHdtZi0+YmFzZSwgUFdNVjRfUkVHX1BFUklPRCwg d2Zody0+cGVyaW9kKTsKPiA+ICsJbWZwd21fcmVnX3dyaXRlKHBjLT5wd21mLT5iYXNlLCBQV01W NF9SRUdfRFVUWSwgd2Zody0+ZHV0eSk7Cj4gPiArCW1mcHdtX3JlZ193cml0ZShwYy0+cHdtZi0+ YmFzZSwgUFdNVjRfUkVHX09GRlNFVCwgd2Zody0+b2Zmc2V0KTsKPiA+ICsKPiA+ICsJbWZwd21f cmVnX3dyaXRlKHBjLT5wd21mLT5iYXNlLCBQV01WNF9SRUdfQ1RSTCwgUFdNVjRfQ1RSTF9DT05U X0ZMQUdTKTsKPiA+ICsKPiA+ICsJLyogQ29tbWl0IG5ldyBjb25maWd1cmF0aW9uIHRvIGhhcmR3 YXJlIG91dHB1dC4gKi8KPiA+ICsJbWZwd21fcmVnX3dyaXRlKHBjLT5wd21mLT5iYXNlLCBQV01W NF9SRUdfRU5BQkxFLAo+ID4gKwkJCVBXTVY0X0NUUkxfVVBEQVRFX0VOKDEpKTsKPiAKPiBQV01W NF9DVFJMX1VQREFURV9FTiBpcyBhbHdheXMgb25seSB1c2VkIHdpdGggMSBhcyBwYXJhbWV0ZXIs IHNvIG1heWJlCj4gc2ltcGxpZnkgdGhlIGRlZmluaXRpb24gdG8gQklUKDIpPwoKV2lsbCBkby4K Cj4gCj4gPiArCWlmIChwd212NF9pc19lbmFibGVkKHdmaHctPmVuYWJsZSkpIHsKPiA+ICsJCWlm ICghd2FzX2VuYWJsZWQpIHsKPiA+ICsJCQlkZXZfZGJnKCZjaGlwLT5kZXYsICJlbmFibGluZyBQ V00gb3V0cHV0XG4iKTsKPiA+ICsJCQlyZXQgPSBtZnB3bV9wd21jbGtfZW5hYmxlKHBjLT5wd21m KTsKPiA+ICsJCQlpZiAocmV0KQo+ID4gKwkJCQlnb3RvIGVycl9tZnB3bV9yZWxlYXNlOwo+ID4g Kwo+ID4gKwkJCS8qCj4gPiArCQkJICogT3V0cHV0IHNob3VsZCBiZSBvbiBub3csIGFjcXVpcmUg ZGV2aWNlIHRvIGd1YXJhbnRlZQo+ID4gKwkJCSAqIGV4Y2x1c2lvbiB3aXRoIG90aGVyIGRldmlj ZSBmdW5jdGlvbnMgd2hpbGUgaXQncyBvbi4KPiA+ICsJCQkgKi8KPiA+ICsJCQlyZXQgPSBtZnB3 bV9hY3F1aXJlKHBjLT5wd21mKTsKPiA+ICsJCQlpZiAocmV0KQo+ID4gKwkJCQlnb3RvIGVycl9t ZnB3bV9yZWxlYXNlOwo+IAo+IEFsdGVybmF0aXZlbHkgdG8gY2FsbGluZyBtZnB3bV9hY3F1aXJl IG9uY2UgbW9yZSwgeW91IGNvdWxkIGFsc28gc2tpcAo+IHRoZSBtZnB3bV9yZWxlYXNlKCkgYmVs b3cuIFRoYXQgbWFrZXMgdGhlIGNvZGUgYSBiaXQgbW9yZSBjb21wbGljYXRlZCwKPiBidXQgYWxz byByZWR1Y2VzIHRoZSBudW1iZXIgb2YgcG9zc2libGUgZmFpbGluZyBwb2ludHMuCj4gCgpJIHRo aW5rIEkgZGlkIHRoaXMgYXQgc29tZSBzdGFnZSBidXQgaXQnZCBqdXN0IG5lY2Vzc2l0YXRlIGR1 cGxpY2F0aW5nIHRoZQppZiBjb25kaXRpb24gYXQgdGhlIHJlbGVhc2UgcG9pbnQuIFRoZSBlbHNl LWlmIGJyYW5jaCBqdXN0IGRvd24gYmVsb3cgc3RpbGwKbmVlZHMgdG8gZXhpc3Qgc2luY2Ugd2Ug bmVlZCB0byBub3QganVzdCBiYWxhbmNlIHRoaXMgZnVuY3Rpb24ncyBhY3F1aXJlLApidXQgdGhl IGZhY3QgdGhhdCB3ZSBrZXB0IGl0IGFjcXVpcmVkIHdoZW4gd2UgdHVybmVkIGl0IG9uIHNvIHdl IG5lZWQgdG8KcmVsZWFzZSBpdCBhbiBleHRyYSB0aW1lIHdoZW4gd2UgdHVybiBpdCBvZmYuIEkg ZG9uJ3QgdGhpbmsgY2hhbmdpbmcgdGhpcwp0byBlbGltaW5hdGUgdGhlIGFkZGl0aW9uYWwgYWNx dWlyZSBjYWxsIGhhcyBjbGVhciBiZW5lZml0cyBoZXJlLgoKPiA+ICsJCX0KPiA+ICsJfSBlbHNl IGlmICh3YXNfZW5hYmxlZCkgewo+ID4gKwkJZGV2X2RiZygmY2hpcC0+ZGV2LCAiZGlzYWJsaW5n IFBXTSBvdXRwdXRcbiIpOwo+ID4gKwkJbWZwd21fcHdtY2xrX2Rpc2FibGUocGMtPnB3bWYpOwo+ ID4gKwkJLyogT3V0cHV0IGlzIG9mZiBub3csIGV4dHJhIHJlbGVhc2UgdG8gYmFsYW5jZSBleHRy YSBhY3F1aXJlICovCj4gPiArCQltZnB3bV9yZWxlYXNlKHBjLT5wd21mKTsKPiA+ICsJfQo+ID4g Kwo+ID4gK2Vycl9tZnB3bV9yZWxlYXNlOgo+ID4gKwltZnB3bV9yZWxlYXNlKHBjLT5wd21mKTsK PiA+ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArLyogV2Ugc3RhdGUgdGhl IFBXTSBjaGlwIGlzIGF0b21pYywgc28gbm9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIHNs ZWVwLiAqLwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHdtX29wcyByb2NrY2hpcF9wd21fdjRf b3BzID0gewo+ID4gKwkuc2l6ZW9mX3dmaHcgPSBzaXplb2Yoc3RydWN0IHJvY2tjaGlwX3B3bV92 NF93ZiksCj4gPiArCS5yb3VuZF93YXZlZm9ybV90b2h3ID0gcm9ja2NoaXBfcHdtX3Y0X3JvdW5k X3dmX3RvaHcsCj4gPiArCS5yb3VuZF93YXZlZm9ybV9mcm9taHcgPSByb2NrY2hpcF9wd21fdjRf cm91bmRfd2ZfZnJvbWh3LAo+ID4gKwkucmVhZF93YXZlZm9ybSA9IHJvY2tjaGlwX3B3bV92NF9y ZWFkX3dmLAo+ID4gKwkud3JpdGVfd2F2ZWZvcm0gPSByb2NrY2hpcF9wd21fdjRfd3JpdGVfd2Ys Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHJvY2tjaGlwX3B3bV92NF9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0IHJvY2tjaGlwX21m cHdtX2Z1bmMgKnB3bWYgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOwo+ID4gKwlzdHJ1 Y3Qgcm9ja2NoaXBfcHdtX3Y0ICpwYzsKPiA+ICsJc3RydWN0IHB3bV9jaGlwICpjaGlwOwo+ID4g KwlpbnQgcmV0Owo+ID4gKwo+ID4gKwljaGlwID0gZGV2bV9wd21jaGlwX2FsbG9jKCZwZGV2LT5k ZXYsIDEsIHNpemVvZigqcGMpKTsKPiA+ICsJaWYgKElTX0VSUihjaGlwKSkKPiA+ICsJCXJldHVy biBQVFJfRVJSKGNoaXApOwo+ID4gKwo+ID4gKwlwYyA9IHRvX3JvY2tjaGlwX3B3bV92NChjaGlw KTsKPiA+ICsJcGMtPnB3bWYgPSBwd21mOwo+ID4gKwo+ID4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0 YShwZGV2LCBwYyk7Cj4gPiArCj4gPiArCWNoaXAtPm9wcyA9ICZyb2NrY2hpcF9wd21fdjRfb3Bz Owo+ID4gKwljaGlwLT5hdG9taWMgPSB0cnVlOwo+ID4gKwo+IAo+IElmIHRoZSBQV00gaXMgYWxy ZWFkeSBlbmFibGVkIHlvdSBiZXR0ZXIgY2FsbCBtZnB3bV9hY3F1aXJlKCkgaGVyZT8KCkFzIGlu LCBpZiB0aGUgaGFyZHdhcmUgc2V0IHRoZSBQV00gb24gYmVmb3JlIHRoZSBkcml2ZXIgcHJvYmVk PyBJIGhhZG4ndApjb25zaWRlcmVkIHRoaXMgY2FzZSwgYW5kIHdpbGwgbmVlZCB0byB0aGluayBh Ym91dCBpdC4gQ291bGQgdmVyeSB3ZWxsIGJlCmEgcG9zc2liaWxpdHkgYXMgdS1ib290IGRvZXMg dGhpbmdzIGJlZm9yZSB1cy4KCj4gCj4gPiArCXJldCA9IHB3bWNoaXBfYWRkKGNoaXApOwo+ID4g KwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJnBkZXYtPmRldiwgcmV0LCAi ZmFpbGVkIHRvIGFkZCBQV00gY2hpcFxuIik7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgdm9pZCByb2NrY2hpcF9wd21fdjRfcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiArewo+ID4gKwlzdHJ1Y3Qgcm9ja2NoaXBfcHdtX3Y0ICpw YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+IAo+IAlwd21jaGlwX3JlbW92ZSgpPwoK R29vZCBjYXRjaCwgdGhhbmtzLiBXaWxsIGFkZC4KCj4gCj4gPiArCW1mcHdtX3JlbW92ZV9mdW5j KHBjLT5wd21mKTsKPiAKPiBNYXliZSBtYWtlIHRoaXMgYSBkZXZtIGZ1bmN0aW9uPwoKSSB2YWd1 ZWx5IHJlY2FsbCB0cnlpbmcgdGhhdCBhbmQgcnVubmluZyBpbnRvIGlzc3VlcyB3aXRoIGl0IGJ1 dCBpdCdzCnBvc3NpYmxlIEknbSBtaXNyZW1lbWJlcmluZyB3aGljaCByZW1vdmUgY2F1c2VkIGlz c3Vlcy4KCj4gCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlX2lkIHJvY2tjaGlwX3B3bV92NF9pZHNbXSA9IHsKPiA+ICsJeyAubmFtZSA9ICJwd20t cm9ja2NoaXAtdjQiLCB9LAo+ID4gKwl7IC8qIHNlbnRpbmVsICovIH0KPiA+ICt9Owo+ID4gK01P RFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIHJvY2tjaGlwX3B3bV92NF9pZHMpOwo+ID4gKwo+ ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJvY2tjaGlwX3B3bV92NF9kcml2ZXIg PSB7Cj4gPiArCS5wcm9iZSA9IHJvY2tjaGlwX3B3bV92NF9wcm9iZSwKPiA+ICsJLnJlbW92ZSA9 IHJvY2tjaGlwX3B3bV92NF9yZW1vdmUsCj4gPiArCS5kcml2ZXIgPSB7Cj4gPiArCQkubmFtZSA9 ICJwd20tcm9ja2NoaXAtdjQiLAo+ID4gKwl9LAo+ID4gKwkuaWRfdGFibGUgPSByb2NrY2hpcF9w d21fdjRfaWRzLAo+ID4gK307Cj4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihyb2NrY2hpcF9w d21fdjRfZHJpdmVyKTsKPiA+ICsKPiA+ICtNT0RVTEVfQVVUSE9SKCJOaWNvbGFzIEZyYXR0YXJv bGkgPG5pY29sYXMuZnJhdHRhcm9saUBjb2xsYWJvcmEuY29tPiIpOwo+ID4gK01PRFVMRV9ERVND UklQVElPTigiUm9ja2NoaXAgUFdNdjQgRHJpdmVyIik7Cj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQ TCIpOwo+ID4gK01PRFVMRV9JTVBPUlRfTlMoIlJPQ0tDSElQX01GUFdNIik7Cj4gCj4gVGhlcmUg YXJlIGRpZmZlcmVudCB0YXN0ZXMsIGJ1dCBpZiB5b3UgYXNrIG1lIHRoYXQgTU9EVUxFX0lNUE9S VF9OUyBjYW4KPiBnbyBpbnRvIHRoZSBoZWFkZXIgZGVjbGFyaW5nIHRoZSBmdW5jdGlvbnMgZnJv bSB0aGF0IG5hbWVzcGFjZS4KPiAKPiBCZXN0IHJlZ2FyZHMKPiBVd2UKPiAKCktpbmQgcmVnYXJk cywKTmljb2xhcyBGcmF0dGFyb2xpCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkxpbnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hp cEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtcm9ja2NoaXAK