From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.manjaro.org (mail.manjaro.org [116.203.91.91]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EADA463AE; Mon, 11 Mar 2024 07:08:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=116.203.91.91 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710140909; cv=none; b=Y6ankMom9+4+g0T7DeZ2QzMbpfzcXbfi1fA/AeQYLFKfOBWWSQBuAtUBIb2jewiy4w3hTQrnDhsMPZcPfnjtkJOor9E1bNy21XaARuYzkG0XLobPBBQF2Why+t/+Ts4wK2rczpreO2ifK0DoI9S5ESsvvjHSzZu2s5TxU7r+wcs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710140909; c=relaxed/simple; bh=d1eVzxHx9HhiYyRxz3FVtwzPZplvBNYMhzP5gLR8epQ=; h=MIME-Version:Date:From:To:Cc:Subject:In-Reply-To:References: Message-ID:Content-Type; b=f+p39p8+Zw02flK7ZPDjdX6IFMfbqxM4ZAFl3qSFp0AvLVOnTA/dWZCYoAIrU8YqAFqB4v/ygtAk7aNAZT1fmS8I0eztXw6qzlIG4SHIuchFXn16877Wgdan3i2yH/Ife7NZoOynHddrRK/SdZfvOxgMtzgi9TuY8GsEfZvXCZM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=manjaro.org; spf=pass smtp.mailfrom=manjaro.org; dkim=pass (2048-bit key) header.d=manjaro.org header.i=@manjaro.org header.b=JVtdnD4N; arc=none smtp.client-ip=116.203.91.91 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=manjaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=manjaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=manjaro.org header.i=@manjaro.org header.b="JVtdnD4N" Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=manjaro.org; s=2021; t=1710140897; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pwjpdAzr3Ii/lOqzip2XeVxDOQx4yrf1E1Tz735rmHI=; b=JVtdnD4N7f/mz3TcOCpJdcWsgJS0ux2d0HBG/06oWlzcQj3U1gi7GFcfIiXvi221n1KUtl +pLGW2b+zKvf1RfG+mY8hkKQl9T8cwnDzMbSe8HrjenLJYj0Eo4Kfdda89nAnJWLJSYV93 MAxkcD+2ZF8LtyhBWMYWya6ICvFQ4gnpdjKYMNazW+jJeKo3gwbKYWsbQHW/LbxgZPAH8e cR9b9dRteryOHcZBqtaHX4hTCy07vhA6RRWHfrZiG3lZzEEwX1g7Aa313kSenXA+bYX4pa HE0DQyVJSef2V7XNZuTJYq+65ifYmN5GHmw1+lj5//1aZNjmzKdzaqxaOGW8zA== Date: Mon, 11 Mar 2024 08:08:16 +0100 From: Dragan Simic To: Alexey Charkov Cc: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Heiko Stuebner , Daniel Lezcano , Viresh Kumar , Chen-Yu Tsai , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3 0/5] RK3588 and Rock 5B dts additions: thermal, OPP and fan In-Reply-To: References: <20240229-rk-dts-additions-v3-0-6afe8473a631@gmail.com> Message-ID: <54bc850b2eba7ee4fc58cb77c76628b4@manjaro.org> X-Sender: dsimic@manjaro.org Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Authentication-Results: ORIGINATING; auth=pass smtp.auth=dsimic@manjaro.org smtp.mailfrom=dsimic@manjaro.org Hello Alexey, On 2024-03-07 15:21, Dragan Simic wrote: > On 2024-03-07 13:38, Alexey Charkov wrote: >> On Tue, Mar 5, 2024 at 12:06 PM Alexey Charkov >> wrote: >>> On Mon, Mar 4, 2024 at 9:51 PM Sebastian Reichel >>> wrote: >>> > On Thu, Feb 29, 2024 at 11:26:31PM +0400, Alexey Charkov wrote: >>> > > This enables thermal monitoring and CPU DVFS on RK3588(s), as well as >>> > > active cooling on Radxa Rock 5B via the provided PWM fan. >>> > > >>> > > Some RK3588 boards use separate regulators to supply CPUs and their >>> > > respective memory interfaces, so this is handled by coupling those >>> > > regulators in affected boards' device trees to ensure that their >>> > > voltage is adjusted in step. >>> > > >>> > > In this revision of the series I chose to enable TSADC for all boards >>> > > at .dtsi level, because: >>> > > - The defaults already in .dtsi should work for all users, given that >>> > > the CRU based resets don't need any out-of-chip components, and >>> > > the CRU vs. PMIC reset is pretty much the only thing a board might >>> > > have to configure / override there >>> > > - The boards that have TSADC_SHUT signal wired to the PMIC reset line >>> > > can still choose to override the reset logic in their .dts. Or stay >>> > > with CRU based resets, as downstream kernels do anyway >>> > > - The on-by-default approach helps ensure thermal protections are in >>> > > place (emergency reset and throttling) for any board even with a >>> > > rudimentary .dts, and thus lets us introduce CPU DVFS with better >>> > > peace of mind >>> > > >>> > > Fan control on Rock 5B has been split into two intervals: let it spin >>> > > at the minimum cooling state between 55C and 65C, and then accelerate >>> > > if the system crosses the 65C mark - thanks to Dragan for suggesting. >>> > > This lets some cooling setups with beefier heatsinks and/or larger >>> > > fan fins to stay in the quietest non-zero fan state while still >>> > > gaining potential benefits from the airflow it generates, and >>> > > possibly avoiding noisy speeds altogether for some workloads. >>> > > >>> > > OPPs help actually scale CPU frequencies up and down for both cooling >>> > > and performance - tested on Rock 5B under varied loads. I've split >>> > > the patch into two parts: the first containing those OPPs that seem >>> > > to be no-regret with general consensus during v1 review [2], while >>> > > the second contains OPPs that cause frequency reductions without >>> > > accompanying decrease in CPU voltage. There seems to be a slight >>> > > performance gain in some workload scenarios when using these, but >>> > > previous discussion was inconclusive as to whether they should be >>> > > included or not. Having them as separate patches enables easier >>> > > comparison and partial reversion if people want to test it under >>> > > their workloads, and also enables the first 'no-regret' part to be >>> > > merged to -next while the jury is still out on the second one. >>> > > >>> > > [1] https://lore.kernel.org/linux-rockchip/1824717.EqSB1tO5pr@bagend/T/#ma2ab949da2235a8e759eab22155fb2bc397d8aea >>> > > [2] https://lore.kernel.org/linux-rockchip/CABjd4YxqarUCbZ-a2XLe3TWJ-qjphGkyq=wDnctnEhdoSdPPpw@mail.gmail.com/T/#m49d2b94e773f5b532a0bb5d3d7664799ff28cc2c >>> > > >>> > > Signed-off-by: Alexey Charkov >>> > > --- >>> > > Changes in v3: >>> > > - Added regulator coupling for EVB1 and QuartzPro64 >>> > > - Enabled the TSADC for all boards in .dtsi, not just Rock 5B (thanks ChenYu) >>> > > - Added comments regarding two passive cooling trips in each zone (thanks Dragan) >>> > > - Fixed active cooling map numbering for Radxa Rock 5B (thanks Dragan) >>> > > - Dropped Daniel's Acked-by tag from the Rock 5B fan patch, as there's been quite some >>> > > churn there since the version he acknowledged >>> > > - Link to v2: https://lore.kernel.org/r/20240130-rk-dts-additions-v2-0-c6222c4c78df@gmail.com >>> > > >>> > > Changes in v2: >>> > > - Dropped the rfkill patch which Heiko has already applied >>> > > - Set higher 'polling-delay-passive' (100 instead of 20) >>> > > - Name all cooling maps starting from map0 in each respective zone >>> > > - Drop 'contribution' properties from passive cooling maps >>> > > - Link to v1: https://lore.kernel.org/r/20240125-rk-dts-additions-v1-0-5879275db36f@gmail.com >>> > > >>> > > --- >>> > > Alexey Charkov (5): >>> > > arm64: dts: rockchip: enable built-in thermal monitoring on RK3588 >>> > > arm64: dts: rockchip: enable automatic active cooling on Rock 5B >>> > > arm64: dts: rockchip: Add CPU/memory regulator coupling for RK3588 >>> > > arm64: dts: rockchip: Add OPP data for CPU cores on RK3588 >>> > > arm64: dts: rockchip: Add further granularity in RK3588 CPU OPPs >>> > > >>> > > arch/arm64/boot/dts/rockchip/rk3588-evb1-v10.dts | 12 + >>> > > .../arm64/boot/dts/rockchip/rk3588-quartzpro64.dts | 12 + >>> > > arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 30 +- >>> > > arch/arm64/boot/dts/rockchip/rk3588s.dtsi | 385 ++++++++++++++++++++- >>> > > 4 files changed, 437 insertions(+), 2 deletions(-) >>> > >>> > I'm too busy to have a detailed review of this series right now, but >>> > I pushed it to our CI and it results in a board reset at boot time: >>> > >>> > https://gitlab.collabora.com/hardware-enablement/rockchip-3588/linux/-/jobs/300950 >>> > >>> > I also pushed just the first three patches (i.e. without OPP / >>> > cpufreq) and that boots fine: >>> > >>> > https://gitlab.collabora.com/hardware-enablement/rockchip-3588/linux/-/jobs/300953 >>> >>> Thank you for testing these! I've noticed in the boot log that the CI >>> machine uses some u-boot 2023.07 - is that a downstream one? Any >>> chance to compare it to 2023.11 or 2024.01 from your (Collabora) >>> integration tree? >>> >>> I use 2023.11 from your integration tree, with a binary bl31, and I'm >>> not getting those resets even under prolonged heavy load (I rebuild >>> Chromium with 8 concurrent compilation jobs as the stress test - >>> that's 14 hours of heavy CPU, memory and IO use). Would be >>> interesting >>> to understand if it's just a 'lucky' SoC specimen on my side, or if >>> there is some dark magic happening differently on my machine vs. your >>> CI machine. >>> >>> Thinking that maybe if your CI machine uses a downstream u-boot it >>> might be leaving some extra hardware running (PVTM?) which might do >>> weird stuff when TSADC/clocks/voltages get readjusted by the generic >>> cpufreq driver?.. >>> >>> > Note, that OPP / cpufreq works on the same boards in the CI when >>> > using the ugly-and-not-for-upstream cpufreq driver: >>> > >>> > https://gitlab.collabora.com/hardware-enablement/rockchip-3588/linux/-/commit/9c90c5032743a0419bf3fd2f914a24fd53101acd >>> > >>> > My best guess right now is, that this is related to the generic >>> > driver obviously not updating the GRF read margin registers. >>> >>> If it was about memory read margins I believe I would have been >>> unlikely to get my machine to work reliably under heavy load with the >>> default ones, but who knows... >> >> Sebastian's report led me to investigate further how all those things >> are organized in the downstream code and in hardware, and what could >> be a pragmatic way forward with upstream enablement. It turned out to >> be quite a rabbit hole frankly, with multiple layers of abstraction >> and intertwined code in different places. >> >> Here's a quick summary for future reference: >> - CPU clocks on RK3588 are ultimately managed by the ATF firmware, >> which provides an SCMI service to expose them to the kernel >> - ATF itself doesn't directly set any clock frequencies. Instead, it >> accepts a target frequency via SCMI and converts it into an oscillator >> ring length setting for the PVPLL hardware block (via a fixed table >> lookup). At least that's how it's done in the recently released TF-A >> bl31 code [1] - perhaps the binary bl31 does something similar >> - U-boot doesn't seem to mess with CPU clocks, PVTM or PVPLL >> - PVPLL produces a reference clock to feed to the CPUs, which depends >> on the configured oscillator ring length but also on the supply >> voltage, silicon quality and perhaps temperature too. ATF doesn't know >> anything about voltages or temperatures, so it doesn't guarantee that >> the requested frequency is matched by the hardware >> - PVPLL frequency generation is bypassed for lower-frequency OPPs, in >> which case the target frequency is directly fed by the ATF to the CRU. >> This happens for both big-core and little-core frequencies below 816 >> MHz >> - Given that requesting a particular frequency via SCMI doesn't >> guarantee that it will be what the CPUs end up running at, the vendor >> kernel also does a runtime voltage calibration for the supply >> regulators, by adjusting the supply voltage in minimum regulator steps >> until the frequency reported by PVPLL gets close to the requested one >> [2]. It then overwrites OPP provided voltage values with the >> calibrated ones >> - There's also some trickery with preselecting OPP voltage sets using >> the "-Lx" suffix based on silicon quality, as measured by a "leakage" >> value stored in an NVMEM cell and/or the PVTM frequency generated at a >> reference "midpoint" OPP [3]. Better performing silicon gets to run at >> lower default supply voltages, thus saving power >> - Once the OPPs are selected and calibrated, the only remaining >> trickery is the two supply regulators per each CPU cluster (one for >> the CPUs and the other for the memory interface) >> - Another catch, as Sebastian points out, is that memory read margins >> must be adjusted whenever the memory interface supply voltage crosses >> certain thresholds [4]. This has little to do with CPUs or >> frequencies, and is only tangentially related to them due to the >> dependency chain between the target CPU frequency -> required CPU >> supply voltage -> matching memory interface supply voltage -> required >> read margins >> - At reset the ATF switches all clocks to the lowest 408 MHz [6], so >> setting it to anything in kernel code (as the downstream driver does) >> seems redundant >> >> All in all, it does indeed sound like Collabora's CI machine boot-time >> resets are most likely caused by the missing memory read margin >> settings in my patch series. Voltage values in the OPPs I used are the >> most conservative defaults of what the downstream DT has, and PVPLL >> should be able to generate reasonable clock speeds with those (albeit >> likely suboptimal, due to them not being tuned to the particular >> silicon specimen). And there is little else to differ frankly. >> >> As for the way forward, it would be great to know the opinions from >> the list. My thinking is as follows: >> - I can introduce memory read margin updates as the first priority, >> leaving voltage calibration and/or OPP preselection for later (as >> those should not affect system stability at current default values, >> perhaps only power efficiency to a certain extent) >> - CPUfreq doesn't sound like the right place for those, given that >> they have little to do with either CPU or freq :) >> - I suggest a custom regulator config helper to plug into the OPP >> layer, as is done for TI OMAP5 [6]. At first, it might be only used >> for looking up and setting the correct memory read margin value >> whenever the cluster supply voltage changes, and later the same code >> can be extended to do voltage calibration. In fact, OMAP code is there >> for a very similar purpose, but in their case optimized voltages are >> pre-programmed in efuses and don't require runtime recalibration >> - Given that all OPPs in the downstream kernel list identical >> voltages for the memory supply as for the CPU supply, I don't think it >> makes much sense to customize the cpufreq driver per se. >> Single-regulator approach with the generic cpufreq-dt and regulator >> coupling sounds much less invasive and thus lower-maintenance > > Thank you very much for a detailed and highly useful summary! > > I'll retrace your steps into and, hopefully, out of the rabbit hole. :) > After that, I'll come back with an update. Just a brief update... I went even a bit deeper into multiple rabbit holes, :) and I'll come back with a detailed update a bit later, together with a proposal for the plan to move forward. The final outcome should be awesome. :) >> [1] >> https://gitlab.collabora.com/hardware-enablement/rockchip-3588/trusted-firmware-a/-/blob/rk3588/plat/rockchip/rk3588/drivers/scmi/rk3588_clk.c?ref_type=heads#L303 >> [2] >> https://github.com/radxa/kernel/blob/c428536281d69aeb2b3480f65b2b227210b61535/drivers/soc/rockchip/rockchip_opp_select.c#L804 >> [3] >> https://github.com/radxa/kernel/blob/c428536281d69aeb2b3480f65b2b227210b61535/drivers/soc/rockchip/rockchip_opp_select.c#L1575 >> [4] >> https://github.com/radxa/kernel/blob/c428536281d69aeb2b3480f65b2b227210b61535/drivers/cpufreq/rockchip-cpufreq.c#L405 >> [5] >> https://gitlab.collabora.com/hardware-enablement/rockchip-3588/trusted-firmware-a/-/blob/rk3588/plat/rockchip/rk3588/drivers/scmi/rk3588_clk.c?ref_type=heads#L2419 >> [6] >> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/opp/ti-opp-supply.c#n275 > > _______________________________________________ > 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 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 3A1CFC54E58 for ; Mon, 11 Mar 2024 07:08:52 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Message-ID:References:In-Reply-To:Subject:Cc:To:From :Date:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=U0tDCpWk5hToAtKgf42OIXlEVZjoQpnByVqJtcfnBuQ=; b=znhlROqCoYl64OKY3Ag2R1cH9f 8xkoxrGAsvss7zu2vnrEf+fZzVP+fRJ6NlFFS8Rf7CiEVQdnzCNGByW1QblpL7U6244YEoHjvay3y CWcWMPo0SPfGJ/e5IP+E4/U083ALFld9wSB7SML7/qrjV83XLPw8AZdVND+gZ3v/IG9AgFRO6irtI EWGnSm+pYAdxeJ0/phHwfqLJZ9UonaWv1zYN8zHSWvwKgf9BsrgkzenI1VxWXx3H3Z7OjFiD8qJY5 tEe8sWZs8BQv4y3UQkcnB7yeCvhsy5SbpzigxtCaZzz/FMLsFXs9qtNI0/yIloP5dPkrwgnJtv9/D MX3UuEbA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rjZm4-00000000RMW-1aSR; Mon, 11 Mar 2024 07:08:40 +0000 Received: from mail.manjaro.org ([2a01:4f8:c0c:51f3::1]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rjZly-00000000RJZ-0D9R; Mon, 11 Mar 2024 07:08:36 +0000 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=manjaro.org; s=2021; t=1710140897; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pwjpdAzr3Ii/lOqzip2XeVxDOQx4yrf1E1Tz735rmHI=; b=JVtdnD4N7f/mz3TcOCpJdcWsgJS0ux2d0HBG/06oWlzcQj3U1gi7GFcfIiXvi221n1KUtl +pLGW2b+zKvf1RfG+mY8hkKQl9T8cwnDzMbSe8HrjenLJYj0Eo4Kfdda89nAnJWLJSYV93 MAxkcD+2ZF8LtyhBWMYWya6ICvFQ4gnpdjKYMNazW+jJeKo3gwbKYWsbQHW/LbxgZPAH8e cR9b9dRteryOHcZBqtaHX4hTCy07vhA6RRWHfrZiG3lZzEEwX1g7Aa313kSenXA+bYX4pa HE0DQyVJSef2V7XNZuTJYq+65ifYmN5GHmw1+lj5//1aZNjmzKdzaqxaOGW8zA== Date: Mon, 11 Mar 2024 08:08:16 +0100 From: Dragan Simic To: Alexey Charkov Cc: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Heiko Stuebner , Daniel Lezcano , Viresh Kumar , Chen-Yu Tsai , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3 0/5] RK3588 and Rock 5B dts additions: thermal, OPP and fan In-Reply-To: References: <20240229-rk-dts-additions-v3-0-6afe8473a631@gmail.com> Message-ID: <54bc850b2eba7ee4fc58cb77c76628b4@manjaro.org> X-Sender: dsimic@manjaro.org Authentication-Results: ORIGINATING; auth=pass smtp.auth=dsimic@manjaro.org smtp.mailfrom=dsimic@manjaro.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240311_000835_071954_DC9FD02B X-CRM114-Status: GOOD ( 68.35 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGVsbG8gQWxleGV5LAoKT24gMjAyNC0wMy0wNyAxNToyMSwgRHJhZ2FuIFNpbWljIHdyb3RlOgo+ IE9uIDIwMjQtMDMtMDcgMTM6MzgsIEFsZXhleSBDaGFya292IHdyb3RlOgo+PiBPbiBUdWUsIE1h ciA1LCAyMDI0IGF0IDEyOjA24oCvUE0gQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29t PiAKPj4gd3JvdGU6Cj4+PiBPbiBNb24sIE1hciA0LCAyMDI0IGF0IDk6NTHigK9QTSBTZWJhc3Rp YW4gUmVpY2hlbAo+Pj4gPHNlYmFzdGlhbi5yZWljaGVsQGNvbGxhYm9yYS5jb20+IHdyb3RlOgo+ Pj4gPiBPbiBUaHUsIEZlYiAyOSwgMjAyNCBhdCAxMToyNjozMVBNICswNDAwLCBBbGV4ZXkgQ2hh cmtvdiB3cm90ZToKPj4+ID4gPiBUaGlzIGVuYWJsZXMgdGhlcm1hbCBtb25pdG9yaW5nIGFuZCBD UFUgRFZGUyBvbiBSSzM1ODgocyksIGFzIHdlbGwgYXMKPj4+ID4gPiBhY3RpdmUgY29vbGluZyBv biBSYWR4YSBSb2NrIDVCIHZpYSB0aGUgcHJvdmlkZWQgUFdNIGZhbi4KPj4+ID4gPgo+Pj4gPiA+ IFNvbWUgUkszNTg4IGJvYXJkcyB1c2Ugc2VwYXJhdGUgcmVndWxhdG9ycyB0byBzdXBwbHkgQ1BV cyBhbmQgdGhlaXIKPj4+ID4gPiByZXNwZWN0aXZlIG1lbW9yeSBpbnRlcmZhY2VzLCBzbyB0aGlz IGlzIGhhbmRsZWQgYnkgY291cGxpbmcgdGhvc2UKPj4+ID4gPiByZWd1bGF0b3JzIGluIGFmZmVj dGVkIGJvYXJkcycgZGV2aWNlIHRyZWVzIHRvIGVuc3VyZSB0aGF0IHRoZWlyCj4+PiA+ID4gdm9s dGFnZSBpcyBhZGp1c3RlZCBpbiBzdGVwLgo+Pj4gPiA+Cj4+PiA+ID4gSW4gdGhpcyByZXZpc2lv biBvZiB0aGUgc2VyaWVzIEkgY2hvc2UgdG8gZW5hYmxlIFRTQURDIGZvciBhbGwgYm9hcmRzCj4+ PiA+ID4gYXQgLmR0c2kgbGV2ZWwsIGJlY2F1c2U6Cj4+PiA+ID4gIC0gVGhlIGRlZmF1bHRzIGFs cmVhZHkgaW4gLmR0c2kgc2hvdWxkIHdvcmsgZm9yIGFsbCB1c2VycywgZ2l2ZW4gdGhhdAo+Pj4g PiA+ICAgIHRoZSBDUlUgYmFzZWQgcmVzZXRzIGRvbid0IG5lZWQgYW55IG91dC1vZi1jaGlwIGNv bXBvbmVudHMsIGFuZAo+Pj4gPiA+ICAgIHRoZSBDUlUgdnMuIFBNSUMgcmVzZXQgaXMgcHJldHR5 IG11Y2ggdGhlIG9ubHkgdGhpbmcgYSBib2FyZCBtaWdodAo+Pj4gPiA+ICAgIGhhdmUgdG8gY29u ZmlndXJlIC8gb3ZlcnJpZGUgdGhlcmUKPj4+ID4gPiAgLSBUaGUgYm9hcmRzIHRoYXQgaGF2ZSBU U0FEQ19TSFVUIHNpZ25hbCB3aXJlZCB0byB0aGUgUE1JQyByZXNldCBsaW5lCj4+PiA+ID4gICAg Y2FuIHN0aWxsIGNob29zZSB0byBvdmVycmlkZSB0aGUgcmVzZXQgbG9naWMgaW4gdGhlaXIgLmR0 cy4gT3Igc3RheQo+Pj4gPiA+ICAgIHdpdGggQ1JVIGJhc2VkIHJlc2V0cywgYXMgZG93bnN0cmVh bSBrZXJuZWxzIGRvIGFueXdheQo+Pj4gPiA+ICAtIFRoZSBvbi1ieS1kZWZhdWx0IGFwcHJvYWNo IGhlbHBzIGVuc3VyZSB0aGVybWFsIHByb3RlY3Rpb25zIGFyZSBpbgo+Pj4gPiA+ICAgIHBsYWNl IChlbWVyZ2VuY3kgcmVzZXQgYW5kIHRocm90dGxpbmcpIGZvciBhbnkgYm9hcmQgZXZlbiB3aXRo IGEKPj4+ID4gPiAgICBydWRpbWVudGFyeSAuZHRzLCBhbmQgdGh1cyBsZXRzIHVzIGludHJvZHVj ZSBDUFUgRFZGUyB3aXRoIGJldHRlcgo+Pj4gPiA+ICAgIHBlYWNlIG9mIG1pbmQKPj4+ID4gPgo+ Pj4gPiA+IEZhbiBjb250cm9sIG9uIFJvY2sgNUIgaGFzIGJlZW4gc3BsaXQgaW50byB0d28gaW50 ZXJ2YWxzOiBsZXQgaXQgc3Bpbgo+Pj4gPiA+IGF0IHRoZSBtaW5pbXVtIGNvb2xpbmcgc3RhdGUg YmV0d2VlbiA1NUMgYW5kIDY1QywgYW5kIHRoZW4gYWNjZWxlcmF0ZQo+Pj4gPiA+IGlmIHRoZSBz eXN0ZW0gY3Jvc3NlcyB0aGUgNjVDIG1hcmsgLSB0aGFua3MgdG8gRHJhZ2FuIGZvciBzdWdnZXN0 aW5nLgo+Pj4gPiA+IFRoaXMgbGV0cyBzb21lIGNvb2xpbmcgc2V0dXBzIHdpdGggYmVlZmllciBo ZWF0c2lua3MgYW5kL29yIGxhcmdlcgo+Pj4gPiA+IGZhbiBmaW5zIHRvIHN0YXkgaW4gdGhlIHF1 aWV0ZXN0IG5vbi16ZXJvIGZhbiBzdGF0ZSB3aGlsZSBzdGlsbAo+Pj4gPiA+IGdhaW5pbmcgcG90 ZW50aWFsIGJlbmVmaXRzIGZyb20gdGhlIGFpcmZsb3cgaXQgZ2VuZXJhdGVzLCBhbmQKPj4+ID4g PiBwb3NzaWJseSBhdm9pZGluZyBub2lzeSBzcGVlZHMgYWx0b2dldGhlciBmb3Igc29tZSB3b3Jr bG9hZHMuCj4+PiA+ID4KPj4+ID4gPiBPUFBzIGhlbHAgYWN0dWFsbHkgc2NhbGUgQ1BVIGZyZXF1 ZW5jaWVzIHVwIGFuZCBkb3duIGZvciBib3RoIGNvb2xpbmcKPj4+ID4gPiBhbmQgcGVyZm9ybWFu Y2UgLSB0ZXN0ZWQgb24gUm9jayA1QiB1bmRlciB2YXJpZWQgbG9hZHMuIEkndmUgc3BsaXQKPj4+ ID4gPiB0aGUgcGF0Y2ggaW50byB0d28gcGFydHM6IHRoZSBmaXJzdCBjb250YWluaW5nIHRob3Nl IE9QUHMgdGhhdCBzZWVtCj4+PiA+ID4gdG8gYmUgbm8tcmVncmV0IHdpdGggZ2VuZXJhbCBjb25z ZW5zdXMgZHVyaW5nIHYxIHJldmlldyBbMl0sIHdoaWxlCj4+PiA+ID4gdGhlIHNlY29uZCBjb250 YWlucyBPUFBzIHRoYXQgY2F1c2UgZnJlcXVlbmN5IHJlZHVjdGlvbnMgd2l0aG91dAo+Pj4gPiA+ IGFjY29tcGFueWluZyBkZWNyZWFzZSBpbiBDUFUgdm9sdGFnZS4gVGhlcmUgc2VlbXMgdG8gYmUg YSBzbGlnaHQKPj4+ID4gPiBwZXJmb3JtYW5jZSBnYWluIGluIHNvbWUgd29ya2xvYWQgc2NlbmFy aW9zIHdoZW4gdXNpbmcgdGhlc2UsIGJ1dAo+Pj4gPiA+IHByZXZpb3VzIGRpc2N1c3Npb24gd2Fz IGluY29uY2x1c2l2ZSBhcyB0byB3aGV0aGVyIHRoZXkgc2hvdWxkIGJlCj4+PiA+ID4gaW5jbHVk ZWQgb3Igbm90LiBIYXZpbmcgdGhlbSBhcyBzZXBhcmF0ZSBwYXRjaGVzIGVuYWJsZXMgZWFzaWVy Cj4+PiA+ID4gY29tcGFyaXNvbiBhbmQgcGFydGlhbCByZXZlcnNpb24gaWYgcGVvcGxlIHdhbnQg dG8gdGVzdCBpdCB1bmRlcgo+Pj4gPiA+IHRoZWlyIHdvcmtsb2FkcywgYW5kIGFsc28gZW5hYmxl cyB0aGUgZmlyc3QgJ25vLXJlZ3JldCcgcGFydCB0byBiZQo+Pj4gPiA+IG1lcmdlZCB0byAtbmV4 dCB3aGlsZSB0aGUganVyeSBpcyBzdGlsbCBvdXQgb24gdGhlIHNlY29uZCBvbmUuCj4+PiA+ID4K Pj4+ID4gPiBbMV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtcm9ja2NoaXAvMTgyNDcx Ny5FcVNCMXRPNXByQGJhZ2VuZC9ULyNtYTJhYjk0OWRhMjIzNWE4ZTc1OWVhYjIyMTU1ZmIyYmMz OTdkOGFlYQo+Pj4gPiA+IFsyXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51eC1yb2NrY2hp cC9DQUJqZDRZeHFhclVDYlotYTJYTGUzVFdKLXFqcGhHa3lxPXdEbmN0bkVoZG9TZFBQcHdAbWFp bC5nbWFpbC5jb20vVC8jbTQ5ZDJiOTRlNzczZjViNTMyYTBiYjVkM2Q3NjY0Nzk5ZmYyOGNjMmMK Pj4+ID4gPgo+Pj4gPiA+IFNpZ25lZC1vZmYtYnk6IEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdt YWlsLmNvbT4KPj4+ID4gPiAtLS0KPj4+ID4gPiBDaGFuZ2VzIGluIHYzOgo+Pj4gPiA+IC0gQWRk ZWQgcmVndWxhdG9yIGNvdXBsaW5nIGZvciBFVkIxIGFuZCBRdWFydHpQcm82NAo+Pj4gPiA+IC0g RW5hYmxlZCB0aGUgVFNBREMgZm9yIGFsbCBib2FyZHMgaW4gLmR0c2ksIG5vdCBqdXN0IFJvY2sg NUIgKHRoYW5rcyBDaGVuWXUpCj4+PiA+ID4gLSBBZGRlZCBjb21tZW50cyByZWdhcmRpbmcgdHdv IHBhc3NpdmUgY29vbGluZyB0cmlwcyBpbiBlYWNoIHpvbmUgKHRoYW5rcyBEcmFnYW4pCj4+PiA+ ID4gLSBGaXhlZCBhY3RpdmUgY29vbGluZyBtYXAgbnVtYmVyaW5nIGZvciBSYWR4YSBSb2NrIDVC ICh0aGFua3MgRHJhZ2FuKQo+Pj4gPiA+IC0gRHJvcHBlZCBEYW5pZWwncyBBY2tlZC1ieSB0YWcg ZnJvbSB0aGUgUm9jayA1QiBmYW4gcGF0Y2gsIGFzIHRoZXJlJ3MgYmVlbiBxdWl0ZSBzb21lCj4+ PiA+ID4gICBjaHVybiB0aGVyZSBzaW5jZSB0aGUgdmVyc2lvbiBoZSBhY2tub3dsZWRnZWQKPj4+ ID4gPiAtIExpbmsgdG8gdjI6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3IvMjAyNDAxMzAtcmst ZHRzLWFkZGl0aW9ucy12Mi0wLWM2MjIyYzRjNzhkZkBnbWFpbC5jb20KPj4+ID4gPgo+Pj4gPiA+ IENoYW5nZXMgaW4gdjI6Cj4+PiA+ID4gLSBEcm9wcGVkIHRoZSByZmtpbGwgcGF0Y2ggd2hpY2gg SGVpa28gaGFzIGFscmVhZHkgYXBwbGllZAo+Pj4gPiA+IC0gU2V0IGhpZ2hlciAncG9sbGluZy1k ZWxheS1wYXNzaXZlJyAoMTAwIGluc3RlYWQgb2YgMjApCj4+PiA+ID4gLSBOYW1lIGFsbCBjb29s aW5nIG1hcHMgc3RhcnRpbmcgZnJvbSBtYXAwIGluIGVhY2ggcmVzcGVjdGl2ZSB6b25lCj4+PiA+ ID4gLSBEcm9wICdjb250cmlidXRpb24nIHByb3BlcnRpZXMgZnJvbSBwYXNzaXZlIGNvb2xpbmcg bWFwcwo+Pj4gPiA+IC0gTGluayB0byB2MTogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvci8yMDI0 MDEyNS1yay1kdHMtYWRkaXRpb25zLXYxLTAtNTg3OTI3NWRiMzZmQGdtYWlsLmNvbQo+Pj4gPiA+ Cj4+PiA+ID4gLS0tCj4+PiA+ID4gQWxleGV5IENoYXJrb3YgKDUpOgo+Pj4gPiA+ICAgICAgIGFy bTY0OiBkdHM6IHJvY2tjaGlwOiBlbmFibGUgYnVpbHQtaW4gdGhlcm1hbCBtb25pdG9yaW5nIG9u IFJLMzU4OAo+Pj4gPiA+ICAgICAgIGFybTY0OiBkdHM6IHJvY2tjaGlwOiBlbmFibGUgYXV0b21h dGljIGFjdGl2ZSBjb29saW5nIG9uIFJvY2sgNUIKPj4+ID4gPiAgICAgICBhcm02NDogZHRzOiBy b2NrY2hpcDogQWRkIENQVS9tZW1vcnkgcmVndWxhdG9yIGNvdXBsaW5nIGZvciBSSzM1ODgKPj4+ ID4gPiAgICAgICBhcm02NDogZHRzOiByb2NrY2hpcDogQWRkIE9QUCBkYXRhIGZvciBDUFUgY29y ZXMgb24gUkszNTg4Cj4+PiA+ID4gICAgICAgYXJtNjQ6IGR0czogcm9ja2NoaXA6IEFkZCBmdXJ0 aGVyIGdyYW51bGFyaXR5IGluIFJLMzU4OCBDUFUgT1BQcwo+Pj4gPiA+Cj4+PiA+ID4gIGFyY2gv YXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWV2YjEtdjEwLmR0cyAgIHwgIDEyICsKPj4+ ID4gPiAgLi4uL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1xdWFydHpwcm82NC5kdHMg fCAgMTIgKwo+Pj4gPiA+ICBhcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1yb2Nr LTViLmR0cyAgICB8ICAzMCArLQo+Pj4gPiA+ICBhcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlw L3JrMzU4OHMuZHRzaSAgICAgICAgICB8IDM4NSArKysrKysrKysrKysrKysrKysrKy0KPj4+ID4g PiAgNCBmaWxlcyBjaGFuZ2VkLCA0MzcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPj4+ ID4KPj4+ID4gSSdtIHRvbyBidXN5IHRvIGhhdmUgYSBkZXRhaWxlZCByZXZpZXcgb2YgdGhpcyBz ZXJpZXMgcmlnaHQgbm93LCBidXQKPj4+ID4gSSBwdXNoZWQgaXQgdG8gb3VyIENJIGFuZCBpdCBy ZXN1bHRzIGluIGEgYm9hcmQgcmVzZXQgYXQgYm9vdCB0aW1lOgo+Pj4gPgo+Pj4gPiBodHRwczov L2dpdGxhYi5jb2xsYWJvcmEuY29tL2hhcmR3YXJlLWVuYWJsZW1lbnQvcm9ja2NoaXAtMzU4OC9s aW51eC8tL2pvYnMvMzAwOTUwCj4+PiA+Cj4+PiA+IEkgYWxzbyBwdXNoZWQganVzdCB0aGUgZmly c3QgdGhyZWUgcGF0Y2hlcyAoaS5lLiB3aXRob3V0IE9QUCAvCj4+PiA+IGNwdWZyZXEpIGFuZCB0 aGF0IGJvb3RzIGZpbmU6Cj4+PiA+Cj4+PiA+IGh0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYS5jb20v aGFyZHdhcmUtZW5hYmxlbWVudC9yb2NrY2hpcC0zNTg4L2xpbnV4Ly0vam9icy8zMDA5NTMKPj4+ IAo+Pj4gVGhhbmsgeW91IGZvciB0ZXN0aW5nIHRoZXNlISBJJ3ZlIG5vdGljZWQgaW4gdGhlIGJv b3QgbG9nIHRoYXQgdGhlIENJCj4+PiBtYWNoaW5lIHVzZXMgc29tZSB1LWJvb3QgMjAyMy4wNyAt IGlzIHRoYXQgYSBkb3duc3RyZWFtIG9uZT8gQW55Cj4+PiBjaGFuY2UgdG8gY29tcGFyZSBpdCB0 byAyMDIzLjExIG9yIDIwMjQuMDEgZnJvbSB5b3VyIChDb2xsYWJvcmEpCj4+PiBpbnRlZ3JhdGlv biB0cmVlPwo+Pj4gCj4+PiBJIHVzZSAyMDIzLjExIGZyb20geW91ciBpbnRlZ3JhdGlvbiB0cmVl LCB3aXRoIGEgYmluYXJ5IGJsMzEsIGFuZCBJJ20KPj4+IG5vdCBnZXR0aW5nIHRob3NlIHJlc2V0 cyBldmVuIHVuZGVyIHByb2xvbmdlZCBoZWF2eSBsb2FkIChJIHJlYnVpbGQKPj4+IENocm9taXVt IHdpdGggOCBjb25jdXJyZW50IGNvbXBpbGF0aW9uIGpvYnMgYXMgdGhlIHN0cmVzcyB0ZXN0IC0K Pj4+IHRoYXQncyAxNCBob3VycyBvZiBoZWF2eSBDUFUsIG1lbW9yeSBhbmQgSU8gdXNlKS4gV291 bGQgYmUgCj4+PiBpbnRlcmVzdGluZwo+Pj4gdG8gdW5kZXJzdGFuZCBpZiBpdCdzIGp1c3QgYSAn bHVja3knIFNvQyBzcGVjaW1lbiBvbiBteSBzaWRlLCBvciBpZgo+Pj4gdGhlcmUgaXMgc29tZSBk YXJrIG1hZ2ljIGhhcHBlbmluZyBkaWZmZXJlbnRseSBvbiBteSBtYWNoaW5lIHZzLiB5b3VyCj4+ PiBDSSBtYWNoaW5lLgo+Pj4gCj4+PiBUaGlua2luZyB0aGF0IG1heWJlIGlmIHlvdXIgQ0kgbWFj aGluZSB1c2VzIGEgZG93bnN0cmVhbSB1LWJvb3QgaXQKPj4+IG1pZ2h0IGJlIGxlYXZpbmcgc29t ZSBleHRyYSBoYXJkd2FyZSBydW5uaW5nIChQVlRNPykgd2hpY2ggbWlnaHQgZG8KPj4+IHdlaXJk IHN0dWZmIHdoZW4gVFNBREMvY2xvY2tzL3ZvbHRhZ2VzIGdldCByZWFkanVzdGVkIGJ5IHRoZSBn ZW5lcmljCj4+PiBjcHVmcmVxIGRyaXZlcj8uLgo+Pj4gCj4+PiA+IE5vdGUsIHRoYXQgT1BQIC8g Y3B1ZnJlcSB3b3JrcyBvbiB0aGUgc2FtZSBib2FyZHMgaW4gdGhlIENJIHdoZW4KPj4+ID4gdXNp bmcgdGhlIHVnbHktYW5kLW5vdC1mb3ItdXBzdHJlYW0gY3B1ZnJlcSBkcml2ZXI6Cj4+PiA+Cj4+ PiA+IGh0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYS5jb20vaGFyZHdhcmUtZW5hYmxlbWVudC9yb2Nr Y2hpcC0zNTg4L2xpbnV4Ly0vY29tbWl0LzljOTBjNTAzMjc0M2EwNDE5YmYzZmQyZjkxNGEyNGZk NTMxMDFhY2QKPj4+ID4KPj4+ID4gTXkgYmVzdCBndWVzcyByaWdodCBub3cgaXMsIHRoYXQgdGhp cyBpcyByZWxhdGVkIHRvIHRoZSBnZW5lcmljCj4+PiA+IGRyaXZlciBvYnZpb3VzbHkgbm90IHVw ZGF0aW5nIHRoZSBHUkYgcmVhZCBtYXJnaW4gcmVnaXN0ZXJzLgo+Pj4gCj4+PiBJZiBpdCB3YXMg YWJvdXQgbWVtb3J5IHJlYWQgbWFyZ2lucyBJIGJlbGlldmUgSSB3b3VsZCBoYXZlIGJlZW4KPj4+ IHVubGlrZWx5IHRvIGdldCBteSBtYWNoaW5lIHRvIHdvcmsgcmVsaWFibHkgdW5kZXIgaGVhdnkg bG9hZCB3aXRoIHRoZQo+Pj4gZGVmYXVsdCBvbmVzLCBidXQgd2hvIGtub3dzLi4uCj4+IAo+PiBT ZWJhc3RpYW4ncyByZXBvcnQgbGVkIG1lIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgaG93IGFsbCB0 aG9zZSB0aGluZ3MKPj4gYXJlIG9yZ2FuaXplZCBpbiB0aGUgZG93bnN0cmVhbSBjb2RlIGFuZCBp biBoYXJkd2FyZSwgYW5kIHdoYXQgY291bGQKPj4gYmUgYSBwcmFnbWF0aWMgd2F5IGZvcndhcmQg d2l0aCB1cHN0cmVhbSBlbmFibGVtZW50LiBJdCB0dXJuZWQgb3V0IHRvCj4+IGJlIHF1aXRlIGEg cmFiYml0IGhvbGUgZnJhbmtseSwgd2l0aCBtdWx0aXBsZSBsYXllcnMgb2YgYWJzdHJhY3Rpb24K Pj4gYW5kIGludGVydHdpbmVkIGNvZGUgaW4gZGlmZmVyZW50IHBsYWNlcy4KPj4gCj4+IEhlcmUn cyBhIHF1aWNrIHN1bW1hcnkgZm9yIGZ1dHVyZSByZWZlcmVuY2U6Cj4+ICAtIENQVSBjbG9ja3Mg b24gUkszNTg4IGFyZSB1bHRpbWF0ZWx5IG1hbmFnZWQgYnkgdGhlIEFURiBmaXJtd2FyZSwKPj4g d2hpY2ggcHJvdmlkZXMgYW4gU0NNSSBzZXJ2aWNlIHRvIGV4cG9zZSB0aGVtIHRvIHRoZSBrZXJu ZWwKPj4gIC0gQVRGIGl0c2VsZiBkb2Vzbid0IGRpcmVjdGx5IHNldCBhbnkgY2xvY2sgZnJlcXVl bmNpZXMuIEluc3RlYWQsIGl0Cj4+IGFjY2VwdHMgYSB0YXJnZXQgZnJlcXVlbmN5IHZpYSBTQ01J IGFuZCBjb252ZXJ0cyBpdCBpbnRvIGFuIG9zY2lsbGF0b3IKPj4gcmluZyBsZW5ndGggc2V0dGlu ZyBmb3IgdGhlIFBWUExMIGhhcmR3YXJlIGJsb2NrICh2aWEgYSBmaXhlZCB0YWJsZQo+PiBsb29r dXApLiBBdCBsZWFzdCB0aGF0J3MgaG93IGl0J3MgZG9uZSBpbiB0aGUgcmVjZW50bHkgcmVsZWFz ZWQgVEYtQQo+PiBibDMxIGNvZGUgWzFdIC0gcGVyaGFwcyB0aGUgYmluYXJ5IGJsMzEgZG9lcyBz b21ldGhpbmcgc2ltaWxhcgo+PiAgLSBVLWJvb3QgZG9lc24ndCBzZWVtIHRvIG1lc3Mgd2l0aCBD UFUgY2xvY2tzLCBQVlRNIG9yIFBWUExMCj4+ICAtIFBWUExMIHByb2R1Y2VzIGEgcmVmZXJlbmNl IGNsb2NrIHRvIGZlZWQgdG8gdGhlIENQVXMsIHdoaWNoIGRlcGVuZHMKPj4gb24gdGhlIGNvbmZp Z3VyZWQgb3NjaWxsYXRvciByaW5nIGxlbmd0aCBidXQgYWxzbyBvbiB0aGUgc3VwcGx5Cj4+IHZv bHRhZ2UsIHNpbGljb24gcXVhbGl0eSBhbmQgcGVyaGFwcyB0ZW1wZXJhdHVyZSB0b28uIEFURiBk b2Vzbid0IGtub3cKPj4gYW55dGhpbmcgYWJvdXQgdm9sdGFnZXMgb3IgdGVtcGVyYXR1cmVzLCBz byBpdCBkb2Vzbid0IGd1YXJhbnRlZSB0aGF0Cj4+IHRoZSByZXF1ZXN0ZWQgZnJlcXVlbmN5IGlz IG1hdGNoZWQgYnkgdGhlIGhhcmR3YXJlCj4+ICAtIFBWUExMIGZyZXF1ZW5jeSBnZW5lcmF0aW9u IGlzIGJ5cGFzc2VkIGZvciBsb3dlci1mcmVxdWVuY3kgT1BQcywgaW4KPj4gd2hpY2ggY2FzZSB0 aGUgdGFyZ2V0IGZyZXF1ZW5jeSBpcyBkaXJlY3RseSBmZWQgYnkgdGhlIEFURiB0byB0aGUgQ1JV Lgo+PiBUaGlzIGhhcHBlbnMgZm9yIGJvdGggYmlnLWNvcmUgYW5kIGxpdHRsZS1jb3JlIGZyZXF1 ZW5jaWVzIGJlbG93IDgxNgo+PiBNSHoKPj4gIC0gR2l2ZW4gdGhhdCByZXF1ZXN0aW5nIGEgcGFy dGljdWxhciBmcmVxdWVuY3kgdmlhIFNDTUkgZG9lc24ndAo+PiBndWFyYW50ZWUgdGhhdCBpdCB3 aWxsIGJlIHdoYXQgdGhlIENQVXMgZW5kIHVwIHJ1bm5pbmcgYXQsIHRoZSB2ZW5kb3IKPj4ga2Vy bmVsIGFsc28gZG9lcyBhIHJ1bnRpbWUgdm9sdGFnZSBjYWxpYnJhdGlvbiBmb3IgdGhlIHN1cHBs eQo+PiByZWd1bGF0b3JzLCBieSBhZGp1c3RpbmcgdGhlIHN1cHBseSB2b2x0YWdlIGluIG1pbmlt dW0gcmVndWxhdG9yIHN0ZXBzCj4+IHVudGlsIHRoZSBmcmVxdWVuY3kgcmVwb3J0ZWQgYnkgUFZQ TEwgZ2V0cyBjbG9zZSB0byB0aGUgcmVxdWVzdGVkIG9uZQo+PiBbMl0uIEl0IHRoZW4gb3Zlcndy aXRlcyBPUFAgcHJvdmlkZWQgdm9sdGFnZSB2YWx1ZXMgd2l0aCB0aGUKPj4gY2FsaWJyYXRlZCBv bmVzCj4+ICAtIFRoZXJlJ3MgYWxzbyBzb21lIHRyaWNrZXJ5IHdpdGggcHJlc2VsZWN0aW5nIE9Q UCB2b2x0YWdlIHNldHMgdXNpbmcKPj4gdGhlICItTHgiIHN1ZmZpeCBiYXNlZCBvbiBzaWxpY29u IHF1YWxpdHksIGFzIG1lYXN1cmVkIGJ5IGEgImxlYWthZ2UiCj4+IHZhbHVlIHN0b3JlZCBpbiBh biBOVk1FTSBjZWxsIGFuZC9vciB0aGUgUFZUTSBmcmVxdWVuY3kgZ2VuZXJhdGVkIGF0IGEKPj4g cmVmZXJlbmNlICJtaWRwb2ludCIgT1BQIFszXS4gQmV0dGVyIHBlcmZvcm1pbmcgc2lsaWNvbiBn ZXRzIHRvIHJ1biBhdAo+PiBsb3dlciBkZWZhdWx0IHN1cHBseSB2b2x0YWdlcywgdGh1cyBzYXZp bmcgcG93ZXIKPj4gIC0gT25jZSB0aGUgT1BQcyBhcmUgc2VsZWN0ZWQgYW5kIGNhbGlicmF0ZWQs IHRoZSBvbmx5IHJlbWFpbmluZwo+PiB0cmlja2VyeSBpcyB0aGUgdHdvIHN1cHBseSByZWd1bGF0 b3JzIHBlciBlYWNoIENQVSBjbHVzdGVyIChvbmUgZm9yCj4+IHRoZSBDUFVzIGFuZCB0aGUgb3Ro ZXIgZm9yIHRoZSBtZW1vcnkgaW50ZXJmYWNlKQo+PiAgLSBBbm90aGVyIGNhdGNoLCBhcyBTZWJh c3RpYW4gcG9pbnRzIG91dCwgaXMgdGhhdCBtZW1vcnkgcmVhZCBtYXJnaW5zCj4+IG11c3QgYmUg YWRqdXN0ZWQgd2hlbmV2ZXIgdGhlIG1lbW9yeSBpbnRlcmZhY2Ugc3VwcGx5IHZvbHRhZ2UgY3Jv c3Nlcwo+PiBjZXJ0YWluIHRocmVzaG9sZHMgWzRdLiBUaGlzIGhhcyBsaXR0bGUgdG8gZG8gd2l0 aCBDUFVzIG9yCj4+IGZyZXF1ZW5jaWVzLCBhbmQgaXMgb25seSB0YW5nZW50aWFsbHkgcmVsYXRl ZCB0byB0aGVtIGR1ZSB0byB0aGUKPj4gZGVwZW5kZW5jeSBjaGFpbiBiZXR3ZWVuIHRoZSB0YXJn ZXQgQ1BVIGZyZXF1ZW5jeSAtPiByZXF1aXJlZCBDUFUKPj4gc3VwcGx5IHZvbHRhZ2UgLT4gbWF0 Y2hpbmcgbWVtb3J5IGludGVyZmFjZSBzdXBwbHkgdm9sdGFnZSAtPiByZXF1aXJlZAo+PiByZWFk IG1hcmdpbnMKPj4gIC0gQXQgcmVzZXQgdGhlIEFURiBzd2l0Y2hlcyBhbGwgY2xvY2tzIHRvIHRo ZSBsb3dlc3QgNDA4IE1IeiBbNl0sIHNvCj4+IHNldHRpbmcgaXQgdG8gYW55dGhpbmcgaW4ga2Vy bmVsIGNvZGUgKGFzIHRoZSBkb3duc3RyZWFtIGRyaXZlciBkb2VzKQo+PiBzZWVtcyByZWR1bmRh bnQKPj4gCj4+IEFsbCBpbiBhbGwsIGl0IGRvZXMgaW5kZWVkIHNvdW5kIGxpa2UgQ29sbGFib3Jh J3MgQ0kgbWFjaGluZSBib290LXRpbWUKPj4gcmVzZXRzIGFyZSBtb3N0IGxpa2VseSBjYXVzZWQg YnkgdGhlIG1pc3NpbmcgbWVtb3J5IHJlYWQgbWFyZ2luCj4+IHNldHRpbmdzIGluIG15IHBhdGNo IHNlcmllcy4gVm9sdGFnZSB2YWx1ZXMgaW4gdGhlIE9QUHMgSSB1c2VkIGFyZSB0aGUKPj4gbW9z dCBjb25zZXJ2YXRpdmUgZGVmYXVsdHMgb2Ygd2hhdCB0aGUgZG93bnN0cmVhbSBEVCBoYXMsIGFu ZCBQVlBMTAo+PiBzaG91bGQgYmUgYWJsZSB0byBnZW5lcmF0ZSByZWFzb25hYmxlIGNsb2NrIHNw ZWVkcyB3aXRoIHRob3NlIChhbGJlaXQKPj4gbGlrZWx5IHN1Ym9wdGltYWwsIGR1ZSB0byB0aGVt IG5vdCBiZWluZyB0dW5lZCB0byB0aGUgcGFydGljdWxhcgo+PiBzaWxpY29uIHNwZWNpbWVuKS4g QW5kIHRoZXJlIGlzIGxpdHRsZSBlbHNlIHRvIGRpZmZlciBmcmFua2x5Lgo+PiAKPj4gQXMgZm9y IHRoZSB3YXkgZm9yd2FyZCwgaXQgd291bGQgYmUgZ3JlYXQgdG8ga25vdyB0aGUgb3BpbmlvbnMg ZnJvbQo+PiB0aGUgbGlzdC4gTXkgdGhpbmtpbmcgaXMgYXMgZm9sbG93czoKPj4gIC0gSSBjYW4g aW50cm9kdWNlIG1lbW9yeSByZWFkIG1hcmdpbiB1cGRhdGVzIGFzIHRoZSBmaXJzdCBwcmlvcml0 eSwKPj4gbGVhdmluZyB2b2x0YWdlIGNhbGlicmF0aW9uIGFuZC9vciBPUFAgcHJlc2VsZWN0aW9u IGZvciBsYXRlciAoYXMKPj4gdGhvc2Ugc2hvdWxkIG5vdCBhZmZlY3Qgc3lzdGVtIHN0YWJpbGl0 eSBhdCBjdXJyZW50IGRlZmF1bHQgdmFsdWVzLAo+PiBwZXJoYXBzIG9ubHkgcG93ZXIgZWZmaWNp ZW5jeSB0byBhIGNlcnRhaW4gZXh0ZW50KQo+PiAgLSBDUFVmcmVxIGRvZXNuJ3Qgc291bmQgbGlr ZSB0aGUgcmlnaHQgcGxhY2UgZm9yIHRob3NlLCBnaXZlbiB0aGF0Cj4+IHRoZXkgaGF2ZSBsaXR0 bGUgdG8gZG8gd2l0aCBlaXRoZXIgQ1BVIG9yIGZyZXEgOikKPj4gIC0gSSBzdWdnZXN0IGEgY3Vz dG9tIHJlZ3VsYXRvciBjb25maWcgaGVscGVyIHRvIHBsdWcgaW50byB0aGUgT1BQCj4+IGxheWVy LCBhcyBpcyBkb25lIGZvciBUSSBPTUFQNSBbNl0uIEF0IGZpcnN0LCBpdCBtaWdodCBiZSBvbmx5 IHVzZWQKPj4gZm9yIGxvb2tpbmcgdXAgYW5kIHNldHRpbmcgdGhlIGNvcnJlY3QgbWVtb3J5IHJl YWQgbWFyZ2luIHZhbHVlCj4+IHdoZW5ldmVyIHRoZSBjbHVzdGVyIHN1cHBseSB2b2x0YWdlIGNo YW5nZXMsIGFuZCBsYXRlciB0aGUgc2FtZSBjb2RlCj4+IGNhbiBiZSBleHRlbmRlZCB0byBkbyB2 b2x0YWdlIGNhbGlicmF0aW9uLiBJbiBmYWN0LCBPTUFQIGNvZGUgaXMgdGhlcmUKPj4gZm9yIGEg dmVyeSBzaW1pbGFyIHB1cnBvc2UsIGJ1dCBpbiB0aGVpciBjYXNlIG9wdGltaXplZCB2b2x0YWdl cyBhcmUKPj4gcHJlLXByb2dyYW1tZWQgaW4gZWZ1c2VzIGFuZCBkb24ndCByZXF1aXJlIHJ1bnRp bWUgcmVjYWxpYnJhdGlvbgo+PiAgLSBHaXZlbiB0aGF0IGFsbCBPUFBzIGluIHRoZSBkb3duc3Ry ZWFtIGtlcm5lbCBsaXN0IGlkZW50aWNhbAo+PiB2b2x0YWdlcyBmb3IgdGhlIG1lbW9yeSBzdXBw bHkgYXMgZm9yIHRoZSBDUFUgc3VwcGx5LCBJIGRvbid0IHRoaW5rIGl0Cj4+IG1ha2VzIG11Y2gg c2Vuc2UgdG8gY3VzdG9taXplIHRoZSBjcHVmcmVxIGRyaXZlciBwZXIgc2UuCj4+IFNpbmdsZS1y ZWd1bGF0b3IgYXBwcm9hY2ggd2l0aCB0aGUgZ2VuZXJpYyBjcHVmcmVxLWR0IGFuZCByZWd1bGF0 b3IKPj4gY291cGxpbmcgc291bmRzIG11Y2ggbGVzcyBpbnZhc2l2ZSBhbmQgdGh1cyBsb3dlci1t YWludGVuYW5jZQo+IAo+IFRoYW5rIHlvdSB2ZXJ5IG11Y2ggZm9yIGEgZGV0YWlsZWQgYW5kIGhp Z2hseSB1c2VmdWwgc3VtbWFyeSEKPiAKPiBJJ2xsIHJldHJhY2UgeW91ciBzdGVwcyBpbnRvIGFu ZCwgaG9wZWZ1bGx5LCBvdXQgb2YgdGhlIHJhYmJpdCBob2xlLiA6KQo+IEFmdGVyIHRoYXQsIEkn bGwgY29tZSBiYWNrIHdpdGggYW4gdXBkYXRlLgoKSnVzdCBhIGJyaWVmIHVwZGF0ZS4uLiAgSSB3 ZW50IGV2ZW4gYSBiaXQgZGVlcGVyIGludG8gbXVsdGlwbGUgcmFiYml0CmhvbGVzLCA6KSBhbmQg SSdsbCBjb21lIGJhY2sgd2l0aCBhIGRldGFpbGVkIHVwZGF0ZSBhIGJpdCBsYXRlciwgCnRvZ2V0 aGVyCndpdGggYSBwcm9wb3NhbCBmb3IgdGhlIHBsYW4gdG8gbW92ZSBmb3J3YXJkLiAgVGhlIGZp bmFsIG91dGNvbWUgc2hvdWxkCmJlIGF3ZXNvbWUuIDopCgo+PiBbMV0gCj4+IGh0dHBzOi8vZ2l0 bGFiLmNvbGxhYm9yYS5jb20vaGFyZHdhcmUtZW5hYmxlbWVudC9yb2NrY2hpcC0zNTg4L3RydXN0 ZWQtZmlybXdhcmUtYS8tL2Jsb2IvcmszNTg4L3BsYXQvcm9ja2NoaXAvcmszNTg4L2RyaXZlcnMv c2NtaS9yazM1ODhfY2xrLmM/cmVmX3R5cGU9aGVhZHMjTDMwMwo+PiBbMl0gCj4+IGh0dHBzOi8v Z2l0aHViLmNvbS9yYWR4YS9rZXJuZWwvYmxvYi9jNDI4NTM2MjgxZDY5YWViMmIzNDgwZjY1YjJi MjI3MjEwYjYxNTM1L2RyaXZlcnMvc29jL3JvY2tjaGlwL3JvY2tjaGlwX29wcF9zZWxlY3QuYyNM ODA0Cj4+IFszXSAKPj4gaHR0cHM6Ly9naXRodWIuY29tL3JhZHhhL2tlcm5lbC9ibG9iL2M0Mjg1 MzYyODFkNjlhZWIyYjM0ODBmNjViMmIyMjcyMTBiNjE1MzUvZHJpdmVycy9zb2Mvcm9ja2NoaXAv cm9ja2NoaXBfb3BwX3NlbGVjdC5jI0wxNTc1Cj4+IFs0XSAKPj4gaHR0cHM6Ly9naXRodWIuY29t L3JhZHhhL2tlcm5lbC9ibG9iL2M0Mjg1MzYyODFkNjlhZWIyYjM0ODBmNjViMmIyMjcyMTBiNjE1 MzUvZHJpdmVycy9jcHVmcmVxL3JvY2tjaGlwLWNwdWZyZXEuYyNMNDA1Cj4+IFs1XSAKPj4gaHR0 cHM6Ly9naXRsYWIuY29sbGFib3JhLmNvbS9oYXJkd2FyZS1lbmFibGVtZW50L3JvY2tjaGlwLTM1 ODgvdHJ1c3RlZC1maXJtd2FyZS1hLy0vYmxvYi9yazM1ODgvcGxhdC9yb2NrY2hpcC9yazM1ODgv ZHJpdmVycy9zY21pL3JrMzU4OF9jbGsuYz9yZWZfdHlwZT1oZWFkcyNMMjQxOQo+PiBbNl0gCj4+ IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRz L2xpbnV4LmdpdC90cmVlL2RyaXZlcnMvb3BwL3RpLW9wcC1zdXBwbHkuYyNuMjc1Cj4gCj4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBMaW51eC1yb2Nr Y2hpcCBtYWlsaW5nIGxpc3QKPiBMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnCj4g aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hp cAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgt cm9ja2NoaXAgbWFpbGluZyBsaXN0CkxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hp cAo= 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 470C5C54E58 for ; Mon, 11 Mar 2024 07:09:01 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Message-ID:References:In-Reply-To:Subject:Cc:To:From :Date:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=ftCKGBXXyH0npFsgSTb7NPp6vW/QmbP12pEZtymUPCE=; b=Y7HchuR8PZ1p6B2xkY4VR3fsiL xKQRANLHG+b7/v81gE6YAgd+ouM0q9AzrQBVhRoT3G1kuE9SPRPsIbKjWW3vL/JVAa4yzWdIMFXaF HTKo33f8l+7HOpjwISV60RmS7ov4Q69q8IKdEDjuR2U4qIZ6L2cXTeNCESu3zrEP84hlNgBc9aZyM pff9KjDebwC8GckJD1d9mdkmnXmc1h9HDO1kr0sL7BjHfFBm4RqWH0M6AyeoeGWhEExlOBUwXPlXb itg2LUgkkEZ4BaQtXHa/w7JRlfqyP0J/iGbqNo2jfe+ShxzNLMCdyF8NpS5aeAPbFWvhl+pykgg4L U24fhMbw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rjZm3-00000000RM1-164K; Mon, 11 Mar 2024 07:08:39 +0000 Received: from mail.manjaro.org ([2a01:4f8:c0c:51f3::1]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rjZly-00000000RJZ-0D9R; Mon, 11 Mar 2024 07:08:36 +0000 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=manjaro.org; s=2021; t=1710140897; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pwjpdAzr3Ii/lOqzip2XeVxDOQx4yrf1E1Tz735rmHI=; b=JVtdnD4N7f/mz3TcOCpJdcWsgJS0ux2d0HBG/06oWlzcQj3U1gi7GFcfIiXvi221n1KUtl +pLGW2b+zKvf1RfG+mY8hkKQl9T8cwnDzMbSe8HrjenLJYj0Eo4Kfdda89nAnJWLJSYV93 MAxkcD+2ZF8LtyhBWMYWya6ICvFQ4gnpdjKYMNazW+jJeKo3gwbKYWsbQHW/LbxgZPAH8e cR9b9dRteryOHcZBqtaHX4hTCy07vhA6RRWHfrZiG3lZzEEwX1g7Aa313kSenXA+bYX4pa HE0DQyVJSef2V7XNZuTJYq+65ifYmN5GHmw1+lj5//1aZNjmzKdzaqxaOGW8zA== Date: Mon, 11 Mar 2024 08:08:16 +0100 From: Dragan Simic To: Alexey Charkov Cc: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Heiko Stuebner , Daniel Lezcano , Viresh Kumar , Chen-Yu Tsai , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3 0/5] RK3588 and Rock 5B dts additions: thermal, OPP and fan In-Reply-To: References: <20240229-rk-dts-additions-v3-0-6afe8473a631@gmail.com> Message-ID: <54bc850b2eba7ee4fc58cb77c76628b4@manjaro.org> X-Sender: dsimic@manjaro.org Authentication-Results: ORIGINATING; auth=pass smtp.auth=dsimic@manjaro.org smtp.mailfrom=dsimic@manjaro.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240311_000835_071954_DC9FD02B X-CRM114-Status: GOOD ( 68.35 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGVsbG8gQWxleGV5LAoKT24gMjAyNC0wMy0wNyAxNToyMSwgRHJhZ2FuIFNpbWljIHdyb3RlOgo+ IE9uIDIwMjQtMDMtMDcgMTM6MzgsIEFsZXhleSBDaGFya292IHdyb3RlOgo+PiBPbiBUdWUsIE1h ciA1LCAyMDI0IGF0IDEyOjA24oCvUE0gQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29t PiAKPj4gd3JvdGU6Cj4+PiBPbiBNb24sIE1hciA0LCAyMDI0IGF0IDk6NTHigK9QTSBTZWJhc3Rp YW4gUmVpY2hlbAo+Pj4gPHNlYmFzdGlhbi5yZWljaGVsQGNvbGxhYm9yYS5jb20+IHdyb3RlOgo+ Pj4gPiBPbiBUaHUsIEZlYiAyOSwgMjAyNCBhdCAxMToyNjozMVBNICswNDAwLCBBbGV4ZXkgQ2hh cmtvdiB3cm90ZToKPj4+ID4gPiBUaGlzIGVuYWJsZXMgdGhlcm1hbCBtb25pdG9yaW5nIGFuZCBD UFUgRFZGUyBvbiBSSzM1ODgocyksIGFzIHdlbGwgYXMKPj4+ID4gPiBhY3RpdmUgY29vbGluZyBv biBSYWR4YSBSb2NrIDVCIHZpYSB0aGUgcHJvdmlkZWQgUFdNIGZhbi4KPj4+ID4gPgo+Pj4gPiA+ IFNvbWUgUkszNTg4IGJvYXJkcyB1c2Ugc2VwYXJhdGUgcmVndWxhdG9ycyB0byBzdXBwbHkgQ1BV cyBhbmQgdGhlaXIKPj4+ID4gPiByZXNwZWN0aXZlIG1lbW9yeSBpbnRlcmZhY2VzLCBzbyB0aGlz IGlzIGhhbmRsZWQgYnkgY291cGxpbmcgdGhvc2UKPj4+ID4gPiByZWd1bGF0b3JzIGluIGFmZmVj dGVkIGJvYXJkcycgZGV2aWNlIHRyZWVzIHRvIGVuc3VyZSB0aGF0IHRoZWlyCj4+PiA+ID4gdm9s dGFnZSBpcyBhZGp1c3RlZCBpbiBzdGVwLgo+Pj4gPiA+Cj4+PiA+ID4gSW4gdGhpcyByZXZpc2lv biBvZiB0aGUgc2VyaWVzIEkgY2hvc2UgdG8gZW5hYmxlIFRTQURDIGZvciBhbGwgYm9hcmRzCj4+ PiA+ID4gYXQgLmR0c2kgbGV2ZWwsIGJlY2F1c2U6Cj4+PiA+ID4gIC0gVGhlIGRlZmF1bHRzIGFs cmVhZHkgaW4gLmR0c2kgc2hvdWxkIHdvcmsgZm9yIGFsbCB1c2VycywgZ2l2ZW4gdGhhdAo+Pj4g PiA+ICAgIHRoZSBDUlUgYmFzZWQgcmVzZXRzIGRvbid0IG5lZWQgYW55IG91dC1vZi1jaGlwIGNv bXBvbmVudHMsIGFuZAo+Pj4gPiA+ICAgIHRoZSBDUlUgdnMuIFBNSUMgcmVzZXQgaXMgcHJldHR5 IG11Y2ggdGhlIG9ubHkgdGhpbmcgYSBib2FyZCBtaWdodAo+Pj4gPiA+ICAgIGhhdmUgdG8gY29u ZmlndXJlIC8gb3ZlcnJpZGUgdGhlcmUKPj4+ID4gPiAgLSBUaGUgYm9hcmRzIHRoYXQgaGF2ZSBU U0FEQ19TSFVUIHNpZ25hbCB3aXJlZCB0byB0aGUgUE1JQyByZXNldCBsaW5lCj4+PiA+ID4gICAg Y2FuIHN0aWxsIGNob29zZSB0byBvdmVycmlkZSB0aGUgcmVzZXQgbG9naWMgaW4gdGhlaXIgLmR0 cy4gT3Igc3RheQo+Pj4gPiA+ICAgIHdpdGggQ1JVIGJhc2VkIHJlc2V0cywgYXMgZG93bnN0cmVh bSBrZXJuZWxzIGRvIGFueXdheQo+Pj4gPiA+ICAtIFRoZSBvbi1ieS1kZWZhdWx0IGFwcHJvYWNo IGhlbHBzIGVuc3VyZSB0aGVybWFsIHByb3RlY3Rpb25zIGFyZSBpbgo+Pj4gPiA+ICAgIHBsYWNl IChlbWVyZ2VuY3kgcmVzZXQgYW5kIHRocm90dGxpbmcpIGZvciBhbnkgYm9hcmQgZXZlbiB3aXRo IGEKPj4+ID4gPiAgICBydWRpbWVudGFyeSAuZHRzLCBhbmQgdGh1cyBsZXRzIHVzIGludHJvZHVj ZSBDUFUgRFZGUyB3aXRoIGJldHRlcgo+Pj4gPiA+ICAgIHBlYWNlIG9mIG1pbmQKPj4+ID4gPgo+ Pj4gPiA+IEZhbiBjb250cm9sIG9uIFJvY2sgNUIgaGFzIGJlZW4gc3BsaXQgaW50byB0d28gaW50 ZXJ2YWxzOiBsZXQgaXQgc3Bpbgo+Pj4gPiA+IGF0IHRoZSBtaW5pbXVtIGNvb2xpbmcgc3RhdGUg YmV0d2VlbiA1NUMgYW5kIDY1QywgYW5kIHRoZW4gYWNjZWxlcmF0ZQo+Pj4gPiA+IGlmIHRoZSBz eXN0ZW0gY3Jvc3NlcyB0aGUgNjVDIG1hcmsgLSB0aGFua3MgdG8gRHJhZ2FuIGZvciBzdWdnZXN0 aW5nLgo+Pj4gPiA+IFRoaXMgbGV0cyBzb21lIGNvb2xpbmcgc2V0dXBzIHdpdGggYmVlZmllciBo ZWF0c2lua3MgYW5kL29yIGxhcmdlcgo+Pj4gPiA+IGZhbiBmaW5zIHRvIHN0YXkgaW4gdGhlIHF1 aWV0ZXN0IG5vbi16ZXJvIGZhbiBzdGF0ZSB3aGlsZSBzdGlsbAo+Pj4gPiA+IGdhaW5pbmcgcG90 ZW50aWFsIGJlbmVmaXRzIGZyb20gdGhlIGFpcmZsb3cgaXQgZ2VuZXJhdGVzLCBhbmQKPj4+ID4g PiBwb3NzaWJseSBhdm9pZGluZyBub2lzeSBzcGVlZHMgYWx0b2dldGhlciBmb3Igc29tZSB3b3Jr bG9hZHMuCj4+PiA+ID4KPj4+ID4gPiBPUFBzIGhlbHAgYWN0dWFsbHkgc2NhbGUgQ1BVIGZyZXF1 ZW5jaWVzIHVwIGFuZCBkb3duIGZvciBib3RoIGNvb2xpbmcKPj4+ID4gPiBhbmQgcGVyZm9ybWFu Y2UgLSB0ZXN0ZWQgb24gUm9jayA1QiB1bmRlciB2YXJpZWQgbG9hZHMuIEkndmUgc3BsaXQKPj4+ ID4gPiB0aGUgcGF0Y2ggaW50byB0d28gcGFydHM6IHRoZSBmaXJzdCBjb250YWluaW5nIHRob3Nl IE9QUHMgdGhhdCBzZWVtCj4+PiA+ID4gdG8gYmUgbm8tcmVncmV0IHdpdGggZ2VuZXJhbCBjb25z ZW5zdXMgZHVyaW5nIHYxIHJldmlldyBbMl0sIHdoaWxlCj4+PiA+ID4gdGhlIHNlY29uZCBjb250 YWlucyBPUFBzIHRoYXQgY2F1c2UgZnJlcXVlbmN5IHJlZHVjdGlvbnMgd2l0aG91dAo+Pj4gPiA+ IGFjY29tcGFueWluZyBkZWNyZWFzZSBpbiBDUFUgdm9sdGFnZS4gVGhlcmUgc2VlbXMgdG8gYmUg YSBzbGlnaHQKPj4+ID4gPiBwZXJmb3JtYW5jZSBnYWluIGluIHNvbWUgd29ya2xvYWQgc2NlbmFy aW9zIHdoZW4gdXNpbmcgdGhlc2UsIGJ1dAo+Pj4gPiA+IHByZXZpb3VzIGRpc2N1c3Npb24gd2Fz IGluY29uY2x1c2l2ZSBhcyB0byB3aGV0aGVyIHRoZXkgc2hvdWxkIGJlCj4+PiA+ID4gaW5jbHVk ZWQgb3Igbm90LiBIYXZpbmcgdGhlbSBhcyBzZXBhcmF0ZSBwYXRjaGVzIGVuYWJsZXMgZWFzaWVy Cj4+PiA+ID4gY29tcGFyaXNvbiBhbmQgcGFydGlhbCByZXZlcnNpb24gaWYgcGVvcGxlIHdhbnQg dG8gdGVzdCBpdCB1bmRlcgo+Pj4gPiA+IHRoZWlyIHdvcmtsb2FkcywgYW5kIGFsc28gZW5hYmxl cyB0aGUgZmlyc3QgJ25vLXJlZ3JldCcgcGFydCB0byBiZQo+Pj4gPiA+IG1lcmdlZCB0byAtbmV4 dCB3aGlsZSB0aGUganVyeSBpcyBzdGlsbCBvdXQgb24gdGhlIHNlY29uZCBvbmUuCj4+PiA+ID4K Pj4+ID4gPiBbMV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtcm9ja2NoaXAvMTgyNDcx Ny5FcVNCMXRPNXByQGJhZ2VuZC9ULyNtYTJhYjk0OWRhMjIzNWE4ZTc1OWVhYjIyMTU1ZmIyYmMz OTdkOGFlYQo+Pj4gPiA+IFsyXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51eC1yb2NrY2hp cC9DQUJqZDRZeHFhclVDYlotYTJYTGUzVFdKLXFqcGhHa3lxPXdEbmN0bkVoZG9TZFBQcHdAbWFp bC5nbWFpbC5jb20vVC8jbTQ5ZDJiOTRlNzczZjViNTMyYTBiYjVkM2Q3NjY0Nzk5ZmYyOGNjMmMK Pj4+ID4gPgo+Pj4gPiA+IFNpZ25lZC1vZmYtYnk6IEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdt YWlsLmNvbT4KPj4+ID4gPiAtLS0KPj4+ID4gPiBDaGFuZ2VzIGluIHYzOgo+Pj4gPiA+IC0gQWRk ZWQgcmVndWxhdG9yIGNvdXBsaW5nIGZvciBFVkIxIGFuZCBRdWFydHpQcm82NAo+Pj4gPiA+IC0g RW5hYmxlZCB0aGUgVFNBREMgZm9yIGFsbCBib2FyZHMgaW4gLmR0c2ksIG5vdCBqdXN0IFJvY2sg NUIgKHRoYW5rcyBDaGVuWXUpCj4+PiA+ID4gLSBBZGRlZCBjb21tZW50cyByZWdhcmRpbmcgdHdv IHBhc3NpdmUgY29vbGluZyB0cmlwcyBpbiBlYWNoIHpvbmUgKHRoYW5rcyBEcmFnYW4pCj4+PiA+ ID4gLSBGaXhlZCBhY3RpdmUgY29vbGluZyBtYXAgbnVtYmVyaW5nIGZvciBSYWR4YSBSb2NrIDVC ICh0aGFua3MgRHJhZ2FuKQo+Pj4gPiA+IC0gRHJvcHBlZCBEYW5pZWwncyBBY2tlZC1ieSB0YWcg ZnJvbSB0aGUgUm9jayA1QiBmYW4gcGF0Y2gsIGFzIHRoZXJlJ3MgYmVlbiBxdWl0ZSBzb21lCj4+ PiA+ID4gICBjaHVybiB0aGVyZSBzaW5jZSB0aGUgdmVyc2lvbiBoZSBhY2tub3dsZWRnZWQKPj4+ ID4gPiAtIExpbmsgdG8gdjI6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3IvMjAyNDAxMzAtcmst ZHRzLWFkZGl0aW9ucy12Mi0wLWM2MjIyYzRjNzhkZkBnbWFpbC5jb20KPj4+ID4gPgo+Pj4gPiA+ IENoYW5nZXMgaW4gdjI6Cj4+PiA+ID4gLSBEcm9wcGVkIHRoZSByZmtpbGwgcGF0Y2ggd2hpY2gg SGVpa28gaGFzIGFscmVhZHkgYXBwbGllZAo+Pj4gPiA+IC0gU2V0IGhpZ2hlciAncG9sbGluZy1k ZWxheS1wYXNzaXZlJyAoMTAwIGluc3RlYWQgb2YgMjApCj4+PiA+ID4gLSBOYW1lIGFsbCBjb29s aW5nIG1hcHMgc3RhcnRpbmcgZnJvbSBtYXAwIGluIGVhY2ggcmVzcGVjdGl2ZSB6b25lCj4+PiA+ ID4gLSBEcm9wICdjb250cmlidXRpb24nIHByb3BlcnRpZXMgZnJvbSBwYXNzaXZlIGNvb2xpbmcg bWFwcwo+Pj4gPiA+IC0gTGluayB0byB2MTogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvci8yMDI0 MDEyNS1yay1kdHMtYWRkaXRpb25zLXYxLTAtNTg3OTI3NWRiMzZmQGdtYWlsLmNvbQo+Pj4gPiA+ Cj4+PiA+ID4gLS0tCj4+PiA+ID4gQWxleGV5IENoYXJrb3YgKDUpOgo+Pj4gPiA+ICAgICAgIGFy bTY0OiBkdHM6IHJvY2tjaGlwOiBlbmFibGUgYnVpbHQtaW4gdGhlcm1hbCBtb25pdG9yaW5nIG9u IFJLMzU4OAo+Pj4gPiA+ICAgICAgIGFybTY0OiBkdHM6IHJvY2tjaGlwOiBlbmFibGUgYXV0b21h dGljIGFjdGl2ZSBjb29saW5nIG9uIFJvY2sgNUIKPj4+ID4gPiAgICAgICBhcm02NDogZHRzOiBy b2NrY2hpcDogQWRkIENQVS9tZW1vcnkgcmVndWxhdG9yIGNvdXBsaW5nIGZvciBSSzM1ODgKPj4+ ID4gPiAgICAgICBhcm02NDogZHRzOiByb2NrY2hpcDogQWRkIE9QUCBkYXRhIGZvciBDUFUgY29y ZXMgb24gUkszNTg4Cj4+PiA+ID4gICAgICAgYXJtNjQ6IGR0czogcm9ja2NoaXA6IEFkZCBmdXJ0 aGVyIGdyYW51bGFyaXR5IGluIFJLMzU4OCBDUFUgT1BQcwo+Pj4gPiA+Cj4+PiA+ID4gIGFyY2gv YXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTg4LWV2YjEtdjEwLmR0cyAgIHwgIDEyICsKPj4+ ID4gPiAgLi4uL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1xdWFydHpwcm82NC5kdHMg fCAgMTIgKwo+Pj4gPiA+ICBhcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU4OC1yb2Nr LTViLmR0cyAgICB8ICAzMCArLQo+Pj4gPiA+ICBhcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlw L3JrMzU4OHMuZHRzaSAgICAgICAgICB8IDM4NSArKysrKysrKysrKysrKysrKysrKy0KPj4+ID4g PiAgNCBmaWxlcyBjaGFuZ2VkLCA0MzcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPj4+ ID4KPj4+ID4gSSdtIHRvbyBidXN5IHRvIGhhdmUgYSBkZXRhaWxlZCByZXZpZXcgb2YgdGhpcyBz ZXJpZXMgcmlnaHQgbm93LCBidXQKPj4+ID4gSSBwdXNoZWQgaXQgdG8gb3VyIENJIGFuZCBpdCBy ZXN1bHRzIGluIGEgYm9hcmQgcmVzZXQgYXQgYm9vdCB0aW1lOgo+Pj4gPgo+Pj4gPiBodHRwczov L2dpdGxhYi5jb2xsYWJvcmEuY29tL2hhcmR3YXJlLWVuYWJsZW1lbnQvcm9ja2NoaXAtMzU4OC9s aW51eC8tL2pvYnMvMzAwOTUwCj4+PiA+Cj4+PiA+IEkgYWxzbyBwdXNoZWQganVzdCB0aGUgZmly c3QgdGhyZWUgcGF0Y2hlcyAoaS5lLiB3aXRob3V0IE9QUCAvCj4+PiA+IGNwdWZyZXEpIGFuZCB0 aGF0IGJvb3RzIGZpbmU6Cj4+PiA+Cj4+PiA+IGh0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYS5jb20v aGFyZHdhcmUtZW5hYmxlbWVudC9yb2NrY2hpcC0zNTg4L2xpbnV4Ly0vam9icy8zMDA5NTMKPj4+ IAo+Pj4gVGhhbmsgeW91IGZvciB0ZXN0aW5nIHRoZXNlISBJJ3ZlIG5vdGljZWQgaW4gdGhlIGJv b3QgbG9nIHRoYXQgdGhlIENJCj4+PiBtYWNoaW5lIHVzZXMgc29tZSB1LWJvb3QgMjAyMy4wNyAt IGlzIHRoYXQgYSBkb3duc3RyZWFtIG9uZT8gQW55Cj4+PiBjaGFuY2UgdG8gY29tcGFyZSBpdCB0 byAyMDIzLjExIG9yIDIwMjQuMDEgZnJvbSB5b3VyIChDb2xsYWJvcmEpCj4+PiBpbnRlZ3JhdGlv biB0cmVlPwo+Pj4gCj4+PiBJIHVzZSAyMDIzLjExIGZyb20geW91ciBpbnRlZ3JhdGlvbiB0cmVl LCB3aXRoIGEgYmluYXJ5IGJsMzEsIGFuZCBJJ20KPj4+IG5vdCBnZXR0aW5nIHRob3NlIHJlc2V0 cyBldmVuIHVuZGVyIHByb2xvbmdlZCBoZWF2eSBsb2FkIChJIHJlYnVpbGQKPj4+IENocm9taXVt IHdpdGggOCBjb25jdXJyZW50IGNvbXBpbGF0aW9uIGpvYnMgYXMgdGhlIHN0cmVzcyB0ZXN0IC0K Pj4+IHRoYXQncyAxNCBob3VycyBvZiBoZWF2eSBDUFUsIG1lbW9yeSBhbmQgSU8gdXNlKS4gV291 bGQgYmUgCj4+PiBpbnRlcmVzdGluZwo+Pj4gdG8gdW5kZXJzdGFuZCBpZiBpdCdzIGp1c3QgYSAn bHVja3knIFNvQyBzcGVjaW1lbiBvbiBteSBzaWRlLCBvciBpZgo+Pj4gdGhlcmUgaXMgc29tZSBk YXJrIG1hZ2ljIGhhcHBlbmluZyBkaWZmZXJlbnRseSBvbiBteSBtYWNoaW5lIHZzLiB5b3VyCj4+ PiBDSSBtYWNoaW5lLgo+Pj4gCj4+PiBUaGlua2luZyB0aGF0IG1heWJlIGlmIHlvdXIgQ0kgbWFj aGluZSB1c2VzIGEgZG93bnN0cmVhbSB1LWJvb3QgaXQKPj4+IG1pZ2h0IGJlIGxlYXZpbmcgc29t ZSBleHRyYSBoYXJkd2FyZSBydW5uaW5nIChQVlRNPykgd2hpY2ggbWlnaHQgZG8KPj4+IHdlaXJk IHN0dWZmIHdoZW4gVFNBREMvY2xvY2tzL3ZvbHRhZ2VzIGdldCByZWFkanVzdGVkIGJ5IHRoZSBn ZW5lcmljCj4+PiBjcHVmcmVxIGRyaXZlcj8uLgo+Pj4gCj4+PiA+IE5vdGUsIHRoYXQgT1BQIC8g Y3B1ZnJlcSB3b3JrcyBvbiB0aGUgc2FtZSBib2FyZHMgaW4gdGhlIENJIHdoZW4KPj4+ID4gdXNp bmcgdGhlIHVnbHktYW5kLW5vdC1mb3ItdXBzdHJlYW0gY3B1ZnJlcSBkcml2ZXI6Cj4+PiA+Cj4+ PiA+IGh0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYS5jb20vaGFyZHdhcmUtZW5hYmxlbWVudC9yb2Nr Y2hpcC0zNTg4L2xpbnV4Ly0vY29tbWl0LzljOTBjNTAzMjc0M2EwNDE5YmYzZmQyZjkxNGEyNGZk NTMxMDFhY2QKPj4+ID4KPj4+ID4gTXkgYmVzdCBndWVzcyByaWdodCBub3cgaXMsIHRoYXQgdGhp cyBpcyByZWxhdGVkIHRvIHRoZSBnZW5lcmljCj4+PiA+IGRyaXZlciBvYnZpb3VzbHkgbm90IHVw ZGF0aW5nIHRoZSBHUkYgcmVhZCBtYXJnaW4gcmVnaXN0ZXJzLgo+Pj4gCj4+PiBJZiBpdCB3YXMg YWJvdXQgbWVtb3J5IHJlYWQgbWFyZ2lucyBJIGJlbGlldmUgSSB3b3VsZCBoYXZlIGJlZW4KPj4+ IHVubGlrZWx5IHRvIGdldCBteSBtYWNoaW5lIHRvIHdvcmsgcmVsaWFibHkgdW5kZXIgaGVhdnkg bG9hZCB3aXRoIHRoZQo+Pj4gZGVmYXVsdCBvbmVzLCBidXQgd2hvIGtub3dzLi4uCj4+IAo+PiBT ZWJhc3RpYW4ncyByZXBvcnQgbGVkIG1lIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgaG93IGFsbCB0 aG9zZSB0aGluZ3MKPj4gYXJlIG9yZ2FuaXplZCBpbiB0aGUgZG93bnN0cmVhbSBjb2RlIGFuZCBp biBoYXJkd2FyZSwgYW5kIHdoYXQgY291bGQKPj4gYmUgYSBwcmFnbWF0aWMgd2F5IGZvcndhcmQg d2l0aCB1cHN0cmVhbSBlbmFibGVtZW50LiBJdCB0dXJuZWQgb3V0IHRvCj4+IGJlIHF1aXRlIGEg cmFiYml0IGhvbGUgZnJhbmtseSwgd2l0aCBtdWx0aXBsZSBsYXllcnMgb2YgYWJzdHJhY3Rpb24K Pj4gYW5kIGludGVydHdpbmVkIGNvZGUgaW4gZGlmZmVyZW50IHBsYWNlcy4KPj4gCj4+IEhlcmUn cyBhIHF1aWNrIHN1bW1hcnkgZm9yIGZ1dHVyZSByZWZlcmVuY2U6Cj4+ICAtIENQVSBjbG9ja3Mg b24gUkszNTg4IGFyZSB1bHRpbWF0ZWx5IG1hbmFnZWQgYnkgdGhlIEFURiBmaXJtd2FyZSwKPj4g d2hpY2ggcHJvdmlkZXMgYW4gU0NNSSBzZXJ2aWNlIHRvIGV4cG9zZSB0aGVtIHRvIHRoZSBrZXJu ZWwKPj4gIC0gQVRGIGl0c2VsZiBkb2Vzbid0IGRpcmVjdGx5IHNldCBhbnkgY2xvY2sgZnJlcXVl bmNpZXMuIEluc3RlYWQsIGl0Cj4+IGFjY2VwdHMgYSB0YXJnZXQgZnJlcXVlbmN5IHZpYSBTQ01J IGFuZCBjb252ZXJ0cyBpdCBpbnRvIGFuIG9zY2lsbGF0b3IKPj4gcmluZyBsZW5ndGggc2V0dGlu ZyBmb3IgdGhlIFBWUExMIGhhcmR3YXJlIGJsb2NrICh2aWEgYSBmaXhlZCB0YWJsZQo+PiBsb29r dXApLiBBdCBsZWFzdCB0aGF0J3MgaG93IGl0J3MgZG9uZSBpbiB0aGUgcmVjZW50bHkgcmVsZWFz ZWQgVEYtQQo+PiBibDMxIGNvZGUgWzFdIC0gcGVyaGFwcyB0aGUgYmluYXJ5IGJsMzEgZG9lcyBz b21ldGhpbmcgc2ltaWxhcgo+PiAgLSBVLWJvb3QgZG9lc24ndCBzZWVtIHRvIG1lc3Mgd2l0aCBD UFUgY2xvY2tzLCBQVlRNIG9yIFBWUExMCj4+ICAtIFBWUExMIHByb2R1Y2VzIGEgcmVmZXJlbmNl IGNsb2NrIHRvIGZlZWQgdG8gdGhlIENQVXMsIHdoaWNoIGRlcGVuZHMKPj4gb24gdGhlIGNvbmZp Z3VyZWQgb3NjaWxsYXRvciByaW5nIGxlbmd0aCBidXQgYWxzbyBvbiB0aGUgc3VwcGx5Cj4+IHZv bHRhZ2UsIHNpbGljb24gcXVhbGl0eSBhbmQgcGVyaGFwcyB0ZW1wZXJhdHVyZSB0b28uIEFURiBk b2Vzbid0IGtub3cKPj4gYW55dGhpbmcgYWJvdXQgdm9sdGFnZXMgb3IgdGVtcGVyYXR1cmVzLCBz byBpdCBkb2Vzbid0IGd1YXJhbnRlZSB0aGF0Cj4+IHRoZSByZXF1ZXN0ZWQgZnJlcXVlbmN5IGlz IG1hdGNoZWQgYnkgdGhlIGhhcmR3YXJlCj4+ICAtIFBWUExMIGZyZXF1ZW5jeSBnZW5lcmF0aW9u IGlzIGJ5cGFzc2VkIGZvciBsb3dlci1mcmVxdWVuY3kgT1BQcywgaW4KPj4gd2hpY2ggY2FzZSB0 aGUgdGFyZ2V0IGZyZXF1ZW5jeSBpcyBkaXJlY3RseSBmZWQgYnkgdGhlIEFURiB0byB0aGUgQ1JV Lgo+PiBUaGlzIGhhcHBlbnMgZm9yIGJvdGggYmlnLWNvcmUgYW5kIGxpdHRsZS1jb3JlIGZyZXF1 ZW5jaWVzIGJlbG93IDgxNgo+PiBNSHoKPj4gIC0gR2l2ZW4gdGhhdCByZXF1ZXN0aW5nIGEgcGFy dGljdWxhciBmcmVxdWVuY3kgdmlhIFNDTUkgZG9lc24ndAo+PiBndWFyYW50ZWUgdGhhdCBpdCB3 aWxsIGJlIHdoYXQgdGhlIENQVXMgZW5kIHVwIHJ1bm5pbmcgYXQsIHRoZSB2ZW5kb3IKPj4ga2Vy bmVsIGFsc28gZG9lcyBhIHJ1bnRpbWUgdm9sdGFnZSBjYWxpYnJhdGlvbiBmb3IgdGhlIHN1cHBs eQo+PiByZWd1bGF0b3JzLCBieSBhZGp1c3RpbmcgdGhlIHN1cHBseSB2b2x0YWdlIGluIG1pbmlt dW0gcmVndWxhdG9yIHN0ZXBzCj4+IHVudGlsIHRoZSBmcmVxdWVuY3kgcmVwb3J0ZWQgYnkgUFZQ TEwgZ2V0cyBjbG9zZSB0byB0aGUgcmVxdWVzdGVkIG9uZQo+PiBbMl0uIEl0IHRoZW4gb3Zlcndy aXRlcyBPUFAgcHJvdmlkZWQgdm9sdGFnZSB2YWx1ZXMgd2l0aCB0aGUKPj4gY2FsaWJyYXRlZCBv bmVzCj4+ICAtIFRoZXJlJ3MgYWxzbyBzb21lIHRyaWNrZXJ5IHdpdGggcHJlc2VsZWN0aW5nIE9Q UCB2b2x0YWdlIHNldHMgdXNpbmcKPj4gdGhlICItTHgiIHN1ZmZpeCBiYXNlZCBvbiBzaWxpY29u IHF1YWxpdHksIGFzIG1lYXN1cmVkIGJ5IGEgImxlYWthZ2UiCj4+IHZhbHVlIHN0b3JlZCBpbiBh biBOVk1FTSBjZWxsIGFuZC9vciB0aGUgUFZUTSBmcmVxdWVuY3kgZ2VuZXJhdGVkIGF0IGEKPj4g cmVmZXJlbmNlICJtaWRwb2ludCIgT1BQIFszXS4gQmV0dGVyIHBlcmZvcm1pbmcgc2lsaWNvbiBn ZXRzIHRvIHJ1biBhdAo+PiBsb3dlciBkZWZhdWx0IHN1cHBseSB2b2x0YWdlcywgdGh1cyBzYXZp bmcgcG93ZXIKPj4gIC0gT25jZSB0aGUgT1BQcyBhcmUgc2VsZWN0ZWQgYW5kIGNhbGlicmF0ZWQs IHRoZSBvbmx5IHJlbWFpbmluZwo+PiB0cmlja2VyeSBpcyB0aGUgdHdvIHN1cHBseSByZWd1bGF0 b3JzIHBlciBlYWNoIENQVSBjbHVzdGVyIChvbmUgZm9yCj4+IHRoZSBDUFVzIGFuZCB0aGUgb3Ro ZXIgZm9yIHRoZSBtZW1vcnkgaW50ZXJmYWNlKQo+PiAgLSBBbm90aGVyIGNhdGNoLCBhcyBTZWJh c3RpYW4gcG9pbnRzIG91dCwgaXMgdGhhdCBtZW1vcnkgcmVhZCBtYXJnaW5zCj4+IG11c3QgYmUg YWRqdXN0ZWQgd2hlbmV2ZXIgdGhlIG1lbW9yeSBpbnRlcmZhY2Ugc3VwcGx5IHZvbHRhZ2UgY3Jv c3Nlcwo+PiBjZXJ0YWluIHRocmVzaG9sZHMgWzRdLiBUaGlzIGhhcyBsaXR0bGUgdG8gZG8gd2l0 aCBDUFVzIG9yCj4+IGZyZXF1ZW5jaWVzLCBhbmQgaXMgb25seSB0YW5nZW50aWFsbHkgcmVsYXRl ZCB0byB0aGVtIGR1ZSB0byB0aGUKPj4gZGVwZW5kZW5jeSBjaGFpbiBiZXR3ZWVuIHRoZSB0YXJn ZXQgQ1BVIGZyZXF1ZW5jeSAtPiByZXF1aXJlZCBDUFUKPj4gc3VwcGx5IHZvbHRhZ2UgLT4gbWF0 Y2hpbmcgbWVtb3J5IGludGVyZmFjZSBzdXBwbHkgdm9sdGFnZSAtPiByZXF1aXJlZAo+PiByZWFk IG1hcmdpbnMKPj4gIC0gQXQgcmVzZXQgdGhlIEFURiBzd2l0Y2hlcyBhbGwgY2xvY2tzIHRvIHRo ZSBsb3dlc3QgNDA4IE1IeiBbNl0sIHNvCj4+IHNldHRpbmcgaXQgdG8gYW55dGhpbmcgaW4ga2Vy bmVsIGNvZGUgKGFzIHRoZSBkb3duc3RyZWFtIGRyaXZlciBkb2VzKQo+PiBzZWVtcyByZWR1bmRh bnQKPj4gCj4+IEFsbCBpbiBhbGwsIGl0IGRvZXMgaW5kZWVkIHNvdW5kIGxpa2UgQ29sbGFib3Jh J3MgQ0kgbWFjaGluZSBib290LXRpbWUKPj4gcmVzZXRzIGFyZSBtb3N0IGxpa2VseSBjYXVzZWQg YnkgdGhlIG1pc3NpbmcgbWVtb3J5IHJlYWQgbWFyZ2luCj4+IHNldHRpbmdzIGluIG15IHBhdGNo IHNlcmllcy4gVm9sdGFnZSB2YWx1ZXMgaW4gdGhlIE9QUHMgSSB1c2VkIGFyZSB0aGUKPj4gbW9z dCBjb25zZXJ2YXRpdmUgZGVmYXVsdHMgb2Ygd2hhdCB0aGUgZG93bnN0cmVhbSBEVCBoYXMsIGFu ZCBQVlBMTAo+PiBzaG91bGQgYmUgYWJsZSB0byBnZW5lcmF0ZSByZWFzb25hYmxlIGNsb2NrIHNw ZWVkcyB3aXRoIHRob3NlIChhbGJlaXQKPj4gbGlrZWx5IHN1Ym9wdGltYWwsIGR1ZSB0byB0aGVt IG5vdCBiZWluZyB0dW5lZCB0byB0aGUgcGFydGljdWxhcgo+PiBzaWxpY29uIHNwZWNpbWVuKS4g QW5kIHRoZXJlIGlzIGxpdHRsZSBlbHNlIHRvIGRpZmZlciBmcmFua2x5Lgo+PiAKPj4gQXMgZm9y IHRoZSB3YXkgZm9yd2FyZCwgaXQgd291bGQgYmUgZ3JlYXQgdG8ga25vdyB0aGUgb3BpbmlvbnMg ZnJvbQo+PiB0aGUgbGlzdC4gTXkgdGhpbmtpbmcgaXMgYXMgZm9sbG93czoKPj4gIC0gSSBjYW4g aW50cm9kdWNlIG1lbW9yeSByZWFkIG1hcmdpbiB1cGRhdGVzIGFzIHRoZSBmaXJzdCBwcmlvcml0 eSwKPj4gbGVhdmluZyB2b2x0YWdlIGNhbGlicmF0aW9uIGFuZC9vciBPUFAgcHJlc2VsZWN0aW9u IGZvciBsYXRlciAoYXMKPj4gdGhvc2Ugc2hvdWxkIG5vdCBhZmZlY3Qgc3lzdGVtIHN0YWJpbGl0 eSBhdCBjdXJyZW50IGRlZmF1bHQgdmFsdWVzLAo+PiBwZXJoYXBzIG9ubHkgcG93ZXIgZWZmaWNp ZW5jeSB0byBhIGNlcnRhaW4gZXh0ZW50KQo+PiAgLSBDUFVmcmVxIGRvZXNuJ3Qgc291bmQgbGlr ZSB0aGUgcmlnaHQgcGxhY2UgZm9yIHRob3NlLCBnaXZlbiB0aGF0Cj4+IHRoZXkgaGF2ZSBsaXR0 bGUgdG8gZG8gd2l0aCBlaXRoZXIgQ1BVIG9yIGZyZXEgOikKPj4gIC0gSSBzdWdnZXN0IGEgY3Vz dG9tIHJlZ3VsYXRvciBjb25maWcgaGVscGVyIHRvIHBsdWcgaW50byB0aGUgT1BQCj4+IGxheWVy LCBhcyBpcyBkb25lIGZvciBUSSBPTUFQNSBbNl0uIEF0IGZpcnN0LCBpdCBtaWdodCBiZSBvbmx5 IHVzZWQKPj4gZm9yIGxvb2tpbmcgdXAgYW5kIHNldHRpbmcgdGhlIGNvcnJlY3QgbWVtb3J5IHJl YWQgbWFyZ2luIHZhbHVlCj4+IHdoZW5ldmVyIHRoZSBjbHVzdGVyIHN1cHBseSB2b2x0YWdlIGNo YW5nZXMsIGFuZCBsYXRlciB0aGUgc2FtZSBjb2RlCj4+IGNhbiBiZSBleHRlbmRlZCB0byBkbyB2 b2x0YWdlIGNhbGlicmF0aW9uLiBJbiBmYWN0LCBPTUFQIGNvZGUgaXMgdGhlcmUKPj4gZm9yIGEg dmVyeSBzaW1pbGFyIHB1cnBvc2UsIGJ1dCBpbiB0aGVpciBjYXNlIG9wdGltaXplZCB2b2x0YWdl cyBhcmUKPj4gcHJlLXByb2dyYW1tZWQgaW4gZWZ1c2VzIGFuZCBkb24ndCByZXF1aXJlIHJ1bnRp bWUgcmVjYWxpYnJhdGlvbgo+PiAgLSBHaXZlbiB0aGF0IGFsbCBPUFBzIGluIHRoZSBkb3duc3Ry ZWFtIGtlcm5lbCBsaXN0IGlkZW50aWNhbAo+PiB2b2x0YWdlcyBmb3IgdGhlIG1lbW9yeSBzdXBw bHkgYXMgZm9yIHRoZSBDUFUgc3VwcGx5LCBJIGRvbid0IHRoaW5rIGl0Cj4+IG1ha2VzIG11Y2gg c2Vuc2UgdG8gY3VzdG9taXplIHRoZSBjcHVmcmVxIGRyaXZlciBwZXIgc2UuCj4+IFNpbmdsZS1y ZWd1bGF0b3IgYXBwcm9hY2ggd2l0aCB0aGUgZ2VuZXJpYyBjcHVmcmVxLWR0IGFuZCByZWd1bGF0 b3IKPj4gY291cGxpbmcgc291bmRzIG11Y2ggbGVzcyBpbnZhc2l2ZSBhbmQgdGh1cyBsb3dlci1t YWludGVuYW5jZQo+IAo+IFRoYW5rIHlvdSB2ZXJ5IG11Y2ggZm9yIGEgZGV0YWlsZWQgYW5kIGhp Z2hseSB1c2VmdWwgc3VtbWFyeSEKPiAKPiBJJ2xsIHJldHJhY2UgeW91ciBzdGVwcyBpbnRvIGFu ZCwgaG9wZWZ1bGx5LCBvdXQgb2YgdGhlIHJhYmJpdCBob2xlLiA6KQo+IEFmdGVyIHRoYXQsIEkn bGwgY29tZSBiYWNrIHdpdGggYW4gdXBkYXRlLgoKSnVzdCBhIGJyaWVmIHVwZGF0ZS4uLiAgSSB3 ZW50IGV2ZW4gYSBiaXQgZGVlcGVyIGludG8gbXVsdGlwbGUgcmFiYml0CmhvbGVzLCA6KSBhbmQg SSdsbCBjb21lIGJhY2sgd2l0aCBhIGRldGFpbGVkIHVwZGF0ZSBhIGJpdCBsYXRlciwgCnRvZ2V0 aGVyCndpdGggYSBwcm9wb3NhbCBmb3IgdGhlIHBsYW4gdG8gbW92ZSBmb3J3YXJkLiAgVGhlIGZp bmFsIG91dGNvbWUgc2hvdWxkCmJlIGF3ZXNvbWUuIDopCgo+PiBbMV0gCj4+IGh0dHBzOi8vZ2l0 bGFiLmNvbGxhYm9yYS5jb20vaGFyZHdhcmUtZW5hYmxlbWVudC9yb2NrY2hpcC0zNTg4L3RydXN0 ZWQtZmlybXdhcmUtYS8tL2Jsb2IvcmszNTg4L3BsYXQvcm9ja2NoaXAvcmszNTg4L2RyaXZlcnMv c2NtaS9yazM1ODhfY2xrLmM/cmVmX3R5cGU9aGVhZHMjTDMwMwo+PiBbMl0gCj4+IGh0dHBzOi8v Z2l0aHViLmNvbS9yYWR4YS9rZXJuZWwvYmxvYi9jNDI4NTM2MjgxZDY5YWViMmIzNDgwZjY1YjJi MjI3MjEwYjYxNTM1L2RyaXZlcnMvc29jL3JvY2tjaGlwL3JvY2tjaGlwX29wcF9zZWxlY3QuYyNM ODA0Cj4+IFszXSAKPj4gaHR0cHM6Ly9naXRodWIuY29tL3JhZHhhL2tlcm5lbC9ibG9iL2M0Mjg1 MzYyODFkNjlhZWIyYjM0ODBmNjViMmIyMjcyMTBiNjE1MzUvZHJpdmVycy9zb2Mvcm9ja2NoaXAv cm9ja2NoaXBfb3BwX3NlbGVjdC5jI0wxNTc1Cj4+IFs0XSAKPj4gaHR0cHM6Ly9naXRodWIuY29t L3JhZHhhL2tlcm5lbC9ibG9iL2M0Mjg1MzYyODFkNjlhZWIyYjM0ODBmNjViMmIyMjcyMTBiNjE1 MzUvZHJpdmVycy9jcHVmcmVxL3JvY2tjaGlwLWNwdWZyZXEuYyNMNDA1Cj4+IFs1XSAKPj4gaHR0 cHM6Ly9naXRsYWIuY29sbGFib3JhLmNvbS9oYXJkd2FyZS1lbmFibGVtZW50L3JvY2tjaGlwLTM1 ODgvdHJ1c3RlZC1maXJtd2FyZS1hLy0vYmxvYi9yazM1ODgvcGxhdC9yb2NrY2hpcC9yazM1ODgv ZHJpdmVycy9zY21pL3JrMzU4OF9jbGsuYz9yZWZfdHlwZT1oZWFkcyNMMjQxOQo+PiBbNl0gCj4+ IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRz L2xpbnV4LmdpdC90cmVlL2RyaXZlcnMvb3BwL3RpLW9wcC1zdXBwbHkuYyNuMjc1Cj4gCj4gX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBMaW51eC1yb2Nr Y2hpcCBtYWlsaW5nIGxpc3QKPiBMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnCj4g aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hp cAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt YXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJt LWtlcm5lbAo=