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=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=ham 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 942A9C10F13 for ; Thu, 11 Apr 2019 19:20:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5991D2083E for ; Thu, 11 Apr 2019 19:20:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726615AbfDKTUS convert rfc822-to-8bit (ORCPT ); Thu, 11 Apr 2019 15:20:18 -0400 Received: from gloria.sntech.de ([185.11.138.130]:32858 "EHLO gloria.sntech.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726538AbfDKTUS (ORCPT ); Thu, 11 Apr 2019 15:20:18 -0400 Received: from ip5f5a6320.dynamic.kabel-deutschland.de ([95.90.99.32] helo=diego.localnet) by gloria.sntech.de with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hEfF4-0001Hj-1F; Thu, 11 Apr 2019 21:20:10 +0200 From: Heiko =?ISO-8859-1?Q?St=FCbner?= To: Doug Anderson Cc: "elaine.zhang" , Michael Turquette , Stephen Boyd , Caesar Wang , "open list:ARM/Rockchip SoC..." , Matthias Kaehlcke , Ryan Case , linux-clk , LKML , Linux ARM Subject: Re: [PATCH 2/3] clk: rockchip: Make rkpwm a critical clock on rk3288 Date: Thu, 11 Apr 2019 21:20:09 +0200 Message-ID: <3228689.801YVuiu6B@diego> In-Reply-To: References: <20190409204707.150347-1-dianders@chromium.org> <43b5ef8c-4617-bdc5-7109-35eac228b8f9@rock-chips.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8BIT Content-Type: text/plain; charset="UTF-8" Sender: linux-clk-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.org Hi Doug, Elaine, Am Donnerstag, 11. April 2019, 16:42:23 CEST schrieb Doug Anderson: > On Wed, Apr 10, 2019 at 8:42 PM elaine.zhang wrote: > > 在 2019/4/10 下午11:25, Doug Anderson 写道: > > > On Tue, Apr 9, 2019 at 11:42 PM elaine.zhang wrote: > > >> 在 2019/4/10 上午4:47, Douglas Anderson 写道: > > >>> Most rk3288-based boards are derived from the EVB and thus use a PWM > > >>> regulator for the logic rail. However, most rk3288-based boards don't > > >>> specify the PWM regulator in their device tree. We'll deal with that > > >>> by making it critical. > > >>> > > >>> NOTE: it's important to make it critical and not just IGNORE_UNUSED > > >>> because all PWMs in the system share the same clock. We don't want > > >>> another PWM user to turn the clock on and off and kill the logic rail. > > >>> > > >>> This change is in preparation for actually having the PWMs in the > > >>> rk3288 device tree actually point to the proper PWM clock. Up until > > >>> now they've all pointed to the clock for the old IP block and they've > > >>> all worked due to the fact that rkpwm was IGNORE_UNUSED and that the > > >>> clock rates for both clocks were the same. > > >>> > > >>> Signed-off-by: Douglas Anderson > > >>> --- > > >>> > > >>> drivers/clk/rockchip/clk-rk3288.c | 3 ++- > > >>> 1 file changed, 2 insertions(+), 1 deletion(-) > > >>> > > >>> diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c > > >>> index 06287810474e..c3321eade23e 100644 > > >>> --- a/drivers/clk/rockchip/clk-rk3288.c > > >>> +++ b/drivers/clk/rockchip/clk-rk3288.c > > >>> @@ -697,7 +697,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = { > > >>> GATE(PCLK_TZPC, "pclk_tzpc", "pclk_cpu", 0, RK3288_CLKGATE_CON(11), 3, GFLAGS), > > >>> GATE(PCLK_UART2, "pclk_uart2", "pclk_cpu", 0, RK3288_CLKGATE_CON(11), 9, GFLAGS), > > >>> GATE(PCLK_EFUSE256, "pclk_efuse_256", "pclk_cpu", 0, RK3288_CLKGATE_CON(11), 10, GFLAGS), > > >>> - GATE(PCLK_RKPWM, "pclk_rkpwm", "pclk_cpu", CLK_IGNORE_UNUSED, RK3288_CLKGATE_CON(11), 11, GFLAGS), > > >>> + GATE(PCLK_RKPWM, "pclk_rkpwm", "pclk_cpu", 0, RK3288_CLKGATE_CON(11), 11, GFLAGS), > > >>> > > >>> /* ddrctrl [DDR Controller PHY clock] gates */ > > >>> GATE(0, "nclk_ddrupctl0", "ddrphy", CLK_IGNORE_UNUSED, RK3288_CLKGATE_CON(11), 4, GFLAGS), > > >>> @@ -837,6 +837,7 @@ static const char *const rk3288_critical_clocks[] __initconst = { > > >>> "pclk_alive_niu", > > >>> "pclk_pd_pmu", > > >>> "pclk_pmu_niu", > > >>> + "pclk_rkpwm", > > >> pwm have device node, can enable and disable it in the pwm drivers. > > >> > > >> pwm regulator use pwm node as: > > >> > > >> pwms = <&pwm2 0 25000 1> > > >> > > >> when set Logic voltage: > > >> > > >> pwm_regulator_set_voltage() > > >> > > >> --> pwm_apply_state() > > >> > > >> -->clk_enable() > > >> > > >> -->pwm_enable() > > >> > > >> -->pwm_config() > > >> > > >> -->pinctrl_select() > > >> > > >> --.... > > >> > > >> For mark pclk_rkpwm as critical,do you have any questions, or provides > > >> some log or more information. > > > Right, if we actually specify the PWM used for the PWM regulator in > > > the device tree then there is no need to mark it as a critical clock. > > > In fact rk3288-veyron devices boot absolutely fine without marking > > > this clock as critical. Actually, it seems like the way the PWM > > > framework works (IIRC it was designed this way specifically to support > > > PWM regulators) is that even just specifying that pwm1 is "okay" is > > > enough to keep the clock on even if the PWM regulator isn't specified. > > > > > > ...however... > > > > > > Take a look at, for instance, the rk3288-evb device tree file. > > > Nowhere in there does it specify that the PWM used for the PWM > > > regulator should be on. Presumably that means that if we don't mark > > > the clock as critical then rk3288-evb will fail to boot. That's easy > > > for me to fix since I have the rk3288-evb schematics, but what about > > > other rk3288 boards? We could make educated guesses about each of > > > them and/or fix things are we hear about breakages. > > > > > > ...but... > > > > > > All the above would only be worth doing if we thought someone would > > > get some benefit out of it. I'd bet that pretty much all rk3288-based > > > boards use a PWM regulator. Thus, in reality, everyone will want the > > > rkpwm clock on all the time anyway. In that case going through all > > > that extra work / potentially breaking other boards doesn't seem worth > > > it. Just mark the clock as critical. > > > > I have no problem with changing it like this, but I think it is better > > to modify dts: > > > > vdd_log: vdd-log { > > compatible = "pwm-regulator"; > > rockchip,pwm_id = <2>; //for rk uboot > > rockchip,pwm_voltage = <900000>; // for rk uboot > > pwms = <&pwm2 0 25000 1>; > > regulator-name = "vdd_log"; > > regulator-min-microvolt = <800000>;//hw logic min voltage > > regulator-max-microvolt = <1400000>;//hw logic max voltage > > regulator-always-on; > > regulator-boot-on; > > }; > > > > Maybe we did not push the modification of this part in rk3288-evb, I > > will push to deal with this.(rk3229-evb.dts and rk3399 has been already > > pushed) > > Heiko: do you have advice for how you'd like this to proceed? We > could certainly land patch #3 in this series without patch #2 and then > pick up the pieces as we find boards that no longer boot. As I've > argued I'm not sure that's worth the effort, but I'll leave it up to > you. So I've skimmed through a number of rk3288 device-schematics and at least there pwm-based logic-regulator is only part of some of the rk808-based designs. All the act8846-based boards use one of its regulator-outputs for the logic supply. So this matters for at least the veyron-boards and the rk3288-evb ... but not the phycore. But it also is part of a vital system for veyron and they won't really like if somewhere during probe the pwm-clock gets turned off ;-) . So I tend to agree with Doug and will just apply the make-critical patch. If Stephen's "handoff" clock-type [critical until a driver claims it] materializes some-time, we can switch to that. Heiko 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=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS autolearn=ham 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 91297C10F14 for ; Thu, 11 Apr 2019 19:20:25 +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 5EF762083E for ; Thu, 11 Apr 2019 19:20:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="qMiBEdfJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5EF762083E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sntech.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=/MLSTjfThC1H7T1sgFMiENT/zOeLsxXqnB3f1g8NbMc=; b=qMiBEdfJSAKayq Vqnt5Zh1L9XCsS4oA0KmYxtGcjpaXtiazY5EntpZwOYSz91jh5V7hzKM7jIVoLHKWWnzNRfIpoFEh E5HCZ4hyWIYuskNOsPEP5V2/QVVgDe04dfVNSY/5GvHZ3yICQ7h9t3hdUQ3oc1+mnKVGwRfGD4d5j kvX8wZK+sXNuu7X8WaHim6AgGcaL91oCYjDfPe0Cjd+MtbnXQDF0pITppQknBVKzSF8OOqncz6Vuz 9q2qpKLDRq/5nAcsKW26y6cxydwt0MdEFgBcheqG/8CwD1HizasFUPF1yrTSLXokUFNwiEl1qHRQe 9lBBJGQuqb0awbAM+tew==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hEfFF-00012w-3L; Thu, 11 Apr 2019 19:20:21 +0000 Received: from gloria.sntech.de ([185.11.138.130]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hEfFB-00012E-Tc; Thu, 11 Apr 2019 19:20:19 +0000 Received: from ip5f5a6320.dynamic.kabel-deutschland.de ([95.90.99.32] helo=diego.localnet) by gloria.sntech.de with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hEfF4-0001Hj-1F; Thu, 11 Apr 2019 21:20:10 +0200 From: Heiko =?ISO-8859-1?Q?St=FCbner?= To: Doug Anderson Subject: Re: [PATCH 2/3] clk: rockchip: Make rkpwm a critical clock on rk3288 Date: Thu, 11 Apr 2019 21:20:09 +0200 Message-ID: <3228689.801YVuiu6B@diego> In-Reply-To: References: <20190409204707.150347-1-dianders@chromium.org> <43b5ef8c-4617-bdc5-7109-35eac228b8f9@rock-chips.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190411_122018_109488_F1928214 X-CRM114-Status: GOOD ( 33.11 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Stephen Boyd , Michael Turquette , "elaine.zhang" , LKML , "open list:ARM/Rockchip SoC..." , Matthias Kaehlcke , Ryan Case , Caesar Wang , linux-clk , Linux ARM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgRG91ZywgRWxhaW5lLAoKQW0gRG9ubmVyc3RhZywgMTEuIEFwcmlsIDIwMTksIDE2OjQyOjIz IENFU1Qgc2NocmllYiBEb3VnIEFuZGVyc29uOgo+IE9uIFdlZCwgQXByIDEwLCAyMDE5IGF0IDg6 NDIgUE0gZWxhaW5lLnpoYW5nIDx6aGFuZ3FpbmdAcm9jay1jaGlwcy5jb20+IHdyb3RlOgo+ID4g 5ZyoIDIwMTkvNC8xMCDkuIvljYgxMToyNSwgRG91ZyBBbmRlcnNvbiDlhpnpgZM6Cj4gPiA+IE9u IFR1ZSwgQXByIDksIDIwMTkgYXQgMTE6NDIgUE0gZWxhaW5lLnpoYW5nIDx6aGFuZ3FpbmdAcm9j ay1jaGlwcy5jb20+IHdyb3RlOgo+ID4gPj4g5ZyoIDIwMTkvNC8xMCDkuIrljYg0OjQ3LCBEb3Vn bGFzIEFuZGVyc29uIOWGmemBkzoKPiA+ID4+PiBNb3N0IHJrMzI4OC1iYXNlZCBib2FyZHMgYXJl IGRlcml2ZWQgZnJvbSB0aGUgRVZCIGFuZCB0aHVzIHVzZSBhIFBXTQo+ID4gPj4+IHJlZ3VsYXRv ciBmb3IgdGhlIGxvZ2ljIHJhaWwuICBIb3dldmVyLCBtb3N0IHJrMzI4OC1iYXNlZCBib2FyZHMg ZG9uJ3QKPiA+ID4+PiBzcGVjaWZ5IHRoZSBQV00gcmVndWxhdG9yIGluIHRoZWlyIGRldmljZSB0 cmVlLiAgV2UnbGwgZGVhbCB3aXRoIHRoYXQKPiA+ID4+PiBieSBtYWtpbmcgaXQgY3JpdGljYWwu Cj4gPiA+Pj4KPiA+ID4+PiBOT1RFOiBpdCdzIGltcG9ydGFudCB0byBtYWtlIGl0IGNyaXRpY2Fs IGFuZCBub3QganVzdCBJR05PUkVfVU5VU0VECj4gPiA+Pj4gYmVjYXVzZSBhbGwgUFdNcyBpbiB0 aGUgc3lzdGVtIHNoYXJlIHRoZSBzYW1lIGNsb2NrLiAgV2UgZG9uJ3Qgd2FudAo+ID4gPj4+IGFu b3RoZXIgUFdNIHVzZXIgdG8gdHVybiB0aGUgY2xvY2sgb24gYW5kIG9mZiBhbmQga2lsbCB0aGUg bG9naWMgcmFpbC4KPiA+ID4+Pgo+ID4gPj4+IFRoaXMgY2hhbmdlIGlzIGluIHByZXBhcmF0aW9u IGZvciBhY3R1YWxseSBoYXZpbmcgdGhlIFBXTXMgaW4gdGhlCj4gPiA+Pj4gcmszMjg4IGRldmlj ZSB0cmVlIGFjdHVhbGx5IHBvaW50IHRvIHRoZSBwcm9wZXIgUFdNIGNsb2NrLiAgVXAgdW50aWwK PiA+ID4+PiBub3cgdGhleSd2ZSBhbGwgcG9pbnRlZCB0byB0aGUgY2xvY2sgZm9yIHRoZSBvbGQg SVAgYmxvY2sgYW5kIHRoZXkndmUKPiA+ID4+PiBhbGwgd29ya2VkIGR1ZSB0byB0aGUgZmFjdCB0 aGF0IHJrcHdtIHdhcyBJR05PUkVfVU5VU0VEIGFuZCB0aGF0IHRoZQo+ID4gPj4+IGNsb2NrIHJh dGVzIGZvciBib3RoIGNsb2NrcyB3ZXJlIHRoZSBzYW1lLgo+ID4gPj4+Cj4gPiA+Pj4gU2lnbmVk LW9mZi1ieTogRG91Z2xhcyBBbmRlcnNvbiA8ZGlhbmRlcnNAY2hyb21pdW0ub3JnPgo+ID4gPj4+ IC0tLQo+ID4gPj4+Cj4gPiA+Pj4gICAgZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzI4OC5j IHwgMyArKy0KPiA+ID4+PiAgICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRl bGV0aW9uKC0pCj4gPiA+Pj4KPiA+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvcm9ja2No aXAvY2xrLXJrMzI4OC5jIGIvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzI4OC5jCj4gPiA+ Pj4gaW5kZXggMDYyODc4MTA0NzRlLi5jMzMyMWVhZGUyM2UgMTAwNjQ0Cj4gPiA+Pj4gLS0tIGEv ZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzI4OC5jCj4gPiA+Pj4gKysrIGIvZHJpdmVycy9j bGsvcm9ja2NoaXAvY2xrLXJrMzI4OC5jCj4gPiA+Pj4gQEAgLTY5Nyw3ICs2OTcsNyBAQCBzdGF0 aWMgc3RydWN0IHJvY2tjaGlwX2Nsa19icmFuY2ggcmszMjg4X2Nsa19icmFuY2hlc1tdIF9faW5p dGRhdGEgPSB7Cj4gPiA+Pj4gICAgICAgIEdBVEUoUENMS19UWlBDLCAicGNsa190enBjIiwgInBj bGtfY3B1IiwgMCwgUkszMjg4X0NMS0dBVEVfQ09OKDExKSwgMywgR0ZMQUdTKSwKPiA+ID4+PiAg ICAgICAgR0FURShQQ0xLX1VBUlQyLCAicGNsa191YXJ0MiIsICJwY2xrX2NwdSIsIDAsIFJLMzI4 OF9DTEtHQVRFX0NPTigxMSksIDksIEdGTEFHUyksCj4gPiA+Pj4gICAgICAgIEdBVEUoUENMS19F RlVTRTI1NiwgInBjbGtfZWZ1c2VfMjU2IiwgInBjbGtfY3B1IiwgMCwgUkszMjg4X0NMS0dBVEVf Q09OKDExKSwgMTAsIEdGTEFHUyksCj4gPiA+Pj4gLSAgICAgR0FURShQQ0xLX1JLUFdNLCAicGNs a19ya3B3bSIsICJwY2xrX2NwdSIsIENMS19JR05PUkVfVU5VU0VELCBSSzMyODhfQ0xLR0FURV9D T04oMTEpLCAxMSwgR0ZMQUdTKSwKPiA+ID4+PiArICAgICBHQVRFKFBDTEtfUktQV00sICJwY2xr X3JrcHdtIiwgInBjbGtfY3B1IiwgMCwgUkszMjg4X0NMS0dBVEVfQ09OKDExKSwgMTEsIEdGTEFH UyksCj4gPiA+Pj4KPiA+ID4+PiAgICAgICAgLyogZGRyY3RybCBbRERSIENvbnRyb2xsZXIgUEhZ IGNsb2NrXSBnYXRlcyAqLwo+ID4gPj4+ICAgICAgICBHQVRFKDAsICJuY2xrX2RkcnVwY3RsMCIs ICJkZHJwaHkiLCBDTEtfSUdOT1JFX1VOVVNFRCwgUkszMjg4X0NMS0dBVEVfQ09OKDExKSwgNCwg R0ZMQUdTKSwKPiA+ID4+PiBAQCAtODM3LDYgKzgzNyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpj b25zdCByazMyODhfY3JpdGljYWxfY2xvY2tzW10gX19pbml0Y29uc3QgPSB7Cj4gPiA+Pj4gICAg ICAgICJwY2xrX2FsaXZlX25pdSIsCj4gPiA+Pj4gICAgICAgICJwY2xrX3BkX3BtdSIsCj4gPiA+ Pj4gICAgICAgICJwY2xrX3BtdV9uaXUiLAo+ID4gPj4+ICsgICAgICJwY2xrX3JrcHdtIiwKPiA+ ID4+IHB3bSBoYXZlIGRldmljZSBub2RlLCBjYW4gZW5hYmxlIGFuZCBkaXNhYmxlIGl0IGluIHRo ZSBwd20gZHJpdmVycy4KPiA+ID4+Cj4gPiA+PiBwd20gcmVndWxhdG9yIHVzZSBwd20gbm9kZSBh czoKPiA+ID4+Cj4gPiA+PiBwd21zID0gPCZwd20yIDAgMjUwMDAgMT4KPiA+ID4+Cj4gPiA+PiB3 aGVuIHNldCBMb2dpYyB2b2x0YWdlOgo+ID4gPj4KPiA+ID4+IHB3bV9yZWd1bGF0b3Jfc2V0X3Zv bHRhZ2UoKQo+ID4gPj4KPiA+ID4+ICAgICAgIC0tPiBwd21fYXBwbHlfc3RhdGUoKQo+ID4gPj4K PiA+ID4+ICAgICAgICAgICAtLT5jbGtfZW5hYmxlKCkKPiA+ID4+Cj4gPiA+PiAgICAgICAgICAg LS0+cHdtX2VuYWJsZSgpCj4gPiA+Pgo+ID4gPj4gICAgICAgICAgIC0tPnB3bV9jb25maWcoKQo+ ID4gPj4KPiA+ID4+ICAgICAgICAgICAtLT5waW5jdHJsX3NlbGVjdCgpCj4gPiA+Pgo+ID4gPj4g ICAgICAgICAgIC0tLi4uLgo+ID4gPj4KPiA+ID4+IEZvciBtYXJrIHBjbGtfcmtwd20gYXMgY3Jp dGljYWwsZG8geW91IGhhdmUgYW55IHF1ZXN0aW9ucywgb3IgcHJvdmlkZXMKPiA+ID4+IHNvbWUg bG9nIG9yIG1vcmUgaW5mb3JtYXRpb24uCj4gPiA+IFJpZ2h0LCBpZiB3ZSBhY3R1YWxseSBzcGVj aWZ5IHRoZSBQV00gdXNlZCBmb3IgdGhlIFBXTSByZWd1bGF0b3IgaW4KPiA+ID4gdGhlIGRldmlj ZSB0cmVlIHRoZW4gdGhlcmUgaXMgbm8gbmVlZCB0byBtYXJrIGl0IGFzIGEgY3JpdGljYWwgY2xv Y2suCj4gPiA+IEluIGZhY3QgcmszMjg4LXZleXJvbiBkZXZpY2VzIGJvb3QgYWJzb2x1dGVseSBm aW5lIHdpdGhvdXQgbWFya2luZwo+ID4gPiB0aGlzIGNsb2NrIGFzIGNyaXRpY2FsLiAgQWN0dWFs bHksIGl0IHNlZW1zIGxpa2UgdGhlIHdheSB0aGUgUFdNCj4gPiA+IGZyYW1ld29yayB3b3JrcyAo SUlSQyBpdCB3YXMgZGVzaWduZWQgdGhpcyB3YXkgc3BlY2lmaWNhbGx5IHRvIHN1cHBvcnQKPiA+ ID4gUFdNIHJlZ3VsYXRvcnMpIGlzIHRoYXQgZXZlbiBqdXN0IHNwZWNpZnlpbmcgdGhhdCBwd20x IGlzICJva2F5IiBpcwo+ID4gPiBlbm91Z2ggdG8ga2VlcCB0aGUgY2xvY2sgb24gZXZlbiBpZiB0 aGUgUFdNIHJlZ3VsYXRvciBpc24ndCBzcGVjaWZpZWQuCj4gPiA+Cj4gPiA+IC4uLmhvd2V2ZXIu Li4KPiA+ID4KPiA+ID4gVGFrZSBhIGxvb2sgYXQsIGZvciBpbnN0YW5jZSwgdGhlIHJrMzI4OC1l dmIgZGV2aWNlIHRyZWUgZmlsZS4KPiA+ID4gTm93aGVyZSBpbiB0aGVyZSBkb2VzIGl0IHNwZWNp ZnkgdGhhdCB0aGUgUFdNIHVzZWQgZm9yIHRoZSBQV00KPiA+ID4gcmVndWxhdG9yIHNob3VsZCBi ZSBvbi4gIFByZXN1bWFibHkgdGhhdCBtZWFucyB0aGF0IGlmIHdlIGRvbid0IG1hcmsKPiA+ID4g dGhlIGNsb2NrIGFzIGNyaXRpY2FsIHRoZW4gcmszMjg4LWV2YiB3aWxsIGZhaWwgdG8gYm9vdC4g IFRoYXQncyBlYXN5Cj4gPiA+IGZvciBtZSB0byBmaXggc2luY2UgSSBoYXZlIHRoZSByazMyODgt ZXZiIHNjaGVtYXRpY3MsIGJ1dCB3aGF0IGFib3V0Cj4gPiA+IG90aGVyIHJrMzI4OCBib2FyZHM/ ICBXZSBjb3VsZCBtYWtlIGVkdWNhdGVkIGd1ZXNzZXMgYWJvdXQgZWFjaCBvZgo+ID4gPiB0aGVt IGFuZC9vciBmaXggdGhpbmdzIGFyZSB3ZSBoZWFyIGFib3V0IGJyZWFrYWdlcy4KPiA+ID4KPiA+ ID4gLi4uYnV0Li4uCj4gPiA+Cj4gPiA+IEFsbCB0aGUgYWJvdmUgd291bGQgb25seSBiZSB3b3J0 aCBkb2luZyBpZiB3ZSB0aG91Z2h0IHNvbWVvbmUgd291bGQKPiA+ID4gZ2V0IHNvbWUgYmVuZWZp dCBvdXQgb2YgaXQuICBJJ2QgYmV0IHRoYXQgcHJldHR5IG11Y2ggYWxsIHJrMzI4OC1iYXNlZAo+ ID4gPiBib2FyZHMgdXNlIGEgUFdNIHJlZ3VsYXRvci4gIFRodXMsIGluIHJlYWxpdHksIGV2ZXJ5 b25lIHdpbGwgd2FudCB0aGUKPiA+ID4gcmtwd20gY2xvY2sgb24gYWxsIHRoZSB0aW1lIGFueXdh eS4gIEluIHRoYXQgY2FzZSBnb2luZyB0aHJvdWdoIGFsbAo+ID4gPiB0aGF0IGV4dHJhIHdvcmsg LyBwb3RlbnRpYWxseSBicmVha2luZyBvdGhlciBib2FyZHMgZG9lc24ndCBzZWVtIHdvcnRoCj4g PiA+IGl0LiAgSnVzdCBtYXJrIHRoZSBjbG9jayBhcyBjcml0aWNhbC4KPiA+Cj4gPiBJIGhhdmUg bm8gcHJvYmxlbSB3aXRoIGNoYW5naW5nIGl0IGxpa2UgdGhpcywgYnV0IEkgdGhpbmsgaXQgaXMg YmV0dGVyCj4gPiB0byBtb2RpZnkgZHRzOgo+ID4KPiA+IHZkZF9sb2c6IHZkZC1sb2cgewo+ID4g ICAgICAgICAgY29tcGF0aWJsZSA9ICJwd20tcmVndWxhdG9yIjsKPiA+ICAgICAgICAgIHJvY2tj aGlwLHB3bV9pZCA9IDwyPjsgLy9mb3IgcmsgdWJvb3QKPiA+ICAgICAgICAgIHJvY2tjaGlwLHB3 bV92b2x0YWdlID0gPDkwMDAwMD47IC8vIGZvciByayB1Ym9vdAo+ID4gICAgICAgICAgcHdtcyA9 IDwmcHdtMiAwIDI1MDAwIDE+Owo+ID4gICAgICAgICAgcmVndWxhdG9yLW5hbWUgPSAidmRkX2xv ZyI7Cj4gPiAgICAgICAgICByZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw4MDAwMDA+Oy8vaHcg bG9naWMgbWluIHZvbHRhZ2UKPiA+ICAgICAgICAgIHJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0g PDE0MDAwMDA+Oy8vaHcgbG9naWMgbWF4IHZvbHRhZ2UKPiA+ICAgICAgICAgIHJlZ3VsYXRvci1h bHdheXMtb247Cj4gPiAgICAgICAgICByZWd1bGF0b3ItYm9vdC1vbjsKPiA+ICAgICAgfTsKPiA+ Cj4gPiBNYXliZSB3ZSBkaWQgbm90IHB1c2ggdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGlzIHBhcnQg aW4gcmszMjg4LWV2YiwgSQo+ID4gd2lsbCBwdXNoIHRvIGRlYWwgd2l0aCB0aGlzLihyazMyMjkt ZXZiLmR0cyBhbmQgcmszMzk5IGhhcyBiZWVuIGFscmVhZHkKPiA+IHB1c2hlZCkKPiAKPiBIZWlr bzogZG8geW91IGhhdmUgYWR2aWNlIGZvciBob3cgeW91J2QgbGlrZSB0aGlzIHRvIHByb2NlZWQ/ ICBXZQo+IGNvdWxkIGNlcnRhaW5seSBsYW5kIHBhdGNoICMzIGluIHRoaXMgc2VyaWVzIHdpdGhv dXQgcGF0Y2ggIzIgYW5kIHRoZW4KPiBwaWNrIHVwIHRoZSBwaWVjZXMgYXMgd2UgZmluZCBib2Fy ZHMgdGhhdCBubyBsb25nZXIgYm9vdC4gIEFzIEkndmUKPiBhcmd1ZWQgSSdtIG5vdCBzdXJlIHRo YXQncyB3b3J0aCB0aGUgZWZmb3J0LCBidXQgSSdsbCBsZWF2ZSBpdCB1cCB0bwo+IHlvdS4KClNv IEkndmUgc2tpbW1lZCB0aHJvdWdoIGEgbnVtYmVyIG9mIHJrMzI4OCBkZXZpY2Utc2NoZW1hdGlj cyBhbmQKYXQgbGVhc3QgdGhlcmUgcHdtLWJhc2VkIGxvZ2ljLXJlZ3VsYXRvciBpcyBvbmx5IHBh cnQgb2Ygc29tZSBvZiB0aGUKcms4MDgtYmFzZWQgZGVzaWducy4gQWxsIHRoZSBhY3Q4ODQ2LWJh c2VkIGJvYXJkcyB1c2Ugb25lIG9mIGl0cwpyZWd1bGF0b3Itb3V0cHV0cyBmb3IgdGhlIGxvZ2lj IHN1cHBseS4gU28gdGhpcyBtYXR0ZXJzIGZvciBhdCBsZWFzdCB0aGUKdmV5cm9uLWJvYXJkcyBh bmQgdGhlIHJrMzI4OC1ldmIgLi4uIGJ1dCBub3QgdGhlIHBoeWNvcmUuCgpCdXQgaXQgYWxzbyBp cyBwYXJ0IG9mIGEgdml0YWwgc3lzdGVtIGZvciB2ZXlyb24gYW5kIHRoZXkgd29uJ3QgcmVhbGx5 IGxpa2UKaWYgc29tZXdoZXJlIGR1cmluZyBwcm9iZSB0aGUgcHdtLWNsb2NrIGdldHMgdHVybmVk IG9mZiA7LSkgLgoKU28gSSB0ZW5kIHRvIGFncmVlIHdpdGggRG91ZyBhbmQgd2lsbCBqdXN0IGFw cGx5IHRoZSBtYWtlLWNyaXRpY2FsIHBhdGNoLgpJZiBTdGVwaGVuJ3MgImhhbmRvZmYiIGNsb2Nr LXR5cGUgW2NyaXRpY2FsIHVudGlsIGEgZHJpdmVyIGNsYWltcyBpdF0KbWF0ZXJpYWxpemVzIHNv bWUtdGltZSwgd2UgY2FuIHN3aXRjaCB0byB0aGF0LgoKCkhlaWtvCgoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGlu ZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK