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 15895C71136 for ; Wed, 11 Jun 2025 22:19:02 +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:References:In-Reply-To:Cc:To:Subject: From:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=F7Hv/bZSqR9tvKmknnVL2lvMkMmuJXfTsliDoyByd+o=; b=nexxIald4Vk4HD 0MXYsXNtazcWteMD+daafzoVjOPnSK0KBrbk4NquDgEEN4WV7BJaSiLLdlpEJjRIZh75ScF0e/ouf DM2AWVt78GIywtzanMnn0xV5Y5W68aQuS2/sC6gbJV0WZu/iOQ8TUPecsrCEFfW7N2IbKBXixZIPq mQnREyYdR4YZqUCldk9/Rf092dp7+w6CZoDZjavoCWgE+41tzFUq7eV98FoXyvfqPqV/VCMnHF3N2 +X3jayOuiBsVWxk5JYZuvMZ96t1ycO/a8G4G7tgLW8Lc5AYuT9BWGsfOgt1zGKj05leYTSfv9+8sZ TZWWDIZntjQ9WGSvM+QQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uPTma-0000000BS8e-2nGO; Wed, 11 Jun 2025 22:18:56 +0000 Received: from mailout2.w1.samsung.com ([210.118.77.12]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uPRgx-0000000B7kJ-47DU for linux-riscv@lists.infradead.org; Wed, 11 Jun 2025 20:05:02 +0000 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20250611200457euoutp029dcda9ca1752d4e33672b63c064f73a9~IFa8ifufP2496724967euoutp02Z for ; Wed, 11 Jun 2025 20:04:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20250611200457euoutp029dcda9ca1752d4e33672b63c064f73a9~IFa8ifufP2496724967euoutp02Z DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1749672297; bh=cjuN08/OedHJyvdAQ29mFz/GidQKE8qV07cU/lFpBwQ=; h=Date:From:Subject:To:Cc:In-Reply-To:References:From; b=I1pel4rIj0GyAIM66WxpYLwzQMtKRfhpRHq55eGLgNndi8XpOPCo6YGGxDbG6Ac5c 7BLfgL3dnzh2/NQhGf1XjGO+lZqW3GF9abj2E8bKnKVXCJmCjHy9gUh/k2dCamWA1j eM3VQ6wM/UQcKE/a9j5/yt5+RWpkQD5XN6mKw7es= Received: from eusmtip2.samsung.com (unknown [203.254.199.222]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20250611200456eucas1p1a0247e1649337c210dea018dc9b788ef~IFa71xPLe1191611916eucas1p1r; Wed, 11 Jun 2025 20:04:56 +0000 (GMT) Received: from [192.168.1.44] (unknown [106.210.136.40]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20250611200454eusmtip21707c5173d2b613ff4c106149f6f34f8~IFa6ad5w20740807408eusmtip2z; Wed, 11 Jun 2025 20:04:54 +0000 (GMT) Message-ID: <1d9bba9e-0f30-4039-812e-60b160271e6b@samsung.com> Date: Wed, 11 Jun 2025 22:04:54 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Michal Wilczynski Subject: Re: [PATCH v2 2/7] pwm: Add Rust driver for T-HEAD TH1520 SoC To: =?UTF-8?Q?Uwe_Kleine-K=C3=B6nig?= Cc: Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?Q?Bj=C3=B6rn_Roy_Baron?= , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Drew Fustini , Guo Ren , Fu Wei , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Marek Szyprowski , Benno Lossin , Michael Turquette , Stephen Boyd , linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-clk@vger.kernel.org Content-Language: en-US In-Reply-To: X-CMS-MailID: 20250611200456eucas1p1a0247e1649337c210dea018dc9b788ef X-Msg-Generator: CA X-RootMTR: 20250610125333eucas1p16126b64a0f447a5e9a5ad553d9d7d79d X-EPHeader: CA X-CMS-RootMailID: 20250610125333eucas1p16126b64a0f447a5e9a5ad553d9d7d79d References: <20250610-rust-next-pwm-working-fan-for-sending-v2-0-753e2955f110@samsung.com> <20250610-rust-next-pwm-working-fan-for-sending-v2-2-753e2955f110@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250611_130500_634077_92A86BB5 X-CRM114-Status: GOOD ( 46.62 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org CgpPbiA2LzExLzI1IDA4OjU4LCBVd2UgS2xlaW5lLUvDtm5pZyB3cm90ZToKPiBIZWxsbywKPiAK PiBPbiBUdWUsIEp1biAxMCwgMjAyNSBhdCAwMjo1Mjo1MFBNICswMjAwLCBNaWNoYWwgV2lsY3p5 bnNraSB3cm90ZToKPj4gSW50cm9kdWNlIGEgUFdNIGRyaXZlciBmb3IgdGhlIFQtSEVBRCBUSDE1 MjAgU29DLCB3cml0dGVuIGluIFJ1c3QgYW5kCj4+IHV0aWxpemluZyB0aGUgc2FmZSBQV00gYWJz dHJhY3Rpb25zIGZyb20gdGhlIHByZWNlZGluZyBjb21taXQuCj4+Cj4+IFRoZSBkcml2ZXIgaW1w bGVtZW50cyB0aGUgcHdtOjpQd21PcHMgdHJhaXQgdXNpbmcgdGhlIG1vZGVybiB3YXZlZm9ybQo+ PiBBUEkgKHJvdW5kX3dhdmVmb3JtX3RvaHcsIHdyaXRlX3dhdmVmb3JtLCBldGMuKSB0byBzdXBw b3J0IGNvbmZpZ3VyYXRpb24KPj4gb2YgcGVyaW9kLCBkdXR5IGN5Y2xlLCBhbmQgcG9sYXJpdHkg Zm9yIHRoZSBUSDE1MjAncyBQV00gY2hhbm5lbHMuCj4+Cj4+IFJlc291cmNlIG1hbmFnZW1lbnQg aXMgaGFuZGxlZCB1c2luZyBpZGlvbWF0aWMgUnVzdCBwYXR0ZXJucy4gVGhlIFBXTQo+PiBjaGlw IG9iamVjdCBpcyBhbGxvY2F0ZWQgdmlhIHB3bTo6Q2hpcDo6bmV3IGFuZCBpdHMgcmVnaXN0cmF0 aW9uIHdpdGgKPj4gdGhlIFBXTSBjb3JlIGlzIG1hbmFnZWQgYnkgdGhlIHB3bTo6UmVnaXN0cmF0 aW9uIFJBSUkgZ3VhcmQuIFRoaXMKPj4gZW5zdXJlcyBwd21jaGlwX3JlbW92ZSBpcyBhbHdheXMg Y2FsbGVkIHdoZW4gdGhlIGRyaXZlciB1bmJpbmRzLAo+PiBwcmV2ZW50aW5nIHJlc291cmNlIGxl YWtzLiBEZXZpY2UgbWFuYWdlZCByZXNvdXJjZXMgYXJlIHVzZWQgZm9yIHRoZQo+PiBNTUlPIHJl Z2lvbiwgYW5kIHRoZSBjbG9jayBsaWZlY3ljbGUgaXMgY29ycmVjdGx5IG1hbmFnZWQgaW4gdGhl Cj4+IGRyaXZlcidzIHByaXZhdGUgZGF0YSBEcm9wIGltcGxlbWVudGF0aW9uLgo+Pgo+PiBUaGUg ZHJpdmVyJ3MgY29yZSBsb2dpYyBpcyB3cml0dGVuIGVudGlyZWx5IGluIHNhZmUgUnVzdCwgd2l0 aCBubyB1bnNhZmUKPj4gYmxvY2tzLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBNaWNoYWwgV2lsY3p5 bnNraSA8bS53aWxjenluc2tpQHNhbXN1bmcuY29tPgo+PiAtLS0KPj4gIE1BSU5UQUlORVJTICAg ICAgICAgICAgICAgfCAgIDEgKwo+PiAgZHJpdmVycy9wd20vS2NvbmZpZyAgICAgICB8ICAxMCAr Kwo+PiAgZHJpdmVycy9wd20vTWFrZWZpbGUgICAgICB8ICAgMSArCj4+ICBkcml2ZXJzL3B3bS9w d21fdGgxNTIwLnJzIHwgMjg3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKPj4gIDQgZmlsZXMgY2hhbmdlZCwgMjk5IGluc2VydGlvbnMoKykKPj4KPj4gZGlm ZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKPj4gaW5kZXggNTU4OWMwZDIyNTNi Y2IwNGU3OGQ3Yjg5ZWY2ZWYwZWQ0MTEyMWQ3Ny4uOTY2Y2U1MTVjOGJmZWZkZmYxOTc1YmI3MTZh MjY3NDM1ZWMwZmVhZSAxMDA2NDQKPj4gLS0tIGEvTUFJTlRBSU5FUlMKPj4gKysrIGIvTUFJTlRB SU5FUlMKPj4gQEAgLTIxMzE5LDYgKzIxMzE5LDcgQEAgRjoJZHJpdmVycy9tYWlsYm94L21haWxi b3gtdGgxNTIwLmMKPj4gIEY6CWRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3 bWFjLXRoZWFkLmMKPj4gIEY6CWRyaXZlcnMvcGluY3RybC9waW5jdHJsLXRoMTUyMC5jCj4+ICBG Oglkcml2ZXJzL3BtZG9tYWluL3RoZWFkLwo+PiArRjoJZHJpdmVycy9wd20vcHdtX3RoMTUyMC5y cwo+PiAgRjoJZHJpdmVycy9yZXNldC9yZXNldC10aDE1MjAuYwo+PiAgRjoJaW5jbHVkZS9kdC1i aW5kaW5ncy9jbG9jay90aGVhZCx0aDE1MjAtY2xrLWFwLmgKPj4gIEY6CWluY2x1ZGUvZHQtYmlu ZGluZ3MvcG93ZXIvdGhlYWQsdGgxNTIwLXBvd2VyLmgKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv cHdtL0tjb25maWcgYi9kcml2ZXJzL3B3bS9LY29uZmlnCj4+IGluZGV4IDAzYzVhMTAwYTAzZTJh Y2RjY2Y4YTQ2YjljNzBiNzM2YjYzMGJkM2EuLmJlMDU2NThhNTY4Y2I5MTU2ZWY2MjNjYWY1NGZm MWFhYmE4OThkMDEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvcHdtL0tjb25maWcKPj4gKysrIGIv ZHJpdmVycy9wd20vS2NvbmZpZwo+PiBAQCAtNzE5LDYgKzcxOSwxNiBAQCBjb25maWcgUFdNX1RF R1JBCj4+ICAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBo ZXJlOiB0aGUgbW9kdWxlCj4+ICAJICB3aWxsIGJlIGNhbGxlZCBwd20tdGVncmEuCj4+ICAKPj4g K2NvbmZpZyBQV01fVEgxNTIwX1JVU1QKPiAKPiBJcyAiX1JVU1QiIHJlbGV2YW50IGhlcmU/IEkn ZCBkcm9wIHRoYXQuCgpZZWFoIEkgdGhpbmsgaXQncyBhIGdvb2QgaWRlYSB0byBkcm9wLgoKPiAK Pj4gKwl0cmlzdGF0ZSAiVEgxNTIwIFBXTSBzdXBwb3J0IChSdXN0KSIKPiAKPiBBbHNvIHdoaWxl IGhhdmluZyBkcml2ZXJzIGlzIHJ1c3QgaXMgYSBncmVhdCBzdGVwIGZvcndhcmQsIGl0J3Mgbm90 Cj4gcmVsZXZhbnQgdG8gdGhlIHVzZXIgc2VsZWN0aW5nIHN1cHBvcnQgZm9yIHRoZSBUSDE1MjAg ZGV2aWNlLgo+IAo+PiArCWRlcGVuZHMgb24gUlVTVF9QV01fQUJTVFJBQ1RJT05TCj4+ICsJaGVs cAo+PiArCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZHJpdmVyIGZvciB0aGUgUFdNIGNvbnRy b2xsZXIgZm91bmQgb24gdGhlCj4+ICsJICBULUhFQUQgVEgxNTIwIFNvQy4gVGhpcyBkcml2ZXIg aXMgd3JpdHRlbiBpbiBSdXN0Lgo+PiArCj4+ICsJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFz IGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOyB0aGUgbW9kdWxlCj4+ICsJICB3aWxsIGJlIGNhbGxl ZCBwd20tdGgxNTIwLiBJZiB5b3UgYXJlIHVuc3VyZSwgc2F5IE4uCj4+ICsKPj4gIGNvbmZpZyBQ V01fVElFQ0FQCj4+ICAJdHJpc3RhdGUgIkVDQVAgUFdNIHN1cHBvcnQiCj4+ICAJZGVwZW5kcyBv biBBUkNIX09NQVAyUExVUyB8fCBBUkNIX0RBVklOQ0lfREE4WFggfHwgQVJDSF9LRVlTVE9ORSB8 fCBBUkNIX0szIHx8IENPTVBJTEVfVEVTVAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wd20vTWFr ZWZpbGUgYi9kcml2ZXJzL3B3bS9NYWtlZmlsZQo+PiBpbmRleCA5NjE2MGY0MjU3ZmNiMGUwOTUx NTgxYWYwMDkwNjE1YzBlZGY1MjYwLi5kNDFiMTk0MGRmOTAzYmEyMDM2ZDhlM2VkOTNlZmNkNjY4 MzRiN2FiIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3B3bS9NYWtlZmlsZQo+PiArKysgYi9kcml2 ZXJzL3B3bS9NYWtlZmlsZQo+PiBAQCAtNzMsMyArNzMsNCBAQCBvYmotJChDT05GSUdfUFdNX1RX TF9MRUQpCSs9IHB3bS10d2wtbGVkLm8KPj4gIG9iai0kKENPTkZJR19QV01fVklTQ09OVEkpCSs9 IHB3bS12aXNjb250aS5vCj4+ICBvYmotJChDT05GSUdfUFdNX1ZUODUwMCkJKz0gcHdtLXZ0ODUw MC5vCj4+ICBvYmotJChDT05GSUdfUFdNX1hJTElOWCkJKz0gcHdtLXhpbGlueC5vCj4+ICtvYmot JChDT05GSUdfUFdNX1RIMTUyMF9SVVNUKQkrPSBwd21fdGgxNTIwLm8KPiAKPiBBbHBoYWJldGlj IG9yZGVyaW5nIHBsZWFzZQo+IAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wd20vcHdtX3RoMTUy MC5ycyBiL2RyaXZlcnMvcHdtL3B3bV90aDE1MjAucnMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK Pj4gaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU0MzQ3 NGY1MTIzYjUxYzQ5MDM1ZDcxMjE5MzAzYTYwNmMyMGE1YQo+PiAtLS0gL2Rldi9udWxsCj4+ICsr KyBiL2RyaXZlcnMvcHdtL3B3bV90aDE1MjAucnMKPj4gQEAgLTAsMCArMSwyODcgQEAKPj4gKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvLyBDb3B5cmlnaHQgKGMpIDIw MjUgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KPj4gKy8vIEF1dGhvcjogTWljaGFsIFdp bGN6eW5za2kgPG0ud2lsY3p5bnNraUBzYW1zdW5nLmNvbT4KPj4gKwo+PiArLy8hIFJ1c3QgVC1I RUFEIFRIMTUyMCBQV00gZHJpdmVyCj4gCj4gQSBzaG9ydCBwYXJhZ3JhcGggZGVzY3JpYmluZyB0 aGUgaGFyZHdhcmUgbGltaXRhdGlvbnMgb2YgdGhhdCBkcml2ZXIKPiBoZXJlIHdvdWxkIGJlIG5p Y2UuIFdoaWxlIHlvdSBwcm9iYWJseSBjYW5ub3Qgc3RpY2sgdG8gdGhlIGV4YWN0IGZvcm1hdAo+ IHVzZWQgaW4gbmV3ZXIgQyBkcml2ZXJzIHN1Y2ggdGhhdAo+IAo+IAlzZWQgLXJuICcvTGltaXRh dGlvbnM6LywvXCpcLz8kL3AnIGRyaXZlcnMvcHdtLyouYwo+IAo+IGVtaXRzIHRoZSBpbmZvIGZv ciB5b3VyIGRyaXZlciwgSSdkIGFwcHJlY2lhdGUgeW91IHN0aWNraW5nIHRvIG1vc3RseQo+IHRo aXMgZm9ybWF0LgoKR29vZCBwb2ludC4gSSB3aWxsIGFkZCBhIGRvY3VtZW50YXRpb24gY29tbWVu dCBibG9jayBhdCB0aGUgdG9wIG9mIHRoZQpmaWxlIG91dGxpbmluZyB0aGUgaGFyZHdhcmUgbGlt aXRhdGlvbnMsIGtlZXBpbmcgdGhlIGZvcm1hdCBhcyBjbG9zZSBhcwpwb3NzaWJsZSB0byB3aGF0 IGlzIHVzZWQgaW4gdGhlIEMgZHJpdmVycy4KCj4gCj4+ICt1c2UgY29yZTo6b3BzOjpEZXJlZjsK Pj4gK3VzZSBrZXJuZWw6OnsKPj4gKyAgICBjX3N0ciwKPj4gKyAgICBjbGs6OkNsaywKPj4gKyAg ICBkZXZpY2U6OntCb3VuZCwgQ29yZSwgRGV2aWNlfSwKPj4gKyAgICBkZXZyZXMsCj4+ICsgICAg ZXJyb3I6Ontjb2RlOjoqLCBSZXN1bHR9LAo+PiArICAgIGlvOjptZW06OklvTWVtLAo+PiArICAg IG1hdGg6Oktlcm5lbE1hdGhFeHQsCj4+ICsgICAgb2YsIHBsYXRmb3JtLAo+PiArICAgIHByZWx1 ZGU6OiosCj4+ICsgICAgcHdtLCB0aW1lLAo+PiArfTsKPj4gKwo+PiArY29uc3QgTUFYX1BXTV9O VU06IHUzMiA9IDY7Cj4+ICsKPj4gKy8vIFJlZ2lzdGVyIG9mZnNldHMKPj4gK2NvbnN0IGZuIHRo MTUyMF9wd21fY2huX2Jhc2UobjogdTMyKSAtPiB1c2l6ZSB7Cj4+ICsgICAgKG4gKiAweDIwKSBh cyB1c2l6ZQo+PiArfQo+IAo+IGVtcHR5IGxpbmUgaGVyZSBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9u cz8KPiAKPj4gK2NvbnN0IGZuIHRoMTUyMF9wd21fY3RybChuOiB1MzIpIC0+IHVzaXplIHsKPj4g KyAgICB0aDE1MjBfcHdtX2Nobl9iYXNlKG4pCj4+ICt9Cj4+ICtjb25zdCBmbiB0aDE1MjBfcHdt X3BlcihuOiB1MzIpIC0+IHVzaXplIHsKPj4gKyAgICB0aDE1MjBfcHdtX2Nobl9iYXNlKG4pICsg MHgwOAo+PiArfQo+PiArY29uc3QgZm4gdGgxNTIwX3B3bV9mcChuOiB1MzIpIC0+IHVzaXplIHsK Pj4gKyAgICB0aDE1MjBfcHdtX2Nobl9iYXNlKG4pICsgMHgwYwo+PiArfQo+PiArCj4+ICsvLyBD b250cm9sIHJlZ2lzdGVyIGJpdHMKPj4gK2NvbnN0IFBXTV9TVEFSVDogdTMyID0gMSA8PCAwOwo+ PiArY29uc3QgUFdNX0NGR19VUERBVEU6IHUzMiA9IDEgPDwgMjsKPj4gK2NvbnN0IFBXTV9DT05U SU5VT1VTX01PREU6IHUzMiA9IDEgPDwgNTsKPj4gK2NvbnN0IFBXTV9GUE9VVDogdTMyID0gMSA8 PCA4Owo+PiArCj4+ICtjb25zdCBUSDE1MjBfUFdNX1JFR19TSVpFOiB1c2l6ZSA9IDB4QjA7Cj4+ ICsKPj4gKy8vLyBIYXJkd2FyZS1zcGVjaWZpYyB3YXZlZm9ybSByZXByZXNlbnRhdGlvbiBmb3Ig VEgxNTIwLgo+IAo+IFNvbWUgY29tbWVudHMgdXNlIDIgYW5kIG90aGVyIDMgc2xhc2hlcy4gRG9l cyB0aGlzIGhhdmUgYW55IHNlbWFudGljPwoKWWVzLCB0aGV5IGhhdmUgYSBzZW1hbnRpYyBkaWZm ZXJlbmNlLiAvLy8gZGVub3RlcyBhIGRvY3VtZW50YXRpb24KY29tbWVudCB0aGF0IGlzIHByb2Nl c3NlZCBieSBydXN0ZG9jIHRvIGdlbmVyYXRlIGRvY3VtZW50YXRpb24sIHdoaWxlIC8vCmlzIGEg cmVndWxhciBpbXBsZW1lbnRhdGlvbiBjb21tZW50LiBUaGUgY29tcGlsZXIgaXMgY29uZmlndXJl ZCB0bwpyZXF1aXJlIGRvY3VtZW50YXRpb24gZm9yIHB1YmxpYyBpdGVtcyAobGlrZSBzdHJ1Y3Rz IGFuZCBmdW5jdGlvbnMpLAp3aGljaCBpcyB3aHkgLy8vIGlzIHVzZWQgb24gdGhlIHN0cnVjdCBk ZWZpbml0aW9uLgoKPiAKPj4gKyNbZGVyaXZlKENvcHksIENsb25lLCBEZWJ1ZywgRGVmYXVsdCld Cj4+ICtzdHJ1Y3QgVGgxNTIwV2ZIdyB7Cj4+ICsgICAgcGVyaW9kX2N5Y2xlczogdTMyLAo+PiAr ICAgIGR1dHlfY3ljbGVzOiB1MzIsCj4+ICsgICAgY3RybF92YWw6IHUzMiwKPj4gKyAgICBlbmFi bGVkOiBib29sLAo+PiArfQo+PiArCj4+ICsvLy8gVGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBz dHJ1Y3QuIEl0IGhvbGRzIGFsbCBuZWNlc3NhcnkgZGV2cmVzLW1hbmFnZWQgcmVzb3VyY2VzLgo+ PiArc3RydWN0IFRoMTUyMFB3bURyaXZlckRhdGEgewo+PiArICAgIGlvbWVtOiBkZXZyZXM6OkRl dnJlczxJb01lbTxUSDE1MjBfUFdNX1JFR19TSVpFPj4sCj4+ICsgICAgY2xrOiBDbGssCj4+ICt9 Cj4+ICsKPj4gK2ltcGwgcHdtOjpQd21PcHMgZm9yIFRoMTUyMFB3bURyaXZlckRhdGEgewo+PiAr ICAgIHR5cGUgV2ZIdyA9IFRoMTUyMFdmSHc7Cj4+ICsKPj4gKyAgICBmbiBnZXRfc3RhdGUoCj4+ ICsgICAgICAgIGNoaXA6ICZtdXQgcHdtOjpDaGlwLAo+PiArICAgICAgICBwd206ICZtdXQgcHdt OjpEZXZpY2UsCj4+ICsgICAgICAgIHN0YXRlOiAmbXV0IHB3bTo6U3RhdGUsCj4+ICsgICAgICAg IHBhcmVudF9kZXY6ICZEZXZpY2U8Qm91bmQ+LAo+PiArICAgICkgLT4gUmVzdWx0IHsKPiAKPiBI dWgsIGlmIHlvdSBkbyB0aGUgbmV3c3R5bGUgc3R1ZmYsIC5nZXRfc3RhdGUoKSBpcyB3cm9uZy4g SXQncyBlaXRoZXIKPiAucm91bmRfd2F2ZWZvcm1fdG9odygpICsgLnJvdW5kX3dhdmVmb3JtX2Zy b21odygpICsgLnJlYWRfd2F2ZWZvcm0oKSArCj4gLndyaXRlX3dhdmVmb3JtKCkgb3IgLmFwcGx5 KCkgKyAuZ2V0X3N0YXRlKCksIGJ1dCBkb24ndCBtaXggdGhlc2UuCgpZb3UgYXJlIGFic29sdXRl bHkgcmlnaHQuIFRoaXMgd2FzIGEgbWlzdW5kZXJzdGFuZGluZyBvZiB0aGUgbmV3IEFQSSBvbgpt eSBwYXJ0LiBJIHdpbGwgcmVtb3ZlIHRoZSAuZ2V0X3N0YXRlIGltcGxlbWVudGF0aW9uIGVudGly ZWx5IGluIHRoZQpuZXh0IHZlcnNpb24gYW5kIHJlbHkgc29sZWx5IG9uIHRoZSB3YXZlZm9ybSBv cGVyYXRpb25zLgoKPiAKPj4gKyAgICAgICAgbGV0IGRhdGE6ICZTZWxmID0gY2hpcC5kcnZkYXRh KCkub2tfb3IoRUlOVkFMKT87Cj4+ICsgICAgICAgIGxldCBod3B3bSA9IHB3bS5od3B3bSgpOwo+ PiArICAgICAgICBsZXQgaW9tZW1fZ3VhcmQgPSBkYXRhLmlvbWVtLmFjY2VzcyhwYXJlbnRfZGV2 KT87Cj4+ICsgICAgICAgIGxldCBpb21hcCA9IGlvbWVtX2d1YXJkLmRlcmVmKCk7Cj4+ICsgICAg ICAgIGxldCBjdHJsID0gaW9tYXAucmVhZDMyKHRoMTUyMF9wd21fY3RybChod3B3bSkpOwo+PiAr ICAgICAgICBsZXQgcGVyaW9kX2N5Y2xlcyA9IGlvbWFwLnJlYWQzMih0aDE1MjBfcHdtX3Blciho d3B3bSkpOwo+PiArICAgICAgICBsZXQgZHV0eV9jeWNsZXMgPSBpb21hcC5yZWFkMzIodGgxNTIw X3B3bV9mcChod3B3bSkpOwo+PiArCj4+ICsgICAgICAgIHN0YXRlLnNldF9lbmFibGVkKGR1dHlf Y3ljbGVzICE9IDApOwo+PiArCj4+ICsgICAgICAgIGxldCByYXRlX2h6ID0gZGF0YS5jbGsucmF0 ZSgpLmFzX2h6KCk7Cj4+ICsgICAgICAgIGxldCBwZXJpb2RfbnMgPSAocGVyaW9kX2N5Y2xlcyBh cyB1NjQpCj4+ICsgICAgICAgICAgICAubXVsX2Rpdih0aW1lOjpOU0VDX1BFUl9TRUMgYXMgdTY0 LCByYXRlX2h6IGFzIHU2NCkKPj4gKyAgICAgICAgICAgIC51bndyYXBfb3IoMCk7Cj4gCj4gV2hh dCBkb2VzIC51bndyYXBfb3IoMCkgZG8/IFlvdSBuZWVkIHRvIHJvdW5kIHVwIGluIHRoaXMgbXVs X2Rpdgo+IG9wZXJhdGlvbi4KClRoZSAudW53cmFwX29yKDApIGlzIHRvIGhhbmRsZSB0aGUgY2Fz ZSB3aGVyZSB0aGUgbXVsX2RpdiBoZWxwZXIgcmV0dXJucwpOb25lLCB3aGljaCBjYW4gaGFwcGVu IGlmIHRoZSBkaXZpc29yIChyYXRlX2h6KSBpcyB6ZXJvLiBJbiB0aGF0IGNhc2UsCnRoZSBwZXJp b2QgIGJlY29tZXMgMC4gVGhlIG11bF9kaXYgaGVscGVyIGlzIGludHJvZHVjZWQgaW4gdGhpcyBj b21taXQKWzFdLgoKWzFdIC0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvYWxsLzIwMjUwNjA5LW1h dGgtcnVzdC12MS12MS0xLTI4NWZhYzAwMDMxZkBzYW1zdW5nLmNvbS8KCj4gCj4+ICsgICAgICAg IHN0YXRlLnNldF9wZXJpb2QocGVyaW9kX25zKTsKPj4gKwo+PiArICAgICAgICBsZXQgZHV0eV9u cyA9IChkdXR5X2N5Y2xlcyBhcyB1NjQpCj4+ICsgICAgICAgICAgICAubXVsX2Rpdih0aW1lOjpO U0VDX1BFUl9TRUMgYXMgdTY0LCByYXRlX2h6IGFzIHU2NCkKPj4gKyAgICAgICAgICAgIC51bndy YXBfb3IoMCk7Cj4+ICsgICAgICAgIHN0YXRlLnNldF9kdXR5X2N5Y2xlKGR1dHlfbnMpOwo+PiAr Cj4+ICsgICAgICAgIGlmIChjdHJsICYgUFdNX0ZQT1VUKSAhPSAwIHsKPj4gKyAgICAgICAgICAg IHN0YXRlLnNldF9wb2xhcml0eShwd206OlBvbGFyaXR5OjpOb3JtYWwpOwo+PiArICAgICAgICB9 IGVsc2Ugewo+PiArICAgICAgICAgICAgc3RhdGUuc2V0X3BvbGFyaXR5KHB3bTo6UG9sYXJpdHk6 OkludmVyc2VkKTsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIE9rKCgpKQo+PiArICAg IH0KPj4gKwo+PiArICAgIGZuIHJvdW5kX3dhdmVmb3JtX3RvaHcoCj4+ICsgICAgICAgIGNoaXA6 ICZtdXQgcHdtOjpDaGlwLAo+PiArICAgICAgICBwd206ICZtdXQgcHdtOjpEZXZpY2UsCj4+ICsg ICAgICAgIHdmOiAmcHdtOjpXYXZlZm9ybSwKPj4gKyAgICApIC0+IFJlc3VsdDwoaTMyLCBTZWxm OjpXZkh3KT4gewo+PiArICAgICAgICBsZXQgZGF0YTogJlNlbGYgPSBjaGlwLmRydmRhdGEoKS5v a19vcihFSU5WQUwpPzsKPj4gKyAgICAgICAgbGV0IGh3cHdtID0gcHdtLmh3cHdtKCk7Cj4+ICsK Pj4gKyAgICAgICAgaWYgd2YuZHV0eV9vZmZzZXRfbnMgIT0gMCB7Cj4+ICsgICAgICAgICAgICBk ZXZfZXJyIShjaGlwLmRldmljZSgpLCAiUFdNLXt9OiBEdXR5IG9mZnNldCBub3Qgc3VwcG9ydGVk XG4iLCBod3B3bSk7Cj4gCj4gVGhhdCdzIHdyb25nLCBwaWNrIHRoZSBiaWdnZXN0IG9mZnNldCB2 YWx1ZSB0aGF0IGlzIHBvc3NpYmxlIHRvCj4gaW1wbGVtZW50IGFuZCBub3QgYmlnZ2VyIHRoYW4g dGhlIHJlcXVlc3RlZCB2YWx1ZS4KPiBZb3VyIGhhcmR3YXJlIGNhbiBkbyBpbnZlcnNlZCBwb2xh cml0eSwgc28gb2Zmc2V0IGlzIGVpdGhlciAwIG9yCj4gcGVyaW9kLWR1dHkuCgpBZGRyZXNzZWQg YmVsb3cgd2l0aCB0aGUgcHdtLnN0YXRlKCkgY29tbWVudAoKPiAKPj4gKyAgICAgICAgICAgIHJl dHVybiBFcnIoRU5PVFNVUFApOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgaWYgd2Yu cGVyaW9kX2xlbmd0aF9ucyA9PSAwIHsKPj4gKyAgICAgICAgICAgIHJldHVybiBPaygoCj4+ICsg ICAgICAgICAgICAgICAgMCwKPj4gKyAgICAgICAgICAgICAgICBUaDE1MjBXZkh3IHsKPj4gKyAg ICAgICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsCj4+ICsgICAgICAgICAgICAgICAgICAg IC4uRGVmYXVsdDo6ZGVmYXVsdCgpCj4+ICsgICAgICAgICAgICAgICAgfSwKPj4gKyAgICAgICAg ICAgICkpOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgbGV0IHJhdGVfaHogPSBkYXRh LmNsay5yYXRlKCkuYXNfaHooKTsKPj4gKwo+PiArICAgICAgICBsZXQgcGVyaW9kX2N5Y2xlcyA9 IHdmCj4+ICsgICAgICAgICAgICAucGVyaW9kX2xlbmd0aF9ucwo+PiArICAgICAgICAgICAgLm11 bF9kaXYocmF0ZV9oeiBhcyB1NjQsIHRpbWU6Ok5TRUNfUEVSX1NFQyBhcyB1NjQpCj4+ICsgICAg ICAgICAgICAub2tfb3IoRUlOVkFMKT87Cj4gCj4gSWYgcGVyaW9kX2xlbmd0aF9ucyBpcyBCSUcs IHBpY2sgdGhlIGJpZ2dlc3QgcG9zc2libGUgcGVyaW9kX2N5Y2xlcwo+IHZhbHVlLCBub3QgRUlO VkFMLgoKSW4gdGhpcyBjYXNlIEVJTlZBTCBtZWFuIHRoZSBmdW5jdGlvbiB3b3VsZCByZXR1cm4g RUlOVkFMIG5vdAoncGVyaW9kX2N5Y2xlcycgPSBFSU5WQUwuIFRoaXMgd29uJ3QgaGFwcGVuIGhl cmUgc2luY2UKdGltZTo6TlNFQ19QRVJfU0VDIGlzIGEgY29uc3RhbnQsIHNvIHRoaXMgd29uJ3Qg cmV0dXJuIE5vbmUuIFRoaXMgaXMgbm90CmNoZWNraW5nIGZvciBvdmVyZmxvdy4KCj4gCj4+ICsg ICAgICAgIGlmIHBlcmlvZF9jeWNsZXMgPiB1MzI6Ok1BWCBhcyB1NjQgewoKSW4gaGVyZSBJIGNv dWxkIHBpY2sgcGVyaW9kX2N5Y2xlcyA9IHUzMjo6TUFYLgoKPj4gKyAgICAgICAgICAgIGRldl9l cnIhKAo+PiArICAgICAgICAgICAgICAgIGNoaXAuZGV2aWNlKCksCj4+ICsgICAgICAgICAgICAg ICAgIlBXTS17fTogQ2FsY3VsYXRlZCBwZXJpb2Qge30gY3ljbGVzIGlzIG91dCBvZiByYW5nZVxu IiwKPj4gKyAgICAgICAgICAgICAgICBod3B3bSwKPj4gKyAgICAgICAgICAgICAgICBwZXJpb2Rf Y3ljbGVzCj4+ICsgICAgICAgICAgICApOwo+PiArICAgICAgICAgICAgcmV0dXJuIEVycihFSU5W QUwpOwo+PiArICAgICAgICB9Cj4gCj4gZGl0dG8uCj4gCj4+ICsgICAgICAgIGxldCBkdXR5X2N5 Y2xlcyA9IHdmCj4+ICsgICAgICAgICAgICAuZHV0eV9sZW5ndGhfbnMKPj4gKyAgICAgICAgICAg IC5tdWxfZGl2KHJhdGVfaHogYXMgdTY0LCB0aW1lOjpOU0VDX1BFUl9TRUMgYXMgdTY0KQo+PiAr ICAgICAgICAgICAgLm9rX29yKEVJTlZBTCk/Owo+PiArICAgICAgICBpZiBkdXR5X2N5Y2xlcyA+ IHBlcmlvZF9jeWNsZXMgewo+IAo+IFlvdSBjYW4gYXNzdW1lIHRoaXMgd29uJ3QgaGFwcGVuLgo+ IAo+PiArICAgICAgICAgICAgZGV2X2VyciEoCj4+ICsgICAgICAgICAgICAgICAgY2hpcC5kZXZp Y2UoKSwKPj4gKyAgICAgICAgICAgICAgICAiUFdNLXt9OiBEdXR5IHt9bnMgPiBwZXJpb2Qge31u c1xuIiwKPj4gKyAgICAgICAgICAgICAgICBod3B3bSwKPj4gKyAgICAgICAgICAgICAgICB3Zi5k dXR5X2xlbmd0aF9ucywKPj4gKyAgICAgICAgICAgICAgICB3Zi5wZXJpb2RfbGVuZ3RoX25zCj4+ ICsgICAgICAgICAgICApOwo+PiArICAgICAgICAgICAgcmV0dXJuIEVycihFSU5WQUwpOwo+PiAr ICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgbGV0IG11dCBjdHJsX3ZhbCA9IFBXTV9DT05USU5V T1VTX01PREU7Cj4+ICsgICAgICAgIGlmIHB3bS5zdGF0ZSgpLnBvbGFyaXR5KCkgPT0gcHdtOjpQ b2xhcml0eTo6Tm9ybWFsIHsKPj4gKyAgICAgICAgICAgIGN0cmxfdmFsIHw9IFBXTV9GUE9VVDsK PiAKPiBXaGF0IGlzIHB3bS5zdGF0ZSgpPyBJZiB0aGF0J3Mgc2ltaWxhciB0byBwd20tPnN0YXRl IGluIEMgdGhpcyBpcwo+IGlycmVsZXZhbnQgaGVyZS4gSXQgZGVzY3JpYmVzIHRoZSBjdXJyZW50 IHN0YXRlLCBub3QgdGhlIG5ldyByZXF1ZXN0LgoKWWVzLCB5b3UgYXJlIGNvcnJlY3QuIEkgc2hv dWxkIGRlcml2ZSB0aGUgcG9sYXJpdHkgZnJvbSB0aGUgcmVxdWVzdGVkCndhdmVmb3JtIGFyZ3Vt ZW50cywgbm90IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUuIEkgc2VlIG5vdyBob3cgdG8gaGFuZGxl CmJvdGggdGhlIGR1dHlfb2Zmc2V0IGFuZCB0aGUgcG9sYXJpdHkgYmFzZWQgb24gdGhlIGFyZ3Vt ZW50cyBpbiB3Zi4gSQp3aWxsIGltcGxlbWVudCB0aGUgY29ycmVjdCBsb2dpYy4KCj4gCj4+ICsg ICAgICAgIH0KPj4gKwo+PiArICAgICAgICBsZXQgd2ZodyA9IFRoMTUyMFdmSHcgewo+PiArICAg ICAgICAgICAgcGVyaW9kX2N5Y2xlczogcGVyaW9kX2N5Y2xlcyBhcyB1MzIsCj4+ICsgICAgICAg ICAgICBkdXR5X2N5Y2xlczogZHV0eV9jeWNsZXMgYXMgdTMyLAo+PiArICAgICAgICAgICAgY3Ry bF92YWwsCj4+ICsgICAgICAgICAgICBlbmFibGVkOiB0cnVlLAo+PiArICAgICAgICB9Owo+PiAr Cj4+ICsgICAgICAgIGRldl9kYmchKAo+PiArICAgICAgICAgICAgY2hpcC5kZXZpY2UoKSwKPj4g KyAgICAgICAgICAgICJ3Zmh3IC0tIFBlcmlvZDoge30sIER1dHk6IHt9LCBDdHJsOiAweHs6eH1c biIsCj4+ICsgICAgICAgICAgICB3Zmh3LnBlcmlvZF9jeWNsZXMsCj4+ICsgICAgICAgICAgICB3 Zmh3LmR1dHlfY3ljbGVzLAo+PiArICAgICAgICAgICAgd2Zody5jdHJsX3ZhbAo+PiArICAgICAg ICApOwo+IAo+IFRoaXMgd291bGQgYmUgbXVjaCBtb3JlIGhlbHBmdWwgaWYgaXQgYWxzbyBjb250 YWluZWQgdGhlIHZhbHVlcyBmcm9tIHdmLgo+IAo+PiArICAgICAgICBPaygoMCwgd2ZodykpCj4+ ICsgICAgfQo+PiArCj4+ICsgICAgZm4gd3JpdGVfd2F2ZWZvcm0oCj4+ICsgICAgICAgIGNoaXA6 ICZtdXQgcHdtOjpDaGlwLAo+PiArICAgICAgICBwd206ICZtdXQgcHdtOjpEZXZpY2UsCj4+ICsg ICAgICAgIHdmaHc6ICZTZWxmOjpXZkh3LAo+PiArICAgICAgICBwYXJlbnRfZGV2OiAmRGV2aWNl PEJvdW5kPiwKPj4gKyAgICApIC0+IFJlc3VsdCB7Cj4+ICsgICAgICAgIGxldCBkYXRhOiAmU2Vs ZiA9IGNoaXAuZHJ2ZGF0YSgpLm9rX29yKEVJTlZBTCk/Owo+PiArICAgICAgICBsZXQgaHdwd20g PSBwd20uaHdwd20oKTsKPj4gKyAgICAgICAgbGV0IGlvbWVtX2d1YXJkID0gZGF0YS5pb21lbS5h Y2Nlc3MocGFyZW50X2Rldik/Owo+PiArICAgICAgICBsZXQgaW9tYXAgPSBpb21lbV9ndWFyZC5k ZXJlZigpOwo+PiArICAgICAgICBsZXQgd2FzX2VuYWJsZWQgPSBwd20uc3RhdGUoKS5lbmFibGVk KCk7Cj4+ICsKPj4gKyAgICAgICAgaWYgIXdmaHcuZW5hYmxlZCB7Cj4+ICsgICAgICAgICAgICBp ZiB3YXNfZW5hYmxlZCB7Cj4+ICsgICAgICAgICAgICAgICAgbGV0IG11dCBjdHJsID0gaW9tYXAu cmVhZDMyKHRoMTUyMF9wd21fY3RybChod3B3bSkpOwo+IAo+IERvIHlvdSBuZWVkIHRoYXQgcmVh ZD8gSXNuJ3QgaXMgY2xlYXIgd2hhdCB0aGUgdmFsdWUgaXM/Cj4gCj4+ICsgICAgICAgICAgICAg ICAgY3RybCAmPSAhUFdNX0NGR19VUERBVEU7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgICBpb21h cC53cml0ZTMyKGN0cmwsIHRoMTUyMF9wd21fY3RybChod3B3bSkpOwo+PiArICAgICAgICAgICAg ICAgIGlvbWFwLndyaXRlMzIoMCwgdGgxNTIwX3B3bV9mcChod3B3bSkpOwo+PiArICAgICAgICAg ICAgICAgIGlvbWFwLndyaXRlMzIoY3RybCB8IFBXTV9DRkdfVVBEQVRFLCB0aDE1MjBfcHdtX2N0 cmwoaHdwd20pKTsKPj4gKyAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgIHJldHVybiBPaygo KSk7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgICBsZXQgY3RybCA9IHdmaHcuY3RybF92 YWwgJiAhUFdNX0NGR19VUERBVEU7Cj4gCj4gd2Zody5jdHJsX3ZhbCBuZXZlciBoYXMgUFdNX0NG R19VUERBVEUgc2V0LgoKWW91J3JlIHJpZ2h0IGFib3V0IHRoZSByZWR1bmRhbnQgcmVhZCBhbmQg dGhlIGxvZ2ljIHdpdGggUFdNX0NGR19VUERBVEUuClRoZXNlIGFyZSBsZWZ0b3ZlcnMgZnJvbSBh IGZydXN0cmF0aW5nIGRlYnVnIHNlc3Npb24gcmVsYXRlZCB0byBhIGNsb2NrCmdhdGluZyBpc3N1 ZS4gSSB3aWxsIHJlZmFjdG9yIHRoaXMgc2VjdGlvbiB0byBiZSBjbGVhbmVyIGFuZCBtb3JlCmRp cmVjdC4KCj4gCj4+ICsgICAgICAgIGlvbWFwLndyaXRlMzIoY3RybCwgdGgxNTIwX3B3bV9jdHJs KGh3cHdtKSk7Cj4+ICsgICAgICAgIGlvbWFwLndyaXRlMzIod2Zody5wZXJpb2RfY3ljbGVzLCB0 aDE1MjBfcHdtX3Blcihod3B3bSkpOwo+PiArICAgICAgICBpb21hcC53cml0ZTMyKHdmaHcuZHV0 eV9jeWNsZXMsIHRoMTUyMF9wd21fZnAoaHdwd20pKTsKPj4gKyAgICAgICAgaW9tYXAud3JpdGUz Mih3Zmh3LmN0cmxfdmFsIHwgUFdNX0NGR19VUERBVEUsIHRoMTUyMF9wd21fY3RybChod3B3bSkp Owo+PiArCj4+ICsgICAgICAgIGlmICF3YXNfZW5hYmxlZCB7Cj4+ICsgICAgICAgICAgICBpb21h cC53cml0ZTMyKHdmaHcuY3RybF92YWwgfCBQV01fU1RBUlQsIHRoMTUyMF9wd21fY3RybChod3B3 bSkpOwo+IAo+IENhbiB0aGlzIGJlIGNvbWJpbmVkIHdpdGggdGhlIGFib3ZlIHdyaXRlPwoKUGVy IHRoZSBUSDE1MjAgcGVyaXBoZXJhbCBtYW51YWwgWzJdIChjaGFwdGVyIDYuNi4yLjEpLCB0aGUg UFdNX1NUQVJUIGJpdApzaG91bGQgb25seSBiZSBhc3NlcnRlZCB3aGVuIGVuYWJsaW5nIHRoZSBQ V00gZm9yIHRoZSBmaXJzdCB0aW1lLCBub3QKZHVyaW5nIGEgcmVjb25maWd1cmF0aW9uIG9mIGFu IGFscmVhZHlydW5uaW5nIGNoYW5uZWwuIFRoZSBzZXBhcmF0ZSBpZgpzdGF0ZW1lbnQgaXMgdGhl cmUgdG8gaGFuZGxlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnQuCgpbMl0gLSBo dHRwczovL2dpdC5iZWFnbGVib2FyZC5vcmcvYmVhZ2xldi1haGVhZC9iZWFnbGV2LWFoZWFkLy0v YmxvYi82YjU2ZTJkNjk0ODVjMzc1YzU5MTJlYWEyNzkxZjc5ZjFkMDg5YzA3L2RvY3MvVEgxNTIw JTIwUGVyaXBoZXJhbCUyMEludGVyZmFjZSUyMFVzZXIlMgoKPiAKPj4gKyAgICAgICAgfQo+PiAr Cj4+ICsgICAgICAgIE9rKCgpKQo+PiArICAgIH0KPj4gK30KPj4gKwo+PiAraW1wbCBEcm9wIGZv ciBUaDE1MjBQd21Ecml2ZXJEYXRhIHsKPj4gKyAgICBmbiBkcm9wKCZtdXQgc2VsZikgewo+PiAr ICAgICAgICBzZWxmLmNsay5kaXNhYmxlX3VucHJlcGFyZSgpOwo+PiArICAgIH0KPj4gK30KPj4g Kwo+PiArc3RhdGljIFRIMTUyMF9QV01fT1BTOiBwd206OlB3bU9wc1ZUYWJsZSA9IHB3bTo6Y3Jl YXRlX3B3bV9vcHM6OjxUaDE1MjBQd21Ecml2ZXJEYXRhPigpOwo+PiArCj4+ICtzdHJ1Y3QgVGgx NTIwUHdtUGxhdGZvcm1Ecml2ZXIgewo+PiArICAgIF9yZWdpc3RyYXRpb246IHB3bTo6UmVnaXN0 cmF0aW9uLAo+PiArfQo+PiArCj4+ICtrZXJuZWw6Om9mX2RldmljZV90YWJsZSEoCj4+ICsgICAg T0ZfVEFCTEUsCj4+ICsgICAgTU9EVUxFX09GX1RBQkxFLAo+PiArICAgIDxUaDE1MjBQd21QbGF0 Zm9ybURyaXZlciBhcyBwbGF0Zm9ybTo6RHJpdmVyPjo6SWRJbmZvLAo+PiArICAgIFsob2Y6OkRl dmljZUlkOjpuZXcoY19zdHIhKCJ0aGVhZCx0aDE1MjAtcHdtIikpLCAoKSldCj4+ICspOwo+PiAr Cj4+ICtpbXBsIHBsYXRmb3JtOjpEcml2ZXIgZm9yIFRoMTUyMFB3bVBsYXRmb3JtRHJpdmVyIHsK Pj4gKyAgICB0eXBlIElkSW5mbyA9ICgpOwo+PiArICAgIGNvbnN0IE9GX0lEX1RBQkxFOiBPcHRp b248b2Y6OklkVGFibGU8U2VsZjo6SWRJbmZvPj4gPSBTb21lKCZPRl9UQUJMRSk7Cj4+ICsKPj4g KyAgICBmbiBwcm9iZSgKPj4gKyAgICAgICAgcGRldjogJnBsYXRmb3JtOjpEZXZpY2U8Q29yZT4s Cj4+ICsgICAgICAgIF9pZF9pbmZvOiBPcHRpb248JlNlbGY6OklkSW5mbz4sCj4+ICsgICAgKSAt PiBSZXN1bHQ8UGluPEtCb3g8U2VsZj4+PiB7Cj4+ICsgICAgICAgIGxldCBkZXYgPSBwZGV2LmFz X3JlZigpOwo+PiArICAgICAgICBsZXQgcmVzb3VyY2UgPSBwZGV2LnJlc291cmNlKDApLm9rX29y KEVOT0RFVik/Owo+PiArICAgICAgICBsZXQgaW9tZW0gPSBwZGV2LmlvcmVtYXBfcmVzb3VyY2Vf c2l6ZWQ6OjxUSDE1MjBfUFdNX1JFR19TSVpFPihyZXNvdXJjZSk/Owo+PiArICAgICAgICBsZXQg Y2xrID0gQ2xrOjpnZXQocGRldi5hc19yZWYoKSwgTm9uZSk/Owo+PiArCj4+ICsgICAgICAgIGNs ay5wcmVwYXJlX2VuYWJsZSgpPzsKPiAKPiBXZSBkb24ndCBoYXZlIGNsa19yYXRlX2dldF9leGNs dXNpdmUoKSB5ZXQsIHJpZ2h0PyBUaGVuIHBsZWFzZSBhZGQgYQo+IGNvbW1lbnQgaGVyZSB0aGF0 IHRoaXMgbmVlZHMgdG8gYmUgYWRkZWQgaGVyZSB3aGVuIGl0IGJlY2FtZSBhdmFpbGFibGUuCgpZ ZWFoIHNhZGx5IHdlIGRvbid0IGhhdmUgdGhhdCBhYnN0cmFjdGlvbiB5ZXQuCgo+IAo+PiArCj4+ ICsgICAgICAgIGxldCByYXRlX2h6ID0gY2xrLnJhdGUoKS5hc19oeigpOwo+PiArICAgICAgICBp ZiByYXRlX2h6ID09IDAgewo+PiArICAgICAgICAgICAgZGV2X2VyciEoZGV2LCAiQ2xvY2sgcmF0 ZSBpcyB6ZXJvXG4iKTsKPj4gKyAgICAgICAgICAgIHJldHVybiBFcnIoRUlOVkFMKTsKPj4gKyAg ICAgICAgfQo+PiArCj4+ICsgICAgICAgIGlmIHJhdGVfaHogPiB0aW1lOjpOU0VDX1BFUl9TRUMg YXMgdXNpemUgewo+PiArICAgICAgICAgICAgZGV2X2VyciEoCj4+ICsgICAgICAgICAgICAgICAg ZGV2LAo+PiArICAgICAgICAgICAgICAgICJDbG9jayByYXRlIHt9IEh6IGlzIHRvbyBoaWdoLCBu b3Qgc3VwcG9ydGVkLlxuIiwKPj4gKyAgICAgICAgICAgICAgICByYXRlX2h6Cj4+ICsgICAgICAg ICAgICApOwo+PiArICAgICAgICAgICAgcmV0dXJuIEVycihFUkFOR0UpOwo+PiArICAgICAgICB9 Cj4+ICsKPj4gKyAgICAgICAgbGV0IGNoaXAgPSBwd206OkNoaXA6Om5ldyhkZXYsIE1BWF9QV01f TlVNLCAwKT87Cj4+ICsKPj4gKyAgICAgICAgbGV0IGRydmRhdGEgPSBLQm94OjpuZXcoVGgxNTIw UHdtRHJpdmVyRGF0YSB7IGlvbWVtLCBjbGsgfSwgR0ZQX0tFUk5FTCk/Owo+PiArICAgICAgICBj aGlwLnNldF9kcnZkYXRhKGRydmRhdGEpOwo+PiArCj4+ICsgICAgICAgIGxldCByZWdpc3RyYXRp b24gPSBwd206OlJlZ2lzdHJhdGlvbjo6bmV3KGNoaXAsICZUSDE1MjBfUFdNX09QUyk/Owo+PiAr Cj4+ICsgICAgICAgIE9rKEtCb3g6Om5ldygKPj4gKyAgICAgICAgICAgIFRoMTUyMFB3bVBsYXRm b3JtRHJpdmVyIHsKPj4gKyAgICAgICAgICAgICAgICBfcmVnaXN0cmF0aW9uOiByZWdpc3RyYXRp b24sCj4+ICsgICAgICAgICAgICB9LAo+PiArICAgICAgICAgICAgR0ZQX0tFUk5FTCwKPj4gKyAg ICAgICAgKT8KPj4gKyAgICAgICAgLmludG8oKSkKPj4gKyAgICB9Cj4+ICt9Cj4+ICsKPj4gK2tl cm5lbDo6bW9kdWxlX3BsYXRmb3JtX2RyaXZlciEgewo+PiArICAgIHR5cGU6IFRoMTUyMFB3bVBs YXRmb3JtRHJpdmVyLAo+PiArICAgIG5hbWU6ICJwd20tdGgxNTIwIiwKPj4gKyAgICBhdXRob3I6 ICJNaWNoYWwgV2lsY3p5bnNraSA8bS53aWxjenluc2tpQHNhbXN1bmcuY29tPiIsCj4+ICsgICAg ZGVzY3JpcHRpb246ICJULUhFQUQgVEgxNTIwIFBXTSBkcml2ZXIiLAo+PiArICAgIGxpY2Vuc2U6 ICJHUEwgdjIiLAo+PiArfQo+IAo+IEJlc3QgcmVnYXJkcwo+IFV3ZQoKQmVzdCByZWdhcmRzLAot LSAKTWljaGFsIFdpbGN6eW5za2kgPG0ud2lsY3p5bnNraUBzYW1zdW5nLmNvbT4KCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2IG1haWxp bmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK