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 X-Spam-Level: X-Spam-Status: No, score=-6.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B9140C4707F for ; Tue, 25 May 2021 15:55:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 994AD61400 for ; Tue, 25 May 2021 15:55:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232198AbhEYP4k (ORCPT ); Tue, 25 May 2021 11:56:40 -0400 Received: from mail.kernel.org ([198.145.29.99]:36556 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231918AbhEYP4j (ORCPT ); Tue, 25 May 2021 11:56:39 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 47A1D613F4; Tue, 25 May 2021 15:55:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1621958109; bh=rbfLFTpdS7dsvU1lnqHm0Eg6YbPN1ywTyypZbgz6f4Y=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=djC9Uxu2huIeUKtbihW1gQMB+QtaskgQTF2B/wDluYf7tuCI2Ix59oD5g8hjHXj7V YxuD3VGGmNHk/025H8A4ZgiMKwHV7C3Q6c+ynlOL/EcJmbUqDINlrtZbj62OrDe1Tm daH0BkwRg0L0zBfgEZW77VghYr+g7L6yFWbzdnaATDh+J9yzfSVhV7r/Mkpsjk3OZ6 zSL1yVko44rOOzi1g9Ps58cE3yqm+e7/1mEGy2oauEeLZetQTvzR28GeALvBrhFp31 NqFhkAR9mf7YEW/D9k9VEU73RRr1NmjEAQTmSV9TWJU2e6UErfHlB5DFgXA+hrdhHL PA0Qp/gaGtw/A== Received: by mail-oi1-f176.google.com with SMTP id c196so22525333oib.9; Tue, 25 May 2021 08:55:09 -0700 (PDT) X-Gm-Message-State: AOAM530ILc432lbHwxWiIIsSilJGEq67qh4wq/sMAtH7CIJO3KZjn1w3 fdlqSFi41M3rlv5217eox9SS6su9ZLQw1rvkahQ= X-Google-Smtp-Source: ABdhPJw39bc5cbG5JE3bIuosBNIYIZ6lKvpvmOgPOwb2LNiXtoeeIKzQdsRMOBe6wv2zt8NXpLU+d3qomwHWkXdtz+8= X-Received: by 2002:aca:3182:: with SMTP id x124mr3327594oix.47.1621958108589; Tue, 25 May 2021 08:55:08 -0700 (PDT) MIME-Version: 1.0 References: <7a1e2ebc-f7d8-8431-d844-41a9c36a8911@arm.com> <01efd004-1c50-25ca-05e4-7e4ef96232e2@arm.com> <87eedxbtkn.fsf@stealth> <877djnaq11.fsf@stealth> In-Reply-To: From: Ard Biesheuvel Date: Tue, 25 May 2021 17:54:56 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [BUG] rockpro64: PCI BAR reassignment broken by commit 9d57e61bf723 ("of/pci: Add IORESOURCE_MEM_64 to resource flags for 64-bit memory addresses") To: Peter Geis Cc: Punit Agrawal , Robin Murphy , Alexandru Elisei , Linux Kernel Mailing List , "open list:ARM/Rockchip SoC..." , arm-mail-list , Heiko Stuebner , Leonardo Bras , Rob Herring , PCI , =?UTF-8?Q?Christian_K=C3=B6nig?= Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 25 May 2021 at 17:34, Peter Geis wrote: > > On Tue, May 25, 2021 at 9:57 AM Ard Biesheuvel wrote: > > > > On Tue, 25 May 2021 at 15:42, Punit Agrawal wr= ote: > > > > > > Hi Ard, > > > > > > Ard Biesheuvel writes: > > > > > > > On Sun, 23 May 2021 at 13:06, Punit Agrawal wrote: > > > >> > > > >> Robin Murphy writes: > > > >> > > > >> > [ +linux-pci for visibility ] > > > >> > > > > >> > On 2021-05-18 10:09, Alexandru Elisei wrote: > > > >> >> After doing a git bisect I was able to trace the following erro= r when booting my > > > >> >> rockpro64 v2 (rk3399 SoC) with a PCIE NVME expansion card: > > > >> >> [..] > > > >> >> [ 0.305183] rockchip-pcie f8000000.pcie: host bridge /pcie@f= 8000000 ranges: > > > >> >> [ 0.305248] rockchip-pcie f8000000.pcie: MEM 0x00fa0000= 00..0x00fbdfffff -> > > > >> >> 0x00fa000000 > > > >> >> [ 0.305285] rockchip-pcie f8000000.pcie: IO 0x00fbe000= 00..0x00fbefffff -> > > > >> >> 0x00fbe00000 > > > >> >> [ 0.306201] rockchip-pcie f8000000.pcie: supply vpcie1v8 not= found, using dummy > > > >> >> regulator > > > >> >> [ 0.306334] rockchip-pcie f8000000.pcie: supply vpcie0v9 not= found, using dummy > > > >> >> regulator > > > >> >> [ 0.373705] rockchip-pcie f8000000.pcie: PCI host bridge to = bus 0000:00 > > > >> >> [ 0.373730] pci_bus 0000:00: root bus resource [bus 00-1f] > > > >> >> [ 0.373751] pci_bus 0000:00: root bus resource [mem 0xfa0000= 00-0xfbdfffff 64bit] > > > >> >> [ 0.373777] pci_bus 0000:00: root bus resource [io 0x0000-0= xfffff] (bus > > > >> >> address [0xfbe00000-0xfbefffff]) > > > >> >> [ 0.373839] pci 0000:00:00.0: [1d87:0100] type 01 class 0x06= 0400 > > > >> >> [ 0.373973] pci 0000:00:00.0: supports D1 > > > >> >> [ 0.373992] pci 0000:00:00.0: PME# supported from D0 D1 D3ho= t > > > >> >> [ 0.378518] pci 0000:00:00.0: bridge configuration invalid (= [bus 00-00]), > > > >> >> reconfiguring > > > >> >> [ 0.378765] pci 0000:01:00.0: [144d:a808] type 00 class 0x01= 0802 > > > >> >> [ 0.378869] pci 0000:01:00.0: reg 0x10: [mem 0x00000000-0x00= 003fff 64bit] > > > >> >> [ 0.379051] pci 0000:01:00.0: Max Payload Size set to 256 (w= as 128, max 256) > > > >> >> [ 0.379661] pci 0000:01:00.0: 8.000 Gb/s available PCIe band= width, limited by > > > >> >> 2.5 GT/s PCIe x4 link at 0000:00:00.0 (capable of 31.504 Gb/s w= ith 8.0 GT/s PCIe > > > >> >> x4 link) > > > >> >> [ 0.393269] pci_bus 0000:01: busn_res: [bus 01-1f] end is up= dated to 01 > > > >> >> [ 0.393311] pci 0000:00:00.0: BAR 14: no space for [mem size= 0x00100000] > > > >> >> [ 0.393333] pci 0000:00:00.0: BAR 14: failed to assign [mem = size 0x00100000] > > > >> >> [ 0.393356] pci 0000:01:00.0: BAR 0: no space for [mem size = 0x00004000 64bit] > > > >> >> [ 0.393375] pci 0000:01:00.0: BAR 0: failed to assign [mem s= ize 0x00004000 64bit] > > > >> >> [ 0.393397] pci 0000:00:00.0: PCI bridge to [bus 01] > > > >> >> [ 0.393839] pcieport 0000:00:00.0: PME: Signaling with IRQ 7= 8 > > > >> >> [ 0.394165] pcieport 0000:00:00.0: AER: enabled with IRQ 78 > > > >> >> [..] > > > >> >> to the commit 9d57e61bf723 ("of/pci: Add IORESOURCE_MEM_64 to > > > >> >> resource flags for > > > >> >> 64-bit memory addresses"). > > > >> > > > > >> > FWFW, my hunch is that the host bridge advertising no 32-bit mem= ory > > > >> > resource, only only a single 64-bit non-prefetchable one (even t= hough > > > >> > it's entirely below 4GB) might be a bit weird and tripping somet= hing > > > >> > up in the resource assignment code. It certainly seems like the = thing > > > >> > most directly related to the offending commit. > > > >> > > > > >> > I'd be tempted to try fiddling with that in the DT (i.e. changin= g > > > >> > 0x83000000 to 0x82000000 in the PCIe node's "ranges" property) t= o see > > > >> > if it makes any difference. Note that even if it helps, though, = I > > > >> > don't know whether that's the correct fix or just a bodge around= a > > > >> > corner-case bug somewhere in the resource code. > > > >> > > > >> From digging into this further the failure seems to be due to a mi= smatch > > > >> of flags when allocating resources in pci_bus_alloc_from_region() = - > > > >> > > > >> if ((res->flags ^ r->flags) & type_mask) > > > >> continue; > > > >> > > > >> Though I am also not sure why the failure is only being reported o= n > > > >> RK3399 - does a single 64-bit window have anything to do with it? > > > >> > > > > > > > > The NVMe in the example exposes a single 64-bit non-prefetchable BA= R. > > > > Such BARs can not be allocated in a prefetchable host bridge window > > > > (unlike the converse, i.e., allocating a prefetchable BAR in a > > > > non-prefetchable host bridge window is fine) > > > > > > > > 64-bit non-prefetchable host bridge windows cannot be forwarded by = PCI > > > > to PCI bridges, they simply lack the BAR registers to describe them= . > > > > Therefore, non-prefetchable endpoint BARs (even 64-bit ones) need t= o > > > > be carved out of a host bridge's non-prefetchable 32-bit window if > > > > they need to pass through a bridge. > > > > > > Thank you for the explanation. I also looked at the PCI-to-PCI Bridge > > > spec to understand where some of the limitations are coming from. > > > > > > > So the error seems to be here that the host bridge's 32-bit > > > > non-prefetchable window has the 64-bit attribute set, even though i= t > > > > resides below 4 GB entirely. I suppose that the resource allocation > > > > could be made more forgiving (and it was in the past, before commit > > > > 9d57e61bf723 was applied). However, I would strongly recommend not > > > > deviating from common practice, and just describe the 32-bit > > > > addressable non-prefetchable resource window as such. > > > > > > IIUC, the host bridge's configuration (64-bit on non-prefetchable > > > window) is based on what the hardware advertises. > > > > > > > What do you mean by 'what the hardware advertises'? The host bridge is > > apparently configured to decode a 32-bit addressable window as MMIO, > > and the question is why this window has the 64-bit attribute set in > > the DT description. > > > > > Can you elaborate on what you have in mind to correct the > > > non-prefetchable resource window? Are you thinking of adding a quirk > > > somewhere to address this? > > > > > > > No. Just fix the DT. > > Good Morning, > > I believe Robin is correct that there is more to this. > While attempting to work out why dGPUs won't work with the rk356x > series PCIe controllers, Christian K=C3=B6nig from the amd-gpu driver > mailing list noticed the gpu was incorrectly allocated a 64bit > non-prefetchable BAR which should instead be a 32 non-prefetchable > BAR. > This is due to the translation. For some reason, lspci translates the BAR values to CPU addresses, but the PCI side addresses are within 32-bits. Are you sure the amdgpu driver can even deal with non-1:1 host bridges? > The ranges currently set are: > ranges =3D <0x81000000 0x0 0x00800000 0x3 0x00800000 0x0 0x00100000 > 0x82000000 0x0 0x00900000 0x3 0x00900000 0x0 0x3f700000>; > So you have two ranges here. > but the final allocation was: > > lspci -v > 00:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3566 > (rev 01) (prog-if 00 [Normal decode]) > Flags: bus master, fast devsel, latency 0, IRQ 96 > Bus: primary=3D00, secondary=3D01, subordinate=3Dff, sec-latency= =3D0 > I/O behind bridge: 00001000-00001fff [size=3D4K] > Memory behind bridge: 00900000-009fffff [size=3D1M] > Prefetchable memory behind bridge: > 0000000010000000-000000001fffffff [size=3D256M] But the host bridge/root port decodes two disjoint regions?? > Expansion ROM at 300a00000 [virtual] [disabled] [size=3D64K] > Capabilities: [40] Power Management version 3 > Capabilities: [50] MSI: Enable+ Count=3D1/32 Maskable- 64bit+ > Capabilities: [70] Express Root Port (Slot-), MSI 00 > Capabilities: [b0] MSI-X: Enable- Count=3D1 Masked- > Capabilities: [100] Advanced Error Reporting > Capabilities: [148] Secondary PCI Express > Capabilities: [160] L1 PM Substates > Capabilities: [170] Vendor Specific Information: ID=3D0002 Rev=3D= 4 > Len=3D100 > Kernel driver in use: pcieport > > 01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. > [AMD/ATI] Turks PRO [Radeon HD 7570] (prog-if 00 [VGA controller]) > Subsystem: Dell Turks PRO [Radeon HD 7570] > Flags: bus master, fast devsel, latency 0, IRQ 95 > Memory at 310000000 (64-bit, prefetchable) [size=3D256M] > Memory at 300900000 (64-bit, non-prefetchable) [size=3D128K] > I/O ports at 1000 [size=3D256] > Expansion ROM at 300920000 [disabled] [size=3D128K] > Capabilities: [50] Power Management version 3 > Capabilities: [58] Express Legacy Endpoint, MSI 00 > Capabilities: [a0] MSI: Enable- Count=3D1/1 Maskable- 64bit+ > Capabilities: [100] Vendor Specific Information: ID=3D0001 Rev=3D= 1 > Len=3D010 > Capabilities: [150] Advanced Error Reporting > Kernel driver in use: radeon > > 01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Turks > HDMI Audio [Radeon HD 6500/6600 / 6700M Series] > Subsystem: Dell Turks HDMI Audio [Radeon HD 6500/6600 / 6700M Ser= ies] > Flags: bus master, fast devsel, latency 0, IRQ 98 > Memory at 300940000 (64-bit, non-prefetchable) [size=3D16K] > Capabilities: [50] Power Management version 3 > Capabilities: [58] Express Legacy Endpoint, MSI 00 > Capabilities: [a0] MSI: Enable+ Count=3D1/1 Maskable- 64bit+ > Capabilities: [100] Vendor Specific Information: ID=3D0001 Rev=3D= 1 > Len=3D010 > Capabilities: [150] Advanced Error Reporting > Kernel driver in use: snd_hda_intel > > This will obviously clobber registers during writes. I don't follow. Which writes will clobber which registers, and how is it obvious? > Also, if <0x82000000> (32 bit) is changed to <0x83000000> (64 bit), > most of the allocations for the dGPU fail due to no valid regions > available. > But wasn't the original problem that the resource window was 64-bit to begin with? Are you sure we are talking about the same problem here? > > > > > I am happy to put something together once I understand the preferred = way > > > to go about it. > > > > > > Thanks, > > > Punit > > > > > > [...] > > > > > > > _______________________________________________ > > Linux-rockchip mailing list > > Linux-rockchip@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-rockchip 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 X-Spam-Level: X-Spam-Status: No, score=-4.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 38291C2B9F8 for ; Tue, 25 May 2021 16:19:42 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id F14C461408 for ; Tue, 25 May 2021 16:19:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F14C461408 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org 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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=pFLkGP29s9/RpY/M1e0ZOJvWdXvogMPsq73F3TQGi34=; b=caKkr8sDjI3txF 38p0ONe5d0/3qZh7Ze61K4csTQyr+ebVPTUI2X7je0SKkYLML7NNVia7RuSawm3ggWYhQ8LDGswfO exyRjBPZi3DaRFoVHZ/fVeYG1m3xJebVif6jU4mylxZFkfo7ZQ19+eVPCw6IdaPUX9oil6oBwYZ43 dNPxpE9yv14TdkvImeohwyFZNzS+zdTnGUSI7dUbovf9AZR3lycmWDd7YPOU8wedEwsud4v6jzAo3 Qw6lOThcKkF3YA9QzgWsXVuY3IL0i/WD+r2fHaHx3KAE2jEw12P5z1Mzswu7PfQrLiluSVYStYPZr BIiY9DR4cboIP9BCOPrw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1llZmK-006MS7-KN; Tue, 25 May 2021 16:19:36 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1llZOf-006BMi-Nw; Tue, 25 May 2021 15:55:12 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 4F6B76141C; Tue, 25 May 2021 15:55:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1621958109; bh=rbfLFTpdS7dsvU1lnqHm0Eg6YbPN1ywTyypZbgz6f4Y=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=djC9Uxu2huIeUKtbihW1gQMB+QtaskgQTF2B/wDluYf7tuCI2Ix59oD5g8hjHXj7V YxuD3VGGmNHk/025H8A4ZgiMKwHV7C3Q6c+ynlOL/EcJmbUqDINlrtZbj62OrDe1Tm daH0BkwRg0L0zBfgEZW77VghYr+g7L6yFWbzdnaATDh+J9yzfSVhV7r/Mkpsjk3OZ6 zSL1yVko44rOOzi1g9Ps58cE3yqm+e7/1mEGy2oauEeLZetQTvzR28GeALvBrhFp31 NqFhkAR9mf7YEW/D9k9VEU73RRr1NmjEAQTmSV9TWJU2e6UErfHlB5DFgXA+hrdhHL PA0Qp/gaGtw/A== Received: by mail-oi1-f175.google.com with SMTP id u11so30720252oiv.1; Tue, 25 May 2021 08:55:09 -0700 (PDT) X-Gm-Message-State: AOAM531nz+DIA9DhVUh8Io6rtlkc8XmXkO56HiZKkVbqMYbxDCAFKl1h MkRV88Y/NwJJDjls5qJTTPBD1KAicvvhgfL+Vy8= X-Google-Smtp-Source: ABdhPJw39bc5cbG5JE3bIuosBNIYIZ6lKvpvmOgPOwb2LNiXtoeeIKzQdsRMOBe6wv2zt8NXpLU+d3qomwHWkXdtz+8= X-Received: by 2002:aca:3182:: with SMTP id x124mr3327594oix.47.1621958108589; Tue, 25 May 2021 08:55:08 -0700 (PDT) MIME-Version: 1.0 References: <7a1e2ebc-f7d8-8431-d844-41a9c36a8911@arm.com> <01efd004-1c50-25ca-05e4-7e4ef96232e2@arm.com> <87eedxbtkn.fsf@stealth> <877djnaq11.fsf@stealth> In-Reply-To: From: Ard Biesheuvel Date: Tue, 25 May 2021 17:54:56 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [BUG] rockpro64: PCI BAR reassignment broken by commit 9d57e61bf723 ("of/pci: Add IORESOURCE_MEM_64 to resource flags for 64-bit memory addresses") To: Peter Geis Cc: Punit Agrawal , Robin Murphy , Alexandru Elisei , Linux Kernel Mailing List , "open list:ARM/Rockchip SoC..." , arm-mail-list , Heiko Stuebner , Leonardo Bras , Rob Herring , PCI , =?UTF-8?Q?Christian_K=C3=B6nig?= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210525_085509_879321_2FD9C688 X-CRM114-Status: GOOD ( 53.31 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org T24gVHVlLCAyNSBNYXkgMjAyMSBhdCAxNzozNCwgUGV0ZXIgR2VpcyA8cGd3aXBlb3V0QGdtYWls LmNvbT4gd3JvdGU6Cj4KPiBPbiBUdWUsIE1heSAyNSwgMjAyMSBhdCA5OjU3IEFNIEFyZCBCaWVz aGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+IHdyb3RlOgo+ID4KPiA+IE9uIFR1ZSwgMjUgTWF5IDIw MjEgYXQgMTU6NDIsIFB1bml0IEFncmF3YWwgPHB1bml0YWdyYXdhbEBnbWFpbC5jb20+IHdyb3Rl Ogo+ID4gPgo+ID4gPiBIaSBBcmQsCj4gPiA+Cj4gPiA+IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtl cm5lbC5vcmc+IHdyaXRlczoKPiA+ID4KPiA+ID4gPiBPbiBTdW4sIDIzIE1heSAyMDIxIGF0IDEz OjA2LCBQdW5pdCBBZ3Jhd2FsIDxwdW5pdGFncmF3YWxAZ21haWwuY29tPiB3cm90ZToKPiA+ID4g Pj4KPiA+ID4gPj4gUm9iaW4gTXVycGh5IDxyb2Jpbi5tdXJwaHlAYXJtLmNvbT4gd3JpdGVzOgo+ ID4gPiA+Pgo+ID4gPiA+PiA+IFsgK2xpbnV4LXBjaSBmb3IgdmlzaWJpbGl0eSBdCj4gPiA+ID4+ ID4KPiA+ID4gPj4gPiBPbiAyMDIxLTA1LTE4IDEwOjA5LCBBbGV4YW5kcnUgRWxpc2VpIHdyb3Rl Ogo+ID4gPiA+PiA+PiBBZnRlciBkb2luZyBhIGdpdCBiaXNlY3QgSSB3YXMgYWJsZSB0byB0cmFj ZSB0aGUgZm9sbG93aW5nIGVycm9yIHdoZW4gYm9vdGluZyBteQo+ID4gPiA+PiA+PiByb2NrcHJv NjQgdjIgKHJrMzM5OSBTb0MpIHdpdGggYSBQQ0lFIE5WTUUgZXhwYW5zaW9uIGNhcmQ6Cj4gPiA+ ID4+ID4+IFsuLl0KPiA+ID4gPj4gPj4gWyAgICAwLjMwNTE4M10gcm9ja2NoaXAtcGNpZSBmODAw MDAwMC5wY2llOiBob3N0IGJyaWRnZSAvcGNpZUBmODAwMDAwMCByYW5nZXM6Cj4gPiA+ID4+ID4+ IFsgICAgMC4zMDUyNDhdIHJvY2tjaGlwLXBjaWUgZjgwMDAwMDAucGNpZTogICAgICBNRU0gMHgw MGZhMDAwMDAwLi4weDAwZmJkZmZmZmYgLT4KPiA+ID4gPj4gPj4gMHgwMGZhMDAwMDAwCj4gPiA+ ID4+ID4+IFsgICAgMC4zMDUyODVdIHJvY2tjaGlwLXBjaWUgZjgwMDAwMDAucGNpZTogICAgICAg SU8gMHgwMGZiZTAwMDAwLi4weDAwZmJlZmZmZmYgLT4KPiA+ID4gPj4gPj4gMHgwMGZiZTAwMDAw Cj4gPiA+ID4+ID4+IFsgICAgMC4zMDYyMDFdIHJvY2tjaGlwLXBjaWUgZjgwMDAwMDAucGNpZTog c3VwcGx5IHZwY2llMXY4IG5vdCBmb3VuZCwgdXNpbmcgZHVtbXkKPiA+ID4gPj4gPj4gcmVndWxh dG9yCj4gPiA+ID4+ID4+IFsgICAgMC4zMDYzMzRdIHJvY2tjaGlwLXBjaWUgZjgwMDAwMDAucGNp ZTogc3VwcGx5IHZwY2llMHY5IG5vdCBmb3VuZCwgdXNpbmcgZHVtbXkKPiA+ID4gPj4gPj4gcmVn dWxhdG9yCj4gPiA+ID4+ID4+IFsgICAgMC4zNzM3MDVdIHJvY2tjaGlwLXBjaWUgZjgwMDAwMDAu cGNpZTogUENJIGhvc3QgYnJpZGdlIHRvIGJ1cyAwMDAwOjAwCj4gPiA+ID4+ID4+IFsgICAgMC4z NzM3MzBdIHBjaV9idXMgMDAwMDowMDogcm9vdCBidXMgcmVzb3VyY2UgW2J1cyAwMC0xZl0KPiA+ ID4gPj4gPj4gWyAgICAwLjM3Mzc1MV0gcGNpX2J1cyAwMDAwOjAwOiByb290IGJ1cyByZXNvdXJj ZSBbbWVtIDB4ZmEwMDAwMDAtMHhmYmRmZmZmZiA2NGJpdF0KPiA+ID4gPj4gPj4gWyAgICAwLjM3 Mzc3N10gcGNpX2J1cyAwMDAwOjAwOiByb290IGJ1cyByZXNvdXJjZSBbaW8gIDB4MDAwMC0weGZm ZmZmXSAoYnVzCj4gPiA+ID4+ID4+IGFkZHJlc3MgWzB4ZmJlMDAwMDAtMHhmYmVmZmZmZl0pCj4g PiA+ID4+ID4+IFsgICAgMC4zNzM4MzldIHBjaSAwMDAwOjAwOjAwLjA6IFsxZDg3OjAxMDBdIHR5 cGUgMDEgY2xhc3MgMHgwNjA0MDAKPiA+ID4gPj4gPj4gWyAgICAwLjM3Mzk3M10gcGNpIDAwMDA6 MDA6MDAuMDogc3VwcG9ydHMgRDEKPiA+ID4gPj4gPj4gWyAgICAwLjM3Mzk5Ml0gcGNpIDAwMDA6 MDA6MDAuMDogUE1FIyBzdXBwb3J0ZWQgZnJvbSBEMCBEMSBEM2hvdAo+ID4gPiA+PiA+PiBbICAg IDAuMzc4NTE4XSBwY2kgMDAwMDowMDowMC4wOiBicmlkZ2UgY29uZmlndXJhdGlvbiBpbnZhbGlk IChbYnVzIDAwLTAwXSksCj4gPiA+ID4+ID4+IHJlY29uZmlndXJpbmcKPiA+ID4gPj4gPj4gWyAg ICAwLjM3ODc2NV0gcGNpIDAwMDA6MDE6MDAuMDogWzE0NGQ6YTgwOF0gdHlwZSAwMCBjbGFzcyAw eDAxMDgwMgo+ID4gPiA+PiA+PiBbICAgIDAuMzc4ODY5XSBwY2kgMDAwMDowMTowMC4wOiByZWcg MHgxMDogW21lbSAweDAwMDAwMDAwLTB4MDAwMDNmZmYgNjRiaXRdCj4gPiA+ID4+ID4+IFsgICAg MC4zNzkwNTFdIHBjaSAwMDAwOjAxOjAwLjA6IE1heCBQYXlsb2FkIFNpemUgc2V0IHRvIDI1NiAo d2FzIDEyOCwgbWF4IDI1NikKPiA+ID4gPj4gPj4gWyAgICAwLjM3OTY2MV0gcGNpIDAwMDA6MDE6 MDAuMDogOC4wMDAgR2IvcyBhdmFpbGFibGUgUENJZSBiYW5kd2lkdGgsIGxpbWl0ZWQgYnkKPiA+ ID4gPj4gPj4gMi41IEdUL3MgUENJZSB4NCBsaW5rIGF0IDAwMDA6MDA6MDAuMCAoY2FwYWJsZSBv ZiAzMS41MDQgR2IvcyB3aXRoIDguMCBHVC9zIFBDSWUKPiA+ID4gPj4gPj4geDQgbGluaykKPiA+ ID4gPj4gPj4gWyAgICAwLjM5MzI2OV0gcGNpX2J1cyAwMDAwOjAxOiBidXNuX3JlczogW2J1cyAw MS0xZl0gZW5kIGlzIHVwZGF0ZWQgdG8gMDEKPiA+ID4gPj4gPj4gWyAgICAwLjM5MzMxMV0gcGNp IDAwMDA6MDA6MDAuMDogQkFSIDE0OiBubyBzcGFjZSBmb3IgW21lbSBzaXplIDB4MDAxMDAwMDBd Cj4gPiA+ID4+ID4+IFsgICAgMC4zOTMzMzNdIHBjaSAwMDAwOjAwOjAwLjA6IEJBUiAxNDogZmFp bGVkIHRvIGFzc2lnbiBbbWVtIHNpemUgMHgwMDEwMDAwMF0KPiA+ID4gPj4gPj4gWyAgICAwLjM5 MzM1Nl0gcGNpIDAwMDA6MDE6MDAuMDogQkFSIDA6IG5vIHNwYWNlIGZvciBbbWVtIHNpemUgMHgw MDAwNDAwMCA2NGJpdF0KPiA+ID4gPj4gPj4gWyAgICAwLjM5MzM3NV0gcGNpIDAwMDA6MDE6MDAu MDogQkFSIDA6IGZhaWxlZCB0byBhc3NpZ24gW21lbSBzaXplIDB4MDAwMDQwMDAgNjRiaXRdCj4g PiA+ID4+ID4+IFsgICAgMC4zOTMzOTddIHBjaSAwMDAwOjAwOjAwLjA6IFBDSSBicmlkZ2UgdG8g W2J1cyAwMV0KPiA+ID4gPj4gPj4gWyAgICAwLjM5MzgzOV0gcGNpZXBvcnQgMDAwMDowMDowMC4w OiBQTUU6IFNpZ25hbGluZyB3aXRoIElSUSA3OAo+ID4gPiA+PiA+PiBbICAgIDAuMzk0MTY1XSBw Y2llcG9ydCAwMDAwOjAwOjAwLjA6IEFFUjogZW5hYmxlZCB3aXRoIElSUSA3OAo+ID4gPiA+PiA+ PiBbLi5dCj4gPiA+ID4+ID4+IHRvIHRoZSBjb21taXQgOWQ1N2U2MWJmNzIzICgib2YvcGNpOiBB ZGQgSU9SRVNPVVJDRV9NRU1fNjQgdG8KPiA+ID4gPj4gPj4gcmVzb3VyY2UgZmxhZ3MgZm9yCj4g PiA+ID4+ID4+IDY0LWJpdCBtZW1vcnkgYWRkcmVzc2VzIikuCj4gPiA+ID4+ID4KPiA+ID4gPj4g PiBGV0ZXLCBteSBodW5jaCBpcyB0aGF0IHRoZSBob3N0IGJyaWRnZSBhZHZlcnRpc2luZyBubyAz Mi1iaXQgbWVtb3J5Cj4gPiA+ID4+ID4gcmVzb3VyY2UsIG9ubHkgb25seSBhIHNpbmdsZSA2NC1i aXQgbm9uLXByZWZldGNoYWJsZSBvbmUgKGV2ZW4gdGhvdWdoCj4gPiA+ID4+ID4gaXQncyBlbnRp cmVseSBiZWxvdyA0R0IpIG1pZ2h0IGJlIGEgYml0IHdlaXJkIGFuZCB0cmlwcGluZyBzb21ldGhp bmcKPiA+ID4gPj4gPiB1cCBpbiB0aGUgcmVzb3VyY2UgYXNzaWdubWVudCBjb2RlLiBJdCBjZXJ0 YWlubHkgc2VlbXMgbGlrZSB0aGUgdGhpbmcKPiA+ID4gPj4gPiBtb3N0IGRpcmVjdGx5IHJlbGF0 ZWQgdG8gdGhlIG9mZmVuZGluZyBjb21taXQuCj4gPiA+ID4+ID4KPiA+ID4gPj4gPiBJJ2QgYmUg dGVtcHRlZCB0byB0cnkgZmlkZGxpbmcgd2l0aCB0aGF0IGluIHRoZSBEVCAoaS5lLiBjaGFuZ2lu Zwo+ID4gPiA+PiA+IDB4ODMwMDAwMDAgdG8gMHg4MjAwMDAwMCBpbiB0aGUgUENJZSBub2RlJ3Mg InJhbmdlcyIgcHJvcGVydHkpIHRvIHNlZQo+ID4gPiA+PiA+IGlmIGl0IG1ha2VzIGFueSBkaWZm ZXJlbmNlLiBOb3RlIHRoYXQgZXZlbiBpZiBpdCBoZWxwcywgdGhvdWdoLCBJCj4gPiA+ID4+ID4g ZG9uJ3Qga25vdyB3aGV0aGVyIHRoYXQncyB0aGUgY29ycmVjdCBmaXggb3IganVzdCBhIGJvZGdl IGFyb3VuZCBhCj4gPiA+ID4+ID4gY29ybmVyLWNhc2UgYnVnIHNvbWV3aGVyZSBpbiB0aGUgcmVz b3VyY2UgY29kZS4KPiA+ID4gPj4KPiA+ID4gPj4gRnJvbSBkaWdnaW5nIGludG8gdGhpcyBmdXJ0 aGVyIHRoZSBmYWlsdXJlIHNlZW1zIHRvIGJlIGR1ZSB0byBhIG1pc21hdGNoCj4gPiA+ID4+IG9m IGZsYWdzIHdoZW4gYWxsb2NhdGluZyByZXNvdXJjZXMgaW4gcGNpX2J1c19hbGxvY19mcm9tX3Jl Z2lvbigpIC0KPiA+ID4gPj4KPiA+ID4gPj4gICAgIGlmICgocmVzLT5mbGFncyBeIHItPmZsYWdz KSAmIHR5cGVfbWFzaykKPiA+ID4gPj4gICAgICAgICAgICAgY29udGludWU7Cj4gPiA+ID4+Cj4g PiA+ID4+IFRob3VnaCBJIGFtIGFsc28gbm90IHN1cmUgd2h5IHRoZSBmYWlsdXJlIGlzIG9ubHkg YmVpbmcgcmVwb3J0ZWQgb24KPiA+ID4gPj4gUkszMzk5IC0gZG9lcyBhIHNpbmdsZSA2NC1iaXQg d2luZG93IGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCBpdD8KPiA+ID4gPj4KPiA+ID4gPgo+ID4g PiA+IFRoZSBOVk1lIGluIHRoZSBleGFtcGxlIGV4cG9zZXMgYSBzaW5nbGUgNjQtYml0IG5vbi1w cmVmZXRjaGFibGUgQkFSLgo+ID4gPiA+IFN1Y2ggQkFScyBjYW4gbm90IGJlIGFsbG9jYXRlZCBp biBhIHByZWZldGNoYWJsZSBob3N0IGJyaWRnZSB3aW5kb3cKPiA+ID4gPiAodW5saWtlIHRoZSBj b252ZXJzZSwgaS5lLiwgYWxsb2NhdGluZyBhIHByZWZldGNoYWJsZSBCQVIgaW4gYQo+ID4gPiA+ IG5vbi1wcmVmZXRjaGFibGUgaG9zdCBicmlkZ2Ugd2luZG93IGlzIGZpbmUpCj4gPiA+ID4KPiA+ ID4gPiA2NC1iaXQgbm9uLXByZWZldGNoYWJsZSBob3N0IGJyaWRnZSB3aW5kb3dzIGNhbm5vdCBi ZSBmb3J3YXJkZWQgYnkgUENJCj4gPiA+ID4gdG8gUENJIGJyaWRnZXMsIHRoZXkgc2ltcGx5IGxh Y2sgdGhlIEJBUiByZWdpc3RlcnMgdG8gZGVzY3JpYmUgdGhlbS4KPiA+ID4gPiBUaGVyZWZvcmUs IG5vbi1wcmVmZXRjaGFibGUgZW5kcG9pbnQgQkFScyAoZXZlbiA2NC1iaXQgb25lcykgbmVlZCB0 bwo+ID4gPiA+IGJlIGNhcnZlZCBvdXQgb2YgYSBob3N0IGJyaWRnZSdzIG5vbi1wcmVmZXRjaGFi bGUgMzItYml0IHdpbmRvdyBpZgo+ID4gPiA+IHRoZXkgbmVlZCB0byBwYXNzIHRocm91Z2ggYSBi cmlkZ2UuCj4gPiA+Cj4gPiA+IFRoYW5rIHlvdSBmb3IgdGhlIGV4cGxhbmF0aW9uLiBJIGFsc28g bG9va2VkIGF0IHRoZSBQQ0ktdG8tUENJIEJyaWRnZQo+ID4gPiBzcGVjIHRvIHVuZGVyc3RhbmQg d2hlcmUgc29tZSBvZiB0aGUgbGltaXRhdGlvbnMgYXJlIGNvbWluZyBmcm9tLgo+ID4gPgo+ID4g PiA+IFNvIHRoZSBlcnJvciBzZWVtcyB0byBiZSBoZXJlIHRoYXQgdGhlIGhvc3QgYnJpZGdlJ3Mg MzItYml0Cj4gPiA+ID4gbm9uLXByZWZldGNoYWJsZSB3aW5kb3cgaGFzIHRoZSA2NC1iaXQgYXR0 cmlidXRlIHNldCwgZXZlbiB0aG91Z2ggaXQKPiA+ID4gPiByZXNpZGVzIGJlbG93IDQgR0IgZW50 aXJlbHkuIEkgc3VwcG9zZSB0aGF0IHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uCj4gPiA+ID4gY291 bGQgYmUgbWFkZSBtb3JlIGZvcmdpdmluZyAoYW5kIGl0IHdhcyBpbiB0aGUgcGFzdCwgYmVmb3Jl IGNvbW1pdAo+ID4gPiA+IDlkNTdlNjFiZjcyMyB3YXMgYXBwbGllZCkuIEhvd2V2ZXIsIEkgd291 bGQgc3Ryb25nbHkgcmVjb21tZW5kIG5vdAo+ID4gPiA+IGRldmlhdGluZyBmcm9tIGNvbW1vbiBw cmFjdGljZSwgYW5kIGp1c3QgZGVzY3JpYmUgdGhlIDMyLWJpdAo+ID4gPiA+IGFkZHJlc3NhYmxl IG5vbi1wcmVmZXRjaGFibGUgcmVzb3VyY2Ugd2luZG93IGFzIHN1Y2guCj4gPiA+Cj4gPiA+IElJ VUMsIHRoZSBob3N0IGJyaWRnZSdzIGNvbmZpZ3VyYXRpb24gKDY0LWJpdCBvbiBub24tcHJlZmV0 Y2hhYmxlCj4gPiA+IHdpbmRvdykgaXMgYmFzZWQgb24gd2hhdCB0aGUgaGFyZHdhcmUgYWR2ZXJ0 aXNlcy4KPiA+ID4KPiA+Cj4gPiBXaGF0IGRvIHlvdSBtZWFuIGJ5ICd3aGF0IHRoZSBoYXJkd2Fy ZSBhZHZlcnRpc2VzJz8gVGhlIGhvc3QgYnJpZGdlIGlzCj4gPiBhcHBhcmVudGx5IGNvbmZpZ3Vy ZWQgdG8gZGVjb2RlIGEgMzItYml0IGFkZHJlc3NhYmxlIHdpbmRvdyBhcyBNTUlPLAo+ID4gYW5k IHRoZSBxdWVzdGlvbiBpcyB3aHkgdGhpcyB3aW5kb3cgaGFzIHRoZSA2NC1iaXQgYXR0cmlidXRl IHNldCBpbgo+ID4gdGhlIERUIGRlc2NyaXB0aW9uLgo+ID4KPiA+ID4gQ2FuIHlvdSBlbGFib3Jh dGUgb24gd2hhdCB5b3UgaGF2ZSBpbiBtaW5kIHRvIGNvcnJlY3QgdGhlCj4gPiA+IG5vbi1wcmVm ZXRjaGFibGUgcmVzb3VyY2Ugd2luZG93PyBBcmUgeW91IHRoaW5raW5nIG9mIGFkZGluZyBhIHF1 aXJrCj4gPiA+IHNvbWV3aGVyZSB0byBhZGRyZXNzIHRoaXM/Cj4gPiA+Cj4gPgo+ID4gTm8uIEp1 c3QgZml4IHRoZSBEVC4KPgo+IEdvb2QgTW9ybmluZywKPgo+IEkgYmVsaWV2ZSBSb2JpbiBpcyBj b3JyZWN0IHRoYXQgdGhlcmUgaXMgbW9yZSB0byB0aGlzLgo+IFdoaWxlIGF0dGVtcHRpbmcgdG8g d29yayBvdXQgd2h5IGRHUFVzIHdvbid0IHdvcmsgd2l0aCB0aGUgcmszNTZ4Cj4gc2VyaWVzIFBD SWUgY29udHJvbGxlcnMsIENocmlzdGlhbiBLw7ZuaWcgZnJvbSB0aGUgYW1kLWdwdSBkcml2ZXIK PiBtYWlsaW5nIGxpc3Qgbm90aWNlZCB0aGUgZ3B1IHdhcyBpbmNvcnJlY3RseSBhbGxvY2F0ZWQg YSA2NGJpdAo+IG5vbi1wcmVmZXRjaGFibGUgQkFSIHdoaWNoIHNob3VsZCBpbnN0ZWFkIGJlIGEg MzIgbm9uLXByZWZldGNoYWJsZQo+IEJBUi4KPgoKVGhpcyBpcyBkdWUgdG8gdGhlIHRyYW5zbGF0 aW9uLiBGb3Igc29tZSByZWFzb24sIGxzcGNpIHRyYW5zbGF0ZXMgdGhlCkJBUiB2YWx1ZXMgdG8g Q1BVIGFkZHJlc3NlcywgYnV0IHRoZSBQQ0kgc2lkZSBhZGRyZXNzZXMgYXJlIHdpdGhpbgozMi1i aXRzLgoKQXJlIHlvdSBzdXJlIHRoZSBhbWRncHUgZHJpdmVyIGNhbiBldmVuIGRlYWwgd2l0aCBu b24tMToxIGhvc3QgYnJpZGdlcz8KCj4gVGhlIHJhbmdlcyBjdXJyZW50bHkgc2V0IGFyZToKPiBy YW5nZXMgPSA8MHg4MTAwMDAwMCAweDAgMHgwMDgwMDAwMCAweDMgMHgwMDgwMDAwMCAweDAgMHgw MDEwMDAwMAo+IDB4ODIwMDAwMDAgMHgwIDB4MDA5MDAwMDAgMHgzIDB4MDA5MDAwMDAgMHgwIDB4 M2Y3MDAwMDA+Owo+CgpTbyB5b3UgaGF2ZSB0d28gcmFuZ2VzIGhlcmUuCgo+IGJ1dCB0aGUgZmlu YWwgYWxsb2NhdGlvbiB3YXM6Cj4KPiBsc3BjaSAtdgo+IDAwOjAwLjAgUENJIGJyaWRnZTogRnV6 aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLiwgTHRkIERldmljZSAzNTY2Cj4gKHJldiAwMSkg KHByb2ctaWYgMDAgW05vcm1hbCBkZWNvZGVdKQo+ICAgICAgICAgRmxhZ3M6IGJ1cyBtYXN0ZXIs IGZhc3QgZGV2c2VsLCBsYXRlbmN5IDAsIElSUSA5Ngo+ICAgICAgICAgQnVzOiBwcmltYXJ5PTAw LCBzZWNvbmRhcnk9MDEsIHN1Ym9yZGluYXRlPWZmLCBzZWMtbGF0ZW5jeT0wCj4gICAgICAgICBJ L08gYmVoaW5kIGJyaWRnZTogMDAwMDEwMDAtMDAwMDFmZmYgW3NpemU9NEtdCj4gICAgICAgICBN ZW1vcnkgYmVoaW5kIGJyaWRnZTogMDA5MDAwMDAtMDA5ZmZmZmYgW3NpemU9MU1dCj4gICAgICAg ICBQcmVmZXRjaGFibGUgbWVtb3J5IGJlaGluZCBicmlkZ2U6Cj4gMDAwMDAwMDAxMDAwMDAwMC0w MDAwMDAwMDFmZmZmZmZmIFtzaXplPTI1Nk1dCgpCdXQgdGhlIGhvc3QgYnJpZGdlL3Jvb3QgcG9y dCBkZWNvZGVzIHR3byBkaXNqb2ludCByZWdpb25zPz8KCj4gICAgICAgICBFeHBhbnNpb24gUk9N IGF0IDMwMGEwMDAwMCBbdmlydHVhbF0gW2Rpc2FibGVkXSBbc2l6ZT02NEtdCj4gICAgICAgICBD YXBhYmlsaXRpZXM6IFs0MF0gUG93ZXIgTWFuYWdlbWVudCB2ZXJzaW9uIDMKPiAgICAgICAgIENh cGFiaWxpdGllczogWzUwXSBNU0k6IEVuYWJsZSsgQ291bnQ9MS8zMiBNYXNrYWJsZS0gNjRiaXQr Cj4gICAgICAgICBDYXBhYmlsaXRpZXM6IFs3MF0gRXhwcmVzcyBSb290IFBvcnQgKFNsb3QtKSwg TVNJIDAwCj4gICAgICAgICBDYXBhYmlsaXRpZXM6IFtiMF0gTVNJLVg6IEVuYWJsZS0gQ291bnQ9 MSBNYXNrZWQtCj4gICAgICAgICBDYXBhYmlsaXRpZXM6IFsxMDBdIEFkdmFuY2VkIEVycm9yIFJl cG9ydGluZwo+ICAgICAgICAgQ2FwYWJpbGl0aWVzOiBbMTQ4XSBTZWNvbmRhcnkgUENJIEV4cHJl c3MKPiAgICAgICAgIENhcGFiaWxpdGllczogWzE2MF0gTDEgUE0gU3Vic3RhdGVzCj4gICAgICAg ICBDYXBhYmlsaXRpZXM6IFsxNzBdIFZlbmRvciBTcGVjaWZpYyBJbmZvcm1hdGlvbjogSUQ9MDAw MiBSZXY9NAo+IExlbj0xMDAgPD8+Cj4gICAgICAgICBLZXJuZWwgZHJpdmVyIGluIHVzZTogcGNp ZXBvcnQKPgo+IDAxOjAwLjAgVkdBIGNvbXBhdGlibGUgY29udHJvbGxlcjogQWR2YW5jZWQgTWlj cm8gRGV2aWNlcywgSW5jLgo+IFtBTUQvQVRJXSBUdXJrcyBQUk8gW1JhZGVvbiBIRCA3NTcwXSAo cHJvZy1pZiAwMCBbVkdBIGNvbnRyb2xsZXJdKQo+ICAgICAgICAgU3Vic3lzdGVtOiBEZWxsIFR1 cmtzIFBSTyBbUmFkZW9uIEhEIDc1NzBdCj4gICAgICAgICBGbGFnczogYnVzIG1hc3RlciwgZmFz dCBkZXZzZWwsIGxhdGVuY3kgMCwgSVJRIDk1Cj4gICAgICAgICBNZW1vcnkgYXQgMzEwMDAwMDAw ICg2NC1iaXQsIHByZWZldGNoYWJsZSkgW3NpemU9MjU2TV0KPiAgICAgICAgIE1lbW9yeSBhdCAz MDA5MDAwMDAgKDY0LWJpdCwgbm9uLXByZWZldGNoYWJsZSkgW3NpemU9MTI4S10KPiAgICAgICAg IEkvTyBwb3J0cyBhdCAxMDAwIFtzaXplPTI1Nl0KPiAgICAgICAgIEV4cGFuc2lvbiBST00gYXQg MzAwOTIwMDAwIFtkaXNhYmxlZF0gW3NpemU9MTI4S10KPiAgICAgICAgIENhcGFiaWxpdGllczog WzUwXSBQb3dlciBNYW5hZ2VtZW50IHZlcnNpb24gMwo+ICAgICAgICAgQ2FwYWJpbGl0aWVzOiBb NThdIEV4cHJlc3MgTGVnYWN5IEVuZHBvaW50LCBNU0kgMDAKPiAgICAgICAgIENhcGFiaWxpdGll czogW2EwXSBNU0k6IEVuYWJsZS0gQ291bnQ9MS8xIE1hc2thYmxlLSA2NGJpdCsKPiAgICAgICAg IENhcGFiaWxpdGllczogWzEwMF0gVmVuZG9yIFNwZWNpZmljIEluZm9ybWF0aW9uOiBJRD0wMDAx IFJldj0xCj4gTGVuPTAxMCA8Pz4KPiAgICAgICAgIENhcGFiaWxpdGllczogWzE1MF0gQWR2YW5j ZWQgRXJyb3IgUmVwb3J0aW5nCj4gICAgICAgICBLZXJuZWwgZHJpdmVyIGluIHVzZTogcmFkZW9u Cj4KPiAwMTowMC4xIEF1ZGlvIGRldmljZTogQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiBb QU1EL0FUSV0gVHVya3MKPiBIRE1JIEF1ZGlvIFtSYWRlb24gSEQgNjUwMC82NjAwIC8gNjcwME0g U2VyaWVzXQo+ICAgICAgICAgU3Vic3lzdGVtOiBEZWxsIFR1cmtzIEhETUkgQXVkaW8gW1JhZGVv biBIRCA2NTAwLzY2MDAgLyA2NzAwTSBTZXJpZXNdCj4gICAgICAgICBGbGFnczogYnVzIG1hc3Rl ciwgZmFzdCBkZXZzZWwsIGxhdGVuY3kgMCwgSVJRIDk4Cj4gICAgICAgICBNZW1vcnkgYXQgMzAw OTQwMDAwICg2NC1iaXQsIG5vbi1wcmVmZXRjaGFibGUpIFtzaXplPTE2S10KPiAgICAgICAgIENh cGFiaWxpdGllczogWzUwXSBQb3dlciBNYW5hZ2VtZW50IHZlcnNpb24gMwo+ICAgICAgICAgQ2Fw YWJpbGl0aWVzOiBbNThdIEV4cHJlc3MgTGVnYWN5IEVuZHBvaW50LCBNU0kgMDAKPiAgICAgICAg IENhcGFiaWxpdGllczogW2EwXSBNU0k6IEVuYWJsZSsgQ291bnQ9MS8xIE1hc2thYmxlLSA2NGJp dCsKPiAgICAgICAgIENhcGFiaWxpdGllczogWzEwMF0gVmVuZG9yIFNwZWNpZmljIEluZm9ybWF0 aW9uOiBJRD0wMDAxIFJldj0xCj4gTGVuPTAxMCA8Pz4KPiAgICAgICAgIENhcGFiaWxpdGllczog WzE1MF0gQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nCj4gICAgICAgICBLZXJuZWwgZHJpdmVyIGlu IHVzZTogc25kX2hkYV9pbnRlbAo+Cj4gVGhpcyB3aWxsIG9idmlvdXNseSBjbG9iYmVyIHJlZ2lz dGVycyBkdXJpbmcgd3JpdGVzLgoKSSBkb24ndCBmb2xsb3cuIFdoaWNoIHdyaXRlcyB3aWxsIGNs b2JiZXIgd2hpY2ggcmVnaXN0ZXJzLCBhbmQgaG93IGlzCml0IG9idmlvdXM/Cgo+IEFsc28sIGlm IDwweDgyMDAwMDAwPiAoMzIgYml0KSBpcyBjaGFuZ2VkIHRvIDwweDgzMDAwMDAwPiAoNjQgYml0 KSwKPiBtb3N0IG9mIHRoZSBhbGxvY2F0aW9ucyBmb3IgdGhlIGRHUFUgZmFpbCBkdWUgdG8gbm8g dmFsaWQgcmVnaW9ucwo+IGF2YWlsYWJsZS4KPgoKQnV0IHdhc24ndCB0aGUgb3JpZ2luYWwgcHJv YmxlbSB0aGF0IHRoZSByZXNvdXJjZSB3aW5kb3cgd2FzIDY0LWJpdCB0bwpiZWdpbiB3aXRoPyBB cmUgeW91IHN1cmUgd2UgYXJlIHRhbGtpbmcgYWJvdXQgdGhlIHNhbWUgcHJvYmxlbSBoZXJlPwoK Cj4gPgo+ID4gPiBJIGFtIGhhcHB5IHRvIHB1dCBzb21ldGhpbmcgdG9nZXRoZXIgb25jZSBJIHVu ZGVyc3RhbmQgdGhlIHByZWZlcnJlZCB3YXkKPiA+ID4gdG8gZ28gYWJvdXQgaXQuCj4gPiA+Cj4g PiA+IFRoYW5rcywKPiA+ID4gUHVuaXQKPiA+ID4KPiA+ID4gWy4uLl0KPiA+ID4KPiA+Cj4gPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gTGludXgt cm9ja2NoaXAgbWFpbGluZyBsaXN0Cj4gPiBMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQu b3JnCj4gPiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LXJvY2tjaGlwCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LXJvY2tjaGlwCg== 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 X-Spam-Level: X-Spam-Status: No, score=-4.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 05AF7C2B9F8 for ; Tue, 25 May 2021 16:20:46 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id AA97861408 for ; Tue, 25 May 2021 16:20:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AA97861408 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=cjilt+SVhaF4iD44YO4jAT8gmRmt5KNmeqbd+Q1jsug=; b=N+q9W0Y5zwPCwL XWAHOidwdsshml94SjwuSqB+z6q2h0blXYx3H2fyNTmoJHzehY8cTbErZwc9t0efr3TdJdOnRiG1T Q6ZtwsNFi0LQgHlZDo/APFKiQoWDpGowse7MZeAVAJCWboua+6GOCUrSEutidc0b60A5+TpHHwLUw EmQq8dwHioA5ZCnqvKPVe94rNjybTtuHnPIrKJExRbUwzIK/XCSDjgYkHrMYMZuPyrGhYG5yn+Mux g/YshqbQE+ZcnA1TOu44xI21OzLf27hkV1iPlexi0nrzrQz84m7BNDi2XC8r6qAT06Ljjx1mG3xDg CElotEwsBvYljQkPnlwQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1llZkp-006LZr-Ne; Tue, 25 May 2021 16:18:04 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1llZOf-006BMi-Nw; Tue, 25 May 2021 15:55:12 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 4F6B76141C; Tue, 25 May 2021 15:55:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1621958109; bh=rbfLFTpdS7dsvU1lnqHm0Eg6YbPN1ywTyypZbgz6f4Y=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=djC9Uxu2huIeUKtbihW1gQMB+QtaskgQTF2B/wDluYf7tuCI2Ix59oD5g8hjHXj7V YxuD3VGGmNHk/025H8A4ZgiMKwHV7C3Q6c+ynlOL/EcJmbUqDINlrtZbj62OrDe1Tm daH0BkwRg0L0zBfgEZW77VghYr+g7L6yFWbzdnaATDh+J9yzfSVhV7r/Mkpsjk3OZ6 zSL1yVko44rOOzi1g9Ps58cE3yqm+e7/1mEGy2oauEeLZetQTvzR28GeALvBrhFp31 NqFhkAR9mf7YEW/D9k9VEU73RRr1NmjEAQTmSV9TWJU2e6UErfHlB5DFgXA+hrdhHL PA0Qp/gaGtw/A== Received: by mail-oi1-f175.google.com with SMTP id u11so30720252oiv.1; Tue, 25 May 2021 08:55:09 -0700 (PDT) X-Gm-Message-State: AOAM531nz+DIA9DhVUh8Io6rtlkc8XmXkO56HiZKkVbqMYbxDCAFKl1h MkRV88Y/NwJJDjls5qJTTPBD1KAicvvhgfL+Vy8= X-Google-Smtp-Source: ABdhPJw39bc5cbG5JE3bIuosBNIYIZ6lKvpvmOgPOwb2LNiXtoeeIKzQdsRMOBe6wv2zt8NXpLU+d3qomwHWkXdtz+8= X-Received: by 2002:aca:3182:: with SMTP id x124mr3327594oix.47.1621958108589; Tue, 25 May 2021 08:55:08 -0700 (PDT) MIME-Version: 1.0 References: <7a1e2ebc-f7d8-8431-d844-41a9c36a8911@arm.com> <01efd004-1c50-25ca-05e4-7e4ef96232e2@arm.com> <87eedxbtkn.fsf@stealth> <877djnaq11.fsf@stealth> In-Reply-To: From: Ard Biesheuvel Date: Tue, 25 May 2021 17:54:56 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [BUG] rockpro64: PCI BAR reassignment broken by commit 9d57e61bf723 ("of/pci: Add IORESOURCE_MEM_64 to resource flags for 64-bit memory addresses") To: Peter Geis Cc: Punit Agrawal , Robin Murphy , Alexandru Elisei , Linux Kernel Mailing List , "open list:ARM/Rockchip SoC..." , arm-mail-list , Heiko Stuebner , Leonardo Bras , Rob Herring , PCI , =?UTF-8?Q?Christian_K=C3=B6nig?= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210525_085509_879321_2FD9C688 X-CRM114-Status: GOOD ( 53.31 ) 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 T24gVHVlLCAyNSBNYXkgMjAyMSBhdCAxNzozNCwgUGV0ZXIgR2VpcyA8cGd3aXBlb3V0QGdtYWls LmNvbT4gd3JvdGU6Cj4KPiBPbiBUdWUsIE1heSAyNSwgMjAyMSBhdCA5OjU3IEFNIEFyZCBCaWVz aGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+IHdyb3RlOgo+ID4KPiA+IE9uIFR1ZSwgMjUgTWF5IDIw MjEgYXQgMTU6NDIsIFB1bml0IEFncmF3YWwgPHB1bml0YWdyYXdhbEBnbWFpbC5jb20+IHdyb3Rl Ogo+ID4gPgo+ID4gPiBIaSBBcmQsCj4gPiA+Cj4gPiA+IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtl cm5lbC5vcmc+IHdyaXRlczoKPiA+ID4KPiA+ID4gPiBPbiBTdW4sIDIzIE1heSAyMDIxIGF0IDEz OjA2LCBQdW5pdCBBZ3Jhd2FsIDxwdW5pdGFncmF3YWxAZ21haWwuY29tPiB3cm90ZToKPiA+ID4g Pj4KPiA+ID4gPj4gUm9iaW4gTXVycGh5IDxyb2Jpbi5tdXJwaHlAYXJtLmNvbT4gd3JpdGVzOgo+ ID4gPiA+Pgo+ID4gPiA+PiA+IFsgK2xpbnV4LXBjaSBmb3IgdmlzaWJpbGl0eSBdCj4gPiA+ID4+ ID4KPiA+ID4gPj4gPiBPbiAyMDIxLTA1LTE4IDEwOjA5LCBBbGV4YW5kcnUgRWxpc2VpIHdyb3Rl Ogo+ID4gPiA+PiA+PiBBZnRlciBkb2luZyBhIGdpdCBiaXNlY3QgSSB3YXMgYWJsZSB0byB0cmFj ZSB0aGUgZm9sbG93aW5nIGVycm9yIHdoZW4gYm9vdGluZyBteQo+ID4gPiA+PiA+PiByb2NrcHJv NjQgdjIgKHJrMzM5OSBTb0MpIHdpdGggYSBQQ0lFIE5WTUUgZXhwYW5zaW9uIGNhcmQ6Cj4gPiA+ ID4+ID4+IFsuLl0KPiA+ID4gPj4gPj4gWyAgICAwLjMwNTE4M10gcm9ja2NoaXAtcGNpZSBmODAw MDAwMC5wY2llOiBob3N0IGJyaWRnZSAvcGNpZUBmODAwMDAwMCByYW5nZXM6Cj4gPiA+ID4+ID4+ IFsgICAgMC4zMDUyNDhdIHJvY2tjaGlwLXBjaWUgZjgwMDAwMDAucGNpZTogICAgICBNRU0gMHgw MGZhMDAwMDAwLi4weDAwZmJkZmZmZmYgLT4KPiA+ID4gPj4gPj4gMHgwMGZhMDAwMDAwCj4gPiA+ ID4+ID4+IFsgICAgMC4zMDUyODVdIHJvY2tjaGlwLXBjaWUgZjgwMDAwMDAucGNpZTogICAgICAg SU8gMHgwMGZiZTAwMDAwLi4weDAwZmJlZmZmZmYgLT4KPiA+ID4gPj4gPj4gMHgwMGZiZTAwMDAw Cj4gPiA+ID4+ID4+IFsgICAgMC4zMDYyMDFdIHJvY2tjaGlwLXBjaWUgZjgwMDAwMDAucGNpZTog c3VwcGx5IHZwY2llMXY4IG5vdCBmb3VuZCwgdXNpbmcgZHVtbXkKPiA+ID4gPj4gPj4gcmVndWxh dG9yCj4gPiA+ID4+ID4+IFsgICAgMC4zMDYzMzRdIHJvY2tjaGlwLXBjaWUgZjgwMDAwMDAucGNp ZTogc3VwcGx5IHZwY2llMHY5IG5vdCBmb3VuZCwgdXNpbmcgZHVtbXkKPiA+ID4gPj4gPj4gcmVn dWxhdG9yCj4gPiA+ID4+ID4+IFsgICAgMC4zNzM3MDVdIHJvY2tjaGlwLXBjaWUgZjgwMDAwMDAu cGNpZTogUENJIGhvc3QgYnJpZGdlIHRvIGJ1cyAwMDAwOjAwCj4gPiA+ID4+ID4+IFsgICAgMC4z NzM3MzBdIHBjaV9idXMgMDAwMDowMDogcm9vdCBidXMgcmVzb3VyY2UgW2J1cyAwMC0xZl0KPiA+ ID4gPj4gPj4gWyAgICAwLjM3Mzc1MV0gcGNpX2J1cyAwMDAwOjAwOiByb290IGJ1cyByZXNvdXJj ZSBbbWVtIDB4ZmEwMDAwMDAtMHhmYmRmZmZmZiA2NGJpdF0KPiA+ID4gPj4gPj4gWyAgICAwLjM3 Mzc3N10gcGNpX2J1cyAwMDAwOjAwOiByb290IGJ1cyByZXNvdXJjZSBbaW8gIDB4MDAwMC0weGZm ZmZmXSAoYnVzCj4gPiA+ID4+ID4+IGFkZHJlc3MgWzB4ZmJlMDAwMDAtMHhmYmVmZmZmZl0pCj4g PiA+ID4+ID4+IFsgICAgMC4zNzM4MzldIHBjaSAwMDAwOjAwOjAwLjA6IFsxZDg3OjAxMDBdIHR5 cGUgMDEgY2xhc3MgMHgwNjA0MDAKPiA+ID4gPj4gPj4gWyAgICAwLjM3Mzk3M10gcGNpIDAwMDA6 MDA6MDAuMDogc3VwcG9ydHMgRDEKPiA+ID4gPj4gPj4gWyAgICAwLjM3Mzk5Ml0gcGNpIDAwMDA6 MDA6MDAuMDogUE1FIyBzdXBwb3J0ZWQgZnJvbSBEMCBEMSBEM2hvdAo+ID4gPiA+PiA+PiBbICAg IDAuMzc4NTE4XSBwY2kgMDAwMDowMDowMC4wOiBicmlkZ2UgY29uZmlndXJhdGlvbiBpbnZhbGlk IChbYnVzIDAwLTAwXSksCj4gPiA+ID4+ID4+IHJlY29uZmlndXJpbmcKPiA+ID4gPj4gPj4gWyAg ICAwLjM3ODc2NV0gcGNpIDAwMDA6MDE6MDAuMDogWzE0NGQ6YTgwOF0gdHlwZSAwMCBjbGFzcyAw eDAxMDgwMgo+ID4gPiA+PiA+PiBbICAgIDAuMzc4ODY5XSBwY2kgMDAwMDowMTowMC4wOiByZWcg MHgxMDogW21lbSAweDAwMDAwMDAwLTB4MDAwMDNmZmYgNjRiaXRdCj4gPiA+ID4+ID4+IFsgICAg MC4zNzkwNTFdIHBjaSAwMDAwOjAxOjAwLjA6IE1heCBQYXlsb2FkIFNpemUgc2V0IHRvIDI1NiAo d2FzIDEyOCwgbWF4IDI1NikKPiA+ID4gPj4gPj4gWyAgICAwLjM3OTY2MV0gcGNpIDAwMDA6MDE6 MDAuMDogOC4wMDAgR2IvcyBhdmFpbGFibGUgUENJZSBiYW5kd2lkdGgsIGxpbWl0ZWQgYnkKPiA+ ID4gPj4gPj4gMi41IEdUL3MgUENJZSB4NCBsaW5rIGF0IDAwMDA6MDA6MDAuMCAoY2FwYWJsZSBv ZiAzMS41MDQgR2IvcyB3aXRoIDguMCBHVC9zIFBDSWUKPiA+ID4gPj4gPj4geDQgbGluaykKPiA+ ID4gPj4gPj4gWyAgICAwLjM5MzI2OV0gcGNpX2J1cyAwMDAwOjAxOiBidXNuX3JlczogW2J1cyAw MS0xZl0gZW5kIGlzIHVwZGF0ZWQgdG8gMDEKPiA+ID4gPj4gPj4gWyAgICAwLjM5MzMxMV0gcGNp IDAwMDA6MDA6MDAuMDogQkFSIDE0OiBubyBzcGFjZSBmb3IgW21lbSBzaXplIDB4MDAxMDAwMDBd Cj4gPiA+ID4+ID4+IFsgICAgMC4zOTMzMzNdIHBjaSAwMDAwOjAwOjAwLjA6IEJBUiAxNDogZmFp bGVkIHRvIGFzc2lnbiBbbWVtIHNpemUgMHgwMDEwMDAwMF0KPiA+ID4gPj4gPj4gWyAgICAwLjM5 MzM1Nl0gcGNpIDAwMDA6MDE6MDAuMDogQkFSIDA6IG5vIHNwYWNlIGZvciBbbWVtIHNpemUgMHgw MDAwNDAwMCA2NGJpdF0KPiA+ID4gPj4gPj4gWyAgICAwLjM5MzM3NV0gcGNpIDAwMDA6MDE6MDAu MDogQkFSIDA6IGZhaWxlZCB0byBhc3NpZ24gW21lbSBzaXplIDB4MDAwMDQwMDAgNjRiaXRdCj4g PiA+ID4+ID4+IFsgICAgMC4zOTMzOTddIHBjaSAwMDAwOjAwOjAwLjA6IFBDSSBicmlkZ2UgdG8g W2J1cyAwMV0KPiA+ID4gPj4gPj4gWyAgICAwLjM5MzgzOV0gcGNpZXBvcnQgMDAwMDowMDowMC4w OiBQTUU6IFNpZ25hbGluZyB3aXRoIElSUSA3OAo+ID4gPiA+PiA+PiBbICAgIDAuMzk0MTY1XSBw Y2llcG9ydCAwMDAwOjAwOjAwLjA6IEFFUjogZW5hYmxlZCB3aXRoIElSUSA3OAo+ID4gPiA+PiA+ PiBbLi5dCj4gPiA+ID4+ID4+IHRvIHRoZSBjb21taXQgOWQ1N2U2MWJmNzIzICgib2YvcGNpOiBB ZGQgSU9SRVNPVVJDRV9NRU1fNjQgdG8KPiA+ID4gPj4gPj4gcmVzb3VyY2UgZmxhZ3MgZm9yCj4g PiA+ID4+ID4+IDY0LWJpdCBtZW1vcnkgYWRkcmVzc2VzIikuCj4gPiA+ID4+ID4KPiA+ID4gPj4g PiBGV0ZXLCBteSBodW5jaCBpcyB0aGF0IHRoZSBob3N0IGJyaWRnZSBhZHZlcnRpc2luZyBubyAz Mi1iaXQgbWVtb3J5Cj4gPiA+ID4+ID4gcmVzb3VyY2UsIG9ubHkgb25seSBhIHNpbmdsZSA2NC1i aXQgbm9uLXByZWZldGNoYWJsZSBvbmUgKGV2ZW4gdGhvdWdoCj4gPiA+ID4+ID4gaXQncyBlbnRp cmVseSBiZWxvdyA0R0IpIG1pZ2h0IGJlIGEgYml0IHdlaXJkIGFuZCB0cmlwcGluZyBzb21ldGhp bmcKPiA+ID4gPj4gPiB1cCBpbiB0aGUgcmVzb3VyY2UgYXNzaWdubWVudCBjb2RlLiBJdCBjZXJ0 YWlubHkgc2VlbXMgbGlrZSB0aGUgdGhpbmcKPiA+ID4gPj4gPiBtb3N0IGRpcmVjdGx5IHJlbGF0 ZWQgdG8gdGhlIG9mZmVuZGluZyBjb21taXQuCj4gPiA+ID4+ID4KPiA+ID4gPj4gPiBJJ2QgYmUg dGVtcHRlZCB0byB0cnkgZmlkZGxpbmcgd2l0aCB0aGF0IGluIHRoZSBEVCAoaS5lLiBjaGFuZ2lu Zwo+ID4gPiA+PiA+IDB4ODMwMDAwMDAgdG8gMHg4MjAwMDAwMCBpbiB0aGUgUENJZSBub2RlJ3Mg InJhbmdlcyIgcHJvcGVydHkpIHRvIHNlZQo+ID4gPiA+PiA+IGlmIGl0IG1ha2VzIGFueSBkaWZm ZXJlbmNlLiBOb3RlIHRoYXQgZXZlbiBpZiBpdCBoZWxwcywgdGhvdWdoLCBJCj4gPiA+ID4+ID4g ZG9uJ3Qga25vdyB3aGV0aGVyIHRoYXQncyB0aGUgY29ycmVjdCBmaXggb3IganVzdCBhIGJvZGdl IGFyb3VuZCBhCj4gPiA+ID4+ID4gY29ybmVyLWNhc2UgYnVnIHNvbWV3aGVyZSBpbiB0aGUgcmVz b3VyY2UgY29kZS4KPiA+ID4gPj4KPiA+ID4gPj4gRnJvbSBkaWdnaW5nIGludG8gdGhpcyBmdXJ0 aGVyIHRoZSBmYWlsdXJlIHNlZW1zIHRvIGJlIGR1ZSB0byBhIG1pc21hdGNoCj4gPiA+ID4+IG9m IGZsYWdzIHdoZW4gYWxsb2NhdGluZyByZXNvdXJjZXMgaW4gcGNpX2J1c19hbGxvY19mcm9tX3Jl Z2lvbigpIC0KPiA+ID4gPj4KPiA+ID4gPj4gICAgIGlmICgocmVzLT5mbGFncyBeIHItPmZsYWdz KSAmIHR5cGVfbWFzaykKPiA+ID4gPj4gICAgICAgICAgICAgY29udGludWU7Cj4gPiA+ID4+Cj4g PiA+ID4+IFRob3VnaCBJIGFtIGFsc28gbm90IHN1cmUgd2h5IHRoZSBmYWlsdXJlIGlzIG9ubHkg YmVpbmcgcmVwb3J0ZWQgb24KPiA+ID4gPj4gUkszMzk5IC0gZG9lcyBhIHNpbmdsZSA2NC1iaXQg d2luZG93IGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCBpdD8KPiA+ID4gPj4KPiA+ID4gPgo+ID4g PiA+IFRoZSBOVk1lIGluIHRoZSBleGFtcGxlIGV4cG9zZXMgYSBzaW5nbGUgNjQtYml0IG5vbi1w cmVmZXRjaGFibGUgQkFSLgo+ID4gPiA+IFN1Y2ggQkFScyBjYW4gbm90IGJlIGFsbG9jYXRlZCBp biBhIHByZWZldGNoYWJsZSBob3N0IGJyaWRnZSB3aW5kb3cKPiA+ID4gPiAodW5saWtlIHRoZSBj b252ZXJzZSwgaS5lLiwgYWxsb2NhdGluZyBhIHByZWZldGNoYWJsZSBCQVIgaW4gYQo+ID4gPiA+ IG5vbi1wcmVmZXRjaGFibGUgaG9zdCBicmlkZ2Ugd2luZG93IGlzIGZpbmUpCj4gPiA+ID4KPiA+ ID4gPiA2NC1iaXQgbm9uLXByZWZldGNoYWJsZSBob3N0IGJyaWRnZSB3aW5kb3dzIGNhbm5vdCBi ZSBmb3J3YXJkZWQgYnkgUENJCj4gPiA+ID4gdG8gUENJIGJyaWRnZXMsIHRoZXkgc2ltcGx5IGxh Y2sgdGhlIEJBUiByZWdpc3RlcnMgdG8gZGVzY3JpYmUgdGhlbS4KPiA+ID4gPiBUaGVyZWZvcmUs IG5vbi1wcmVmZXRjaGFibGUgZW5kcG9pbnQgQkFScyAoZXZlbiA2NC1iaXQgb25lcykgbmVlZCB0 bwo+ID4gPiA+IGJlIGNhcnZlZCBvdXQgb2YgYSBob3N0IGJyaWRnZSdzIG5vbi1wcmVmZXRjaGFi bGUgMzItYml0IHdpbmRvdyBpZgo+ID4gPiA+IHRoZXkgbmVlZCB0byBwYXNzIHRocm91Z2ggYSBi cmlkZ2UuCj4gPiA+Cj4gPiA+IFRoYW5rIHlvdSBmb3IgdGhlIGV4cGxhbmF0aW9uLiBJIGFsc28g bG9va2VkIGF0IHRoZSBQQ0ktdG8tUENJIEJyaWRnZQo+ID4gPiBzcGVjIHRvIHVuZGVyc3RhbmQg d2hlcmUgc29tZSBvZiB0aGUgbGltaXRhdGlvbnMgYXJlIGNvbWluZyBmcm9tLgo+ID4gPgo+ID4g PiA+IFNvIHRoZSBlcnJvciBzZWVtcyB0byBiZSBoZXJlIHRoYXQgdGhlIGhvc3QgYnJpZGdlJ3Mg MzItYml0Cj4gPiA+ID4gbm9uLXByZWZldGNoYWJsZSB3aW5kb3cgaGFzIHRoZSA2NC1iaXQgYXR0 cmlidXRlIHNldCwgZXZlbiB0aG91Z2ggaXQKPiA+ID4gPiByZXNpZGVzIGJlbG93IDQgR0IgZW50 aXJlbHkuIEkgc3VwcG9zZSB0aGF0IHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uCj4gPiA+ID4gY291 bGQgYmUgbWFkZSBtb3JlIGZvcmdpdmluZyAoYW5kIGl0IHdhcyBpbiB0aGUgcGFzdCwgYmVmb3Jl IGNvbW1pdAo+ID4gPiA+IDlkNTdlNjFiZjcyMyB3YXMgYXBwbGllZCkuIEhvd2V2ZXIsIEkgd291 bGQgc3Ryb25nbHkgcmVjb21tZW5kIG5vdAo+ID4gPiA+IGRldmlhdGluZyBmcm9tIGNvbW1vbiBw cmFjdGljZSwgYW5kIGp1c3QgZGVzY3JpYmUgdGhlIDMyLWJpdAo+ID4gPiA+IGFkZHJlc3NhYmxl IG5vbi1wcmVmZXRjaGFibGUgcmVzb3VyY2Ugd2luZG93IGFzIHN1Y2guCj4gPiA+Cj4gPiA+IElJ VUMsIHRoZSBob3N0IGJyaWRnZSdzIGNvbmZpZ3VyYXRpb24gKDY0LWJpdCBvbiBub24tcHJlZmV0 Y2hhYmxlCj4gPiA+IHdpbmRvdykgaXMgYmFzZWQgb24gd2hhdCB0aGUgaGFyZHdhcmUgYWR2ZXJ0 aXNlcy4KPiA+ID4KPiA+Cj4gPiBXaGF0IGRvIHlvdSBtZWFuIGJ5ICd3aGF0IHRoZSBoYXJkd2Fy ZSBhZHZlcnRpc2VzJz8gVGhlIGhvc3QgYnJpZGdlIGlzCj4gPiBhcHBhcmVudGx5IGNvbmZpZ3Vy ZWQgdG8gZGVjb2RlIGEgMzItYml0IGFkZHJlc3NhYmxlIHdpbmRvdyBhcyBNTUlPLAo+ID4gYW5k IHRoZSBxdWVzdGlvbiBpcyB3aHkgdGhpcyB3aW5kb3cgaGFzIHRoZSA2NC1iaXQgYXR0cmlidXRl IHNldCBpbgo+ID4gdGhlIERUIGRlc2NyaXB0aW9uLgo+ID4KPiA+ID4gQ2FuIHlvdSBlbGFib3Jh dGUgb24gd2hhdCB5b3UgaGF2ZSBpbiBtaW5kIHRvIGNvcnJlY3QgdGhlCj4gPiA+IG5vbi1wcmVm ZXRjaGFibGUgcmVzb3VyY2Ugd2luZG93PyBBcmUgeW91IHRoaW5raW5nIG9mIGFkZGluZyBhIHF1 aXJrCj4gPiA+IHNvbWV3aGVyZSB0byBhZGRyZXNzIHRoaXM/Cj4gPiA+Cj4gPgo+ID4gTm8uIEp1 c3QgZml4IHRoZSBEVC4KPgo+IEdvb2QgTW9ybmluZywKPgo+IEkgYmVsaWV2ZSBSb2JpbiBpcyBj b3JyZWN0IHRoYXQgdGhlcmUgaXMgbW9yZSB0byB0aGlzLgo+IFdoaWxlIGF0dGVtcHRpbmcgdG8g d29yayBvdXQgd2h5IGRHUFVzIHdvbid0IHdvcmsgd2l0aCB0aGUgcmszNTZ4Cj4gc2VyaWVzIFBD SWUgY29udHJvbGxlcnMsIENocmlzdGlhbiBLw7ZuaWcgZnJvbSB0aGUgYW1kLWdwdSBkcml2ZXIK PiBtYWlsaW5nIGxpc3Qgbm90aWNlZCB0aGUgZ3B1IHdhcyBpbmNvcnJlY3RseSBhbGxvY2F0ZWQg YSA2NGJpdAo+IG5vbi1wcmVmZXRjaGFibGUgQkFSIHdoaWNoIHNob3VsZCBpbnN0ZWFkIGJlIGEg MzIgbm9uLXByZWZldGNoYWJsZQo+IEJBUi4KPgoKVGhpcyBpcyBkdWUgdG8gdGhlIHRyYW5zbGF0 aW9uLiBGb3Igc29tZSByZWFzb24sIGxzcGNpIHRyYW5zbGF0ZXMgdGhlCkJBUiB2YWx1ZXMgdG8g Q1BVIGFkZHJlc3NlcywgYnV0IHRoZSBQQ0kgc2lkZSBhZGRyZXNzZXMgYXJlIHdpdGhpbgozMi1i aXRzLgoKQXJlIHlvdSBzdXJlIHRoZSBhbWRncHUgZHJpdmVyIGNhbiBldmVuIGRlYWwgd2l0aCBu b24tMToxIGhvc3QgYnJpZGdlcz8KCj4gVGhlIHJhbmdlcyBjdXJyZW50bHkgc2V0IGFyZToKPiBy YW5nZXMgPSA8MHg4MTAwMDAwMCAweDAgMHgwMDgwMDAwMCAweDMgMHgwMDgwMDAwMCAweDAgMHgw MDEwMDAwMAo+IDB4ODIwMDAwMDAgMHgwIDB4MDA5MDAwMDAgMHgzIDB4MDA5MDAwMDAgMHgwIDB4 M2Y3MDAwMDA+Owo+CgpTbyB5b3UgaGF2ZSB0d28gcmFuZ2VzIGhlcmUuCgo+IGJ1dCB0aGUgZmlu YWwgYWxsb2NhdGlvbiB3YXM6Cj4KPiBsc3BjaSAtdgo+IDAwOjAwLjAgUENJIGJyaWRnZTogRnV6 aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLiwgTHRkIERldmljZSAzNTY2Cj4gKHJldiAwMSkg KHByb2ctaWYgMDAgW05vcm1hbCBkZWNvZGVdKQo+ICAgICAgICAgRmxhZ3M6IGJ1cyBtYXN0ZXIs IGZhc3QgZGV2c2VsLCBsYXRlbmN5IDAsIElSUSA5Ngo+ICAgICAgICAgQnVzOiBwcmltYXJ5PTAw LCBzZWNvbmRhcnk9MDEsIHN1Ym9yZGluYXRlPWZmLCBzZWMtbGF0ZW5jeT0wCj4gICAgICAgICBJ L08gYmVoaW5kIGJyaWRnZTogMDAwMDEwMDAtMDAwMDFmZmYgW3NpemU9NEtdCj4gICAgICAgICBN ZW1vcnkgYmVoaW5kIGJyaWRnZTogMDA5MDAwMDAtMDA5ZmZmZmYgW3NpemU9MU1dCj4gICAgICAg ICBQcmVmZXRjaGFibGUgbWVtb3J5IGJlaGluZCBicmlkZ2U6Cj4gMDAwMDAwMDAxMDAwMDAwMC0w MDAwMDAwMDFmZmZmZmZmIFtzaXplPTI1Nk1dCgpCdXQgdGhlIGhvc3QgYnJpZGdlL3Jvb3QgcG9y dCBkZWNvZGVzIHR3byBkaXNqb2ludCByZWdpb25zPz8KCj4gICAgICAgICBFeHBhbnNpb24gUk9N IGF0IDMwMGEwMDAwMCBbdmlydHVhbF0gW2Rpc2FibGVkXSBbc2l6ZT02NEtdCj4gICAgICAgICBD YXBhYmlsaXRpZXM6IFs0MF0gUG93ZXIgTWFuYWdlbWVudCB2ZXJzaW9uIDMKPiAgICAgICAgIENh cGFiaWxpdGllczogWzUwXSBNU0k6IEVuYWJsZSsgQ291bnQ9MS8zMiBNYXNrYWJsZS0gNjRiaXQr Cj4gICAgICAgICBDYXBhYmlsaXRpZXM6IFs3MF0gRXhwcmVzcyBSb290IFBvcnQgKFNsb3QtKSwg TVNJIDAwCj4gICAgICAgICBDYXBhYmlsaXRpZXM6IFtiMF0gTVNJLVg6IEVuYWJsZS0gQ291bnQ9 MSBNYXNrZWQtCj4gICAgICAgICBDYXBhYmlsaXRpZXM6IFsxMDBdIEFkdmFuY2VkIEVycm9yIFJl cG9ydGluZwo+ICAgICAgICAgQ2FwYWJpbGl0aWVzOiBbMTQ4XSBTZWNvbmRhcnkgUENJIEV4cHJl c3MKPiAgICAgICAgIENhcGFiaWxpdGllczogWzE2MF0gTDEgUE0gU3Vic3RhdGVzCj4gICAgICAg ICBDYXBhYmlsaXRpZXM6IFsxNzBdIFZlbmRvciBTcGVjaWZpYyBJbmZvcm1hdGlvbjogSUQ9MDAw MiBSZXY9NAo+IExlbj0xMDAgPD8+Cj4gICAgICAgICBLZXJuZWwgZHJpdmVyIGluIHVzZTogcGNp ZXBvcnQKPgo+IDAxOjAwLjAgVkdBIGNvbXBhdGlibGUgY29udHJvbGxlcjogQWR2YW5jZWQgTWlj cm8gRGV2aWNlcywgSW5jLgo+IFtBTUQvQVRJXSBUdXJrcyBQUk8gW1JhZGVvbiBIRCA3NTcwXSAo cHJvZy1pZiAwMCBbVkdBIGNvbnRyb2xsZXJdKQo+ICAgICAgICAgU3Vic3lzdGVtOiBEZWxsIFR1 cmtzIFBSTyBbUmFkZW9uIEhEIDc1NzBdCj4gICAgICAgICBGbGFnczogYnVzIG1hc3RlciwgZmFz dCBkZXZzZWwsIGxhdGVuY3kgMCwgSVJRIDk1Cj4gICAgICAgICBNZW1vcnkgYXQgMzEwMDAwMDAw ICg2NC1iaXQsIHByZWZldGNoYWJsZSkgW3NpemU9MjU2TV0KPiAgICAgICAgIE1lbW9yeSBhdCAz MDA5MDAwMDAgKDY0LWJpdCwgbm9uLXByZWZldGNoYWJsZSkgW3NpemU9MTI4S10KPiAgICAgICAg IEkvTyBwb3J0cyBhdCAxMDAwIFtzaXplPTI1Nl0KPiAgICAgICAgIEV4cGFuc2lvbiBST00gYXQg MzAwOTIwMDAwIFtkaXNhYmxlZF0gW3NpemU9MTI4S10KPiAgICAgICAgIENhcGFiaWxpdGllczog WzUwXSBQb3dlciBNYW5hZ2VtZW50IHZlcnNpb24gMwo+ICAgICAgICAgQ2FwYWJpbGl0aWVzOiBb NThdIEV4cHJlc3MgTGVnYWN5IEVuZHBvaW50LCBNU0kgMDAKPiAgICAgICAgIENhcGFiaWxpdGll czogW2EwXSBNU0k6IEVuYWJsZS0gQ291bnQ9MS8xIE1hc2thYmxlLSA2NGJpdCsKPiAgICAgICAg IENhcGFiaWxpdGllczogWzEwMF0gVmVuZG9yIFNwZWNpZmljIEluZm9ybWF0aW9uOiBJRD0wMDAx IFJldj0xCj4gTGVuPTAxMCA8Pz4KPiAgICAgICAgIENhcGFiaWxpdGllczogWzE1MF0gQWR2YW5j ZWQgRXJyb3IgUmVwb3J0aW5nCj4gICAgICAgICBLZXJuZWwgZHJpdmVyIGluIHVzZTogcmFkZW9u Cj4KPiAwMTowMC4xIEF1ZGlvIGRldmljZTogQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiBb QU1EL0FUSV0gVHVya3MKPiBIRE1JIEF1ZGlvIFtSYWRlb24gSEQgNjUwMC82NjAwIC8gNjcwME0g U2VyaWVzXQo+ICAgICAgICAgU3Vic3lzdGVtOiBEZWxsIFR1cmtzIEhETUkgQXVkaW8gW1JhZGVv biBIRCA2NTAwLzY2MDAgLyA2NzAwTSBTZXJpZXNdCj4gICAgICAgICBGbGFnczogYnVzIG1hc3Rl ciwgZmFzdCBkZXZzZWwsIGxhdGVuY3kgMCwgSVJRIDk4Cj4gICAgICAgICBNZW1vcnkgYXQgMzAw OTQwMDAwICg2NC1iaXQsIG5vbi1wcmVmZXRjaGFibGUpIFtzaXplPTE2S10KPiAgICAgICAgIENh cGFiaWxpdGllczogWzUwXSBQb3dlciBNYW5hZ2VtZW50IHZlcnNpb24gMwo+ICAgICAgICAgQ2Fw YWJpbGl0aWVzOiBbNThdIEV4cHJlc3MgTGVnYWN5IEVuZHBvaW50LCBNU0kgMDAKPiAgICAgICAg IENhcGFiaWxpdGllczogW2EwXSBNU0k6IEVuYWJsZSsgQ291bnQ9MS8xIE1hc2thYmxlLSA2NGJp dCsKPiAgICAgICAgIENhcGFiaWxpdGllczogWzEwMF0gVmVuZG9yIFNwZWNpZmljIEluZm9ybWF0 aW9uOiBJRD0wMDAxIFJldj0xCj4gTGVuPTAxMCA8Pz4KPiAgICAgICAgIENhcGFiaWxpdGllczog WzE1MF0gQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nCj4gICAgICAgICBLZXJuZWwgZHJpdmVyIGlu IHVzZTogc25kX2hkYV9pbnRlbAo+Cj4gVGhpcyB3aWxsIG9idmlvdXNseSBjbG9iYmVyIHJlZ2lz dGVycyBkdXJpbmcgd3JpdGVzLgoKSSBkb24ndCBmb2xsb3cuIFdoaWNoIHdyaXRlcyB3aWxsIGNs b2JiZXIgd2hpY2ggcmVnaXN0ZXJzLCBhbmQgaG93IGlzCml0IG9idmlvdXM/Cgo+IEFsc28sIGlm IDwweDgyMDAwMDAwPiAoMzIgYml0KSBpcyBjaGFuZ2VkIHRvIDwweDgzMDAwMDAwPiAoNjQgYml0 KSwKPiBtb3N0IG9mIHRoZSBhbGxvY2F0aW9ucyBmb3IgdGhlIGRHUFUgZmFpbCBkdWUgdG8gbm8g dmFsaWQgcmVnaW9ucwo+IGF2YWlsYWJsZS4KPgoKQnV0IHdhc24ndCB0aGUgb3JpZ2luYWwgcHJv YmxlbSB0aGF0IHRoZSByZXNvdXJjZSB3aW5kb3cgd2FzIDY0LWJpdCB0bwpiZWdpbiB3aXRoPyBB cmUgeW91IHN1cmUgd2UgYXJlIHRhbGtpbmcgYWJvdXQgdGhlIHNhbWUgcHJvYmxlbSBoZXJlPwoK Cj4gPgo+ID4gPiBJIGFtIGhhcHB5IHRvIHB1dCBzb21ldGhpbmcgdG9nZXRoZXIgb25jZSBJIHVu ZGVyc3RhbmQgdGhlIHByZWZlcnJlZCB3YXkKPiA+ID4gdG8gZ28gYWJvdXQgaXQuCj4gPiA+Cj4g PiA+IFRoYW5rcywKPiA+ID4gUHVuaXQKPiA+ID4KPiA+ID4gWy4uLl0KPiA+ID4KPiA+Cj4gPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4gTGludXgt cm9ja2NoaXAgbWFpbGluZyBsaXN0Cj4gPiBMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQu b3JnCj4gPiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LXJvY2tjaGlwCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==