From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B0D2715D2 for ; Mon, 4 Jul 2022 18:42:50 +0000 (UTC) Received: by mail-ej1-f42.google.com with SMTP id q6so17991358eji.13 for ; Mon, 04 Jul 2022 11:42:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=RVJSQrTkQwe5Z79nmWayDFvWmq1VAQ9HxitkgUgMq7I=; b=nNwxh1be9FXpXETndamwxF8+aKZO5VyLdF+ZKCK/kHSIaHqMYO+HT4wuM8FJsaSVyQ uEaxS6vxcf83Ai90ONWLn7FiyMNS/KjlXSohBN5GCdH1s+IDfFP36sXlWWu+DRWFQKnw 4ooyMo+wi8vr0Lqivl75cK+xT7q2rR+qiGoLCArODj1s83Ynd7AXmTAwOtylUwqjWlM6 BcjD5Emg/qZP2BoBKSDBUNR9q79a9OhalapR0LxOg1jknW4JY/cH1tx5WDuxgoLem+jS kXhn4BuThlzNDNwYkFQdrpdjxqHbEbl1XfKwM9kTpYno08q5gmAVY7L+Jfnw8jFPZCe3 6jjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RVJSQrTkQwe5Z79nmWayDFvWmq1VAQ9HxitkgUgMq7I=; b=1J+aggLh/4JInCkbGx09/sbipWmSbB7G/H/v20zXB6i3htmiErtYj0KzcURsH5BRim HsbXjaySfIj5i9nqszGR+TRgVMR+blKBUiGV+1ytrsfydvjekzbM/yo8zINKAjdRda0D xxEmTpXYAcned2EJ8QSqNFrK2WuuDwdRAvTcFuRwzHKQVAel54QBHL5vYJQwjH2NSJbJ U25ljFu51axgqVDPqJqNcnf4z6ZEoCeWT/FfvYf97pGc6IJTQ9HibQr/UUDAwjv7rdUD AxBQIbNZ9tgQ43iXuV2Wc21u2Kb3OSvvhUt4/Ic0aU8B4l86CzA5LjN0uufd0r4Brxa/ WfPg== X-Gm-Message-State: AJIora/L5FC89PcSTznI7rgTAlj3/orGHmDU6MXRDfISjfwiAc0TMvFg IkuE+p5epCwV+odlbg4Kz4c= X-Google-Smtp-Source: AGRyM1v1ECUUyG9a10cJpPtqQtqmjS6SBNVFEIfhdSeE5cA+Z6q0MwW0/iujbPi9QkKpY+t1MedfGw== X-Received: by 2002:a17:907:2cf4:b0:72a:47b1:32ee with SMTP id hz20-20020a1709072cf400b0072a47b132eemr27235391ejc.293.1656960168878; Mon, 04 Jul 2022 11:42:48 -0700 (PDT) Received: from kista.localnet (213-161-3-76.dynamic.telemach.net. [213.161.3.76]) by smtp.gmail.com with ESMTPSA id 21-20020a170906301500b00728f6d4d0d7sm7818732ejz.67.2022.07.04.11.42.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Jul 2022 11:42:48 -0700 (PDT) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: Andre Przywara Cc: Samuel Holland , Chen-Yu Tsai , Rob Herring , Krzysztof Kozlowski , Icenowy Zheng , linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: Re: [PATCH v11 3/6] arm64: dts: allwinner: Add Allwinner H616 .dtsi file Date: Mon, 04 Jul 2022 20:42:47 +0200 Message-ID: <22699277.6Emhk5qWAg@kista> In-Reply-To: <20220704143057.76163208@donnerap.cambridge.arm.com> References: <20220428230933.15262-1-andre.przywara@arm.com> <2985997.CbtlEUcBR6@jernej-laptop> <20220704143057.76163208@donnerap.cambridge.arm.com> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="UTF-8" Dne ponedeljek, 04. julij 2022 ob 15:30:57 CEST je Andre Przywara napisal(a= ): > On Sat, 02 Jul 2022 23:16:53 +0200 > Jernej =C5=A0krabec wrote: >=20 > Hi Jernej, >=20 > > Dne =C4=8Detrtek, 30. junij 2022 ob 02:04:10 CEST je Andre Przywara nap= isal(a): > > > On Tue, 03 May 2022 21:05:11 +0200 > > > Jernej =C5=A0krabec wrote: > > >=20 > > > Hi Jernej, > > >=20 > > > many thanks for taking the time to wade through this file! > > > =20 > > > > Dne petek, 29. april 2022 ob 01:09:30 CEST je Andre Przywara=20 napisal(a): =20 > > > > > This (relatively) new SoC is similar to the H6, but drops the=20 (broken) > > > > > PCIe support and the USB 3.0 controller. It also gets the managem= ent > > > > > controller removed, which in turn removes *some*, but not all of = the > > > > > devices formerly dedicated to the ARISC (CPUS). > > > > > And while there is still the extra sunxi interrupt controller, the > > > > > package lacks the corresponding NMI pin, so no interrupts for the= =20 PMIC. > > > > >=20 > > > > > The reserved memory node is actually handled by Trusted Firmware= =20 now, > > > > > but U-Boot fails to propagate this to a separately loaded DTB, so= we > > > > > keep it in here for now, until U-Boot learns to do this properly. > > > > >=20 > > > > > Signed-off-by: Andre Przywara > > > > > --- > > > > >=20 > > > > > .../arm64/boot/dts/allwinner/sun50i-h616.dtsi | 574 ++++++++++++= +++ +++ > > > > > 1 file changed, 574 insertions(+) > > > > > create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi > > > > >=20 > > > > > diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi > > > > > b/arch/arm64/ =20 > > > >=20 > > > > boot/dts/allwinner/sun50i-h616.dtsi > > > > =20 > > > > > new file mode 100644 > > > > > index 000000000000..cc06cdd15ba5 > > > > > --- /dev/null > > > > > +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi > > > > > @@ -0,0 +1,574 @@ > > > > > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) > > > > > +// Copyright (C) 2020 Arm Ltd. > > > > > +// based on the H6 dtsi, which is: > > > > > +// Copyright (C) 2017 Icenowy Zheng > > > > > + > > > > > +#include > > > > > +#include > > > > > +#include > > > > > +#include > > > > > +#include > > > > > + > > > > > +/ { > > > > > + interrupt-parent =3D <&gic>; > > > > > + #address-cells =3D <2>; > > > > > + #size-cells =3D <2>; > > > > > + > > > > > + cpus { > > > > > + #address-cells =3D <1>; > > > > > + #size-cells =3D <0>; > > > > > + > > > > > + cpu0: cpu@0 { > > > > > + compatible =3D "arm,cortex-a53"; > > > > > + device_type =3D "cpu"; > > > > > + reg =3D <0>; > > > > > + enable-method =3D "psci"; > > > > > + clocks =3D <&ccu CLK_CPUX>; > > > > > + }; > > > > > + > > > > > + cpu1: cpu@1 { > > > > > + compatible =3D "arm,cortex-a53"; > > > > > + device_type =3D "cpu"; > > > > > + reg =3D <1>; > > > > > + enable-method =3D "psci"; > > > > > + clocks =3D <&ccu CLK_CPUX>; > > > > > + }; > > > > > + > > > > > + cpu2: cpu@2 { > > > > > + compatible =3D "arm,cortex-a53"; > > > > > + device_type =3D "cpu"; > > > > > + reg =3D <2>; > > > > > + enable-method =3D "psci"; > > > > > + clocks =3D <&ccu CLK_CPUX>; > > > > > + }; > > > > > + > > > > > + cpu3: cpu@3 { > > > > > + compatible =3D "arm,cortex-a53"; > > > > > + device_type =3D "cpu"; > > > > > + reg =3D <3>; > > > > > + enable-method =3D "psci"; > > > > > + clocks =3D <&ccu CLK_CPUX>; > > > > > + }; > > > > > + }; > > > > > + > > > > > + reserved-memory { > > > > > + #address-cells =3D <2>; > > > > > + #size-cells =3D <2>; > > > > > + ranges; > > > > > + > > > > > + /* 512KiB reserved for ARM Trusted Firmware (BL31) */ > > > > > + secmon_reserved: secmon@40000000 { > > > > > + reg =3D <0x0 0x40000000 0x0 0x80000>; > > > > > + no-map; > > > > > + }; > > > > > + }; =20 > > > >=20 > > > > I'm not a fan of above. If anything changes in future in BL31, U-Bo= ot > > > > would > > > > need to reconfigure it anyway. Can we just skip it? =20 > > >=20 > > > I am not a fan neither, but last time I checked this is needed to boo= t. > > > Indeed TF-A inserts this node, with the right values, into U-Boot's D= T. > > > And that's nicely preserved if you use that DT ($fdtcontroladdr) for > > > the kernel as well. > > > But if someone *loads* a DTB into U-Boot (to $fdt_addr_r), then > > > U-Boot fails to propagate the /reserved-memory node into that copy. > > > There does not seem to be a global notion of reserved memory in U-Boo= t. > > > Some commands (like tftp) explicitly parse the control DT to find and > > > respect reserved memory regions. bootm does that also, but only to > > > avoid placing the ramdisk or DTB into reserved memory. The information > > > ends up in images->lmb, but is not used to generate or amend nodes in > > > the target DT. > > > So the bits and pieces are there, but it will require some code to be > > > added to the generic U-Boot code. > > >=20 > > > So what do you think? Leaving this out will prevent loading DTBs into > > > U-Boot, at the moment, which sounds bad. I suggest we keep it in, for > > > now, it should not really hurt. U-Boot will hopefully start to do the > > > right thing soon, then we can either phase it out here (maybe when we > > > actually change something in TF-A), or let U-Boot fix it. =20 > >=20 > > TBH, if "soon" is really soon, I would rather wait with H616 DT until U- Boot=20 > > supports carrying over reserved memory nodes. >=20 > But this also carries compatibility issues. U-Boot support the H616 for > more than a year now, and the earliest possible U-Boot release having that > propagation code would be the one released in October.=20 I was hoping you would say July (next U-Boot release) :). > And then people > would still need to update first, so that's quite some months out. > And I was actually hoping to get at least the H616 DT patches off my > plate, and get them into the tree to have a stable and agreed upon base > (before this series turns into a teenager ;-) Yeah, I would like that too. > Then we could for instance update the U-Boot H616 support. >=20 > > Whatever we do now, it will have=20 > > compatibility issues. If we introduce reserved memory node now, we can'= t=20 > > easily drop it later. Bootloaders are not very often updated, but kerne= ls=20 and=20 > > DTB files are, at least in my experience. So when we decide to drop the= =20 node? >=20 > I think of the three possibilities: > - Drop the node now, and ask people to not load DTBs explicitly > - Drop the node when U-Boot learned to propagate the reservation > - Keep the node > the last one is the least painful: having this node in does not really > hurt, so we can be very relaxed with this removal decision: > - If U-Boot does not add the reserved node, we are covered. > - If U-Boot adds the node, it will do so in a way where it deals with > existing reservations. So either it doesn't actually change anything, or > it extends the reservation. > - Should the TF-A location actually move (and we have no plans or needs to > do that), people would only get this by updating the firmware, at which > point the U-Boot part would surely be in place already. We don't really > support updating just BL31 in an existing binary firmware image, so you > would get an updated U-Boot as well. >=20 > I think the worst case scenario is that users end up with an unneeded 512K > reservation. If they care, a firmware update should solve this problem. >=20 > As for the time to remove that node: we could do that at the time when > (or rather: if) we actually change the TF-A reservation. At the moment > there are no plans to do this, and the size reservation is more than > generous (the current debug build is actually 77 KB or so only). If there > is no change, and the node stays in the .dtsi, it doesn't really hurt, see > above. I see your point, but I would like to get some input from Samuel first. Samuel, what do you think? >=20 > > After 10 years? Alternatively, reserved memory node can be just dropped= =20 and=20 > > anyone loading DTB file from outside would need to make sure it's patch= ed.=20 But=20 > > that's unexpected from user perspective, although patching DT files is = done=20 by=20 > > some distros. >=20 > Yeah, let's not go there. As you know, I already dislike the idea of > explicitly loading DTBs at all, but I understand this is what people, and > distributions, do, so I'd rather have them covered. Hence the node to > work with existing firmware. Reusing DTB from U-Boot is only useful when you're happy with completeness = of=20 DT and with the lack of bugs in it. Then you can save troubles with skippin= g=20 external DTB load step and life is easier. But as you know, features and th= us=20 nodes are added in steps and sometimes some bugs are fixed, which means it'= s=20 extremely handy to have easily updatable DTB file. Yes, U-Boot can be=20 automated, but it's tedious for distro to maintain one bootloader package p= er=20 board. Ideally, distro shouldn't care at all about that, but many boards do= n't=20 have designated bootloader storage (SPI NOR flash in AW case), so they have= to=20 be combined on same storage, partition even, as distro. On the other hand,= =20 when building kernel, you automatically build all relevant DTB files, which= you=20 can then just copy to common place. No device specific handling needed. Als= o,=20 U-Boot doesn't sync DT files every release, so latest U-Boot doesn't necess= arly=20 mean latest DT. Above is a bit off topic, but I hope you understand why distros opt to use= =20 external DTB files (speaking from my own experiences). Best regards, Jernej >=20 > Does that make sense? >=20 > Cheers, > Andre >=20 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 C8318C433EF for ; Mon, 4 Jul 2022 18:44:08 +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=IrSkCubhyJWUaYPIOgscQdjsZ4u+DVjpmOvzg98pCOM=; b=Rg+nJ0DbGCsCzG Mgkba7L4r7mqFaxnFBBDwaKZEIOtr5J1LRMYaih0+wnSnDIThwnJwI+wYfGhScNAJrrgaSareS4rf Xn8UV2TXL3umWpzNCpfFP4s9V48vbqzS4CyGX4buGuA9d3byDicwEx6kauoKBebjL/n+24orY9UO/ OArkmEp3aTxM3zo7+rQpSd85QPT/WrLFVkHnFKNNVySBar8I5gsWjTLzmuXVwbMCEYzUSE6l7TuX9 mne80qx6kHXoeQKPd5LUg8ReldxBwowV8/x5aF4dS58xwq39uE0CidHRg8i+QyROI766fSO1aUmvu usBvMhnk0cUTrUhBdQ0g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o8R27-00AfvX-UN; Mon, 04 Jul 2022 18:42:56 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o8R24-00AfpR-Ji for linux-arm-kernel@lists.infradead.org; Mon, 04 Jul 2022 18:42:54 +0000 Received: by mail-ej1-x632.google.com with SMTP id u12so18014618eja.8 for ; Mon, 04 Jul 2022 11:42:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=RVJSQrTkQwe5Z79nmWayDFvWmq1VAQ9HxitkgUgMq7I=; b=nNwxh1be9FXpXETndamwxF8+aKZO5VyLdF+ZKCK/kHSIaHqMYO+HT4wuM8FJsaSVyQ uEaxS6vxcf83Ai90ONWLn7FiyMNS/KjlXSohBN5GCdH1s+IDfFP36sXlWWu+DRWFQKnw 4ooyMo+wi8vr0Lqivl75cK+xT7q2rR+qiGoLCArODj1s83Ynd7AXmTAwOtylUwqjWlM6 BcjD5Emg/qZP2BoBKSDBUNR9q79a9OhalapR0LxOg1jknW4JY/cH1tx5WDuxgoLem+jS kXhn4BuThlzNDNwYkFQdrpdjxqHbEbl1XfKwM9kTpYno08q5gmAVY7L+Jfnw8jFPZCe3 6jjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=RVJSQrTkQwe5Z79nmWayDFvWmq1VAQ9HxitkgUgMq7I=; b=v7HIROc4FM4oGhIC48/xMSit92qfIdIENBFbZ3FBhCdno7XyLBYri3Ugwyq5xj1ZvW Q6kxc6ihJqDP1OWdfOkTdeAvztrwGCRybFo2erGJmREjoiNIXDME2TohGWHJxmfzlZpH zqxJoOSF+no7ouWd6oagjfDeEeZH3dAKM0Y2YHW4cT2Zp1Qiv73DNT77WK4BfwjvSsh5 R2f8zwiLc15gnDDAbuV7vGBo1OQvZwwJPARJ3By8NT4LGU+d/8yH6ZbSOdYgq0r+P+6p AePZHBubN4iOtXK1DmJlKzPXsEyVp/EtKaU1Q0V46VYPJaRu16KLYTb+w2wOBZxkt64N iDag== X-Gm-Message-State: AJIora+2iC3ogYYUHuljcL2YZGowkgKrQYXZv09Sb8+2FAUJUc0qqT5s 1a7yZgdG18j5V2fW/HrTR+4= X-Google-Smtp-Source: AGRyM1v1ECUUyG9a10cJpPtqQtqmjS6SBNVFEIfhdSeE5cA+Z6q0MwW0/iujbPi9QkKpY+t1MedfGw== X-Received: by 2002:a17:907:2cf4:b0:72a:47b1:32ee with SMTP id hz20-20020a1709072cf400b0072a47b132eemr27235391ejc.293.1656960168878; Mon, 04 Jul 2022 11:42:48 -0700 (PDT) Received: from kista.localnet (213-161-3-76.dynamic.telemach.net. [213.161.3.76]) by smtp.gmail.com with ESMTPSA id 21-20020a170906301500b00728f6d4d0d7sm7818732ejz.67.2022.07.04.11.42.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Jul 2022 11:42:48 -0700 (PDT) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: Andre Przywara Cc: Samuel Holland , Chen-Yu Tsai , Rob Herring , Krzysztof Kozlowski , Icenowy Zheng , linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: Re: [PATCH v11 3/6] arm64: dts: allwinner: Add Allwinner H616 .dtsi file Date: Mon, 04 Jul 2022 20:42:47 +0200 Message-ID: <22699277.6Emhk5qWAg@kista> In-Reply-To: <20220704143057.76163208@donnerap.cambridge.arm.com> References: <20220428230933.15262-1-andre.przywara@arm.com> <2985997.CbtlEUcBR6@jernej-laptop> <20220704143057.76163208@donnerap.cambridge.arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220704_114252_702353_0D747C6C X-CRM114-Status: GOOD ( 71.09 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RG5lIHBvbmVkZWxqZWssIDA0LiBqdWxpaiAyMDIyIG9iIDE1OjMwOjU3IENFU1QgamUgQW5kcmUg UHJ6eXdhcmEgbmFwaXNhbChhKToKPiBPbiBTYXQsIDAyIEp1bCAyMDIyIDIzOjE2OjUzICswMjAw Cj4gSmVybmVqIMWga3JhYmVjIDxqZXJuZWouc2tyYWJlY0BnbWFpbC5jb20+IHdyb3RlOgo+IAo+ IEhpIEplcm5laiwKPiAKPiA+IERuZSDEjWV0cnRlaywgMzAuIGp1bmlqIDIwMjIgb2IgMDI6MDQ6 MTAgQ0VTVCBqZSBBbmRyZSBQcnp5d2FyYSBuYXBpc2FsKGEpOgo+ID4gPiBPbiBUdWUsIDAzIE1h eSAyMDIyIDIxOjA1OjExICswMjAwCj4gPiA+IEplcm5laiDFoGtyYWJlYyA8amVybmVqLnNrcmFi ZWNAZ21haWwuY29tPiB3cm90ZToKPiA+ID4gCj4gPiA+IEhpIEplcm5laiwKPiA+ID4gCj4gPiA+ IG1hbnkgdGhhbmtzIGZvciB0YWtpbmcgdGhlIHRpbWUgdG8gd2FkZSB0aHJvdWdoIHRoaXMgZmls ZSEKPiA+ID4gICAKPiA+ID4gPiBEbmUgcGV0ZWssIDI5LiBhcHJpbCAyMDIyIG9iIDAxOjA5OjMw IENFU1QgamUgQW5kcmUgUHJ6eXdhcmEgCm5hcGlzYWwoYSk6ICAKPiA+ID4gPiA+IFRoaXMgKHJl bGF0aXZlbHkpIG5ldyBTb0MgaXMgc2ltaWxhciB0byB0aGUgSDYsIGJ1dCBkcm9wcyB0aGUgCihi cm9rZW4pCj4gPiA+ID4gPiBQQ0llIHN1cHBvcnQgYW5kIHRoZSBVU0IgMy4wIGNvbnRyb2xsZXIu IEl0IGFsc28gZ2V0cyB0aGUgbWFuYWdlbWVudAo+ID4gPiA+ID4gY29udHJvbGxlciByZW1vdmVk LCB3aGljaCBpbiB0dXJuIHJlbW92ZXMgKnNvbWUqLCBidXQgbm90IGFsbCBvZiB0aGUKPiA+ID4g PiA+IGRldmljZXMgZm9ybWVybHkgZGVkaWNhdGVkIHRvIHRoZSBBUklTQyAoQ1BVUykuCj4gPiA+ ID4gPiBBbmQgd2hpbGUgdGhlcmUgaXMgc3RpbGwgdGhlIGV4dHJhIHN1bnhpIGludGVycnVwdCBj b250cm9sbGVyLCB0aGUKPiA+ID4gPiA+IHBhY2thZ2UgbGFja3MgdGhlIGNvcnJlc3BvbmRpbmcg Tk1JIHBpbiwgc28gbm8gaW50ZXJydXB0cyBmb3IgdGhlIApQTUlDLgo+ID4gPiA+ID4gCj4gPiA+ ID4gPiBUaGUgcmVzZXJ2ZWQgbWVtb3J5IG5vZGUgaXMgYWN0dWFsbHkgaGFuZGxlZCBieSBUcnVz dGVkIEZpcm13YXJlIApub3csCj4gPiA+ID4gPiBidXQgVS1Cb290IGZhaWxzIHRvIHByb3BhZ2F0 ZSB0aGlzIHRvIGEgc2VwYXJhdGVseSBsb2FkZWQgRFRCLCBzbyB3ZQo+ID4gPiA+ID4ga2VlcCBp dCBpbiBoZXJlIGZvciBub3csIHVudGlsIFUtQm9vdCBsZWFybnMgdG8gZG8gdGhpcyBwcm9wZXJs eS4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogQW5kcmUgUHJ6eXdhcmEgPGFu ZHJlLnByenl3YXJhQGFybS5jb20+Cj4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+IAo+ID4gPiA+ID4g IC4uLi9hcm02NC9ib290L2R0cy9hbGx3aW5uZXIvc3VuNTBpLWg2MTYuZHRzaSB8IDU3NCArKysr KysrKysrKysrKysKKysrCj4gPiA+ID4gPiAgMSBmaWxlIGNoYW5nZWQsIDU3NCBpbnNlcnRpb25z KCspCj4gPiA+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtNjQvYm9vdC9kdHMvYWxs d2lubmVyL3N1bjUwaS1oNjE2LmR0c2kKPiA+ID4gPiA+IAo+ID4gPiA+ID4gZGlmZiAtLWdpdCBh L2FyY2gvYXJtNjQvYm9vdC9kdHMvYWxsd2lubmVyL3N1bjUwaS1oNjE2LmR0c2kKPiA+ID4gPiA+ IGIvYXJjaC9hcm02NC8gIAo+ID4gPiA+IAo+ID4gPiA+IGJvb3QvZHRzL2FsbHdpbm5lci9zdW41 MGktaDYxNi5kdHNpCj4gPiA+ID4gICAKPiA+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g PiA+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmNjMDZjZGQxNWJhNQo+ID4gPiA+ID4gLS0tIC9k ZXYvbnVsbAo+ID4gPiA+ID4gKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9hbGx3aW5uZXIvc3Vu NTBpLWg2MTYuZHRzaQo+ID4gPiA+ID4gQEAgLTAsMCArMSw1NzQgQEAKPiA+ID4gPiA+ICsvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIE1JVCkKPiA+ID4gPiA+ICsvLyBD b3B5cmlnaHQgKEMpIDIwMjAgQXJtIEx0ZC4KPiA+ID4gPiA+ICsvLyBiYXNlZCBvbiB0aGUgSDYg ZHRzaSwgd2hpY2ggaXM6Cj4gPiA+ID4gPiArLy8gICBDb3B5cmlnaHQgKEMpIDIwMTcgSWNlbm93 eSBaaGVuZyA8aWNlbm93eUBhb3NjLmlvPgo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKyNpbmNsdWRl IDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+Cj4gPiA+ID4gPiAr I2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL3N1bjUwaS1oNjE2LWNjdS5oPgo+ID4gPiA+ID4g KyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9zdW41MGktaDYtci1jY3UuaD4KPiA+ID4gPiA+ ICsjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcmVzZXQvc3VuNTBpLWg2MTYtY2N1Lmg+Cj4gPiA+ID4g PiArI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Jlc2V0L3N1bjUwaS1oNi1yLWNjdS5oPgo+ID4gPiA+ ID4gKwo+ID4gPiA+ID4gKy8gewo+ID4gPiA+ID4gKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+ Owo+ID4gPiA+ID4gKwkjYWRkcmVzcy1jZWxscyA9IDwyPjsKPiA+ID4gPiA+ICsJI3NpemUtY2Vs bHMgPSA8Mj47Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCWNwdXMgewo+ID4gPiA+ID4gKwkJI2Fk ZHJlc3MtY2VsbHMgPSA8MT47Cj4gPiA+ID4gPiArCQkjc2l6ZS1jZWxscyA9IDwwPjsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICsJCWNwdTA6IGNwdUAwIHsKPiA+ID4gPiA+ICsJCQljb21wYXRpYmxl ID0gImFybSxjb3J0ZXgtYTUzIjsKPiA+ID4gPiA+ICsJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwo+ ID4gPiA+ID4gKwkJCXJlZyA9IDwwPjsKPiA+ID4gPiA+ICsJCQllbmFibGUtbWV0aG9kID0gInBz Y2kiOwo+ID4gPiA+ID4gKwkJCWNsb2NrcyA9IDwmY2N1IENMS19DUFVYPjsKPiA+ID4gPiA+ICsJ CX07Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArCQljcHUxOiBjcHVAMSB7Cj4gPiA+ID4gPiArCQkJ Y29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1MyI7Cj4gPiA+ID4gPiArCQkJZGV2aWNlX3R5cGUg PSAiY3B1IjsKPiA+ID4gPiA+ICsJCQlyZWcgPSA8MT47Cj4gPiA+ID4gPiArCQkJZW5hYmxlLW1l dGhvZCA9ICJwc2NpIjsKPiA+ID4gPiA+ICsJCQljbG9ja3MgPSA8JmNjdSBDTEtfQ1BVWD47Cj4g PiA+ID4gPiArCQl9Owo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJY3B1MjogY3B1QDIgewo+ID4g PiA+ID4gKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiOwo+ID4gPiA+ID4gKwkJCWRl dmljZV90eXBlID0gImNwdSI7Cj4gPiA+ID4gPiArCQkJcmVnID0gPDI+Owo+ID4gPiA+ID4gKwkJ CWVuYWJsZS1tZXRob2QgPSAicHNjaSI7Cj4gPiA+ID4gPiArCQkJY2xvY2tzID0gPCZjY3UgQ0xL X0NQVVg+Owo+ID4gPiA+ID4gKwkJfTsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsJCWNwdTM6IGNw dUAzIHsKPiA+ID4gPiA+ICsJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIjsKPiA+ID4g PiA+ICsJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwo+ID4gPiA+ID4gKwkJCXJlZyA9IDwzPjsKPiA+ ID4gPiA+ICsJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOwo+ID4gPiA+ID4gKwkJCWNsb2NrcyA9 IDwmY2N1IENMS19DUFVYPjsKPiA+ID4gPiA+ICsJCX07Cj4gPiA+ID4gPiArCX07Cj4gPiA+ID4g PiArCj4gPiA+ID4gPiArCXJlc2VydmVkLW1lbW9yeSB7Cj4gPiA+ID4gPiArCQkjYWRkcmVzcy1j ZWxscyA9IDwyPjsKPiA+ID4gPiA+ICsJCSNzaXplLWNlbGxzID0gPDI+Owo+ID4gPiA+ID4gKwkJ cmFuZ2VzOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkJLyogNTEyS2lCIHJlc2VydmVkIGZvciBB Uk0gVHJ1c3RlZCBGaXJtd2FyZSAoQkwzMSkgKi8KPiA+ID4gPiA+ICsJCXNlY21vbl9yZXNlcnZl ZDogc2VjbW9uQDQwMDAwMDAwIHsKPiA+ID4gPiA+ICsJCQlyZWcgPSA8MHgwIDB4NDAwMDAwMDAg MHgwIDB4ODAwMDA+Owo+ID4gPiA+ID4gKwkJCW5vLW1hcDsKPiA+ID4gPiA+ICsJCX07Cj4gPiA+ ID4gPiArCX07ICAKPiA+ID4gPiAKPiA+ID4gPiBJJ20gbm90IGEgZmFuIG9mIGFib3ZlLiBJZiBh bnl0aGluZyBjaGFuZ2VzIGluIGZ1dHVyZSBpbiBCTDMxLCBVLUJvb3QKPiA+ID4gPiB3b3VsZAo+ ID4gPiA+IG5lZWQgdG8gcmVjb25maWd1cmUgaXQgYW55d2F5LiBDYW4gd2UganVzdCBza2lwIGl0 PyAgCj4gPiA+IAo+ID4gPiBJIGFtIG5vdCBhIGZhbiBuZWl0aGVyLCBidXQgbGFzdCB0aW1lIEkg Y2hlY2tlZCB0aGlzIGlzIG5lZWRlZCB0byBib290Lgo+ID4gPiBJbmRlZWQgVEYtQSBpbnNlcnRz IHRoaXMgbm9kZSwgd2l0aCB0aGUgcmlnaHQgdmFsdWVzLCBpbnRvIFUtQm9vdCdzIERULgo+ID4g PiBBbmQgdGhhdCdzIG5pY2VseSBwcmVzZXJ2ZWQgaWYgeW91IHVzZSB0aGF0IERUICgkZmR0Y29u dHJvbGFkZHIpIGZvcgo+ID4gPiB0aGUga2VybmVsIGFzIHdlbGwuCj4gPiA+IEJ1dCBpZiBzb21l b25lICpsb2FkcyogYSBEVEIgaW50byBVLUJvb3QgKHRvICRmZHRfYWRkcl9yKSwgdGhlbgo+ID4g PiBVLUJvb3QgZmFpbHMgdG8gcHJvcGFnYXRlIHRoZSAvcmVzZXJ2ZWQtbWVtb3J5IG5vZGUgaW50 byB0aGF0IGNvcHkuCj4gPiA+IFRoZXJlIGRvZXMgbm90IHNlZW0gdG8gYmUgYSBnbG9iYWwgbm90 aW9uIG9mIHJlc2VydmVkIG1lbW9yeSBpbiBVLUJvb3QuCj4gPiA+IFNvbWUgY29tbWFuZHMgKGxp a2UgdGZ0cCkgZXhwbGljaXRseSBwYXJzZSB0aGUgY29udHJvbCBEVCB0byBmaW5kIGFuZAo+ID4g PiByZXNwZWN0IHJlc2VydmVkIG1lbW9yeSByZWdpb25zLiBib290bSBkb2VzIHRoYXQgYWxzbywg YnV0IG9ubHkgdG8KPiA+ID4gYXZvaWQgcGxhY2luZyB0aGUgcmFtZGlzayBvciBEVEIgaW50byBy ZXNlcnZlZCBtZW1vcnkuIFRoZSBpbmZvcm1hdGlvbgo+ID4gPiBlbmRzIHVwIGluIGltYWdlcy0+ bG1iLCBidXQgaXMgbm90IHVzZWQgdG8gZ2VuZXJhdGUgb3IgYW1lbmQgbm9kZXMgaW4KPiA+ID4g dGhlIHRhcmdldCBEVC4KPiA+ID4gU28gdGhlIGJpdHMgYW5kIHBpZWNlcyBhcmUgdGhlcmUsIGJ1 dCBpdCB3aWxsIHJlcXVpcmUgc29tZSBjb2RlIHRvIGJlCj4gPiA+IGFkZGVkIHRvIHRoZSBnZW5l cmljIFUtQm9vdCBjb2RlLgo+ID4gPiAKPiA+ID4gU28gd2hhdCBkbyB5b3UgdGhpbms/IExlYXZp bmcgdGhpcyBvdXQgd2lsbCBwcmV2ZW50IGxvYWRpbmcgRFRCcyBpbnRvCj4gPiA+IFUtQm9vdCwg YXQgdGhlIG1vbWVudCwgd2hpY2ggc291bmRzIGJhZC4gSSBzdWdnZXN0IHdlIGtlZXAgaXQgaW4s IGZvcgo+ID4gPiBub3csIGl0IHNob3VsZCBub3QgcmVhbGx5IGh1cnQuIFUtQm9vdCB3aWxsIGhv cGVmdWxseSBzdGFydCB0byBkbyB0aGUKPiA+ID4gcmlnaHQgdGhpbmcgc29vbiwgdGhlbiB3ZSBj YW4gZWl0aGVyIHBoYXNlIGl0IG91dCBoZXJlIChtYXliZSB3aGVuIHdlCj4gPiA+IGFjdHVhbGx5 IGNoYW5nZSBzb21ldGhpbmcgaW4gVEYtQSksIG9yIGxldCBVLUJvb3QgZml4IGl0LiAgCj4gPiAK PiA+IFRCSCwgaWYgInNvb24iIGlzIHJlYWxseSBzb29uLCBJIHdvdWxkIHJhdGhlciB3YWl0IHdp dGggSDYxNiBEVCB1bnRpbCBVLQpCb290IAo+ID4gc3VwcG9ydHMgY2Fycnlpbmcgb3ZlciByZXNl cnZlZCBtZW1vcnkgbm9kZXMuCj4gCj4gQnV0IHRoaXMgYWxzbyBjYXJyaWVzIGNvbXBhdGliaWxp dHkgaXNzdWVzLiBVLUJvb3Qgc3VwcG9ydCB0aGUgSDYxNiBmb3IKPiBtb3JlIHRoYW4gYSB5ZWFy IG5vdywgYW5kIHRoZSBlYXJsaWVzdCBwb3NzaWJsZSBVLUJvb3QgcmVsZWFzZSBoYXZpbmcgdGhh dAo+IHByb3BhZ2F0aW9uIGNvZGUgd291bGQgYmUgdGhlIG9uZSByZWxlYXNlZCBpbiBPY3RvYmVy LiAKCkkgd2FzIGhvcGluZyB5b3Ugd291bGQgc2F5IEp1bHkgKG5leHQgVS1Cb290IHJlbGVhc2Up IDopLgoKPiBBbmQgdGhlbiBwZW9wbGUKPiB3b3VsZCBzdGlsbCBuZWVkIHRvIHVwZGF0ZSBmaXJz dCwgc28gdGhhdCdzIHF1aXRlIHNvbWUgbW9udGhzIG91dC4KPiBBbmQgSSB3YXMgYWN0dWFsbHkg aG9waW5nIHRvIGdldCBhdCBsZWFzdCB0aGUgSDYxNiBEVCBwYXRjaGVzIG9mZiBteQo+IHBsYXRl LCBhbmQgZ2V0IHRoZW0gaW50byB0aGUgdHJlZSB0byBoYXZlIGEgc3RhYmxlIGFuZCBhZ3JlZWQg dXBvbiBiYXNlCj4gKGJlZm9yZSB0aGlzIHNlcmllcyB0dXJucyBpbnRvIGEgdGVlbmFnZXIgOy0p CgpZZWFoLCBJIHdvdWxkIGxpa2UgdGhhdCB0b28uCgo+IFRoZW4gd2UgY291bGQgZm9yIGluc3Rh bmNlIHVwZGF0ZSB0aGUgVS1Cb290IEg2MTYgc3VwcG9ydC4KPiAKPiA+IFdoYXRldmVyIHdlIGRv IG5vdywgaXQgd2lsbCBoYXZlIAo+ID4gY29tcGF0aWJpbGl0eSBpc3N1ZXMuIElmIHdlIGludHJv ZHVjZSByZXNlcnZlZCBtZW1vcnkgbm9kZSBub3csIHdlIGNhbid0IAo+ID4gZWFzaWx5IGRyb3Ag aXQgbGF0ZXIuIEJvb3Rsb2FkZXJzIGFyZSBub3QgdmVyeSBvZnRlbiB1cGRhdGVkLCBidXQga2Vy bmVscyAKYW5kIAo+ID4gRFRCIGZpbGVzIGFyZSwgYXQgbGVhc3QgaW4gbXkgZXhwZXJpZW5jZS4g U28gd2hlbiB3ZSBkZWNpZGUgdG8gZHJvcCB0aGUgCm5vZGU/Cj4gCj4gSSB0aGluayBvZiB0aGUg dGhyZWUgcG9zc2liaWxpdGllczoKPiAtIERyb3AgdGhlIG5vZGUgbm93LCBhbmQgYXNrIHBlb3Bs ZSB0byBub3QgbG9hZCBEVEJzIGV4cGxpY2l0bHkKPiAtIERyb3AgdGhlIG5vZGUgd2hlbiBVLUJv b3QgbGVhcm5lZCB0byBwcm9wYWdhdGUgdGhlIHJlc2VydmF0aW9uCj4gLSBLZWVwIHRoZSBub2Rl Cj4gdGhlIGxhc3Qgb25lIGlzIHRoZSBsZWFzdCBwYWluZnVsOiBoYXZpbmcgdGhpcyBub2RlIGlu IGRvZXMgbm90IHJlYWxseQo+IGh1cnQsIHNvIHdlIGNhbiBiZSB2ZXJ5IHJlbGF4ZWQgd2l0aCB0 aGlzIHJlbW92YWwgZGVjaXNpb246Cj4gLSBJZiBVLUJvb3QgZG9lcyBub3QgYWRkIHRoZSByZXNl cnZlZCBub2RlLCB3ZSBhcmUgY292ZXJlZC4KPiAtIElmIFUtQm9vdCBhZGRzIHRoZSBub2RlLCBp dCB3aWxsIGRvIHNvIGluIGEgd2F5IHdoZXJlIGl0IGRlYWxzIHdpdGgKPiBleGlzdGluZyByZXNl cnZhdGlvbnMuIFNvIGVpdGhlciBpdCBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBhbnl0aGluZywg b3IKPiBpdCBleHRlbmRzIHRoZSByZXNlcnZhdGlvbi4KPiAtIFNob3VsZCB0aGUgVEYtQSBsb2Nh dGlvbiBhY3R1YWxseSBtb3ZlIChhbmQgd2UgaGF2ZSBubyBwbGFucyBvciBuZWVkcyB0bwo+IGRv IHRoYXQpLCBwZW9wbGUgd291bGQgb25seSBnZXQgdGhpcyBieSB1cGRhdGluZyB0aGUgZmlybXdh cmUsIGF0IHdoaWNoCj4gcG9pbnQgdGhlIFUtQm9vdCBwYXJ0IHdvdWxkIHN1cmVseSBiZSBpbiBw bGFjZSBhbHJlYWR5LiBXZSBkb24ndCByZWFsbHkKPiBzdXBwb3J0IHVwZGF0aW5nIGp1c3QgQkwz MSBpbiBhbiBleGlzdGluZyBiaW5hcnkgZmlybXdhcmUgaW1hZ2UsIHNvIHlvdQo+IHdvdWxkIGdl dCBhbiB1cGRhdGVkIFUtQm9vdCBhcyB3ZWxsLgo+IAo+IEkgdGhpbmsgdGhlIHdvcnN0IGNhc2Ug c2NlbmFyaW8gaXMgdGhhdCB1c2VycyBlbmQgdXAgd2l0aCBhbiB1bm5lZWRlZCA1MTJLCj4gcmVz ZXJ2YXRpb24uIElmIHRoZXkgY2FyZSwgYSBmaXJtd2FyZSB1cGRhdGUgc2hvdWxkIHNvbHZlIHRo aXMgcHJvYmxlbS4KPiAKPiBBcyBmb3IgdGhlIHRpbWUgdG8gcmVtb3ZlIHRoYXQgbm9kZTogd2Ug Y291bGQgZG8gdGhhdCBhdCB0aGUgdGltZSB3aGVuCj4gKG9yIHJhdGhlcjogaWYpIHdlIGFjdHVh bGx5IGNoYW5nZSB0aGUgVEYtQSByZXNlcnZhdGlvbi4gQXQgdGhlIG1vbWVudAo+IHRoZXJlIGFy ZSBubyBwbGFucyB0byBkbyB0aGlzLCBhbmQgdGhlIHNpemUgcmVzZXJ2YXRpb24gaXMgbW9yZSB0 aGFuCj4gZ2VuZXJvdXMgKHRoZSBjdXJyZW50IGRlYnVnIGJ1aWxkIGlzIGFjdHVhbGx5IDc3IEtC IG9yIHNvIG9ubHkpLiBJZiB0aGVyZQo+IGlzIG5vIGNoYW5nZSwgYW5kIHRoZSBub2RlIHN0YXlz IGluIHRoZSAuZHRzaSwgaXQgZG9lc24ndCByZWFsbHkgaHVydCwgc2VlCj4gYWJvdmUuCgpJIHNl ZSB5b3VyIHBvaW50LCBidXQgSSB3b3VsZCBsaWtlIHRvIGdldCBzb21lIGlucHV0IGZyb20gU2Ft dWVsIGZpcnN0LgoKU2FtdWVsLCB3aGF0IGRvIHlvdSB0aGluaz8KCj4gCj4gPiBBZnRlciAxMCB5 ZWFycz8gQWx0ZXJuYXRpdmVseSwgcmVzZXJ2ZWQgbWVtb3J5IG5vZGUgY2FuIGJlIGp1c3QgZHJv cHBlZCAKYW5kIAo+ID4gYW55b25lIGxvYWRpbmcgRFRCIGZpbGUgZnJvbSBvdXRzaWRlIHdvdWxk IG5lZWQgdG8gbWFrZSBzdXJlIGl0J3MgcGF0Y2hlZC4gCkJ1dCAKPiA+IHRoYXQncyB1bmV4cGVj dGVkIGZyb20gdXNlciBwZXJzcGVjdGl2ZSwgYWx0aG91Z2ggcGF0Y2hpbmcgRFQgZmlsZXMgaXMg ZG9uZSAKYnkgCj4gPiBzb21lIGRpc3Ryb3MuCj4gCj4gWWVhaCwgbGV0J3Mgbm90IGdvIHRoZXJl LiBBcyB5b3Uga25vdywgSSBhbHJlYWR5IGRpc2xpa2UgdGhlIGlkZWEgb2YKPiBleHBsaWNpdGx5 IGxvYWRpbmcgRFRCcyBhdCBhbGwsIGJ1dCBJIHVuZGVyc3RhbmQgdGhpcyBpcyB3aGF0IHBlb3Bs ZSwgYW5kCj4gZGlzdHJpYnV0aW9ucywgZG8sIHNvIEknZCByYXRoZXIgaGF2ZSB0aGVtIGNvdmVy ZWQuIEhlbmNlIHRoZSBub2RlIHRvCj4gd29yayB3aXRoIGV4aXN0aW5nIGZpcm13YXJlLgoKUmV1 c2luZyBEVEIgZnJvbSBVLUJvb3QgaXMgb25seSB1c2VmdWwgd2hlbiB5b3UncmUgaGFwcHkgd2l0 aCBjb21wbGV0ZW5lc3Mgb2YgCkRUIGFuZCB3aXRoIHRoZSBsYWNrIG9mIGJ1Z3MgaW4gaXQuIFRo ZW4geW91IGNhbiBzYXZlIHRyb3VibGVzIHdpdGggc2tpcHBpbmcgCmV4dGVybmFsIERUQiBsb2Fk IHN0ZXAgYW5kIGxpZmUgaXMgZWFzaWVyLiBCdXQgYXMgeW91IGtub3csIGZlYXR1cmVzIGFuZCB0 aHVzIApub2RlcyBhcmUgYWRkZWQgaW4gc3RlcHMgYW5kIHNvbWV0aW1lcyBzb21lIGJ1Z3MgYXJl IGZpeGVkLCB3aGljaCBtZWFucyBpdCdzIApleHRyZW1lbHkgaGFuZHkgdG8gaGF2ZSBlYXNpbHkg dXBkYXRhYmxlIERUQiBmaWxlLiBZZXMsIFUtQm9vdCBjYW4gYmUgCmF1dG9tYXRlZCwgYnV0IGl0 J3MgdGVkaW91cyBmb3IgZGlzdHJvIHRvIG1haW50YWluIG9uZSBib290bG9hZGVyIHBhY2thZ2Ug cGVyIApib2FyZC4gSWRlYWxseSwgZGlzdHJvIHNob3VsZG4ndCBjYXJlIGF0IGFsbCBhYm91dCB0 aGF0LCBidXQgbWFueSBib2FyZHMgZG9uJ3QgCmhhdmUgZGVzaWduYXRlZCBib290bG9hZGVyIHN0 b3JhZ2UgKFNQSSBOT1IgZmxhc2ggaW4gQVcgY2FzZSksIHNvIHRoZXkgaGF2ZSB0byAKYmUgY29t YmluZWQgb24gc2FtZSBzdG9yYWdlLCBwYXJ0aXRpb24gZXZlbiwgYXMgZGlzdHJvLiBPbiB0aGUg b3RoZXIgaGFuZCwgCndoZW4gYnVpbGRpbmcga2VybmVsLCB5b3UgYXV0b21hdGljYWxseSBidWls ZCBhbGwgcmVsZXZhbnQgRFRCIGZpbGVzLCB3aGljaCB5b3UgCmNhbiB0aGVuIGp1c3QgY29weSB0 byBjb21tb24gcGxhY2UuIE5vIGRldmljZSBzcGVjaWZpYyBoYW5kbGluZyBuZWVkZWQuIEFsc28s IApVLUJvb3QgZG9lc24ndCBzeW5jIERUIGZpbGVzIGV2ZXJ5IHJlbGVhc2UsIHNvIGxhdGVzdCBV LUJvb3QgZG9lc24ndCBuZWNlc3Nhcmx5IAptZWFuIGxhdGVzdCBEVC4KCkFib3ZlIGlzIGEgYml0 IG9mZiB0b3BpYywgYnV0IEkgaG9wZSB5b3UgdW5kZXJzdGFuZCB3aHkgZGlzdHJvcyBvcHQgdG8g dXNlIApleHRlcm5hbCBEVEIgZmlsZXMgKHNwZWFraW5nIGZyb20gbXkgb3duIGV4cGVyaWVuY2Vz KS4KCkJlc3QgcmVnYXJkcywKSmVybmVqCgo+IAo+IERvZXMgdGhhdCBtYWtlIHNlbnNlPwo+IAo+ IENoZWVycywKPiBBbmRyZQo+IAoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==