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 1E80D18E08 for ; Fri, 10 Nov 2023 13:18:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ESo/Ftqp" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 113A2C433C8; Fri, 10 Nov 2023 13:18:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1699622294; bh=CZTQjLyXB772MUzACEDykLM1EWWVojjYAEQmPWXrtVE=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=ESo/FtqpFvL5RJX1bYw98hPf7xCY2zpitJww7hvi6c6LQhi7codrf26oj/tjbpmM/ XCdlBAyoSfC6Sgqd9X7xgb7lvpelg2cdgFqQMMGs3IEhBTy81tNDXCOfbtvrww1O2C Bzav/4dQ9nlzJP7YQjtMbh4J8ux8IYEp3XvwInnPSTfezN7oQt1fOp4OOIOmf81oVT EACUymKGsOqYtybumFin5Z4RIQgTXt0jNUfe9a9DS52RyMBN9Y8A6fFCZsB7ytpxvG rquDzWYhy9YxPon0X99cGJoI9iiosHVUF2lcVWvJOZHJ9Zgk6kGZhgYbMNiKhBu4Q5 SyG3WgYlYWf9A== Date: Fri, 10 Nov 2023 18:48:03 +0530 From: Manivannan Sadhasivam To: Dmitry Baryshkov Cc: Manivannan Sadhasivam , Can Guo , quic_cang@quicinc.com, bvanassche@acm.org, stanley.chu@mediatek.com, adrian.hunter@intel.com, beanhuo@micron.com, avri.altman@wdc.com, junwoo80.lee@samsung.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, Andy Gross , Bjorn Andersson , Konrad Dybcio , Vinod Koul , Kishon Vijay Abraham I , "open list:ARM/QUALCOMM SUPPORT" , "open list:GENERIC PHY FRAMEWORK" , open list Subject: Re: [PATCH v2 6/7] phy: qualcomm: phy-qcom-qmp-ufs: Add High Speed Gear 5 support for SM8550 Message-ID: <20231110131803.GA5025@thinkpad> References: <1699332374-9324-7-git-send-email-cang@qti.qualcomm.com> <20231108054942.GF3296@thinkpad> <20231109032418.GA3752@thinkpad> <20231109104250.GF3752@thinkpad> <20231109160430.GG3752@thinkpad> Precedence: bulk X-Mailing-List: linux-arm-msm@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: On Fri, Nov 10, 2023 at 12:11:46AM +0200, Dmitry Baryshkov wrote: > On Thu, 9 Nov 2023 at 18:04, Manivannan Sadhasivam wrote: > > > > On Thu, Nov 09, 2023 at 01:00:51PM +0200, Dmitry Baryshkov wrote: > > > On Thu, 9 Nov 2023 at 12:43, Manivannan Sadhasivam wrote: > > > > > > > > On Thu, Nov 09, 2023 at 11:40:51AM +0200, Dmitry Baryshkov wrote: > > > > > On Thu, 9 Nov 2023 at 05:24, Manivannan Sadhasivam wrote: > > > > > > > > > > > > On Wed, Nov 08, 2023 at 08:56:16AM +0200, Dmitry Baryshkov wrote: > > > > > > > On Wed, 8 Nov 2023 at 07:49, Manivannan Sadhasivam wrote: > > > > > > > > > > > > > > > > On Tue, Nov 07, 2023 at 03:18:09PM +0200, Dmitry Baryshkov wrote: > > > > > > > > > On Tue, 7 Nov 2023 at 06:47, Can Guo wrote: > > > > > > > > > > > > > > > > > > > > From: Can Guo > > > > > > > > > > > > > > > > > > > > On SM8550, two sets of UFS PHY settings are provided, one set is to support > > > > > > > > > > HS-G5, another set is to support HS-G4 and lower gears. The two sets of PHY > > > > > > > > > > settings are programming different values to different registers, mixing > > > > > > > > > > the two sets and/or overwriting one set with another set is definitely not > > > > > > > > > > blessed by UFS PHY designers. In order to add HS-G5 support for SM8550, we > > > > > > > > > > need to split the two sets into their dedicated tables, and leave only the > > > > > > > > > > common settings in the .tlbs. To have the PHY programmed with the correct > > > > > > > > > > set of PHY settings, the submode passed to PHY driver must be either HS-G4 > > > > > > > > > > or HS-G5. > > > > > > > > > > > > > > > > > > > > > > > > > > You should also mention that this issue is also present in G4 supported targets. > > > > > > > > And a note that it will get fixed later. > > > > > > > > > > > > > > > > > > Signed-off-by: Can Guo > > > > > > > > > > --- > > > > > > > > > > drivers/phy/qualcomm/phy-qcom-qmp-pcs-ufs-v6.h | 2 + > > > > > > > > > > drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v6.h | 2 + > > > > > > > > > > .../qualcomm/phy-qcom-qmp-qserdes-txrx-ufs-v6.h | 12 +++ > > > > > > > > > > drivers/phy/qualcomm/phy-qcom-qmp-ufs.c | 112 ++++++++++++++++++--- > > > > > > > > > > 4 files changed, 115 insertions(+), 13 deletions(-) > > > > > > > > > > > > > > > > > > > > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-pcs-ufs-v6.h b/drivers/phy/qualcomm/phy-qcom-qmp-pcs-ufs-v6.h > > > > > > > > > > index c23d5e4..e563af5 100644 > > > > > > > > > > --- a/drivers/phy/qualcomm/phy-qcom-qmp-pcs-ufs-v6.h > > > > > > > > > > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-pcs-ufs-v6.h > > > > > > > > > > @@ -18,6 +18,7 @@ > > > > > > > > > > #define QPHY_V6_PCS_UFS_BIST_FIXED_PAT_CTRL 0x060 > > > > > > > > > > #define QPHY_V6_PCS_UFS_TX_HSGEAR_CAPABILITY 0x074 > > > > > > > > > > #define QPHY_V6_PCS_UFS_RX_HSGEAR_CAPABILITY 0x0bc > > > > > > > > > > +#define QPHY_V6_PCS_UFS_RX_HS_G5_SYNC_LENGTH_CAPABILITY 0x12c > > > > > > > > > > #define QPHY_V6_PCS_UFS_DEBUG_BUS_CLKSEL 0x158 > > > > > > > > > > #define QPHY_V6_PCS_UFS_LINECFG_DISABLE 0x17c > > > > > > > > > > #define QPHY_V6_PCS_UFS_RX_MIN_HIBERN8_TIME 0x184 > > > > > > > > > > @@ -27,5 +28,6 @@ > > > > > > > > > > #define QPHY_V6_PCS_UFS_READY_STATUS 0x1a8 > > > > > > > > > > #define QPHY_V6_PCS_UFS_TX_MID_TERM_CTRL1 0x1f4 > > > > > > > > > > #define QPHY_V6_PCS_UFS_MULTI_LANE_CTRL1 0x1fc > > > > > > > > > > +#define QPHY_V6_PCS_UFS_RX_HSG5_SYNC_WAIT_TIME 0x220 > > > > > > > > > > > > > > > > > > > > #endif > > > > > > > > > > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v6.h b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v6.h > > > > > > > > > > index f420f8f..ef392ce 100644 > > > > > > > > > > --- a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v6.h > > > > > > > > > > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v6.h > > > > > > > > > > @@ -56,6 +56,8 @@ > > > > > > > > > > #define QSERDES_V6_COM_SYS_CLK_CTRL 0xe4 > > > > > > > > > > #define QSERDES_V6_COM_SYSCLK_BUF_ENABLE 0xe8 > > > > > > > > > > #define QSERDES_V6_COM_PLL_IVCO 0xf4 > > > > > > > > > > +#define QSERDES_V6_COM_CMN_IETRIM 0xfc > > > > > > > > > > +#define QSERDES_V6_COM_CMN_IPTRIM 0x100 > > > > > > > > > > #define QSERDES_V6_COM_SYSCLK_EN_SEL 0x110 > > > > > > > > > > #define QSERDES_V6_COM_RESETSM_CNTRL 0x118 > > > > > > > > > > #define QSERDES_V6_COM_LOCK_CMP_EN 0x120 > > > > > > > > > > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-txrx-ufs-v6.h b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-txrx-ufs-v6.h > > > > > > > > > > index 15bcb4b..48f31c8 100644 > > > > > > > > > > --- a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-txrx-ufs-v6.h > > > > > > > > > > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-txrx-ufs-v6.h > > > > > > > > > > @@ -10,10 +10,20 @@ > > > > > > > > > > #define QSERDES_UFS_V6_TX_RES_CODE_LANE_RX 0x2c > > > > > > > > > > #define QSERDES_UFS_V6_TX_RES_CODE_LANE_OFFSET_TX 0x30 > > > > > > > > > > #define QSERDES_UFS_V6_TX_RES_CODE_LANE_OFFSET_RX 0x34 > > > > > > > > > > +#define QSERDES_UFS_V6_TX_LANE_MODE_1 0x7c > > > > > > > > > > +#define QSERDES_UFS_V6_TX_FR_DCC_CTRL 0x108 > > > > > > > > > > > > > > > > > > > > #define QSERDES_UFS_V6_RX_UCDR_FASTLOCK_FO_GAIN_RATE2 0x08 > > > > > > > > > > #define QSERDES_UFS_V6_RX_UCDR_FASTLOCK_FO_GAIN_RATE4 0x10 > > > > > > > > > > +#define QSERDES_UFS_V6_RX_UCDR_FASTLOCK_SO_GAIN_RATE4 0x24 > > > > > > > > > > +#define QSERDES_UFS_V6_RX_UCDR_FASTLOCK_COUNT_HIGH_RATE4 0x54 > > > > > > > > > > +#define QSERDES_UFS_V6_RX_UCDR_FO_GAIN_RATE2 0xd4 > > > > > > > > > > +#define QSERDES_UFS_V6_RX_UCDR_FO_GAIN_RATE4 0xdc > > > > > > > > > > +#define QSERDES_UFS_V6_RX_UCDR_SO_GAIN_RATE4 0xf0 > > > > > > > > > > +#define QSERDES_UFS_V6_RX_UCDR_PI_CONTROLS 0xf4 > > > > > > > > > > #define QSERDES_UFS_V6_RX_VGA_CAL_MAN_VAL 0x178 > > > > > > > > > > +#define QSERDES_UFS_V6_RX_EQ_OFFSET_ADAPTOR_CNTRL1 0x1bc > > > > > > > > > > +#define QSERDES_UFS_V6_RX_OFFSET_ADAPTOR_CNTRL3 0x1c4 > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE_0_1_B0 0x208 > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE_0_1_B1 0x20c > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE_0_1_B3 0x214 > > > > > > > > > > @@ -25,6 +35,8 @@ > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE3_B5 0x264 > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE3_B8 0x270 > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE4_B3 0x280 > > > > > > > > > > +#define QSERDES_UFS_V6_RX_MODE_RATE4_B4 0x284 > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE4_B6 0x28c > > > > > > > > > > +#define QSERDES_UFS_V6_RX_DLL0_FTUNE_CTRL 0x2f8 > > > > > > > > > > > > > > > > > > > > #endif > > > > > > > > > > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c b/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c > > > > > > > > > > index 3927eba..e0a01497 100644 > > > > > > > > > > --- a/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c > > > > > > > > > > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c > > > > > > > > > > @@ -649,32 +649,51 @@ static const struct qmp_phy_init_tbl sm8550_ufsphy_serdes[] = { > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_SEL_1, 0x11), > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_HS_SWITCH_SEL_1, 0x00), > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP_EN, 0x01), > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_MAP, 0x04), > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_IVCO, 0x0f), > > > > > > > > > > + > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_INITVAL2, 0x00), > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE0, 0x41), > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE0, 0x0a), > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE0, 0x18), > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE0, 0x14), > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE0, 0x7f), > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE0, 0x06), > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE0, 0x4c), > > > > > > > > > > +}; > > > > > > > > > > + > > > > > > > > > > +static const struct qmp_phy_init_tbl sm8550_ufsphy_hs_b_serdes[] = { > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_MAP, 0x44), > > > > > > > > > > +}; > > > > > > > > > > + > > > > > > > > > > +static const struct qmp_phy_init_tbl sm8550_ufsphy_g4_serdes[] = { > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_MAP, 0x04), > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_IVCO, 0x0f), > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE0, 0x0a), > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE0, 0x18), > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE0, 0x14), > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE0, 0x99), > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE0, 0x07), > > > > > > > > > > > > > > > > > > Aside from moving these registers to the HS_G4 table, you are also > > > > > > > > > changing these registers. It makes me think that there was an error in > > > > > > > > > the original programming sequence. > > > > > > > > > If that is correct, could you please split the patch into two pieces: > > > > > > > > > - Fix programming sequence (add proper Fixes tags) > > > > > > > > > - Split G4 and G5 tables. > > > > > > > > > > > > > > > > Ack > > > > > > > > > > > > > > > > > > > > > > > > > > > + > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE1, 0x4c), > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE1, 0x0a), > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE1, 0x18), > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE1, 0x14), > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE1, 0x99), > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE1, 0x07), > > > > > > > > > > > > > > > > > > I see all the MODE1 registers being only present in G4 and G5 tables. > > > > > > > > > Should they be programmed for the modes lower than G4? > > > > > > > > > > > > > > > > > > > > > > > > > We use G4 table for all the modes <= G4. > > > > > > > > > > > > > > Could you please point me how it's handled? > > > > > > > In the patch I see just: > > > > > > > > > > > > > > if (qmp->submode == UFS_HS_G4) > > > > > > > qmp_ufs_serdes_init(qmp, &cfg->tbls_hs_g4); > > > > > > > else if (qmp->submode == UFS_HS_G5) > > > > > > > qmp_ufs_serdes_init(qmp, &cfg->tbls_hs_g5); > > > > > > > > > > > > > > Which looks like two special cases (HS_G4 and HS_G5) and nothing for > > > > > > > anything else. > > > > > > > > > > > > > > > > > > > Yes, and the UFS driver passes only G4/G5. For all the gears <=G4, G4 init > > > > > > sequence will be used and for G5, G5 sequence will be used. > > > > > > > > > > > > > > > > That's what I could not find in the UFS driver. I see a call to > > > > > `phy_set_mode_ext(phy, PHY_MODE_UFS_HS_B, host->phy_gear);` and > > > > > host->phy_gear is initialised to UFS_HS_G2. > > > > > > > > > > > > > You need to check the UFS driver changes in this series to get the complete > > > > picture as the logic is getting changed. > > > > > > > > It is common to get confused because of the way the UFS driver (qcom mostly) > > > > handles the PHY init sequence programming. We used to have only one init > > > > sequence for older targets and life was easy. But when I wanted to add G4 > > > > support for SM8250, I learned that there are 2 separate init sequences. One for > > > > non-G4 and other for G4. So I used the phy_sub_mode property to pass the > > > > relevant mode from the UFS driver to the PHY driver and programmed the sequence > > > > accordingly. This got extended to non-G5 and G5 now. > > > > > > > > Now, the UFS driver will start probing from a low gear for older targets (G2) > > > > and G4/G5 for newer ones then scale up based on the device and host capability. > > > > For older targets, the common table (tbls) will be used if the submode doesn't > > > > match G4/G5. But for newer targets, the UFS driver will _only_ pass G4 or G5 as > > > > the phy_gear, so those specific sequence will only be used. > > > > > > > > Hope I'm clear. > > > > > > Yes, it is now clear, thank you! > > > > > > Would it be possible / feasible / logical to maintain this idea even > > > for newer platforms (leaving the HS_A / HS_B aside)? > > > > > > tbls - works for HS_G2 > > > tbls + tbls_g4 - works for HS_G4 > > > tbls + tbls_g5 - works for HS_G5 > > > > > > > No. The PHY team only gives 2 init sequences for any SoC now. > > Ack. Then the code should become > if (HS_G5) > program(tbls_hs_g5) > else > program(tbls_hs_g4); > This should work. Even if we have to accomodate G6 in the future, we can use "else if" for that and keep G4 as the "else" condition. This logic can also be optimized in the future. - Mani > > > > - Mani > > > > > I mean here that the PHY driver should not depend on the knowledge > > > that the UFS driver will not be setting HS_G2 for some particular > > > platform and ideally it should continue working if at some point we > > > change the UFS driver to set HS_G2. > > > > > > > > > > > > > > - Mani > > > > > > > > > Maybe we should change the condition here (in the PHY driver) to: > > > > > > > > > > if (qmp->submode <= UFS_HS_G4) > > > > > > > > > > ? > > > > > -- > > > > > With best wishes > > > > > Dmitry > > > > > > > > -- > > > > மணிவண்ணன் சதாசிவம் > > > > > > > > > > > > -- > > > With best wishes > > > Dmitry > > > > -- > > மணிவண்ணன் சதாசிவம் > > > > -- > With best wishes > Dmitry -- மணிவண்ணன் சதாசிவம் 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 DCC41C4167B for ; Fri, 10 Nov 2023 13: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=87+aI38HNIPyikafogvw03MXh1qTVR+rYud/463gKx0=; b=C5fdPdxkrgRzbB IGG6Ac6OEPMJpBjWZuTuUnpZKDww/DhdKPlBtTKAkMqeJ2xMr3qqSoFIc0s3OqV2obGTAnMbCBw3T w+KjrQWZ0h+pSApo4yMrsbxE7dCWDNoxnGdNfbIoAvTFbnufux41ksRcckCfRyxxlNiAci25loxgM DuAbUNfe95XyBo9agosNIv8wCXaZeZRa/qNzEgYCfGspEHvwax5KUaufLThD22UOIK/wqkf3jpMF9 PhqSr9mwPJpNWfB+sKnEDmcwy3J5FuWsDOWbFo9OA+I9oKI31gs2aWLUm9g32iRNW65/JjMMmjzn3 /JUNxcgefUpUe0HEbfXA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r1ROy-008pUr-1t; Fri, 10 Nov 2023 13:18:24 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r1ROv-008pTe-1S for linux-phy@lists.infradead.org; Fri, 10 Nov 2023 13:18:24 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id 35F76B81A94; Fri, 10 Nov 2023 13:18:15 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 113A2C433C8; Fri, 10 Nov 2023 13:18:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1699622294; bh=CZTQjLyXB772MUzACEDykLM1EWWVojjYAEQmPWXrtVE=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=ESo/FtqpFvL5RJX1bYw98hPf7xCY2zpitJww7hvi6c6LQhi7codrf26oj/tjbpmM/ XCdlBAyoSfC6Sgqd9X7xgb7lvpelg2cdgFqQMMGs3IEhBTy81tNDXCOfbtvrww1O2C Bzav/4dQ9nlzJP7YQjtMbh4J8ux8IYEp3XvwInnPSTfezN7oQt1fOp4OOIOmf81oVT EACUymKGsOqYtybumFin5Z4RIQgTXt0jNUfe9a9DS52RyMBN9Y8A6fFCZsB7ytpxvG rquDzWYhy9YxPon0X99cGJoI9iiosHVUF2lcVWvJOZHJ9Zgk6kGZhgYbMNiKhBu4Q5 SyG3WgYlYWf9A== Date: Fri, 10 Nov 2023 18:48:03 +0530 From: Manivannan Sadhasivam To: Dmitry Baryshkov Cc: Manivannan Sadhasivam , Can Guo , quic_cang@quicinc.com, bvanassche@acm.org, stanley.chu@mediatek.com, adrian.hunter@intel.com, beanhuo@micron.com, avri.altman@wdc.com, junwoo80.lee@samsung.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, Andy Gross , Bjorn Andersson , Konrad Dybcio , Vinod Koul , Kishon Vijay Abraham I , "open list:ARM/QUALCOMM SUPPORT" , "open list:GENERIC PHY FRAMEWORK" , open list Subject: Re: [PATCH v2 6/7] phy: qualcomm: phy-qcom-qmp-ufs: Add High Speed Gear 5 support for SM8550 Message-ID: <20231110131803.GA5025@thinkpad> References: <1699332374-9324-7-git-send-email-cang@qti.qualcomm.com> <20231108054942.GF3296@thinkpad> <20231109032418.GA3752@thinkpad> <20231109104250.GF3752@thinkpad> <20231109160430.GG3752@thinkpad> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231110_051821_879446_A3609A6A X-CRM114-Status: GOOD ( 48.67 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org T24gRnJpLCBOb3YgMTAsIDIwMjMgYXQgMTI6MTE6NDZBTSArMDIwMCwgRG1pdHJ5IEJhcnlzaGtv diB3cm90ZToKPiBPbiBUaHUsIDkgTm92IDIwMjMgYXQgMTg6MDQsIE1hbml2YW5uYW4gU2FkaGFz aXZhbSA8bWFuaUBrZXJuZWwub3JnPiB3cm90ZToKPiA+Cj4gPiBPbiBUaHUsIE5vdiAwOSwgMjAy MyBhdCAwMTowMDo1MVBNICswMjAwLCBEbWl0cnkgQmFyeXNoa292IHdyb3RlOgo+ID4gPiBPbiBU aHUsIDkgTm92IDIwMjMgYXQgMTI6NDMsIE1hbml2YW5uYW4gU2FkaGFzaXZhbSA8bWFuaUBrZXJu ZWwub3JnPiB3cm90ZToKPiA+ID4gPgo+ID4gPiA+IE9uIFRodSwgTm92IDA5LCAyMDIzIGF0IDEx OjQwOjUxQU0gKzAyMDAsIERtaXRyeSBCYXJ5c2hrb3Ygd3JvdGU6Cj4gPiA+ID4gPiBPbiBUaHUs IDkgTm92IDIwMjMgYXQgMDU6MjQsIE1hbml2YW5uYW4gU2FkaGFzaXZhbSA8bWFuaUBrZXJuZWwu b3JnPiB3cm90ZToKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gT24gV2VkLCBOb3YgMDgsIDIwMjMg YXQgMDg6NTY6MTZBTSArMDIwMCwgRG1pdHJ5IEJhcnlzaGtvdiB3cm90ZToKPiA+ID4gPiA+ID4g PiBPbiBXZWQsIDggTm92IDIwMjMgYXQgMDc6NDksIE1hbml2YW5uYW4gU2FkaGFzaXZhbSA8bWFu aUBrZXJuZWwub3JnPiB3cm90ZToKPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBPbiBU dWUsIE5vdiAwNywgMjAyMyBhdCAwMzoxODowOVBNICswMjAwLCBEbWl0cnkgQmFyeXNoa292IHdy b3RlOgo+ID4gPiA+ID4gPiA+ID4gPiBPbiBUdWUsIDcgTm92IDIwMjMgYXQgMDY6NDcsIENhbiBH dW8gPGNhbmdAcXRpLnF1YWxjb21tLmNvbT4gd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gPiA+ID4gPiBGcm9tOiBDYW4gR3VvIDxxdWljX2NhbmdAcXVpY2luYy5jb20+Cj4g PiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiBPbiBTTTg1NTAsIHR3byBzZXRz IG9mIFVGUyBQSFkgc2V0dGluZ3MgYXJlIHByb3ZpZGVkLCBvbmUgc2V0IGlzIHRvIHN1cHBvcnQK PiA+ID4gPiA+ID4gPiA+ID4gPiBIUy1HNSwgYW5vdGhlciBzZXQgaXMgdG8gc3VwcG9ydCBIUy1H NCBhbmQgbG93ZXIgZ2VhcnMuIFRoZSB0d28gc2V0cyBvZiBQSFkKPiA+ID4gPiA+ID4gPiA+ID4g PiBzZXR0aW5ncyBhcmUgcHJvZ3JhbW1pbmcgZGlmZmVyZW50IHZhbHVlcyB0byBkaWZmZXJlbnQg cmVnaXN0ZXJzLCBtaXhpbmcKPiA+ID4gPiA+ID4gPiA+ID4gPiB0aGUgdHdvIHNldHMgYW5kL29y IG92ZXJ3cml0aW5nIG9uZSBzZXQgd2l0aCBhbm90aGVyIHNldCBpcyBkZWZpbml0ZWx5IG5vdAo+ ID4gPiA+ID4gPiA+ID4gPiA+IGJsZXNzZWQgYnkgVUZTIFBIWSBkZXNpZ25lcnMuIEluIG9yZGVy IHRvIGFkZCBIUy1HNSBzdXBwb3J0IGZvciBTTTg1NTAsIHdlCj4gPiA+ID4gPiA+ID4gPiA+ID4g bmVlZCB0byBzcGxpdCB0aGUgdHdvIHNldHMgaW50byB0aGVpciBkZWRpY2F0ZWQgdGFibGVzLCBh bmQgbGVhdmUgb25seSB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gPiBjb21tb24gc2V0dGluZ3MgaW4g dGhlIC50bGJzLiBUbyBoYXZlIHRoZSBQSFkgcHJvZ3JhbW1lZCB3aXRoIHRoZSBjb3JyZWN0Cj4g PiA+ID4gPiA+ID4gPiA+ID4gc2V0IG9mIFBIWSBzZXR0aW5ncywgdGhlIHN1Ym1vZGUgcGFzc2Vk IHRvIFBIWSBkcml2ZXIgbXVzdCBiZSBlaXRoZXIgSFMtRzQKPiA+ID4gPiA+ID4gPiA+ID4gPiBv ciBIUy1HNS4KPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4g PiA+IFlvdSBzaG91bGQgYWxzbyBtZW50aW9uIHRoYXQgdGhpcyBpc3N1ZSBpcyBhbHNvIHByZXNl bnQgaW4gRzQgc3VwcG9ydGVkIHRhcmdldHMuCj4gPiA+ID4gPiA+ID4gPiBBbmQgYSBub3RlIHRo YXQgaXQgd2lsbCBnZXQgZml4ZWQgbGF0ZXIuCj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ ID4gPiA+IFNpZ25lZC1vZmYtYnk6IENhbiBHdW8gPHF1aWNfY2FuZ0BxdWljaW5jLmNvbT4KPiA+ ID4gPiA+ID4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gPiA+ID4gPiAgZHJpdmVycy9waHkvcXVh bGNvbW0vcGh5LXFjb20tcW1wLXBjcy11ZnMtdjYuaCAgICAgfCAgIDIgKwo+ID4gPiA+ID4gPiA+ ID4gPiA+ICBkcml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtcXNlcmRlcy1jb20tdjYu aCB8ICAgMiArCj4gPiA+ID4gPiA+ID4gPiA+ID4gIC4uLi9xdWFsY29tbS9waHktcWNvbS1xbXAt cXNlcmRlcy10eHJ4LXVmcy12Ni5oICAgIHwgIDEyICsrKwo+ID4gPiA+ID4gPiA+ID4gPiA+ICBk cml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtdWZzLmMgICAgICAgICAgICB8IDExMiAr KysrKysrKysrKysrKysrKystLS0KPiA+ID4gPiA+ID4gPiA+ID4gPiAgNCBmaWxlcyBjaGFuZ2Vk LCAxMTUgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCj4gPiA+ID4gPiA+ID4gPiA+ID4K PiA+ID4gPiA+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcXVhbGNvbW0vcGh5 LXFjb20tcW1wLXBjcy11ZnMtdjYuaCBiL2RyaXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXFt cC1wY3MtdWZzLXY2LmgKPiA+ID4gPiA+ID4gPiA+ID4gPiBpbmRleCBjMjNkNWU0Li5lNTYzYWY1 IDEwMDY0NAo+ID4gPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvcGh5L3F1YWxjb21tL3Bo eS1xY29tLXFtcC1wY3MtdWZzLXY2LmgKPiA+ID4gPiA+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJz L3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtcGNzLXVmcy12Ni5oCj4gPiA+ID4gPiA+ID4gPiA+ ID4gQEAgLTE4LDYgKzE4LDcgQEAKPiA+ID4gPiA+ID4gPiA+ID4gPiAgI2RlZmluZSBRUEhZX1Y2 X1BDU19VRlNfQklTVF9GSVhFRF9QQVRfQ1RSTCAgICAgICAgICAgIDB4MDYwCj4gPiA+ID4gPiA+ ID4gPiA+ID4gICNkZWZpbmUgUVBIWV9WNl9QQ1NfVUZTX1RYX0hTR0VBUl9DQVBBQklMSVRZICAg ICAgICAgICAweDA3NAo+ID4gPiA+ID4gPiA+ID4gPiA+ICAjZGVmaW5lIFFQSFlfVjZfUENTX1VG U19SWF9IU0dFQVJfQ0FQQUJJTElUWSAgICAgICAgICAgMHgwYmMKPiA+ID4gPiA+ID4gPiA+ID4g PiArI2RlZmluZSBRUEhZX1Y2X1BDU19VRlNfUlhfSFNfRzVfU1lOQ19MRU5HVEhfQ0FQQUJJTElU WSAgICAgICAgMHgxMmMKPiA+ID4gPiA+ID4gPiA+ID4gPiAgI2RlZmluZSBRUEhZX1Y2X1BDU19V RlNfREVCVUdfQlVTX0NMS1NFTCAgICAgICAgICAgICAgIDB4MTU4Cj4gPiA+ID4gPiA+ID4gPiA+ ID4gICNkZWZpbmUgUVBIWV9WNl9QQ1NfVUZTX0xJTkVDRkdfRElTQUJMRSAgICAgICAgICAgICAg ICAgICAgICAgIDB4MTdjCj4gPiA+ID4gPiA+ID4gPiA+ID4gICNkZWZpbmUgUVBIWV9WNl9QQ1Nf VUZTX1JYX01JTl9ISUJFUk44X1RJTUUgICAgICAgICAgICAweDE4NAo+ID4gPiA+ID4gPiA+ID4g PiA+IEBAIC0yNyw1ICsyOCw2IEBACj4gPiA+ID4gPiA+ID4gPiA+ID4gICNkZWZpbmUgUVBIWV9W Nl9QQ1NfVUZTX1JFQURZX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweDFhOAo+ID4gPiA+ID4g PiA+ID4gPiA+ICAjZGVmaW5lIFFQSFlfVjZfUENTX1VGU19UWF9NSURfVEVSTV9DVFJMMSAgICAg ICAgICAgICAgMHgxZjQKPiA+ID4gPiA+ID4gPiA+ID4gPiAgI2RlZmluZSBRUEhZX1Y2X1BDU19V RlNfTVVMVElfTEFORV9DVFJMMSAgICAgICAgICAgICAgIDB4MWZjCj4gPiA+ID4gPiA+ID4gPiA+ ID4gKyNkZWZpbmUgUVBIWV9WNl9QQ1NfVUZTX1JYX0hTRzVfU1lOQ19XQUlUX1RJTUUgICAgICAg ICAweDIyMAo+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gICNlbmRpZgo+ ID4gPiA+ID4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHkt cWNvbS1xbXAtcXNlcmRlcy1jb20tdjYuaCBiL2RyaXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29t LXFtcC1xc2VyZGVzLWNvbS12Ni5oCj4gPiA+ID4gPiA+ID4gPiA+ID4gaW5kZXggZjQyMGY4Zi4u ZWYzOTJjZSAxMDA2NDQKPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL3BoeS9xdWFs Y29tbS9waHktcWNvbS1xbXAtcXNlcmRlcy1jb20tdjYuaAo+ID4gPiA+ID4gPiA+ID4gPiA+ICsr KyBiL2RyaXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC1xc2VyZGVzLWNvbS12Ni5oCj4g PiA+ID4gPiA+ID4gPiA+ID4gQEAgLTU2LDYgKzU2LDggQEAKPiA+ID4gPiA+ID4gPiA+ID4gPiAg I2RlZmluZSBRU0VSREVTX1Y2X0NPTV9TWVNfQ0xLX0NUUkwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMHhlNAo+ID4gPiA+ID4gPiA+ID4gPiA+ICAjZGVmaW5lIFFTRVJERVNfVjZfQ09NX1NZ U0NMS19CVUZfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAweGU4Cj4gPiA+ID4gPiA+ID4g PiA+ID4gICNkZWZpbmUgUVNFUkRFU19WNl9DT01fUExMX0lWQ08gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMHhmNAo+ID4gPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIFFT RVJERVNfVjZfQ09NX0NNTl9JRVRSSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZj Cj4gPiA+ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgUVNFUkRFU19WNl9DT01fQ01OX0lQVFJJTSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwCj4gPiA+ID4gPiA+ID4gPiA+ID4gICNk ZWZpbmUgUVNFUkRFU19WNl9DT01fU1lTQ0xLX0VOX1NFTCAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MTEwCj4gPiA+ID4gPiA+ID4gPiA+ID4gICNkZWZpbmUgUVNFUkRFU19WNl9DT01fUkVT RVRTTV9DTlRSTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTE4Cj4gPiA+ID4gPiA+ID4g PiA+ID4gICNkZWZpbmUgUVNFUkRFU19WNl9DT01fTE9DS19DTVBfRU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MTIwCj4gPiA+ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC1xc2VyZGVzLXR4cngtdWZzLXY2LmggYi9kcml2 ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtcXNlcmRlcy10eHJ4LXVmcy12Ni5oCj4gPiA+ ID4gPiA+ID4gPiA+ID4gaW5kZXggMTViY2I0Yi4uNDhmMzFjOCAxMDA2NDQKPiA+ID4gPiA+ID4g PiA+ID4gPiAtLS0gYS9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtcXNlcmRlcy10 eHJ4LXVmcy12Ni5oCj4gPiA+ID4gPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9waHkvcXVhbGNv bW0vcGh5LXFjb20tcW1wLXFzZXJkZXMtdHhyeC11ZnMtdjYuaAo+ID4gPiA+ID4gPiA+ID4gPiA+ IEBAIC0xMCwxMCArMTAsMjAgQEAKPiA+ID4gPiA+ID4gPiA+ID4gPiAgI2RlZmluZSBRU0VSREVT X1VGU19WNl9UWF9SRVNfQ09ERV9MQU5FX1JYICAgICAgICAgICAgICAgICAgICAgMHgyYwo+ID4g PiA+ID4gPiA+ID4gPiA+ICAjZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1RYX1JFU19DT0RFX0xBTkVf T0ZGU0VUX1RYICAgICAgICAgICAgICAweDMwCj4gPiA+ID4gPiA+ID4gPiA+ID4gICNkZWZpbmUg UVNFUkRFU19VRlNfVjZfVFhfUkVTX0NPREVfTEFORV9PRkZTRVRfUlggICAgICAgICAgICAgIDB4 MzQKPiA+ID4gPiA+ID4gPiA+ID4gPiArI2RlZmluZSBRU0VSREVTX1VGU19WNl9UWF9MQU5FX01P REVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3Ywo+ID4gPiA+ID4gPiA+ID4gPiA+ICsj ZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1RYX0ZSX0RDQ19DVFJMICAgICAgICAgICAgICAgICAgICAg ICAgICAweDEwOAo+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gICNkZWZp bmUgUVNFUkRFU19VRlNfVjZfUlhfVUNEUl9GQVNUTE9DS19GT19HQUlOX1JBVEUyICAgICAgICAg IDB4MDgKPiA+ID4gPiA+ID4gPiA+ID4gPiAgI2RlZmluZSBRU0VSREVTX1VGU19WNl9SWF9VQ0RS X0ZBU1RMT0NLX0ZPX0dBSU5fUkFURTQgICAgICAgICAgMHgxMAo+ID4gPiA+ID4gPiA+ID4gPiA+ ICsjZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JYX1VDRFJfRkFTVExPQ0tfU09fR0FJTl9SQVRFNCAg ICAgICAgICAweDI0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgUVNFUkRFU19VRlNfVjZf UlhfVUNEUl9GQVNUTE9DS19DT1VOVF9ISUdIX1JBVEU0ICAgICAgIDB4NTQKPiA+ID4gPiA+ID4g PiA+ID4gPiArI2RlZmluZSBRU0VSREVTX1VGU19WNl9SWF9VQ0RSX0ZPX0dBSU5fUkFURTIgICAg ICAgICAgICAgICAgICAgMHhkNAo+ID4gPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIFFTRVJERVNf VUZTX1Y2X1JYX1VDRFJfRk9fR0FJTl9SQVRFNCAgICAgICAgICAgICAgICAgICAweGRjCj4gPiA+ ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgUVNFUkRFU19VRlNfVjZfUlhfVUNEUl9TT19HQUlOX1JB VEU0ICAgICAgICAgICAgICAgICAgIDB4ZjAKPiA+ID4gPiA+ID4gPiA+ID4gPiArI2RlZmluZSBR U0VSREVTX1VGU19WNl9SWF9VQ0RSX1BJX0NPTlRST0xTICAgICAgICAgICAgICAgICAgICAgMHhm NAo+ID4gPiA+ID4gPiA+ID4gPiA+ICAjZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JYX1ZHQV9DQUxf TUFOX1ZBTCAgICAgICAgICAgICAgICAgICAgICAweDE3OAo+ID4gPiA+ID4gPiA+ID4gPiA+ICsj ZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JYX0VRX09GRlNFVF9BREFQVE9SX0NOVFJMMSAgICAgICAg ICAgICAweDFiYwo+ID4gPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JY X09GRlNFVF9BREFQVE9SX0NOVFJMMyAgICAgICAgICAgICAgICAgICAgICAgIDB4MWM0Cj4gPiA+ ID4gPiA+ID4gPiA+ID4gICNkZWZpbmUgUVNFUkRFU19VRlNfVjZfUlhfTU9ERV9SQVRFXzBfMV9C MCAgICAgICAgICAgICAgICAgICAgIDB4MjA4Cj4gPiA+ID4gPiA+ID4gPiA+ID4gICNkZWZpbmUg UVNFUkRFU19VRlNfVjZfUlhfTU9ERV9SQVRFXzBfMV9CMSAgICAgICAgICAgICAgICAgICAgIDB4 MjBjCj4gPiA+ID4gPiA+ID4gPiA+ID4gICNkZWZpbmUgUVNFUkRFU19VRlNfVjZfUlhfTU9ERV9S QVRFXzBfMV9CMyAgICAgICAgICAgICAgICAgICAgIDB4MjE0Cj4gPiA+ID4gPiA+ID4gPiA+ID4g QEAgLTI1LDYgKzM1LDggQEAKPiA+ID4gPiA+ID4gPiA+ID4gPiAgI2RlZmluZSBRU0VSREVTX1VG U19WNl9SWF9NT0RFX1JBVEUzX0I1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI2 NAo+ID4gPiA+ID4gPiA+ID4gPiA+ICAjZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JYX01PREVfUkFU RTNfQjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjcwCj4gPiA+ID4gPiA+ID4g PiA+ID4gICNkZWZpbmUgUVNFUkRFU19VRlNfVjZfUlhfTU9ERV9SQVRFNF9CMyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgyODAKPiA+ID4gPiA+ID4gPiA+ID4gPiArI2RlZmluZSBR U0VSREVTX1VGU19WNl9SWF9NT0RFX1JBVEU0X0I0ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDI4NAo+ID4gPiA+ID4gPiA+ID4gPiA+ICAjZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JY X01PREVfUkFURTRfQjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhjCj4gPiA+ ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgUVNFUkRFU19VRlNfVjZfUlhfRExMMF9GVFVORV9DVFJM ICAgICAgICAgICAgICAgICAgICAgIDB4MmY4Cj4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ ID4gPiA+ID4gPiAgI2VuZGlmCj4gPiA+ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC11ZnMuYyBiL2RyaXZlcnMvcGh5L3F1YWxjb21t L3BoeS1xY29tLXFtcC11ZnMuYwo+ID4gPiA+ID4gPiA+ID4gPiA+IGluZGV4IDM5MjdlYmEuLmUw YTAxNDk3IDEwMDY0NAo+ID4gPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvcGh5L3F1YWxj b21tL3BoeS1xY29tLXFtcC11ZnMuYwo+ID4gPiA+ID4gPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMv cGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC11ZnMuYwo+ID4gPiA+ID4gPiA+ID4gPiA+IEBAIC02 NDksMzIgKzY0OSw1MSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHFtcF9waHlfaW5pdF90Ymwgc204 NTUwX3Vmc3BoeV9zZXJkZXNbXSA9IHsKPiA+ID4gPiA+ID4gPiA+ID4gPiAgICAgICAgIFFNUF9Q SFlfSU5JVF9DRkcoUVNFUkRFU19WNl9DT01fSFNDTEtfU0VMXzEsIDB4MTEpLAo+ID4gPiA+ID4g PiA+ID4gPiA+ICAgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9IU0NMS19I U19TV0lUQ0hfU0VMXzEsIDB4MDApLAo+ID4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgUU1QX1BI WV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9MT0NLX0NNUF9FTiwgMHgwMSksCj4gPiA+ID4gPiA+ ID4gPiA+ID4gLSAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX1ZDT19UVU5F X01BUCwgMHgwNCksCj4gPiA+ID4gPiA+ID4gPiA+ID4gLSAgICAgICBRTVBfUEhZX0lOSVRfQ0ZH KFFTRVJERVNfVjZfQ09NX1BMTF9JVkNPLCAweDBmKSwKPiA+ID4gPiA+ID4gPiA+ID4gPiArCj4g PiA+ID4gPiA+ID4gPiA+ID4gICAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09N X1ZDT19UVU5FX0lOSVRWQUwyLCAweDAwKSwKPiA+ID4gPiA+ID4gPiA+ID4gPiAgICAgICAgIFFN UF9QSFlfSU5JVF9DRkcoUVNFUkRFU19WNl9DT01fREVDX1NUQVJUX01PREUwLCAweDQxKSwKPiA+ ID4gPiA+ID4gPiA+ID4gPiAtICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19WNl9DT01f Q1BfQ1RSTF9NT0RFMCwgMHgwYSksCj4gPiA+ID4gPiA+ID4gPiA+ID4gICAgICAgICBRTVBfUEhZ X0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX1BMTF9SQ1RSTF9NT0RFMCwgMHgxOCksCj4gPiA+ID4g PiA+ID4gPiA+ID4gICAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX1BMTF9D Q1RSTF9NT0RFMCwgMHgxNCksCj4gPiA+ID4gPiA+ID4gPiA+ID4gICAgICAgICBRTVBfUEhZX0lO SVRfQ0ZHKFFTRVJERVNfVjZfQ09NX0xPQ0tfQ01QMV9NT0RFMCwgMHg3ZiksCj4gPiA+ID4gPiA+ ID4gPiA+ID4gICAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX0xPQ0tfQ01Q Ml9NT0RFMCwgMHgwNiksCj4gPiA+ID4gPiA+ID4gPiA+ID4gLSAgICAgICBRTVBfUEhZX0lOSVRf Q0ZHKFFTRVJERVNfVjZfQ09NX0RFQ19TVEFSVF9NT0RFMCwgMHg0YyksCj4gPiA+ID4gPiA+ID4g PiA+ID4gK307Cj4gPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiA+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IHFtcF9waHlfaW5pdF90Ymwgc204NTUwX3Vmc3BoeV9oc19iX3NlcmRl c1tdID0gewo+ID4gPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VS REVTX1Y2X0NPTV9WQ09fVFVORV9NQVAsIDB4NDQpLAo+ID4gPiA+ID4gPiA+ID4gPiA+ICt9Owo+ ID4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBxbXBfcGh5X2luaXRfdGJsIHNtODU1MF91ZnNwaHlfZzRfc2VyZGVzW10gPSB7Cj4gPiA+ ID4gPiA+ID4gPiA+ID4gKyAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX1ZD T19UVU5FX01BUCwgMHgwNCksCj4gPiA+ID4gPiA+ID4gPiA+ID4gKyAgICAgICBRTVBfUEhZX0lO SVRfQ0ZHKFFTRVJERVNfVjZfQ09NX1BMTF9JVkNPLCAweDBmKSwKPiA+ID4gPiA+ID4gPiA+ID4g PiAgICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19WNl9DT01fQ1BfQ1RSTF9NT0RFMCwg MHgwYSksCj4gPiA+ID4gPiA+ID4gPiA+ID4gLSAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJE RVNfVjZfQ09NX1BMTF9SQ1RSTF9NT0RFMCwgMHgxOCksCj4gPiA+ID4gPiA+ID4gPiA+ID4gLSAg ICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX1BMTF9DQ1RSTF9NT0RFMCwgMHgx NCksCj4gPiA+ID4gPiA+ID4gPiA+ID4gLSAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNf VjZfQ09NX0xPQ0tfQ01QMV9NT0RFMCwgMHg5OSksCj4gPiA+ID4gPiA+ID4gPiA+ID4gLSAgICAg ICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX0xPQ0tfQ01QMl9NT0RFMCwgMHgwNyks Cj4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+IEFzaWRlIGZyb20gbW92aW5nIHRo ZXNlIHJlZ2lzdGVycyB0byB0aGUgSFNfRzQgdGFibGUsIHlvdSBhcmUgYWxzbwo+ID4gPiA+ID4g PiA+ID4gPiBjaGFuZ2luZyB0aGVzZSByZWdpc3RlcnMuIEl0IG1ha2VzIG1lIHRoaW5rIHRoYXQg dGhlcmUgd2FzIGFuIGVycm9yIGluCj4gPiA+ID4gPiA+ID4gPiA+IHRoZSBvcmlnaW5hbCBwcm9n cmFtbWluZyBzZXF1ZW5jZS4KPiA+ID4gPiA+ID4gPiA+ID4gSWYgdGhhdCBpcyBjb3JyZWN0LCBj b3VsZCB5b3UgcGxlYXNlIHNwbGl0IHRoZSBwYXRjaCBpbnRvIHR3byBwaWVjZXM6Cj4gPiA+ID4g PiA+ID4gPiA+IC0gRml4IHByb2dyYW1taW5nIHNlcXVlbmNlIChhZGQgcHJvcGVyIEZpeGVzIHRh Z3MpCj4gPiA+ID4gPiA+ID4gPiA+IC0gU3BsaXQgRzQgYW5kIEc1IHRhYmxlcy4KPiA+ID4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBBY2sKPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgUU1Q X1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9ERUNfU1RBUlRfTU9ERTEsIDB4NGMpLAo+ID4g PiA+ID4gPiA+ID4gPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9D UF9DVFJMX01PREUxLCAweDBhKSwKPiA+ID4gPiA+ID4gPiA+ID4gPiArICAgICAgIFFNUF9QSFlf SU5JVF9DRkcoUVNFUkRFU19WNl9DT01fUExMX1JDVFJMX01PREUxLCAweDE4KSwKPiA+ID4gPiA+ ID4gPiA+ID4gPiArICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19WNl9DT01fUExMX0ND VFJMX01PREUxLCAweDE0KSwKPiA+ID4gPiA+ID4gPiA+ID4gPiArICAgICAgIFFNUF9QSFlfSU5J VF9DRkcoUVNFUkRFU19WNl9DT01fTE9DS19DTVAxX01PREUxLCAweDk5KSwKPiA+ID4gPiA+ID4g PiA+ID4gPiArICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19WNl9DT01fTE9DS19DTVAy X01PREUxLCAweDA3KSwKPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gSSBzZWUg YWxsIHRoZSBNT0RFMSByZWdpc3RlcnMgYmVpbmcgb25seSBwcmVzZW50IGluIEc0IGFuZCBHNSB0 YWJsZXMuCj4gPiA+ID4gPiA+ID4gPiA+IFNob3VsZCB0aGV5IGJlIHByb2dyYW1tZWQgZm9yIHRo ZSBtb2RlcyBsb3dlciB0aGFuIEc0Pwo+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4K PiA+ID4gPiA+ID4gPiA+IFdlIHVzZSBHNCB0YWJsZSBmb3IgYWxsIHRoZSBtb2RlcyA8PSBHNC4K PiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IENvdWxkIHlvdSBwbGVhc2UgcG9pbnQgbWUgaG93 IGl0J3MgaGFuZGxlZD8KPiA+ID4gPiA+ID4gPiBJbiB0aGUgcGF0Y2ggSSBzZWUganVzdDoKPiA+ ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ICAgICAgICBpZiAocW1wLT5zdWJtb2RlID09IFVGU19I U19HNCkKPiA+ID4gPiA+ID4gPiAgICAgICAgICAgICAgICBxbXBfdWZzX3NlcmRlc19pbml0KHFt cCwgJmNmZy0+dGJsc19oc19nNCk7Cj4gPiA+ID4gPiA+ID4gICAgICAgIGVsc2UgaWYgKHFtcC0+ c3VibW9kZSA9PSBVRlNfSFNfRzUpCj4gPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgcW1wX3Vm c19zZXJkZXNfaW5pdChxbXAsICZjZmctPnRibHNfaHNfZzUpOwo+ID4gPiA+ID4gPiA+Cj4gPiA+ ID4gPiA+ID4gV2hpY2ggbG9va3MgbGlrZSB0d28gc3BlY2lhbCBjYXNlcyAoSFNfRzQgYW5kIEhT X0c1KSBhbmQgbm90aGluZyBmb3IKPiA+ID4gPiA+ID4gPiBhbnl0aGluZyBlbHNlLgo+ID4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IFllcywgYW5kIHRoZSBVRlMgZHJpdmVyIHBh c3NlcyBvbmx5IEc0L0c1LiBGb3IgYWxsIHRoZSBnZWFycyA8PUc0LCBHNCBpbml0Cj4gPiA+ID4g PiA+IHNlcXVlbmNlIHdpbGwgYmUgdXNlZCBhbmQgZm9yIEc1LCBHNSBzZXF1ZW5jZSB3aWxsIGJl IHVzZWQuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPgo+ID4gPiA+ID4gVGhhdCdzIHdoYXQgSSBjb3Vs ZCBub3QgZmluZCBpbiB0aGUgVUZTIGRyaXZlci4gSSBzZWUgYSBjYWxsIHRvCj4gPiA+ID4gPiBg cGh5X3NldF9tb2RlX2V4dChwaHksIFBIWV9NT0RFX1VGU19IU19CLCBob3N0LT5waHlfZ2Vhcik7 YCBhbmQKPiA+ID4gPiA+IGhvc3QtPnBoeV9nZWFyIGlzIGluaXRpYWxpc2VkIHRvIFVGU19IU19H Mi4KPiA+ID4gPiA+Cj4gPiA+ID4KPiA+ID4gPiBZb3UgbmVlZCB0byBjaGVjayB0aGUgVUZTIGRy aXZlciBjaGFuZ2VzIGluIHRoaXMgc2VyaWVzIHRvIGdldCB0aGUgY29tcGxldGUKPiA+ID4gPiBw aWN0dXJlIGFzIHRoZSBsb2dpYyBpcyBnZXR0aW5nIGNoYW5nZWQuCj4gPiA+ID4KPiA+ID4gPiBJ dCBpcyBjb21tb24gdG8gZ2V0IGNvbmZ1c2VkIGJlY2F1c2Ugb2YgdGhlIHdheSB0aGUgVUZTIGRy aXZlciAocWNvbSBtb3N0bHkpCj4gPiA+ID4gaGFuZGxlcyB0aGUgUEhZIGluaXQgc2VxdWVuY2Ug cHJvZ3JhbW1pbmcuIFdlIHVzZWQgdG8gaGF2ZSBvbmx5IG9uZSBpbml0Cj4gPiA+ID4gc2VxdWVu Y2UgZm9yIG9sZGVyIHRhcmdldHMgYW5kIGxpZmUgd2FzIGVhc3kuIEJ1dCB3aGVuIEkgd2FudGVk IHRvIGFkZCBHNAo+ID4gPiA+IHN1cHBvcnQgZm9yIFNNODI1MCwgSSBsZWFybmVkIHRoYXQgdGhl cmUgYXJlIDIgc2VwYXJhdGUgaW5pdCBzZXF1ZW5jZXMuIE9uZSBmb3IKPiA+ID4gPiBub24tRzQg YW5kIG90aGVyIGZvciBHNC4gU28gSSB1c2VkIHRoZSBwaHlfc3ViX21vZGUgcHJvcGVydHkgdG8g cGFzcyB0aGUKPiA+ID4gPiByZWxldmFudCBtb2RlIGZyb20gdGhlIFVGUyBkcml2ZXIgdG8gdGhl IFBIWSBkcml2ZXIgYW5kIHByb2dyYW1tZWQgdGhlIHNlcXVlbmNlCj4gPiA+ID4gYWNjb3JkaW5n bHkuIFRoaXMgZ290IGV4dGVuZGVkIHRvIG5vbi1HNSBhbmQgRzUgbm93Lgo+ID4gPiA+Cj4gPiA+ ID4gTm93LCB0aGUgVUZTIGRyaXZlciB3aWxsIHN0YXJ0IHByb2JpbmcgZnJvbSBhIGxvdyBnZWFy IGZvciBvbGRlciB0YXJnZXRzIChHMikKPiA+ID4gPiBhbmQgRzQvRzUgZm9yIG5ld2VyIG9uZXMg dGhlbiBzY2FsZSB1cCBiYXNlZCBvbiB0aGUgZGV2aWNlIGFuZCBob3N0IGNhcGFiaWxpdHkuCj4g PiA+ID4gRm9yIG9sZGVyIHRhcmdldHMsIHRoZSBjb21tb24gdGFibGUgKHRibHMpIHdpbGwgYmUg dXNlZCBpZiB0aGUgc3VibW9kZSBkb2Vzbid0Cj4gPiA+ID4gbWF0Y2ggRzQvRzUuIEJ1dCBmb3Ig bmV3ZXIgdGFyZ2V0cywgdGhlIFVGUyBkcml2ZXIgd2lsbCBfb25seV8gcGFzcyBHNCBvciBHNSBh cwo+ID4gPiA+IHRoZSBwaHlfZ2Vhciwgc28gdGhvc2Ugc3BlY2lmaWMgc2VxdWVuY2Ugd2lsbCBv bmx5IGJlIHVzZWQuCj4gPiA+ID4KPiA+ID4gPiBIb3BlIEknbSBjbGVhci4KPiA+ID4KPiA+ID4g WWVzLCBpdCBpcyBub3cgY2xlYXIsIHRoYW5rIHlvdSEKPiA+ID4KPiA+ID4gV291bGQgaXQgYmUg cG9zc2libGUgLyBmZWFzaWJsZSAvIGxvZ2ljYWwgdG8gbWFpbnRhaW4gdGhpcyBpZGVhIGV2ZW4K PiA+ID4gZm9yIG5ld2VyIHBsYXRmb3JtcyAobGVhdmluZyB0aGUgSFNfQSAgLyBIU19CIGFzaWRl KT8KPiA+ID4KPiA+ID4gdGJscyAtIHdvcmtzIGZvciBIU19HMgo+ID4gPiB0YmxzICsgdGJsc19n NCAtIHdvcmtzIGZvciBIU19HNAo+ID4gPiB0YmxzICsgdGJsc19nNSAtIHdvcmtzIGZvciBIU19H NQo+ID4gPgo+ID4KPiA+IE5vLiBUaGUgUEhZIHRlYW0gb25seSBnaXZlcyAyIGluaXQgc2VxdWVu Y2VzIGZvciBhbnkgU29DIG5vdy4KPiAKPiBBY2suIFRoZW4gdGhlIGNvZGUgc2hvdWxkIGJlY29t ZQo+IGlmIChIU19HNSkKPiAgICBwcm9ncmFtKHRibHNfaHNfZzUpCj4gZWxzZQo+ICAgIHByb2dy YW0odGJsc19oc19nNCk7Cj4gCgpUaGlzIHNob3VsZCB3b3JrLiBFdmVuIGlmIHdlIGhhdmUgdG8g YWNjb21vZGF0ZSBHNiBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gdXNlCiJlbHNlIGlmIiBmb3IgdGhh dCBhbmQga2VlcCBHNCBhcyB0aGUgImVsc2UiIGNvbmRpdGlvbi4gVGhpcyBsb2dpYyBjYW4gYWxz byBiZQpvcHRpbWl6ZWQgaW4gdGhlIGZ1dHVyZS4KCi0gTWFuaQoKPiA+Cj4gPiAtIE1hbmkKPiA+ Cj4gPiA+IEkgbWVhbiBoZXJlIHRoYXQgdGhlIFBIWSBkcml2ZXIgc2hvdWxkIG5vdCBkZXBlbmQg b24gdGhlIGtub3dsZWRnZQo+ID4gPiB0aGF0IHRoZSBVRlMgZHJpdmVyIHdpbGwgbm90IGJlIHNl dHRpbmcgSFNfRzIgZm9yIHNvbWUgcGFydGljdWxhcgo+ID4gPiBwbGF0Zm9ybSBhbmQgaWRlYWxs eSBpdCBzaG91bGQgY29udGludWUgd29ya2luZyBpZiBhdCBzb21lIHBvaW50IHdlCj4gPiA+IGNo YW5nZSB0aGUgVUZTIGRyaXZlciB0byBzZXQgSFNfRzIuCj4gPiA+Cj4gPiA+Cj4gPiA+ID4KPiA+ ID4gPiAtIE1hbmkKPiA+ID4gPgo+ID4gPiA+ID4gTWF5YmUgd2Ugc2hvdWxkIGNoYW5nZSB0aGUg Y29uZGl0aW9uIGhlcmUgKGluIHRoZSBQSFkgZHJpdmVyKSB0bzoKPiA+ID4gPiA+Cj4gPiA+ID4g PiBpZiAocW1wLT5zdWJtb2RlIDw9IFVGU19IU19HNCkKPiA+ID4gPiA+Cj4gPiA+ID4gPiA/Cj4g PiA+ID4gPiAtLQo+ID4gPiA+ID4gV2l0aCBiZXN0IHdpc2hlcwo+ID4gPiA+ID4gRG1pdHJ5Cj4g PiA+ID4KPiA+ID4gPiAtLQo+ID4gPiA+IOCuruCuo+Cuv+CuteCuo+CvjeCuo+CuqeCvjSDgrprg rqTgrr7grprgrr/grrXgrq7gr40KPiA+ID4KPiA+ID4KPiA+ID4KPiA+ID4gLS0KPiA+ID4gV2l0 aCBiZXN0IHdpc2hlcwo+ID4gPiBEbWl0cnkKPiA+Cj4gPiAtLQo+ID4g4K6u4K6j4K6/4K614K6j 4K+N4K6j4K6p4K+NIOCumuCupOCuvuCumuCuv+CuteCuruCvjQo+IAo+IAo+IAo+IC0tIAo+IFdp dGggYmVzdCB3aXNoZXMKPiBEbWl0cnkKCi0tIArgrq7grqPgrr/grrXgrqPgr43grqPgrqngr40g 4K6a4K6k4K6+4K6a4K6/4K614K6u4K+NCgotLSAKbGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51 eC1waHlAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1waHkK