From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 77704195FE8; Wed, 5 Jun 2024 08:18:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717575489; cv=none; b=q9UfIFBANL3cNMcAY4GjukZV9jaO4nz7L3Y7dtXe4+WPt8J29YkNCdYV3lv/UJsHWbHSPRuaYESv+YiAQB+21KXEk8j50EqdmmqM3Ko27FQBYjHr9AOjBCJTgUKGh56hCVkhV3B+y+Cc4UG5pt5lhYNAXR1DmUTb18o9G1ZYtcg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717575489; c=relaxed/simple; bh=AaNMFa474izpGRkn1s2bqhLMgtZao6BeoKtAM/4bkRI=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ck+mCDPLn68NN13aJ56Yaaqls5HAKiMuggskxPrN36M0aGwcEMtnNX2dK30w7hpfJmcds0D403eXFy6xVd2mrefSGwx724bS8px9UzIXUEKSdulAvlHjkFWwghC2LMpZ9Xb5SHVq+tHlL0v2kxKSdwIHnn++NDbSJiJsQgdcZk4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QuXzzy2Q; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QuXzzy2Q" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8A334C32781; Wed, 5 Jun 2024 08:18:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717575488; bh=AaNMFa474izpGRkn1s2bqhLMgtZao6BeoKtAM/4bkRI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=QuXzzy2QmnMeVrq08FbdVt/73QHryni6SoM0SVxGGuiz6A4ghxNqCCZLNCEecbtu4 IdgdnbLINDiAizZoS+N79/csAIyM4fv+50RhuZY1Z/d5cyYdzmFXLSezPJP9czv3cy NF2BUTwaug+THss1Oo4UscXBvOJctBQrTyB21nc8fEMRkZj45V4MVoK4vY6hijv331 Ldvx61iNLXJgcnHTMN8JvVtuqlk+rqy55z2CbuSVMc55eI7TPwiUZ3x6loS3DoX9PE Dsjim1vDbwOHx2HXWV/DDwFKYd8ghDGYwXgDHgqxWQA08+Lz8M43+p2xmiB/rsKaRL woG/EIr73aK6w== Date: Wed, 5 Jun 2024 13:47:53 +0530 From: Manivannan Sadhasivam To: Niklas Cassel Cc: Jingoo Han , Manivannan Sadhasivam , Bjorn Helgaas , Lorenzo Pieralisi , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Heiko Stuebner , Kishon Vijay Abraham I , Arnd Bergmann , Damien Le Moal , Jon Lin , Shawn Lin , Simon Xue , linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-rockchip@lists.infradead.org Subject: Re: [PATCH v4 10/13] PCI: dw-rockchip: Add endpoint mode support Message-ID: <20240605081753.GK5085@thinkpad> References: <20240529-rockchip-pcie-ep-v1-v4-0-3dc00fe21a78@kernel.org> <20240529-rockchip-pcie-ep-v1-v4-10-3dc00fe21a78@kernel.org> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240529-rockchip-pcie-ep-v1-v4-10-3dc00fe21a78@kernel.org> On Wed, May 29, 2024 at 10:29:04AM +0200, Niklas Cassel wrote: > The PCIe controller in rk3568 and rk3588 can operate in endpoint mode. > This endpoint mode support heavily leverages the existing code in > pcie-designware-ep.c. > > Add support for endpoint mode to the existing pcie-dw-rockchip glue > driver. > > Signed-off-by: Niklas Cassel Couple of comments below. With those addressed, Reviewed-by: Manivannan Sadhasivam > --- > drivers/pci/controller/dwc/Kconfig | 17 ++- > drivers/pci/controller/dwc/pcie-dw-rockchip.c | 210 ++++++++++++++++++++++++++ > 2 files changed, 224 insertions(+), 3 deletions(-) > > diff --git a/drivers/pci/controller/dwc/Kconfig b/drivers/pci/controller/dwc/Kconfig > index 8afacc90c63b..9fae0d977271 100644 > --- a/drivers/pci/controller/dwc/Kconfig > +++ b/drivers/pci/controller/dwc/Kconfig > @@ -311,16 +311,27 @@ config PCIE_RCAR_GEN4_EP > SoCs. To compile this driver as a module, choose M here: the module > will be called pcie-rcar-gen4.ko. This uses the DesignWare core. > > +config PCIE_ROCKCHIP_DW > + bool Where is this symbol used? > + > config PCIE_ROCKCHIP_DW_HOST > - bool "Rockchip DesignWare PCIe controller" > - select PCIE_DW > + bool "Rockchip DesignWare PCIe controller (host mode)" > select PCIE_DW_HOST > depends on PCI_MSI > depends on ARCH_ROCKCHIP || COMPILE_TEST > depends on OF > help > Enables support for the DesignWare PCIe controller in the > - Rockchip SoC except RK3399. > + Rockchip SoC (except RK3399) to work in host mode. > + > +config PCIE_ROCKCHIP_DW_EP > + bool "Rockchip DesignWare PCIe controller (endpoint mode)" > + select PCIE_DW_EP > + depends on ARCH_ROCKCHIP || COMPILE_TEST > + depends on OF > + help > + Enables support for the DesignWare PCIe controller in the > + Rockchip SoC (except RK3399) to work in endpoint mode. > > config PCI_EXYNOS > tristate "Samsung Exynos PCIe controller" > diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c > index e133511692af..347721207161 100644 > --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c > +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c [...] > +static irqreturn_t rockchip_pcie_ep_sys_irq_thread(int irq, void *arg) > +{ > + struct rockchip_pcie *rockchip = arg; > + struct dw_pcie *pci = &rockchip->pci; > + struct device *dev = pci->dev; > + u32 reg, val; > + > + reg = rockchip_pcie_readl_apb(rockchip, PCIE_CLIENT_INTR_STATUS_MISC); > + > + dev_dbg(dev, "PCIE_CLIENT_INTR_STATUS_MISC: %#x\n", reg); > + dev_dbg(dev, "LTSSM_STATUS: %#x\n", rockchip_pcie_get_ltssm(rockchip)); > + > + if (reg & PCIE_LINK_REQ_RST_NOT_INT) { > + dev_dbg(dev, "hot reset or link-down reset\n"); > + dw_pcie_ep_linkdown(&pci->ep); > + } > + > + if (reg & PCIE_RDLH_LINK_UP_CHGED) { > + val = rockchip_pcie_get_ltssm(rockchip); > + if ((val & PCIE_LINKUP) == PCIE_LINKUP) { > + dev_dbg(dev, "link up\n"); > + dw_pcie_ep_linkup(&pci->ep); > + } > + } > + > + rockchip_pcie_writel_apb(rockchip, reg, PCIE_CLIENT_INTR_STATUS_MISC); It is recommended to clear the IRQs at the start of the handler (after status read). - Mani -- மணிவண்ணன் சதாசிவம் 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 83E47C27C52 for ; Wed, 5 Jun 2024 08:18:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=eKMZzJBGVhj03E5EhDB4E3wEcp63U90X6rXDrU911zg=; b=T+a1XXh5gxN4mt 2iTD9uqFVfeWQTdu8SOwWWTbpMg4IX/+YbUgzBs1RgzSdMOL/tWOt/oageL1O9suq4s0fysRtoj30 AliQbaphr1rpVU7bevAD/Hvee8+TSyn6qjl/v5IV2/DdpWvJyPYUv7HRZc+A4Wpmq5VqmcFpMBm2T JjVA28poCuTK7YWtf7Q5IVfcw527+NMNYxbTvOBoAIV5G9mlN/pd+2m5MLHGXtIrIwXVPxWQa/t4A RDBoH2gfVigvBPMc+MGEBimgC2q0jVfLidbL6Sli57i6SBo9NHyC5YH/cstfRaUGtlGK8yQrU8ST6 REHgPUi1aGmO+hMd8InA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sElqc-000000059Qa-3pFN; Wed, 05 Jun 2024 08:18:18 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sElqU-000000059IY-1QCV for linux-rockchip@lists.infradead.org; Wed, 05 Jun 2024 08:18:12 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 294A16172D; Wed, 5 Jun 2024 08:18:09 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8A334C32781; Wed, 5 Jun 2024 08:18:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717575488; bh=AaNMFa474izpGRkn1s2bqhLMgtZao6BeoKtAM/4bkRI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=QuXzzy2QmnMeVrq08FbdVt/73QHryni6SoM0SVxGGuiz6A4ghxNqCCZLNCEecbtu4 IdgdnbLINDiAizZoS+N79/csAIyM4fv+50RhuZY1Z/d5cyYdzmFXLSezPJP9czv3cy NF2BUTwaug+THss1Oo4UscXBvOJctBQrTyB21nc8fEMRkZj45V4MVoK4vY6hijv331 Ldvx61iNLXJgcnHTMN8JvVtuqlk+rqy55z2CbuSVMc55eI7TPwiUZ3x6loS3DoX9PE Dsjim1vDbwOHx2HXWV/DDwFKYd8ghDGYwXgDHgqxWQA08+Lz8M43+p2xmiB/rsKaRL woG/EIr73aK6w== Date: Wed, 5 Jun 2024 13:47:53 +0530 From: Manivannan Sadhasivam To: Niklas Cassel Cc: Jingoo Han , Manivannan Sadhasivam , Bjorn Helgaas , Lorenzo Pieralisi , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Heiko Stuebner , Kishon Vijay Abraham I , Arnd Bergmann , Damien Le Moal , Jon Lin , Shawn Lin , Simon Xue , linux-pci@vger.kernel.org, devicetree@vger.kernel.org, linux-rockchip@lists.infradead.org Subject: Re: [PATCH v4 10/13] PCI: dw-rockchip: Add endpoint mode support Message-ID: <20240605081753.GK5085@thinkpad> References: <20240529-rockchip-pcie-ep-v1-v4-0-3dc00fe21a78@kernel.org> <20240529-rockchip-pcie-ep-v1-v4-10-3dc00fe21a78@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240529-rockchip-pcie-ep-v1-v4-10-3dc00fe21a78@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240605_011810_843841_2E471DFC X-CRM114-Status: GOOD ( 23.06 ) 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 T24gV2VkLCBNYXkgMjksIDIwMjQgYXQgMTA6Mjk6MDRBTSArMDIwMCwgTmlrbGFzIENhc3NlbCB3 cm90ZToKPiBUaGUgUENJZSBjb250cm9sbGVyIGluIHJrMzU2OCBhbmQgcmszNTg4IGNhbiBvcGVy YXRlIGluIGVuZHBvaW50IG1vZGUuCj4gVGhpcyBlbmRwb2ludCBtb2RlIHN1cHBvcnQgaGVhdmls eSBsZXZlcmFnZXMgdGhlIGV4aXN0aW5nIGNvZGUgaW4KPiBwY2llLWRlc2lnbndhcmUtZXAuYy4K PiAKPiBBZGQgc3VwcG9ydCBmb3IgZW5kcG9pbnQgbW9kZSB0byB0aGUgZXhpc3RpbmcgcGNpZS1k dy1yb2NrY2hpcCBnbHVlCj4gZHJpdmVyLgo+IAo+IFNpZ25lZC1vZmYtYnk6IE5pa2xhcyBDYXNz ZWwgPGNhc3NlbEBrZXJuZWwub3JnPgoKQ291cGxlIG9mIGNvbW1lbnRzIGJlbG93LiBXaXRoIHRo b3NlIGFkZHJlc3NlZCwKClJldmlld2VkLWJ5OiBNYW5pdmFubmFuIFNhZGhhc2l2YW0gPG1hbml2 YW5uYW4uc2FkaGFzaXZhbUBsaW5hcm8ub3JnPgoKPiAtLS0KPiAgZHJpdmVycy9wY2kvY29udHJv bGxlci9kd2MvS2NvbmZpZyAgICAgICAgICAgIHwgIDE3ICsrLQo+ICBkcml2ZXJzL3BjaS9jb250 cm9sbGVyL2R3Yy9wY2llLWR3LXJvY2tjaGlwLmMgfCAyMTAgKysrKysrKysrKysrKysrKysrKysr KysrKysKPiAgMiBmaWxlcyBjaGFuZ2VkLCAyMjQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMo LSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvS2NvbmZpZyBi L2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL0tjb25maWcKPiBpbmRleCA4YWZhY2M5MGM2M2Iu LjlmYWUwZDk3NzI3MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9L Y29uZmlnCj4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvS2NvbmZpZwo+IEBAIC0z MTEsMTYgKzMxMSwyNyBAQCBjb25maWcgUENJRV9SQ0FSX0dFTjRfRVAKPiAgCSAgU29Dcy4gVG8g Y29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVs ZQo+ICAJICB3aWxsIGJlIGNhbGxlZCBwY2llLXJjYXItZ2VuNC5rby4gVGhpcyB1c2VzIHRoZSBE ZXNpZ25XYXJlIGNvcmUuCj4gIAo+ICtjb25maWcgUENJRV9ST0NLQ0hJUF9EVwo+ICsJYm9vbAoK V2hlcmUgaXMgdGhpcyBzeW1ib2wgdXNlZD8KCj4gKwo+ICBjb25maWcgUENJRV9ST0NLQ0hJUF9E V19IT1NUCj4gLQlib29sICJSb2NrY2hpcCBEZXNpZ25XYXJlIFBDSWUgY29udHJvbGxlciIKPiAt CXNlbGVjdCBQQ0lFX0RXCj4gKwlib29sICJSb2NrY2hpcCBEZXNpZ25XYXJlIFBDSWUgY29udHJv bGxlciAoaG9zdCBtb2RlKSIKPiAgCXNlbGVjdCBQQ0lFX0RXX0hPU1QKPiAgCWRlcGVuZHMgb24g UENJX01TSQo+ICAJZGVwZW5kcyBvbiBBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVAo+ICAJ ZGVwZW5kcyBvbiBPRgo+ICAJaGVscAo+ICAJICBFbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBEZXNp Z25XYXJlIFBDSWUgY29udHJvbGxlciBpbiB0aGUKPiAtCSAgUm9ja2NoaXAgU29DIGV4Y2VwdCBS SzMzOTkuCj4gKwkgIFJvY2tjaGlwIFNvQyAoZXhjZXB0IFJLMzM5OSkgdG8gd29yayBpbiBob3N0 IG1vZGUuCj4gKwo+ICtjb25maWcgUENJRV9ST0NLQ0hJUF9EV19FUAo+ICsJYm9vbCAiUm9ja2No aXAgRGVzaWduV2FyZSBQQ0llIGNvbnRyb2xsZXIgKGVuZHBvaW50IG1vZGUpIgo+ICsJc2VsZWN0 IFBDSUVfRFdfRVAKPiArCWRlcGVuZHMgb24gQVJDSF9ST0NLQ0hJUCB8fCBDT01QSUxFX1RFU1QK PiArCWRlcGVuZHMgb24gT0YKPiArCWhlbHAKPiArCSAgRW5hYmxlcyBzdXBwb3J0IGZvciB0aGUg RGVzaWduV2FyZSBQQ0llIGNvbnRyb2xsZXIgaW4gdGhlCj4gKwkgIFJvY2tjaGlwIFNvQyAoZXhj ZXB0IFJLMzM5OSkgdG8gd29yayBpbiBlbmRwb2ludCBtb2RlLgo+ICAKPiAgY29uZmlnIFBDSV9F WFlOT1MKPiAgCXRyaXN0YXRlICJTYW1zdW5nIEV4eW5vcyBQQ0llIGNvbnRyb2xsZXIiCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUtZHctcm9ja2NoaXAuYyBi L2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL3BjaWUtZHctcm9ja2NoaXAuYwo+IGluZGV4IGUx MzM1MTE2OTJhZi4uMzQ3NzIxMjA3MTYxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRy b2xsZXIvZHdjL3BjaWUtZHctcm9ja2NoaXAuYwo+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvZHdjL3BjaWUtZHctcm9ja2NoaXAuYwoKWy4uLl0KCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBy b2NrY2hpcF9wY2llX2VwX3N5c19pcnFfdGhyZWFkKGludCBpcnEsIHZvaWQgKmFyZykKPiArewo+ ICsJc3RydWN0IHJvY2tjaGlwX3BjaWUgKnJvY2tjaGlwID0gYXJnOwo+ICsJc3RydWN0IGR3X3Bj aWUgKnBjaSA9ICZyb2NrY2hpcC0+cGNpOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gcGNpLT5k ZXY7Cj4gKwl1MzIgcmVnLCB2YWw7Cj4gKwo+ICsJcmVnID0gcm9ja2NoaXBfcGNpZV9yZWFkbF9h cGIocm9ja2NoaXAsIFBDSUVfQ0xJRU5UX0lOVFJfU1RBVFVTX01JU0MpOwo+ICsKPiArCWRldl9k YmcoZGV2LCAiUENJRV9DTElFTlRfSU5UUl9TVEFUVVNfTUlTQzogJSN4XG4iLCByZWcpOwo+ICsJ ZGV2X2RiZyhkZXYsICJMVFNTTV9TVEFUVVM6ICUjeFxuIiwgcm9ja2NoaXBfcGNpZV9nZXRfbHRz c20ocm9ja2NoaXApKTsKPiArCj4gKwlpZiAocmVnICYgUENJRV9MSU5LX1JFUV9SU1RfTk9UX0lO VCkgewo+ICsJCWRldl9kYmcoZGV2LCAiaG90IHJlc2V0IG9yIGxpbmstZG93biByZXNldFxuIik7 Cj4gKwkJZHdfcGNpZV9lcF9saW5rZG93bigmcGNpLT5lcCk7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJl ZyAmIFBDSUVfUkRMSF9MSU5LX1VQX0NIR0VEKSB7Cj4gKwkJdmFsID0gcm9ja2NoaXBfcGNpZV9n ZXRfbHRzc20ocm9ja2NoaXApOwo+ICsJCWlmICgodmFsICYgUENJRV9MSU5LVVApID09IFBDSUVf TElOS1VQKSB7Cj4gKwkJCWRldl9kYmcoZGV2LCAibGluayB1cFxuIik7Cj4gKwkJCWR3X3BjaWVf ZXBfbGlua3VwKCZwY2ktPmVwKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcm9ja2NoaXBfcGNpZV93 cml0ZWxfYXBiKHJvY2tjaGlwLCByZWcsIFBDSUVfQ0xJRU5UX0lOVFJfU1RBVFVTX01JU0MpOwoK SXQgaXMgcmVjb21tZW5kZWQgdG8gY2xlYXIgdGhlIElSUXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBo YW5kbGVyIChhZnRlciBzdGF0dXMKcmVhZCkuCgotIE1hbmkKCi0tIArgrq7grqPgrr/grrXgrqPg r43grqPgrqngr40g4K6a4K6k4K6+4K6a4K6/4K614K6u4K+NCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QK TGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJvY2tjaGlwCg==