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=-0.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no 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 56A2BC7618F for ; Mon, 22 Jul 2019 23:50:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1F1992199C for ; Mon, 22 Jul 2019 23:50:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="F2JknA+L"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="V+knWme4" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733057AbfGVXuq (ORCPT ); Mon, 22 Jul 2019 19:50:46 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:46002 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729728AbfGVXuq (ORCPT ); Mon, 22 Jul 2019 19:50:46 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 2009A611DC; Mon, 22 Jul 2019 23:50:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1563839445; bh=EJx4k7/D+Lskl+Q991OT1HuNiR0lNx2S8Xv79Ex6lxc=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=F2JknA+L+sI6JkrIyQiuwDnv9Ius3czNAvEc+UYuLTYd08uljtlZVyYuBz/SogFKB YDcE6Nypb4qzKbes1MVuwnHqJR/Hr2I4d7fWliaCVU3qfxerB0b+lXzkQQeO7EC3SY kMT6jNWbhra0EJ4yBjS0ObV537704cuMdnhQJvk8= Received: from mail.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.codeaurora.org (Postfix) with ESMTP id AE22D60247; Mon, 22 Jul 2019 23:50:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1563839443; bh=EJx4k7/D+Lskl+Q991OT1HuNiR0lNx2S8Xv79Ex6lxc=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=V+knWme44H1ZCoWT24XloeJZU/ge53Xr3iHw6ZpbaJ9kbYI4KxRd3/2IMSL1RRtSm Pjbc/q/PcgzLY6F8wjeW6s0/jH6rVVW0vfCxl6wQvL08QHLi/SV9XepT7YqBay8fXA IcbmB3fcGctBSDkNjOS7jEdm8SmaMB5ayhnWjJZw= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Date: Mon, 22 Jul 2019 16:50:43 -0700 From: Jeykumar Sankaran To: Sean Paul Cc: =?UTF-8?Q?Ville_Syrj=C3=A4l=C3=A4?= , freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, pdhaval@codeaurora.org, seanpaul@chromium.org, Daniel Vetter Subject: Re: [RFC] Expanding drm_mode_modeinfo flags In-Reply-To: <20190719142959.GD104440@art_vandelay> References: <1562870805-32314-1-git-send-email-jsanka@codeaurora.org> <20190716090712.GY15868@phenom.ffwll.local> <16fee2b42fa03d2cf104452223dcf5af@codeaurora.org> <20190719090553.GF15868@phenom.ffwll.local> <20190719135558.GC104440@art_vandelay> <20190719141528.GN5942@intel.com> <20190719142959.GD104440@art_vandelay> Message-ID: X-Sender: jsanka@codeaurora.org User-Agent: Roundcube Webmail/1.2.5 Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org On 2019-07-19 07:29, Sean Paul wrote: > On Fri, Jul 19, 2019 at 05:15:28PM +0300, Ville Syrjälä wrote: >> On Fri, Jul 19, 2019 at 09:55:58AM -0400, Sean Paul wrote: >> > On Fri, Jul 19, 2019 at 11:05:53AM +0200, Daniel Vetter wrote: >> > > On Thu, Jul 18, 2019 at 11:18:42AM -0700, Jeykumar Sankaran wrote: >> > > > On 2019-07-16 02:07, Daniel Vetter wrote: >> > > > > On Thu, Jul 11, 2019 at 11:46:44AM -0700, Jeykumar Sankaran wrote: > > /snip > >> > > > > > drm: add mode flags in uapi for seamless mode switch >> > > > > >> > > > > I think the uapi is the trivial part here, the real deal is how >> > > > > userspace >> > > > > uses this. Can you pls post the patches for your compositor? >> > > > > >> > > > > Also note that we already allow userspace to tell the kernel whether >> > > > > flickering is ok or not for a modeset. msm driver could use that to at >> > > > > least tell userspace whether a modeset change is possible. So you can >> > > > > already implement glitch-free modeset changes for at least video mode. >> > > > > -Daniel >> > > > >> > > > I believe you are referring to the below tv property of the connector. >> > > > >> > > > /** >> > > > * @tv_flicker_reduction_property: Optional TV property to control the >> > > > * flicker reduction mode. >> > > > */ >> > > > struct drm_property *tv_flicker_reduction_property; >> > > >> > > Not even close :-) >> > > >> > > I mean the DRM_MODE_ATOMIC_ALLOW_MODESET flag for the atomic ioctl. This >> > > is not a property of a mode, this is a property of a _transition_ between >> > > configurations. Some transitions can be done flicker free, others can't. >> > >> > Agree that an atomic flag on a commit is the way to accomplish this. It's pretty >> > similar to the psr transitions, where we want to reuse most of the atomic >> > circuitry, but in a specialized way. We'd also have to be careful to only >> > involve the drm objects which are seamless modeset aware (you could imagine >> > a bridge chain where the bridges downstream of the first bridge don't care). >> > >> > > >> > > There's then still the question of how to pick video vs command mode, but >> > > imo better to start with implementing the transition behaviour correctly >> > > first. >> > >> > Connector property? Possibly a terrible idea, but I wonder if we could [re]use >> > the vrr properties for command mode. The docs state that the driver has the >> > option of putting upper and lower bounds on the refresh rate. >> >> Not really sure why this needs new props and whatnot. This is kinda >> what >> the i915 "fastset" stuff already does: >> 1. userspace asks for something to be changed via atomic >> 2. driver calculates whether a modeset is actually required >> 3. atomic validates need_modeset() vs. DRM_MODE_ATOMIC_ALLOW_MODESET >> 4. if (need_modeset) heavyweight_commit() else lightweight_commit() >> >> Ie. why should userspace really care about anything except the >> "flickers are OK" vs. "flickers not wanted" thing? > > Agree, I don't think the seamless modeset (ie: changing resolution > without > flicker) needs a property. Just need to test the commit without > ALLOW_MODESET > and commit it if the test passes. > Agreed that a TEST_ONLY commit without ALLOW_MODESET flag can be used to check whether the modeset can be done seamless. But since there are no error code returns, the client cannot distinguish the test_only commit failures from other invalid config failures. Also, note that when the client sees two 1080p modes (vid/cmd) and it is interested only to do *only* seamless switches, without any additional flag it cannot distinguish between these two 1080p modes. The client has to invoke two test_only commits with these modes to identify the seamless one. Is that a preferred approach? Intel's "fastset" calculates the need for modeset internally based on the configuration and chooses the best commit path. But the requirement here is to expose the information up-front since the use case cannot afford to fall back to the normal modeset when it has requested for a seamless one. >> >> Also what's the benefit of using video mode if your panel supportes >> command mode? Can you turn off the memory in the panel and actually >> save power that way? And if there is a benefit can't the driver just >> automagically switch between the two based on how often things are >> getting updated? That would match how eDP PSR already works. > > I'm guessing video mode might have some latency benefits over command > mode? > > Sean Yes. Pretty much those are reasons we need to switch to video mode. But instead of making the decision internal to the driver based on the frequency of frame updates, we have proprietary use cases where the client has to trigger the switch explicitly. So we are trying to find ways to represent the same resolution in both video/cmd modes. Thanks and Regards, Jeykumar S. > >> >> -- >> Ville Syrjälä >> Intel -- Jeykumar S From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: Re: [RFC] Expanding drm_mode_modeinfo flags Date: Mon, 22 Jul 2019 16:50:43 -0700 Message-ID: References: <1562870805-32314-1-git-send-email-jsanka@codeaurora.org> <20190716090712.GY15868@phenom.ffwll.local> <16fee2b42fa03d2cf104452223dcf5af@codeaurora.org> <20190719090553.GF15868@phenom.ffwll.local> <20190719135558.GC104440@art_vandelay> <20190719141528.GN5942@intel.com> <20190719142959.GD104440@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190719142959.GD104440@art_vandelay> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sean Paul Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, pdhaval@codeaurora.org, seanpaul@chromium.org, Daniel Vetter , freedreno@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gMjAxOS0wNy0xOSAwNzoyOSwgU2VhbiBQYXVsIHdyb3RlOgo+IE9uIEZyaSwgSnVsIDE5LCAy MDE5IGF0IDA1OjE1OjI4UE0gKzAzMDAsIFZpbGxlIFN5cmrDpGzDpCB3cm90ZToKPj4gT24gRnJp LCBKdWwgMTksIDIwMTkgYXQgMDk6NTU6NThBTSAtMDQwMCwgU2VhbiBQYXVsIHdyb3RlOgo+PiA+ IE9uIEZyaSwgSnVsIDE5LCAyMDE5IGF0IDExOjA1OjUzQU0gKzAyMDAsIERhbmllbCBWZXR0ZXIg d3JvdGU6Cj4+ID4gPiBPbiBUaHUsIEp1bCAxOCwgMjAxOSBhdCAxMToxODo0MkFNIC0wNzAwLCBK ZXlrdW1hciBTYW5rYXJhbiB3cm90ZToKPj4gPiA+ID4gT24gMjAxOS0wNy0xNiAwMjowNywgRGFu aWVsIFZldHRlciB3cm90ZToKPj4gPiA+ID4gPiBPbiBUaHUsIEp1bCAxMSwgMjAxOSBhdCAxMTo0 Njo0NEFNIC0wNzAwLCBKZXlrdW1hciBTYW5rYXJhbiB3cm90ZToKPiAKPiAvc25pcAo+IAo+PiA+ ID4gPiA+ID4gICBkcm06IGFkZCBtb2RlIGZsYWdzIGluIHVhcGkgZm9yIHNlYW1sZXNzIG1vZGUg c3dpdGNoCj4+ID4gPiA+ID4KPj4gPiA+ID4gPiBJIHRoaW5rIHRoZSB1YXBpIGlzIHRoZSB0cml2 aWFsIHBhcnQgaGVyZSwgdGhlIHJlYWwgZGVhbCBpcyBob3cKPj4gPiA+ID4gPiB1c2Vyc3BhY2UK Pj4gPiA+ID4gPiB1c2VzIHRoaXMuIENhbiB5b3UgcGxzIHBvc3QgdGhlIHBhdGNoZXMgZm9yIHlv dXIgY29tcG9zaXRvcj8KPj4gPiA+ID4gPgo+PiA+ID4gPiA+IEFsc28gbm90ZSB0aGF0IHdlIGFs cmVhZHkgYWxsb3cgdXNlcnNwYWNlIHRvIHRlbGwgdGhlIGtlcm5lbCB3aGV0aGVyCj4+ID4gPiA+ ID4gZmxpY2tlcmluZyBpcyBvayBvciBub3QgZm9yIGEgbW9kZXNldC4gbXNtIGRyaXZlciBjb3Vs ZCB1c2UgdGhhdCB0byBhdAo+PiA+ID4gPiA+IGxlYXN0IHRlbGwgdXNlcnNwYWNlIHdoZXRoZXIg YSBtb2Rlc2V0IGNoYW5nZSBpcyBwb3NzaWJsZS4gU28geW91IGNhbgo+PiA+ID4gPiA+IGFscmVh ZHkgaW1wbGVtZW50IGdsaXRjaC1mcmVlIG1vZGVzZXQgY2hhbmdlcyBmb3IgYXQgbGVhc3Qgdmlk ZW8gbW9kZS4KPj4gPiA+ID4gPiAtRGFuaWVsCj4+ID4gPiA+Cj4+ID4gPiA+IEkgYmVsaWV2ZSB5 b3UgYXJlIHJlZmVycmluZyB0byB0aGUgYmVsb3cgdHYgcHJvcGVydHkgb2YgdGhlIGNvbm5lY3Rv ci4KPj4gPiA+ID4KPj4gPiA+ID4gLyoqCj4+ID4gPiA+ICAqIEB0dl9mbGlja2VyX3JlZHVjdGlv bl9wcm9wZXJ0eTogT3B0aW9uYWwgVFYgcHJvcGVydHkgdG8gY29udHJvbCB0aGUKPj4gPiA+ID4g ICogZmxpY2tlciByZWR1Y3Rpb24gbW9kZS4KPj4gPiA+ID4gICovCj4+ID4gPiA+IHN0cnVjdCBk cm1fcHJvcGVydHkgKnR2X2ZsaWNrZXJfcmVkdWN0aW9uX3Byb3BlcnR5Owo+PiA+ID4KPj4gPiA+ IE5vdCBldmVuIGNsb3NlIDotKQo+PiA+ID4KPj4gPiA+IEkgbWVhbiB0aGUgRFJNX01PREVfQVRP TUlDX0FMTE9XX01PREVTRVQgZmxhZyBmb3IgdGhlIGF0b21pYyBpb2N0bC4gVGhpcwo+PiA+ID4g aXMgbm90IGEgcHJvcGVydHkgb2YgYSBtb2RlLCB0aGlzIGlzIGEgcHJvcGVydHkgb2YgYSBfdHJh bnNpdGlvbl8gYmV0d2Vlbgo+PiA+ID4gY29uZmlndXJhdGlvbnMuIFNvbWUgdHJhbnNpdGlvbnMg Y2FuIGJlIGRvbmUgZmxpY2tlciBmcmVlLCBvdGhlcnMgY2FuJ3QuCj4+ID4KPj4gPiBBZ3JlZSB0 aGF0IGFuIGF0b21pYyBmbGFnIG9uIGEgY29tbWl0IGlzIHRoZSB3YXkgdG8gYWNjb21wbGlzaCB0 aGlzLiBJdCdzIHByZXR0eQo+PiA+IHNpbWlsYXIgdG8gdGhlIHBzciB0cmFuc2l0aW9ucywgd2hl cmUgd2Ugd2FudCB0byByZXVzZSBtb3N0IG9mIHRoZSBhdG9taWMKPj4gPiBjaXJjdWl0cnksIGJ1 dCBpbiBhIHNwZWNpYWxpemVkIHdheS4gV2UnZCBhbHNvIGhhdmUgdG8gYmUgY2FyZWZ1bCB0byBv bmx5Cj4+ID4gaW52b2x2ZSB0aGUgZHJtIG9iamVjdHMgd2hpY2ggYXJlIHNlYW1sZXNzIG1vZGVz ZXQgYXdhcmUgKHlvdSBjb3VsZCBpbWFnaW5lCj4+ID4gYSBicmlkZ2UgY2hhaW4gd2hlcmUgdGhl IGJyaWRnZXMgZG93bnN0cmVhbSBvZiB0aGUgZmlyc3QgYnJpZGdlIGRvbid0IGNhcmUpLgo+PiA+ Cj4+ID4gPgo+PiA+ID4gVGhlcmUncyB0aGVuIHN0aWxsIHRoZSBxdWVzdGlvbiBvZiBob3cgdG8g cGljayB2aWRlbyB2cyBjb21tYW5kIG1vZGUsIGJ1dAo+PiA+ID4gaW1vIGJldHRlciB0byBzdGFy dCB3aXRoIGltcGxlbWVudGluZyB0aGUgdHJhbnNpdGlvbiBiZWhhdmlvdXIgY29ycmVjdGx5Cj4+ ID4gPiBmaXJzdC4KPj4gPgo+PiA+IENvbm5lY3RvciBwcm9wZXJ0eT8gUG9zc2libHkgYSB0ZXJy aWJsZSBpZGVhLCBidXQgSSB3b25kZXIgaWYgd2UgY291bGQgW3JlXXVzZQo+PiA+IHRoZSB2cnIg cHJvcGVydGllcyBmb3IgY29tbWFuZCBtb2RlLiBUaGUgZG9jcyBzdGF0ZSB0aGF0IHRoZSBkcml2 ZXIgaGFzIHRoZQo+PiA+IG9wdGlvbiBvZiBwdXR0aW5nIHVwcGVyIGFuZCBsb3dlciBib3VuZHMg b24gdGhlIHJlZnJlc2ggcmF0ZS4KPj4gCj4+IE5vdCByZWFsbHkgc3VyZSB3aHkgdGhpcyBuZWVk cyBuZXcgcHJvcHMgYW5kIHdoYXRub3QuIFRoaXMgaXMga2luZGEgCj4+IHdoYXQKPj4gdGhlIGk5 MTUgImZhc3RzZXQiIHN0dWZmIGFscmVhZHkgZG9lczoKPj4gMS4gdXNlcnNwYWNlIGFza3MgZm9y IHNvbWV0aGluZyB0byBiZSBjaGFuZ2VkIHZpYSBhdG9taWMKPj4gMi4gZHJpdmVyIGNhbGN1bGF0 ZXMgd2hldGhlciBhIG1vZGVzZXQgaXMgYWN0dWFsbHkgcmVxdWlyZWQKPj4gMy4gYXRvbWljIHZh bGlkYXRlcyBuZWVkX21vZGVzZXQoKSB2cy4gRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQK Pj4gNC4gaWYgKG5lZWRfbW9kZXNldCkgaGVhdnl3ZWlnaHRfY29tbWl0KCkgZWxzZSBsaWdodHdl aWdodF9jb21taXQoKQo+PiAKPj4gSWUuIHdoeSBzaG91bGQgdXNlcnNwYWNlIHJlYWxseSBjYXJl IGFib3V0IGFueXRoaW5nIGV4Y2VwdCB0aGUKPj4gImZsaWNrZXJzIGFyZSBPSyIgdnMuICJmbGlj a2VycyBub3Qgd2FudGVkIiB0aGluZz8KPiAKPiBBZ3JlZSwgSSBkb24ndCB0aGluayB0aGUgc2Vh bWxlc3MgbW9kZXNldCAoaWU6IGNoYW5naW5nIHJlc29sdXRpb24gCj4gd2l0aG91dAo+IGZsaWNr ZXIpIG5lZWRzIGEgcHJvcGVydHkuIEp1c3QgbmVlZCB0byB0ZXN0IHRoZSBjb21taXQgd2l0aG91 dCAKPiBBTExPV19NT0RFU0VUCj4gYW5kIGNvbW1pdCBpdCBpZiB0aGUgdGVzdCBwYXNzZXMuCj4g CgpBZ3JlZWQgdGhhdCBhIFRFU1RfT05MWSBjb21taXQgd2l0aG91dCBBTExPV19NT0RFU0VUIGZs YWcgY2FuIGJlIHVzZWQgdG8gCmNoZWNrCndoZXRoZXIgdGhlIG1vZGVzZXQgY2FuIGJlIGRvbmUg c2VhbWxlc3MuIEJ1dCBzaW5jZSB0aGVyZSBhcmUgbm8gZXJyb3IgCmNvZGUgcmV0dXJucywKdGhl IGNsaWVudCBjYW5ub3QgZGlzdGluZ3Vpc2ggdGhlIHRlc3Rfb25seSBjb21taXQgZmFpbHVyZXMg ZnJvbSBvdGhlciAKaW52YWxpZCBjb25maWcgZmFpbHVyZXMuCgpBbHNvLCBub3RlIHRoYXQgd2hl biB0aGUgY2xpZW50IHNlZXMgdHdvIDEwODBwIG1vZGVzICh2aWQvY21kKSBhbmQgaXQgaXMgCmlu dGVyZXN0ZWQgb25seQp0byBkbyAqb25seSogc2VhbWxlc3Mgc3dpdGNoZXMsIHdpdGhvdXQgYW55 IGFkZGl0aW9uYWwgZmxhZyBpdCBjYW5ub3QgCmRpc3Rpbmd1aXNoIGJldHdlZW4KdGhlc2UgdHdv IDEwODBwIG1vZGVzLiBUaGUgY2xpZW50IGhhcyB0byBpbnZva2UgdHdvIHRlc3Rfb25seSBjb21t aXRzIAp3aXRoIHRoZXNlCm1vZGVzIHRvIGlkZW50aWZ5IHRoZSBzZWFtbGVzcyBvbmUuIElzIHRo YXQgYSBwcmVmZXJyZWQgYXBwcm9hY2g/CgpJbnRlbCdzICJmYXN0c2V0IiBjYWxjdWxhdGVzIHRo ZSBuZWVkIGZvciBtb2Rlc2V0IGludGVybmFsbHkgYmFzZWQgb24gCnRoZQpjb25maWd1cmF0aW9u IGFuZCBjaG9vc2VzIHRoZSBiZXN0IGNvbW1pdCBwYXRoLiBCdXQgdGhlIHJlcXVpcmVtZW50IGhl cmUKaXMgdG8gZXhwb3NlIHRoZSBpbmZvcm1hdGlvbiB1cC1mcm9udCBzaW5jZSB0aGUgdXNlIGNh c2UgY2Fubm90IGFmZm9yZAp0byBmYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBtb2Rlc2V0IHdoZW4g aXQgaGFzIHJlcXVlc3RlZCBmb3IgYSBzZWFtbGVzcyAKb25lLgoKPj4gCj4+IEFsc28gd2hhdCdz IHRoZSBiZW5lZml0IG9mIHVzaW5nIHZpZGVvIG1vZGUgaWYgeW91ciBwYW5lbCBzdXBwb3J0ZXMK Pj4gY29tbWFuZCBtb2RlPyBDYW4geW91IHR1cm4gb2ZmIHRoZSBtZW1vcnkgaW4gdGhlIHBhbmVs IGFuZCBhY3R1YWxseQo+PiBzYXZlIHBvd2VyIHRoYXQgd2F5PyBBbmQgaWYgdGhlcmUgaXMgYSBi ZW5lZml0IGNhbid0IHRoZSBkcml2ZXIganVzdAo+PiBhdXRvbWFnaWNhbGx5IHN3aXRjaCBiZXR3 ZWVuIHRoZSB0d28gYmFzZWQgb24gaG93IG9mdGVuIHRoaW5ncyBhcmUKPj4gZ2V0dGluZyB1cGRh dGVkPyBUaGF0IHdvdWxkIG1hdGNoIGhvdyBlRFAgUFNSIGFscmVhZHkgd29ya3MuCj4gCj4gSSdt IGd1ZXNzaW5nIHZpZGVvIG1vZGUgbWlnaHQgaGF2ZSBzb21lIGxhdGVuY3kgYmVuZWZpdHMgb3Zl ciBjb21tYW5kIAo+IG1vZGU/Cj4gCj4gU2VhbgoKWWVzLiBQcmV0dHkgbXVjaCB0aG9zZSBhcmUg cmVhc29ucyB3ZSBuZWVkIHRvIHN3aXRjaCB0byB2aWRlbyBtb2RlLiBCdXQgCmluc3RlYWQKb2Yg bWFraW5nIHRoZSBkZWNpc2lvbiBpbnRlcm5hbCB0byB0aGUgZHJpdmVyIGJhc2VkIG9uIHRoZSBm cmVxdWVuY3kgb2YgCmZyYW1lIHVwZGF0ZXMsCndlIGhhdmUgcHJvcHJpZXRhcnkgdXNlIGNhc2Vz IHdoZXJlIHRoZSBjbGllbnQgaGFzIHRvIHRyaWdnZXIgdGhlIHN3aXRjaCAKZXhwbGljaXRseS4K U28gd2UgYXJlIHRyeWluZyB0byBmaW5kIHdheXMgdG8gcmVwcmVzZW50IHRoZSBzYW1lIHJlc29s dXRpb24gaW4gYm90aCAKdmlkZW8vY21kIG1vZGVzLgoKVGhhbmtzIGFuZCBSZWdhcmRzLApKZXlr dW1hciBTLgoKPiAKPj4gCj4+IC0tCj4+IFZpbGxlIFN5cmrDpGzDpAo+PiBJbnRlbAoKLS0gCkpl eWt1bWFyIFMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs