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=-2.0 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 23752C76195 for ; Fri, 19 Jul 2019 09:06:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E2C562184E for ; Fri, 19 Jul 2019 09:05:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="fuIUS7cZ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727344AbfGSJF7 (ORCPT ); Fri, 19 Jul 2019 05:05:59 -0400 Received: from mail-ed1-f68.google.com ([209.85.208.68]:42260 "EHLO mail-ed1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726036AbfGSJF6 (ORCPT ); Fri, 19 Jul 2019 05:05:58 -0400 Received: by mail-ed1-f68.google.com with SMTP id v15so33851828eds.9 for ; Fri, 19 Jul 2019 02:05:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=58ReAIoQq8wEmL8BTM+vhh8BmnoSmKiAjn22g3TRn8A=; b=fuIUS7cZNX8+X1WJEfd5HZQkQ+XRs569C1Lk5Xt3hbdagNbt4BsmoRpGucm9Dqp7c+ jdV9jsXACjiH+sIdOz/TySDTN/T+SU6OeY9N4mzseUx359tmhWGabO3QCljKUZRJkO4x +rgDZnjr2WHTXwLeqta/vZHku2WdnurN0Zss0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :references:mime-version:content-disposition:in-reply-to:user-agent; bh=58ReAIoQq8wEmL8BTM+vhh8BmnoSmKiAjn22g3TRn8A=; b=UG4rOl2/fGi0wD+Z+NKKXpiUPX18jFF4qFeytjyhhxVD+2yeYmCvd4KvbsPCUI2D+J wXjtHqZimPI4qLEjPUJxGw58egPIUxnLFMVbkMcClvndwa0EkfUhnzgiDYBqaIFTck9B 4NVmTdIa6PrvZc/w3quXDTCw4ju3fEjEtbYqJ/ABTqrmqLQOKCkYDZZ+S4zh5r2goajf Dq7TGJbURrFlqMSfOGxUZQJSdGOeAJRD9jruuwNGAlYY7GzcY60gufcjuHc6wLdUJdFC 9cSB2ZEYckBEQhrVbFjH4cG1PbeOC8iG11lVEZwUKwt1M+Vrt/Jwtn34OiVGh9v17d9H eAaQ== X-Gm-Message-State: APjAAAXFrYg2xqYeK2vtVhj50NFrLp8JufnHCoBo6C2+WHHV95rHNSNd URqskcRs5rN8iVmqrUyL8QQ= X-Google-Smtp-Source: APXvYqxKWkHiETj8QiV/6v9sPPn3a6h3Fcs93lPEOlq1VTeSnK29mqw8ew8q9+aUrxxNuIZfV/ZIKA== X-Received: by 2002:a17:906:90cf:: with SMTP id v15mr38577072ejw.77.1563527156359; Fri, 19 Jul 2019 02:05:56 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:569e:0:3106:d637:d723:e855]) by smtp.gmail.com with ESMTPSA id w27sm8805587edw.63.2019.07.19.02.05.54 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Fri, 19 Jul 2019 02:05:55 -0700 (PDT) Date: Fri, 19 Jul 2019 11:05:53 +0200 From: Daniel Vetter To: Jeykumar Sankaran Cc: Daniel Vetter , dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, seanpaul@chromium.org, robdclark@gmail.com, pdhaval@codeaurora.org, Daniel Vetter Subject: Re: [RFC] Expanding drm_mode_modeinfo flags Message-ID: <20190719090553.GF15868@phenom.ffwll.local> References: <1562870805-32314-1-git-send-email-jsanka@codeaurora.org> <20190716090712.GY15868@phenom.ffwll.local> <16fee2b42fa03d2cf104452223dcf5af@codeaurora.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <16fee2b42fa03d2cf104452223dcf5af@codeaurora.org> X-Operating-System: Linux phenom 4.19.0-5-amd64 User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org 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: > > > Hello All, > > > drm_mode_modeinfo::flags is a 32 bit field currently used to > > > describe the properties of a connector mode. I see the least order > > 22 bits > > > are already in use. Posting this RFC to discuss on any potential > > plans to > > > expand the bit range support of this field for growing mode > > properties and > > > ways to handle one such property needed by the msm dpu driver. > > > > > > msm drivers support panels which can dynamically switch between > > > video(active) and command(smart) modes. Within video mode, they > > > also > > support > > > switching between resolutions seamlessly i.e. glitch free > > > resolution > > switch. > > > But they cannot do a seamless switch from a resolutions from video > > to > > > command or vice versa. Clients need to be aware for these > > capablities before > > > they switch between the resolutions. Since these capabilities are > > identified > > > per drm_mode, we are considering the below two approaches to > > > handle > > this > > > use case. > > > > > > Option 1: > > > Attached patch adds flag values to associate a drm_mode to > > video/command > > > mode and to indicate its capability to do a seamless switch. > > > > > > Option 2: > > > drm_mode_modeinfo can expose a new "private_flags" field to handle > > vendor > > > specific mode flags. Besides the above mentioned use case, we are > > also > > > expoloring methods to handle some of our display port resolution > > switch use > > > cases where the DP ports can be operated in a tiled/detiled modes. > > This > > > approach will provide a standard channel for drm driver vendors > > > for > > their > > > growing need for drm_mode specific capabilities. > > > > > > Please provide your inputs on the options or any upstream friendly > > > recommendation to handle such custom use cases. > > > > > > Thanks and Regards, > > > Jeykumar S. > > > > > > Jeykumar Sankaran (1): > > > 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. 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. -Daniel > > Sure. We can use this to indicate whether the connector representing the > panel > can support the dynamic glitch-free switch. But when the panel supports both > video and command mode resolutions and such glitch-free switch is possible > only between > video mode resolutions, we need per resolution(drm_mode_modeinfo) > information > to identify the resolutions enumerated for video mode. > > Below is an example of the compositor utility function which can use the > tv_flicker_property > and the proposed modeinfo flags to identify glitch-free switches. > > bool is_seamless_switch_supported(struct drm_mode_modeinfo src_mode, struct > drm_mode_modeinfo *dst_mode, bool > flicker_reduction_supported) > { > if (!flicker_reduction_supported) { > printf("flicker reduction prop not set for the > connector\n"); > return false; > } > > /* > * Seamless switch(if supported) is possible only between video > mode > * resolutions > */ > if (src_mode->flags & DRM_MODE_FLAG_VIDEO_MODE && > dst_mode->flags & DRM_MODE_FLAG_VIDEO_MODE) > return true; > else > return false; > > } > > > -- > Jeykumar S -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC] Expanding drm_mode_modeinfo flags Date: Fri, 19 Jul 2019 11:05:53 +0200 Message-ID: <20190719090553.GF15868@phenom.ffwll.local> References: <1562870805-32314-1-git-send-email-jsanka@codeaurora.org> <20190716090712.GY15868@phenom.ffwll.local> <16fee2b42fa03d2cf104452223dcf5af@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id C38AC6E5D2 for ; Fri, 19 Jul 2019 09:05:57 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id e3so33858537edr.10 for ; Fri, 19 Jul 2019 02:05:57 -0700 (PDT) Content-Disposition: inline In-Reply-To: <16fee2b42fa03d2cf104452223dcf5af@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jeykumar Sankaran 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 T24gVGh1LCBKdWwgMTgsIDIwMTkgYXQgMTE6MTg6NDJBTSAtMDcwMCwgSmV5a3VtYXIgU2Fua2Fy YW4gd3JvdGU6Cj4gT24gMjAxOS0wNy0xNiAwMjowNywgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+ IE9uIFRodSwgSnVsIDExLCAyMDE5IGF0IDExOjQ2OjQ0QU0gLTA3MDAsIEpleWt1bWFyIFNhbmth cmFuIHdyb3RlOgo+ID4gPiAgICAgSGVsbG8gQWxsLAo+ID4gPiAgICAgCWRybV9tb2RlX21vZGVp bmZvOjpmbGFncyBpcyBhIDMyIGJpdCBmaWVsZCBjdXJyZW50bHkgdXNlZCB0bwo+ID4gPiAgICAg ZGVzY3JpYmUgdGhlIHByb3BlcnRpZXMgb2YgYSBjb25uZWN0b3IgbW9kZS4gSSBzZWUgdGhlIGxl YXN0IG9yZGVyCj4gPiAyMiBiaXRzCj4gPiA+ICAgICBhcmUgYWxyZWFkeSBpbiB1c2UuIFBvc3Rp bmcgdGhpcyBSRkMgdG8gZGlzY3VzcyBvbiBhbnkgcG90ZW50aWFsCj4gPiBwbGFucyB0bwo+ID4g PiAgICAgZXhwYW5kIHRoZSBiaXQgcmFuZ2Ugc3VwcG9ydCBvZiB0aGlzIGZpZWxkIGZvciBncm93 aW5nIG1vZGUKPiA+IHByb3BlcnRpZXMgYW5kCj4gPiA+ICAgICB3YXlzIHRvIGhhbmRsZSBvbmUg c3VjaCBwcm9wZXJ0eSBuZWVkZWQgYnkgdGhlIG1zbSBkcHUgZHJpdmVyLgo+ID4gPiAKPiA+ID4g ICAgIG1zbSBkcml2ZXJzIHN1cHBvcnQgcGFuZWxzIHdoaWNoIGNhbiBkeW5hbWljYWxseSBzd2l0 Y2ggYmV0d2Vlbgo+ID4gPiAgICAgdmlkZW8oYWN0aXZlKSBhbmQgY29tbWFuZChzbWFydCkgbW9k ZXMuIFdpdGhpbiB2aWRlbyBtb2RlLCB0aGV5Cj4gPiA+IGFsc28KPiA+IHN1cHBvcnQKPiA+ID4g ICAgIHN3aXRjaGluZyBiZXR3ZWVuIHJlc29sdXRpb25zIHNlYW1sZXNzbHkgaS5lLiBnbGl0Y2gg ZnJlZQo+ID4gPiByZXNvbHV0aW9uCj4gPiBzd2l0Y2guCj4gPiA+ICAgICBCdXQgdGhleSBjYW5u b3QgZG8gYSBzZWFtbGVzcyBzd2l0Y2ggZnJvbSBhIHJlc29sdXRpb25zIGZyb20gdmlkZW8KPiA+ IHRvCj4gPiA+ICAgICBjb21tYW5kIG9yIHZpY2UgdmVyc2EuIENsaWVudHMgbmVlZCB0byBiZSBh d2FyZSBmb3IgdGhlc2UKPiA+IGNhcGFibGl0aWVzIGJlZm9yZQo+ID4gPiAgICAgdGhleSBzd2l0 Y2ggYmV0d2VlbiB0aGUgcmVzb2x1dGlvbnMuIFNpbmNlIHRoZXNlIGNhcGFiaWxpdGllcyBhcmUK PiA+IGlkZW50aWZpZWQKPiA+ID4gICAgIHBlciBkcm1fbW9kZSwgd2UgYXJlIGNvbnNpZGVyaW5n IHRoZSBiZWxvdyB0d28gYXBwcm9hY2hlcyB0bwo+ID4gPiBoYW5kbGUKPiA+IHRoaXMKPiA+ID4g ICAgIHVzZSBjYXNlLgo+ID4gPiAKPiA+ID4gICAgIE9wdGlvbiAxOgo+ID4gPiAgICAgQXR0YWNo ZWQgcGF0Y2ggYWRkcyBmbGFnIHZhbHVlcyB0byBhc3NvY2lhdGUgYSBkcm1fbW9kZSB0bwo+ID4g dmlkZW8vY29tbWFuZAo+ID4gPiAgICAgbW9kZSBhbmQgdG8gaW5kaWNhdGUgaXRzIGNhcGFiaWxp dHkgdG8gZG8gYSBzZWFtbGVzcyBzd2l0Y2guCj4gPiA+IAo+ID4gPiAgICAgT3B0aW9uIDI6Cj4g PiA+ICAgICBkcm1fbW9kZV9tb2RlaW5mbyBjYW4gZXhwb3NlIGEgbmV3ICJwcml2YXRlX2ZsYWdz IiBmaWVsZCB0byBoYW5kbGUKPiA+IHZlbmRvcgo+ID4gPiAgICAgc3BlY2lmaWMgbW9kZSBmbGFn cy4gQmVzaWRlcyB0aGUgYWJvdmUgbWVudGlvbmVkIHVzZSBjYXNlLCB3ZSBhcmUKPiA+IGFsc28K PiA+ID4gICAgIGV4cG9sb3JpbmcgbWV0aG9kcyB0byBoYW5kbGUgc29tZSBvZiBvdXIgZGlzcGxh eSBwb3J0IHJlc29sdXRpb24KPiA+IHN3aXRjaCB1c2UKPiA+ID4gICAgIGNhc2VzIHdoZXJlIHRo ZSBEUCBwb3J0cyBjYW4gYmUgb3BlcmF0ZWQgaW4gYSB0aWxlZC9kZXRpbGVkIG1vZGVzLgo+ID4g VGhpcwo+ID4gPiAgICAgYXBwcm9hY2ggd2lsbCBwcm92aWRlIGEgc3RhbmRhcmQgY2hhbm5lbCBm b3IgZHJtIGRyaXZlciB2ZW5kb3JzCj4gPiA+IGZvcgo+ID4gdGhlaXIKPiA+ID4gICAgIGdyb3dp bmcgbmVlZCBmb3IgZHJtX21vZGUgc3BlY2lmaWMgY2FwYWJpbGl0aWVzLgo+ID4gPiAKPiA+ID4g ICAgIFBsZWFzZSBwcm92aWRlIHlvdXIgaW5wdXRzIG9uIHRoZSBvcHRpb25zIG9yIGFueSB1cHN0 cmVhbSBmcmllbmRseQo+ID4gPiAgICAgcmVjb21tZW5kYXRpb24gdG8gaGFuZGxlIHN1Y2ggY3Vz dG9tIHVzZSBjYXNlcy4KPiA+ID4gCj4gPiA+ICAgICBUaGFua3MgYW5kIFJlZ2FyZHMsCj4gPiA+ ICAgICBKZXlrdW1hciBTLgo+ID4gPiAKPiA+ID4gSmV5a3VtYXIgU2Fua2FyYW4gKDEpOgo+ID4g PiAgIGRybTogYWRkIG1vZGUgZmxhZ3MgaW4gdWFwaSBmb3Igc2VhbWxlc3MgbW9kZSBzd2l0Y2gK PiA+IAo+ID4gSSB0aGluayB0aGUgdWFwaSBpcyB0aGUgdHJpdmlhbCBwYXJ0IGhlcmUsIHRoZSBy ZWFsIGRlYWwgaXMgaG93Cj4gPiB1c2Vyc3BhY2UKPiA+IHVzZXMgdGhpcy4gQ2FuIHlvdSBwbHMg cG9zdCB0aGUgcGF0Y2hlcyBmb3IgeW91ciBjb21wb3NpdG9yPwo+ID4gCj4gPiBBbHNvIG5vdGUg dGhhdCB3ZSBhbHJlYWR5IGFsbG93IHVzZXJzcGFjZSB0byB0ZWxsIHRoZSBrZXJuZWwgd2hldGhl cgo+ID4gZmxpY2tlcmluZyBpcyBvayBvciBub3QgZm9yIGEgbW9kZXNldC4gbXNtIGRyaXZlciBj b3VsZCB1c2UgdGhhdCB0byBhdAo+ID4gbGVhc3QgdGVsbCB1c2Vyc3BhY2Ugd2hldGhlciBhIG1v ZGVzZXQgY2hhbmdlIGlzIHBvc3NpYmxlLiBTbyB5b3UgY2FuCj4gPiBhbHJlYWR5IGltcGxlbWVu dCBnbGl0Y2gtZnJlZSBtb2Rlc2V0IGNoYW5nZXMgZm9yIGF0IGxlYXN0IHZpZGVvIG1vZGUuCj4g PiAtRGFuaWVsCj4gCj4gSSBiZWxpZXZlIHlvdSBhcmUgcmVmZXJyaW5nIHRvIHRoZSBiZWxvdyB0 diBwcm9wZXJ0eSBvZiB0aGUgY29ubmVjdG9yLgo+IAo+IC8qKgo+ICAqIEB0dl9mbGlja2VyX3Jl ZHVjdGlvbl9wcm9wZXJ0eTogT3B0aW9uYWwgVFYgcHJvcGVydHkgdG8gY29udHJvbCB0aGUKPiAg KiBmbGlja2VyIHJlZHVjdGlvbiBtb2RlLgo+ICAqLwo+IHN0cnVjdCBkcm1fcHJvcGVydHkgKnR2 X2ZsaWNrZXJfcmVkdWN0aW9uX3Byb3BlcnR5OwoKTm90IGV2ZW4gY2xvc2UgOi0pCgpJIG1lYW4g dGhlIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VUIGZsYWcgZm9yIHRoZSBhdG9taWMgaW9j dGwuIFRoaXMKaXMgbm90IGEgcHJvcGVydHkgb2YgYSBtb2RlLCB0aGlzIGlzIGEgcHJvcGVydHkg b2YgYSBfdHJhbnNpdGlvbl8gYmV0d2Vlbgpjb25maWd1cmF0aW9ucy4gU29tZSB0cmFuc2l0aW9u cyBjYW4gYmUgZG9uZSBmbGlja2VyIGZyZWUsIG90aGVycyBjYW4ndC4KClRoZXJlJ3MgdGhlbiBz dGlsbCB0aGUgcXVlc3Rpb24gb2YgaG93IHRvIHBpY2sgdmlkZW8gdnMgY29tbWFuZCBtb2RlLCBi dXQKaW1vIGJldHRlciB0byBzdGFydCB3aXRoIGltcGxlbWVudGluZyB0aGUgdHJhbnNpdGlvbiBi ZWhhdmlvdXIgY29ycmVjdGx5CmZpcnN0LgotRGFuaWVsCgo+IAo+IFN1cmUuIFdlIGNhbiB1c2Ug dGhpcyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBjb25uZWN0b3IgcmVwcmVzZW50aW5nIHRoZQo+ IHBhbmVsCj4gY2FuIHN1cHBvcnQgdGhlIGR5bmFtaWMgZ2xpdGNoLWZyZWUgc3dpdGNoLiBCdXQg d2hlbiB0aGUgcGFuZWwgc3VwcG9ydHMgYm90aAo+IHZpZGVvIGFuZCBjb21tYW5kIG1vZGUgcmVz b2x1dGlvbnMgYW5kIHN1Y2ggZ2xpdGNoLWZyZWUgc3dpdGNoIGlzIHBvc3NpYmxlCj4gb25seSBi ZXR3ZWVuCj4gdmlkZW8gbW9kZSByZXNvbHV0aW9ucywgd2UgbmVlZCBwZXIgcmVzb2x1dGlvbihk cm1fbW9kZV9tb2RlaW5mbykKPiBpbmZvcm1hdGlvbgo+IHRvIGlkZW50aWZ5IHRoZSByZXNvbHV0 aW9ucyBlbnVtZXJhdGVkIGZvciB2aWRlbyBtb2RlLgo+IAo+IEJlbG93IGlzIGFuIGV4YW1wbGUg b2YgdGhlIGNvbXBvc2l0b3IgdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjYW4gdXNlIHRoZQo+IHR2 X2ZsaWNrZXJfcHJvcGVydHkKPiBhbmQgdGhlIHByb3Bvc2VkIG1vZGVpbmZvIGZsYWdzIHRvIGlk ZW50aWZ5IGdsaXRjaC1mcmVlIHN3aXRjaGVzLgo+IAo+ICBib29sIGlzX3NlYW1sZXNzX3N3aXRj aF9zdXBwb3J0ZWQoc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIHNyY19tb2RlLCBzdHJ1Y3QKPiAg ICAgICAgICAgICAgICAgIGRybV9tb2RlX21vZGVpbmZvICpkc3RfbW9kZSwgYm9vbAo+IGZsaWNr ZXJfcmVkdWN0aW9uX3N1cHBvcnRlZCkKPiAgewo+ICAgICAgICAgIGlmICghZmxpY2tlcl9yZWR1 Y3Rpb25fc3VwcG9ydGVkKSB7Cj4gICAgICAgICAgICAgICAgICBwcmludGYoImZsaWNrZXIgcmVk dWN0aW9uIHByb3Agbm90IHNldCBmb3IgdGhlCj4gY29ubmVjdG9yXG4iKTsKPiAgICAgICAgICAg ICAgICAgIHJldHVybiBmYWxzZTsKPiAgICAgICAgICB9Cj4gCj4gICAgICAgICAgLyoKPiAgICAg ICAgICAgKiBTZWFtbGVzcyBzd2l0Y2goaWYgc3VwcG9ydGVkKSBpcyBwb3NzaWJsZSBvbmx5IGJl dHdlZW4gdmlkZW8KPiBtb2RlCj4gICAgICAgICAgICogcmVzb2x1dGlvbnMKPiAgICAgICAgICAg Ki8KPiAgICAgICAgICBpZiAoc3JjX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19WSURFT19N T0RFICYmCj4gICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9tb2RlLT5mbGFncyAmIERSTV9N T0RFX0ZMQUdfVklERU9fTU9ERSkKPiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwo+ICAg ICAgICAgIGVsc2UKPiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiAKPiAgfQo+IAo+ IAo+IC0tIAo+IEpleWt1bWFyIFMKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVy LCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=