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 197A1C9832A for ; Tue, 29 Sep 2026 15:03:58 +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: Date:Cc:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=j+y3e1vsIANM44bv0kfQT827vhSJmvH/c1XBHlaVEI4=; b=l3Rj76sef2g7CL u/r7zpG0dygyeouoJEDToxwMZzVAGctZieq6ukgwD1tbdWhRH4mW3JSi3QvKInHc56vTEkomvP6/A G2u4P/viCavbBGjRNwtXlbOHXPrcBHEaLTTnU7NH8VhQ0/b7lNQ2mfzqMH0pYdgjf4DmDhIS7DLGJ luDB3TqI3/+7UnJWTlQ6henSoIojVJGXiEw4B3sCAQJXdM9OjqQrW4/Sz0SwFOQRbyKU52Au7qUXA u3OQIMdm/N70Lbl7zEKVJqIQb+yQ50ZAmn5J+xRgoFbCfFZ+jUzlwypV0Mj5nlHZ7CLW7b//VY9gj pd6uaR3IpzWGCtFd3gow==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xBZN7-00000003sRE-3Kei; Tue, 29 Sep 2026 15:03:57 +0000 Received: from smtp25.cstnet.cn ([159.226.251.25] helo=cstnet.cn) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xBZN4-00000003sQ0-3PwQ; Tue, 29 Sep 2026 15:03:56 +0000 Received: from edelgard.fodlan.icenowy.me (unknown [112.94.101.54]) by APP-05 (Coremail) with SMTP id zQCowAAHcz1B07tqcJGvCQ--.14055S2; Tue, 29 Sep 2026 23:03:31 +0800 (CST) Message-ID: <1b797958f15737a23e8aa03fbf70d63167fb29fe.camel@iscas.ac.cn> Subject: Re: [PATCH v4 15/20] drm/bridge: starfive: Add JH7110 HDMI controller driver From: Icenowy Zheng To: Michal Wilczynski , Vinod Koul , Neil Armstrong , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Andrzej Hajda , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Lee Jones , Andy Yan , Philipp Zabel , Emil Renner Berthing , Hal Feng , Michael Turquette , Stephen Boyd , Heiko Stuebner , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Dominique Belhachemi , Brian Masney , Jerome Brunet Cc: linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, mfd@lists.linux.dev, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-riscv@lists.infradead.org, Marek Szyprowski , Maud Spierings , Graham Markall , Chaoyi Chen , Joshua Peisach , Uwe =?ISO-8859-1?Q?Kleine-K=F6nig?= Date: Tue, 29 Sep 2026 23:03:29 +0800 In-Reply-To: <20260915-jh7110-clean-send-v4-15-f0e4fd6f2cc8@samsung.com> References: <20260915-jh7110-clean-send-v4-0-f0e4fd6f2cc8@samsung.com> <20260915-jh7110-clean-send-v4-15-f0e4fd6f2cc8@samsung.com> User-Agent: Evolution 3.58.3 MIME-Version: 1.0 X-CM-TRANSID: zQCowAAHcz1B07tqcJGvCQ--.14055S2 X-Coremail-Antispam: 1UD129KBjvAXoWfJr17KFW3tFykKFyxWr13twb_yoW8XryUKo Wftr13Zw4FyryfurWkC3W7CF1a9wsFyrs7Zay5trWDCa4jvr4ag34UtrZ8ua4xXF1SkryD Aw18JryfAFWIya4fn29KB7ZKAUJUUUU8529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UjIYCTnIWjp_UUUYh7k0a2IF6w4kM7kC6x804xWl14x267AKxVWrJVCq3wAFc2x0 x2IEx4CE42xK8VAvwI8IcIk0rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj4 1l84x0c7CEw4AK67xGY2AK021l84ACjcxK6xIIjxv20xvE14v26r4j6ryUM28EF7xvwVC0 I7IYx2IY6xkF7I0E14v26r4UJVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4 vEx4A2jsIEc7CjxVAFwI0_GcCE3s1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xv F2IEw4CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_Jrv_JF1lYx0Ex4A2jsIE14v26r1j6r 4UMcvjeVCFs4IE7xkEbVWUJVW8JwACjcxG0xvEwIxGrwACI402YVCY1x02628vn2kIc2xK xwCY1x0262kKe7AKxVWrXVW3AwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJV W8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF 1VAFwI0_Wrv_Gr1UMIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcV C0I7IYx2IY6xkF7I0E14v26r4UJVWxJr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF 0xvEx4A2jsIE14v26r4j6F4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr1j6F4UJbIYCTnIWI evJa73UjIFyTuYvjxU9SoXUUUUU X-Originating-IP: [112.94.101.54] X-CM-SenderInfo: x2kh0wp0lqwv3d6l2u1dvotugofq/ X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260929_080355_238929_A1166BBE X-CRM114-Status: GOOD ( 41.45 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org 5ZyoIDIwMjYtMDktMTXkuoznmoQgMTc6MzIgKzAyMDDvvIxNaWNoYWwgV2lsY3p5bnNraeWGmemB k++8mgo+IEFkZCB0aGUgSERNSSBjb250cm9sbGVyIChicmlkZ2UpIGRyaXZlciBmb3IgdGhlIFN0 YXJGaXZlIEpINzExMC4KPiAKPiBUaGlzIGRyaXZlciBiaW5kcyB0byB0aGUgc3RhcmZpdmUsamg3 MTEwLWlubm8taGRtaS1jb250cm9sbGVyIG5vZGUuCj4gSXQKPiBnZXRzIGl0cyByZWdpc3RlciBh Y2Nlc3MsIG1vZHVsZSBhbmQgYnVzIGNsb2NrcyBmcm9tIHZvdXRjcmcsIGFuZAo+IGNvbnN1bWVz IHRoZSBwaXhlbCBjbG9jayBhbmQgdGhlIFBIWSBmcm9tIGl0cyBoZG1pX3BoeSBzaWJsaW5nLgo+ IAo+IFRoZSBkcml2ZXIgY2FsbHMgdGhlIGdlbmVyaWMgaW5ub19oZG1pX3Byb2JlIGZ1bmN0aW9u LCB3aGljaCBwaWNrcyB1cAo+IHRoZSByZWdtYXAgc2hhcmVkIHdpdGggdGhlIFBIWSBmcm9tIHRo ZSBwYXJlbnQgZGV2aWNlIGFuZCByZWdpc3RlcnMgYQo+IERSTSBicmlkZ2UuIFRoZSAuZW5hYmxl IGhvb2sgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIFBIWSdzCj4gcGl4ZWwKPiBjbG9j ayByYXRlIHZpYSBjbGtfc2V0X3JhdGUoKSBhbmQgcG93ZXJpbmcgb24gdGhlIFBIWSB2aWEKPiBw aHlfcG93ZXJfb24oKS4KPiAKPiBUaGUgREM4MjAwIGhhcyB0d28gcGFuZWxzLCBlYWNoIGV4cG9z aW5nIGEgRFAgYW5kIGEgRFBJIGludGVyZmFjZSwKPiBhbmQgYQo+IG11eCBpbiB0aGUgdmlkZW8g b3V0cHV0IHN5c3RlbSBjb250cm9sbGVyIHBpY2tzIHdoaWNoIG9mIHRoZW0gZHJpdmVzCj4gdGhl Cj4gSERNSSB0cmFuc21pdHRlci4gSXQgY29tZXMgb3V0IG9mIHJlc2V0IG9uIHBhbmVsIDAgLyBE UEksIHdoaWNoCj4gaGFwcGVucwo+IHRvIGJlIHdoYXQgdGhlIGRlZmF1bHQgd2lyaW5nIG5lZWRz LCBzbyBub3RoaW5nIGhhcyBoYWQgdG8gcHJvZ3JhbSBpdAo+IHNvCj4gZmFyLiBEZXJpdmUgaXQg ZnJvbSB0aGUgcG9ydCBncmFwaCBpbnN0ZWFkLCB0YWtpbmcgdGhlIHBhbmVsIGZyb20gdGhlCj4g cmVtb3RlIHBvcnQgbnVtYmVyIGFuZCB0aGUgaW50ZXJmYWNlIGZyb20gdGhlIHJlbW90ZSBlbmRw b2ludCBudW1iZXIsCj4gc28KPiB0aGF0IGEgYm9hcmQgZGVzY3JpYmluZyBhIGRpZmZlcmVudCBv dXRwdXQgaXMgaG9ub3VyZWQuCj4gCj4gVGhlIGdlbmVyaWMgZHJpdmVyIGhvbGRzIHRoZSBjbG9j ayBpdCBsb29rcyB1cCBhcyB0aGUgcmVnaXN0ZXIgYWNjZXNzCj4gY2xvY2sgZW5hYmxlZCBmb3Ig aXRzIGxpZmV0aW1lLCBhbmQgZGVyaXZlcyB0aGUgRERDIGRpdmlkZXIgZnJvbSB0aGF0Cj4gY2xv Y2sncyByYXRlLCBzbyBwb2ludCBpdCBhdCB0aGUgc3lzdGVtIGNsb2NrLiBOYW1pbmcgdGhlIHBp eGVsIGNsb2NrCj4gdGhlcmUgaW5zdGVhZCB3b3VsZCBrZWVwIHRoZSBQSFkgcHJlLVBMTCBwb3dl cmVkIGZyb20gcHJvYmUgb253YXJkcwo+IGFuZAo+IHNpemUgdGhlIGRpdmlkZXIgZnJvbSB0aGUg d3JvbmcgcmF0ZS4KPiAKPiBUaGUgUEhZIGNhbiBvbmx5IGdlbmVyYXRlIHRoZSBkaXNjcmV0ZSBz ZXQgb2YgcGl4ZWwgY2xvY2tzIGRlc2NyaWJlZAo+IGJ5Cj4gaXRzIHByZS1QTEwgdGFibGUsIHNv IC5tb2RlX3ZhbGlkIHJlamVjdHMgYW55IG1vZGUgY2xrX3JvdW5kX3JhdGUoKQo+IGNhbm5vdCBz YXRpc2Z5LiBXaXRob3V0IGl0IHN1Y2ggYSBtb2RlIHdvdWxkIGJlIGFkdmVydGlzZWQgdG8KPiB1 c2Vyc3BhY2UKPiBhbmQgdGhlIG1vZGVzZXQgd291bGQgYXBwZWFyIHRvIHN1Y2NlZWQgd2hpbGUg dGhlIGRpc3BsYXkgc3RheWVkCj4gYmxhbmsuCj4gCj4gLmVuYWJsZSByZXR1cm5zIGVhcmx5IHdo ZW4gdGhlIHJhdGUgaXMgdW5zdXBwb3J0ZWQgb3IgdGhlIFBIWSBmYWlscwo+IHRvCj4gcG93ZXIg b24sIHNvIHRyYWNrIHdoZXRoZXIgdGhlIHBpeGVsIGNsb2NrIHdhcyBhY3R1YWxseSBlbmFibGVk IGFuZAo+IGxldAo+IC5kaXNhYmxlIHRlYXIgZG93biBvbmx5IHdoYXQgd2FzIGJyb3VnaHQgdXAs IG90aGVyd2lzZSB0aGUgY2xvY2sKPiByZWZjb3VudCB1bmRlcmZsb3dzLgo+IAo+IFRoZSBjbG9j a3MgYW5kIHRoZSByZXNldCBhcmUgdG9ybiBkb3duIHRocm91Z2ggZGV2bSByYXRoZXIgdGhhbiBm cm9tCj4gLnJlbW92ZSwgc28gdGhhdCB0aGV5IG91dGxpdmUgdGhlIGJyaWRnZSB0aGF0IGlubm9f aGRtaV9wcm9iZSgpIGFkZHMKPiB3aXRoCj4gZGV2bV9kcm1fYnJpZGdlX2FkZCgpLiBSZWxlYXNp bmcgdGhlbSBpbiAucmVtb3ZlIHJ1bnMgYmVmb3JlIGRldnJlcwo+IHVud2luZHMgYW5kIHdvdWxk IGxlYXZlIHRoZSBicmlkZ2UgcmVnaXN0ZXJlZCB3aXRoIGl0cyBjbG9ja3MgYWxyZWFkeQo+IGdh dGVkLgo+IAo+IFNpZ25lZC1vZmYtYnk6IE1pY2hhbCBXaWxjenluc2tpIDxtLndpbGN6eW5za2lA c2Ftc3VuZy5jb20+CgpgYGAKVGVzdGVkLWJ5OiBJY2Vub3d5IFpoZW5nIDx6aGVuZ3hpbmdkYUBp c2Nhcy5hYy5jbj4KYGBgCgpUaGFua3MsCkljZW5vd3kKCj4gLS0tCj4gwqBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL0tjb25maWfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAxMSArKwo+IMKgZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEg Kwo+IMKgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9qaDcxMTAtaW5uby1oZG1pLmMgfCAyOTcKPiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiDCoDMgZmlsZXMgY2hhbmdlZCwgMzA5IGlu c2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnCj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKPiBpbmRleAo+IDRhNTdkNDli NGM2ZDNhYjRiOTY1MjI4ODM1YjM3MmQxOTE2NDcxOTcuLjc1YjFjZjY3MjdkNWEzMjMxMGRjZjlm ZTU3Mwo+IDRkOTVlMTRlZWE4ZmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCj4gQEAgLTM1 OSw2ICszNTksMTcgQEAgY29uZmlnIERSTV9TT0xPTU9OX1NTRDI4MjUKPiDCoAnCoCBTYXkgTSBo ZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBoYXJkd2FyZSBhcyBhCj4gbW9kdWxlLgo+ IMKgCcKgIFRoZSBtb2R1bGUgd2lsbCBiZSBuYW1lZCAic3NkMjgyNSIuCj4gwqAKPiArY29uZmln IERSTV9TVEFSRklWRV9KSDcxMTBfSU5OT19IRE1JCj4gKwl0cmlzdGF0ZSAiU3RhcmZpdmUgSkg3 MTEwIElubm9zaWxpY29uIEhETUkgYnJpZGdlIgo+ICsJZGVwZW5kcyBvbiBPRgo+ICsJZGVwZW5k cyBvbiBBUkNIX1NUQVJGSVZFIHx8IENPTVBJTEVfVEVTVAo+ICsJc2VsZWN0IERSTV9JTk5PX0hE TUkKPiArCWhlbHAKPiArCcKgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgU3RhckZpdmUgSkg3MTEw IHNwZWNpZmljCj4gaW1wbGVtZW50YXRpb24KPiArCcKgIG9mIHRoZSBJbm5vc2lsaWNvbiBIRE1J IGNvbnRyb2xsZXIuCj4gKwnCoCBUaGlzIGRyaXZlciBhY3RzIGFzIGEgZ2x1ZSBsYXllciBiZXR3 ZWVuIHRoZSBKSDcxMTAgSERNSQo+IHN1YnN5c3RlbQo+ICsJwqAgcGFyZW50IGRyaXZlciBhbmQg dGhlIGdlbmVyaWMgSW5ub3NpbGljb24gSERNSSBicmlkZ2UKPiBkcml2ZXIuCj4gKwo+IMKgY29u ZmlnIERSTV9USElORV9USEM2M0xWRDEwMjQKPiDCoAl0cmlzdGF0ZSAiVGhpbmUgVEhDNjNMVkQx MDI0IExWRFMgZGVjb2RlciBicmlkZ2UiCj4gwqAJZGVwZW5kcyBvbiBPRgo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL01ha2VmaWxlCj4gaW5kZXgKPiAxNWNjODIxZDg1YjdlYTZmM2NkYzMxM2YzZTUyMWIwMjhk ZTU2N2Q3Li41ZDg0M2Y0YWQ3ZWQ1MGIyOGNiNzUyODZjNWUKPiAyMjc4OWQ5MWEwODM2IDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCj4gQEAgLTMwLDYgKzMwLDcgQEAgb2JqLSQoQ09ORklH X0RSTV9TSUxfU0lJODYyMCkgKz0gc2lsLXNpaTg2MjAubwo+IMKgb2JqLSQoQ09ORklHX0RSTV9T SUk5MDJYKSArPSBzaWk5MDJ4Lm8KPiDCoG9iai0kKENPTkZJR19EUk1fU0lJOTIzNCkgKz0gc2lp OTIzNC5vCj4gwqBvYmotJChDT05GSUdfRFJNX1NJTVBMRV9CUklER0UpICs9IHNpbXBsZS1icmlk Z2Uubwo+ICtvYmotJChDT05GSUdfRFJNX1NUQVJGSVZFX0pINzExMF9JTk5PX0hETUkpICs9IGpo NzExMC1pbm5vLWhkbWkubwo+IMKgb2JqLSQoQ09ORklHX0RSTV9TT0xPTU9OX1NTRDI4MjUpICs9 IHNzZDI4MjUubwo+IMKgb2JqLSQoQ09ORklHX0RSTV9USEVBRF9USDE1MjBfRFdfSERNSSkgKz0g dGgxNTIwLWR3LWhkbWkubwo+IMKgb2JqLSQoQ09ORklHX0RSTV9USElORV9USEM2M0xWRDEwMjQp ICs9IHRoYzYzbHZkMTAyNC5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv amg3MTEwLWlubm8taGRtaS5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2poNzExMC1pbm5v LWhkbWkuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgKPiAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOWI5MTc4NzMzMGQ3YjY1NTU4ODY4MDE3YmMKPiAz NmNhOGY0NTM1OTk4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2Uvamg3MTEwLWlubm8taGRtaS5jCj4gQEAgLTAsMCArMSwyOTcgQEAKPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSBTdGFyRml2 ZSBUZWNobm9sb2d5IENvLiwgTHRkLgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUgU2Ftc3VuZyBF bGVjdHJvbmljcyBDby4sIEx0ZC4KPiArICogQXV0aG9yOiBNaWNoYWwgV2lsY3p5bnNraSA8bS53 aWxjenluc2tpQHNhbXN1bmcuY29tPgo+ICsgKgo+ICsgKiBIRE1JIGNvbnRyb2xsZXIgKGJyaWRn ZSkgZHJpdmVyIGZvciB0aGUgU3RhckZpdmUgSkg3MTEwIEhETUkKPiBzdWJzeXN0ZW0uCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9j bGVhbnVwLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21m ZC9zeXNjb24uaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvb2ZfZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+ Cj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2JyaWRnZS9pbm5vX2hkbWkuaD4KPiArI2luY2x1ZGUgPGRy bS9kcm1fbW9kZXMuaD4KPiArCj4gKy8qIGRvbV92b3V0X3N5c2NvbjogSERNSSBwaXhlbCBkYXRh IG1hcHBpbmcgKi8KPiArI2RlZmluZSBWT1VUX1NZU0NGR180CQkJMHg0Cj4gKyNkZWZpbmUgVk9V VF9IRE1JX0RQX0JJVF9ERVBUSAkJQklUKDI1KQo+ICsjZGVmaW5lIFZPVVRfSERNSV9EUF9ZVVZf TU9ERQkJR0VOTUFTSygyNywgMjYpCj4gKyNkZWZpbmUgVk9VVF9IRE1JX0RQX1lVVl9NT0RFX1JH QgkzCj4gKyNkZWZpbmUgVk9VVF9IRE1JX0RQSV9CSVRfREVQVEgJCUdFTk1BU0soMjksIDI4KQo+ ICsjZGVmaW5lIFZPVVRfSERNSV9EUElfQklUX0RFUFRIXzhCSVQJMAo+ICsjZGVmaW5lIFZPVVRf SERNSV9EUElfRFBfU0VMCQlCSVQoMzApCj4gKwo+ICsvKiB1Ml9kaXNwbGF5X3BhbmVsX211eCBm ZWVkcyBIRE1JX0N0cmwsIHNlZSB0aGUgYmxvY2sgZGlhZ3JhbSBpbgo+IDUuMSAqLwo+ICsjZGVm aW5lIFZPVVRfU1lTQ0ZHXzgJCQkweDgKPiArI2RlZmluZSBWT1VUX0hETUlfUEFORUxfU0VMCQlC SVQoNCkKPiArCj4gK2VudW0gc3RmX2hkbWlfY3RybF9jbG9ja3MgeyBDTEtfU1lTID0gMCwgQ0xL X00sIENMS19CLCBDTEtfUENMSywKPiBDTEtfQ1RSTF9OVU0gfTsKPiArCj4gK3N0cnVjdCBzdGZf aW5ub19oZG1pX2NvbnRyb2xsZXIgewo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJc3RydWN0 IGNsa19idWxrX2RhdGEgY2xrc1tDTEtfQ1RSTF9OVU1dOwo+ICsJc3RydWN0IHJlc2V0X2NvbnRy b2wgKnR4X3JzdDsKPiArCXN0cnVjdCBwaHkgKnBoeTsKPiArCWJvb2wgZW5hYmxlZDsKPiArfTsK PiArCj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwo+ICtpbm5vX2hkbWlfc3RhcmZpdmVf bW9kZV92YWxpZChzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJCcKgwqDCoMKgwqAgY29uc3Qgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gK3sKPiArCXN0cnVjdCBzdGZfaW5ub19oZG1p X2NvbnRyb2xsZXIgKmN0cmwgPQo+IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJdW5zaWduZWQg bG9uZyBwaXhlbGNsayA9IG1vZGUtPmNsb2NrICogMTAwMDsKPiArCWxvbmcgcm91bmRlZDsKPiAr Cj4gKwkvKgo+ICsJICogVGhlIFBIWSBjYW4gb25seSBnZW5lcmF0ZSB0aGUgZGlzY3JldGUgc2V0 IG9mIHBpeGVsCj4gY2xvY2tzIGRlc2NyaWJlZAo+ICsJICogYnkgaXRzIHByZS1QTEwgdGFibGUs IGFuZCBjbGtfcm91bmRfcmF0ZSgpIGZhaWxzIGZvcgo+IGFueXRoaW5nIGVsc2UuCj4gKwkgKiBS ZWplY3QgdGhvc2UgbW9kZXMgaGVyZTogd2l0aG91dCB0aGlzIHRoZSBtb2Rlc2V0IHdvdWxkCj4g YXBwZWFyIHRvCj4gKwkgKiBzdWNjZWVkIHdoaWxlIHRoZSBQSFkgbmV2ZXIgcHJvZHVjZXMgYSBz aWduYWwuCj4gKwkgKi8KPiArCXJvdW5kZWQgPSBjbGtfcm91bmRfcmF0ZShjdHJsLT5jbGtzW0NM S19QQ0xLXS5jbGssCj4gcGl4ZWxjbGspOwo+ICsJaWYgKHJvdW5kZWQgIT0gcGl4ZWxjbGspCj4g KwkJcmV0dXJuIE1PREVfTk9DTE9DSzsKPiArCj4gKwlyZXR1cm4gTU9ERV9PSzsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgaW5ub19oZG1pX3N0YXJmaXZlX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpk ZXYsCj4gKwkJCQnCoMKgwqDCoMKgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ICt7 Cj4gKwlzdHJ1Y3Qgc3RmX2lubm9faGRtaV9jb250cm9sbGVyICpjdHJsID0KPiBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyoKPiArCSAqIDEuIFNldCB0aGUgcGl4 ZWwgY2xvY2sgcmF0ZS4gVGhpcyBjYWxscyB0aGUgUEhZIGRyaXZlcidzCj4gLnNldF9yYXRlIG9w Lgo+ICsJICovCj4gKwlyZXQgPSBjbGtfc2V0X3JhdGUoY3RybC0+Y2xrc1tDTEtfUENMS10uY2xr LCBtb2RlLT5jbG9jayAqCj4gMTAwMCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gc2V0IHBjbGsgcmF0ZSAlZDogJWRcbiIsCj4gKwkJCW1vZGUtPmNsb2NrICog MTAwMCwgcmV0KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIDIuIEVuYWJs ZSB0aGUgcGl4ZWwgY2xvY2suIFRoaXMgY2FsbHMgdGhlIFBIWSBkcml2ZXIncwo+IC5wcmVwYXJl IG9wLgo+ICsJICovCj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY3RybC0+Y2xrc1tDTEtf UENMS10uY2xrKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBl bmFibGUgcGNsazogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCS8qCj4g KwkgKiAzLiBQb3dlciBvbiB0aGUgUEhZLiBUaGlzIGNhbGxzIHRoZSBQSFkgZHJpdmVyJ3MKPiAu cG93ZXJfb24gb3AsCj4gKwkgKiB3aGljaCBjb25maWd1cmVzIHRoZSBQb3N0LVBMTCBhbmQgYW5h bG9nIGJsb2Nrcy4KPiArCSAqLwo+ICsJcmV0ID0gcGh5X3Bvd2VyX29uKGN0cmwtPnBoeSk7Cj4g KwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcG93ZXIgb24gUEhZOiAl ZFxuIiwgcmV0KTsKPiArCQljbGtfZGlzYWJsZV91bnByZXBhcmUoY3RybC0+Y2xrc1tDTEtfUENM S10uY2xrKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJY3RybC0+ZW5hYmxlZCA9IHRydWU7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGlubm9faGRtaV9zdGFyZml2ZV9kaXNhYmxlKHN0cnVj dCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IHN0Zl9pbm5vX2hkbWlfY29udHJvbGxlciAq Y3RybCA9Cj4gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwo+ICsJLyoKPiArCSAqIC5lbmFibGUg YmFpbHMgb3V0IGVhcmx5IGlmIHRoZSBwaXhlbCBjbG9jayByYXRlIGlzCj4gdW5zdXBwb3J0ZWQg b3IKPiArCSAqIHRoZSBQSFkgZmFpbHMgdG8gcG93ZXIgb24sIGxlYXZpbmcgcGNsayBhbmQgdGhl IFBIWQo+IHVudG91Y2hlZC4KPiArCSAqIE9ubHkgdGVhciBkb3duIHdoYXQgd2FzIGFjdHVhbGx5 IGJyb3VnaHQgdXAsIG90aGVyd2lzZQo+IHRoZSBjbG9jawo+ICsJICogcmVmY291bnQgdW5kZXJm bG93cy4KPiArCSAqLwo+ICsJaWYgKCFjdHJsLT5lbmFibGVkKQo+ICsJCXJldHVybjsKPiArCj4g KwlwaHlfcG93ZXJfb2ZmKGN0cmwtPnBoeSk7Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY3Ry bC0+Y2xrc1tDTEtfUENMS10uY2xrKTsKPiArCWN0cmwtPmVuYWJsZWQgPSBmYWxzZTsKPiArfQo+ ICsKPiArLyoKPiArICogVGhlIERDODIwMCBoYXMgdHdvIHBhbmVscywgZWFjaCBleHBvc2luZyBh IERQIGFuZCBhIERQSQo+IGludGVyZmFjZSwgYW5kIGEgbXV4Cj4gKyAqIGluIGRvbV92b3V0X3N5 c2NvbiBwaWNrcyB3aGljaCBvZiB0aGVtIGRyaXZlcyB0aGUgSERNSQo+IHRyYW5zbWl0dGVyLiBE ZXJpdmUKPiArICogdGhlIG11eCBzZXR0aW5nIGZyb20gdGhlIHBvcnQgZ3JhcGg6IHRoZSByZW1v dGUgcG9ydCBudW1iZXIKPiBzZWxlY3RzIHRoZQo+ICsgKiBEQzgyMDAgcGFuZWwsIGFuZCB0aGUg cmVtb3RlIGVuZHBvaW50IG51bWJlciB0aGUgaW50ZXJmYWNlIG9uCj4gdGhhdCBwYW5lbAo+ICsg KiAoMCBmb3IgRFBJLCAxIGZvciBEUCkuIEJvdGggZHJpdmUgOC1iaXQgUkdCLCB0aGUgb25seSBm b3JtYXQgdGhpcwo+IGRyaXZlcgo+ICsgKiBjdXJyZW50bHkgcHJvZHVjZXMuCj4gKyAqLwo+ICtz dGF0aWMgaW50IHN0Zl9pbm5vX2hkbWlfc2V0dXBfbXV4KHN0cnVjdCBkZXZpY2UgKmRldikKPiAr ewo+ICsJc3RydWN0IG9mX2VuZHBvaW50IGVuZHBvaW50Owo+ICsJc3RydWN0IHJlZ21hcCAqc3lz Y29uOwo+ICsJdTMyIG1hc2ssIHZhbDsKPiArCWludCByZXQ7Cj4gKwo+ICsJc3lzY29uID0gc3lz Y29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShkZXYtPm9mX25vZGUsCj4gKwkJCQkJCSAic3Rh cmZpdmUsdm91dC0KPiBzeXNjb24iKTsKPiArCWlmIChJU19FUlIoc3lzY29uKSkKPiArCQlyZXR1 cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoc3lzY29uKSwKPiArCQkJCcKgwqDCoMKgICJG YWlsZWQgdG8gZ2V0IHZvdXQgc3lzY29uXG4iKTsKPiArCj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUg KmVwIF9fZnJlZShkZXZpY2Vfbm9kZSkgPQo+ICsJCW9mX2dyYXBoX2dldF9lbmRwb2ludF9ieV9y ZWdzKGRldi0+b2Zfbm9kZSwgMCwgLTEpOwo+ICsJaWYgKCFlcCkKPiArCQlyZXR1cm4gZGV2X2Vy cl9wcm9iZShkZXYsIC1FTk9ERVYsICJObyBpbnB1dAo+IGVuZHBvaW50XG4iKTsKPiArCj4gKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKnJlbW90ZSBfX2ZyZWUoZGV2aWNlX25vZGUpID0KPiArCQlvZl9n cmFwaF9nZXRfcmVtb3RlX2VuZHBvaW50KGVwKTsKPiArCWlmICghcmVtb3RlKQo+ICsJCXJldHVy biBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwKPiArCQkJCcKgwqDCoMKgICJJbnB1dCBlbmRw b2ludCBpcyBub3QKPiBjb25uZWN0ZWRcbiIpOwo+ICsKPiArCXJldCA9IG9mX2dyYXBoX3BhcnNl X2VuZHBvaW50KHJlbW90ZSwgJmVuZHBvaW50KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIGRl dl9lcnJfcHJvYmUoZGV2LCByZXQsCj4gKwkJCQnCoMKgwqDCoCAiRmFpbGVkIHRvIHBhcnNlIHRo ZSByZW1vdGUKPiBlbmRwb2ludFxuIik7Cj4gKwo+ICsJaWYgKGVuZHBvaW50LnBvcnQgPiAxIHx8 IGVuZHBvaW50LmlkID4gMSkKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUws Cj4gKwkJCQnCoMKgwqDCoCAiVW5zdXBwb3J0ZWQgREM4MjAwIG91dHB1dAo+ICV1LyV1XG4iLAo+ ICsJCQkJwqDCoMKgwqAgZW5kcG9pbnQucG9ydCwgZW5kcG9pbnQuaWQpOwo+ICsKPiArCS8qIERh dGEgbWFwcGluZzogOC1iaXQgUkdCIG9uIHdoaWNoZXZlciBpbnRlcmZhY2UgaXMgaW4gdXNlLgo+ ICovCj4gKwltYXNrID0gVk9VVF9IRE1JX0RQSV9EUF9TRUwgfCBWT1VUX0hETUlfRFBfQklUX0RF UFRIIHwKPiArCcKgwqDCoMKgwqDCoCBWT1VUX0hETUlfRFBfWVVWX01PREUgfCBWT1VUX0hETUlf RFBJX0JJVF9ERVBUSDsKPiArCXZhbCA9IEZJRUxEX1BSRVAoVk9VVF9IRE1JX0RQSV9EUF9TRUws IGVuZHBvaW50LmlkKSB8Cj4gKwnCoMKgwqDCoMKgIEZJRUxEX1BSRVAoVk9VVF9IRE1JX0RQX1lV Vl9NT0RFLAo+IFZPVVRfSERNSV9EUF9ZVVZfTU9ERV9SR0IpIHwKPiArCcKgwqDCoMKgwqAgRklF TERfUFJFUChWT1VUX0hETUlfRFBJX0JJVF9ERVBUSCwKPiBWT1VUX0hETUlfRFBJX0JJVF9ERVBU SF84QklUKTsKPiArCj4gKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoc3lzY29uLCBWT1VUX1NZ U0NGR180LCBtYXNrLCB2YWwpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAr CS8qIFdoaWNoIERDODIwMCBwYW5lbCBkcml2ZXMgdGhlIEhETUkgdHJhbnNtaXR0ZXIuICovCj4g KwlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHN5c2NvbiwgVk9VVF9TWVNDRkdfOCwKPiBWT1VU X0hETUlfUEFORUxfU0VMLAo+ICsJCQkJwqAgRklFTERfUFJFUChWT1VUX0hETUlfUEFORUxfU0VM LAo+ICsJCQkJCcKgwqDCoMKgIGVuZHBvaW50LnBvcnQpKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgc3RmX2lubm9faGRtaV9jbGtfZGlzYWJsZSh2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3Qg c3RmX2lubm9faGRtaV9jb250cm9sbGVyICpjdHJsID0gZGF0YTsKPiArCj4gKwljbGtfYnVsa19k aXNhYmxlX3VucHJlcGFyZShDTEtfQ1RSTF9OVU0gLSAxLCBjdHJsLT5jbGtzKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgc3RmX2lubm9faGRtaV9yc3RfYXNzZXJ0KHZvaWQgKmRhdGEpCj4gK3sK PiArCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KGRhdGEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHN0 YXJmaXZlX2lubm9faGRtaV9jb250cm9sbGVyX3Byb2JlKHN0cnVjdAo+IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0 cnVjdCBzdGZfaW5ub19oZG1pX2NvbnRyb2xsZXIgKmN0cmw7Cj4gKwljb25zdCBzdHJ1Y3QgaW5u b19oZG1pX3BsYXRfZGF0YSAqcGxhdF9kYXRhOwo+ICsJc3RydWN0IGlubm9faGRtaSAqaW5ubzsK PiArCWludCByZXQ7Cj4gKwo+ICsJY3RybCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3Ry bCksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFjdHJsKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsK PiArCWN0cmwtPmRldiA9IGRldjsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGN0cmwp Owo+ICsKPiArCWN0cmwtPnBoeSA9IGRldm1fcGh5X2dldChkZXYsIE5VTEwpOwo+ICsJaWYgKElT X0VSUihjdHJsLT5waHkpKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihj dHJsLT5waHkpLAo+ICJGYWlsZWQgdG8gZ2V0IFBIWVxuIik7Cj4gKwo+ICsJY3RybC0+dHhfcnN0 ID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9leGNsdXNpdmUoZGV2LCBOVUxMKTsKPiArCWlmIChJ U19FUlIoY3RybC0+dHhfcnN0KSkKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9F UlIoY3RybC0+dHhfcnN0KSwKPiAiZmFpbGVkIHRvIGdldCB0eCByZXNldFxuIik7Cj4gKwo+ICsJ LyogUG9wdWxhdGUgdGhlIGNsb2NrIG5hbWVzIHRoaXMgY29udHJvbGxlciAqY29uc3VtZXMqICov Cj4gKwljdHJsLT5jbGtzW0NMS19TWVNdLmlkID0gInBjbGsiOwo+ICsJY3RybC0+Y2xrc1tDTEtf TV0uaWQgPSAibWNsayI7Cj4gKwljdHJsLT5jbGtzW0NMS19CXS5pZCA9ICJiY2xrIjsKPiArCWN0 cmwtPmNsa3NbQ0xLX1BDTEtdLmlkID0gInBpeGVsIjsgLyogR2VuZXJhdGVkIGJ5IHRoZSBQSFkK PiAqLwo+ICsKPiArCXJldCA9IGRldm1fY2xrX2J1bGtfZ2V0KGRldiwgQ0xLX0NUUkxfTlVNLCBj dHJsLT5jbGtzKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBy ZXQsICJVbmFibGUgdG8gZ2V0Cj4gY29udHJvbGxlciBjbG9ja3NcbiIpOwo+ICsKPiArCS8qCj4g KwkgKiBUZWFyIHRoZSBjbG9ja3MgYW5kIHRoZSByZXNldCBkb3duIHRocm91Z2ggZGV2bSwgc28g dGhhdAo+IHRoZXkgb3V0bGl2ZQo+ICsJICogZXZlcnl0aGluZyByZWdpc3RlcmVkIGFmdGVyIHRo ZW0uIFRoZSBicmlkZ2UgaXMgYWRkZWQKPiB3aXRoCj4gKwkgKiBkZXZtX2RybV9icmlkZ2VfYWRk KCksIGFuZCB1bndpbmRpbmcgaW4gdGhlIHdyb25nIG9yZGVyCj4gd291bGQgbGVhdmUgaXQKPiAr CSAqIHJlZ2lzdGVyZWQgd2hpbGUgaXRzIGNsb2NrcyBhcmUgYWxyZWFkeSBnYXRlZC4KPiArCSAq Cj4gKwkgKiBUaGUgcGl4ZWwgY2xvY2sgaXMgZW5hYmxlZCBvbiBkZW1hbmQgZHVyaW5nIG1vZGVz ZXQuCj4gKwkgKi8KPiArCXJldCA9IGNsa19idWxrX3ByZXBhcmVfZW5hYmxlKENMS19DVFJMX05V TSAtIDEsIGN0cmwtPmNsa3MpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAr CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsCj4gc3RmX2lubm9faGRtaV9jbGtf ZGlzYWJsZSwgY3RybCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0 ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChjdHJsLT50eF9yc3QpOwo+ICsJaWYgKHJldCkKPiAr CQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYs Cj4gc3RmX2lubm9faGRtaV9yc3RfYXNzZXJ0LAo+ICsJCQkJwqDCoMKgwqDCoMKgIGN0cmwtPnR4 X3JzdCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gc3RmX2lu bm9faGRtaV9zZXR1cF9tdXgoZGV2KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiAr Cj4gKwlwbGF0X2RhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKPiArCj4gKwkv KiBIYW5kIG9mZiB0byB0aGUgZ2VuZXJpYyBsaWJyYXJ5IHRvIGNyZWF0ZSB0aGUgYnJpZGdlLiAq Lwo+ICsJaW5ubyA9IGlubm9faGRtaV9wcm9iZShwZGV2LCBwbGF0X2RhdGEpOwo+ICsJaWYgKElT X0VSUihpbm5vKSkKPiArCQlyZXR1cm4gUFRSX0VSUihpbm5vKTsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpbm5vX2hkbWlfcGxhdF9vcHMgc3RmX2lu bm9faGRtaV9wbGF0X29wcyA9IHsKPiArCS5lbmFibGUgPSBpbm5vX2hkbWlfc3RhcmZpdmVfZW5h YmxlLAo+ICsJLmRpc2FibGUgPSBpbm5vX2hkbWlfc3RhcmZpdmVfZGlzYWJsZSwKPiArCS5tb2Rl X3ZhbGlkID0gaW5ub19oZG1pX3N0YXJmaXZlX21vZGVfdmFsaWQsCj4gK307Cj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGlubm9faGRtaV9wbGF0X2RhdGEgc3RmX2lubm9faGRtaV9wbGF0X2Rh dGEgPSB7Cj4gKwkub3BzID0gJnN0Zl9pbm5vX2hkbWlfcGxhdF9vcHMsCj4gK307Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzdGFyZml2ZV9oZG1pX2NvbnRyb2xsZXJf ZHRfaWRzW10gPQo+IHsKPiArCXsgLmNvbXBhdGlibGUgPSAic3RhcmZpdmUsamg3MTEwLWlubm8t aGRtaS1jb250cm9sbGVyIiwKPiArCcKgIC5kYXRhID0gJnN0Zl9pbm5vX2hkbWlfcGxhdF9kYXRh IH0sCj4gKwl7fQo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdGFyZml2ZV9oZG1p X2NvbnRyb2xsZXJfZHRfaWRzKTsKPiArCj4gK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3RhcmZp dmVfaW5ub19oZG1pX2NvbnRyb2xsZXJfZHJpdmVyID0gewo+ICsJLnByb2JlID0gc3RhcmZpdmVf aW5ub19oZG1pX2NvbnRyb2xsZXJfcHJvYmUsCj4gKwkuZHJpdmVyID0gewo+ICsJCS5uYW1lID0g InN0YXJmaXZlLWlubm8taGRtaS1jb250cm9sbGVyIiwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBz dGFyZml2ZV9oZG1pX2NvbnRyb2xsZXJfZHRfaWRzLAo+ICsJfSwKPiArfTsKPiArbW9kdWxlX3Bs YXRmb3JtX2RyaXZlcihzdGFyZml2ZV9pbm5vX2hkbWlfY29udHJvbGxlcl9kcml2ZXIpOwo+ICsK PiArTU9EVUxFX0FVVEhPUigiTWljaGFsIFdpbGN6eW5za2kgPG0ud2lsY3p5bnNraUBzYW1zdW5n LmNvbT4iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJTdGFyRml2ZSBJTk5PIEhETUkgQ29udHJv bGxlciBEcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwoKCi0tIApsaW51eC1waHkg bWFpbGluZyBsaXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHBzOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo=