From mboxrd@z Thu Jan 1 00:00:00 1970 From: architt@codeaurora.org (Archit Taneja) Date: Mon, 7 Aug 2017 09:29:55 +0530 Subject: [PATCH v2 1/4] drm/bridge: dw-hdmi: add cec notifier support In-Reply-To: <11ae421e-2d02-73c2-5dbb-79f1bd763235@xs4all.nl> References: <20170731142906.GX31807@n2100.armlinux.org.uk> <11ae421e-2d02-73c2-5dbb-79f1bd763235@xs4all.nl> Message-ID: <2da3c0e1-a0c2-4e4e-9761-85ef0d8251a7@codeaurora.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 08/05/2017 02:53 PM, Hans Verkuil wrote: > Archit, > > I posted a v3 that added a missing cec_notifier_put to the remove() function. > Apparently you missed that. The chunk in question from the v3 patch is this: I did. Sorry, about that. There was an issue with my mailer. > > @@ -2469,6 +2489,9 @@ static void __dw_hdmi_remove(struct dw_hdmi *hdmi) > /* Disable all interrupts */ > hdmi_writeb(hdmi, ~0, HDMI_IH_MUTE_PHY_STAT0); > > + if (hdmi->cec_notifier) > + cec_notifier_put(hdmi->cec_notifier); > + > clk_disable_unprepare(hdmi->iahb_clk); > clk_disable_unprepare(hdmi->isfr_clk); > > Can you add that or should I make a new patch? We aren't allowed to do rebases on drm-misc-next unless absolutely needed. A separate patch that adds the missing notifier_put() call in remove would be great to have. I'll queue the patches #3/4 and #4/4 from the v3 revision. Thanks, Archit > > Regards, > > Hans > > On 04/08/17 15:36, Archit Taneja wrote: >> >> >> On 07/31/2017 08:55 PM, Hans Verkuil wrote: >>> On 07/31/2017 04:29 PM, Russell King wrote: >>>> Add CEC notifier support to the HDMI bridge driver, so that the CEC >>>> part of the IP can receive its physical address. >>>> >>>> Signed-off-by: Russell King >>> >>> Acked-by: Hans Verkuil >>> >> >> Queued to drm-misc-next. >> >> Thanks, >> Archit >> >>> Regards, >>> >>> Hans >>> >>>> --- >>>> drivers/gpu/drm/bridge/synopsys/Kconfig | 1 + >>>> drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 22 +++++++++++++++++++++- >>>> 2 files changed, 22 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/drivers/gpu/drm/bridge/synopsys/Kconfig b/drivers/gpu/drm/bridge/synopsys/Kconfig >>>> index 53e78d092d18..351db000599a 100644 >>>> --- a/drivers/gpu/drm/bridge/synopsys/Kconfig >>>> +++ b/drivers/gpu/drm/bridge/synopsys/Kconfig >>>> @@ -2,6 +2,7 @@ config DRM_DW_HDMI >>>> tristate >>>> select DRM_KMS_HELPER >>>> select REGMAP_MMIO >>>> + select CEC_CORE if CEC_NOTIFIER >>>> config DRM_DW_HDMI_AHB_AUDIO >>>> tristate "Synopsys Designware AHB Audio interface" >>>> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c >>>> index ead11242c4b9..82e55ee8e4fa 100644 >>>> --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c >>>> +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c >>>> @@ -36,7 +36,10 @@ >>>> #include "dw-hdmi.h" >>>> #include "dw-hdmi-audio.h" >>>> +#include >>>> + >>>> #define DDC_SEGMENT_ADDR 0x30 >>>> + >>>> #define HDMI_EDID_LEN 512 >>>> enum hdmi_datamap { >>>> @@ -175,6 +178,8 @@ struct dw_hdmi { >>>> struct regmap *regm; >>>> void (*enable_audio)(struct dw_hdmi *hdmi); >>>> void (*disable_audio)(struct dw_hdmi *hdmi); >>>> + >>>> + struct cec_notifier *cec_notifier; >>>> }; >>>> #define HDMI_IH_PHY_STAT0_RX_SENSE \ >>>> @@ -1896,6 +1901,7 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) >>>> hdmi->sink_is_hdmi = drm_detect_hdmi_monitor(edid); >>>> hdmi->sink_has_audio = drm_detect_monitor_audio(edid); >>>> drm_mode_connector_update_edid_property(connector, edid); >>>> + cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid); >>>> ret = drm_add_edid_modes(connector, edid); >>>> /* Store the ELD */ >>>> drm_edid_to_eld(connector, edid); >>>> @@ -2119,11 +2125,16 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) >>>> * ask the source to re-read the EDID. >>>> */ >>>> if (intr_stat & >>>> - (HDMI_IH_PHY_STAT0_RX_SENSE | HDMI_IH_PHY_STAT0_HPD)) >>>> + (HDMI_IH_PHY_STAT0_RX_SENSE | HDMI_IH_PHY_STAT0_HPD)) { >>>> __dw_hdmi_setup_rx_sense(hdmi, >>>> phy_stat & HDMI_PHY_HPD, >>>> phy_stat & HDMI_PHY_RX_SENSE); >>>> + if ((phy_stat & (HDMI_PHY_RX_SENSE | HDMI_PHY_HPD)) == 0) >>>> + cec_notifier_set_phys_addr(hdmi->cec_notifier, >>>> + CEC_PHYS_ADDR_INVALID); >>>> + } >>>> + >>>> if (intr_stat & HDMI_IH_PHY_STAT0_HPD) { >>>> dev_dbg(hdmi->dev, "EVENT=%s\n", >>>> phy_int_pol & HDMI_PHY_HPD ? "plugin" : "plugout"); >>>> @@ -2376,6 +2387,12 @@ __dw_hdmi_probe(struct platform_device *pdev, >>>> if (ret) >>>> goto err_iahb; >>>> + hdmi->cec_notifier = cec_notifier_get(dev); >>>> + if (!hdmi->cec_notifier) { >>>> + ret = -ENOMEM; >>>> + goto err_iahb; >>>> + } >>>> + >>>> /* >>>> * To prevent overflows in HDMI_IH_FC_STAT2, set the clk regenerator >>>> * N and cts values before enabling phy >>>> @@ -2452,6 +2469,9 @@ __dw_hdmi_probe(struct platform_device *pdev, >>>> hdmi->ddc = NULL; >>>> } >>>> + if (hdmi->cec_notifier) >>>> + cec_notifier_put(hdmi->cec_notifier); >>>> + >>>> clk_disable_unprepare(hdmi->iahb_clk); >>>> err_isfr: >>>> clk_disable_unprepare(hdmi->isfr_clk); >>>> >>> >>> >>> _______________________________________________ >>> linux-arm-kernel mailing list >>> linux-arm-kernel at lists.infradead.org >>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >>> >> > -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [PATCH v2 1/4] drm/bridge: dw-hdmi: add cec notifier support Date: Mon, 7 Aug 2017 09:29:55 +0530 Message-ID: <2da3c0e1-a0c2-4e4e-9761-85ef0d8251a7@codeaurora.org> References: <20170731142906.GX31807@n2100.armlinux.org.uk> <11ae421e-2d02-73c2-5dbb-79f1bd763235@xs4all.nl> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.codeaurora.org (smtp.codeaurora.org [198.145.29.96]) by gabe.freedesktop.org (Postfix) with ESMTPS id C23F96E06B for ; Mon, 7 Aug 2017 04:00:00 +0000 (UTC) In-Reply-To: <11ae421e-2d02-73c2-5dbb-79f1bd763235@xs4all.nl> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Hans Verkuil Cc: linux-arm-kernel@lists.infradead.org, Russell King , Laurent Pinchart , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org CgpPbiAwOC8wNS8yMDE3IDAyOjUzIFBNLCBIYW5zIFZlcmt1aWwgd3JvdGU6Cj4gQXJjaGl0LAo+ IAo+IEkgcG9zdGVkIGEgdjMgdGhhdCBhZGRlZCBhIG1pc3NpbmcgY2VjX25vdGlmaWVyX3B1dCB0 byB0aGUgcmVtb3ZlKCkgZnVuY3Rpb24uCj4gQXBwYXJlbnRseSB5b3UgbWlzc2VkIHRoYXQuIFRo ZSBjaHVuayBpbiBxdWVzdGlvbiBmcm9tIHRoZSB2MyBwYXRjaCBpcyB0aGlzOgoKSSBkaWQuIFNv cnJ5LCBhYm91dCB0aGF0LiBUaGVyZSB3YXMgYW4gaXNzdWUgd2l0aCBteSBtYWlsZXIuCgo+IAo+ IEBAIC0yNDY5LDYgKzI0ODksOSBAQCBzdGF0aWMgdm9pZCBfX2R3X2hkbWlfcmVtb3ZlKHN0cnVj dCBkd19oZG1pICpoZG1pKQo+ICAgCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KPiAgIAlo ZG1pX3dyaXRlYihoZG1pLCB+MCwgSERNSV9JSF9NVVRFX1BIWV9TVEFUMCk7Cj4gCj4gKwlpZiAo aGRtaS0+Y2VjX25vdGlmaWVyKQo+ICsJCWNlY19ub3RpZmllcl9wdXQoaGRtaS0+Y2VjX25vdGlm aWVyKTsKPiArCj4gICAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmlhaGJfY2xrKTsKPiAg IAljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+aXNmcl9jbGspOwo+IAo+IENhbiB5b3UgYWRk IHRoYXQgb3Igc2hvdWxkIEkgbWFrZSBhIG5ldyBwYXRjaD8KCldlIGFyZW4ndCBhbGxvd2VkIHRv IGRvIHJlYmFzZXMgb24gZHJtLW1pc2MtbmV4dCB1bmxlc3MgYWJzb2x1dGVseSBuZWVkZWQuCkEg c2VwYXJhdGUgcGF0Y2ggdGhhdCBhZGRzIHRoZSBtaXNzaW5nIG5vdGlmaWVyX3B1dCgpIGNhbGwg aW4gcmVtb3ZlIHdvdWxkIGJlCmdyZWF0IHRvIGhhdmUuCgpJJ2xsIHF1ZXVlIHRoZSBwYXRjaGVz ICMzLzQgYW5kICM0LzQgZnJvbSB0aGUgdjMgcmV2aXNpb24uCgpUaGFua3MsCkFyY2hpdAoKPiAK PiBSZWdhcmRzLAo+IAo+IAlIYW5zCj4gCj4gT24gMDQvMDgvMTcgMTU6MzYsIEFyY2hpdCBUYW5l amEgd3JvdGU6Cj4+Cj4+Cj4+IE9uIDA3LzMxLzIwMTcgMDg6NTUgUE0sIEhhbnMgVmVya3VpbCB3 cm90ZToKPj4+IE9uIDA3LzMxLzIwMTcgMDQ6MjkgUE0sIFJ1c3NlbGwgS2luZyB3cm90ZToKPj4+ PiBBZGQgQ0VDIG5vdGlmaWVyIHN1cHBvcnQgdG8gdGhlIEhETUkgYnJpZGdlIGRyaXZlciwgc28g dGhhdCB0aGUgQ0VDCj4+Pj4gcGFydCBvZiB0aGUgSVAgY2FuIHJlY2VpdmUgaXRzIHBoeXNpY2Fs IGFkZHJlc3MuCj4+Pj4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJu ZWxAYXJtbGludXgub3JnLnVrPgo+Pj4KPj4+IEFja2VkLWJ5OiBIYW5zIFZlcmt1aWwgPGhhbnMu dmVya3VpbEBjaXNjby5jb20+Cj4+Pgo+Pgo+PiBRdWV1ZWQgdG8gZHJtLW1pc2MtbmV4dC4KPj4K Pj4gVGhhbmtzLAo+PiBBcmNoaXQKPj4KPj4+IFJlZ2FyZHMsCj4+Pgo+Pj4gICAgICBIYW5zCj4+ Pgo+Pj4+IC0tLQo+Pj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvS2NvbmZp ZyAgIHwgIDEgKwo+Pj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctaGRt aS5jIHwgMjIgKysrKysrKysrKysrKysrKysrKysrLQo+Pj4+ICAgIDIgZmlsZXMgY2hhbmdlZCwg MjIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+Pj4+Cj4+Pj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2Uvc3lub3BzeXMvS2NvbmZpZwo+Pj4+IGluZGV4IDUzZTc4ZDA5MmQxOC4uMzUxZGIwMDA1 OTlhIDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvS2Nv bmZpZwo+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvS2NvbmZpZwo+ Pj4+IEBAIC0yLDYgKzIsNyBAQCBjb25maWcgRFJNX0RXX0hETUkKPj4+PiAgICAgICAgdHJpc3Rh dGUKPj4+PiAgICAgICAgc2VsZWN0IERSTV9LTVNfSEVMUEVSCj4+Pj4gICAgICAgIHNlbGVjdCBS RUdNQVBfTU1JTwo+Pj4+ICsgICAgc2VsZWN0IENFQ19DT1JFIGlmIENFQ19OT1RJRklFUgo+Pj4+ ICAgICAgY29uZmlnIERSTV9EV19IRE1JX0FIQl9BVURJTwo+Pj4+ICAgICAgICB0cmlzdGF0ZSAi U3lub3BzeXMgRGVzaWdud2FyZSBBSEIgQXVkaW8gaW50ZXJmYWNlIgo+Pj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LWhkbWkuYyBiL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctaGRtaS5jCj4+Pj4gaW5kZXggZWFkMTEyNDJjNGI5Li44 MmU1NWVlOGU0ZmEgMTAwNjQ0Cj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5v cHN5cy9kdy1oZG1pLmMKPj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lz L2R3LWhkbWkuYwo+Pj4+IEBAIC0zNiw3ICszNiwxMCBAQAo+Pj4+ICAgICNpbmNsdWRlICJkdy1o ZG1pLmgiCj4+Pj4gICAgI2luY2x1ZGUgImR3LWhkbWktYXVkaW8uaCIKPj4+PiAgICArI2luY2x1 ZGUgPG1lZGlhL2NlYy1ub3RpZmllci5oPgo+Pj4+ICsKPj4+PiAgICAjZGVmaW5lIEREQ19TRUdN RU5UX0FERFIgICAgMHgzMAo+Pj4+ICsKPj4+PiAgICAjZGVmaW5lIEhETUlfRURJRF9MRU4gICAg ICAgIDUxMgo+Pj4+ICAgICAgZW51bSBoZG1pX2RhdGFtYXAgewo+Pj4+IEBAIC0xNzUsNiArMTc4 LDggQEAgc3RydWN0IGR3X2hkbWkgewo+Pj4+ICAgICAgICBzdHJ1Y3QgcmVnbWFwICpyZWdtOwo+ Pj4+ICAgICAgICB2b2lkICgqZW5hYmxlX2F1ZGlvKShzdHJ1Y3QgZHdfaGRtaSAqaGRtaSk7Cj4+ Pj4gICAgICAgIHZvaWQgKCpkaXNhYmxlX2F1ZGlvKShzdHJ1Y3QgZHdfaGRtaSAqaGRtaSk7Cj4+ Pj4gKwo+Pj4+ICsgICAgc3RydWN0IGNlY19ub3RpZmllciAqY2VjX25vdGlmaWVyOwo+Pj4+ICAg IH07Cj4+Pj4gICAgICAjZGVmaW5lIEhETUlfSUhfUEhZX1NUQVQwX1JYX1NFTlNFIFwKPj4+PiBA QCAtMTg5Niw2ICsxOTAxLDcgQEAgc3RhdGljIGludCBkd19oZG1pX2Nvbm5lY3Rvcl9nZXRfbW9k ZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPj4+PiAgICAgICAgICAgIGhkbWkt PnNpbmtfaXNfaGRtaSA9IGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKGVkaWQpOwo+Pj4+ICAgICAg ICAgICAgaGRtaS0+c2lua19oYXNfYXVkaW8gPSBkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8oZWRp ZCk7Cj4+Pj4gICAgICAgICAgICBkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVy dHkoY29ubmVjdG9yLCBlZGlkKTsKPj4+PiArICAgICAgICBjZWNfbm90aWZpZXJfc2V0X3BoeXNf YWRkcl9mcm9tX2VkaWQoaGRtaS0+Y2VjX25vdGlmaWVyLCBlZGlkKTsKPj4+PiAgICAgICAgICAg IHJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwo+Pj4+ICAgICAgICAg ICAgLyogU3RvcmUgdGhlIEVMRCAqLwo+Pj4+ICAgICAgICAgICAgZHJtX2VkaWRfdG9fZWxkKGNv bm5lY3RvciwgZWRpZCk7Cj4+Pj4gQEAgLTIxMTksMTEgKzIxMjUsMTYgQEAgc3RhdGljIGlycXJl dHVybl90IGR3X2hkbWlfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKPj4+PiAgICAgICAgICog YXNrIHRoZSBzb3VyY2UgdG8gcmUtcmVhZCB0aGUgRURJRC4KPj4+PiAgICAgICAgICovCj4+Pj4g ICAgICAgIGlmIChpbnRyX3N0YXQgJgo+Pj4+IC0gICAgICAgIChIRE1JX0lIX1BIWV9TVEFUMF9S WF9TRU5TRSB8IEhETUlfSUhfUEhZX1NUQVQwX0hQRCkpCj4+Pj4gKyAgICAgICAgKEhETUlfSUhf UEhZX1NUQVQwX1JYX1NFTlNFIHwgSERNSV9JSF9QSFlfU1RBVDBfSFBEKSkgewo+Pj4+ICAgICAg ICAgICAgX19kd19oZG1pX3NldHVwX3J4X3NlbnNlKGhkbWksCj4+Pj4gICAgICAgICAgICAgICAg ICAgICAgICAgcGh5X3N0YXQgJiBIRE1JX1BIWV9IUEQsCj4+Pj4gICAgICAgICAgICAgICAgICAg ICAgICAgcGh5X3N0YXQgJiBIRE1JX1BIWV9SWF9TRU5TRSk7Cj4+Pj4gICAgKyAgICAgICAgaWYg KChwaHlfc3RhdCAmIChIRE1JX1BIWV9SWF9TRU5TRSB8IEhETUlfUEhZX0hQRCkpID09IDApCj4+ Pj4gKyAgICAgICAgICAgIGNlY19ub3RpZmllcl9zZXRfcGh5c19hZGRyKGhkbWktPmNlY19ub3Rp ZmllciwKPj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VDX1BIWVNfQUREUl9JTlZB TElEKTsKPj4+PiArICAgIH0KPj4+PiArCj4+Pj4gICAgICAgIGlmIChpbnRyX3N0YXQgJiBIRE1J X0lIX1BIWV9TVEFUMF9IUEQpIHsKPj4+PiAgICAgICAgICAgIGRldl9kYmcoaGRtaS0+ZGV2LCAi RVZFTlQ9JXNcbiIsCj4+Pj4gICAgICAgICAgICAgICAgcGh5X2ludF9wb2wgJiBIRE1JX1BIWV9I UEQgPyAicGx1Z2luIiA6ICJwbHVnb3V0Iik7Cj4+Pj4gQEAgLTIzNzYsNiArMjM4NywxMiBAQCBf X2R3X2hkbWlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPj4+PiAgICAgICAg aWYgKHJldCkKPj4+PiAgICAgICAgICAgIGdvdG8gZXJyX2lhaGI7Cj4+Pj4gICAgKyAgICBoZG1p LT5jZWNfbm90aWZpZXIgPSBjZWNfbm90aWZpZXJfZ2V0KGRldik7Cj4+Pj4gKyAgICBpZiAoIWhk bWktPmNlY19ub3RpZmllcikgewo+Pj4+ICsgICAgICAgIHJldCA9IC1FTk9NRU07Cj4+Pj4gKyAg ICAgICAgZ290byBlcnJfaWFoYjsKPj4+PiArICAgIH0KPj4+PiArCj4+Pj4gICAgICAgIC8qCj4+ Pj4gICAgICAgICAqIFRvIHByZXZlbnQgb3ZlcmZsb3dzIGluIEhETUlfSUhfRkNfU1RBVDIsIHNl dCB0aGUgY2xrIHJlZ2VuZXJhdG9yCj4+Pj4gICAgICAgICAqIE4gYW5kIGN0cyB2YWx1ZXMgYmVm b3JlIGVuYWJsaW5nIHBoeQo+Pj4+IEBAIC0yNDUyLDYgKzI0NjksOSBAQCBfX2R3X2hkbWlfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPj4+PiAgICAgICAgICAgIGhkbWktPmRk YyA9IE5VTEw7Cj4+Pj4gICAgICAgIH0KPj4+PiAgICArICAgIGlmIChoZG1pLT5jZWNfbm90aWZp ZXIpCj4+Pj4gKyAgICAgICAgY2VjX25vdGlmaWVyX3B1dChoZG1pLT5jZWNfbm90aWZpZXIpOwo+ Pj4+ICsKPj4+PiAgICAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmlhaGJfY2xrKTsK Pj4+PiAgICBlcnJfaXNmcjoKPj4+PiAgICAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWkt PmlzZnJfY2xrKTsKPj4+Pgo+Pj4KPj4+Cj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwo+Pj4gbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKPj4+ IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwo+Pj4gaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCj4+Pgo+Pgo+IAoK LS0gClF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIENvZGUg QXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0Cl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=