From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A22AD4A3E for ; Wed, 6 Jul 2022 13:17:01 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 2118C106F; Wed, 6 Jul 2022 06:17:01 -0700 (PDT) Received: from donnerap.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6860C3F792; Wed, 6 Jul 2022 06:16:59 -0700 (PDT) Date: Wed, 6 Jul 2022 14:16:55 +0100 From: Andre Przywara To: Jernej =?UTF-8?B?xaBrcmFiZWM=?= 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: [PATCH v11 3/6] arm64: dts: allwinner: Add Allwinner H616 .dtsi file Message-ID: <20220706141655.15d2dd0e@donnerap.cambridge.arm.com> In-Reply-To: <5278570.Sb9uPGUboI@kista> References: <20220428230933.15262-1-andre.przywara@arm.com> <22699277.6Emhk5qWAg@kista> <20220704225534.3e1a901a@slackpad.lan> <5278570.Sb9uPGUboI@kista> Organization: ARM X-Mailer: Claws Mail 3.18.0 (GTK+ 2.24.32; aarch64-unknown-linux-gnu) Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Tue, 05 Jul 2022 19:32:26 +0200 Jernej =C5=A0krabec wrote: Hi Jernej, so after seemingly having finished writing this email, I realised that this won't really help, as I think this diverts the discussion. And the problem has been around for a while, and won't probably be solved easily or quickly. I think we agree to disagree here, or we should admit that there are different approaches ("bundled firmware" vs. "UEFI"), so in the interest of not blocking the H616 series: Shall I just keep the firmware node? This would work both ways, whereas dropping the node would impede the "bundled firmware" approach? Answers and replies, as mentioned going potentially a bit off-topic, below. > Dne ponedeljek, 04. julij 2022 ob 23:58:02 CEST je Andre Przywara napisal= (a): > > On Mon, 04 Jul 2022 20:42:47 +0200 > > Jernej =C5=A0krabec wrote: > >=20 > > Hi Jernej, > > =20 > > > Dne ponedeljek, 04. julij 2022 ob 15:30:57 CEST je Andre Przywara =20 > 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 Przywa= ra =20 > napisal(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 > > >=20 > > > napisal(a): =20 > > > > > > > > This (relatively) new SoC is similar to the H6, but drops t= he =20 > > >=20 > > > (broken) > > > =20 > > > > > > > > PCIe support and the USB 3.0 controller. It also gets the > > > > > > > > management > > > > > > > > controller removed, which in turn removes *some*, but not a= ll of > > > > > > > > the > > > > > > > > devices formerly dedicated to the ARISC (CPUS). > > > > > > > > And while there is still the extra sunxi interrupt controll= er, > > > > > > > > the > > > > > > > > package lacks the corresponding NMI pin, so no interrupts f= or > > > > > > > > the =20 > > >=20 > > > PMIC. > > > =20 > > > > > > > > The reserved memory node is actually handled by Trusted Fir= mware =20 > > >=20 > > > now, > > > =20 > > > > > > > > but U-Boot fails to propagate this to a separately loaded D= TB, > > > > > > > > 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 > > > > > > > > +++++++++++++++ =20 > > >=20 > > > +++ > > > =20 > > > > > > > > 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) =20 > */ > > > > > > > > + 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-Boot > > > > > > > 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 > > > > > > boot. > > > > > > Indeed TF-A inserts this node, with the right values, into U-Bo= ot's > > > > > > DT. > > > > > > 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 c= opy. > > > > > > There does not seem to be a global notion of reserved memory in > > > > > > U-Boot. > > > > > > Some commands (like tftp) explicitly parse the control DT to fi= nd > > > > > > 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 no= des > > > > > > 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 i= n, > > > > > > 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 w= hen > > > > > > 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 u= ntil > > > > > U- =20 > > >=20 > > > Boot > > > =20 > > > > > supports carrying over reserved memory nodes. =20 > > > >=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 havi= ng > > > > that > > > > propagation code would be the one released in October. =20 > > >=20 > > > I was hoping you would say July (next U-Boot release) :). =20 > >=20 > > Well, 2022.07 was supposed to be released today, and even if that is > > delayed by a bit, that's obviously far too late ;-) > > =20 > > > > 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 ;-) =20 > > >=20 > > > Yeah, I would like that too. > > > =20 > > > > Then we could for instance update the U-Boot H616 support. > > > > =20 > > > > > Whatever we do now, it will have > > > > > compatibility issues. If we introduce reserved memory node now, we > > > > > can't > > > > > easily drop it later. Bootloaders are not very often updated, but > > > > > kernels =20 > > >=20 > > > and > > > =20 > > > > > DTB files are, at least in my experience. So when we decide to dr= op > > > > > the =20 > > >=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 rea= lly > > > > 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 wi= th > > > > existing reservations. So either it doesn't actually change anythin= g, or > > > > it extends the reservation. > > > > - Should the TF-A location actually move (and we have no plans or n= eeds > > > > to > > > > do that), people would only get this by updating the firmware, at w= hich > > > > point the U-Boot part would surely be in place already. We don't re= ally > > > > 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 unneed= ed > > > > 512K > > > > reservation. If they care, a firmware update should solve this prob= lem. > > > >=20 > > > > As for the time to remove that node: we could do that at the time w= hen > > > > (or rather: if) we actually change the TF-A reservation. At the mom= ent > > > > 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 hu= rt, > > > > see > > > > above. =20 > > >=20 > > > I see your point, but I would like to get some input from Samuel firs= t. > > >=20 > > > Samuel, what do you think? > > > =20 > > > > > After 10 years? Alternatively, reserved memory node can be just > > > > > dropped =20 > > >=20 > > > and > > > =20 > > > > > anyone loading DTB file from outside would need to make sure it's > > > > > patched. =20 > > >=20 > > > But > > > =20 > > > > > that's unexpected from user perspective, although patching DT fil= es is > > > > > done =20 > > >=20 > > > by > > > =20 > > > > > some distros. =20 > > > >=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 peopl= e, > > > > and > > > > distributions, do, so I'd rather have them covered. Hence the node = to > > > > work with existing firmware. =20 > > >=20 > > > Reusing DTB from U-Boot is only useful when you're happy with complet= eness > > > of DT and with the lack of bugs in it. Then you can save troubles with > > > skipping external DTB load step and life is easier. But as you know, > > > features and thus nodes are added in steps and sometimes some bugs are > > > fixed, which means it's extremely handy to have easily updatable DTB > > > file. =20 > >=20 > > Yes, definitely, see my reply to Samuel. I just held back with the DT > > update in U-Boot because of the conflict between "we only take pure > > kernel tree DTs" and "there is a breaking change" (r_intc binding). > >=20 > > If we find a way forward with the DT stability problem, I am happy to > > push for a much more frequent DT update, or even update just the DT in > > an existing firmware installation. This can be automated, since the DTB > > is just a member in the FIT image, which can be re-assembled with an > > updated DTB by some tool or script. Or we use capsule updates, of just > > the DTB, separately (if this is possible)? =20 >=20 > I would like to have forward compatibility too, but IMO it's not very=20 > realistic. Sooner or later we'll find something, like r_intc, again that = won't=20 > be possible to integrate in forward compatible manner.=20 That's a shame, I think we should at least try. And with my x86 background let me tell you: there are solutions to those compatibility problems ;-) The more nasty ones might be borderline hackish, but it's a question of priorities, I guess. > > > Yes, U-Boot can be > > > automated, but it's tedious for distro to maintain one bootloader pac= kage > > > per board. Ideally, distro shouldn't care at all about that, =20 > >=20 > > Yes, I totally agree, distros should not ship firmware. Since leaving > > this to the board vendors is not realistic, I wonder if we (as "the > > sunxi community") should step up here, and provide binary builds (purely > > for convenience reasons) of board firmware? That could be updated from > > a running Linux, or put on an SD card, or fetched by distros to > > generate an installer? Wasn't there even some central storage offered > > lately by Linux, to hold (UEFI) firmware update files? =20 >=20 > As someone who's working on distro which supports many SoCs from variety = of=20 > vendors, But that is relative, isn't it? I count 23 supported Allwinner devices in LibreELEC, out of the 160 defconfigs in U-Boot or >180 sunxi .dts files in the kernel. So as most distributions, even with your ARM device focus, you chose to limit the number of supported devices, as that approach inherently doesn't scale. I see the reasons behind this, because of the special focus of LibreELEC, and probably the idea of giving a smooth user experience, but you could potentially cover much more devices by offering a generic UEFI image, as most *generic* distributions do, and as LE does for x86. But this relies on having a stable DT for the platform. I think conceptually this problem has been solved a long time ago: there is some interface between firmware and the kernel, which allows a generic kernel to configure itself accordingly. I refuse the idea that Arm based device should be any different in this respect. Historically, because many Arm based machines have a strong embedded background, that was not the case, but I think we should move on from those dark ages (in terms of support and maintainability). > I can tell you that we'll ship bootloader integrated into our image=20 > for years to come. Anyway, I also like to build U-Boot using my own optio= ns.=20 > For example, I disable HDMI driver for A64, H3 and H5, because it turns o= ut=20 > that at least on H5, it can clash with Linux driver. That is good to hear, please tell the sunxi U-Boot maintainer, so that we can fix it ;-) > Other distros prefer to=20 > show some splash screen, etc. One size fits all solution doesn't seems=20 > realistic to me. Maybe only if *everything* would be configurable and the= re=20 > would be a way for distro to preconfigure it. >=20 > TBH, building U-Boot, Crust and TF-A is easy and ability to customize the= m is=20 > very handy. > > > but many boards don't > > > have designated bootloader storage (SPI NOR flash in AW case), so they > > > have to be combined on same storage, partition even, as distro. =20 > >=20 > > Have you tried eMMC boot partitions? I found them equally convenient as > > SPI flash, and while not too many boards actually have SPI flash, > > quite some have eMMC (thinking about TV boxes). I recently even > > used "dual boot" with a BSP installation. > > And even the smallest eMMCs seem to have 4 MB per boot partition, so > > plenty of space for U-Boot (plus TF-A plus crust). =20 >=20 > No, I didn't. I don't see any benefit of using eMMC boot partition over=20 > treating eMMC as usual SD card and installing bootloader to sector 16. The firmware is out of the way of normal (accidental) accesses, as it lives in a separate block device, which is read-only, initially. And it doesn't clash with partition tables. This gives the kind of separation that people are used to on other computers: the firmware belongs to the device, the OS is provided by the user. We documented how to install firmware there in U-Boot's sunxi.rst.=20 > Anyway, that won't change situation at all. SD card image with integrated= =20 > bootloader is still king. Sure, if you don't have any other storage, then SD card it is. But this still does not require marrying firmware and OS: you could start with a "just firmware SD card", then install the OS from a USB device, or from a generic image file copied to some SD partition. And then suddenly the pure firmware image becomes OS/distro agnostic. And conceptually this approach doesn't *prevent* separating firmware and kernel/distro, it just allows you to get away with it. > There are several reasons for that: > - cheapest boards are most popular and usually have only SD card for stor= age=20 > (think OrangePi PC). There is nothing that you can do about it, except=20 > including bootloader on SD card image. > - if you want to switch from Android to our distro, you need bootable SD = card=20 > due to higher boot priority (speaking for AW SoCs) > - not everyone wants to overwrite eMMC. Some prefer keeping Android, so i= t can=20 > be used later for whatever purpose. > - some users have several distros for same board, each on it's own SD car= d.=20 > Needless to say, each distro adjusted bootloader to its needs. All fine, but I don't see how this affects this discussion here. Yes, you can treat those machines like embedded devices, and bundle firmware and OS, but this is surely not the only way of deployment we should support. Being able to just offer one generic UEFI based image seems much more scalable to me. > I like to offer flexibility in boot options, especially because it's curr= ently=20 > easy, thanks to integrated customized bootloader and external loading of = dtb=20 > files :) Though I don't understand why you require external DTB loading: if you marry distro and firmware anyway, you could as well put your DTB of choice into U-Boot (in the U-Boot source tree, or replace it in the generated FIT image). That looks like a one-time effort in your build system? > > > On the other hand, > > > when building kernel, you automatically build all relevant DTB files, > > > which you can then just copy to common place. No device specific hand= ling > > > needed. Also, U-Boot doesn't sync DT files every release, so latest > > > U-Boot doesn't necessarly mean latest DT. =20 > >=20 > > Yes, for the compatibility reasons mentioned. I am more than happy to > > make this a regular exercise (say at each kernel's -rc3 or so). =20 >=20 > What about breaking changes? They can be important for new, useful=20 > functionality but older kernels won't know what to do. Yes, that is the core of this discussion. Doing this relies on not having them in the first place. There is no problem when this affects new features, or functionality that the old kernel didn't support anyway. But we must avoid change affecting older kernels. At least I would like to ask for us to try: in my experience with some thinking and clever code we can pull this off. Other platforms seem to be able to commit to this. As a compromise, I was wondering if we should define some time of grace period, initially, were we don't guarantee non-breaking changes only. So the first, say three, kernels could include breaking changes, but afterwards we stick to support at least this kernel, with every new DT to come. > > Sadly, I don't think we're even close to avoiding shipping bootloader i= n =20 > distro images or even external DTB loading. > > > Above is a bit off topic, but I hope you understand why distros opt t= o use > > > external DTB files (speaking from my own experiences). =20 > >=20 > > Yes, I understand where they (including LE) are coming from, to provide > > a pragmatic solution to the users' problems. And that's why I wanted to > > still give the possibility to load a DTB, even though I think this > > should not be the standard way. =20 >=20 > I think loading external DTB support is important and shouldn't be ditche= d=20 > anytime soon. If I understand correctly, that's an issue only on SoCs wit= h TF- > A, which means only 64-bit AW SoCs. Yes, 32-bit AW SoCs are still a thing= and=20 > still used and no, I don't want TF-A there :). I think it's a conceptual issue, not TF-A related: A DT was always meant to be amended by firmware (think of the memory node, or the MAC address). U-Boot just decided to make those changes very late, just before launching the kernel, so that this newly loaded DTB is already available. But if the SPL decides to make changes, or picks a certain DT, you have this problem as well. Cheers, Andre 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 B8B50C433EF for ; Wed, 6 Jul 2022 13:18:41 +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:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=LLmMbZGq5560FkRPBCXJh/J63u96M5fJIWelVJcy/sw=; b=31K1JxqZiupSpf JK+Xg0W+0DKzytX9GuEL6tphcUydQkWBKoZL1y3Tv+DWwOKVwCiSMuUmdhSuu+5TB69QqwbRPMC0c rB6MymU3rVie8tpXlWxB5j6ZM58UjGpUZnn5hl5xTmBo8ftaH9Ez3Zyqe/fusH9MLOxuJfR7sMFix PTlDuCjemEAldH7JQxayPgkdMtMprfNM8CkwgeL7hfkA14S4LzDw96+NJb7sr7tGV3SgWpA76h88t ZABfA60S3nZWteNss8yRJrauR7ZYrJFNivbeKsdLEASZV9DRxJFCWV9EX9+21vg9DDbaUYaQn/+YW C/KHjbuXTPGgmCeJdn9Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o94u6-00ADsg-Lp; Wed, 06 Jul 2022 13:17:18 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o94u1-00ADkK-OR for linux-arm-kernel@lists.infradead.org; Wed, 06 Jul 2022 13:17:17 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 2118C106F; Wed, 6 Jul 2022 06:17:01 -0700 (PDT) Received: from donnerap.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6860C3F792; Wed, 6 Jul 2022 06:16:59 -0700 (PDT) Date: Wed, 6 Jul 2022 14:16:55 +0100 From: Andre Przywara To: Jernej =?UTF-8?B?xaBrcmFiZWM=?= 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: [PATCH v11 3/6] arm64: dts: allwinner: Add Allwinner H616 .dtsi file Message-ID: <20220706141655.15d2dd0e@donnerap.cambridge.arm.com> In-Reply-To: <5278570.Sb9uPGUboI@kista> References: <20220428230933.15262-1-andre.przywara@arm.com> <22699277.6Emhk5qWAg@kista> <20220704225534.3e1a901a@slackpad.lan> <5278570.Sb9uPGUboI@kista> Organization: ARM X-Mailer: Claws Mail 3.18.0 (GTK+ 2.24.32; aarch64-unknown-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220706_061713_940736_DFD4C8DB X-CRM114-Status: GOOD ( 88.27 ) 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 T24gVHVlLCAwNSBKdWwgMjAyMiAxOTozMjoyNiArMDIwMApKZXJuZWogxaBrcmFiZWMgPGplcm5l ai5za3JhYmVjQGdtYWlsLmNvbT4gd3JvdGU6CgpIaSBKZXJuZWosCgpzbyBhZnRlciBzZWVtaW5n bHkgaGF2aW5nIGZpbmlzaGVkIHdyaXRpbmcgdGhpcyBlbWFpbCwgSSByZWFsaXNlZCB0aGF0CnRo aXMgd29uJ3QgcmVhbGx5IGhlbHAsIGFzIEkgdGhpbmsgdGhpcyBkaXZlcnRzIHRoZSBkaXNjdXNz aW9uLiBBbmQgdGhlCnByb2JsZW0gaGFzIGJlZW4gYXJvdW5kIGZvciBhIHdoaWxlLCBhbmQgd29u J3QgcHJvYmFibHkgYmUgc29sdmVkIGVhc2lseQpvciBxdWlja2x5LiBJIHRoaW5rIHdlIGFncmVl IHRvIGRpc2FncmVlIGhlcmUsIG9yIHdlIHNob3VsZCBhZG1pdCB0aGF0CnRoZXJlIGFyZSBkaWZm ZXJlbnQgYXBwcm9hY2hlcyAoImJ1bmRsZWQgZmlybXdhcmUiIHZzLiAiVUVGSSIpLCBzbyBpbiB0 aGUKaW50ZXJlc3Qgb2Ygbm90IGJsb2NraW5nIHRoZSBINjE2IHNlcmllczoKClNoYWxsIEkganVz dCBrZWVwIHRoZSBmaXJtd2FyZSBub2RlPyBUaGlzIHdvdWxkIHdvcmsgYm90aCB3YXlzLCB3aGVy ZWFzCmRyb3BwaW5nIHRoZSBub2RlIHdvdWxkIGltcGVkZSB0aGUgImJ1bmRsZWQgZmlybXdhcmUi IGFwcHJvYWNoPwoKQW5zd2VycyBhbmQgcmVwbGllcywgYXMgbWVudGlvbmVkIGdvaW5nIHBvdGVu dGlhbGx5IGEgYml0IG9mZi10b3BpYywgYmVsb3cuCgo+IERuZSBwb25lZGVsamVrLCAwNC4ganVs aWogMjAyMiBvYiAyMzo1ODowMiBDRVNUIGplIEFuZHJlIFByenl3YXJhIG5hcGlzYWwoYSk6Cj4g PiBPbiBNb24sIDA0IEp1bCAyMDIyIDIwOjQyOjQ3ICswMjAwCj4gPiBKZXJuZWogxaBrcmFiZWMg PGplcm5lai5za3JhYmVjQGdtYWlsLmNvbT4gd3JvdGU6Cj4gPiAKPiA+IEhpIEplcm5laiwKPiA+ ICAgCj4gPiA+IERuZSBwb25lZGVsamVrLCAwNC4ganVsaWogMjAyMiBvYiAxNTozMDo1NyBDRVNU IGplIEFuZHJlIFByenl3YXJhICAgCj4gbmFwaXNhbChhKToKPiA+ID4gPiBPbiBTYXQsIDAyIEp1 bCAyMDIyIDIzOjE2OjUzICswMjAwCj4gPiA+ID4gSmVybmVqIMWga3JhYmVjIDxqZXJuZWouc2ty YWJlY0BnbWFpbC5jb20+IHdyb3RlOgo+ID4gPiA+IAo+ID4gPiA+IEhpIEplcm5laiwKPiA+ID4g PiAgIAo+ID4gPiA+ID4gRG5lIMSNZXRydGVrLCAzMC4ganVuaWogMjAyMiBvYiAwMjowNDoxMCBD RVNUIGplIEFuZHJlIFByenl3YXJhICAgCj4gbmFwaXNhbChhKToKPiA+ID4gPiA+ID4gT24gVHVl LCAwMyBNYXkgMjAyMiAyMTowNToxMSArMDIwMAo+ID4gPiA+ID4gPiBKZXJuZWogxaBrcmFiZWMg PGplcm5lai5za3JhYmVjQGdtYWlsLmNvbT4gd3JvdGU6Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4g PiBIaSBKZXJuZWosCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBtYW55IHRoYW5rcyBmb3IgdGFr aW5nIHRoZSB0aW1lIHRvIHdhZGUgdGhyb3VnaCB0aGlzIGZpbGUhCj4gPiA+ID4gPiA+ICAgCj4g PiA+ID4gPiA+ID4gRG5lIHBldGVrLCAyOS4gYXByaWwgMjAyMiBvYiAwMTowOTozMCBDRVNUIGpl IEFuZHJlIFByenl3YXJhICAKPiA+ID4gCj4gPiA+IG5hcGlzYWwoYSk6ICAKPiA+ID4gPiA+ID4g PiA+IFRoaXMgKHJlbGF0aXZlbHkpIG5ldyBTb0MgaXMgc2ltaWxhciB0byB0aGUgSDYsIGJ1dCBk cm9wcyB0aGUgIAo+ID4gPiAKPiA+ID4gKGJyb2tlbikKPiA+ID4gICAKPiA+ID4gPiA+ID4gPiA+ IFBDSWUgc3VwcG9ydCBhbmQgdGhlIFVTQiAzLjAgY29udHJvbGxlci4gSXQgYWxzbyBnZXRzIHRo ZQo+ID4gPiA+ID4gPiA+ID4gbWFuYWdlbWVudAo+ID4gPiA+ID4gPiA+ID4gY29udHJvbGxlciBy ZW1vdmVkLCB3aGljaCBpbiB0dXJuIHJlbW92ZXMgKnNvbWUqLCBidXQgbm90IGFsbCBvZgo+ID4g PiA+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiA+ID4gPiBkZXZpY2VzIGZvcm1lcmx5IGRlZGljYXRl ZCB0byB0aGUgQVJJU0MgKENQVVMpLgo+ID4gPiA+ID4gPiA+ID4gQW5kIHdoaWxlIHRoZXJlIGlz IHN0aWxsIHRoZSBleHRyYSBzdW54aSBpbnRlcnJ1cHQgY29udHJvbGxlciwKPiA+ID4gPiA+ID4g PiA+IHRoZQo+ID4gPiA+ID4gPiA+ID4gcGFja2FnZSBsYWNrcyB0aGUgY29ycmVzcG9uZGluZyBO TUkgcGluLCBzbyBubyBpbnRlcnJ1cHRzIGZvcgo+ID4gPiA+ID4gPiA+ID4gdGhlICAKPiA+ID4g Cj4gPiA+IFBNSUMuCj4gPiA+ICAgCj4gPiA+ID4gPiA+ID4gPiBUaGUgcmVzZXJ2ZWQgbWVtb3J5 IG5vZGUgaXMgYWN0dWFsbHkgaGFuZGxlZCBieSBUcnVzdGVkIEZpcm13YXJlICAKPiA+ID4gCj4g PiA+IG5vdywKPiA+ID4gICAKPiA+ID4gPiA+ID4gPiA+IGJ1dCBVLUJvb3QgZmFpbHMgdG8gcHJv cGFnYXRlIHRoaXMgdG8gYSBzZXBhcmF0ZWx5IGxvYWRlZCBEVEIsCj4gPiA+ID4gPiA+ID4gPiBz byB3ZQo+ID4gPiA+ID4gPiA+ID4ga2VlcCBpdCBpbiBoZXJlIGZvciBub3csIHVudGlsIFUtQm9v dCBsZWFybnMgdG8gZG8gdGhpcwo+ID4gPiA+ID4gPiA+ID4gcHJvcGVybHkuCj4gPiA+ID4gPiA+ ID4gPiAKPiA+ID4gPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEFuZHJlIFByenl3YXJhIDxhbmRy ZS5wcnp5d2FyYUBhcm0uY29tPgo+ID4gPiA+ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiA+ID4gPiAK PiA+ID4gPiA+ID4gPiA+ICAuLi4vYXJtNjQvYm9vdC9kdHMvYWxsd2lubmVyL3N1bjUwaS1oNjE2 LmR0c2kgfCA1NzQKPiA+ID4gPiA+ID4gPiA+ICArKysrKysrKysrKysrKysgIAo+ID4gPiAKPiA+ ID4gKysrCj4gPiA+ICAgCj4gPiA+ID4gPiA+ID4gPiAgMSBmaWxlIGNoYW5nZWQsIDU3NCBpbnNl cnRpb25zKCspCj4gPiA+ID4gPiA+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0Cj4gPiA+ID4gPiA+ ID4gPiAgYXJjaC9hcm02NC9ib290L2R0cy9hbGx3aW5uZXIvc3VuNTBpLWg2MTYuZHRzaQo+ID4g PiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290 L2R0cy9hbGx3aW5uZXIvc3VuNTBpLWg2MTYuZHRzaQo+ID4gPiA+ID4gPiA+ID4gYi9hcmNoL2Fy bTY0LyAgCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gYm9vdC9kdHMvYWxsd2lubmVyL3N1 bjUwaS1oNjE2LmR0c2kKPiA+ID4gPiA+ID4gPiAgIAo+ID4gPiA+ID4gPiA+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiA+ID4gPiA+ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uY2MwNmNkZDE1 YmE1Cj4gPiA+ID4gPiA+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ID4gPiA+ID4gPiArKysgYi9h cmNoL2FybTY0L2Jvb3QvZHRzL2FsbHdpbm5lci9zdW41MGktaDYxNi5kdHNpCj4gPiA+ID4gPiA+ ID4gPiBAQCAtMCwwICsxLDU3NCBAQAo+ID4gPiA+ID4gPiA+ID4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiAoR1BMLTIuMCsgT1IgTUlUKQo+ID4gPiA+ID4gPiA+ID4gKy8vIENvcHlyaWdo dCAoQykgMjAyMCBBcm0gTHRkLgo+ID4gPiA+ID4gPiA+ID4gKy8vIGJhc2VkIG9uIHRoZSBINiBk dHNpLCB3aGljaCBpczoKPiA+ID4gPiA+ID4gPiA+ICsvLyAgIENvcHlyaWdodCAoQykgMjAxNyBJ Y2Vub3d5IFpoZW5nIDxpY2Vub3d5QGFvc2MuaW8+Cj4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4g PiA+ID4gPiArI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2FybS1n aWMuaD4KPiA+ID4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svc3VuNTBp LWg2MTYtY2N1Lmg+Cj4gPiA+ID4gPiA+ID4gPiArI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2Nr L3N1bjUwaS1oNi1yLWNjdS5oPgo+ID4gPiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxkdC1iaW5kaW5n cy9yZXNldC9zdW41MGktaDYxNi1jY3UuaD4KPiA+ID4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8ZHQt YmluZGluZ3MvcmVzZXQvc3VuNTBpLWg2LXItY2N1Lmg+Cj4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ ID4gPiA+ID4gPiArLyB7Cj4gPiA+ID4gPiA+ID4gPiArCWludGVycnVwdC1wYXJlbnQgPSA8Jmdp Yz47Cj4gPiA+ID4gPiA+ID4gPiArCSNhZGRyZXNzLWNlbGxzID0gPDI+Owo+ID4gPiA+ID4gPiA+ ID4gKwkjc2l6ZS1jZWxscyA9IDwyPjsKPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ ICsJY3B1cyB7Cj4gPiA+ID4gPiA+ID4gPiArCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKPiA+ID4g PiA+ID4gPiA+ICsJCSNzaXplLWNlbGxzID0gPDA+Owo+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gPiA+ID4gKwkJY3B1MDogY3B1QDAgewo+ID4gPiA+ID4gPiA+ID4gKwkJCWNvbXBhdGlibGUg PSAiYXJtLGNvcnRleC1hNTMiOwo+ID4gPiA+ID4gPiA+ID4gKwkJCWRldmljZV90eXBlID0gImNw dSI7Cj4gPiA+ID4gPiA+ID4gPiArCQkJcmVnID0gPDA+Owo+ID4gPiA+ID4gPiA+ID4gKwkJCWVu YWJsZS1tZXRob2QgPSAicHNjaSI7Cj4gPiA+ID4gPiA+ID4gPiArCQkJY2xvY2tzID0gPCZjY3Ug Q0xLX0NQVVg+Owo+ID4gPiA+ID4gPiA+ID4gKwkJfTsKPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4g PiA+ID4gPiA+ICsJCWNwdTE6IGNwdUAxIHsKPiA+ID4gPiA+ID4gPiA+ICsJCQljb21wYXRpYmxl ID0gImFybSxjb3J0ZXgtYTUzIjsKPiA+ID4gPiA+ID4gPiA+ICsJCQlkZXZpY2VfdHlwZSA9ICJj cHUiOwo+ID4gPiA+ID4gPiA+ID4gKwkJCXJlZyA9IDwxPjsKPiA+ID4gPiA+ID4gPiA+ICsJCQll bmFibGUtbWV0aG9kID0gInBzY2kiOwo+ID4gPiA+ID4gPiA+ID4gKwkJCWNsb2NrcyA9IDwmY2N1 IENMS19DUFVYPjsKPiA+ID4gPiA+ID4gPiA+ICsJCX07Cj4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ ID4gPiA+ID4gPiArCQljcHUyOiBjcHVAMiB7Cj4gPiA+ID4gPiA+ID4gPiArCQkJY29tcGF0aWJs ZSA9ICJhcm0sY29ydGV4LWE1MyI7Cj4gPiA+ID4gPiA+ID4gPiArCQkJZGV2aWNlX3R5cGUgPSAi Y3B1IjsKPiA+ID4gPiA+ID4gPiA+ICsJCQlyZWcgPSA8Mj47Cj4gPiA+ID4gPiA+ID4gPiArCQkJ ZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKPiA+ID4gPiA+ID4gPiA+ICsJCQljbG9ja3MgPSA8JmNj dSBDTEtfQ1BVWD47Cj4gPiA+ID4gPiA+ID4gPiArCQl9Owo+ID4gPiA+ID4gPiA+ID4gKwo+ID4g PiA+ID4gPiA+ID4gKwkJY3B1MzogY3B1QDMgewo+ID4gPiA+ID4gPiA+ID4gKwkJCWNvbXBhdGli bGUgPSAiYXJtLGNvcnRleC1hNTMiOwo+ID4gPiA+ID4gPiA+ID4gKwkJCWRldmljZV90eXBlID0g ImNwdSI7Cj4gPiA+ID4gPiA+ID4gPiArCQkJcmVnID0gPDM+Owo+ID4gPiA+ID4gPiA+ID4gKwkJ CWVuYWJsZS1tZXRob2QgPSAicHNjaSI7Cj4gPiA+ID4gPiA+ID4gPiArCQkJY2xvY2tzID0gPCZj Y3UgQ0xLX0NQVVg+Owo+ID4gPiA+ID4gPiA+ID4gKwkJfTsKPiA+ID4gPiA+ID4gPiA+ICsJfTsK PiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ICsJcmVzZXJ2ZWQtbWVtb3J5IHsKPiA+ ID4gPiA+ID4gPiA+ICsJCSNhZGRyZXNzLWNlbGxzID0gPDI+Owo+ID4gPiA+ID4gPiA+ID4gKwkJ I3NpemUtY2VsbHMgPSA8Mj47Cj4gPiA+ID4gPiA+ID4gPiArCQlyYW5nZXM7Cj4gPiA+ID4gPiA+ ID4gPiArCj4gPiA+ID4gPiA+ID4gPiArCQkvKiA1MTJLaUIgcmVzZXJ2ZWQgZm9yIEFSTSBUcnVz dGVkIEZpcm13YXJlIChCTDMxKSAgIAo+ICovCj4gPiA+ID4gPiA+ID4gPiArCQlzZWNtb25fcmVz ZXJ2ZWQ6IHNlY21vbkA0MDAwMDAwMCB7Cj4gPiA+ID4gPiA+ID4gPiArCQkJcmVnID0gPDB4MCAw eDQwMDAwMDAwIDB4MCAweDgwMDAwPjsKPiA+ID4gPiA+ID4gPiA+ICsJCQluby1tYXA7Cj4gPiA+ ID4gPiA+ID4gPiArCQl9Owo+ID4gPiA+ID4gPiA+ID4gKwl9OyAgCj4gPiA+ID4gPiA+ID4gCj4g PiA+ID4gPiA+ID4gSSdtIG5vdCBhIGZhbiBvZiBhYm92ZS4gSWYgYW55dGhpbmcgY2hhbmdlcyBp biBmdXR1cmUgaW4gQkwzMSwKPiA+ID4gPiA+ID4gPiBVLUJvb3QKPiA+ID4gPiA+ID4gPiB3b3Vs ZAo+ID4gPiA+ID4gPiA+IG5lZWQgdG8gcmVjb25maWd1cmUgaXQgYW55d2F5LiBDYW4gd2UganVz dCBza2lwIGl0PyAgCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBJIGFtIG5vdCBhIGZhbiBuZWl0 aGVyLCBidXQgbGFzdCB0aW1lIEkgY2hlY2tlZCB0aGlzIGlzIG5lZWRlZCB0bwo+ID4gPiA+ID4g PiBib290Lgo+ID4gPiA+ID4gPiBJbmRlZWQgVEYtQSBpbnNlcnRzIHRoaXMgbm9kZSwgd2l0aCB0 aGUgcmlnaHQgdmFsdWVzLCBpbnRvIFUtQm9vdCdzCj4gPiA+ID4gPiA+IERULgo+ID4gPiA+ID4g PiBBbmQgdGhhdCdzIG5pY2VseSBwcmVzZXJ2ZWQgaWYgeW91IHVzZSB0aGF0IERUICgkZmR0Y29u dHJvbGFkZHIpIGZvcgo+ID4gPiA+ID4gPiB0aGUga2VybmVsIGFzIHdlbGwuCj4gPiA+ID4gPiA+ IEJ1dCBpZiBzb21lb25lICpsb2FkcyogYSBEVEIgaW50byBVLUJvb3QgKHRvICRmZHRfYWRkcl9y KSwgdGhlbgo+ID4gPiA+ID4gPiBVLUJvb3QgZmFpbHMgdG8gcHJvcGFnYXRlIHRoZSAvcmVzZXJ2 ZWQtbWVtb3J5IG5vZGUgaW50byB0aGF0IGNvcHkuCj4gPiA+ID4gPiA+IFRoZXJlIGRvZXMgbm90 IHNlZW0gdG8gYmUgYSBnbG9iYWwgbm90aW9uIG9mIHJlc2VydmVkIG1lbW9yeSBpbgo+ID4gPiA+ ID4gPiBVLUJvb3QuCj4gPiA+ID4gPiA+IFNvbWUgY29tbWFuZHMgKGxpa2UgdGZ0cCkgZXhwbGlj aXRseSBwYXJzZSB0aGUgY29udHJvbCBEVCB0byBmaW5kCj4gPiA+ID4gPiA+IGFuZAo+ID4gPiA+ ID4gPiByZXNwZWN0IHJlc2VydmVkIG1lbW9yeSByZWdpb25zLiBib290bSBkb2VzIHRoYXQgYWxz bywgYnV0IG9ubHkgdG8KPiA+ID4gPiA+ID4gYXZvaWQgcGxhY2luZyB0aGUgcmFtZGlzayBvciBE VEIgaW50byByZXNlcnZlZCBtZW1vcnkuIFRoZQo+ID4gPiA+ID4gPiBpbmZvcm1hdGlvbgo+ID4g PiA+ID4gPiBlbmRzIHVwIGluIGltYWdlcy0+bG1iLCBidXQgaXMgbm90IHVzZWQgdG8gZ2VuZXJh dGUgb3IgYW1lbmQgbm9kZXMKPiA+ID4gPiA+ID4gaW4KPiA+ID4gPiA+ID4gdGhlIHRhcmdldCBE VC4KPiA+ID4gPiA+ID4gU28gdGhlIGJpdHMgYW5kIHBpZWNlcyBhcmUgdGhlcmUsIGJ1dCBpdCB3 aWxsIHJlcXVpcmUgc29tZSBjb2RlIHRvCj4gPiA+ID4gPiA+IGJlCj4gPiA+ID4gPiA+IGFkZGVk IHRvIHRoZSBnZW5lcmljIFUtQm9vdCBjb2RlLgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gU28g d2hhdCBkbyB5b3UgdGhpbms/IExlYXZpbmcgdGhpcyBvdXQgd2lsbCBwcmV2ZW50IGxvYWRpbmcg RFRCcwo+ID4gPiA+ID4gPiBpbnRvCj4gPiA+ID4gPiA+IFUtQm9vdCwgYXQgdGhlIG1vbWVudCwg d2hpY2ggc291bmRzIGJhZC4gSSBzdWdnZXN0IHdlIGtlZXAgaXQgaW4sCj4gPiA+ID4gPiA+IGZv cgo+ID4gPiA+ID4gPiBub3csIGl0IHNob3VsZCBub3QgcmVhbGx5IGh1cnQuIFUtQm9vdCB3aWxs IGhvcGVmdWxseSBzdGFydCB0byBkbwo+ID4gPiA+ID4gPiB0aGUKPiA+ID4gPiA+ID4gcmlnaHQg dGhpbmcgc29vbiwgdGhlbiB3ZSBjYW4gZWl0aGVyIHBoYXNlIGl0IG91dCBoZXJlIChtYXliZSB3 aGVuCj4gPiA+ID4gPiA+IHdlCj4gPiA+ID4gPiA+IGFjdHVhbGx5IGNoYW5nZSBzb21ldGhpbmcg aW4gVEYtQSksIG9yIGxldCBVLUJvb3QgZml4IGl0LiAgCj4gPiA+ID4gPiAKPiA+ID4gPiA+IFRC SCwgaWYgInNvb24iIGlzIHJlYWxseSBzb29uLCBJIHdvdWxkIHJhdGhlciB3YWl0IHdpdGggSDYx NiBEVCB1bnRpbAo+ID4gPiA+ID4gVS0gIAo+ID4gPiAKPiA+ID4gQm9vdAo+ID4gPiAgIAo+ID4g PiA+ID4gc3VwcG9ydHMgY2Fycnlpbmcgb3ZlciByZXNlcnZlZCBtZW1vcnkgbm9kZXMuICAKPiA+ ID4gPiAKPiA+ID4gPiBCdXQgdGhpcyBhbHNvIGNhcnJpZXMgY29tcGF0aWJpbGl0eSBpc3N1ZXMu IFUtQm9vdCBzdXBwb3J0IHRoZSBINjE2IGZvcgo+ID4gPiA+IG1vcmUgdGhhbiBhIHllYXIgbm93 LCBhbmQgdGhlIGVhcmxpZXN0IHBvc3NpYmxlIFUtQm9vdCByZWxlYXNlIGhhdmluZwo+ID4gPiA+ IHRoYXQKPiA+ID4gPiBwcm9wYWdhdGlvbiBjb2RlIHdvdWxkIGJlIHRoZSBvbmUgcmVsZWFzZWQg aW4gT2N0b2Jlci4gIAo+ID4gPiAKPiA+ID4gSSB3YXMgaG9waW5nIHlvdSB3b3VsZCBzYXkgSnVs eSAobmV4dCBVLUJvb3QgcmVsZWFzZSkgOikuICAKPiA+IAo+ID4gV2VsbCwgMjAyMi4wNyB3YXMg c3VwcG9zZWQgdG8gYmUgcmVsZWFzZWQgdG9kYXksIGFuZCBldmVuIGlmIHRoYXQgaXMKPiA+IGRl bGF5ZWQgYnkgYSBiaXQsIHRoYXQncyBvYnZpb3VzbHkgZmFyIHRvbyBsYXRlIDstKQo+ID4gICAK PiA+ID4gPiBBbmQgdGhlbiBwZW9wbGUKPiA+ID4gPiB3b3VsZCBzdGlsbCBuZWVkIHRvIHVwZGF0 ZSBmaXJzdCwgc28gdGhhdCdzIHF1aXRlIHNvbWUgbW9udGhzIG91dC4KPiA+ID4gPiBBbmQgSSB3 YXMgYWN0dWFsbHkgaG9waW5nIHRvIGdldCBhdCBsZWFzdCB0aGUgSDYxNiBEVCBwYXRjaGVzIG9m ZiBteQo+ID4gPiA+IHBsYXRlLCBhbmQgZ2V0IHRoZW0gaW50byB0aGUgdHJlZSB0byBoYXZlIGEg c3RhYmxlIGFuZCBhZ3JlZWQgdXBvbiBiYXNlCj4gPiA+ID4gKGJlZm9yZSB0aGlzIHNlcmllcyB0 dXJucyBpbnRvIGEgdGVlbmFnZXIgOy0pICAKPiA+ID4gCj4gPiA+IFllYWgsIEkgd291bGQgbGlr ZSB0aGF0IHRvby4KPiA+ID4gICAKPiA+ID4gPiBUaGVuIHdlIGNvdWxkIGZvciBpbnN0YW5jZSB1 cGRhdGUgdGhlIFUtQm9vdCBINjE2IHN1cHBvcnQuCj4gPiA+ID4gICAKPiA+ID4gPiA+IFdoYXRl dmVyIHdlIGRvIG5vdywgaXQgd2lsbCBoYXZlCj4gPiA+ID4gPiBjb21wYXRpYmlsaXR5IGlzc3Vl cy4gSWYgd2UgaW50cm9kdWNlIHJlc2VydmVkIG1lbW9yeSBub2RlIG5vdywgd2UKPiA+ID4gPiA+ IGNhbid0Cj4gPiA+ID4gPiBlYXNpbHkgZHJvcCBpdCBsYXRlci4gQm9vdGxvYWRlcnMgYXJlIG5v dCB2ZXJ5IG9mdGVuIHVwZGF0ZWQsIGJ1dAo+ID4gPiA+ID4ga2VybmVscyAgCj4gPiA+IAo+ID4g PiBhbmQKPiA+ID4gICAKPiA+ID4gPiA+IERUQiBmaWxlcyBhcmUsIGF0IGxlYXN0IGluIG15IGV4 cGVyaWVuY2UuIFNvIHdoZW4gd2UgZGVjaWRlIHRvIGRyb3AKPiA+ID4gPiA+IHRoZSAgCj4gPiA+ IAo+ID4gPiBub2RlPwo+ID4gPiAgIAo+ID4gPiA+IEkgdGhpbmsgb2YgdGhlIHRocmVlIHBvc3Np YmlsaXRpZXM6Cj4gPiA+ID4gLSBEcm9wIHRoZSBub2RlIG5vdywgYW5kIGFzayBwZW9wbGUgdG8g bm90IGxvYWQgRFRCcyBleHBsaWNpdGx5Cj4gPiA+ID4gLSBEcm9wIHRoZSBub2RlIHdoZW4gVS1C b290IGxlYXJuZWQgdG8gcHJvcGFnYXRlIHRoZSByZXNlcnZhdGlvbgo+ID4gPiA+IC0gS2VlcCB0 aGUgbm9kZQo+ID4gPiA+IHRoZSBsYXN0IG9uZSBpcyB0aGUgbGVhc3QgcGFpbmZ1bDogaGF2aW5n IHRoaXMgbm9kZSBpbiBkb2VzIG5vdCByZWFsbHkKPiA+ID4gPiBodXJ0LCBzbyB3ZSBjYW4gYmUg dmVyeSByZWxheGVkIHdpdGggdGhpcyByZW1vdmFsIGRlY2lzaW9uOgo+ID4gPiA+IC0gSWYgVS1C b290IGRvZXMgbm90IGFkZCB0aGUgcmVzZXJ2ZWQgbm9kZSwgd2UgYXJlIGNvdmVyZWQuCj4gPiA+ ID4gLSBJZiBVLUJvb3QgYWRkcyB0aGUgbm9kZSwgaXQgd2lsbCBkbyBzbyBpbiBhIHdheSB3aGVy ZSBpdCBkZWFscyB3aXRoCj4gPiA+ID4gZXhpc3RpbmcgcmVzZXJ2YXRpb25zLiBTbyBlaXRoZXIg aXQgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2UgYW55dGhpbmcsIG9yCj4gPiA+ID4gaXQgZXh0ZW5k cyB0aGUgcmVzZXJ2YXRpb24uCj4gPiA+ID4gLSBTaG91bGQgdGhlIFRGLUEgbG9jYXRpb24gYWN0 dWFsbHkgbW92ZSAoYW5kIHdlIGhhdmUgbm8gcGxhbnMgb3IgbmVlZHMKPiA+ID4gPiB0bwo+ID4g PiA+IGRvIHRoYXQpLCBwZW9wbGUgd291bGQgb25seSBnZXQgdGhpcyBieSB1cGRhdGluZyB0aGUg ZmlybXdhcmUsIGF0IHdoaWNoCj4gPiA+ID4gcG9pbnQgdGhlIFUtQm9vdCBwYXJ0IHdvdWxkIHN1 cmVseSBiZSBpbiBwbGFjZSBhbHJlYWR5LiBXZSBkb24ndCByZWFsbHkKPiA+ID4gPiBzdXBwb3J0 IHVwZGF0aW5nIGp1c3QgQkwzMSBpbiBhbiBleGlzdGluZyBiaW5hcnkgZmlybXdhcmUgaW1hZ2Us IHNvIHlvdQo+ID4gPiA+IHdvdWxkIGdldCBhbiB1cGRhdGVkIFUtQm9vdCBhcyB3ZWxsLgo+ID4g PiA+IAo+ID4gPiA+IEkgdGhpbmsgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gaXMgdGhhdCB1c2Vy cyBlbmQgdXAgd2l0aCBhbiB1bm5lZWRlZAo+ID4gPiA+IDUxMksKPiA+ID4gPiByZXNlcnZhdGlv bi4gSWYgdGhleSBjYXJlLCBhIGZpcm13YXJlIHVwZGF0ZSBzaG91bGQgc29sdmUgdGhpcyBwcm9i bGVtLgo+ID4gPiA+IAo+ID4gPiA+IEFzIGZvciB0aGUgdGltZSB0byByZW1vdmUgdGhhdCBub2Rl OiB3ZSBjb3VsZCBkbyB0aGF0IGF0IHRoZSB0aW1lIHdoZW4KPiA+ID4gPiAob3IgcmF0aGVyOiBp Zikgd2UgYWN0dWFsbHkgY2hhbmdlIHRoZSBURi1BIHJlc2VydmF0aW9uLiBBdCB0aGUgbW9tZW50 Cj4gPiA+ID4gdGhlcmUgYXJlIG5vIHBsYW5zIHRvIGRvIHRoaXMsIGFuZCB0aGUgc2l6ZSByZXNl cnZhdGlvbiBpcyBtb3JlIHRoYW4KPiA+ID4gPiBnZW5lcm91cyAodGhlIGN1cnJlbnQgZGVidWcg YnVpbGQgaXMgYWN0dWFsbHkgNzcgS0Igb3Igc28gb25seSkuIElmCj4gPiA+ID4gdGhlcmUKPiA+ ID4gPiBpcyBubyBjaGFuZ2UsIGFuZCB0aGUgbm9kZSBzdGF5cyBpbiB0aGUgLmR0c2ksIGl0IGRv ZXNuJ3QgcmVhbGx5IGh1cnQsCj4gPiA+ID4gc2VlCj4gPiA+ID4gYWJvdmUuICAKPiA+ID4gCj4g PiA+IEkgc2VlIHlvdXIgcG9pbnQsIGJ1dCBJIHdvdWxkIGxpa2UgdG8gZ2V0IHNvbWUgaW5wdXQg ZnJvbSBTYW11ZWwgZmlyc3QuCj4gPiA+IAo+ID4gPiBTYW11ZWwsIHdoYXQgZG8geW91IHRoaW5r Pwo+ID4gPiAgIAo+ID4gPiA+ID4gQWZ0ZXIgMTAgeWVhcnM/IEFsdGVybmF0aXZlbHksIHJlc2Vy dmVkIG1lbW9yeSBub2RlIGNhbiBiZSBqdXN0Cj4gPiA+ID4gPiBkcm9wcGVkICAKPiA+ID4gCj4g PiA+IGFuZAo+ID4gPiAgIAo+ID4gPiA+ID4gYW55b25lIGxvYWRpbmcgRFRCIGZpbGUgZnJvbSBv dXRzaWRlIHdvdWxkIG5lZWQgdG8gbWFrZSBzdXJlIGl0J3MKPiA+ID4gPiA+IHBhdGNoZWQuICAK PiA+ID4gCj4gPiA+IEJ1dAo+ID4gPiAgIAo+ID4gPiA+ID4gdGhhdCdzIHVuZXhwZWN0ZWQgZnJv bSB1c2VyIHBlcnNwZWN0aXZlLCBhbHRob3VnaCBwYXRjaGluZyBEVCBmaWxlcyBpcwo+ID4gPiA+ ID4gZG9uZSAgCj4gPiA+IAo+ID4gPiBieQo+ID4gPiAgIAo+ID4gPiA+ID4gc29tZSBkaXN0cm9z LiAgCj4gPiA+ID4gCj4gPiA+ID4gWWVhaCwgbGV0J3Mgbm90IGdvIHRoZXJlLiBBcyB5b3Uga25v dywgSSBhbHJlYWR5IGRpc2xpa2UgdGhlIGlkZWEgb2YKPiA+ID4gPiBleHBsaWNpdGx5IGxvYWRp bmcgRFRCcyBhdCBhbGwsIGJ1dCBJIHVuZGVyc3RhbmQgdGhpcyBpcyB3aGF0IHBlb3BsZSwKPiA+ ID4gPiBhbmQKPiA+ID4gPiBkaXN0cmlidXRpb25zLCBkbywgc28gSSdkIHJhdGhlciBoYXZlIHRo ZW0gY292ZXJlZC4gSGVuY2UgdGhlIG5vZGUgdG8KPiA+ID4gPiB3b3JrIHdpdGggZXhpc3Rpbmcg ZmlybXdhcmUuICAKPiA+ID4gCj4gPiA+IFJldXNpbmcgRFRCIGZyb20gVS1Cb290IGlzIG9ubHkg dXNlZnVsIHdoZW4geW91J3JlIGhhcHB5IHdpdGggY29tcGxldGVuZXNzCj4gPiA+IG9mIERUIGFu ZCB3aXRoIHRoZSBsYWNrIG9mIGJ1Z3MgaW4gaXQuIFRoZW4geW91IGNhbiBzYXZlIHRyb3VibGVz IHdpdGgKPiA+ID4gc2tpcHBpbmcgZXh0ZXJuYWwgRFRCIGxvYWQgc3RlcCBhbmQgbGlmZSBpcyBl YXNpZXIuIEJ1dCBhcyB5b3Uga25vdywKPiA+ID4gZmVhdHVyZXMgYW5kIHRodXMgbm9kZXMgYXJl IGFkZGVkIGluIHN0ZXBzIGFuZCBzb21ldGltZXMgc29tZSBidWdzIGFyZQo+ID4gPiBmaXhlZCwg d2hpY2ggbWVhbnMgaXQncyBleHRyZW1lbHkgaGFuZHkgdG8gaGF2ZSBlYXNpbHkgdXBkYXRhYmxl IERUQgo+ID4gPiBmaWxlLiAgCj4gPiAKPiA+IFllcywgZGVmaW5pdGVseSwgc2VlIG15IHJlcGx5 IHRvIFNhbXVlbC4gSSBqdXN0IGhlbGQgYmFjayB3aXRoIHRoZSBEVAo+ID4gdXBkYXRlIGluIFUt Qm9vdCBiZWNhdXNlIG9mIHRoZSBjb25mbGljdCBiZXR3ZWVuICJ3ZSBvbmx5IHRha2UgcHVyZQo+ ID4ga2VybmVsIHRyZWUgRFRzIiBhbmQgInRoZXJlIGlzIGEgYnJlYWtpbmcgY2hhbmdlIiAocl9p bnRjIGJpbmRpbmcpLgo+ID4gCj4gPiBJZiB3ZSBmaW5kIGEgd2F5IGZvcndhcmQgd2l0aCB0aGUg RFQgc3RhYmlsaXR5IHByb2JsZW0sIEkgYW0gaGFwcHkgdG8KPiA+IHB1c2ggZm9yIGEgbXVjaCBt b3JlIGZyZXF1ZW50IERUIHVwZGF0ZSwgb3IgZXZlbiB1cGRhdGUganVzdCB0aGUgRFQgaW4KPiA+ IGFuIGV4aXN0aW5nIGZpcm13YXJlIGluc3RhbGxhdGlvbi4gVGhpcyBjYW4gYmUgYXV0b21hdGVk LCBzaW5jZSB0aGUgRFRCCj4gPiBpcyBqdXN0IGEgbWVtYmVyIGluIHRoZSBGSVQgaW1hZ2UsIHdo aWNoIGNhbiBiZSByZS1hc3NlbWJsZWQgd2l0aCBhbgo+ID4gdXBkYXRlZCBEVEIgYnkgc29tZSB0 b29sIG9yIHNjcmlwdC4gT3Igd2UgdXNlIGNhcHN1bGUgdXBkYXRlcywgb2YganVzdAo+ID4gdGhl IERUQiwgc2VwYXJhdGVseSAoaWYgdGhpcyBpcyBwb3NzaWJsZSk/ICAKPiAKPiBJIHdvdWxkIGxp a2UgdG8gaGF2ZSBmb3J3YXJkIGNvbXBhdGliaWxpdHkgdG9vLCBidXQgSU1PIGl0J3Mgbm90IHZl cnkgCj4gcmVhbGlzdGljLiBTb29uZXIgb3IgbGF0ZXIgd2UnbGwgZmluZCBzb21ldGhpbmcsIGxp a2Ugcl9pbnRjLCBhZ2FpbiB0aGF0IHdvbid0IAo+IGJlIHBvc3NpYmxlIHRvIGludGVncmF0ZSBp biBmb3J3YXJkIGNvbXBhdGlibGUgbWFubmVyLiAKClRoYXQncyBhIHNoYW1lLCBJIHRoaW5rIHdl IHNob3VsZCBhdCBsZWFzdCB0cnkuIEFuZCB3aXRoIG15IHg4NiBiYWNrZ3JvdW5kCmxldCBtZSB0 ZWxsIHlvdTogdGhlcmUgYXJlIHNvbHV0aW9ucyB0byB0aG9zZSBjb21wYXRpYmlsaXR5IHByb2Js ZW1zIDstKQpUaGUgbW9yZSBuYXN0eSBvbmVzIG1pZ2h0IGJlIGJvcmRlcmxpbmUgaGFja2lzaCwg YnV0IGl0J3MgYSBxdWVzdGlvbiBvZgpwcmlvcml0aWVzLCBJIGd1ZXNzLgoKPiA+ID4gWWVzLCBV LUJvb3QgY2FuIGJlCj4gPiA+IGF1dG9tYXRlZCwgYnV0IGl0J3MgdGVkaW91cyBmb3IgZGlzdHJv IHRvIG1haW50YWluIG9uZSBib290bG9hZGVyIHBhY2thZ2UKPiA+ID4gcGVyIGJvYXJkLiBJZGVh bGx5LCBkaXN0cm8gc2hvdWxkbid0IGNhcmUgYXQgYWxsIGFib3V0IHRoYXQsICAKPiA+IAo+ID4g WWVzLCBJIHRvdGFsbHkgYWdyZWUsIGRpc3Ryb3Mgc2hvdWxkIG5vdCBzaGlwIGZpcm13YXJlLiBT aW5jZSBsZWF2aW5nCj4gPiB0aGlzIHRvIHRoZSBib2FyZCB2ZW5kb3JzIGlzIG5vdCByZWFsaXN0 aWMsIEkgd29uZGVyIGlmIHdlIChhcyAidGhlCj4gPiBzdW54aSBjb21tdW5pdHkiKSBzaG91bGQg c3RlcCB1cCBoZXJlLCBhbmQgcHJvdmlkZSBiaW5hcnkgYnVpbGRzIChwdXJlbHkKPiA+IGZvciBj b252ZW5pZW5jZSByZWFzb25zKSBvZiBib2FyZCBmaXJtd2FyZT8gVGhhdCBjb3VsZCBiZSB1cGRh dGVkIGZyb20KPiA+IGEgcnVubmluZyBMaW51eCwgb3IgcHV0IG9uIGFuIFNEIGNhcmQsIG9yIGZl dGNoZWQgYnkgZGlzdHJvcyB0bwo+ID4gZ2VuZXJhdGUgYW4gaW5zdGFsbGVyPyBXYXNuJ3QgdGhl cmUgZXZlbiBzb21lIGNlbnRyYWwgc3RvcmFnZSBvZmZlcmVkCj4gPiBsYXRlbHkgYnkgTGludXgs IHRvIGhvbGQgKFVFRkkpIGZpcm13YXJlIHVwZGF0ZSBmaWxlcz8gIAo+IAo+IEFzIHNvbWVvbmUg d2hvJ3Mgd29ya2luZyBvbiBkaXN0cm8gd2hpY2ggc3VwcG9ydHMgbWFueSBTb0NzIGZyb20gdmFy aWV0eSBvZiAKPiB2ZW5kb3JzLAoKQnV0IHRoYXQgaXMgcmVsYXRpdmUsIGlzbid0IGl0PyBJIGNv dW50IDIzIHN1cHBvcnRlZCBBbGx3aW5uZXIgZGV2aWNlcyBpbgpMaWJyZUVMRUMsIG91dCBvZiB0 aGUgMTYwIGRlZmNvbmZpZ3MgaW4gVS1Cb290IG9yID4xODAgc3VueGkgLmR0cyBmaWxlcyBpbgp0 aGUga2VybmVsLgpTbyBhcyBtb3N0IGRpc3RyaWJ1dGlvbnMsIGV2ZW4gd2l0aCB5b3VyIEFSTSBk ZXZpY2UgZm9jdXMsIHlvdSBjaG9zZSB0bwpsaW1pdCB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZCBk ZXZpY2VzLCBhcyB0aGF0IGFwcHJvYWNoIGluaGVyZW50bHkKZG9lc24ndCBzY2FsZS4KCkkgc2Vl IHRoZSByZWFzb25zIGJlaGluZCB0aGlzLCBiZWNhdXNlIG9mIHRoZSBzcGVjaWFsIGZvY3VzIG9m IExpYnJlRUxFQywKYW5kIHByb2JhYmx5IHRoZSBpZGVhIG9mIGdpdmluZyBhIHNtb290aCB1c2Vy IGV4cGVyaWVuY2UsIGJ1dCB5b3UgY291bGQKcG90ZW50aWFsbHkgY292ZXIgbXVjaCBtb3JlIGRl dmljZXMgYnkgb2ZmZXJpbmcgYSBnZW5lcmljIFVFRkkgaW1hZ2UsIGFzCm1vc3QgKmdlbmVyaWMq IGRpc3RyaWJ1dGlvbnMgZG8sIGFuZCBhcyBMRSBkb2VzIGZvciB4ODYuIEJ1dCB0aGlzIHJlbGll cwpvbiBoYXZpbmcgYSBzdGFibGUgRFQgZm9yIHRoZSBwbGF0Zm9ybS4KCkkgdGhpbmsgY29uY2Vw dHVhbGx5IHRoaXMgcHJvYmxlbSBoYXMgYmVlbiBzb2x2ZWQgYSBsb25nIHRpbWUgYWdvOiB0aGVy ZQppcyBzb21lIGludGVyZmFjZSBiZXR3ZWVuIGZpcm13YXJlIGFuZCB0aGUga2VybmVsLCB3aGlj aCBhbGxvd3MgYSBnZW5lcmljCmtlcm5lbCB0byBjb25maWd1cmUgaXRzZWxmIGFjY29yZGluZ2x5 LiBJIHJlZnVzZSB0aGUgaWRlYSB0aGF0IEFybSBiYXNlZApkZXZpY2Ugc2hvdWxkIGJlIGFueSBk aWZmZXJlbnQgaW4gdGhpcyByZXNwZWN0LiBIaXN0b3JpY2FsbHksIGJlY2F1c2UgbWFueQpBcm0g YmFzZWQgbWFjaGluZXMgaGF2ZSBhIHN0cm9uZyBlbWJlZGRlZCBiYWNrZ3JvdW5kLCB0aGF0IHdh cyBub3QgdGhlCmNhc2UsIGJ1dCBJIHRoaW5rIHdlIHNob3VsZCBtb3ZlIG9uIGZyb20gdGhvc2Ug ZGFyayBhZ2VzIChpbiB0ZXJtcyBvZgpzdXBwb3J0IGFuZCBtYWludGFpbmFiaWxpdHkpLgoKPiBJ IGNhbiB0ZWxsIHlvdSB0aGF0IHdlJ2xsIHNoaXAgYm9vdGxvYWRlciBpbnRlZ3JhdGVkIGludG8g b3VyIGltYWdlIAo+IGZvciB5ZWFycyB0byBjb21lLiBBbnl3YXksIEkgYWxzbyBsaWtlIHRvIGJ1 aWxkIFUtQm9vdCB1c2luZyBteSBvd24gb3B0aW9ucy4gCj4gRm9yIGV4YW1wbGUsIEkgZGlzYWJs ZSBIRE1JIGRyaXZlciBmb3IgQTY0LCBIMyBhbmQgSDUsIGJlY2F1c2UgaXQgdHVybnMgb3V0IAo+ IHRoYXQgYXQgbGVhc3Qgb24gSDUsIGl0IGNhbiBjbGFzaCB3aXRoIExpbnV4IGRyaXZlci4KClRo YXQgaXMgZ29vZCB0byBoZWFyLCBwbGVhc2UgdGVsbCB0aGUgc3VueGkgVS1Cb290IG1haW50YWlu ZXIsIHNvIHRoYXQgd2UKY2FuIGZpeCBpdCA7LSkKCj4gT3RoZXIgZGlzdHJvcyBwcmVmZXIgdG8g Cj4gc2hvdyBzb21lIHNwbGFzaCBzY3JlZW4sIGV0Yy4gT25lIHNpemUgZml0cyBhbGwgc29sdXRp b24gZG9lc24ndCBzZWVtcyAKPiByZWFsaXN0aWMgdG8gbWUuIE1heWJlIG9ubHkgaWYgKmV2ZXJ5 dGhpbmcqIHdvdWxkIGJlIGNvbmZpZ3VyYWJsZSBhbmQgdGhlcmUgCj4gd291bGQgYmUgYSB3YXkg Zm9yIGRpc3RybyB0byBwcmVjb25maWd1cmUgaXQuCj4gCj4gVEJILCBidWlsZGluZyBVLUJvb3Qs IENydXN0IGFuZCBURi1BIGlzIGVhc3kgYW5kIGFiaWxpdHkgdG8gY3VzdG9taXplIHRoZW0gaXMg Cj4gdmVyeSBoYW5keS4KPiA+ID4gYnV0IG1hbnkgYm9hcmRzIGRvbid0Cj4gPiA+IGhhdmUgZGVz aWduYXRlZCBib290bG9hZGVyIHN0b3JhZ2UgKFNQSSBOT1IgZmxhc2ggaW4gQVcgY2FzZSksIHNv IHRoZXkKPiA+ID4gaGF2ZSB0byBiZSBjb21iaW5lZCBvbiBzYW1lIHN0b3JhZ2UsIHBhcnRpdGlv biBldmVuLCBhcyBkaXN0cm8uICAKPiA+IAo+ID4gSGF2ZSB5b3UgdHJpZWQgZU1NQyBib290IHBh cnRpdGlvbnM/IEkgZm91bmQgdGhlbSBlcXVhbGx5IGNvbnZlbmllbnQgYXMKPiA+IFNQSSBmbGFz aCwgYW5kIHdoaWxlIG5vdCB0b28gbWFueSBib2FyZHMgYWN0dWFsbHkgaGF2ZSBTUEkgZmxhc2gs Cj4gPiBxdWl0ZSBzb21lIGhhdmUgZU1NQyAodGhpbmtpbmcgYWJvdXQgVFYgYm94ZXMpLiBJIHJl Y2VudGx5IGV2ZW4KPiA+IHVzZWQgImR1YWwgYm9vdCIgd2l0aCBhIEJTUCBpbnN0YWxsYXRpb24u Cj4gPiBBbmQgZXZlbiB0aGUgc21hbGxlc3QgZU1NQ3Mgc2VlbSB0byBoYXZlIDQgTUIgcGVyIGJv b3QgcGFydGl0aW9uLCBzbwo+ID4gcGxlbnR5IG9mIHNwYWNlIGZvciBVLUJvb3QgKHBsdXMgVEYt QSBwbHVzIGNydXN0KS4gIAo+IAo+IE5vLCBJIGRpZG4ndC4gSSBkb24ndCBzZWUgYW55IGJlbmVm aXQgb2YgdXNpbmcgZU1NQyBib290IHBhcnRpdGlvbiBvdmVyIAo+IHRyZWF0aW5nIGVNTUMgYXMg dXN1YWwgU0QgY2FyZCBhbmQgaW5zdGFsbGluZyBib290bG9hZGVyIHRvIHNlY3RvciAxNi4KClRo ZSBmaXJtd2FyZSBpcyBvdXQgb2YgdGhlIHdheSBvZiBub3JtYWwgKGFjY2lkZW50YWwpIGFjY2Vz c2VzLCBhcyBpdApsaXZlcyBpbiBhIHNlcGFyYXRlIGJsb2NrIGRldmljZSwgd2hpY2ggaXMgcmVh ZC1vbmx5LCBpbml0aWFsbHkuCkFuZCBpdCBkb2Vzbid0IGNsYXNoIHdpdGggcGFydGl0aW9uIHRh Ymxlcy4gVGhpcyBnaXZlcyB0aGUga2luZCBvZgpzZXBhcmF0aW9uIHRoYXQgcGVvcGxlIGFyZSB1 c2VkIHRvIG9uIG90aGVyIGNvbXB1dGVyczogdGhlIGZpcm13YXJlCmJlbG9uZ3MgdG8gdGhlIGRl dmljZSwgdGhlIE9TIGlzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLgpXZSBkb2N1bWVudGVkIGhvdyB0 byBpbnN0YWxsIGZpcm13YXJlIHRoZXJlIGluIFUtQm9vdCdzIHN1bnhpLnJzdC4gCgo+IEFueXdh eSwgdGhhdCB3b24ndCBjaGFuZ2Ugc2l0dWF0aW9uIGF0IGFsbC4gU0QgY2FyZCBpbWFnZSB3aXRo IGludGVncmF0ZWQgCj4gYm9vdGxvYWRlciBpcyBzdGlsbCBraW5nLgoKU3VyZSwgaWYgeW91IGRv bid0IGhhdmUgYW55IG90aGVyIHN0b3JhZ2UsIHRoZW4gU0QgY2FyZCBpdCBpcy4gQnV0IHRoaXMK c3RpbGwgZG9lcyBub3QgcmVxdWlyZSBtYXJyeWluZyBmaXJtd2FyZSBhbmQgT1M6IHlvdSBjb3Vs ZCBzdGFydCB3aXRoIGEKImp1c3QgZmlybXdhcmUgU0QgY2FyZCIsIHRoZW4gaW5zdGFsbCB0aGUg T1MgZnJvbSBhIFVTQiBkZXZpY2UsIG9yIGZyb20gYQpnZW5lcmljIGltYWdlIGZpbGUgY29waWVk IHRvIHNvbWUgU0QgcGFydGl0aW9uLiBBbmQgdGhlbiBzdWRkZW5seSB0aGUKcHVyZSBmaXJtd2Fy ZSBpbWFnZSBiZWNvbWVzIE9TL2Rpc3RybyBhZ25vc3RpYy4KQW5kIGNvbmNlcHR1YWxseSB0aGlz IGFwcHJvYWNoIGRvZXNuJ3QgKnByZXZlbnQqIHNlcGFyYXRpbmcgZmlybXdhcmUgYW5kCmtlcm5l bC9kaXN0cm8sIGl0IGp1c3QgYWxsb3dzIHlvdSB0byBnZXQgYXdheSB3aXRoIGl0LgoKPiBUaGVy ZSBhcmUgc2V2ZXJhbCByZWFzb25zIGZvciB0aGF0Ogo+IC0gY2hlYXBlc3QgYm9hcmRzIGFyZSBt b3N0IHBvcHVsYXIgYW5kIHVzdWFsbHkgaGF2ZSBvbmx5IFNEIGNhcmQgZm9yIHN0b3JhZ2UgCj4g KHRoaW5rIE9yYW5nZVBpIFBDKS4gVGhlcmUgaXMgbm90aGluZyB0aGF0IHlvdSBjYW4gZG8gYWJv dXQgaXQsIGV4Y2VwdCAKPiBpbmNsdWRpbmcgYm9vdGxvYWRlciBvbiBTRCBjYXJkIGltYWdlLgo+ IC0gaWYgeW91IHdhbnQgdG8gc3dpdGNoIGZyb20gQW5kcm9pZCB0byBvdXIgZGlzdHJvLCB5b3Ug bmVlZCBib290YWJsZSBTRCBjYXJkIAo+IGR1ZSB0byBoaWdoZXIgYm9vdCBwcmlvcml0eSAoc3Bl YWtpbmcgZm9yIEFXIFNvQ3MpCj4gLSBub3QgZXZlcnlvbmUgd2FudHMgdG8gb3ZlcndyaXRlIGVN TUMuIFNvbWUgcHJlZmVyIGtlZXBpbmcgQW5kcm9pZCwgc28gaXQgY2FuIAo+IGJlIHVzZWQgbGF0 ZXIgZm9yIHdoYXRldmVyIHB1cnBvc2UuCj4gLSBzb21lIHVzZXJzIGhhdmUgc2V2ZXJhbCBkaXN0 cm9zIGZvciBzYW1lIGJvYXJkLCBlYWNoIG9uIGl0J3Mgb3duIFNEIGNhcmQuIAo+IE5lZWRsZXNz IHRvIHNheSwgZWFjaCBkaXN0cm8gYWRqdXN0ZWQgYm9vdGxvYWRlciB0byBpdHMgbmVlZHMuCgpB bGwgZmluZSwgYnV0IEkgZG9uJ3Qgc2VlIGhvdyB0aGlzIGFmZmVjdHMgdGhpcyBkaXNjdXNzaW9u IGhlcmUuIFllcywgeW91CmNhbiB0cmVhdCB0aG9zZSBtYWNoaW5lcyBsaWtlIGVtYmVkZGVkIGRl dmljZXMsIGFuZCBidW5kbGUgZmlybXdhcmUgYW5kCk9TLCBidXQgdGhpcyBpcyBzdXJlbHkgbm90 IHRoZSBvbmx5IHdheSBvZiBkZXBsb3ltZW50IHdlIHNob3VsZCBzdXBwb3J0LgpCZWluZyBhYmxl IHRvIGp1c3Qgb2ZmZXIgb25lIGdlbmVyaWMgVUVGSSBiYXNlZCBpbWFnZSBzZWVtcyBtdWNoIG1v cmUKc2NhbGFibGUgdG8gbWUuCgo+IEkgbGlrZSB0byBvZmZlciBmbGV4aWJpbGl0eSBpbiBib290 IG9wdGlvbnMsIGVzcGVjaWFsbHkgYmVjYXVzZSBpdCdzIGN1cnJlbnRseSAKPiBlYXN5LCB0aGFu a3MgdG8gaW50ZWdyYXRlZCBjdXN0b21pemVkIGJvb3Rsb2FkZXIgYW5kIGV4dGVybmFsIGxvYWRp bmcgb2YgZHRiIAo+IGZpbGVzIDopCgpUaG91Z2ggSSBkb24ndCB1bmRlcnN0YW5kIHdoeSB5b3Ug cmVxdWlyZSBleHRlcm5hbCBEVEIgbG9hZGluZzogaWYgeW91Cm1hcnJ5IGRpc3RybyBhbmQgZmly bXdhcmUgYW55d2F5LCB5b3UgY291bGQgYXMgd2VsbCBwdXQgeW91ciBEVEIgb2YgY2hvaWNlCmlu dG8gVS1Cb290IChpbiB0aGUgVS1Cb290IHNvdXJjZSB0cmVlLCBvciByZXBsYWNlIGl0IGluIHRo ZSBnZW5lcmF0ZWQgRklUCmltYWdlKS4gVGhhdCBsb29rcyBsaWtlIGEgb25lLXRpbWUgZWZmb3J0 IGluIHlvdXIgYnVpbGQgc3lzdGVtPwoKPiA+ID4gT24gdGhlIG90aGVyIGhhbmQsCj4gPiA+IHdo ZW4gYnVpbGRpbmcga2VybmVsLCB5b3UgYXV0b21hdGljYWxseSBidWlsZCBhbGwgcmVsZXZhbnQg RFRCIGZpbGVzLAo+ID4gPiB3aGljaCB5b3UgY2FuIHRoZW4ganVzdCBjb3B5IHRvIGNvbW1vbiBw bGFjZS4gTm8gZGV2aWNlIHNwZWNpZmljIGhhbmRsaW5nCj4gPiA+IG5lZWRlZC4gQWxzbywgVS1C b290IGRvZXNuJ3Qgc3luYyBEVCBmaWxlcyBldmVyeSByZWxlYXNlLCBzbyBsYXRlc3QKPiA+ID4g VS1Cb290IGRvZXNuJ3QgbmVjZXNzYXJseSBtZWFuIGxhdGVzdCBEVC4gIAo+ID4gCj4gPiBZZXMs IGZvciB0aGUgY29tcGF0aWJpbGl0eSByZWFzb25zIG1lbnRpb25lZC4gSSBhbSBtb3JlIHRoYW4g aGFwcHkgdG8KPiA+IG1ha2UgdGhpcyBhIHJlZ3VsYXIgZXhlcmNpc2UgKHNheSBhdCBlYWNoIGtl cm5lbCdzIC1yYzMgb3Igc28pLiAgCj4gCj4gV2hhdCBhYm91dCBicmVha2luZyBjaGFuZ2VzPyBU aGV5IGNhbiBiZSBpbXBvcnRhbnQgZm9yIG5ldywgdXNlZnVsIAo+IGZ1bmN0aW9uYWxpdHkgYnV0 IG9sZGVyIGtlcm5lbHMgd29uJ3Qga25vdyB3aGF0IHRvIGRvLgoKWWVzLCB0aGF0IGlzIHRoZSBj b3JlIG9mIHRoaXMgZGlzY3Vzc2lvbi4gRG9pbmcgdGhpcyByZWxpZXMgb24gbm90IGhhdmluZwp0 aGVtIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhlcmUgaXMgbm8gcHJvYmxlbSB3aGVuIHRoaXMgYWZm ZWN0cyBuZXcKZmVhdHVyZXMsIG9yIGZ1bmN0aW9uYWxpdHkgdGhhdCB0aGUgb2xkIGtlcm5lbCBk aWRuJ3Qgc3VwcG9ydCBhbnl3YXkuCkJ1dCB3ZSBtdXN0IGF2b2lkIGNoYW5nZSBhZmZlY3Rpbmcg b2xkZXIga2VybmVscy4KQXQgbGVhc3QgSSB3b3VsZCBsaWtlIHRvIGFzayBmb3IgdXMgdG8gdHJ5 OiBpbiBteSBleHBlcmllbmNlIHdpdGggc29tZQp0aGlua2luZyBhbmQgY2xldmVyIGNvZGUgd2Ug Y2FuIHB1bGwgdGhpcyBvZmYuIE90aGVyIHBsYXRmb3JtcyBzZWVtIHRvIGJlCmFibGUgdG8gY29t bWl0IHRvIHRoaXMuCgpBcyBhIGNvbXByb21pc2UsIEkgd2FzIHdvbmRlcmluZyBpZiB3ZSBzaG91 bGQgZGVmaW5lIHNvbWUgdGltZSBvZiBncmFjZQpwZXJpb2QsIGluaXRpYWxseSwgd2VyZSB3ZSBk b24ndCBndWFyYW50ZWUgbm9uLWJyZWFraW5nIGNoYW5nZXMgb25seS4KU28gdGhlIGZpcnN0LCBz YXkgdGhyZWUsIGtlcm5lbHMgY291bGQgaW5jbHVkZSBicmVha2luZyBjaGFuZ2VzLCBidXQKYWZ0 ZXJ3YXJkcyB3ZSBzdGljayB0byBzdXBwb3J0IGF0IGxlYXN0IHRoaXMga2VybmVsLCB3aXRoIGV2 ZXJ5IG5ldyBEVCB0bwpjb21lLgoKPiA+IFNhZGx5LCBJIGRvbid0IHRoaW5rIHdlJ3JlIGV2ZW4g Y2xvc2UgdG8gYXZvaWRpbmcgc2hpcHBpbmcgYm9vdGxvYWRlciBpbiAgIAo+IGRpc3RybyBpbWFn ZXMgb3IgZXZlbiBleHRlcm5hbCBEVEIgbG9hZGluZy4KPiA+ID4gQWJvdmUgaXMgYSBiaXQgb2Zm IHRvcGljLCBidXQgSSBob3BlIHlvdSB1bmRlcnN0YW5kIHdoeSBkaXN0cm9zIG9wdCB0byB1c2UK PiA+ID4gZXh0ZXJuYWwgRFRCIGZpbGVzIChzcGVha2luZyBmcm9tIG15IG93biBleHBlcmllbmNl cykuICAKPiA+IAo+ID4gWWVzLCBJIHVuZGVyc3RhbmQgd2hlcmUgdGhleSAoaW5jbHVkaW5nIExF KSBhcmUgY29taW5nIGZyb20sIHRvIHByb3ZpZGUKPiA+IGEgcHJhZ21hdGljIHNvbHV0aW9uIHRv IHRoZSB1c2VycycgcHJvYmxlbXMuIEFuZCB0aGF0J3Mgd2h5IEkgd2FudGVkIHRvCj4gPiBzdGls bCBnaXZlIHRoZSBwb3NzaWJpbGl0eSB0byBsb2FkIGEgRFRCLCBldmVuIHRob3VnaCBJIHRoaW5r IHRoaXMKPiA+IHNob3VsZCBub3QgYmUgdGhlIHN0YW5kYXJkIHdheS4gIAo+IAo+IEkgdGhpbmsg bG9hZGluZyBleHRlcm5hbCBEVEIgc3VwcG9ydCBpcyBpbXBvcnRhbnQgYW5kIHNob3VsZG4ndCBi ZSBkaXRjaGVkIAo+IGFueXRpbWUgc29vbi4gSWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSwgdGhh dCdzIGFuIGlzc3VlIG9ubHkgb24gU29DcyB3aXRoIFRGLQo+IEEsIHdoaWNoIG1lYW5zIG9ubHkg NjQtYml0IEFXIFNvQ3MuIFllcywgMzItYml0IEFXIFNvQ3MgYXJlIHN0aWxsIGEgdGhpbmcgYW5k IAo+IHN0aWxsIHVzZWQgYW5kIG5vLCBJIGRvbid0IHdhbnQgVEYtQSB0aGVyZSA6KS4KCkkgdGhp bmsgaXQncyBhIGNvbmNlcHR1YWwgaXNzdWUsIG5vdCBURi1BIHJlbGF0ZWQ6IEEgRFQgd2FzIGFs d2F5cyBtZWFudAp0byBiZSBhbWVuZGVkIGJ5IGZpcm13YXJlICh0aGluayBvZiB0aGUgbWVtb3J5 IG5vZGUsIG9yIHRoZSBNQUMgYWRkcmVzcykuClUtQm9vdCBqdXN0IGRlY2lkZWQgdG8gbWFrZSB0 aG9zZSBjaGFuZ2VzIHZlcnkgbGF0ZSwganVzdCBiZWZvcmUgbGF1bmNoaW5nCnRoZSBrZXJuZWws IHNvIHRoYXQgdGhpcyBuZXdseSBsb2FkZWQgRFRCIGlzIGFscmVhZHkgYXZhaWxhYmxlLiBCdXQg aWYgdGhlClNQTCBkZWNpZGVzIHRvIG1ha2UgY2hhbmdlcywgb3IgcGlja3MgYSBjZXJ0YWluIERU LCB5b3UgaGF2ZSB0aGlzIHByb2JsZW0KYXMgd2VsbC4KCkNoZWVycywKQW5kcmUKCgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5l bCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=