GNU bug report logs - #78843
Various vtable bug fixes and enhancements

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Reported by: Stéphane Marks <shipmints@HIDDEN>; dated Thu, 19 Jun 2025 20:25:05 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 24 Jun 2025 11:26:09 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Jun 24 07:26:09 2025
Received: from localhost ([127.0.0.1]:41476 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uU1my-0002WF-ES
	for submit <at> debbugs.gnu.org; Tue, 24 Jun 2025 07:26:08 -0400
Received: from mail-ua1-x934.google.com ([2607:f8b0:4864:20::934]:42473)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uU1mv-0002VH-GE
 for 78843 <at> debbugs.gnu.org; Tue, 24 Jun 2025 07:26:06 -0400
Received: by mail-ua1-x934.google.com with SMTP id
 a1e0cc1a2514c-88150e9fba7so1471893241.1
 for <78843 <at> debbugs.gnu.org>; Tue, 24 Jun 2025 04:26:05 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1750764359; x=1751369159; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=aJNGLK0+SJdfBzyWnIz+gIX9k7I9uJ5STtcWPeW0bEE=;
 b=lfkubg+SPBbUFX4VANivYI/qW1ehi/scGVDXnG3rc40DK8iJ0hjwF9qaC+AHcDmVfA
 +wpjeixwPa5wUvFKMY0LkQh0ZNj5GlqnV2R2GwNFtG1NsEGyCMfYS1afhynVO5EcaaDS
 5hbHa21WAo86Kpg1Y1Z+qslub3dyfJAqGNTN1cdI5dJ02dBtcUkq35UU70CkjkouVQ8p
 o28M9Ay+3COzeFrTglzEqopTvLHKYihQ4KDFU1ufYMcsNwJhK7rIZQQXafvqOVaCAUzL
 VQGeUucB0z2F8rHAZrdF0TUATyc3qKnLngGLAS+Ts0Qe4HylTPExkPYvIPBT2EQnge6j
 Tuow==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1750764359; x=1751369159;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=aJNGLK0+SJdfBzyWnIz+gIX9k7I9uJ5STtcWPeW0bEE=;
 b=M5bZMxPAgb+XI4yPW+jJf2L8vr8etbwhFzW18Qzzm1GVYFC5lgoeN+HmvE76zDwrxh
 iGHE79qukrWgu3heQmpqVxKtmvlW+OoLeteULqClJgp3jEok2zVEt+8GvafTCzOgE/XQ
 sLEhi5z3HiZijtGYsPY7FFFVlH955Vaav5t89EpdWw8cz8UPPr8GplOLmhOsKeDDP3cn
 sj4OgEkTnDp8X9l8hg5DFG7FcJ4198sQ6OBjMisAvc7Tqtr4ogJ258YYcLNtb+PMJneR
 2KAhD+bj/xcBCb5wRAgc3VZuUYz/+G5ZUE25KKvqrUa8DYQXpM9ZhShPjCFo4jltQz6I
 Xy1g==
X-Gm-Message-State: AOJu0Yw+okzQZy0KKR7mu8A4ZoSLCYvS8PBHiIu1LwZhtBRT6Rgu+TOy
 8xrwBZ1ki8c8JBrnfYgYCpQJzxLC5IQK1UeWI9qzaIeQNDW75D36SDMPzd4jcKMhMa56pLDXikJ
 jOnJZl4H3UrkO3+VLXg35vRj3+hfbpuc=
X-Gm-Gg: ASbGncuY0mWsLwYq/CoSmbU4ZmKdq9uNeIfer0r9uZkBL3HiYVyirB+YGtAk6iuVx1+
 9c8b87IGL5R7PxwrB8C22im6Kb6wxUkAVdn+pvo+lJSrt1Xkuk8j0zb1FVuE1LkRkXn7upaIcKX
 Eym3XTIJ8ucTwRsBxA0QuY69UTWytLlV/msRCGZssZ07j8oQ==
X-Google-Smtp-Source: AGHT+IFPtklkK8/Uzy6rrswzBXfI6hHZD2bdeHanWetrY3x/VUF17/mdd741dOkgdwuJx6UHzk0bP2rfr9dcwivAHWM=
X-Received: by 2002:a05:6102:6888:b0:4e5:9608:1298 with SMTP id
 ada2fe7eead31-4eb52b04023mr1651081137.9.1750764359325; Tue, 24 Jun 2025
 04:25:59 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <CAN+1HbphJQ3qE1U+nqhcHixQj34nzabfi+9oW6rVh2OMGpp5FQ@HIDDEN>
 <87ikklpo18.fsf@HIDDEN>
In-Reply-To: <87ikklpo18.fsf@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Tue, 24 Jun 2025 07:25:48 -0400
X-Gm-Features: Ac12FXw5XhqxUl0K5ra3DTZVoqiDGMpqu32fcJfEebwLzvcld0BrvnfCDJ__hlw
Message-ID: <CAN+1HbrSaM3J10wMS2xh3iz6xZZLosnQdm-y_U2Bfg2-7veEFg@HIDDEN>
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
To: Augusto Stoffel <arstoffel@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000b91bd606384f971f"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78843
Cc: Adam Porter <adam@HIDDEN>, Spencer Baugh <sbaugh@HIDDEN>,
 Lars Ingebrigtsen <larsi@HIDDEN>,
 Kristoffer Balintona <krisbalintona@HIDDEN>, 78843 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--000000000000b91bd606384f971f
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Tue, Jun 24, 2025 at 4:00=E2=80=AFAM Augusto Stoffel <arstoffel@HIDDEN=
m> wrote:

> On Sat, 21 Jun 2025 at 13:40, St=C3=A9phane Marks wrote:
>
> > On Sat, Jun 21, 2025 at 11:41=E2=80=AFAM St=C3=A9phane Marks <shipmints=
@gmail.com>
> wrote:
> >
> >  On Thu, Jun 19, 2025 at 4:25=E2=80=AFPM St=C3=A9phane Marks <shipmints=
@gmail.com>
> >  wrote:
> >
> >  Bug for a consolidated patch which is in the process of being prepared=
.
> >
> >  Large patch attached.  All the changes, aside from bug fixes, should b=
e
> backward
> >  compatible.  I've cc'd a few of the major vtable users whose code base=
s
> helped
> >  inform many bug fixes and enhancements.  Some of you have helped test
> and
> >  provide feedback along the way.  Please try this out (and review the
> updated
> >  texinfo documentation if you want to).
> >
> >  Feedback here and/or to me directly is fine.
> >
> > After double checking comint-mime, it looks like I should add
> header-text-properties
> > just as I did row-text-properties so that comint-mime doesn't need
> shenanigans.  On
> > the list.  What else?
>
> Part of the comint-mime shenanigan is because I wanted certain text
> properties in the vtable area.  How to best achieve this could be a
> discussion to be had.
>
> The other reason for the shenanigan is that I insert a vtable in a
> buffer with font lock and so I need font lock to not override the vtable
> faces.  This is just a bug to be fixed.  Do you address that in your
> patch?
>

Nope.  I did your other use cases but not this one.  I'll take a look at
that today.

If I "mimecat -t text/html table.html" with old and new vtable, they look
the same, so at least it's backward compatible.

Thanks for working on vtable ;-).
>

It's been fun to improve.

--000000000000b91bd606384f971f
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Tue, Jun 24, 2025 at 4:00=E2=80=AFAM Augusto Stoffel &lt;<a href=3D"mail=
to:arstoffel@HIDDEN">arstoffel@HIDDEN</a>&gt; wrote:</span></div></di=
v><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gma=
il_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,2=
04,204);padding-left:1ex">On Sat, 21 Jun 2025 at 13:40, St=C3=A9phane Marks=
 wrote:<br>
<br>
&gt; On Sat, Jun 21, 2025 at 11:41=E2=80=AFAM St=C3=A9phane Marks &lt;<a hr=
ef=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>=
&gt; wrote:<br>
&gt;<br>
&gt;=C2=A0 On Thu, Jun 19, 2025 at 4:25=E2=80=AFPM St=C3=A9phane Marks &lt;=
<a href=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN=
m</a>&gt;<br>
&gt;=C2=A0 wrote:<br>
&gt;<br>
&gt;=C2=A0 Bug for a consolidated patch which is in the process of being pr=
epared.<br>
&gt;<br>
&gt;=C2=A0 Large patch attached.=C2=A0 All the changes, aside from bug fixe=
s, should be backward<br>
&gt;=C2=A0 compatible.=C2=A0 I&#39;ve cc&#39;d a few of the major vtable us=
ers whose code bases helped<br>
&gt;=C2=A0 inform many bug fixes and enhancements.=C2=A0 Some of you have h=
elped test and<br>
&gt;=C2=A0 provide feedback along the way.=C2=A0 Please try this out (and r=
eview the updated<br>
&gt;=C2=A0 texinfo documentation if you want to).<br>
&gt;<br>
&gt;=C2=A0 Feedback here and/or to me directly is fine.<br>
&gt;<br>
&gt; After double checking comint-mime, it looks like I should add header-t=
ext-properties<br>
&gt; just as I did row-text-properties so that comint-mime doesn&#39;t need=
 shenanigans.=C2=A0 On<br>
&gt; the list.=C2=A0 What else?<br>
<br>
Part of the comint-mime shenanigan is because I wanted certain text<br>
properties in the vtable area.=C2=A0 How to best achieve this could be a<br=
>
discussion to be had.<br>
<br>
The other reason for the shenanigan is that I insert a vtable in a<br>
buffer with font lock and so I need font lock to not override the vtable<br=
>
faces.=C2=A0 This is just a bug to be fixed.=C2=A0 Do you address that in y=
our<br>
patch?<br></blockquote><div><br></div><div><div class=3D"gmail_default" sty=
le=3D"font-family:monospace">Nope.=C2=A0 I did your other use cases but not=
=C2=A0this one.=C2=A0 I&#39;ll take a look at that today.</div><div class=
=3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=3D"=
gmail_default" style=3D"font-family:monospace">If I &quot;mimecat=C2=A0-t t=
ext/html table.html&quot; with old and new vtable, they look the same, so a=
t least it&#39;s backward compatible.</div></div><div class=3D"gmail_defaul=
t" style=3D"font-family:monospace"><br></div><blockquote class=3D"gmail_quo=
te" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204=
);padding-left:1ex">Thanks for working on vtable ;-).<br></blockquote><div>=
<br></div><div class=3D"gmail_default" style=3D"font-family:monospace">It&#=
39;s been fun to=C2=A0improve.</div></div></div>

--000000000000b91bd606384f971f--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 24 Jun 2025 08:00:32 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Jun 24 04:00:32 2025
Received: from localhost ([127.0.0.1]:38918 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTyZz-0000u3-Ll
	for submit <at> debbugs.gnu.org; Tue, 24 Jun 2025 04:00:31 -0400
Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]:53614)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <arstoffel@HIDDEN>)
 id 1uTyZw-0000s8-Rt
 for 78843 <at> debbugs.gnu.org; Tue, 24 Jun 2025 04:00:29 -0400
Received: by mail-ej1-x62f.google.com with SMTP id
 a640c23a62f3a-adb5cb6d8f1so790609666b.3
 for <78843 <at> debbugs.gnu.org>; Tue, 24 Jun 2025 01:00:28 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1750752022; x=1751356822; darn=debbugs.gnu.org;
 h=content-transfer-encoding:mime-version:message-id:date:references
 :in-reply-to:subject:cc:to:from:from:to:cc:subject:date:message-id
 :reply-to; bh=QuNugaCYXMrbHkIpyZAhAUm2aYlXfANcEX+5WI/Ju9Y=;
 b=jPmJlQrQOOE3G8yEhYC4ht+Pw3IVhF1ZwdIPeSsI1GSRV1uYaxO0tMIi68zZ3/Ufmt
 vaYtJAUYuJXYNRQC7zgIDT3Vud5l6r7Q8YsXMGrWZ7lmkefd953830lDtdjw5/AC0C7O
 tdd1ZZb9b+CzV109keBku5pTAafQ5KEJL+emJ6gC3gAyJ307H0TZjfWFVsD0CZPRVhIt
 KIay6t/rKjpnoiKQtBXwVlaM73SD91tkjDKaX/u5RbVAA0GYVeWGX5tR1DtorCyutEf8
 wGr5503C+6REskW1vGa4FsQgBcguR3EkYZg9vPTH7EDGQMjsQgDef2vgg8SPyIlrNfmC
 CBPA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1750752022; x=1751356822;
 h=content-transfer-encoding:mime-version:message-id:date:references
 :in-reply-to:subject:cc:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=QuNugaCYXMrbHkIpyZAhAUm2aYlXfANcEX+5WI/Ju9Y=;
 b=Z9I1EEsS19pThluU+Arz+SegKcLz1pXri6J1ZfSiW9Z0+OvQXzueVrnLBGPE1TpkF+
 O/g0eZgRPoq435Pl9bpRi9hn8WegXKfvzhMfdJxfXyFbZHD1FNIVAWZPxboOgR0/F9Ty
 5t23HeXAstsrgA4pfJAj3NWtbwioqMz7e+cpyX4fkjV+x0UUNmabecTbNX7vGw7aLb5M
 a+I5OK/cT1iQ2fWcLG+meXcDNj7kv7HGHWest0a3bi7HssnX3knh+YqnXYN8JTXKz385
 1+F3+C7zY0UWG2L9SULNlXh80FdEDUYDwoedNEs1bUaomGzSfH0SwDKsNbm/RhEtVaje
 hgrg==
X-Gm-Message-State: AOJu0YyApMJLJfjp+ehsWRd+YgP8WZ1J4r/PMqNCGCbge99p6U1Zl7vD
 tP6BWAglt31lq1AE5cwM+n9jA8kxgNwiWt2UYatALlN5CY6FO8KpOyFe
X-Gm-Gg: ASbGncvVwZYFcmUSrrsiOaNZfNxbeFGKSdz7Tlb8rRMA6HsarMR3mh1ZPmaLB6kb6zp
 hHbFCVQvBXGsEK3pwtCBbEW2GEd/DjBGxW2je7bKOzAZHWXcEZzOzjjRm/TuztwYIAjB87qYH1P
 huGltv2liHM6KVifdo84/iqDL/mjCDZmZJjWa68psIN8Xmhr4mJsfLCdYE8V/978SxH4CXDtluy
 EyDKq80zzVxcQxN0tEG1z82QkEX0AmAKhQqgvmHiqH/Fb9cgTVSojLXZCirTEtPGMNUFmGj6pgH
 EPsk90vzFmv5lZQ0sbhPoytV5m/Tak0ay/A0mg==
X-Google-Smtp-Source: AGHT+IFZ/gOFsnSTuhWqFHJvggGGwgiZvlD7nPDSr/vTeJYxUjVtnkPt3nSCYgj17YyDNyLGO3CCJg==
X-Received: by 2002:a17:906:99c2:b0:ad5:c462:3f60 with SMTP id
 a640c23a62f3a-ae05799943bmr1356124066b.16.1750752022183; 
 Tue, 24 Jun 2025 01:00:22 -0700 (PDT)
Received: from ars3 ([2a02:8109:8aa0:6000::7d01])
 by smtp.gmail.com with ESMTPSA id
 a640c23a62f3a-ae053e80b52sm842954966b.37.2025.06.24.01.00.20
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Tue, 24 Jun 2025 01:00:21 -0700 (PDT)
From: Augusto Stoffel <arstoffel@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
In-Reply-To: <CAN+1HbphJQ3qE1U+nqhcHixQj34nzabfi+9oW6rVh2OMGpp5FQ@HIDDEN>
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <CAN+1HbphJQ3qE1U+nqhcHixQj34nzabfi+9oW6rVh2OMGpp5FQ@HIDDEN>
Date: Tue, 24 Jun 2025 10:00:19 +0200
Message-ID: <87ikklpo18.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78843
Cc: Spencer Baugh <sbaugh@HIDDEN>,
 Kristoffer Balintona <krisbalintona@HIDDEN>, 78843 <at> debbugs.gnu.org,
 Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>,
 Augusto Stoffel <arstoffel@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Sat, 21 Jun 2025 at 13:40, St=C3=A9phane Marks wrote:

> On Sat, Jun 21, 2025 at 11:41=E2=80=AFAM St=C3=A9phane Marks <shipmints@g=
mail.com> wrote:
>
>  On Thu, Jun 19, 2025 at 4:25=E2=80=AFPM St=C3=A9phane Marks <shipmints@g=
mail.com>
>  wrote:
>
>  Bug for a consolidated patch which is in the process of being prepared.
>
>  Large patch attached.  All the changes, aside from bug fixes, should be =
backward
>  compatible.  I've cc'd a few of the major vtable users whose code bases =
helped
>  inform many bug fixes and enhancements.  Some of you have helped test and
>  provide feedback along the way.  Please try this out (and review the upd=
ated
>  texinfo documentation if you want to).
>
>  Feedback here and/or to me directly is fine.
>
> After double checking comint-mime, it looks like I should add header-text=
-properties
> just as I did row-text-properties so that comint-mime doesn't need shenan=
igans.  On
> the list.  What else?

Part of the comint-mime shenanigan is because I wanted certain text
properties in the vtable area.  How to best achieve this could be a
discussion to be had.

The other reason for the shenanigan is that I insert a vtable in a
buffer with font lock and so I need font lock to not override the vtable
faces.  This is just a bug to be fixed.  Do you address that in your
patch?

Thanks for working on vtable ;-).

> -St=C3=A9phane




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 24 Jun 2025 02:26:44 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jun 23 22:26:44 2025
Received: from localhost ([127.0.0.1]:35630 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTtMy-00014H-0i
	for submit <at> debbugs.gnu.org; Mon, 23 Jun 2025 22:26:44 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:56010)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uTtMv-000136-C6
 for 78843 <at> debbugs.gnu.org; Mon, 23 Jun 2025 22:26:42 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1uTtMo-00061u-Q9; Mon, 23 Jun 2025 22:26:34 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=dSc21fPx4VIxd5NfMrR/dy9uRd6EmeSh4OdliS+fJeE=; b=FFPQBna/NzU8MxRSWupu
 mxZ4VVWjXxykbGY2kPOlcKAaIXeu5JzOj9VXnK0MKHt8lc2N8UrsYJxhYgHADfRb+XzIagNOarbBY
 NYB8bsWffdQbEmTqQ7zAyJQXXO7jDT7i/eKzRtWtteimP/REo/v5As9mMVSlhrOXBcyarmwgwzsTv
 viqPpMAC9kBGzAhJlqg7tb8culQLa2e35Z1sW+z7jKdWEBIEPPzndVtywKO+hPjiRSHDETYPHmsan
 2E2stGeqm66JOBmef3VKClXlhRTRGCIKKXDOZNktIOpHjr5RM5rTXaJbL8sjj13DohOnELCLpzBKa
 BwaxlOHV2kW1/w==;
Date: Tue, 24 Jun 2025 05:26:31 +0300
Message-Id: <8634bpg9ig.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
In-Reply-To: <CAN+1HbqsEPYpv73NrCYQzqzGJp08_m5hTEzo3XCibyrK30kYKA@HIDDEN>
 (message from =?utf-8?Q?St=C3=A9phane?= Marks on Mon, 23 Jun 2025 13:59:27
 -0400)
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <86ikkogniu.fsf@HIDDEN>
 <CAN+1HboJ=S02rGBVtODe-Jt8T7LcQL12E_1SdS6LH-O_==ugeg@HIDDEN>
 <86h608gljv.fsf@HIDDEN>
 <CAN+1HbpybFrKQz4xqCK+WfOvOXGSSPZautOz-bQZ_QDpLX7xrg@HIDDEN>
 <86frfsgkl1.fsf@HIDDEN>
 <CAN+1Hbo3px=eXDvLE9-4p2SP3ou-=O1EK5iMC=U2m8jU=4CAfA@HIDDEN>
 <86ecvcgj2u.fsf@HIDDEN>
 <CAN+1Hbo41qewJ1jkrgPUM-c1R9QSmBkuUaiA56jtJdt0r+7iTg@HIDDEN>
 <iertt46tm5h.fsf@HIDDEN>
 <CAN+1HbqsEPYpv73NrCYQzqzGJp08_m5hTEzo3XCibyrK30kYKA@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 78843
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org,
 adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Stéphane Marks <shipmints@HIDDEN>
> Date: Mon, 23 Jun 2025 13:59:27 -0400
> Cc: Eli Zaretskii <eliz@HIDDEN>, krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org, 
> 	adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
> 
> Here are the latest two files for ease of testing.  vtable.el, in its current form, is compatible with Emacs 31
> unless and until `string-pixel-width` is updated in compat.  I doubt Eli will want this in Emacs 30 but it could be
> published on ELPA if there is demand?

Indeed, these changes are for Emacs 31.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 23 Jun 2025 17:59:47 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jun 23 13:59:47 2025
Received: from localhost ([127.0.0.1]:57088 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTlSN-0005Sw-K7
	for submit <at> debbugs.gnu.org; Mon, 23 Jun 2025 13:59:47 -0400
Received: from mail-vk1-xa2a.google.com ([2607:f8b0:4864:20::a2a]:53542)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uTlSL-0005SD-6A
 for 78843 <at> debbugs.gnu.org; Mon, 23 Jun 2025 13:59:45 -0400
Received: by mail-vk1-xa2a.google.com with SMTP id
 71dfb90a1353d-528ce9730cfso1360044e0c.3
 for <78843 <at> debbugs.gnu.org>; Mon, 23 Jun 2025 10:59:45 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1750701579; x=1751306379; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=c/stRqkOKA2lLc60VbgFX8sciGYlpmRiFaHcAOucbRY=;
 b=loUo3D0ecFucBmzFhQ1OOwlMdvHKEDP5HvCjOvmJ9q2/k09jpIPbBRphv2zE2Mo8uU
 hNCnWqxvhoKgIrfvwRme8HK+RiegzWM8BoKbpwsPRGMH2Pg1kyUcOSk0/+q2EhFCoXP9
 k6DEFECBvX4b5BnAL7klNBXy9RtEM9wwyLaMXH0AT06fOkPKOwQN2ooGtDB747nsH2MP
 yRKFGz54P92sOuv+TvnBFvwyUoT9vKsiv89PqdyJiQ5UmBVWo0dCJ3tyqAmTetEn+Rux
 Bte/4mTihMUQ4WxO7PuO95aAWgubm6Lu7NESQHkqrRtsLtWrwm/OH7YuC9j60piKH9Hx
 KDtg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1750701579; x=1751306379;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=c/stRqkOKA2lLc60VbgFX8sciGYlpmRiFaHcAOucbRY=;
 b=SvV4vhsvVnWXBDJsUYyuR4BlyvEP8wwqnM5com0nvNgqTTPUlO4sqfVdDze4s6KyRy
 ySXKdxhELVrAis/y3v/tgw9It0+qjBpWZ5XINRJIoW039gjIIaigTD1K9FIkb+j8EuWz
 TtSfH9I9RU9lfqt7dIxLINz7o56mTEDvTAKF9OJznKxyWWDW1H9CPwpUc1wigRsGWZiE
 DFvRlRB6EN5IqZG/g3F2iVQLnes2JtAJa9OiQ6+PPC8xqUN/nLigwr5diCPamuGdPvw4
 mhBDX0xNnU/RqwurJn9Dc6otESpEX7Hdxp+swhMDCFCP8k05QVJWiQs4cFqur4otw7gv
 lZng==
X-Forwarded-Encrypted: i=1;
 AJvYcCV4yqSuyH3yTBJ+RudprgAi0yHgfK2EEnQLkgsvTObSSQ5IiR9fAJFydq4XOUXF4fx6unr05Q==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YwdslFOnqHOFc9hV1hBbLQ7k73IqjDwzsWZRARc7hGpoKQ91iee
 5gYCtgMEBgzKmtqIbCjabPJPnct+oY/WmB2t6UfSoruS7A9PBX9P1/8kqjbw/y7yS2Zhab/FxLF
 BChl0dyseGDFHNXHS3pAbG2AEq5wUfOg=
X-Gm-Gg: ASbGncsPEyqQTC90AwGhhH3OfSzfV+nwucVUHU2arJhvjuDdEoWB5zSn2f1DgRe9Mka
 4Q3rxTG8K1c4fqCYw7+IN2E50Jf6ThC/QGFunsxfPccnIq3jh6yh+cwWkfaJTVj0uEfNL7LOh96
 NSMjcRrwu55CwGBnczpAPDLcjeQ0m7urzo6ehUrpoS2Kd5hw==
X-Google-Smtp-Source: AGHT+IGpnaqEk6vih7zDLFjbLgqah6120xTgqRNnEDjrWIehYMhsshQRPSMai8rQ0B4g6LDTEuggn89DXk5bdKqNypk=
X-Received: by 2002:a05:6122:17a6:b0:526:19e6:fa34 with SMTP id
 71dfb90a1353d-531ad71e7dcmr6467219e0c.1.1750701579273; Mon, 23 Jun 2025
 10:59:39 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <86ikkogniu.fsf@HIDDEN>
 <CAN+1HboJ=S02rGBVtODe-Jt8T7LcQL12E_1SdS6LH-O_==ugeg@HIDDEN>
 <86h608gljv.fsf@HIDDEN>
 <CAN+1HbpybFrKQz4xqCK+WfOvOXGSSPZautOz-bQZ_QDpLX7xrg@HIDDEN>
 <86frfsgkl1.fsf@HIDDEN>
 <CAN+1Hbo3px=eXDvLE9-4p2SP3ou-=O1EK5iMC=U2m8jU=4CAfA@HIDDEN>
 <86ecvcgj2u.fsf@HIDDEN>
 <CAN+1Hbo41qewJ1jkrgPUM-c1R9QSmBkuUaiA56jtJdt0r+7iTg@HIDDEN>
 <iertt46tm5h.fsf@HIDDEN>
In-Reply-To: <iertt46tm5h.fsf@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Mon, 23 Jun 2025 13:59:27 -0400
X-Gm-Features: Ac12FXygOeh7TBxtUmQEcrhT9ab44uRr-vxIvIa60-VT2TSvzhTOfmm9WqoWZrI
Message-ID: <CAN+1HbqsEPYpv73NrCYQzqzGJp08_m5hTEzo3XCibyrK30kYKA@HIDDEN>
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
To: Spencer Baugh <sbaugh@HIDDEN>
Content-Type: multipart/mixed; boundary="000000000000be30a7063840f99d"
X-Debbugs-Envelope-To: 78843
Cc: krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org, adam@HIDDEN,
 larsi@HIDDEN, arstoffel@HIDDEN, Eli Zaretskii <eliz@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

--000000000000be30a7063840f99d
Content-Type: multipart/alternative; boundary="000000000000be30a5063840f99b"

--000000000000be30a5063840f99b
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Mon, Jun 23, 2025 at 1:15=E2=80=AFPM Spencer Baugh <sbaugh@HIDDEN=
m> wrote:

> St=C3=A9phane Marks <shipmints@HIDDEN> writes:
>
> > On Sun, Jun 22, 2025 at 6:35=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wr=
ote:
> >
> >  > From: St=C3=A9phane Marks <shipmints@HIDDEN>
> >  > Date: Sun, 22 Jun 2025 06:24:39 -0400
> >  > Cc: 78843 <at> debbugs.gnu.org, adam@HIDDEN, sbaugh@HIDDEN=
,
>
> >  >       larsi@HIDDEN, arstoffel@HIDDEN, krisbalintona@HIDDEN
> >  >
> >  >  > Let's start with the vtable users I looped in actually using it.
> >  >
> >  >  I don't see how this will help in reviewing the patch. It will allo=
w
> >  >  those folks to try the patch, but that's a separate job.  Patch
> review
> >  >  has to happen regardless, because it might spot issues that no
> >  >  reasonable amount of testing can.  This is why patch review is a
> >  >  necessary step in our development process.
> >  >
> >  >  > I can attach a vtable.el without the patch file and
> >  >  > make it easier.
> >  >
> >  >  Thanks, but it won't make it easier, no.
> >  >
> >  > Of course.  I did say that I would submit a "big-bang" patch a few
> weeks ago.  The vtable users who are
> >  > familiar with the code (having implemented their workarounds) should
> have an easier time with the review.
> >
> >  That will help, but I would like to review it as well.  It's part of
> >  my job.
> >
> >  Your patch lists many changes:
> >
> >  > Bug fixes
> >  >
> >  > - vtable-update-object works with no visible or changed window
> >  > width cache key (bug=3D69837)
> >  > - Improve vtable--limit-string performance for long
> >  > strings (bug=3D77684)
> >  > - Keymap changes:
> >  >   - Keymap spans the whole header column and header
> >  >   dividers (bug=3D74701)
> >  >   - Missing keymap and 'vtable-column property on body/header
> >  >   dividers and newlines
> >  >   - mouse-1 and close table bindings in vtable-header-line-map
> >  >   keymap
> >  >   - table-drag-resize-column-map keymap for use in body on
> >  >   dividers (bug=3D74701)
> >  >   - vtable-header-drag-resize-column-map consolidates
> >  >   vtable-header-line-map and vtable-drag-resize-column-map
> >  > - Infer column widths based on formatted elements, not raw
> >  > elements
> >  > - Compute columns works when there are no objects at
> >  > initialization
> >  > - text-scale-mode support (header and body elements are pixel
> >  > aligned)
> >  > - Header line handles display-line-numbers-mode
> >  > - Redraw row colors on lines below an inserted or removed line
> >  > - Cache is coherent with its objects (rather than by chance),
> >  > invalidated where needed
> >  > - All cache references now cache warming calls vs. mere cache
> >  > get
> >  > - Table mutations work when the table buffer is not the current
> >  > buffer and if the table isn't current
> >  > - Resize all tables in a buffer when their window
> >  > resizes (debounced to accommodate frame size dragging)
> >  > - Spacer goes after the column name on the header if right
> >  > aligned
> >  > - Column name defaults to right-aligned when its data are
> >  > right-aligned
> >  > - Improve column placeholder message when no objects and no
> >  > columns are specified
> >  > - Do not display divider after a row's final column
> >  > - Option to display divider on the header (was always on)
> >  > - Treat divider as a part of its preceding column when dragging
> >  > or sorting
> >  > - Append table faces to values and column heading names rather
> >  > than override
> >  > - Truncated string ellipsis text properties match those of the
> >  > formatted column entry
> >  > - Clicking on a header keeps point within table bounds
> >  > - Use vtable-object-equal and do not assume eq (or via assq,
> >  > memq)
> >  > - Header line adjust final column name and sort indicator in a
> >  > narrow window works as intended
> >  > - Set window point where needed
> >  > - Next/previous line remains in the current column
> >  > - Signal an error if a table is inserted in more than one buffer
> >  > or more than once in a buffer
> >  > - vtable--cache-key handle if called when the selected window
> >  > does not contain a table buffer
> >  > - Restore "focus" after vtable-remove-object,
> >  > vtable-update-object, vtable-redisplay-range, vtable-revert if
> >  > table is current
> >  > - vtable-revert works when reverted table is not the current
> >  > table
> >  > - Mutate the correct associated table in
> >  > vtable-header-line-sort, vtable--drag-resize-column
> >  > - vtable--recompute-cache considers the table's sort order
> >  > - vtable--alter-column-width respects min-width and max-width
> >  > - vtable-insert-object if integer location specified, does not
> >  > assume the object list and line cache are in the same order
> >  > - vtable-insert-object signal an error if integer insert
> >  > location specified when the table is sorted
> >  > - vtable-update-object does not assume objects are in the same
> >  > order as the cache, which might be sorted
> >  > - vtable-update-object no longer signal "setcar nil" on failed
> >  > old-object search
> >  > - vtable-update-object goto table before updating
> >  > - vtable-remove-object updates numeric column type as needed
> >  > after removing line
> >  > - vtable-remove-object signals an error if the specified object
> >  > is not found
> >  > - vtable-remove-object leaves point within table bounds if table
> >  > is current (and there are rows)
> >  > - Hide event-handler interactive functions from M-x display (not
> >  > really "commands")
> >  > - Renamed private vtable-header-line-sort to
> >  > vtable--header-line-sort
> >  > - Ensured docstrings for all public functions with added
> >  > clarifications where needed
> >  >
> >  > Enhancements
> >  >
> >  > - Custom column comparator for sorting types other than numerics
> >  > and lexical strings
> >  > https://lists.gnu.org/archive/html/emacs-devel/2024-10/msg00043.html
> >  > - Column-width inference can optionally include column-name
> >  > width vs. just data
> >  > - Table name slot, defaults to "*vtable*", which is displayed in
> >  > messages to differentiate vtables
> >  > - Duplicate object ignore, warning or error, defaults to ignore
> >  > duplicates
> >  > - Explicitly identify columns as numeric or non-numeric to avoid
> >  > the cost of inferring numericalness
> >  > - Option to sort table after insert or update object
> >  > - Option to select the newly inserted line if the table is
> >  > current
> >  > - Sort indicator characters specifiable
> >  > - Sort indicator faces for ascending and descending
> >  > - Unsort the table, toggling between unsorted and the sort-by at
> >  > initialization
> >  > - Unsort binding in vtable-map
> >  > - Add tab to vtable-header-line-map to move point into the table
> >  > - Functions to compute programmatic row/column colors
> >  > - Header face independent of body face
> >  > - Header column alignment independent of from body alignment,
> >  > defaults to body alignment
> >  > - Center alignment options
> >  > - Truncation ellipsis specifiable
> >  > - Option to make in-buffer header cursor-intangible
> >  > - Option to make in-buffer "decor" cursor-intangible (spacers,
> >  > dividers, indicator padding)
> >  > - Object/line marking/unmarking functions, marked line face
> >  > - Next/previous line functions that remain in table body bounds
> >  > - Multi-table commands 'vtable-goto-next-table',
> >  > 'vtable-goto-previous-table'
> >  > - Optionally apply row text properties; e.g., for mouse-face,
> >  > cursor-face
> >  > - Optional "navigation" keymap adding several useful bindings
> >  > including "q" to close the table (a la special-mode)
> >  > - Display a message when interactive column resizing min-width
> >  > and max-width limits reached
> >  > - Optionally pulse an updated, inserted, removed line,
> >  > defaulting to 'pulse-momentary-highlight-one-line'
> >  > - Go to table beginning/end of body convenience functions
> >  > - Table and object line-number convenience functions
> >  > - Table close-action which defaults to 'quit-window'
> >  > - Extra-data slots on both the table and columns for
> >  > programmatic reference
> >
> >  It is nigh impossible to review such a large number of changes
> >  together: how am I supposed to find out which design and
> >  implementation decisions did you take, when faced with such a large
> >  number of separate changes?  Without that, the review is not useful,
> >  even impossible.
> >
> >  So please subdivide the patch into smaller, preferably independent
> >  parts, to make the patch review possible, let alone practical.
> >
> > Let's see what the vtable user feedback is first and then I'll think
> > about it.  It will be a trade-off between your pain and mine.
>
> As a vtable user: Please either split this patch up into smaller
> patches, or add many automated tests of vtable (both for new and old
> functionality).  Preferably both.
>
> Without doing at least one of those things, I don't believe this patch
> should be merged, because it is too likely to break things.
>

As I volunteered to maintain vtable, aside from the sheer annoyance that a
breakage might bring a user during Emacs 31 development, the burden to
address them will be mine.  I have little incentive to create bugs.

Yes, I know you have tested it manually.  That is not sufficient.  Good
> software engineering practice demands more than that.
>

Surely.  I'm surprised that vtable was adopted without any tests at all.  I
expect it will be a slow evolution to add them.

In the meantime, be a mensch, and try it out to see if it addresses
your immediate issue and provide constructive feedback.  The set of bugs I
fixed and the new features added were informed by other menschen.  I've
always considered your ideas and input well.

Here are the latest two files for ease of testing.  vtable.el, in its
current form, is compatible with Emacs 31 unless and until
`string-pixel-width` is updated in compat.  I doubt Eli will want this in
Emacs 30 but it could be published on ELPA if there is demand?

I greatly appreciate it.  Once feedback is received, I'll start crafting
smaller (but not tiny) patches.

Best,

-St=C3=A9phane

--000000000000be30a5063840f99b
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Mon, Jun 23, 2025 at 1:15=E2=80=AFPM Spencer Baugh &lt;<a href=3D"mailto=
:sbaugh@HIDDEN">sbaugh@HIDDEN</a>&gt; wrote:</span></div></=
div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"g=
mail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204=
,204,204);padding-left:1ex">St=C3=A9phane Marks &lt;<a href=3D"mailto:shipm=
ints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>&gt; writes:<br>
<br>
&gt; On Sun, Jun 22, 2025 at 6:35=E2=80=AFAM Eli Zaretskii &lt;<a href=3D"m=
ailto:eliz@HIDDEN" target=3D"_blank">eliz@HIDDEN</a>&gt; wrote:<br>
&gt;<br>
&gt;=C2=A0 &gt; From: St=C3=A9phane Marks &lt;<a href=3D"mailto:shipmints@g=
mail.com" target=3D"_blank">shipmints@HIDDEN</a>&gt;<br>
&gt;=C2=A0 &gt; Date: Sun, 22 Jun 2025 06:24:39 -0400<br>
&gt;=C2=A0 &gt; Cc: <a href=3D"mailto:78843 <at> debbugs.gnu.org" target=3D"_bla=
nk">78843 <at> debbugs.gnu.org</a>, <a href=3D"mailto:adam@HIDDEN" target=
=3D"_blank">adam@HIDDEN</a>, <a href=3D"mailto:sbaugh@HIDDEN=
" target=3D"_blank">sbaugh@HIDDEN</a>, <br>
&gt;=C2=A0 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:larsi@HIDDEN"=
 target=3D"_blank">larsi@HIDDEN</a>, <a href=3D"mailto:arstoffel@HIDDEN=
m" target=3D"_blank">arstoffel@HIDDEN</a>, <a href=3D"mailto:krisbalinto=
na@HIDDEN" target=3D"_blank">krisbalintona@HIDDEN</a><br>
&gt;=C2=A0 &gt; <br>
&gt;=C2=A0 &gt;=C2=A0 &gt; Let&#39;s start with the vtable users I looped i=
n actually using it.<br>
&gt;=C2=A0 &gt; <br>
&gt;=C2=A0 &gt;=C2=A0 I don&#39;t see how this will help in reviewing the p=
atch. It will allow<br>
&gt;=C2=A0 &gt;=C2=A0 those folks to try the patch, but that&#39;s a separa=
te job.=C2=A0 Patch review<br>
&gt;=C2=A0 &gt;=C2=A0 has to happen regardless, because it might spot issue=
s that no<br>
&gt;=C2=A0 &gt;=C2=A0 reasonable amount of testing can.=C2=A0 This is why p=
atch review is a<br>
&gt;=C2=A0 &gt;=C2=A0 necessary step in our development process.<br>
&gt;=C2=A0 &gt; <br>
&gt;=C2=A0 &gt;=C2=A0 &gt; I can attach a vtable.el without the patch file =
and<br>
&gt;=C2=A0 &gt;=C2=A0 &gt; make it easier.<br>
&gt;=C2=A0 &gt; <br>
&gt;=C2=A0 &gt;=C2=A0 Thanks, but it won&#39;t make it easier, no.<br>
&gt;=C2=A0 &gt; <br>
&gt;=C2=A0 &gt; Of course.=C2=A0 I did say that I would submit a &quot;big-=
bang&quot; patch a few weeks ago.=C2=A0 The vtable users who are<br>
&gt;=C2=A0 &gt; familiar with the code (having implemented their workaround=
s) should have an easier time with the review. <br>
&gt;<br>
&gt;=C2=A0 That will help, but I would like to review it as well.=C2=A0 It&=
#39;s part of<br>
&gt;=C2=A0 my job.<br>
&gt;<br>
&gt;=C2=A0 Your patch lists many changes:<br>
&gt;<br>
&gt;=C2=A0 &gt; Bug fixes<br>
&gt;=C2=A0 &gt; <br>
&gt;=C2=A0 &gt; - vtable-update-object works with no visible or changed win=
dow<br>
&gt;=C2=A0 &gt; width cache key (bug=3D69837)<br>
&gt;=C2=A0 &gt; - Improve vtable--limit-string performance for long<br>
&gt;=C2=A0 &gt; strings (bug=3D77684)<br>
&gt;=C2=A0 &gt; - Keymap changes:<br>
&gt;=C2=A0 &gt;=C2=A0 =C2=A0- Keymap spans the whole header column and head=
er<br>
&gt;=C2=A0 &gt;=C2=A0 =C2=A0dividers (bug=3D74701)<br>
&gt;=C2=A0 &gt;=C2=A0 =C2=A0- Missing keymap and &#39;vtable-column propert=
y on body/header<br>
&gt;=C2=A0 &gt;=C2=A0 =C2=A0dividers and newlines<br>
&gt;=C2=A0 &gt;=C2=A0 =C2=A0- mouse-1 and close table bindings in vtable-he=
ader-line-map<br>
&gt;=C2=A0 &gt;=C2=A0 =C2=A0keymap<br>
&gt;=C2=A0 &gt;=C2=A0 =C2=A0- table-drag-resize-column-map keymap for use i=
n body on<br>
&gt;=C2=A0 &gt;=C2=A0 =C2=A0dividers (bug=3D74701)<br>
&gt;=C2=A0 &gt;=C2=A0 =C2=A0- vtable-header-drag-resize-column-map consolid=
ates<br>
&gt;=C2=A0 &gt;=C2=A0 =C2=A0vtable-header-line-map and vtable-drag-resize-c=
olumn-map<br>
&gt;=C2=A0 &gt; - Infer column widths based on formatted elements, not raw<=
br>
&gt;=C2=A0 &gt; elements<br>
&gt;=C2=A0 &gt; - Compute columns works when there are no objects at<br>
&gt;=C2=A0 &gt; initialization<br>
&gt;=C2=A0 &gt; - text-scale-mode support (header and body elements are pix=
el<br>
&gt;=C2=A0 &gt; aligned)<br>
&gt;=C2=A0 &gt; - Header line handles display-line-numbers-mode<br>
&gt;=C2=A0 &gt; - Redraw row colors on lines below an inserted or removed l=
ine<br>
&gt;=C2=A0 &gt; - Cache is coherent with its objects (rather than by chance=
),<br>
&gt;=C2=A0 &gt; invalidated where needed<br>
&gt;=C2=A0 &gt; - All cache references now cache warming calls vs. mere cac=
he<br>
&gt;=C2=A0 &gt; get<br>
&gt;=C2=A0 &gt; - Table mutations work when the table buffer is not the cur=
rent<br>
&gt;=C2=A0 &gt; buffer and if the table isn&#39;t current<br>
&gt;=C2=A0 &gt; - Resize all tables in a buffer when their window<br>
&gt;=C2=A0 &gt; resizes (debounced to accommodate frame size dragging)<br>
&gt;=C2=A0 &gt; - Spacer goes after the column name on the header if right<=
br>
&gt;=C2=A0 &gt; aligned<br>
&gt;=C2=A0 &gt; - Column name defaults to right-aligned when its data are<b=
r>
&gt;=C2=A0 &gt; right-aligned<br>
&gt;=C2=A0 &gt; - Improve column placeholder message when no objects and no=
<br>
&gt;=C2=A0 &gt; columns are specified<br>
&gt;=C2=A0 &gt; - Do not display divider after a row&#39;s final column<br>
&gt;=C2=A0 &gt; - Option to display divider on the header (was always on)<b=
r>
&gt;=C2=A0 &gt; - Treat divider as a part of its preceding column when drag=
ging<br>
&gt;=C2=A0 &gt; or sorting<br>
&gt;=C2=A0 &gt; - Append table faces to values and column heading names rat=
her<br>
&gt;=C2=A0 &gt; than override<br>
&gt;=C2=A0 &gt; - Truncated string ellipsis text properties match those of =
the<br>
&gt;=C2=A0 &gt; formatted column entry<br>
&gt;=C2=A0 &gt; - Clicking on a header keeps point within table bounds<br>
&gt;=C2=A0 &gt; - Use vtable-object-equal and do not assume eq (or via assq=
,<br>
&gt;=C2=A0 &gt; memq)<br>
&gt;=C2=A0 &gt; - Header line adjust final column name and sort indicator i=
n a<br>
&gt;=C2=A0 &gt; narrow window works as intended<br>
&gt;=C2=A0 &gt; - Set window point where needed<br>
&gt;=C2=A0 &gt; - Next/previous line remains in the current column<br>
&gt;=C2=A0 &gt; - Signal an error if a table is inserted in more than one b=
uffer<br>
&gt;=C2=A0 &gt; or more than once in a buffer<br>
&gt;=C2=A0 &gt; - vtable--cache-key handle if called when the selected wind=
ow<br>
&gt;=C2=A0 &gt; does not contain a table buffer<br>
&gt;=C2=A0 &gt; - Restore &quot;focus&quot; after vtable-remove-object,<br>
&gt;=C2=A0 &gt; vtable-update-object, vtable-redisplay-range, vtable-revert=
 if<br>
&gt;=C2=A0 &gt; table is current<br>
&gt;=C2=A0 &gt; - vtable-revert works when reverted table is not the curren=
t<br>
&gt;=C2=A0 &gt; table<br>
&gt;=C2=A0 &gt; - Mutate the correct associated table in<br>
&gt;=C2=A0 &gt; vtable-header-line-sort, vtable--drag-resize-column<br>
&gt;=C2=A0 &gt; - vtable--recompute-cache considers the table&#39;s sort or=
der<br>
&gt;=C2=A0 &gt; - vtable--alter-column-width respects min-width and max-wid=
th<br>
&gt;=C2=A0 &gt; - vtable-insert-object if integer location specified, does =
not<br>
&gt;=C2=A0 &gt; assume the object list and line cache are in the same order=
<br>
&gt;=C2=A0 &gt; - vtable-insert-object signal an error if integer insert<br=
>
&gt;=C2=A0 &gt; location specified when the table is sorted<br>
&gt;=C2=A0 &gt; - vtable-update-object does not assume objects are in the s=
ame<br>
&gt;=C2=A0 &gt; order as the cache, which might be sorted<br>
&gt;=C2=A0 &gt; - vtable-update-object no longer signal &quot;setcar nil&qu=
ot; on failed<br>
&gt;=C2=A0 &gt; old-object search<br>
&gt;=C2=A0 &gt; - vtable-update-object goto table before updating<br>
&gt;=C2=A0 &gt; - vtable-remove-object updates numeric column type as neede=
d<br>
&gt;=C2=A0 &gt; after removing line<br>
&gt;=C2=A0 &gt; - vtable-remove-object signals an error if the specified ob=
ject<br>
&gt;=C2=A0 &gt; is not found<br>
&gt;=C2=A0 &gt; - vtable-remove-object leaves point within table bounds if =
table<br>
&gt;=C2=A0 &gt; is current (and there are rows)<br>
&gt;=C2=A0 &gt; - Hide event-handler interactive functions from M-x display=
 (not<br>
&gt;=C2=A0 &gt; really &quot;commands&quot;)<br>
&gt;=C2=A0 &gt; - Renamed private vtable-header-line-sort to<br>
&gt;=C2=A0 &gt; vtable--header-line-sort<br>
&gt;=C2=A0 &gt; - Ensured docstrings for all public functions with added<br=
>
&gt;=C2=A0 &gt; clarifications where needed<br>
&gt;=C2=A0 &gt; <br>
&gt;=C2=A0 &gt; Enhancements<br>
&gt;=C2=A0 &gt; <br>
&gt;=C2=A0 &gt; - Custom column comparator for sorting types other than num=
erics<br>
&gt;=C2=A0 &gt; and lexical strings<br>
&gt;=C2=A0 &gt; <a href=3D"https://lists.gnu.org/archive/html/emacs-devel/2=
024-10/msg00043.html" rel=3D"noreferrer" target=3D"_blank">https://lists.gn=
u.org/archive/html/emacs-devel/2024-10/msg00043.html</a><br>
&gt;=C2=A0 &gt; - Column-width inference can optionally include column-name=
<br>
&gt;=C2=A0 &gt; width vs. just data<br>
&gt;=C2=A0 &gt; - Table name slot, defaults to &quot;*vtable*&quot;, which =
is displayed in<br>
&gt;=C2=A0 &gt; messages to differentiate vtables<br>
&gt;=C2=A0 &gt; - Duplicate object ignore, warning or error, defaults to ig=
nore<br>
&gt;=C2=A0 &gt; duplicates<br>
&gt;=C2=A0 &gt; - Explicitly identify columns as numeric or non-numeric to =
avoid<br>
&gt;=C2=A0 &gt; the cost of inferring numericalness<br>
&gt;=C2=A0 &gt; - Option to sort table after insert or update object<br>
&gt;=C2=A0 &gt; - Option to select the newly inserted line if the table is<=
br>
&gt;=C2=A0 &gt; current<br>
&gt;=C2=A0 &gt; - Sort indicator characters specifiable<br>
&gt;=C2=A0 &gt; - Sort indicator faces for ascending and descending<br>
&gt;=C2=A0 &gt; - Unsort the table, toggling between unsorted and the sort-=
by at<br>
&gt;=C2=A0 &gt; initialization<br>
&gt;=C2=A0 &gt; - Unsort binding in vtable-map<br>
&gt;=C2=A0 &gt; - Add tab to vtable-header-line-map to move point into the =
table<br>
&gt;=C2=A0 &gt; - Functions to compute programmatic row/column colors<br>
&gt;=C2=A0 &gt; - Header face independent of body face<br>
&gt;=C2=A0 &gt; - Header column alignment independent of from body alignmen=
t,<br>
&gt;=C2=A0 &gt; defaults to body alignment<br>
&gt;=C2=A0 &gt; - Center alignment options<br>
&gt;=C2=A0 &gt; - Truncation ellipsis specifiable<br>
&gt;=C2=A0 &gt; - Option to make in-buffer header cursor-intangible<br>
&gt;=C2=A0 &gt; - Option to make in-buffer &quot;decor&quot; cursor-intangi=
ble (spacers,<br>
&gt;=C2=A0 &gt; dividers, indicator padding)<br>
&gt;=C2=A0 &gt; - Object/line marking/unmarking functions, marked line face=
<br>
&gt;=C2=A0 &gt; - Next/previous line functions that remain in table body bo=
unds<br>
&gt;=C2=A0 &gt; - Multi-table commands &#39;vtable-goto-next-table&#39;,<br=
>
&gt;=C2=A0 &gt; &#39;vtable-goto-previous-table&#39;<br>
&gt;=C2=A0 &gt; - Optionally apply row text properties; e.g., for mouse-fac=
e,<br>
&gt;=C2=A0 &gt; cursor-face<br>
&gt;=C2=A0 &gt; - Optional &quot;navigation&quot; keymap adding several use=
ful bindings<br>
&gt;=C2=A0 &gt; including &quot;q&quot; to close the table (a la special-mo=
de)<br>
&gt;=C2=A0 &gt; - Display a message when interactive column resizing min-wi=
dth<br>
&gt;=C2=A0 &gt; and max-width limits reached<br>
&gt;=C2=A0 &gt; - Optionally pulse an updated, inserted, removed line,<br>
&gt;=C2=A0 &gt; defaulting to &#39;pulse-momentary-highlight-one-line&#39;<=
br>
&gt;=C2=A0 &gt; - Go to table beginning/end of body convenience functions<b=
r>
&gt;=C2=A0 &gt; - Table and object line-number convenience functions<br>
&gt;=C2=A0 &gt; - Table close-action which defaults to &#39;quit-window&#39=
;<br>
&gt;=C2=A0 &gt; - Extra-data slots on both the table and columns for<br>
&gt;=C2=A0 &gt; programmatic reference<br>
&gt;<br>
&gt;=C2=A0 It is nigh impossible to review such a large number of changes<b=
r>
&gt;=C2=A0 together: how am I supposed to find out which design and<br>
&gt;=C2=A0 implementation decisions did you take, when faced with such a la=
rge<br>
&gt;=C2=A0 number of separate changes?=C2=A0 Without that, the review is no=
t useful,<br>
&gt;=C2=A0 even impossible.<br>
&gt;<br>
&gt;=C2=A0 So please subdivide the patch into smaller, preferably independe=
nt<br>
&gt;=C2=A0 parts, to make the patch review possible, let alone practical.<b=
r>
&gt;<br>
&gt; Let&#39;s see what the vtable user feedback is first and then I&#39;ll=
 think<br>
&gt; about it.=C2=A0 It will be a trade-off between your pain and mine.<br>
<br>
As a vtable user: Please either split this patch up into smaller<br>
patches, or add many automated tests of vtable (both for new and old<br>
functionality).=C2=A0 Preferably both.<br>
<br>
Without doing at least one of those things, I don&#39;t believe this patch<=
br>
should be merged, because it is too likely to break things.<br></blockquote=
><div><br></div><div><div class=3D"gmail_default" style=3D"font-family:mono=
space">As I volunteered to maintain vtable, aside from the sheer annoyance =
that a breakage might bring a user during Emacs 31 development, the burden =
to address them will be mine.=C2=A0 I have little incentive to create bugs.=
</div></div><div><br></div><blockquote class=3D"gmail_quote" style=3D"margi=
n:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex=
">
Yes, I know you have tested it manually.=C2=A0 That is not sufficient.=C2=
=A0 Good<br>
software engineering practice demands more than that.<br></blockquote><div>=
<br></div><div class=3D"gmail_default" style=3D"font-family:monospace">Sure=
ly.=C2=A0 I&#39;m surprised that vtable was adopted without any tests at al=
l.=C2=A0 I expect it will be a slow evolution to add them.</div><div class=
=3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=3D"=
gmail_default" style=3D"font-family:monospace">In the meantime, be a mensch=
, and try it out to see if it addresses your=C2=A0immediate issue and provi=
de constructive feedback.=C2=A0 The set of bugs I fixed=C2=A0and the new fe=
atures added were informed by other menschen.=C2=A0 I&#39;ve always conside=
red your ideas and input well.</div><div class=3D"gmail_default" style=3D"f=
ont-family:monospace"><br></div><div class=3D"gmail_default" style=3D"font-=
family:monospace">Here are the latest two files for ease of testing.=C2=A0 =
vtable.el, in its current form, is compatible with Emacs 31 unless and unti=
l `string-pixel-width` is updated in compat.=C2=A0 I doubt Eli will want th=
is in Emacs 30 but it could be published on ELPA if there is demand?</div><=
div class=3D"gmail_default" style=3D"font-family:monospace"><br></div><div =
class=3D"gmail_default" style=3D"font-family:monospace">I greatly appreciat=
e it.=C2=A0 Once feedback is received, I&#39;ll start crafting smaller (but=
 not tiny) patches.</div><div class=3D"gmail_default" style=3D"font-family:=
monospace"><br></div><div class=3D"gmail_default" style=3D"font-family:mono=
space">Best,</div><div class=3D"gmail_default" style=3D"font-family:monospa=
ce"><br></div><div class=3D"gmail_default" style=3D"font-family:monospace">=
-St=C3=A9phane</div></div></div>

--000000000000be30a5063840f99b--

--000000000000be30a7063840f99d
Content-Type: application/octet-stream; name="vtable.el"
Content-Disposition: attachment; filename="vtable.el"
Content-Transfer-Encoding: base64
Content-ID: <f_mc9ehy5y1>
X-Attachment-Id: f_mc9ehy5y1

Ozs7IHZ0YWJsZS5lbCAtLS0gRGlzcGxheWluZyBkYXRhIGluIHRhYmxlcyAgLSotIGxleGljYWwt
YmluZGluZzogdDsgLSotCgo7OyBDb3B5cmlnaHQgKEMpIDIwMjItMjAyNSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4KCjs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KCjs7
IEdOVSBFbWFjcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5Cjs7IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cjs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCjs7IChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCgo7OyBHTlUgRW1hY3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKOzsgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo7OyBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKOzsgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKOzsgYWxvbmcg
d2l0aCBHTlUgRW1hY3MuICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNl
cy8+LgoKOzs7IENvbW1lbnRhcnk6Cgo7OwoKOzs7IENvZGU6CgoocmVxdWlyZSAnY2wtbGliKQoo
cmVxdWlyZSAnZWllaW8pCihyZXF1aXJlICd0ZXh0LXByb3BlcnR5LXNlYXJjaCkKKHJlcXVpcmUg
J211bGUtdXRpbCkKCihkZWZncm91cCB2dGFibGUgbmlsCiAgIlZhcmlhYmxlLXBpdGNoIHRhYmxl
LiIKICA6Z3JvdXAgJ2NvbnZlbmllbmNlCiAgOmdyb3VwICdkaXNwbGF5KQoKKGRlZmZhY2UgdnRh
YmxlCiAgJygodCA6aW5oZXJpdCB2YXJpYWJsZS1waXRjaCkpCiAgIkZhY2UgdXNlZCAoYnkgZGVm
YXVsdCkgZm9yIHZ0YWJsZSBib2RpZXMuIgogIDp2ZXJzaW9uICIyOS4xIikKCihkZWZmYWNlIHZ0
YWJsZS1oZWFkZXIKICAnKCh0IDppbmhlcml0IChoZWFkZXItbGluZSB2dGFibGUpKSkKICAiRmFj
ZSB1c2VkIChieSBkZWZhdWx0KSBmb3IgdnRhYmxlIGhlYWRlcnMuIgogIDp2ZXJzaW9uICIzMS4x
IikKCihkZWZmYWNlIHZ0YWJsZS1tYXJrZWQKICAnKCh0IDppbmhlcml0IHJlZ2lvbikpCiAgIkZh
Y2UgdXNlZCAoYnkgZGVmYXVsdCkgZm9yIG1hcmtlZCB2dGFibGUgb2JqZWN0cy4iCiAgOnZlcnNp
b24gIjMxLjEiKQoKKGRlZmZhY2UgdnRhYmxlLXNvcnQtaW5kaWNhdG9yLWFzY2VuZAogICcoKHQg
OmluaGVyaXQgdnRhYmxlLWhlYWRlcikpCiAgIkZhY2UgdXNlZCAoYnkgZGVmYXVsdCkgZm9yIHZ0
YWJsZSBhc2NlbmQgc29ydCBpbmRpY2F0b3IuIgogIDp2ZXJzaW9uICIzMS4xIikKCihkZWZmYWNl
IHZ0YWJsZS1zb3J0LWluZGljYXRvci1kZXNjZW5kCiAgJygodCA6aW5oZXJpdCB2dGFibGUtaGVh
ZGVyKSkKICAiRmFjZSB1c2VkIChieSBkZWZhdWx0KSBmb3IgdnRhYmxlIGRlc2NlbmQgc29ydCBp
bmRpY2F0b3IuIgogIDp2ZXJzaW9uICIzMS4xIikKCihkZWZ2YXIgdnRhYmxlLXNvcnQtaW5kaWNh
dG9yLWRlZmF1bHQgJygoP+KWvCA/dikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICg/4payID9eKSkKICAiRGVmYXVsdCBkZXNjZW5kaW5nIGFuZCBhc2NlbmRpbmcgc29y
dCBpbmRpY2F0b3JzLgpUaGUgZm9ybSBpcyBhIGxpc3Qgb2YgdHdvIGNvbnNlcyBvZiB0d28gY2hh
cmFjdGVycy4gIFRoZSBmaXJzdCBzZXQgaW5kaWNhdGVzCnNvcnRpbmcgZGVzY2VuZGluZywgdGhl
IHNlY29uZCBhc2NlbmRpbmcuICBUaGUgZmlyc3QgY2hhcmFjdGVyIGluIGVhY2ggY29ucwppcyBm
b3IgZm9udHMgdGhhdCBjYW4gZGlzcGxheSBzeW1ib2xzLCBhbmQgdGhlIHNlY29uZCBpcyBwbGFp
biB0ZXh0LiIpCgooZGVmdmFyIHZ0YWJsZS1zb3J0LWluZGljYXRvci1wYWQtc3BhY2Utd2lkdGgg
MC4zCiAgIlRoZSB3aWR0aCBvZiB3aGl0ZSBzcGFjZSBwYWRkaW5nIGFyb3VuZCB0aGUgc29ydCBp
bmRpY2F0b3IuCkluIHVuaXRzIG9mIGNoYXJhY3Rlci13aWR0aC4iKQoKKGNsLWRlZnN0cnVjdCB2
dGFibGUtY29sdW1uCiAgIkEgdnRhYmxlIGNvbHVtbi4iCiAgbmFtZQogIHdpZHRoCiAgaW5mZXIt
d2lkdGgKICBtaW4td2lkdGgKICBtYXgtd2lkdGgKICAodHJ1bmNhdGUtZ3Vlc3MgMCkKICBwcmlt
YXJ5CiAgKG51bWVyaWMgJ2luZmVyKQogIGFsaWduCiAgaGVhZGVyLWFsaWduCiAgZ2V0dGVyCiAg
Zm9ybWF0dGVyCiAgZGlzcGxheWVyCiAgY29tcGFyYXRvcgogIGV4dHJhLWRhdGEKICAtbnVtZXJp
Y2FsCiAgLWFsaWduZWQpCgooZGVmY2xhc3MgdnRhYmxlICgpCiAgKChuYW1lIDppbml0YXJnIDpu
YW1lIDphY2Nlc3NvciB2dGFibGUtbmFtZSkKICAgKGNvbHVtbnMgOmluaXRhcmcgOmNvbHVtbnMg
OmFjY2Vzc29yIHZ0YWJsZS1jb2x1bW5zKQogICAob2JqZWN0cyA6aW5pdGFyZyA6b2JqZWN0cyA6
YWNjZXNzb3IgdnRhYmxlLW9iamVjdHMpCiAgIChvYmplY3RzLWZ1bmN0aW9uIDppbml0YXJnIDpv
YmplY3RzLWZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgIDphY2Nlc3NvciB2dGFibGUtb2Jq
ZWN0cy1mdW5jdGlvbikKICAgKG9iamVjdC1lcXVhbCA6aW5pdGFyZyA6b2JqZWN0LWVxdWFsCiAg
ICAgICAgICAgICAgICAgOmFjY2Vzc29yIHZ0YWJsZS1vYmplY3QtZXF1YWwpCiAgIChkdXBsaWNh
dGUtb2JqZWN0cyA6aW5pdGFyZyA6ZHVwbGljYXRlLW9iamVjdHMKICAgICAgICAgICAgICAgICAg
ICAgIDphY2Nlc3NvciB2dGFibGUtZHVwbGljYXRlLW9iamVjdHMpCiAgIChnZXR0ZXIgOmluaXRh
cmcgOmdldHRlciA6YWNjZXNzb3IgdnRhYmxlLWdldHRlcikKICAgKGZvcm1hdHRlciA6aW5pdGFy
ZyA6Zm9ybWF0dGVyIDphY2Nlc3NvciB2dGFibGUtZm9ybWF0dGVyKQogICAoZGlzcGxheWVyIDpp
bml0YXJnIDpkaXNwbGF5ZXIgOmFjY2Vzc29yIHZ0YWJsZS1kaXNwbGF5ZXIpCiAgICh1c2UtaGVh
ZGVyLWxpbmUgOmluaXRhcmcgOnVzZS1oZWFkZXItbGluZQogICAgICAgICAgICAgICAgICAgIDph
Y2Nlc3NvciB2dGFibGUtdXNlLWhlYWRlci1saW5lKQogICAoaGVhZGVyLWludGFuZ2libGUgOmlu
aXRhcmcgOmhlYWRlci1pbnRhbmdpYmxlCiAgICAgICAgICAgICAgICAgICAgICA6YWNjZXNzb3Ig
dnRhYmxlLWhlYWRlci1pbnRhbmdpYmxlKQogICAoZGVjb3ItaW50YW5naWJsZSA6aW5pdGFyZyA6
ZGVjb3ItaW50YW5naWJsZQogICAgICAgICAgICAgICAgICAgICA6YWNjZXNzb3IgdnRhYmxlLWRl
Y29yLWludGFuZ2libGUpCiAgICh0ZXh0LXNjYWxlLXJlZHJhdyA6aW5pdGFyZyA6dGV4dC1zY2Fs
ZS1yZWRyYXcKICAgICAgICAgICAgICAgICAgICAgIDphY2Nlc3NvciB2dGFibGUtdGV4dC1zY2Fs
ZS1yZWRyYXcpCiAgICh0ZXh0LXNjYWxlLWhlYWRlci1saW5lIDppbml0YXJnIDp0ZXh0LXNjYWxl
LWhlYWRlci1saW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDphY2Nlc3NvciB2dGFibGUt
dGV4dC1zY2FsZS1oZWFkZXItbGluZSkKICAgKHJlc2l6ZS1kZWJvdW5jZS1pbnRlcnZhbCA6aW5p
dGFyZyA6cmVzaXplLWRlYm91bmNlLWludGVydmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOmFjY2Vzc29yIHZ0YWJsZS1yZXNpemUtZGVib3VuY2UtaW50ZXJ2YWwpCiAgIChmYWNlIDpp
bml0YXJnIDpmYWNlIDphY2Nlc3NvciB2dGFibGUtZmFjZSkKICAgKGhlYWRlci1mYWNlIDppbml0
YXJnIDpoZWFkZXItZmFjZSA6YWNjZXNzb3IgdnRhYmxlLWhlYWRlci1mYWNlKQogICAobWFya2Vk
LWZhY2UgOmluaXRhcmcgOm1hcmtlZC1mYWNlIDphY2Nlc3NvciB2dGFibGUtbWFya2VkLWZhY2Up
CiAgIChhY3Rpb25zIDppbml0YXJnIDphY3Rpb25zIDphY2Nlc3NvciB2dGFibGUtYWN0aW9ucykK
ICAgKGtleW1hcCA6aW5pdGFyZyA6a2V5bWFwIDphY2Nlc3NvciB2dGFibGUta2V5bWFwKQogICAo
c2VwYXJhdG9yLXdpZHRoIDppbml0YXJnIDpzZXBhcmF0b3Itd2lkdGgKICAgICAgICAgICAgICAg
ICAgICA6YWNjZXNzb3IgdnRhYmxlLXNlcGFyYXRvci13aWR0aCkKICAgKGRpdmlkZXIgOmluaXRh
cmcgOmRpdmlkZXIgOmFjY2Vzc29yIHZ0YWJsZS1kaXZpZGVyKQogICAoZGl2aWRlci13aWR0aCA6
aW5pdGFyZyA6ZGl2aWRlci13aWR0aAogICAgICAgICAgICAgICAgICA6YWNjZXNzb3IgdnRhYmxl
LWRpdmlkZXItd2lkdGgpCiAgIChkaXZpZGVyLW9uLWhlYWRlciA6aW5pdGFyZyA6ZGl2aWRlci1v
bi1oZWFkZXIKICAgICAgICAgICAgICAgICAgICAgIDphY2Nlc3NvciB2dGFibGUtZGl2aWRlci1v
bi1oZWFkZXIpCiAgIChzb3J0LWJ5IDppbml0YXJnIDpzb3J0LWJ5IDphY2Nlc3NvciB2dGFibGUt
c29ydC1ieSkKICAgKHNvcnQtaW5kaWNhdG9yIDppbml0YXJnIDpzb3J0LWluZGljYXRvciA6YWNj
ZXNzb3IgdnRhYmxlLXNvcnQtaW5kaWNhdG9yKQogICAoc29ydC1pbmRpY2F0b3ItZmFjZS1hc2Nl
bmQgOmluaXRhcmcgOnNvcnQtaW5kaWNhdG9yLWZhY2UtYXNjZW5kCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6YWNjZXNzb3IgdnRhYmxlLXNvcnQtaW5kaWNhdG9yLWZhY2UtYXNjZW5k
KQogICAoc29ydC1pbmRpY2F0b3ItZmFjZS1kZXNjZW5kIDppbml0YXJnIDpzb3J0LWluZGljYXRv
ci1mYWNlLWRlc2NlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWNjZXNzb3Ig
dnRhYmxlLXNvcnQtaW5kaWNhdG9yLWZhY2UtZGVzY2VuZCkKICAgKGVsbGlwc2lzIDppbml0YXJn
IDplbGxpcHNpcyA6YWNjZXNzb3IgdnRhYmxlLWVsbGlwc2lzKQogICAoaGVhZGVyLXRleHQtcHJv
cGVydGllcyA6aW5pdGFyZyA6aGVhZGVyLXRleHQtcHJvcGVydGllcwogICAgICAgICAgICAgICAg
ICAgICAgICAgICA6YWNjZXNzb3IgdnRhYmxlLWhlYWRlci10ZXh0LXByb3BlcnRpZXMpCiAgIChy
b3ctdGV4dC1wcm9wZXJ0aWVzIDppbml0YXJnIDpyb3ctdGV4dC1wcm9wZXJ0aWVzCiAgICAgICAg
ICAgICAgICAgICAgICAgIDphY2Nlc3NvciB2dGFibGUtcm93LXRleHQtcHJvcGVydGllcykKICAg
KGNvbHVtbi1jb2xvcnMgOmluaXRhcmcgOmNvbHVtbi1jb2xvcnMgOmFjY2Vzc29yIHZ0YWJsZS1j
b2x1bW4tY29sb3JzKQogICAocm93LWNvbG9ycyA6aW5pdGFyZyA6cm93LWNvbG9ycyA6YWNjZXNz
b3IgdnRhYmxlLXJvdy1jb2xvcnMpCiAgIChjb2x1bW4tY29sb3ItZnVuY3Rpb24gOmluaXRhcmcg
OmNvbHVtbi1jb2xvci1mdW5jdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgIDphY2Nlc3Nv
ciB2dGFibGUtY29sdW1uLWNvbG9yLWZ1bmN0aW9uKQogICAocm93LWNvbG9yLWZ1bmN0aW9uIDpp
bml0YXJnIDpyb3ctY29sb3ItZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICA6YWNjZXNz
b3IgdnRhYmxlLXJvdy1jb2xvci1mdW5jdGlvbikKICAgKGNsb3NlLWFjdGlvbiA6aW5pdGFyZyA6
Y2xvc2UtYWN0aW9uIDphY2Nlc3NvciB2dGFibGUtY2xvc2UtYWN0aW9uKQogICAoZXh0cmEtZGF0
YSA6aW5pdGFyZyA6ZXh0cmEtZGF0YSA6YWNjZXNzb3IgdnRhYmxlLWV4dHJhLWRhdGEpCiAgIChw
dWxzZSA6aW5pdGFyZyA6cHVsc2UgOmFjY2Vzc29yIHZ0YWJsZS1wdWxzZSkKICAgKHB1bHNlLWZ1
bmN0aW9uIDppbml0YXJnIDpwdWxzZS1mdW5jdGlvbiA6YWNjZXNzb3IgdnRhYmxlLXB1bHNlLWZ1
bmN0aW9uKQogICAoLW9iamVjdHMtdGljayA6aW5pdGZvcm0gMCkKICAgKC1tYXJrZWQtb2JqZWN0
cyA6aW5pdGZvcm0gbmlsKQogICAoLW9yaWctc29ydC1ieSA6aW5pdGZvcm0gbmlsKQogICAoLWNh
Y2hlZC1jb2xvcnMgOmluaXRmb3JtIG5pbCkKICAgKC1idWZmZXIgOmluaXRmb3JtIG5pbCkKICAg
KC1pbmRpY2F0b3ItcGFkIDppbml0Zm9ybSBuaWwpCiAgICgtY2FjaGUgOmluaXRmb3JtIChtYWtl
LWhhc2gtdGFibGUgOnRlc3QgIydlcXVhbCkpCiAgICgtY2FjaGVkLWtleW1hcCA6aW5pdGZvcm0g
bmlsKQogICAoLWNhY2hlZC1kcmFnLWtleW1hcCA6aW5pdGZvcm0gbmlsKQogICAoLWhhcy1jb2x1
bW4tc3BlYyA6aW5pdGZvcm0gbmlsKSkKICAiQW4gb2JqZWN0IHRvIGhvbGQgdGhlIGRhdGEgZm9y
IGEgdGFibGUuIikKCihkZWZ2YXIta2V5bWFwIHZ0YWJsZS1tYXAKICAiUyIgICAgICAgICAjJ3Z0
YWJsZS1zb3J0LWJ5LWN1cnJlbnQtY29sdW1uCiAgIlUiICAgICAgICAgIyd2dGFibGUtdW5zb3J0
CiAgInsiICAgICAgICAgIyd2dGFibGUtbmFycm93LWN1cnJlbnQtY29sdW1uCiAgIn0iICAgICAg
ICAgIyd2dGFibGUtd2lkZW4tY3VycmVudC1jb2x1bW4KICAiZyIgICAgICAgICAjJ3Z0YWJsZS1y
ZXZlcnQtY29tbWFuZAogICJNLTxsZWZ0PiIgICMndnRhYmxlLXByZXZpb3VzLWNvbHVtbgogICJN
LTxyaWdodD4iICMndnRhYmxlLW5leHQtY29sdW1uKQoKKGRlZnZhci1rZXltYXAgdnRhYmxlLWhl
YWRlci1saW5lLW1hcAogIDpwYXJlbnQgdnRhYmxlLW1hcAogICI8Zm9sbG93LWxpbms+IiAnbW91
c2UtZmFjZQogICI8aGVhZGVyLWxpbmU+IDxtb3VzZS0xPiIgIyd2dGFibGUtLWhlYWRlci1saW5l
LXNvcnQKICAiPGhlYWRlci1saW5lPiA8bW91c2UtMj4iICMndnRhYmxlLS1oZWFkZXItbGluZS1z
b3J0CiAgIjxtb3VzZS0xPiIgICAgICAgICAgICAgICAjJ3Z0YWJsZS0taGVhZGVyLWxpbmUtc29y
dAogICI8bW91c2UtMj4iICAgICAgICAgICAgICAgIyd2dGFibGUtLWhlYWRlci1saW5lLXNvcnQK
ICAicSIgICAgICAgICAgICAgICAgICAgICAgICMndnRhYmxlLWNsb3NlCiAgIjx0YWI+IiAgICAg
ICAgICAgICAgICAgICAjJ3Z0YWJsZS1nb3RvLWJlZ2lubmluZy1vZi10YWJsZSkKCihkZWZ2YXIt
a2V5bWFwIHZ0YWJsZS1kcmFnLXJlc2l6ZS1jb2x1bW4tbWFwCiAgIjxoZWFkZXItbGluZT4gPGRy
YWctbW91c2UtMT4iICMndnRhYmxlLS1kcmFnLXJlc2l6ZS1jb2x1bW4KICAiPGhlYWRlci1saW5l
PiA8ZG93bi1tb3VzZS0xPiIgIydpZ25vcmUKICAiPGRyYWctbW91c2UtMT4iICAgICAgICAgICAg
ICAgIyd2dGFibGUtLWRyYWctcmVzaXplLWNvbHVtbgogICI8ZG93bi1tb3VzZS0xPiIgICAgICAg
ICAgICAgICAjJ2lnbm9yZSkKCihkZWZ2YXIta2V5bWFwIHZ0YWJsZS1oZWFkZXItZHJhZy1yZXNp
emUtY29sdW1uLW1hcAogIDpwYXJlbnQgKG1ha2UtY29tcG9zZWQta2V5bWFwCiAgICAgICAgICAg
dnRhYmxlLWhlYWRlci1saW5lLW1hcAogICAgICAgICAgIHZ0YWJsZS1kcmFnLXJlc2l6ZS1jb2x1
bW4tbWFwKSkKCihkZWZ2YXIta2V5bWFwIHZ0YWJsZS1uYXZpZ2F0aW9uLW1hcAogICJDLWEiICAg
IChsYW1iZGEgKCkgKGludGVyYWN0aXZlKQogICAgICAgICAgICAgKGJlZ2lubmluZy1vZi1saW5l
KQogICAgICAgICAgICAgKHNjcm9sbC1yaWdodCBtb3N0LXBvc2l0aXZlLWZpeG51bSkpCiAgIm4i
ICAgICAgIyd2dGFibGUtbmV4dC1saW5lCiAgIjxkb3duPiIgIyd2dGFibGUtbmV4dC1saW5lCiAg
InAiICAgICAgIyd2dGFibGUtcHJldmlvdXMtbGluZQogICI8dXA+IiAgICMndnRhYmxlLXByZXZp
b3VzLWxpbmUKICAiPGhvbWU+IiAjJ3Z0YWJsZS1nb3RvLWJlZ2lubmluZy1vZi10YWJsZQogICI8
ZW5kPiIgICMndnRhYmxlLWdvdG8tZW5kLW9mLXRhYmxlCiAgIjxyZW1hcD4gPGZvcndhcmQtcGFy
YWdyYXBoPiIgICMndnRhYmxlLWdvdG8tbmV4dC10YWJsZQogICI8cmVtYXA+IDxiYWNrd2FyZC1w
YXJhZ3JhcGg+IiAjJ3Z0YWJsZS1nb3RvLXByZXZpb3VzLXRhYmxlCiAgInEiICAgICAgIyd2dGFi
bGUtY2xvc2UpCgooY2wtZGVmdW4gbWFrZS12dGFibGUgKCZrZXkKICAgICAgICAgICAgICAgICAg
ICAgICAobmFtZSAiKnZ0YWJsZSoiKQogICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMKICAg
ICAgICAgICAgICAgICAgICAgICBvYmplY3RzCiAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0
cy1mdW5jdGlvbgogICAgICAgICAgICAgICAgICAgICAgIChvYmplY3QtZXF1YWwgIydlcSkKICAg
ICAgICAgICAgICAgICAgICAgICAoZHVwbGljYXRlLW9iamVjdHMgJ2FsbG93KQogICAgICAgICAg
ICAgICAgICAgICAgIGdldHRlcgogICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcgogICAg
ICAgICAgICAgICAgICAgICAgIGRpc3BsYXllcgogICAgICAgICAgICAgICAgICAgICAgICh1c2Ut
aGVhZGVyLWxpbmUgdCkKICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXItaW50YW5naWJsZQog
ICAgICAgICAgICAgICAgICAgICAgIGRlY29yLWludGFuZ2libGUKICAgICAgICAgICAgICAgICAg
ICAgICAoZmFjZSAndnRhYmxlKQogICAgICAgICAgICAgICAgICAgICAgIChoZWFkZXItZmFjZSAn
dnRhYmxlLWhlYWRlcikKICAgICAgICAgICAgICAgICAgICAgICAobWFya2VkLWZhY2UgJ3Z0YWJs
ZS1tYXJrZWQpCiAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9ucwogICAgICAgICAgICAgICAg
ICAgICAgIGtleW1hcAogICAgICAgICAgICAgICAgICAgICAgICh1c2UtbmF2aWdhdGlvbi1rZXlt
YXAgbmlsKSA7IG5vIHNsb3QKICAgICAgICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLXdpZHRo
IDEpCiAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlcgogICAgICAgICAgICAgICAgICAgICAg
IGRpdmlkZXItd2lkdGgKICAgICAgICAgICAgICAgICAgICAgICAoZGl2aWRlci1vbi1oZWFkZXIg
dCkKICAgICAgICAgICAgICAgICAgICAgICBzb3J0LWJ5CiAgICAgICAgICAgICAgICAgICAgICAg
KHNvcnQtaW5kaWNhdG9yIHZ0YWJsZS1zb3J0LWluZGljYXRvci1kZWZhdWx0KQogICAgICAgICAg
ICAgICAgICAgICAgIChzb3J0LWluZGljYXRvci1mYWNlLWFzY2VuZAogICAgICAgICAgICAgICAg
ICAgICAgICAndnRhYmxlLXNvcnQtaW5kaWNhdG9yLWFzY2VuZCkKICAgICAgICAgICAgICAgICAg
ICAgICAoc29ydC1pbmRpY2F0b3ItZmFjZS1kZXNjZW5kCiAgICAgICAgICAgICAgICAgICAgICAg
ICd2dGFibGUtc29ydC1pbmRpY2F0b3ItZGVzY2VuZCkKICAgICAgICAgICAgICAgICAgICAgICAo
ZWxsaXBzaXMgKHRydW5jYXRlLXN0cmluZy1lbGxpcHNpcykpCiAgICAgICAgICAgICAgICAgICAg
ICAgKGluc2VydCB0KSA7IG5vIHNsb3QKICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXItdGV4
dC1wcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgICAgICAgcm93LXRleHQtcHJvcGVydGllcwog
ICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi1jb2xvcnMKICAgICAgICAgICAgICAgICAgICAg
ICByb3ctY29sb3JzCiAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLWNvbG9yLWZ1bmN0aW9u
CiAgICAgICAgICAgICAgICAgICAgICAgcm93LWNvbG9yLWZ1bmN0aW9uCiAgICAgICAgICAgICAg
ICAgICAgICAgKHRleHQtc2NhbGUtcmVkcmF3IHQpCiAgICAgICAgICAgICAgICAgICAgICAgdGV4
dC1zY2FsZS1oZWFkZXItbGluZQogICAgICAgICAgICAgICAgICAgICAgIChyZXNpemUtZGVib3Vu
Y2UtaW50ZXJ2YWwgMC4xNSkKICAgICAgICAgICAgICAgICAgICAgICBjbG9zZS1hY3Rpb24KICAg
ICAgICAgICAgICAgICAgICAgICBleHRyYS1kYXRhCiAgICAgICAgICAgICAgICAgICAgICAgcHVs
c2UKICAgICAgICAgICAgICAgICAgICAgICAocHVsc2UtZnVuY3Rpb24gIydwdWxzZS1tb21lbnRh
cnktaGlnaGxpZ2h0LW9uZS1saW5lKSkKICAiQ3JlYXRlIGFuZCBpbnNlcnQgYSB2dGFibGUgYXQg
cG9pbnQuClRoZSB2dGFibGUgb2JqZWN0IGlzIHJldHVybmVkLiAgSWYgSU5TRVJUIGlzIG5pbCwg
dGhlIHRhYmxlIHdvbid0CmJlIGluc2VydGVkLgoKU2VlIGluZm8gbm9kZSBgKHZ0YWJsZSlUb3An
IGZvciB2dGFibGUgZG9jdW1lbnRhdGlvbi4iCiAgKHdoZW4gb2JqZWN0cy1mdW5jdGlvbgogICAg
KHNldHEgb2JqZWN0cyAoZnVuY2FsbCBvYmplY3RzLWZ1bmN0aW9uKSkpCiAgOzsgV2UnbGwgYmUg
YWx0ZXJpbmcgdGhlIGxpc3QsIHNvIGNyZWF0ZSBhIGNvcHkuCiAgKHNldHEgb2JqZWN0cyAoY29w
eS1zZXF1ZW5jZSBvYmplY3RzKSkKICAobGV0ICgodGFibGUKICAgICAgICAgKG1ha2UtaW5zdGFu
Y2UKICAgICAgICAgICd2dGFibGUKICAgICAgICAgIDpvYmplY3RzIG9iamVjdHMKICAgICAgICAg
IDpvYmplY3RzLWZ1bmN0aW9uIG9iamVjdHMtZnVuY3Rpb24KICAgICAgICAgIDpuYW1lIG5hbWUK
ICAgICAgICAgIDpkdXBsaWNhdGUtb2JqZWN0cyBkdXBsaWNhdGUtb2JqZWN0cwogICAgICAgICAg
OmdldHRlciBnZXR0ZXIKICAgICAgICAgIDpmb3JtYXR0ZXIgZm9ybWF0dGVyCiAgICAgICAgICA6
ZGlzcGxheWVyIGRpc3BsYXllcgogICAgICAgICAgOnVzZS1oZWFkZXItbGluZSB1c2UtaGVhZGVy
LWxpbmUKICAgICAgICAgIDpoZWFkZXItaW50YW5naWJsZSBoZWFkZXItaW50YW5naWJsZQogICAg
ICAgICAgOmRlY29yLWludGFuZ2libGUgZGVjb3ItaW50YW5naWJsZQogICAgICAgICAgOnRleHQt
c2NhbGUtcmVkcmF3IHRleHQtc2NhbGUtcmVkcmF3CiAgICAgICAgICA6dGV4dC1zY2FsZS1oZWFk
ZXItbGluZSB0ZXh0LXNjYWxlLWhlYWRlci1saW5lCiAgICAgICAgICA6cmVzaXplLWRlYm91bmNl
LWludGVydmFsIHJlc2l6ZS1kZWJvdW5jZS1pbnRlcnZhbAogICAgICAgICAgOm9iamVjdC1lcXVh
bCBvYmplY3QtZXF1YWwKICAgICAgICAgIDpmYWNlIGZhY2UKICAgICAgICAgIDpoZWFkZXItZmFj
ZSBoZWFkZXItZmFjZQogICAgICAgICAgOm1hcmtlZC1mYWNlIG1hcmtlZC1mYWNlCiAgICAgICAg
ICA6YWN0aW9ucyBhY3Rpb25zCiAgICAgICAgICA6a2V5bWFwIGtleW1hcAogICAgICAgICAgOnNl
cGFyYXRvci13aWR0aCBzZXBhcmF0b3Itd2lkdGgKICAgICAgICAgIDpkaXZpZGVyIGRpdmlkZXIK
ICAgICAgICAgIDpkaXZpZGVyLXdpZHRoIGRpdmlkZXItd2lkdGgKICAgICAgICAgIDpkaXZpZGVy
LW9uLWhlYWRlciBkaXZpZGVyLW9uLWhlYWRlcgogICAgICAgICAgOnNvcnQtYnkgc29ydC1ieQog
ICAgICAgICAgOnNvcnQtaW5kaWNhdG9yIHNvcnQtaW5kaWNhdG9yCiAgICAgICAgICA6c29ydC1p
bmRpY2F0b3ItZmFjZS1hc2NlbmQgc29ydC1pbmRpY2F0b3ItZmFjZS1hc2NlbmQKICAgICAgICAg
IDpzb3J0LWluZGljYXRvci1mYWNlLWRlc2NlbmQgc29ydC1pbmRpY2F0b3ItZmFjZS1kZXNjZW5k
CiAgICAgICAgICA6aGVhZGVyLXRleHQtcHJvcGVydGllcyBoZWFkZXItdGV4dC1wcm9wZXJ0aWVz
CiAgICAgICAgICA6cm93LXRleHQtcHJvcGVydGllcyByb3ctdGV4dC1wcm9wZXJ0aWVzCiAgICAg
ICAgICA6cm93LWNvbG9ycyByb3ctY29sb3JzCiAgICAgICAgICA6Y29sdW1uLWNvbG9ycyBjb2x1
bW4tY29sb3JzCiAgICAgICAgICA6Y29sdW1uLWNvbG9yLWZ1bmN0aW9uIGNvbHVtbi1jb2xvci1m
dW5jdGlvbgogICAgICAgICAgOnJvdy1jb2xvci1mdW5jdGlvbiByb3ctY29sb3ItZnVuY3Rpb24K
ICAgICAgICAgIDplbGxpcHNpcyBlbGxpcHNpcwogICAgICAgICAgOmNsb3NlLWFjdGlvbiBjbG9z
ZS1hY3Rpb24KICAgICAgICAgIDpleHRyYS1kYXRhIGV4dHJhLWRhdGEKICAgICAgICAgIDpwdWxz
ZSBwdWxzZQogICAgICAgICAgOnB1bHNlLWZ1bmN0aW9uIHB1bHNlLWZ1bmN0aW9uKSkpCiAgICA7
OyBTdG9yZSB3aGV0aGVyIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgY29sdW1ucyBvciBub3QuCiAg
ICAoc2V0ZiAoc2xvdC12YWx1ZSB0YWJsZSAnLWhhcy1jb2x1bW4tc3BlYykgKG5vdCAobm90IGNv
bHVtbnMpKSkKICAgIDs7IENvbXB1dGUgdGhlIGJhbGFuY2Ugb2YgY29sdW1uIGRhdGEuCiAgICAo
dnRhYmxlLS1pbml0aWFsaXplLWNvbHVtbnMgdGFibGUgY29sdW1ucyBvYmplY3RzKQogICAgOzsg
Q29tcHV0ZSB0aGUgY29sb3JzLgogICAgKHdoZW4gKG9yIHJvdy1jb2xvcnMgY29sdW1uLWNvbG9y
cykKICAgICAgKHNldGYgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZWQtY29sb3JzKQogICAgICAg
ICAgICAodnRhYmxlLS1jb21wdXRlLWNvbG9ycyByb3ctY29sb3JzIGNvbHVtbi1jb2xvcnMpKSkK
ICAgIDs7IENvbXB1dGUgdGhlIGRpdmlkZXIuIEZvciBhbGlnbm1lbnQsIHVzZSB0aGUgc2FtZSBm
YWNlIGluIHRoZSBib2R5CiAgICA7OyBhbmQgb24gdGhlIGhlYWRlci4KICAgICh3aGVuIGRpdmlk
ZXIKICAgICAgKGxldCAoKGRpdiAocHJvcGVydGl6ZSAoY29weS1zZXF1ZW5jZSBkaXZpZGVyKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb3VzZS1mYWNlICdoaWdobGlnaHQpKSkKICAg
ICAgICAoYWRkLWZhY2UtdGV4dC1wcm9wZXJ0eSAwIChsZW5ndGggZGl2KSBmYWNlICdhcHBlbmQg
ZGl2KQogICAgICAgICh3aGVuICh2dGFibGUtZGVjb3ItaW50YW5naWJsZSB0YWJsZSkKICAgICAg
ICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIDAgKGxlbmd0aCBkaXYpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAobGlzdCAnY3Vyc29yLWludGFuZ2libGUgdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2Zyb250LXN0aWNreSB0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAncmVhci1ub25zdGlja3kgdCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpdikpCiAgICAgICAgKHNldGYgKHZ0YWJsZS1kaXZpZGVyIHRhYmxlKSBkaXYp
KSkKICAgIDs7IFRvIGFjaGlldmUgcGl4ZWwtbGV2ZWwgYWxpZ25tZW50LCB3ZSBuZWVkIGludHJv
ZHVjZSB0aGUgc2FtZQogICAgOzsgaGVhZGVyIHNvcnQtaW5kaWNhdG9yIHBpeGVsLXByZWNpc2lv
biBlcnJvciBpbiB0aGUgYm9keSBhbmQKICAgIDs7IGNvbHVtbi13aWR0aCBjb21wdXRhdGlvbi4K
ICAgIDs7IE5PVEU6IEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhlIGluZGljYXRvciBpbgogICAg
OzsgYHZ0YWJsZS0taW5zZXJ0LWhlYWRlci1saW5lJy4KICAgIChsZXQgKChpbmRpY2F0b3ItcGFk
IChwcm9wZXJ0aXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ha2Utc3RyaW5nIDIgP1xz
KQogICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNwbGF5CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGxpc3QgJ3NwYWNlLXdpZHRoIHZ0YWJsZS1zb3J0LWluZGljYXRvci1wYWQtc3BhY2Ut
d2lkdGgpKSkpCiAgICAgICh3aGVuIGRlY29yLWludGFuZ2libGUKICAgICAgICAoYWRkLXRleHQt
cHJvcGVydGllcyAwIChsZW5ndGggaW5kaWNhdG9yLXBhZCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAobGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3Vyc29yLWludGFu
Z2libGUgdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbnQtc3RpY2t5IHQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYXItbm9uc3RpY2t5IHQpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yLXBhZCkpCiAgICAgIChzZXRmIChzbG90LXZhbHVl
IHRhYmxlICctaW5kaWNhdG9yLXBhZCkgaW5kaWNhdG9yLXBhZCkpCiAgICA7OyBDb21wdXRlIHRo
ZSBrZXltYXBzLgogICAgKGxldCAoKGtleW1hcCAodnRhYmxlLS1tYWtlLWtleW1hcCB0YWJsZSB1
c2UtbmF2aWdhdGlvbi1rZXltYXApKSkKICAgICAgKHNldGYgKHNsb3QtdmFsdWUgdGFibGUgJy1j
YWNoZWQta2V5bWFwKSBrZXltYXApCiAgICAgIChzZXRmIChzbG90LXZhbHVlIHRhYmxlICctY2Fj
aGVkLWRyYWcta2V5bWFwKQogICAgICAgICAgICAobWFrZS1jb21wb3NlZC1rZXltYXAga2V5bWFw
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dGFibGUtZHJhZy1yZXNpemUtY29s
dW1uLW1hcCkpKQogICAgKHByb2duCiAgICAgICh1bmxlc3Mgc29ydC1ieQogICAgICAgIChzZXEt
ZG8taW5kZXhlZCAobGFtYmRhIChjb2x1bW4gaW5kZXgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHdoZW4gKHZ0YWJsZS1jb2x1bW4tcHJpbWFyeSBjb2x1bW4pCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocHVzaCAoY29ucyBpbmRleCAodnRhYmxlLWNvbHVtbi1wcmltYXJ5IGNvbHVt
bikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLXNvcnQtYnkgdGFi
bGUpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtY29sdW1ucyB0YWJsZSkpKQog
ICAgICAod2hlbiAodnRhYmxlLXNvcnQtYnkgdGFibGUpCiAgICAgICAgKHNldGYgKHNsb3QtdmFs
dWUgdGFibGUgJy1vcmlnLXNvcnQtYnkpICh2dGFibGUtc29ydC1ieSB0YWJsZSkpKSkKICAgICh3
aGVuIGluc2VydAogICAgICAodnRhYmxlLWluc2VydCB0YWJsZSkpCiAgICB0YWJsZSkpCgooZGVm
dW4gdnRhYmxlLS1jb21wdXRlLWNvbG9ycyAocm93LWNvbG9ycyBjb2x1bW4tY29sb3JzKQogIChj
b25kCiAgICgobnVsbCBjb2x1bW4tY29sb3JzKQogICAgKG1hcGNhciAjJ3Z0YWJsZS0tbWFrZS1j
b2xvci1mYWNlIHJvdy1jb2xvcnMpKQogICAoKG51bGwgcm93LWNvbG9ycykKICAgIChtYXBjYXIg
Iyd2dGFibGUtLW1ha2UtY29sb3ItZmFjZSBjb2x1bW4tY29sb3JzKSkKICAgKHQKICAgIChjbC1s
b29wIGZvciByb3cgaW4gcm93LWNvbG9ycwogICAgICAgICAgICAgY29sbGVjdCAoY2wtbG9vcCBm
b3IgY29sdW1uIGluIGNvbHVtbi1jb2xvcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29sbGVjdCAodnRhYmxlLS1mYWNlLWJsZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh2dGFibGUtLW1ha2UtY29sb3ItZmFjZSByb3cpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLW1ha2UtY29sb3ItZmFjZSBjb2x1bW4pKSkp
KSkpCgooZGVmdW4gdnRhYmxlLS1tYWtlLWNvbG9yLWZhY2UgKG9iamVjdCkKICAoaWYgKHN0cmlu
Z3Agb2JqZWN0KQogICAgICAobGlzdCA6YmFja2dyb3VuZCBvYmplY3QpCiAgICBvYmplY3QpKQoK
KGRlZnVuIHZ0YWJsZS0tZmFjZS1ibGVuZCAoZmFjZTEgZmFjZTIpCiAgKGxldCAoKGZvcmVncm91
bmQgKHZ0YWJsZS0tZmFjZS1jb2xvciBmYWNlMSBmYWNlMiAjJ2ZhY2UtZm9yZWdyb3VuZAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmZvcmVncm91bmQpKQogICAgICAg
IChiYWNrZ3JvdW5kICh2dGFibGUtLWZhY2UtY29sb3IgZmFjZTEgZmFjZTIgIydmYWNlLWJhY2tn
cm91bmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpiYWNrZ3JvdW5k
KSkpCiAgICBgKCxAKGFuZCBmb3JlZ3JvdW5kIChsaXN0IDpmb3JlZ3JvdW5kIGZvcmVncm91bmQp
KQogICAgICAsQChhbmQgYmFja2dyb3VuZCAobGlzdCA6YmFja2dyb3VuZCBiYWNrZ3JvdW5kKSkp
KSkKCihkZWZ1biB2dGFibGUtLWZhY2UtY29sb3IgKGZhY2UxIGZhY2UyIGFjY2Vzc29yIHNsb3Qp
CiAgKGxldCAoKGNvbDEgKGlmIChmYWNlcCBmYWNlMSkKICAgICAgICAgICAgICAgICAgKGZ1bmNh
bGwgYWNjZXNzb3IgZmFjZTEpCiAgICAgICAgICAgICAgICAocGxpc3QtZ2V0IGZhY2UxIHNsb3Qp
KSkKICAgICAgICAoY29sMiAoaWYgKGZhY2VwIGZhY2UyKQogICAgICAgICAgICAgICAgICAoZnVu
Y2FsbCBhY2Nlc3NvciBmYWNlMikKICAgICAgICAgICAgICAgIChwbGlzdC1nZXQgZmFjZTIgc2xv
dCkpKSkKICAgIChpZiAoYW5kIGNvbDEgY29sMikKICAgICAgICAoYXBwbHkgIydjb2xvci1yZ2It
dG8taGV4CiAgICAgICAgICAgICAgIGAoLEAoY29sb3ItYmxlbmQgKGNvbG9yLW5hbWUtdG8tcmdi
IGNvbDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbG9yLW5hbWUtdG8tcmdi
IGNvbDIpKQogICAgICAgICAgICAgICAgIDIpKQogICAgICAob3IgY29sMSBjb2wyKSkpKQoKOzs7
IEludGVyZmFjZSB1dGlsaXR5IGZ1bmN0aW9ucy4KCihkZWZ1biB2dGFibGUtYnVmZmVyICgmb3B0
aW9uYWwgdGFibGUpCiAgIlJldHVybiB0aGUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCBUQUJMRS4K
SWYgVEFCTEUgaXMgbmlsLCB1c2UgdGhlIHRhYmxlIHVuZGVyIHBvaW50LiAgUmV0dXJuIG5pbCBp
ZiB0aGUgdGFibGUgaGFzCm5vdCBiZWVuIGluc2VydGVkIGludG8gYSBidWZmZXIuIgogIChzbG90
LXZhbHVlIChvciB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKQogICAgICAgICAgICAgICct
YnVmZmVyKSkKCihkZWZ1biB2dGFibGUtY3VycmVudC10YWJsZSAoKQogICJSZXR1cm4gdGhlIHRh
YmxlIHVuZGVyIHBvaW50LiIKICAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAndnRhYmxlKSkK
CihkZWZ1biB2dGFibGUtY3VycmVudC1vYmplY3QgKCkKICAiUmV0dXJuIHRoZSBvYmplY3QgdW5k
ZXIgcG9pbnQuIgogIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICd2dGFibGUtb2JqZWN0KSkK
CihkZWZ1biB2dGFibGUtY3VycmVudC1jb2x1bW4gKCkKICAiUmV0dXJuIHRoZSBpbmRleCBvZiB0
aGUgY29sdW1uIHVuZGVyIHBvaW50LiIKICAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAndnRh
YmxlLWNvbHVtbikpCgooZGVmdW4gdnRhYmxlLWJlZ2lubmluZy1vZi10YWJsZSAoKQogICJHbyB0
byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgdGFibGUuIgogIChpZiAob3IgKHRleHQtcHJvcGVy
dHktc2VhcmNoLWJhY2t3YXJkICd2dGFibGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSAjJ2VxKQog
ICAgICAgICAgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ3Z0YWJsZSkpCiAgICAgIChwb2lu
dCkKICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpKSkKCihkZWZ1biB2dGFibGUtZ290by1iZWdp
bm5pbmctb2YtdGFibGUgKCkKICAiTW92ZSBwb2ludCB0byB0aGUgZmlyc3QgbGluZSBvZiB0aGUg
Y3VycmVudCB0YWJsZS4KSWYgdGhlIHRhYmxlIGlzIGVtcHR5IGFuZCBpZiBgdXNlLWhlYWRlci1s
aW5lJyBpcyBuaWwsIHBvaW50IGlzIG1vdmVkIHRvCnRoZSBoZWFkZXIuCgpJZiBubyB0YWJsZSBp
cyBmb3VuZCwgcG9pbnQgaXMgbW92ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuIgogIChp
bnRlcmFjdGl2ZSkKICAoaWYgKG9yICh0ZXh0LXByb3BlcnR5LXNlYXJjaC1iYWNrd2FyZCAndnRh
YmxlICh2dGFibGUtY3VycmVudC10YWJsZSkgIydlcSkKICAgICAgICAgIChnZXQtdGV4dC1wcm9w
ZXJ0eSAocG9pbnQpICd2dGFibGUpKQogICAgICA7OyBBY2NvbW1vZGF0ZSBoZWFkZXIgaW4gYnVm
ZmVyIHZzLiBoZWFkZXItbGluZS4gIEF0dGVtcHQgdG8gbW92ZQogICAgICA7OyBwb2ludCBpbnRv
IHRoZSBmaXJzdCBvYmplY3QncyBsaW5lLgogICAgICAocHJvZ24KICAgICAgICAod2hlbiAoZ2V0
LXRleHQtcHJvcGVydHkgKHBvaW50KSAndnRhYmxlLWhlYWRlcikKICAgICAgICAgIChmb3J3YXJk
LWxpbmUpCiAgICAgICAgICAodW5sZXNzICh2dGFibGUtY3VycmVudC1vYmplY3QpCiAgICAgICAg
ICAgIChmb3J3YXJkLWxpbmUgLTEpKSkKICAgICAgICAocG9pbnQpKQogICAgKGdvdG8tY2hhciAo
cG9pbnQtbWluKSkpKQoKKGRlZnVuIHZ0YWJsZS1lbmQtb2YtdGFibGUgKCkKICAiTW92ZSBwb2lu
dCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHRhYmxlLgpQb2ludCB3aWxsIGJlIG1vdmVkIHRv
IHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSB0YWJsZSwgbm90IHRoZSBsYXN0CnJvdy4gIFVz
ZSBgdnRhYmxlLWdvdG8tZW5kLW9mLXRhYmxlJyB0byBrZWVwIHBvaW50IHdpdGhpbiB0YWJsZSBi
b3VuZHMuCgpJZiBubyB0YWJsZSBpcyBmb3VuZCwgcG9pbnQgaXMgbW92ZWQgdG8gdGhlIGVuZCBv
ZiB0aGUgYnVmZmVyLiIKICAoaWYgKHRleHQtcHJvcGVydHktc2VhcmNoLWZvcndhcmQgJ3Z0YWJs
ZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpICMnZXEpCiAgICAgIChwb2ludCkKICAgIChnb3RvLWNo
YXIgKHBvaW50LW1heCkpKSkKCihkZWZ1biB2dGFibGUtZ290by1lbmQtb2YtdGFibGUgKCkKICAi
R28gdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCB0YWJsZSwga2VlcGluZyBwb2ludCB3aXRoaW4g
dGFibGUgYm91bmRzLiIKICAoaW50ZXJhY3RpdmUpCiAgKHZ0YWJsZS1lbmQtb2YtdGFibGUpCiAg
OzsgS2VlcCBwb2ludCB3aXRoaW4gdGFibGUgYm91bmRzLgogICh2dGFibGUtcHJldmlvdXMtbGlu
ZSkKICAodnRhYmxlLW5leHQtbGluZSkpCgooZGVmdW4gdnRhYmxlLWdvdG8tb2JqZWN0IChvYmpl
Y3QpCiAgIkdvIHRvIE9CSkVDVCBpbiB0aGUgY3VycmVudCB0YWJsZS4KUmV0dXJuIHRoZSBwb3Np
dGlvbiBvZiB0aGUgb2JqZWN0IGlmIGZvdW5kLCBhbmQgbmlsIGlmIG5vdC4iCiAgKGxldCAoKHN0
YXJ0IChwb2ludCkpKQogICAgKHZ0YWJsZS1iZWdpbm5pbmctb2YtdGFibGUpCiAgICAobGV0ICgo
cHJlZGljYXRlICh2dGFibGUtb2JqZWN0LWVxdWFsICh2dGFibGUtY3VycmVudC10YWJsZSkpKSkK
ICAgICAgKHNhdmUtcmVzdHJpY3Rpb24KICAgICAgICAobmFycm93LXRvLXJlZ2lvbiAocG9pbnQp
IChzYXZlLWV4Y3Vyc2lvbiAodnRhYmxlLWVuZC1vZi10YWJsZSkpKQogICAgICAgIChpZiAodGV4
dC1wcm9wZXJ0eS1zZWFyY2gtZm9yd2FyZCAndnRhYmxlLW9iamVjdCBvYmplY3QgcHJlZGljYXRl
KQogICAgICAgICAgICAocHJvZ24KICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lIC0xKQogICAg
ICAgICAgICAgIChwb2ludCkpCiAgICAgICAgICAoZ290by1jaGFyIHN0YXJ0KQogICAgICAgICAg
bmlsKSkpKSkKCihkZWZ1biB2dGFibGUtZ290by10YWJsZSAodGFibGUpCiAgIkdvIHRvIFRBQkxF
IGluIHRoZSBjdXJyZW50IGJ1ZmZlci4KSWYgVEFCTEUgaXMgZm91bmQsIHJldHVybiB0aGUgcG9z
aXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoZSB0YWJsZS4gIElmIGl0CmNhbid0IGJlIGZvdW5kLCBy
ZXR1cm4gbmlsIGFuZCBkb24ndCBtb3ZlIHBvaW50LgoKSWYgYDp1c2UtaGVhZGVyLWxpbmUnIGlz
IG5pbCwgdGhlIGhlYWRlciBsaW5lIGlzIHBhcnQgb2YgdGhlIGJ1ZmZlciBhbmQKcG9pbnQgd2ls
bCBiZSBtb3ZlZCB0byB0aGUgaGVhZGVyLiAgVXNlIGB2dGFibGUtZ290by1iZWdpbm5pbmctb2Yt
dGFibGUnCnRvIG1vdmUgcG9pbnQgdG8gdGhlIGZpcnN0IGRhdGEgbGluZSBvZiB0aGUgdGFibGUs
IGlmIGRhdGEgZXhpc3QuIgogIChsZXQgKChzdGFydCAocG9pbnQpKSkKICAgIChnb3RvLWNoYXIg
KHBvaW50LW1pbikpCiAgICAoaWYtbGV0KiAoKG1hdGNoICh0ZXh0LXByb3BlcnR5LXNlYXJjaC1m
b3J3YXJkICd2dGFibGUgdGFibGUgdCkpKQogICAgICAgIChnb3RvLWNoYXIgKHByb3AtbWF0Y2gt
YmVnaW5uaW5nIG1hdGNoKSkKICAgICAgKGdvdG8tY2hhciBzdGFydCkKICAgICAgbmlsKSkpCgoo
ZGVmdW4gdnRhYmxlLS1idWZmZXItdGFibGVzICgpCiAgIlJldHVybiBhIGxpc3Qgb2YgdnRhYmxl
cyBpbiB0aGUgY3VycmVudCBidWZmZXIuClRoZSBsaXN0IGlzIHJldHVybmVkIGluIHRoZSBvcmRl
ciB0YWJsZXMgd2VyZSBmb3VuZC4KSWYgbm8gdGFibGVzIGFyZSBmb3VuZCwgcmV0dXJuIG5pbC4i
CiAgKGxldCAodnRhYmxlcykKICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAoZ290by1jaGFyIChw
b2ludC1taW4pKQogICAgICAod2hpbGUtbGV0ICgobWF0Y2ggKHRleHQtcHJvcGVydHktc2VhcmNo
LWZvcndhcmQgJ3Z0YWJsZSkpKQogICAgICAgIChwdXNoIChwcm9wLW1hdGNoLXZhbHVlIG1hdGNo
KSB2dGFibGVzKSkpCiAgICAobnJldmVyc2UgdnRhYmxlcykpKQoKKGRlZnVuIHZ0YWJsZS0tbWF5
YmUtc2V0LXdpbmRvdy1wb2ludCAoJm9wdGlvbmFsIHBvcykKICAoc2V0cSBwb3MgKG9yIHBvcyAo
cG9pbnQpKSkKICAodW5sZXNzIChlcSAoc2VsZWN0ZWQtd2luZG93KSAoZ2V0LWJ1ZmZlci13aW5k
b3cgKGN1cnJlbnQtYnVmZmVyKSkpCiAgICAoc2V0LXdpbmRvdy1wb2ludCAoZ2V0LWJ1ZmZlci13
aW5kb3cgKGN1cnJlbnQtYnVmZmVyKSkgcG9zKSkKICBwb3MpCgooZGVmdW4gdnRhYmxlLWdvdG8t
Y29sdW1uIChjb2x1bW4gJm9wdGlvbmFsIG1heWJlLXNldC13aW5kb3ctcG9pbnQpCiAgIkdvIHRv
IENPTFVNTiBvbiB0aGUgY3VycmVudCBsaW5lLgpXaW5kb3cgcG9pbnQgbWlnaHQgYmUgY2hhbmdl
ZCBpZiBNQVlCRS1TRVQtV0lORE9XLVBPSU5UIGlzIG5vbi1uaWwuIgogIChiZWdpbm5pbmctb2Yt
bGluZSkKICAoaWYtbGV0KiAoKG1hdGNoICh0ZXh0LXByb3BlcnR5LXNlYXJjaC1mb3J3YXJkICd2
dGFibGUtY29sdW1uIGNvbHVtbiB0KSkpCiAgICAgIChnb3RvLWNoYXIgKHByb3AtbWF0Y2gtYmVn
aW5uaW5nIG1hdGNoKSkKICAgIChlbmQtb2YtbGluZSkpCiAgKHdoZW4gbWF5YmUtc2V0LXdpbmRv
dy1wb2ludAogICAgKHZ0YWJsZS0tbWF5YmUtc2V0LXdpbmRvdy1wb2ludCkpCiAgKHBvaW50KSkK
CihkZWZ1biB2dGFibGUtYmVnaW5uaW5nLW9mLXRhYmxlLWxpbmUtbnVtYmVyICgpCiAgIkFic29s
dXRlIGJ1ZmZlciBsaW5lIG51bWJlciBvZiB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgdGFibGUu
IgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKHNhdmUtcmVzdHJpY3Rpb24KICAgICAgKHdpZGVuKQog
ICAgICAobGluZS1udW1iZXItYXQtcG9zICh2dGFibGUtZ290by1iZWdpbm5pbmctb2YtdGFibGUp
KSkpKQoKKGRlZnVuIHZ0YWJsZS1lbmQtb2YtdGFibGUtbGluZS1udW1iZXIgKCkKICAiQWJzb2x1
dGUgYnVmZmVyIGxpbmUgbnVtYmVyIG9mIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgdGFibGUuIgog
IChzYXZlLWV4Y3Vyc2lvbgogICAgKHNhdmUtcmVzdHJpY3Rpb24KICAgICAgKHdpZGVuKQogICAg
ICAobGluZS1udW1iZXItYXQtcG9zICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpKSkKCihkZWZ1biB2
dGFibGUtb2JqZWN0LWxpbmUtbnVtYmVyIChvYmplY3QpCiAgIkFic29sdXRlIGJ1ZmZlciBsaW5l
IG51bWJlciBvZiBPQkpFQ1Qgb3IgbmlsLCBpZiBpdCBpcyBub3QgaW4gdGhlIHRhYmxlLiIKICAo
c2F2ZS1leGN1cnNpb24KICAgIChzYXZlLXJlc3RyaWN0aW9uCiAgICAgICh3aWRlbikKICAgICAg
KHdoZW4gKHZ0YWJsZS1nb3RvLW9iamVjdCBvYmplY3QpCiAgICAgICAgKGxpbmUtbnVtYmVyLWF0
LXBvcykpKSkpCgooZGVmdW4gdnRhYmxlLW9iamVjdC1saW5lLWluZGV4IChvYmplY3QpCiAgIkxp
bmUgbnVtYmVyIG9mIE9CSkVDVCBvciBuaWwsIGlmIGl0IGlzIG5vdCBpbiB0aGUgdGFibGUuClRo
ZSBpbmRleCBpcyBPQkpFQ1QncyBsaW5lIG51bWJlciByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2Yg
dGhlIHRhYmxlLgpJdCBpcyAwLWJhc2VkLiIKICAoc2F2ZS1leGN1cnNpb24KICAgIChzYXZlLXJl
c3RyaWN0aW9uCiAgICAgICh3aWRlbikKICAgICAgKHdoZW4gKHZ0YWJsZS1nb3RvLW9iamVjdCBv
YmplY3QpCiAgICAgICAgKC0gKGxpbmUtbnVtYmVyLWF0LXBvcykKICAgICAgICAgICAodnRhYmxl
LWJlZ2lubmluZy1vZi10YWJsZS1saW5lLW51bWJlcikpKSkpKQoKKGRlZnVuIHZ0YWJsZS0tcHVs
c2UgKHRhYmxlKQogICJQdWxzZSB0aGUgVEFCTEUgbGluZSB3aGVyZSBwb2ludCBpcy4iCiAgKGZ1
bmNhbGwgKHZ0YWJsZS1wdWxzZS1mdW5jdGlvbiB0YWJsZSkpKQoKKGRlZnVuIHZ0YWJsZS11cGRh
dGUtb2JqZWN0ICh0YWJsZSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmb3B0aW9uYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQtb2JqZWN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydC1hZnRlcikKICAiVXBkYXRl
IE9CSkVDVCdzIHJlcHJlc2VudGF0aW9uIGluIFRBQkxFLgpJZiBPTEQtT0JKRUNUIGlzIG5vbi1u
aWwsIHJlcGxhY2UgT0xELU9CSkVDVCB3aXRoIE9CSkVDVCBhbmQgZGlzcGxheSBpdC4KSW4gZWl0
aGVyIGNhc2UsIGlmIHRoZSBleGlzdGluZyBvYmplY3QgaXMgbm90IGZvdW5kIGluIHRoZSB0YWJs
ZSwgc2lnbmFsCmFuIGVycm9yLgoKSWYgU09SVC1BRlRFUiBpcyBub24tbmlsLCBzb3J0IGFuZCBy
ZWRpc3BsYXkgdGhlIHRhYmxlIGFmdGVyIHRoZSBvYmplY3QKaXMgdXBkYXRlZC4iCiAgKHdpdGgt
Y3VycmVudC1idWZmZXIgKHZ0YWJsZS1idWZmZXIgdGFibGUpCiAgICAodW5sZXNzIG9sZC1vYmpl
Y3QKICAgICAgKHNldHEgb2xkLW9iamVjdCBvYmplY3QpKQogICAgKHVubGVzcyAoYW5kIChub3Qg
KGZ1bmNhbGwgKHZ0YWJsZS1vYmplY3QtZXF1YWwgdGFibGUpIG9sZC1vYmplY3Qgb2JqZWN0KSkK
ICAgICAgICAgICAgICAgICAodnRhYmxlLS1oYW5kbGUtZHVwbGljYXRlLW9iamVjdCB0YWJsZSBv
YmplY3QpKQogICAgICAobGV0ICgob2JqZWN0cyAodnRhYmxlLW9iamVjdHMgdGFibGUpKQogICAg
ICAgICAgICAoY2FjaGUgKHZ0YWJsZS0tZW5zdXJlLWNhY2hlIHRhYmxlKSkKICAgICAgICAgICAg
KGluaGliaXQtcmVhZC1vbmx5IHQpKQogICAgICAgIDs7IEZpcnN0IHJlcGxhY2UgdGhlIG9iamVj
dCBpbiB0aGUgb2JqZWN0IHN0b3JhZ2UuCiAgICAgICAgKGlmIChmdW5jYWxsICh2dGFibGUtb2Jq
ZWN0LWVxdWFsIHRhYmxlKSBvbGQtb2JqZWN0IChjYXIgb2JqZWN0cykpCiAgICAgICAgICAgIDs7
IEl0J3MgYXQgdGhlIGhlYWQsIHNvIHJlcGxhY2UgaXQgdGhlcmUuCiAgICAgICAgICAgIChzZXRm
ICh2dGFibGUtb2JqZWN0cyB0YWJsZSkKICAgICAgICAgICAgICAgICAgKGNvbnMgb2JqZWN0IChj
ZHIgb2JqZWN0cykpKQogICAgICAgICAgOzsgT3RoZXJ3aXNlIHNwbGljZSBpbnRvIHRoZSBsaXN0
LgogICAgICAgICAgKHdoaWxlIChhbmQgKGNkciBvYmplY3RzKQogICAgICAgICAgICAgICAgICAg
ICAgKG5vdCAoZnVuY2FsbCAodnRhYmxlLW9iamVjdC1lcXVhbCB0YWJsZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNhZHIgb2JqZWN0cykgb2xkLW9iamVjdCkpKQogICAg
ICAgICAgICAoc2V0cSBvYmplY3RzIChjZHIgb2JqZWN0cykpKQogICAgICAgICAgKHVubGVzcyAo
YW5kIG9iamVjdHMKICAgICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCAodnRhYmxlLW9iamVj
dC1lcXVhbCB0YWJsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FkciBvYmpl
Y3RzKSBvbGQtb2JqZWN0KSkKICAgICAgICAgICAgKGVycm9yICJDYW4ndCBmaW5kIHRoZSBvbGQg
b2JqZWN0ICh2dGFibGUgYCVzJykiCiAgICAgICAgICAgICAgICAgICAodnRhYmxlLW5hbWUgdGFi
bGUpKSkKICAgICAgICAgIChzZXRjYXIgKGNkciBvYmplY3RzKSBvYmplY3QpKQogICAgICAgIDs7
IFRoZW4gdXBkYXRlIHRoZSBjYWNoZS4uLgogICAgICAgIChpZi1sZXQqICgobGluZS1udW1iZXIg
KHNlcS1wb3NpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWNh
Y2hlLWxpbmVzIGNhY2hlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhc3NvYyBv
bGQtb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUt
LWNhY2hlLWxpbmVzIGNhY2hlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAodnRhYmxlLW9iamVjdC1lcXVhbCB0YWJsZSkpKSkKICAgICAgICAgICAgICAgICAgKGxpbmUg
KGVsdCAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkgbGluZS1udW1iZXIpKSkKICAgICAgICAg
ICAgKHByb2duCiAgICAgICAgICAgICAgKHNldGNhciBsaW5lIG9iamVjdCkKICAgICAgICAgICAg
ICAoc2V0Y2RyIGxpbmUgKHZ0YWJsZS0tY29tcHV0ZS1jYWNoZWQtbGluZSB0YWJsZSBvYmplY3Qp
KQogICAgICAgICAgICAgIDs7IC4uLmFuZCByZWRpc3BsYXkgdGhlIGxpbmUgaW4gcXVlc3Rpb24u
CiAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICA7OyBLZWVwIHBvaW50IHN0YWJsZSBpZiB0
YWJsZSBpcyB0aGUgY3VycmVudCB0YWJsZSBhbmQgdGhlCiAgICAgICAgICAgICAgOzsgb2JqZWN0
IGJlaW5nIHVwZGF0ZWQgaXMgdGhlIGN1cnJlbnQgb2JqZWN0OyBpLmUuLCB3aGVyZQogICAgICAg
ICAgICAgIDs7IHBvaW50IGlzLgogICAgICAgICAgICAgIChsZXQgKChvcmlnLWNvbHVtbgogICAg
ICAgICAgICAgICAgICAgICAod2hlbiAoYW5kIChlcSB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFi
bGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcSBvbGQtb2JqZWN0ICh2dGFi
bGUtY3VycmVudC1vYmplY3QpKSkKICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWN1cnJl
bnQtY29sdW1uKSkpKQogICAgICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAg
ICAgICAgIDs7IElmIHBvaW50IGlzIG5vdCBhbHJlYWR5IGluIHRoZSB0YWJsZS4KICAgICAgICAg
ICAgICAgICAgKHVubGVzcyBvcmlnLWNvbHVtbgogICAgICAgICAgICAgICAgICAgICh2dGFibGUt
Z290by10YWJsZSB0YWJsZSkpCiAgICAgICAgICAgICAgICAgICh1bmxlc3MgKHZ0YWJsZS1nb3Rv
LW9iamVjdCBvbGQtb2JqZWN0KQogICAgICAgICAgICAgICAgICAgIChlcnJvciAiQ2FuJ3QgZmlu
ZCBvbGQtb2JqZWN0ICh2dGFibGUgYCVzJykiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh2
dGFibGUtbmFtZSB0YWJsZSkpKQogICAgICAgICAgICAgICAgICAoZGVsZXRlLWxpbmUpCiAgICAg
ICAgICAgICAgICAgICh2dGFibGUtLWluc2VydC1saW5lIHRhYmxlIGxpbmUgbGluZS1udW1iZXIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY2FjaGUtd2lk
dGhzIGNhY2hlKSkpCiAgICAgICAgICAgICAgICAod2hlbiBvcmlnLWNvbHVtbgogICAgICAgICAg
ICAgICAgICAodnRhYmxlLWdvdG8tb2JqZWN0IG9iamVjdCkKICAgICAgICAgICAgICAgICAgKHZ0
YWJsZS1nb3RvLWNvbHVtbiBvcmlnLWNvbHVtbiAnbWF5YmUtc2V0LXdpbmRvdy1wb2ludCkpKQog
ICAgICAgICAgICAgIDs7IFdlIG1heSBoYXZlIGluc2VydGVkIGEgbm9uLW51bWVyaWNhbCB2YWx1
ZSBpbnRvIGEgcHJldmlvdXNseQogICAgICAgICAgICAgIDs7IGFsbC1udW1lcmljYWwgdGFibGUs
IHNvIHJlY29tcHV0ZS4KICAgICAgICAgICAgICAodnRhYmxlLS1tYXliZS1yZWNvbXB1dGUtbnVt
ZXJpY2FsLWZyb20tY2FjaGUtbGluZSB0YWJsZSAoY2RyIGxpbmUpKQogICAgICAgICAgICAgIDs7
IENhY2hlIGNvaGVyZW5jZS4KICAgICAgICAgICAgICAodnRhYmxlLS10aWNrLW9iamVjdHMgdGFi
bGUpCiAgICAgICAgICAgICAgKHZ0YWJsZS0tY2FjaGUtdGljay1zeW5jIHRhYmxlIGNhY2hlKQog
ICAgICAgICAgICAgICh3aGVuIHNvcnQtYWZ0ZXIKICAgICAgICAgICAgICAgIDs7IFJldmVydCBk
b2VzIHJlZGlzcGxheSwgYW5kIHdlIGNhbGwgaXQgb25seSBpZiBzb3J0CiAgICAgICAgICAgICAg
ICA7OyBhY3R1YWxseSBzb3J0ZWQuCiAgICAgICAgICAgICAgICAod2hlbiAodnRhYmxlLS1zb3J0
IHRhYmxlIGNhY2hlKQogICAgICAgICAgICAgICAgICAodnRhYmxlLXJldmVydCB0YWJsZSkpKQog
ICAgICAgICAgICAgICh3aGVuIChtZW1xICd1cGRhdGUgKHZ0YWJsZS1wdWxzZSB0YWJsZSkpCiAg
ICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgICAgKHVubGVzcyAo
ZXEgdGFibGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkKICAgICAgICAgICAgICAgICAgICAodnRh
YmxlLWdvdG8tdGFibGUgdGFibGUpKQogICAgICAgICAgICAgICAgICAodnRhYmxlLWdvdG8tb2Jq
ZWN0IG9iamVjdCkKICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tcHVsc2UgdGFibGUpKSkpCiAg
ICAgICAgICA7OyBBdCB0aGlzIHBvaW50LCB0aGUgb2JqZWN0IHdhcyB1cGRhdGVkIGluIG9iamVj
dHMsIGJ1dCBub3QgdGhlCiAgICAgICAgICA7OyBjYWNoZSwgd2hpY2ggd2lsbCBiZSBjb25zaWRl
cmVkIHN0YWxlLgogICAgICAgICAgKGVycm9yICJDYW4ndCBmaW5kIGNhY2hlZCBvYmplY3QgKHZ0
YWJsZSBgJXMnKSIKICAgICAgICAgICAgICAgICAodnRhYmxlLW5hbWUgdGFibGUpKSkpKSkpCgoo
ZGVmdW4gdnRhYmxlLXJlbW92ZS1vYmplY3QgKHRhYmxlIG9iamVjdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZvcHRpb25hbAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluaGliaXQtcm93LXJlZGlzcGxheSkKICAiUmVtb3ZlIE9CSkVDVCBmcm9tIFRBQkxF
LgpUaGlzIHdpbGwgYWxzbyByZW1vdmUgdGhlIGRpc3BsYXllZCBsaW5lLCBhbmQgdGhlIG9iamVj
dCB3aWxsIGJlIHVubWFya2VkLgoKSWYgdGhlIG9iamVjdCBpcyBub3QgZm91bmQgaW4gdGhlIHRh
YmxlLCBzaWduYWwgYW5kIGVycm9yLgoKUm93cyBiZWxvdyB0aGUgcmVtb3ZlZCBvYmplY3QgYXJl
IHJlZGlzcGxheWVkIHRvIHVwZGF0ZSByb3cgY29sb3JzLCBpZgpwcmVzZW50LiAgSWYgSU5ISUJJ
VC1ST1ctUkVESVNQTEFZIGlzIG5vbi1uaWwsIHRoaXMgcmVkaXNwbGF5IGlzCmluaGliaXRlZC4g
IFRoaXMgaXMgdXNlZnVsIGZvciBiYXRjaCB1cGRhdGVzLiAgQ2FsbCBgdnRhYmxlLXJldmVydCcg
b3IKYHZ0YWJsZS1yZWRpc3BsYXktcmFuZ2UnIGF0IHRoZSBlbmQgb2YgYSBiYXRjaCB0byB1cGRh
dGUgcm93IGNvbG9ycy4iCiAgKHdpdGgtY3VycmVudC1idWZmZXIgKHZ0YWJsZS1idWZmZXIgdGFi
bGUpCiAgICAobGV0ICgoY2FjaGUgKHZ0YWJsZS0tZW5zdXJlLWNhY2hlIHRhYmxlKSkKICAgICAg
ICAgIChpbmhpYml0LXJlYWQtb25seSB0KSkKICAgICAgKHVubGVzcyAoc2VxLWNvbnRhaW5zLXAg
KHZ0YWJsZS1vYmplY3RzIHRhYmxlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1vYmplY3QtZXF1YWwgdGFi
bGUpKQogICAgICAgIChlcnJvciAiQ2FuJ3QgZmluZCB0aGUgb2JqZWN0IHRvIHJlbW92ZSAodnRh
YmxlIGAlcycpIgogICAgICAgICAgICAgICAodnRhYmxlLW5hbWUgdGFibGUpKSkKICAgICAgOzsg
Rmlyc3QgcmVtb3ZlIGZyb20gdGhlIG9iamVjdHMuCiAgICAgIChzZXRmICh2dGFibGUtb2JqZWN0
cyB0YWJsZSkgKHNlcS1yZW1vdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGxhbWJkYSAoZWx0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdW5j
YWxsICh2dGFibGUtb2JqZWN0LWVxdWFsIHRhYmxlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsdCBvYmplY3QpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAodnRhYmxlLW9iamVjdHMgdGFibGUpKSkKICAgICAgOzsgVGhlbiB1bm1h
cmsgdGhlIG9iamVjdC4KICAgICAgKHZ0YWJsZS0tdW5tYXJrLW9iamVjdCB0YWJsZSBvYmplY3Qg
J2luaGliaXQtdXBkYXRlKQogICAgICA7OyBUaGVuIGFkanVzdCB0aGUgY2FjaGUgYW5kIGRpc3Bs
YXkuCiAgICAgIChpZi1sZXQqICgob2xkLWxpbmUgKGFzc29jIG9iamVjdAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1vYmplY3QtZXF1YWwgdGFibGUpKSkpCiAg
ICAgICAgICAocHJvZ24KICAgICAgICAgICAgOzsgV2Ugc2F2ZSB0aGUgY3VycmVudCBjb2x1bW4g
aWYgdGFibGUgaXMgdGhlIGN1cnJlbnQgdGFibGUKICAgICAgICAgICAgOzsgYW5kIHRoZSBvYmpl
Y3QgYmVpbmcgcmVtb3ZlZCBpcyB0aGUgY3VycmVudCBvYmplY3Q7IGkuZS4sCiAgICAgICAgICAg
IDs7IHdoZXJlIHBvaW50IGlzLiAgZGVsZXRlLXJlZ2lvbiwgaWYgcG9pbnQgaXMgaW4gdGhlCiAg
ICAgICAgICAgIDs7IGRlbGV0ZWQgcmVnaW9uLCB3aWxsIGZvcmNlIHBvaW50IHRvIHBvaW50LW1p
biBpZiB0aGUKICAgICAgICAgICAgOzsgcmVnaW9uIHBvaW50IGlzIGluIGlzIGRlbGV0ZWQuCiAg
ICAgICAgICAgIChsZXQgKChvcmlnLWNvbHVtbgogICAgICAgICAgICAgICAgICAgKHdoZW4gKGFu
ZCAoZXEgdGFibGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGVxIG9iamVjdCAodnRhYmxlLWN1cnJlbnQtb2JqZWN0KSkpCiAgICAgICAgICAg
ICAgICAgICAgICh2dGFibGUtY3VycmVudC1jb2x1bW4pKSkKICAgICAgICAgICAgICAgICAgbGlu
ZS1pbmRleCkKICAgICAgICAgICAgICAoc2V0Y2FyIGNhY2hlIChkZWxxIG9sZC1saW5lICh2dGFi
bGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkpCiAgICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCiAg
ICAgICAgICAgICAgICA7OyBJZiBwb2ludCBpcyBub3QgYWxyZWFkeSBpbiB0aGUgdGFibGUuCiAg
ICAgICAgICAgICAgICAodW5sZXNzIG9yaWctY29sdW1uCiAgICAgICAgICAgICAgICAgICh2dGFi
bGUtZ290by10YWJsZSB0YWJsZSkpCiAgICAgICAgICAgICAgICAod2hlbiAodnRhYmxlLWdvdG8t
b2JqZWN0IG9iamVjdCkKICAgICAgICAgICAgICAgICAgKHNldHEgbGluZS1pbmRleCAoLSAobGlu
ZS1udW1iZXItYXQtcG9zIChwb2ludCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHZ0YWJsZS1iZWdpbm5pbmctb2YtdGFibGUtbGluZS1udW1iZXIpKSkKICAgICAgICAg
ICAgICAgICAgKGRlbGV0ZS1saW5lKQogICAgICAgICAgICAgICAgICAod2hlbiAobWVtcSAncmVt
b3ZlICh2dGFibGUtcHVsc2UgdGFibGUpKQogICAgICAgICAgICAgICAgICAgICh3aGVuIChzYXZl
LWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoZXEgdGFibGUgKHZ0YWJsZS1jdXJyZW50LXRh
YmxlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChlcSB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKSkpCiAgICAgICAgICAgICAgICAg
ICAgICAoZm9yd2FyZC1saW5lKSkKICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1wdWxzZSB0
YWJsZSkpKSkKICAgICAgICAgICAgICA7OyBDYWNoZSBjb2hlcmVuY2UuCiAgICAgICAgICAgICAg
KHZ0YWJsZS0tdGljay1vYmplY3RzIHRhYmxlKQogICAgICAgICAgICAgICh2dGFibGUtLWNhY2hl
LXRpY2stc3luYyB0YWJsZSBjYWNoZSkKICAgICAgICAgICAgICA7OyBOb3cgcmVkaXNwbGF5IHRo
ZSBsaW5lcyBiZWxvdyBpZiB0aGVyZSBhcmUgcm93L2NvbHVtbiBjb2xvcnMuCiAgICAgICAgICAg
ICAgKHVubGVzcyBpbmhpYml0LXJvdy1yZWRpc3BsYXkKICAgICAgICAgICAgICAgICh2dGFibGUt
LW1heWJlLXJlZGlzcGxheS1yYW5nZSB0YWJsZSBsaW5lLWluZGV4IG5pbCBjYWNoZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmhpYml0LXJlc3RvcmUt
cG9pbnQpKQogICAgICAgICAgICAgIDs7IFdlIG1heSBoYXZlIHJlbW92ZWQgYSBub24tbnVtZXJp
Y2FsIHZhbHVlIGZyb20gYSB0YWJsZSB0aGF0IGlzCiAgICAgICAgICAgICAgOzsgbm93IGFsbC1u
dW1lcmljYWwsIHNvIHJlY29tcHV0ZS4KICAgICAgICAgICAgICAodnRhYmxlLS1tYXliZS1yZWNv
bXB1dGUtbnVtZXJpY2FsLWZyb20tY2FjaGUtbGluZSB0YWJsZSAoY2RyIG9sZC1saW5lKSkKICAg
ICAgICAgICAgICA7OyBvcmlnLXBvaW50IGlzIG5vbi1uaWwgaWYgdGhpcyB0YWJsZSB3YXMKICAg
ICAgICAgICAgICA7OyB2dGFibGUtY3VycmVudC10YWJsZS4KICAgICAgICAgICAgICAod2hlbiBv
cmlnLWNvbHVtbgogICAgICAgICAgICAgICAgOzsgS2VlcCBwb2ludCB3aXRoaW4gdGFibGUgYm91
bmRzIGluIGNhc2UgcG9pbnQgbW92ZWQKICAgICAgICAgICAgICAgIDs7IGJleW9uZCB0aGUgY3Vy
cmVudCB0YWJsZSByZW1vdmluZyB0aGUgZmluYWwgcm93LgogICAgICAgICAgICAgICAgKHVubGVz
cyAoZXEgdGFibGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkKICAgICAgICAgICAgICAgICAgKHZ0
YWJsZS1nb3RvLXRhYmxlIHRhYmxlKQogICAgICAgICAgICAgICAgICAodnRhYmxlLWdvdG8tZW5k
LW9mLXRhYmxlKSkKICAgICAgICAgICAgICAgICh1bmxlc3MgKHZ0YWJsZS1jdXJyZW50LW9iamVj
dCkKICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1wcmV2aW91cy1saW5lKSkKICAgICAgICAgICAg
ICAgICh2dGFibGUtZ290by1jb2x1bW4gb3JpZy1jb2x1bW4gJ21heWJlLXNldC13aW5kb3ctcG9p
bnQpKSkpCiAgICAgICAgOzsgQXQgdGhpcyBwb2ludCwgdGhlIG9iamVjdCB3YXMgcmVtb3ZlZCBm
cm9tIG9iamVjdHMsIGJ1dCBub3QKICAgICAgICA7OyB0aGUgY2FjaGUsIHdoaWNoIHdpbGwgYmUg
Y29uc2lkZXJlZCBzdGFsZS4KICAgICAgICAoZXJyb3IgIkNhbid0IGZpbmQgY2FjaGVkIG9iamVj
dCAodnRhYmxlIGAlcycpIgogICAgICAgICAgICAgICAodnRhYmxlLW5hbWUgdGFibGUpKSkpKSkK
Cjs7IEZJWE1FOiBUaGUgZmFjdCB0aGF0IHRoZSBgbG9jYXRpb24nIGFyZ3VtZW50IG9mCjs7IGB2
dGFibGUtaW5zZXJ0LW9iamVjdCcgY2FuIGJlIGFuIGludGVnZXIgYW5kIGlzIHRoZW4gaW50ZXJw
cmV0ZWQgYXMKOzsgYW4gaW5kZXggcHJlY2x1ZGVzIHRoZSB1c2Ugb2YgaW50ZWdlcnMgYXMgb2Jq
ZWN0cy4gIFRoaXMgc2VlbXMgYSB2ZXJ5Cjs7IHVubGlrZWx5IHVzZS1jYXNlLCBzbyBsZXQncyBq
dXN0IGFjY2VwdCB0aGlzIGxpbWl0YXRpb24uCgooZGVmdW4gdnRhYmxlLWluc2VydC1vYmplY3Qg
KHRhYmxlIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25h
bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0LWFmdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c29ydC1hZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGliaXQtcm93
LXJlZGlzcGxheSkKICAiSW5zZXJ0IE9CSkVDVCBpbnRvIFRBQkxFIGF0IExPQ0FUSU9OLgpMT0NB
VElPTiBpcyBhbiBvYmplY3QgaW4gVEFCTEUuICBPQkpFQ1QgaXMgaW5zZXJ0ZWQgYWZ0ZXIgTE9D
QVRJT04sCnVubGVzcyBCRUZPUkUgaXMgbm9uLW5pbCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBpbnNl
cnRlZCBiZWZvcmUgTE9DQVRJT04uCgpJZiBMT0NBVElPTiBpcyBuaWwsIG9yIGRvZXMgbm90IGV4
aXN0IGluIHRoZSB0YWJsZSwgT0JKRUNUIGlzIGluc2VydGVkCmF0IHRoZSBlbmQgb2YgdGhlIHRh
YmxlLCBvciBhdCB0aGUgYmVnaW5uaW5nIGlmIEJFRk9SRSBpcyBub24tbmlsLgoKTE9DQVRJT04g
Y2FuIGFsc28gYmUgYW4gaW50ZWdlciwgYSAoemVyby1iYXNlZCkgaW5kZXggaW50byB0aGUgdGFi
bGUuCk9CSkVDVCBpcyBpbnNlcnRlZCBhdCB0aGlzIGxvY2F0aW9uLiAgSWYgdGhlIGluZGV4IGlz
IG91dCBvZiByYW5nZSwKT0JKRUNUIGlzIGluc2VydGVkIGF0IHRoZSBiZWdpbm5pbmcgKGlmIHRo
ZSBpbmRleCBpcyBsZXNzIHRoYW4gMCkgb3IKZW5kIChpZiB0aGUgaW5kZXggaXMgdG9vIGxhcmdl
KSBvZiB0aGUgdGFibGUuICBCRUZPUkUgaXMgaWdub3JlZCBpbiB0aGlzCmNhc2UuCgpSb3dzIGJl
bG93IHRoZSBpbnNlcnRlZCBvYmplY3QgYXJlIHJlZGlzcGxheWVkIHRvIHVwZGF0ZSByb3cgY29s
b3JzLCBpZgpwcmVzZW50LiAgSWYgSU5ISUJJVC1ST1ctUkVESVNQTEFZIGlzIG5vbi1uaWwsIHRo
aXMgcmVkaXNwbGF5IGlzCmluaGliaXRlZC4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgYmF0Y2gg
dXBkYXRlcy4gIENhbGwgYHZ0YWJsZS1yZXZlcnQnCm9yIGB2dGFibGUtcmVkaXNwbGF5LXJhbmdl
JyBhdCB0aGUgZW5kIG9mIGEgYmF0Y2ggdG8gdXBkYXRlIHJvdyBjb2xvcnMuCgpOb3RlOiBJTkhJ
QklULVJPVy1SRURJU1BMQVkgaGFzIG5vIGVmZmVjdCBpZiBTT1JULUFGVEVSIGlzIG5vbi1uaWwu
CgpJZiBTRUxFQ1QtQUZURVIgaXMgbm9uLW5pbCwgdGhlIG5ldyBvYmplY3QgaXMgc2VsZWN0ZWQu
ICBPdGhlcndpc2UsCndoYXRldmVyIG9iamVjdCBpcyBzZWxlY3RlZCByZW1haW5zIHNlbGVjdGVk
LgoKSWYgU09SVC1BRlRFUiBpcyBub24tbmlsLCBzb3J0IHRoZSB0YWJsZSBhZnRlciB0aGUgb2Jq
ZWN0IGlzIGluc2VydGVkCmFuZCB1cGRhdGUgdGhlIGRpc3BsYXksIGlmIG5lY2Vzc2FyeS4KCkNv
bnN1bHQgdGhlIHRhYmxlJ3MgYDpkdXBsaWNhdGUtb2JqZWN0cycgcHJvcGVydHkuIgogICh3aXRo
LWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQogICAgOzsgSWYgdGhlIHZ0YWJs
ZSBpcyBlbXB0eSwganVzdCBhZGQgdGhlIG9iamVjdCBhbmQgcmVnZW5lcmF0ZSB0aGUKICAgIDs7
IHRhYmxlLgogICAgKGlmIChudWxsICh2dGFibGUtb2JqZWN0cyB0YWJsZSkpCiAgICAgICAgKHBy
b2duCiAgICAgICAgICAoc2V0ZiAodnRhYmxlLW9iamVjdHMgdGFibGUpIChsaXN0IG9iamVjdCkp
CiAgICAgICAgICA7OyBObyBuZWVkIHRvIHRpY2sgdGhlIGNhY2hlLCBpdCB3aWxsIGJlIHJlZnJl
c2hlZC4KICAgICAgICAgICh2dGFibGUtLXRpY2stb2JqZWN0cyB0YWJsZSkKICAgICAgICAgICh2
dGFibGUtLW1heWJlLXJlY29tcHV0ZS1udW1lcmljYWwtZnJvbS1jYWNoZS1saW5lCiAgICAgICAg
ICAgdGFibGUKICAgICAgICAgICAodnRhYmxlLS1jb21wdXRlLWNhY2hlZC1saW5lIHRhYmxlIG9i
amVjdCkpCiAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgKHZ0YWJsZS1nb3Rv
LXRhYmxlIHRhYmxlKQogICAgICAgICAgICAodnRhYmxlLXJldmVydC1jb21tYW5kIHRhYmxlKSkp
CiAgICAgICh1bmxlc3MgKHZ0YWJsZS0taGFuZGxlLWR1cGxpY2F0ZS1vYmplY3QgdGFibGUgb2Jq
ZWN0KQogICAgICAgIChsZXQgKChjYWNoZSAodnRhYmxlLS1lbnN1cmUtY2FjaGUgdGFibGUpKSkK
ICAgICAgICAgIDs7IEZpcnN0IGluc2VydCBpbnRvIHRoZSBvYmplY3RzLgogICAgICAgICAgKGxl
dCAoKHBvcyAoaWYgbG9jYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoaW50ZWdl
cnAgbG9jYXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmICh2dGFibGUtLWNh
Y2hlLXNvcnRlZC1wIGNhY2hlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJy
b3IgIlVuc29ydCB0aGUgdnRhYmxlIHRvIGluc2VydCBieSBpbnRlZ2VyIGxvY2F0aW9uICh2dGFi
bGUgYCVzJykiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxl
LW5hbWUgdGFibGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2cxCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG50aGNkciBsb2NhdGlvbiAodnRhYmxlLW9i
amVjdHMgdGFibGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBEbyBub3Qg
cHJlcGVuZCBpZiBpbmRleCBpcyB0b28gbGFyZ2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzZXRxIGJlZm9yZSBuaWwpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9y
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgobG9jICh2dGFibGUtb2JqZWN0cyB0
YWJsZSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2hpbGUgKGFuZCAoY2RyIGxv
YykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCAoZnVuY2Fs
bCAodnRhYmxlLW9iamVjdC1lcXVhbCB0YWJsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FyIGxvYykgbG9jYXRpb24pKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBsb2MgKGNkciBsb2MpKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGlmIChmdW5jYWxsICh2dGFibGUtb2JqZWN0LWVxdWFsIHRh
YmxlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhciBsb2Mp
IGxvY2F0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmlsKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDs7IFByZXBlbmQgaWYgYGxvY2F0aW9uJyBpcyBub3QgZm91bmQgYW5kCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7OyBgYmVmb3JlJyBpcyBub24tbmlsOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGFuZCBiZWZvcmUgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSkpKQogICAgICAgICAg
ICAgICAgICAgICAgIDs7IElmIGBsb2NhdGlvbicgaXMgbmlsIGFuZCBgYmVmb3JlJyBpcyBub24t
bmlsLCB3ZQogICAgICAgICAgICAgICAgICAgICAgIDs7IHByZXBlbmQgdGhlIG5ldyBvYmplY3Qu
CiAgICAgICAgICAgICAgICAgICAgICAgKGlmIGJlZm9yZSAodnRhYmxlLW9iamVjdHMgdGFibGUp
KSkpKQogICAgICAgICAgICAoaWYgKG9yIGJlZm9yZSA7IElmIGBiZWZvcmUnIGlzIG5vbi1uaWws
IGBwb3MnIHNob3VsZCBiZSwgYXMgd2VsbC4KICAgICAgICAgICAgICAgICAgICAoYW5kIHBvcyAo
aW50ZWdlcnAgbG9jYXRpb24pKSkKICAgICAgICAgICAgICAgIDs7IEFkZCB0aGUgbmV3IG9iamVj
dCBiZWZvcmUuCiAgICAgICAgICAgICAgICAobGV0ICgob2xkLW9iamVjdCAoY2FyIHBvcykpKQog
ICAgICAgICAgICAgICAgICAoc2V0Y2FyIHBvcyBvYmplY3QpCiAgICAgICAgICAgICAgICAgIChz
ZXRjZHIgcG9zIChjb25zIG9sZC1vYmplY3QgKGNkciBwb3MpKSkpCiAgICAgICAgICAgICAgOzsg
T3RoZXJ3aXNlLCBhZGQgdGhlIG9iamVjdCBhZnRlci4KICAgICAgICAgICAgICAoaWYgcG9zCiAg
ICAgICAgICAgICAgICAgIDs7IFNwbGljZSB0aGUgb2JqZWN0IGludG8gdGhlIGxpc3QuCiAgICAg
ICAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIG9iamVjdCAoY2RyIHBvcykpKQogICAgICAg
ICAgICAgICAgOzsgT3RoZXJ3aXNlLCBhcHBlbmQgdGhlIG9iamVjdC4KICAgICAgICAgICAgICAg
IChuY29uYyAodnRhYmxlLW9iamVjdHMgdGFibGUpIChsaXN0IG9iamVjdCkpKSkpCiAgICAgICAg
ICA7OyBDYWNoZSBjb2hlcmVuY2UuICBUaGVyZSBpcyBhIG5vbi1sb2NhbCBleGl0LCB2aWEgZXJy
b3IsIGJlbG93OwogICAgICAgICAgOzsgY2FjaGUgd2lsbCBiZSBzdGFsZSBvbiBlcnJvciBhcyB0
aGUgdGlja3Mgd2lsbCBub3QgbWF0Y2ggdXAuCiAgICAgICAgICAodnRhYmxlLS10aWNrLW9iamVj
dHMgdGFibGUpCiAgICAgICAgICA7OyBUaGVuIGFkanVzdCB0aGUgY2FjaGUgYW5kIGRpc3BsYXku
CiAgICAgICAgICAobGV0IChvcmlnLW9iamVjdAogICAgICAgICAgICAgICAgb3JpZy1jb2x1bW4K
ICAgICAgICAgICAgICAgIGxpbmUKICAgICAgICAgICAgICAgIGxpbmUtaW5kZXgpCiAgICAgICAg
ICAgICh3aGVuIChlcSB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKQogICAgICAgICAgICAg
IChzZXRxIG9yaWctb2JqZWN0ICh2dGFibGUtY3VycmVudC1vYmplY3QpCiAgICAgICAgICAgICAg
ICAgICAgb3JpZy1jb2x1bW4gKHZ0YWJsZS1jdXJyZW50LWNvbHVtbikpKQogICAgICAgICAgICAo
c2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICA7OyBJZiBwb2ludCBpcyBub3QgYWxyZWFkeSBp
biB0aGUgdGFibGUuCiAgICAgICAgICAgICAgKHVubGVzcyBvcmlnLW9iamVjdAogICAgICAgICAg
ICAgICAgKHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxlKSkKICAgICAgICAgICAgICAobGV0KiAoKGlu
aGliaXQtcmVhZC1vbmx5IHQpCiAgICAgICAgICAgICAgICAgICAgIChlbGxpcHNpcyAodnRhYmxl
LWVsbGlwc2lzIHRhYmxlKSkKICAgICAgICAgICAgICAgICAgICAgKGVsZW0gKGlmIGxvY2F0aW9u
IDsgbG9jYXRpb24gbWlycm9ycyBgcG9zJywgYWJvdmUuCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoaWYgKGludGVnZXJwIGxvY2F0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChudGggbG9jYXRpb24gKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgKGFzc29jCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAodnRhYmxlLW9iamVjdC1lcXVhbCB0YWJsZSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIGJlZm9yZSAoY2FhciBjYWNoZSkpKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgYmVmb3JlIChjYWFyIGNhY2hlKSkpKQog
ICAgICAgICAgICAgICAgICAgICAocG9zIChtZW1xIGVsZW0gKHZ0YWJsZS0tY2FjaGUtbGluZXMg
Y2FjaGUpKSkpCiAgICAgICAgICAgICAgICAoc2V0cSBsaW5lCiAgICAgICAgICAgICAgICAgICAg
ICAoY29ucyBvYmplY3QgKHZ0YWJsZS0tY29tcHV0ZS1jYWNoZWQtbGluZSB0YWJsZSBvYmplY3Qp
KSkKICAgICAgICAgICAgICAgIChpZiAob3IgYmVmb3JlCiAgICAgICAgICAgICAgICAgICAgICAg
IChhbmQgcG9zIChpbnRlZ2VycCBsb2NhdGlvbikpKQogICAgICAgICAgICAgICAgICAgIDs7IEFk
ZCB0aGUgbmV3IG9iamVjdCBiZWZvcmUuCiAgICAgICAgICAgICAgICAgICAgKGxldCAoKG9sZC1s
aW5lIChjYXIgcG9zKSkpCiAgICAgICAgICAgICAgICAgICAgICAoc2V0Y2FyIHBvcyBsaW5lKQog
ICAgICAgICAgICAgICAgICAgICAgKHNldGNkciBwb3MgKGNvbnMgb2xkLWxpbmUgKGNkciBwb3Mp
KSkKICAgICAgICAgICAgICAgICAgICAgICh1bmxlc3MgKHZ0YWJsZS1nb3RvLW9iamVjdCAoY2Fy
IGVsZW0pKQogICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWdvdG8tYmVnaW5uaW5nLW9m
LXRhYmxlKSkpCiAgICAgICAgICAgICAgICAgIDs7IE90aGVyd2lzZSwgYWRkIHRoZSBvYmplY3Qg
YWZ0ZXIuCiAgICAgICAgICAgICAgICAgIChpZiBwb3MKICAgICAgICAgICAgICAgICAgICAgIDs7
IFNwbGljZSB0aGUgb2JqZWN0IGludG8gdGhlIGxpc3QuCiAgICAgICAgICAgICAgICAgICAgICAo
cHJvZ24KICAgICAgICAgICAgICAgICAgICAgICAgKHNldGNkciBwb3MgKGNvbnMgbGluZSAoY2Ry
IHBvcykpKQogICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHZ0YWJsZS1nb3RvLW9iamVjdCBs
b2NhdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgMSkgIDsg
SW5zZXJ0ICphZnRlciouCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1lbmQtb2Yt
dGFibGUpKSkKICAgICAgICAgICAgICAgICAgICA7OyBPdGhlcndpc2UsIGFwcGVuZCB0aGUgb2Jq
ZWN0LgogICAgICAgICAgICAgICAgICAgIChzZXRjYXIgY2FjaGUgKG5jb25jICh2dGFibGUtLWNh
Y2hlLWxpbmVzIGNhY2hlKSAobGlzdCBsaW5lKSkpCiAgICAgICAgICAgICAgICAgICAgKHZ0YWJs
ZS1lbmQtb2YtdGFibGUpKSkKICAgICAgICAgICAgICAgIChzZXRxIGxpbmUtaW5kZXggKC0gKGxp
bmUtbnVtYmVyLWF0LXBvcyAocG9pbnQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodnRhYmxlLWJlZ2lubmluZy1vZi10YWJsZS1saW5lLW51bWJlcikpKQogICAgICAgICAg
ICAgICAgKGZvcndhcmQtbGluZSAwKQogICAgICAgICAgICAgICAgKHZ0YWJsZS0taW5zZXJ0LWxp
bmUgdGFibGUgbGluZSBsaW5lLWluZGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMgY2FjaGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGxpcHNpcykpKQogICAgICAgICAgICA7OyBXZSBtYXkgaGF2ZSBpbnNl
cnRlZCBhIG5vbi1udW1lcmljYWwgdmFsdWUgaW50byBhIHByZXZpb3VzbHkKICAgICAgICAgICAg
OzsgYWxsLW51bWVyaWNhbCB0YWJsZSwgc28gcmVjb21wdXRlLgogICAgICAgICAgICAodnRhYmxl
LS1tYXliZS1yZWNvbXB1dGUtbnVtZXJpY2FsLWZyb20tY2FjaGUtbGluZSB0YWJsZSAoY2RyIGxp
bmUpKQogICAgICAgICAgICA7OyBDYWNoZSBjb2hlcmVuY2UuCiAgICAgICAgICAgICh2dGFibGUt
LWNhY2hlLXRpY2stc3luYyB0YWJsZSBjYWNoZSkKICAgICAgICAgICAgKGlmIHNvcnQtYWZ0ZXIK
ICAgICAgICAgICAgICAgIDs7IFJldmVydCBkb2VzIHJlZGlzcGxheSwgYW5kIHdlIGNhbGwgaXQg
b25seSBpZiBzb3J0CiAgICAgICAgICAgICAgICA7OyBhY3R1YWxseSBzb3J0ZWQsIG90aGVyd2lz
ZSBpdCBpcyBzYWZlIHRvIGNhbGwKICAgICAgICAgICAgICAgIDs7IHZ0YWJsZS0tcmVkaXNwbGF5
LXJhbmdlLgogICAgICAgICAgICAgICAgKHdoZW4gKHZ0YWJsZS0tc29ydCB0YWJsZSBjYWNoZSkK
ICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1yZXZlcnQgdGFibGUpKQogICAgICAgICAgICAgIDs7
IE5vdyByZWRpc3BsYXkgdGhlIGxpbmVzIGJlbG93IGlmIHRoZXJlIGFyZSByb3cvY29sdW1uCiAg
ICAgICAgICAgICAgOzsgY29sb3JzLCBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAgICAgKHVubGVz
cyBpbmhpYml0LXJvdy1yZWRpc3BsYXkKICAgICAgICAgICAgICAgICh2dGFibGUtLW1heWJlLXJl
ZGlzcGxheS1yYW5nZSB0YWJsZSAoMSsgbGluZS1pbmRleCkgbmlsIGNhY2hlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luaGliaXQtcmVzdG9yZS1wb2lu
dCkpKQogICAgICAgICAgICAod2hlbiAobWVtcSAnaW5zZXJ0ICh2dGFibGUtcHVsc2UgdGFibGUp
KQogICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAgKHZ0YWJsZS1n
b3RvLW9iamVjdCBvYmplY3QpCiAgICAgICAgICAgICAgICAodnRhYmxlLS1wdWxzZSB0YWJsZSkp
KQogICAgICAgICAgICA7OyBvcmlnLW9iamVjdCBpcyBub24tbmlsIGlmIHRoaXMgdGFibGUgaXMK
ICAgICAgICAgICAgOzsgdnRhYmxlLWN1cnJlbnQtdGFibGUgYW5kIGlzIG5vdCBlbXB0eS4KICAg
ICAgICAgICAgKHdoZW4gb3JpZy1vYmplY3QKICAgICAgICAgICAgICAoaWYgc2VsZWN0LWFmdGVy
CiAgICAgICAgICAgICAgICAgICh2dGFibGUtZ290by1vYmplY3Qgb2JqZWN0KQogICAgICAgICAg
ICAgICAgKHZ0YWJsZS1nb3RvLW9iamVjdCBvcmlnLW9iamVjdCkpCiAgICAgICAgICAgICAgKHZ0
YWJsZS1nb3RvLWNvbHVtbiBvcmlnLWNvbHVtbiAnbWF5YmUtc2V0LXdpbmRvdy1wb2ludCkpKSkp
KSkpCgooZGVmdW4gdnRhYmxlLS1yZWRpc3BsYXktcmFuZ2UgKHRhYmxlICZvcHRpb25hbAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20tbGluZSB0by1saW5lCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmhpYml0LXJlc3RvcmUtcG9pbnQpCiAgIlVwZGF0ZSByb3cv
Y29sdW1uIGNvbG9ycyBmb3IgVEFCTEUuCklmIEZST00tTElORSBpcyBuaWwsIHN0YXJ0IGF0IDAs
IHRoZSBmaXJzdCBsaW5lLgpJZiBUTy1MSU5FIGlzIG5pbCwgZW5kIGF0IHRoZSBsYXN0IGxpbmUs
IHRoZSBudW1iZXIgb2Ygb2JqZWN0cy4KSWYgQ0FDSEUgaXMgbm9uLW5pbCwgdXNlIHRoYXQgY29w
eSwgb3IgcmV0cmlldmUgdGhlIGNhY2hlLgpJZiBJTkhJQklULVJFU1RPUkUtUE9JTlQgaXMgbm9u
LW5pbCwgYXNzdW1lIHRoZSBjYWxsZXIgaGFuZGxlcyBwb2ludC4iCiAgKHdpdGgtY3VycmVudC1i
dWZmZXIgKHZ0YWJsZS1idWZmZXIgdGFibGUpCiAgICAobGV0ICgobGluZS1pbmRleCAob3IgZnJv
bS1saW5lIDApKQogICAgICAgICAgKG51bS1vYmplY3RzIChsZW5ndGggKHZ0YWJsZS1vYmplY3Rz
IHRhYmxlKSkpCiAgICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkpCiAgICAgIChzZXRxIHRv
LWxpbmUgKG9yIHRvLWxpbmUgKDEtIG51bS1vYmplY3RzKSkpCiAgICAgICh3aGVuICg8IHRvLWxp
bmUgbGluZS1pbmRleCkKICAgICAgICAoc2V0cSBsaW5lLWluZGV4IChwcm9nMSB0by1saW5lCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHRvLWxpbmUgbGluZS1pbmRleCkpKSkKICAg
ICAgKHdoZW4gKDwgbGluZS1pbmRleCBudW0tb2JqZWN0cykKICAgICAgICA7OyBXZSBzYXZlIHRo
ZSBsb2NhdGlvbiBpZiB0YWJsZSBpcyB0aGUgY3VycmVudCB0YWJsZSwgYXMKICAgICAgICA7OyBk
ZWxldGUtcmVnaW9uLCB2aWEgZGVsZXRlLWxpbmUsIHdpbGwgbW92ZSBwb2ludCB0byBwb2ludC1t
aW4gd2hlbgogICAgICAgIDs7IHRoZSBsaW5lIHBvaW50IGlzIG9uIGdldHMgZGVsZXRlZC4KICAg
ICAgICAobGV0IChvcmlnLXBvaW50CiAgICAgICAgICAgICAgb3JpZy1jb2x1bW4pCiAgICAgICAg
ICAod2hlbiAoZXEgdGFibGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkKICAgICAgICAgICAgKHNl
dHEgb3JpZy1wb2ludCAocG9pbnQpCiAgICAgICAgICAgICAgICAgIG9yaWctY29sdW1uICh2dGFi
bGUtY3VycmVudC1jb2x1bW4pKSkKICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAg
ICA7OyBJZiBwb2ludCBpcyBub3QgYWxyZWFkeSBpbiB0aGUgdGFibGUuCiAgICAgICAgICAgICh1
bmxlc3Mgb3JpZy1wb2ludAogICAgICAgICAgICAgICh2dGFibGUtZ290by10YWJsZSB0YWJsZSkp
CiAgICAgICAgICAgIChzZXRxIGNhY2hlIChvciBjYWNoZSAodnRhYmxlLS1lbnN1cmUtY2FjaGUg
dGFibGUpKSkKICAgICAgICAgICAgKHZ0YWJsZS1nb3RvLW9iamVjdCAoY2FyIChlbHQgKHZ0YWJs
ZS0tY2FjaGUtbGluZXMgY2FjaGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmUtaW5kZXgpKSkKICAgICAgICAgICAgKHdoaWxlICg8PSBsaW5lLWluZGV4IHRv
LWxpbmUpCiAgICAgICAgICAgICAgKGxldCAoKGxpbmUgKGVsdCAodnRhYmxlLS1jYWNoZS1saW5l
cyBjYWNoZSkgbGluZS1pbmRleCkpKQogICAgICAgICAgICAgICAgKGRlbGV0ZS1saW5lKQogICAg
ICAgICAgICAgICAgKHZ0YWJsZS0taW5zZXJ0LWxpbmUgdGFibGUgbGluZSBsaW5lLWluZGV4CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMg
Y2FjaGUpKSkKICAgICAgICAgICAgICAoY2wtaW5jZiBsaW5lLWluZGV4KSkpCiAgICAgICAgICAo
d2hlbiAoYW5kIChub3QgaW5oaWJpdC1yZXN0b3JlLXBvaW50KQogICAgICAgICAgICAgICAgICAg
ICBvcmlnLXBvaW50KQogICAgICAgICAgICAoZ290by1jaGFyIG9yaWctcG9pbnQpCiAgICAgICAg
ICAgICh2dGFibGUtZ290by1jb2x1bW4gb3JpZy1jb2x1bW4gJ21heWJlLXNldC13aW5kb3ctcG9p
bnQpKSkpKSkpCgooZGVmdW4gdnRhYmxlLS1tYXliZS1yZWRpc3BsYXktcmFuZ2UgKHRhYmxlICZv
cHRpb25hbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20t
bGluZSB0by1saW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FjaGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhpYml0
LXJlc3RvcmUtcG9pbnQpCiAgIlVwZGF0ZSByb3cvY29sdW1uIGNvbG9ycyBmb3IgVEFCTEUgaWYg
dGhlcmUgYXJlIHJvdy9jb2x1bW4gY29sb3JzLgpJZiBGUk9NLUxJTkUgaXMgbmlsLCBzdGFydCBh
dCAwLCB0aGUgZmlyc3QgbGluZS4KSWYgVE8tTElORSBpcyBuaWwsIGVuZCBhdCB0aGUgbGFzdCBs
aW5lLCB0aGUgbnVtYmVyIG9mIG9iamVjdHMuCklmIENBQ0hFIGlzIG5vbi1uaWwsIHVzZSB0aGF0
IGNvcHkuCklmIElOSElCSVQtUkVTVE9SRS1QT0lOVCBpcyBub24tbmlsLCBhc3N1bWUgdGhlIGNh
bGxlciBoYW5kbGVzIHBvaW50LiIKICAod2hlbiAob3IgKHZ0YWJsZS1jb2x1bW4tY29sb3JzIHRh
YmxlKQogICAgICAgICAgICAodnRhYmxlLXJvdy1jb2xvcnMgdGFibGUpCiAgICAgICAgICAgICh2
dGFibGUtY29sdW1uLWNvbG9yLWZ1bmN0aW9uIHRhYmxlKQogICAgICAgICAgICAodnRhYmxlLXJv
dy1jb2xvci1mdW5jdGlvbiB0YWJsZSkpCiAgICAodnRhYmxlLS1yZWRpc3BsYXktcmFuZ2UgdGFi
bGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tLWxpbmUgdG8tbGluZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhY2hlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5oaWJpdC1yZXN0b3JlLXBvaW50KSkpCgooZGVmdW4gdnRhYmxlLW1heWJlLXJlZGlzcGxheS1y
YW5nZSAodGFibGUgJm9wdGlvbmFsIGZyb20tbGluZSB0by1saW5lKQogICJVcGRhdGUgcm93L2Nv
bHVtbiBjb2xvcnMgZm9yIFRBQkxFIGlmIHRoZXJlIGFyZSByb3cvY29sdW1uIGNvbG9ycy4KSWYg
RlJPTS1MSU5FIGlzIG5pbCwgc3RhcnQgYXQgMCwgdGhlIGZpcnN0IGxpbmUuCklmIFRPLUxJTkUg
aXMgbmlsLCBlbmQgYXQgdGhlIGxhc3QgbGluZSwgdGhlIG51bWJlciBvZiBvYmplY3RzLiIKICAo
dnRhYmxlLS1tYXliZS1yZWRpc3BsYXktcmFuZ2UgdGFibGUgZnJvbS1saW5lIHRvLWxpbmUpKQoK
KGRlZnVuIHZ0YWJsZS1yZWRpc3BsYXktcmFuZ2UgKHRhYmxlICZvcHRpb25hbCBmcm9tLWxpbmUg
dG8tbGluZSkKICAiVXBkYXRlIHJvdy9jb2x1bW4gY29sb3JzIGZvciBUQUJMRS4KSWYgRlJPTS1M
SU5FIGlzIG5pbCwgc3RhcnQgYXQgMCwgdGhlIGZpcnN0IGxpbmUuCklmIFRPLUxJTkUgaXMgbmls
LCBlbmQgYXQgdGhlIGxhc3QgbGluZSwgdGhlIG51bWJlciBvZiBvYmplY3RzLiIKICAodnRhYmxl
LS1yZWRpc3BsYXktcmFuZ2UgdGFibGUgZnJvbS1saW5lIHRvLWxpbmUpKQoKKGRlZnVuIHZ0YWJs
ZS1jb2x1bW4gKHRhYmxlIGluZGV4KQogICJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIDAtYmFzZWQg
SU5ERVggY29sdW1uIGluIFRBQkxFLiIKICAodnRhYmxlLWNvbHVtbi1uYW1lIChlbHQgKHZ0YWJs
ZS1jb2x1bW5zIHRhYmxlKSBpbmRleCkpKQoKOzs7IEdlbmVyYXRpbmcgdGhlIHRhYmxlLgoKKGRl
ZnVuIHZ0YWJsZS0tc29tZS1vYmplY3RzICh0YWJsZSBvYmplY3QpCiAgKHNlcS1zb21lIChsYW1i
ZGEgKGVsdCkKICAgICAgICAgICAgICAoZnVuY2FsbCAodnRhYmxlLW9iamVjdC1lcXVhbCB0YWJs
ZSkgZWx0IG9iamVjdCkpCiAgICAgICAgICAgICh2dGFibGUtb2JqZWN0cyB0YWJsZSkpKQoKKGRl
ZnVuIHZ0YWJsZS0taGFuZGxlLWR1cGxpY2F0ZS1vYmplY3QgKHRhYmxlIG5ldy1vYmplY3QpCiAg
IlJldHVybiBuaWwgaWYgTkVXLU9CSkVDVCBpcyBhY2NlcHRhYmxlIGluIFRBQkxFLCB0IGlmIG5v
dC4KUmV0dXJuIG5pbCBpZiBkdXBsaWNhdGVzIGFyZSBhbGxvd2VkLgpSZXR1cm4gdCBpZiBkdXBs
aWNhdGUgZm91bmQgYW5kIHNob3VsZCBiZSBpZ25vcmVkLgpTaWduYWwgYW4gZXJyb3IgaWYgZHVw
bGljYXRlIGZvdW5kIGFuZCBkaXNhbGxvd2VkLiIKICAocGNhc2UtZXhoYXVzdGl2ZSAodnRhYmxl
LWR1cGxpY2F0ZS1vYmplY3RzIHRhYmxlKQogICAgKCdhbGxvdwogICAgIG5pbCkKICAgICgnaWdu
b3JlCiAgICAgKHZ0YWJsZS0tc29tZS1vYmplY3RzIHRhYmxlIG5ldy1vYmplY3QpKQogICAgKCdp
Z25vcmUtd2FybgogICAgIChpZiAodnRhYmxlLS1zb21lLW9iamVjdHMgdGFibGUgbmV3LW9iamVj
dCkKICAgICAgICAgKHByb2duCiAgICAgICAgICAgKG1lc3NhZ2UgIldhcm5pbmc6IGR1cGxpY2F0
ZSBvYmplY3QgaWdub3JlZCAodnRhYmxlIGAlcycpIgogICAgICAgICAgICAgICAgICAgICh2dGFi
bGUtbmFtZSB0YWJsZSkpCiAgICAgICAgICAgdCkKICAgICAgIG5pbCkpCiAgICAoJ2Vycm9yCiAg
ICAgKHdoZW4gKHZ0YWJsZS0tc29tZS1vYmplY3RzIHRhYmxlIG5ldy1vYmplY3QpCiAgICAgICAo
ZXJyb3IgIkR1cGxpY2F0ZSBvYmplY3RzIG5vdCBhbGxvd2VkICh2dGFibGUgYCVzJykiCiAgICAg
ICAgICAgICAgKHZ0YWJsZS1uYW1lIHRhYmxlKSkpKSkpCgooZGVmdW4gdnRhYmxlLS1nZXQtdmFs
dWUgKG9iamVjdCBpbmRleCBjb2x1bW4gdGFibGUpCiAgKGNvbmQKICAgKCh2dGFibGUtY29sdW1u
LWdldHRlciBjb2x1bW4pCiAgICAoZnVuY2FsbCAodnRhYmxlLWNvbHVtbi1nZXR0ZXIgY29sdW1u
KQogICAgICAgICAgICAgb2JqZWN0IHRhYmxlKSkKICAgKCh2dGFibGUtZ2V0dGVyIHRhYmxlKQog
ICAgKGZ1bmNhbGwgKHZ0YWJsZS1nZXR0ZXIgdGFibGUpCiAgICAgICAgICAgICBvYmplY3QgaW5k
ZXggdGFibGUpKQogICA7OyBObyBnZXR0ZXIgZnVuY3Rpb25zOyBzdGFuZGFyZCBnZXR0ZXJzLgog
ICAoKHN0cmluZ3Agb2JqZWN0KQogICAgb2JqZWN0KQogICAodAogICAgKGVsdCBvYmplY3QgaW5k
ZXgpKSkpCgooZGVmdW4gdnRhYmxlLS1pbml0aWFsaXplLWNvbHVtbnMgKHRhYmxlIGNvbHVtbnMg
b2JqZWN0cykKICAiQ29tcHV0ZSBDT0xVTU5TIHNwZWNzIGZvciBUQUJMRS4KQ29tcHV0ZSBjb2x1
bW4gcGxhY2Vob2xkZXJzIGZyb20gT0JKRUNUUyBpZiBubyBjb2x1bW5zIHNwZWNpZmllZC4KU2ln
bmFsIGFuIGVycm9yIGlmIG5vIG9iamVjdHMgYW5kIG5vIGNvbHVtbnMuCgpTZXQgdGhlIGBhbGln
bicsIGAtYWxpZ25lZCcgYW5kIGAtbnVtZXJpY2FsJyBwcm9wZXJ0aWVzIG9mIGVhY2ggY29sdW1u
LgoKYC1hbGlnbmVkJyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY29sdW1uIGhhcyBhbiBgYWxpZ24n
IHByb3BlcnR5IHNldCBieQp0aGUgdXNlci4gIElmIGl0IGRvZXMsIGBhbGlnbicgaXMgbm90IHRv
dWNoZWQsIG90aGVyd2lzZSBpdCBpcyBzZXQgdG8KYHJpZ2h0JyBmb3IgbnVtZXJpYyBjb2x1bW5z
IGFuZCB0byBgbGVmdCcgZm9yIG5vbi1udW1lcmljIGNvbHVtbnMuCgpTY2FuIHRoZSBpbml0aWFs
bHkgcHJvdmlkZWQgb2JqZWN0cyBmb3IgbnVtZXJpY2FsbmVzcyBvbiBjb2x1bW5zIHdpdGgKdGhl
aXIgYG51bWVyaWMnIHByb3BlcnR5IGFzIFxcPSdpbmZlciwgYW5kIHNldCB0aGUgY29sdW1uJ3Mg
YWxpZ25tZW50CmFuZCBudW1lcmljIGZsYWdzLCBpZiBuZWVkZWQuCgpDb2x1bW5zIHdpdGggYG51
bWVyaWMnIHNldCB0byBuaWwgYXJlIG5ldmVyIHNjYW5uZWQgYW5kIGFyZSBhc3N1bWVkIHRvCmJl
IG5vbi1udW1lcmljLCBvciBoYXZlIHRoZWlyIG93biBjb21wYXJhdG9yLiAgQ29sdW1ucyB3aXRo
IGBudW1lcmljJwpzZXQgdG8gdCBhcmUgbmV2ZXIgc2Nhbm5lZCBhbmQgYXNzdW1lZCB0byBiZSBu
dW1lcmljLiIKICA7OyBBdXRvLWdlbmVyYXRlIGNvbHVtbnMsIGlmIG5lY2Vzc2FyeS4KICAodW5s
ZXNzIGNvbHVtbnMKICAgIChpZiAobGVuZ3RoPiBvYmplY3RzIDApCiAgICAgICAgKHNldHEgY29s
dW1ucyAobWFrZS1saXN0IChsZW5ndGggKGNhciBvYmplY3RzKSkgIiIpKQogICAgICAoZXJyb3Ig
IkNhbid0IGNyZWF0ZSBwbGFjZWhvbGRlciBjb2x1bW5zOyBubyBvYmplY3RzICh2dGFibGUgYCVz
JykiCiAgICAgICAgICAgICAodnRhYmxlLW5hbWUgdGFibGUpKSkpCiAgKHNldGYgKHZ0YWJsZS1j
b2x1bW5zIHRhYmxlKQogICAgICAgIChtYXBjYXIgKGxhbWJkYSAoY29sdW1uKQogICAgICAgICAg
ICAgICAgICAobGV0ICgobmV3LWNvbAogICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmQKICAg
ICAgICAgICAgICAgICAgICAgICAgICA7OyBXZSBqdXN0IGhhdmUgdGhlIG5hbWUgKGFzIGEgc3Ry
aW5nKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN0cmluZ3AgY29sdW1uKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAobWFrZS12dGFibGUtY29sdW1uIDpuYW1lIGNvbHVtbikpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgOzsgQSBwbGlzdCBvZiBrZXl3b3Jkcy92YWx1ZXMuCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgKChsaXN0cCBjb2x1bW4pCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChhcHBseSAjJ21ha2UtdnRhYmxlLWNvbHVtbiBjb2x1bW4pKQogICAgICAgICAg
ICAgICAgICAgICAgICAgIDs7IEEgZnVsbCBgdnRhYmxlLWNvbHVtbicgb2JqZWN0LgogICAgICAg
ICAgICAgICAgICAgICAgICAgICh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbikp
KSkKICAgICAgICAgICAgICAgICAgICAobGV0ICgodHJ1bmNhdGUtZ3Vlc3MKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHZ0YWJsZS1jb2x1bW4tdHJ1bmNhdGUtZ3Vlc3MgbmV3LWNvbCkpKQog
ICAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAob3IgKGFuZCAoaW50ZWdlcnAgdHJ1bmNhdGUt
Z3Vlc3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg+IHRydW5jYXRl
LWd1ZXNzIC0xKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsIHRydW5j
YXRlLWd1ZXNzKSkKICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yCiAgICAgICAgICAgICAg
ICAgICAgICAgICAiQ29sdW1uIGAlcycgdHJ1bmNhdGUtZ3Vlc3MgbXVzdCBiZSBuaWwgb3IgPj0g
MCAodnRhYmxlIGAlcycpIgogICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1jb2x1bW4t
bmFtZSBuZXctY29sKQogICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1uYW1lIHRhYmxl
KSkpKQogICAgICAgICAgICAgICAgICAgIG5ldy1jb2wpKQogICAgICAgICAgICAgICAgY29sdW1u
cykpCiAgKGRvbGlzdCAoY29sdW1uICh2dGFibGUtY29sdW1ucyB0YWJsZSkpCiAgICA7OyBDaGVj
ayBpZiBhbnkgY29sdW1ucyBoYXZlIGFuIGV4cGxpY2l0IGBhbGlnbicgcHJvcGVydHkuCiAgICAo
aWYgKHZ0YWJsZS1jb2x1bW4tYWxpZ24gY29sdW1uKQogICAgICAgIChzZXRmICh2dGFibGUtY29s
dW1uLS1hbGlnbmVkIGNvbHVtbikgdCkKICAgICAgOzsgRGVmYXVsdCB0byAncmlnaHQgdW50aWwg
ZGF0YSBhcHBlYXIuCiAgICAgIChzZXRmICh2dGFibGUtY29sdW1uLWFsaWduIGNvbHVtbikgJ3Jp
Z2h0KSkKICAgIDs7IFNldCB0aGUgZGVmYXVsdCBudW1lcmljIG9yIG5vbi1udW1lcmljIHNvcnQg
ZmxhZ3MuCiAgICAoaWYgKGVxICh2dGFibGUtY29sdW1uLW51bWVyaWMgY29sdW1uKSB0KQogICAg
ICAgIDs7IEV4cGxpY2l0bHkgbnVtZXJpYy4KICAgICAgICAoc2V0ZiAodnRhYmxlLWNvbHVtbi0t
bnVtZXJpY2FsIGNvbHVtbikgdCkKICAgICAgOzsgRGVmYXVsdCB0byBub24tbnVtZXJpYy4gICdp
bmZlciBjb2x1bW5zIHdpbGwgYmUgY29tcHV0ZWQgbGF0ZXIuCiAgICAgIChzZXRmICh2dGFibGUt
Y29sdW1uLS1udW1lcmljYWwgY29sdW1uKSBuaWwpKSkKICAodnRhYmxlLS1yZWNvbXB1dGUtbnVt
ZXJpY2FsLWZyb20tb2JqZWN0cyB0YWJsZSkpCgooZGVmdW4gdnRhYmxlLS1yZWNvbXB1dGUtbnVt
ZXJpY2FsLWZyb20tb2JqZWN0cyAodGFibGUpCiAgIlJlY29tcHV0ZSBudW1lcmljYWxuZXNzIG9m
IGNvbHVtbnMgZm9yIFRBQkxFIGZyb20gaXRzIG9iamVjdHMuIgogIChsZXQgKChudW1lcmljYWwg
KG1ha2UtdmVjdG9yIChsZW5ndGggKHZ0YWJsZS1jb2x1bW5zIHRhYmxlKSkgdCkpCiAgICAgICAg
KGNvbHVtbnMgKHZ0YWJsZS1jb2x1bW5zIHRhYmxlKSkKICAgICAgICBwb3N0LXByb2Nlc3MpCiAg
ICAoZG9saXN0IChvYmplY3QgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSkKICAgICAgKHNlcS1kby1p
bmRleGVkCiAgICAgICAobGFtYmRhIChjb2x1bW4gaW5kZXgpCiAgICAgICAgIChwY2FzZS1leGhh
dXN0aXZlICh2dGFibGUtY29sdW1uLW51bWVyaWMgY29sdW1uKQogICAgICAgICAgIDs7IEV4cGxp
Y2l0bHkgbm9uLW51bWVyaWMuCiAgICAgICAgICAgKChwcmVkIG51bGwpCiAgICAgICAgICAgIChz
ZXRmIChlbHQgbnVtZXJpY2FsIGluZGV4KSBuaWwpKQogICAgICAgICAgIDs7IEV4cGxpY2l0bHkg
bnVtZXJpYy4KICAgICAgICAgICAoKHByZWQgKGVxIHQpKQogICAgICAgICAgICA7OyBuby1vcCwg
ZGVmYXVsdCBpcyB0LgogICAgICAgICAgICApCiAgICAgICAgICAgKCdpbmZlcgogICAgICAgICAg
ICAodW5sZXNzIChudW1iZXJwICh2dGFibGUtLWdldC12YWx1ZSBvYmplY3QgaW5kZXgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVsdCBjb2x1bW5zIGlu
ZGV4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJs
ZSkpCiAgICAgICAgICAgICAgKHNldGYgKGVsdCBudW1lcmljYWwgaW5kZXgpIG5pbCkpKSkKICAg
ICAgICAgKHNldHEgcG9zdC1wcm9jZXNzIHQpKQogICAgICAgY29sdW1ucykpCiAgICA7OyBDb21w
dXRlIGFsaWdubWVudCBmb3IgaW5mZXJyZWQgbnVtZXJpYyBjb2x1bW5zIHdpdGhvdXQgZXhwbGlj
aXQKICAgIDs7IGFsaWdubWVudCwgYW5kIHNldCBudW1lcmljYWwgc29ydCBmbGFncy4KICAgICh3
aGVuIHBvc3QtcHJvY2VzcwogICAgICAoc2VxLW1hcC1pbmRleGVkCiAgICAgICAobGFtYmRhIChj
b2x1bW4gaW5kZXgpCiAgICAgICAgIDs7IFRoaXMgaXMgdXNlZCB3aGVuIGRpc3BsYXlpbmcuCiAg
ICAgICAgICh1bmxlc3MgKHZ0YWJsZS1jb2x1bW4tLWFsaWduZWQgY29sdW1uKQogICAgICAgICAg
IChzZXRmICh2dGFibGUtY29sdW1uLWFsaWduIGNvbHVtbikKICAgICAgICAgICAgICAgICAoaWYg
KGVsdCBudW1lcmljYWwgaW5kZXgpCiAgICAgICAgICAgICAgICAgICAgICdyaWdodAogICAgICAg
ICAgICAgICAgICAgJ2xlZnQpKSkKICAgICAgICAgOzsgVGhpcyBpcyB1c2VkIGZvciBzb3J0aW5n
LgogICAgICAgICAoc2V0ZiAodnRhYmxlLWNvbHVtbi0tbnVtZXJpY2FsIGNvbHVtbikKICAgICAg
ICAgICAgICAgKGVsdCBudW1lcmljYWwgaW5kZXgpKSkKICAgICAgICh2dGFibGUtY29sdW1ucyB0
YWJsZSkpKSkpCgooZGVmdW4gdnRhYmxlLS1tYXliZS1yZWNvbXB1dGUtbnVtZXJpY2FsLWZyb20t
Y2FjaGUtbGluZSAodGFibGUgbGluZSkKICAiUmVjb21wdXRlIG51bWVyaWNhbG5lc3Mgb2YgY29s
dW1ucyBmb3IgVEFCTEUgZnJvbSBjYWNoZSBMSU5FLiIKICAobGV0ICgoY29sdW1ucyAodnRhYmxl
LWNvbHVtbnMgdGFibGUpKQogICAgICAgIChyZWNvbXB1dGUgbmlsKSkKICAgIChzZXEtZG8taW5k
ZXhlZAogICAgIChsYW1iZGEgKGVsZW0gaW5kZXgpCiAgICAgICAobGV0ICgoY29sdW1uIChlbHQg
Y29sdW1ucyBpbmRleCkpKQogICAgICAgICAod2hlbiAoYW5kIChlcSAodnRhYmxlLWNvbHVtbi1u
dW1lcmljIGNvbHVtbikgJ2luZmVyKQogICAgICAgICAgICAgICAgICAgICh2dGFibGUtY29sdW1u
LS1udW1lcmljYWwgY29sdW1uKQogICAgICAgICAgICAgICAgICAgIChub3QgKG51bWJlcnAgKGNh
ciBlbGVtKSkpKQogICAgICAgICAgIChzZXRxIHJlY29tcHV0ZSB0KSkpKQogICAgIGxpbmUpCiAg
ICAod2hlbiByZWNvbXB1dGUKICAgICAgKHZ0YWJsZS0tcmVjb21wdXRlLW51bWVyaWNhbC1mcm9t
LW9iamVjdHMgdGFibGUpKSkpCgooZGVmdW4gdnRhYmxlLS1zcGFjZXIgKHRhYmxlKQogICh2dGFi
bGUtLXRleHQtc2NhbGUtcGl4ZWxzCiAgICh2dGFibGUtLWNvbXB1dGUtd2lkdGggdGFibGUgKHZ0
YWJsZS1zZXBhcmF0b3Itd2lkdGggdGFibGUpKSkpCgooZGVmdW4gdnRhYmxlLS1kaXZpZGVyICh0
YWJsZSkKICAob3IgKHZ0YWJsZS1kaXZpZGVyIHRhYmxlKQogICAgICAod2hlbiAodnRhYmxlLWRp
dmlkZXItd2lkdGggdGFibGUpCiAgICAgICAgKHByb3BlcnRpemUgIiAiCiAgICAgICAgICAgICAg
ICAgICAgJ2Rpc3BsYXkgKGxpc3QgJ3NwYWNlIDp3aWR0aAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2
dGFibGUtLXRleHQtc2NhbGUtcGl4ZWxzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodnRhYmxlLS1jb21wdXRlLXdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGFibGUgKHZ0YWJsZS1kaXZpZGVyLXdpZHRoIHRhYmxlKSkpKSkpKSkpCgooZGVm
dW4gdnRhYmxlLS1yZWNvbXB1dGUtY2FjaGUgKHRhYmxlKQogIChsZXQqICgoZGF0YSAodnRhYmxl
LS1jb21wdXRlLWNhY2hlIHRhYmxlKSkKICAgICAgICAgKHdpZHRocyAodnRhYmxlLS1jb21wdXRl
LXdpZHRocyB0YWJsZSBkYXRhKSkKICAgICAgICAgKGNhY2hlIChsaXN0CiAgICAgICAgICAgICAg
ICAgZGF0YQogICAgICAgICAgICAgICAgIHdpZHRocwogICAgICAgICAgICAgICAgICh2dGFibGUt
LW9iamVjdHMtdGljayB0YWJsZSkKICAgICAgICAgICAgICAgICA7OyBDYWNoZSBzb3J0ZWQgZmxh
Zy4KICAgICAgICAgICAgICAgICBuaWwpKSkKICAgICh2dGFibGUtLXNvcnQgdGFibGUgY2FjaGUp
CiAgICAoc2V0ZiAoZ2V0aGFzaCAodnRhYmxlLS1jYWNoZS1rZXkgdGFibGUpCiAgICAgICAgICAg
ICAgICAgICAoc2xvdC12YWx1ZSB0YWJsZSAnLWNhY2hlKSkKICAgICAgICAgIGNhY2hlKSkpCgoo
ZGVmdW4gdnRhYmxlLS1jYWNoZS10aWNrLXN5bmMgKHRhYmxlIGNhY2hlKQogIChzZXRmIChudGgg
MiBjYWNoZSkKICAgICAgICAodnRhYmxlLS1vYmplY3RzLXRpY2sgdGFibGUpKSkKCihkZWZ1biB2
dGFibGUtLWNhY2hlLXRpY2stdmFsaWQtcCAodGFibGUgY2FjaGUpCiAgKGVxIChudGggMiBjYWNo
ZSkKICAgICAgKHZ0YWJsZS0tb2JqZWN0cy10aWNrIHRhYmxlKSkpCgooZGVmdW4gdnRhYmxlLS1j
YWNoZS13aWR0aHMgKGNhY2hlKQogIChudGggMSBjYWNoZSkpCgooZGVmdW4gdnRhYmxlLS1jYWNo
ZS1saW5lcyAoY2FjaGUpCiAgKGNhciBjYWNoZSkpCgooZGVmdW4gdnRhYmxlLS1jYWNoZS1zZXQt
c29ydGVkIChjYWNoZSBzb3J0ZWQpCiAgKHNldGYgKG50aCAzIGNhY2hlKSBzb3J0ZWQpKQoKKGRl
ZnVuIHZ0YWJsZS0tY2FjaGUtc29ydGVkLXAgKGNhY2hlKQogIChudGggMyBjYWNoZSkpCgooZGVm
dW4gdnRhYmxlLS1lbnN1cmUtY2FjaGUgKHRhYmxlKQogIChvciAodnRhYmxlLS1jYWNoZSB0YWJs
ZSkKICAgICAgKHZ0YWJsZS0tcmVjb21wdXRlLWNhY2hlIHRhYmxlKSkpCgooZGVmdW4gdnRhYmxl
LS1pbnNlcnQgKHRhYmxlKQogIChsZXQqICgoc3RhcnQgKHBvaW50KSkKICAgICAgICAgKGVsbGlw
c2lzICh2dGFibGUtZWxsaXBzaXMgdGFibGUpKQogICAgICAgICA7OyBXZSBtYWludGFpbiBhIGNh
Y2hlIHBlciBzY3JlZW4vd2luZG93IHdpZHRoLCBzbyB0aGF0IHdlIHJlbmRlcgogICAgICAgICA7
OyBjb3JyZWN0bHkgaWYgRW1hY3MgaXMgb3BlbiBvbiB0d28gZGlmZmVyZW50IHNjcmVlbnMgKG9y
IHRoZQogICAgICAgICA7OyB1c2VyIHJlc2l6ZXMgdGhlIGZyYW1lKS4KICAgICAgICAgKHdpZHRo
cyAodnRhYmxlLS13aWR0aHMgdGFibGUpKSkKICAgIDs7IERvbid0IGluc2VydCBhbnkgaGVhZGVy
IG9yIGhlYWRlciBsaW5lIGlmIHRoZSB1c2VyIGhhc24ndAogICAgOzsgc3BlY2lmaWVkIHRoZSBj
b2x1bW5zLgogICAgKHdoZW4gKHNsb3QtdmFsdWUgdGFibGUgJy1oYXMtY29sdW1uLXNwZWMpCiAg
ICAgIChpZiAodnRhYmxlLXVzZS1oZWFkZXItbGluZSB0YWJsZSkKICAgICAgICAgICh2dGFibGUt
LXNldC1oZWFkZXItbGluZSB0YWJsZSB3aWR0aHMpCiAgICAgICAgOzsgSW5zZXJ0IHRoZSBoZWFk
ZXIgbGluZSBkaXJlY3RseSBpbnRvIHRoZSBidWZmZXIsIGFuZCBwdXQgYQogICAgICAgIDs7IGtl
eW1hcCB0byBiZSBhYmxlIHRvIHNvcnQgdGhlIGNvbHVtbnMgdGhlcmUgKGJ5IGNsaWNraW5nIG9u
CiAgICAgICAgOzsgdGhlbSkuCiAgICAgICAgKHZ0YWJsZS0taW5zZXJ0LWhlYWRlci1saW5lIHRh
YmxlIHdpZHRocykKICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgJ3JlYXItbm9uc3RpY2t5IHQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlLWhlYWRlciB0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZSkpCiAgICAgICAgKHdoZW4gKHZ0
YWJsZS1oZWFkZXItaW50YW5naWJsZSB0YWJsZSkKICAgICAgICAgIChhZGQtdGV4dC1wcm9wZXJ0
aWVzIHN0YXJ0IChwb2ludCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdj
dXJzb3ItaW50YW5naWJsZSB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
ZnJvbnQtc3RpY2t5IHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWFy
LW5vbnN0aWNreSB0KSkKICAgICAgICAgIChjdXJzb3ItaW50YW5naWJsZS1tb2RlKSkKICAgICAg
ICAoc2V0cSBzdGFydCAocG9pbnQpKSkpCiAgICA7OyBUaGUgY2FjaGUgd2lsbCBiZSBzb3J0ZWQg
aWYgdGhlcmUgYXJlIHNvcnQgY3JpdGVyaWEuCiAgICAobGV0ICgoY2FjaGUgKHZ0YWJsZS0tZW5z
dXJlLWNhY2hlIHRhYmxlKSkpCiAgICAgIDs7IEluc2VydCB0aGUgZGF0YS4KICAgICAgKGxldCAo
KGxpbmUtbnVtYmVyIDApKQogICAgICAgIChkb2xpc3QgKGxpbmUgKHZ0YWJsZS0tY2FjaGUtbGlu
ZXMgY2FjaGUpKQogICAgICAgICAgKHZ0YWJsZS0taW5zZXJ0LWxpbmUgdGFibGUgbGluZSBsaW5l
LW51bWJlciB3aWR0aHMgZWxsaXBzaXMpCiAgICAgICAgICAoc2V0cSBsaW5lLW51bWJlciAoMSsg
bGluZS1udW1iZXIpKSkpCiAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgJ3JlYXItbm9uc3RpY2t5IHQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZSkpCiAgICAgIChnb3RvLWNo
YXIgc3RhcnQpKQogICAgKHdoZW4gKHZ0YWJsZS1kZWNvci1pbnRhbmdpYmxlIHRhYmxlKQogICAg
ICAoY3Vyc29yLWludGFuZ2libGUtbW9kZSkpKSkKCihkZWZ2YXItbG9jYWwgdnRhYmxlLS1wb3N0
LWNvbW1hbmQtaG9va2VkIG5pbCkKKGRlZnZhci1sb2NhbCB2dGFibGUtLWRpc3BsYXktbGluZS1u
dW1iZXJzIG5pbCkKKGRlZnZhci1sb2NhbCB2dGFibGUtLXRleHQtc2NhbGUtbW9kZS1ob29rZWQg
bmlsKQooZGVmdmFyLWxvY2FsIHZ0YWJsZS0td2luZG93LWNoYW5nZXMtaG9va2VkIG5pbCkKKGRl
ZnZhciB0ZXh0LXNjYWxlLXJlbWFwLWhlYWRlci1saW5lKSA7IHRoaXMgaXMgYnVmZmVyIGxvY2Fs
CgooZGVmdW4gdnRhYmxlLWluc2VydCAodGFibGUpCiAgIkluc2VydCBUQUJMRSBpbnRvIHRoZSBj
dXJyZW50IGJ1ZmZlci4KVGhlIGN1cnJlbnQgYnVmZmVyIHdpbGwgYmUgc2V0IGFzIFRBQkxFJ3Mg
YnVmZmVyLiAgSWYgdGhpcyBpcyBkb25lIG1vcmUKdGhhbiBvbmNlLCBvciBpZiB0aGUgdGFibGUg
aXMgYXR0ZW1wdGVkIHRvIGJlIGluc2VydGVkIG1vcmUgdGhhbiBvbmNlCmludG8gdGhlIHNhbWUg
YnVmZmVyLCBzaWduYWwgYW4gZXJyb3IuIgogIChpZi1sZXQqICgodGFibGUtYnVmZmVyICh2dGFi
bGUtYnVmZmVyIHRhYmxlKSkpCiAgICAgIChpZiAoZXEgdGFibGUtYnVmZmVyIChjdXJyZW50LWJ1
ZmZlcikpCiAgICAgICAgICAoZXJyb3IgIkEgdnRhYmxlIGNhbm5vdCBiZSBpbnNlcnRlZCBtb3Jl
IHRoYW4gb25jZSBpbnRvIGEgYnVmZmVyICh2dGFibGUgYCVzJykiCiAgICAgICAgICAgICAgICAg
KHZ0YWJsZS1uYW1lIHRhYmxlKSkKICAgICAgICAoZXJyb3IgIkEgdnRhYmxlIGNhbm5vdCBiZSBp
bnNlcnRlZCBpbnRvIG1vcmUgdGhhbiBvbmUgYnVmZmVyICh2dGFibGUgYCVzJykiCiAgICAgICAg
ICAgICAgICh2dGFibGUtbmFtZSB0YWJsZSkpKSkKICAoc2V0ZiAoc2xvdC12YWx1ZSB0YWJsZSAn
LWJ1ZmZlcikgKGN1cnJlbnQtYnVmZmVyKSkKICAodnRhYmxlLS1pbnNlcnQgdGFibGUpCiAgKHdo
ZW4gKGFuZCAodnRhYmxlLXVzZS1oZWFkZXItbGluZSB0YWJsZSkKICAgICAgICAgICAgICh2dGFi
bGUtdGV4dC1zY2FsZS1oZWFkZXItbGluZSB0YWJsZSkpCiAgICAoc2V0cSB0ZXh0LXNjYWxlLXJl
bWFwLWhlYWRlci1saW5lIHQpKQogIDs7IFNldCB1cCBidWZmZXItbG9jYWwgaG9va3MuICBUaGVz
ZSBuZWVkIHRvIGJlIGRvbmUgb25seSBvbmNlIHBlcgogIDs7IGJ1ZmZlciBhbmQgYWxsIHRhYmxl
cyBpbiB0aGUgYnVmZmVyIHdpbGwgYmUgcmVmcmVzaGVkIGFzIG5lZWRlZC4KICA7OyBFdmVuIGlm
IHJlcXVlc3RlZCBieSBtb3JlIHRoYW4gb25lIGB2dGFibGUtaW5zZXJ0JyBjYWxsLCB0aGUgZmly
c3QKICA7OyB0YWJsZSBpbnNlcnRlZCB3aW5zLgogICh1bmxlc3MgdnRhYmxlLS1wb3N0LWNvbW1h
bmQtaG9va2VkCiAgICAoYWRkLWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29rCiAgICAgICAgICAgICAg
KGxhbWJkYSAoKQogICAgICAgICAgICAgICAgKHVubGVzcyAoZXEgdnRhYmxlLS1kaXNwbGF5LWxp
bmUtbnVtYmVycyBkaXNwbGF5LWxpbmUtbnVtYmVycykKICAgICAgICAgICAgICAgICAgKHNldHEg
dnRhYmxlLS1kaXNwbGF5LWxpbmUtbnVtYmVycyBkaXNwbGF5LWxpbmUtbnVtYmVycykKICAgICAg
ICAgICAgICAgICAgKHZ0YWJsZS1yZXZlcnQgdGFibGUpKSkKICAgICAgICAgICAgICBuaWwgJ2xv
Y2FsKQogICAgKHNldHEtbG9jYWwgdnRhYmxlLS1wb3N0LWNvbW1hbmQtaG9va2VkIHRhYmxlKSkK
ICA7OyBUaGUgMC1kZWxheSBpZGxlIHRpbWVyIGF2b2lkcyBhIHNwdXJpb3VzIHJlc2l6aW5nIGlt
bWVkaWF0ZWx5CiAgOzsgYWZ0ZXIgdGhlIG5leHQgcmVkaXNwbGF5IGN5Y2xlIGVuZHMuCiAgKHJ1
bi13aXRoLWlkbGUtdGltZXIKICAgMCBuaWwKICAgKGxhbWJkYSAoKQogICAgIDs7IERlYm91bmNl
IGJvdGggd2luZG93LXNpemUtY2hhbmdlLWZ1bmN0aW9ucyBhbmQKICAgICA7OyB0ZXh0LXNjYWxl
LW1vZGUtaG9vayAod2hpY2ggY2F1c2VzIHdpbmRvdyBzaXplIGNoYW5nZXMpIHRvCiAgICAgOzsg
Y29hbGVzY2UgcmVzaXppbmcgdHJpZ2dlciBldmVudHMuCiAgICAgKHVubGVzcyB2dGFibGUtLXRl
eHQtc2NhbGUtbW9kZS1ob29rZWQKICAgICAgICh3aGVuICh2dGFibGUtdGV4dC1zY2FsZS1yZWRy
YXcgdGFibGUpCiAgICAgICAgIChhZGQtaG9vayAndGV4dC1zY2FsZS1tb2RlLWhvb2sKICAgICAg
ICAgICAgICAgICAgIChsYW1iZGEgKCkKICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tcmV2
ZXJ0LXRhYmxlcy1kZWJvdW5jZXIgdGFibGUpKQogICAgICAgICAgICAgICAgICAgbmlsICdsb2Nh
bCkpCiAgICAgICAoc2V0cS1sb2NhbCB2dGFibGUtLXRleHQtc2NhbGUtbW9kZS1ob29rZWQgdGFi
bGUpKQogICAgICh1bmxlc3MgdnRhYmxlLS13aW5kb3ctY2hhbmdlcy1ob29rZWQKICAgICAgIChh
ZGQtaG9vayAnd2luZG93LXNpemUtY2hhbmdlLWZ1bmN0aW9ucwogICAgICAgICAgICAgICAgIChs
YW1iZGEgKHdpbmRvdykKICAgICAgICAgICAgICAgICAgICh2dGFibGUtLXJldmVydC10YWJsZXMt
ZGVib3VuY2VyIHRhYmxlIHdpbmRvdykpCiAgICAgICAgICAgICAgICAgbmlsICdsb2NhbCkKICAg
ICAgIDs7IEhhbmRsZSB0YWJsZXMgY3JlYXRlZCBhbmQgbm90IGltbWVkaWF0ZWx5IGRpc3BsYXll
ZCAodW5wcmltZWQKICAgICAgIDs7IGNhY2hlKSwgYW5kIHRhYmxlcyB0aGF0IG1heSBiZSBkaXNw
bGF5ZWQgaW4gbW9yZSB0aGFuIG9uZQogICAgICAgOzsgd2luZG93IG9mIGRpZmZlcmluZyB3aWR0
aHMgKGNhY2hlIG1heSBuZWVkIHByaW1pbmcgZm9yIG9uZQogICAgICAgOzsgd2lkdGggb3IgYW5v
dGhlcikuCiAgICAgICAoYWRkLWhvb2sgJ3dpbmRvdy1zZWxlY3Rpb24tY2hhbmdlLWZ1bmN0aW9u
cwogICAgICAgICAgICAgICAgIChsYW1iZGEgKHdpbmRvdykKICAgICAgICAgICAgICAgICAgICh2
dGFibGUtLXJlZnJlc2gtd2luZG93LWNhY2hlIHRhYmxlIHdpbmRvdykpCiAgICAgICAgICAgICAg
ICAgbmlsICdsb2NhbCkKICAgICAgIChzZXRxIHZ0YWJsZS0td2luZG93LWNoYW5nZXMtaG9va2Vk
IHRhYmxlKSkpKSkKCihkZWZ1biB2dGFibGUtLXJlZnJlc2gtd2luZG93LWNhY2hlICh0YWJsZSB3
aW5kb3cpCiAgOzsgV2hlbiBhIHRhYmxlJ3MgYnVmZmVyIHdpbmRvdyBpcyBzZWxlY3RlZCwgcmVm
cmVzaCB0aGUgdGFibGUncwogIDs7IHdpbmRvdy13aWR0aCBjYWNoZSwgaWYgbmVjZXNzYXJ5LiAg
VGhpcyBhY2NvbW1vZGF0ZXM6IG1pc3NpbmcgY2FjaGUKICA7OyBlbnRyeSBmb3IgYSB0YWJsZSBi
dWZmZXIgYmVpbmcgZGlzcGxheWVkIGluIHdpbmRvdyBvZiBhIG5ldyB3aWR0aDsKICA7OyBhIGNh
Y2hlIHRoYXQgaGFzIGJlY29tZSBzdGFsZSBpZiB0aGUgdGFibGUncyBvYmplY3RzIHdlcmUgdXBk
YXRlZAogIDs7IHdoZW4gdGhlIGJ1ZmZlciBpcyBkaXNwbGF5ZWQgaW4gYSBzZWxlY3RlZCB3aW5k
b3cuCiAgKHdoZW4gKGFuZCAoZXEgd2luZG93IChzZWxlY3RlZC13aW5kb3cpKQogICAgICAgICAg
ICAgKGJ1ZmZlci1saXZlLXAgKHdpbmRvdy1idWZmZXIgd2luZG93KSkKICAgICAgICAgICAgIChl
cSAod2luZG93LWJ1ZmZlciB3aW5kb3cpIChjdXJyZW50LWJ1ZmZlcikpKQogICAgKHVubGVzcyAo
dnRhYmxlLS1jYWNoZSB0YWJsZSkKICAgICAgKHZ0YWJsZS1yZXZlcnQgdGFibGUpKSkpCgooZGVm
dmFyLWxvY2FsIHZ0YWJsZS0tcmV2ZXJ0LXRhYmxlcy10aW1lciBuaWwpCihkZWZ2YXItbG9jYWwg
dnRhYmxlLS1yZXZlcnQtdGFibGVzLWNhY2hlZC13aW5kb3ctd2lkdGggbmlsKQoKKGRlZnVuIHZ0
YWJsZS0tcmV2ZXJ0LXRhYmxlcy1kZWJvdW5jZXIgKHRhYmxlICZvcHRpb25hbCB3aW5kb3cpCiAg
KHdoZW4gKHRpbWVycCB2dGFibGUtLXJldmVydC10YWJsZXMtdGltZXIpCiAgICAoY2FuY2VsLXRp
bWVyIHZ0YWJsZS0tcmV2ZXJ0LXRhYmxlcy10aW1lcikpCiAgOzsgRW5zdXJlIHRoZSB3aW5kb3cg
aXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWJsZS4gIFJlZHJhdyBvbmx5IGlmIHRoZQogIDs7IHdp
bmRvdydzIHdpZHRoIGNoYW5nZWQsIG5vdCBpdHMgaGVpZ2h0LiAgVGhpcyBwcmV2ZW50cyBzcHVy
aW91cwogIDs7IHJlZHJhd3MgZHVlIHRvLCBmb3IgZXhhbXBsZSwgbWluaWJ1ZmZlciB3aW5kb3cg
ZGlzcGxheSB3aGljaCBhbHRlcgogIDs7IGhlaWdodCBidXQgbm90IHdpZHRoLgogIChzZXRxIHdp
bmRvdyAob3Igd2luZG93IChzZWxlY3RlZC13aW5kb3cpKSkKICAod2hlbiAoZXEgKHdpbmRvdy1i
dWZmZXIgd2luZG93KSAoY3VycmVudC1idWZmZXIpKQogICAgKHNldHEgdnRhYmxlLS1yZXZlcnQt
dGFibGVzLXRpbWVyCiAgICAgICAgICAocnVuLXdpdGgtdGltZXIgKHZ0YWJsZS1yZXNpemUtZGVi
b3VuY2UtaW50ZXJ2YWwgdGFibGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAod2luZG93KQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHdoZW4gKHRpbWVycCB2dGFibGUtLXJldmVydC10YWJsZXMtdGltZXIpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjYW5jZWwtdGltZXIgdnRhYmxlLS1yZXZlcnQtdGFi
bGVzLXRpbWVyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHZ0YWJsZS0tcmV2
ZXJ0LXRhYmxlcy10aW1lciBuaWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgo
d2luZG93LXdpZHRoICh3aW5kb3ctYm9keS13aWR0aCB3aW5kb3cgJ3JlbWFwKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh1bmxlc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChlcSB2dGFibGUtLXJldmVydC10YWJsZXMtY2FjaGVkLXdpbmRvdy13aWR0aAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy13aWR0aCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSB2dGFibGUtLXJldmVydC10YWJsZXMtY2FjaGVk
LXdpbmRvdy13aWR0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRv
dy13aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1yZXZlcnQt
dGFibGVzKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdykpKSkKCihkZWZ1biB2
dGFibGUtLXJldmVydC10YWJsZXMgKCkKICAoZG9saXN0ICh0YWJsZSAodnRhYmxlLS1idWZmZXIt
dGFibGVzKSkKICAgICh2dGFibGUtcmV2ZXJ0IHRhYmxlKSkpCgooZGVmdW4gdnRhYmxlLS1pbnNl
cnQtbGluZSAodGFibGUgbGluZSBsaW5lLW51bWJlciB3aWR0aHMKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZvcHRpb25hbCBlbGxpcHNpcykKICAobGV0KiAoKHN0YXJ0IChwb2lu
dCkpCiAgICAgICAgIChidWZmZXIgKHZ0YWJsZS1idWZmZXIgdGFibGUpKQogICAgICAgICAoYm9k
eS1mYWNlICh2dGFibGUtZmFjZSB0YWJsZSkpCiAgICAgICAgIChjb2x1bW5zICh2dGFibGUtY29s
dW1ucyB0YWJsZSkpCiAgICAgICAgIChjb2x1bW4tY29sb3ItZnVuY3Rpb24gKHZ0YWJsZS1jb2x1
bW4tY29sb3ItZnVuY3Rpb24gdGFibGUpKQogICAgICAgICAocm93LWNvbG9yLWZ1bmN0aW9uICh2
dGFibGUtcm93LWNvbG9yLWZ1bmN0aW9uIHRhYmxlKSkKICAgICAgICAgKGNvbHVtbi1jb2xvcnMK
ICAgICAgICAgIChhbmQgKHZ0YWJsZS1jb2x1bW4tY29sb3JzIHRhYmxlKQogICAgICAgICAgICAg
ICAoaWYgKHZ0YWJsZS1yb3ctY29sb3JzIHRhYmxlKQogICAgICAgICAgICAgICAgICAgKGVsdCAo
c2xvdC12YWx1ZSB0YWJsZSAnLWNhY2hlZC1jb2xvcnMpCiAgICAgICAgICAgICAgICAgICAgICAg
IChtb2QgbGluZS1udW1iZXIgKGxlbmd0aCAodnRhYmxlLXJvdy1jb2xvcnMgdGFibGUpKSkpCiAg
ICAgICAgICAgICAgICAgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZWQtY29sb3JzKSkpKQogICAg
ICAgICA7OyBzcGFjZXIgYW5kIGRpdmlkZXIsIHdoZW4gaW4gcGl4ZWxzLCBhcmUgdGV4dC1zY2Fs
ZSBhZGp1c3RlZAogICAgICAgICAoc3BhY2VyICh2dGFibGUtLXNwYWNlciB0YWJsZSkpCiAgICAg
ICAgIChkaXZpZGVyICh2dGFibGUtLWRpdmlkZXIgdGFibGUpKQogICAgICAgICA7OyBjb2x1bW4t
d2lkdGggaXMgYWRqdXN0ZWQgYnkgaW5kaWNhdG9yLXBhZC13aWR0aCBmb3IKICAgICAgICAgOzsg
cGl4ZWwtYWxpZ25tZW50IHdpdGggdGhlIGhlYWRlciBsaW5lLgogICAgICAgICAoaW5kaWNhdG9y
LXBhZC13aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc2xvdC12YWx1ZSB0YWJsZSAnLWluZGljYXRvci1wYWQpIGJ1ZmZlcikpCiAgICAgICAg
IChrZXltYXAgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZWQta2V5bWFwKSkKICAgICAgICAgKGRy
YWcta2V5bWFwIChzbG90LXZhbHVlIHRhYmxlICctY2FjaGVkLWRyYWcta2V5bWFwKSkpCiAgICAo
c2VxLWRvLWluZGV4ZWQKICAgICAobGFtYmRhIChlbGVtIGluZGV4KQogICAgICAgKGxldCogKCh2
YWx1ZSAobnRoIDAgZWxlbSkpCiAgICAgICAgICAgICAgKGNvbHVtbiAoZWx0IGNvbHVtbnMgaW5k
ZXgpKQogICAgICAgICAgICAgIDs7IENhY2hlZCB3aWR0aHMgd2lsbCBiZSB0ZXh0LXNjYWxlIGFk
anVzdGVkLCBleGNlcHQgZm9yCiAgICAgICAgICAgICAgOzsgd2lkdGhzIHNwZWNpZmllZCBpbiBw
aXhlbHMgb3IgcGVyY2VudCBvZiB3aW5kb3cgd2lkdGgsCiAgICAgICAgICAgICAgOzsgd2hpY2gg
YXJlIGFic29sdXRlIGFuZCBwaXhlbHdpc2UuCiAgICAgICAgICAgICAgKGNvbHVtbi13aWR0aCAo
LSAoZWx0IHdpZHRocyBpbmRleCkgaW5kaWNhdG9yLXBhZC13aWR0aCkpCiAgICAgICAgICAgICAg
KHByZS1jb21wdXRlZCAobnRoIDIgZWxlbSkpKQogICAgICAgICA7OyBwcmUtY29tcHV0ZWQgYWxy
ZWFkeSBoYXMgdGhlIGJvZHkgZmFjZS4KICAgICAgICAgOzsgV2UgYWRkIHRoZSBib2R5IGZhY2Ug
dG8gdGhlIGZvcm1hdHRlZCB2YWx1ZSBhcyBuZWVkZWQuCiAgICAgICAgIDs7IFNlZSBpZiB3ZSBo
YXZlIGFueSBmb3JtYXR0ZXJzIGhlcmUuCiAgICAgICAgIChjb25kCiAgICAgICAgICAoKHZ0YWJs
ZS1jb2x1bW4tZm9ybWF0dGVyIGNvbHVtbikKICAgICAgICAgICAoc2V0cSB2YWx1ZQogICAgICAg
ICAgICAgICAgIChmdW5jYWxsICh2dGFibGUtY29sdW1uLWZvcm1hdHRlciBjb2x1bW4pIHZhbHVl
KQogICAgICAgICAgICAgICAgIHByZS1jb21wdXRlZCBuaWwpCiAgICAgICAgICAgKGFkZC1mYWNl
LXRleHQtcHJvcGVydHkgMCAobGVuZ3RoIHZhbHVlKSBib2R5LWZhY2UgJ2FwcGVuZCB2YWx1ZSkp
CiAgICAgICAgICAoKHZ0YWJsZS1mb3JtYXR0ZXIgdGFibGUpCiAgICAgICAgICAgKHNldHEgdmFs
dWUgKGZ1bmNhbGwgKHZ0YWJsZS1mb3JtYXR0ZXIgdGFibGUpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgaW5kZXggdGFibGUpCiAgICAgICAgICAgICAgICAgcHJlLWNvbXB1
dGVkIG5pbCkKICAgICAgICAgICAoYWRkLWZhY2UtdGV4dC1wcm9wZXJ0eSAwIChsZW5ndGggdmFs
dWUpIGJvZHktZmFjZSAnYXBwZW5kIHZhbHVlKSkpCiAgICAgICAgIChsZXQqICgoY29sdW1uLXN0
YXJ0IChwb2ludCkpCiAgICAgICAgICAgICAgICAodmFsdWUtbGVuZ3RoIChsZW5ndGggKG9yIHBy
ZS1jb21wdXRlZCB2YWx1ZSkpKQogICAgICAgICAgICAgICAgOzsgZWxsaXBzaXMrIHRleHQgcHJv
cGVydGllcyBhcmUgdGhvc2Ugb2YgdGhlIGZpbmFsIHZhbHVlIGNoYXJhY3Rlci4KICAgICAgICAg
ICAgICAgIChlbGxpcHNpcysgKGNvcHktc2VxdWVuY2UgZWxsaXBzaXMpKQogICAgICAgICAgICAg
ICAgKF8gKHdoZW4gKD4gdmFsdWUtbGVuZ3RoIDApCiAgICAgICAgICAgICAgICAgICAgIChhZGQt
dGV4dC1wcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgICAgICAwIChsZW5ndGggZWxsaXBzaXMr
KQogICAgICAgICAgICAgICAgICAgICAgKHRleHQtcHJvcGVydGllcy1hdCAoMS0gdmFsdWUtbGVu
Z3RoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgcHJlLWNv
bXB1dGVkIHZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzKykpKQogICAgICAg
ICAgICAgICAgKGVsbGlwc2lzLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggZWxsaXBzaXMrIGJ1
ZmZlcikpCiAgICAgICAgICAgICAgICAoY2xpcHBlZC12YWx1ZS13aWR0aCAoLSBjb2x1bW4td2lk
dGggZWxsaXBzaXMtd2lkdGgpKQogICAgICAgICAgICAgICAgKGRpc3BsYXllZAogICAgICAgICAg
ICAgICAgIDs7IEFsbG93IGFueSBkaXNwbGF5ZXJzIHRvIGhhdmUgdGhlaXIgc2F5LgogICAgICAg
ICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAgICAgICgodnRhYmxlLWNvbHVtbi1kaXNwbGF5
ZXIgY29sdW1uKQogICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgKHZ0YWJsZS1jb2x1bW4tZGlz
cGxheWVyIGNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGNsaXBwZWQt
dmFsdWUtd2lkdGggdGFibGUpKQogICAgICAgICAgICAgICAgICAoKHZ0YWJsZS1kaXNwbGF5ZXIg
dGFibGUpCiAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCAodnRhYmxlLWRpc3BsYXllciB0YWJs
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGluZGV4IGNsaXBwZWQtdmFsdWUt
d2lkdGggdGFibGUpKQogICAgICAgICAgICAgICAgICAocHJlLWNvbXB1dGVkCiAgICAgICAgICAg
ICAgICAgICA7OyBJZiB3ZSBkb24ndCBoYXZlIGEgZGlzcGxheWVyLCB1c2UgdGhlIHByZS1tYWRl
CiAgICAgICAgICAgICAgICAgICA7OyAoY2FjaGVkKSBzdHJpbmcgdmFsdWUuCiAgICAgICAgICAg
ICAgICAgICAoaWYgKD4gKG50aCAxIGVsZW0pIGNvbHVtbi13aWR0aCkKICAgICAgICAgICAgICAg
ICAgICAgICAoY29uY2F0CiAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWxpbWl0LXN0
cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgcHJlLWNvbXB1dGVkCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGlwcGVkLXZhbHVlLXdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgICBi
dWZmZXIKICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtY29sdW1uLXRydW5jYXRlLWd1
ZXNzIGNvbHVtbikpCiAgICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzKykKICAgICAgICAg
ICAgICAgICAgICAgcHJlLWNvbXB1dGVkKSkKICAgICAgICAgICAgICAgICAgOzsgUmVjb21wdXRl
IHdpZHRocy4KICAgICAgICAgICAgICAgICAgKHQKICAgICAgICAgICAgICAgICAgIChpZiAoPiAo
c3RyaW5nLXBpeGVsLXdpZHRoIHZhbHVlIGJ1ZmZlcikgY29sdW1uLXdpZHRoKQogICAgICAgICAg
ICAgICAgICAgICAgIChjb25jYXQKICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGlt
aXQtc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZQogICAgICAgICAgICAgICAg
ICAgICAgICAgY2xpcHBlZC12YWx1ZS13aWR0aAogICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWNvbHVtbi10cnVuY2F0ZS1ndWVz
cyBjb2x1bW4pKQogICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpcyspCiAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlKSkpKQogICAgICAgICAgICAgICAgKGRpc3BsYXllZC13aWR0aCAoc3Ry
aW5nLXBpeGVsLXdpZHRoIGRpc3BsYXllZCBidWZmZXIpKQogICAgICAgICAgICAgICAgOzsgRG9u
J3QgaW5zZXJ0IHRoZSBzZXBhcmF0b3Igb3IgZGl2aWRlciBhZnRlciB0aGUgZmluYWwgY29sdW1u
LgogICAgICAgICAgICAgICAgKGxhc3QgKD0gaW5kZXggKC0gKGxlbmd0aCBsaW5lKSAyKSkpCiAg
ICAgICAgICAgICAgICA7OyBPbiB0aGUgbGFzdCBjb2x1bW4sIGxlYXZlIG9uZSBjaGFyIHdpZHRo
LgogICAgICAgICAgICAgICAgKHNwYWNlciAoaWYgbGFzdAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHZ0YWJsZS0tY2hhci13aWR0aCB0YWJsZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICBzcGFjZXIpKQogICAgICAgICAgICAgICAgKHNwYWNlci1zdHIgKHByb3BlcnRpemUgIiAiCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzcGxheQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgJ3NwYWNlIDp3aWR0aCAobGlzdCBz
cGFjZXIpKSkpCiAgICAgICAgICAgICAgICAoZmlsbC13aWR0aCAoLSBjb2x1bW4td2lkdGggZGlz
cGxheWVkLXdpZHRoKSkKICAgICAgICAgICAgICAgIChhbGlnbiAodnRhYmxlLWNvbHVtbi1hbGln
biBjb2x1bW4pKQogICAgICAgICAgICAgICAgZmlsbC1zdHIKICAgICAgICAgICAgICAgIGZpbGwt
cmlnaHQtc3RyKQogICAgICAgICAgIChwY2FzZS1leGhhdXN0aXZlIGFsaWduCiAgICAgICAgICAg
ICAoKG9yICdsZWZ0ICdyaWdodCkKICAgICAgICAgICAgICAoc2V0cSBmaWxsLXN0cgogICAgICAg
ICAgICAgICAgICAgIChwcm9wZXJ0aXplCiAgICAgICAgICAgICAgICAgICAgICIgIgogICAgICAg
ICAgICAgICAgICAgICAnZGlzcGxheQogICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3BhY2Ug
OndpZHRoIChsaXN0IGZpbGwtd2lkdGgpKSkpKQogICAgICAgICAgICAgKCdjZW50ZXIKICAgICAg
ICAgICAgICAobGV0ICgoaGFsZi1maWxsICgvIGZpbGwtd2lkdGggMikpKQogICAgICAgICAgICAg
ICAgKHNldHEgZmlsbC1zdHIKICAgICAgICAgICAgICAgICAgICAgIChwcm9wZXJ0aXplCiAgICAg
ICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXkKICAg
ICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3BhY2UgOndpZHRoIChsaXN0IGhhbGYtZmlsbCkp
KSkKICAgICAgICAgICAgICAgIChzZXRxIGZpbGwtcmlnaHQtc3RyCiAgICAgICAgICAgICAgICAg
ICAgICAocHJvcGVydGl6ZQogICAgICAgICAgICAgICAgICAgICAgICIgIgogICAgICAgICAgICAg
ICAgICAgICAgICdkaXNwbGF5CiAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgJ3NwYWNlIDp3
aWR0aCAobGlzdCAoLSBmaWxsLXdpZHRoIGhhbGYtZmlsbCkpKSkpKSkpCiAgICAgICAgICAgKHdo
ZW4gKHZ0YWJsZS1kZWNvci1pbnRhbmdpYmxlIHRhYmxlKQogICAgICAgICAgICAgOzsgTm90ZTog
ZWFjaCBhcmUgZGlmZmVyZW50LCBzbyB0YWtlIHNvbWUgY2FyZS4KICAgICAgICAgICAgIChhZGQt
dGV4dC1wcm9wZXJ0aWVzIDAgKGxlbmd0aCBzcGFjZXItc3RyKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGxpc3QgJ2N1cnNvci1pbnRhbmdpYmxlIHQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdmcm9udC1zdGlja3kgdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYXItbm9uc3RpY2t5IG5pbCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwYWNlci1zdHIpCiAgICAgICAgICAgICAocGNhc2UtZXho
YXVzdGl2ZSBhbGlnbgogICAgICAgICAgICAgICAoJ2xlZnQKICAgICAgICAgICAgICAgIChhZGQt
dGV4dC1wcm9wZXJ0aWVzIDAgKGxlbmd0aCBmaWxsLXN0cikKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChsaXN0ICdjdXJzb3ItaW50YW5naWJsZSB0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbnQtc3RpY2t5IG5pbAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYXItbm9uc3RpY2t5IHQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsLXN0cikpCiAgICAgICAgICAgICAg
ICgncmlnaHQKICAgICAgICAgICAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIDAgKGxlbmd0aCBm
aWxsLXN0cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdjdXJz
b3ItaW50YW5naWJsZSB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnZnJvbnQtc3RpY2t5IG5pbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3JlYXItbm9uc3RpY2t5IG5pbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpbGwtc3RyKSkKICAgICAgICAgICAgICAgKCdjZW50ZXIKICAgICAgICAgICAgICAg
IChhZGQtdGV4dC1wcm9wZXJ0aWVzIDAgKGxlbmd0aCBmaWxsLXN0cikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdjdXJzb3ItaW50YW5naWJsZSB0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbnQtc3RpY2t5IG5pbAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYXItbm9uc3RpY2t5IHQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsLXN0cikKICAgICAgICAg
ICAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIDAgKGxlbmd0aCBmaWxsLXJpZ2h0LXN0cikKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdjdXJzb3ItaW50YW5naWJs
ZSB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbnQtc3Rp
Y2t5IG5pbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYXIt
bm9uc3RpY2t5IG5pbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwt
cmlnaHQtc3RyKSkpKQogICAgICAgICAgIChwY2FzZS1leGhhdXN0aXZlIGFsaWduCiAgICAgICAg
ICAgICAoJ2xlZnQKICAgICAgICAgICAgICAoaW5zZXJ0CiAgICAgICAgICAgICAgIGRpc3BsYXll
ZAogICAgICAgICAgICAgICBmaWxsLXN0cgogICAgICAgICAgICAgICAoc2xvdC12YWx1ZSB0YWJs
ZSAnLWluZGljYXRvci1wYWQpCiAgICAgICAgICAgICAgIHNwYWNlci1zdHIpKQogICAgICAgICAg
ICAgKCdyaWdodAogICAgICAgICAgICAgIChpbnNlcnQKICAgICAgICAgICAgICAgZmlsbC1zdHIK
ICAgICAgICAgICAgICAgKHNsb3QtdmFsdWUgdGFibGUgJy1pbmRpY2F0b3ItcGFkKQogICAgICAg
ICAgICAgICBkaXNwbGF5ZWQKICAgICAgICAgICAgICAgc3BhY2VyLXN0cikpCiAgICAgICAgICAg
ICAoJ2NlbnRlcgogICAgICAgICAgICAgIChpbnNlcnQKICAgICAgICAgICAgICAgZmlsbC1zdHIK
ICAgICAgICAgICAgICAgZGlzcGxheWVkCiAgICAgICAgICAgICAgIGZpbGwtcmlnaHQtc3RyCiAg
ICAgICAgICAgICAgIChzbG90LXZhbHVlIHRhYmxlICctaW5kaWNhdG9yLXBhZCkKICAgICAgICAg
ICAgICAgc3BhY2VyLXN0cikpKQogICAgICAgICAgICh3aGVuIChvciBjb2x1bW4tY29sb3ItZnVu
Y3Rpb24gY29sdW1uLWNvbG9ycykKICAgICAgICAgICAgIChhZGQtZmFjZS10ZXh0LXByb3BlcnR5
CiAgICAgICAgICAgICAgY29sdW1uLXN0YXJ0IChwb2ludCkKICAgICAgICAgICAgICAoaWYgY29s
dW1uLWNvbG9yLWZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgIChmdW5jYWxsIGNvbHVtbi1jb2xv
ci1mdW5jdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLW51bWJlciBpbmRleCB2
YWx1ZSAoY2FyIGxpbmUpIGNvbHVtbi1jb2xvcnMpCiAgICAgICAgICAgICAgICAoZWx0IGNvbHVt
bi1jb2xvcnMgKG1vZCBpbmRleCAobGVuZ3RoIGNvbHVtbi1jb2xvcnMpKSkpKSkKICAgICAgICAg
ICA7OyBUaGUgY29sdW1uIGhlYWRlciBrZXltYXAgaW5jbHVkZXMgc29ydGluZy4KICAgICAgICAg
ICAocHV0LXRleHQtcHJvcGVydHkgY29sdW1uLXN0YXJ0IChwb2ludCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2tleW1hcCBrZXltYXApCiAgICAgICAgICAgOzsgVGhlIGRpdmlkZXIg
a2V5bWFwIGFkZHMgZHJhZyB0byByZXNpemUuCiAgICAgICAgICAgKHdoZW4gKGFuZCBkaXZpZGVy
IChub3QgbGFzdCkpCiAgICAgICAgICAgICAoaW5zZXJ0CiAgICAgICAgICAgICAgKHByb3BlcnRp
emUgZGl2aWRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICdrZXltYXAgZHJhZy1rZXltYXAp
KSkKICAgICAgICAgICAocHV0LXRleHQtcHJvcGVydHkgY29sdW1uLXN0YXJ0IChwb2ludCkgJ3Z0
YWJsZS1jb2x1bW4gaW5kZXgpKSkpCiAgICAgKGNkciBsaW5lKSkKICAgIChpbnNlcnQgKHByb3Bl
cnRpemUgIlxuIiAna2V5bWFwIGtleW1hcCkpCiAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFy
dCAocG9pbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAndnRhYmxlLW9iamVjdCAo
Y2FyIGxpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlIHRhYmxlKSkK
ICAgICh3aGVuICh2dGFibGUtb2JqZWN0LW1hcmtlZC1wIHRhYmxlIChjYXIgbGluZSkpCiAgICAg
IChhZGQtZmFjZS10ZXh0LXByb3BlcnR5IHN0YXJ0IChwb2ludCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHZ0YWJsZS1tYXJrZWQtZmFjZSB0YWJsZSkpKQogICAgKGxldCAoKHJvdy1j
b2xvcnMgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZWQtY29sb3JzKSkpCiAgICAgIChjb25kCiAg
ICAgICAocm93LWNvbG9yLWZ1bmN0aW9uCiAgICAgICAgKGFkZC1mYWNlLXRleHQtcHJvcGVydHkK
ICAgICAgICAgc3RhcnQgKHBvaW50KQogICAgICAgICAoZnVuY2FsbCByb3ctY29sb3ItZnVuY3Rp
b24KICAgICAgICAgICAgICAgICAgbGluZS1udW1iZXIgKGNhciBsaW5lKSByb3ctY29sb3JzKSkp
CiAgICAgICAoKGFuZCByb3ctY29sb3JzCiAgICAgICAgICAgICAobnVsbCBjb2x1bW4tY29sb3Jz
KSkKICAgICAgICAoYWRkLWZhY2UtdGV4dC1wcm9wZXJ0eQogICAgICAgICBzdGFydCAocG9pbnQp
CiAgICAgICAgIChlbHQgcm93LWNvbG9ycyAobW9kIGxpbmUtbnVtYmVyIChsZW5ndGggcm93LWNv
bG9ycykpKSkpKSkKICAgICh3aGVuICh2dGFibGUtcm93LXRleHQtcHJvcGVydGllcyB0YWJsZSkK
ICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgKGZvcndhcmQtbGluZSAtMSkKICAgICAgICAo
YWRkLXRleHQtcHJvcGVydGllcyAocG9zLWJvbCkgKHBvcy1lb2wpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHZ0YWJsZS1yb3ctdGV4dC1wcm9wZXJ0aWVzIHRhYmxlKSkpKSkpCgooZGVm
dmFyIHZ0YWJsZS0taW5oaWJpdC1vYmplY3RzLXRpY2sgbmlsCiAgIklmIG5vbi1uaWwsIG9iamVj
dHMgdGljayB3aWxsIG5vdCBiZSBpbmNyZWFzZWQuClRoaXMgaXMgYm91bmQgYnkgb2JqZWN0IG1h
cmtpbmcgZnVuY3Rpb25zIHdoaWNoIGRvIG5vdCBhbHRlciBvYmplY3QKc3RhdGUuIikKCihkZWZ1
biB2dGFibGUtLW9iamVjdHMtdGljayAodGFibGUpCiAgKHNsb3QtdmFsdWUgdGFibGUgJy1vYmpl
Y3RzLXRpY2spKQoKKGRlZnVuIHZ0YWJsZS0tdGljay1vYmplY3RzICh0YWJsZSkKICAodW5sZXNz
IHZ0YWJsZS0taW5oaWJpdC1vYmplY3RzLXRpY2sKICAgIChzZXRmIChzbG90LXZhbHVlIHRhYmxl
ICctb2JqZWN0cy10aWNrKQogICAgICAgICAgKDErIChzbG90LXZhbHVlIHRhYmxlICctb2JqZWN0
cy10aWNrKSkpKSkKCihkZWZ1biB2dGFibGUtLWNhY2hlLWtleSAodGFibGUpCiAgKGxldCAoKHdp
bmRvdyAoc2VsZWN0ZWQtd2luZG93KSkpCiAgICAoaWYgKGFuZCAod2luZG93LWxpdmUtcCB3aW5k
b3cpCiAgICAgICAgICAgICAoZXEgKHdpbmRvdy1idWZmZXIgd2luZG93KSAodnRhYmxlLWJ1ZmZl
ciB0YWJsZSkpKQogICAgICAgIChjb25zIChmcmFtZS10ZXJtaW5hbCkgKHdpbmRvdy1ib2R5LXdp
ZHRoIHdpbmRvdyAncmVtYXApKQogICAgICA7OyBEZWZhdWx0IGtleSBmb3IgYW4gYWN0aXZlIHRh
YmxlIG5vdCBjdXJyZW50bHkgZGlzcGxheWVkIGluIGEKICAgICAgOzsgd2luZG93LCBvciBpZiB0
aGUgYHNlbGVjdGVkLXdpbmRvdycgaXMgYSBub24tdGFibGUgd2luZG93LgogICAgICAoY29ucyB0
IHQpKSkpCgooZGVmdW4gdnRhYmxlLS1jYWNoZSAodGFibGUpCiAgKGxldCAoKGNhY2hlIChnZXRo
YXNoICh2dGFibGUtLWNhY2hlLWtleSB0YWJsZSkgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZSkp
KSkKICAgIChpZiAobGVuZ3RoPSAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkgMCkKICAgICAg
ICA7OyBGb3JjZSBhbiBlbXB0eSBjYWNoZSB0byBiZSBwb3B1bGF0ZWQ7IHRoaXMgY2FuIG9jY3Vy
IGF0CiAgICAgICAgOzsgdnRhYmxlIGluaXRpYWxpemF0aW9uLgogICAgICAgIChwcm9nbgogICAg
ICAgICAgKHZ0YWJsZS0tY2xlYXItY2FjaGUgdGFibGUpCiAgICAgICAgICBuaWwpCiAgICAgIChp
ZiAodnRhYmxlLS1jYWNoZS10aWNrLXZhbGlkLXAgdGFibGUgY2FjaGUpCiAgICAgICAgICBjYWNo
ZQogICAgICAgIDs7IEZvcmNlIGEgc3RhbGUgY2FjaGUgdG8gYmUgcmVwb3B1bGF0ZWQuCiAgICAg
ICAgKHZ0YWJsZS0tY2xlYXItY2FjaGUgdGFibGUpCiAgICAgICAgbmlsKSkpKQoKKGRlZnVuIHZ0
YWJsZS0tY2xlYXItY2FjaGUgKHRhYmxlKQogIChzZXRmIChnZXRoYXNoICh2dGFibGUtLWNhY2hl
LWtleSB0YWJsZSkgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZSkpIG5pbCkpCgooZGVmdW4gdnRh
YmxlLS1jbGVhci1jYWNoZXMgKHRhYmxlKQogIChjbHJoYXNoIChzbG90LXZhbHVlIHRhYmxlICct
Y2FjaGUpKSkKCihkZWZ1biB2dGFibGUtLXNvcnQgKHRhYmxlIGNhY2hlKQogICJTb3J0IHRoZSBU
QUJMRSBDQUNIRSAobm90IGl0cyBvYmplY3RzKSBpZiB0aGVyZSBhcmUgc29ydCBjcml0ZXJpYS4K
UmV0dXJuIG5vbi1uaWwgaWYgc29ydGVkLCBuaWwgb3RoZXJ3aXNlLiIKICAobGV0IChzb3J0ZWQp
CiAgICAocGNhc2UtZG9saXN0IChgKCxpbmRleCAuICxkaXJlY3Rpb24pICh2dGFibGUtc29ydC1i
eSB0YWJsZSkpCiAgICAgIChsZXQqICgoY29sdW1uIChlbHQgKHZ0YWJsZS1jb2x1bW5zIHRhYmxl
KSBpbmRleCkpCiAgICAgICAgICAgICAobnVtZXJpY2FsICh2dGFibGUtY29sdW1uLS1udW1lcmlj
YWwgY29sdW1uKSkKICAgICAgICAgICAgIChudW1jb21wIChpZiAoZXEgZGlyZWN0aW9uICdkZXNj
ZW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICMnPiAjJzwpKQogICAgICAgICAgICAgKHN0
cmluZ2NvbXAgKGlmIChlcSBkaXJlY3Rpb24gJ2Rlc2NlbmQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIydzdHJpbmc+ICMnc3RyaW5nPCkpCiAgICAgICAgICAgICAoY29tcGFyYXRvciAo
dnRhYmxlLWNvbHVtbi1jb21wYXJhdG9yIGNvbHVtbikpCiAgICAgICAgICAgICAoY29tcGFyYXRv
ci1mdW5jICh3aGVuIGNvbXBhcmF0b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
aWYgKGVxIGRpcmVjdGlvbiAnZGVzY2VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGxhbWJkYSAodjEgdjIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGZ1bmNhbGwgY29tcGFyYXRvciB2MiB2MSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb21wYXJhdG9yKSkpKQogICAgICAgIChzZXRjYXIgY2FjaGUKICAgICAgICAgICAg
ICAgIChzb3J0ICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKQogICAgICAgICAgICAgICAgICAg
ICAgKGxhbWJkYSAoZTEgZTIpCiAgICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChjMSAoZWx0
IGUxICgxKyBpbmRleCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYzIgKGVsdCBl
MiAoMSsgaW5kZXgpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIGNvbXBhcmF0b3It
ZnVuYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBjb21wYXJhdG9yLWZ1
bmMgKGNhciBjMSkgKGNhciBjMikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgbnVt
ZXJpY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgbnVtY29tcCAo
Y2FyIGMxKSAoY2FyIGMyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ2NvbXAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChpZiAoc3RyaW5ncCAoY2FyIGMxKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY2FyIGMxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoZm9ybWF0ICIlcyIgKGNhciBjMSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGlmIChzdHJpbmdwIChjYXIgYzIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjYXIgYzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgIiVzIiAo
Y2FyIGMyKSkpKSkpKSkpKQogICAgICAgIChzZXRxIHNvcnRlZCB0KQogICAgICAgICh2dGFibGUt
LWNhY2hlLXNldC1zb3J0ZWQgY2FjaGUgdCkpKQogICAgc29ydGVkKSkKCihkZWZ1biB2dGFibGUt
LWluZGljYXRvciAodGFibGUgaW5kZXgpCiAgKGxldCAoKG9yZGVyIChjYXIgKGxhc3QgKHZ0YWJs
ZS1zb3J0LWJ5IHRhYmxlKSkpKSkKICAgICh3aGVuIChlcSBpbmRleCAoY2FyIG9yZGVyKSkKICAg
ICAgKGxldCogKChkaXIgKGNkciBvcmRlcikpCiAgICAgICAgICAgICAobiAoaWYgKGVxIGRpciAn
YXNjZW5kKSAxIDApKSkKICAgICAgICA7OyBXZSdyZSBzb3J0aW5nIGJ5IHRoaXMgY29sdW1uIGxh
c3QsIHNvIHJldHVybiBhbiBpbmRpY2F0b3IuCiAgICAgICAgKGNhdGNoICdmb3VuZAogICAgICAg
ICAgKGRvbGlzdCAoY2FuZGlkYXRlIChudGggbiAodnRhYmxlLXNvcnQtaW5kaWNhdG9yIHRhYmxl
KSkpCiAgICAgICAgICAgICh3aGVuIChjaGFyLWRpc3BsYXlhYmxlLXAgY2FuZGlkYXRlKQogICAg
ICAgICAgICAgICh0aHJvdyAnZm91bmQgKGNvbnMgKHN0cmluZyBjYW5kaWRhdGUpIGRpcikpKSkK
ICAgICAgICAgIChjb25zIG5pbCBuaWwpKSkpKSkKCihkZWZ1biB2dGFibGUtLWluc2VydC1oZWFk
ZXItbGluZSAodGFibGUgd2lkdGhzKQogIDs7IEluc2VydCB0aGUgaGVhZGVyIGRpcmVjdGx5IGlu
dG8gdGhlIGN1cnJlbnQgYnVmZmVyLgogIChsZXQqICgoc3RhcnQgKHBvaW50KSkKICAgICAgICAg
KGJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkpCiAgICAgICAgIChoZWFkZXItZmFjZSAodnRh
YmxlLWhlYWRlci1mYWNlIHRhYmxlKSkKICAgICAgICAgOzsgc3BhY2VyIGFuZCBkaXZpZGVyLCB3
aGVuIGluIHBpeGVscywgYXJlIHRleHQtc2NhbGUgYWRqdXN0ZWQKICAgICAgICAgKHNwYWNlciAo
dnRhYmxlLS1zcGFjZXIgdGFibGUpKQogICAgICAgICAoZGl2aWRlci1vbi1oZWFkZXIgKHZ0YWJs
ZS1kaXZpZGVyLW9uLWhlYWRlciB0YWJsZSkpCiAgICAgICAgIChkaXZpZGVyICh2dGFibGUtLWRp
dmlkZXIgdGFibGUpKQogICAgICAgICAoZGl2aWRlciAoaWYgZGl2aWRlci1vbi1oZWFkZXIKICAg
ICAgICAgICAgICAgICAgICAgIGRpdmlkZXIKICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6
ZSAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzcGxheSAobGlzdCAnc3Bh
Y2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6d2lkdGgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAoc3Ry
aW5nLXBpeGVsLXdpZHRoIGRpdmlkZXIgYnVmZmVyKSkpKSkpCiAgICAgICAgIChkcmFnLWtleW1h
cCAoc2xvdC12YWx1ZSB0YWJsZSAnLWNhY2hlZC1kcmFnLWtleW1hcCkpKQogICAgKHNlcS1kby1p
bmRleGVkCiAgICAgKGxhbWJkYSAoY29sdW1uIGluZGV4KQogICAgICAgKGxldCogKChuYW1lICh2
dGFibGUtY29sdW1uLW5hbWUgY29sdW1uKSkKICAgICAgICAgICAgICAoXyAoYWRkLWZhY2UtdGV4
dC1wcm9wZXJ0eSAwIChsZW5ndGggbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWFkZXItZmFjZSAnYXBwZW5kIG5hbWUpKQogICAgICAgICAgICAgIChfIChh
ZGQtdGV4dC1wcm9wZXJ0aWVzIDAgKGxlbmd0aCBuYW1lKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChsaXN0ICdtb3VzZS1mYWNlICdoZWFkZXItbGluZS1oaWdobGlnaHQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSkpCiAgICAgICAgICAg
ICAgKHN0YXJ0IChwb2ludCkpCiAgICAgICAgICAgICAgKGNvbHVtbi13aWR0aCAoZWx0IHdpZHRo
cyBpbmRleCkpCiAgICAgICAgICAgICAgKGFsaWduIChvciAodnRhYmxlLWNvbHVtbi1oZWFkZXIt
YWxpZ24gY29sdW1uKQogICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1jb2x1bW4tYWxp
Z24gY29sdW1uKSkpCiAgICAgICAgICAgICAgKGluZGljYXRvcitkaXIgKHZ0YWJsZS0taW5kaWNh
dG9yIHRhYmxlIGluZGV4KSkKICAgICAgICAgICAgICA7OyBQYWQgdGhlIGluZGljYXRvciB0byBh
dm9pZCBhYnV0dGluZyBpdHMgbmVpZ2hib3JzLgogICAgICAgICAgICAgIChpbmRpY2F0b3IgKGlm
IChjYXIgaW5kaWNhdG9yK2RpcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVy
dGl6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0ICIgIiAoY2FyIGluZGlj
YXRvcitkaXIpICIgIikgOyB0d28gc2luZ2xlIHNwYWNlcwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnZmFjZSBoZWFkZXItZmFjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
OyB4ZGlzcC5jCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGl0LT5waXhlbF93aWR0
aCAqPSBYRkxPQVRJTlQgKGl0LT5zcGFjZV93aWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDs7IGludHJvZHVjZXMgc2luZ2xlLXBpeGVsIHByZWNpc2lvbiBlcnJvcnMgaW4gdGhl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGRpc3BsYXkgZW5naW5lLgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
OyBOT1RFOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7OyBwcmUtY29tcHV0ZWQgaW5kaWNhdG9yLXBhZCB1c2VkIGluCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDs7IGB2dGFibGUtLWluc2VydC1saW5lJy4KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGxpc3QgJ3NwYWNlLXdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0
YWJsZS1zb3J0LWluZGljYXRvci1wYWQtc3BhY2Utd2lkdGgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAiIikpCiAgICAgICAgICAgICAgKF8gKGFkZC1mYWNlLXRleHQtcHJvcGVydHkgMCAo
bGVuZ3RoIGluZGljYXRvcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoaWYgKGVxIChjZHIgaW5kaWNhdG9yK2RpcikgJ2FzY2VuZCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1zb3J0LWluZGljYXRvci1mYWNlLWFz
Y2VuZCB0YWJsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2
dGFibGUtc29ydC1pbmRpY2F0b3ItZmFjZS1kZXNjZW5kIHRhYmxlKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwgaW5kaWNhdG9yKSkKICAgICAgICAgICAgICAo
aW5kaWNhdG9yLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggaW5kaWNhdG9yIGJ1ZmZlcikpCiAg
ICAgICAgICAgICAgOzsgRG9uJ3QgaW5zZXJ0IHRoZSBzZXBhcmF0b3Igb3IgZGl2aWRlciBhZnRl
ciB0aGUgZmluYWwgY29sdW1uLgogICAgICAgICAgICAgIChsYXN0ICg9IGluZGV4ICgxLSAobGVu
Z3RoICh2dGFibGUtY29sdW1ucyB0YWJsZSkpKSkpCiAgICAgICAgICAgICAgKHNwYWNlciAoaWYg
bGFzdAogICAgICAgICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgICAgICAg
c3BhY2VyKSkKICAgICAgICAgICAgICAoc3BhY2VyLXN0ciAoaWYgbGFzdCAiIgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgIiAiCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnZGlzcGxheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGxpc3QgJ3NwYWNlIDp3aWR0aCAobGlzdCBzcGFjZXIpKSkpKSkKICAgICAgICAg
KGxldCogKChtYXgtbmFtZS13aWR0aCAoLSBjb2x1bW4td2lkdGgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRpY2F0b3Itd2lkdGgpKQogICAgICAgICAgICAgICAgKGRpc3Bs
YXllZCAodnRhYmxlLS1saW1pdC1zdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heC1uYW1lLXdpZHRoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBidWZmZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFi
bGUtY29sdW1uLXRydW5jYXRlLWd1ZXNzIGNvbHVtbikpKQogICAgICAgICAgICAgICAgKGRpc3Bs
YXllZC13aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRoIGRpc3BsYXllZCBidWZmZXIpKQogICAgICAg
ICAgICAgICAgKGZpbGwtd2lkdGgKICAgICAgICAgICAgICAgICA7OyBBZGp1c3QgZm9yIHZlcnkg
c21hbGwgY29sdW1uIHdpZHRoczsgZS5nLiwgMSBjaGFyYWN0ZXIgd2lkZS4KICAgICAgICAgICAg
ICAgICAobWF4IDAgKC0gY29sdW1uLXdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp
c3BsYXllZC13aWR0aAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3Itd2lkdGgp
KSkKICAgICAgICAgICAgICAgIGZpbGwtc3RyCiAgICAgICAgICAgICAgICBmaWxsLXJpZ2h0LXN0
cikKICAgICAgICAgICAocGNhc2UtZXhoYXVzdGl2ZSBhbGlnbgogICAgICAgICAgICAgKChvciAn
bGVmdCAncmlnaHQpCiAgICAgICAgICAgICAgKHNldHEgZmlsbC1zdHIKICAgICAgICAgICAgICAg
ICAgICAocHJvcGVydGl6ZSAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlz
cGxheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdzcGFjZSA6d2lkdGgg
KGxpc3QgZmlsbC13aWR0aCkpKSkpCiAgICAgICAgICAgICAoJ2NlbnRlcgogICAgICAgICAgICAg
IChsZXQgKChoYWxmLWZpbGwgKC8gKCsgZmlsbC13aWR0aCBpbmRpY2F0b3Itd2lkdGgpIDIpKSkK
ICAgICAgICAgICAgICAgIChzZXRxIGZpbGwtc3RyCiAgICAgICAgICAgICAgICAgICAgICAocHJv
cGVydGl6ZSAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNwbGF5CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3BhY2UgOndpZHRoIChsaXN0
IGhhbGYtZmlsbCkpKSkKICAgICAgICAgICAgICAgIChzZXRxIGZpbGwtcmlnaHQtc3RyCiAgICAg
ICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAiICIKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdkaXNwbGF5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlz
dCAnc3BhY2UgOndpZHRoIChsaXN0ICgtIGZpbGwtd2lkdGggaGFsZi1maWxsKSkpKSkpKSkKICAg
ICAgICAgICA7OyBJZiB0aGUgdGFibGUgaXMgYWxyZWFkeSB3aWRlciB0aGFuIHRoZSB3aW5kb3cs
IHRha2UgdGhlCiAgICAgICAgICAgOzsgbm9ybWFsIHBhdGggZm9yIHRoZSBmaW5hbCBjb2x1bW4u
CiAgICAgICAgICAgOzsKICAgICAgICAgICA7OyBJZiB0aGUgdGFibGUgd291bGQgYmUgd2lkZXIg
dGhhbiB0aGUgd2luZG93IGluY2x1ZGluZwogICAgICAgICAgIDs7IHRoZSBmaW5hbCBjb2x1bW4s
IHRha2UgdGhlIGFibm9ybWFsIHBhdGggdG8gbGVmdCBhbGlnbgogICAgICAgICAgIDs7IHRoZSBs
YXN0IGNvbHVtbidzIG5hbWUgYW5kIHNvcnQgaW5kaWNhdG9yIHNvIGl0IHJlbWFpbnMKICAgICAg
ICAgICA7OyB2aXNpYmxlLgogICAgICAgICAgIChsZXQgKChub3JtYWwtcGF0aCB0KSkKICAgICAg
ICAgICAgICh3aGVuIGxhc3QKICAgICAgICAgICAgICAgKGxldCogKChwaXhlbHMtdW50aWwtbGFz
dAogICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctcGl4ZWwtd2lkdGgKICAgICAgICAgICAg
ICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSAo
cG9pbnQpKQogICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIpKQogICAgICAgICAgICAgICAg
ICAgICAgKHBpeGVscy11bnRpbC1sYXN0K2xhc3QKICAgICAgICAgICAgICAgICAgICAgICAoKyBw
aXhlbHMtdW50aWwtbGFzdAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi13aWR0aCkp
CiAgICAgICAgICAgICAgICAgICAgICAod2luZG93LWJvZHktd2lkdGggKHdpbmRvdy1ib2R5LXdp
ZHRoIG5pbCAncGl4ZWx3aXNlKSkpCiAgICAgICAgICAgICAgICAgKHdoZW4gKGFuZCAoPCBwaXhl
bHMtdW50aWwtbGFzdCB3aW5kb3ctYm9keS13aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICg+PSBwaXhlbHMtdW50aWwtbGFzdCtsYXN0IHdpbmRvdy1ib2R5LXdpZHRoKSkKICAgICAg
ICAgICAgICAgICAgIChzZXRxIG5vcm1hbC1wYXRoIG5pbCkpKSkKICAgICAgICAgICAgIChpZiBu
b3JtYWwtcGF0aAogICAgICAgICAgICAgICAgIDs7IE5vcm1hbCBjYXNlLgogICAgICAgICAgICAg
ICAgIChwY2FzZS1leGhhdXN0aXZlIGFsaWduCiAgICAgICAgICAgICAgICAgICAoJ2xlZnQKICAg
ICAgICAgICAgICAgICAgICAoaW5zZXJ0CiAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZAog
ICAgICAgICAgICAgICAgICAgICBmaWxsLXN0cgogICAgICAgICAgICAgICAgICAgICBpbmRpY2F0
b3IKICAgICAgICAgICAgICAgICAgICAgc3BhY2VyLXN0cikpCiAgICAgICAgICAgICAgICAgICAo
J3JpZ2h0CiAgICAgICAgICAgICAgICAgICAgKGluc2VydAogICAgICAgICAgICAgICAgICAgICBp
bmRpY2F0b3IKICAgICAgICAgICAgICAgICAgICAgZmlsbC1zdHIKICAgICAgICAgICAgICAgICAg
ICAgZGlzcGxheWVkCiAgICAgICAgICAgICAgICAgICAgIHNwYWNlci1zdHIpKQogICAgICAgICAg
ICAgICAgICAgKCdjZW50ZXIKICAgICAgICAgICAgICAgICAgICAoaW5zZXJ0CiAgICAgICAgICAg
ICAgICAgICAgIGZpbGwtc3RyCiAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZAogICAgICAg
ICAgICAgICAgICAgICBmaWxsLXJpZ2h0LXN0cgogICAgICAgICAgICAgICAgICAgICBpbmRpY2F0
b3IKICAgICAgICAgICAgICAgICAgICAgc3BhY2VyLXN0cikpKQogICAgICAgICAgICAgICA7OyBB
Ym5vcm1hbCBjYXNlLgogICAgICAgICAgICAgICAobGV0KiAoKHByZS1pbmRpY2F0b3IgKHN0cmlu
Zy1waXhlbC13aWR0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZm
ZXItc3Vic3RyaW5nIChwb2ludC1taW4pIChwb2ludCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAgIChwcmUtZmlsbAog
ICAgICAgICAgICAgICAgICAgICAgICgtICh3aW5kb3ctYm9keS13aWR0aCBuaWwgJ3BpeGVsd2lz
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICBwcmUtaW5kaWNhdG9yCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlzcGxheWVkLXdpZHRoKSkpCiAgICAgICAgICAgICAgICAgKHNldHEgZmls
bC1zdHIKICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAiICIKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnZGlzcGxheSAobGlzdCAnc3BhY2UgOndpZHRoIChsaXN0
IHByZS1maWxsKSkpKQogICAgICAgICAgICAgICAgIChzZXRxIGZpbGwtcmlnaHQtc3RyCiAgICAg
ICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgIiAiCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2Rpc3BsYXkgKGxpc3QgJ3NwYWNlIDp3aWR0aAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICgtIGZpbGwtd2lkdGggcHJl
LWZpbGwpKSkpKQogICAgICAgICAgICAgICAgIChpbnNlcnQKICAgICAgICAgICAgICAgICAgaW5k
aWNhdG9yCiAgICAgICAgICAgICAgICAgIGRpc3BsYXllZAogICAgICAgICAgICAgICAgICBmaWxs
LXN0cgogICAgICAgICAgICAgICAgICBmaWxsLXJpZ2h0LXN0cikpKSkpCiAgICAgICAgICh3aGVu
IChhbmQgZGl2aWRlciAobm90IGxhc3QpKQogICAgICAgICAgIChpbnNlcnQgZGl2aWRlcikpCiAg
ICAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGxpc3QgJ3Z0YWJsZS1jb2x1bW4gaW5kZXgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2tleW1hcAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkcmFnLWtleW1hcCkpKSkKICAgICAodnRhYmxlLWNvbHVtbnMgdGFibGUpKQogICAg
KGluc2VydCAocHJvcGVydGl6ZSAiXG4iICdrZXltYXAgZHJhZy1rZXltYXApKQogICAgKGFkZC1m
YWNlLXRleHQtcHJvcGVydHkgc3RhcnQgKHBvaW50KSBoZWFkZXItZmFjZSB0KQogICAgKHdoZW4g
KGFuZCAobm90ICh2dGFibGUtdXNlLWhlYWRlci1saW5lIHRhYmxlKSkKICAgICAgICAgICAgICAg
KHZ0YWJsZS1oZWFkZXItdGV4dC1wcm9wZXJ0aWVzIHRhYmxlKSkKICAgICAgKGFkZC10ZXh0LXBy
b3BlcnRpZXMgc3RhcnQgKHBvaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxl
LWhlYWRlci10ZXh0LXByb3BlcnRpZXMgdGFibGUpKSkpKQoKKGRlZnVuIHZ0YWJsZS0tZHJhZy1y
ZXNpemUtY29sdW1uIChlICZvcHRpb25hbCBuZXh0KQogICJSZXNpemUgdGhlIGNvbHVtbiBieSBk
cmFnZ2luZy4KRSBpcyB0aGUgcG9pbnRlciBldmVudC4gIElmIE5FWFQgaXMgbm9uLW5pbCwgYWRq
dXN0IHRoZSBjb2x1bW4gZm9sbG93aW5nCnRoZSBldmVudCBjb29yZGluYXRlcy4gIElmIHRoZSBm
b2xsb3dpbmcgY29sdW1uIGV4Y2VlZHMgdGhlIG51bWJlciBvZgpjb2x1bW5zLCByZXNpemUgdGhl
IGNsaWNrZWQgY29sdW1uLiIKICAoaW50ZXJhY3RpdmUgImUiKQogIChsZXQqICgocG9zLXN0YXJ0
IChldmVudC1zdGFydCBlKSkKICAgICAgICAgKG9iaiAocG9zbi1vYmplY3QgcG9zLXN0YXJ0KSkK
ICAgICAgICAgKHN0YXJ0LXggKGNhciAocG9zbi14LXkgcG9zLXN0YXJ0KSkpCiAgICAgICAgIChl
bmQteCAoY2FyIChwb3NuLXgteSAoZXZlbnQtZW5kIGUpKSkpCiAgICAgICAgICh0YWJsZSAoZ2V0
LXRleHQtcHJvcGVydHkKICAgICAgICAgICAgICAgICAoaWYgb2JqIChjZHIgb2JqKSAocG9zbi1w
b2ludCBwb3Mtc3RhcnQpKQoJCSAndnRhYmxlCgkJIChjYXIgb2JqKSkpCiAgICAgICAgIChjb2x1
bW4gKGdldC10ZXh0LXByb3BlcnR5CiAgICAgICAgICAgICAgICAgIChpZiBvYmogKGNkciBvYmop
IChwb3NuLXBvaW50IHBvcy1zdGFydCkpCgkJICAndnRhYmxlLWNvbHVtbgoJCSAgKGNhciBvYmop
KSkpCiAgICAod2hlbiAoYW5kIHRhYmxlIGNvbHVtbikKICAgICAgKHNldHEgY29sdW1uCiAgICAg
ICAgICAgIChpZiAoYW5kIG5leHQKICAgICAgICAgICAgICAgICAgICAgKDwgY29sdW1uICgxLSAo
bGVuZ3RoICh2dGFibGUtY29sdW1ucyB0YWJsZSkpKSkpCiAgICAgICAgICAgICAgICAoMSsgY29s
dW1uKQogICAgICAgICAgICAgIGNvbHVtbikpCiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh3
aW5kb3ctYnVmZmVyIChwb3NuLXdpbmRvdyBwb3Mtc3RhcnQpKQogICAgICAgIChpZiAoZXEgdGFi
bGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkKICAgICAgICAgICAgKHZ0YWJsZS0tYWx0ZXItY29s
dW1uLXdpZHRoIHRhYmxlIGNvbHVtbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKC0gZW5kLXggc3RhcnQteCkpCiAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAg
ICAgICAgKHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxlKQogICAgICAgICAgICAodnRhYmxlLS1hbHRl
ci1jb2x1bW4td2lkdGggdGFibGUgY29sdW1uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoLSBlbmQteCBzdGFydC14KSkpKSkpKSkKKHB1dCAndnRhYmxlLS1kcmFnLXJl
c2l6ZS1jb2x1bW4gJ2NvbXBsZXRpb24tcHJlZGljYXRlICMnaWdub3JlKQoKKGRlZnVuIHZ0YWJs
ZS0tc2V0LWhlYWRlci1saW5lICh0YWJsZSB3aWR0aHMpCiAgKGxldCAoKHJlZmVyZW5jZS1idWZm
ZXIgKHZ0YWJsZS1idWZmZXIgdGFibGUpKSkKICAgIChzZXRxIGhlYWRlci1saW5lLWZvcm1hdAog
ICAgICAgICAgKGNvbmNhdAogICAgICAgICAgIChwcm9wZXJ0aXplICIgIiAnZGlzcGxheQogICAg
ICAgICAgICAgICAgICAgICAgIChsaXN0ICdzcGFjZSA6YWxpZ24tdG8KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAobGlzdCAobGluZS1udW1iZXItZGlzcGxheS13aWR0aCB0KSkpKQogICAg
ICAgICAgIChzdHJpbmctcmVwbGFjZQogICAgICAgICAgICAiJSIgIiUlIgogICAgICAgICAgICAo
d2l0aC10ZW1wLWJ1ZmZlcgogICAgICAgICAgICAgIDs7IENyaWJiZWQgZnJvbSBzdHJpbmctcGl4
ZWwtd2lkdGggdG8gbm9ybWFsaXplIHRoZSB0ZW1wCiAgICAgICAgICAgICAgOzsgYnVmZmVyIHRv
IHRoZSBvcmlnaW5hdGluZyBidWZmZXIgYW5kIHdpbmRvdy4KICAgICAgICAgICAgICAoZG9saXN0
ICh2ICcoZmFjZS1yZW1hcHBpbmctYWxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ci1wcm9wZXJ0eS1hbGlhcy1hbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
LXRleHQtcHJvcGVydGllcykpCiAgICAgICAgICAgICAgICAoaWYgKGxvY2FsLXZhcmlhYmxlLXAg
diByZWZlcmVuY2UtYnVmZmVyKQogICAgICAgICAgICAgICAgICAgIChzZXQgKG1ha2UtbG9jYWwt
dmFyaWFibGUgdikKICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItbG9jYWwtdmFsdWUg
diByZWZlcmVuY2UtYnVmZmVyKSkpKQogICAgICAgICAgICAgICh2dGFibGUtLWluc2VydC1oZWFk
ZXItbGluZSB0YWJsZSB3aWR0aHMpCiAgICAgICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMg
KHBvaW50LW1pbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnQpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgJ3Z0YWJsZS1oZWFkZXIgdAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2dGFibGUgdGFibGUpKQog
ICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nIChwb2ludC1taW4pICgxLSAocG9pbnQtbWF4
KSkpKSkpKSkpCgooZGVmdW4gdnRhYmxlLS10ZXh0LXNjYWxlLXBpeGVscyAocGl4ZWxzKQogICJB
ZGp1c3QgUElYRUxTIGZvciB0ZXh0LXNjYWxlZCBidWZmZXJzLiIKICAoY2VpbGluZyAoKiBwaXhl
bHMgKC8gKGZsb2F0IChkZWZhdWx0LWZvbnQtd2lkdGgpKSAoZnJhbWUtY2hhci13aWR0aCkpKSkp
CgooZGVmdW4gdnRhYmxlLS1saW1pdC1zdHJpbmcgKHN0cmluZyBwaXhlbHMgYnVmZmVyICZvcHRp
b25hbCB0cnVuY2F0ZS1ndWVzcykKICAiVHJ1bmNhdGUgU1RSSU5HIHRvIGZpdCBpbnRvIHdpZHRo
IFBJWEVMUy4KVGhpcyBmdW5jdGlvbiB0cmllcyB0byBndWVzcyBTVFJJTkcncyB0cnVuY2F0ZWQg
bGVuZ3RoLCBpbiBjaGFyYWN0ZXJzLApiYXNlZCB0aGUgYXZlcmFnZSBwaXhlbCB3aWR0aCBvZiBp
dHMgY2hhcmFjdGVycywgaW5jbHVkaW5nIGl0cyB0ZXh0CnByb3BlcnRpZXMsIHJlbGF0aXZlIHRv
IFBJWEVMUy4KClVzZSBCVUZGRVIgdG8gZGVyaXZlIHRleHQtc2NhbGUgYWRqdXN0bWVudHMuCgpJ
ZiBUUlVOQ0FURS1HVUVTUyBpcyBuaWwsIG5vIGd1ZXNzaW5nIGlzIGRvbmUuCgpJZiBUUlVOQ0FU
RS1HVUVTUyBpcyBhbiBpbnRlZ2VyLCBpdCBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwKY2hh
cmFjdGVycyBhZGRlZCB0byB0aGUgZ3Vlc3MuICBTdGFydCB3aXRoIDAgYW5kIGluY3JlYXNlIHRo
ZSB0b2xlcmFuY2UKaWYgeW91IGZpbmQgdGhhdCB0aGUgZ3Vlc3MgaXMgdG9vIHNtYWxsIGZvciB0
aGUgY29sdW1uJ3MgdmFsdWVzLiIKICAobGV0ICgoc3RyaW5nLWxlbiAobGVuZ3RoIHN0cmluZykp
CiAgICAgICAgKHN0cmluZy1waXhlbHMpKQogICAgKHdoZW4gKGFuZCAoPiBzdHJpbmctbGVuIDAp
CiAgICAgICAgICAgICAgIChpbnRlZ2VycCB0cnVuY2F0ZS1ndWVzcykpCiAgICAgIChzZXRxIHN0
cmluZy1waXhlbHMgKHN0cmluZy1waXhlbC13aWR0aCBzdHJpbmcgYnVmZmVyKSkKICAgICAgKHdo
ZW4gKD4gc3RyaW5nLXBpeGVscyBwaXhlbHMpCiAgICAgICAgOzsgVXNlIGF2ZXJhZ2UgcGl4ZWxz
L2NoYXJhY3RlciBmcm9tIFNUUklORyB0byBzZWVkIHRoZSBndWVzcy4KICAgICAgICAobGV0ICgo
Z3Vlc3MgKCsgMQogICAgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZS1ndWVzcwogICAgICAg
ICAgICAgICAgICAgICAgICAoY2VpbGluZyAoLyBwaXhlbHMgKC8gc3RyaW5nLXBpeGVscyBzdHJp
bmctbGVuKSkpKSkpCiAgICAgICAgICAod2hlbiAoPCBndWVzcyBzdHJpbmctbGVuKQogICAgICAg
ICAgICAoc2V0cSBzdHJpbmcgKHN1YnN0cmluZyBzdHJpbmcgMCBndWVzcykpKSkpKQogICAgKHdo
aWxlIChhbmQgKGxlbmd0aD4gc3RyaW5nIDApCiAgICAgICAgICAgICAgICA7OyBSZXVzZSB0aGUg
aW5pdGlhbCBzdHJpbmctcGl4ZWxzIGZvciB0aGUgZmFzdCBwYXRoLgogICAgICAgICAgICAgICAg
KGlmIHN0cmluZy1waXhlbHMgKHByb2cxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKD4gc3RyaW5nLXBpeGVscyBwaXhlbHMpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzZXRxIHN0cmluZy1waXhlbHMgbmlsKSkKICAgICAgICAgICAgICAgICAgKD4g
KHN0cmluZy1waXhlbC13aWR0aCBzdHJpbmcgYnVmZmVyKSBwaXhlbHMpKSkKICAgICAgKHNldHEg
c3RyaW5nIChzdWJzdHJpbmcgc3RyaW5nIDAgKDEtIChsZW5ndGggc3RyaW5nKSkpKSkKICAgIHN0
cmluZykpCgooZGVmdW4gdnRhYmxlLS1jaGFyLXdpZHRoICh0YWJsZSkKICAoc3RyaW5nLXBpeGVs
LXdpZHRoCiAgIChwcm9wZXJ0aXplICJ4IiAnZmFjZSAodnRhYmxlLWZhY2UgdGFibGUpKQogICAo
dnRhYmxlLWJ1ZmZlciB0YWJsZSkpKQoKKGRlZnVuIHZ0YWJsZS0tY29tcHV0ZS13aWR0aCAodGFi
bGUgc3BlYykKICAoY29uZAogICAoKG51bWJlcnAgc3BlYykKICAgICgqIHNwZWMgKHZ0YWJsZS0t
Y2hhci13aWR0aCB0YWJsZSkpKQogICAoKHN0cmluZy1tYXRjaCAiXFwoWzAtOS5dK1xcKWV4IiBz
cGVjKQogICAgKCogKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAxIHNwZWMpKSAodnRh
YmxlLS1jaGFyLXdpZHRoIHRhYmxlKSkpCiAgICgoc3RyaW5nLW1hdGNoICJcXChbMC05Ll0rXFwp
cHgiIHNwZWMpCiAgICAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDEgc3BlYykpKQog
ICAoKHN0cmluZy1tYXRjaCAiXFwoWzAtOS5dK1xcKSUiIHNwZWMpCiAgICAoLyAoKiAoc3RyaW5n
LXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDEgc3BlYykpCiAgICAgICAgICAod2luZG93LWJvZHkt
d2lkdGggbmlsICdwaXhlbHdpc2UpKQogICAgICAgMTAwKSkKICAgKHQKICAgIChlcnJvciAiSW52
YWxpZCBzcGVjOiBgJXMnICh2dGFibGUgYCVzJykiIHNwZWMKICAgICAgICAgICAodnRhYmxlLW5h
bWUgdGFibGUpKSkpKQoKKGRlZnVuIHZ0YWJsZS0tY29tcHV0ZS13aWR0aHMgKHRhYmxlIGNhY2hl
KQogICJDb21wdXRlIHRoZSBkaXNwbGF5IHdpZHRocyBmb3IgVEFCTEUuCkNBQ0hFIGlzIFRBQkxF
J3MgY2FjaGUgZGF0YSBhcyByZXR1cm5lZCBieSBgdnRhYmxlLS1jb21wdXRlLWNhY2hlJy4iCiAg
KGxldCogKChuLTBjb2xzIDApIDsgQ291bnQgdGhlIG51bWJlciBvZiB6ZXJvLXdpZHRoIGNvbHVt
bnMuCiAgICAgICAgIDs7IGNvbHVtbi13aWR0aCBpcyBhZGp1c3RlZCBieSBpbmRpY2F0b3ItcGFk
LXdpZHRoIGZvcgogICAgICAgICA7OyBwaXhlbC1hbGlnbm1lbnQgd2l0aCB0aGUgaGVhZGVyIGxp
bmUuCiAgICAgICAgIChidWZmZXIgKHZ0YWJsZS1idWZmZXIgdGFibGUpKQogICAgICAgICAoaW5k
aWNhdG9yLXBhZC13aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc2xvdC12YWx1ZSB0YWJsZSAnLWluZGljYXRvci1wYWQpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBidWZmZXIpKQogICAgICAgICAod2lkdGhzIChzZXEtbWFwLWlu
ZGV4ZWQKICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoY29sdW1uIGluZGV4KQogICAgICAgICAg
ICAgICAgICAgIChsZXQgKCh3aWR0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAob3IKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDs7IEV4cGxpY2l0IHdpZHRocy4KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChhbmQgKHZ0YWJsZS1jb2x1bW4td2lkdGggY29sdW1uKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jb21wdXRlLXdpZHRoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHZ0YWJsZS1jb2x1bW4td2lkdGggY29sdW1uKSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7OyBJZiB0aGUgdnRhYmxlIGlzIGVtcHR5IGFuZCBubyBleHBsaWNpdCB3aWR0
aCBpcyBnaXZlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHNldCBpdHMgd2lkdGgg
dG8gMCBhbmQgZGVhbCB3aXRoIGl0IGJlbG93LgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHdoZW4gKG51bGwgY2FjaGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIG4t
MGNvbHMgKDErIG4tMGNvbHMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOzsgT3RoZXJ3aXNlLCBjb21wdXRlIGJhc2VkIG9uIHRo
ZSBkaXNwbGF5ZWQgd2lkdGhzIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsg
ZGF0YS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc2VxLW1heCAoc2VxLW1hcCAobGFtYmRhIChlbGVtKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG50aCAxIChlbHQgKGNkciBlbGVt
KSBpbmRleCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhY2hlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGVxICh2dGFibGUtY29s
dW1uLWluZmVyLXdpZHRoIGNvbHVtbikgJ2RhdGErbmFtZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGxldCAoKG5hbWUgKGNvcHktc2VxdWVuY2UKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtY29sdW1uLW5hbWUgY29sdW1uKSkp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGQtZmFjZS10ZXh0LXByb3Bl
cnR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKGxlbmd0aCBuYW1lKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWhlYWRlci1mYWNlIHRh
YmxlKSB0IG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1w
aXhlbC13aWR0aCBuYW1lIGJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
KSkpKSkKICAgICAgICAgICAgICAgICAgICAgIDs7IExldCBtaW4td2lkdGgvbWF4LXdpZHRoIHNw
ZWNzIGhhdmUgdGhlaXIgc2F5LgogICAgICAgICAgICAgICAgICAgICAgKHdoZW4tbGV0KiAoKG1p
bi13aWR0aCAoYW5kICh2dGFibGUtY29sdW1uLW1pbi13aWR0aCBjb2x1bW4pCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY29tcHV0ZS13
aWR0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
YWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
dnRhYmxlLWNvbHVtbi1taW4td2lkdGggY29sdW1uKSkpKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgKHNldHEgd2lkdGggKG1heCB3aWR0aCBtaW4td2lkdGgpKSkKICAgICAgICAgICAgICAgICAg
ICAgICh3aGVuLWxldCogKChtYXgtd2lkdGggKGFuZCAodnRhYmxlLWNvbHVtbi1tYXgtd2lkdGgg
Y29sdW1uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh2dGFibGUtLWNvbXB1dGUtd2lkdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1jb2x1bW4tbWF4LXdpZHRoIGNvbHVtbikpKSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHdpZHRoIChtaW4gd2lkdGggbWF4LXdpZHRoKSkp
CiAgICAgICAgICAgICAgICAgICAgICAoKyB3aWR0aCBpbmRpY2F0b3ItcGFkLXdpZHRoKSkpCiAg
ICAgICAgICAgICAgICAgICh2dGFibGUtY29sdW1ucyB0YWJsZSkpKSkKICAgIDs7IElmIHRoZXJl
IGFyZSBhbnkgemVyby13aWR0aCBjb2x1bW5zLCBkaXZpZGUgdGhlIHJlbWFpbmluZyB3aW5kb3cK
ICAgIDs7IHdpZHRoIGV2ZW5seSBvdmVyIHRoZW0uCiAgICAod2hlbiAoPiBuLTBjb2xzIDApCiAg
ICAgIChsZXQqICgoY29tYmluZWQtd2lkdGggKGFwcGx5ICMnKyB3aWR0aHMpKQogICAgICAgICAg
ICAgKGRlZmF1bHQtd2lkdGggKC8gKC0gKHdpbmRvdy1ib2R5LXdpZHRoIG5pbCAncGl4ZWx3aXNl
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZWQtd2lkdGgpIG4tMGNv
bHMpKSkKICAgICAgICAoc2V0cSB3aWR0aHMgKG1hcGNhciAobGFtYmRhICh3aWR0aCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoemVyb3Agd2lkdGgpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC13aWR0aAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aWR0aCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzKSkp
KQogICAgKHNlcS1pbnRvIHdpZHRocyAndmVjdG9yKSkpCgooZGVmdW4gdnRhYmxlLS1jb21wdXRl
LWNhY2hlICh0YWJsZSkKICAoc2VxLW1hcAogICAobGFtYmRhIChvYmplY3QpCiAgICAgKGNvbnMg
b2JqZWN0ICh2dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUgdGFibGUgb2JqZWN0KSkpCiAgICh2
dGFibGUtb2JqZWN0cyB0YWJsZSkpKQoKKGRlZnVuIHZ0YWJsZS0tY29tcHV0ZS1jYWNoZWQtbGlu
ZSAodGFibGUgb2JqZWN0KQogIChzZXEtbWFwLWluZGV4ZWQKICAgKGxhbWJkYSAoY29sdW1uIGlu
ZGV4KQogICAgIChsZXQqICgodmFsdWUgKHZ0YWJsZS0tZ2V0LXZhbHVlIG9iamVjdCBpbmRleCBj
b2x1bW4gdGFibGUpKQogICAgICAgICAgICAoc3RyaW5nCiAgICAgICAgICAgICAoY29uZAogICAg
ICAgICAgICAgICgodnRhYmxlLWNvbHVtbi1mb3JtYXR0ZXIgY29sdW1uKQogICAgICAgICAgICAg
ICAoZnVuY2FsbCAodnRhYmxlLWNvbHVtbi1mb3JtYXR0ZXIgY29sdW1uKSB2YWx1ZSkpCiAgICAg
ICAgICAgICAgKCh2dGFibGUtZm9ybWF0dGVyIHRhYmxlKQogICAgICAgICAgICAgICAoZnVuY2Fs
bCAodnRhYmxlLWZvcm1hdHRlciB0YWJsZSkgdmFsdWUgaW5kZXggdGFibGUpKQogICAgICAgICAg
ICAgICh0CiAgICAgICAgICAgICAgIChpZiAoc3RyaW5ncCB2YWx1ZSkKICAgICAgICAgICAgICAg
ICAgIChjb3B5LXNlcXVlbmNlIHZhbHVlKQogICAgICAgICAgICAgICAgIChmb3JtYXQgIiVzIiB2
YWx1ZSkpKSkpKQogICAgICAgKGFkZC1mYWNlLXRleHQtcHJvcGVydHkgMCAobGVuZ3RoIHN0cmlu
ZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtZmFjZSB0YWJsZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgc3RyaW5nKQogICAgICAgOzsgV2Ugc3Rhc2gg
dGhlIGNvbXB1dGVkIHdpZHRoIGFuZCBzdHJpbmcgaGVyZSAtLSBpZiB0aGVyZSBhcmUKICAgICAg
IDs7IG5vIGZvcm1hdHRlcnMvZGlzcGxheWVycywgd2UnbGwgYmUgdXNpbmcgdGhlIHN0cmluZywg
YW5kCiAgICAgICA7OyB0aGVuIHdvbid0IGhhdmUgdG8gcmVjcmVhdGUgaXQuCiAgICAgICAobGlz
dCB2YWx1ZQogICAgICAgICAgICAgKHN0cmluZy1waXhlbC13aWR0aCBzdHJpbmcgKHZ0YWJsZS1i
dWZmZXIgdGFibGUpKQogICAgICAgICAgICAgc3RyaW5nKSkpCiAgICh2dGFibGUtY29sdW1ucyB0
YWJsZSkpKQoKKGRlZnVuIHZ0YWJsZS0tbWFrZS1rZXltYXAgKHRhYmxlIHVzZS1uYXZpZ2F0aW9u
LWtleW1hcCkKICAobGV0ICgobWFwIChpZiAob3IgKHZ0YWJsZS1hY3Rpb25zIHRhYmxlKQogICAg
ICAgICAgICAgICAgICAgICAodnRhYmxlLWtleW1hcCB0YWJsZSkpCiAgICAgICAgICAgICAgICAg
KGNvcHkta2V5bWFwIHZ0YWJsZS1tYXApCiAgICAgICAgICAgICAgIHZ0YWJsZS1tYXApKSkKICAg
ICh3aGVuLWxldCogKChhY3Rpb25zICh2dGFibGUtYWN0aW9ucyB0YWJsZSkpKQogICAgICAod2hp
bGUgYWN0aW9ucwogICAgICAgIChmdW5jYWxsIChsYW1iZGEgKGtleSBiaW5kaW5nKQogICAgICAg
ICAgICAgICAgICAgKGtleW1hcC1zZXQgbWFwIGtleQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGxhbWJkYSAob2JqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
aW50ZXJhY3RpdmUgKGxpc3QgKHZ0YWJsZS1jdXJyZW50LW9iamVjdCkpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBiaW5kaW5nIG9iamVjdCkpKSkKICAgICAgICAg
ICAgICAgICAoY2FyIGFjdGlvbnMpIChjYWRyIGFjdGlvbnMpKQogICAgICAgIChzZXRxIGFjdGlv
bnMgKGNkZHIgYWN0aW9ucykpKSkKCiAgICAod2hlbiB1c2UtbmF2aWdhdGlvbi1rZXltYXAKICAg
ICAgKHNldHEgbWFwIChtYWtlLWNvbXBvc2VkLWtleW1hcCAobGlzdCBtYXAgdnRhYmxlLW5hdmln
YXRpb24tbWFwKSkpKQoKICAgIChpZiAodnRhYmxlLWtleW1hcCB0YWJsZSkKICAgICAgICAocHJv
Z24KICAgICAgICAgIChzZXRmICh2dGFibGUta2V5bWFwIHRhYmxlKQogICAgICAgICAgICAgICAg
KGNvcHkta2V5bWFwICh2dGFibGUta2V5bWFwIHRhYmxlKSkpCiAgICAgICAgICA7OyBSZXNwZWN0
IGFueSBwcmV2aW91c2x5IHNldCBwYXJlbnQga2V5bWFwcy4KICAgICAgICAgIChzZXQta2V5bWFw
LXBhcmVudCAodnRhYmxlLWtleW1hcCB0YWJsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoaWYgKGtleW1hcC1wYXJlbnQgKHZ0YWJsZS1rZXltYXAgdGFibGUpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIChlbnN1cmUtbGlzdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWtleW1hcCB0YWJsZSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgbWFwKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcCkpCiAgICAgICAgICAodnRhYmxlLWtleW1hcCB0YWJsZSkp
CiAgICAgIG1hcCkpKQoKKGRlZnVuIHZ0YWJsZS1yZXZlcnQgKCZvcHRpb25hbCB0YWJsZSkKICAi
UmVnZW5lcmF0ZSBUQUJMRSBpbiBpdHMgYnVmZmVyLgpJZiBUQUJMRSBpcyBuaWwsIHVzZSB0aGUg
dGFibGUgdW5kZXIgcG9pbnQuIgogIChzZXRxIHRhYmxlIChvciB0YWJsZSAodnRhYmxlLWN1cnJl
bnQtdGFibGUpKSkKICAodW5sZXNzIHRhYmxlCiAgICAodXNlci1lcnJvciAiTm8gdGFibGUgZm91
bmQiKSkKICAod2l0aC1jdXJyZW50LWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkKICAgIDs7
IEhhbmRsZSByZXZlcnRpbmcgdGFibGVzIHRoYXQgYXJlIG5vdCB0aGUgImN1cnJlbnQgdGFibGUs
IgogICAgOzsgaW5jbHVkaW5nIHRoZSBjYXNlcyB3aGVyZSBwb2ludCBpcyBub3Qgb24gdGhlIHRh
YmxlIGFuZAogICAgOzsgYHZ0YWJsZS1yZXZlcnQnIGlzIGNhbGxlZCBieSBjb2RlLCBhbmQgdGhl
IGNhc2Ugd2hlcmUgbXVsdGlwbGUKICAgIDs7IHZ0YWJsZXMgc2hhcmUgYSBidWZmZXIgYW5kIHJl
dmVydCBpcyBjYWxsZWQgdmlhIGhvb2tzIHRvIGhhbmRsZQogICAgOzsgYHRleHQtc2NhbGUtbW9k
ZScgb3IgY2hhbmdlcyB0byBgZGlzcGxheS1saW5lLW51bWJlcnMnLgogICAgKGxldCAob3JpZy1v
YmplY3QKICAgICAgICAgIG9yaWctY29sdW1uCiAgICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkg
dCkpCiAgICAgICh3aGVuIChlcSB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKQogICAgICAg
IChzZXRxIG9yaWctb2JqZWN0ICh2dGFibGUtY3VycmVudC1vYmplY3QpCiAgICAgICAgICAgICAg
b3JpZy1jb2x1bW4gKHZ0YWJsZS1jdXJyZW50LWNvbHVtbikpKQogICAgICAoc2F2ZS1leGN1cnNp
b24KICAgICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCiAgICAgICAgKGRlbGV0ZS1yZWdp
b24gKHBvaW50KSAodnRhYmxlLWVuZC1vZi10YWJsZSkpCiAgICAgICAgKHZ0YWJsZS0taW5zZXJ0
IHRhYmxlKSkKICAgICAgKHdoZW4gb3JpZy1vYmplY3QKICAgICAgICA7OyBOZWVkIGdvdG8tdGFi
bGUsIGlmIHBvaW50IGlzIHdpdGhpbiB0aGUgdGFibGUncyByZWdpb24sIHRvCiAgICAgICAgOzsg
YWNjb21tb2RhdGUgZGVsZXRlLXJlZ2lvbiBtb3ZpbmcgcG9pbnQgYXdheS4KICAgICAgICAodnRh
YmxlLWdvdG8tdGFibGUgdGFibGUpCiAgICAgICAgKHZ0YWJsZS1nb3RvLW9iamVjdCBvcmlnLW9i
amVjdCkKICAgICAgICAodnRhYmxlLWdvdG8tY29sdW1uIG9yaWctY29sdW1uICdtYXliZS1zZXQt
d2luZG93LXBvaW50KSkpKSkKCihkZWZ1biB2dGFibGUtLXdpZHRocyAodGFibGUpCiAgKHZ0YWJs
ZS0tY2FjaGUtd2lkdGhzICh2dGFibGUtLWVuc3VyZS1jYWNoZSB0YWJsZSkpKQoKOzs7IENvbW1h
bmRzLgoKKGRlZnVuIHZ0YWJsZS1nb3RvLW5leHQtdGFibGUgKCkKICAiR28gdG8gdGhlIG5leHQg
dGFibGUgaW4gdGhlIGJ1ZmZlci4KRG8gbm90aGluZyBpZiBubyBuZXh0IHRhYmxlLiIKICAoaW50
ZXJhY3RpdmUpCiAgKGxldCAobWF0Y2gpCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgOzsgRmlu
ZCB0aGUgbmV4dCBub24tbmlsICd2dGFibGUsIHNraXBwaW5nIHRoZSBjdXJyZW50IHRhYmxlLCBp
ZgogICAgICA7OyBwcmVzZW50LgogICAgICAoc2V0cSBtYXRjaCAodGV4dC1wcm9wZXJ0eS1zZWFy
Y2gtZm9yd2FyZCAndnRhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5pbCBuaWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpKQogICAgKHdoZW4gbWF0Y2gKICAgICAg
KGdvdG8tY2hhciAocHJvcC1tYXRjaC1iZWdpbm5pbmcgbWF0Y2gpKQogICAgICAodnRhYmxlLWdv
dG8tYmVnaW5uaW5nLW9mLXRhYmxlKSkpKQoKKGRlZnVuIHZ0YWJsZS1nb3RvLXByZXZpb3VzLXRh
YmxlICgpCiAgIkdvIHRvIHRoZSBwcmV2aW91cyB0YWJsZSBpbiB0aGUgYnVmZmVyLgpEbyBub3Ro
aW5nIGlmIG5vIHByZXZpb3VzIHRhYmxlLiIKICAoaW50ZXJhY3RpdmUpCiAgKGxldCAobWF0Y2gp
CiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgOzsgRmluZCB0aGUgcHJldmlvdXMgbm9uLW5pbCAn
dnRhYmxlLCBza2lwcGluZyB0aGUgY3VycmVudCB0YWJsZSwKICAgICAgOzsgaWYgcHJlc2VudC4K
ICAgICAgKHNldHEgbWF0Y2ggKHRleHQtcHJvcGVydHktc2VhcmNoLWJhY2t3YXJkICd2dGFibGUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCBuaWwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUt
Y3VycmVudC10YWJsZSkpKSkKICAgICh3aGVuIG1hdGNoCiAgICAgIChnb3RvLWNoYXIgKHByb3At
bWF0Y2gtYmVnaW5uaW5nIG1hdGNoKSkKICAgICAgKHZ0YWJsZS1nb3RvLWJlZ2lubmluZy1vZi10
YWJsZSkpKSkKCihkZWZ1biB2dGFibGUtbmFycm93LWN1cnJlbnQtY29sdW1uICgmb3B0aW9uYWwg
bikKICAiTmFycm93IHRoZSBjdXJyZW50IGNvbHVtbiBieSBOIGNoYXJhY3RlcnMuCklmIE4gaXNu
J3QgZ2l2ZW4sIE4gZGVmYXVsdHMgdG8gMS4KSW50ZXJhY3RpdmVseSwgTiBpcyB0aGUgcHJlZml4
IGFyZ3VtZW50LiIKICAoaW50ZXJhY3RpdmUgInAiKQogIChsZXQqICgodGFibGUgKHZ0YWJsZS1j
dXJyZW50LXRhYmxlKSkKICAgICAgICAgKGNvbHVtbiAodnRhYmxlLWN1cnJlbnQtY29sdW1uKSkp
CiAgICAodW5sZXNzIGNvbHVtbgogICAgICAodXNlci1lcnJvciAiTm8gY29sdW1uIHVuZGVyIHBv
aW50IikpCiAgICAodnRhYmxlLS1hbHRlci1jb2x1bW4td2lkdGggdGFibGUgY29sdW1uCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0gKCogKHZ0YWJsZS0tY2hhci13aWR0aCB0YWJs
ZSkgKG9yIG4gMSkpKSkpKQoKKGRlZnVuIHZ0YWJsZS0tYWx0ZXItY29sdW1uLXdpZHRoICh0YWJs
ZSBjb2x1bW4taW5kZXggZGVsdGEpCiAgKGxldCogKCh3aWR0aHMgKHZ0YWJsZS0td2lkdGhzIHRh
YmxlKSkKICAgICAgICAgKGNoYXItd2lkdGggKHZ0YWJsZS0tY2hhci13aWR0aCB0YWJsZSkpCiAg
ICAgICAgIChjb2x1bW4gKGVsdCAodnRhYmxlLWNvbHVtbnMgdGFibGUpIGNvbHVtbi1pbmRleCkp
CiAgICAgICAgIChjdXJyLXdpZHRoIChhcmVmIHdpZHRocyBjb2x1bW4taW5kZXgpKQogICAgICAg
ICAoYWRqLXdpZHRoICgrIGN1cnItd2lkdGggZGVsdGEpKQogICAgICAgICA7OyBBZGogZm9yIG1p
bi13aWR0aC4KICAgICAgICAgKG1pbi13aWR0aCAob3IKICAgICAgICAgICAgICAgICAgICAgKGFu
ZCAodnRhYmxlLWNvbHVtbi1taW4td2lkdGggY29sdW1uKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICh2dGFibGUtLWNvbXB1dGUtd2lkdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFi
bGUgKHZ0YWJsZS1jb2x1bW4tbWluLXdpZHRoIGNvbHVtbikpKQogICAgICAgICAgICAgICAgICAg
ICAoKiAyIGNoYXItd2lkdGgpKSkKICAgICAgICAgKG5ldy13aWR0aCAobWF4IG1pbi13aWR0aCBh
ZGotd2lkdGgpKQogICAgICAgICA7OyBBZGogZm9yIG1heC13aWR0aC4KICAgICAgICAgKG1heC13
aWR0aCAoYW5kICh2dGFibGUtY29sdW1uLW1heC13aWR0aCBjb2x1bW4pCiAgICAgICAgICAgICAg
ICAgICAgICAgICAodnRhYmxlLS1jb21wdXRlLXdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGFibGUgKHZ0YWJsZS1jb2x1bW4tbWF4LXdpZHRoIGNvbHVtbikpKSkKICAgICAgICAgKG5l
dy13aWR0aCAoaWYgbWF4LXdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgIChtaW4gbWF4LXdp
ZHRoIG5ldy13aWR0aCkKICAgICAgICAgICAgICAgICAgICAgIG5ldy13aWR0aCkpKQogICAgKHNl
dGYgKGFyZWYgd2lkdGhzIGNvbHVtbi1pbmRleCkgbmV3LXdpZHRoKQogICAgOzsgU3RvcmUgdGhl
IHdpZHRoIHNvIGl0J2xsIGJlIHJlc3BlY3RlZCBvbiBhIHJldmVydC4KICAgIChzZXRmICh2dGFi
bGUtY29sdW1uLXdpZHRoIGNvbHVtbikKICAgICAgICAgIChmb3JtYXQgIiVkcHgiIChhcmVmIHdp
ZHRocyBjb2x1bW4taW5kZXgpKSkKICAgIChjb25kCiAgICAgKChlcSBuZXctd2lkdGggbWluLXdp
ZHRoKQogICAgICAobWVzc2FnZSAiQ29sdW1uIGlzIGF0IGl0cyBtaW5pbXVtIHdpZHRoIikpCiAg
ICAgKChlcSBuZXctd2lkdGggbWF4LXdpZHRoKQogICAgICAobWVzc2FnZSAiQ29sdW1uIGlzIGF0
IGl0cyBtYXhpbXVtIHdpZHRoIikpKQogICAgKHZ0YWJsZS1yZXZlcnQgdGFibGUpKSkKCihkZWZ1
biB2dGFibGUtd2lkZW4tY3VycmVudC1jb2x1bW4gKCZvcHRpb25hbCBuKQogICJXaWRlbiB0aGUg
Y3VycmVudCBjb2x1bW4gYnkgTiBjaGFyYWN0ZXJzLgpJZiBOIGlzbid0IGdpdmVuLCBOIGRlZmF1
bHRzIHRvIDEuCkludGVyYWN0aXZlbHksIE4gaXMgdGhlIHByZWZpeCBhcmd1bWVudC4iCiAgKGlu
dGVyYWN0aXZlICJwIikKICAodnRhYmxlLW5hcnJvdy1jdXJyZW50LWNvbHVtbiAoLSBuKSkpCgoo
ZGVmdW4gdnRhYmxlLXByZXZpb3VzLWNvbHVtbiAoKQogICJNb3ZlIHBvaW50IHRvIHRoZSBwcmV2
aW91cyBjb2x1bW4gb2YgdGhlIGN1cnJlbnQgdGFibGUuIgogIChpbnRlcmFjdGl2ZSkKICAodnRh
YmxlLWdvdG8tY29sdW1uCiAgIChtYXggMCAoMS0gKG9yICh2dGFibGUtY3VycmVudC1jb2x1bW4p
CiAgICAgICAgICAgICAgICAgIChsZW5ndGggKHZ0YWJsZS0td2lkdGhzICh2dGFibGUtY3VycmVu
dC10YWJsZSkpKSkpKSkpCgooZGVmdW4gdnRhYmxlLW5leHQtY29sdW1uICgpCiAgIk1vdmUgcG9p
bnQgdG8gdGhlIG5leHQgY29sdW1uIG9mIHRoZSBjdXJyZW50IHRhYmxlLiIKICAoaW50ZXJhY3Rp
dmUpCiAgKHdoZW4gKHZ0YWJsZS1jdXJyZW50LWNvbHVtbikKICAgICh2dGFibGUtZ290by1jb2x1
bW4KICAgICAobWluICgxLSAobGVuZ3RoICh2dGFibGUtLXdpZHRocyAodnRhYmxlLWN1cnJlbnQt
dGFibGUpKSkpCiAgICAgICAgICAoMSsgKHZ0YWJsZS1jdXJyZW50LWNvbHVtbikpKSkpKQoKKGRl
ZnVuIHZ0YWJsZS1yZXZlcnQtY29tbWFuZCAoJm9wdGlvbmFsIHRhYmxlKQogICJSZS1xdWVyeSBk
YXRhIGFuZCByZWdlbmVyYXRlIFRBQkxFIGluIGl0cyBidWZmZXIuCklmIFRBQkxFIGlzIG5pbCwg
dXNlIHRoZSBjdXJyZW50IHRhYmxlIGF0IHBvaW50LiIKICAoaW50ZXJhY3RpdmUpCiAgKHNldHEg
dGFibGUgKG9yIHRhYmxlICh2dGFibGUtY3VycmVudC10YWJsZSkpKQogICh1bmxlc3MgdGFibGUK
ICAgICh1c2VyLWVycm9yICJObyB0YWJsZSBmb3VuZCIpKQogICh2dGFibGUtLXVubWFyay1hbGwt
b2JqZWN0cyB0YWJsZSkKICAod2hlbiAodnRhYmxlLW9iamVjdHMtZnVuY3Rpb24gdGFibGUpCiAg
ICAoc2V0ZiAodnRhYmxlLW9iamVjdHMgdGFibGUpIChmdW5jYWxsICh2dGFibGUtb2JqZWN0cy1m
dW5jdGlvbiB0YWJsZSkpKSkKICAodnRhYmxlLS1jbGVhci1jYWNoZXMgdGFibGUpCiAgKHZ0YWJs
ZS1yZXZlcnQgdGFibGUpKQoKKGRlZnVuIHZ0YWJsZS1zb3J0LWJ5LWN1cnJlbnQtY29sdW1uICgp
CiAgIlNvcnQgdGhlIHRhYmxlIHVuZGVyIHBvaW50IGJ5IHRoZSBjb2x1bW4gdW5kZXIgcG9pbnQu
IgogIChpbnRlcmFjdGl2ZSkKICAodW5sZXNzICh2dGFibGUtY3VycmVudC1jb2x1bW4pCiAgICAo
dXNlci1lcnJvciAiTm8gY3VycmVudCBjb2x1bW4iKSkKICAobGV0KiAoKHRhYmxlICh2dGFibGUt
Y3VycmVudC10YWJsZSkpCiAgICAgICAgIChsYXN0IChjYXIgKGxhc3QgKHZ0YWJsZS1zb3J0LWJ5
IHRhYmxlKSkpKQogICAgICAgICAoaW5kZXggKHZ0YWJsZS1jdXJyZW50LWNvbHVtbikpKQogICAg
OzsgRmlyc3QgcHJ1bmUgYW55IHByZXZpb3VzIGFwcGVhcmFuY2Ugb2YgdGhpcyBjb2x1bW4uCiAg
ICAoc2V0ZiAodnRhYmxlLXNvcnQtYnkgdGFibGUpCiAgICAgICAgICAoZGVscSAoYXNzcSBpbmRl
eCAodnRhYmxlLXNvcnQtYnkgdGFibGUpKQogICAgICAgICAgICAgICAgKHZ0YWJsZS1zb3J0LWJ5
IHRhYmxlKSkpCiAgICA7OyBUaGVuIGluc2VydCB0aGlzIGFzIHRoZSBsYXN0IHNvcnQga2V5Lgog
ICAgKHNldGYgKHZ0YWJsZS1zb3J0LWJ5IHRhYmxlKQogICAgICAgICAgKGFwcGVuZCAodnRhYmxl
LXNvcnQtYnkgdGFibGUpCiAgICAgICAgICAgICAgICAgIChsaXN0IChjb25zIGluZGV4CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoZXEgKGNhciBsYXN0KSBpbmRleCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoZXEgKGNkciBsYXN0KSAnYXNjZW5kKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjZW5kCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdhc2NlbmQpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2FzY2VuZCkpKSkpCiAgICA7OyBDbGVhciB0aGUgY2FjaGUgdG8gZm9yY2UgcmVz
b3J0LgogICAgKHZ0YWJsZS0tY2xlYXItY2FjaGUgdGFibGUpCiAgICAodnRhYmxlLXJldmVydCB0
YWJsZSkpKQoKKGRlZnVuIHZ0YWJsZS0taGVhZGVyLWxpbmUtc29ydCAoZSkKICAiU29ydCB0aGUg
Y3VycmVudCB0YWJsZSBmcm9tIHRoZSBoZWFkZXIgbGluZSwgdHJpZ2dlcmVkIGJ5IGV2ZW50IEUu
IgogIChpbnRlcmFjdGl2ZSAiZSIpCiAgKGxldCogKChwb3MgKGV2ZW50LXN0YXJ0IGUpKQoJIChv
YmogKHBvc24tb2JqZWN0IHBvcykpCiAgICAgICAgICh0YWJsZSAoZ2V0LXRleHQtcHJvcGVydHkK
ICAgICAgICAgICAgICAgICAoaWYgb2JqIChjZHIgb2JqKSAocG9zbi1wb2ludCBwb3MpKQoJCSAn
dnRhYmxlCgkJIChjYXIgb2JqKSkpCiAgICAgICAgIChjb2x1bW4gKGdldC10ZXh0LXByb3BlcnR5
CiAgICAgICAgICAgICAgICAgIChpZiBvYmogKGNkciBvYmopIChwb3NuLXBvaW50IHBvcykpCgkJ
ICAndnRhYmxlLWNvbHVtbgoJCSAgKGNhciBvYmopKSkpCiAgICAod2l0aC1jdXJyZW50LWJ1ZmZl
ciAod2luZG93LWJ1ZmZlciAocG9zbi13aW5kb3cgcG9zKSkKICAgICAgKGlmIChlcSB0YWJsZSAo
dnRhYmxlLWN1cnJlbnQtdGFibGUpKQogICAgICAgICAgKHByb2duCiAgICAgICAgICAgICh2dGFi
bGUtZ290by1jb2x1bW4gY29sdW1uKQogICAgICAgICAgICAodnRhYmxlLXNvcnQtYnktY3VycmVu
dC1jb2x1bW4pCiAgICAgICAgICAgIDs7IEtlZXAgcG9pbnQgd2l0aGluIHRhYmxlIGJvdW5kcy4K
ICAgICAgICAgICAgKHZ0YWJsZS1nb3RvLWJlZ2lubmluZy1vZi10YWJsZSkpCiAgICAgICAgKHNh
dmUtZXhjdXJzaW9uCiAgICAgICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCiAgICAgICAg
ICAodnRhYmxlLWdvdG8tY29sdW1uIGNvbHVtbikKICAgICAgICAgICh2dGFibGUtc29ydC1ieS1j
dXJyZW50LWNvbHVtbikpKSkpKQoocHV0ICd2dGFibGUtLWhlYWRlci1saW5lLXNvcnQgJ2NvbXBs
ZXRpb24tcHJlZGljYXRlICMnaWdub3JlKQoKKGRlZnVuIHZ0YWJsZS11bnNvcnQgKCZvcHRpb25h
bCB0YWJsZSkKICAiVG9nZ2xlIFRBQkxFIHNvcnQgYmV0d2VlbiB1bnNvcnRlZCBhbmQgaXRzIG9y
aWdpbmFsIGA6c29ydC1ieScuClRoZSBkZWZhdWx0IG9yZGVyIGlzIGRldGVybWluZWQgYnkgdGhl
IHRhYmxlJ3Mgb2JqZWN0cyBvciBpdHMKYDpvYmplY3RzLWZ1bmN0aW9uJy4iCiAgKGludGVyYWN0
aXZlKQogIChzZXRxIHRhYmxlIChvciB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKSkKICAo
dW5sZXNzIHRhYmxlCiAgICAodXNlci1lcnJvciAiTm8gdGFibGUgZm91bmQiKSkKICAoY29uZAog
ICAoKG51bGwgKHZ0YWJsZS1zb3J0LWJ5IHRhYmxlKSkKICAgIChpZiAoc2xvdC12YWx1ZSB0YWJs
ZSAnLW9yaWctc29ydC1ieSkKICAgICAgICAocHJvZ24KICAgICAgICAgIChtZXNzYWdlICJPcmln
aW5hbCBzb3J0IG9yZGVyIikKICAgICAgICAgIChzZXRmICh2dGFibGUtc29ydC1ieSB0YWJsZSkg
KHNsb3QtdmFsdWUgdGFibGUgJy1vcmlnLXNvcnQtYnkpKSkKICAgICAgKG1lc3NhZ2UgIlNvcnQg
ZGlzYWJsZWQiKSkpCiAgICh0CiAgICAobWVzc2FnZSAiU29ydCBkaXNhYmxlZCIpCiAgICAoc2V0
ZiAodnRhYmxlLXNvcnQtYnkgdGFibGUpIG5pbCkpKQogIDs7IENsZWFyIHRoZSBjYWNoZSB0byBm
b3JjZSByZXNvcnQgb3IgcmVzdG9yZSBvYmplY3Qgb3JkZXIuCiAgKHZ0YWJsZS0tY2xlYXItY2Fj
aGUgdGFibGUpCiAgKHZ0YWJsZS1yZXZlcnQgdGFibGUpKQoKKGRlZnVuIHZ0YWJsZS1uZXh0LWxp
bmUgKCZvcHRpb25hbCBuKQogICJMaWtlIGBmb3J3YXJkLWxpbmUnLCBrZWVwaW5nIHBvaW50IHdp
dGhpbiB0YWJsZSBib2R5IGJvdW5kcy4KTiBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiBgZm9y
d2FyZC1saW5lJywgd2hpY2ggc2VlLiIKICAoaW50ZXJhY3RpdmUgInAiKQogICh3aXRoLW5vLXdh
cm5pbmdzIDsgSW5oaWJpdCBuZXh0LWxpbmUgd2FybmluZy4KICAgICh3aGVuIChzYXZlLWV4Y3Vy
c2lvbgogICAgICAgICAgICAobmV4dC1saW5lIChvciBuIDEpKQogICAgICAgICAgICAodnRhYmxl
LWN1cnJlbnQtb2JqZWN0KSkKICAgICAgKG5leHQtbGluZSAob3IgbiAxKSkpKSkKCihkZWZ1biB2
dGFibGUtcHJldmlvdXMtbGluZSAoJm9wdGlvbmFsIG4pCiAgIkxpa2UgYGZvcndhcmQtbGluZScs
IGtlZXBpbmcgcG9pbnQgd2l0aGluIHRhYmxlIGJvZHkgYm91bmRzLgpOIGhhcyB0aGUgc2FtZSBt
ZWFuaW5nIGFzIGEgbmVnYXRpdmUgYXJndW1lbnQgaW4gYGZvcndhcmQtbGluZScsIHdoaWNoCnNl
ZS4iCiAgKGludGVyYWN0aXZlICJwIikKICAodnRhYmxlLW5leHQtbGluZSAoKiAtMSAob3IgbiAx
KSkpKQoKKGRlZnVuIHZ0YWJsZS1jbG9zZSAoKQogICJDbG9zZSB0aGUgY3VycmVudCB0YWJsZS4K
VGhlIGNsb3NlIGFjdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSB0YWJsZSdzIGA6Y2xvc2UtYWN0
aW9uJy4iCiAgKGludGVyYWN0aXZlKQogICh3aGVuLWxldCogKCh0YWJsZSAodnRhYmxlLWN1cnJl
bnQtdGFibGUpKSkKICAgIChwY2FzZSAodnRhYmxlLWNsb3NlLWFjdGlvbiB0YWJsZSkKICAgICAg
KChwcmVkIChsYW1iZGEgKHgpICh3aGVuIChmdW5jdGlvbnAgeCkgKGZ1bmNhbGwgeCkgdCkpKSB0
KQogICAgICAoJ3F1aXQtd2luZG93IChxdWl0LXdpbmRvdykpCiAgICAgICgncXVpdC13aW5kb3ct
a2lsbCAocXVpdC13aW5kb3cgJ2tpbGwpKQogICAgICAoXyAoYnVyeS1idWZmZXIpKSkpKQoKOzsg
T2JqZWN0IG1hcmtpbmcgZnVuY3Rpb25zLgoKKGRlZnVuIHZ0YWJsZS1tYXJrZWQtb2JqZWN0cyAo
dGFibGUpCiAgIlJldHVybiBhIGxpc3Qgb2YgbWFya2VkIG9iamVjdHMgaW4gVEFCTEUuCk5vdGUs
IHRoZSBvcmRlciBvZiB0aGlzIGxpc3QgaXMgdW5kZWZpbmVkLiIKICAoc2xvdC12YWx1ZSB0YWJs
ZSAnLW1hcmtlZC1vYmplY3RzKSkKCihkZWZ1biB2dGFibGUtb2JqZWN0LW1hcmtlZC1wICh0YWJs
ZSBvYmplY3QpCiAgIlJldHVybiBub24tbmlsIGlmIE9CSkVDVCBpcyBtYXJrZWQgaW4gVEFCTEUu
IgogIChzZXEtY29udGFpbnMtcCAoc2xvdC12YWx1ZSB0YWJsZSAnLW1hcmtlZC1vYmplY3RzKQog
ICAgICAgICAgICAgICAgICBvYmplY3QKICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1vYmplY3Qt
ZXF1YWwgdGFibGUpKSkKCihkZWZ1biB2dGFibGUtLW1hcmstb2JqZWN0ICh0YWJsZSBvYmplY3Qp
CiAgKHVubGVzcyAodnRhYmxlLW9iamVjdC1tYXJrZWQtcCB0YWJsZSBvYmplY3QpCiAgICAocHVz
aCBvYmplY3QgKHNsb3QtdmFsdWUgdGFibGUgJy1tYXJrZWQtb2JqZWN0cykpCiAgICAobGV0ICgo
dnRhYmxlLS1pbmhpYml0LW9iamVjdHMtdGljayB0KSkKICAgICAgKHZ0YWJsZS11cGRhdGUtb2Jq
ZWN0IHRhYmxlIG9iamVjdCkpKSkKCihkZWZ1biB2dGFibGUtbWFyay1vYmplY3QgKG9iamVjdCAm
b3B0aW9uYWwgaW5oaWJpdC1uZXh0LWxpbmUpCiAgIk1hcmsgT0JKRUNUIGluIHRoZSBjdXJyZW50
IHRhYmxlLgpJZiBJTkhJQklULU5FWFQtTElORSBpcyBub24tbmlsLCBkbyBub3QgbW92ZSBwb2lu
dCB0byB0aGUgbmV4dCBsaW5lLiIKICAodnRhYmxlLS1tYXJrLW9iamVjdCAodnRhYmxlLWN1cnJl
bnQtdGFibGUpIG9iamVjdCkKICAodW5sZXNzIGluaGliaXQtbmV4dC1saW5lCiAgICAodnRhYmxl
LW5leHQtbGluZSAxKSkpCgooZGVmdW4gdnRhYmxlLS11bm1hcmstb2JqZWN0ICh0YWJsZSBvYmpl
Y3QgJm9wdGlvbmFsIGluaGliaXQtdXBkYXRlKQogIChsZXQgKChyZW1vdmVkLXNlcSAoc2VxLXJl
bW92ZSAobGFtYmRhIChlbHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1
bmNhbGwgKHZ0YWJsZS1vYmplY3QtZXF1YWwgdGFibGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWx0IG9iamVjdCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzbG90LXZhbHVlIHRhYmxlICctbWFya2VkLW9iamVjdHMpKSkpCiAgICAodW5s
ZXNzIChsZW5ndGg9IHJlbW92ZWQtc2VxCiAgICAgICAgICAgICAgICAgICAgIChsZW5ndGggKHNs
b3QtdmFsdWUgdGFibGUgJy1tYXJrZWQtb2JqZWN0cykpKQogICAgICAoc2V0ZiAoc2xvdC12YWx1
ZSB0YWJsZSAnLW1hcmtlZC1vYmplY3RzKSByZW1vdmVkLXNlcSkKICAgICAgKHVubGVzcyBpbmhp
Yml0LXVwZGF0ZQogICAgICAgIChsZXQgKCh2dGFibGUtLWluaGliaXQtb2JqZWN0cy10aWNrIHQp
KQogICAgICAgICAgKHZ0YWJsZS11cGRhdGUtb2JqZWN0IHRhYmxlIG9iamVjdCkpKSkpKQoKKGRl
ZnVuIHZ0YWJsZS11bm1hcmstb2JqZWN0IChvYmplY3QgJm9wdGlvbmFsIGluaGliaXQtbmV4dC1s
aW5lKQogICJVbm1hcmsgT0JKRUNUIGluIHRoZSBjdXJyZW50IHRhYmxlLgpJZiBJTkhJQklULU5F
WFQtTElORSBpcyBub24tbmlsLCBkbyBub3QgbW92ZSBwb2ludCB0byB0aGUgbmV4dCBsaW5lLiIK
ICAodnRhYmxlLS11bm1hcmstb2JqZWN0ICh2dGFibGUtY3VycmVudC10YWJsZSkgb2JqZWN0KQog
ICh1bmxlc3MgaW5oaWJpdC1uZXh0LWxpbmUKICAgICh2dGFibGUtbmV4dC1saW5lIDEpKSkKCihk
ZWZ1biB2dGFibGUtdG9nZ2xlLW1hcmtlZC1vYmplY3QgKG9iamVjdCkKICAiVG9nZ2xlIHRoZSBt
YXJrIG9uIE9CSkVDVCBpbiB0aGUgY3VycmVudCB0YWJsZS4iCiAgKGxldCAoKHRhYmxlICh2dGFi
bGUtY3VycmVudC10YWJsZSkpKQogICAgKGlmICh2dGFibGUtb2JqZWN0LW1hcmtlZC1wIHRhYmxl
IG9iamVjdCkKICAgICAgICAodnRhYmxlLS11bm1hcmstb2JqZWN0IHRhYmxlIG9iamVjdCkKICAg
ICAgKHZ0YWJsZS0tbWFyay1vYmplY3QgdGFibGUgb2JqZWN0KSkpKQoKKGRlZnVuIHZ0YWJsZS1t
YXJrLW9iamVjdHMgKHRhYmxlIHByZWRpY2F0ZSkKICAiTWFyayBvYmplY3RzIGluIFRBQkxFIGZv
ciB3aGljaCBQUkVESUNBVEUsIHdoZW4gY2FsbGVkLCBpcyBub24tbmlsLgpQUkVESUNBVEUgaXMg
Y2FsbGVkIHdpdGggb25lIGFyZ3VtZW50LCB0aGUgb2JqZWN0LiIKICAoZG9saXN0IChsaW5lIChj
YXIgKHZ0YWJsZS0tZW5zdXJlLWNhY2hlIHRhYmxlKSkpCiAgICAobGV0ICgob2JqZWN0IChjYXIg
bGluZSkpKQogICAgICAod2hlbiAoZnVuY2FsbCBwcmVkaWNhdGUgb2JqZWN0KQogICAgICAgICh2
dGFibGUtLW1hcmstb2JqZWN0IHRhYmxlIG9iamVjdCkpKSkpCgooZGVmdW4gdnRhYmxlLW1hcmst
YWxsLW9iamVjdHMgKCZyZXN0IF8pCiAgIk1hcmsgYWxsIG9iamVjdHMgaW4gdGhlIGN1cnJlbnQg
dGFibGUuIgogICh2dGFibGUtbWFyay1vYmplY3RzICh2dGFibGUtY3VycmVudC10YWJsZSkgIydp
ZGVudGl0eSkpCgooZGVmdW4gdnRhYmxlLXVubWFyay1vYmplY3RzICh0YWJsZSBwcmVkaWNhdGUp
CiAgIlVubWFyayBvYmplY3RzIGluIFRBQkxFIGZvciB3aGljaCBQUkVESUNBVEUsIHdoZW4gY2Fs
bGVkLCBpcyBub24tbmlsLgpQUkVESUNBVEUgaXMgY2FsbGVkIHdpdGggb25lIGFyZ3VtZW50LCB0
aGUgb2JqZWN0LiIKICAoZG9saXN0IChsaW5lIChjYXIgKHZ0YWJsZS0tZW5zdXJlLWNhY2hlIHRh
YmxlKSkpCiAgICAobGV0ICgob2JqZWN0IChjYXIgbGluZSkpKQogICAgICAod2hlbiAoZnVuY2Fs
bCBwcmVkaWNhdGUgb2JqZWN0KQogICAgICAgICh2dGFibGUtLXVubWFyay1vYmplY3QgdGFibGUg
b2JqZWN0KSkpKSkKCihkZWZ1biB2dGFibGUtLXVubWFyay1hbGwtb2JqZWN0cyAodGFibGUpCiAg
KHZ0YWJsZS11bm1hcmstb2JqZWN0cyB0YWJsZSAjJ2lkZW50aXR5KSkKCihkZWZ1biB2dGFibGUt
dW5tYXJrLWFsbC1vYmplY3RzICgmcmVzdCBfKQogICJVbm1hcmsgYWxsIG9iamVjdHMgaW4gdGhl
IGN1cnJlbnQgdGFibGUuIgogICh2dGFibGUtLXVubWFyay1hbGwtb2JqZWN0cyAodnRhYmxlLWN1
cnJlbnQtdGFibGUpKSkKCjs7IEV4dHJhIGRhdGEgY29udmVuaWVuY2UgZnVuY3Rpb25zLgoKKGRl
ZnVuIHZ0YWJsZS1zZXQtZXh0cmEtZGF0YSAodGFibGUgZXh0cmEtZGF0YSkKICAiUmV0dXJuIEVY
VFJBLURBVEEgZm9yIFRBQkxFLiIKICAoc2V0ZiAodnRhYmxlLWV4dHJhLWRhdGEgdGFibGUpIGV4
dHJhLWRhdGEpKQoKKGRlZnVuIHZ0YWJsZS1jb2x1bW4tc2V0LWV4dHJhLWRhdGEgKHRhYmxlIGNv
bHVtbi1vci1pbmRleCBleHRyYS1kYXRhKQogICJTZXQgRVhUUkEtREFUQSBmb3IgVEFCTEUncyBD
T0xVTU4tT1ItSU5ERVguCklmIENPTFVNTi1PUi1JTkRFWCBpcyBhbiBpbnRlZ2VyLCBhbWVuZCB0
aGUgY29sdW1uIGFzc29jaWF0ZWQgd2l0aCB0aGF0CmludGVnZXIgaW5kZXgsIG90aGVyd2lzZSwg
aXQgc2hvdWxkIGJlIGEgY29sdW1uIG9iamVjdC4iCiAgKHdoZW4gKGludGVnZXJwIGNvbHVtbi1v
ci1pbmRleCkKICAgIChzZXRxIGNvbHVtbi1vci1pbmRleCAoZWx0ICh2dGFibGUtY29sdW1ucyB0
YWJsZSkgY29sdW1uLW9yLWluZGV4KSkpCiAgKHNldGYgKHZ0YWJsZS1jb2x1bW4tZXh0cmEtZGF0
YSBjb2x1bW4tb3ItaW5kZXgpIGV4dHJhLWRhdGEpKQoKKHByb3ZpZGUgJ3Z0YWJsZSkKCjs7OyB2
dGFibGUuZWwgZW5kcyBoZXJlCg==
--000000000000be30a7063840f99d
Content-Type: application/octet-stream; name="vtable.texi"
Content-Disposition: attachment; filename="vtable.texi"
Content-Transfer-Encoding: base64
Content-ID: <f_mc9ehy5g0>
X-Attachment-Id: f_mc9ehy5g0

XGlucHV0IHRleGluZm8gQGMgLSotdGV4aW5mby0qLQpAYyAlKipzdGFydCBvZiBoZWFkZXIKQHNl
dGZpbGVuYW1lIC4uLy4uL2luZm8vdnRhYmxlLmluZm8KQHNldHRpdGxlIFZhcmlhYmxlIFBpdGNo
IFRhYmxlcwpAaW5jbHVkZSBkb2NzdHlsZS50ZXhpCkBjIE1lcmdlIGFsbCBpbmRleGVzIGludG8g
YSBzaW5nbGUgSW5kZXggbm9kZS4KQHN5bmNvZGVpbmRleCBmbiBjcApAc3luY29kZWluZGV4IHZy
IGNwCkBzeW5jb2RlaW5kZXgga3kgY3AKQGMgJSoqZW5kIG9mIGhlYWRlcgoKQGNvcHlpbmcKVGhp
cyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIHZ0YWJsZS5lbCBwYWNrYWdlLgoKQ29weXJpZ2h0IEBj
b3B5cmlnaHR7fSAyMDIyLS0yMDI1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgoKQHF1
b3RhdGlvbgpQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3Ig
bW9kaWZ5IHRoaXMgZG9jdW1lbnQKdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1
bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCmFueSBsYXRlciB2ZXJzaW9uIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIG5vCkludmFyaWFudCBT
ZWN0aW9ucywgd2l0aCB0aGUgRnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgYGBBIEdOVSBNYW51YWws
JycKYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYXMgaW4gKGEpIGJlbG93LiAgQSBjb3B5
IG9mIHRoZSBsaWNlbnNlCmlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkIGBgR05V
IEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLicnCgooYSkgVGhlIEZTRidzIEJhY2stQ292ZXIg
VGV4dCBpczogYGBZb3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBjb3B5IGFuZAptb2RpZnkgdGhpcyBH
TlUgbWFudWFsLicnCkBlbmQgcXVvdGF0aW9uCkBlbmQgY29weWluZwoKQGRpcmNhdGVnb3J5IEVt
YWNzIG1pc2MgZmVhdHVyZXMKQGRpcmVudHJ5CiogdnRhYmxlOiAodnRhYmxlKS4gICAgIFZhcmlh
YmxlIFBpdGNoIFRhYmxlcy4KQGVuZCBkaXJlbnRyeQoKQGZpbmFsb3V0CgpAdGl0bGVwYWdlCkB0
aXRsZSBWYXJpYWJsZSBQaXRjaCBUYWJsZXMKQHN1YnRpdGxlIENvbHVtbmFyIERpc3BsYXkgb2Yg
RGF0YS4KCkBwYWdlCkB2c2tpcCAwcHQgcGx1cyAxZmlsbGwKQGluc2VydGNvcHlpbmcKQGVuZCB0
aXRsZXBhZ2UKCkBjb250ZW50cwoKQGlmbm90dGV4CkBub2RlIFRvcApAdG9wIHZ0YWJsZQoKQGlu
c2VydGNvcHlpbmcKQGVuZCBpZm5vdHRleAoKQG1lbnUKKiBJbnRyb2R1Y3Rpb246OiAgICAgICAg
SW50cm9kdWN0aW9uIGFuZCBleGFtcGxlcy4KKiBDb25jZXB0czo6ICAgICAgICAgICAgdnRhYmxl
IGNvbmNlcHRzLgoqIE1ha2luZyBBIFRhYmxlOjogICAgICBUaGUgbWFpbiBpbnRlcmZhY2UgZnVu
Y3Rpb24uCiogQ29tbWFuZHM6OiAgICAgICAgICAgIHZ0YWJsZSBjb21tYW5kcy4KKiBJbnRlcmZh
Y2UgRnVuY3Rpb25zOjogSW50ZXJmYWNlIGZ1bmN0aW9ucy4KCkFwcGVuZGljZXMKKiBHTlUgRnJl
ZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U6OiAgVGhlIGxpY2Vuc2UgZm9yIHRoaXMgZG9jdW1lbnRh
dGlvbi4KCkluZGljZXMKKiBJbmRleDo6CkBlbmQgbWVudQoKQG5vZGUgSW50cm9kdWN0aW9uCkBj
aGFwdGVyIEludHJvZHVjdGlvbiBhbmQgVHV0b3JpYWwKCk1vc3QgbW9kZXMgdGhhdCBkaXNwbGF5
IHRhYnVsYXIgZGF0YSBpbiBFbWFjcyB1c2UKQGNvZGV7dGFidWxhdGVkLWxpc3QtbW9kZX0sIGJ1
dCBpdCBoYXMgc29tZSBsaW1pdGF0aW9uczogSXQgYXNzdW1lcwp0aGF0IHRoZSB0ZXh0IGl0J3Mg
ZGlzcGxheWluZyBpcyBtb25vc3BhY2VkLCB3aGljaCBtYWtlcyBpdCBkaWZmaWN1bHQKdG8gbWl4
IGZvbnRzIGFuZCBpbWFnZXMgaW4gYSBzaW5nbGUgbGlzdC4gIFRoZSBAZGZue3Z0YWJsZX0gKGBg
dmFyaWFibGUKcGl0Y2ggdGFibGVzJycpIHBhY2thZ2UgdGFja2xlcyB0aGlzIGluc3RlYWQuCgpA
Y29kZXt0YWJ1bGF0ZWQtbGlzdC1tb2RlfSBpcyBhIG1ham9yIG1vZGUsIGFuZCBhc3N1bWVzIHRo
YXQgaXQKY29udHJvbHMgdGhlIGVudGlyZSBidWZmZXIuICBBIHZ0YWJsZSBkb2Vzbid0IGFzc3Vt
ZSB0aGF0LS0teW91IGNhbiBoYXZlCmEgdnRhYmxlIGluIHRoZSBtaWRkbGUgb2Ygb3RoZXIgZGF0
YSwgb3IgaGF2ZSBzZXZlcmFsIHZ0YWJsZXMgaW4gdGhlCnNhbWUgYnVmZmVyLgoKSGVyZSdzIGp1
c3QgYWJvdXQgdGhlIHNpbXBsZXN0IHZ0YWJsZSB0aGF0IGNhbiBiZSBjcmVhdGVkOgoKQGxpc3AK
KG1ha2UtdnRhYmxlCiA6b2JqZWN0cyAnKCgiRm9vIiAxMDM0KQogICAgICAgICAgICAoIkdhem9u
ayIgNDUpKSkKQGVuZCBsaXNwCgpCeSBkZWZhdWx0LCB2dGFibGUgdXNlcyB0aGUgQGNvZGV7dnRh
YmxlfSBmYWNlICh3aGljaCBpbmhlcml0cyBmcm9tCnRoZSBAY29kZXt2YXJpYWJsZS1waXRjaH0g
ZmFjZSksIGFuZCByaWdodC1hbGlnbnMgY29sdW1ucyB0aGF0IGhhdmUKb25seSBudW1lcmljYWwg
ZGF0YSAoYW5kIGxlZnQtYWxpZ25zIHRoZSByZXN0KS4KCllvdSdkIG5vcm1hbGx5IHdhbnQgdG8g
bmFtZSB0aGUgY29sdW1uczoKCkBsaXNwCihtYWtlLXZ0YWJsZQogOmNvbHVtbnMgJygiTmFtZSIg
IklEIikKIDpvYmplY3RzICcoKCJGb28iIDEwMzQpCiAgICAgICAgICAgICgiR2F6b25rIiA0NSkp
KQpAZW5kIGxpc3AKCkNsaWNraW5nIG9uIHRoZSBjb2x1bW4gbmFtZXMgd2lsbCBzb3J0IHRoZSB0
YWJsZSBiYXNlZCBvbiB0aGUgZGF0YSBpbgplYWNoIGNvbHVtbiAod2hpY2gsIGluIHRoaXMgZXhh
bXBsZSwgY29ycmVzcG9uZHMgdG8gYW4gZWxlbWVudCBpbiBhCmxpc3QpLgoKQnkgZGVmYXVsdCwg
dGhlIGRhdGEgaXMgZGlzcGxheWVkIGBgYXMgaXMnJywgdGhhdCBpcywgdGhlIHdheQpAc2FtcHso
Zm9ybWF0ICIlcyIgLi4uKX0gd291bGQgZGlzcGxheSBpdCwgYnV0IHlvdSBjYW4gb3ZlcnJpZGUg
dGhhdC4KCkBsaXNwCihtYWtlLXZ0YWJsZQogOmNvbHVtbnMgJygiTmFtZSIgIklEIikKIDpvYmpl
Y3RzICcoKCJGb28iIDEwMzQpCiAgICAgICAgICAgICgiR2F6b25rIiA0NSkpCiA6Zm9ybWF0dGVy
IChsYW1iZGEgKHZhbHVlIGNvbHVtbiAmcmVzdCBfKQogICAgICAgICAgICAgIChpZiAoPSBjb2x1
bW4gMSkKICAgICAgICAgICAgICAgICAgKGZpbGUtc2l6ZS1odW1hbi1yZWFkYWJsZSB2YWx1ZSkK
ICAgICAgICAgICAgICAgIHZhbHVlKSkpCkBlbmQgbGlzcAoKSW4gdGhpcyBjYXNlLCB0aGF0IEBz
YW1wezEwMzR9IHdpbGwgYmUgZGlzcGxheWVkIGFzIEBzYW1wezFrfS0tLWJ1dAp3aWxsIHN0aWxs
IHNvcnQgYWZ0ZXIgQHNhbXB7NDV9LCBiZWNhdXNlIHNvcnRpbmcgaXMgZG9uZSBvbiB0aGUgYWN0
dWFsCmRhdGEsIGFuZCBub3QgdGhlIGRpc3BsYXllZCBkYXRhLgoKQWx0ZXJuYXRpdmVseSwgaW5z
dGVhZCBvZiBoYXZpbmcgYSBnZW5lcmFsIGZvcm1hdHRlciBmb3IgdGhlIHRhYmxlLAp5b3UgY2Fu
IHB1dCB0aGUgZm9ybWF0dGVyIGluIHRoZSBjb2x1bW4gZGVmaW5pdGlvbjoKCkBsaXNwCihtYWtl
LXZ0YWJsZQogOmNvbHVtbnMgJygiTmFtZSIKICAgICAgICAgICAgKDpuYW1lICJJRCIgOmZvcm1h
dHRlciBmaWxlLXNpemUtaHVtYW4tcmVhZGFibGUpKQogOm9iamVjdHMgJygoIkZvbyIgMTAzNCkK
ICAgICAgICAgICAgKCJHYXpvbmsiIDQ1KSkpCkBlbmQgbGlzcAoKVGhlIGRhdGEgZG9lc24ndCBo
YXZlIHRvIGJlIHNpbXBsZSBsaXN0cy0tLXlvdSBjYW4gZ2l2ZSBhbnkgdHlwZSBvZgpvYmplY3Qg
dG8gdnRhYmxlLCBidXQgdGhlbiB5b3UgYWxzbyBoYXZlIHRvIHdyaXRlIGEgZnVuY3Rpb24gdGhh
dApyZXR1cm5zIHRoZSBkYXRhIGZvciBlYWNoIGNvbHVtbi4gIEZvciBpbnN0YW5jZSwgaGVyZSdz
IGEgdmVyeSBzaW1wbGUKdmVyc2lvbiBvZiBAa2Jke00teCBsaXN0LWJ1ZmZlcnN9OgoKQGxpc3AK
KG1ha2UtdnRhYmxlCiA6Y29sdW1ucyAnKCJOYW1lIiAiU2l6ZSIgIkZpbGUiKQogOm9iamVjdHMg
KGJ1ZmZlci1saXN0KQogOmFjdGlvbnMgJygiayIga2lsbC1idWZmZXIKICAgICAgICAgICAgIlJF
VCIgZGlzcGxheS1idWZmZXIpCiA6Z2V0dGVyIChsYW1iZGEgKG9iamVjdCBjb2x1bW4gdnRhYmxl
KQogICAgICAgICAgIChwY2FzZSAodnRhYmxlLWNvbHVtbiB2dGFibGUgY29sdW1uKQogICAgICAg
ICAgICAgKCJOYW1lIiAoYnVmZmVyLW5hbWUgb2JqZWN0KSkKICAgICAgICAgICAgICgiU2l6ZSIg
KGJ1ZmZlci1zaXplIG9iamVjdCkpCiAgICAgICAgICAgICAoIkZpbGUiIChvciAoYnVmZmVyLWZp
bGUtbmFtZSBvYmplY3QpICIiKSkpKSkKQGVuZCBsaXNwCgpAdmFye29iamVjdHN9IGluIHRoaXMg
Y2FzZSBpcyBhIGxpc3Qgb2YgYnVmZmVycy4gIFRvIGdldCB0aGUgZGF0YSB0bwpiZSBkaXNwbGF5
ZWQsIHZ0YWJsZSBjYWxscyB0aGUgQGRmbntnZXR0ZXJ9IGZ1bmN0aW9uLCB3aGljaCBpcyBjYWxs
ZWQKZm9yIGVhY2ggY29sdW1uIG9mIGV2ZXJ5IG9iamVjdCwgYW5kIHdoaWNoIHNob3VsZCByZXR1
cm4gdGhlIGRhdGEgdGhhdAp3aWxsIGV2ZW50dWFsbHkgYmUgZGlzcGxheWVkLgoKQWxzbyBub3Rl
IHRoZSBAZGZue2FjdGlvbnN9OiBUaGVzZSBhcmUgc2ltcGxlIGNvbW1hbmRzIHRoYXQgd2lsbCBi
ZQpjYWxsZWQgd2l0aCB0aGUgb2JqZWN0IHVuZGVyIHBvaW50LiAgU28gaGl0dGluZyBAa2Jke0Br
ZXl7UkVUfX0gb24gYSBsaW5lCndpbGwgcmVzdWx0IGluIEBjb2Rle2Rpc3BsYXktYnVmZmVyfSBi
ZWluZyBjYWxsZWQgd2l0aCBhIGJ1ZmZlciBvYmplY3QKYXMgdGhlIHBhcmFtZXRlci4gIChZb3Ug
Y2FuIGFsc28gc3VwcGx5IGEga2V5bWFwIHRvIGJlIHVzZWQsIGJ1dCB0aGVuCnlvdSBoYXZlIHRv
IHdyaXRlIGNvbW1hbmRzIHRoYXQgY2FsbCBAY29kZXt2dGFibGUtY3VycmVudC1vYmplY3R9IHRv
CmdldCBhdCB0aGUgb2JqZWN0LikKCk5vdGUgdGhhdCB0aGUgYWN0aW9ucyBhcmVuJ3QgY2FsbGVk
IHdpdGggdGhlIGRhdGEgZGlzcGxheWVkIGluIHRoZQpidWZmZXItLS10aGV5J3JlIGNhbGxlZCB3
aXRoIHRoZSBvcmlnaW5hbCBvYmplY3RzLgoKRmluYWxseSwgaGVyZSdzIGFuIGV4YW1wbGUgdGhh
dCB1c2VzIGp1c3QgYWJvdXQgYWxsIHRoZSBiYXNpYyBmZWF0dXJlczoKCkBsaXNwCihtYWtlLXZ0
YWJsZQogOmNvbHVtbnMgYCgoIDpuYW1lICJUaHVtYiIgOndpZHRoICI1MDBweCIKICAgICAgICAg
ICAgICA6ZGlzcGxheWVyCiAgICAgICAgICAgICAgLChsYW1iZGEgKHZhbHVlIG1heC13aWR0aCBf
dGFibGUpCiAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgIioiICdkaXNwbGF5CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGNyZWF0ZS1pbWFnZSB2YWx1ZSBuaWwgbmlsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bWF4LXdpZHRoIG1heC13aWR0aAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNjYWxlIDEuMCkpKSkK
ICAgICAgICAgICAgKDpuYW1lICJTaXplIiA6d2lkdGggIjIwJSIKICAgICAgICAgICAgICAgICAg
IDpmb3JtYXR0ZXIgZmlsZS1zaXplLWh1bWFuLXJlYWRhYmxlKQogICAgICAgICAgICAoOm5hbWUg
IlRpbWUiIDp3aWR0aCAxMCA6cHJpbWFyeSBhc2NlbmQpCiAgICAgICAgICAgICJOYW1lIikKIDpv
YmplY3RzLWZ1bmN0aW9uIChsYW1iZGEgKCkKICAgICAgICAgICAgICAgICAgICAgKGRpcmVjdG9y
eS1maWxlcwogICAgICAgICAgICAgICAgICAgICAgKGV4cGFuZC1maWxlLW5hbWUgImltYWdlcyIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZGlyZWN0b3J5KQog
ICAgICAgICAgICAgICAgICAgICAgdCAiXnNwbGFzaC4qXFwuIikpCiA6YWN0aW9ucyAnKCJSRVQi
IGZpbmQtZmlsZSkKIDpnZXR0ZXIgKGxhbWJkYSAob2JqZWN0IGNvbHVtbiB0YWJsZSkKICAgICAg
ICAgICAocGNhc2UgKHZ0YWJsZS1jb2x1bW4gdGFibGUgY29sdW1uKQogICAgICAgICAgICAgKCJO
YW1lIiAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBvYmplY3QpKQogICAgICAgICAgICAgKCJUaHVt
YiIgb2JqZWN0KQogICAgICAgICAgICAgKCJTaXplIiAoZmlsZS1hdHRyaWJ1dGUtc2l6ZSAoZmls
ZS1hdHRyaWJ1dGVzIG9iamVjdCkpKQogICAgICAgICAgICAgKCJUaW1lIiAoZm9ybWF0LXRpbWUt
c3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAiJUYiIChmaWxlLWF0dHJpYnV0ZS1tb2RpZmlj
YXRpb24tdGltZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUtYXR0cmlidXRlcyBv
YmplY3QpKSkpKSkKIDpzZXBhcmF0b3Itd2lkdGggNQogOnVzZS1uYXZpZ2F0aW9uLWtleW1hcCB0
CiA6Y2xvc2UtYWN0aW9uICdxdWl0LXdpbmRvdy1raWxsCiA6a2V5bWFwIChkZWZpbmUta2V5bWFw
CiAgICAgICAgICAgImgiIChsYW1iZGEgKCkgKGludGVyYWN0aXZlKSAobWVzc2FnZSAiSGVscCIp
KSkpCkBlbmQgbGlzcAoKVGhpcyB2dGFibGUgaW1wbGVtZW50cyBhIHNpbXBsZSBpbWFnZSBicm93
c2VyIHRoYXQgZGlzcGxheXMgaW1hZ2UKdGh1bWJuYWlscyAodGhhdCBjaGFuZ2Ugc2l6ZXMgZHlu
YW1pY2FsbHkgZGVwZW5kaW5nIG9uIHRoZSB3aWR0aCBvZiB0aGUKY29sdW1uKSwgaHVtYW4tcmVh
ZGFibGUgZmlsZSBzaXplcywgZGF0ZSBhbmQgZmlsZSBuYW1lLiAgVGhlIHNlcGFyYXRvcgp3aWR0
aCBpcyA1IHR5cGljYWwgY2hhcmFjdGVycyB3aWRlLiAgUHJlc3NpbmcgQGtiZHtAa2V5e1JFVH19
IG9uIGEgbGluZQp3aWxsIG9wZW4gdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdywgcHJlc3Npbmcg
QGtiZHtofSB3aWxsIHNob3cgaGVscAp0ZXh0LCBhbmQgcHJlc3NpbmcgQGtiZHtxfSB3aWxsIGtp
bGwgdGhlIGJ1ZmZlci4KCkBub2RlIENvbmNlcHRzCkBjaGFwdGVyIENvbmNlcHRzCgpOb3RlOiBU
aGUgdGVybXMgcm93IGFuZCBsaW5lIGFyZSB1c2VkIGludGVyY2hhbmdlYWJseS4KCkBjaW5kZXgg
dnRhYmxlCkEgdnRhYmxlIGxpc3RzIGRhdGEgYWJvdXQgYSBudW1iZXIgb2YgQGRmbntvYmplY3Rz
fS4gIEVhY2ggb2JqZWN0IGNhbgpiZSBhIGxpc3Qgb3IgYSB2ZWN0b3IsIGJ1dCBpdCBjYW4gYWxz
byBiZSBhbnl0aGluZyBlbHNlLgoKQGNpbmRleCBnZXR0ZXIgb2YgYSB2dGFibGUKVG8gZ2V0IHRo
ZSBAZGZue3ZhbHVlfSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbiwgdGhlIEBkZm57Z2V0dGVyfQpm
dW5jdGlvbiBpcyBjYWxsZWQgb24gdGhlIG9iamVjdC4gIElmIG5vIGdldHRlciBmdW5jdGlvbiBp
cyBkZWZpbmVkLAp0aGUgZGVmYXVsdCBpcyB0byB0cnkgdG8gaW5kZXggdGhlIG9iamVjdCBhcyBh
IHNlcXVlbmNlLiAgSW4gYW55IGNhc2UsCndlIGVuZCB1cCB3aXRoIGEgdmFsdWUgdGhhdCBpcyB0
aGVuIHVzZWQgZm9yIHNvcnRpbmcuCgpAY2luZGV4IGZvcm1hdHRlciBvZiBhIHZ0YWJsZQpUaGlz
IHZhbHVlIGlzIHRoZW4gQGRmbntmb3JtYXR0ZWR9IHZpYSBhIEBkZm57Zm9ybWF0dGVyfSBmdW5j
dGlvbiwKd2hpY2ggaXMgY2FsbGVkIHdpdGggdGhlIEBkZm57dmFsdWV9IGFzIHRoZSBhcmd1bWVu
dC4gIFRoZSBmb3JtYXR0ZXIKY29tbW9ubHkgbWFrZXMgdGhlIHZhbHVlIG1vcmUgcmVhZGVyIGZy
aWVuZGx5LgoKQGNpbmRleCBkaXNwbGF5ZXIgb2YgYSB2dGFibGUKRmluYWxseSwgdGhlIGZvcm1h
dHRlZCB2YWx1ZSBpcyBwYXNzZWQgdG8gdGhlIEBkZm57ZGlzcGxheWVyfSBmdW5jdGlvbiwKd2hp
Y2ggaXMgcmVzcG9uc2libGUgZm9yIHB1dHRpbmcgdGhlIHRhYmxlIGZhY2Ugb24gdGhlIGZvcm1h
dHRlZCB2YWx1ZSwKYW5kIGFsc28gZW5zdXJpbmcgdGhhdCBpdCdzIG5vdCB3aWRlciB0aGFuIHRo
ZSBjb2x1bW4ncyBwaXhlbCB3aWR0aC4KVGhlIGRpc3BsYXllciB3aWxsIGNvbW1vbmx5IHRydW5j
YXRlIHRvby1sb25nIHN0cmluZ3MgYW5kIHNjYWxlIGltYWdlCnNpemVzLgoKQWxsIHRoZXNlIHRo
cmVlIHRyYW5zZm9ybXMsIHRoZSBnZXR0ZXIsIHRoZSBmb3JtYXR0ZXIsIGFuZCB0aGUgZGlzcGxh
eQpmdW5jdGlvbnMsIGNhbiBiZSBkZWZpbmVkIG9uIGEgcGVyLWNvbHVtbiBiYXNpcywgYW5kIGFs
c28gb24gYSBwZXItdGFibGUKYmFzaXMuICBQZXItY29sdW1uIHRyYW5zZm9ybXMgdGFrZXMgcHJl
Y2VkZW5jZSBvdmVyIHRoZSBwZXItdGFibGUKdHJhbnNmb3Jtcy4KClVzZXIgY29tbWFuZHMgdGhh
dCBhcmUgZGVmaW5lZCBvbiBhIHRhYmxlIGRvIG5vdCB3b3JrIG9uIHRoZSB0cmFuc2Zvcm1lZApk
aXNwbGF5ZWQgZGF0YSwgdGhleSBhcmUgY2FsbGVkIHdpdGggdGhlIG9yaWdpbmFsIG9iamVjdCBh
cyB0aGUKYXJndW1lbnQuCgpBIHZ0YWJsZSBhc3N1bWVzIHRoYXQgaXRzIG9iamVjdHMgYXJlIHVu
aXF1ZS4gIFdoaWxlIGl0IGlzIHBvc3NpYmxlIGZvcgpkdXBsaWNhdGUgb2JqZWN0cyB0byBiZSBp
bnNlcnRlZCwgdGhlIHRhYmxlIHdpbGwgb3BlcmF0ZSBvbmx5IG9uIHRoZQpmaXJzdCBpbnN0YW5j
ZSBmb3VuZCBvZiBlYWNoIG9iamVjdCwgc28gaXQncyBiZXN0IHRvIGluc2VydCB1bmlxdWUKb2Jq
ZWN0cyAodnRhYmxlIGNhbiBvcHRpb25hbGx5IHdhcm4geW91IGFib3V0IGR1cGxpY2F0ZSBvYmpl
Y3RzIG9yIGNhbgpkaXNhbGxvdyB0aGVtKS4KCkEgdnRhYmxlIGNhbiBiZSBpbnNlcnRlZCBpbnRv
IGEgc2luZ2xlIGJ1ZmZlciBvbmx5LCBhbmQgd2lsbCBzaWduYWwgYW4KZXJyb3IgaWYgaW5zZXJ0
ZWQgbW9yZSB0aGFuIG9uY2UgaW50byBhIHNpbmdsZSBidWZmZXIsIG9yIGludG8gbXVsdGlwbGUK
YnVmZmVycy4KClRhYmxlIG11dGF0aW9uIGZ1bmN0aW9ucywgaW5zZXJ0LCB1cGRhdGUsIHJlbW92
ZSwgZXRjLiwgYXNzdW1lIHRoZSB0YWJsZQpoYXMgYmVlbiBpbnNlcnRlZCBpbnRvIGEgYnVmZmVy
LiAgQ2FsbCB0aGVtIG9ubHkgYWZ0ZXIgaW5zZXJ0aW9uLgoKQSB2dGFibGUgaXMgYXV0b21hdGlj
YWxseSByZXNpemVkIGJhc2VkIG9uIGl0cyBzZWxlY3RlZCB3aW5kb3cncyB3aWR0aC4KV2hpbGUg
YSB2dGFibGUgYnVmZmVyIGNhbiBiZSBkaXNwbGF5ZWQgaW4gbXVsdGlwbGUgd2luZG93cywgYmUg
YXdhcmUKdGhhdCB0aGUgYnVmZmVyIGl0c2VsZiB3aWxsIGNvbnRhaW4gdGhlIGxpbmVzIHRyYW5z
Zm9ybWVkIGFuZCBmb3JtYXR0ZWQKZm9yIGl0cyBtb3N0LXJlY2VudGx5IHNlbGVjdGVkIHdpbmRv
dydzIHdpZHRoLgoKWW91IGNhbiB1c2UgQGNvZGV7dGV4dC1zY2FsZS1tb2RlfSBpbiB2dGFibGUg
YnVmZmVycy4gIFRhYmxlIGNvbnRlbnQgaXMKYXV0b21hdGljYWxseSBzY2FsZWQgd2l0aCBidWZm
ZXIgZmFjZXMuCgpZb3UgY2FuIG9wdGlvbmFsbHkgbWFyayBhbmQgdW5tYXJrIG9iamVjdHMgaW4g
dGhlIHRhYmxlIHNpbWlsYXIgdG8KQGNvZGV7ZGlyZWR9LiAgQXNzb2NpYXRlIHRoZSBtYXJraW5n
IGZ1bmN0aW9ucyB5b3UgbmVlZCB3aXRoIGtleXMKZGVmaW5lZCBpbiB0aGUgdGFibGUncyBAY29k
ZXs6YWN0aW9uc30uCgpBIHZ0YWJsZSB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseSBpbiBuYXJy
b3dlZCBidWZmZXJzLgoKQG5vZGUgTWFraW5nIEEgVGFibGUKQGNoYXB0ZXIgTWFraW5nIEEgVGFi
bGUKCkBmaW5kZXggbWFrZS12dGFibGUKVGhlIGludGVyZmFjZSBmdW5jdGlvbiBmb3IgbWFraW5n
IChhbmQgb3B0aW9uYWxseSBpbnNlcnRpbmcgYSB0YWJsZQppbnRvIGEgYnVmZmVyKSBpcyBAY29k
ZXttYWtlLXZ0YWJsZX0uICBJdCByZXR1cm5zIGEgdGFibGUgb2JqZWN0LgoKTm90ZTogWW91IG11
c3QgY3JlYXRlIHRoZSB0YWJsZSB3aXRoIG9iamVjdHMgb3IgY29sdW1ucyBvciBib3RoLiAgSWYg
eW91CmNyZWF0ZSB0aGUgdGFibGUgd2l0aCBjb2x1bW5zIGJ1dCB3aXRob3V0IG9iamVjdHMsIHlv
dSBjYW4gYWRkIG9iamVjdHMKbGF0ZXIgdXNpbmcgdGhlIEBjb2Rle3Z0YWJsZS1pbnNlcnQtb2Jq
ZWN0fSBmdW5jdGlvbi4KClRoZSBrZXl3b3JkIHBhcmFtZXRlcnMgYXJlIGRlc2NyaWJlZCBiZWxv
dy4KClRoZXJlIGFyZSBtYW55IGNhbGxiYWNrIGludGVyZmFjZSBmdW5jdGlvbnMgcG9zc2libGUg
aW4KQGNvZGV7bWFrZS12dGFibGV9LCBhbmQgbWFueSBvZiB0aGVtIHRha2UgYSBAdmFye29iamVj
dH0gYXJndW1lbnQgKGFuCm9iamVjdCBmcm9tIHRoZSBAY29kZXs6b2JqZWN0c30gbGlzdCksIGEg
Y29sdW1uIGluZGV4IGFyZ3VtZW50IChhbgppbnRlZ2VyIHN0YXJ0aW5nIGF0IHplcm8pLCBhbmQg
YSB0YWJsZSBhcmd1bWVudCAodGhlIG9iamVjdCByZXR1cm5lZApieSBAY29kZXttYWtlLXZ0YWJs
ZX0pLgoKQHRhYmxlIEBjb2RlCkBpdGVtIDpuYW1lClRoZSBkZWZhdWx0IHRhYmxlIG5hbWUgaXMg
QHNhbXB7KnZ0YWJsZSp9LiAgU3BlY2lmeSB0aGlzIGlmIHlvdSBoYXZlCm1vcmUgdGhhbiBvbmUg
dnRhYmxlIGluIGEgc2luZ2xlIGJ1ZmZlciBhbmQgd291bGQgbGlrZSB2dGFibGUgbWVzc2FnZXMK
dG8gc2hvdyBzcGVjaWZpYyB2dGFibGUgbmFtZXMuCgpAaXRlbSA6b2JqZWN0cwpUaGlzIGlzIGEg
bGlzdCBvZiBvYmplY3RzIHRvIGJlIGRpc3BsYXllZC4gIEl0IHNob3VsZCBlaXRoZXIgYmUgYSBs
aXN0Cm9mIHN0cmluZ3MgKHdoaWNoIHdpbGwgdGhlbiBiZSBkaXNwbGF5ZWQgYXMgYSBzaW5nbGUt
Y29sdW1uIHRhYmxlKSwgb3IKYSBsaXN0IHdoZXJlIGVhY2ggZWxlbWVudCBpcyBhIHNlcXVlbmNl
IGNvbnRhaW5pbmcgYSBtaXh0dXJlIG9mCnN0cmluZ3MsIG51bWJlcnMsIGFuZCBvdGhlciBvYmpl
Y3RzIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBgYHNpbXBseScnLgoKSW4gdGhlIGxhdHRlciBjYXNl
LCBpZiBAY29kZXs6Y29sdW1uc30gaXMgbm9uLUBjb2Rle25pbH0sIHRoZSBzZXF1ZW5jZQplbGVt
ZW50cyBiZXlvbmQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBAY29kZXs6Y29sdW1uc30gd2ls
bCBub3QgYmUKc2hvd24uCgpJZiB0aGUgQGNvZGV7Om9iamVjdHN9IGxpc3QgaXMgZW1wdHkgKGFu
ZCBubyBAY29kZXs6b2JqZWN0cy1mdW5jdGlvbn0gaXMKZGVmaW5lZCksIGFuIGVtcHR5IHZ0YWJs
ZSBpcyBjcmVhdGVkLiAgSW4gdGhpcyBjYXNlLCBhIEBjb2Rlezpjb2x1bW5zfQpzcGVjIG11c3Qg
YmUgcHJvdmlkZWQuCgpAaXRlbSA6b2JqZWN0cy1mdW5jdGlvbgpJdCdzIG9mdGVuIGNvbnZlbmll
bnQgdG8gZ2VuZXJhdGUgdGhlIG9iamVjdHMgZHluYW1pY2FsbHkgKGZvcgppbnN0YW5jZSwgdG8g
bWFrZSByZXZlcnNpb24gd29yayBhdXRvbWF0aWNhbGx5KS4gIEluIHRoYXQgY2FzZSwgdGhpcwpz
aG91bGQgYmUgYSBmdW5jdGlvbiAod2hpY2ggd2lsbCBiZSBjYWxsZWQgd2l0aCBubyBhcmd1bWVu
dHMpLCBhbmQKc2hvdWxkIHJldHVybiBhIHZhbHVlIGFzIGFjY2VwdGVkIGFzIGFuIEBjb2Rlezpv
YmplY3RzfSBsaXN0LgoKQGl0ZW0gOm9iamVjdC1lcXVhbApUaGlzIGZ1bmN0aW9uIHRlc3RzIGZv
ciB0aGUgZXF1YWxpdHkgb2YgdHdvIHRhYmxlIG9iamVjdHMuICBJdCBkZWZhdWx0cwp0byBAY29k
ZXtlcX0uCgpAZGVmdW4gb2JqZWN0LWVxdWFsIG9iamVjdDEgb2JqZWN0MgpSZXR1cm4gbm9uLW5p
bCBpZiBAdmFye29iamVjdDF9IGFuZCBAdmFye29iamVjdDJ9IGFyZSBlcXVhbCwgYW5kIG5vbi1u
aWwKb3RoZXJ3aXNlLgpAZW5kIGRlZnVuCgpAaXRlbSA6ZHVwbGljYXRlLW9iamVjdHMKQSB2dGFi
bGUgYXNzdW1lcyBhbGwgb2JqZWN0cyBpbnNlcnRlZCBpbnRvIHRoZSB0YWJsZSBhcmUgdW5pcXVl
IGFtb25nCnRoZW1zZWx2ZXMuICBJZiB0aGUgc3ltYm9sIEBjb2RleydhbGxvd30sIHRoZSBkZWZh
dWx0LCBhbGxvdyBkdXBsaWNhdGUKb2JqZWN0cyAodGhlIGZpcnN0IG9iamVjdCBmb3VuZCBkdXJp
bmcgdGFibGUgb3BlcmF0aW9ucyBoYXMgcHJpbWFjeSksIGlmCkBjb2RleydpZ25vcmV9LCBzaWxl
bnRseSBpZ25vcmUgZHVwbGljYXRlcyBsZWF2aW5nIHRoZSBleGlzdGluZyBvYmplY3QKaW50YWN0
LCBpZiBAY29kZXsnaWdub3JlLXdhcm59IGRvIHRoZSBzYW1lIHRoaW5nIGFzIEBjb2RleydpZ25v
cmV9IGFuZApwcm9kdWNlIGEgd2FybmluZyBtZXNzYWdlLCBvciBpZiBAY29kZXsnZXJyb3J9LCBz
aWduYWwgYW4gZXJyb3IgaWYgYQpkdXBsaWNhdGUgaXMgZGV0ZWN0ZWQuCgpAaXRlbSA6Y29sdW1u
cwpUaGlzIGlzIGEgbGlzdCB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgZWl0aGVyIGEgc3RyaW5nICh0
aGUgY29sdW1uIG5hbWUpLAphIHBsaXN0IG9mIGtleXdvcmQvdmFsdWVzICh0byBtYWtlIGEgQGNv
ZGV7dnRhYmxlLWNvbHVtbn0gb2JqZWN0KSwgb3IgYQpAY29kZXt2dGFibGUtY29sdW1ufSBvYmpl
Y3QgKGNyZWF0ZWQgYnkgY2FsbGluZyB0aGUgZnVuY3Rpb24KQGNvZGV7bWFrZS12dGFibGUtY29s
dW1ufSkuCgpBIEBjb2Rle3Z0YWJsZS1jb2x1bW59IG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBz
bG90czoKCkB0YWJsZSBAY29kZQpAaXRlbSBuYW1lClRoZSBuYW1lIG9mIHRoZSBjb2x1bW4uCgpA
aXRlbSB3aWR0aApUaGUgd2lkdGggb2YgdGhlIGNvbHVtbi4gIFRoaXMgY2FuIGJlIG9uZSBvZiB0
aGUgZm9sbG93aW5nOgoKQHRhYmxlIEBhc2lzCkBpdGVtIGEgbnVtYmVyIEB2YXJ7bn0KQGl0ZW14
IGEgc3RyaW5nIG9mIHRoZSBmb3JtIEBzYW1we0B2YXJ7bn1leH0KVGhlIHdpZHRoIG9mIEB2YXJ7
bn0gQHNhbXB7eH0gY2hhcmFjdGVycyBpbiB0aGUgdGFibGUncyBmYWNlLgoKQGl0ZW0gYSBzdHJp
bmcgb2YgdGhlIGZvcm0gQHNhbXB7QHZhcntufXB4fQpAdmFye259IHBpeGVscy4KCkBpdGVtIGEg
c3RyaW5nIG9mIHRoZSBmb3JtIEBzYW1we0B2YXJ7bn0lfQpAdmFye259IHBlcmNlbnQgb2YgdGhl
IHdpbmRvdydzIHdpZHRoLgpAZW5kIHRhYmxlCgpJZiBubyBAY29kZXt3aWR0aH0gaXMgcHJvdmlk
ZWQsIHRoZSB3aWR0aCBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZQpjb2x1bW4gZGF0YSAocHJv
dmlkZWQgaW4gdGhlIEBjb2RlezpvYmplY3RzfSBsaXN0IG9yIHRocm91Z2ggdGhlCkBjb2Rlezpv
YmplY3RzLWZ1bmN0aW9ufSksIG9wdGlvbmFsbHkgaW5jbHVkaW5nIHRoZSBjb2x1bW4tbmFtZSB3
aWR0aC4KQW4gaW5mZXJyZWQgY29sdW1uIHdpZHRoIHVzZXMgdGhlIHJlc3VsdCBvZiB0aGUgY29s
dW1uJ3MgZm9ybWF0dGVyCmZ1bmN0aW9uIChvciB0aGUgdGFibGUncyBmb3JtYXR0ZXIpLCBpZiBw
cmVzZW50LiAgRGlzcGxheWVyIGZ1bmN0aW9ucwpoYXZlIG5vIGltcGFjdCBvbiBpbmZlcnJlZCB3
aWR0aHMuICBJZiBubyB3aWR0aCBpcyBzcGVjaWZpZWQsIGFuZCB0aGVyZQppcyBubyBkYXRhLCB3
aWR0aCBpcyBjb21wdXRlZCBvbiB0aGUgYmFzaXMgb2YgdGhlIHdpbmRvdyB3aWR0aC4gIEZvcgp0
YWJsZXMgd2l0aCBhIGxhcmdlIG51bWJlciBvZiBvYmplY3RzLCBpdCBpcyBtb3JlIGVmZmljaWVu
dCB0byBzcGVjaWZ5IGEKd2lkdGguCgpAaXRlbSBpbmZlci13aWR0aApUaGlzIGRlZmF1bHRzIHRv
IEBjb2Rle2RhdGF9LCB3aGljaCBjb21wdXRlcyB0aGUgZGVmYXVsdCB3aWR0aCBiYXNlZCBvbgp0
aGUgY29sdW1uJ3MgZm9ybWF0dGVkIGNvbnRlbnQuICBJZiBAY29kZXtkYXRhK25hbWV9LCB3aWR0
aCBhbHNvCmNvbnNpZGVycyB0aGUgY29sdW1uJ3MgbmFtZSB3aWR0aC4gIFRoaXMgaGFzIG5vIGVm
ZmVjdCB3aGVuIEBjb2Rle3dpZHRofQppcyBleHBsaWNpdC4KCkBpdGVtIG1pbi13aWR0aApAaXRl
bXggbWF4LXdpZHRoClRoZXNlIHVzZSB0aGUgc2FtZSBmb3JtYXQgYXMgQGNvZGV7d2lkdGh9LCBh
bmQgc3BlY2lmeSB0aGUgbWluaW11bSBvcgptYXhpbXVtIHdpZHRoLCB3aGljaCBvdmVycmlkZXMg
QGNvZGV7d2lkdGh9IGlmIEBjb2Rle3dpZHRofSBpcyBvdXQgb2YKYm91bmRzLgoKQGNvZGV7bWlu
LXdpZHRofS9AY29kZXttYXgtd2lkdGh9IGNhbiBiZSB1c2VmdWwgaWYgQGNvZGV7d2lkdGh9IGlz
IGdpdmVuCmFzIGEgcGVyY2VudGFnZSBvZiB0aGUgd2luZG93IHdpZHRoLCBhbmQgeW91IHdhbnQg
dG8gZW5zdXJlIHRoYXQgdGhlCmNvbHVtbiBkb2Vzbid0IGdyb3cgcG9pbnRsZXNzbHkgbGFyZ2Ug
b3IgdW5yZWFkYWJseSBuYXJyb3cuCgpAaXRlbSB0cnVuY2F0ZS1ndWVzcwpJZiBhIGZvcm1hdHRl
ZCBjb2x1bW4gdmFsdWUgd2lsbCBub3QgZml0IGludG8gdGhlIGNvbHVtbidzIHdpZHRoLCBpdCBp
cwpzaG9ydGVuZWQgb24gYSBwaXhlbHdpc2UgYmFzaXMgdG8gZml0IGluIHRoZSBhbGxvdHRlZCBw
aXhlbCB3aWR0aCwgYW5kCndpdGggdGhlIHRhYmxlJ3MgZWxsaXBzaXMgYXBwZW5kZWQgdG8gaW5k
aWNhdGUgc2hvcnRlbmluZy4KQGNvZGV7dHJ1bmNhdGUtZ3Vlc3N9IGluZmx1ZW5jZXMgdGhlIHRy
dW5jYXRpb24gYWxnb3JpdGhtIGJ5IGFkanVzdGluZwp0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMg
dG8gYWRkIHRvIGl0cyBpbml0aWFsIGd1ZXNzLiAgVGhpcyBpcyBhbgppbnRlZ2VyIHRoYXQgZGVm
YXVsdHMgdG8gMC4gIElmIHlvdSBmaW5kIHRoZSBndWVzc2VzIGFyZSBpbXByZWNpc2UgZm9yCnlv
dXIgc3BlY2lmaWMgY29udGVudDsgZS5nLiwgaWYgaXQgaGFzIG1peGVkIGZhY2VzIG9mIGRpZmZl
cmluZyBoZWlnaHRzCnRoYXQgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCwgc3BlY2lmeSBhIGxhcmdl
ciBndWVzcyBpbmNyZW1lbnQuICBJZgpAY29kZXtuaWx9LCBndWVzc2luZyBpcyBkaXNhYmxlZCwg
d2hpY2ggd2lsbCBiZSBzbG93ZXIgZm9yIGxvbmdlcgp2YWx1ZXMuICBZb3UgY2FuIHByb3ZpZGUg
eW91ciBvd24gdHJ1bmNhdGlvbiBzdHJhdGVneSBpbiB5b3VyIGNvbHVtbgpAY29kZXtkaXNwbGF5
ZXJ9LgoKQGl0ZW0gbnVtZXJpYwpJZiBAY29kZXtudW1lcmljfSBpcyB1bnNwZWNpZmllZCwgbnVt
ZXJpYyBjb250ZW50IGlzIGluZmVycmVkIGJ5CnNjYW5uaW5nIGFsbCB2YWx1ZXMgaW4gYSBjb2x1
bW4uICBGb3IgdGFibGVzIHdpdGggYSBsYXJnZSBudW1iZXIgb2YKb2JqZWN0cywgaXQgaXMgbW9y
ZSBlZmZpY2llbnQgdG8gc3BlY2lmeSBudW1lcmljIGNvbnRlbnQgZXhwbGljaXRseS4KQGNvZGV7
dH0gaW5kaWNhdGVzIHRoYXQgeW91ciBjb2x1bW4ncyBkYXRhIGFyZSBudW1lcmljLiAgQGNvZGV7
bmlsfQppbmRpY2F0ZXMgdGhhdCB0aGUgY29sdW1uIGlzIG5vdCBudW1lcmljLiAgQGNvZGV7aW5m
ZXJ9IGlzIHRoZSBkZWZhdWx0LgoKQGl0ZW0gcHJpbWFyeQpXaGV0aGVyIHRoaXMgaXMgdGhlIHBy
aW1hcnkgY29sdW1uLS0tdGhpcyB3aWxsIGJlIHVzZWQgZm9yIGluaXRpYWwKc29ydGluZy4gIFRo
aXMgc2hvdWxkIGJlIGVpdGhlciBAY29kZXthc2NlbmR9IG9yIEBjb2Rle2Rlc2NlbmR9IHRvIHNh
eQppbiB3aGljaCBvcmRlciB0aGUgdGFibGUgc2hvdWxkIGJlIHNvcnRlZC4KCkBpdGVtIGdldHRl
cgpJZiBwcmVzZW50LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIHJldHVybiB0aGUg
Y29sdW1uIHZhbHVlLgoKQGRlZnVuIGNvbHVtbi1nZXR0ZXIgb2JqZWN0IHRhYmxlCkB2YXJ7b2Jq
ZWN0fSBpcyB0aGUgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcm93LiAgQHZhcnt0YWJsZX0g
aXMgdGhlCnZ0YWJsZSBpbnN0YW5jZS4KQGVuZCBkZWZ1bgoKQGl0ZW0gY29tcGFyYXRvcgpUaGlz
IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIGNvbXBhcmUgY29sdW1uIHZhbHVlcy4gIFVzZSB0
aGlzIHdoZW4KeW91ciBvYmplY3RzIGNvbnRhaW4gZGF0YSB0aGF0IG5lZWRzIG5vbi1udW1lcmlj
IG9yIHN0cmluZyBjb2xsYXRpb24sCmZvciBleGFtcGxlLCBkYXRlcy4gIEFub3RoZXIgY2FzZSB3
b3VsZCBiZSB3aGVyZSB5b3Ugd2FudCB0aGUgZXF1aXZhbGVudApvZiBAY29kZXtzb3J0LWZvbGQt
Y2FzZX0uCgpAZGVmdW4gY29tcGFyYXRvciB2YWx1ZTEgdmFsdWUyClRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkIHdpdGggdHdvIHZhbHVlcyB0byBjb21wYXJlLiAgVGhlIHJldHVybiB2YWx1ZQpzaG91
bGQgZm9sbG93IHRoZSBzZW1hbnRpY3Mgb2YgQGNvZGV7PH0gb3IsIEBjb2Rle3N0cmluZy1sZXNz
cH0uCkBlbmQgZGVmdW4KCkBpdGVtIGZvcm1hdHRlcgpJZiBwcmVzZW50LCB0aGlzIGZ1bmN0aW9u
IHdpbGwgYmUgY2FsbGVkIHRvIGZvcm1hdCB0aGUgdmFsdWUuCgpAZGVmdW4gY29sdW1uLWZvcm1h
dHRlciB2YWx1ZQpAdmFye3ZhbHVlfSBpcyB0aGUgY29sdW1uJ3MgcmF3IHZhbHVlIGZyb20gdGhl
IG9iamVjdCwgbm90IGl0cyBmb3JtYXR0ZWQKc3RyaW5nLgpAZW5kIGRlZnVuCgpAaXRlbSBkaXNw
bGF5ZXIKSWYgcHJlc2VudCwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBwcmVwYXJl
IHRoZSBmb3JtYXR0ZWQgdmFsdWUKZm9yIGRpc3BsYXkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBy
ZXR1cm4gYSBzdHJpbmcgd2l0aCB0aGUgdGFibGUgZmFjZQphcHBsaWVkLCBhbmQgYWxzbyBsaW1p
dCB0aGUgd2lkdGggb2YgdGhlIHN0cmluZyB0byB0aGUgZGlzcGxheSB3aWR0aCwgb3IKc2NhbGUg
aW1hZ2VzLiAgSW1hZ2VzIGNyZWF0ZWQgd2l0aCBAY29kZXs6c2NhbGV9IHNldCB0byAxLjAgKG9y
IHNtYWxsZXIpCndpbGwgYXV0byBzY2FsZSB0byB0aGUgaW1hZ2UgQGNvZGV7OndpZHRofSB3aGVu
IHRoYXQgaXMgc2V0IHRvCkB2YXJ7bWF4LXdpZHRofSBhcyBwYXNzZWQgdG8gdGhlIGRpc3BsYXll
ciBmdW5jdGlvbi4gIEEgc2NhbGUgb3ZlciAxLjAKd2lsbCBpbnRlcmZlcmUgd2l0aCB0aGUgdGFi
bGUncyBwaXhlbC1sZXZlbCBhbGlnbm1lbnQuCgpAZGVmdW4gY29sdW1uLWRpc3BsYXllciBmdmFs
dWUgbWF4LXdpZHRoIHRhYmxlCkB2YXJ7ZnZhbHVlfSBpcyB0aGUgZm9ybWF0dGVkIHZhbHVlLiAg
QHZhcnttYXgtd2lkdGh9IGlzIHRoZSBtYXhpbXVtCndpZHRoIGluIHBpeGVscy4gIEB2YXJ7dGFi
bGV9IGlzIHRoZSB2dGFibGUgaW5zdGFuY2UuCkBlbmQgZGVmdW4KCkBpdGVtIGFsaWduCkBpdGVt
eCBoZWFkZXItYWxpZ24KQ2FuIGJlIG9uZSBvZiBAY29kZXtyaWdodH0sIEBjb2Rle2xlZnR9LCBA
Y29kZXtjZW50ZXJ9LiAgSWYgbm90CnNwZWNpZmllZCwgbnVtZXJpY2FsIHZhbHVlcyB3aWxsIGJl
IGFsaWduZWQgdG8gdGhlIHJpZ2h0LCBhbmQgYWxsIG90aGVyCnZhbHVlcyB3aWxsIGJlIGFsaWdu
ZWQgdG8gdGhlIGxlZnQuICBJZiBAY29kZXtoZWFkZXItYWxpZ259IGlzIG5vdApzcGVjaWZpZWQs
IHRoZSBjb2x1bW4ncyBuYW1lIHdpbGwgYmUgYWxpZ25lZCB0aGUgc2FtZSB3YXkgYXMgaXRzIGRh
dGEuCgpAaXRlbSBleHRyYS1kYXRhClVzZSB0aGlzIHRvIGF0dGFjaCBhbnkgbGlzcCBvYmplY3Qs
IHNpbXBsZSBvciBjb21wbGV4LCB0byBhIGNvbHVtbidzCmRlZmluaXRpb24uICBZb3UgY2FuIGNv
bnN1bHQgdGhpcyBhZnRlciBjYWxsaW5nLCBmb3IgZXhhbXBsZSwKQGNvZGV7dnRhYmxlLWN1cnJl
bnQtY29sdW1ufSB0byByZXRyaWV2ZSB0aGUgY3VycmVudCBjb2x1bW4uCkBlbmQgdGFibGUKCkBp
dGVtIDpnZXR0ZXIKSWYgZ2l2ZW4sIHRoaXMgaXMgYSBmdW5jdGlvbiB0aGF0IHNob3VsZCByZXR1
cm4gdGhlIHZhbHVlcyB0byB1c2UgaW4KdGhlIHRhYmxlLCBhbmQgd2lsbCBiZSBjYWxsZWQgb25j
ZSBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSB0YWJsZQoodW5sZXNzIG92ZXJyaWRkZW4gYnkgYSBj
b2x1bW4gZ2V0dGVyIGZ1bmN0aW9uKS4KCkBkZWZ1biBnZXR0ZXIgb2JqZWN0IGNvbHVtbi1pbmRl
eCB0YWJsZQpAdmFye29iamVjdH0gaXMgdGhlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHJv
dy4gIEB2YXJ7Y29sdW1uLWluZGV4fQppcyB0aGUgMC1iYXNlZCBjb2x1bW4gaW5kZXggd2hpY2gg
eW91IGNhbiBkZXJlZmVyZW5jZSB1c2luZwp0aGUgZnVuY3Rpb24gQGNvZGV7dnRhYmxlLWNvbHVt
bnN9LiAgQHZhcnt0YWJsZX0gaXMgdGhlIHZ0YWJsZSBpbnN0YW5jZS4KCkZvciBhIHNpbXBsZSBv
YmplY3QgKGxpa2UgYSBzZXF1ZW5jZSksIHRoaXMgZnVuY3Rpb24gd2lsbCB0eXBpY2FsbHkganVz
dApyZXR1cm4gdGhlIGVsZW1lbnQgY29ycmVzcG9uZGluZyB0byB0aGUgMC1iYXNlZCBjb2x1bW4g
aW5kZXgsIGJ1dCB0aGUKZnVuY3Rpb24gY2FuIGRvIGFueSBjb21wdXRhdGlvbiBpdCB3YW50cy4g
IElmIGl0J3MgbW9yZSBjb252ZW5pZW50IHRvCndyaXRlIHRoZSBmdW5jdGlvbiBiYXNlZCBvbiBj
b2x1bW4gbmFtZXMgcmF0aGVyIHRoYW4gdGhlIGNvbHVtbiBpbmRleCwKdGhlIEBjb2Rle3Z0YWJs
ZS1jb2x1bW59IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIG1hcCBmcm9tIGluZGV4IHRvIG5hbWUu
CkBlbmQgZGVmdW4KCkBpdGVtIDpmb3JtYXR0ZXIKSWYgcHJlc2VudCwgdGhpcyBpcyBhIGZ1bmN0
aW9uIHRoYXQgc2hvdWxkIGZvcm1hdCB0aGUgdmFsdWUsIGFuZCBpdAp3aWxsIGJlIGNhbGxlZCBv
biBhbGwgdmFsdWVzIGluIHRoZSB0YWJsZSAodW5sZXNzIG92ZXJyaWRkZW4gYnkgYQpjb2x1bW4g
Zm9ybWF0dGVyKS4KCkBkZWZ1biBmb3JtYXR0ZXIgdmFsdWUgY29sdW1uLWluZGV4IHRhYmxlCkB2
YXJ7dmFsdWV9IGlzIHRoZSBjb2x1bW4ncyByYXcgdmFsdWUgZnJvbSB0aGUgb2JqZWN0LCBub3Qg
aXRzIGZvcm1hdHRlZApzdHJpbmcuICBAdmFye2NvbHVtbi1pbmRleH0gaXMgdGhlIDAtYmFzZWQg
Y29sdW1uIGluZGV4IHdoaWNoIHlvdSBjYW4KZGVyZWZlcmVuY2UgdXNpbmcgdGhlIGZ1bmN0aW9u
IEBjb2Rle3Z0YWJsZS1jb2x1bW5zfS4gIEB2YXJ7dGFibGV9IGlzCnRoZSB2dGFibGUgaW5zdGFu
Y2UuCgpUaGlzIGNhbiBiZSB1c2VkIHRvIChmb3IgaW5zdGFuY2UpIGZvcm1hdCBudW1iZXJzIGlu
IGEgaHVtYW4tcmVhZGFibGUKZm9ybSBhbmQgY2FuIHJldHVybiBhbnkgdmFsdWUuCkBlbmQgZGVm
dW4KCkBpdGVtIDpkaXNwbGF5ZXIKQmVmb3JlIGRpc3BsYXlpbmcgYW4gZWxlbWVudCwgaXQncyBw
YXNzZWQgdG8gdGhlIGRpc3BsYXlpbmcgZnVuY3Rpb24KKGlmIGFueSkuCgpAZGVmdW4gZGlzcGxh
eWVyIGZ2YWx1ZSBjb2x1bW4taW5kZXggbWF4LXdpZHRoIHRhYmxlCkB2YXJ7ZnZhbHVlfSBpcyB0
aGUgZm9ybWF0dGVkIHZhbHVlLiAgQHZhcntjb2x1bW4taW5kZXh9IGlzIHRoZSAwLWJhc2VkCmNv
bHVtbiBpbmRleCB3aGljaCB5b3UgY2FuIGRlcmVmZXJlbmNlIHVzaW5nIHRoZSBmdW5jdGlvbgpA
Y29kZXt2dGFibGUtY29sdW1uc30uICBAdmFye21heC13aWR0aH0gaXMgdGhlIG1heGltdW0gd2lk
dGggaW4gcGl4ZWxzCihhZGp1c3QgeW91ciByZXR1cm4gdmFsdWUgdG8gYmUgbGVzcyB0aGFuIG9y
IGVxdWFsIHRvIHRoaXMgd2lkdGgpLgpAdmFye3RhYmxlfSBpcyB0aGUgdnRhYmxlIGluc3RhbmNl
LgoKVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgc3RyaW5nIHdpdGggdGhlIHRhYmxlIGZh
Y2UgYXBwbGllZCAoaWYgbm90CmFscmVhZHkgYXBwbGllZCBieSB0aGUgZm9ybWF0dGVyKSwgYW5k
IHRydW5jYXRlZCB0byBAdmFye21heC13aWR0aH0uCgpUaGlzIGNhbiBiZSB1c2VkIHRvIChmb3Ig
aW5zdGFuY2UpIGNoYW5nZSB0aGUgc2l6ZSBvZiBpbWFnZXMgdGhhdCBhcmUKZGlzcGxheWVkIGlu
IHRoZSB0YWJsZS4gIEltYWdlcyBjcmVhdGVkIHdpdGggQGNvZGV7OnNjYWxlfSBzZXQgdG8gMS4w
CihvciBzbWFsbGVyKSB3aWxsIGF1dG8gc2NhbGUgdG8gdGhlIGltYWdlIEBjb2Rlezp3aWR0aH0g
d2hlbiB0aGF0IGlzIHNldAp0byBAdmFye21heC13aWR0aH0gYXMgcGFzc2VkIHRvIHRoZSBkaXNw
bGF5ZXIgZnVuY3Rpb24uICBBIHNjYWxlIG92ZXIKMS4wIHdpbGwgaW50ZXJmZXJlIHdpdGggdGhl
IHRhYmxlJ3MgcGl4ZWwtbGV2ZWwgYWxpZ25tZW50LgpAZW5kIGRlZnVuCgpAaXRlbSA6dXNlLWhl
YWRlci1saW5lCklmIG5vbi1AY29kZXtuaWx9ICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIGRpc3Bs
YXkgdGhlIGNvbHVtbiBuYW1lcyBvbgp0aGUgaGVhZGVyLWxpbmUuICBUaGlzIGlzIHRoZSBtb3N0
IGNvbW1vbiB1c2UgY2FzZSwgYnV0IGlmIHRoZXJlIGlzCm90aGVyIHRleHQgaW4gdGhlIGJ1ZmZl
ciBiZWZvcmUgdGhlIHRhYmxlLCBvciB0aGVyZSBhcmUgc2V2ZXJhbCB0YWJsZXMKaW4gdGhlIHNh
bWUgYnVmZmVyLCB0aGVuIHRoaXMgc2hvdWxkIGJlIEBjb2Rle25pbH0uCgpJZiB0aGUgaGVhZGVy
LWxpbmUgaXMgdXNlZCBieSBhIG1vZGUgaW4geW91ciBidWZmZXIsIHVzZSBAY29kZXtuaWx9IHRv
CmF2b2lkIGNvbXBldGluZyBvdmVyIHRoZSBoZWFkZXItbGluZS4KCklmIGhvcml6b250YWwgc2Ny
b2xsaW5nIGlzIGVuYWJsZWQgYW5kIHRoZSB0YWJsZSdzIGJ1ZmZlciB3aWxsIG5vdCBmaXQKaW4g
dGhlIHdpZHRoIG9mIGl0cyB3aW5kb3csIHRoZSBoZWFkZXItbGluZSB3aWxsIG5vdCBzY3JvbGwg
aG9yaXpvbnRhbGx5CndpdGggdGhlIHRhYmxlLCBzbyB1c2UgQGNvZGV7bmlsfS4gIEFsdGVybmF0
aXZlbHksIHlvdSBjYW4gZGlzYWJsZQpAY29kZXthdXRvLWhzY3JvbGwtbW9kZX0gaW4gdGhhdCBi
dWZmZXIuCgpAaXRlbSA6ZmFjZQpUaGUgdGFibGUgYm9keSBmYWNlIGRlZmF1bHRzIHRvIEBjb2Rl
e3Z0YWJsZX0uICBUaGlzIGlzIGFwcGVuZGVkIHRvCmZhY2VzIHRoYXQgbWF5IGJlIGFkZGVkIGJ5
IGdldHRlciBhbmQgZm9ybWF0dGVyIGZ1bmN0aW9ucy4KCkBpdGVtIDpoZWFkZXItZmFjZQpUaGUg
dGFibGUgaGVhZGVyIGZhY2UgZGVmYXVsdHMgdG8gQGNvZGV7dnRhYmxlLWhlYWRlcn0sIGluaGVy
aXRpbmcKQGNvZGV7aGVhZGVyLWxpbmV9IGFuZCBAY29kZXt2dGFibGV9LiAgVGhpcyBpcyBhcHBl
bmRlZCB0byBhbnkgZmFjZXMKZGVmaW5lZCBpbiB5b3VyIGNvbHVtbi1uYW1lIHN0cmluZ3MuCgpA
aXRlbSA6bWFya2VkLWZhY2UKVGhlIG1hcmtlZCBvYmplY3QgZmFjZSBkZWZhdWx0cyB0byBAY29k
ZXt2dGFibGUtbWFya2VkfSwgaW5oZXJpdGluZwpAY29kZXtyZWdpb259IGFuZCBAY29kZXt2dGFi
bGV9LiAgVGhpcyBmYWNlIGlzIGFkZGVkIHRvIHRoZSBlbnRpcmUgbGluZS4KCkBpdGVtIDpyb3ct
Y29sb3JzCklmIHByZXNlbnQsIHRoaXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBjb2xvciBuYW1lcyB0
byBiZSB1c2VkIGFzIHRoZQpiYWNrZ3JvdW5kIGNvbG9yIG9uIHRoZSByb3dzLiAgSWYgdGhlcmUg
YXJlIGZld2VyIGNvbG9ycyBoZXJlIHRoYW4KdGhlcmUgYXJlIHJvd3MsIHRoZSByb3dzIHdpbGwg
YmUgcmVwZWF0ZWQuICBUaGUgbW9zdCBjb21tb24gdXNlCmNhc2UgaGVyZSBpcyB0byBoYXZlIGFs
dGVybmF0aW5nIGJhY2tncm91bmQgY29sb3JzIG9uIHRoZSByb3dzLCBzbwp0aGlzIHdvdWxkIHVz
dWFsbHkgYmUgYSBsaXN0IG9mIHR3byBjb2xvcnMuICBUaGlzIGNhbiBhbHNvIGJlIGEgbGlzdApv
ZiBmYWNlcyB0byBiZSB1c2VkLgoKQGl0ZW0gOmNvbHVtbi1jb2xvcnMKSWYgcHJlc2VudCwgdGhp
cyBzaG91bGQgYmUgYSBsaXN0IG9mIGNvbG9yIG5hbWVzIHRvIGJlIHVzZWQgYXMgdGhlCmJhY2tn
cm91bmQgY29sb3Igb24gdGhlIGNvbHVtbnMuICBJZiB0aGVyZSBhcmUgZmV3ZXIgY29sb3JzIGhl
cmUgdGhhbgp0aGVyZSBhcmUgY29sdW1ucywgdGhlIGNvbG9ycyB3aWxsIGJlIHJlcGVhdGVkLiAg
VGhlIG1vc3QgY29tbW9uIHVzZQpjYXNlIGhlcmUgaXMgdG8gaGF2ZSBhbHRlcm5hdGluZyBiYWNr
Z3JvdW5kIGNvbG9ycyBvbiB0aGUgY29sdW1ucywgc28KdGhpcyB3b3VsZCB1c3VhbGx5IGJlIGEg
bGlzdCBvZiB0d28gY29sb3JzLiAgVGhpcyBjYW4gYWxzbyBiZSBhIGxpc3QKb2YgZmFjZXMgdG8g
YmUgdXNlZC4gIElmIGJvdGggQGNvZGV7OnJvdy1jb2xvcnN9IGFuZApAY29kZXs6Y29sdW1uLWNv
bG9yc30gaXMgcHJlc2VudCwgdGhlIGNvbG9ycyB3aWxsIGJlIGBgYmxlbmRlZCcnIHRvCnByb2R1
Y2UgdGhlIGZpbmFsIGNvbG9ycyBpbiB0aGUgdGFibGUuCgpAaXRlbSA6cm93LWNvbG9yLWZ1bmN0
aW9uCkEgZnVuY3Rpb24gdG8gY29udHJvbCByb3cgY29sb3JzIHByb2dyYW1tYXRpY2FsbHkuCgpA
ZGVmdW4gcm93LWNvbG9yLWZ1bmN0aW9uIHJvdy1pbmRleCBvYmplY3Qgcm93LWNvbG9ycwpAdmFy
e3Jvdy1pbmRleH0gaXMgdGhlIDAtYmFzZWQgcm93IG51bWJlci4gIEB2YXJ7b2JqZWN0fSBpcyB0
aGUgb2JqZWN0CmFzc29jaWF0ZWQgd2l0aCB0aGUgcm93LiAgQHZhcntyb3ctY29sb3JzfSBhcmUg
dGhlIGNvbG9ycyBtaXhlZCBmcm9tCkBjb2Rlezpyb3ctY29sb3JzfSBhbmQgQGNvZGV7OmNvbHVt
bi1jb2xvcnN9LCBpZiBzcGVjaWZpZWQsIHdoaWNoIHlvdQpjYW4gaWdub3JlIGlmIHlvdSBjb21w
dXRlIGNvbG9ycyBzZXBhcmF0ZWx5LiAgUmV0dXJuIGEgZmFjZSB0ZXh0CnByb3BlcnR5IHRvIGFk
ZCB0byB0aGUgbGluZS4KQGVuZCBkZWZ1bgoKQGl0ZW0gOmNvbHVtbi1jb2xvci1mdW5jdGlvbgpB
IGZ1bmN0aW9uIHRvIGNvbnRyb2wgY29sdW1uIGNvbG9ycyBwcm9ncmFtbWF0aWNhbGx5LgoKQGRl
ZnVuIGNvbHVtbi1jb2xvci1mdW5jdGlvbiByb3ctaW5kZXggY29sdW1uLWluZGV4IHZhbHVlIG9i
amVjdCBjb2x1bW4tY29sb3JzCkB2YXJ7cm93LWluZGV4fSBpcyB0aGUgMC1iYXNlZCByb3cgbnVt
YmVyLiAgQHZhcntjb2x1bW4taW5kZXh9IGlzIHRoZQowLWJhc2VkIGNvbHVtbiBpbmRleCB3aGlj
aCB5b3UgY2FuIGRlcmVmZXJlbmNlIHVzaW5nIHRoZSBmdW5jdGlvbgpAY29kZXt2dGFibGUtY29s
dW1uc30uICBAdmFye3ZhbHVlfSBpcyB0aGUgY29sdW1uJ3MgcmF3IHZhbHVlIGZyb20gdGhlCm9i
amVjdCwgbm90IGl0cyBmb3JtYXR0ZWQgc3RyaW5nLiAgQHZhcntvYmplY3R9IGlzIHRoZSBvYmpl
Y3QgYXNzb2NpYXRlZAp3aXRoIHRoZSByb3cuICBAdmFye2NvbHVtbi1jb2xvcnN9IGlzIHRoZSBw
cmUtY29tcHV0ZWQgY29sdW1uIGNvbG9yCm1peGVkIGZyb20gQGNvZGV7OnJvdy1jb2xvcnN9IGFu
ZCBAY29kZXs6Y29sdW1uLWNvbG9yc30sIGlmIHNwZWNpZmllZCwKd2hpY2ggeW91IGNhbiBpZ25v
cmUgaWYgeW91IGNvbXB1dGUgY29sb3JzIHNlcGFyYXRlbHkuICBSZXR1cm4gYSBmYWNlCnRleHQg
cHJvcGVydHkgdG8gYWRkIHRvIHRoZSBjb2x1bW4ncyB0ZXh0IHByb3BlcnRpZXMuCkBlbmQgZGVm
dW4KCkBpdGVtIDphY3Rpb25zClRoaXMgdXNlcyB0aGUgc2FtZSBzeW50YXggYXMgQGNvZGV7ZGVm
aW5lLWtleW1hcH0sIGJ1dCBkb2Vzbid0IHJlZmVyCnRvIGNvbW1hbmRzIGRpcmVjdGx5LiAgSW5z
dGVhZCBlYWNoIGtleSBpcyBib3VuZCB0byBhIGNvbW1hbmQgdGhhdApwaWNrcyBvdXQgdGhlIGN1
cnJlbnQgb2JqZWN0LCBhbmQgdGhlbiBjYWxscyB0aGUgZnVuY3Rpb24gc3BlY2lmaWVkCndpdGgg
dGhhdCBhcyB0aGUgYXJndW1lbnQuCgpAaXRlbSA6a2V5bWFwClRoaXMgaXMgYSBrZXltYXAgdXNl
ZCBvbiB0aGUgdGFibGUuICBUaGUgY29tbWFuZHMgaGVyZSBhcmUgY2FsbGVkIGFzCnVzdWFsLCBh
bmQgaWYgdGhleSdyZSBzdXBwb3NlZCB0byB3b3JrIG9uIHRoZSBvYmplY3QgZGlzcGxheWVkIG9u
IHRoZQpjdXJyZW50IGxpbmUsIHRoZXkgY2FuIHVzZSB0aGUgQGNvZGV7dnRhYmxlLWN1cnJlbnQt
b2JqZWN0fSBmdW5jdGlvbgooQHB4cmVme0ludGVyZmFjZSBGdW5jdGlvbnN9KSB0byBkZXRlcm1p
bmUgd2hhdCB0aGF0IG9iamVjdCBpcy4KCkBpdGVtIDp1c2UtbmF2aWdhdGlvbi1rZXltYXAKQWRk
IHNldmVyYWwgcHJlZGVmaW5lZCBuYXZpZ2F0aW9uIGFjdGlvbnMgdG8gQGNvZGV7OmtleW1hcH0u
ICBUaGVzZQppbmNsdWRlIGNvbnZlbmllbmNlIG1hcHBpbmdzIGZvciBtb3ZpbmcgcG9pbnQgdG8g
dGhlIG5leHQgYW5kIHByZXZpb3VzCmxpbmVzLCB0byB0aGUgYmVnaW5uaW5nIG9yIGVuZCBvZiB0
aGUgdGFibGUsIHRvIG1vdmUgcG9pbnQgdG8gdGhlIG5leHQKb3IgcHJldmlvdXMgdnRhYmxlIGlu
IHRoZSBidWZmZXIsIGFuZCB0byBgcXVpdGAgdGhlIHRhYmxlIGNvbnN1bHRpbmcKQGNvZGV7OmNs
b3NlLWFjdGlvbn0uCgpAaXRlbSA6Y2xvc2UtYWN0aW9uClRoZSBkZWZhdWx0IHRhYmxlIGNsb3Nl
IGFjdGlvbiwgaW5pdGlhdGVkIHdpdGggdGhlIGBgcScnIGtleSBpbiB0aGUKbmF2aWdhdGlvbiBr
ZXltYXAsIHdoaWNoIGRlZmF1bHRzIHRvIEBjb2Rle2J1cnktYnVmZmVyfS4gIFRoaXMgY2FuIGFs
c28KYmUgQGNvZGV7cXVpdC13aW5kb3d9LCBAY29kZXtxdWl0LXdpbmRvdy1raWxsfSwgYSBmdW5j
dGlvbiBvZiB5b3VyIG93bi4KCkBpdGVtIDpzZXBhcmF0b3Itd2lkdGgKVGhlIHdpZHRoIG9mIHRo
ZSBibGFuayBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMuICBJZiBub3Qgc3BlY2lmaWVkLCBpdApkZWZh
dWx0cyB0byAxIGNoYXJhY3RlcidzIHdpZHRoIGluIHRoZSB0YWJsZSdzIGZhY2UuCgpAaXRlbSA6
ZGl2aWRlci13aWR0aApAaXRlbXggOmRpdmlkZXIKWW91IGNhbiBoYXZlIGEgZGl2aWRlciBpbnNl
cnRlZCBiZXR3ZWVuIHRoZSBjb2x1bW5zLiAgVGhpcyBjYW4gZWl0aGVyIGJlCnNwZWNpZmllZCBi
eSB1c2luZyBAY29kZXs6ZGl2aWRlcn0sIHdoaWNoIHNob3VsZCBiZSBhIHN0cmluZyB0byBiZQpk
aXNwbGF5ZWQgYmV0d2VlbiB0aGUgY29sdW1ucywgb3IgQGNvZGV7OmRpdmlkZXItd2lkdGh9LCB3
aGljaCBzcGVjaWZpZXMKdGhlIHdpZHRoIG9mIHRoZSBzcGFjZSB0byBiZSB1c2VkIGFzIHRoZSBk
aXZpZGVyLCBpbiB1bml0cyBvZiBjaGFyYWN0ZXJzCm9mIHRoZSBmYWNlIHVzZWQgdG8gZGlzcGxh
eSB0aGUgdGFibGUuICBJZiBub3Qgc3BlY2lmaWVkLApAY29kZXs6ZGl2aWRlcn0gZGVmYXVsdHMg
dG8gQGNvZGV7bmlsfSwgYnV0IHNwZWNpZnlpbmcKQGNvZGV7OmRpdmlkZXItd2lkdGh9IGVmZmVj
dGl2ZWx5IHNldHMgdGhlIGRpdmlkZXIgdG8gYSB3aGl0ZXNwYWNlCnN0cmluZyBvZiB0aGF0IHdp
ZHRoLgoKQGl0ZW0gOmRpdmlkZXItb24taGVhZGVyCklmIG5vbi1AY29kZXtuaWx9LCBkaXNwbGF5
IGRpdmlkZXJzIG9uIHRoZSB0YWJsZSdzIGhlYWRlciBsaW5lLiAgVGhlCmRlZmF1bHQgaXMgQGNv
ZGV7bmlsfS4KCkBpdGVtIDpoZWFkZXItaW50YW5naWJsZQpJZiBub24tQGNvZGV7bmlsfSwgZW5h
YmxlcyBAY29kZXtjdXJzb3ItaW50YW5naWJsZS1tb2RlfSB0byBwcmV2ZW50CnBvaW50IGZyb20g
ZW50ZXJpbmcgYSBoZWFkZXIgbGluZSBpbnNlcnRlZCBpbnRvIHRoZSBidWZmZXIuICBUaGlzIGhh
cyBubwplZmZlY3Qgd2hlbiBAY29kZXs6dXNlLWhlYWRlci1saW5lfSBpcyBub24tQGNvZGV7bmls
fS4gIFRoZSBkZWZhdWx0IGlzCkBjb2Rle25pbH0uCgpAaXRlbSA6ZGVjb3ItaW50YW5naWJsZQpJ
ZiBub24tQGNvZGV7bmlsfSwgZW5hYmxlcyBAY29kZXtjdXJzb3ItaW50YW5naWJsZS1tb2RlfSB0
byBwcmV2ZW50CnBvaW50IGZyb20gZW50ZXJpbmcgdGhlIGFuY2lsbGFyeSBkZWNvcmF0aXZlIGNo
YXJhY3RlcnMgYWRkZWQgYXMKcGFkZGluZywgc3BhY2luZywgb3IgdGhlIGRpdmlkZXIuICBUaGUg
ZGVmYXVsdCBpcyBAY29kZXtuaWx9LgoKQGl0ZW0gOnRleHQtc2NhbGUtcmVkcmF3CklmIEBjb2Rl
e3R9LCB0aGUgZGVmYXVsdCwgdGhlIHZ0YWJsZSBidWZmZXIgcmVhY3RzIHRvIHRleHQtc2NhbGUg
Y2hhbmdlcwp2aWEgQGNvZGV7dGV4dC1zY2FsZS1tb2RlfSwgaWYgZW5hYmxlZC4gIEJpbmQgdGhp
cyB0byBub24tQGNvZGV7bmlsfSwgaWYKeW91IHdhbnQgdG8gaW5oaWJpdCByZWRyYXdpbmcsIGFz
IG1pZ2h0IGJlIHVzZWZ1bCBmb3IgdmVyeSBsYXJnZQp2dGFibGVzLiAgSW4gdGhhdCBjYXNlLCBm
aXhlZC1zaXplIGZvbnRzIGFyZSByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhhdAphbGlnbm1lbnQg
aXMgcHJlc2VydmVkLiAgTm90ZTogQGNvZGV7dGV4dC1zY2FsZS1tb2RlfSBpcyBidWZmZXItd2lk
ZS4KVGhlIHRoZSBmaXJzdCB2dGFibGUsIHdpdGggdGhpcyBvcHRpb24gc3BlY2lmaWVkLCBpbnNl
cnRlZCBpbnRvIGEgYnVmZmVyCmlzIHRoZSB0YWJsZSB0aGF0IGRyaXZlcyByZWRyYXdzIGFjY29y
ZGluZyB0byBpdHMKQGNvZGV7cmVzaXplLWRlYm91bmNlLWludGVydmFsfS4KCkBpdGVtIDp0ZXh0
LXNjYWxlLWhlYWRlci1saW5lCklmIG5vbi1AY29kZXtuaWx9LCB3aGVuIEBjb2Rle3RleHQtc2Nh
bGUtbW9kZX0gaXMgZW5hYmxlZCBpbiB0aGUgdnRhYmxlCmJ1ZmZlciwgYWxzbyBzY2FsZSB0aGUg
QGNvZGV7aGVhZGVyLWxpbmV9IGZhY2UgYWxvbmcgd2l0aCB0aGUgYnVmZmVyCmJvZHkgZmFjZS4g
IFRoaXMga2VlcHMgdGhlIGhlYWRlciBsaW5lIGFsaWduZWQgd2l0aCB0aGUgYm9keSBhcyB0aGUK
YnVmZmVyJ3MgdGV4dCBzY2FsZSBjaGFuZ2VzLiAgVGhlIGRlZmF1bHQgaXMgQGNvZGV7bmlsfS4g
IElmIHRoZQpAY29kZXs6aGVhZGVyLWZhY2V9IGRvZXMgbm90IGluY2x1ZGUgdGhlIGZhY2UgQGNv
ZGV7aGVhZGVyLWxpbmV9LCB0aGlzCmhhcyBubyBlZmZlY3QuCgpAaXRlbSA6cmVzaXplLWRlYm91
bmNlLWludGVydmFsCnZ0YWJsZSBjb2FsZXNjZXMgcmVwZWF0ZWQgdGFibGUgcmVzaXplIGV2ZW50
cyB0aGF0IG9jY3VyIHdpdGhpbiB0aGlzCmludGVydmFsIHNwZWNpZmllZCBpbiB1bml0cyBvZiBk
ZWNpbWFsIHNlY29uZHMsIGFuZCB3aGljaCBkZWZhdWx0cyB0bwowLjE1LiAgVGhlc2UgZXZlbnRz
IG9jY3VyLCBmb3IgZXhhbXBsZSwgd2hlbiBkcmFnZ2luZyBhIGZyYW1lIGVkZ2UgdG8KcmVzaXpl
IGl0LiAgSWYgbXVsdGlwbGUgdnRhYmxlcyBhcmUgaW5zZXJ0ZWQgaW50byBhIGJ1ZmZlciwgdGhl
eSB3aWxsCmFsbCBiZSByZWRyYXduLiAgSW5jcmVhc2UgdGhpcyB2YWx1ZSBhcyBuZWVkZWQgdG8g
aW1wcm92ZSBwZXJmb3JtYW5jZS4KTm90ZTogUmVzaXppbmcgdnRhYmxlcyBpcyBhIGlzIGJ1ZmZl
ci13aWRlIG9wZXJhdGlvbi4gIFRoZSB0aGUgZmlyc3QKdnRhYmxlLCB3aXRoIHRoaXMgb3B0aW9u
IHNwZWNpZmllZCwgaW5zZXJ0ZWQgaW50byBhIGJ1ZmZlciBpcyB0aGUgdGFibGUKdGhhdCBkcml2
ZXMgcmVkcmF3cy4KCkBpdGVtIDpzb3J0LWJ5ClRoaXMgc2hvdWxkIGJlIGEgbGlzdCBvZiB0dXBs
ZXMsIGFuZCBzcGVjaWZpZXMgaG93IHRoZSB0YWJsZSBpcyB0byBiZQpzb3J0ZWQuICBFYWNoIHR1
cGxlIHNob3VsZCBjb25zaXN0IG9mIGFuIGludGVnZXIgKHRoZSBjb2x1bW4gaW5kZXgpCmFuZCBl
aXRoZXIgQGNvZGV7YXNjZW5kfSBvciBAY29kZXtkZXNjZW5kfS4KClRoZSB0YWJsZSBpcyBmaXJz
dCBzb3J0ZWQgYnkgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhpcyBsaXN0LCBhbmQgdGhlbgp0aGUg
bmV4dCwgdW50aWwgdGhlIGVuZCBpcyByZWFjaGVkLgoKQGl0ZW0gOnNvcnQtaW5kaWNhdG9yClRo
aXMgaXMgYSBsaXN0IG9mIHR3byBjb25zIGNlbGxzIHRoYXQgc3BlY2lmeSB0aGUgc29ydCBhc2Nl
bmRpbmcgYW5kCmRlc2NlbmRpbmcgY2hhcmFjdGVycyB0aGF0IGFyZSBzaG93biBvbiB0aGUgdGFi
bGUgaGVhZGVyIHRvIGluZGljYXRlIGEKc29ydGVkIGNvbHVtbi4gIFRoZSBmaXJzdCBjaGFyYWN0
ZXIgaXMgdGhlIGZhbmNpZXIgYGBncmFwaGljYWwnJwpjaGFyYWN0ZXIsIGFuZCB0aGUgc2Vjb25k
IGEgdGV4dC1vbmx5IGNoYXJhY3Rlci4gIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIKY2Fubm90IGJl
IGRpc3BsYXllZCBvbiB0aGUgc2VsZWN0ZWQgZnJhbWUsIHRoZSB0YWJsZSB3aWxsIHNob3cgdGhl
CnRleHQtb25seSBjaGFyYWN0ZXIuICBUaGUgZGVmYXVsdCBpcwpAY29kZXt2dGFibGUtc29ydC1p
bmRpY2F0b3ItZGVmYXVsdH0uICBGb3IgZXhhbXBsZToKCkBsaXNwCicoKD9EID92KSAoP1UgP14p
KSA7IEQgZm9yIGRvd24sIFUgZm9yIHVwLgpAZW5kIGxpc3AKCkBpdGVtIDpzb3J0LWluZGljYXRv
ci1mYWNlLWFzY2VuZApAaXRlbXggOnNvcnQtaW5kaWNhdG9yLWZhY2UtZGVzY2VuZApUaGVzZSBm
YWNlcyBhcmUgYWRkZWQgdG8gdGhlIGluZGljYXRvcnMgZm9yIGFzY2VuZGluZyBvciBkZXNjZW5k
aW5nCnNvcnRlZCBjb2x1bW5zIG9uIHRoZSB0YWJsZSBoZWFkZXIuICBZb3UgY2FuLCBmb3IgZXhh
bXBsZSwgbWFrZSB0aGUKYXNjZW5kaW5nIGluZGljYXRvciBncmVlbiBhbmQgdGhlIGRlc2NlbmRp
bmcgaW5kaWNhdG9yIHJlZCBieSBzcGVjaWZ5aW5nCnRoZXNlIGZhY2VzLiAgVGhlc2UgZGVmYXVs
dCB0byBAY29kZXt2dGFibGUtc29ydC1pbmRpY2F0b3ItYXNjZW5kfQpAY29kZXt2dGFibGUtc29y
dC1pbmRpY2F0b3ItZGVzY2VuZH0sIGFuZCBib3RoIGluaGVyaXQgZnJvbQpAY29kZXt2dGFibGUt
aGVhZGVyfS4gIElmIHlvdSB1c2UgYSBjdXN0b20gQGNvZGV7OmhlYWRlci1mYWNlfSwgdGhlc2UK
ZmFjZXMgc2hvdWxkIGluaGVyaXQgdGhhdCBvciBvdGhlcndpc2UgdXNlIHRoZSBzYW1lIGZvbnQg
dG8gZW5zdXJlCmFsaWdubWVudC4KCkBpdGVtIDplbGxpcHNpcwpCeSBkZWZhdWx0LCB3aGVuIHRy
dW5jYXRpbmcgdG9vLXdpZGUgZGlzcGxheWVkIHZhbHVlcywgYW4gZWxsaXBzaXMgd2lsbAphcHBl
bmRlZCB0byB0aGUgc2hvcnRlbmVkIHZhbHVlLiAgSWYgdGhpcyBpcyBAY29kZXtuaWx9LCBubyBl
bGxpcHNpcyBpcwpzaG93bi4gIElmIG5vbi1AY29kZXtuaWx9LCB1c2UgdGhlIHNwZWNpZmllZCBz
dHJpbmcuICBUaGUgZGVmYXVsdAp2YWx1ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBAY29kZXt0cnVu
Y2F0ZS1zdHJpbmctZWxsaXBzaXN9IGZ1bmN0aW9uLgoKQGl0ZW0gOmhlYWRlci10ZXh0LXByb3Bl
cnRpZXMKQSBsaXN0IG9mIHRleHQgcHJvcGVydGllcyB0byBhc3NpZ24gdG8gdGhlIGhlYWRlciB3
aGVuIHJlbmRlcmluZyB0aGUKdGFibGUuICBUaGlzIGhhcyBubyBlZmZlY3QgaWYgQGNvZGV7OnVz
ZS1oZWFkZXItbGluZX0gaXMgQGNvZGV7bmlsfS4KCkBpdGVtIDpyb3ctdGV4dC1wcm9wZXJ0aWVz
CkEgbGlzdCBvZiB0ZXh0IHByb3BlcnRpZXMgdG8gYXNzaWduIHRvIGVhY2ggcm93IHdoZW4gcmVu
ZGVyaW5nIHRoZQp0YWJsZS4gIFRoaXMgY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhZGQg
QGNvZGV7bW91c2UtZmFjZX0gb3IKQGNvZGV7Y3Vyc29yLWZhY2V9IHRvIGVhY2ggcm93LgoKQGl0
ZW0gOnB1bHNlClRoaXMgaXMgYSBsaXN0IG9mIHZ0YWJsZSBvYmplY3QgdXBkYXRlIGFjdGlvbnMu
ICBUaGUgdmFsdWVzIGNhbiBpbmNsdWRlCnRoZSBzeW1ib2xzIEBjb2Rle2luc2VydH0sIEBjb2Rl
e3VwZGF0ZX0sIEBjb2Rle3JlbW92ZX0uICBFYWNoIGFjdGlvbgptb21lbnRhcmlseSBgcHVsc2Vz
YCB0aGUgYWZmZWN0ZWQgc2NyZWVuIGxpbmUuICBUaGlzIGRlZmF1bHRzIHRvCkBjb2Rle25pbH0s
IGFuZCB3aWxsIG5vdCBwdWxzZS4KCkBpdGVtIDpwdWxzZS1mdW5jdGlvbgpUaGUgZnVuY3Rpb24g
dGhhdCBpcyBpbnZva2VkIHRvIHB1bHNlIGEgbGluZSB3aGVuIGNvbnN1bHRpbmcKQGNvZGV7OnB1
bHNlfS4gIEl0IGRlZmF1bHRzIHRvCkBjb2Rle3B1bHNlLW1vbWVudGFyeS1oaWdobGlnaHQtb25l
LWxpbmV9LgoKQGZpbmRleCB2dGFibGUtZXh0cmEtZGF0YQpAaXRlbSA6ZXh0cmEtZGF0YQpVc2Ug
dGhpcyB0byBhdHRhY2ggYW55IGxpc3Agb2JqZWN0LCBzaW1wbGUgb3IgY29tcGxleCwgdG8gYSB0
YWJsZQpkZWZpbml0aW9uLiAgWW91IGNhbiBjb25zdWx0IHRoaXMgYnkgY2FsbGluZyBhZnRlciBj
YWxsaW5nCkBjb2Rle3Z0YWJsZS1leHRyYS1kYXRhfS4KCkBmaW5kZXggdnRhYmxlLWluc2VydApA
aXRlbSA6aW5zZXJ0CkJ5IGRlZmF1bHQsIEBjb2Rle21ha2UtdnRhYmxlfSB3aWxsIGluc2VydCB0
aGUgdGFibGUgYXQgcG9pbnQuICBJZiB0aGlzCmlzIEBjb2Rle25pbH0sIG5vdGhpbmcgaXMgaW5z
ZXJ0ZWQsIGFuZCB0aGUgdnRhYmxlIG9iamVjdCBpcyByZXR1cm5lZCwKd2hpY2ggeW91IGNhbiBp
bnNlcnQgaW50byBhIGJ1ZmZlciBsYXRlciB3aXRoIHRoZSBAY29kZXt2dGFibGUtaW5zZXJ0fQpm
dW5jdGlvbi4KQGVuZCB0YWJsZQoKQGNvZGV7bWFrZS10YWJsZX0gcmV0dXJucyBhIEBjb2Rle3Z0
YWJsZX0gb2JqZWN0LiAgWW91IGNhbiBhY2Nlc3MgdGhlCnNsb3RzIGluIHRoYXQgb2JqZWN0IGJ5
IHVzaW5nIGFjY2Vzc29yIGZ1bmN0aW9ucyB0aGF0IGhhdmUgbmFtZXMgYmFzZWQKb24gdGhlIGtl
eXdvcmRzIGRlc2NyaWJlZCBhYm92ZS4gIEZvciBpbnN0YW5jZSwgdG8gYWNjZXNzIHRoZSBmYWNl
LAp1c2UgQGNvZGV7dnRhYmxlLWZhY2V9LCBwYXNzaW5nIHRoZSB0YWJsZSBvYmplY3QgYXMgYW4g
YXJndW1lbnQuCgpXaGVuIHByZXBhcmluZyB5b3VyIHZ0YWJsZSBidWZmZXIsIHlvdSBtaWdodCB3
YW50IHRvIGNvbnNpZGVyIHRoZXNlOgoKQGxpc3AKOzsgUHJvdGVjdCB0aGUgdGFibGUgZnJvbSBp
bmFkdmVydGVudCBvdmVyd3JpdGluZy4KKHJlYWQtb25seS1tb2RlKQo7OyBDb25zZXJ2ZSBtZW1v
cnkgcmVzb3VyY2VzLgooYnVmZmVyLWRpc2FibGUtdW5kbykKOzsgRG8gbm90IHdyYXAgbG9uZyBs
aW5lcy4KKHNldHEgdHJ1bmNhdGUtbGluZXMgdCkKOzsgYGN1cnNvci1mYWNlJyBzdXBwb3J0IHlv
dSBjYW4gYWRkIHVzaW5nIDpyb3ctcHJvcGVydGllcy4KKGN1cnNvci1mYWNlLWhpZ2hsaWdodC1t
b2RlKQo7OyBGb3IgYW4gYWRkZWQgdmlzdWFsIGhpbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KKGhs
LWxpbmUtbW9kZSkKOzsgRGlzYWJsZSBob3Jpem9udGFsIHNjcm9sbGluZyB3aGVuIHVzaW5nIDp1
c2UtaGVhZGVyLWxpbmUgdC4KKGF1dG8taHNjcm9sbC1tb2RlIC0xKQpAZW5kIGxpc3AKCkBub2Rl
IENvbW1hbmRzCkBjaGFwdGVyIENvbW1hbmRzCkBjaW5kZXggdnRhYmxlIGNvbW1hbmRzCgpXaGVu
IHBvaW50IGlzIHdpdGhpbiBhIHZ0YWJsZSwgdGhlIGZvbGxvd2luZyBrZXlzIGFyZSBib3VuZDoK
CkB0YWJsZSBAa2JkCkBmaW5kZXggdnRhYmxlLXNvcnQtYnktY3VycmVudC1jb2x1bW4KQGl0ZW0g
UwpTb3J0IHRoZSB0YWJsZSBieSB0aGUgY3VycmVudCBjb2x1bW4KKEBjb2Rle3Z0YWJsZS1zb3J0
LWJ5LWN1cnJlbnQtY29sdW1ufSkuICBOb3RlIHRoYXQgdGhlIHRhYmxlIGlzIHNvcnRlZAphY2Nv
cmRpbmcgdG8gdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIGdldHRlciBmdW5jdGlvbiAoQHB4cmVm
e01ha2luZyBBClRhYmxlfSksIG5vdCBieSBob3cgaXQncyBkaXNwbGF5ZWQgaW4gdGhlIGJ1ZmZl
ci4gIENvbHVtbnMgdGhhdCBoYXZlCm9ubHkgbnVtZXJpY2FsIGRhdGEsIG9yIGFyZSBpZGVudGlm
aWVkIGFzIG51bWVyaWMsIGFyZSBzb3J0ZWQgYXMKbnVtYmVycywgb3RoZXIgY29sdW1ucyBhcmUg
c29ydGVkIGFzIHN0cmluZ3MsIG9yIHNvcnRlZCB1c2luZwppdHMgY3VzdG9tIGNvbXBhcmF0b3Ig
ZnVuY3Rpb24uCgpAZmluZGV4IHZ0YWJsZS11bnNvcnQKQGl0ZW0gVQpVbnNvcnQgdGhlIHRhYmxl
IChAY29kZXt2dGFibGUtdW5zb3J0fSkuICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gdG9nZ2xlcwpi
ZXR3ZWVuIHVuc29ydGluZyB0aGUgdGFibGUsIGFuZCByZXN0b3JpbmcgdGhlIHNvcnQgb3JkZXIg
YXQgdGFibGUKY3JlYXRpb24gd2hpY2ggd2lsbCBiZSBzcGVjaWZpZWQgYnkgdGhlIHRhYmxlJ3Mg
QGNvZGV7OnNvcnQtYnl9LCBvcgppbXBsaWVkIGJ5IHRoZSBvcmRlciBvZiB0YWJsZSdzIG9iamVj
dHMgb3IgQGNvZGV7Om9iamVjdHMtZnVuY3Rpb259LgoKQGZpbmRleCB2dGFibGUtbmFycm93LWN1
cnJlbnQtY29sdW1uCkBpdGVtIEB7Ck1ha2UgdGhlIGN1cnJlbnQgY29sdW1uIG5hcnJvd2VyCihA
Y29kZXt2dGFibGUtbmFycm93LWN1cnJlbnQtY29sdW1ufSkuCgpAZmluZGV4IHZ0YWJsZS13aWRl
bi1jdXJyZW50LWNvbHVtbgpAaXRlbSBAfQpNYWtlIHRoZSBjdXJyZW50IGNvbHVtbiB3aWRlcgoo
QGNvZGV7dnRhYmxlLXdpZGVuLWN1cnJlbnQtY29sdW1ufSkuCgpAZmluZGV4IHZ0YWJsZS1wcmV2
aW91cy1jb2x1bW4KQGl0ZW0gTS08bGVmdD4KTW92ZSB0byB0aGUgcHJldmlvdXMgY29sdW1uIChA
Y29kZXt2dGFibGUtcHJldmlvdXMtY29sdW1ufSkuCgpAZmluZGV4IHZ0YWJsZS1uZXh0LWNvbHVt
bgpAaXRlbSBNLTxyaWdodD4KTW92ZSB0byB0aGUgbmV4dCBjb2x1bW4gKEBjb2Rle3Z0YWJsZS1u
ZXh0LWNvbHVtbn0pLgoKQGZpbmRleCB2dGFibGUtcmV2ZXJ0LWNvbW1hbmQKQGl0ZW0gZwpSZWdl
bmVyYXRlIHRoZSB0YWJsZSAoQGNvZGV7dnRhYmxlLXJldmVydC1jb21tYW5kfSkuICBUaGlzIGNv
bW1hbmQKbW9zdGx5IG1ha2VzIHNlbnNlIGlmIHRoZSB0YWJsZSBoYXMgYSBAY29kZXs6b2JqZWN0
cy1mdW5jdGlvbn0gdGhhdApjYW4gZmV0Y2ggbmV3IGRhdGEuICBSZXZlcnRpbmcgdW5tYXJrcyBh
bGwgb2JqZWN0cy4KQGVuZCB0YWJsZQoKV2hlbiB0aGUgbmF2aWdhdGlvbiBrZXltYXAgaXMgZW5h
YmxlZCwgYW5kIHBvaW50IGlzIHdpdGhpbiBhIHZ0YWJsZSwgdGhlCmZvbGxvd2luZyBhZGRpdGlv
bmFsIGtleXMgYXJlIGJvdW5kOgoKQHRhYmxlIEBrYmQKQGZpbmRleCB2dGFibGUtbmV4dC1saW5l
CkBpdGVtIG4KQGl0ZW0gQGtleXtET1dOfQpNb3ZlIHBvaW50IHRvIHRoZSBuZXh0IGxpbmUsIGtl
ZXBpbmcgdGhlIGN1cnJlbnQgY29sdW1uIChAY29kZXt2dGFibGUtbmV4dC1saW5lfSkuCgpAZmlu
ZGV4IHZ0YWJsZS1wcmV2aW91cy1saW5lCkBpdGVtIHAKQGl0ZW0gQGtleXtVUH0KTW92ZSBwb2lu
dCB0byB0aGUgcHJldmlvdXMgbGluZSwga2VlcGluZyB0aGUgY3VycmVudCBjb2x1bW4gKEBjb2Rl
e3Z0YWJsZS1wcmV2aW91cy1saW5lfSkuCgpAZmluZGV4IHZ0YWJsZS1nb3RvLWJlZ2lubmluZy1v
Zi10YWJsZQpAaXRlbSBAa2V5e0hPTUV9Ck1vdmUgcG9pbnQgdG8gdGhlIGZpcnN0IGRhdGEgbGlu
ZSBvZiB0aGUgdGFibGUKKEBjb2Rle3Z0YWJsZS1nb3RvLWJlZ2lubmluZy1vZi10YWJsZX0pLgoK
QGZpbmRleCB2dGFibGUtZ290by1lbmQtb2YtdGFibGUKQGl0ZW0gQGtleXtFTkR9Ck1vdmUgcG9p
bnQgdG8gdGhlIGxhc3QgZGF0YSBsaW5lIG9mIHRoZSB0YWJsZQooQGNvZGV7dnRhYmxlLWdvdG8t
ZW5kLW9mLXRhYmxlfSkuCgpAZmluZGV4IHZ0YWJsZS1nb3RvLW5leHQtdGFibGUKQGl0ZW0gTS1A
fQpNb3ZlIHBvaW50IHRvIHRoZSBuZXh0IHZ0YWJsZSBpbiBhIG11bHRpLXRhYmxlIGJ1ZmZlcgoo
QGNvZGV7dnRhYmxlLWdvdG8tbmV4dC10YWJsZX0pLgoKQGZpbmRleCB2dGFibGUtZ290by1wcmV2
aW91cy10YWJsZQpAaXRlbSBNLUB7Ck1vdmUgcG9pbnQgdG8gdGhlIHByZXZpb3VzIHZ0YWJsZSBp
biBhIG11bHRpLXRhYmxlIGJ1ZmZlcgooQGNvZGV7dnRhYmxlLWdvdG8tcHJldmlvdXMtdGFibGV9
KS4KCkBmaW5kZXggdnRhYmxlLWNsb3NlCkBpdGVtIHEKQ2xvc2UgdGhlIHRhYmxlIGJ5IGludm9r
aW5nIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgYnkgQGNvZGV7OmNsb3NlLWFjdGlvbn0KKEBjb2Rl
e3Z0YWJsZS1jbG9zZX0pLgpAZW5kIHRhYmxlCgpAbm9kZSBJbnRlcmZhY2UgRnVuY3Rpb25zCkBj
aGFwdGVyIEludGVyZmFjZSBGdW5jdGlvbnMKCklmIHlvdSBuZWVkIHRvIHdyaXRlIGEgbW9kZSBi
YXNlZCBvbiB2dGFibGUsIHlvdSB3aWxsIGhhdmUgdG8gaW50ZXJhY3QKd2l0aCB0aGUgdGFibGUg
aW4gdmFyaW91cyB3YXlzLS0tZm9yIGluc3RhbmNlLCB5b3UnbGwgbmVlZCB0byB3cml0ZQpjb21t
YW5kcyB0aGF0IHVwZGF0ZXMgYW4gb2JqZWN0IGFuZCB0aGVuIGRpc3BsYXlzIHRoZSByZXN1bHQu
ICBUaGlzCmNoYXB0ZXIgZGVzY3JpYmVzIGZ1bmN0aW9ucyBmb3Igc3VjaCBpbnRlcmFjdGlvbi4K
CkBkZWZ1biB2dGFibGUtY3VycmVudC10YWJsZQpUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRh
YmxlIHVuZGVyIHBvaW50LgpAZW5kIGRlZnVuCgpAZGVmdW4gdnRhYmxlLWJ1ZmZlciAmb3B0aW9u
YWwgdGFibGUKUmV0dXJuIHRoZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFibGUsIG9y
IGlmIEBjb2Rle25pbH0sIHRoZQpjdXJyZW50IHRhYmxlIHVuZGVyIHBvaW50LiAgUmV0dXJuIEBj
b2Rle25pbH0gaWYgdGhlIHRhYmxlIGhhcyBub3QgeWV0CmJlZW4gaW5zZXJ0ZWQgaW50byBhIGJ1
ZmZlci4KQGVuZCBkZWZ1bgoKQGRlZnVuIHZ0YWJsZS1jdXJyZW50LW9iamVjdApUaGlzIGZ1bmN0
aW9uIHJldHVybnMgdGhlIG9iamVjdCBvbiB0aGUgY3VycmVudCBsaW5lLiAgKE5vdGUgdGhhdCB0
aGlzCmlzIHRoZSBvcmlnaW5hbCBvYmplY3QsIG5vdCB0aGUgY2hhcmFjdGVycyBkaXNwbGF5ZWQg
aW4gdGhlCmJ1ZmZlci4pCkBlbmQgZGVmdW4KCkBkZWZ1biB2dGFibGUtY3VycmVudC1jb2x1bW4K
VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb2x1bW4gaW5kZXggb2YgdGhlIGNvbHVtbiB1bmRl
ciBwb2ludC4KQGVuZCBkZWZ1bgoKQGRlZnVuIHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxlCk1vdmUg
cG9pbnQgdG8gdGhlIHN0YXJ0IG9mIEB2YXJ7dGFibGV9IGFuZCByZXR1cm4gdGhlIHBvc2l0aW9u
LiAgSWYKQHZhcnt0YWJsZX0gY2FuJ3QgYmUgZm91bmQgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLCBk
b24ndCBtb3ZlIHBvaW50IGFuZApyZXR1cm4gQGNvZGV7bmlsfS4gIElmIHRoZSB0YWJsZSdzIGhl
YWRlciBpcyBpbiB0aGUgYnVmZmVyLCBwb2ludCB3aWxsCmJlIG1vdmVkIHRvIHRoZSBmaXJzdCBj
aGFyYWN0ZXIgb2YgdGhlIGhlYWRlci4gIFVzZQpAY29kZXt2dGFibGUtZ290by1iZWdpbm5pbmct
b2YtdGFibGV9IGlmIHlvdSB3YW50IHBvaW50IHRvIGJlIG9uIHRoZQpmaXJzdCBkYXRhIGxpbmUu
CkBlbmQgZGVmdW4KCkBkZWZ1biB2dGFibGUtZ290by1vYmplY3Qgb2JqZWN0Ck1vdmUgcG9pbnQg
dG8gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHdoZXJlIEB2YXJ7b2JqZWN0fSBpcyBkaXNwbGF5ZWQg
aW4KdGhlIGN1cnJlbnQgdGFibGUgYW5kIHJldHVybiB0aGUgcG9zaXRpb24uICBJZiBAdmFye29i
amVjdH0gY2FuJ3QgYmUgZm91bmQsCmRvbid0IG1vdmUgcG9pbnQgYW5kIHJldHVybiBAY29kZXtu
aWx9LgpAZW5kIGRlZnVuCgpAZGVmdW4gdnRhYmxlLW9iamVjdC1saW5lLW51bWJlciBvYmplY3QK
UmV0dXJuIHRoZSBhYnNvbHV0ZSBidWZmZXIgbGluZSBudW1iZXIgb2YgQHZhcntvYmplY3R9LCBv
ciBAY29kZXtuaWx9IGlmCm5vdCBmb3VuZC4KQGVuZCBkZWZ1bgoKQGRlZnVuIHZ0YWJsZS1vYmpl
Y3QtbGluZS1pbmRleCBvYmplY3QKUmV0dXJuIHRoZSByZWxhdGl2ZSAwLWJhc2VkIGluZGV4IG9m
IEB2YXJ7b2JqZWN0fSBpbiB0aGUgY3VycmVudCB0YWJsZSwKb3IgQGNvZGV7bmlsfSBpZiBub3Qg
Zm91bmQuCkBlbmQgZGVmdW4KCkBkZWZ1biB2dGFibGUtZ290by1jb2x1bW4gaW5kZXgKTW92ZSBw
b2ludCB0byB0aGUgc3RhcnQgb2YgdGhlIEB2YXJ7aW5kZXh9dGggY29sdW1uLiAgKFRoZSBmaXJz
dApjb2x1bW4gaXMgbnVtYmVyZWQgemVyby4pCkBlbmQgZGVmdW4KCkBkZWZ1biB2dGFibGUtYmVn
aW5uaW5nLW9mLXRhYmxlCk1vdmUgcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVu
dCB0YWJsZS4gIElmIHRoZSBoZWFkZXIgaXMgaW4KdGhlIGJ1ZmZlciBhbmQgbm90IG9uIHRoZSBA
Y29kZXtoZWFkZXItbGluZX0sIHBvaW50IHdpbGwgYmUgYmVmb3JlIHRoZQpoZWFkZXIuCkBlbmQg
ZGVmdW4KCkBkZWZ1biB2dGFibGUtZ290by1iZWdpbm5pbmctb2YtdGFibGUKTW92ZSBwb2ludCB0
byB0aGUgZmlyc3QgZGF0YSByb3cgb2YgdGhlIGN1cnJlbnQgdGFibGUuCkBlbmQgZGVmdW4KCkBk
ZWZ1biB2dGFibGUtYmVnaW5uaW5nLW9mLXRhYmxlLWxpbmUtbnVtYmVyClJldHVybiB0aGUgYWJz
b2x1dGUgYnVmZmVyIGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudAp0YWJs
ZS4KQGVuZCBkZWZ1bgoKQGRlZnVuIHZ0YWJsZS1lbmQtb2YtdGFibGUKTW92ZSBwb2ludCB0byB0
aGUgZW5kIG9mIHRoZSBjdXJyZW50IHRhYmxlLiAgUG9pbnQgd2lsbCBiZSBiZXlvbmQgdGhlCmxh
c3QgY2hhcmFjdGVyIG9mIHRoZSB0YWJsZS4KQGVuZCBkZWZ1bgoKQGRlZnVuIHZ0YWJsZS1nb3Rv
LWVuZC1vZi10YWJsZQpNb3ZlIHBvaW50IHRvIHRoZSBsYXN0IGRhdGEgcm93IG9mIHRoZSB0YWJs
ZSB1bmRlciBwb2ludC4KQGVuZCBkZWZ1bgoKQGRlZnVuIHZ0YWJsZS1lbmQtb2YtdGFibGUtbGlu
ZS1udW1iZXIKUmV0dXJuIHRoZSBhYnNvbHV0ZSBidWZmZXIgbGluZSBudW1iZXIgb2YgdGhlIGVu
ZCBvZiB0aGUgY3VycmVudCB0YWJsZS4KQGVuZCBkZWZ1bgoKQGRlZnVuIHZ0YWJsZS1yZW1vdmUt
b2JqZWN0IHRhYmxlIG9iamVjdCAmb3B0aW9uYWwgaW5oaWJpdC1yb3ctcmVkaXNwbGF5ClJlbW92
ZSBAdmFye29iamVjdH0gZnJvbSBAdmFye3RhYmxlfS4gIFRoZSB0YWJsZSBkb2VzIG5vdCBoYXZl
IHRvIGJlIHRoZQpjdXJyZW50IHRhYmxlLiAgVGhpcyBhbHNvIHVwZGF0ZXMgdGhlIGRpc3BsYXll
ZCB0YWJsZS4KClJvd3MgYmVsb3cgdGhlIHJlbW92ZWQgb2JqZWN0J3MgbGluZSB3aWxsIGJlIHJl
ZGlzcGxheWVkIHRvIHVwZGF0ZSB0aGVpcgpyb3cgY29sb3JzLCBpZiBuZWVkZWQuICBJZiBAdmFy
e2luaGliaXQtcm93LXJlZGlzcGxheX0gaXMKbm9uLUBjb2Rle25pbH0sIHRoaXMgcmVkaXNwbGF5
IGlzIG5vdCBwZXJmb3JtZWQuCkBlbmQgZGVmdW4KCkBkZWZ1biB2dGFibGUtaW5zZXJ0LW9iamVj
dCB0YWJsZSBvYmplY3QgJm9wdGlvbmFsIGxvY2F0aW9uIGJlZm9yZSBzZWxlY3QtYWZ0ZXIgc29y
dC1hZnRlciBpbmhpYml0LXJvdy1yZWRpc3BsYXkKSW5zZXJ0IEB2YXJ7b2JqZWN0fSBpbnRvIEB2
YXJ7dGFibGV9LiAgVGhlIHRhYmxlIGRvZXMgbm90IGhhdmUgdG8gYmUgdGhlCmN1cnJlbnQgdGFi
bGUuICBAdmFye2xvY2F0aW9ufSBzaG91bGQgYmUgYW4gb2JqZWN0IGluIHRoZSB0YWJsZSwgdGhl
IG5ldwpvYmplY3QgaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhpcyBvYmplY3QsIG9yIGJlZm9yZSBpdCBp
ZiBAdmFye2JlZm9yZX0gaXMKbm9uLUBjb2Rle25pbH0uICBJZiBAdmFye2xvY2F0aW9ufSBpcyBA
Y29kZXtuaWx9LCBAdmFye29iamVjdH0gaXMKYXBwZW5kZWQgdG8gQHZhcnt0YWJsZX0sIG9yIHBy
ZXBlbmRlZCBpZiBAdmFye2JlZm9yZX0gaXMgbm9uLUBjb2Rle25pbH0uCgpAdmFye2xvY2F0aW9u
fSBjYW4gYWxzbyBiZSBhbiBpbnRlZ2VyLCBhIHplcm8tYmFzZWQgaW5kZXggaW50byB0aGUKdGFi
bGUuICBJbiB0aGlzIGNhc2UsIEB2YXJ7b2JqZWN0fSBpcyBpbnNlcnRlZCBhdCB0aGF0IGluZGV4
LiAgSWYgdGhlCmluZGV4IGlzIG91dCBvZiByYW5nZSwgQHZhcntvYmplY3R9IGlzIHByZXBlbmRl
ZCB0byBAdmFye3RhYmxlfSBpZiB0aGUKaW5kZXggaXMgdG9vIHNtYWxsLCBvciBhcHBlbmRlZCBp
ZiBpdCBpcyB0b28gbGFyZ2UuICBJbiB0aGlzIGNhc2UsCkB2YXJ7YmVmb3JlfSBpcyBpZ25vcmVk
LiAgTm90ZTogSW5zZXJ0aW5nIGJ5IGxvY2F0aW9uIGlzIHN1cHBvcnRlZCBvbmx5CmZvciB1bnNv
cnRlZCB0YWJsZXMuICBBIHRhYmxlIHdpdGggYWN0aXZlIHNvcnQgY3JpdGVyaWEgbXVzdCBmaXJz
dCBiZQp1bnNvcnRlZCB2aWEgQGNvZGV7dnRhYmxlLXVuc29ydH0uICBBbHNvIG5vdGU6IElmIHlv
dXIgdGFibGUgb2JqZWN0cyBhcmUKbWVyZWx5IHNjYWxhciBpbnRlZ2VycywgaW5zZXJ0aW5nIGJ5
IGludGVnZXIgbG9jYXRpb24gaXMgbm90IHN1cHBvcnRlZAphcyBsb2NhdGlvbiB2cy4gb2JqZWN0
IGlkZW50aXR5IGlzIGFtYmlndW91cy4KCklmIEB2YXJ7dGFibGV9IGlzIGVtcHR5LCBAdmFye2xv
Y2F0aW9ufSBhbmQgQHZhcntiZWZvcmV9IGFyZSBpZ25vcmVkLgoKSWYgdGhlIHRhYmxlIGlzIHRo
ZSBjdXJyZW50IHRhYmxlLCBhbmQgQHZhcntzZWxlY3QtYWZ0ZXJ9IGlzCm5vbi1AY29kZXtuaWx9
LCB0aGUgbmV3IG9iamVjdCdzIHJvdyBpcyBzZWxlY3RlZCwgb3RoZXJ3aXNlLCB3aGF0ZXZlcgpv
YmplY3QgaXMgc2VsZWN0ZWQgcmVtYWlucyBzZWxlY3RlZC4KCklmIEB2YXJ7c29ydC1hZnRlcn0g
aXMgbm9uLUBjb2Rle25pbH0sIGFuZCB0aGUgdGFibGUgaGFzIHNvcnRpbmcKY3JpdGVyaWEgaW4g
ZWZmZWN0LCB0aGUgdGFibGUgd2lsbCBiZSBzb3J0ZWQgYW5kIHJlZGlzcGxheWVkIGFmdGVyIHRo
ZQpvYmplY3QgaW5zZXJ0aW9uLgoKUm93cyBiZWxvdyB0aGUgaW5zZXJ0ZWQgb2JqZWN0J3MgbGlu
ZSB3aWxsIGJlIHJlZGlzcGxheWVkIHRvIHVwZGF0ZQp0aGVpciByb3cgY29sb3JzLCBpZiBuZWVk
ZWQuICBJZiBAdmFye2luaGliaXQtcm93LXJlZGlzcGxheX0gaXMKbm9uLUBjb2Rle25pbH0sIHRo
aXMgcmVkaXNwbGF5IGlzIG5vdCBwZXJmb3JtZWQsIGluIHdoaWNoIGNhc2UsCkBjb2Rle3Z0YWJs
ZS1yZXZlcnR9IG9yIEBjb2Rle3Z0YWJsZS1yZWRpc3BsYXktcmFuZ2V9IGNhbiBiZSBjYWxsZWQg
dG8KcmVkaXNwbGF5IHRoZSB0YWJsZSBhdCB0aGUgZW5kIG9mIHRoZSBiYXRjaC4KQGVuZCBkZWZ1
bgoKQGRlZnVuIHZ0YWJsZS11cGRhdGUtb2JqZWN0IHRhYmxlIG9iamVjdCAmb3B0aW9uYWwgb2xk
LW9iamVjdCBzb3J0LWFmdGVyClVwZGF0ZSBAdmFye29iamVjdH0ncyByZXByZXNlbnRhdGlvbiBp
biBAdmFye3RhYmxlfS4gIFRoZSB0YWJsZSBkb2VzIG5vdApoYXZlIHRvIGJlIHRoZSBjdXJyZW50
IHRhYmxlLiAgT3B0aW9uYWwgYXJndW1lbnQgQHZhcntvbGQtb2JqZWN0fSwgaWYKbm9uLUBjb2Rl
e25pbH0sIG1lYW5zIHRvIHJlcGxhY2UgQHZhcntvbGQtb2JqZWN0fSB3aXRoIEB2YXJ7b2JqZWN0
fSBhbmQKcmVkaXNwbGF5IHRoZSBhc3NvY2lhdGVkIHJvdyBpbiB0aGUgdGFibGUuICBDb2x1bW5z
IHdoaWNoIGFyZSBpbmZlcnJlZAp0byBiZSBudW1lcmljIHdpbGwgYmUgc2Nhbm5lZCB0byByZXNl
dCB0aGVpciBhbGlnbm1lbnQgYW5kIHNvcnQKZnVuY3Rpb24uICBJZiBAdmFye3NvcnQtYWZ0ZXJ9
IGlzIG5vbi1AY29kZXtuaWx9LCBhbmQgdGhlIHRhYmxlIGhhcwpzb3J0aW5nIGNyaXRlcmlhIGlu
IGVmZmVjdCwgdGhlIHRhYmxlIHdpbGwgYmUgc29ydGVkIGFuZCByZWRpc3BsYXllZAphZnRlciB0
aGUgb2JqZWN0IHVwZGF0ZS4gIEluIGVpdGhlciBjYXNlLCBpZiB0aGUgZXhpc3Rpbmcgb2JqZWN0
IGlzIG5vdApmb3VuZCBpbiB0aGUgdGFibGUgKGJlaW5nIGNvbXBhcmVkIHdpdGggQGNvZGV7dnRh
YmxlLW9iamVjdC1lcXVhbH0pLApzaWduYWwgYW4gZXJyb3IuCgpUaGlzIGhhcyB0aGUgc2FtZSBl
ZmZlY3QgYXMgY2FsbGluZyBAY29kZXt2dGFibGUtcmVtb3ZlLW9iamVjdH0gYW5kCnRoZW4gQGNv
ZGV7dnRhYmxlLWluc2VydC1vYmplY3R9LCBhbmQgaXMgbW9yZSBlZmZpY2llbnQuCkBlbmQgZGVm
dW4KCkBkZWZ1biB2dGFibGUtcmV2ZXJ0ICZvcHRpb25hbCB0YWJsZQpSZWdlbmVyYXRlIGFuZCBy
ZWRpc3BsYXkgdGhlIGN1cnJlbnQgdGFibGUsIG9yIHRoZSB0YWJsZSBpbiBAdmFye3RhYmxlfS4K
QGVuZCBkZWZ1bgoKQGRlZnVuIHZ0YWJsZS1tYXliZS1yZWRpc3BsYXktcmFuZ2UgdGFibGUgJm9w
dGlvbmFsIGZyb20tbGluZSB0by1saW5lClJlZGlzcGxheSBAdmFye3RhYmxlfSdzIHJhbmdlIG9m
IGxpbmVzIEB2YXJ7ZnJvbS1saW5lfSBhbmQgQHZhcnt0by1saW5lfQppZiByb3cvY29sdW1uIGNv
bG9ycyBvciByb3cvY29sdW1uIGNvbG9yIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZC4gIElmCkB2YXJ7
ZnJvbS1saW5lfSBpcyBAY29kZXtuaWx9LCB1c2UgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRhYmxl
LiAgSWYKQHZhcnt0by1saW5lfSBpcyBAY29kZXtuaWx9LCB1c2UgdGhlIGxhc3QgbGluZSBvZiB0
aGUgdGFibGUuCkBlbmQgZGVmdW4KCkBkZWZ1biB2dGFibGUtcmVkaXNwbGF5LXJhbmdlIHRhYmxl
ICZvcHRpb25hbCBmcm9tLWxpbmUgdG8tbGluZQpSZWRpc3BsYXkgQHZhcnt0YWJsZX0ncyByYW5n
ZSBvZiBsaW5lcyBAdmFye2Zyb20tbGluZX0gYW5kCkB2YXJ7dG8tbGluZX0uICBJZiBAdmFye2Zy
b20tbGluZX0gaXMgQGNvZGV7bmlsfSwgdXNlIHRoZSBmaXJzdCBsaW5lIG9mCnRoZSB0YWJsZS4g
IElmIEB2YXJ7dG8tbGluZX0gaXMgQGNvZGV7bmlsfSwgdXNlIHRoZSBsYXN0IGxpbmUgb2YgdGhl
CnRhYmxlLiAgVW5saWtlIEBjb2Rle3Z0YWJsZS1tYXliZS1yZWRpc3BsYXktcmFuZ2V9LCBhbHdh
eXMgcmVkaXNwbGF5IHRoZQpzcGVjaWZpZWQgbGluZXMuCkBlbmQgZGVmdW4KCkBkZWZ1biB2dGFi
bGUtY29sdW1uIHRhYmxlIGluZGV4ClJldHVybiB0aGUgY29sdW1uIG5hbWUgb2YgdGhlIEB2YXJ7
aW5kZXh9dGggY29sdW1uIGluIEB2YXJ7dGFibGV9LgpAZW5kIGRlZnVuCgpAZGVmdW4gdnRhYmxl
LW1hcmstb2JqZWN0IG9iamVjdCAmb3B0aW9uYWwgaW5oaWJpdC1uZXh0LWxpbmUKTWFyayBAdmFy
e29iamVjdH0gaW4gdGhlIGN1cnJlbnQgdGFibGUuICBQb2ludCB3aWxsIGJlIG1vdmVkIHRvIHRo
ZSBuZXh0CmxpbmUuICBJZiBAdmFye2luaGliaXQtbmV4dC1saW5lfSBpcyBub24tQGNvZGV7bmls
fSwgcG9pbnQgd2lsbCBub3QgYmUKYWR2YW5jZWQuCkBlbmQgZGVmdW4KCkBkZWZ1biB2dGFibGUt
dW5tYXJrLW9iamVjdCBvYmplY3QgJm9wdGlvbmFsIGluaGliaXQtbmV4dC1saW5lClVubWFyayBA
dmFye29iamVjdH0gaW4gdGhlIGN1cnJlbnQgdGFibGUuICBQb2ludCB3aWxsIGJlIG1vdmVkIHRv
IHRoZQpuZXh0IGxpbmUuICBJZiBAdmFye2luaGliaXQtbmV4dC1saW5lfSBpcyBub24tQGNvZGV7
bmlsfSwgcG9pbnQgd2lsbCBub3QKYmUgYWR2YW5jZWQuCkBlbmQgZGVmdW4KCkBkZWZ1biB2dGFi
bGUtdG9nZ2xlLW1hcmtlZC1vYmplY3Qgb2JqZWN0ClRvZ2dsZSB0aGUgbWFyayBvbiBAdmFye29i
amVjdH0gaW4gdGhlIGN1cnJlbnQgdGFibGUuCkBlbmQgZGVmdW4KCkBkZWZ1biB2dGFibGUtbWFy
ay1vYmplY3RzIHRhYmxlIHByZWRpY2F0ZQpNYXJrIGFsbCBvYmplY3RzIGluIEB2YXJ7dGFibGV9
IGZvciB3aGljaCB0aGUgQHZhcntwcmVkaWNhdGV9IGZ1bmN0aW9uCnJldHVybnMgbm9uLUBjb2Rl
e25pbH0uICBFYWNoIHRhYmxlIG9iamVjdCBpcyBwYXNzZWQgdG8gdGhlIHByZWRpY2F0ZQpmdW5j
dGlvbi4KQGVuZCBkZWZ1bgoKQGRlZnVuIHZ0YWJsZS1tYXJrLWFsbC1vYmplY3RzICZyZXN0IF8K
TWFyayBhbGwgb2JqZWN0cyBpbiB0aGUgY3VycmVudCB0YWJsZS4gIFRoaXMgY2FuIGJlIGNhbGxl
ZCBmcm9tIGEgdGFibGUKQGNvZGV7OmFjdGlvbn0uCkBlbmQgZGVmdW4KCkBkZWZ1biB2dGFibGUt
dW5tYXJrLWFsbC1vYmplY3RzICZyZXN0IF8KVW5tYXJrIGFsbCBvYmplY3RzIGluIHRoZSBjdXJy
ZW50IHRhYmxlLiAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYQp0YWJsZSBAY29kZXs6YWN0aW9u
fS4KQGVuZCBkZWZ1bgoKQGRlZnVuIHZ0YWJsZS1tYXJrZWQtb2JqZWN0cyB0YWJsZQpSZXR1cm4g
YSBsaXN0IG9mIGFsbCBtYXJrZWQgb2JqZWN0cyBpbiB0aGUgY3VycmVudCB0YWJsZS4gIFRoZSBv
cmRlciBvZgpvYmplY3RzIGluIHRoZSBsaXN0IGlzIHVuZGVmaW5lZC4KQGVuZCBkZWZ1bgoKQGRl
ZnVuIHZ0YWJsZS1vYmplY3QtbWFya2VkLXAgdGFibGUgb2JqZWN0ClJldHVybiBAY29kZXt0fSBp
ZiBAdmFye29iamVjdH0gaXMgbWFya2VkIGluIEB2YXJ7dGFibGV9LgpAZW5kIGRlZnVuCgpAZGVm
dW4gdnRhYmxlLWV4dHJhLWRhdGEgdGFibGUKUmV0dXJuIHRoZSBleHRyYSBkYXRhIHNwZWNpZmll
ZCBhdCBAdmFye3RhYmxlfSBjcmVhdGlvbiB0aW1lLCBvciBhcyBzZXQKYnkgQGNvZGV7dnRhYmxl
LXNldC1leHRyYS1kYXRhfS4KQGVuZCBkZWZ1bgoKQGRlZnVuIHZ0YWJsZS1zZXQtZXh0cmEtZGF0
YSB0YWJsZSBleHRyYS1kYXRhClNldCBAdmFye2V4dHJhLWRhdGF9IGluIEB2YXJ7dGFibGV9LgpA
ZW5kIGRlZnVuCgpAZGVmdW4gdnRhYmxlLWNvbHVtbi1leHRyYS1kYXRhIGNvbHVtbgpSZXR1cm4g
dGhlIGV4dHJhIGRhdGEgc3BlY2lmaWVkIGF0IEB2YXJ7Y29sdW1ufSBjcmVhdGlvbiB0aW1lLCBv
ciBhcyBzZXQKYnkgQGNvZGV7dnRhYmxlLWNvbHVtbi1zZXQtZXh0cmEtZGF0YX0uCkBlbmQgZGVm
dW4KCkBkZWZ1biB2dGFibGUtY29sdW1uLXNldC1leHRyYS1kYXRhIHRhYmxlIGNvbHVtbi1vci1p
bmRleCBleHRyYS1kYXRhClNldCBAdmFye2V4dHJhLWRhdGF9IGluIEB2YXJ7dGFibGV9J3MgQHZh
cntjb2x1bW4tb3ItaW5kZXh9LiAgSWYKQHZhcntjb2x1bW4tb3ItaW5kZXh9IGlzIGFuIGludGVn
ZXIsIGFtZW5kIHRoZSBjb2x1bW4gYXNzb2NpYXRlZCB3aXRoCnRoZSBpbnRlZ2VyIGluZGV4LCBv
dGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIGNvbHVtbiBvYmplY3QuCkBlbmQgZGVmdW4KCkBub2Rl
IEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQpAY2hhcHRlciBHTlUgRnJlZSBEb2N1bWVu
dGF0aW9uIExpY2Vuc2UKQGluY2x1ZGUgZG9jbGljZW5zZS50ZXhpCgpAbm9kZSBJbmRleApAdW5u
dW1iZXJlZCBJbmRleApAcHJpbnRpbmRleCBjcAoKQGJ5ZQo=
--000000000000be30a7063840f99d--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 23 Jun 2025 17:15:22 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jun 23 13:15:21 2025
Received: from localhost ([127.0.0.1]:56880 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTklL-0005GA-I9
	for submit <at> debbugs.gnu.org; Mon, 23 Jun 2025 13:15:21 -0400
Received: from mxout5.mail.janestreet.com ([64.215.233.18]:36081)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <sbaugh@HIDDEN>)
 id 1uTklF-00053o-UP
 for 78843 <at> debbugs.gnu.org; Mon, 23 Jun 2025 13:15:17 -0400
From: Spencer Baugh <sbaugh@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
In-Reply-To: <CAN+1Hbo41qewJ1jkrgPUM-c1R9QSmBkuUaiA56jtJdt0r+7iTg@HIDDEN>
 (=?utf-8?Q?=22St=C3=A9phane?= Marks"'s message of "Sun, 22 Jun 2025
 06:38:56 -0400")
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <86ikkogniu.fsf@HIDDEN>
 <CAN+1HboJ=S02rGBVtODe-Jt8T7LcQL12E_1SdS6LH-O_==ugeg@HIDDEN>
 <86h608gljv.fsf@HIDDEN>
 <CAN+1HbpybFrKQz4xqCK+WfOvOXGSSPZautOz-bQZ_QDpLX7xrg@HIDDEN>
 <86frfsgkl1.fsf@HIDDEN>
 <CAN+1Hbo3px=eXDvLE9-4p2SP3ou-=O1EK5iMC=U2m8jU=4CAfA@HIDDEN>
 <86ecvcgj2u.fsf@HIDDEN>
 <CAN+1Hbo41qewJ1jkrgPUM-c1R9QSmBkuUaiA56jtJdt0r+7iTg@HIDDEN>
Date: Mon, 23 Jun 2025 13:15:06 -0400
Message-ID: <iertt46tm5h.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com;
 s=waixah; t=1750698907;
 bh=SWdGhN/2e9OjIf1s+vIyqeO/pxb+mnHgQ8bzwBMTEr8=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date;
 b=LUJp72ctOCqHi0t9RLxrop7T+l1L8gluQO3nTqb1x/ZmwUfzpT4Srzakb+WMjoaSl
 B9BNpq+4KRrqjjLE1yl6v0MGOkPnv1Tf0lKLc+FghaMk9xigop5y04LMLCUoTgWVl9
 GJoasr7bKWTN59kbSBDeSFjDmPA6jvPBLGsT1y0xeITBJOsnXPSx0K/sUZgp7LEG44
 lWihmnEraQOYq8IuBN87RgylUzhV1+a6y2BiwGz362+qQGAWHOSDzZXJtzVndoTrGT
 tJamuqOscYeWmiIcCqtcKBLlG+QtVwE5Yte3tBg7RsaHmqROtH37Gfjh6HBckX7Vz0
 Debb7va3BtvJg==
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 78843
Cc: krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org, adam@HIDDEN,
 larsi@HIDDEN, arstoffel@HIDDEN, Eli Zaretskii <eliz@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

St=C3=A9phane Marks <shipmints@HIDDEN> writes:

> On Sun, Jun 22, 2025 at 6:35=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrot=
e:
>
>  > From: St=C3=A9phane Marks <shipmints@HIDDEN>
>  > Date: Sun, 22 Jun 2025 06:24:39 -0400
>  > Cc: 78843 <at> debbugs.gnu.org, adam@HIDDEN, sbaugh@HIDDEN,=
=20
>  >       larsi@HIDDEN, arstoffel@HIDDEN, krisbalintona@HIDDEN
>  >=20
>  >  > Let's start with the vtable users I looped in actually using it.
>  >=20
>  >  I don't see how this will help in reviewing the patch. It will allow
>  >  those folks to try the patch, but that's a separate job.  Patch review
>  >  has to happen regardless, because it might spot issues that no
>  >  reasonable amount of testing can.  This is why patch review is a
>  >  necessary step in our development process.
>  >=20
>  >  > I can attach a vtable.el without the patch file and
>  >  > make it easier.
>  >=20
>  >  Thanks, but it won't make it easier, no.
>  >=20
>  > Of course.  I did say that I would submit a "big-bang" patch a few wee=
ks ago.  The vtable users who are
>  > familiar with the code (having implemented their workarounds) should h=
ave an easier time with the review.=20
>
>  That will help, but I would like to review it as well.  It's part of
>  my job.
>
>  Your patch lists many changes:
>
>  > Bug fixes
>  >=20
>  > - vtable-update-object works with no visible or changed window
>  > width cache key (bug=3D69837)
>  > - Improve vtable--limit-string performance for long
>  > strings (bug=3D77684)
>  > - Keymap changes:
>  >   - Keymap spans the whole header column and header
>  >   dividers (bug=3D74701)
>  >   - Missing keymap and 'vtable-column property on body/header
>  >   dividers and newlines
>  >   - mouse-1 and close table bindings in vtable-header-line-map
>  >   keymap
>  >   - table-drag-resize-column-map keymap for use in body on
>  >   dividers (bug=3D74701)
>  >   - vtable-header-drag-resize-column-map consolidates
>  >   vtable-header-line-map and vtable-drag-resize-column-map
>  > - Infer column widths based on formatted elements, not raw
>  > elements
>  > - Compute columns works when there are no objects at
>  > initialization
>  > - text-scale-mode support (header and body elements are pixel
>  > aligned)
>  > - Header line handles display-line-numbers-mode
>  > - Redraw row colors on lines below an inserted or removed line
>  > - Cache is coherent with its objects (rather than by chance),
>  > invalidated where needed
>  > - All cache references now cache warming calls vs. mere cache
>  > get
>  > - Table mutations work when the table buffer is not the current
>  > buffer and if the table isn't current
>  > - Resize all tables in a buffer when their window
>  > resizes (debounced to accommodate frame size dragging)
>  > - Spacer goes after the column name on the header if right
>  > aligned
>  > - Column name defaults to right-aligned when its data are
>  > right-aligned
>  > - Improve column placeholder message when no objects and no
>  > columns are specified
>  > - Do not display divider after a row's final column
>  > - Option to display divider on the header (was always on)
>  > - Treat divider as a part of its preceding column when dragging
>  > or sorting
>  > - Append table faces to values and column heading names rather
>  > than override
>  > - Truncated string ellipsis text properties match those of the
>  > formatted column entry
>  > - Clicking on a header keeps point within table bounds
>  > - Use vtable-object-equal and do not assume eq (or via assq,
>  > memq)
>  > - Header line adjust final column name and sort indicator in a
>  > narrow window works as intended
>  > - Set window point where needed
>  > - Next/previous line remains in the current column
>  > - Signal an error if a table is inserted in more than one buffer
>  > or more than once in a buffer
>  > - vtable--cache-key handle if called when the selected window
>  > does not contain a table buffer
>  > - Restore "focus" after vtable-remove-object,
>  > vtable-update-object, vtable-redisplay-range, vtable-revert if
>  > table is current
>  > - vtable-revert works when reverted table is not the current
>  > table
>  > - Mutate the correct associated table in
>  > vtable-header-line-sort, vtable--drag-resize-column
>  > - vtable--recompute-cache considers the table's sort order
>  > - vtable--alter-column-width respects min-width and max-width
>  > - vtable-insert-object if integer location specified, does not
>  > assume the object list and line cache are in the same order
>  > - vtable-insert-object signal an error if integer insert
>  > location specified when the table is sorted
>  > - vtable-update-object does not assume objects are in the same
>  > order as the cache, which might be sorted
>  > - vtable-update-object no longer signal "setcar nil" on failed
>  > old-object search
>  > - vtable-update-object goto table before updating
>  > - vtable-remove-object updates numeric column type as needed
>  > after removing line
>  > - vtable-remove-object signals an error if the specified object
>  > is not found
>  > - vtable-remove-object leaves point within table bounds if table
>  > is current (and there are rows)
>  > - Hide event-handler interactive functions from M-x display (not
>  > really "commands")
>  > - Renamed private vtable-header-line-sort to
>  > vtable--header-line-sort
>  > - Ensured docstrings for all public functions with added
>  > clarifications where needed
>  >=20
>  > Enhancements
>  >=20
>  > - Custom column comparator for sorting types other than numerics
>  > and lexical strings
>  > https://lists.gnu.org/archive/html/emacs-devel/2024-10/msg00043.html
>  > - Column-width inference can optionally include column-name
>  > width vs. just data
>  > - Table name slot, defaults to "*vtable*", which is displayed in
>  > messages to differentiate vtables
>  > - Duplicate object ignore, warning or error, defaults to ignore
>  > duplicates
>  > - Explicitly identify columns as numeric or non-numeric to avoid
>  > the cost of inferring numericalness
>  > - Option to sort table after insert or update object
>  > - Option to select the newly inserted line if the table is
>  > current
>  > - Sort indicator characters specifiable
>  > - Sort indicator faces for ascending and descending
>  > - Unsort the table, toggling between unsorted and the sort-by at
>  > initialization
>  > - Unsort binding in vtable-map
>  > - Add tab to vtable-header-line-map to move point into the table
>  > - Functions to compute programmatic row/column colors
>  > - Header face independent of body face
>  > - Header column alignment independent of from body alignment,
>  > defaults to body alignment
>  > - Center alignment options
>  > - Truncation ellipsis specifiable
>  > - Option to make in-buffer header cursor-intangible
>  > - Option to make in-buffer "decor" cursor-intangible (spacers,
>  > dividers, indicator padding)
>  > - Object/line marking/unmarking functions, marked line face
>  > - Next/previous line functions that remain in table body bounds
>  > - Multi-table commands 'vtable-goto-next-table',
>  > 'vtable-goto-previous-table'
>  > - Optionally apply row text properties; e.g., for mouse-face,
>  > cursor-face
>  > - Optional "navigation" keymap adding several useful bindings
>  > including "q" to close the table (a la special-mode)
>  > - Display a message when interactive column resizing min-width
>  > and max-width limits reached
>  > - Optionally pulse an updated, inserted, removed line,
>  > defaulting to 'pulse-momentary-highlight-one-line'
>  > - Go to table beginning/end of body convenience functions
>  > - Table and object line-number convenience functions
>  > - Table close-action which defaults to 'quit-window'
>  > - Extra-data slots on both the table and columns for
>  > programmatic reference
>
>  It is nigh impossible to review such a large number of changes
>  together: how am I supposed to find out which design and
>  implementation decisions did you take, when faced with such a large
>  number of separate changes?  Without that, the review is not useful,
>  even impossible.
>
>  So please subdivide the patch into smaller, preferably independent
>  parts, to make the patch review possible, let alone practical.
>
> Let's see what the vtable user feedback is first and then I'll think
> about it.  It will be a trade-off between your pain and mine.

As a vtable user: Please either split this patch up into smaller
patches, or add many automated tests of vtable (both for new and old
functionality).  Preferably both.

Without doing at least one of those things, I don't believe this patch
should be merged, because it is too likely to break things.

Yes, I know you have tested it manually.  That is not sufficient.  Good
software engineering practice demands more than that.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 23 Jun 2025 16:05:47 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jun 23 12:05:47 2025
Received: from localhost ([127.0.0.1]:56775 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTjg2-0004D8-3c
	for submit <at> debbugs.gnu.org; Mon, 23 Jun 2025 12:05:47 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:57524)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uTjfz-0004Bo-5f
 for 78843 <at> debbugs.gnu.org; Mon, 23 Jun 2025 12:05:44 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1uTjft-0000WV-Cm; Mon, 23 Jun 2025 12:05:37 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=XjA+kpg61wJJOGfjfzPbZ9niz8Ewma2ZSalJV7O7/eo=; b=D+GalbnSox+q+JOY7zFZ
 cHPvZPbU4j/k49W36BE4mUxbhvCXC4UzpPawEUyIe7rWa1gHAB8F5re2JhEfOgWdjWtG9BB4YZVrz
 7KyCgZsvflLbnnZwR9w/E2J0LySzu1jZvk5TwvgBhiPlFAxzCYiLVeH+2xXV7GFoo8BaKKlH6FKTO
 DvdRSHpS8gF9adb8rnltZof3wawIx+zrmxM26EIVO6ezHMxotMLE9vKBFSXuXBwm+YRCcwULiTKjd
 64uG2h0pPPtbSZenE0qcWu5MHJedn8l8mf3N4wUih3mfHrLE4rVtysPUTLrowci3paJ8tLBcMC/Mo
 bqdB3ZTm9jZ5hg==;
Date: Mon, 23 Jun 2025 19:05:31 +0300
Message-Id: <867c12fnp0.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
In-Reply-To: <CAN+1Hbo8hsqw1Ts5Vo3OsWTBfqiO9xNAxXj0iww_oycm+R1SYA@HIDDEN>
 (message from =?utf-8?Q?St=C3=A9phane?= Marks on Mon, 23 Jun 2025 10:49:07
 -0400)
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <86ikkogniu.fsf@HIDDEN>
 <CAN+1Hbo8hsqw1Ts5Vo3OsWTBfqiO9xNAxXj0iww_oycm+R1SYA@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 78843
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org,
 adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Stéphane Marks <shipmints@HIDDEN>
> Date: Mon, 23 Jun 2025 10:49:07 -0400
> Cc: 78843 <at> debbugs.gnu.org, adam@HIDDEN, sbaugh@HIDDEN, 
> 	larsi@HIDDEN, arstoffel@HIDDEN, krisbalintona@HIDDEN
> 
>  > +@item :object-equal
>  > +This function tests for the equality of two table objects.  It defaults
>  > +to @code{eq}.
>  > +
>  > +@defun object-equal object1 object2
>  > +Return non-nil if @var{object1} and @var{object2} are equal, and non-nil
>  > +otherwise.
>  > +@end defun
> 
>  I don't understand the purpose of this @defun here.  What did you
>  intend to say by placing it here?
> 
> I was following Lars's original format for other "callback" functions.  If I change this one, I should change them
> all for consistency.  What is your preference?

Let's leave these alone for now.

>  > +@findex vtable-goto-next-table
>  > +@item <forward-paragraph>
> 
>  What's "<forward-paragraph>"?  Are there keyboards with a key that has
>  such a label?
> 
> This is remapped in the code.  Is there a way you prefer to refer to remapped keys?

We usually simply show the default bindings, M-} etc.

> Once we get feedback from users, I will split the patch into several digestible smaller patches, but probably
> not too parsimoniously.

Thanks!




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 23 Jun 2025 14:49:42 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jun 23 10:49:42 2025
Received: from localhost ([127.0.0.1]:56543 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTiUI-0008OA-O1
	for submit <at> debbugs.gnu.org; Mon, 23 Jun 2025 10:49:42 -0400
Received: from mail-vk1-xa2c.google.com ([2607:f8b0:4864:20::a2c]:42279)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uTiU9-0008M0-Ae
 for 78843 <at> debbugs.gnu.org; Mon, 23 Jun 2025 10:49:32 -0400
Received: by mail-vk1-xa2c.google.com with SMTP id
 71dfb90a1353d-5315972826dso2920415e0c.1
 for <78843 <at> debbugs.gnu.org>; Mon, 23 Jun 2025 07:49:25 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1750690159; x=1751294959; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=NPJUboLsAM654RvqyTjHmPfFYBIiK092JvC/reHj5oU=;
 b=g4eK5yZdI0jPU83CcnOlc+aXhyI/FBnR269rdf4wC8ADtSxnmVn9TH5IKzzdQ6Sh9+
 MyCeLLgQ15BBOCgYCAPnWwXmP/OM/CdLxyAS2vFrsodC/nV8AprPbQOo8mR5MbT+cdgP
 WpjSLY4vGY0CVPjZLepklWVkFm3n5MdzhvY7Ub183UjgqC6lOEBTs2ut2lEvtpc/3bTY
 496Tq9eDzbPMQTTEh/FBhrJudS2XZh0B43oHrufCn5J15d+w6QqnTT/fh7i5SwS+hUWe
 AIpEUgUsZOXZrT87pDuVRRAR9z7O67bifpUNQe0QtFfNw6fmz+XpNWRluHQxFLcacQGk
 /3Mw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1750690159; x=1751294959;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=NPJUboLsAM654RvqyTjHmPfFYBIiK092JvC/reHj5oU=;
 b=IxDDdC8UdXXNvycILqACARh4bAS8MtXRzDgJ7laK7v/j1SXpsUbBEDANg6HFvLtgn1
 DSJLXNUFvVRcYJpNBe+n5qUjAP7AGq0wYXajqAVorVPgBz98AKV3mpZ8otJG1pb5Jgw5
 nyySlm14SAAYoOreA18Umkp08q/VhCE/IQGzyqeFYzsiueHI03DRd1H90In58GEDHzYj
 q7iTOv61X6ut1h+nnokubsXMMFtfL+Cq4n5/OUJzFeY9xvzA3dHeSNio9JKKk5BJb8ZA
 bl0RSvP93qEunDCkjzV/OGDWmKK43HtQ45x/vUSm5fE9VX1LqN2ChrBzKigrzHXD6Yj6
 AgdQ==
X-Gm-Message-State: AOJu0YwmfP3T9Od489lQBDrdZjmT/bgre//3Wn+i+0y6hS1YeAGTO+FU
 8Snj2ioLiWX7hkKUGOLiTPFiyP+aD2Rgq2pGCriQKMf1ymn226FbISdRcDh6Xsh58JaSq5zJc41
 Qq1BmKpP9hMoWTGXkWFycx8P3rmX1hbI=
X-Gm-Gg: ASbGncsEfWfmdktV1j+hR9KjH8Mio+tO4xFvfDqpcfHnDNXifkWXit6KcYQjqF0Yi1m
 /33pqBDf0I8ltlX6aOHiKumD7YtSe/+43hkbCCwnWZ6n9O2gR8At9CKD+rDSqaxsgCbg5rrXXfO
 CnhkJh8H6x6v/bzCHfKotFAmrX1Lf+ykddEfUL5lHVJiM3NEpqsgWc4zw9
X-Google-Smtp-Source: AGHT+IFFCpZ1Bot4M3dDgFuvvHwj4uzMcsEMfyAdmM8J7utT2NEjskQ94Q6Ghoyx+zCtzsZvA9uVyTkkz27F99cHqa0=
X-Received: by 2002:a05:6122:6c09:b0:52d:cc6f:81a2 with SMTP id
 71dfb90a1353d-531aeba9d01mr5804885e0c.6.1750690159386; Mon, 23 Jun 2025
 07:49:19 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <86ikkogniu.fsf@HIDDEN>
In-Reply-To: <86ikkogniu.fsf@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Mon, 23 Jun 2025 10:49:07 -0400
X-Gm-Features: Ac12FXyCMivXbAF6l0D7FRhKcnnWvuoGq_nKfyvSTNvOALBx5Db5CKFKRVCOB9Q
Message-ID: <CAN+1Hbo8hsqw1Ts5Vo3OsWTBfqiO9xNAxXj0iww_oycm+R1SYA@HIDDEN>
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/alternative; boundary="0000000000000fe33a06383e513d"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78843
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org,
 adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--0000000000000fe33a06383e513d
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Sun, Jun 22, 2025 at 4:59=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote:

>
> For now, just a few comments from superficial first reading, mainly
> about the documentation.
>

I'm going through the documentation based on your feedback while I have a
few minutes today.

> +A vtable can be inserted into a single buffer only.  An error is
> > +signaled if a vtable is attempted to be inserted more than once into a
> > +single buffer, or into multiple buffers.
>
> The passive voice here is used way too much.  Please rephrase not to
> use it.
>

Done. I will review the rest of the language.

>  @table @code
> > +@item :name
> > +The default table name is `*vtable*`.  Specify this if you have more
>                              ^^^^^^^^^^
> This should be @samp{*vtable*}.
>

Done.

> -In the latter case, if @code{:columns} is non-@code{nil} and there's
> > -more elements in the sequence than there is in @code{:columns}, only
> > -the @code{:columns} first elements are displayed.
> > +In the latter case, if @code{:columns} is non-@code{nil} and there are
> > +more elements in the sequence than there are in @code{:columns}, the
> > +elements beyond those in @code{:columns} are not displayed.
>
> Since the elements are not in :columns, the modified text is
> confusing, IMO.  I suggest
>
>   ... the sequence elements beyond the number of elements in
>   @code{:columns} will not be shown.
>

Done.

> +@item :object-equal
> > +This function tests for the equality of two table objects.  It default=
s
> > +to @code{eq}.
> > +
> > +@defun object-equal object1 object2
> > +Return non-nil if @var{object1} and @var{object2} are equal, and non-n=
il
> > +otherwise.
> > +@end defun
>
> I don't understand the purpose of this @defun here.  What did you
> intend to say by placing it here?
>

I was following Lars's original format for other "callback" functions.  If
I change this one, I should change them all for consistency.  What is your
preference?

> +@item :duplicate-objects
> > +A vtable assumes all objects inserted into the table are unique among
> > +themselves.  If the symbol @code{'allow}, the default, allow duplicate
> > +objects (the first object found during table operations has primacy), =
if
>
> First, please say "If the value is the symbol...", not just "If the
> symbol".  And second, the way we typeset symbols in a Texinfo manual
> is by using @code{allow}, without the apostrophe.
>

Done.

> +@code{'ignore}, silently ignore duplicates leaving the existing object
> > +intact, if @code{'ignore-warn} do the same thing as @code{'ignore} and
> > +produce a warning message, or if @code{'error}, signal an error if a
> > +duplicate is detected.
>
> Likewise here about the symbol names.  In addition, please use
> semi-colons to separate the description of the different values:
>
>   ...if it's |@code{ignore}, silently ignore duplicates leaving the
>   existing object intact; if it's @code{ignore-warn}, do the same...
>

Done.

> +This is a list where each element is either a string (the column name),
> > +a plist of keyword/values (to make a @code{vtable-column} object), or =
a
> > +@code{vtable-column} object (created by calling the function
> > +@code{make-vtable-column}).
>
> When you mention a function or a variable, like make-vtable-column
> here, it is usually a good idea to have a cross-reference to where
> they are described (unless they are described in the same node).
>

I will.

> +that need special treatment, specify a larger guess increment.  If nil,
>                                                                       ^^^
> "nil" should have the @code markup.
>

I corrected all the nil references.  It was copy/pasta from docstrings.

> +@item comparator
> > +This function will be called to compare column values.  Use this when
> > +your objects contain data that needs non-numeric or string collation,
> > +for example, dates.  Another case would be where you want the equivale=
nt
> > +of @code{sort-fold-case}.
> > +
> > +@defun comparator value1 value2
> > +This function is called with two values to compare.  The return value
> > +should follow the semantics of @code{<} or, @code{string-lessp}.
> >  @end defun
>
> Same question here about this @defun, as above about object-equal.
>

Ditto.  Tell me which style you prefer.

> +@item :sort-indicator
> > +This is a list of two cons cells that specify the sort ascending and
> > +descending characters that are shown on the table header to indicate a
> > +sorted column.  The first character is the fancier ``graphical''
> > +character, and the second a text-only character.  If the first charact=
er
> > +cannot be displayed on the selected frame, the table will show the
> > +text-only character.  The default is
> > +@code{vtable-sort-indicator-default}.  For example:
> > +
> > +@lisp
> > +'((?=E2=96=BC ?v) (?=E2=96=B2 ?^)) ; This is the default.
> > +'((?=E2=AC=87 ?v) (?=E2=AC=86 ?^)) ; Alternative arrows.
> > +@end lisp
>
> Using non-ASCII characters in a manual runs the risk of producing
> incorrect output in the printed manual, due to lack of support in the
> fonts used by TeX.  It is better to avoid that.  Here, you use them in
> the example, which seems unnecessary, so I suggest to rewrite the
> example using only ASCII characters (you can mention non-ASCII as a
> possibility without actually showing such an example).
>

Done.

> +@table @kbd
> > +@findex vtable-next-line
> > +@item n
> > +@item <down>
>
> Our conventions are to UPCASE arrow key names, so please use DOWN, UP,
> etc.
>
> Also, since "DOWN" is a label of the key, you should use @key{DOWN},
> not <DOWN>.
>

Done.

> +@findex vtable-goto-next-table
> > +@item <forward-paragraph>
>
> What's "<forward-paragraph>"?  Are there keyboards with a key that has
> such a label?
>

This is remapped in the code.  Is there a way you prefer to refer to
remapped keys?

(defvar-keymap vtable-navigation-map
  "<remap> <forward-paragraph>"  #'vtable-goto-next-table
  "<remap> <backward-paragraph>" #'vtable-goto-previous-table

> --- a/lisp/emacs-lisp/vtable.el
> > +++ b/lisp/emacs-lisp/vtable.el
> > @@ -30,77 +30,220 @@
> >
> >  (defface vtable
> >    '((t :inherit variable-pitch))
> > -  "Face used (by default) for vtables."
> > +  "Face used (by default) for vtable bodies."
> >    :version "29.1"
> >    :group 'faces)
> >
> > +(defface vtable-header
> > +  '((t :inherit (header-line vtable)))
> > +  "Face used (by default) for vtable headers."
> > +  :version "31.1"
> > +  :group 'faces)
> > +
> > +(defface vtable-marked
> > +  '((t :inherit region))
> > +  "Face used (by default) for marked vtable objects."
> > +  :version "31.1"
> > +  :group 'faces)
> > +
> > +(defface vtable-sort-indicator-ascend
> > +  '((t :inherit vtable-header))
> > +  "Face used (by default) for vtable ascend sort indicator."
> > +  :version "31.1"
> > +  :group 'faces)
> > +
> > +(defface vtable-sort-indicator-descend
> > +  '((t :inherit vtable-header))
> > +  "Face used (by default) for vtable descend sort indicator."
> > +  :version "31.1"
> > +  :group 'faces)
>
> Shouldn't these faces be in the vtable group instead?
>

Done.  I'd copied the original vtable.

Once we get feedback from users, I will split the patch into several
digestible smaller patches, but probably not too parsimoniously.

-St=C3=A9phane

--0000000000000fe33a06383e513d
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Sun, Jun 22, 2025 at 4:59=E2=80=AFAM Eli Zaretskii &lt;<a href=3D"mailto=
:eliz@HIDDEN">eliz@HIDDEN</a>&gt; wrote:</span></div></div><div class=3D"=
gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex"><br>
For now, just a few comments from superficial first reading, mainly<br>
about the documentation.<br></blockquote><div>=C2=A0</div><div class=3D"gma=
il_default" style=3D"font-family:monospace">I&#39;m going through the docum=
entation based on your feedback while I have a few minutes today.</div><div=
 class=3D"gmail_default" style=3D"font-family:monospace"><br></div><blockqu=
ote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px=
 solid rgb(204,204,204);padding-left:1ex">
&gt; +A vtable can be inserted into a single buffer only.=C2=A0 An error is=
<br>
&gt; +signaled if a vtable is attempted to be inserted more than once into =
a<br>
&gt; +single buffer, or into multiple buffers.<br>
<br>
The passive voice here is used way too much.=C2=A0 Please rephrase not to<b=
r>
use it.<br></blockquote><div><br></div><div class=3D"gmail_default" style=
=3D"font-family:monospace">Done. I will review the rest of the language.</d=
iv><div class=3D"gmail_default" style=3D"font-family:monospace"><br></div><=
blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l=
eft:1px solid rgb(204,204,204);padding-left:1ex">
&gt;=C2=A0 @table @code<br>
&gt; +@item :name<br>
&gt; +The default table name is `*vtable*`.=C2=A0 Specify this if you have =
more<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0^^^^^^^^^^<br>
This should be @samp{*vtable*}.<br></blockquote><div><br></div><div class=
=3D"gmail_default" style=3D"font-family:monospace">Done.</div><div class=3D=
"gmail_default" style=3D"font-family:monospace"><br></div><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex">
&gt; -In the latter case, if @code{:columns} is non-@code{nil} and there&#3=
9;s<br>
&gt; -more elements in the sequence than there is in @code{:columns}, only<=
br>
&gt; -the @code{:columns} first elements are displayed.<br>
&gt; +In the latter case, if @code{:columns} is non-@code{nil} and there ar=
e<br>
&gt; +more elements in the sequence than there are in @code{:columns}, the<=
br>
&gt; +elements beyond those in @code{:columns} are not displayed.<br>
<br>
Since the elements are not in :columns, the modified text is<br>
confusing, IMO.=C2=A0 I suggest<br>
<br>
=C2=A0 ... the sequence elements beyond the number of elements in<br>
=C2=A0 @code{:columns} will not be shown.<br></blockquote><div><br></div><d=
iv class=3D"gmail_default" style=3D"font-family:monospace">Done.</div><div =
class=3D"gmail_default" style=3D"font-family:monospace"><br></div><blockquo=
te class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px =
solid rgb(204,204,204);padding-left:1ex">
&gt; +@item :object-equal<br>
&gt; +This function tests for the equality of two table objects.=C2=A0 It d=
efaults<br>
&gt; +to @code{eq}.<br>
&gt; +<br>
&gt; +@defun object-equal object1 object2<br>
&gt; +Return non-nil if @var{object1} and @var{object2} are equal, and non-=
nil<br>
&gt; +otherwise.<br>
&gt; +@end defun<br>
<br>
I don&#39;t understand the purpose of this @defun here.=C2=A0 What did you<=
br>
intend to say by placing it here?<br></blockquote><div><br></div><div class=
=3D"gmail_default" style=3D"font-family:monospace">I was following Lars&#39=
;s original format for other &quot;callback&quot; functions.=C2=A0 If I cha=
nge this one, I should change them all for consistency.=C2=A0 What is your =
preference?</div><div class=3D"gmail_default" style=3D"font-family:monospac=
e"><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px =
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +@item :duplicate-objects<br>
&gt; +A vtable assumes all objects inserted into the table are unique among=
<br>
&gt; +themselves.=C2=A0 If the symbol @code{&#39;allow}, the default, allow=
 duplicate<br>
&gt; +objects (the first object found during table operations has primacy),=
 if<br>
<br>
First, please say &quot;If the value is the symbol...&quot;, not just &quot=
;If the<br>
symbol&quot;.=C2=A0 And second, the way we typeset symbols in a Texinfo man=
ual<br>
is by using @code{allow}, without the apostrophe.<br></blockquote><div><br>=
</div><div class=3D"gmail_default" style=3D"font-family:monospace">Done.</d=
iv><div class=3D"gmail_default" style=3D"font-family:monospace"><br></div><=
blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l=
eft:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +@code{&#39;ignore}, silently ignore duplicates leaving the existing o=
bject<br>
&gt; +intact, if @code{&#39;ignore-warn} do the same thing as @code{&#39;ig=
nore} and<br>
&gt; +produce a warning message, or if @code{&#39;error}, signal an error i=
f a<br>
&gt; +duplicate is detected.<br>
<br>
Likewise here about the symbol names.=C2=A0 In addition, please use<br>
semi-colons to separate the description of the different values:<br>
<br>
=C2=A0 ...if it&#39;s |@code{ignore}, silently ignore duplicates leaving th=
e<br>
=C2=A0 existing object intact; if it&#39;s @code{ignore-warn}, do the same.=
..<br></blockquote><div><br></div><div class=3D"gmail_default" style=3D"fon=
t-family:monospace">Done.</div><div class=3D"gmail_default" style=3D"font-f=
amily:monospace"><br></div><blockquote class=3D"gmail_quote" style=3D"margi=
n:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex=
">
&gt; +This is a list where each element is either a string (the column name=
),<br>
&gt; +a plist of keyword/values (to make a @code{vtable-column} object), or=
 a<br>
&gt; +@code{vtable-column} object (created by calling the function<br>
&gt; +@code{make-vtable-column}).<br>
<br>
When you mention a function or a variable, like make-vtable-column<br>
here, it is usually a good idea to have a cross-reference to where<br>
they are described (unless they are described in the same node).<br></block=
quote><div><br></div><div><div class=3D"gmail_default" style=3D"font-family=
:monospace">I will.</div></div><div><br></div><blockquote class=3D"gmail_qu=
ote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,20=
4);padding-left:1ex">
&gt; +that need special treatment, specify a larger guess increment.=C2=A0 =
If nil,<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 ^^^<br>
&quot;nil&quot; should have the @code markup.<br></blockquote><div><br></di=
v><div class=3D"gmail_default" style=3D"font-family:monospace">I corrected =
all the nil references.=C2=A0 It was copy/pasta from docstrings.</div><div =
class=3D"gmail_default" style=3D"font-family:monospace"><br></div><blockquo=
te class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px =
solid rgb(204,204,204);padding-left:1ex">
&gt; +@item comparator<br>
&gt; +This function will be called to compare column values.=C2=A0 Use this=
 when<br>
&gt; +your objects contain data that needs non-numeric or string collation,=
<br>
&gt; +for example, dates.=C2=A0 Another case would be where you want the eq=
uivalent<br>
&gt; +of @code{sort-fold-case}.<br>
&gt; +<br>
&gt; +@defun comparator value1 value2<br>
&gt; +This function is called with two values to compare.=C2=A0 The return =
value<br>
&gt; +should follow the semantics of @code{&lt;} or, @code{string-lessp}.<b=
r>
&gt;=C2=A0 @end defun<br>
<br>
Same question here about this @defun, as above about object-equal.<br></blo=
ckquote><div><br></div><div class=3D"gmail_default" style=3D"font-family:mo=
nospace">Ditto.=C2=A0 Tell me which style you prefer.</div><div class=3D"gm=
ail_default" style=3D"font-family:monospace"><br></div><blockquote class=3D=
"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(2=
04,204,204);padding-left:1ex">
&gt; +@item :sort-indicator<br>
&gt; +This is a list of two cons cells that specify the sort ascending and<=
br>
&gt; +descending characters that are shown on the table header to indicate =
a<br>
&gt; +sorted column.=C2=A0 The first character is the fancier ``graphical&#=
39;&#39;<br>
&gt; +character, and the second a text-only character.=C2=A0 If the first c=
haracter<br>
&gt; +cannot be displayed on the selected frame, the table will show the<br=
>
&gt; +text-only character.=C2=A0 The default is<br>
&gt; +@code{vtable-sort-indicator-default}.=C2=A0 For example:<br>
&gt; +<br>
&gt; +@lisp<br>
&gt; +&#39;((?=E2=96=BC ?v) (?=E2=96=B2 ?^)) ; This is the default.<br>
&gt; +&#39;((?=E2=AC=87 ?v) (?=E2=AC=86 ?^)) ; Alternative arrows.<br>
&gt; +@end lisp<br>
<br>
Using non-ASCII characters in a manual runs the risk of producing<br>
incorrect output in the printed manual, due to lack of support in the<br>
fonts used by TeX.=C2=A0 It is better to avoid that.=C2=A0 Here, you use th=
em in<br>
the example, which seems unnecessary, so I suggest to rewrite the<br>
example using only ASCII characters (you can mention non-ASCII as a<br>
possibility without actually showing such an example).<br></blockquote><div=
><br></div><div class=3D"gmail_default" style=3D"font-family:monospace">Don=
e.</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br></=
div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;bor=
der-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +@table @kbd<br>
&gt; +@findex vtable-next-line<br>
&gt; +@item n<br>
&gt; +@item &lt;down&gt;<br>
<br>
Our conventions are to UPCASE arrow key names, so please use DOWN, UP,<br>
etc.<br>
<br>
Also, since &quot;DOWN&quot; is a label of the key, you should use @key{DOW=
N},<br>
not &lt;DOWN&gt;.<br></blockquote><div><br></div><div class=3D"gmail_defaul=
t" style=3D"font-family:monospace">Done.</div><div class=3D"gmail_default" =
style=3D"font-family:monospace"><br></div><blockquote class=3D"gmail_quote"=
 style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);p=
adding-left:1ex">
&gt; +@findex vtable-goto-next-table<br>
&gt; +@item &lt;forward-paragraph&gt;<br>
<br>
What&#39;s &quot;&lt;forward-paragraph&gt;&quot;?=C2=A0 Are there keyboards=
 with a key that has<br>
such a label?<br></blockquote><div><br></div><div class=3D"gmail_default" s=
tyle=3D"font-family:monospace">This is remapped in the code.=C2=A0 Is there=
 a way you prefer to refer to remapped keys?</div><div class=3D"gmail_defau=
lt" style=3D"font-family:monospace"><br></div><div class=3D"gmail_default" =
style=3D"font-family:monospace">(defvar-keymap vtable-navigation-map<br>=C2=
=A0 &quot;&lt;remap&gt; &lt;forward-paragraph&gt;&quot; =C2=A0#&#39;vtable-=
goto-next-table<br>=C2=A0 &quot;&lt;remap&gt; &lt;backward-paragraph&gt;&qu=
ot; #&#39;vtable-goto-previous-table<br></div><div class=3D"gmail_default" =
style=3D"font-family:monospace"><br></div><blockquote class=3D"gmail_quote"=
 style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);p=
adding-left:1ex">
&gt; --- a/lisp/emacs-lisp/vtable.el<br>
&gt; +++ b/lisp/emacs-lisp/vtable.el<br>
&gt; @@ -30,77 +30,220 @@<br>
&gt; <br>
&gt;=C2=A0 (defface vtable<br>
&gt;=C2=A0 =C2=A0 &#39;((t :inherit variable-pitch))<br>
&gt; -=C2=A0 &quot;Face used (by default) for vtables.&quot;<br>
&gt; +=C2=A0 &quot;Face used (by default) for vtable bodies.&quot;<br>
&gt;=C2=A0 =C2=A0 :version &quot;29.1&quot;<br>
&gt;=C2=A0 =C2=A0 :group &#39;faces)<br>
&gt; <br>
&gt; +(defface vtable-header<br>
&gt; +=C2=A0 &#39;((t :inherit (header-line vtable)))<br>
&gt; +=C2=A0 &quot;Face used (by default) for vtable headers.&quot;<br>
&gt; +=C2=A0 :version &quot;31.1&quot;<br>
&gt; +=C2=A0 :group &#39;faces)<br>
&gt; +<br>
&gt; +(defface vtable-marked<br>
&gt; +=C2=A0 &#39;((t :inherit region))<br>
&gt; +=C2=A0 &quot;Face used (by default) for marked vtable objects.&quot;<=
br>
&gt; +=C2=A0 :version &quot;31.1&quot;<br>
&gt; +=C2=A0 :group &#39;faces)<br>
&gt; +<br>
&gt; +(defface vtable-sort-indicator-ascend<br>
&gt; +=C2=A0 &#39;((t :inherit vtable-header))<br>
&gt; +=C2=A0 &quot;Face used (by default) for vtable ascend sort indicator.=
&quot;<br>
&gt; +=C2=A0 :version &quot;31.1&quot;<br>
&gt; +=C2=A0 :group &#39;faces)<br>
&gt; +<br>
&gt; +(defface vtable-sort-indicator-descend<br>
&gt; +=C2=A0 &#39;((t :inherit vtable-header))<br>
&gt; +=C2=A0 &quot;Face used (by default) for vtable descend sort indicator=
.&quot;<br>
&gt; +=C2=A0 :version &quot;31.1&quot;<br>
&gt; +=C2=A0 :group &#39;faces)<br>
<br>
Shouldn&#39;t these faces be in the vtable group instead?<br></blockquote><=
div><br></div><div class=3D"gmail_default" style=3D"font-family:monospace">=
Done.=C2=A0 I&#39;d copied the original vtable.</div><div class=3D"gmail_de=
fault" style=3D"font-family:monospace"><br></div><div class=3D"gmail_defaul=
t" style=3D"font-family:monospace">Once we get feedback from users, I will =
split the patch into several digestible smaller patches, but probably not t=
oo parsimoniously.</div><div class=3D"gmail_default" style=3D"font-family:m=
onospace"><br></div><div class=3D"gmail_default" style=3D"font-family:monos=
pace">-St=C3=A9phane</div></div></div>

--0000000000000fe33a06383e513d--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 22 Jun 2025 11:00:00 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jun 22 06:59:59 2025
Received: from localhost ([127.0.0.1]:46710 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTIQZ-00005n-Hd
	for submit <at> debbugs.gnu.org; Sun, 22 Jun 2025 06:59:59 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:52860)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uTIQX-00005S-78
 for 78843 <at> debbugs.gnu.org; Sun, 22 Jun 2025 06:59:58 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1uTIQQ-0006cJ-Os; Sun, 22 Jun 2025 06:59:50 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=BRTDqnue8L0YtYR+xTVRffEUl+pqteKTTKqTnBSsG84=; b=LtSk+CNZ280121WxcXda
 0WcUSAWN77VKjrAsoxsx58+28XRJT8armlmOwWcfKAeN/UaDVZG05j3Y8seho3pEfXwm8S+Ysapfg
 c+dTriK5/FXrYQ8iIaBpjcGkRg1IIadJzFLqD4tkw+yiUr7HWayzqfM85f6QGbgZnvF90rW0KXVp7
 4UEhDK/lollmiUh5rd6dNQfT4RiS5MNs1aYEryqBgNFlwyisSbsZj6zx8TZGJbtra24/Oxrjx6CYA
 wy62yh9OTwF/ig7QHcSSqai6oG2PNtSno/xlbLUZilFEgi0Q0HcQSSRFUU5Li/nzxANMtc0J2er/5
 x9guhF7wHisvOg==;
Date: Sun, 22 Jun 2025 13:59:45 +0300
Message-Id: <86cyawghy6.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
In-Reply-To: <CAN+1Hbo41qewJ1jkrgPUM-c1R9QSmBkuUaiA56jtJdt0r+7iTg@HIDDEN>
 (message from =?utf-8?Q?St=C3=A9phane?= Marks on Sun, 22 Jun 2025 06:38:56
 -0400)
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <86ikkogniu.fsf@HIDDEN>
 <CAN+1HboJ=S02rGBVtODe-Jt8T7LcQL12E_1SdS6LH-O_==ugeg@HIDDEN>
 <86h608gljv.fsf@HIDDEN>
 <CAN+1HbpybFrKQz4xqCK+WfOvOXGSSPZautOz-bQZ_QDpLX7xrg@HIDDEN>
 <86frfsgkl1.fsf@HIDDEN>
 <CAN+1Hbo3px=eXDvLE9-4p2SP3ou-=O1EK5iMC=U2m8jU=4CAfA@HIDDEN>
 <86ecvcgj2u.fsf@HIDDEN>
 <CAN+1Hbo41qewJ1jkrgPUM-c1R9QSmBkuUaiA56jtJdt0r+7iTg@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 78843
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org,
 adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Stéphane Marks <shipmints@HIDDEN>
> Date: Sun, 22 Jun 2025 06:38:56 -0400
> Cc: 78843 <at> debbugs.gnu.org, adam@HIDDEN, sbaugh@HIDDEN, 
> 	larsi@HIDDEN, arstoffel@HIDDEN, krisbalintona@HIDDEN
> 
>  So please subdivide the patch into smaller, preferably independent
>  parts, to make the patch review possible, let alone practical.
> 
> Let's see what the vtable user feedback is first and then I'll think about it.  It will be a trade-off between your
> pain and mine.

Patch review isn't supposed to be pain.  Its purpose is to ensure high
enough quality of our code and its maintainability for years to come.
As such, we should all have the common interest of making the patch
review to be as efficient and seamless as possible.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 22 Jun 2025 10:39:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jun 22 06:39:17 2025
Received: from localhost ([127.0.0.1]:46677 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTI6W-0007ZI-B1
	for submit <at> debbugs.gnu.org; Sun, 22 Jun 2025 06:39:17 -0400
Received: from mail-vk1-xa33.google.com ([2607:f8b0:4864:20::a33]:49247)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uTI6T-0007Z3-Do
 for 78843 <at> debbugs.gnu.org; Sun, 22 Jun 2025 06:39:14 -0400
Received: by mail-vk1-xa33.google.com with SMTP id
 71dfb90a1353d-531acaddd5eso657600e0c.2
 for <78843 <at> debbugs.gnu.org>; Sun, 22 Jun 2025 03:39:13 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1750588748; x=1751193548; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=l+fIHO2UmTk8osyWMHV45TcVvdz7DHW9bKoV7/z5k3M=;
 b=PdSp0krgj622WsYhRdai+PSn0Ld40oGqvXLFizZz0ydU9nQLe5xM+nlXJLQjAoDNjZ
 QnGarkboBknMcgskwLsrEidZ8eCFZWR+RTMNz8LSrK01RDuXx2pXu/FI1SOoxNE+yexT
 RYUmMWTJuJtbnNhd7PA0ayBzShD10C4u6VoKL1Z+D9+jWZJcLo2sIlYiDmG88sO85h2N
 YGhOhg1LPzHiUzneunJF4im82dGWhy2HIdaRZHznWgFUVcfTJjZPjW0GQt6qvEvJuSoN
 Nz1EMf31dSEknFqsJdBBUlSeZ0HPf54DEW9Sh15/OLs3piYjfgB7xu0rUA1dcrdEmwsv
 +5ag==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1750588748; x=1751193548;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=l+fIHO2UmTk8osyWMHV45TcVvdz7DHW9bKoV7/z5k3M=;
 b=A8KAVxpD/dDPPeMWuYsEmb28sIIS5CM5hdKsXLW8XwexLihRRP3jSsfDNR0P8kmlqe
 Ta1OW6DEmMSBECOj9FhJnEf1TbNBNMKi4VB7C3SVbsmwYj1f9JrWyIBYi87OKkE5FXto
 ANX0GhyNVSWr9y+VF0idCtP8VQfxYAKLk+ma1oFl0xR3ymRdi40j9AAxufUpe754hzVD
 N5P9xnFCVlKT3S9oOiNYtKOoT37e+QH+f9HbooVsS8w8t937nu1QAvtFM97y247xY4fk
 3IKbO4/Y7QgPjVcX2lTDb1BIngSOKUWy6rjXafWsT4qxM5HNwGIZzQfxP4RUwKaasUzD
 Lw6g==
X-Gm-Message-State: AOJu0Yyx4El0OKgHltwzwSS8LI1tClTiBZBVWt1/0ZTRpy+uuyXjrTsx
 ROtp5U3epEIf4L47XLnfrMMsOEULLipWyGgOD/sxPD1BykI8GjkF2C1dnei2H8iU6RmSIZ16gq9
 IBL32CAc4danf5tEtP4+S67FHfq4tJ0U=
X-Gm-Gg: ASbGnct+Oo44w3fkuu3emhmrz+p8/Mr5Yr7OTL56PUbRnZJRqHr5Q9kR9A2j4sdhQX9
 W96xWMU1GdQU8SSi4lOf+Z6WjFgWMwdcoYjwIaue26eHcXsnz9t0NgoLzvfeSHAKnUUgglqPvVq
 Gm05v10oYpuH6XT7k+RFg+ilhh73XXqhJ0KHoh/HViGkd81A==
X-Google-Smtp-Source: AGHT+IEedPD6aOGBVytKVdT0t/xkW+K4qISOiDDiHPMkSNOMyOjtPFIAj2j0O00OodzFPWnyNukuvz4tuBHuxNBN7Lo=
X-Received: by 2002:a05:6102:b14:b0:4de:81a:7d42 with SMTP id
 ada2fe7eead31-4e9c2797fddmr4876475137.1.1750588747634; Sun, 22 Jun 2025
 03:39:07 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <86ikkogniu.fsf@HIDDEN>
 <CAN+1HboJ=S02rGBVtODe-Jt8T7LcQL12E_1SdS6LH-O_==ugeg@HIDDEN>
 <86h608gljv.fsf@HIDDEN>
 <CAN+1HbpybFrKQz4xqCK+WfOvOXGSSPZautOz-bQZ_QDpLX7xrg@HIDDEN>
 <86frfsgkl1.fsf@HIDDEN>
 <CAN+1Hbo3px=eXDvLE9-4p2SP3ou-=O1EK5iMC=U2m8jU=4CAfA@HIDDEN>
 <86ecvcgj2u.fsf@HIDDEN>
In-Reply-To: <86ecvcgj2u.fsf@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Sun, 22 Jun 2025 06:38:56 -0400
X-Gm-Features: Ac12FXypr50UJs9xxWMENW9jORMLOC1Dt9rBuYcJmb_e1mt5oxIWT3aEWMHV8Wo
Message-ID: <CAN+1Hbo41qewJ1jkrgPUM-c1R9QSmBkuUaiA56jtJdt0r+7iTg@HIDDEN>
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000735e7a063826b454"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78843
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org,
 adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--000000000000735e7a063826b454
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Sun, Jun 22, 2025 at 6:35=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote:

> > From: St=C3=A9phane Marks <shipmints@HIDDEN>
> > Date: Sun, 22 Jun 2025 06:24:39 -0400
> > Cc: 78843 <at> debbugs.gnu.org, adam@HIDDEN, sbaugh@HIDDEN,
> >       larsi@HIDDEN, arstoffel@HIDDEN, krisbalintona@HIDDEN
> >
> >  > Let's start with the vtable users I looped in actually using it.
> >
> >  I don't see how this will help in reviewing the patch. It will allow
> >  those folks to try the patch, but that's a separate job.  Patch review
> >  has to happen regardless, because it might spot issues that no
> >  reasonable amount of testing can.  This is why patch review is a
> >  necessary step in our development process.
> >
> >  > I can attach a vtable.el without the patch file and
> >  > make it easier.
> >
> >  Thanks, but it won't make it easier, no.
> >
> > Of course.  I did say that I would submit a "big-bang" patch a few week=
s
> ago.  The vtable users who are
> > familiar with the code (having implemented their workarounds) should
> have an easier time with the review.
>
> That will help, but I would like to review it as well.  It's part of
> my job.
>
> Your patch lists many changes:
>
> > Bug fixes
> >
> > - vtable-update-object works with no visible or changed window
> > width cache key (bug=3D69837)
> > - Improve vtable--limit-string performance for long
> > strings (bug=3D77684)
> > - Keymap changes:
> >   - Keymap spans the whole header column and header
> >   dividers (bug=3D74701)
> >   - Missing keymap and 'vtable-column property on body/header
> >   dividers and newlines
> >   - mouse-1 and close table bindings in vtable-header-line-map
> >   keymap
> >   - table-drag-resize-column-map keymap for use in body on
> >   dividers (bug=3D74701)
> >   - vtable-header-drag-resize-column-map consolidates
> >   vtable-header-line-map and vtable-drag-resize-column-map
> > - Infer column widths based on formatted elements, not raw
> > elements
> > - Compute columns works when there are no objects at
> > initialization
> > - text-scale-mode support (header and body elements are pixel
> > aligned)
> > - Header line handles display-line-numbers-mode
> > - Redraw row colors on lines below an inserted or removed line
> > - Cache is coherent with its objects (rather than by chance),
> > invalidated where needed
> > - All cache references now cache warming calls vs. mere cache
> > get
> > - Table mutations work when the table buffer is not the current
> > buffer and if the table isn't current
> > - Resize all tables in a buffer when their window
> > resizes (debounced to accommodate frame size dragging)
> > - Spacer goes after the column name on the header if right
> > aligned
> > - Column name defaults to right-aligned when its data are
> > right-aligned
> > - Improve column placeholder message when no objects and no
> > columns are specified
> > - Do not display divider after a row's final column
> > - Option to display divider on the header (was always on)
> > - Treat divider as a part of its preceding column when dragging
> > or sorting
> > - Append table faces to values and column heading names rather
> > than override
> > - Truncated string ellipsis text properties match those of the
> > formatted column entry
> > - Clicking on a header keeps point within table bounds
> > - Use vtable-object-equal and do not assume eq (or via assq,
> > memq)
> > - Header line adjust final column name and sort indicator in a
> > narrow window works as intended
> > - Set window point where needed
> > - Next/previous line remains in the current column
> > - Signal an error if a table is inserted in more than one buffer
> > or more than once in a buffer
> > - vtable--cache-key handle if called when the selected window
> > does not contain a table buffer
> > - Restore "focus" after vtable-remove-object,
> > vtable-update-object, vtable-redisplay-range, vtable-revert if
> > table is current
> > - vtable-revert works when reverted table is not the current
> > table
> > - Mutate the correct associated table in
> > vtable-header-line-sort, vtable--drag-resize-column
> > - vtable--recompute-cache considers the table's sort order
> > - vtable--alter-column-width respects min-width and max-width
> > - vtable-insert-object if integer location specified, does not
> > assume the object list and line cache are in the same order
> > - vtable-insert-object signal an error if integer insert
> > location specified when the table is sorted
> > - vtable-update-object does not assume objects are in the same
> > order as the cache, which might be sorted
> > - vtable-update-object no longer signal "setcar nil" on failed
> > old-object search
> > - vtable-update-object goto table before updating
> > - vtable-remove-object updates numeric column type as needed
> > after removing line
> > - vtable-remove-object signals an error if the specified object
> > is not found
> > - vtable-remove-object leaves point within table bounds if table
> > is current (and there are rows)
> > - Hide event-handler interactive functions from M-x display (not
> > really "commands")
> > - Renamed private vtable-header-line-sort to
> > vtable--header-line-sort
> > - Ensured docstrings for all public functions with added
> > clarifications where needed
> >
> > Enhancements
> >
> > - Custom column comparator for sorting types other than numerics
> > and lexical strings
> > https://lists.gnu.org/archive/html/emacs-devel/2024-10/msg00043.html
> > - Column-width inference can optionally include column-name
> > width vs. just data
> > - Table name slot, defaults to "*vtable*", which is displayed in
> > messages to differentiate vtables
> > - Duplicate object ignore, warning or error, defaults to ignore
> > duplicates
> > - Explicitly identify columns as numeric or non-numeric to avoid
> > the cost of inferring numericalness
> > - Option to sort table after insert or update object
> > - Option to select the newly inserted line if the table is
> > current
> > - Sort indicator characters specifiable
> > - Sort indicator faces for ascending and descending
> > - Unsort the table, toggling between unsorted and the sort-by at
> > initialization
> > - Unsort binding in vtable-map
> > - Add tab to vtable-header-line-map to move point into the table
> > - Functions to compute programmatic row/column colors
> > - Header face independent of body face
> > - Header column alignment independent of from body alignment,
> > defaults to body alignment
> > - Center alignment options
> > - Truncation ellipsis specifiable
> > - Option to make in-buffer header cursor-intangible
> > - Option to make in-buffer "decor" cursor-intangible (spacers,
> > dividers, indicator padding)
> > - Object/line marking/unmarking functions, marked line face
> > - Next/previous line functions that remain in table body bounds
> > - Multi-table commands 'vtable-goto-next-table',
> > 'vtable-goto-previous-table'
> > - Optionally apply row text properties; e.g., for mouse-face,
> > cursor-face
> > - Optional "navigation" keymap adding several useful bindings
> > including "q" to close the table (a la special-mode)
> > - Display a message when interactive column resizing min-width
> > and max-width limits reached
> > - Optionally pulse an updated, inserted, removed line,
> > defaulting to 'pulse-momentary-highlight-one-line'
> > - Go to table beginning/end of body convenience functions
> > - Table and object line-number convenience functions
> > - Table close-action which defaults to 'quit-window'
> > - Extra-data slots on both the table and columns for
> > programmatic reference
>
> It is nigh impossible to review such a large number of changes
> together: how am I supposed to find out which design and
> implementation decisions did you take, when faced with such a large
> number of separate changes?  Without that, the review is not useful,
> even impossible.
>
> So please subdivide the patch into smaller, preferably independent
> parts, to make the patch review possible, let alone practical.
>

Let's see what the vtable user feedback is first and then I'll think about
it.  It will be a trade-off between your pain and mine.

--000000000000735e7a063826b454
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Sun, Jun 22, 2025 at 6:35=E2=80=AFAM Eli Zaretskii &lt;<a href=3D"mailto=
:eliz@HIDDEN">eliz@HIDDEN</a>&gt; wrote:</span></div></div><div class=3D"=
gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex">&gt; From: St=C3=A9phane Marks &lt;<a href=3D"mailto:shipmints@g=
mail.com" target=3D"_blank">shipmints@HIDDEN</a>&gt;<br>
&gt; Date: Sun, 22 Jun 2025 06:24:39 -0400<br>
&gt; Cc: <a href=3D"mailto:78843 <at> debbugs.gnu.org" target=3D"_blank">78843@d=
ebbugs.gnu.org</a>, <a href=3D"mailto:adam@HIDDEN" target=3D"_blank"=
>adam@HIDDEN</a>, <a href=3D"mailto:sbaugh@HIDDEN" target=3D=
"_blank">sbaugh@HIDDEN</a>, <br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:larsi@HIDDEN" target=3D"=
_blank">larsi@HIDDEN</a>, <a href=3D"mailto:arstoffel@HIDDEN" target=
=3D"_blank">arstoffel@HIDDEN</a>, <a href=3D"mailto:krisbalintona@gmail.=
com" target=3D"_blank">krisbalintona@HIDDEN</a><br>
&gt; <br>
&gt;=C2=A0 &gt; Let&#39;s start with the vtable users I looped in actually =
using it.<br>
&gt; <br>
&gt;=C2=A0 I don&#39;t see how this will help in reviewing the patch. It wi=
ll allow<br>
&gt;=C2=A0 those folks to try the patch, but that&#39;s a separate job.=C2=
=A0 Patch review<br>
&gt;=C2=A0 has to happen regardless, because it might spot issues that no<b=
r>
&gt;=C2=A0 reasonable amount of testing can.=C2=A0 This is why patch review=
 is a<br>
&gt;=C2=A0 necessary step in our development process.<br>
&gt; <br>
&gt;=C2=A0 &gt; I can attach a vtable.el without the patch file and<br>
&gt;=C2=A0 &gt; make it easier.<br>
&gt; <br>
&gt;=C2=A0 Thanks, but it won&#39;t make it easier, no.<br>
&gt; <br>
&gt; Of course.=C2=A0 I did say that I would submit a &quot;big-bang&quot; =
patch a few weeks ago.=C2=A0 The vtable users who are<br>
&gt; familiar with the code (having implemented their workarounds) should h=
ave an easier time with the review. <br>
<br>
That will help, but I would like to review it as well.=C2=A0 It&#39;s part =
of<br>
my job.<br>
<br>
Your patch lists many changes:<br>
<br>
&gt; Bug fixes<br>
&gt; <br>
&gt; - vtable-update-object works with no visible or changed window<br>
&gt; width cache key (bug=3D69837)<br>
&gt; - Improve vtable--limit-string performance for long<br>
&gt; strings (bug=3D77684)<br>
&gt; - Keymap changes:<br>
&gt;=C2=A0 =C2=A0- Keymap spans the whole header column and header<br>
&gt;=C2=A0 =C2=A0dividers (bug=3D74701)<br>
&gt;=C2=A0 =C2=A0- Missing keymap and &#39;vtable-column property on body/h=
eader<br>
&gt;=C2=A0 =C2=A0dividers and newlines<br>
&gt;=C2=A0 =C2=A0- mouse-1 and close table bindings in vtable-header-line-m=
ap<br>
&gt;=C2=A0 =C2=A0keymap<br>
&gt;=C2=A0 =C2=A0- table-drag-resize-column-map keymap for use in body on<b=
r>
&gt;=C2=A0 =C2=A0dividers (bug=3D74701)<br>
&gt;=C2=A0 =C2=A0- vtable-header-drag-resize-column-map consolidates<br>
&gt;=C2=A0 =C2=A0vtable-header-line-map and vtable-drag-resize-column-map<b=
r>
&gt; - Infer column widths based on formatted elements, not raw<br>
&gt; elements<br>
&gt; - Compute columns works when there are no objects at<br>
&gt; initialization<br>
&gt; - text-scale-mode support (header and body elements are pixel<br>
&gt; aligned)<br>
&gt; - Header line handles display-line-numbers-mode<br>
&gt; - Redraw row colors on lines below an inserted or removed line<br>
&gt; - Cache is coherent with its objects (rather than by chance),<br>
&gt; invalidated where needed<br>
&gt; - All cache references now cache warming calls vs. mere cache<br>
&gt; get<br>
&gt; - Table mutations work when the table buffer is not the current<br>
&gt; buffer and if the table isn&#39;t current<br>
&gt; - Resize all tables in a buffer when their window<br>
&gt; resizes (debounced to accommodate frame size dragging)<br>
&gt; - Spacer goes after the column name on the header if right<br>
&gt; aligned<br>
&gt; - Column name defaults to right-aligned when its data are<br>
&gt; right-aligned<br>
&gt; - Improve column placeholder message when no objects and no<br>
&gt; columns are specified<br>
&gt; - Do not display divider after a row&#39;s final column<br>
&gt; - Option to display divider on the header (was always on)<br>
&gt; - Treat divider as a part of its preceding column when dragging<br>
&gt; or sorting<br>
&gt; - Append table faces to values and column heading names rather<br>
&gt; than override<br>
&gt; - Truncated string ellipsis text properties match those of the<br>
&gt; formatted column entry<br>
&gt; - Clicking on a header keeps point within table bounds<br>
&gt; - Use vtable-object-equal and do not assume eq (or via assq,<br>
&gt; memq)<br>
&gt; - Header line adjust final column name and sort indicator in a<br>
&gt; narrow window works as intended<br>
&gt; - Set window point where needed<br>
&gt; - Next/previous line remains in the current column<br>
&gt; - Signal an error if a table is inserted in more than one buffer<br>
&gt; or more than once in a buffer<br>
&gt; - vtable--cache-key handle if called when the selected window<br>
&gt; does not contain a table buffer<br>
&gt; - Restore &quot;focus&quot; after vtable-remove-object,<br>
&gt; vtable-update-object, vtable-redisplay-range, vtable-revert if<br>
&gt; table is current<br>
&gt; - vtable-revert works when reverted table is not the current<br>
&gt; table<br>
&gt; - Mutate the correct associated table in<br>
&gt; vtable-header-line-sort, vtable--drag-resize-column<br>
&gt; - vtable--recompute-cache considers the table&#39;s sort order<br>
&gt; - vtable--alter-column-width respects min-width and max-width<br>
&gt; - vtable-insert-object if integer location specified, does not<br>
&gt; assume the object list and line cache are in the same order<br>
&gt; - vtable-insert-object signal an error if integer insert<br>
&gt; location specified when the table is sorted<br>
&gt; - vtable-update-object does not assume objects are in the same<br>
&gt; order as the cache, which might be sorted<br>
&gt; - vtable-update-object no longer signal &quot;setcar nil&quot; on fail=
ed<br>
&gt; old-object search<br>
&gt; - vtable-update-object goto table before updating<br>
&gt; - vtable-remove-object updates numeric column type as needed<br>
&gt; after removing line<br>
&gt; - vtable-remove-object signals an error if the specified object<br>
&gt; is not found<br>
&gt; - vtable-remove-object leaves point within table bounds if table<br>
&gt; is current (and there are rows)<br>
&gt; - Hide event-handler interactive functions from M-x display (not<br>
&gt; really &quot;commands&quot;)<br>
&gt; - Renamed private vtable-header-line-sort to<br>
&gt; vtable--header-line-sort<br>
&gt; - Ensured docstrings for all public functions with added<br>
&gt; clarifications where needed<br>
&gt; <br>
&gt; Enhancements<br>
&gt; <br>
&gt; - Custom column comparator for sorting types other than numerics<br>
&gt; and lexical strings<br>
&gt; <a href=3D"https://lists.gnu.org/archive/html/emacs-devel/2024-10/msg0=
0043.html" rel=3D"noreferrer" target=3D"_blank">https://lists.gnu.org/archi=
ve/html/emacs-devel/2024-10/msg00043.html</a><br>
&gt; - Column-width inference can optionally include column-name<br>
&gt; width vs. just data<br>
&gt; - Table name slot, defaults to &quot;*vtable*&quot;, which is displaye=
d in<br>
&gt; messages to differentiate vtables<br>
&gt; - Duplicate object ignore, warning or error, defaults to ignore<br>
&gt; duplicates<br>
&gt; - Explicitly identify columns as numeric or non-numeric to avoid<br>
&gt; the cost of inferring numericalness<br>
&gt; - Option to sort table after insert or update object<br>
&gt; - Option to select the newly inserted line if the table is<br>
&gt; current<br>
&gt; - Sort indicator characters specifiable<br>
&gt; - Sort indicator faces for ascending and descending<br>
&gt; - Unsort the table, toggling between unsorted and the sort-by at<br>
&gt; initialization<br>
&gt; - Unsort binding in vtable-map<br>
&gt; - Add tab to vtable-header-line-map to move point into the table<br>
&gt; - Functions to compute programmatic row/column colors<br>
&gt; - Header face independent of body face<br>
&gt; - Header column alignment independent of from body alignment,<br>
&gt; defaults to body alignment<br>
&gt; - Center alignment options<br>
&gt; - Truncation ellipsis specifiable<br>
&gt; - Option to make in-buffer header cursor-intangible<br>
&gt; - Option to make in-buffer &quot;decor&quot; cursor-intangible (spacer=
s,<br>
&gt; dividers, indicator padding)<br>
&gt; - Object/line marking/unmarking functions, marked line face<br>
&gt; - Next/previous line functions that remain in table body bounds<br>
&gt; - Multi-table commands &#39;vtable-goto-next-table&#39;,<br>
&gt; &#39;vtable-goto-previous-table&#39;<br>
&gt; - Optionally apply row text properties; e.g., for mouse-face,<br>
&gt; cursor-face<br>
&gt; - Optional &quot;navigation&quot; keymap adding several useful binding=
s<br>
&gt; including &quot;q&quot; to close the table (a la special-mode)<br>
&gt; - Display a message when interactive column resizing min-width<br>
&gt; and max-width limits reached<br>
&gt; - Optionally pulse an updated, inserted, removed line,<br>
&gt; defaulting to &#39;pulse-momentary-highlight-one-line&#39;<br>
&gt; - Go to table beginning/end of body convenience functions<br>
&gt; - Table and object line-number convenience functions<br>
&gt; - Table close-action which defaults to &#39;quit-window&#39;<br>
&gt; - Extra-data slots on both the table and columns for<br>
&gt; programmatic reference<br>
<br>
It is nigh impossible to review such a large number of changes<br>
together: how am I supposed to find out which design and<br>
implementation decisions did you take, when faced with such a large<br>
number of separate changes?=C2=A0 Without that, the review is not useful,<b=
r>
even impossible.<br>
<br>
So please subdivide the patch into smaller, preferably independent<br>
parts, to make the patch review possible, let alone practical.<br></blockqu=
ote><div><br></div><div class=3D"gmail_default" style=3D"font-family:monosp=
ace">Let&#39;s see what the vtable user feedback is first and then I&#39;ll=
 think about it.=C2=A0 It will be a trade-off between your pain and mine.</=
div></div></div>

--000000000000735e7a063826b454--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 22 Jun 2025 10:35:41 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jun 22 06:35:41 2025
Received: from localhost ([127.0.0.1]:46668 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTI32-0007T3-Jt
	for submit <at> debbugs.gnu.org; Sun, 22 Jun 2025 06:35:41 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:40676)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uTI30-0007Sl-7S
 for 78843 <at> debbugs.gnu.org; Sun, 22 Jun 2025 06:35:39 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1uTI2u-00030o-1r; Sun, 22 Jun 2025 06:35:32 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=xtH3JAmNS1gIrzIHjY2/qsejNLKFXFpiiEPBiP0OZ1U=; b=P3Q3aVRVCFLZM7AAhf1o
 NcCEi1BgLIltZj+EmvjGzKDh9XV19nPXhT//NFc0sdNgVv7cp7S3UIqJvsLLYFyW/MncGuRTl3b0O
 /MV6TaCCw2PHzVfB1Cy8wT70RrQjE5+FzJYlOhR7VBl7baHPkptkIIHNqfRzKeWkoEHbmTS4DaEtZ
 iaKhaLyeBo6BBuYx9wYH8Aqa7MxgDiOG/u5YGOo/gwc9kNBBvH8ij/xX18s3KJvDl5KbKZW84TK9E
 0WdABTE08HOKa4ujr8hymFjCyllxgmt1z4Saqc5edZa6Rxtu8lRZdM8cpIXoAnZjTQ2LmkbBCv9XJ
 9b+hF6cGU9wegg==;
Date: Sun, 22 Jun 2025 13:35:21 +0300
Message-Id: <86ecvcgj2u.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
In-Reply-To: <CAN+1Hbo3px=eXDvLE9-4p2SP3ou-=O1EK5iMC=U2m8jU=4CAfA@HIDDEN>
 (message from =?utf-8?Q?St=C3=A9phane?= Marks on Sun, 22 Jun 2025 06:24:39
 -0400)
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <86ikkogniu.fsf@HIDDEN>
 <CAN+1HboJ=S02rGBVtODe-Jt8T7LcQL12E_1SdS6LH-O_==ugeg@HIDDEN>
 <86h608gljv.fsf@HIDDEN>
 <CAN+1HbpybFrKQz4xqCK+WfOvOXGSSPZautOz-bQZ_QDpLX7xrg@HIDDEN>
 <86frfsgkl1.fsf@HIDDEN>
 <CAN+1Hbo3px=eXDvLE9-4p2SP3ou-=O1EK5iMC=U2m8jU=4CAfA@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 78843
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org,
 adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Stéphane Marks <shipmints@HIDDEN>
> Date: Sun, 22 Jun 2025 06:24:39 -0400
> Cc: 78843 <at> debbugs.gnu.org, adam@HIDDEN, sbaugh@HIDDEN, 
> 	larsi@HIDDEN, arstoffel@HIDDEN, krisbalintona@HIDDEN
> 
>  > Let's start with the vtable users I looped in actually using it.
> 
>  I don't see how this will help in reviewing the patch. It will allow
>  those folks to try the patch, but that's a separate job.  Patch review
>  has to happen regardless, because it might spot issues that no
>  reasonable amount of testing can.  This is why patch review is a
>  necessary step in our development process.
> 
>  > I can attach a vtable.el without the patch file and
>  > make it easier.
> 
>  Thanks, but it won't make it easier, no.
> 
> Of course.  I did say that I would submit a "big-bang" patch a few weeks ago.  The vtable users who are
> familiar with the code (having implemented their workarounds) should have an easier time with the review. 

That will help, but I would like to review it as well.  It's part of
my job.

Your patch lists many changes:

> Bug fixes
> 
> - vtable-update-object works with no visible or changed window
> width cache key (bug=69837)
> - Improve vtable--limit-string performance for long
> strings (bug=77684)
> - Keymap changes:
>   - Keymap spans the whole header column and header
>   dividers (bug=74701)
>   - Missing keymap and 'vtable-column property on body/header
>   dividers and newlines
>   - mouse-1 and close table bindings in vtable-header-line-map
>   keymap
>   - table-drag-resize-column-map keymap for use in body on
>   dividers (bug=74701)
>   - vtable-header-drag-resize-column-map consolidates
>   vtable-header-line-map and vtable-drag-resize-column-map
> - Infer column widths based on formatted elements, not raw
> elements
> - Compute columns works when there are no objects at
> initialization
> - text-scale-mode support (header and body elements are pixel
> aligned)
> - Header line handles display-line-numbers-mode
> - Redraw row colors on lines below an inserted or removed line
> - Cache is coherent with its objects (rather than by chance),
> invalidated where needed
> - All cache references now cache warming calls vs. mere cache
> get
> - Table mutations work when the table buffer is not the current
> buffer and if the table isn't current
> - Resize all tables in a buffer when their window
> resizes (debounced to accommodate frame size dragging)
> - Spacer goes after the column name on the header if right
> aligned
> - Column name defaults to right-aligned when its data are
> right-aligned
> - Improve column placeholder message when no objects and no
> columns are specified
> - Do not display divider after a row's final column
> - Option to display divider on the header (was always on)
> - Treat divider as a part of its preceding column when dragging
> or sorting
> - Append table faces to values and column heading names rather
> than override
> - Truncated string ellipsis text properties match those of the
> formatted column entry
> - Clicking on a header keeps point within table bounds
> - Use vtable-object-equal and do not assume eq (or via assq,
> memq)
> - Header line adjust final column name and sort indicator in a
> narrow window works as intended
> - Set window point where needed
> - Next/previous line remains in the current column
> - Signal an error if a table is inserted in more than one buffer
> or more than once in a buffer
> - vtable--cache-key handle if called when the selected window
> does not contain a table buffer
> - Restore "focus" after vtable-remove-object,
> vtable-update-object, vtable-redisplay-range, vtable-revert if
> table is current
> - vtable-revert works when reverted table is not the current
> table
> - Mutate the correct associated table in
> vtable-header-line-sort, vtable--drag-resize-column
> - vtable--recompute-cache considers the table's sort order
> - vtable--alter-column-width respects min-width and max-width
> - vtable-insert-object if integer location specified, does not
> assume the object list and line cache are in the same order
> - vtable-insert-object signal an error if integer insert
> location specified when the table is sorted
> - vtable-update-object does not assume objects are in the same
> order as the cache, which might be sorted
> - vtable-update-object no longer signal "setcar nil" on failed
> old-object search
> - vtable-update-object goto table before updating
> - vtable-remove-object updates numeric column type as needed
> after removing line
> - vtable-remove-object signals an error if the specified object
> is not found
> - vtable-remove-object leaves point within table bounds if table
> is current (and there are rows)
> - Hide event-handler interactive functions from M-x display (not
> really "commands")
> - Renamed private vtable-header-line-sort to
> vtable--header-line-sort
> - Ensured docstrings for all public functions with added
> clarifications where needed
> 
> Enhancements
> 
> - Custom column comparator for sorting types other than numerics
> and lexical strings
> https://lists.gnu.org/archive/html/emacs-devel/2024-10/msg00043.html
> - Column-width inference can optionally include column-name
> width vs. just data
> - Table name slot, defaults to "*vtable*", which is displayed in
> messages to differentiate vtables
> - Duplicate object ignore, warning or error, defaults to ignore
> duplicates
> - Explicitly identify columns as numeric or non-numeric to avoid
> the cost of inferring numericalness
> - Option to sort table after insert or update object
> - Option to select the newly inserted line if the table is
> current
> - Sort indicator characters specifiable
> - Sort indicator faces for ascending and descending
> - Unsort the table, toggling between unsorted and the sort-by at
> initialization
> - Unsort binding in vtable-map
> - Add tab to vtable-header-line-map to move point into the table
> - Functions to compute programmatic row/column colors
> - Header face independent of body face
> - Header column alignment independent of from body alignment,
> defaults to body alignment
> - Center alignment options
> - Truncation ellipsis specifiable
> - Option to make in-buffer header cursor-intangible
> - Option to make in-buffer "decor" cursor-intangible (spacers,
> dividers, indicator padding)
> - Object/line marking/unmarking functions, marked line face
> - Next/previous line functions that remain in table body bounds
> - Multi-table commands 'vtable-goto-next-table',
> 'vtable-goto-previous-table'
> - Optionally apply row text properties; e.g., for mouse-face,
> cursor-face
> - Optional "navigation" keymap adding several useful bindings
> including "q" to close the table (a la special-mode)
> - Display a message when interactive column resizing min-width
> and max-width limits reached
> - Optionally pulse an updated, inserted, removed line,
> defaulting to 'pulse-momentary-highlight-one-line'
> - Go to table beginning/end of body convenience functions
> - Table and object line-number convenience functions
> - Table close-action which defaults to 'quit-window'
> - Extra-data slots on both the table and columns for
> programmatic reference

It is nigh impossible to review such a large number of changes
together: how am I supposed to find out which design and
implementation decisions did you take, when faced with such a large
number of separate changes?  Without that, the review is not useful,
even impossible.

So please subdivide the patch into smaller, preferably independent
parts, to make the patch review possible, let alone practical.

TIA




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 22 Jun 2025 10:25:01 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jun 22 06:25:01 2025
Received: from localhost ([127.0.0.1]:46639 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTHsi-0006sx-Ec
	for submit <at> debbugs.gnu.org; Sun, 22 Jun 2025 06:25:00 -0400
Received: from mail-vk1-xa2c.google.com ([2607:f8b0:4864:20::a2c]:44248)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uTHse-0006sb-Rf
 for 78843 <at> debbugs.gnu.org; Sun, 22 Jun 2025 06:24:58 -0400
Received: by mail-vk1-xa2c.google.com with SMTP id
 71dfb90a1353d-53145c74e15so906034e0c.0
 for <78843 <at> debbugs.gnu.org>; Sun, 22 Jun 2025 03:24:56 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1750587890; x=1751192690; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=2CTewcbbHCjMC12JuJifKH0dWq2DElBNOVtlOOWT0fs=;
 b=ielHkVjdPddlp4ESkUAdKUpMaRk7O+h3j+qliuqCh0l+bdIvvTS2qjgc0n7Gx9mU22
 aQMlOlyEw7Wyz+pzjtcZY1R8flM27+RA327sb4aNsObex9SOTa+pXHanq8yDmJL79ooi
 Dem1YP1Bu1Dij+ZeKffQIUhux0m9HJA4nouWlI5eOLpXlxvuK4frg99kHok3u+N1a9hg
 kMDWU9TGHuW5OXwFqvku7LwFxEmb0+wNOLpYK716384aT2kyoIUK7Uo7wcqzGyohSu2B
 Umrq45A9THb9m58mPr7MESLCgQPTSbKvtlte6PWtiSI7KPr5tPsTuitC8tTQ6L2Ck7Pg
 K+3A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1750587890; x=1751192690;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=2CTewcbbHCjMC12JuJifKH0dWq2DElBNOVtlOOWT0fs=;
 b=knJKGTNr/SWnSZYefZ/D03wWYRbiDKr/6cClg5APoQQvPGlBcrszAsJXsTRVodAlTN
 5RRSGP33+wVWRG1l49jHaCe1usn1zF7fCNfqxkczczzbkdbE/H7R3neFc/IYdMzbdk1G
 hS5GPX4knXRh3H/DRevt4y99Vpra+7rlChfMo6rvrJsyC7oMXRaRQu90HLPzF1ppsHfr
 oGNJYey1Df/79WH0GjpzuRqhT1T4R1nMIIh5ZZWTRjGGQhs+dRsPv3xcaRPzAEv5tXwo
 x9rOTT5AsJOjmQitzwSxcQwC9LCs7mji9HboJ6Rf5rT1XZTcY+Z0ZZ38TMJLHQyNGKTH
 +Iug==
X-Gm-Message-State: AOJu0YyPIU+V93YNw8d0D1U2UtJKXx9et0gyOawq/nSWbZdz5wHC1Ptp
 znAbXDXQN4T1tcTPafu1TEyPQswn1N96UNxNvPkoyucu8LDhLGUxAUEKHPBxL7TSTofmpwSSY+I
 Hv+j4hyBDUHKmOFv7+ekyiEbLqKF7DpY=
X-Gm-Gg: ASbGnctq1Occbx/PCIa11c3jowIgpq3UkMOIC0XoN4nigUoB5FQtCo9rVMHL/bZ7pOz
 EqOQvAHRocNfWHLxb9fMpwR792Po6+MPm/e3JvKo+g7RDMHBWr7FeU6l3qpjOsUYe69cw6QPfQh
 bIkiWMHLCGTYsuNym1DnwSpb4JdyC/hM4lms9GnNJYsM52XX+vu1opOvjs
X-Google-Smtp-Source: AGHT+IGl1yr8VnTYXF/0rl/cRgSXqasEwvmGdNZzApFg5qyjfPSvDzRQrR+D9JXi1f+k5FjMFAjcwhaOdGrJVf52UOE=
X-Received: by 2002:a05:6122:4892:b0:530:7101:68eb with SMTP id
 71dfb90a1353d-531ad68e072mr5747018e0c.4.1750587890549; Sun, 22 Jun 2025
 03:24:50 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <86ikkogniu.fsf@HIDDEN>
 <CAN+1HboJ=S02rGBVtODe-Jt8T7LcQL12E_1SdS6LH-O_==ugeg@HIDDEN>
 <86h608gljv.fsf@HIDDEN>
 <CAN+1HbpybFrKQz4xqCK+WfOvOXGSSPZautOz-bQZ_QDpLX7xrg@HIDDEN>
 <86frfsgkl1.fsf@HIDDEN>
In-Reply-To: <86frfsgkl1.fsf@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Sun, 22 Jun 2025 06:24:39 -0400
X-Gm-Features: Ac12FXymKpTWdFfveYsqYsX9jrD14V7wgb3yDfQVtXNjQDRQawoQhFvFEz5Kko4
Message-ID: <CAN+1Hbo3px=eXDvLE9-4p2SP3ou-=O1EK5iMC=U2m8jU=4CAfA@HIDDEN>
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/alternative; boundary="0000000000005d489f06382681d5"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78843
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org,
 adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--0000000000005d489f06382681d5
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Sun, Jun 22, 2025 at 6:02=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote:

> > From: St=C3=A9phane Marks <shipmints@HIDDEN>
> > Date: Sun, 22 Jun 2025 05:45:59 -0400
> > Cc: 78843 <at> debbugs.gnu.org, adam@HIDDEN, sbaugh@HIDDEN,
> >       larsi@HIDDEN, arstoffel@HIDDEN, krisbalintona@HIDDEN
> >
> > On Sun, Jun 22, 2025 at 5:42=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wr=
ote:
> >
> >  > From: St=C3=A9phane Marks <shipmints@HIDDEN>
> >  > Date: Sun, 22 Jun 2025 05:12:46 -0400
> >  > Cc: 78843 <at> debbugs.gnu.org, adam@HIDDEN, sbaugh@HIDDEN=
,
>
> >  >       larsi@HIDDEN, arstoffel@HIDDEN, krisbalintona@HIDDEN
> >  >
> >  > On Sun, Jun 22, 2025 at 4:59=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN>=
 wrote:
> >  >
> >  >  Is it really not feasible to have separate patches for each bugfix
> and
> >  >  each enhancement (or coherent set of enhancements)?  What if we
> decide
> >  >  to install just some of these changes -- you'd need to update the
> >  >  entire large patch, instead of dropping a relatively small one and
> >  >  leaving the others intact.
> >  >
> >  > I hope we elect to adopt them all.  It would be much more work to
> tease them all out piecemeal and
> >  wouldn't
> >  > really, in the end, produce a better vtable.
> >
> >  Please also consider the inherent difficulties in reviewing such a
> >  large (4K lines!) patch.
> >
> > Let's start with the vtable users I looped in actually using it.
>
> I don't see how this will help in reviewing the patch. It will allow
> those folks to try the patch, but that's a separate job.  Patch review
> has to happen regardless, because it might spot issues that no
> reasonable amount of testing can.  This is why patch review is a
> necessary step in our development process.
>
> > I can attach a vtable.el without the patch file and
> > make it easier.
>
> Thanks, but it won't make it easier, no.
>

Of course.  I did say that I would submit a "big-bang" patch a few weeks
ago.  The vtable users who are familiar with the code (having implemented
their workarounds) should have an easier time with the review.
Fortunately, vtable is still young so fewer users.  I've been using it
every day and I enjoy the revised one much more.

--0000000000005d489f06382681d5
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Sun, Jun 22, 2025 at 6:02=E2=80=AFAM Eli Zaretskii &lt;<a href=3D"mailto=
:eliz@HIDDEN">eliz@HIDDEN</a>&gt; wrote:</span></div></div><div class=3D"=
gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex">&gt; From: St=C3=A9phane Marks &lt;<a href=3D"mailto:shipmints@g=
mail.com" target=3D"_blank">shipmints@HIDDEN</a>&gt;<br>
&gt; Date: Sun, 22 Jun 2025 05:45:59 -0400<br>
&gt; Cc: <a href=3D"mailto:78843 <at> debbugs.gnu.org" target=3D"_blank">78843@d=
ebbugs.gnu.org</a>, <a href=3D"mailto:adam@HIDDEN" target=3D"_blank"=
>adam@HIDDEN</a>, <a href=3D"mailto:sbaugh@HIDDEN" target=3D=
"_blank">sbaugh@HIDDEN</a>, <br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:larsi@HIDDEN" target=3D"=
_blank">larsi@HIDDEN</a>, <a href=3D"mailto:arstoffel@HIDDEN" target=
=3D"_blank">arstoffel@HIDDEN</a>, <a href=3D"mailto:krisbalintona@gmail.=
com" target=3D"_blank">krisbalintona@HIDDEN</a><br>
&gt; <br>
&gt; On Sun, Jun 22, 2025 at 5:42=E2=80=AFAM Eli Zaretskii &lt;<a href=3D"m=
ailto:eliz@HIDDEN" target=3D"_blank">eliz@HIDDEN</a>&gt; wrote:<br>
&gt; <br>
&gt;=C2=A0 &gt; From: St=C3=A9phane Marks &lt;<a href=3D"mailto:shipmints@g=
mail.com" target=3D"_blank">shipmints@HIDDEN</a>&gt;<br>
&gt;=C2=A0 &gt; Date: Sun, 22 Jun 2025 05:12:46 -0400<br>
&gt;=C2=A0 &gt; Cc: <a href=3D"mailto:78843 <at> debbugs.gnu.org" target=3D"_bla=
nk">78843 <at> debbugs.gnu.org</a>, <a href=3D"mailto:adam@HIDDEN" target=
=3D"_blank">adam@HIDDEN</a>, <a href=3D"mailto:sbaugh@HIDDEN=
" target=3D"_blank">sbaugh@HIDDEN</a>, <br>
&gt;=C2=A0 &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:larsi@HIDDEN"=
 target=3D"_blank">larsi@HIDDEN</a>, <a href=3D"mailto:arstoffel@HIDDEN=
m" target=3D"_blank">arstoffel@HIDDEN</a>, <a href=3D"mailto:krisbalinto=
na@HIDDEN" target=3D"_blank">krisbalintona@HIDDEN</a><br>
&gt;=C2=A0 &gt; <br>
&gt;=C2=A0 &gt; On Sun, Jun 22, 2025 at 4:59=E2=80=AFAM Eli Zaretskii &lt;<=
a href=3D"mailto:eliz@HIDDEN" target=3D"_blank">eliz@HIDDEN</a>&gt; wrote=
:<br>
&gt;=C2=A0 &gt; <br>
&gt;=C2=A0 &gt;=C2=A0 Is it really not feasible to have separate patches fo=
r each bugfix and<br>
&gt;=C2=A0 &gt;=C2=A0 each enhancement (or coherent set of enhancements)?=
=C2=A0 What if we decide<br>
&gt;=C2=A0 &gt;=C2=A0 to install just some of these changes -- you&#39;d ne=
ed to update the<br>
&gt;=C2=A0 &gt;=C2=A0 entire large patch, instead of dropping a relatively =
small one and<br>
&gt;=C2=A0 &gt;=C2=A0 leaving the others intact.<br>
&gt;=C2=A0 &gt; <br>
&gt;=C2=A0 &gt; I hope we elect to adopt them all.=C2=A0 It would be much m=
ore work to tease them all out piecemeal and<br>
&gt;=C2=A0 wouldn&#39;t<br>
&gt;=C2=A0 &gt; really, in the end, produce a better vtable.<br>
&gt; <br>
&gt;=C2=A0 Please also consider the inherent difficulties in reviewing such=
 a<br>
&gt;=C2=A0 large (4K lines!) patch.<br>
&gt; <br>
&gt; Let&#39;s start with the vtable users I looped in actually using it.<b=
r>
<br>
I don&#39;t see how this will help in reviewing the patch. It will allow<br=
>
those folks to try the patch, but that&#39;s a separate job.=C2=A0 Patch re=
view<br>
has to happen regardless, because it might spot issues that no<br>
reasonable amount of testing can.=C2=A0 This is why patch review is a<br>
necessary step in our development process.<br>
<br>
&gt; I can attach a vtable.el without the patch file and<br>
&gt; make it easier.<br>
<br>
Thanks, but it won&#39;t make it easier, no.<br></blockquote><div><br></div=
><div class=3D"gmail_default" style=3D"font-family:monospace">Of course.=C2=
=A0 I did say that I would submit a &quot;big-bang&quot; patch a few weeks =
ago.=C2=A0 The vtable users who are familiar with the code (having implemen=
ted their workarounds) should have an easier time with the review.=C2=A0 Fo=
rtunately, vtable is still young so fewer users.=C2=A0 I&#39;ve been using =
it every day and I enjoy the revised one much more.</div></div></div>

--0000000000005d489f06382681d5--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 22 Jun 2025 10:03:07 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jun 22 06:03:07 2025
Received: from localhost ([127.0.0.1]:46619 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTHXW-0005yc-M9
	for submit <at> debbugs.gnu.org; Sun, 22 Jun 2025 06:03:07 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:56182)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uTHXS-0005y0-7P
 for 78843 <at> debbugs.gnu.org; Sun, 22 Jun 2025 06:03:04 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1uTHXL-0004NF-11; Sun, 22 Jun 2025 06:02:56 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=EH5KWckj2o5jNJP61cZCP8DOPZUw6zYi14rwOzqRfCs=; b=m3qGRb1KYNnlEn4Meuzq
 6WB9u7WiB3Aj6F7zYZWQOGmz3ZJc2siZ8AZy8v6tgn1a+MNmHeUW3Pdm35wttd1q2odKslUkEwolk
 FAG57SSKbqXR9U6lqSQotZzhfTEFFiKAXOPEc/5Qg9bDhsM8UO1PDZEaRmanxQQqL4cv6MrwXrsKJ
 ijEiklE9J/kORM9A2VBj2ur3XCsEaiYdeDicC31GWJ3mZ4tHEshgDwI5KwyYPqGLkE1EfKWQhbOcP
 3CBW4c7uvum9zcSsk+KI8JHe8dZZyp39bU5TLIV0Q6dxYeCQ2gyfYMOO+1JrcmiuVlHI6sDsamoK+
 etfNPWUZVToQVA==;
Date: Sun, 22 Jun 2025 13:02:50 +0300
Message-Id: <86frfsgkl1.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
In-Reply-To: <CAN+1HbpybFrKQz4xqCK+WfOvOXGSSPZautOz-bQZ_QDpLX7xrg@HIDDEN>
 (message from =?utf-8?Q?St=C3=A9phane?= Marks on Sun, 22 Jun 2025 05:45:59
 -0400)
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <86ikkogniu.fsf@HIDDEN>
 <CAN+1HboJ=S02rGBVtODe-Jt8T7LcQL12E_1SdS6LH-O_==ugeg@HIDDEN>
 <86h608gljv.fsf@HIDDEN>
 <CAN+1HbpybFrKQz4xqCK+WfOvOXGSSPZautOz-bQZ_QDpLX7xrg@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 78843
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org,
 adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Stéphane Marks <shipmints@HIDDEN>
> Date: Sun, 22 Jun 2025 05:45:59 -0400
> Cc: 78843 <at> debbugs.gnu.org, adam@HIDDEN, sbaugh@HIDDEN, 
> 	larsi@HIDDEN, arstoffel@HIDDEN, krisbalintona@HIDDEN
> 
> On Sun, Jun 22, 2025 at 5:42 AM Eli Zaretskii <eliz@HIDDEN> wrote:
> 
>  > From: Stéphane Marks <shipmints@HIDDEN>
>  > Date: Sun, 22 Jun 2025 05:12:46 -0400
>  > Cc: 78843 <at> debbugs.gnu.org, adam@HIDDEN, sbaugh@HIDDEN, 
>  >       larsi@HIDDEN, arstoffel@HIDDEN, krisbalintona@HIDDEN
>  > 
>  > On Sun, Jun 22, 2025 at 4:59 AM Eli Zaretskii <eliz@HIDDEN> wrote:
>  > 
>  >  Is it really not feasible to have separate patches for each bugfix and
>  >  each enhancement (or coherent set of enhancements)?  What if we decide
>  >  to install just some of these changes -- you'd need to update the
>  >  entire large patch, instead of dropping a relatively small one and
>  >  leaving the others intact.
>  > 
>  > I hope we elect to adopt them all.  It would be much more work to tease them all out piecemeal and
>  wouldn't
>  > really, in the end, produce a better vtable.
> 
>  Please also consider the inherent difficulties in reviewing such a
>  large (4K lines!) patch.
> 
> Let's start with the vtable users I looped in actually using it.

I don't see how this will help in reviewing the patch. It will allow
those folks to try the patch, but that's a separate job.  Patch review
has to happen regardless, because it might spot issues that no
reasonable amount of testing can.  This is why patch review is a
necessary step in our development process.

> I can attach a vtable.el without the patch file and
> make it easier.

Thanks, but it won't make it easier, no.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 22 Jun 2025 09:46:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jun 22 05:46:19 2025
Received: from localhost ([127.0.0.1]:46592 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTHHG-0005CQ-QV
	for submit <at> debbugs.gnu.org; Sun, 22 Jun 2025 05:46:19 -0400
Received: from mail-vs1-xe2d.google.com ([2607:f8b0:4864:20::e2d]:49511)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uTHHE-0005C9-1w
 for 78843 <at> debbugs.gnu.org; Sun, 22 Jun 2025 05:46:17 -0400
Received: by mail-vs1-xe2d.google.com with SMTP id
 ada2fe7eead31-4c9cea30173so844462137.3
 for <78843 <at> debbugs.gnu.org>; Sun, 22 Jun 2025 02:46:16 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1750585570; x=1751190370; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=FPDA+O+Y+lhdKgeRdpqLB4XAqw7lsC7RI03HWDwObhw=;
 b=kJRxqYvgWHDGB50T4xFvOMVO8u5Sto3BG/Fd/DXfKtY6qvDuGgT3HZihoSAZnEHOPW
 vemJl9Azbd4emFBbLFy+omYeJIjFsJinkk31rYc1szwv4cONy4tyzGREFXFllik9fcds
 uZ/DkjA1JujwUzloTT66LUU320nC2TStmlnesJTYAcyBLr1LFmvdB4ZBrLa/BFp6p5QF
 JqAMPzBC7k0fRbYHGtZ2flknNttj0NIZDTx6eaS1H1ZKN/IkxT01UYwNXl+4sbb+jns/
 BzjsWo3MMOYfXGrrKl9cr1lAPGpMpvE/eocnwGrjbvIgTcwN4+cvfnCdA9+mWsp3M8LW
 EuIQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1750585570; x=1751190370;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=FPDA+O+Y+lhdKgeRdpqLB4XAqw7lsC7RI03HWDwObhw=;
 b=E98vo64Eo0K1T21ji/lFTsVTNz4VBi8x6FaX4zOsUiaL+TPL3kZogNiPxdBP5QWbAO
 3qu1TrOwLFfMOKJB1nNgBKJbpURsnurjoi3iMTt4VxwwLl22k69Nzj/GgaZVcZ/rdHol
 QgpTOFiC29K/x6Ry5XZL0oAYLLrH60CoadjfANYEOQNKeEWqkot6XxnsUdXiQ8GK99BX
 McA1fER/T5Fb8QG6o523Iqg1Z37GawKDHqvOCx+7gjnyonxJl1ERUo+7/i4FbgkezKxF
 GICUbJou8p9XqRX/5ITH3qrw7KqiVIopBIwaOXYjUvKaXzr/g91Sz+au+NEpntsdA+wh
 2j4A==
X-Gm-Message-State: AOJu0YzGeMm9s4AO4S4dajKFAdaGXQ7wxbvXWSkP3UyMt0wGQbjDX8fB
 2bjMHApElNQ/tB9NBgDqLuOUA7ZfePBs+dus2N3/Pzbr6gmGMbx+mkqIQp7IDtetbbDI9xiV9l8
 Bq7qajkYPXaGJ0z3qQ/BaT594WR0TZZA=
X-Gm-Gg: ASbGncvC+jYOrdDr6uCrAd/6MkawCMUDktVacXzW2sExJYP+8rpviIL4IAefK4jT2FW
 kdOEQ9hHXvVWUjFkj8Qiu3vLAAUMjKsWdXhBFoWA86QaZs/XB//VKz+CY782P8AhQ0pxe0Z5Noe
 z5VOvJeneJqEqoqPwcxA6svvOFNvDblrFV1G5blazoG7cRsQ==
X-Google-Smtp-Source: AGHT+IG5ibv2C0smeXFm37pXCrS/LDw9Fk+Rt0puu4lZcZMmRpAbQRe6N2HYQD3AKH2rkrbv2Ysftwpm5R5YegIBD/g=
X-Received: by 2002:a05:6102:41a4:b0:4e6:67f6:e9af with SMTP id
 ada2fe7eead31-4e9c284a5camr5204981137.9.1750585570292; Sun, 22 Jun 2025
 02:46:10 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <86ikkogniu.fsf@HIDDEN>
 <CAN+1HboJ=S02rGBVtODe-Jt8T7LcQL12E_1SdS6LH-O_==ugeg@HIDDEN>
 <86h608gljv.fsf@HIDDEN>
In-Reply-To: <86h608gljv.fsf@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Sun, 22 Jun 2025 05:45:59 -0400
X-Gm-Features: Ac12FXyha1hIRWc37TxLX8cFcmwIvTBxK8tJi21wRGkelSaHb5Yq6mMdF5idw9w
Message-ID: <CAN+1HbpybFrKQz4xqCK+WfOvOXGSSPZautOz-bQZ_QDpLX7xrg@HIDDEN>
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/alternative; boundary="00000000000010f7bb063825f74b"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78843
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org,
 adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--00000000000010f7bb063825f74b
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Sun, Jun 22, 2025 at 5:42=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote:

> > From: St=C3=A9phane Marks <shipmints@HIDDEN>
> > Date: Sun, 22 Jun 2025 05:12:46 -0400
> > Cc: 78843 <at> debbugs.gnu.org, adam@HIDDEN, sbaugh@HIDDEN,
> >       larsi@HIDDEN, arstoffel@HIDDEN, krisbalintona@HIDDEN
> >
> > On Sun, Jun 22, 2025 at 4:59=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wr=
ote:
> >
> >  Is it really not feasible to have separate patches for each bugfix and
> >  each enhancement (or coherent set of enhancements)?  What if we decide
> >  to install just some of these changes -- you'd need to update the
> >  entire large patch, instead of dropping a relatively small one and
> >  leaving the others intact.
> >
> > I hope we elect to adopt them all.  It would be much more work to tease
> them all out piecemeal and wouldn't
> > really, in the end, produce a better vtable.
>
> Please also consider the inherent difficulties in reviewing such a
> large (4K lines!) patch.
>

Let's start with the vtable users I looped in actually using it.  I can
attach a vtable.el without the patch file and make it easier.

> WRT quoting symbols, there are examples in the texinfo doc collection
> that suggest the convention is not
> > enforced:
>
> They are all bugs that need to be fixed.  Patches welcome.  "Not
> enforced" would be a wrong conclusion from these omissions.
>

Cool.  I have a patch or two to ediff coming and ediff doesn't follow ELisp
formatting conventions which I found confusing.

--00000000000010f7bb063825f74b
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Sun, Jun 22, 2025 at 5:42=E2=80=AFAM Eli Zaretskii &lt;<a href=3D"mailto=
:eliz@HIDDEN">eliz@HIDDEN</a>&gt; wrote:</span></div></div><div class=3D"=
gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex">&gt; From: St=C3=A9phane Marks &lt;<a href=3D"mailto:shipmints@g=
mail.com" target=3D"_blank">shipmints@HIDDEN</a>&gt;<br>
&gt; Date: Sun, 22 Jun 2025 05:12:46 -0400<br>
&gt; Cc: <a href=3D"mailto:78843 <at> debbugs.gnu.org" target=3D"_blank">78843@d=
ebbugs.gnu.org</a>, <a href=3D"mailto:adam@HIDDEN" target=3D"_blank"=
>adam@HIDDEN</a>, <a href=3D"mailto:sbaugh@HIDDEN" target=3D=
"_blank">sbaugh@HIDDEN</a>, <br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:larsi@HIDDEN" target=3D"=
_blank">larsi@HIDDEN</a>, <a href=3D"mailto:arstoffel@HIDDEN" target=
=3D"_blank">arstoffel@HIDDEN</a>, <a href=3D"mailto:krisbalintona@gmail.=
com" target=3D"_blank">krisbalintona@HIDDEN</a><br>
&gt; <br>
&gt; On Sun, Jun 22, 2025 at 4:59=E2=80=AFAM Eli Zaretskii &lt;<a href=3D"m=
ailto:eliz@HIDDEN" target=3D"_blank">eliz@HIDDEN</a>&gt; wrote:<br>
&gt; <br>
&gt;=C2=A0 Is it really not feasible to have separate patches for each bugf=
ix and<br>
&gt;=C2=A0 each enhancement (or coherent set of enhancements)?=C2=A0 What i=
f we decide<br>
&gt;=C2=A0 to install just some of these changes -- you&#39;d need to updat=
e the<br>
&gt;=C2=A0 entire large patch, instead of dropping a relatively small one a=
nd<br>
&gt;=C2=A0 leaving the others intact.<br>
&gt; <br>
&gt; I hope we elect to adopt them all.=C2=A0 It would be much more work to=
 tease them all out piecemeal and wouldn&#39;t<br>
&gt; really, in the end, produce a better vtable.<br>
<br>
Please also consider the inherent difficulties in reviewing such a<br>
large (4K lines!) patch.<br></blockquote><div><br></div><div class=3D"gmail=
_default" style=3D"font-family:monospace">Let&#39;s start with the vtable u=
sers I looped in actually using it.=C2=A0 I can attach a vtable.el without =
the patch file and make it easier.</div><div class=3D"gmail_default" style=
=3D"font-family:monospace"><br></div><blockquote class=3D"gmail_quote" styl=
e=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddin=
g-left:1ex">
&gt; WRT quoting symbols, there are examples in the texinfo doc collection =
that suggest the convention is not<br>
&gt; enforced:<br>
<br>
They are all bugs that need to be fixed.=C2=A0 Patches welcome.=C2=A0 &quot=
;Not<br>
enforced&quot; would be a wrong conclusion from these omissions.<br></block=
quote><div><br></div><div class=3D"gmail_default" style=3D"font-family:mono=
space">Cool.=C2=A0 I have a patch or two to ediff coming and ediff doesn&#3=
9;t follow ELisp formatting conventions which I found confusing.</div></div=
></div>

--00000000000010f7bb063825f74b--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 22 Jun 2025 09:42:11 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jun 22 05:42:11 2025
Received: from localhost ([127.0.0.1]:46585 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTHDG-0004zg-KJ
	for submit <at> debbugs.gnu.org; Sun, 22 Jun 2025 05:42:11 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:37646)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uTHDB-0004z9-UE
 for 78843 <at> debbugs.gnu.org; Sun, 22 Jun 2025 05:42:08 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1uTHD5-0000oG-CK; Sun, 22 Jun 2025 05:41:59 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=rdHJSnc/7wkIAAetxx0ztrBwednlST8oRB3AMEzDg20=; b=sHXgQyvvjnJ8HAcW7I3a
 xJ7RWvpLCUxTu2xoeHCOqRWl4sKBz7CI01VpMPSPs3jll/sSb3UIXnvrF4uyOBSVuiudiOSX5XY7d
 NTq8w71i/J/YG/unfJZZMxNOYshU4xAgzDWKVvRWhYOUn+0MAK/vuTIIbnDN0Uao82u+midxSDX89
 wmJpVIpoOvJf0v7M4y8dcsqpS/3kQcger8IytBnPfx90m+kPgvu8cOdCNZkHGpm91KRgfqqAfwN3N
 ahw5qTRD4CgpJ43/w4svf2O9BPrUZnUQ9pOgX2ExwYlTNm2FdEzPrr6uUBh7bWelLGeFqxES0fbTL
 abuu1HuOKP8GGQ==;
Date: Sun, 22 Jun 2025 12:41:56 +0300
Message-Id: <86h608gljv.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
In-Reply-To: <CAN+1HboJ=S02rGBVtODe-Jt8T7LcQL12E_1SdS6LH-O_==ugeg@HIDDEN>
 (message from =?utf-8?Q?St=C3=A9phane?= Marks on Sun, 22 Jun 2025 05:12:46
 -0400)
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <86ikkogniu.fsf@HIDDEN>
 <CAN+1HboJ=S02rGBVtODe-Jt8T7LcQL12E_1SdS6LH-O_==ugeg@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 78843
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org,
 adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Stéphane Marks <shipmints@HIDDEN>
> Date: Sun, 22 Jun 2025 05:12:46 -0400
> Cc: 78843 <at> debbugs.gnu.org, adam@HIDDEN, sbaugh@HIDDEN, 
> 	larsi@HIDDEN, arstoffel@HIDDEN, krisbalintona@HIDDEN
> 
> On Sun, Jun 22, 2025 at 4:59 AM Eli Zaretskii <eliz@HIDDEN> wrote:
> 
>  Is it really not feasible to have separate patches for each bugfix and
>  each enhancement (or coherent set of enhancements)?  What if we decide
>  to install just some of these changes -- you'd need to update the
>  entire large patch, instead of dropping a relatively small one and
>  leaving the others intact.
> 
> I hope we elect to adopt them all.  It would be much more work to tease them all out piecemeal and wouldn't
> really, in the end, produce a better vtable.

Please also consider the inherent difficulties in reviewing such a
large (4K lines!) patch.

> WRT quoting symbols, there are examples in the texinfo doc collection that suggest the convention is not
> enforced:

They are all bugs that need to be fixed.  Patches welcome.  "Not
enforced" would be a wrong conclusion from these omissions.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 22 Jun 2025 09:13:08 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jun 22 05:13:08 2025
Received: from localhost ([127.0.0.1]:46555 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTGl9-0003hT-3t
	for submit <at> debbugs.gnu.org; Sun, 22 Jun 2025 05:13:08 -0400
Received: from mail-vs1-xe2c.google.com ([2607:f8b0:4864:20::e2c]:53524)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uTGl5-0003gn-Su
 for 78843 <at> debbugs.gnu.org; Sun, 22 Jun 2025 05:13:05 -0400
Received: by mail-vs1-xe2c.google.com with SMTP id
 ada2fe7eead31-4e9c8a2026bso465371137.3
 for <78843 <at> debbugs.gnu.org>; Sun, 22 Jun 2025 02:13:03 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1750583578; x=1751188378; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=Vx9ymRzAoKiO8Pb6l44idRZjNyUvGom+GZLgBxzGDis=;
 b=hNnLmbcaJ9nbFIoGHeZM/fBfBpGLnD1Rgs2C9Mkf3uC4X/8pkMIPlTGMCamnVzLCMl
 9kqeSnnLvi2GpftcW7ALA6/lyx1UnBpUCF3C1upIgUFV1jfBVu9c4gTfWHQePW0ntWzI
 vff4tQK/OQEXVMlHFMVALRzuiYh8f/hitb7Ly/k0y/NRga2zF4qOhWJv7GlpKOX20X73
 p7PSz/R4GRSimx7hEFYt8rxt5m54wB3ZCWwgOPBX/fRe1zCy7PiUtprJxr9oI03nQbik
 lUWVNh3389fGZbOPx2e9fM0rtkMkxJzCK4obNwXLWJ1WVYeyaIVYw5QATZu+qkwzmZ9m
 k4qQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1750583578; x=1751188378;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=Vx9ymRzAoKiO8Pb6l44idRZjNyUvGom+GZLgBxzGDis=;
 b=tWpgvcTHlQClgGczfhwS3Y9f6VzR7WeIZAOJWskCyJ+2Ec2FJ7GhbKfsQSIQIbF+9X
 okoqd3RUmxvW3XqUdlezN3ln8LhVpWVEAr5TpZaiSJCtQxHKnQMdtdaRcIMLVNiBryB7
 8BE9Yy/YBAkwEngTRjOr/kYeUYVRufSkO8DBPuTUtF3GAG2KUgpzD1SazHGQmvbhsiTs
 cnQ23EpMDfHwI3GUhF1kxtRxGnBWIoHzG6Onxe77HVV2AOHh5P6cenXSuXAdnmbstv/f
 /US1m5WBP919wlllUVIV/UwXZWgS6grB5CnjQCnYs5aM3SK9pJJYIF7elWmFrQ9i1E1A
 bNmQ==
X-Gm-Message-State: AOJu0Yy+ERhmVlKij7LOVOuASnPCHT6yzpaWAh9rSkYTiOxM76Ml0Zpu
 +hXaI/Jb6wp1cCRdbHOIZRbZQxK7eMsi1yu3M/DxfjDwQg2SvTVpueiWzsJgD4GMbv/yvedmiTc
 1jWPMc3QGpe+WvmvjSji50NHLQyCfdpc=
X-Gm-Gg: ASbGncuPhwuzVZTIyvO2opsVIVdkr6asyyC9bO2VfGGM7OgWY4EMzPdQw8W6bdxc3yh
 lJw58sDFc2WC6qS3LRBnkOzY0ThjAYK/V3SGBZZuAjEuM0RK7XAijD53GX7BkiIpiTcChx6nyHx
 F98JnMoFAZds4kiW7Nru+3JNeJ3RHKMIYH2hN31SHvragNLA==
X-Google-Smtp-Source: AGHT+IHH2xxeFFX7E15CGIlXbrn/lZ5wY0636su1Yus3P1x/EoHUvS9m5qpYGwCmofEgjxYcveh6f3RarsI19GZGNMg=
X-Received: by 2002:a05:6102:32cf:b0:4e7:f3d3:a283 with SMTP id
 ada2fe7eead31-4e9c2d6b199mr5211579137.25.1750583577952; Sun, 22 Jun 2025
 02:12:57 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 <86ikkogniu.fsf@HIDDEN>
In-Reply-To: <86ikkogniu.fsf@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Sun, 22 Jun 2025 05:12:46 -0400
X-Gm-Features: Ac12FXxI5TKs3MfpO5xRwny1cAK6oCR6En1uoxRt_E5Vin61dNdwP9ltxZqz2zw
Message-ID: <CAN+1HboJ=S02rGBVtODe-Jt8T7LcQL12E_1SdS6LH-O_==ugeg@HIDDEN>
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/alternative; boundary="00000000000050452e0638258032"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78843
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org,
 adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--00000000000050452e0638258032
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Sun, Jun 22, 2025 at 4:59=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote:

> > Cc: Adam Porter <adam@HIDDEN>, Spencer Baugh <
> sbaugh@HIDDEN>,
> >  Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <
> arstoffel@HIDDEN>,
> >  Kristoffer Balintona <krisbalintona@HIDDEN>
> > From: St=C3=A9phane Marks <shipmints@HIDDEN>
> > Date: Sat, 21 Jun 2025 11:41:50 -0400
> >
> > On Thu, Jun 19, 2025 at 4:25=E2=80=AFPM St=C3=A9phane Marks <shipmints@=
gmail.com>
> wrote:
> >
> >  Bug for a consolidated patch which is in the process of being prepared=
.
> >
> > Large patch attached.  All the changes, aside from bug fixes, should be
> backward compatible.  I've cc'd a few
> > of the major vtable users whose code bases helped inform many bug fixes
> and enhancements.  Some of you
> > have helped test and provide feedback along the way.  Please try this
> out (and review the updated texinfo
> > documentation if you want to).
>
> Thanks.
>
> Is it really not feasible to have separate patches for each bugfix and
> each enhancement (or coherent set of enhancements)?  What if we decide
> to install just some of these changes -- you'd need to update the
> entire large patch, instead of dropping a relatively small one and
> leaving the others intact.
>

I hope we elect to adopt them all.  It would be much more work to tease
them all out piecemeal and wouldn't really, in the end, produce a better
vtable.

For now, just a few comments from superficial first reading, mainly
> about the documentation.
>

I'll review the below and adjust.  Much of the style was just carried over
from the original vtable doc.  Happy to improve it.

WRT quoting symbols, there are examples in the texinfo doc collection that
suggest the convention is not enforced:

./misc/srecode.texi:such as the symbol @code{'prototype} for prototype
functions, or

./misc/ses.texi:@code{'ses-prin1}.

./misc/idlwave.texi:the single symbol @code{'everything}, all the copious
shell input is

./misc/auth.texi:Set this variable to @code{'trivia} to see lots of output
in


> > +A vtable can be inserted into a single buffer only.  An error is
> > +signaled if a vtable is attempted to be inserted more than once into a
> > +single buffer, or into multiple buffers.
>
> The passive voice here is used way too much.  Please rephrase not to
> use it.
>
> >  @table @code
> > +@item :name
> > +The default table name is `*vtable*`.  Specify this if you have more
>                              ^^^^^^^^^^
> This should be @samp{*vtable*}.
>
> > -In the latter case, if @code{:columns} is non-@code{nil} and there's
> > -more elements in the sequence than there is in @code{:columns}, only
> > -the @code{:columns} first elements are displayed.
> > +In the latter case, if @code{:columns} is non-@code{nil} and there are
> > +more elements in the sequence than there are in @code{:columns}, the
> > +elements beyond those in @code{:columns} are not displayed.
>
> Since the elements are not in :columns, the modified text is
> confusing, IMO.  I suggest
>
>   ... the sequence elements beyond the number of elements in
>   @code{:columns} will not be shown.
>
> > +@item :object-equal
> > +This function tests for the equality of two table objects.  It default=
s
> > +to @code{eq}.
> > +
> > +@defun object-equal object1 object2
> > +Return non-nil if @var{object1} and @var{object2} are equal, and non-n=
il
> > +otherwise.
> > +@end defun
>
> I don't understand the purpose of this @defun here.  What did you
> intend to say by placing it here?
>
> > +@item :duplicate-objects
> > +A vtable assumes all objects inserted into the table are unique among
> > +themselves.  If the symbol @code{'allow}, the default, allow duplicate
> > +objects (the first object found during table operations has primacy), =
if
>
> First, please say "If the value is the symbol...", not just "If the
> symbol".  And second, the way we typeset symbols in a Texinfo manual
> is by using @code{allow}, without the apostrophe.
>
> > +@code{'ignore}, silently ignore duplicates leaving the existing object
> > +intact, if @code{'ignore-warn} do the same thing as @code{'ignore} and
> > +produce a warning message, or if @code{'error}, signal an error if a
> > +duplicate is detected.
>
> Likewise here about the symbol names.  In addition, please use
> semi-colons to separate the description of the different values:
>
>   ...if it's |@code{ignore}, silently ignore duplicates leaving the
>   existing object intact; if it's @code{ignore-warn}, do the same...
>
> > +This is a list where each element is either a string (the column name)=
,
> > +a plist of keyword/values (to make a @code{vtable-column} object), or =
a
> > +@code{vtable-column} object (created by calling the function
> > +@code{make-vtable-column}).
>
> When you mention a function or a variable, like make-vtable-column
> here, it is usually a good idea to have a cross-reference to where
> they are described (unless they are described in the same node).
>
> > +that need special treatment, specify a larger guess increment.  If nil=
,
>                                                                       ^^^
> "nil" should have the @code markup.
>
> > +@item comparator
> > +This function will be called to compare column values.  Use this when
> > +your objects contain data that needs non-numeric or string collation,
> > +for example, dates.  Another case would be where you want the equivale=
nt
> > +of @code{sort-fold-case}.
> > +
> > +@defun comparator value1 value2
> > +This function is called with two values to compare.  The return value
> > +should follow the semantics of @code{<} or, @code{string-lessp}.
> >  @end defun
>
> Same question here about this @defun, as above about object-equal.
>
> > +@item :sort-indicator
> > +This is a list of two cons cells that specify the sort ascending and
> > +descending characters that are shown on the table header to indicate a
> > +sorted column.  The first character is the fancier ``graphical''
> > +character, and the second a text-only character.  If the first charact=
er
> > +cannot be displayed on the selected frame, the table will show the
> > +text-only character.  The default is
> > +@code{vtable-sort-indicator-default}.  For example:
> > +
> > +@lisp
> > +'((?=E2=96=BC ?v) (?=E2=96=B2 ?^)) ; This is the default.
> > +'((?=E2=AC=87 ?v) (?=E2=AC=86 ?^)) ; Alternative arrows.
> > +@end lisp
>
> Using non-ASCII characters in a manual runs the risk of producing
> incorrect output in the printed manual, due to lack of support in the
> fonts used by TeX.  It is better to avoid that.  Here, you use them in
> the example, which seems unnecessary, so I suggest to rewrite the
> example using only ASCII characters (you can mention non-ASCII as a
> possibility without actually showing such an example).
>
> > +@table @kbd
> > +@findex vtable-next-line
> > +@item n
> > +@item <down>
>
> Our conventions are to UPCASE arrow key names, so please use DOWN, UP,
> etc.
>
> Also, since "DOWN" is a label of the key, you should use @key{DOWN},
> not <DOWN>.
>
> > +@findex vtable-goto-next-table
> > +@item <forward-paragraph>
>
> What's "<forward-paragraph>"?  Are there keyboards with a key that has
> such a label?
>
> > --- a/lisp/emacs-lisp/vtable.el
> > +++ b/lisp/emacs-lisp/vtable.el
> > @@ -30,77 +30,220 @@
> >
> >  (defface vtable
> >    '((t :inherit variable-pitch))
> > -  "Face used (by default) for vtables."
> > +  "Face used (by default) for vtable bodies."
> >    :version "29.1"
> >    :group 'faces)
> >
> > +(defface vtable-header
> > +  '((t :inherit (header-line vtable)))
> > +  "Face used (by default) for vtable headers."
> > +  :version "31.1"
> > +  :group 'faces)
> > +
> > +(defface vtable-marked
> > +  '((t :inherit region))
> > +  "Face used (by default) for marked vtable objects."
> > +  :version "31.1"
> > +  :group 'faces)
> > +
> > +(defface vtable-sort-indicator-ascend
> > +  '((t :inherit vtable-header))
> > +  "Face used (by default) for vtable ascend sort indicator."
> > +  :version "31.1"
> > +  :group 'faces)
> > +
> > +(defface vtable-sort-indicator-descend
> > +  '((t :inherit vtable-header))
> > +  "Face used (by default) for vtable descend sort indicator."
> > +  :version "31.1"
> > +  :group 'faces)
>
> Shouldn't these faces be in the vtable group instead?
>

Yessir.

--00000000000050452e0638258032
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Sun, Jun 22, 2025 at 4:59=E2=80=AFAM Eli Zaretskii &lt;<a href=3D"mailto=
:eliz@HIDDEN">eliz@HIDDEN</a>&gt; wrote:</span></div></div><div class=3D"=
gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex">&gt; Cc: Adam Porter &lt;<a href=3D"mailto:adam@HIDDEN" t=
arget=3D"_blank">adam@HIDDEN</a>&gt;, Spencer Baugh &lt;<a href=3D"m=
ailto:sbaugh@HIDDEN" target=3D"_blank">sbaugh@HIDDEN</a>&gt=
;,<br>
&gt;=C2=A0 Lars Ingebrigtsen &lt;<a href=3D"mailto:larsi@HIDDEN" target=
=3D"_blank">larsi@HIDDEN</a>&gt;, Augusto Stoffel &lt;<a href=3D"mailto:a=
rstoffel@HIDDEN" target=3D"_blank">arstoffel@HIDDEN</a>&gt;,<br>
&gt;=C2=A0 Kristoffer Balintona &lt;<a href=3D"mailto:krisbalintona@HIDDEN=
om" target=3D"_blank">krisbalintona@HIDDEN</a>&gt;<br>
&gt; From: St=C3=A9phane Marks &lt;<a href=3D"mailto:shipmints@HIDDEN" t=
arget=3D"_blank">shipmints@HIDDEN</a>&gt;<br>
&gt; Date: Sat, 21 Jun 2025 11:41:50 -0400<br>
&gt; <br>
&gt; On Thu, Jun 19, 2025 at 4:25=E2=80=AFPM St=C3=A9phane Marks &lt;<a hre=
f=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>&=
gt; wrote:<br>
&gt; <br>
&gt;=C2=A0 Bug for a consolidated patch which is in the process of being pr=
epared.<br>
&gt; <br>
&gt; Large patch attached.=C2=A0 All the changes, aside from bug fixes, sho=
uld be backward compatible.=C2=A0 I&#39;ve cc&#39;d a few<br>
&gt; of the major vtable users whose code bases helped inform many bug fixe=
s and enhancements.=C2=A0 Some of you<br>
&gt; have helped test and provide feedback along the way.=C2=A0 Please try =
this out (and review the updated texinfo<br>
&gt; documentation if you want to).<br>
<br>
Thanks.<br>
<br>
Is it really not feasible to have separate patches for each bugfix and<br>
each enhancement (or coherent set of enhancements)?=C2=A0 What if we decide=
<br>
to install just some of these changes -- you&#39;d need to update the<br>
entire large patch, instead of dropping a relatively small one and<br>
leaving the others intact.<br></blockquote><div><br></div><div><div class=
=3D"gmail_default" style=3D"font-family:monospace">I hope we elect to adopt=
 them all.=C2=A0 It would be much more work to tease them all out piecemeal=
 and wouldn&#39;t really, in the end, produce a better vtable.</div></div><=
div class=3D"gmail_default" style=3D"font-family:monospace"><br></div><bloc=
kquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:=
1px solid rgb(204,204,204);padding-left:1ex">
For now, just a few comments from superficial first reading, mainly<br>
about the documentation.<br></blockquote><div><br></div><div><div class=3D"=
gmail_default" style=3D""><font face=3D"monospace">I&#39;ll review the belo=
w and adjust.=C2=A0 Much of the style was just carried over from the origin=
al vtable doc.=C2=A0 Happy to improve it.</font></div><div class=3D"gmail_d=
efault" style=3D""><font face=3D"monospace"><br></font></div><div class=3D"=
gmail_default" style=3D""><font face=3D"monospace">WRT quoting symbols, the=
re are examples in the texinfo doc collection that suggest the convention i=
s not enforced:</font></div><div class=3D"gmail_default" style=3D""><font f=
ace=3D"monospace"><br></font></div><div class=3D"gmail_default" style=3D"">





<p class=3D"gmail-p1" style=3D"margin:0px;font-variant-numeric:normal;font-=
variant-east-asian:normal;font-variant-alternates:normal;font-size-adjust:n=
one;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;line=
-height:normal;color:rgb(0,0,0)"><span class=3D"gmail-s1" style=3D"font-var=
iant-ligatures:no-common-ligatures"><font face=3D"monospace">./misc/srecode=
.texi:such as the symbol @code{&#39;prototype} for prototype functions, or<=
/font></span></p><p class=3D"gmail-p1" style=3D"margin:0px;font-variant-num=
eric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;f=
ont-size-adjust:none;font-kerning:auto;font-feature-settings:normal;font-st=
retch:normal;line-height:normal;color:rgb(0,0,0)"><span class=3D"gmail-s1" =
style=3D"font-variant-ligatures:no-common-ligatures"><font face=3D"monospac=
e">





</font></span></p><p class=3D"gmail-p1" style=3D"margin:0px;font-variant-nu=
meric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;=
font-size-adjust:none;font-kerning:auto;font-feature-settings:normal;font-s=
tretch:normal;line-height:normal;color:rgb(0,0,0)"><span class=3D"gmail-s1"=
 style=3D"font-variant-ligatures:no-common-ligatures"><font face=3D"monospa=
ce">./misc/ses.texi:@code{&#39;ses-prin1}.</font></span></p><p class=3D"gma=
il-p1" style=3D"margin:0px;font-variant-numeric:normal;font-variant-east-as=
ian:normal;font-variant-alternates:normal;font-size-adjust:none;font-kernin=
g:auto;font-feature-settings:normal;font-stretch:normal;line-height:normal;=
color:rgb(0,0,0)"><span class=3D"gmail-s1" style=3D"font-variant-ligatures:=
no-common-ligatures"><font face=3D"monospace">





</font></span></p><p class=3D"gmail-p1" style=3D"margin:0px;font-variant-nu=
meric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;=
font-size-adjust:none;font-kerning:auto;font-feature-settings:normal;font-s=
tretch:normal;line-height:normal;color:rgb(0,0,0)"><span class=3D"gmail-s1"=
 style=3D"font-variant-ligatures:no-common-ligatures"><font face=3D"monospa=
ce">./misc/idlwave.texi:the single symbol @code{&#39;everything}, all the c=
opious shell input is</font></span></p><p class=3D"gmail-p1" style=3D"margi=
n:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-varia=
nt-alternates:normal;font-size-adjust:none;font-kerning:auto;font-feature-s=
ettings:normal;font-stretch:normal;line-height:normal;color:rgb(0,0,0)"><sp=
an class=3D"gmail-s1" style=3D"font-variant-ligatures:no-common-ligatures">=
<font face=3D"monospace">





</font></span></p><p class=3D"gmail-p1" style=3D"margin:0px;font-variant-nu=
meric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;=
font-size-adjust:none;font-kerning:auto;font-feature-settings:normal;font-s=
tretch:normal;line-height:normal;color:rgb(0,0,0)"><span class=3D"gmail-s1"=
 style=3D"font-variant-ligatures:no-common-ligatures"><font face=3D"monospa=
ce">./misc/auth.texi:Set this variable to @code{&#39;trivia} to see lots of=
 output in</font></span></p></div></div><div>=C2=A0</div><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex">
&gt; +A vtable can be inserted into a single buffer only.=C2=A0 An error is=
<br>
&gt; +signaled if a vtable is attempted to be inserted more than once into =
a<br>
&gt; +single buffer, or into multiple buffers.<br>
<br>
The passive voice here is used way too much.=C2=A0 Please rephrase not to<b=
r>
use it.<br>
<br>
&gt;=C2=A0 @table @code<br>
&gt; +@item :name<br>
&gt; +The default table name is `*vtable*`.=C2=A0 Specify this if you have =
more<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0^^^^^^^^^^<br>
This should be @samp{*vtable*}.<br>
<br>
&gt; -In the latter case, if @code{:columns} is non-@code{nil} and there&#3=
9;s<br>
&gt; -more elements in the sequence than there is in @code{:columns}, only<=
br>
&gt; -the @code{:columns} first elements are displayed.<br>
&gt; +In the latter case, if @code{:columns} is non-@code{nil} and there ar=
e<br>
&gt; +more elements in the sequence than there are in @code{:columns}, the<=
br>
&gt; +elements beyond those in @code{:columns} are not displayed.<br>
<br>
Since the elements are not in :columns, the modified text is<br>
confusing, IMO.=C2=A0 I suggest<br>
<br>
=C2=A0 ... the sequence elements beyond the number of elements in<br>
=C2=A0 @code{:columns} will not be shown.<br>
<br>
&gt; +@item :object-equal<br>
&gt; +This function tests for the equality of two table objects.=C2=A0 It d=
efaults<br>
&gt; +to @code{eq}.<br>
&gt; +<br>
&gt; +@defun object-equal object1 object2<br>
&gt; +Return non-nil if @var{object1} and @var{object2} are equal, and non-=
nil<br>
&gt; +otherwise.<br>
&gt; +@end defun<br>
<br>
I don&#39;t understand the purpose of this @defun here.=C2=A0 What did you<=
br>
intend to say by placing it here?<br>
<br>
&gt; +@item :duplicate-objects<br>
&gt; +A vtable assumes all objects inserted into the table are unique among=
<br>
&gt; +themselves.=C2=A0 If the symbol @code{&#39;allow}, the default, allow=
 duplicate<br>
&gt; +objects (the first object found during table operations has primacy),=
 if<br>
<br>
First, please say &quot;If the value is the symbol...&quot;, not just &quot=
;If the<br>
symbol&quot;.=C2=A0 And second, the way we typeset symbols in a Texinfo man=
ual<br>
is by using @code{allow}, without the apostrophe.<br>
<br>
&gt; +@code{&#39;ignore}, silently ignore duplicates leaving the existing o=
bject<br>
&gt; +intact, if @code{&#39;ignore-warn} do the same thing as @code{&#39;ig=
nore} and<br>
&gt; +produce a warning message, or if @code{&#39;error}, signal an error i=
f a<br>
&gt; +duplicate is detected.<br>
<br>
Likewise here about the symbol names.=C2=A0 In addition, please use<br>
semi-colons to separate the description of the different values:<br>
<br>
=C2=A0 ...if it&#39;s |@code{ignore}, silently ignore duplicates leaving th=
e<br>
=C2=A0 existing object intact; if it&#39;s @code{ignore-warn}, do the same.=
..<br>
<br>
&gt; +This is a list where each element is either a string (the column name=
),<br>
&gt; +a plist of keyword/values (to make a @code{vtable-column} object), or=
 a<br>
&gt; +@code{vtable-column} object (created by calling the function<br>
&gt; +@code{make-vtable-column}).<br>
<br>
When you mention a function or a variable, like make-vtable-column<br>
here, it is usually a good idea to have a cross-reference to where<br>
they are described (unless they are described in the same node).<br>
<br>
&gt; +that need special treatment, specify a larger guess increment.=C2=A0 =
If nil,<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 ^^^<br>
&quot;nil&quot; should have the @code markup.<br>
<br>
&gt; +@item comparator<br>
&gt; +This function will be called to compare column values.=C2=A0 Use this=
 when<br>
&gt; +your objects contain data that needs non-numeric or string collation,=
<br>
&gt; +for example, dates.=C2=A0 Another case would be where you want the eq=
uivalent<br>
&gt; +of @code{sort-fold-case}.<br>
&gt; +<br>
&gt; +@defun comparator value1 value2<br>
&gt; +This function is called with two values to compare.=C2=A0 The return =
value<br>
&gt; +should follow the semantics of @code{&lt;} or, @code{string-lessp}.<b=
r>
&gt;=C2=A0 @end defun<br>
<br>
Same question here about this @defun, as above about object-equal.<br>
<br>
&gt; +@item :sort-indicator<br>
&gt; +This is a list of two cons cells that specify the sort ascending and<=
br>
&gt; +descending characters that are shown on the table header to indicate =
a<br>
&gt; +sorted column.=C2=A0 The first character is the fancier ``graphical&#=
39;&#39;<br>
&gt; +character, and the second a text-only character.=C2=A0 If the first c=
haracter<br>
&gt; +cannot be displayed on the selected frame, the table will show the<br=
>
&gt; +text-only character.=C2=A0 The default is<br>
&gt; +@code{vtable-sort-indicator-default}.=C2=A0 For example:<br>
&gt; +<br>
&gt; +@lisp<br>
&gt; +&#39;((?=E2=96=BC ?v) (?=E2=96=B2 ?^)) ; This is the default.<br>
&gt; +&#39;((?=E2=AC=87 ?v) (?=E2=AC=86 ?^)) ; Alternative arrows.<br>
&gt; +@end lisp<br>
<br>
Using non-ASCII characters in a manual runs the risk of producing<br>
incorrect output in the printed manual, due to lack of support in the<br>
fonts used by TeX.=C2=A0 It is better to avoid that.=C2=A0 Here, you use th=
em in<br>
the example, which seems unnecessary, so I suggest to rewrite the<br>
example using only ASCII characters (you can mention non-ASCII as a<br>
possibility without actually showing such an example).<br>
<br>
&gt; +@table @kbd<br>
&gt; +@findex vtable-next-line<br>
&gt; +@item n<br>
&gt; +@item &lt;down&gt;<br>
<br>
Our conventions are to UPCASE arrow key names, so please use DOWN, UP,<br>
etc.<br>
<br>
Also, since &quot;DOWN&quot; is a label of the key, you should use @key{DOW=
N},<br>
not &lt;DOWN&gt;.<br>
<br>
&gt; +@findex vtable-goto-next-table<br>
&gt; +@item &lt;forward-paragraph&gt;<br>
<br>
What&#39;s &quot;&lt;forward-paragraph&gt;&quot;?=C2=A0 Are there keyboards=
 with a key that has<br>
such a label?<br>
<br>
&gt; --- a/lisp/emacs-lisp/vtable.el<br>
&gt; +++ b/lisp/emacs-lisp/vtable.el<br>
&gt; @@ -30,77 +30,220 @@<br>
&gt; <br>
&gt;=C2=A0 (defface vtable<br>
&gt;=C2=A0 =C2=A0 &#39;((t :inherit variable-pitch))<br>
&gt; -=C2=A0 &quot;Face used (by default) for vtables.&quot;<br>
&gt; +=C2=A0 &quot;Face used (by default) for vtable bodies.&quot;<br>
&gt;=C2=A0 =C2=A0 :version &quot;29.1&quot;<br>
&gt;=C2=A0 =C2=A0 :group &#39;faces)<br>
&gt; <br>
&gt; +(defface vtable-header<br>
&gt; +=C2=A0 &#39;((t :inherit (header-line vtable)))<br>
&gt; +=C2=A0 &quot;Face used (by default) for vtable headers.&quot;<br>
&gt; +=C2=A0 :version &quot;31.1&quot;<br>
&gt; +=C2=A0 :group &#39;faces)<br>
&gt; +<br>
&gt; +(defface vtable-marked<br>
&gt; +=C2=A0 &#39;((t :inherit region))<br>
&gt; +=C2=A0 &quot;Face used (by default) for marked vtable objects.&quot;<=
br>
&gt; +=C2=A0 :version &quot;31.1&quot;<br>
&gt; +=C2=A0 :group &#39;faces)<br>
&gt; +<br>
&gt; +(defface vtable-sort-indicator-ascend<br>
&gt; +=C2=A0 &#39;((t :inherit vtable-header))<br>
&gt; +=C2=A0 &quot;Face used (by default) for vtable ascend sort indicator.=
&quot;<br>
&gt; +=C2=A0 :version &quot;31.1&quot;<br>
&gt; +=C2=A0 :group &#39;faces)<br>
&gt; +<br>
&gt; +(defface vtable-sort-indicator-descend<br>
&gt; +=C2=A0 &#39;((t :inherit vtable-header))<br>
&gt; +=C2=A0 &quot;Face used (by default) for vtable descend sort indicator=
.&quot;<br>
&gt; +=C2=A0 :version &quot;31.1&quot;<br>
&gt; +=C2=A0 :group &#39;faces)<br>
<br>
Shouldn&#39;t these faces be in the vtable group instead?<br></blockquote><=
div><br></div><div class=3D"gmail_default" style=3D"font-family:monospace">=
Yessir.</div></div></div>

--00000000000050452e0638258032--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 22 Jun 2025 08:59:34 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jun 22 04:59:34 2025
Received: from localhost ([127.0.0.1]:46542 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uTGY2-00033u-1l
	for submit <at> debbugs.gnu.org; Sun, 22 Jun 2025 04:59:34 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:55844)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uTGXy-00033f-Uf
 for 78843 <at> debbugs.gnu.org; Sun, 22 Jun 2025 04:59:32 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1uTGXs-00084S-39; Sun, 22 Jun 2025 04:59:24 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=rzJsKVHPNXNdAQ8qa/1DuPaaJRbEShVzltmX4Vr9WO8=; b=JldLpiKt52d3lMFHhTWR
 a6rbRePs3Jp6nyKnN81+xElU6m8uaVj2cejxvi7TLaYkFrzYULHvtDY/nd+JjBa+7T1p1urIAdH2z
 /ES60pZjMeCJQOCtNlXTwX01t+yuJu0cVRwkafxLLu5NwX8cmC1MBmzkBnNTs32TiGx6oSiO2eeUn
 qmOgP63AjmaXhkwCnQgUQKlvb8eL/bQq5KZNdSI4rxZB2A5vvt1+UCD+S1MByW+MaGPS3mGaxAJa1
 RGPYFPTrBaqCDOvA7GPmIjNGzOH6NE28LFIgtOZNVoodA2bJxE6q9B9nM4GTxfJaImSu6qwlw7zpU
 j8tYctvQ84NrBQ==;
Date: Sun, 22 Jun 2025 11:59:21 +0300
Message-Id: <86ikkogniu.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
In-Reply-To: <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
 (message from =?utf-8?Q?St=C3=A9phane?= Marks on Sat, 21 Jun 2025 11:41:50
 -0400)
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 78843
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, 78843 <at> debbugs.gnu.org,
 adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Cc: Adam Porter <adam@HIDDEN>, Spencer Baugh <sbaugh@HIDDEN>,
>  Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN>,
>  Kristoffer Balintona <krisbalintona@HIDDEN>
> From: Stéphane Marks <shipmints@HIDDEN>
> Date: Sat, 21 Jun 2025 11:41:50 -0400
> 
> On Thu, Jun 19, 2025 at 4:25 PM Stéphane Marks <shipmints@HIDDEN> wrote:
> 
>  Bug for a consolidated patch which is in the process of being prepared.
> 
> Large patch attached.  All the changes, aside from bug fixes, should be backward compatible.  I've cc'd a few
> of the major vtable users whose code bases helped inform many bug fixes and enhancements.  Some of you
> have helped test and provide feedback along the way.  Please try this out (and review the updated texinfo
> documentation if you want to).

Thanks.

Is it really not feasible to have separate patches for each bugfix and
each enhancement (or coherent set of enhancements)?  What if we decide
to install just some of these changes -- you'd need to update the
entire large patch, instead of dropping a relatively small one and
leaving the others intact.

For now, just a few comments from superficial first reading, mainly
about the documentation.

> +A vtable can be inserted into a single buffer only.  An error is
> +signaled if a vtable is attempted to be inserted more than once into a
> +single buffer, or into multiple buffers.

The passive voice here is used way too much.  Please rephrase not to
use it.

>  @table @code
> +@item :name
> +The default table name is `*vtable*`.  Specify this if you have more
                             ^^^^^^^^^^
This should be @samp{*vtable*}.

> -In the latter case, if @code{:columns} is non-@code{nil} and there's
> -more elements in the sequence than there is in @code{:columns}, only
> -the @code{:columns} first elements are displayed.
> +In the latter case, if @code{:columns} is non-@code{nil} and there are
> +more elements in the sequence than there are in @code{:columns}, the
> +elements beyond those in @code{:columns} are not displayed.

Since the elements are not in :columns, the modified text is
confusing, IMO.  I suggest

  ... the sequence elements beyond the number of elements in
  @code{:columns} will not be shown.

> +@item :object-equal
> +This function tests for the equality of two table objects.  It defaults
> +to @code{eq}.
> +
> +@defun object-equal object1 object2
> +Return non-nil if @var{object1} and @var{object2} are equal, and non-nil
> +otherwise.
> +@end defun

I don't understand the purpose of this @defun here.  What did you
intend to say by placing it here?

> +@item :duplicate-objects
> +A vtable assumes all objects inserted into the table are unique among
> +themselves.  If the symbol @code{'allow}, the default, allow duplicate
> +objects (the first object found during table operations has primacy), if

First, please say "If the value is the symbol...", not just "If the
symbol".  And second, the way we typeset symbols in a Texinfo manual
is by using @code{allow}, without the apostrophe.

> +@code{'ignore}, silently ignore duplicates leaving the existing object
> +intact, if @code{'ignore-warn} do the same thing as @code{'ignore} and
> +produce a warning message, or if @code{'error}, signal an error if a
> +duplicate is detected.

Likewise here about the symbol names.  In addition, please use
semi-colons to separate the description of the different values:

  ...if it's |@code{ignore}, silently ignore duplicates leaving the
  existing object intact; if it's @code{ignore-warn}, do the same...

> +This is a list where each element is either a string (the column name),
> +a plist of keyword/values (to make a @code{vtable-column} object), or a
> +@code{vtable-column} object (created by calling the function
> +@code{make-vtable-column}).

When you mention a function or a variable, like make-vtable-column
here, it is usually a good idea to have a cross-reference to where
they are described (unless they are described in the same node).

> +that need special treatment, specify a larger guess increment.  If nil,
                                                                      ^^^
"nil" should have the @code markup.

> +@item comparator
> +This function will be called to compare column values.  Use this when
> +your objects contain data that needs non-numeric or string collation,
> +for example, dates.  Another case would be where you want the equivalent
> +of @code{sort-fold-case}.
> +
> +@defun comparator value1 value2
> +This function is called with two values to compare.  The return value
> +should follow the semantics of @code{<} or, @code{string-lessp}.
>  @end defun

Same question here about this @defun, as above about object-equal.

> +@item :sort-indicator
> +This is a list of two cons cells that specify the sort ascending and
> +descending characters that are shown on the table header to indicate a
> +sorted column.  The first character is the fancier ``graphical''
> +character, and the second a text-only character.  If the first character
> +cannot be displayed on the selected frame, the table will show the
> +text-only character.  The default is
> +@code{vtable-sort-indicator-default}.  For example:
> +
> +@lisp
> +'((?▼ ?v) (?▲ ?^)) ; This is the default.
> +'((?⬇ ?v) (?⬆ ?^)) ; Alternative arrows.
> +@end lisp

Using non-ASCII characters in a manual runs the risk of producing
incorrect output in the printed manual, due to lack of support in the
fonts used by TeX.  It is better to avoid that.  Here, you use them in
the example, which seems unnecessary, so I suggest to rewrite the
example using only ASCII characters (you can mention non-ASCII as a
possibility without actually showing such an example).

> +@table @kbd
> +@findex vtable-next-line
> +@item n
> +@item <down>

Our conventions are to UPCASE arrow key names, so please use DOWN, UP,
etc.

Also, since "DOWN" is a label of the key, you should use @key{DOWN},
not <DOWN>.

> +@findex vtable-goto-next-table
> +@item <forward-paragraph>

What's "<forward-paragraph>"?  Are there keyboards with a key that has
such a label?

> --- a/lisp/emacs-lisp/vtable.el
> +++ b/lisp/emacs-lisp/vtable.el
> @@ -30,77 +30,220 @@
> 
>  (defface vtable
>    '((t :inherit variable-pitch))
> -  "Face used (by default) for vtables."
> +  "Face used (by default) for vtable bodies."
>    :version "29.1"
>    :group 'faces)
> 
> +(defface vtable-header
> +  '((t :inherit (header-line vtable)))
> +  "Face used (by default) for vtable headers."
> +  :version "31.1"
> +  :group 'faces)
> +
> +(defface vtable-marked
> +  '((t :inherit region))
> +  "Face used (by default) for marked vtable objects."
> +  :version "31.1"
> +  :group 'faces)
> +
> +(defface vtable-sort-indicator-ascend
> +  '((t :inherit vtable-header))
> +  "Face used (by default) for vtable ascend sort indicator."
> +  :version "31.1"
> +  :group 'faces)
> +
> +(defface vtable-sort-indicator-descend
> +  '((t :inherit vtable-header))
> +  "Face used (by default) for vtable descend sort indicator."
> +  :version "31.1"
> +  :group 'faces)

Shouldn't these faces be in the vtable group instead?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 21 Jun 2025 17:40:43 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Jun 21 13:40:43 2025
Received: from localhost ([127.0.0.1]:43051 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uT2Cn-0003sf-OE
	for submit <at> debbugs.gnu.org; Sat, 21 Jun 2025 13:40:43 -0400
Received: from mail-ua1-x930.google.com ([2607:f8b0:4864:20::930]:44342)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uT2Ck-0003r0-EW
 for 78843 <at> debbugs.gnu.org; Sat, 21 Jun 2025 13:40:39 -0400
Received: by mail-ua1-x930.google.com with SMTP id
 a1e0cc1a2514c-87f161d450aso640830241.1
 for <78843 <at> debbugs.gnu.org>; Sat, 21 Jun 2025 10:40:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1750527632; x=1751132432; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=ea9tOf6ipKRWD0VvbGsBr0JOtRwcq5NOFeiwef+mZhc=;
 b=XEmpZDr7KXQigkUgy1x13kw2mTL6v5eFEhG/gunYLpFJjIGLyeqQ3dwpT/YUf+TBm2
 7IAFUKrJR7nrIX4AWCoUcbV4YZu9nKxDSgiRJ+aUahecuDWssOQIub8a40jymkiOGiIE
 ir3LTx1qgs9xoNqO+tQiN/7aE7Is/PdHYvpp5M8mc2kdeTKGrN2wqvUcbYirFx1ZbJB+
 Iupi7ZW/WvqpZp7SOg/R/OKXp3u4xAdcW7tmglo8yj9jaJRkCYksFd2gZ60ipSqlB8HT
 ajRjqdpT18qKn6bI7fmGHgEJnmSJOEer0ZqdsFzaa2jVB9tQtDLCgQV/DvuMmF/NlW2f
 URfw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1750527632; x=1751132432;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=ea9tOf6ipKRWD0VvbGsBr0JOtRwcq5NOFeiwef+mZhc=;
 b=u6LUZj+6hKJP/7TqpwdNq6Ky3KNay0FcROQMwlmhl4brHlxiDUl1yRrT9l04E3MyLX
 l96zm0CXc52JvY9mk82oO4aGM/m1ErPFDfkOq84wEURHtXPIsX+GXQRhNrFWJxDK86ll
 xIpDuX6mFC2mpYh/4T//zJJtThGHR6CCOjBTRzgROC8MXRapB1eTMoI2HKjsjWK5h+sz
 V48kfBi2kj7r9SiY9kIXeR1mudNlL8jsxTBZ+RCaV6e10XCEIWAA+8pwBPuWDybrUiza
 Xg0Y1w4aux48Xcr8VtaeKV02zbCM8OzvhJcQqFbzM/faCQjbpWsSHe28bh+Z7FTaUyHj
 8YQA==
X-Gm-Message-State: AOJu0Yz2TvDBTfLZ/0NUCiKH7bhffoObgIvwUQ7qkwluw+POIKjdaGaB
 Hlm7EYv8XQ/mWQoYenheOh5GjDi8pDwEIEKmQ6a1dDHJmhTICK0I9ntbpZaRibkGsJvxoNiFRjs
 E1OwD/54nk7hlqJCn1rf8tawhzKdJSDoWLA==
X-Gm-Gg: ASbGncsUJMK2GiZwAfmEAEYrotV9OVWl4HlKJWEveaa2LvOn6Yl8FLf0ypoNePS/pxc
 lZLsuyM6xJkfSYLuTTJeWG14BcPMVXU+eLhATAl6FoAAqEa5XJmM+Z7XVXfKEtypLcYvgfck8KI
 nKFPA9a2dPriKKWTdtizJT9yEVorZtJPGauvdnoehqNl+R/De/A3ppdc8m
X-Google-Smtp-Source: AGHT+IG4kdhj2Q3vBYTY09UiMUmdipEgzPsMfPjD3mKJIIPkWecehToL+0xdQ3otnkcQ7nxMvfSlJBAH53uuWSDQmks=
X-Received: by 2002:a05:6122:91d:b0:531:188b:c1a9 with SMTP id
 71dfb90a1353d-531ad58064amr4152507e0c.0.1750527632356; Sat, 21 Jun 2025
 10:40:32 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
 <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
In-Reply-To: <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Sat, 21 Jun 2025 13:40:21 -0400
X-Gm-Features: Ac12FXyrSVWvOPy_UHNHgwLDwZOJarkfSFblx4y5XVNgUMYrdQDd5E-kJW82aS4
Message-ID: <CAN+1HbphJQ3qE1U+nqhcHixQj34nzabfi+9oW6rVh2OMGpp5FQ@HIDDEN>
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
To: 78843 <at> debbugs.gnu.org
Content-Type: multipart/alternative; boundary="000000000000b23b07063818798f"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78843
Cc: Adam Porter <adam@HIDDEN>, Spencer Baugh <sbaugh@HIDDEN>,
 Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN>,
 Kristoffer Balintona <krisbalintona@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--000000000000b23b07063818798f
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Sat, Jun 21, 2025 at 11:41=E2=80=AFAM St=C3=A9phane Marks <shipmints@gma=
il.com> wrote:

> On Thu, Jun 19, 2025 at 4:25=E2=80=AFPM St=C3=A9phane Marks <shipmints@gm=
ail.com>
> wrote:
>
>> Bug for a consolidated patch which is in the process of being prepared.
>>
>
> Large patch attached.  All the changes, aside from bug fixes, should be
> backward compatible.  I've cc'd a few of the major vtable users whose cod=
e
> bases helped inform many bug fixes and enhancements.  Some of you have
> helped test and provide feedback along the way.  Please try this out (and
> review the updated texinfo documentation if you want to).
>
> Feedback here and/or to me directly is fine.
>

After double checking comint-mime, it looks like I should add
header-text-properties just as I did row-text-properties so that
comint-mime doesn't need shenanigans.  On the list.  What else?

-St=C3=A9phane

--000000000000b23b07063818798f
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Sat, Jun 21, 2025 at 11:41=E2=80=AFAM St=C3=A9phane Marks &lt;<a href=3D=
"mailto:shipmints@HIDDEN">shipmints@HIDDEN</a>&gt; wrote:</span></div=
></div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div sty=
le=3D"font-family:monospace"><span style=3D"font-family:Arial,Helvetica,san=
s-serif">On Thu, Jun 19, 2025 at 4:25=E2=80=AFPM St=C3=A9phane Marks &lt;<a=
 href=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN<=
/a>&gt; wrote:</span></div></div><div class=3D"gmail_quote"><blockquote cla=
ss=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid =
rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div style=3D"font-fami=
ly:monospace">Bug for a consolidated patch which is in the process of being=
 prepared.<br></div></div></blockquote><div><br></div><div style=3D"font-fa=
mily:monospace">Large patch attached.=C2=A0 All the changes, aside=C2=A0fro=
m bug=C2=A0fixes, should be backward compatible.=C2=A0 I&#39;ve cc&#39;d a =
few of the major vtable users whose code bases helped inform many bug fixes=
 and enhancements.=C2=A0 Some of you have helped test and provide feedback =
along the way.=C2=A0 Please try this out (and review the updated texinfo do=
cumentation if you want to).</div><div style=3D"font-family:monospace"><br>=
</div><div style=3D"font-family:monospace">Feedback here and/or to me direc=
tly is fine.<br></div></div></div></blockquote><div><br></div><div class=3D=
"gmail_default" style=3D"font-family:monospace">After double=C2=A0checking =
comint-mime, it looks like I should add header-text-properties just as I di=
d row-text-properties so that comint-mime doesn&#39;t need shenanigans.=C2=
=A0 On the list.=C2=A0 What else?</div><div class=3D"gmail_default" style=
=3D"font-family:monospace"><br></div><div class=3D"gmail_default" style=3D"=
font-family:monospace">-St=C3=A9phane</div></div></div>

--000000000000b23b07063818798f--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at 78843 <at> debbugs.gnu.org:


Received: (at 78843) by debbugs.gnu.org; 21 Jun 2025 15:42:12 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Jun 21 11:42:11 2025
Received: from localhost ([127.0.0.1]:42378 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uT0M7-0002oI-Pq
	for submit <at> debbugs.gnu.org; Sat, 21 Jun 2025 11:42:11 -0400
Received: from mail-vs1-xe33.google.com ([2607:f8b0:4864:20::e33]:48206)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uT0M5-0002o0-NX
 for 78843 <at> debbugs.gnu.org; Sat, 21 Jun 2025 11:42:09 -0400
Received: by mail-vs1-xe33.google.com with SMTP id
 ada2fe7eead31-4e2b5ffb932so703990137.0
 for <78843 <at> debbugs.gnu.org>; Sat, 21 Jun 2025 08:42:09 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1750520524; x=1751125324; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=QwPSSFmXsFWEKU9mubzjIPl1/mD8+XxsnN96Hvd5cpE=;
 b=MvRCLGP1MOPAcKgSOKqbJpn7MD4nt59xF4Dnf4LBVYi2OzJ8qSCtLz7+gh/RlSDoYL
 yPXUc8fJMTgHaxS15Yzu0hqG+X9pZw4N2ufxO9erws5CnVcHRLOhiEavNAH1KVMqYOW2
 stc00OYNQNdSl4CLwOD4CHAI0yuhbEjAvNY9Yo04woTCe1n/qDnqCZCYYYGfW6ioPAPM
 pUaxMNr5+wwGB0r2L9iZsxbAaPYc3b4b3XjBhiA6mnUO0yIZFm2kKhjg2WkWUWDm8lEW
 4LSbRuxEk4tUn9slfi0yVXcD5W9eBQCrHuq0nt3XxfM6zYNn+ftGxf/u7eVIl1Mp4jPg
 FOmg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1750520524; x=1751125324;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=QwPSSFmXsFWEKU9mubzjIPl1/mD8+XxsnN96Hvd5cpE=;
 b=W3Hd4c81zjf1G+ckct27PtfUSdTVLrQ8lEHTjs82kWNjhxOUGXFm70hqI8a+asjaNX
 qzKmKEJZV0LyZrlgraK23D+qheh8xuwGhjRQEKGXFJj9BNhz1snyMbsb9pGLSOjYBJ/C
 tFCFFDFrBiYUnppPthiEBCzfOT6YH/2nxMLk9jkYIpKivlMK+MqoiD2rE7tT/qs8QxCB
 y3tggj8sbR2arsj/YxhCOpgxLBdHkqn7jpnZ5rjFufD7+LZKZzfd05b/BZwI3eF8xvW3
 6dS8C51Bjnl7pK+mAaYw8Z5vXWkTkT2ttymDTslgvzmJxuGTUQzkF0PkqUdUFkoiMIe4
 V3GQ==
X-Gm-Message-State: AOJu0YybL8VL5E1u2SxKge14fj3EU3HSr5vHNkUax2ua9Kfhget198H1
 skOrNPGLh+rloKoD1HwI75TlBNInBcSIxSvUlRPkbMXdThuQc3v6EFBlssy5LDBXgyiFh75zs5Q
 Pks21B1hsDtPZRwdRmNjvYZbgeXd3GVNQfA==
X-Gm-Gg: ASbGncv32UjkkjjfrQxIFlBxcWR7F+BGY8NZaBSq6bV+QAm+t9R2RiWAKAEYpBV2BxX
 mvwBAU7sN28mnx+g66o4fMO1SUCZrl6R6XEnPPX+FN2xgldEswqhazND3IjCKalIt+TQIIn8FCX
 1VbkgdV/m4CFUJHwE595mMR0iI2k8+z9FZ8bXsG97h4EihBA==
X-Google-Smtp-Source: AGHT+IHwaPdahmCH1lXUrgklCmDvuR04EZnX3gm5ZE+bFJgriYc0jJDHgiod+Y1eSYov/k2MdRADDZ2OhjcAWZU6yPI=
X-Received: by 2002:a05:6102:8095:b0:4e5:59ce:471b with SMTP id
 ada2fe7eead31-4e9c2a33191mr4348417137.23.1750520523566; Sat, 21 Jun 2025
 08:42:03 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
In-Reply-To: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Sat, 21 Jun 2025 11:41:50 -0400
X-Gm-Features: Ac12FXwb7EJCvyJxqwNprFEUEC9Y-eHxa1ldOv3-L3bd_fTc7MbhxW0OepalKjY
Message-ID: <CAN+1HbpAZYktw2YugZ4A1GqHXsEN7nEXR4uH_EHAfeWMB6yVSQ@HIDDEN>
Subject: Re: bug#78843: Various vtable bug fixes and enhancements
To: 78843 <at> debbugs.gnu.org
Content-Type: multipart/mixed; boundary="000000000000fadcac063816d1d2"
X-Debbugs-Envelope-To: 78843
Cc: Adam Porter <adam@HIDDEN>, Spencer Baugh <sbaugh@HIDDEN>,
 Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN>,
 Kristoffer Balintona <krisbalintona@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

--000000000000fadcac063816d1d2
Content-Type: multipart/alternative; boundary="000000000000fadcaa063816d1d0"

--000000000000fadcaa063816d1d0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Jun 19, 2025 at 4:25=E2=80=AFPM St=C3=A9phane Marks <shipmints@gmai=
l.com> wrote:

> Bug for a consolidated patch which is in the process of being prepared.
>

Large patch attached.  All the changes, aside from bug fixes, should be
backward compatible.  I've cc'd a few of the major vtable users whose code
bases helped inform many bug fixes and enhancements.  Some of you have
helped test and provide feedback along the way.  Please try this out (and
review the updated texinfo documentation if you want to).

Feedback here and/or to me directly is fine.

-St=C3=A9phane

--000000000000fadcaa063816d1d0
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, Jun 19, 2025 at 4:25=E2=80=AFPM St=C3=A9phane Marks &lt;<a href=3D"=
mailto:shipmints@HIDDEN">shipmints@HIDDEN</a>&gt; wrote:</span></div>=
</div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D=
"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(2=
04,204,204);padding-left:1ex"><div dir=3D"ltr"><div style=3D"font-family:mo=
nospace">Bug for a consolidated patch which is in the process of being prep=
ared.<br></div></div></blockquote><div><br></div><div class=3D"gmail_defaul=
t" style=3D"font-family:monospace">Large patch attached.=C2=A0 All the chan=
ges, aside=C2=A0from bug=C2=A0fixes, should be backward compatible.=C2=A0 I=
&#39;ve cc&#39;d a few of the major vtable users whose code bases helped in=
form many bug fixes and enhancements.=C2=A0 Some of you have helped test an=
d provide feedback along the way.=C2=A0 Please try this out (and review the=
 updated texinfo documentation if you want to).</div><div class=3D"gmail_de=
fault" style=3D"font-family:monospace"><br></div><div class=3D"gmail_defaul=
t" style=3D"font-family:monospace">Feedback here and/or to me directly is f=
ine.</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br>=
</div><div class=3D"gmail_default" style=3D"font-family:monospace">-St=C3=
=A9phane</div></div></div>

--000000000000fadcaa063816d1d0--

--000000000000fadcac063816d1d2
Content-Type: application/octet-stream; 
	name="0001-vtable-bug-fixes-and-enhancements-bug-78843.patch"
Content-Disposition: attachment; 
	filename="0001-vtable-bug-fixes-and-enhancements-bug-78843.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mc6eo13g0>
X-Attachment-Id: f_mc6eo13g0

RnJvbSBlNjJjYjQyZGE1YjNkNWQ2MDM3ODU2MTM3NDg0OTEwOGNkMjBiZjRmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTdMOpcGhhbmUgTWFya3MgPHNoaXBtaW50c0BnbWFpbC5jb20+
CkRhdGU6IFRodSwgMTkgSnVuIDIwMjUgMTY6MDM6MzMgLTA0MDAKU3ViamVjdDogW1BBVENIXSB2
dGFibGUgYnVnIGZpeGVzIGFuZCBlbmhhbmNlbWVudHMgKGJ1ZyM3ODg0MykKCkJ1ZyBmaXhlcwoK
LSB2dGFibGUtdXBkYXRlLW9iamVjdCB3b3JrcyB3aXRoIG5vIHZpc2libGUgb3IgY2hhbmdlZCB3
aW5kb3cKd2lkdGggY2FjaGUga2V5IChidWc9Njk4MzcpCi0gSW1wcm92ZSB2dGFibGUtLWxpbWl0
LXN0cmluZyBwZXJmb3JtYW5jZSBmb3IgbG9uZwpzdHJpbmdzIChidWc9Nzc2ODQpCi0gS2V5bWFw
IGNoYW5nZXM6CiAgLSBLZXltYXAgc3BhbnMgdGhlIHdob2xlIGhlYWRlciBjb2x1bW4gYW5kIGhl
YWRlcgogIGRpdmlkZXJzIChidWc9NzQ3MDEpCiAgLSBNaXNzaW5nIGtleW1hcCBhbmQgJ3Z0YWJs
ZS1jb2x1bW4gcHJvcGVydHkgb24gYm9keS9oZWFkZXIKICBkaXZpZGVycyBhbmQgbmV3bGluZXMK
ICAtIG1vdXNlLTEgYW5kIGNsb3NlIHRhYmxlIGJpbmRpbmdzIGluIHZ0YWJsZS1oZWFkZXItbGlu
ZS1tYXAKICBrZXltYXAKICAtIHRhYmxlLWRyYWctcmVzaXplLWNvbHVtbi1tYXAga2V5bWFwIGZv
ciB1c2UgaW4gYm9keSBvbgogIGRpdmlkZXJzIChidWc9NzQ3MDEpCiAgLSB2dGFibGUtaGVhZGVy
LWRyYWctcmVzaXplLWNvbHVtbi1tYXAgY29uc29saWRhdGVzCiAgdnRhYmxlLWhlYWRlci1saW5l
LW1hcCBhbmQgdnRhYmxlLWRyYWctcmVzaXplLWNvbHVtbi1tYXAKLSBJbmZlciBjb2x1bW4gd2lk
dGhzIGJhc2VkIG9uIGZvcm1hdHRlZCBlbGVtZW50cywgbm90IHJhdwplbGVtZW50cwotIENvbXB1
dGUgY29sdW1ucyB3b3JrcyB3aGVuIHRoZXJlIGFyZSBubyBvYmplY3RzIGF0CmluaXRpYWxpemF0
aW9uCi0gdGV4dC1zY2FsZS1tb2RlIHN1cHBvcnQgKGhlYWRlciBhbmQgYm9keSBlbGVtZW50cyBh
cmUgcGl4ZWwKYWxpZ25lZCkKLSBIZWFkZXIgbGluZSBoYW5kbGVzIGRpc3BsYXktbGluZS1udW1i
ZXJzLW1vZGUKLSBSZWRyYXcgcm93IGNvbG9ycyBvbiBsaW5lcyBiZWxvdyBhbiBpbnNlcnRlZCBv
ciByZW1vdmVkIGxpbmUKLSBDYWNoZSBpcyBjb2hlcmVudCB3aXRoIGl0cyBvYmplY3RzIChyYXRo
ZXIgdGhhbiBieSBjaGFuY2UpLAppbnZhbGlkYXRlZCB3aGVyZSBuZWVkZWQKLSBBbGwgY2FjaGUg
cmVmZXJlbmNlcyBub3cgY2FjaGUgd2FybWluZyBjYWxscyB2cy4gbWVyZSBjYWNoZQpnZXQKLSBU
YWJsZSBtdXRhdGlvbnMgd29yayB3aGVuIHRoZSB0YWJsZSBidWZmZXIgaXMgbm90IHRoZSBjdXJy
ZW50CmJ1ZmZlciBhbmQgaWYgdGhlIHRhYmxlIGlzbid0IGN1cnJlbnQKLSBSZXNpemUgYWxsIHRh
YmxlcyBpbiBhIGJ1ZmZlciB3aGVuIHRoZWlyIHdpbmRvdwpyZXNpemVzIChkZWJvdW5jZWQgdG8g
YWNjb21tb2RhdGUgZnJhbWUgc2l6ZSBkcmFnZ2luZykKLSBTcGFjZXIgZ29lcyBhZnRlciB0aGUg
Y29sdW1uIG5hbWUgb24gdGhlIGhlYWRlciBpZiByaWdodAphbGlnbmVkCi0gQ29sdW1uIG5hbWUg
ZGVmYXVsdHMgdG8gcmlnaHQtYWxpZ25lZCB3aGVuIGl0cyBkYXRhIGFyZQpyaWdodC1hbGlnbmVk
Ci0gSW1wcm92ZSBjb2x1bW4gcGxhY2Vob2xkZXIgbWVzc2FnZSB3aGVuIG5vIG9iamVjdHMgYW5k
IG5vCmNvbHVtbnMgYXJlIHNwZWNpZmllZAotIERvIG5vdCBkaXNwbGF5IGRpdmlkZXIgYWZ0ZXIg
YSByb3cncyBmaW5hbCBjb2x1bW4KLSBPcHRpb24gdG8gZGlzcGxheSBkaXZpZGVyIG9uIHRoZSBo
ZWFkZXIgKHdhcyBhbHdheXMgb24pCi0gVHJlYXQgZGl2aWRlciBhcyBhIHBhcnQgb2YgaXRzIHBy
ZWNlZGluZyBjb2x1bW4gd2hlbiBkcmFnZ2luZwpvciBzb3J0aW5nCi0gQXBwZW5kIHRhYmxlIGZh
Y2VzIHRvIHZhbHVlcyBhbmQgY29sdW1uIGhlYWRpbmcgbmFtZXMgcmF0aGVyCnRoYW4gb3ZlcnJp
ZGUKLSBUcnVuY2F0ZWQgc3RyaW5nIGVsbGlwc2lzIHRleHQgcHJvcGVydGllcyBtYXRjaCB0aG9z
ZSBvZiB0aGUKZm9ybWF0dGVkIGNvbHVtbiBlbnRyeQotIENsaWNraW5nIG9uIGEgaGVhZGVyIGtl
ZXBzIHBvaW50IHdpdGhpbiB0YWJsZSBib3VuZHMKLSBVc2UgdnRhYmxlLW9iamVjdC1lcXVhbCBh
bmQgZG8gbm90IGFzc3VtZSBlcSAob3IgdmlhIGFzc3EsCm1lbXEpCi0gSGVhZGVyIGxpbmUgYWRq
dXN0IGZpbmFsIGNvbHVtbiBuYW1lIGFuZCBzb3J0IGluZGljYXRvciBpbiBhCm5hcnJvdyB3aW5k
b3cgd29ya3MgYXMgaW50ZW5kZWQKLSBTZXQgd2luZG93IHBvaW50IHdoZXJlIG5lZWRlZAotIE5l
eHQvcHJldmlvdXMgbGluZSByZW1haW5zIGluIHRoZSBjdXJyZW50IGNvbHVtbgotIFNpZ25hbCBh
biBlcnJvciBpZiBhIHRhYmxlIGlzIGluc2VydGVkIGluIG1vcmUgdGhhbiBvbmUgYnVmZmVyCm9y
IG1vcmUgdGhhbiBvbmNlIGluIGEgYnVmZmVyCi0gdnRhYmxlLS1jYWNoZS1rZXkgaGFuZGxlIGlm
IGNhbGxlZCB3aGVuIHRoZSBzZWxlY3RlZCB3aW5kb3cKZG9lcyBub3QgY29udGFpbiBhIHRhYmxl
IGJ1ZmZlcgotIFJlc3RvcmUgImZvY3VzIiBhZnRlciB2dGFibGUtcmVtb3ZlLW9iamVjdCwKdnRh
YmxlLXVwZGF0ZS1vYmplY3QsIHZ0YWJsZS1yZWRpc3BsYXktcmFuZ2UsIHZ0YWJsZS1yZXZlcnQg
aWYKdGFibGUgaXMgY3VycmVudAotIHZ0YWJsZS1yZXZlcnQgd29ya3Mgd2hlbiByZXZlcnRlZCB0
YWJsZSBpcyBub3QgdGhlIGN1cnJlbnQKdGFibGUKLSBNdXRhdGUgdGhlIGNvcnJlY3QgYXNzb2Np
YXRlZCB0YWJsZSBpbgp2dGFibGUtaGVhZGVyLWxpbmUtc29ydCwgdnRhYmxlLS1kcmFnLXJlc2l6
ZS1jb2x1bW4KLSB2dGFibGUtLXJlY29tcHV0ZS1jYWNoZSBjb25zaWRlcnMgdGhlIHRhYmxlJ3Mg
c29ydCBvcmRlcgotIHZ0YWJsZS0tYWx0ZXItY29sdW1uLXdpZHRoIHJlc3BlY3RzIG1pbi13aWR0
aCBhbmQgbWF4LXdpZHRoCi0gdnRhYmxlLWluc2VydC1vYmplY3QgaWYgaW50ZWdlciBsb2NhdGlv
biBzcGVjaWZpZWQsIGRvZXMgbm90CmFzc3VtZSB0aGUgb2JqZWN0IGxpc3QgYW5kIGxpbmUgY2Fj
aGUgYXJlIGluIHRoZSBzYW1lIG9yZGVyCi0gdnRhYmxlLWluc2VydC1vYmplY3Qgc2lnbmFsIGFu
IGVycm9yIGlmIGludGVnZXIgaW5zZXJ0CmxvY2F0aW9uIHNwZWNpZmllZCB3aGVuIHRoZSB0YWJs
ZSBpcyBzb3J0ZWQKLSB2dGFibGUtdXBkYXRlLW9iamVjdCBkb2VzIG5vdCBhc3N1bWUgb2JqZWN0
cyBhcmUgaW4gdGhlIHNhbWUKb3JkZXIgYXMgdGhlIGNhY2hlLCB3aGljaCBtaWdodCBiZSBzb3J0
ZWQKLSB2dGFibGUtdXBkYXRlLW9iamVjdCBubyBsb25nZXIgc2lnbmFsICJzZXRjYXIgbmlsIiBv
biBmYWlsZWQKb2xkLW9iamVjdCBzZWFyY2gKLSB2dGFibGUtdXBkYXRlLW9iamVjdCBnb3RvIHRh
YmxlIGJlZm9yZSB1cGRhdGluZwotIHZ0YWJsZS1yZW1vdmUtb2JqZWN0IHVwZGF0ZXMgbnVtZXJp
YyBjb2x1bW4gdHlwZSBhcyBuZWVkZWQKYWZ0ZXIgcmVtb3ZpbmcgbGluZQotIHZ0YWJsZS1yZW1v
dmUtb2JqZWN0IHNpZ25hbHMgYW4gZXJyb3IgaWYgdGhlIHNwZWNpZmllZCBvYmplY3QKaXMgbm90
IGZvdW5kCi0gdnRhYmxlLXJlbW92ZS1vYmplY3QgbGVhdmVzIHBvaW50IHdpdGhpbiB0YWJsZSBi
b3VuZHMgaWYgdGFibGUKaXMgY3VycmVudCAoYW5kIHRoZXJlIGFyZSByb3dzKQotIEhpZGUgZXZl
bnQtaGFuZGxlciBpbnRlcmFjdGl2ZSBmdW5jdGlvbnMgZnJvbSBNLXggZGlzcGxheSAobm90CnJl
YWxseSAiY29tbWFuZHMiKQotIFJlbmFtZWQgcHJpdmF0ZSB2dGFibGUtaGVhZGVyLWxpbmUtc29y
dCB0bwp2dGFibGUtLWhlYWRlci1saW5lLXNvcnQKLSBFbnN1cmVkIGRvY3N0cmluZ3MgZm9yIGFs
bCBwdWJsaWMgZnVuY3Rpb25zIHdpdGggYWRkZWQKY2xhcmlmaWNhdGlvbnMgd2hlcmUgbmVlZGVk
CgpFbmhhbmNlbWVudHMKCi0gQ3VzdG9tIGNvbHVtbiBjb21wYXJhdG9yIGZvciBzb3J0aW5nIHR5
cGVzIG90aGVyIHRoYW4gbnVtZXJpY3MKYW5kIGxleGljYWwgc3RyaW5ncwpodHRwczovL2xpc3Rz
LmdudS5vcmcvYXJjaGl2ZS9odG1sL2VtYWNzLWRldmVsLzIwMjQtMTAvbXNnMDAwNDMuaHRtbAot
IENvbHVtbi13aWR0aCBpbmZlcmVuY2UgY2FuIG9wdGlvbmFsbHkgaW5jbHVkZSBjb2x1bW4tbmFt
ZQp3aWR0aCB2cy4ganVzdCBkYXRhCi0gVGFibGUgbmFtZSBzbG90LCBkZWZhdWx0cyB0byAiKnZ0
YWJsZSoiLCB3aGljaCBpcyBkaXNwbGF5ZWQgaW4KbWVzc2FnZXMgdG8gZGlmZmVyZW50aWF0ZSB2
dGFibGVzCi0gRHVwbGljYXRlIG9iamVjdCBpZ25vcmUsIHdhcm5pbmcgb3IgZXJyb3IsIGRlZmF1
bHRzIHRvIGlnbm9yZQpkdXBsaWNhdGVzCi0gRXhwbGljaXRseSBpZGVudGlmeSBjb2x1bW5zIGFz
IG51bWVyaWMgb3Igbm9uLW51bWVyaWMgdG8gYXZvaWQKdGhlIGNvc3Qgb2YgaW5mZXJyaW5nIG51
bWVyaWNhbG5lc3MKLSBPcHRpb24gdG8gc29ydCB0YWJsZSBhZnRlciBpbnNlcnQgb3IgdXBkYXRl
IG9iamVjdAotIE9wdGlvbiB0byBzZWxlY3QgdGhlIG5ld2x5IGluc2VydGVkIGxpbmUgaWYgdGhl
IHRhYmxlIGlzCmN1cnJlbnQKLSBTb3J0IGluZGljYXRvciBjaGFyYWN0ZXJzIHNwZWNpZmlhYmxl
Ci0gU29ydCBpbmRpY2F0b3IgZmFjZXMgZm9yIGFzY2VuZGluZyBhbmQgZGVzY2VuZGluZwotIFVu
c29ydCB0aGUgdGFibGUsIHRvZ2dsaW5nIGJldHdlZW4gdW5zb3J0ZWQgYW5kIHRoZSBzb3J0LWJ5
IGF0CmluaXRpYWxpemF0aW9uCi0gVW5zb3J0IGJpbmRpbmcgaW4gdnRhYmxlLW1hcAotIEFkZCB0
YWIgdG8gdnRhYmxlLWhlYWRlci1saW5lLW1hcCB0byBtb3ZlIHBvaW50IGludG8gdGhlIHRhYmxl
Ci0gRnVuY3Rpb25zIHRvIGNvbXB1dGUgcHJvZ3JhbW1hdGljIHJvdy9jb2x1bW4gY29sb3JzCi0g
SGVhZGVyIGZhY2UgaW5kZXBlbmRlbnQgb2YgYm9keSBmYWNlCi0gSGVhZGVyIGNvbHVtbiBhbGln
bm1lbnQgaW5kZXBlbmRlbnQgb2YgZnJvbSBib2R5IGFsaWdubWVudCwKZGVmYXVsdHMgdG8gYm9k
eSBhbGlnbm1lbnQKLSBDZW50ZXIgYWxpZ25tZW50IG9wdGlvbnMKLSBUcnVuY2F0aW9uIGVsbGlw
c2lzIHNwZWNpZmlhYmxlCi0gT3B0aW9uIHRvIG1ha2UgaW4tYnVmZmVyIGhlYWRlciBjdXJzb3It
aW50YW5naWJsZQotIE9wdGlvbiB0byBtYWtlIGluLWJ1ZmZlciAiZGVjb3IiIGN1cnNvci1pbnRh
bmdpYmxlIChzcGFjZXJzLApkaXZpZGVycywgaW5kaWNhdG9yIHBhZGRpbmcpCi0gT2JqZWN0L2xp
bmUgbWFya2luZy91bm1hcmtpbmcgZnVuY3Rpb25zLCBtYXJrZWQgbGluZSBmYWNlCi0gTmV4dC9w
cmV2aW91cyBsaW5lIGZ1bmN0aW9ucyB0aGF0IHJlbWFpbiBpbiB0YWJsZSBib2R5IGJvdW5kcwot
IE11bHRpLXRhYmxlIGNvbW1hbmRzICd2dGFibGUtZ290by1uZXh0LXRhYmxlJywKJ3Z0YWJsZS1n
b3RvLXByZXZpb3VzLXRhYmxlJwotIE9wdGlvbmFsbHkgYXBwbHkgcm93IHRleHQgcHJvcGVydGll
czsgZS5nLiwgZm9yIG1vdXNlLWZhY2UsCmN1cnNvci1mYWNlCi0gT3B0aW9uYWwgIm5hdmlnYXRp
b24iIGtleW1hcCBhZGRpbmcgc2V2ZXJhbCB1c2VmdWwgYmluZGluZ3MKaW5jbHVkaW5nICJxIiB0
byBjbG9zZSB0aGUgdGFibGUgKGEgbGEgc3BlY2lhbC1tb2RlKQotIERpc3BsYXkgYSBtZXNzYWdl
IHdoZW4gaW50ZXJhY3RpdmUgY29sdW1uIHJlc2l6aW5nIG1pbi13aWR0aAphbmQgbWF4LXdpZHRo
IGxpbWl0cyByZWFjaGVkCi0gT3B0aW9uYWxseSBwdWxzZSBhbiB1cGRhdGVkLCBpbnNlcnRlZCwg
cmVtb3ZlZCBsaW5lLApkZWZhdWx0aW5nIHRvICdwdWxzZS1tb21lbnRhcnktaGlnaGxpZ2h0LW9u
ZS1saW5lJwotIEdvIHRvIHRhYmxlIGJlZ2lubmluZy9lbmQgb2YgYm9keSBjb252ZW5pZW5jZSBm
dW5jdGlvbnMKLSBUYWJsZSBhbmQgb2JqZWN0IGxpbmUtbnVtYmVyIGNvbnZlbmllbmNlIGZ1bmN0
aW9ucwotIFRhYmxlIGNsb3NlLWFjdGlvbiB3aGljaCBkZWZhdWx0cyB0byAncXVpdC13aW5kb3cn
Ci0gRXh0cmEtZGF0YSBzbG90cyBvbiBib3RoIHRoZSB0YWJsZSBhbmQgY29sdW1ucyBmb3IKcHJv
Z3JhbW1hdGljIHJlZmVyZW5jZQoKKiBkb2MvbWlzYy92dGFibGUudGV4aSAoSW50cm9kdWN0aW9u
LCBDb25jZXB0cywgTWFraW5nIEEgVGFibGUpCihDb21tYW5kcywgSW50ZXJmYWNlIEZ1bmN0aW9u
cyk6IFVwZGF0ZWQgdG8gaW1wcm92ZSBsYW5ndWFnZSwKY2xhcmlmeSB1c2FnZSwgZG9jdW1lbnQg
bmV3IGZlYXR1cmVzLgoKKiBsaXNwL2VtYWNzLWxpc3AvdnRhYmxlLmVsICh2dGFibGUsIHZ0YWJs
ZS1oZWFkZXIpCih2dGFibGUtbWFya2VkLCB2dGFibGUtc29ydC1pbmRpY2F0b3ItYXNjZW5kKQoo
dnRhYmxlLXNvcnQtaW5kaWNhdG9yLWRlc2NlbmQpOiBOZXcgZmFjZS4KKHZ0YWJsZS1zb3J0LWlu
ZGljYXRvci1kZWZhdWx0KQoodnRhYmxlLXNvcnQtaW5kaWNhdG9yLXBhZC1zcGFjZS13aWR0aCk6
IE5ldyBkZWZ2YXIuCih2dGFibGUtY29sdW1uKTogTmV3IHNsb3RzOiBpbmZlci13aWR0aCwgdHJ1
bmNhdGUtZ3Vlc3MsCm51bWVyaWMsIGhlYWRlci1hbGlnbiwgY29tcGFyYXRvciwgZXh0cmEtZGF0
YS4KKHZ0YWJsZSk6IE5ldyBzbG90czogbmFtZSwgb2JqZWN0LWVxdWFsLCBkdXBsaWNhdGUtb2Jq
ZWN0cywKaGVhZGVyLWludGFuZ2libGUsIGRlY29yLWludGFuZ2libGUsIHRleHQtc2NhbGUtcmVk
cmF3LAp0ZXh0LXNjYWxlLWhlYWRlci1saW5lLCByZXNpemUtZGVib3VuY2UtaW50ZXJ2YWwsIGhl
YWRlci1mYWNlLAptYXJrZWQtZmFjZSwgc2VwYXJhdG9yLXdpZHRoLCBkaXZpZGVyLCBkaXZpZGVy
LXdpZHRoLApkaXZpZGVyLW9uLWhlYWRlciwgc29ydC1pbmRpY2F0b3IsIHNvcnQtaW5kaWNhdG9y
LWZhY2UtYXNjZW5kLApzb3J0LWluZGljYXRvci1mYWNlLWRlc2NlbmQsIHJvdy10ZXh0LXByb3Bl
cnRpZXMsCmNvbHVtbi1jb2xvci1mdW5jdGlvbiwgcm93LWNvbG9yLWZ1bmN0aW9uLCBjbG9zZS1h
Y3Rpb24sCmV4dHJhLWRhdGEsIHB1bHNlLCBwdWxzZS1mdW5jdGlvbiwgLW9iamVjdHMtdGljaywK
LW1hcmtlZC1vYmplY3RzLCAtb3JpZy1zb3J0LWJ5LCAtYnVmZmVyLCAtaW5kaWNhdG9yLXBhZCwK
LWNhY2hlZC1kcmFnLWtleW1hcC4KKHZ0YWJsZS1tYXApOiBBZGQgdW5zb3J0IGtleSBiaW5kaW5n
LgoodnRhYmxlLWhlYWRlci1saW5lLW1hcCk6IEFkZCBtb3VzZSwgY2xvc2UgdGFibGUsIGdvdG8g
dGFibGUga2V5CmJpbmRpbmdzLgoodnRhYmxlLWRyYWctcmVzaXplLWNvbHVtbi1tYXApCih2dGFi
bGUtaGVhZGVyLWRyYWctcmVzaXplLWNvbHVtbi1tYXAsIHZ0YWJsZS1uYXZpZ2F0aW9uLW1hcCk6
Ck5ldyBrZXltYXAuCihtYWtlLXZ0YWJsZSk6IE5ldyBrZXlzIG1hdGNoaW5nIG5ldyBzbG90cy4K
KHZ0YWJsZS1idWZmZXIpOiBOZXcgZGVmdW4uCih2dGFibGUtZ290by1iZWdpbm5pbmctb2YtdGFi
bGUsIHZ0YWJsZS1nb3RvLWVuZC1vZi10YWJsZSk6IE5ldwpjb21tYW5kLgoodnRhYmxlLWVuZC1v
Zi10YWJsZSk6IEltcHJvdmVkIGRvY3N0cmluZy4KKHZ0YWJsZS1nb3RvLW9iamVjdCk6IFVzZSB2
dGFibGUtb2JqZWN0LWVxdWFsLgoodnRhYmxlLWdvdG8tdGFibGUpOiBJbXByb3ZlZCBkb2NzdHJp
bmcuCih2dGFibGUtLWJ1ZmZlci10YWJsZXMpOiBOZXcgZGVmdW4uCih2dGFibGUtZ290by1jb2x1
bW4pOiB2dGFibGUtLW1heWJlLXNldC13aW5kb3ctcG9pbnQuCih2dGFibGUtLW1heWJlLXNldC13
aW5kb3ctcG9pbnQpOiBOZXcgZGVmdW4uCih2dGFibGUtYmVnaW5uaW5nLW9mLXRhYmxlLWxpbmUt
bnVtYmVyKQoodnRhYmxlLWVuZC1vZi10YWJsZS1saW5lLW51bWJlciwgdnRhYmxlLW9iamVjdC1s
aW5lLW51bWJlcikKKHZ0YWJsZS1vYmplY3QtbGluZS1pbmRleCk6IE5ldyBkZWZ1bi4KKHZ0YWJs
ZS0tcHVsc2UpOiBOZXcgZGVmdW4uCih2dGFibGUtdXBkYXRlLW9iamVjdCk6IEJ1ZyBmaXhlcy4g
IFVzZSB2dGFibGUtb2JqZWN0LWVxdWFsLgpLZWVwIHBvaW50IHN0YWJsZS4gIEFkZCBzb3J0LWFm
dGVyLCBtYXJrZWQgb2JqZWN0LgoodnRhYmxlLXJlbW92ZS1vYmplY3QpOiBCdWcgZml4ZXMuICBV
c2UgdnRhYmxlLW9iamVjdC1lcXVhbC4KS2VlcCBwb2ludCBzdGFibGUuICBBZGQgaW5oaWJpdC1y
b3ctcmVkaXNwbGF5LCBtYXJrZWQgb2JqZWN0LgoodnRhYmxlLWluc2VydC1vYmplY3QpOiBCdWcg
Zml4ZXMuICBVc2UgdnRhYmxlLW9iamVjdC1lcXVhbC4KS2VlcCBwb2ludCBzdGFibGUuICBBZGQg
c2VsZWN0LWFmdGVyLCBzb3J0LWFmdGVyLAppbmhpYml0LXJvdy1yZWRpc3BsYXkuCih2dGFibGUt
LXJlZGlzcGxheS1yYW5nZSwgdnRhYmxlLW1heWJlLXJlZGlzcGxheS1yYW5nZSkKKHZ0YWJsZS1y
ZWRpc3BsYXktcmFuZ2UpOiBOZXcgZGVmdW4uCih2dGFibGUtY29sdW1uKTogSW1wcm92ZWQgZG9j
c3RyaW5nLgoodnRhYmxlLS1zb21lLW9iamVjdHMsIHZ0YWJsZS0taGFuZGxlLWR1cGxpY2F0ZS1v
YmplY3QpOiBOZXcKZGVmdW4uCih2dGFibGUtLWdldC12YWx1ZSk6IFJlbW92ZWQgc3VwZXJmbHVv
dXMgY29tbWVudC4KKHZ0YWJsZS0tY29tcHV0ZS1jb2x1bW5zKTogUmVtb3ZlZC4KKHZ0YWJsZS0t
aW5pdGlhbGl6ZS1jb2x1bW5zKQoodnRhYmxlLS1yZWNvbXB1dGUtbnVtZXJpY2FsLWZyb20tb2Jq
ZWN0cykKKHZ0YWJsZS0tbWF5YmUtcmVjb21wdXRlLW51bWVyaWNhbC1mcm9tLWNhY2hlLWxpbmUp
OiBOZXcgZGVmdW4uCih2dGFibGUtLXNwYWNlcik6IEFkZCB0ZXh0LXNjYWxlIHN1cHBvcnQuCih2
dGFibGUtLWRpdmlkZXIpOiBOZXcgZGVmdW4uCih2dGFibGUtLXJlY29tcHV0ZS1jYWNoZSk6IEJ1
ZyBmaXhlcy4KKHZ0YWJsZS0tY2FjaGUtdGljay1zeW5jLCB2dGFibGUtLWNhY2hlLXRpY2stdmFs
aWQtcCkKKHZ0YWJsZS0tY2FjaGUtd2lkdGhzLCB2dGFibGUtLWNhY2hlLWxpbmVzKQoodnRhYmxl
LS1jYWNoZS1zZXQtc29ydGVkLCB2dGFibGUtLWNhY2hlLXNvcnRlZC1wKTogTmV3IGRlZnVuLgoo
dnRhYmxlLS1wb3N0LWNvbW1hbmQtaG9va2VkLCB2dGFibGUtLWRpc3BsYXktbGluZS1udW1iZXJz
KQoodnRhYmxlLS10ZXh0LXNjYWxlLW1vZGUtaG9va2VkLCB2dGFibGUtLXdpbmRvdy1jaGFuZ2Vz
LWhvb2tlZCkKKHZ0YWJsZS0tcmV2ZXJ0LXRhYmxlcy10aW1lcikKKHZ0YWJsZS0tcmV2ZXJ0LXRh
Ymxlcy1jYWNoZWQtd2luZG93LXdpZHRoKTogTmV3IGRlZnZhci1sb2NhbC4KKHZ0YWJsZS1pbnNl
cnQpOiBIYW5kbGUgdGV4dC1zY2FsZSwKd2luZG93LXNpemUtY2hhbmdlLWZ1bmN0aW9ucywgZGlz
cGxheS1saW5lLW51bWJlcnMuCih2dGFibGUtLXJlZnJlc2gtd2luZG93LWNhY2hlLCB2dGFibGUt
LXJldmVydC10YWJsZXMtZGVib3VuY2VyKToKTmV3IGRlZnVuLgoodnRhYmxlLS1pbnNlcnQpOiBO
ZXcgZGVmdW4uCih2dGFibGUtLWluc2VydC1saW5lKTogQnVnIGZpeGVzLiAgQWRkIGNvbHVtbi1j
b2xvci1mdW5jdGlvbiwKcm93LWNvbG9yLWZ1bmN0aW9uLCB0ZXh0LXNjYWxlIHN1cHBvcnQsIGNl
bnRlciBhbGlnbm1lbnQsCnJvdy10ZXh0LXByb3BlcnRpZXMuCih2dGFibGUtLWluaGliaXQtb2Jq
ZWN0cy10aWNrKTogTmV3IGRlZnZhci4KKHZ0YWJsZS0tb2JqZWN0cy10aWNrLCB2dGFibGUtLXRp
Y2stb2JqZWN0cyk6IE5ldyBkZWZ1bi4KKHZ0YWJsZS0tY2FjaGUta2V5LCB2dGFibGUtLWNhY2hl
LCB2dGFibGUtLWNsZWFyLWNhY2hlKTogQnVnCmZpeGVzLiAgQWRkIHRleHQtc2NhbGUgc3VwcG9y
dC4KKHZ0YWJsZS0tY2FjaGUtd2lkdGhzLCB2dGFibGUtLWNhY2hlLWxpbmVzKQoodnRhYmxlLS1j
bGVhci1jYWNoZXMpOiBOZXcgZGVmdW4uCih2dGFibGUtLXNvcnQpOiBCdWcgZml4ZXMuICBBZGQg
Y29sdW1uIGNvbXBhcmF0b3IuCih2dGFibGUtLWluZGljYXRvcik6IEFkZCB2dGFibGUtc29ydC1p
bmRpY2F0b3IuCih2dGFibGUtLWluc2VydC1oZWFkZXItbGluZSk6IEJ1ZyBmaXhlcy4gIEFkZCB0
ZXh0LXNjYWxlCnN1cHBvcnQsIGNlbnRlciBhbGlnbm1lbnQsIHNvcnQgaW5kaWNhdG9yIGZhY2Vz
LgoodnRhYmxlLS1kcmFnLXJlc2l6ZS1jb2x1bW4pOiBCdWcgZml4ZXMuCih2dGFibGUtLXJlY29t
cHV0ZS1udW1lcmljYWwpOiBSZW1vdmVkLgoodnRhYmxlLS1zZXQtaGVhZGVyLWxpbmUpOiBBZGQg
dGV4dC1zY2FsZSBhbmQKZGlzcGxheS1saW5lLW51bWJlcnMgc3VwcG9ydC4KKHZ0YWJsZS0tdGV4
dC1zY2FsZS1waXhlbHMpOiBOZXcgZGVmdW4uCih2dGFibGUtLWxpbWl0LXN0cmluZyk6IEFkZCB0
cnVuY2F0ZS1ndWVzcy4KKHZ0YWJsZS0tY2hhci13aWR0aCk6IEFkZCB0ZXh0LXNjYWxlIHN1cHBv
cnQuCih2dGFibGUtLWNvbXB1dGUtd2lkdGgpOiBJbXByb3ZlZCBtZXNzYWdlLgoodnRhYmxlLS1j
b21wdXRlLXdpZHRocyk6IEJ1ZyBmaXhlcy4gIEFkZCBkYXRhK2NvbHVtbiB3aWR0aAppbmZlcmVu
Y2UuCih2dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUpOiBCdWcgZml4ZXMuICBBZGQgdGV4dC1z
Y2FsZQpzdXBwb3J0LgoodnRhYmxlLS1tYWtlLWtleW1hcCk6IEFkZCB2dGFibGUtbmF2aWdhdGlv
bi1tYXAuCih2dGFibGUtcmV2ZXJ0KTogQnVnIGZpeGVzLiAgS2VlcCBwb2ludCBzdGFibGUuOih2
dGFibGUtLXdpZHRoczoKVXNlCnZ0YWJsZS0tY2FjaGUtd2lkdGhzLjoodnRhYmxlLWhlYWRlci1t
b2RlLW1hcCwgKHZ0YWJsZS1oZWFkZXItbW9kZSk6ClJlbW92ZWQuCih2dGFibGUtZ290by1uZXh0
LXRhYmxlLCB2dGFibGUtZ290by1wcmV2aW91cy10YWJsZSk6IE5ldwpjb21tYW5kLgoodnRhYmxl
LW5hcnJvdy1jdXJyZW50LWNvbHVtbiwgdnRhYmxlLXdpZGVuLWN1cnJlbnQtY29sdW1uKToKSW1w
cm92ZWQgZG9jc3RyaW5nLgoodnRhYmxlLS1hbHRlci1jb2x1bW4td2lkdGgpOiBCdWcgZml4ZXMu
ICBIb25vciBjb2x1bW4KbWlkLXdpZHRoLCBtYXgtd2lkdGguCih2dGFibGUtcHJldmlvdXMtY29s
dW1uLCB2dGFibGUtbmV4dC1jb2x1bW4pOiBJbXByb3ZlZApkb2NzdHJpbmcuCih2dGFibGUtcmV2
ZXJ0LWNvbW1hbmQpOiBCdWcgZml4ZXMuCih2dGFibGUtc29ydC1ieS1jdXJyZW50LWNvbHVtbik6
IEJ1ZyBmaXhlcy4KKHZ0YWJsZS1oZWFkZXItbGluZS1zb3J0KTogTWFrZSBwcml2YXRlCnZ0YWJs
ZS0taGVhZGVyLWxpbmUtc29ydC4KKHZ0YWJsZS0taGVhZGVyLWxpbmUtc29ydCk6IEJ1ZyBmaXhl
cy4gIEltcHJvdmVkIGRvY3N0cmluZy4KKHZ0YWJsZS11bnNvcnQsIHZ0YWJsZS1uZXh0LWxpbmUs
IHZ0YWJsZS1wcmV2aW91cy1saW5lKQoodnRhYmxlLWNsb3NlKTogTmV3IGNvbW1hbmQuCih2dGFi
bGUtbWFya2VkLW9iamVjdHMsIHZ0YWJsZS1vYmplY3QtbWFya2VkLXApCih2dGFibGUtLW1hcmst
b2JqZWN0LCB2dGFibGUtbWFyay1vYmplY3QsIHZ0YWJsZS0tdW5tYXJrLW9iamVjdCkKKHZ0YWJs
ZS11bm1hcmstb2JqZWN0LCB2dGFibGUtdG9nZ2xlLW1hcmtlZC1vYmplY3QpCih2dGFibGUtbWFy
ay1vYmplY3RzLCB2dGFibGUtbWFyay1hbGwtb2JqZWN0cykKKHZ0YWJsZS11bm1hcmstb2JqZWN0
cywgdnRhYmxlLS11bm1hcmstYWxsLW9iamVjdHMpCih2dGFibGUtdW5tYXJrLWFsbC1vYmplY3Rz
KTogTmV3IGRlZnVuLgoodnRhYmxlLXNldC1leHRyYS1kYXRhLCB2dGFibGUtY29sdW1uLXNldC1l
eHRyYS1kYXRhKTogTmV3CmRlZnVuLgotLS0KIGRvYy9taXNjL3Z0YWJsZS50ZXhpICAgICAgfCAg
NzAxICsrKysrKysrLS0KIGxpc3AvZW1hY3MtbGlzcC92dGFibGUuZWwgfCAyNTQ1ICsrKysrKysr
KysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMjUxNyBpbnNl
cnRpb25zKCspLCA3MjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL21pc2MvdnRhYmxl
LnRleGkgYi9kb2MvbWlzYy92dGFibGUudGV4aQppbmRleCBkZDJmNzk1MTJjMS4uZjRlZTE2NWEy
MzYgMTAwNjQ0Ci0tLSBhL2RvYy9taXNjL3Z0YWJsZS50ZXhpCisrKyBiL2RvYy9taXNjL3Z0YWJs
ZS50ZXhpCkBAIC0xNjcsMjIgKzE2NywyNiBAQCBJbnRyb2R1Y3Rpb24KIE5vdGUgdGhhdCB0aGUg
YWN0aW9ucyBhcmVuJ3QgY2FsbGVkIHdpdGggdGhlIGRhdGEgZGlzcGxheWVkIGluIHRoZQogYnVm
ZmVyLS0tdGhleSdyZSBjYWxsZWQgd2l0aCB0aGUgb3JpZ2luYWwgb2JqZWN0cy4KCi1GaW5hbGx5
LCBoZXJlJ3MgYW4gZXhhbXBsZSB0aGF0IHVzZXMganVzdCBhYm91dCBhbGwgdGhlIGZlYXR1cmVz
OgorRmluYWxseSwgaGVyZSdzIGFuIGV4YW1wbGUgdGhhdCB1c2VzIGp1c3QgYWJvdXQgYWxsIHRo
ZSBiYXNpYyBmZWF0dXJlczoKCiBAbGlzcAogKG1ha2UtdnRhYmxlCiAgOmNvbHVtbnMgYCgoIDpu
YW1lICJUaHVtYiIgOndpZHRoICI1MDBweCIKICAgICAgICAgICAgICAgOmRpc3BsYXllcgotICAg
ICAgICAgICAgICAsKGxhbWJkYSAodmFsdWUgbWF4LXdpZHRoIHRhYmxlKQorICAgICAgICAgICAg
ICAsKGxhbWJkYSAodmFsdWUgbWF4LXdpZHRoIF90YWJsZSkKICAgICAgICAgICAgICAgICAgKHBy
b3BlcnRpemUgIioiICdkaXNwbGF5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjcmVh
dGUtaW1hZ2UgdmFsdWUgbmlsIG5pbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDptYXgtd2lkdGggbWF4LXdpZHRoKSkpKQotICAgICAgICAgICAgKDpuYW1lICJT
aXplIiA6d2lkdGggMTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6bWF4LXdpZHRoIG1heC13aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDpzY2FsZSAxLjApKSkpCisgICAgICAgICAgICAoOm5hbWUgIlNpemUiIDp3aWR0
aCAiMjAlIgogICAgICAgICAgICAgICAgICAgIDpmb3JtYXR0ZXIgZmlsZS1zaXplLWh1bWFuLXJl
YWRhYmxlKQogICAgICAgICAgICAgKDpuYW1lICJUaW1lIiA6d2lkdGggMTAgOnByaW1hcnkgYXNj
ZW5kKQogICAgICAgICAgICAgIk5hbWUiKQogIDpvYmplY3RzLWZ1bmN0aW9uIChsYW1iZGEgKCkK
LSAgICAgICAgICAgICAgICAgICAgIChkaXJlY3RvcnktZmlsZXMgIi90bXAvIiB0ICJcXC5qcGdc
XCciKSkKKyAgICAgICAgICAgICAgICAgICAgIChkaXJlY3RvcnktZmlsZXMKKyAgICAgICAgICAg
ICAgICAgICAgICAoZXhwYW5kLWZpbGUtbmFtZSAiaW1hZ2VzIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZGlyZWN0b3J5KQorICAgICAgICAgICAgICAgICAg
ICAgIHQgIl5zcGxhc2guKlxcLiIpKQogIDphY3Rpb25zICcoIlJFVCIgZmluZC1maWxlKQogIDpn
ZXR0ZXIgKGxhbWJkYSAob2JqZWN0IGNvbHVtbiB0YWJsZSkKICAgICAgICAgICAgKHBjYXNlICh2
dGFibGUtY29sdW1uIHRhYmxlIGNvbHVtbikKQEAgLTE5MywyMCArMTk3LDI0IEBAIEludHJvZHVj
dGlvbgogICAgICAgICAgICAgICAgICAgICAgICIlRiIgKGZpbGUtYXR0cmlidXRlLW1vZGlmaWNh
dGlvbi10aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUtYXR0cmlidXRlcyBv
YmplY3QpKSkpKSkKICA6c2VwYXJhdG9yLXdpZHRoIDUKKyA6dXNlLW5hdmlnYXRpb24ta2V5bWFw
IHQKKyA6Y2xvc2UtYWN0aW9uICdxdWl0LXdpbmRvdy1raWxsCiAgOmtleW1hcCAoZGVmaW5lLWtl
eW1hcAotICAgICAgICAgICAicSIgIydraWxsLWJ1ZmZlcikpCisgICAgICAgICAgICJoIiAobGFt
YmRhICgpIChpbnRlcmFjdGl2ZSkgKG1lc3NhZ2UgIkhlbHAiKSkpKQogQGVuZCBsaXNwCgogVGhp
cyB2dGFibGUgaW1wbGVtZW50cyBhIHNpbXBsZSBpbWFnZSBicm93c2VyIHRoYXQgZGlzcGxheXMg
aW1hZ2UKLXRodW1ibmFpbHMgKHRoYXQgY2hhbmdlIHNpemVzIGR5bmFtaWNhbGx5IGRlcGVuZGlu
ZyBvbiB0aGUgd2lkdGggb2YKLXRoZSBjb2x1bW4pLCBodW1hbi1yZWFkYWJsZSBmaWxlIHNpemVz
LCBkYXRlIGFuZCBmaWxlIG5hbWUuICBUaGUKLXNlcGFyYXRvciB3aWR0aCBpcyA1IHR5cGljYWwg
Y2hhcmFjdGVycyB3aWRlLiAgSGl0dGluZyBAa2Jke0BrZXl7UkVUfX0gb24gYQotbGluZSB3aWxs
IG9wZW4gdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdywgYW5kIGhpdHRpbmcgQGtiZHtxfSB3aWxs
Ci1raWxsIGEgYnVmZmVyLgordGh1bWJuYWlscyAodGhhdCBjaGFuZ2Ugc2l6ZXMgZHluYW1pY2Fs
bHkgZGVwZW5kaW5nIG9uIHRoZSB3aWR0aCBvZiB0aGUKK2NvbHVtbiksIGh1bWFuLXJlYWRhYmxl
IGZpbGUgc2l6ZXMsIGRhdGUgYW5kIGZpbGUgbmFtZS4gIFRoZSBzZXBhcmF0b3IKK3dpZHRoIGlz
IDUgdHlwaWNhbCBjaGFyYWN0ZXJzIHdpZGUuICBQcmVzc2luZyBAa2Jke0BrZXl7UkVUfX0gb24g
YSBsaW5lCit3aWxsIG9wZW4gdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdywgcHJlc3NpbmcgQGti
ZHtofSB3aWxsIHNob3cgaGVscAordGV4dCwgYW5kIHByZXNzaW5nIEBrYmR7cX0gd2lsbCBraWxs
IHRoZSBidWZmZXIuCgogQG5vZGUgQ29uY2VwdHMKIEBjaGFwdGVyIENvbmNlcHRzCgorTm90ZTog
VGhlIHRlcm1zIHJvdyBhbmQgbGluZSBhcmUgdXNlZCBpbnRlcmNoYW5nZWFibHkuCisKIEBjaW5k
ZXggdnRhYmxlCiBBIHZ0YWJsZSBsaXN0cyBkYXRhIGFib3V0IGEgbnVtYmVyIG9mIEBkZm57b2Jq
ZWN0c30uICBFYWNoIG9iamVjdCBjYW4KIGJlIGEgbGlzdCBvciBhIHZlY3RvciwgYnV0IGl0IGNh
biBhbHNvIGJlIGFueXRoaW5nIGVsc2UuCkBAIC0yMjMsMjAgKzIzMSw0NyBAQCBDb25jZXB0cwog
Y29tbW9ubHkgbWFrZXMgdGhlIHZhbHVlIG1vcmUgcmVhZGVyIGZyaWVuZGx5LgoKIEBjaW5kZXgg
ZGlzcGxheWVyIG9mIGEgdnRhYmxlCi1GaW5hbGx5LCB0aGUgZm9ybWF0dGVkIHZhbHVlIGlzIHBh
c3NlZCB0byB0aGUgQGRmbntkaXNwbGF5ZXJ9Ci1mdW5jdGlvbiwgd2hpY2ggaXMgcmVzcG9uc2li
bGUgZm9yIHB1dHRpbmcgdGhlIHRhYmxlIGZhY2Ugb24gdGhlCi1mb3JtYXR0ZWQgdmFsdWUsIGFu
ZCBhbHNvIGVuc3VyaW5nIHRoYXQgaXQncyBub3Qgd2lkZXIgdGhhbiB0aGUgY29sdW1uCi13aWR0
aC4gIFRoZSBkaXNwbGF5ZXIgd2lsbCBjb21tb25seSB0cnVuY2F0ZSB0b28tbG9uZyBzdHJpbmdz
IGFuZAotc2NhbGUgaW1hZ2Ugc2l6ZXMuCitGaW5hbGx5LCB0aGUgZm9ybWF0dGVkIHZhbHVlIGlz
IHBhc3NlZCB0byB0aGUgQGRmbntkaXNwbGF5ZXJ9IGZ1bmN0aW9uLAord2hpY2ggaXMgcmVzcG9u
c2libGUgZm9yIHB1dHRpbmcgdGhlIHRhYmxlIGZhY2Ugb24gdGhlIGZvcm1hdHRlZCB2YWx1ZSwK
K2FuZCBhbHNvIGVuc3VyaW5nIHRoYXQgaXQncyBub3Qgd2lkZXIgdGhhbiB0aGUgY29sdW1uJ3Mg
cGl4ZWwgd2lkdGguCitUaGUgZGlzcGxheWVyIHdpbGwgY29tbW9ubHkgdHJ1bmNhdGUgdG9vLWxv
bmcgc3RyaW5ncyBhbmQgc2NhbGUgaW1hZ2UKK3NpemVzLgorCitBbGwgdGhlc2UgdGhyZWUgdHJh
bnNmb3JtcywgdGhlIGdldHRlciwgdGhlIGZvcm1hdHRlciwgYW5kIHRoZSBkaXNwbGF5CitmdW5j
dGlvbnMsIGNhbiBiZSBkZWZpbmVkIG9uIGEgcGVyLWNvbHVtbiBiYXNpcywgYW5kIGFsc28gb24g
YSBwZXItdGFibGUKK2Jhc2lzLiAgUGVyLWNvbHVtbiB0cmFuc2Zvcm1zIHRha2VzIHByZWNlZGVu
Y2Ugb3ZlciB0aGUgcGVyLXRhYmxlCit0cmFuc2Zvcm1zLgorCitVc2VyIGNvbW1hbmRzIHRoYXQg
YXJlIGRlZmluZWQgb24gYSB0YWJsZSBkbyBub3Qgd29yayBvbiB0aGUgdHJhbnNmb3JtZWQKK2Rp
c3BsYXllZCBkYXRhLCB0aGV5IGFyZSBjYWxsZWQgd2l0aCB0aGUgb3JpZ2luYWwgb2JqZWN0IGFz
IHRoZQorYXJndW1lbnQuCisKK0EgdnRhYmxlIGFzc3VtZXMgdGhhdCBpdHMgb2JqZWN0cyBhcmUg
dW5pcXVlLiAgV2hpbGUgaXQgaXMgcG9zc2libGUgZm9yCitkdXBsaWNhdGUgb2JqZWN0cyB0byBi
ZSBpbnNlcnRlZCwgdGhlIHRhYmxlIHdpbGwgb3BlcmF0ZSBvbmx5IG9uIHRoZQorZmlyc3QgaW5z
dGFuY2UgZm91bmQgb2YgZWFjaCBvYmplY3QsIHNvIGl0J3MgYmVzdCB0byBpbnNlcnQgdW5pcXVl
CitvYmplY3RzICh2dGFibGUgY2FuIG9wdGlvbmFsbHkgd2FybiB5b3UgYWJvdXQgZHVwbGljYXRl
IG9iamVjdHMgb3IgY2FuCitkaXNhbGxvdyB0aGVtKS4KKworQSB2dGFibGUgY2FuIGJlIGluc2Vy
dGVkIGludG8gYSBzaW5nbGUgYnVmZmVyIG9ubHkuICBBbiBlcnJvciBpcworc2lnbmFsZWQgaWYg
YSB2dGFibGUgaXMgYXR0ZW1wdGVkIHRvIGJlIGluc2VydGVkIG1vcmUgdGhhbiBvbmNlIGludG8g
YQorc2luZ2xlIGJ1ZmZlciwgb3IgaW50byBtdWx0aXBsZSBidWZmZXJzLgorCitUYWJsZSBtdXRh
dGlvbiBmdW5jdGlvbnMsIGluc2VydCwgdXBkYXRlLCByZW1vdmUsIGV0Yy4sIGFzc3VtZSB0aGUg
dGFibGUKK2hhcyBiZWVuIGluc2VydGVkIGludG8gYSBidWZmZXIuICBDYWxsIHRoZW0gb25seSBh
ZnRlciBpbnNlcnRpb24uCisKK0EgdnRhYmxlIGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCBiYXNl
ZCBvbiBpdHMgc2VsZWN0ZWQgd2luZG93J3Mgd2lkdGguCitXaGlsZSBhIHZ0YWJsZSBidWZmZXIg
Y2FuIGJlIGRpc3BsYXllZCBpbiBtdWx0aXBsZSB3aW5kb3dzLCBiZSBhd2FyZQordGhhdCB0aGUg
YnVmZmVyIGl0c2VsZiB3aWxsIGNvbnRhaW4gdGhlIGxpbmVzIHRyYW5zZm9ybWVkIGFuZCBmb3Jt
YXR0ZWQKK2ZvciBpdHMgbW9zdC1yZWNlbnRseSBzZWxlY3RlZCB3aW5kb3cncyB3aWR0aC4KCi1B
bGwgdGhlc2UgdGhyZWUgdHJhbnNmb3JtcywgdGhlIGdldHRlciwgdGhlIGZvcm1hdHRlciBhbmQg
dGhlIGRpc3BsYXkKLWZ1bmN0aW9ucywgY2FuIGJlIGRlZmluZWQgb24gYSBwZXItY29sdW1uIGJh
c2lzLCBhbmQgYWxzbyBvbiBhCi1wZXItdGFibGUgYmFzaXMuICAoVGhlIHBlci1jb2x1bW4gdHJh
bnNmb3JtIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUKLXBlci10YWJsZSB0cmFuc2Zvcm0uKQor
WW91IGNhbiB1c2UgQGNvZGV7dGV4dC1zY2FsZS1tb2RlfSBpbiB2dGFibGUgYnVmZmVycy4gIFRh
YmxlIGNvbnRlbnQgaXMKK2F1dG9tYXRpY2FsbHkgc2NhbGVkIHdpdGggYnVmZmVyIGZhY2VzLgoK
LVVzZXIgY29tbWFuZHMgdGhhdCBhcmUgZGVmaW5lZCBvbiBhIHRhYmxlIGRvZXMgbm90IHdvcmsg
b24gdGhlCi1kaXNwbGF5ZWQgZGF0YS4gIEluc3RlYWQgdGhleSBhcmUgY2FsbGVkIHdpdGggdGhl
IG9yaWdpbmFsIG9iamVjdCBhcwotdGhlIGFyZ3VtZW50LgorWW91IGNhbiBvcHRpb25hbGx5IG1h
cmsgYW5kIHVubWFyayBvYmplY3RzIGluIHRoZSB0YWJsZSBzaW1pbGFyIHRvCitAY29kZXtkaXJl
ZH0uICBBc3NvY2lhdGUgdGhlIG1hcmtpbmcgZnVuY3Rpb25zIHlvdSBuZWVkIHdpdGgga2V5cwor
ZGVmaW5lZCBpbiB0aGUgdGFibGUncyBAY29kZXs6YWN0aW9uc30uCisKK0EgdnRhYmxlIHdpbGwg
bm90IG9wZXJhdGUgY29ycmVjdGx5IGluIG5hcnJvd2VkIGJ1ZmZlcnMuCgogQG5vZGUgTWFraW5n
IEEgVGFibGUKIEBjaGFwdGVyIE1ha2luZyBBIFRhYmxlCkBAIC0yNDUsNiArMjgwLDEwIEBAIE1h
a2luZyBBIFRhYmxlCiBUaGUgaW50ZXJmYWNlIGZ1bmN0aW9uIGZvciBtYWtpbmcgKGFuZCBvcHRp
b25hbGx5IGluc2VydGluZyBhIHRhYmxlCiBpbnRvIGEgYnVmZmVyKSBpcyBAY29kZXttYWtlLXZ0
YWJsZX0uICBJdCByZXR1cm5zIGEgdGFibGUgb2JqZWN0LgoKK05vdGU6IFlvdSBtdXN0IGNyZWF0
ZSB0aGUgdGFibGUgd2l0aCBvYmplY3RzIG9yIGNvbHVtbnMgb3IgYm90aC4gIElmIHlvdQorY3Jl
YXRlIHRoZSB0YWJsZSB3aXRoIGNvbHVtbnMgYnV0IHdpdGhvdXQgb2JqZWN0cywgeW91IGNhbiBh
ZGQgb2JqZWN0cworbGF0ZXIgdXNpbmcgdGhlIEBjb2Rle3Z0YWJsZS1pbnNlcnQtb2JqZWN0fSBm
dW5jdGlvbi4KKwogVGhlIGtleXdvcmQgcGFyYW1ldGVycyBhcmUgZGVzY3JpYmVkIGJlbG93LgoK
IFRoZXJlIGFyZSBtYW55IGNhbGxiYWNrIGludGVyZmFjZSBmdW5jdGlvbnMgcG9zc2libGUgaW4K
QEAgLTI1NCwxNSArMjkzLDIwIEBAIE1ha2luZyBBIFRhYmxlCiBieSBAY29kZXttYWtlLXZ0YWJs
ZX0pLgoKIEB0YWJsZSBAY29kZQorQGl0ZW0gOm5hbWUKK1RoZSBkZWZhdWx0IHRhYmxlIG5hbWUg
aXMgYCp2dGFibGUqYC4gIFNwZWNpZnkgdGhpcyBpZiB5b3UgaGF2ZSBtb3JlCit0aGFuIG9uZSB2
dGFibGUgaW4gYSBzaW5nbGUgYnVmZmVyIGFuZCB3b3VsZCBsaWtlIHZ0YWJsZSBtZXNzYWdlcyB0
bworc2hvdyBzcGVjaWZpYyB2dGFibGUgbmFtZXMuCisKIEBpdGVtIDpvYmplY3RzCiBUaGlzIGlz
IGEgbGlzdCBvZiBvYmplY3RzIHRvIGJlIGRpc3BsYXllZC4gIEl0IHNob3VsZCBlaXRoZXIgYmUg
YSBsaXN0CiBvZiBzdHJpbmdzICh3aGljaCB3aWxsIHRoZW4gYmUgZGlzcGxheWVkIGFzIGEgc2lu
Z2xlLWNvbHVtbiB0YWJsZSksIG9yCiBhIGxpc3Qgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGEgc2Vx
dWVuY2UgY29udGFpbmluZyBhIG1peHR1cmUgb2YKIHN0cmluZ3MsIG51bWJlcnMsIGFuZCBvdGhl
ciBvYmplY3RzIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBgYHNpbXBseScnLgoKLUluIHRoZSBsYXR0
ZXIgY2FzZSwgaWYgQGNvZGV7OmNvbHVtbnN9IGlzIG5vbi1AY29kZXtuaWx9IGFuZCB0aGVyZSdz
Ci1tb3JlIGVsZW1lbnRzIGluIHRoZSBzZXF1ZW5jZSB0aGFuIHRoZXJlIGlzIGluIEBjb2Rlezpj
b2x1bW5zfSwgb25seQotdGhlIEBjb2Rlezpjb2x1bW5zfSBmaXJzdCBlbGVtZW50cyBhcmUgZGlz
cGxheWVkLgorSW4gdGhlIGxhdHRlciBjYXNlLCBpZiBAY29kZXs6Y29sdW1uc30gaXMgbm9uLUBj
b2Rle25pbH0gYW5kIHRoZXJlIGFyZQorbW9yZSBlbGVtZW50cyBpbiB0aGUgc2VxdWVuY2UgdGhh
biB0aGVyZSBhcmUgaW4gQGNvZGV7OmNvbHVtbnN9LCB0aGUKK2VsZW1lbnRzIGJleW9uZCB0aG9z
ZSBpbiBAY29kZXs6Y29sdW1uc30gYXJlIG5vdCBkaXNwbGF5ZWQuCgogSWYgdGhlIEBjb2Rlezpv
YmplY3RzfSBsaXN0IGlzIGVtcHR5IChhbmQgbm8gQGNvZGV7Om9iamVjdHMtZnVuY3Rpb259IGlz
CiBkZWZpbmVkKSwgYW4gZW1wdHkgdnRhYmxlIGlzIGNyZWF0ZWQuICBJbiB0aGlzIGNhc2UsIGEg
QGNvZGV7OmNvbHVtbnN9CkBAIC0yNzQsMTEgKzMxOCwzMSBAQCBNYWtpbmcgQSBUYWJsZQogc2hv
dWxkIGJlIGEgZnVuY3Rpb24gKHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRz
KSwgYW5kCiBzaG91bGQgcmV0dXJuIGEgdmFsdWUgYXMgYWNjZXB0ZWQgYXMgYW4gQGNvZGV7Om9i
amVjdHN9IGxpc3QuCgorQGl0ZW0gOm9iamVjdC1lcXVhbAorVGhpcyBmdW5jdGlvbiB0ZXN0cyBm
b3IgdGhlIGVxdWFsaXR5IG9mIHR3byB0YWJsZSBvYmplY3RzLiAgSXQgZGVmYXVsdHMKK3RvIEBj
b2Rle2VxfS4KKworQGRlZnVuIG9iamVjdC1lcXVhbCBvYmplY3QxIG9iamVjdDIKK1JldHVybiBu
b24tbmlsIGlmIEB2YXJ7b2JqZWN0MX0gYW5kIEB2YXJ7b2JqZWN0Mn0gYXJlIGVxdWFsLCBhbmQg
bm9uLW5pbAorb3RoZXJ3aXNlLgorQGVuZCBkZWZ1bgorCitAaXRlbSA6ZHVwbGljYXRlLW9iamVj
dHMKK0EgdnRhYmxlIGFzc3VtZXMgYWxsIG9iamVjdHMgaW5zZXJ0ZWQgaW50byB0aGUgdGFibGUg
YXJlIHVuaXF1ZSBhbW9uZwordGhlbXNlbHZlcy4gIElmIHRoZSBzeW1ib2wgQGNvZGV7J2FsbG93
fSwgdGhlIGRlZmF1bHQsIGFsbG93IGR1cGxpY2F0ZQorb2JqZWN0cyAodGhlIGZpcnN0IG9iamVj
dCBmb3VuZCBkdXJpbmcgdGFibGUgb3BlcmF0aW9ucyBoYXMgcHJpbWFjeSksIGlmCitAY29kZXsn
aWdub3JlfSwgc2lsZW50bHkgaWdub3JlIGR1cGxpY2F0ZXMgbGVhdmluZyB0aGUgZXhpc3Rpbmcg
b2JqZWN0CitpbnRhY3QsIGlmIEBjb2RleydpZ25vcmUtd2Fybn0gZG8gdGhlIHNhbWUgdGhpbmcg
YXMgQGNvZGV7J2lnbm9yZX0gYW5kCitwcm9kdWNlIGEgd2FybmluZyBtZXNzYWdlLCBvciBpZiBA
Y29kZXsnZXJyb3J9LCBzaWduYWwgYW4gZXJyb3IgaWYgYQorZHVwbGljYXRlIGlzIGRldGVjdGVk
LgorCiBAaXRlbSA6Y29sdW1ucwotVGhpcyBpcyBhIGxpc3Qgd2hlcmUgZWFjaCBlbGVtZW50IGlz
IGVpdGhlciBhIHN0cmluZyAodGhlIGNvbHVtbgotbmFtZSksIGEgcGxpc3Qgb2Yga2V5d29yZC92
YWx1ZXMgKHRvIG1ha2UgYSBAY29kZXt2dGFibGUtY29sdW1ufQotb2JqZWN0KSwgb3IgYSBmdWxs
IEBjb2Rle3Z0YWJsZS1jb2x1bW59IG9iamVjdC4gIEEKLUBjb2Rle3Z0YWJsZS1jb2x1bW59IG9i
amVjdCBoYXMgdGhlIGZvbGxvd2luZyBzbG90czoKK1RoaXMgaXMgYSBsaXN0IHdoZXJlIGVhY2gg
ZWxlbWVudCBpcyBlaXRoZXIgYSBzdHJpbmcgKHRoZSBjb2x1bW4gbmFtZSksCithIHBsaXN0IG9m
IGtleXdvcmQvdmFsdWVzICh0byBtYWtlIGEgQGNvZGV7dnRhYmxlLWNvbHVtbn0gb2JqZWN0KSwg
b3IgYQorQGNvZGV7dnRhYmxlLWNvbHVtbn0gb2JqZWN0IChjcmVhdGVkIGJ5IGNhbGxpbmcgdGhl
IGZ1bmN0aW9uCitAY29kZXttYWtlLXZ0YWJsZS1jb2x1bW59KS4KKworQSBAY29kZXt2dGFibGUt
Y29sdW1ufSBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgc2xvdHM6CgogQHRhYmxlIEBjb2RlCiBA
aXRlbSBuYW1lCkBAIC0zMDEsMTkgKzM2NSw0OCBAQCBNYWtpbmcgQSBUYWJsZQoKIElmIG5vIEBj
b2Rle3dpZHRofSBpcyBwcm92aWRlZCwgdGhlIHdpZHRoIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24g
dGhlCiBjb2x1bW4gZGF0YSAocHJvdmlkZWQgaW4gdGhlIEBjb2RlezpvYmplY3RzfSBsaXN0IG9y
IHRocm91Z2ggdGhlCi1AY29kZXs6b2JqZWN0cy1mdW5jdGlvbn0pIG9yLCBpZiB0aGVyZSBpcyBu
byBkYXRhLCBvbiB0aGUgYmFzaXMgb2YgdGhlCi13aW5kb3cgd2lkdGguCitAY29kZXs6b2JqZWN0
cy1mdW5jdGlvbn0pLCBvcHRpb25hbGx5IGluY2x1ZGluZyB0aGUgY29sdW1uLW5hbWUgd2lkdGgu
CitBbiBpbmZlcnJlZCBjb2x1bW4gd2lkdGggdXNlcyB0aGUgcmVzdWx0IG9mIHRoZSBjb2x1bW4n
cyBmb3JtYXR0ZXIKK2Z1bmN0aW9uIChvciB0aGUgdGFibGUncyBmb3JtYXR0ZXIpLCBpZiBwcmVz
ZW50LiAgRGlzcGxheWVyIGZ1bmN0aW9ucworaGF2ZSBubyBpbXBhY3Qgb24gaW5mZXJyZWQgd2lk
dGhzLiAgSWYgbm8gd2lkdGggaXMgc3BlY2lmaWVkLCBhbmQgdGhlcmUKK2lzIG5vIGRhdGEsIHdp
ZHRoIGlzIGNvbXB1dGVkIG9uIHRoZSBiYXNpcyBvZiB0aGUgd2luZG93IHdpZHRoLiAgRm9yCit0
YWJsZXMgd2l0aCBhIGxhcmdlIG51bWJlciBvZiBvYmplY3RzLCBpdCBpcyBtb3JlIGVmZmljaWVu
dCB0byBzcGVjaWZ5IGEKK3dpZHRoLgorCitAaXRlbSBpbmZlci13aWR0aAorVGhpcyBkZWZhdWx0
cyB0byBAY29kZXtkYXRhfSwgd2hpY2ggY29tcHV0ZXMgdGhlIGRlZmF1bHQgd2lkdGggYmFzZWQg
b24KK3RoZSBjb2x1bW4ncyBmb3JtYXR0ZWQgY29udGVudC4gIElmIEBjb2Rle2RhdGErbmFtZX0s
IHdpZHRoIGFsc28KK2NvbnNpZGVycyB0aGUgY29sdW1uJ3MgbmFtZSB3aWR0aC4gIFRoaXMgaGFz
IG5vIGVmZmVjdCB3aGVuIEBjb2Rle3dpZHRofQoraXMgZXhwbGljaXQuCgogQGl0ZW0gbWluLXdp
ZHRoCi1UaGlzIHVzZXMgdGhlIHNhbWUgZm9ybWF0IGFzIEBjb2Rle3dpZHRofSwgYnV0IHNwZWNp
ZmllcyB0aGUgbWluaW11bQotd2lkdGggKGFuZCBvdmVycmlkZXMgQGNvZGV7d2lkdGh9IGlmIEBj
b2Rle3dpZHRofSBpcyBzbWFsbGVyIHRoYW4gdGhpcy4KLQotQGl0ZW0gbWF4LXdpZHRoCi1UaGlz
IHVzZXMgdGhlIHNhbWUgZm9ybWF0IGFzIEBjb2Rle3dpZHRofSwgYnV0IHNwZWNpZmllcyB0aGUg
bWF4aW11bQotd2lkdGggKGFuZCBvdmVycmlkZXMgQGNvZGV7d2lkdGh9IGlmIEBjb2Rle3dpZHRo
fSBpcyBsYXJnZXIgdGhhbiB0aGlzLgotQGNvZGV7bWluLXdpZHRofS9AY29kZXttYXgtd2lkdGh9
IGNhbiBiZSB1c2VmdWwgaWYgQGNvZGV7d2lkdGh9IGlzCi1naXZlbiBhcyBhIHBlcmNlbnRhZ2Ug
b2YgdGhlIHdpbmRvdyB3aWR0aCwgYW5kIHlvdSB3YW50IHRvIGVuc3VyZSB0aGF0Ci10aGUgY29s
dW1uIGRvZXNuJ3QgZ3JvdyBwb2ludGxlc3NseSBsYXJnZSBvciB1bnJlYWRhYmx5IG5hcnJvdy4K
K0BpdGVteCBtYXgtd2lkdGgKK1RoZXNlIHVzZSB0aGUgc2FtZSBmb3JtYXQgYXMgQGNvZGV7d2lk
dGh9LCBhbmQgc3BlY2lmeSB0aGUgbWluaW11bSBvcgorbWF4aW11bSB3aWR0aCwgd2hpY2ggb3Zl
cnJpZGVzIEBjb2Rle3dpZHRofSBpZiBAY29kZXt3aWR0aH0gaXMgb3V0IG9mCitib3VuZHMuCisK
K0Bjb2Rle21pbi13aWR0aH0vQGNvZGV7bWF4LXdpZHRofSBjYW4gYmUgdXNlZnVsIGlmIEBjb2Rl
e3dpZHRofSBpcyBnaXZlbgorYXMgYSBwZXJjZW50YWdlIG9mIHRoZSB3aW5kb3cgd2lkdGgsIGFu
ZCB5b3Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUKK2NvbHVtbiBkb2Vzbid0IGdyb3cgcG9pbnRs
ZXNzbHkgbGFyZ2Ugb3IgdW5yZWFkYWJseSBuYXJyb3cuCisKK0BpdGVtIHRydW5jYXRlLWd1ZXNz
CitJZiBhIGZvcm1hdHRlZCBjb2x1bW4gdmFsdWUgd2lsbCBub3QgZml0IGludG8gdGhlIGNvbHVt
bidzIHdpZHRoLCBpdCBpcworc2hvcnRlbmVkIG9uIGEgcGl4ZWx3aXNlIGJhc2lzIHRvIGZpdCBp
biB0aGUgYWxsb3R0ZWQgcGl4ZWwgd2lkdGgsIGFuZAord2l0aCB0aGUgdGFibGUncyBlbGxpcHNp
cyBhcHBlbmRlZCB0byBpbmRpY2F0ZSBzaG9ydGVuaW5nLgorQGNvZGV7dHJ1bmNhdGUtZ3Vlc3N9
IGluZmx1ZW5jZXMgdGhlIHRydW5jYXRpb24gYWxnb3JpdGhtIGJ5IGFkanVzdGluZwordGhlIG51
bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGFkZCB0byBpdHMgaW5pdGlhbCBndWVzcy4gIFRoaXMgaXMg
YW4KK2ludGVnZXIgdGhhdCBkZWZhdWx0cyB0byAwLiAgSWYgeW91IGZpbmQgdGhlIGd1ZXNzZXMg
YXJlIGltcHJlY2lzZSBmb3IKK3lvdXIgc3BlY2lmaWMgY29udGVudDsgZS5nLiwgaWYgaXQgaGFz
IG1peGVkIGZhY2VzIG9mIGRpZmZlcmluZyBoZWlnaHRzCit0aGF0IG5lZWQgc3BlY2lhbCB0cmVh
dG1lbnQsIHNwZWNpZnkgYSBsYXJnZXIgZ3Vlc3MgaW5jcmVtZW50LiAgSWYgbmlsLAorZ3Vlc3Np
bmcgaXMgZGlzYWJsZWQsIHdoaWNoIHdpbGwgYmUgc2xvd2VyIGZvciBsb25nZXIgdmFsdWVzLiAg
WW91IGNhbgorcHJvdmlkZSB5b3VyIG93biB0cnVuY2F0aW9uIHN0cmF0ZWd5IGluIHlvdXIgY29s
dW1uIEBjb2Rle2Rpc3BsYXllcn0uCisKK0BpdGVtIG51bWVyaWMKK0lmIEBjb2Rle251bWVyaWN9
IGlzIHVuc3BlY2lmaWVkLCBudW1lcmljIGNvbnRlbnQgaXMgaW5mZXJyZWQgYnkKK3NjYW5uaW5n
IGFsbCB2YWx1ZXMgaW4gYSBjb2x1bW4uICBGb3IgdGFibGVzIHdpdGggYSBsYXJnZSBudW1iZXIg
b2YKK29iamVjdHMsIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIHNwZWNpZnkgbnVtZXJpYyBjb250
ZW50IGV4cGxpY2l0bHkuCitAY29kZXt0fSBpbmRpY2F0ZXMgdGhhdCB5b3VyIGNvbHVtbidzIGRh
dGEgYXJlIG51bWVyaWMuICBAY29kZXtuaWx9CitpbmRpY2F0ZXMgdGhhdCB0aGUgY29sdW1uIGlz
IG5vdCBudW1lcmljLiAgQGNvZGV7aW5mZXJ9IGlzIHRoZSBkZWZhdWx0LgoKIEBpdGVtIHByaW1h
cnkKIFdoZXRoZXIgdGhpcyBpcyB0aGUgcHJpbWFyeSBjb2x1bW4tLS10aGlzIHdpbGwgYmUgdXNl
ZCBmb3IgaW5pdGlhbApAQCAtMzI0LDMxICs0MTcsNTQgQEAgTWFraW5nIEEgVGFibGUKIElmIHBy
ZXNlbnQsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gcmV0dXJuIHRoZSBjb2x1bW4g
dmFsdWUuCgogQGRlZnVuIGNvbHVtbi1nZXR0ZXIgb2JqZWN0IHRhYmxlCi1JdCdzIGNhbGxlZCB3
aXRoIHR3byBwYXJhbWV0ZXJzOiB0aGUgb2JqZWN0IGFuZCB0aGUgdGFibGUuCitAdmFye29iamVj
dH0gaXMgdGhlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHJvdy4gIEB2YXJ7dGFibGV9IGlz
IHRoZQordnRhYmxlIGluc3RhbmNlLgorQGVuZCBkZWZ1bgorCitAaXRlbSBjb21wYXJhdG9yCitU
aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIGNvbXBhcmUgY29sdW1uIHZhbHVlcy4gIFVz
ZSB0aGlzIHdoZW4KK3lvdXIgb2JqZWN0cyBjb250YWluIGRhdGEgdGhhdCBuZWVkcyBub24tbnVt
ZXJpYyBvciBzdHJpbmcgY29sbGF0aW9uLAorZm9yIGV4YW1wbGUsIGRhdGVzLiAgQW5vdGhlciBj
YXNlIHdvdWxkIGJlIHdoZXJlIHlvdSB3YW50IHRoZSBlcXVpdmFsZW50CitvZiBAY29kZXtzb3J0
LWZvbGQtY2FzZX0uCisKK0BkZWZ1biBjb21wYXJhdG9yIHZhbHVlMSB2YWx1ZTIKK1RoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIHdpdGggdHdvIHZhbHVlcyB0byBjb21wYXJlLiAgVGhlIHJldHVybiB2
YWx1ZQorc2hvdWxkIGZvbGxvdyB0aGUgc2VtYW50aWNzIG9mIEBjb2Rlezx9IG9yLCBAY29kZXtz
dHJpbmctbGVzc3B9LgogQGVuZCBkZWZ1bgoKIEBpdGVtIGZvcm1hdHRlcgogSWYgcHJlc2VudCwg
dGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBmb3JtYXQgdGhlIHZhbHVlLgoKIEBkZWZ1
biBjb2x1bW4tZm9ybWF0dGVyIHZhbHVlCi1JdCdzIGNhbGxlZCB3aXRoIG9uZSBwYXJhbWV0ZXI6
IHRoZSBjb2x1bW4gdmFsdWUuCitAdmFye3ZhbHVlfSBpcyB0aGUgY29sdW1uJ3MgcmF3IHZhbHVl
IGZyb20gdGhlIG9iamVjdCwgbm90IGl0cyBmb3JtYXR0ZWQKK3N0cmluZy4KIEBlbmQgZGVmdW4K
CiBAaXRlbSBkaXNwbGF5ZXIKLUlmIHByZXNlbnQsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxs
ZWQgdG8gcHJlcGFyZSB0aGUgZm9ybWF0dGVkCi12YWx1ZSBmb3IgZGlzcGxheS4gIFRoaXMgZnVu
Y3Rpb24gc2hvdWxkIHJldHVybiBhIHN0cmluZyB3aXRoIHRoZQotdGFibGUgZmFjZSBhcHBsaWVk
LCBhbmQgYWxzbyBsaW1pdCB0aGUgd2lkdGggb2YgdGhlIHN0cmluZyB0byB0aGUKLWRpc3BsYXkg
d2lkdGguCitJZiBwcmVzZW50LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIHByZXBh
cmUgdGhlIGZvcm1hdHRlZCB2YWx1ZQorZm9yIGRpc3BsYXkuICBUaGlzIGZ1bmN0aW9uIHNob3Vs
ZCByZXR1cm4gYSBzdHJpbmcgd2l0aCB0aGUgdGFibGUgZmFjZQorYXBwbGllZCwgYW5kIGFsc28g
bGltaXQgdGhlIHdpZHRoIG9mIHRoZSBzdHJpbmcgdG8gdGhlIGRpc3BsYXkgd2lkdGgsIG9yCitz
Y2FsZSBpbWFnZXMuICBJbWFnZXMgY3JlYXRlZCB3aXRoIEBjb2RlezpzY2FsZX0gc2V0IHRvIDEu
MCAob3Igc21hbGxlcikKK3dpbGwgYXV0byBzY2FsZSB0byB0aGUgaW1hZ2UgQGNvZGV7OndpZHRo
fSB3aGVuIHRoYXQgaXMgc2V0IHRvCitAdmFye21heC13aWR0aH0gYXMgcGFzc2VkIHRvIHRoZSBk
aXNwbGF5ZXIgZnVuY3Rpb24uICBBIHNjYWxlIG92ZXIgMS4wCit3aWxsIGludGVyZmVyZSB3aXRo
IHRoZSB0YWJsZSdzIHBpeGVsLWxldmVsIGFsaWdubWVudC4KCiBAZGVmdW4gY29sdW1uLWRpc3Bs
YXllciBmdmFsdWUgbWF4LXdpZHRoIHRhYmxlCi1AdmFye2Z2YWx1ZX0gaXMgdGhlIGZvcm1hdHRl
ZCB2YWx1ZTsgQHZhcnttYXgtd2lkdGh9IGlzIHRoZSBtYXhpbXVtCi13aWR0aCAoaW4gcGl4ZWxz
KSwgYW5kIEB2YXJ7dGFibGV9IGlzIHRoZSB0YWJsZS4KK0B2YXJ7ZnZhbHVlfSBpcyB0aGUgZm9y
bWF0dGVkIHZhbHVlLiAgQHZhcnttYXgtd2lkdGh9IGlzIHRoZSBtYXhpbXVtCit3aWR0aCBpbiBw
aXhlbHMuICBAdmFye3RhYmxlfSBpcyB0aGUgdnRhYmxlIGluc3RhbmNlLgogQGVuZCBkZWZ1bgoK
IEBpdGVtIGFsaWduCi1TaG91bGQgYmUgZWl0aGVyIEBjb2Rle3JpZ2h0fSBvciBAY29kZXtsZWZ0
fS4gIElmIG5vdCBzcGVjaWZpZWQsCi1udW1lcmljYWwgdmFsdWVzIHdpbGwgYmUgZmx1c2hlZCB0
byB0aGUgcmlnaHQsIGFuZCBhbGwgb3RoZXIgdmFsdWVzIHdpbGwKLWJlIGZsdXNoZWQgdG8gdGhl
IGxlZnQuCitAaXRlbXggaGVhZGVyLWFsaWduCitDYW4gYmUgb25lIG9mIEBjb2Rle3JpZ2h0fSwg
QGNvZGV7bGVmdH0sIEBjb2Rle2NlbnRlcn0uICBJZiBub3QKK3NwZWNpZmllZCwgbnVtZXJpY2Fs
IHZhbHVlcyB3aWxsIGJlIGFsaWduZWQgdG8gdGhlIHJpZ2h0LCBhbmQgYWxsIG90aGVyCit2YWx1
ZXMgd2lsbCBiZSBhbGlnbmVkIHRvIHRoZSBsZWZ0LiAgSWYgQGNvZGV7aGVhZGVyLWFsaWdufSBp
cyBub3QKK3NwZWNpZmllZCwgdGhlIGNvbHVtbidzIG5hbWUgd2lsbCBiZSBhbGlnbmVkIHRoZSBz
YW1lIHdheSBhcyBpdHMgZGF0YS4KKworQGl0ZW0gZXh0cmEtZGF0YQorVXNlIHRoaXMgdG8gYXR0
YWNoIGFueSBsaXNwIG9iamVjdCwgc2ltcGxlIG9yIGNvbXBsZXgsIHRvIGEgY29sdW1uJ3MKK2Rl
ZmluaXRpb24uICBZb3UgY2FuIGNvbnN1bHQgdGhpcyBhZnRlciBjYWxsaW5nLCBmb3IgZXhhbXBs
ZSwKK0Bjb2Rle3Z0YWJsZS1jdXJyZW50LWNvbHVtbn0gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQg
Y29sdW1uLgogQGVuZCB0YWJsZQoKIEBpdGVtIDpnZXR0ZXIKQEAgLTM1Niw5ICs0NzIsMTMgQEAg
TWFraW5nIEEgVGFibGUKIHRoZSB0YWJsZSwgYW5kIHdpbGwgYmUgY2FsbGVkIG9uY2UgZm9yIGVh
Y2ggZWxlbWVudCBpbiB0aGUgdGFibGUKICh1bmxlc3Mgb3ZlcnJpZGRlbiBieSBhIGNvbHVtbiBn
ZXR0ZXIgZnVuY3Rpb24pLgoKLUBkZWZ1biBnZXR0ZXIgb2JqZWN0IGluZGV4IHRhYmxlCi1Gb3Ig
YSBzaW1wbGUgb2JqZWN0IChsaWtlIGEgc2VxdWVuY2UpLCB0aGlzIGZ1bmN0aW9uIHdpbGwgdHlw
aWNhbGx5Ci1qdXN0IHJldHVybiB0aGUgZWxlbWVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb2x1
bW4gaW5kZXggKHplcm8tYmFzZWQpLCBidXQgdGhlCitAZGVmdW4gZ2V0dGVyIG9iamVjdCBjb2x1
bW4taW5kZXggdGFibGUKK0B2YXJ7b2JqZWN0fSBpcyB0aGUgb2JqZWN0IGFzc29jaWF0ZWQgd2l0
aCB0aGUgcm93LiAgQHZhcntjb2x1bW4taW5kZXh9CitpcyB0aGUgMC1iYXNlZCBjb2x1bW4gaW5k
ZXggd2hpY2ggeW91IGNhbiBkZXJlZmVyZW5jZSB1c2luZwordGhlIGZ1bmN0aW9uIEBjb2Rle3Z0
YWJsZS1jb2x1bW5zfS4gIEB2YXJ7dGFibGV9IGlzIHRoZSB2dGFibGUgaW5zdGFuY2UuCisKK0Zv
ciBhIHNpbXBsZSBvYmplY3QgKGxpa2UgYSBzZXF1ZW5jZSksIHRoaXMgZnVuY3Rpb24gd2lsbCB0
eXBpY2FsbHkganVzdAorcmV0dXJuIHRoZSBlbGVtZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIDAt
YmFzZWQgY29sdW1uIGluZGV4LCBidXQgdGhlCiBmdW5jdGlvbiBjYW4gZG8gYW55IGNvbXB1dGF0
aW9uIGl0IHdhbnRzLiAgSWYgaXQncyBtb3JlIGNvbnZlbmllbnQgdG8KIHdyaXRlIHRoZSBmdW5j
dGlvbiBiYXNlZCBvbiBjb2x1bW4gbmFtZXMgcmF0aGVyIHRoYW4gdGhlIGNvbHVtbiBpbmRleCwK
IHRoZSBAY29kZXt2dGFibGUtY29sdW1ufSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBtYXAgZnJv
bSBpbmRleCB0byBuYW1lLgpAQCAtMzY5LDQyICs0ODksNjMgQEAgTWFraW5nIEEgVGFibGUKIHdp
bGwgYmUgY2FsbGVkIG9uIGFsbCB2YWx1ZXMgaW4gdGhlIHRhYmxlICh1bmxlc3Mgb3ZlcnJpZGRl
biBieSBhCiBjb2x1bW4gZm9ybWF0dGVyKS4KCi1AZGVmdW4gZm9ybWF0dGVyIHZhbHVlIGluZGV4
IHRhYmxlCi1UaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRocmVlIHBhcmFtZXRlcnM6IHRo
ZSB2YWx1ZSAoYXMgcmV0dXJuZWQKLWJ5IHRoZSBnZXR0ZXIpOyB0aGUgY29sdW1uIGluZGV4LCBh
bmQgdGhlIHRhYmxlLiAgSXQgY2FuIHJldHVybiBhbnkKLXZhbHVlLgorQGRlZnVuIGZvcm1hdHRl
ciB2YWx1ZSBjb2x1bW4taW5kZXggdGFibGUKK0B2YXJ7dmFsdWV9IGlzIHRoZSBjb2x1bW4ncyBy
YXcgdmFsdWUgZnJvbSB0aGUgb2JqZWN0LCBub3QgaXRzIGZvcm1hdHRlZAorc3RyaW5nLiAgQHZh
cntjb2x1bW4taW5kZXh9IGlzIHRoZSAwLWJhc2VkIGNvbHVtbiBpbmRleCB3aGljaCB5b3UgY2Fu
CitkZXJlZmVyZW5jZSB1c2luZyB0aGUgZnVuY3Rpb24gQGNvZGV7dnRhYmxlLWNvbHVtbnN9LiAg
QHZhcnt0YWJsZX0gaXMKK3RoZSB2dGFibGUgaW5zdGFuY2UuCgogVGhpcyBjYW4gYmUgdXNlZCB0
byAoZm9yIGluc3RhbmNlKSBmb3JtYXQgbnVtYmVycyBpbiBhIGh1bWFuLXJlYWRhYmxlCi1mb3Jt
LgorZm9ybSBhbmQgY2FuIHJldHVybiBhbnkgdmFsdWUuCiBAZW5kIGRlZnVuCgogQGl0ZW0gOmRp
c3BsYXllcgogQmVmb3JlIGRpc3BsYXlpbmcgYW4gZWxlbWVudCwgaXQncyBwYXNzZWQgdG8gdGhl
IGRpc3BsYXlpbmcgZnVuY3Rpb24KIChpZiBhbnkpLgoKLUBkZWZ1biBkaXNwbGF5ZXIgZnZhbHVl
IGluZGV4IG1heC13aWR0aCB0YWJsZQotVGhpcyBpcyBjYWxsZWQgd2l0aCBmb3VyIGFyZ3VtZW50
czogdGhlIGZvcm1hdHRlZCB2YWx1ZSBvZiB0aGUgZWxlbWVudAotKGFzIHJldHVybmVkIGJ5IHRo
ZSBmb3JtYXR0ZXIgZnVuY3Rpb24pOyB0aGUgY29sdW1uIGluZGV4OyB0aGUgZGlzcGxheQotd2lk
dGggKGluIHBpeGVscyk7IGFuZCB0aGUgdGFibGUuCitAZGVmdW4gZGlzcGxheWVyIGZ2YWx1ZSBj
b2x1bW4taW5kZXggbWF4LXdpZHRoIHRhYmxlCitAdmFye2Z2YWx1ZX0gaXMgdGhlIGZvcm1hdHRl
ZCB2YWx1ZS4gIEB2YXJ7Y29sdW1uLWluZGV4fSBpcyB0aGUgMC1iYXNlZAorY29sdW1uIGluZGV4
IHdoaWNoIHlvdSBjYW4gZGVyZWZlcmVuY2UgdXNpbmcgdGhlIGZ1bmN0aW9uCitAY29kZXt2dGFi
bGUtY29sdW1uc30uICBAdmFye21heC13aWR0aH0gaXMgdGhlIG1heGltdW0gd2lkdGggaW4gcGl4
ZWxzCisoYWRqdXN0IHlvdXIgcmV0dXJuIHZhbHVlIHRvIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0
byB0aGlzIHdpZHRoKS4KK0B2YXJ7dGFibGV9IGlzIHRoZSB2dGFibGUgaW5zdGFuY2UuCgotVGhp
cyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgc3RyaW5nIHdpdGggdGhlIHRhYmxlIGZhY2UgYXBw
bGllZCwgYW5kCi10cnVuY2F0ZWQgdG8gdGhlIGRpc3BsYXkgd2lkdGguCitUaGlzIGZ1bmN0aW9u
IHNob3VsZCByZXR1cm4gYSBzdHJpbmcgd2l0aCB0aGUgdGFibGUgZmFjZSBhcHBsaWVkIChpZiBu
b3QKK2FscmVhZHkgYXBwbGllZCBieSB0aGUgZm9ybWF0dGVyKSwgYW5kIHRydW5jYXRlZCB0byBA
dmFye21heC13aWR0aH0uCgogVGhpcyBjYW4gYmUgdXNlZCB0byAoZm9yIGluc3RhbmNlKSBjaGFu
Z2UgdGhlIHNpemUgb2YgaW1hZ2VzIHRoYXQgYXJlCi1kaXNwbGF5ZWQgaW4gdGhlIHRhYmxlLgor
ZGlzcGxheWVkIGluIHRoZSB0YWJsZS4gIEltYWdlcyBjcmVhdGVkIHdpdGggQGNvZGV7OnNjYWxl
fSBzZXQgdG8gMS4wCisob3Igc21hbGxlcikgd2lsbCBhdXRvIHNjYWxlIHRvIHRoZSBpbWFnZSBA
Y29kZXs6d2lkdGh9IHdoZW4gdGhhdCBpcyBzZXQKK3RvIEB2YXJ7bWF4LXdpZHRofSBhcyBwYXNz
ZWQgdG8gdGhlIGRpc3BsYXllciBmdW5jdGlvbi4gIEEgc2NhbGUgb3ZlcgorMS4wIHdpbGwgaW50
ZXJmZXJlIHdpdGggdGhlIHRhYmxlJ3MgcGl4ZWwtbGV2ZWwgYWxpZ25tZW50LgogQGVuZCBkZWZ1
bgoKIEBpdGVtIDp1c2UtaGVhZGVyLWxpbmUKIElmIG5vbi1AY29kZXtuaWx9ICh3aGljaCBpcyB0
aGUgZGVmYXVsdCksIGRpc3BsYXkgdGhlIGNvbHVtbiBuYW1lcyBvbgotdGhlIGhlYWRlciBsaW5l
LiAgVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gdXNlCi1jYXNlLCBidXQgaWYgdGhlcmUncyBvdGhl
ciB0ZXh0IGluIHRoZSBidWZmZXIgYmVmb3JlIHRoZSB0YWJsZSwgb3IKLXRoZXJlIGFyZSBzZXZl
cmFsIHRhYmxlcyBpbiB0aGUgc2FtZSBidWZmZXIsIHRoZW4gdGhpcyBzaG91bGQgYmUKLUBjb2Rl
e25pbH0uCit0aGUgaGVhZGVyLWxpbmUuICBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiB1c2UgY2Fz
ZSwgYnV0IGlmIHRoZXJlIGlzCitvdGhlciB0ZXh0IGluIHRoZSBidWZmZXIgYmVmb3JlIHRoZSB0
YWJsZSwgb3IgdGhlcmUgYXJlIHNldmVyYWwgdGFibGVzCitpbiB0aGUgc2FtZSBidWZmZXIsIHRo
ZW4gdGhpcyBzaG91bGQgYmUgQGNvZGV7bmlsfS4KKworSWYgdGhlIGhlYWRlci1saW5lIGlzIHVz
ZWQgYnkgYSBtb2RlIGluIHlvdXIgYnVmZmVyLCB1c2UgQGNvZGV7bmlsfSB0bworYXZvaWQgY29t
cGV0aW5nIG92ZXIgdGhlIGhlYWRlci1saW5lLgorCitJZiBob3Jpem9udGFsIHNjcm9sbGluZyBp
cyBlbmFibGVkIGFuZCB0aGUgdGFibGUncyBidWZmZXIgd2lsbCBub3QgZml0CitpbiB0aGUgd2lk
dGggb2YgaXRzIHdpbmRvdywgdGhlIGhlYWRlci1saW5lIHdpbGwgbm90IHNjcm9sbCBob3Jpem9u
dGFsbHkKK3dpdGggdGhlIHRhYmxlLCBzbyB1c2UgQGNvZGV7bmlsfS4gIEFsdGVybmF0aXZlbHks
IHlvdSBjYW4gZGlzYWJsZQorQGNvZGV7YXV0by1oc2Nyb2xsLW1vZGV9IGluIHRoYXQgYnVmZmVy
LgoKIEBpdGVtIDpmYWNlCi1UaGUgZmFjZSB0byBiZSB1c2VkLiAgVGhpcyBkZWZhdWx0cyB0byBA
Y29kZXt2dGFibGV9LiAgVGhpcyBmYWNlCi1kb2Vzbid0IG92ZXJyaWRlIHRoZSBmYWNlcyBpbiB0
aGUgZGF0YSwgb3IgdGhlIGZhY2VzIHN1cHBsaWVkIGJ5IHRoZQotZ2V0dGVyIGFuZCBmb3JtYXR0
ZXIgZnVuY3Rpb25zLgorVGhlIHRhYmxlIGJvZHkgZmFjZSBkZWZhdWx0cyB0byBAY29kZXt2dGFi
bGV9LiAgVGhpcyBpcyBhcHBlbmRlZCB0bworZmFjZXMgdGhhdCBtYXkgYmUgYWRkZWQgYnkgZ2V0
dGVyIGFuZCBmb3JtYXR0ZXIgZnVuY3Rpb25zLgorCitAaXRlbSA6aGVhZGVyLWZhY2UKK1RoZSB0
YWJsZSBoZWFkZXIgZmFjZSBkZWZhdWx0cyB0byBAY29kZXt2dGFibGUtaGVhZGVyfSwgaW5oZXJp
dGluZworQGNvZGV7aGVhZGVyLWxpbmV9IGFuZCBAY29kZXt2dGFibGV9LiAgVGhpcyBpcyBhcHBl
bmRlZCB0byBhbnkgZmFjZXMKK2RlZmluZWQgaW4geW91ciBjb2x1bW4tbmFtZSBzdHJpbmdzLgor
CitAaXRlbSA6bWFya2VkLWZhY2UKK1RoZSBtYXJrZWQgb2JqZWN0IGZhY2UgZGVmYXVsdHMgdG8g
QGNvZGV7dnRhYmxlLW1hcmtlZH0sIGluaGVyaXRpbmcKK0Bjb2Rle3JlZ2lvbn0gYW5kIEBjb2Rl
e3Z0YWJsZX0uICBUaGlzIGZhY2UgaXMgYWRkZWQgdG8gdGhlIGVudGlyZSBsaW5lLgoKIEBpdGVt
IDpyb3ctY29sb3JzCiBJZiBwcmVzZW50LCB0aGlzIHNob3VsZCBiZSBhIGxpc3Qgb2YgY29sb3Ig
bmFtZXMgdG8gYmUgdXNlZCBhcyB0aGUKQEAgLTQyNCw2ICs1NjUsMzEgQEAgTWFraW5nIEEgVGFi
bGUKIEBjb2Rlezpjb2x1bW4tY29sb3JzfSBpcyBwcmVzZW50LCB0aGUgY29sb3JzIHdpbGwgYmUg
YGBibGVuZGVkJycgdG8KIHByb2R1Y2UgdGhlIGZpbmFsIGNvbG9ycyBpbiB0aGUgdGFibGUuCgor
QGl0ZW0gOnJvdy1jb2xvci1mdW5jdGlvbgorQSBmdW5jdGlvbiB0byBjb250cm9sIHJvdyBjb2xv
cnMgcHJvZ3JhbW1hdGljYWxseS4KKworQGRlZnVuIHJvdy1jb2xvci1mdW5jdGlvbiByb3ctaW5k
ZXggb2JqZWN0IHJvdy1jb2xvcnMKK0B2YXJ7cm93LWluZGV4fSBpcyB0aGUgMC1iYXNlZCByb3cg
bnVtYmVyLiAgQHZhcntvYmplY3R9IGlzIHRoZSBvYmplY3QKK2Fzc29jaWF0ZWQgd2l0aCB0aGUg
cm93LiAgQHZhcntyb3ctY29sb3JzfSBhcmUgdGhlIGNvbG9ycyBtaXhlZCBmcm9tCitAY29kZXs6
cm93LWNvbG9yc30gYW5kIEBjb2Rlezpjb2x1bW4tY29sb3JzfSwgaWYgc3BlY2lmaWVkLCB3aGlj
aCB5b3UKK2NhbiBpZ25vcmUgaWYgeW91IGNvbXB1dGUgY29sb3JzIHNlcGFyYXRlbHkuICBSZXR1
cm4gYSBmYWNlIHRleHQKK3Byb3BlcnR5IHRvIGFkZCB0byB0aGUgbGluZS4KK0BlbmQgZGVmdW4K
KworQGl0ZW0gOmNvbHVtbi1jb2xvci1mdW5jdGlvbgorQSBmdW5jdGlvbiB0byBjb250cm9sIGNv
bHVtbiBjb2xvcnMgcHJvZ3JhbW1hdGljYWxseS4KKworQGRlZnVuIGNvbHVtbi1jb2xvci1mdW5j
dGlvbiByb3ctaW5kZXggY29sdW1uLWluZGV4IHZhbHVlIG9iamVjdCBjb2x1bW4tY29sb3JzCitA
dmFye3Jvdy1pbmRleH0gaXMgdGhlIDAtYmFzZWQgcm93IG51bWJlci4gIEB2YXJ7Y29sdW1uLWlu
ZGV4fSBpcyB0aGUKKzAtYmFzZWQgY29sdW1uIGluZGV4IHdoaWNoIHlvdSBjYW4gZGVyZWZlcmVu
Y2UgdXNpbmcgdGhlIGZ1bmN0aW9uCitAY29kZXt2dGFibGUtY29sdW1uc30uICBAdmFye3ZhbHVl
fSBpcyB0aGUgY29sdW1uJ3MgcmF3IHZhbHVlIGZyb20gdGhlCitvYmplY3QsIG5vdCBpdHMgZm9y
bWF0dGVkIHN0cmluZy4gIEB2YXJ7b2JqZWN0fSBpcyB0aGUgb2JqZWN0IGFzc29jaWF0ZWQKK3dp
dGggdGhlIHJvdy4gIEB2YXJ7Y29sdW1uLWNvbG9yc30gaXMgdGhlIHByZS1jb21wdXRlZCBjb2x1
bW4gY29sb3IKK21peGVkIGZyb20gQGNvZGV7OnJvdy1jb2xvcnN9IGFuZCBAY29kZXs6Y29sdW1u
LWNvbG9yc30sIGlmIHNwZWNpZmllZCwKK3doaWNoIHlvdSBjYW4gaWdub3JlIGlmIHlvdSBjb21w
dXRlIGNvbG9ycyBzZXBhcmF0ZWx5LiAgUmV0dXJuIGEgZmFjZQordGV4dCBwcm9wZXJ0eSB0byBh
ZGQgdG8gdGhlIGNvbHVtbidzIHRleHQgcHJvcGVydGllcy4KK0BlbmQgZGVmdW4KKwogQGl0ZW0g
OmFjdGlvbnMKIFRoaXMgdXNlcyB0aGUgc2FtZSBzeW50YXggYXMgQGNvZGV7ZGVmaW5lLWtleW1h
cH0sIGJ1dCBkb2Vzbid0IHJlZmVyCiB0byBjb21tYW5kcyBkaXJlY3RseS4gIEluc3RlYWQgZWFj
aCBrZXkgaXMgYm91bmQgdG8gYSBjb21tYW5kIHRoYXQKQEAgLTQzNiw5ICs2MDIsMjEgQEAgTWFr
aW5nIEEgVGFibGUKIGN1cnJlbnQgbGluZSwgdGhleSBjYW4gdXNlIHRoZSBAY29kZXt2dGFibGUt
Y3VycmVudC1vYmplY3R9IGZ1bmN0aW9uCiAoQHB4cmVme0ludGVyZmFjZSBGdW5jdGlvbnN9KSB0
byBkZXRlcm1pbmUgd2hhdCB0aGF0IG9iamVjdCBpcy4KCitAaXRlbSA6dXNlLW5hdmlnYXRpb24t
a2V5bWFwCitBZGQgc2V2ZXJhbCBwcmVkZWZpbmVkIG5hdmlnYXRpb24gYWN0aW9ucyB0byBAY29k
ZXs6a2V5bWFwfS4gIFRoZXNlCitpbmNsdWRlIGNvbnZlbmllbmNlIG1hcHBpbmdzIGZvciBtb3Zp
bmcgcG9pbnQgdG8gdGhlIG5leHQgYW5kIHByZXZpb3VzCitsaW5lcywgdG8gdGhlIGJlZ2lubmlu
ZyBvciBlbmQgb2YgdGhlIHRhYmxlLCB0byBtb3ZlIHBvaW50IHRvIHRoZSBuZXh0CitvciBwcmV2
aW91cyB2dGFibGUgaW4gdGhlIGJ1ZmZlciwgYW5kIHRvIGBxdWl0YCB0aGUgdGFibGUgY29uc3Vs
dGluZworQGNvZGV7OmNsb3NlLWFjdGlvbn0uCisKK0BpdGVtIDpjbG9zZS1hY3Rpb24KK1RoZSBk
ZWZhdWx0IHRhYmxlIGNsb3NlIGFjdGlvbiwgaW5pdGlhdGVkIHdpdGggdGhlIGBgcScnIGtleSBp
biB0aGUKK25hdmlnYXRpb24ga2V5bWFwLCB3aGljaCBkZWZhdWx0cyB0byBAY29kZXtidXJ5LWJ1
ZmZlcn0uICBUaGlzIGNhbiBhbHNvCitiZSBAY29kZXtxdWl0LXdpbmRvd30sIEBjb2Rle3F1aXQt
d2luZG93LWtpbGx9LCBhIGZ1bmN0aW9uIG9mIHlvdXIgb3duLgorCiBAaXRlbSA6c2VwYXJhdG9y
LXdpZHRoCiBUaGUgd2lkdGggb2YgdGhlIGJsYW5rIHNwYWNlIGJldHdlZW4gY29sdW1ucy4gIElm
IG5vdCBzcGVjaWZpZWQsIGl0Ci1kZWZhdWx0cyB0byAxLgorZGVmYXVsdHMgdG8gMSBjaGFyYWN0
ZXIncyB3aWR0aCBpbiB0aGUgdGFibGUncyBmYWNlLgoKIEBpdGVtIDpkaXZpZGVyLXdpZHRoCiBA
aXRlbXggOmRpdmlkZXIKQEAgLTQ1MSw2ICs2MjksNDkgQEAgTWFraW5nIEEgVGFibGUKIEBjb2Rl
ezpkaXZpZGVyLXdpZHRofSBlZmZlY3RpdmVseSBzZXRzIHRoZSBkaXZpZGVyIHRvIGEgd2hpdGVz
cGFjZQogc3RyaW5nIG9mIHRoYXQgd2lkdGguCgorQGl0ZW0gOmRpdmlkZXItb24taGVhZGVyCitJ
ZiBub24tQGNvZGV7bmlsfSwgZGlzcGxheSBkaXZpZGVycyBvbiB0aGUgdGFibGUncyBoZWFkZXIg
bGluZS4gIFRoZQorZGVmYXVsdCBpcyBAY29kZXtuaWx9LgorCitAaXRlbSA6aGVhZGVyLWludGFu
Z2libGUKK0lmIG5vbi1AY29kZXtuaWx9LCBlbmFibGVzIEBjb2Rle2N1cnNvci1pbnRhbmdpYmxl
LW1vZGV9IHRvIHByZXZlbnQKK3BvaW50IGZyb20gZW50ZXJpbmcgYSBoZWFkZXIgbGluZSBpbnNl
cnRlZCBpbnRvIHRoZSBidWZmZXIuICBUaGlzIGhhcyBubworZWZmZWN0IHdoZW4gQGNvZGV7OnVz
ZS1oZWFkZXItbGluZX0gaXMgbm9uLW5pbC4gIFRoZSBkZWZhdWx0IGlzCitAY29kZXtuaWx9Lgor
CitAaXRlbSA6ZGVjb3ItaW50YW5naWJsZQorSWYgbm9uLUBjb2Rle25pbH0sIGVuYWJsZXMgQGNv
ZGV7Y3Vyc29yLWludGFuZ2libGUtbW9kZX0gdG8gcHJldmVudAorcG9pbnQgZnJvbSBlbnRlcmlu
ZyB0aGUgYW5jaWxsYXJ5IGRlY29yYXRpdmUgY2hhcmFjdGVycyBhZGRlZCBhcworcGFkZGluZywg
c3BhY2luZywgb3IgdGhlIGRpdmlkZXIuICBUaGUgZGVmYXVsdCBpcyBAY29kZXtuaWx9LgorCitA
aXRlbSA6dGV4dC1zY2FsZS1yZWRyYXcKK0lmIEBjb2Rle3R9LCB0aGUgZGVmYXVsdCwgdGhlIHZ0
YWJsZSBidWZmZXIgcmVhY3RzIHRvIHRleHQtc2NhbGUgY2hhbmdlcwordmlhIEBjb2Rle3RleHQt
c2NhbGUtbW9kZX0sIGlmIGVuYWJsZWQuICBCaW5kIHRoaXMgdG8gbm9uLUBjb2Rle25pbH0sIGlm
Cit5b3Ugd2FudCB0byBpbmhpYml0IHJlZHJhd2luZywgYXMgbWlnaHQgYmUgdXNlZnVsIGZvciB2
ZXJ5IGxhcmdlCit2dGFibGVzLiAgSW4gdGhhdCBjYXNlLCBmaXhlZC1zaXplIGZvbnRzIGFyZSBy
ZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhhdAorYWxpZ25tZW50IGlzIHByZXNlcnZlZC4gIE5vdGU6
IEBjb2Rle3RleHQtc2NhbGUtbW9kZX0gaXMgYnVmZmVyLXdpZGUuCitUaGUgdGhlIGZpcnN0IHZ0
YWJsZSwgd2l0aCB0aGlzIG9wdGlvbiBzcGVjaWZpZWQsIGluc2VydGVkIGludG8gYSBidWZmZXIK
K2lzIHRoZSB0YWJsZSB0aGF0IGRyaXZlcyByZWRyYXdzIGFjY29yZGluZyB0byBpdHMKK0Bjb2Rl
e3Jlc2l6ZS1kZWJvdW5jZS1pbnRlcnZhbH0uCisKK0BpdGVtIDp0ZXh0LXNjYWxlLWhlYWRlci1s
aW5lCitJZiBub24tQGNvZGV7bmlsfSwgd2hlbiBAY29kZXt0ZXh0LXNjYWxlLW1vZGV9IGlzIGVu
YWJsZWQgaW4gdGhlIHZ0YWJsZQorYnVmZmVyLCBhbHNvIHNjYWxlIHRoZSBAY29kZXtoZWFkZXIt
bGluZX0gZmFjZSBhbG9uZyB3aXRoIHRoZSBidWZmZXIKK2JvZHkgZmFjZS4gIFRoaXMga2VlcHMg
dGhlIGhlYWRlciBsaW5lIGFsaWduZWQgd2l0aCB0aGUgYm9keSBhcyB0aGUKK2J1ZmZlcidzIHRl
eHQgc2NhbGUgY2hhbmdlcy4gIFRoZSBkZWZhdWx0IGlzIEBjb2Rle25pbH0uICBJZiB0aGUKK0Bj
b2RlezpoZWFkZXItZmFjZX0gZG9lcyBub3QgaW5jbHVkZSB0aGUgZmFjZSBAY29kZXtoZWFkZXIt
bGluZX0sIHRoaXMKK2hhcyBubyBlZmZlY3QuCisKK0BpdGVtIDpyZXNpemUtZGVib3VuY2UtaW50
ZXJ2YWwKK3Z0YWJsZSBjb2FsZXNjZXMgcmVwZWF0ZWQgdGFibGUgcmVzaXplIGV2ZW50cyB0aGF0
IG9jY3VyIHdpdGhpbiB0aGlzCitpbnRlcnZhbCBzcGVjaWZpZWQgaW4gdW5pdHMgb2YgZGVjaW1h
bCBzZWNvbmRzLCBhbmQgd2hpY2ggZGVmYXVsdHMgdG8KKzAuMTUuICBUaGVzZSBldmVudHMgb2Nj
dXIsIGZvciBleGFtcGxlLCB3aGVuIGRyYWdnaW5nIGEgZnJhbWUgZWRnZSB0bworcmVzaXplIGl0
LiAgSWYgbXVsdGlwbGUgdnRhYmxlcyBhcmUgaW5zZXJ0ZWQgaW50byBhIGJ1ZmZlciwgdGhleSB3
aWxsCithbGwgYmUgcmVkcmF3bi4gIEluY3JlYXNlIHRoaXMgdmFsdWUgYXMgbmVlZGVkIHRvIGlt
cHJvdmUgcGVyZm9ybWFuY2UuCitOb3RlOiBSZXNpemluZyB2dGFibGVzIGlzIGEgaXMgYnVmZmVy
LXdpZGUgb3BlcmF0aW9uLiAgVGhlIHRoZSBmaXJzdAordnRhYmxlLCB3aXRoIHRoaXMgb3B0aW9u
IHNwZWNpZmllZCwgaW5zZXJ0ZWQgaW50byBhIGJ1ZmZlciBpcyB0aGUgdGFibGUKK3RoYXQgZHJp
dmVzIHJlZHJhd3MuCisKIEBpdGVtIDpzb3J0LWJ5CiBUaGlzIHNob3VsZCBiZSBhIGxpc3Qgb2Yg
dHVwbGVzLCBhbmQgc3BlY2lmaWVzIGhvdyB0aGUgdGFibGUgaXMgdG8gYmUKIHNvcnRlZC4gIEVh
Y2ggdHVwbGUgc2hvdWxkIGNvbnNpc3Qgb2YgYW4gaW50ZWdlciAodGhlIGNvbHVtbiBpbmRleCkK
QEAgLTQ1OSwyOSArNjgwLDk0IEBAIE1ha2luZyBBIFRhYmxlCiBUaGUgdGFibGUgaXMgZmlyc3Qg
c29ydGVkIGJ5IHRoZSBmaXJzdCBlbGVtZW50IGluIHRoaXMgbGlzdCwgYW5kIHRoZW4KIHRoZSBu
ZXh0LCB1bnRpbCB0aGUgZW5kIGlzIHJlYWNoZWQuCgorQGl0ZW0gOnNvcnQtaW5kaWNhdG9yCitU
aGlzIGlzIGEgbGlzdCBvZiB0d28gY29ucyBjZWxscyB0aGF0IHNwZWNpZnkgdGhlIHNvcnQgYXNj
ZW5kaW5nIGFuZAorZGVzY2VuZGluZyBjaGFyYWN0ZXJzIHRoYXQgYXJlIHNob3duIG9uIHRoZSB0
YWJsZSBoZWFkZXIgdG8gaW5kaWNhdGUgYQorc29ydGVkIGNvbHVtbi4gIFRoZSBmaXJzdCBjaGFy
YWN0ZXIgaXMgdGhlIGZhbmNpZXIgYGBncmFwaGljYWwnJworY2hhcmFjdGVyLCBhbmQgdGhlIHNl
Y29uZCBhIHRleHQtb25seSBjaGFyYWN0ZXIuICBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyCitjYW5u
b3QgYmUgZGlzcGxheWVkIG9uIHRoZSBzZWxlY3RlZCBmcmFtZSwgdGhlIHRhYmxlIHdpbGwgc2hv
dyB0aGUKK3RleHQtb25seSBjaGFyYWN0ZXIuICBUaGUgZGVmYXVsdCBpcworQGNvZGV7dnRhYmxl
LXNvcnQtaW5kaWNhdG9yLWRlZmF1bHR9LiAgRm9yIGV4YW1wbGU6CisKK0BsaXNwCisnKCg/4pa8
ID92KSAoP+KWsiA/XikpIDsgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKycoKD/irIcgP3YpICg/4qyG
ID9eKSkgOyBBbHRlcm5hdGl2ZSBhcnJvd3MuCitAZW5kIGxpc3AKKworQGl0ZW0gOnNvcnQtaW5k
aWNhdG9yLWZhY2UtYXNjZW5kCitAaXRlbXggOnNvcnQtaW5kaWNhdG9yLWZhY2UtZGVzY2VuZAor
VGhlc2UgZmFjZXMgYXJlIGFkZGVkIHRvIHRoZSBpbmRpY2F0b3JzIGZvciBhc2NlbmRpbmcgb3Ig
ZGVzY2VuZGluZworc29ydGVkIGNvbHVtbnMgb24gdGhlIHRhYmxlIGhlYWRlci4gIFlvdSBjYW4s
IGZvciBleGFtcGxlLCBtYWtlIHRoZQorYXNjZW5kaW5nIGluZGljYXRvciBncmVlbiBhbmQgdGhl
IGRlc2NlbmRpbmcgaW5kaWNhdG9yIHJlZCBieSBzcGVjaWZ5aW5nCit0aGVzZSBmYWNlcy4gIFRo
ZXNlIGRlZmF1bHQgdG8gQGNvZGV7dnRhYmxlLXNvcnQtaW5kaWNhdG9yLWFzY2VuZH0KK0Bjb2Rl
e3Z0YWJsZS1zb3J0LWluZGljYXRvci1kZXNjZW5kfSwgYW5kIGJvdGggaW5oZXJpdCBmcm9tCitA
Y29kZXt2dGFibGUtaGVhZGVyfS4gIElmIHlvdSB1c2UgYSBjdXN0b20gQGNvZGV7OmhlYWRlci1m
YWNlfSwgdGhlc2UKK2ZhY2VzIHNob3VsZCBpbmhlcml0IHRoYXQgb3Igb3RoZXJ3aXNlIHVzZSB0
aGUgc2FtZSBmb250IHRvIGVuc3VyZQorYWxpZ25tZW50LgorCiBAaXRlbSA6ZWxsaXBzaXMKLUJ5
IGRlZmF1bHQsIHdoZW4gc2hvcnRlbmluZyBkaXNwbGF5ZWQgdmFsdWVzLCBhbiBlbGxpcHNpcyB3
aWxsIGJlCi1zaG93bi4gIElmIHRoaXMgaXMgQGNvZGV7bmlsfSwgbm8gZWxsaXBzaXMgaXMgc2hv
d24uICAoVGhlIHRleHQgdG8gdXNlCi1hcyB0aGUgZWxsaXBzaXMgaXMgZGV0ZXJtaW5lZCBieSB0
aGUgQGNvZGV7dHJ1bmNhdGUtc3RyaW5nLWVsbGlwc2lzfQotZnVuY3Rpb24uKQorQnkgZGVmYXVs
dCwgd2hlbiB0cnVuY2F0aW5nIHRvby13aWRlIGRpc3BsYXllZCB2YWx1ZXMsIGFuIGVsbGlwc2lz
IHdpbGwKK2FwcGVuZGVkIHRvIHRoZSBzaG9ydGVuZWQgdmFsdWUuICBJZiB0aGlzIGlzIEBjb2Rl
e25pbH0sIG5vIGVsbGlwc2lzIGlzCitzaG93bi4gIElmIG5vbi1AY29kZXtuaWx9LCB1c2UgdGhl
IHNwZWNpZmllZCBzdHJpbmcuICBUaGUgZGVmYXVsdAordmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0
aGUgQGNvZGV7dHJ1bmNhdGUtc3RyaW5nLWVsbGlwc2lzfSBmdW5jdGlvbi4KKworQGl0ZW0gOnJv
dy10ZXh0LXByb3BlcnRpZXMKK0EgbGlzdCBvZiB0ZXh0IHByb3BlcnRpZXMgdG8gYXNzaWduIHRv
IGVhY2ggcm93IHdoZW4gcmVuZGVyaW5nIHRoZQordGFibGUuICBUaGlzIGNhbiBiZSB1c2VkLCBm
b3IgZXhhbXBsZSwgdG8gYWRkIEBjb2Rle21vdXNlLWZhY2V9IG9yCitAY29kZXtjdXJzb3ItZmFj
ZX0gdG8gZWFjaCByb3cuCisKK0BpdGVtIDpwdWxzZQorVGhpcyBpcyBhIGxpc3Qgb2YgdnRhYmxl
IG9iamVjdCB1cGRhdGUgYWN0aW9ucyB3aGljaCBjYW4gaW5jbHVkZSB0aGUKK3N5bWJvbHMgQGNv
ZGV7J2luc2VydH0gQGNvZGV7J3VwZGF0ZX0gQGNvZGV7J3JlbW92ZX0uICBFYWNoIGFjdGlvbgor
bW9tZW50YXJpbHkgYHB1bHNlc2AgdGhlIGFmZmVjdGVkIHNjcmVlbiBsaW5lLiAgVGhpcyBkZWZh
dWx0cyB0bworQGNvZGV7bmlsfSwgYW5kIHdpbGwgbm90IHB1bHNlLgorCitAaXRlbSA6cHVsc2Ut
ZnVuY3Rpb24KK1RoZSBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWQgdG8gcHVsc2UgYSBsaW5lIHdo
ZW4gY29uc3VsdGluZworQGNvZGV7OnB1bHNlfS4gIEl0IGRlZmF1bHRzIHRvCitAY29kZXtwdWxz
ZS1tb21lbnRhcnktaGlnaGxpZ2h0LW9uZS1saW5lfS4KKworQGZpbmRleCB2dGFibGUtZXh0cmEt
ZGF0YQorQGl0ZW0gOmV4dHJhLWRhdGEKK1VzZSB0aGlzIHRvIGF0dGFjaCBhbnkgbGlzcCBvYmpl
Y3QsIHNpbXBsZSBvciBjb21wbGV4LCB0byBhIHRhYmxlCitkZWZpbml0aW9uLiAgWW91IGNhbiBj
b25zdWx0IHRoaXMgYnkgY2FsbGluZyBhZnRlciBjYWxsaW5nCitAY29kZXt2dGFibGUtZXh0cmEt
ZGF0YX0uCgogQGZpbmRleCB2dGFibGUtaW5zZXJ0CiBAaXRlbSA6aW5zZXJ0CiBCeSBkZWZhdWx0
LCBAY29kZXttYWtlLXZ0YWJsZX0gd2lsbCBpbnNlcnQgdGhlIHRhYmxlIGF0IHBvaW50LiAgSWYg
dGhpcwotaXMgQGNvZGV7bmlsfSwgbm90aGluZyBpcyBpbnNlcnRlZCwgYnV0IHRoZSB2dGFibGUg
b2JqZWN0IGlzIHJldHVybmVkLAotYW5kIHlvdSBjYW4gaW5zZXJ0IGl0IGxhdGVyIHdpdGggdGhl
IEBjb2Rle3Z0YWJsZS1pbnNlcnR9IGZ1bmN0aW9uLgoraXMgQGNvZGV7bmlsfSwgbm90aGluZyBp
cyBpbnNlcnRlZCwgYW5kIHRoZSB2dGFibGUgb2JqZWN0IGlzIHJldHVybmVkLAord2hpY2ggeW91
IGNhbiBpbnNlcnQgaW50byBhIGJ1ZmZlciBsYXRlciB3aXRoIHRoZSBAY29kZXt2dGFibGUtaW5z
ZXJ0fQorZnVuY3Rpb24uCiBAZW5kIHRhYmxlCgogQGNvZGV7bWFrZS10YWJsZX0gcmV0dXJucyBh
IEBjb2Rle3Z0YWJsZX0gb2JqZWN0LiAgWW91IGNhbiBhY2Nlc3MgdGhlCiBzbG90cyBpbiB0aGF0
IG9iamVjdCBieSB1c2luZyBhY2Nlc3NvciBmdW5jdGlvbnMgdGhhdCBoYXZlIG5hbWVzIGJhc2Vk
CiBvbiB0aGUga2V5d29yZHMgZGVzY3JpYmVkIGFib3ZlLiAgRm9yIGluc3RhbmNlLCB0byBhY2Nl
c3MgdGhlIGZhY2UsCi11c2UgQGNvZGV7dnRhYmxlLWZhY2V9LgordXNlIEBjb2Rle3Z0YWJsZS1m
YWNlfSwgcGFzc2luZyB0aGUgdGFibGUgb2JqZWN0IGFzIGFuIGFyZ3VtZW50LgorCitXaGVuIHBy
ZXBhcmluZyB5b3VyIHZ0YWJsZSBidWZmZXIsIHlvdSBtaWdodCB3YW50IHRvIGNvbnNpZGVyIHRo
ZXNlOgorCitAbGlzcAorOzsgUHJvdGVjdCB0aGUgdGFibGUgZnJvbSBpbmFkdmVydGVudCBvdmVy
d3JpdGluZy4KKyhyZWFkLW9ubHktbW9kZSkKKzs7IENvbnNlcnZlIG1lbW9yeSByZXNvdXJjZXMu
CisoYnVmZmVyLWRpc2FibGUtdW5kbykKKzs7IERvIG5vdCB3cmFwIGxvbmcgbGluZXMuCisoc2V0
cSB0cnVuY2F0ZS1saW5lcyB0KQorOzsgYGN1cnNvci1mYWNlJyBzdXBwb3J0IHlvdSBjYW4gYWRk
IHVzaW5nIDpyb3ctcHJvcGVydGllcy4KKyhjdXJzb3ItZmFjZS1oaWdobGlnaHQtbW9kZSkKKzs7
IEZvciBhbiBhZGRlZCB2aXN1YWwgaGludCBvbiB0aGUgY3VycmVudCBsaW5lLgorKGhsLWxpbmUt
bW9kZSkKKzs7IERpc2FibGUgaG9yaXpvbnRhbCBzY3JvbGxpbmcgd2hlbiB1c2luZyA6dXNlLWhl
YWRlci1saW5lIHQuCisoYXV0by1oc2Nyb2xsLW1vZGUgLTEpCitAZW5kIGxpc3AKCiBAbm9kZSBD
b21tYW5kcwogQGNoYXB0ZXIgQ29tbWFuZHMKIEBjaW5kZXggdnRhYmxlIGNvbW1hbmRzCgotV2hl
biBwb2ludCBpcyBwbGFjZWQgb24gYSB2dGFibGUsIHRoZSBmb2xsb3dpbmcga2V5cyBhcmUgYm91
bmQ6CitXaGVuIHBvaW50IGlzIHdpdGhpbiBhIHZ0YWJsZSwgdGhlIGZvbGxvd2luZyBrZXlzIGFy
ZSBib3VuZDoKCiBAdGFibGUgQGtiZAogQGZpbmRleCB2dGFibGUtc29ydC1ieS1jdXJyZW50LWNv
bHVtbgpAQCAtNDkwLDggKzc3NiwxNiBAQCBDb21tYW5kcwogKEBjb2Rle3Z0YWJsZS1zb3J0LWJ5
LWN1cnJlbnQtY29sdW1ufSkuICBOb3RlIHRoYXQgdGhlIHRhYmxlIGlzIHNvcnRlZAogYWNjb3Jk
aW5nIHRvIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRoZSBnZXR0ZXIgZnVuY3Rpb24gKEBweHJlZntN
YWtpbmcgQQogVGFibGV9KSwgbm90IGJ5IGhvdyBpdCdzIGRpc3BsYXllZCBpbiB0aGUgYnVmZmVy
LiAgQ29sdW1ucyB0aGF0IGhhdmUKLW9ubHkgbnVtZXJpY2FsIGRhdGEgYXJlIHNvcnRlZCBhcyBu
dW1iZXJzLCB0aGUgcmVzdCBhcmUgc29ydGVkIGFzCi1zdHJpbmdzLgorb25seSBudW1lcmljYWwg
ZGF0YSwgb3IgYXJlIGlkZW50aWZpZWQgYXMgbnVtZXJpYywgYXJlIHNvcnRlZCBhcworbnVtYmVy
cywgb3RoZXIgY29sdW1ucyBhcmUgc29ydGVkIGFzIHN0cmluZ3MsIG9yIHNvcnRlZCB1c2luZwor
aXRzIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLgorCitAZmluZGV4IHZ0YWJsZS11bnNvcnQK
K0BpdGVtIFUKK1Vuc29ydCB0aGUgdGFibGUgKEBjb2Rle3Z0YWJsZS11bnNvcnR9KS4gIENhbGxp
bmcgdGhpcyBmdW5jdGlvbiB0b2dnbGVzCitiZXR3ZWVuIHVuc29ydGluZyB0aGUgdGFibGUsIGFu
ZCByZXN0b3JpbmcgdGhlIHNvcnQgb3JkZXIgYXQgdGFibGUKK2NyZWF0aW9uIHdoaWNoIHdpbGwg
YmUgc3BlY2lmaWVkIGJ5IHRoZSB0YWJsZSdzIEBjb2Rlezpzb3J0LWJ5fSwgb3IKK2ltcGxpZWQg
YnkgdGhlIG9yZGVyIG9mIHRhYmxlJ3Mgb2JqZWN0cyBvciBAY29kZXs6b2JqZWN0cy1mdW5jdGlv
bn0uCgogQGZpbmRleCB2dGFibGUtbmFycm93LWN1cnJlbnQtY29sdW1uCiBAaXRlbSBAewpAQCAt
NTE1LDIzICs4MDksNjcgQEAgQ29tbWFuZHMKIEBpdGVtIGcKIFJlZ2VuZXJhdGUgdGhlIHRhYmxl
IChAY29kZXt2dGFibGUtcmV2ZXJ0LWNvbW1hbmR9KS4gIFRoaXMgY29tbWFuZAogbW9zdGx5IG1h
a2VzIHNlbnNlIGlmIHRoZSB0YWJsZSBoYXMgYSBAY29kZXs6b2JqZWN0cy1mdW5jdGlvbn0gdGhh
dAotY2FuIGZldGNoIG5ldyBkYXRhLgorY2FuIGZldGNoIG5ldyBkYXRhLiAgUmV2ZXJ0aW5nIHVu
bWFya3MgYWxsIG9iamVjdHMuCitAZW5kIHRhYmxlCisKK1doZW4gdGhlIG5hdmlnYXRpb24ga2V5
bWFwIGlzIGVuYWJsZWQsIGFuZCBwb2ludCBpcyB3aXRoaW4gYSB2dGFibGUsIHRoZQorZm9sbG93
aW5nIGFkZGl0aW9uYWwga2V5cyBhcmUgYm91bmQ6CisKK0B0YWJsZSBAa2JkCitAZmluZGV4IHZ0
YWJsZS1uZXh0LWxpbmUKK0BpdGVtIG4KK0BpdGVtIDxkb3duPgorTW92ZSBwb2ludCB0byB0aGUg
bmV4dCBsaW5lLCBrZWVwaW5nIHRoZSBjdXJyZW50IGNvbHVtbiAoQGNvZGV7dnRhYmxlLW5leHQt
bGluZX0pLgorCitAZmluZGV4IHZ0YWJsZS1wcmV2aW91cy1saW5lCitAaXRlbSBwCitAaXRlbSA8
dXA+CitNb3ZlIHBvaW50IHRvIHRoZSBwcmV2aW91cyBsaW5lLCBrZWVwaW5nIHRoZSBjdXJyZW50
IGNvbHVtbiAoQGNvZGV7dnRhYmxlLXByZXZpb3VzLWxpbmV9KS4KKworQGZpbmRleCB2dGFibGUt
Z290by1iZWdpbm5pbmctb2YtdGFibGUKK0BpdGVtIDxob21lPgorTW92ZSBwb2ludCB0byB0aGUg
Zmlyc3QgZGF0YSBsaW5lIG9mIHRoZSB0YWJsZQorKEBjb2Rle3Z0YWJsZS1nb3RvLWJlZ2lubmlu
Zy1vZi10YWJsZX0pLgorCitAZmluZGV4IHZ0YWJsZS1nb3RvLWVuZC1vZi10YWJsZQorQGl0ZW0g
PGVuZD4KK01vdmUgcG9pbnQgdG8gdGhlIGxhc3QgZGF0YSBsaW5lIG9mIHRoZSB0YWJsZQorKEBj
b2Rle3Z0YWJsZS1nb3RvLWVuZC1vZi10YWJsZX0pLgorCitAZmluZGV4IHZ0YWJsZS1nb3RvLW5l
eHQtdGFibGUKK0BpdGVtIDxmb3J3YXJkLXBhcmFncmFwaD4KK01vdmUgcG9pbnQgdG8gdGhlIG5l
eHQgdnRhYmxlIGluIGEgbXVsdGktdGFibGUgYnVmZmVyCisoQGNvZGV7dnRhYmxlLWdvdG8tbmV4
dC10YWJsZX0pLgorCitAZmluZGV4IHZ0YWJsZS1nb3RvLXByZXZpb3VzLXRhYmxlCitAaXRlbSA8
YmFja3dhcmQtcGFyYWdyYXBoPgorTW92ZSBwb2ludCB0byB0aGUgcHJldmlvdXMgdnRhYmxlIGlu
IGEgbXVsdGktdGFibGUgYnVmZmVyCisoQGNvZGV7dnRhYmxlLWdvdG8tcHJldmlvdXMtdGFibGV9
KS4KKworQGZpbmRleCB2dGFibGUtY2xvc2UKK0BpdGVtIHEKK0Nsb3NlIHRoZSB0YWJsZSBieSBp
bnZva2luZyB0aGUgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IEBjb2RlezpjbG9zZS1hY3Rpb259Ciso
QGNvZGV7dnRhYmxlLWNsb3NlfSkuCiBAZW5kIHRhYmxlCgogQG5vZGUgSW50ZXJmYWNlIEZ1bmN0
aW9ucwogQGNoYXB0ZXIgSW50ZXJmYWNlIEZ1bmN0aW9ucwoKIElmIHlvdSBuZWVkIHRvIHdyaXRl
IGEgbW9kZSBiYXNlZCBvbiB2dGFibGUsIHlvdSB3aWxsIGhhdmUgdG8gaW50ZXJhY3QKLXdpdGgg
dGhlIHRhYmxlIGluCi12YXJpb3VzIHdheXMtLS1mb3IgaW5zdGFuY2UsIHlvdSdsbCBuZWVkIHRv
IHdyaXRlIGNvbW1hbmRzIHRoYXQKLXVwZGF0ZXMgYW4gb2JqZWN0Ci1hbmQgdGhlbiBkaXNwbGF5
cyB0aGUgcmVzdWx0LiAgVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyBmdW5jdGlvbnMgZm9yCi1zdWNo
IGludGVyYWN0aW9uLgord2l0aCB0aGUgdGFibGUgaW4gdmFyaW91cyB3YXlzLS0tZm9yIGluc3Rh
bmNlLCB5b3UnbGwgbmVlZCB0byB3cml0ZQorY29tbWFuZHMgdGhhdCB1cGRhdGVzIGFuIG9iamVj
dCBhbmQgdGhlbiBkaXNwbGF5cyB0aGUgcmVzdWx0LiAgVGhpcworY2hhcHRlciBkZXNjcmliZXMg
ZnVuY3Rpb25zIGZvciBzdWNoIGludGVyYWN0aW9uLgoKIEBkZWZ1biB2dGFibGUtY3VycmVudC10
YWJsZQogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0YWJsZSB1bmRlciBwb2ludC4KIEBlbmQg
ZGVmdW4KCitAZGVmdW4gdnRhYmxlLWJ1ZmZlciAmb3B0aW9uYWwgdGFibGUKK1JldHVybiB0aGUg
YnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhYmxlLCBvciBpZiBuaWwsIHRoZSBjdXJyZW50
Cit0YWJsZSB1bmRlciBwb2ludC4gIFJldHVybiBuaWwgaWYgdGhlIHRhYmxlIGhhcyBub3QgeWV0
IGJlZW4gaW5zZXJ0ZWQKK2ludG8gYSBidWZmZXIuCitAZW5kIGRlZnVuCisKIEBkZWZ1biB2dGFi
bGUtY3VycmVudC1vYmplY3QKIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2JqZWN0IG9uIHRo
ZSBjdXJyZW50IGxpbmUuICAoTm90ZSB0aGF0IHRoaXMKIGlzIHRoZSBvcmlnaW5hbCBvYmplY3Qs
IG5vdCB0aGUgY2hhcmFjdGVycyBkaXNwbGF5ZWQgaW4gdGhlCkBAIC01NDUsNyArODgzLDEwIEBA
IEludGVyZmFjZSBGdW5jdGlvbnMKIEBkZWZ1biB2dGFibGUtZ290by10YWJsZSB0YWJsZQogTW92
ZSBwb2ludCB0byB0aGUgc3RhcnQgb2YgQHZhcnt0YWJsZX0gYW5kIHJldHVybiB0aGUgcG9zaXRp
b24uICBJZgogQHZhcnt0YWJsZX0gY2FuJ3QgYmUgZm91bmQgaW4gdGhlIGN1cnJlbnQgYnVmZmVy
LCBkb24ndCBtb3ZlIHBvaW50IGFuZAotcmV0dXJuIEBjb2Rle25pbH0uCityZXR1cm4gQGNvZGV7
bmlsfS4gIElmIHRoZSB0YWJsZSdzIGhlYWRlciBpcyBpbiB0aGUgYnVmZmVyLCBwb2ludCB3aWxs
CitiZSBtb3ZlZCB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBoZWFkZXIuICBVc2UKK0Bj
b2Rle3Z0YWJsZS1nb3RvLWJlZ2lubmluZy1vZi10YWJsZX0gaWYgeW91IHdhbnQgcG9pbnQgdG8g
YmUgb24gdGhlCitmaXJzdCBkYXRhIGxpbmUuCiBAZW5kIGRlZnVuCgogQGRlZnVuIHZ0YWJsZS1n
b3RvLW9iamVjdCBvYmplY3QKQEAgLTU1NCw2MSArODk1LDE5MSBAQCBJbnRlcmZhY2UgRnVuY3Rp
b25zCiBkb24ndCBtb3ZlIHBvaW50IGFuZCByZXR1cm4gQGNvZGV7bmlsfS4KIEBlbmQgZGVmdW4K
CitAZGVmdW4gdnRhYmxlLW9iamVjdC1saW5lLW51bWJlciBvYmplY3QKK1JldHVybiB0aGUgYWJz
b2x1dGUgYnVmZmVyIGxpbmUgbnVtYmVyIG9mIEB2YXJ7b2JqZWN0fSwgb3IgQGNvZGV7bmlsfSBp
Zgorbm90IGZvdW5kLgorQGVuZCBkZWZ1bgorCitAZGVmdW4gdnRhYmxlLW9iamVjdC1saW5lLWlu
ZGV4IG9iamVjdAorUmV0dXJuIHRoZSByZWxhdGl2ZSAwLWJhc2VkIGluZGV4IG9mIEB2YXJ7b2Jq
ZWN0fSBpbiB0aGUgY3VycmVudCB0YWJsZSwKK29yIEBjb2Rle25pbH0gaWYgbm90IGZvdW5kLgor
QGVuZCBkZWZ1bgorCiBAZGVmdW4gdnRhYmxlLWdvdG8tY29sdW1uIGluZGV4CiBNb3ZlIHBvaW50
IHRvIHRoZSBzdGFydCBvZiB0aGUgQHZhcntpbmRleH10aCBjb2x1bW4uICAoVGhlIGZpcnN0CiBj
b2x1bW4gaXMgbnVtYmVyZWQgemVyby4pCiBAZW5kIGRlZnVuCgogQGRlZnVuIHZ0YWJsZS1iZWdp
bm5pbmctb2YtdGFibGUKLU1vdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCB0YWJs
ZS4KK01vdmUgcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCB0YWJsZS4gIElm
IHRoZSBoZWFkZXIgaXMgaW4KK3RoZSBidWZmZXIgYW5kIG5vdCBvbiB0aGUgQGNvZGV7aGVhZGVy
LWxpbmV9LCBwb2ludCB3aWxsIGJlIGJlZm9yZSB0aGUKK2hlYWRlci4KIEBlbmQgZGVmdW4KCi1A
ZGVmdW4gdnRhYmxlLWVuZC1vZi10YWJsZQotTW92ZSB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50
IHRhYmxlLgorQGRlZnVuIHZ0YWJsZS1nb3RvLWJlZ2lubmluZy1vZi10YWJsZQorTW92ZSBwb2lu
dCB0byB0aGUgZmlyc3QgZGF0YSByb3cgb2YgdGhlIGN1cnJlbnQgdGFibGUuCiBAZW5kIGRlZnVu
CgotQGRlZnVuIHZ0YWJsZS1yZW1vdmUtb2JqZWN0IHRhYmxlIG9iamVjdAotUmVtb3ZlIEB2YXJ7
b2JqZWN0fSBmcm9tIEB2YXJ7dGFibGV9LiAgVGhpcyBhbHNvIHVwZGF0ZXMgdGhlIGRpc3BsYXll
ZAorQGRlZnVuIHZ0YWJsZS1iZWdpbm5pbmctb2YtdGFibGUtbGluZS1udW1iZXIKK1JldHVybiB0
aGUgYWJzb2x1dGUgYnVmZmVyIGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgY3VycmVu
dAogdGFibGUuCiBAZW5kIGRlZnVuCgotQGRlZnVuIHZ0YWJsZS1pbnNlcnQtb2JqZWN0IHRhYmxl
IG9iamVjdCAmb3B0aW9uYWwgbG9jYXRpb24gYmVmb3JlCi1JbnNlcnQgQHZhcntvYmplY3R9IGlu
dG8gQHZhcnt0YWJsZX0uICBAdmFye2xvY2F0aW9ufSBzaG91bGQgYmUgYW4KLW9iamVjdCBpbiB0
aGUgdGFibGUsIHRoZSBuZXcgb2JqZWN0IGlzIGluc2VydGVkIGFmdGVyIHRoaXMgb2JqZWN0LCBv
cgotYmVmb3JlIGl0IGlmIEB2YXJ7YmVmb3JlfSBpcyBub24tQGNvZGV7bmlsfS4gIElmIEB2YXJ7
bG9jYXRpb259IGlzCi1AY29kZXtuaWx9LCBAdmFye29iamVjdH0gaXMgYXBwZW5kZWQgdG8gQHZh
cnt0YWJsZX0sIG9yIHByZXBlbmRlZCBpZgotQHZhcntiZWZvcmV9IGlzIG5vbi1AY29kZXtuaWx9
LgorQGRlZnVuIHZ0YWJsZS1lbmQtb2YtdGFibGUKK01vdmUgcG9pbnQgdG8gdGhlIGVuZCBvZiB0
aGUgY3VycmVudCB0YWJsZS4gIFBvaW50IHdpbGwgYmUgYmV5b25kIHRoZQorbGFzdCBjaGFyYWN0
ZXIgb2YgdGhlIHRhYmxlLgorQGVuZCBkZWZ1bgorCitAZGVmdW4gdnRhYmxlLWdvdG8tZW5kLW9m
LXRhYmxlCitNb3ZlIHBvaW50IHRvIHRoZSBsYXN0IGRhdGEgcm93IG9mIHRoZSB0YWJsZSB1bmRl
ciBwb2ludC4KK0BlbmQgZGVmdW4KKworQGRlZnVuIHZ0YWJsZS1lbmQtb2YtdGFibGUtbGluZS1u
dW1iZXIKK1JldHVybiB0aGUgYWJzb2x1dGUgYnVmZmVyIGxpbmUgbnVtYmVyIG9mIHRoZSBlbmQg
b2YgdGhlIGN1cnJlbnQgdGFibGUuCitAZW5kIGRlZnVuCisKK0BkZWZ1biB2dGFibGUtcmVtb3Zl
LW9iamVjdCB0YWJsZSBvYmplY3QgJm9wdGlvbmFsIGluaGliaXQtcm93LXJlZGlzcGxheQorUmVt
b3ZlIEB2YXJ7b2JqZWN0fSBmcm9tIEB2YXJ7dGFibGV9LiAgVGhlIHRhYmxlIGRvZXMgbm90IGhh
dmUgdG8gYmUgdGhlCitjdXJyZW50IHRhYmxlLiAgVGhpcyBhbHNvIHVwZGF0ZXMgdGhlIGRpc3Bs
YXllZCB0YWJsZS4KKworUm93cyBiZWxvdyB0aGUgcmVtb3ZlZCBvYmplY3QncyBsaW5lIHdpbGwg
YmUgcmVkaXNwbGF5ZWQgdG8gdXBkYXRlIHRoZWlyCityb3cgY29sb3JzLCBpZiBuZWVkZWQuICBJ
ZiBAdmFye2luaGliaXQtcm93LXJlZGlzcGxheX0gaXMgbm9uLW5pbCwgdGhpcworcmVkaXNwbGF5
IGlzIG5vdCBwZXJmb3JtZWQuCitAZW5kIGRlZnVuCisKK0BkZWZ1biB2dGFibGUtaW5zZXJ0LW9i
amVjdCB0YWJsZSBvYmplY3QgJm9wdGlvbmFsIGxvY2F0aW9uIGJlZm9yZSBzZWxlY3QtYWZ0ZXIg
c29ydC1hZnRlciBpbmhpYml0LXJvdy1yZWRpc3BsYXkKK0luc2VydCBAdmFye29iamVjdH0gaW50
byBAdmFye3RhYmxlfS4gIFRoZSB0YWJsZSBkb2VzIG5vdCBoYXZlIHRvIGJlIHRoZQorY3VycmVu
dCB0YWJsZS4gIEB2YXJ7bG9jYXRpb259IHNob3VsZCBiZSBhbiBvYmplY3QgaW4gdGhlIHRhYmxl
LCB0aGUgbmV3CitvYmplY3QgaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhpcyBvYmplY3QsIG9yIGJlZm9y
ZSBpdCBpZiBAdmFye2JlZm9yZX0gaXMKK25vbi1AY29kZXtuaWx9LiAgSWYgQHZhcntsb2NhdGlv
bn0gaXMgQGNvZGV7bmlsfSwgQHZhcntvYmplY3R9IGlzCithcHBlbmRlZCB0byBAdmFye3RhYmxl
fSwgb3IgcHJlcGVuZGVkIGlmIEB2YXJ7YmVmb3JlfSBpcyBub24tQGNvZGV7bmlsfS4KCiBAdmFy
e2xvY2F0aW9ufSBjYW4gYWxzbyBiZSBhbiBpbnRlZ2VyLCBhIHplcm8tYmFzZWQgaW5kZXggaW50
byB0aGUKIHRhYmxlLiAgSW4gdGhpcyBjYXNlLCBAdmFye29iamVjdH0gaXMgaW5zZXJ0ZWQgYXQg
dGhhdCBpbmRleC4gIElmIHRoZQogaW5kZXggaXMgb3V0IG9mIHJhbmdlLCBAdmFye29iamVjdH0g
aXMgcHJlcGVuZGVkIHRvIEB2YXJ7dGFibGV9IGlmIHRoZQogaW5kZXggaXMgdG9vIHNtYWxsLCBv
ciBhcHBlbmRlZCBpZiBpdCBpcyB0b28gbGFyZ2UuICBJbiB0aGlzIGNhc2UsCi1AdmFye2JlZm9y
ZX0gaXMgaWdub3JlZC4KK0B2YXJ7YmVmb3JlfSBpcyBpZ25vcmVkLiAgTm90ZTogSW5zZXJ0aW5n
IGJ5IGxvY2F0aW9uIGlzIHN1cHBvcnRlZCBvbmx5Citmb3IgdW5zb3J0ZWQgdGFibGVzLiAgQSB0
YWJsZSB3aXRoIGFjdGl2ZSBzb3J0IGNyaXRlcmlhIG11c3QgZmlyc3QgYmUKK3Vuc29ydGVkIHZp
YSBAY29kZXt2dGFibGUtdW5zb3J0fS4gIEFsc28gbm90ZTogSWYgeW91ciB0YWJsZSBvYmplY3Rz
IGFyZQorbWVyZWx5IHNjYWxhciBpbnRlZ2VycywgaW5zZXJ0aW5nIGJ5IGludGVnZXIgbG9jYXRp
b24gaXMgbm90IHN1cHBvcnRlZAorYXMgbG9jYXRpb24gdnMuIG9iamVjdCBpZGVudGl0eSBpcyBh
bWJpZ3VvdXMuCgogSWYgQHZhcnt0YWJsZX0gaXMgZW1wdHksIEB2YXJ7bG9jYXRpb259IGFuZCBA
dmFye2JlZm9yZX0gYXJlIGlnbm9yZWQuCgotVGhpcyBhbHNvIHVwZGF0ZXMgdGhlIGRpc3BsYXll
ZCB0YWJsZS4KK0lmIHRoZSB0YWJsZSBpcyB0aGUgY3VycmVudCB0YWJsZSwgYW5kIEB2YXJ7c2Vs
ZWN0LWFmdGVyfSBpcyBub24tbmlsLAordGhlIG5ldyBvYmplY3QncyByb3cgaXMgc2VsZWN0ZWQs
IG90aGVyd2lzZSwgd2hhdGV2ZXIgb2JqZWN0IGlzIHNlbGVjdGVkCityZW1haW5zIHNlbGVjdGVk
LgorCitJZiBAdmFye3NvcnQtYWZ0ZXJ9IGlzIG5vbi1uaWwsIGFuZCB0aGUgdGFibGUgaGFzIHNv
cnRpbmcgY3JpdGVyaWEgaW4KK2VmZmVjdCwgdGhlIHRhYmxlIHdpbGwgYmUgc29ydGVkIGFuZCBy
ZWRpc3BsYXllZCBhZnRlciB0aGUgb2JqZWN0CitpbnNlcnRpb24uCisKK1Jvd3MgYmVsb3cgdGhl
IGluc2VydGVkIG9iamVjdCdzIGxpbmUgd2lsbCBiZSByZWRpc3BsYXllZCB0byB1cGRhdGUKK3Ro
ZWlyIHJvdyBjb2xvcnMsIGlmIG5lZWRlZC4gIElmIEB2YXJ7aW5oaWJpdC1yb3ctcmVkaXNwbGF5
fSBpcyBub24tbmlsLAordGhpcyByZWRpc3BsYXkgaXMgbm90IHBlcmZvcm1lZCwgaW4gd2hpY2gg
Y2FzZSwgQGNvZGV7dnRhYmxlLXJldmVydH0gb3IKK0Bjb2Rle3Z0YWJsZS1yZWRpc3BsYXktcmFu
Z2V9IGNhbiBiZSBjYWxsZWQgdG8gcmVkaXNwbGF5IHRoZSB0YWJsZSBhdAordGhlIGVuZCBvZiB0
aGUgYmF0Y2guCiBAZW5kIGRlZnVuCgotQGRlZnVuIHZ0YWJsZS11cGRhdGUtb2JqZWN0IHRhYmxl
IG9iamVjdCAmb3B0aW9uYWwgb2xkLW9iamVjdAotVXBkYXRlIEB2YXJ7b2JqZWN0fSdzIHJlcHJl
c2VudGF0aW9uIGluIEB2YXJ7dGFibGV9LiAgT3B0aW9uYWwgYXJndW1lbnQKLUB2YXJ7b2xkLW9i
amVjdH0sIGlmIG5vbi1AY29kZXtuaWx9LCBtZWFucyB0byByZXBsYWNlIEB2YXJ7b2xkLW9iamVj
dH0KLXdpdGggQHZhcntvYmplY3R9IGFuZCByZWRpc3BsYXkgdGhlIGFzc29jaWF0ZWQgcm93IGlu
IHRoZSB0YWJsZS4gIEluCi1laXRoZXIgY2FzZSwgaWYgdGhlIGV4aXN0aW5nIG9iamVjdCBpcyBu
b3QgZm91bmQgaW4gdGhlIHRhYmxlIChiZWluZwotY29tcGFyZWQgd2l0aCBAY29kZXtlcXVhbH0p
LCBzaWduYWwgYW4gZXJyb3IuCitAZGVmdW4gdnRhYmxlLXVwZGF0ZS1vYmplY3QgdGFibGUgb2Jq
ZWN0ICZvcHRpb25hbCBvbGQtb2JqZWN0IHNvcnQtYWZ0ZXIKK1VwZGF0ZSBAdmFye29iamVjdH0n
cyByZXByZXNlbnRhdGlvbiBpbiBAdmFye3RhYmxlfS4gIFRoZSB0YWJsZSBkb2VzIG5vdAoraGF2
ZSB0byBiZSB0aGUgY3VycmVudCB0YWJsZS4gIE9wdGlvbmFsIGFyZ3VtZW50IEB2YXJ7b2xkLW9i
amVjdH0sIGlmCitub24tQGNvZGV7bmlsfSwgbWVhbnMgdG8gcmVwbGFjZSBAdmFye29sZC1vYmpl
Y3R9IHdpdGggQHZhcntvYmplY3R9IGFuZAorcmVkaXNwbGF5IHRoZSBhc3NvY2lhdGVkIHJvdyBp
biB0aGUgdGFibGUuICBDb2x1bW5zIHdoaWNoIGFyZSBpbmZlcnJlZAordG8gYmUgbnVtZXJpYyB3
aWxsIGJlIHNjYW5uZWQgdG8gcmVzZXQgdGhlaXIgYWxpZ25tZW50IGFuZCBzb3J0CitmdW5jdGlv
bi4gIElmIEB2YXJ7c29ydC1hZnRlcn0gaXMgbm9uLW5pbCwgYW5kIHRoZSB0YWJsZSBoYXMgc29y
dGluZworY3JpdGVyaWEgaW4gZWZmZWN0LCB0aGUgdGFibGUgd2lsbCBiZSBzb3J0ZWQgYW5kIHJl
ZGlzcGxheWVkIGFmdGVyIHRoZQorb2JqZWN0IHVwZGF0ZS4gIEluIGVpdGhlciBjYXNlLCBpZiB0
aGUgZXhpc3Rpbmcgb2JqZWN0IGlzIG5vdCBmb3VuZCBpbgordGhlIHRhYmxlIChiZWluZyBjb21w
YXJlZCB3aXRoIEBjb2Rle3Z0YWJsZS1vYmplY3QtZXF1YWx9KSwgc2lnbmFsIGFuCitlcnJvci4K
CiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgY2FsbGluZyBAY29kZXt2dGFibGUtcmVtb3Zl
LW9iamVjdH0gYW5kCi10aGVuIEBjb2Rle3Z0YWJsZS1pbnNlcnQtb2JqZWN0fSwgYnV0IGlzIG1v
cmUgZWZmaWNpZW50LgordGhlbiBAY29kZXt2dGFibGUtaW5zZXJ0LW9iamVjdH0sIGFuZCBpcyBt
b3JlIGVmZmljaWVudC4KK0BlbmQgZGVmdW4KKworQGRlZnVuIHZ0YWJsZS1yZXZlcnQgJm9wdGlv
bmFsIHRhYmxlCitSZWdlbmVyYXRlIGFuZCByZWRpc3BsYXkgdGhlIGN1cnJlbnQgdGFibGUsIG9y
IHRoZSB0YWJsZSBpbiBAdmFye3RhYmxlfS4KK0BlbmQgZGVmdW4KKworQGRlZnVuIHZ0YWJsZS1t
YXliZS1yZWRpc3BsYXktcmFuZ2UgdGFibGUgJm9wdGlvbmFsIGZyb20tbGluZSB0by1saW5lCitS
ZWRpc3BsYXkgQHZhcnt0YWJsZX0ncyByYW5nZSBvZiBsaW5lcyBAdmFye2Zyb20tbGluZX0gYW5k
IEB2YXJ7dG8tbGluZX0KK2lmIHJvdy9jb2x1bW4gY29sb3JzIG9yIHJvdy9jb2x1bW4gY29sb3Ig
ZnVuY3Rpb25zIGFyZSBkZWZpbmVkLiAgSWYKK0B2YXJ7ZnJvbS1saW5lfSBpcyBuaWwsIHVzZSB0
aGUgZmlyc3QgbGluZSBvZiB0aGUgdGFibGUuICBJZgorQHZhcnt0by1saW5lfSBpcyBuaWwsIHVz
ZSB0aGUgbGFzdCBsaW5lIG9mIHRoZSB0YWJsZS4KK0BlbmQgZGVmdW4KCi1Ob3RlIGEgbGltaXRh
dGlvbjogaWYgdGhlIHRhYmxlJ3MgYnVmZmVyIGlzIG5vdCBpbiBhIHZpc2libGUgd2luZG93LCBv
cgotaWYgaXRzIHdpbmRvdyBoYXMgY2hhbmdlZCB3aWR0aCBzaW5jZSBpdCB3YXMgdXBkYXRlZCwg
dXBkYXRpbmcgdGhlIHRhYmxlCi1pcyBub3QgcG9zc2libGUsIGFuZCBhbiBlcnJvciBpcyBzaWdu
YWxlZC4KK0BkZWZ1biB2dGFibGUtcmVkaXNwbGF5LXJhbmdlIHRhYmxlICZvcHRpb25hbCBmcm9t
LWxpbmUgdG8tbGluZQorUmVkaXNwbGF5IEB2YXJ7dGFibGV9J3MgcmFuZ2Ugb2YgbGluZXMgQHZh
cntmcm9tLWxpbmV9IGFuZAorQHZhcnt0by1saW5lfS4gIElmIEB2YXJ7ZnJvbS1saW5lfSBpcyBu
aWwsIHVzZSB0aGUgZmlyc3QgbGluZSBvZiB0aGUKK3RhYmxlLiAgSWYgQHZhcnt0by1saW5lfSBp
cyBuaWwsIHVzZSB0aGUgbGFzdCBsaW5lIG9mIHRoZSB0YWJsZS4gIFVubGlrZQorQGNvZGV7dnRh
YmxlLW1heWJlLXJlZGlzcGxheS1yYW5nZX0sIGFsd2F5cyByZWRpc3BsYXkgdGhlIHNwZWNpZmll
ZAorbGluZXMuCiBAZW5kIGRlZnVuCgogQGRlZnVuIHZ0YWJsZS1jb2x1bW4gdGFibGUgaW5kZXgK
IFJldHVybiB0aGUgY29sdW1uIG5hbWUgb2YgdGhlIEB2YXJ7aW5kZXh9dGggY29sdW1uIGluIEB2
YXJ7dGFibGV9LgogQGVuZCBkZWZ1bgoKK0BkZWZ1biB2dGFibGUtbWFyay1vYmplY3Qgb2JqZWN0
ICZvcHRpb25hbCBpbmhpYml0LW5leHQtbGluZQorTWFyayBAdmFye29iamVjdH0gaW4gdGhlIGN1
cnJlbnQgdGFibGUuICBQb2ludCB3aWxsIGJlIG1vdmVkIHRvIHRoZSBuZXh0CitsaW5lLiAgSWYg
QHZhcntpbmhpYml0LW5leHQtbGluZX0gaXMgbm9uLW5pbCwgcG9pbnQgd2lsbCBub3QgYmUKK2Fk
dmFuY2VkLgorQGVuZCBkZWZ1bgorCitAZGVmdW4gdnRhYmxlLXVubWFyay1vYmplY3Qgb2JqZWN0
ICZvcHRpb25hbCBpbmhpYml0LW5leHQtbGluZQorVW5tYXJrIEB2YXJ7b2JqZWN0fSBpbiB0aGUg
Y3VycmVudCB0YWJsZS4gIFBvaW50IHdpbGwgYmUgbW92ZWQgdG8gdGhlCituZXh0IGxpbmUuICBJ
ZiBAdmFye2luaGliaXQtbmV4dC1saW5lfSBpcyBub24tbmlsLCBwb2ludCB3aWxsIG5vdCBiZQor
YWR2YW5jZWQuCitAZW5kIGRlZnVuCisKK0BkZWZ1biB2dGFibGUtdG9nZ2xlLW1hcmtlZC1vYmpl
Y3Qgb2JqZWN0CitUb2dnbGUgdGhlIG1hcmsgb24gQHZhcntvYmplY3R9IGluIHRoZSBjdXJyZW50
IHRhYmxlLgorQGVuZCBkZWZ1bgorCitAZGVmdW4gdnRhYmxlLW1hcmstb2JqZWN0cyB0YWJsZSBw
cmVkaWNhdGUKK01hcmsgYWxsIG9iamVjdHMgaW4gQHZhcnt0YWJsZX0gZm9yIHdoaWNoIHRoZSBA
dmFye3ByZWRpY2F0ZX0gZnVuY3Rpb24KK3JldHVybnMgbm9uLW5pbC4gIEVhY2ggdGFibGUgb2Jq
ZWN0IGlzIHBhc3NlZCB0byB0aGUgcHJlZGljYXRlIGZ1bmN0aW9uLgorQGVuZCBkZWZ1bgorCitA
ZGVmdW4gdnRhYmxlLW1hcmstYWxsLW9iamVjdHMgJnJlc3QgXworTWFyayBhbGwgb2JqZWN0cyBp
biB0aGUgY3VycmVudCB0YWJsZS4gIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGEgdGFibGUKK0Bj
b2RlezphY3Rpb259LgorQGVuZCBkZWZ1bgorCitAZGVmdW4gdnRhYmxlLXVubWFyay1hbGwtb2Jq
ZWN0cyAmcmVzdCBfCitVbm1hcmsgYWxsIG9iamVjdHMgaW4gdGhlIGN1cnJlbnQgdGFibGUuICBU
aGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBhCit0YWJsZSBAY29kZXs6YWN0aW9ufS4KK0BlbmQgZGVm
dW4KKworQGRlZnVuIHZ0YWJsZS1tYXJrZWQtb2JqZWN0cyB0YWJsZQorUmV0dXJuIGEgbGlzdCBv
ZiBhbGwgbWFya2VkIG9iamVjdHMgaW4gdGhlIGN1cnJlbnQgdGFibGUuICBUaGUgb3JkZXIgb2YK
K29iamVjdHMgaW4gdGhlIGxpc3QgaXMgdW5kZWZpbmVkLgorQGVuZCBkZWZ1bgorCitAZGVmdW4g
dnRhYmxlLW9iamVjdC1tYXJrZWQtcCB0YWJsZSBvYmplY3QKK1JldHVybiBAY29kZXt0fSBpZiBA
dmFye29iamVjdH0gaXMgbWFya2VkIGluIEB2YXJ7dGFibGV9LgorQGVuZCBkZWZ1bgorCitAZGVm
dW4gdnRhYmxlLWV4dHJhLWRhdGEgdGFibGUKK1JldHVybiB0aGUgZXh0cmEgZGF0YSBzcGVjaWZp
ZWQgYXQgQHZhcnt0YWJsZX0gY3JlYXRpb24gdGltZSwgb3IgYXMgc2V0CitieSBAY29kZXt2dGFi
bGUtc2V0LWV4dHJhLWRhdGF9LgorQGVuZCBkZWZ1bgorCitAZGVmdW4gdnRhYmxlLXNldC1leHRy
YS1kYXRhIHRhYmxlIGV4dHJhLWRhdGEKK1NldCBAdmFye2V4dHJhLWRhdGF9IGluIEB2YXJ7dGFi
bGV9LgorQGVuZCBkZWZ1bgorCitAZGVmdW4gdnRhYmxlLWNvbHVtbi1leHRyYS1kYXRhIGNvbHVt
bgorUmV0dXJuIHRoZSBleHRyYSBkYXRhIHNwZWNpZmllZCBhdCBAdmFye2NvbHVtbn0gY3JlYXRp
b24gdGltZSwgb3IgYXMgc2V0CitieSBAY29kZXt2dGFibGUtY29sdW1uLXNldC1leHRyYS1kYXRh
fS4KK0BlbmQgZGVmdW4KKworQGRlZnVuIHZ0YWJsZS1jb2x1bW4tc2V0LWV4dHJhLWRhdGEgdGFi
bGUgY29sdW1uLW9yLWluZGV4IGV4dHJhLWRhdGEKK1NldCBAdmFye2V4dHJhLWRhdGF9IGluIEB2
YXJ7dGFibGV9J3MgQHZhcntjb2x1bW4tb3ItaW5kZXh9LiAgSWYKK0B2YXJ7Y29sdW1uLW9yLWlu
ZGV4fSBpcyBhbiBpbnRlZ2VyLCBhbWVuZCB0aGUgY29sdW1uIGFzc29jaWF0ZWQgd2l0aAordGhl
IGludGVnZXIgaW5kZXgsIG90aGVyd2lzZSwgaXQgc2hvdWxkIGJlIGEgY29sdW1uIG9iamVjdC4K
K0BlbmQgZGVmdW4KKwogQG5vZGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCiBAY2hh
cHRlciBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKIEBpbmNsdWRlIGRvY2xpY2Vuc2Uu
dGV4aQpkaWZmIC0tZ2l0IGEvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbCBiL2xpc3AvZW1hY3Mt
bGlzcC92dGFibGUuZWwKaW5kZXggMDA3ODUxMTNlZGIuLjA3YWZjYjkwZTlmIDEwMDY0NAotLS0g
YS9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLmVsCisrKyBiL2xpc3AvZW1hY3MtbGlzcC92dGFibGUu
ZWwKQEAgLTMwLDc3ICszMCwyMjAgQEAKCiAoZGVmZmFjZSB2dGFibGUKICAgJygodCA6aW5oZXJp
dCB2YXJpYWJsZS1waXRjaCkpCi0gICJGYWNlIHVzZWQgKGJ5IGRlZmF1bHQpIGZvciB2dGFibGVz
LiIKKyAgIkZhY2UgdXNlZCAoYnkgZGVmYXVsdCkgZm9yIHZ0YWJsZSBib2RpZXMuIgogICA6dmVy
c2lvbiAiMjkuMSIKICAgOmdyb3VwICdmYWNlcykKCisoZGVmZmFjZSB2dGFibGUtaGVhZGVyCisg
ICcoKHQgOmluaGVyaXQgKGhlYWRlci1saW5lIHZ0YWJsZSkpKQorICAiRmFjZSB1c2VkIChieSBk
ZWZhdWx0KSBmb3IgdnRhYmxlIGhlYWRlcnMuIgorICA6dmVyc2lvbiAiMzEuMSIKKyAgOmdyb3Vw
ICdmYWNlcykKKworKGRlZmZhY2UgdnRhYmxlLW1hcmtlZAorICAnKCh0IDppbmhlcml0IHJlZ2lv
bikpCisgICJGYWNlIHVzZWQgKGJ5IGRlZmF1bHQpIGZvciBtYXJrZWQgdnRhYmxlIG9iamVjdHMu
IgorICA6dmVyc2lvbiAiMzEuMSIKKyAgOmdyb3VwICdmYWNlcykKKworKGRlZmZhY2UgdnRhYmxl
LXNvcnQtaW5kaWNhdG9yLWFzY2VuZAorICAnKCh0IDppbmhlcml0IHZ0YWJsZS1oZWFkZXIpKQor
ICAiRmFjZSB1c2VkIChieSBkZWZhdWx0KSBmb3IgdnRhYmxlIGFzY2VuZCBzb3J0IGluZGljYXRv
ci4iCisgIDp2ZXJzaW9uICIzMS4xIgorICA6Z3JvdXAgJ2ZhY2VzKQorCisoZGVmZmFjZSB2dGFi
bGUtc29ydC1pbmRpY2F0b3ItZGVzY2VuZAorICAnKCh0IDppbmhlcml0IHZ0YWJsZS1oZWFkZXIp
KQorICAiRmFjZSB1c2VkIChieSBkZWZhdWx0KSBmb3IgdnRhYmxlIGRlc2NlbmQgc29ydCBpbmRp
Y2F0b3IuIgorICA6dmVyc2lvbiAiMzEuMSIKKyAgOmdyb3VwICdmYWNlcykKKworKGRlZnZhciB2
dGFibGUtc29ydC1pbmRpY2F0b3ItZGVmYXVsdCAnKCg/4pa8ID92KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICg/4payID9eKSkKKyAgIkRlZmF1bHQgZGVzY2VuZGlu
ZyBhbmQgYXNjZW5kaW5nIHNvcnQgaW5kaWNhdG9ycy4KK1RoZSBmb3JtIGlzIGEgbGlzdCBvZiB0
d28gY29uc2VzIG9mIHR3byBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IHNldCBpbmRpY2F0ZXMKK3Nv
cnRpbmcgZGVzY2VuZGluZywgdGhlIHNlY29uZCBhc2NlbmRpbmcuICBUaGUgZmlyc3QgY2hhcmFj
dGVyIGluIGVhY2ggY29ucworaXMgZm9yIGZvbnRzIHRoYXQgY2FuIGRpc3BsYXkgc3ltYm9scywg
YW5kIHRoZSBzZWNvbmQgaXMgcGxhaW4gdGV4dC4iKQorCisoZGVmdmFyIHZ0YWJsZS1zb3J0LWlu
ZGljYXRvci1wYWQtc3BhY2Utd2lkdGggMC4zCisgICJUaGUgd2lkdGggb2Ygd2hpdGUgc3BhY2Ug
cGFkZGluZyBhcm91bmQgdGhlIHNvcnQgaW5kaWNhdG9yLgorSW4gdW5pdHMgb2YgY2hhcmFjdGVy
LXdpZHRoLiIpCisKIChjbC1kZWZzdHJ1Y3QgdnRhYmxlLWNvbHVtbgogICAiQSB2dGFibGUgY29s
dW1uLiIKICAgbmFtZQogICB3aWR0aAorICBpbmZlci13aWR0aAogICBtaW4td2lkdGgKICAgbWF4
LXdpZHRoCisgICh0cnVuY2F0ZS1ndWVzcyAwKQogICBwcmltYXJ5CisgIChudW1lcmljICdpbmZl
cikKICAgYWxpZ24KKyAgaGVhZGVyLWFsaWduCiAgIGdldHRlcgogICBmb3JtYXR0ZXIKICAgZGlz
cGxheWVyCisgIGNvbXBhcmF0b3IKKyAgZXh0cmEtZGF0YQogICAtbnVtZXJpY2FsCiAgIC1hbGln
bmVkKQoKIChkZWZjbGFzcyB2dGFibGUgKCkKLSAgKChjb2x1bW5zIDppbml0YXJnIDpjb2x1bW5z
IDphY2Nlc3NvciB2dGFibGUtY29sdW1ucykKKyAgKChuYW1lIDppbml0YXJnIDpuYW1lIDphY2Nl
c3NvciB2dGFibGUtbmFtZSkKKyAgIChjb2x1bW5zIDppbml0YXJnIDpjb2x1bW5zIDphY2Nlc3Nv
ciB2dGFibGUtY29sdW1ucykKICAgIChvYmplY3RzIDppbml0YXJnIDpvYmplY3RzIDphY2Nlc3Nv
ciB2dGFibGUtb2JqZWN0cykKICAgIChvYmplY3RzLWZ1bmN0aW9uIDppbml0YXJnIDpvYmplY3Rz
LWZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgICA6YWNjZXNzb3IgdnRhYmxlLW9iamVjdHMt
ZnVuY3Rpb24pCisgICAob2JqZWN0LWVxdWFsIDppbml0YXJnIDpvYmplY3QtZXF1YWwKKyAgICAg
ICAgICAgICAgICAgOmFjY2Vzc29yIHZ0YWJsZS1vYmplY3QtZXF1YWwpCisgICAoZHVwbGljYXRl
LW9iamVjdHMgOmluaXRhcmcgOmR1cGxpY2F0ZS1vYmplY3RzCisgICAgICAgICAgICAgICAgICAg
ICAgOmFjY2Vzc29yIHZ0YWJsZS1kdXBsaWNhdGUtb2JqZWN0cykKICAgIChnZXR0ZXIgOmluaXRh
cmcgOmdldHRlciA6YWNjZXNzb3IgdnRhYmxlLWdldHRlcikKICAgIChmb3JtYXR0ZXIgOmluaXRh
cmcgOmZvcm1hdHRlciA6YWNjZXNzb3IgdnRhYmxlLWZvcm1hdHRlcikKICAgIChkaXNwbGF5ZXIg
OmluaXRhcmcgOmRpc3BsYXllciA6YWNjZXNzb3IgdnRhYmxlLWRpc3BsYXllcikKICAgICh1c2Ut
aGVhZGVyLWxpbmUgOmluaXRhcmcgOnVzZS1oZWFkZXItbGluZQogICAgICAgICAgICAgICAgICAg
ICA6YWNjZXNzb3IgdnRhYmxlLXVzZS1oZWFkZXItbGluZSkKKyAgIChoZWFkZXItaW50YW5naWJs
ZSA6aW5pdGFyZyA6aGVhZGVyLWludGFuZ2libGUKKyAgICAgICAgICAgICAgICAgICAgICA6YWNj
ZXNzb3IgdnRhYmxlLWhlYWRlci1pbnRhbmdpYmxlKQorICAgKGRlY29yLWludGFuZ2libGUgOmlu
aXRhcmcgOmRlY29yLWludGFuZ2libGUKKyAgICAgICAgICAgICAgICAgICAgIDphY2Nlc3NvciB2
dGFibGUtZGVjb3ItaW50YW5naWJsZSkKKyAgICh0ZXh0LXNjYWxlLXJlZHJhdyA6aW5pdGFyZyA6
dGV4dC1zY2FsZS1yZWRyYXcKKyAgICAgICAgICAgICAgICAgICAgICA6YWNjZXNzb3IgdnRhYmxl
LXRleHQtc2NhbGUtcmVkcmF3KQorICAgKHRleHQtc2NhbGUtaGVhZGVyLWxpbmUgOmluaXRhcmcg
OnRleHQtc2NhbGUtaGVhZGVyLWxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDphY2Nl
c3NvciB2dGFibGUtdGV4dC1zY2FsZS1oZWFkZXItbGluZSkKKyAgIChyZXNpemUtZGVib3VuY2Ut
aW50ZXJ2YWwgOmluaXRhcmcgOnJlc2l6ZS1kZWJvdW5jZS1pbnRlcnZhbAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6YWNjZXNzb3IgdnRhYmxlLXJlc2l6ZS1kZWJvdW5jZS1pbnRlcnZh
bCkKICAgIChmYWNlIDppbml0YXJnIDpmYWNlIDphY2Nlc3NvciB2dGFibGUtZmFjZSkKKyAgICho
ZWFkZXItZmFjZSA6aW5pdGFyZyA6aGVhZGVyLWZhY2UgOmFjY2Vzc29yIHZ0YWJsZS1oZWFkZXIt
ZmFjZSkKKyAgIChtYXJrZWQtZmFjZSA6aW5pdGFyZyA6bWFya2VkLWZhY2UgOmFjY2Vzc29yIHZ0
YWJsZS1tYXJrZWQtZmFjZSkKICAgIChhY3Rpb25zIDppbml0YXJnIDphY3Rpb25zIDphY2Nlc3Nv
ciB2dGFibGUtYWN0aW9ucykKICAgIChrZXltYXAgOmluaXRhcmcgOmtleW1hcCA6YWNjZXNzb3Ig
dnRhYmxlLWtleW1hcCkKLSAgIChzZXBhcmF0b3Itd2lkdGggOmluaXRhcmcgOnNlcGFyYXRvci13
aWR0aCA6YWNjZXNzb3IgdnRhYmxlLXNlcGFyYXRvci13aWR0aCkKLSAgIChkaXZpZGVyIDppbml0
YXJnIDpkaXZpZGVyIDphY2Nlc3NvciB2dGFibGUtZGl2aWRlciA6aW5pdGZvcm0gbmlsKQorICAg
KHNlcGFyYXRvci13aWR0aCA6aW5pdGFyZyA6c2VwYXJhdG9yLXdpZHRoCisgICAgICAgICAgICAg
ICAgICAgIDphY2Nlc3NvciB2dGFibGUtc2VwYXJhdG9yLXdpZHRoKQorICAgKGRpdmlkZXIgOmlu
aXRhcmcgOmRpdmlkZXIgOmFjY2Vzc29yIHZ0YWJsZS1kaXZpZGVyKQorICAgKGRpdmlkZXItd2lk
dGggOmluaXRhcmcgOmRpdmlkZXItd2lkdGgKKyAgICAgICAgICAgICAgICAgIDphY2Nlc3NvciB2
dGFibGUtZGl2aWRlci13aWR0aCkKKyAgIChkaXZpZGVyLW9uLWhlYWRlciA6aW5pdGFyZyA6ZGl2
aWRlci1vbi1oZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgICA6YWNjZXNzb3IgdnRhYmxlLWRp
dmlkZXItb24taGVhZGVyKQogICAgKHNvcnQtYnkgOmluaXRhcmcgOnNvcnQtYnkgOmFjY2Vzc29y
IHZ0YWJsZS1zb3J0LWJ5KQorICAgKHNvcnQtaW5kaWNhdG9yIDppbml0YXJnIDpzb3J0LWluZGlj
YXRvciA6YWNjZXNzb3IgdnRhYmxlLXNvcnQtaW5kaWNhdG9yKQorICAgKHNvcnQtaW5kaWNhdG9y
LWZhY2UtYXNjZW5kIDppbml0YXJnIDpzb3J0LWluZGljYXRvci1mYWNlLWFzY2VuZAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDphY2Nlc3NvciB2dGFibGUtc29ydC1pbmRpY2F0b3It
ZmFjZS1hc2NlbmQpCisgICAoc29ydC1pbmRpY2F0b3ItZmFjZS1kZXNjZW5kIDppbml0YXJnIDpz
b3J0LWluZGljYXRvci1mYWNlLWRlc2NlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOmFjY2Vzc29yIHZ0YWJsZS1zb3J0LWluZGljYXRvci1mYWNlLWRlc2NlbmQpCiAgICAoZWxs
aXBzaXMgOmluaXRhcmcgOmVsbGlwc2lzIDphY2Nlc3NvciB2dGFibGUtZWxsaXBzaXMpCisgICAo
cm93LXRleHQtcHJvcGVydGllcyA6aW5pdGFyZyA6cm93LXRleHQtcHJvcGVydGllcworICAgICAg
ICAgICAgICAgICAgICAgICAgOmFjY2Vzc29yIHZ0YWJsZS1yb3ctdGV4dC1wcm9wZXJ0aWVzKQog
ICAgKGNvbHVtbi1jb2xvcnMgOmluaXRhcmcgOmNvbHVtbi1jb2xvcnMgOmFjY2Vzc29yIHZ0YWJs
ZS1jb2x1bW4tY29sb3JzKQogICAgKHJvdy1jb2xvcnMgOmluaXRhcmcgOnJvdy1jb2xvcnMgOmFj
Y2Vzc29yIHZ0YWJsZS1yb3ctY29sb3JzKQorICAgKGNvbHVtbi1jb2xvci1mdW5jdGlvbiA6aW5p
dGFyZyA6Y29sdW1uLWNvbG9yLWZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgIDph
Y2Nlc3NvciB2dGFibGUtY29sdW1uLWNvbG9yLWZ1bmN0aW9uKQorICAgKHJvdy1jb2xvci1mdW5j
dGlvbiA6aW5pdGFyZyA6cm93LWNvbG9yLWZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAg
IDphY2Nlc3NvciB2dGFibGUtcm93LWNvbG9yLWZ1bmN0aW9uKQorICAgKGNsb3NlLWFjdGlvbiA6
aW5pdGFyZyA6Y2xvc2UtYWN0aW9uIDphY2Nlc3NvciB2dGFibGUtY2xvc2UtYWN0aW9uKQorICAg
KGV4dHJhLWRhdGEgOmluaXRhcmcgOmV4dHJhLWRhdGEgOmFjY2Vzc29yIHZ0YWJsZS1leHRyYS1k
YXRhKQorICAgKHB1bHNlIDppbml0YXJnIDpwdWxzZSA6YWNjZXNzb3IgdnRhYmxlLXB1bHNlKQor
ICAgKHB1bHNlLWZ1bmN0aW9uIDppbml0YXJnIDpwdWxzZS1mdW5jdGlvbiA6YWNjZXNzb3IgdnRh
YmxlLXB1bHNlLWZ1bmN0aW9uKQorICAgKC1vYmplY3RzLXRpY2sgOmluaXRmb3JtIDApCisgICAo
LW1hcmtlZC1vYmplY3RzIDppbml0Zm9ybSBuaWwpCisgICAoLW9yaWctc29ydC1ieSA6aW5pdGZv
cm0gbmlsKQogICAgKC1jYWNoZWQtY29sb3JzIDppbml0Zm9ybSBuaWwpCisgICAoLWJ1ZmZlciA6
aW5pdGZvcm0gbmlsKQorICAgKC1pbmRpY2F0b3ItcGFkIDppbml0Zm9ybSBuaWwpCiAgICAoLWNh
Y2hlIDppbml0Zm9ybSAobWFrZS1oYXNoLXRhYmxlIDp0ZXN0ICMnZXF1YWwpKQogICAgKC1jYWNo
ZWQta2V5bWFwIDppbml0Zm9ybSBuaWwpCisgICAoLWNhY2hlZC1kcmFnLWtleW1hcCA6aW5pdGZv
cm0gbmlsKQogICAgKC1oYXMtY29sdW1uLXNwZWMgOmluaXRmb3JtIG5pbCkpCiAgICJBbiBvYmpl
Y3QgdG8gaG9sZCB0aGUgZGF0YSBmb3IgYSB0YWJsZS4iKQoKIChkZWZ2YXIta2V5bWFwIHZ0YWJs
ZS1tYXAKLSAgIlMiICMndnRhYmxlLXNvcnQtYnktY3VycmVudC1jb2x1bW4KLSAgInsiICMndnRh
YmxlLW5hcnJvdy1jdXJyZW50LWNvbHVtbgotICAifSIgIyd2dGFibGUtd2lkZW4tY3VycmVudC1j
b2x1bW4KLSAgImciICMndnRhYmxlLXJldmVydC1jb21tYW5kCi0gICJNLTxsZWZ0PiIgIyd2dGFi
bGUtcHJldmlvdXMtY29sdW1uCisgICJTIiAgICAgICAgICMndnRhYmxlLXNvcnQtYnktY3VycmVu
dC1jb2x1bW4KKyAgIlUiICAgICAgICAgIyd2dGFibGUtdW5zb3J0CisgICJ7IiAgICAgICAgICMn
dnRhYmxlLW5hcnJvdy1jdXJyZW50LWNvbHVtbgorICAifSIgICAgICAgICAjJ3Z0YWJsZS13aWRl
bi1jdXJyZW50LWNvbHVtbgorICAiZyIgICAgICAgICAjJ3Z0YWJsZS1yZXZlcnQtY29tbWFuZAor
ICAiTS08bGVmdD4iICAjJ3Z0YWJsZS1wcmV2aW91cy1jb2x1bW4KICAgIk0tPHJpZ2h0PiIgIyd2
dGFibGUtbmV4dC1jb2x1bW4pCgogKGRlZnZhci1rZXltYXAgdnRhYmxlLWhlYWRlci1saW5lLW1h
cAogICA6cGFyZW50IHZ0YWJsZS1tYXAKICAgIjxmb2xsb3ctbGluaz4iICdtb3VzZS1mYWNlCi0g
ICI8bW91c2UtMj4iICMndnRhYmxlLWhlYWRlci1saW5lLXNvcnQpCi0KLShjbC1kZWZ1biBtYWtl
LXZ0YWJsZSAoJmtleSBjb2x1bW5zIG9iamVjdHMgb2JqZWN0cy1mdW5jdGlvbgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldHRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cm1hdHRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllcgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh1c2UtaGVhZGVyLWxpbmUgdCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZmFjZSAndnRhYmxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFj
dGlvbnMga2V5bWFwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci13aWR0
aCAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZXIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaXZpZGVyLXdpZHRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c29ydC1ieQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbGxpcHNpcyB0KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChpbnNlcnQgdCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByb3ctY29sb3JzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLWNvbG9y
cykKKyAgIjxoZWFkZXItbGluZT4gPG1vdXNlLTE+IiAjJ3Z0YWJsZS0taGVhZGVyLWxpbmUtc29y
dAorICAiPGhlYWRlci1saW5lPiA8bW91c2UtMj4iICMndnRhYmxlLS1oZWFkZXItbGluZS1zb3J0
CisgICI8bW91c2UtMT4iICAgICAgICAgICAgICAgIyd2dGFibGUtLWhlYWRlci1saW5lLXNvcnQK
KyAgIjxtb3VzZS0yPiIgICAgICAgICAgICAgICAjJ3Z0YWJsZS0taGVhZGVyLWxpbmUtc29ydAor
ICAicSIgICAgICAgICAgICAgICAgICAgICAgICMndnRhYmxlLWNsb3NlCisgICI8dGFiPiIgICAg
ICAgICAgICAgICAgICAgIyd2dGFibGUtZ290by1iZWdpbm5pbmctb2YtdGFibGUpCisKKyhkZWZ2
YXIta2V5bWFwIHZ0YWJsZS1kcmFnLXJlc2l6ZS1jb2x1bW4tbWFwCisgICI8aGVhZGVyLWxpbmU+
IDxkcmFnLW1vdXNlLTE+IiAjJ3Z0YWJsZS0tZHJhZy1yZXNpemUtY29sdW1uCisgICI8aGVhZGVy
LWxpbmU+IDxkb3duLW1vdXNlLTE+IiAjJ2lnbm9yZQorICAiPGRyYWctbW91c2UtMT4iICAgICAg
ICAgICAgICAgIyd2dGFibGUtLWRyYWctcmVzaXplLWNvbHVtbgorICAiPGRvd24tbW91c2UtMT4i
ICAgICAgICAgICAgICAgIydpZ25vcmUpCisKKyhkZWZ2YXIta2V5bWFwIHZ0YWJsZS1oZWFkZXIt
ZHJhZy1yZXNpemUtY29sdW1uLW1hcAorICA6cGFyZW50IChtYWtlLWNvbXBvc2VkLWtleW1hcAor
ICAgICAgICAgICB2dGFibGUtaGVhZGVyLWxpbmUtbWFwCisgICAgICAgICAgIHZ0YWJsZS1kcmFn
LXJlc2l6ZS1jb2x1bW4tbWFwKSkKKworKGRlZnZhci1rZXltYXAgdnRhYmxlLW5hdmlnYXRpb24t
bWFwCisgICJDLWEiICAgIChsYW1iZGEgKCkgKGludGVyYWN0aXZlKQorICAgICAgICAgICAgIChi
ZWdpbm5pbmctb2YtbGluZSkKKyAgICAgICAgICAgICAoc2Nyb2xsLXJpZ2h0IG1vc3QtcG9zaXRp
dmUtZml4bnVtKSkKKyAgIm4iICAgICAgIyd2dGFibGUtbmV4dC1saW5lCisgICI8ZG93bj4iICMn
dnRhYmxlLW5leHQtbGluZQorICAicCIgICAgICAjJ3Z0YWJsZS1wcmV2aW91cy1saW5lCisgICI8
dXA+IiAgICMndnRhYmxlLXByZXZpb3VzLWxpbmUKKyAgIjxob21lPiIgIyd2dGFibGUtZ290by1i
ZWdpbm5pbmctb2YtdGFibGUKKyAgIjxlbmQ+IiAgIyd2dGFibGUtZ290by1lbmQtb2YtdGFibGUK
KyAgIjxyZW1hcD4gPGZvcndhcmQtcGFyYWdyYXBoPiIgICMndnRhYmxlLWdvdG8tbmV4dC10YWJs
ZQorICAiPHJlbWFwPiA8YmFja3dhcmQtcGFyYWdyYXBoPiIgIyd2dGFibGUtZ290by1wcmV2aW91
cy10YWJsZQorICAicSIgICAgICAjJ3Z0YWJsZS1jbG9zZSkKKworKGNsLWRlZnVuIG1ha2UtdnRh
YmxlICgma2V5CisgICAgICAgICAgICAgICAgICAgICAgIChuYW1lICIqdnRhYmxlKiIpCisgICAg
ICAgICAgICAgICAgICAgICAgIGNvbHVtbnMKKyAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0
cworICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLWZ1bmN0aW9uCisgICAgICAgICAgICAg
ICAgICAgICAgIChvYmplY3QtZXF1YWwgIydlcSkKKyAgICAgICAgICAgICAgICAgICAgICAgKGR1
cGxpY2F0ZS1vYmplY3RzICdhbGxvdykKKyAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyCisg
ICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcgorICAgICAgICAgICAgICAgICAgICAgICBk
aXNwbGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgKHVzZS1oZWFkZXItbGluZSB0KQorICAg
ICAgICAgICAgICAgICAgICAgICBoZWFkZXItaW50YW5naWJsZQorICAgICAgICAgICAgICAgICAg
ICAgICBkZWNvci1pbnRhbmdpYmxlCisgICAgICAgICAgICAgICAgICAgICAgIChmYWNlICd2dGFi
bGUpCisgICAgICAgICAgICAgICAgICAgICAgIChoZWFkZXItZmFjZSAndnRhYmxlLWhlYWRlcikK
KyAgICAgICAgICAgICAgICAgICAgICAgKG1hcmtlZC1mYWNlICd2dGFibGUtbWFya2VkKQorICAg
ICAgICAgICAgICAgICAgICAgICBhY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgIGtleW1h
cAorICAgICAgICAgICAgICAgICAgICAgICAodXNlLW5hdmlnYXRpb24ta2V5bWFwIG5pbCkgOyBu
byBzbG90CisgICAgICAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Itd2lkdGggMSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgZGl2aWRlcgorICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVy
LXdpZHRoCisgICAgICAgICAgICAgICAgICAgICAgIChkaXZpZGVyLW9uLWhlYWRlciB0KQorICAg
ICAgICAgICAgICAgICAgICAgICBzb3J0LWJ5CisgICAgICAgICAgICAgICAgICAgICAgIChzb3J0
LWluZGljYXRvciB2dGFibGUtc29ydC1pbmRpY2F0b3ItZGVmYXVsdCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgKHNvcnQtaW5kaWNhdG9yLWZhY2UtYXNjZW5kCisgICAgICAgICAgICAgICAgICAg
ICAgICAndnRhYmxlLXNvcnQtaW5kaWNhdG9yLWFzY2VuZCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgKHNvcnQtaW5kaWNhdG9yLWZhY2UtZGVzY2VuZAorICAgICAgICAgICAgICAgICAgICAgICAg
J3Z0YWJsZS1zb3J0LWluZGljYXRvci1kZXNjZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAo
ZWxsaXBzaXMgKHRydW5jYXRlLXN0cmluZy1lbGxpcHNpcykpCisgICAgICAgICAgICAgICAgICAg
ICAgIChpbnNlcnQgdCkgOyBubyBzbG90CisgICAgICAgICAgICAgICAgICAgICAgIHJvdy10ZXh0
LXByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLWNvbG9ycworICAgICAg
ICAgICAgICAgICAgICAgICByb3ctY29sb3JzCisgICAgICAgICAgICAgICAgICAgICAgIGNvbHVt
bi1jb2xvci1mdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICByb3ctY29sb3ItZnVuY3Rp
b24KKyAgICAgICAgICAgICAgICAgICAgICAgKHRleHQtc2NhbGUtcmVkcmF3IHQpCisgICAgICAg
ICAgICAgICAgICAgICAgIHRleHQtc2NhbGUtaGVhZGVyLWxpbmUKKyAgICAgICAgICAgICAgICAg
ICAgICAgKHJlc2l6ZS1kZWJvdW5jZS1pbnRlcnZhbCAwLjE1KQorICAgICAgICAgICAgICAgICAg
ICAgICBjbG9zZS1hY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEtZGF0YQorICAg
ICAgICAgICAgICAgICAgICAgICBwdWxzZQorICAgICAgICAgICAgICAgICAgICAgICAocHVsc2Ut
ZnVuY3Rpb24gIydwdWxzZS1tb21lbnRhcnktaGlnaGxpZ2h0LW9uZS1saW5lKSkKICAgIkNyZWF0
ZSBhbmQgaW5zZXJ0IGEgdnRhYmxlIGF0IHBvaW50LgogVGhlIHZ0YWJsZSBvYmplY3QgaXMgcmV0
dXJuZWQuICBJZiBJTlNFUlQgaXMgbmlsLCB0aGUgdGFibGUgd29uJ3QKIGJlIGluc2VydGVkLgpA
QCAtMTE1LDY2ICsyNTgsOTQgQEAgbWFrZS12dGFibGUKICAgICAgICAgICAndnRhYmxlCiAgICAg
ICAgICAgOm9iamVjdHMgb2JqZWN0cwogICAgICAgICAgIDpvYmplY3RzLWZ1bmN0aW9uIG9iamVj
dHMtZnVuY3Rpb24KKyAgICAgICAgICA6bmFtZSBuYW1lCisgICAgICAgICAgOmR1cGxpY2F0ZS1v
YmplY3RzIGR1cGxpY2F0ZS1vYmplY3RzCiAgICAgICAgICAgOmdldHRlciBnZXR0ZXIKICAgICAg
ICAgICA6Zm9ybWF0dGVyIGZvcm1hdHRlcgogICAgICAgICAgIDpkaXNwbGF5ZXIgZGlzcGxheWVy
CiAgICAgICAgICAgOnVzZS1oZWFkZXItbGluZSB1c2UtaGVhZGVyLWxpbmUKKyAgICAgICAgICA6
aGVhZGVyLWludGFuZ2libGUgaGVhZGVyLWludGFuZ2libGUKKyAgICAgICAgICA6ZGVjb3ItaW50
YW5naWJsZSBkZWNvci1pbnRhbmdpYmxlCisgICAgICAgICAgOnRleHQtc2NhbGUtcmVkcmF3IHRl
eHQtc2NhbGUtcmVkcmF3CisgICAgICAgICAgOnRleHQtc2NhbGUtaGVhZGVyLWxpbmUgdGV4dC1z
Y2FsZS1oZWFkZXItbGluZQorICAgICAgICAgIDpyZXNpemUtZGVib3VuY2UtaW50ZXJ2YWwgcmVz
aXplLWRlYm91bmNlLWludGVydmFsCisgICAgICAgICAgOm9iamVjdC1lcXVhbCBvYmplY3QtZXF1
YWwKICAgICAgICAgICA6ZmFjZSBmYWNlCisgICAgICAgICAgOmhlYWRlci1mYWNlIGhlYWRlci1m
YWNlCisgICAgICAgICAgOm1hcmtlZC1mYWNlIG1hcmtlZC1mYWNlCiAgICAgICAgICAgOmFjdGlv
bnMgYWN0aW9ucwogICAgICAgICAgIDprZXltYXAga2V5bWFwCiAgICAgICAgICAgOnNlcGFyYXRv
ci13aWR0aCBzZXBhcmF0b3Itd2lkdGgKKyAgICAgICAgICA6ZGl2aWRlciBkaXZpZGVyCisgICAg
ICAgICAgOmRpdmlkZXItd2lkdGggZGl2aWRlci13aWR0aAorICAgICAgICAgIDpkaXZpZGVyLW9u
LWhlYWRlciBkaXZpZGVyLW9uLWhlYWRlcgogICAgICAgICAgIDpzb3J0LWJ5IHNvcnQtYnkKKyAg
ICAgICAgICA6c29ydC1pbmRpY2F0b3Igc29ydC1pbmRpY2F0b3IKKyAgICAgICAgICA6c29ydC1p
bmRpY2F0b3ItZmFjZS1hc2NlbmQgc29ydC1pbmRpY2F0b3ItZmFjZS1hc2NlbmQKKyAgICAgICAg
ICA6c29ydC1pbmRpY2F0b3ItZmFjZS1kZXNjZW5kIHNvcnQtaW5kaWNhdG9yLWZhY2UtZGVzY2Vu
ZAorICAgICAgICAgIDpyb3ctdGV4dC1wcm9wZXJ0aWVzIHJvdy10ZXh0LXByb3BlcnRpZXMKICAg
ICAgICAgICA6cm93LWNvbG9ycyByb3ctY29sb3JzCiAgICAgICAgICAgOmNvbHVtbi1jb2xvcnMg
Y29sdW1uLWNvbG9ycwotICAgICAgICAgIDplbGxpcHNpcyBlbGxpcHNpcykpKQorICAgICAgICAg
IDpjb2x1bW4tY29sb3ItZnVuY3Rpb24gY29sdW1uLWNvbG9yLWZ1bmN0aW9uCisgICAgICAgICAg
OnJvdy1jb2xvci1mdW5jdGlvbiByb3ctY29sb3ItZnVuY3Rpb24KKyAgICAgICAgICA6ZWxsaXBz
aXMgZWxsaXBzaXMKKyAgICAgICAgICA6Y2xvc2UtYWN0aW9uIGNsb3NlLWFjdGlvbgorICAgICAg
ICAgIDpleHRyYS1kYXRhIGV4dHJhLWRhdGEKKyAgICAgICAgICA6cHVsc2UgcHVsc2UKKyAgICAg
ICAgICA6cHVsc2UtZnVuY3Rpb24gcHVsc2UtZnVuY3Rpb24pKSkKICAgICA7OyBTdG9yZSB3aGV0
aGVyIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgY29sdW1ucyBvciBub3QuCiAgICAgKHNldGYgKHNs
b3QtdmFsdWUgdGFibGUgJy1oYXMtY29sdW1uLXNwZWMpIChub3QgKG5vdCBjb2x1bW5zKSkpCi0g
ICAgOzsgQXV0by1nZW5lcmF0ZSB0aGUgY29sdW1ucy4KLSAgICAodW5sZXNzIGNvbHVtbnMKLSAg
ICAgICh1bmxlc3Mgb2JqZWN0cwotICAgICAgICAoZXJyb3IgIkNhbid0IGF1dG8tZ2VuZXJhdGUg
Y29sdW1uczsgbm8gb2JqZWN0cyIpKQotICAgICAgKHNldHEgY29sdW1ucyAobWFrZS1saXN0IChs
ZW5ndGggKGNhciBvYmplY3RzKSkgIiIpKSkKLSAgICAoc2V0ZiAodnRhYmxlLWNvbHVtbnMgdGFi
bGUpCi0gICAgICAgICAgKG1hcGNhciAobGFtYmRhIChjb2x1bW4pCi0gICAgICAgICAgICAgICAg
ICAgIChjb25kCi0gICAgICAgICAgICAgICAgICAgICA7OyBXZSBqdXN0IGhhdmUgdGhlIG5hbWUg
KGFzIGEgc3RyaW5nKS4KLSAgICAgICAgICAgICAgICAgICAgICgoc3RyaW5ncCBjb2x1bW4pCi0g
ICAgICAgICAgICAgICAgICAgICAgKG1ha2UtdnRhYmxlLWNvbHVtbiA6bmFtZSBjb2x1bW4pKQot
ICAgICAgICAgICAgICAgICAgICAgOzsgQSBwbGlzdCBvZiBrZXl3b3Jkcy92YWx1ZXMuCi0gICAg
ICAgICAgICAgICAgICAgICAoKGxpc3RwIGNvbHVtbikKLSAgICAgICAgICAgICAgICAgICAgICAo
YXBwbHkgIydtYWtlLXZ0YWJsZS1jb2x1bW4gY29sdW1uKSkKLSAgICAgICAgICAgICAgICAgICAg
IDs7IEEgZnVsbCBgdnRhYmxlLWNvbHVtbicgb2JqZWN0LgotICAgICAgICAgICAgICAgICAgICAg
KHQKLSAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4pKSkKLSAgICAgICAgICAgICAgICAgIGNv
bHVtbnMpKQotICAgIDs7IENvbXB1dGUgbWlzc2luZyBjb2x1bW4gZGF0YS4KLSAgICAoc2V0ZiAo
dnRhYmxlLWNvbHVtbnMgdGFibGUpICh2dGFibGUtLWNvbXB1dGUtY29sdW1ucyB0YWJsZSkpCisg
ICAgOzsgQ29tcHV0ZSB0aGUgYmFsYW5jZSBvZiBjb2x1bW4gZGF0YS4KKyAgICAodnRhYmxlLS1p
bml0aWFsaXplLWNvbHVtbnMgdGFibGUgY29sdW1ucyBvYmplY3RzKQogICAgIDs7IENvbXB1dGUg
dGhlIGNvbG9ycy4KICAgICAod2hlbiAob3Igcm93LWNvbG9ycyBjb2x1bW4tY29sb3JzKQogICAg
ICAgKHNldGYgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZWQtY29sb3JzKQogICAgICAgICAgICAg
KHZ0YWJsZS0tY29tcHV0ZS1jb2xvcnMgcm93LWNvbG9ycyBjb2x1bW4tY29sb3JzKSkpCi0gICAg
OzsgQ29tcHV0ZSB0aGUgZGl2aWRlci4KLSAgICAod2hlbiAob3IgZGl2aWRlciBkaXZpZGVyLXdp
ZHRoKQotICAgICAgKHNldGYgKHZ0YWJsZS1kaXZpZGVyIHRhYmxlKQotICAgICAgICAgICAgKHBy
b3BlcnRpemUKLSAgICAgICAgICAgICAob3IgKGNvcHktc2VxdWVuY2UgZGl2aWRlcikKLSAgICAg
ICAgICAgICAgICAgKHByb3BlcnRpemUKLSAgICAgICAgICAgICAgICAgICIgIiAnZGlzcGxheQot
ICAgICAgICAgICAgICAgICAgKGxpc3QgJ3NwYWNlIDp3aWR0aAotICAgICAgICAgICAgICAgICAg
ICAgICAgKGxpc3QgKHZ0YWJsZS0tY29tcHV0ZS13aWR0aCB0YWJsZSBkaXZpZGVyLXdpZHRoKSkp
KSkKLSAgICAgICAgICAgICAnbW91c2UtZmFjZSAnaGlnaGxpZ2h0Ci0gICAgICAgICAgICAgJ2tl
eW1hcAotICAgICAgICAgICAgIChkZWZpbmUta2V5bWFwCi0gICAgICAgICAgICAgICAiPGRyYWct
bW91c2UtMT4iICMndnRhYmxlLS1kcmFnLXJlc2l6ZS1jb2x1bW4KLSAgICAgICAgICAgICAgICI8
ZG93bi1tb3VzZS0xPiIgIydpZ25vcmUpKSkpCi0gICAgOzsgQ29tcHV0ZSB0aGUga2V5bWFwLgot
ICAgIChzZXRmIChzbG90LXZhbHVlIHRhYmxlICctY2FjaGVkLWtleW1hcCkgKHZ0YWJsZS0tbWFr
ZS1rZXltYXAgdGFibGUpKQotICAgICh1bmxlc3Mgc29ydC1ieQotICAgICAgKHNlcS1kby1pbmRl
eGVkIChsYW1iZGEgKGNvbHVtbiBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICh3aGVu
ICh2dGFibGUtY29sdW1uLXByaW1hcnkgY29sdW1uKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAocHVzaCAoY29ucyBpbmRleCAodnRhYmxlLWNvbHVtbi1wcmltYXJ5IGNvbHVtbikpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtc29ydC1ieSB0YWJsZSkpKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWNvbHVtbnMgdGFibGUpKSkKKyAgICA7OyBDb21w
dXRlIHRoZSBkaXZpZGVyLiBGb3IgYWxpZ25tZW50LCB1c2UgdGhlIHNhbWUgZmFjZSBpbiB0aGUg
Ym9keQorICAgIDs7IGFuZCBvbiB0aGUgaGVhZGVyLgorICAgICh3aGVuIGRpdmlkZXIKKyAgICAg
IChsZXQgKChkaXYgKHByb3BlcnRpemUgKGNvcHktc2VxdWVuY2UgZGl2aWRlcikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ21vdXNlLWZhY2UgJ2hpZ2hsaWdodCkpKQorICAgICAgICAo
YWRkLWZhY2UtdGV4dC1wcm9wZXJ0eSAwIChsZW5ndGggZGl2KSBmYWNlICdhcHBlbmQgZGl2KQor
ICAgICAgICAod2hlbiAodnRhYmxlLWRlY29yLWludGFuZ2libGUgdGFibGUpCisgICAgICAgICAg
KGFkZC10ZXh0LXByb3BlcnRpZXMgMCAobGVuZ3RoIGRpdikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobGlzdCAnY3Vyc29yLWludGFuZ2libGUgdAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdmcm9udC1zdGlja3kgdAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdyZWFyLW5vbnN0aWNreSB0KQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpdikpCisgICAgICAgIChzZXRmICh2dGFibGUtZGl2aWRlciB0YWJsZSkgZGl2
KSkpCisgICAgOzsgVG8gYWNoaWV2ZSBwaXhlbC1sZXZlbCBhbGlnbm1lbnQsIHdlIG5lZWQgaW50
cm9kdWNlIHRoZSBzYW1lCisgICAgOzsgaGVhZGVyIHNvcnQtaW5kaWNhdG9yIHBpeGVsLXByZWNp
c2lvbiBlcnJvciBpbiB0aGUgYm9keSBhbmQKKyAgICA7OyBjb2x1bW4td2lkdGggY29tcHV0YXRp
b24uCisgICAgOzsgTk9URTogS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgaW5kaWNhdG9yIGlu
CisgICAgOzsgYHZ0YWJsZS0taW5zZXJ0LWhlYWRlci1saW5lJy4KKyAgICAobGV0ICgoaW5kaWNh
dG9yLXBhZCAocHJvcGVydGl6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAobWFrZS1zdHJp
bmcgMiA/XHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNwbGF5CisgICAgICAgICAg
ICAgICAgICAgICAgICAgIChsaXN0ICdzcGFjZS13aWR0aCB2dGFibGUtc29ydC1pbmRpY2F0b3It
cGFkLXNwYWNlLXdpZHRoKSkpKQorICAgICAgKHdoZW4gZGVjb3ItaW50YW5naWJsZQorICAgICAg
ICAoYWRkLXRleHQtcHJvcGVydGllcyAwIChsZW5ndGggaW5kaWNhdG9yLXBhZCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGxpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdjdXJzb3ItaW50YW5naWJsZSB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJv
bnQtc3RpY2t5IHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWFyLW5vbnN0aWNr
eSB0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3ItcGFkKSkKKyAgICAg
IChzZXRmIChzbG90LXZhbHVlIHRhYmxlICctaW5kaWNhdG9yLXBhZCkgaW5kaWNhdG9yLXBhZCkp
CisgICAgOzsgQ29tcHV0ZSB0aGUga2V5bWFwcy4KKyAgICAobGV0ICgoa2V5bWFwICh2dGFibGUt
LW1ha2Uta2V5bWFwIHRhYmxlIHVzZS1uYXZpZ2F0aW9uLWtleW1hcCkpKQorICAgICAgKHNldGYg
KHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZWQta2V5bWFwKSBrZXltYXApCisgICAgICAoc2V0ZiAo
c2xvdC12YWx1ZSB0YWJsZSAnLWNhY2hlZC1kcmFnLWtleW1hcCkKKyAgICAgICAgICAgIChtYWtl
LWNvbXBvc2VkLWtleW1hcCBrZXltYXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2dGFibGUtZHJhZy1yZXNpemUtY29sdW1uLW1hcCkpKQorICAgIChwcm9nbgorICAgICAgKHVu
bGVzcyBzb3J0LWJ5CisgICAgICAgIChzZXEtZG8taW5kZXhlZCAobGFtYmRhIChjb2x1bW4gaW5k
ZXgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICh3aGVuICh2dGFibGUtY29sdW1uLXByaW1h
cnkgY29sdW1uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdXNoIChjb25zIGluZGV4
ICh2dGFibGUtY29sdW1uLXByaW1hcnkgY29sdW1uKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAodnRhYmxlLXNvcnQtYnkgdGFibGUpKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAodnRhYmxlLWNvbHVtbnMgdGFibGUpKSkKKyAgICAgICh3aGVuICh2dGFibGUtc29ydC1i
eSB0YWJsZSkKKyAgICAgICAgKHNldGYgKHNsb3QtdmFsdWUgdGFibGUgJy1vcmlnLXNvcnQtYnkp
ICh2dGFibGUtc29ydC1ieSB0YWJsZSkpKSkKICAgICAod2hlbiBpbnNlcnQKICAgICAgICh2dGFi
bGUtaW5zZXJ0IHRhYmxlKSkKICAgICB0YWJsZSkpCkBAIC0yMjEsNiArMzkyLDEzIEBAIHZ0YWJs
ZS0tZmFjZS1jb2xvcgoKIDs7OyBJbnRlcmZhY2UgdXRpbGl0eSBmdW5jdGlvbnMuCgorKGRlZnVu
IHZ0YWJsZS1idWZmZXIgKCZvcHRpb25hbCB0YWJsZSkKKyAgIlJldHVybiB0aGUgYnVmZmVyIGFz
c29jaWF0ZWQgd2l0aCBUQUJMRS4KK0lmIFRBQkxFIGlzIG5pbCwgdXNlIHRoZSB0YWJsZSB1bmRl
ciBwb2ludC4gIFJldHVybiBuaWwgaWYgdGhlIHRhYmxlIGhhcworbm90IGJlZW4gaW5zZXJ0ZWQg
aW50byBhIGJ1ZmZlci4iCisgIChzbG90LXZhbHVlIChvciB0YWJsZSAodnRhYmxlLWN1cnJlbnQt
dGFibGUpKQorICAgICAgICAgICAgICAnLWJ1ZmZlcikpCisKIChkZWZ1biB2dGFibGUtY3VycmVu
dC10YWJsZSAoKQogICAiUmV0dXJuIHRoZSB0YWJsZSB1bmRlciBwb2ludC4iCiAgIChnZXQtdGV4
dC1wcm9wZXJ0eSAocG9pbnQpICd2dGFibGUpKQpAQCAtMjQwLDMwICs0MTgsNjYgQEAgdnRhYmxl
LWJlZ2lubmluZy1vZi10YWJsZQogICAgICAgKHBvaW50KQogICAgIChnb3RvLWNoYXIgKHBvaW50
LW1pbikpKSkKCisoZGVmdW4gdnRhYmxlLWdvdG8tYmVnaW5uaW5nLW9mLXRhYmxlICgpCisgICJN
b3ZlIHBvaW50IHRvIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBjdXJyZW50IHRhYmxlLgorSWYgdGhl
IHRhYmxlIGlzIGVtcHR5IGFuZCBpZiBgdXNlLWhlYWRlci1saW5lJyBpcyBuaWwsIHBvaW50IGlz
IG1vdmVkIHRvCit0aGUgaGVhZGVyLgorCitJZiBubyB0YWJsZSBpcyBmb3VuZCwgcG9pbnQgaXMg
bW92ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuIgorICAoaW50ZXJhY3RpdmUpCisgIChp
ZiAob3IgKHRleHQtcHJvcGVydHktc2VhcmNoLWJhY2t3YXJkICd2dGFibGUgKHZ0YWJsZS1jdXJy
ZW50LXRhYmxlKSAjJ2VxKQorICAgICAgICAgIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICd2
dGFibGUpKQorICAgICAgOzsgQWNjb21tb2RhdGUgaGVhZGVyIGluIGJ1ZmZlciB2cy4gaGVhZGVy
LWxpbmUuICBBdHRlbXB0IHRvIG1vdmUKKyAgICAgIDs7IHBvaW50IGludG8gdGhlIGZpcnN0IG9i
amVjdCdzIGxpbmUuCisgICAgICAocHJvZ24KKyAgICAgICAgKHdoZW4gKGdldC10ZXh0LXByb3Bl
cnR5IChwb2ludCkgJ3Z0YWJsZS1oZWFkZXIpCisgICAgICAgICAgKGZvcndhcmQtbGluZSkKKyAg
ICAgICAgICAodW5sZXNzICh2dGFibGUtY3VycmVudC1vYmplY3QpCisgICAgICAgICAgICAoZm9y
d2FyZC1saW5lIC0xKSkpCisgICAgICAgIChwb2ludCkpCisgICAgKGdvdG8tY2hhciAocG9pbnQt
bWluKSkpKQorCiAoZGVmdW4gdnRhYmxlLWVuZC1vZi10YWJsZSAoKQotICAiR28gdG8gdGhlIGVu
ZCBvZiB0aGUgY3VycmVudCB0YWJsZS4iCisgICJNb3ZlIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhl
IGN1cnJlbnQgdGFibGUuCitQb2ludCB3aWxsIGJlIG1vdmVkIHRvIHRoZSBjaGFyYWN0ZXIgZm9s
bG93aW5nIHRoZSB0YWJsZSwgbm90IHRoZSBsYXN0Cityb3cuICBVc2UgYHZ0YWJsZS1nb3RvLWVu
ZC1vZi10YWJsZScgdG8ga2VlcCBwb2ludCB3aXRoaW4gdGFibGUgYm91bmRzLgorCitJZiBubyB0
YWJsZSBpcyBmb3VuZCwgcG9pbnQgaXMgbW92ZWQgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiIK
ICAgKGlmICh0ZXh0LXByb3BlcnR5LXNlYXJjaC1mb3J3YXJkICd2dGFibGUgKHZ0YWJsZS1jdXJy
ZW50LXRhYmxlKSAjJ2VxKQogICAgICAgKHBvaW50KQogICAgIChnb3RvLWNoYXIgKHBvaW50LW1h
eCkpKSkKCisoZGVmdW4gdnRhYmxlLWdvdG8tZW5kLW9mLXRhYmxlICgpCisgICJHbyB0byB0aGUg
ZW5kIG9mIHRoZSBjdXJyZW50IHRhYmxlLCBrZWVwaW5nIHBvaW50IHdpdGhpbiB0YWJsZSBib3Vu
ZHMuIgorICAoaW50ZXJhY3RpdmUpCisgICh2dGFibGUtZW5kLW9mLXRhYmxlKQorICA7OyBLZWVw
IHBvaW50IHdpdGhpbiB0YWJsZSBib3VuZHMuCisgICh2dGFibGUtcHJldmlvdXMtbGluZSkKKyAg
KHZ0YWJsZS1uZXh0LWxpbmUpKQorCiAoZGVmdW4gdnRhYmxlLWdvdG8tb2JqZWN0IChvYmplY3Qp
CiAgICJHbyB0byBPQkpFQ1QgaW4gdGhlIGN1cnJlbnQgdGFibGUuCiBSZXR1cm4gdGhlIHBvc2l0
aW9uIG9mIHRoZSBvYmplY3QgaWYgZm91bmQsIGFuZCBuaWwgaWYgbm90LiIKICAgKGxldCAoKHN0
YXJ0IChwb2ludCkpKQogICAgICh2dGFibGUtYmVnaW5uaW5nLW9mLXRhYmxlKQotICAgIChzYXZl
LXJlc3RyaWN0aW9uCi0gICAgICAobmFycm93LXRvLXJlZ2lvbiAocG9pbnQpIChzYXZlLWV4Y3Vy
c2lvbiAodnRhYmxlLWVuZC1vZi10YWJsZSkpKQotICAgICAgKGlmICh0ZXh0LXByb3BlcnR5LXNl
YXJjaC1mb3J3YXJkICd2dGFibGUtb2JqZWN0IG9iamVjdCAjJ2VxKQotICAgICAgICAgIChwcm9n
bgotICAgICAgICAgICAgKGZvcndhcmQtbGluZSAtMSkKLSAgICAgICAgICAgIChwb2ludCkpCi0g
ICAgICAgIChnb3RvLWNoYXIgc3RhcnQpCi0gICAgICAgIG5pbCkpKSkKKyAgICAobGV0ICgocHJl
ZGljYXRlICh2dGFibGUtb2JqZWN0LWVxdWFsICh2dGFibGUtY3VycmVudC10YWJsZSkpKSkKKyAg
ICAgIChzYXZlLXJlc3RyaWN0aW9uCisgICAgICAgIChuYXJyb3ctdG8tcmVnaW9uIChwb2ludCkg
KHNhdmUtZXhjdXJzaW9uICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpCisgICAgICAgIChpZiAodGV4
dC1wcm9wZXJ0eS1zZWFyY2gtZm9yd2FyZCAndnRhYmxlLW9iamVjdCBvYmplY3QgcHJlZGljYXRl
KQorICAgICAgICAgICAgKHByb2duCisgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgLTEpCisg
ICAgICAgICAgICAgIChwb2ludCkpCisgICAgICAgICAgKGdvdG8tY2hhciBzdGFydCkKKyAgICAg
ICAgICBuaWwpKSkpKQoKIChkZWZ1biB2dGFibGUtZ290by10YWJsZSAodGFibGUpCiAgICJHbyB0
byBUQUJMRSBpbiB0aGUgY3VycmVudCBidWZmZXIuCi1JZiBUQUJMRSBpcyBmb3VuZCwgcmV0dXJu
IHRoZSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIHRhYmxlLgotSWYgaXQgY2FuJ3QgYmUg
Zm91bmQsIHJldHVybiBuaWwgYW5kIGRvbid0IG1vdmUgcG9pbnQuIgorSWYgVEFCTEUgaXMgZm91
bmQsIHJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoZSB0YWJsZS4gIElmIGl0
CitjYW4ndCBiZSBmb3VuZCwgcmV0dXJuIG5pbCBhbmQgZG9uJ3QgbW92ZSBwb2ludC4KKworSWYg
YDp1c2UtaGVhZGVyLWxpbmUnIGlzIG5pbCwgdGhlIGhlYWRlciBsaW5lIGlzIHBhcnQgb2YgdGhl
IGJ1ZmZlciBhbmQKK3BvaW50IHdpbGwgYmUgbW92ZWQgdG8gdGhlIGhlYWRlci4gIFVzZSBgdnRh
YmxlLWdvdG8tYmVnaW5uaW5nLW9mLXRhYmxlJwordG8gbW92ZSBwb2ludCB0byB0aGUgZmlyc3Qg
ZGF0YSBsaW5lIG9mIHRoZSB0YWJsZSwgaWYgZGF0YSBleGlzdC4iCiAgIChsZXQgKChzdGFydCAo
cG9pbnQpKSkKICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgIChpZi1sZXQqICgobWF0
Y2ggKHRleHQtcHJvcGVydHktc2VhcmNoLWZvcndhcmQgJ3Z0YWJsZSB0YWJsZSB0KSkpCkBAIC0y
NzEsODQgKzQ4NSwyNTkgQEAgdnRhYmxlLWdvdG8tdGFibGUKICAgICAgIChnb3RvLWNoYXIgc3Rh
cnQpCiAgICAgICBuaWwpKSkKCi0oZGVmdW4gdnRhYmxlLWdvdG8tY29sdW1uIChjb2x1bW4pCi0g
ICJHbyB0byBDT0xVTU4gb24gdGhlIGN1cnJlbnQgbGluZS4iCisoZGVmdW4gdnRhYmxlLS1idWZm
ZXItdGFibGVzICgpCisgICJSZXR1cm4gYSBsaXN0IG9mIHZ0YWJsZXMgaW4gdGhlIGN1cnJlbnQg
YnVmZmVyLgorVGhlIGxpc3QgaXMgcmV0dXJuZWQgaW4gdGhlIG9yZGVyIHRhYmxlcyB3ZXJlIGZv
dW5kLgorSWYgbm8gdGFibGVzIGFyZSBmb3VuZCwgcmV0dXJuIG5pbC4iCisgIChsZXQgKHZ0YWJs
ZXMpCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQor
ICAgICAgKHdoaWxlLWxldCAoKG1hdGNoICh0ZXh0LXByb3BlcnR5LXNlYXJjaC1mb3J3YXJkICd2
dGFibGUpKSkKKyAgICAgICAgKHB1c2ggKHByb3AtbWF0Y2gtdmFsdWUgbWF0Y2gpIHZ0YWJsZXMp
KSkKKyAgICAobnJldmVyc2UgdnRhYmxlcykpKQorCisoZGVmdW4gdnRhYmxlLS1tYXliZS1zZXQt
d2luZG93LXBvaW50ICgmb3B0aW9uYWwgcG9zKQorICAoc2V0cSBwb3MgKG9yIHBvcyAocG9pbnQp
KSkKKyAgKHVubGVzcyAoZXEgKHNlbGVjdGVkLXdpbmRvdykgKGdldC1idWZmZXItd2luZG93IChj
dXJyZW50LWJ1ZmZlcikpKQorICAgIChzZXQtd2luZG93LXBvaW50IChnZXQtYnVmZmVyLXdpbmRv
dyAoY3VycmVudC1idWZmZXIpKSBwb3MpKQorICBwb3MpCisKKyhkZWZ1biB2dGFibGUtZ290by1j
b2x1bW4gKGNvbHVtbiAmb3B0aW9uYWwgbWF5YmUtc2V0LXdpbmRvdy1wb2ludCkKKyAgIkdvIHRv
IENPTFVNTiBvbiB0aGUgY3VycmVudCBsaW5lLgorV2luZG93IHBvaW50IG1pZ2h0IGJlIGNoYW5n
ZWQgaWYgTUFZQkUtU0VULVdJTkRPVy1QT0lOVCBpcyBub24tbmlsLiIKICAgKGJlZ2lubmluZy1v
Zi1saW5lKQogICAoaWYtbGV0KiAoKG1hdGNoICh0ZXh0LXByb3BlcnR5LXNlYXJjaC1mb3J3YXJk
ICd2dGFibGUtY29sdW1uIGNvbHVtbiB0KSkpCiAgICAgICAoZ290by1jaGFyIChwcm9wLW1hdGNo
LWJlZ2lubmluZyBtYXRjaCkpCi0gICAgKGVuZC1vZi1saW5lKSkpCisgICAgKGVuZC1vZi1saW5l
KSkKKyAgKHdoZW4gbWF5YmUtc2V0LXdpbmRvdy1wb2ludAorICAgICh2dGFibGUtLW1heWJlLXNl
dC13aW5kb3ctcG9pbnQpKQorICAocG9pbnQpKQorCisoZGVmdW4gdnRhYmxlLWJlZ2lubmluZy1v
Zi10YWJsZS1saW5lLW51bWJlciAoKQorICAiQWJzb2x1dGUgYnVmZmVyIGxpbmUgbnVtYmVyIG9m
IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCB0YWJsZS4iCisgIChzYXZlLWV4Y3Vyc2lvbgorICAg
IChzYXZlLXJlc3RyaWN0aW9uCisgICAgICAod2lkZW4pCisgICAgICAobGluZS1udW1iZXItYXQt
cG9zICh2dGFibGUtZ290by1iZWdpbm5pbmctb2YtdGFibGUpKSkpKQoKLShkZWZ1biB2dGFibGUt
dXBkYXRlLW9iamVjdCAodGFibGUgb2JqZWN0ICZvcHRpb25hbCBvbGQtb2JqZWN0KQorKGRlZnVu
IHZ0YWJsZS1lbmQtb2YtdGFibGUtbGluZS1udW1iZXIgKCkKKyAgIkFic29sdXRlIGJ1ZmZlciBs
aW5lIG51bWJlciBvZiB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHRhYmxlLiIKKyAgKHNhdmUtZXhj
dXJzaW9uCisgICAgKHNhdmUtcmVzdHJpY3Rpb24KKyAgICAgICh3aWRlbikKKyAgICAgIChsaW5l
LW51bWJlci1hdC1wb3MgKHZ0YWJsZS1lbmQtb2YtdGFibGUpKSkpKQorCisoZGVmdW4gdnRhYmxl
LW9iamVjdC1saW5lLW51bWJlciAob2JqZWN0KQorICAiQWJzb2x1dGUgYnVmZmVyIGxpbmUgbnVt
YmVyIG9mIE9CSkVDVCBvciBuaWwsIGlmIGl0IGlzIG5vdCBpbiB0aGUgdGFibGUuIgorICAoc2F2
ZS1leGN1cnNpb24KKyAgICAoc2F2ZS1yZXN0cmljdGlvbgorICAgICAgKHdpZGVuKQorICAgICAg
KHdoZW4gKHZ0YWJsZS1nb3RvLW9iamVjdCBvYmplY3QpCisgICAgICAgIChsaW5lLW51bWJlci1h
dC1wb3MpKSkpKQorCisoZGVmdW4gdnRhYmxlLW9iamVjdC1saW5lLWluZGV4IChvYmplY3QpCisg
ICJMaW5lIG51bWJlciBvZiBPQkpFQ1Qgb3IgbmlsLCBpZiBpdCBpcyBub3QgaW4gdGhlIHRhYmxl
LgorVGhlIGluZGV4IGlzIE9CSkVDVCdzIGxpbmUgbnVtYmVyIHJlbGF0aXZlIHRvIHRoZSBzdGFy
dCBvZiB0aGUgdGFibGUuCitJdCBpcyAwLWJhc2VkLiIKKyAgKHNhdmUtZXhjdXJzaW9uCisgICAg
KHNhdmUtcmVzdHJpY3Rpb24KKyAgICAgICh3aWRlbikKKyAgICAgICh3aGVuICh2dGFibGUtZ290
by1vYmplY3Qgb2JqZWN0KQorICAgICAgICAoLSAobGluZS1udW1iZXItYXQtcG9zKQorICAgICAg
ICAgICAodnRhYmxlLWJlZ2lubmluZy1vZi10YWJsZS1saW5lLW51bWJlcikpKSkpKQorCisoZGVm
dW4gdnRhYmxlLS1wdWxzZSAodGFibGUpCisgICJQdWxzZSB0aGUgVEFCTEUgbGluZSB3aGVyZSBw
b2ludCBpcy4iCisgIChmdW5jYWxsICh2dGFibGUtcHVsc2UtZnVuY3Rpb24gdGFibGUpKSkKKwor
KGRlZnVuIHZ0YWJsZS11cGRhdGUtb2JqZWN0ICh0YWJsZSBvYmplY3QKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9sZC1vYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c29ydC1hZnRlcikKICAgIlVwZGF0ZSBPQkpFQ1QncyByZXByZXNlbnRhdGlvbiBpbiBUQUJMRS4K
IElmIE9MRC1PQkpFQ1QgaXMgbm9uLW5pbCwgcmVwbGFjZSBPTEQtT0JKRUNUIHdpdGggT0JKRUNU
IGFuZCBkaXNwbGF5IGl0LgotSW4gZWl0aGVyIGNhc2UsIGlmIHRoZSBleGlzdGluZyBvYmplY3Qg
aXMgbm90IGZvdW5kIGluIHRoZSB0YWJsZSAoYmVpbmcKLWNvbXBhcmVkIHdpdGggYGVxdWFsJyks
IHNpZ25hbCBhbiBlcnJvci4gIE5vdGUgYSBsaW1pdGF0aW9uOiBpZiBUQUJMRSdzCi1idWZmZXIg
aXMgbm90IGluIGEgdmlzaWJsZSB3aW5kb3csIG9yIGlmIGl0cyB3aW5kb3cgaGFzIGNoYW5nZWQg
d2lkdGgKLXNpbmNlIGl0IHdhcyB1cGRhdGVkLCB1cGRhdGluZyB0aGUgVEFCTEUgaXMgbm90IHBv
c3NpYmxlLCBhbmQgYW4gZXJyb3IKLWlzIHNpZ25hbGVkLiIKLSAgKHVubGVzcyBvbGQtb2JqZWN0
Ci0gICAgKHNldHEgb2xkLW9iamVjdCBvYmplY3QpKQotICAobGV0KiAoKG9iamVjdHMgKHZ0YWJs
ZS1vYmplY3RzIHRhYmxlKSkKLSAgICAgICAgIChpbmhpYml0LXJlYWQtb25seSB0KSkKLSAgICA7
OyBGaXJzdCByZXBsYWNlIHRoZSBvYmplY3QgaW4gdGhlIG9iamVjdCBzdG9yYWdlLgotICAgIChp
ZiAoZXEgb2xkLW9iamVjdCAoY2FyIG9iamVjdHMpKQotICAgICAgICA7OyBJdCdzIGF0IHRoZSBo
ZWFkLCBzbyByZXBsYWNlIGl0IHRoZXJlLgotICAgICAgICAoc2V0ZiAodnRhYmxlLW9iamVjdHMg
dGFibGUpCi0gICAgICAgICAgICAgIChjb25zIG9iamVjdCAoY2RyIG9iamVjdHMpKSkKLSAgICAg
IDs7IE90aGVyd2lzZSBzcGxpY2UgaW50byB0aGUgbGlzdC4KLSAgICAgICh3aGlsZSAoYW5kIChj
ZHIgb2JqZWN0cykKLSAgICAgICAgICAgICAgICAgIChub3QgKGVxIChjYWRyIG9iamVjdHMpIG9s
ZC1vYmplY3QpKSkKLSAgICAgICAgKHNldHEgb2JqZWN0cyAoY2RyIG9iamVjdHMpKSkKLSAgICAg
ICh1bmxlc3Mgb2JqZWN0cwotICAgICAgICAoZXJyb3IgIkNhbid0IGZpbmQgdGhlIG9sZCBvYmpl
Y3QiKSkKLSAgICAgIChzZXRjYXIgKGNkciBvYmplY3RzKSBvYmplY3QpKQotICAgIDs7IFRoZW4g
dXBkYXRlIHRoZSBjYWNoZS4uLgotICAgIDs7IEZJWE1FOiBJZiB0aGUgdGFibGUncyBidWZmZXIg
aGFzIG5vIHZpc2libGUgd2luZG93LCBvciBpZiBpdHMKLSAgICA7OyB3aWR0aCBoYXMgY2hhbmdl
ZCBzaW5jZSB0aGUgdGFibGUgd2FzIHVwZGF0ZWQsIHRoZSBjYWNoZSBrZXkgd2lsbAotICAgIDs7
IG5vdCBtYXRjaCBhbmQgdGhlIG9iamVjdCBjYW4ndCBiZSB1cGRhdGVkLiAgKEJ1ZyAjNjk4Mzcp
LgotICAgIChpZi1sZXQqICgobGluZS1udW1iZXIgKHNlcS1wb3NpdGlvbiAoY2FyICh2dGFibGUt
LWNhY2hlIHRhYmxlKSkgb2xkLW9iamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobGFtYmRhIChhIGIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGVxdWFsIChjYXIgYSkgYikpKSkKLSAgICAgICAgICAgICAgKGxpbmUgKGVs
dCAoY2FyICh2dGFibGUtLWNhY2hlIHRhYmxlKSkgbGluZS1udW1iZXIpKSkKLSAgICAgICAgKHBy
b2duCi0gICAgICAgICAgKHNldGNhciBsaW5lIG9iamVjdCkKLSAgICAgICAgICAoc2V0Y2RyIGxp
bmUgKHZ0YWJsZS0tY29tcHV0ZS1jYWNoZWQtbGluZSB0YWJsZSBvYmplY3QpKQotICAgICAgICAg
IDs7IC4uLiBhbmQgcmVkaXNwbGF5IHRoZSBsaW5lIGluIHF1ZXN0aW9uLgotICAgICAgICAgIChz
YXZlLWV4Y3Vyc2lvbgotICAgICAgICAgICAgKHZ0YWJsZS1nb3RvLW9iamVjdCBvbGQtb2JqZWN0
KQotICAgICAgICAgICAgKGxldCAoKGtleW1hcCAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAn
a2V5bWFwKSkKLSAgICAgICAgICAgICAgICAgIChzdGFydCAocG9pbnQpKSkKLSAgICAgICAgICAg
ICAgKGRlbGV0ZS1saW5lKQotICAgICAgICAgICAgICAodnRhYmxlLS1pbnNlcnQtbGluZSB0YWJs
ZSBsaW5lIGxpbmUtbnVtYmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChu
dGggMSAodnRhYmxlLS1jYWNoZSB0YWJsZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICh2dGFibGUtLXNwYWNlciB0YWJsZSkpCi0gICAgICAgICAgICAgIChhZGQtdGV4dC1w
cm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkgKGxpc3QgJ2tleW1hcCBrZXltYXAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlIHRhYmxl
KSkpKQotICAgICAgICAgIDs7IFdlIG1heSBoYXZlIGluc2VydGVkIGEgbm9uLW51bWVyaWNhbCB2
YWx1ZSBpbnRvIGEgcHJldmlvdXNseQotICAgICAgICAgIDs7IGFsbC1udW1lcmljYWwgdGFibGUs
IHNvIHJlY29tcHV0ZS4KLSAgICAgICAgICAodnRhYmxlLS1yZWNvbXB1dGUtbnVtZXJpY2FsIHRh
YmxlIChjZHIgbGluZSkpKQotICAgICAgKGVycm9yICJDYW4ndCBmaW5kIGNhY2hlZCBvYmplY3Qg
aW4gdnRhYmxlIikpKSkKLQotKGRlZnVuIHZ0YWJsZS1yZW1vdmUtb2JqZWN0ICh0YWJsZSBvYmpl
Y3QpCitJbiBlaXRoZXIgY2FzZSwgaWYgdGhlIGV4aXN0aW5nIG9iamVjdCBpcyBub3QgZm91bmQg
aW4gdGhlIHRhYmxlLCBzaWduYWwKK2FuIGVycm9yLgorCitJZiBTT1JULUFGVEVSIGlzIG5vbi1u
aWwsIHNvcnQgYW5kIHJlZGlzcGxheSB0aGUgdGFibGUgYWZ0ZXIgdGhlIG9iamVjdAoraXMgdXBk
YXRlZC4iCisgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQorICAg
ICh1bmxlc3Mgb2xkLW9iamVjdAorICAgICAgKHNldHEgb2xkLW9iamVjdCBvYmplY3QpKQorICAg
ICh1bmxlc3MgKGFuZCAobm90IChmdW5jYWxsICh2dGFibGUtb2JqZWN0LWVxdWFsIHRhYmxlKSBv
bGQtb2JqZWN0IG9iamVjdCkpCisgICAgICAgICAgICAgICAgICh2dGFibGUtLWhhbmRsZS1kdXBs
aWNhdGUtb2JqZWN0IHRhYmxlIG9iamVjdCkpCisgICAgICAobGV0ICgob2JqZWN0cyAodnRhYmxl
LW9iamVjdHMgdGFibGUpKQorICAgICAgICAgICAgKGNhY2hlICh2dGFibGUtLWVuc3VyZS1jYWNo
ZSB0YWJsZSkpCisgICAgICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkpCisgICAgICAgIDs7
IEZpcnN0IHJlcGxhY2UgdGhlIG9iamVjdCBpbiB0aGUgb2JqZWN0IHN0b3JhZ2UuCisgICAgICAg
IChpZiAoZnVuY2FsbCAodnRhYmxlLW9iamVjdC1lcXVhbCB0YWJsZSkgb2xkLW9iamVjdCAoY2Fy
IG9iamVjdHMpKQorICAgICAgICAgICAgOzsgSXQncyBhdCB0aGUgaGVhZCwgc28gcmVwbGFjZSBp
dCB0aGVyZS4KKyAgICAgICAgICAgIChzZXRmICh2dGFibGUtb2JqZWN0cyB0YWJsZSkKKyAgICAg
ICAgICAgICAgICAgIChjb25zIG9iamVjdCAoY2RyIG9iamVjdHMpKSkKKyAgICAgICAgICA7OyBP
dGhlcndpc2Ugc3BsaWNlIGludG8gdGhlIGxpc3QuCisgICAgICAgICAgKHdoaWxlIChhbmQgKGNk
ciBvYmplY3RzKQorICAgICAgICAgICAgICAgICAgICAgIChub3QgKGZ1bmNhbGwgKHZ0YWJsZS1v
YmplY3QtZXF1YWwgdGFibGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Y2FkciBvYmplY3RzKSBvbGQtb2JqZWN0KSkpCisgICAgICAgICAgICAoc2V0cSBvYmplY3RzIChj
ZHIgb2JqZWN0cykpKQorICAgICAgICAgICh1bmxlc3MgKGFuZCBvYmplY3RzCisgICAgICAgICAg
ICAgICAgICAgICAgIChmdW5jYWxsICh2dGFibGUtb2JqZWN0LWVxdWFsIHRhYmxlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FkciBvYmplY3RzKSBvbGQtb2JqZWN0KSkKKyAg
ICAgICAgICAgIChlcnJvciAiQ2FuJ3QgZmluZCB0aGUgb2xkIG9iamVjdCAodnRhYmxlIGAlcycp
IgorICAgICAgICAgICAgICAgICAgICh2dGFibGUtbmFtZSB0YWJsZSkpKQorICAgICAgICAgIChz
ZXRjYXIgKGNkciBvYmplY3RzKSBvYmplY3QpKQorICAgICAgICA7OyBUaGVuIHVwZGF0ZSB0aGUg
Y2FjaGUuLi4KKyAgICAgICAgKGlmLWxldCogKChsaW5lLW51bWJlciAoc2VxLXBvc2l0aW9uCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXNzb2Mgb2xkLW9iamVjdAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY2FjaGUtbGluZXMg
Y2FjaGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLW9i
amVjdC1lcXVhbCB0YWJsZSkpKSkKKyAgICAgICAgICAgICAgICAgIChsaW5lIChlbHQgKHZ0YWJs
ZS0tY2FjaGUtbGluZXMgY2FjaGUpIGxpbmUtbnVtYmVyKSkpCisgICAgICAgICAgICAocHJvZ24K
KyAgICAgICAgICAgICAgKHNldGNhciBsaW5lIG9iamVjdCkKKyAgICAgICAgICAgICAgKHNldGNk
ciBsaW5lICh2dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUgdGFibGUgb2JqZWN0KSkKKyAgICAg
ICAgICAgICAgOzsgLi4uYW5kIHJlZGlzcGxheSB0aGUgbGluZSBpbiBxdWVzdGlvbi4KKyAgICAg
ICAgICAgICAgOzsKKyAgICAgICAgICAgICAgOzsgS2VlcCBwb2ludCBzdGFibGUgaWYgdGFibGUg
aXMgdGhlIGN1cnJlbnQgdGFibGUgYW5kIHRoZQorICAgICAgICAgICAgICA7OyBvYmplY3QgYmVp
bmcgdXBkYXRlZCBpcyB0aGUgY3VycmVudCBvYmplY3Q7IGkuZS4sIHdoZXJlCisgICAgICAgICAg
ICAgIDs7IHBvaW50IGlzLgorICAgICAgICAgICAgICAobGV0ICgob3JpZy1jb2x1bW4KKyAgICAg
ICAgICAgICAgICAgICAgICh3aGVuIChhbmQgKGVxIHRhYmxlICh2dGFibGUtY3VycmVudC10YWJs
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcSBvbGQtb2JqZWN0ICh2dGFi
bGUtY3VycmVudC1vYmplY3QpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1jdXJy
ZW50LWNvbHVtbikpKSkKKyAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgICAg
ICAgICAgICAgIDs7IElmIHBvaW50IGlzIG5vdCBhbHJlYWR5IGluIHRoZSB0YWJsZS4KKyAgICAg
ICAgICAgICAgICAgICh1bmxlc3Mgb3JpZy1jb2x1bW4KKyAgICAgICAgICAgICAgICAgICAgKHZ0
YWJsZS1nb3RvLXRhYmxlIHRhYmxlKSkKKyAgICAgICAgICAgICAgICAgICh1bmxlc3MgKHZ0YWJs
ZS1nb3RvLW9iamVjdCBvbGQtb2JqZWN0KQorICAgICAgICAgICAgICAgICAgICAoZXJyb3IgIkNh
bid0IGZpbmQgb2xkLW9iamVjdCAodnRhYmxlIGAlcycpIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHZ0YWJsZS1uYW1lIHRhYmxlKSkpCisgICAgICAgICAgICAgICAgICAoZGVsZXRlLWxp
bmUpCisgICAgICAgICAgICAgICAgICAodnRhYmxlLS1pbnNlcnQtbGluZSB0YWJsZSBsaW5lIGxp
bmUtbnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxl
LS1jYWNoZS13aWR0aHMgY2FjaGUpKSkKKyAgICAgICAgICAgICAgICAod2hlbiBvcmlnLWNvbHVt
bgorICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1nb3RvLW9iamVjdCBvYmplY3QpCisgICAgICAg
ICAgICAgICAgICAodnRhYmxlLWdvdG8tY29sdW1uIG9yaWctY29sdW1uICdtYXliZS1zZXQtd2lu
ZG93LXBvaW50KSkpCisgICAgICAgICAgICAgIDs7IFdlIG1heSBoYXZlIGluc2VydGVkIGEgbm9u
LW51bWVyaWNhbCB2YWx1ZSBpbnRvIGEgcHJldmlvdXNseQorICAgICAgICAgICAgICA7OyBhbGwt
bnVtZXJpY2FsIHRhYmxlLCBzbyByZWNvbXB1dGUuCisgICAgICAgICAgICAgICh2dGFibGUtLW1h
eWJlLXJlY29tcHV0ZS1udW1lcmljYWwtZnJvbS1jYWNoZS1saW5lIHRhYmxlIChjZHIgbGluZSkp
CisgICAgICAgICAgICAgIDs7IENhY2hlIGNvaGVyZW5jZS4KKyAgICAgICAgICAgICAgKHZ0YWJs
ZS0tdGljay1vYmplY3RzIHRhYmxlKQorICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS10aWNr
LXN5bmMgdGFibGUgY2FjaGUpCisgICAgICAgICAgICAgICh3aGVuIHNvcnQtYWZ0ZXIKKyAgICAg
ICAgICAgICAgICA7OyBSZXZlcnQgZG9lcyByZWRpc3BsYXksIGFuZCB3ZSBjYWxsIGl0IG9ubHkg
aWYgc29ydAorICAgICAgICAgICAgICAgIDs7IGFjdHVhbGx5IHNvcnRlZC4KKyAgICAgICAgICAg
ICAgICAod2hlbiAodnRhYmxlLS1zb3J0IHRhYmxlIGNhY2hlKQorICAgICAgICAgICAgICAgICAg
KHZ0YWJsZS1yZXZlcnQgdGFibGUpKSkKKyAgICAgICAgICAgICAgKHdoZW4gKG1lbXEgJ3VwZGF0
ZSAodnRhYmxlLXB1bHNlIHRhYmxlKSkKKyAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24K
KyAgICAgICAgICAgICAgICAgICh1bmxlc3MgKGVxIHRhYmxlICh2dGFibGUtY3VycmVudC10YWJs
ZSkpCisgICAgICAgICAgICAgICAgICAgICh2dGFibGUtZ290by10YWJsZSB0YWJsZSkpCisgICAg
ICAgICAgICAgICAgICAodnRhYmxlLWdvdG8tb2JqZWN0IG9iamVjdCkKKyAgICAgICAgICAgICAg
ICAgICh2dGFibGUtLXB1bHNlIHRhYmxlKSkpKQorICAgICAgICAgIDs7IEF0IHRoaXMgcG9pbnQs
IHRoZSBvYmplY3Qgd2FzIHVwZGF0ZWQgaW4gb2JqZWN0cywgYnV0IG5vdCB0aGUKKyAgICAgICAg
ICA7OyBjYWNoZSwgd2hpY2ggd2lsbCBiZSBjb25zaWRlcmVkIHN0YWxlLgorICAgICAgICAgIChl
cnJvciAiQ2FuJ3QgZmluZCBjYWNoZWQgb2JqZWN0ICh2dGFibGUgYCVzJykiCisgICAgICAgICAg
ICAgICAgICh2dGFibGUtbmFtZSB0YWJsZSkpKSkpKSkKKworKGRlZnVuIHZ0YWJsZS1yZW1vdmUt
b2JqZWN0ICh0YWJsZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jm9wdGlvbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGliaXQtcm93
LXJlZGlzcGxheSkKICAgIlJlbW92ZSBPQkpFQ1QgZnJvbSBUQUJMRS4KLVRoaXMgd2lsbCBhbHNv
IHJlbW92ZSB0aGUgZGlzcGxheWVkIGxpbmUuIgotICA7OyBGaXJzdCByZW1vdmUgZnJvbSB0aGUg
b2JqZWN0cy4KLSAgKHNldGYgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSAoZGVscSBvYmplY3QgKHZ0
YWJsZS1vYmplY3RzIHRhYmxlKSkpCi0gIDs7IFRoZW4gYWRqdXN0IHRoZSBjYWNoZSBhbmQgZGlz
cGxheS4KLSAgKGxldCAoKGNhY2hlICh2dGFibGUtLWNhY2hlIHRhYmxlKSkKLSAgICAgICAgKGlu
aGliaXQtcmVhZC1vbmx5IHQpKQotICAgIChzZXRjYXIgY2FjaGUgKGRlbHEgKGFzc3Egb2JqZWN0
IChjYXIgY2FjaGUpKSAoY2FyIGNhY2hlKSkpCi0gICAgKHNhdmUtZXhjdXJzaW9uCi0gICAgICAo
dnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCi0gICAgICAod2hlbiAodnRhYmxlLWdvdG8tb2JqZWN0
IG9iamVjdCkKLSAgICAgICAgKGRlbGV0ZS1saW5lKSkpKSkKK1RoaXMgd2lsbCBhbHNvIHJlbW92
ZSB0aGUgZGlzcGxheWVkIGxpbmUsIGFuZCB0aGUgb2JqZWN0IHdpbGwgYmUgdW5tYXJrZWQuCisK
K0lmIHRoZSBvYmplY3QgaXMgbm90IGZvdW5kIGluIHRoZSB0YWJsZSwgc2lnbmFsIGFuZCBlcnJv
ci4KKworUm93cyBiZWxvdyB0aGUgcmVtb3ZlZCBvYmplY3QgYXJlIHJlZGlzcGxheWVkIHRvIHVw
ZGF0ZSByb3cgY29sb3JzLCBpZgorcHJlc2VudC4gIElmIElOSElCSVQtUk9XLVJFRElTUExBWSBp
cyBub24tbmlsLCB0aGlzIHJlZGlzcGxheSBpcworaW5oaWJpdGVkLiAgVGhpcyBpcyB1c2VmdWwg
Zm9yIGJhdGNoIHVwZGF0ZXMuICBDYWxsIGB2dGFibGUtcmV2ZXJ0JyBvcgorYHZ0YWJsZS1yZWRp
c3BsYXktcmFuZ2UnIGF0IHRoZSBlbmQgb2YgYSBiYXRjaCB0byB1cGRhdGUgcm93IGNvbG9ycy4i
CisgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQorICAgIChsZXQg
KChjYWNoZSAodnRhYmxlLS1lbnN1cmUtY2FjaGUgdGFibGUpKQorICAgICAgICAgIChpbmhpYml0
LXJlYWQtb25seSB0KSkKKyAgICAgICh1bmxlc3MgKHNlcS1jb250YWlucy1wICh2dGFibGUtb2Jq
ZWN0cyB0YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1vYmplY3QtZXF1YWwgdGFibGUpKQorICAg
ICAgICAoZXJyb3IgIkNhbid0IGZpbmQgdGhlIG9iamVjdCB0byByZW1vdmUgKHZ0YWJsZSBgJXMn
KSIKKyAgICAgICAgICAgICAgICh2dGFibGUtbmFtZSB0YWJsZSkpKQorICAgICAgOzsgRmlyc3Qg
cmVtb3ZlIGZyb20gdGhlIG9iamVjdHMuCisgICAgICAoc2V0ZiAodnRhYmxlLW9iamVjdHMgdGFi
bGUpIChzZXEtcmVtb3ZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFt
YmRhIChlbHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxs
ICh2dGFibGUtb2JqZWN0LWVxdWFsIHRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHQgb2JqZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh2dGFibGUtb2JqZWN0cyB0YWJsZSkpKQorICAgICAgOzsgVGhlbiB1bm1h
cmsgdGhlIG9iamVjdC4KKyAgICAgICh2dGFibGUtLXVubWFyay1vYmplY3QgdGFibGUgb2JqZWN0
ICdpbmhpYml0LXVwZGF0ZSkKKyAgICAgIDs7IFRoZW4gYWRqdXN0IHRoZSBjYWNoZSBhbmQgZGlz
cGxheS4KKyAgICAgIChpZi1sZXQqICgob2xkLWxpbmUgKGFzc29jIG9iamVjdAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLW9iamVjdC1lcXVhbCB0YWJsZSkp
KSkKKyAgICAgICAgICAocHJvZ24KKyAgICAgICAgICAgIDs7IFdlIHNhdmUgdGhlIGN1cnJlbnQg
Y29sdW1uIGlmIHRhYmxlIGlzIHRoZSBjdXJyZW50IHRhYmxlCisgICAgICAgICAgICA7OyBhbmQg
dGhlIG9iamVjdCBiZWluZyByZW1vdmVkIGlzIHRoZSBjdXJyZW50IG9iamVjdDsgaS5lLiwKKyAg
ICAgICAgICAgIDs7IHdoZXJlIHBvaW50IGlzLiAgZGVsZXRlLXJlZ2lvbiwgaWYgcG9pbnQgaXMg
aW4gdGhlCisgICAgICAgICAgICA7OyBkZWxldGVkIHJlZ2lvbiwgd2lsbCBmb3JjZSBwb2ludCB0
byBwb2ludC1taW4gaWYgdGhlCisgICAgICAgICAgICA7OyByZWdpb24gcG9pbnQgaXMgaW4gaXMg
ZGVsZXRlZC4KKyAgICAgICAgICAgIChsZXQgKChvcmlnLWNvbHVtbgorICAgICAgICAgICAgICAg
ICAgICh3aGVuIChhbmQgKGVxIHRhYmxlICh2dGFibGUtY3VycmVudC10YWJsZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoZXEgb2JqZWN0ICh2dGFibGUtY3VycmVudC1vYmplY3Qp
KSkKKyAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtY3VycmVudC1jb2x1bW4pKSkKKyAgICAg
ICAgICAgICAgICAgIGxpbmUtaW5kZXgpCisgICAgICAgICAgICAgIChzZXRjYXIgY2FjaGUgKGRl
bHEgb2xkLWxpbmUgKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpKSkKKyAgICAgICAgICAgICAg
KHNhdmUtZXhjdXJzaW9uCisgICAgICAgICAgICAgICAgOzsgSWYgcG9pbnQgaXMgbm90IGFscmVh
ZHkgaW4gdGhlIHRhYmxlLgorICAgICAgICAgICAgICAgICh1bmxlc3Mgb3JpZy1jb2x1bW4KKyAg
ICAgICAgICAgICAgICAgICh2dGFibGUtZ290by10YWJsZSB0YWJsZSkpCisgICAgICAgICAgICAg
ICAgKHdoZW4gKHZ0YWJsZS1nb3RvLW9iamVjdCBvYmplY3QpCisgICAgICAgICAgICAgICAgICAo
c2V0cSBsaW5lLWluZGV4ICgtIChsaW5lLW51bWJlci1hdC1wb3MgKHBvaW50KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1iZWdpbm5pbmctb2YtdGFibGUt
bGluZS1udW1iZXIpKSkKKyAgICAgICAgICAgICAgICAgIChkZWxldGUtbGluZSkKKyAgICAgICAg
ICAgICAgICAgICh3aGVuIChtZW1xICdyZW1vdmUgKHZ0YWJsZS1wdWxzZSB0YWJsZSkpCisgICAg
ICAgICAgICAgICAgICAgICh3aGVuIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChmb3J3YXJkLWxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlm
IChlcSB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5l
IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxIHRhYmxlICh2dGFibGUtY3Vy
cmVudC10YWJsZSkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lKSkKKyAg
ICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tcHVsc2UgdGFibGUpKSkpCisgICAgICAgICAgICAg
IDs7IENhY2hlIGNvaGVyZW5jZS4KKyAgICAgICAgICAgICAgKHZ0YWJsZS0tdGljay1vYmplY3Rz
IHRhYmxlKQorICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS10aWNrLXN5bmMgdGFibGUgY2Fj
aGUpCisgICAgICAgICAgICAgIDs7IE5vdyByZWRpc3BsYXkgdGhlIGxpbmVzIGJlbG93IGlmIHRo
ZXJlIGFyZSByb3cvY29sdW1uIGNvbG9ycy4KKyAgICAgICAgICAgICAgKHVubGVzcyBpbmhpYml0
LXJvdy1yZWRpc3BsYXkKKyAgICAgICAgICAgICAgICAodnRhYmxlLS1tYXliZS1yZWRpc3BsYXkt
cmFuZ2UgdGFibGUgbGluZS1pbmRleCBuaWwgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2luaGliaXQtcmVzdG9yZS1wb2ludCkpCisgICAgICAg
ICAgICAgIDs7IFdlIG1heSBoYXZlIHJlbW92ZWQgYSBub24tbnVtZXJpY2FsIHZhbHVlIGZyb20g
YSB0YWJsZSB0aGF0IGlzCisgICAgICAgICAgICAgIDs7IG5vdyBhbGwtbnVtZXJpY2FsLCBzbyBy
ZWNvbXB1dGUuCisgICAgICAgICAgICAgICh2dGFibGUtLW1heWJlLXJlY29tcHV0ZS1udW1lcmlj
YWwtZnJvbS1jYWNoZS1saW5lIHRhYmxlIChjZHIgb2xkLWxpbmUpKQorICAgICAgICAgICAgICA7
OyBvcmlnLXBvaW50IGlzIG5vbi1uaWwgaWYgdGhpcyB0YWJsZSB3YXMKKyAgICAgICAgICAgICAg
OzsgdnRhYmxlLWN1cnJlbnQtdGFibGUuCisgICAgICAgICAgICAgICh3aGVuIG9yaWctY29sdW1u
CisgICAgICAgICAgICAgICAgOzsgS2VlcCBwb2ludCB3aXRoaW4gdGFibGUgYm91bmRzIGluIGNh
c2UgcG9pbnQgbW92ZWQKKyAgICAgICAgICAgICAgICA7OyBiZXlvbmQgdGhlIGN1cnJlbnQgdGFi
bGUgcmVtb3ZpbmcgdGhlIGZpbmFsIHJvdy4KKyAgICAgICAgICAgICAgICAodW5sZXNzIChlcSB0
YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKQorICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1n
b3RvLXRhYmxlIHRhYmxlKQorICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1nb3RvLWVuZC1vZi10
YWJsZSkpCisgICAgICAgICAgICAgICAgKHVubGVzcyAodnRhYmxlLWN1cnJlbnQtb2JqZWN0KQor
ICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1wcmV2aW91cy1saW5lKSkKKyAgICAgICAgICAgICAg
ICAodnRhYmxlLWdvdG8tY29sdW1uIG9yaWctY29sdW1uICdtYXliZS1zZXQtd2luZG93LXBvaW50
KSkpKQorICAgICAgICA7OyBBdCB0aGlzIHBvaW50LCB0aGUgb2JqZWN0IHdhcyByZW1vdmVkIGZy
b20gb2JqZWN0cywgYnV0IG5vdAorICAgICAgICA7OyB0aGUgY2FjaGUsIHdoaWNoIHdpbGwgYmUg
Y29uc2lkZXJlZCBzdGFsZS4KKyAgICAgICAgKGVycm9yICJDYW4ndCBmaW5kIGNhY2hlZCBvYmpl
Y3QgKHZ0YWJsZSBgJXMnKSIKKyAgICAgICAgICAgICAgICh2dGFibGUtbmFtZSB0YWJsZSkpKSkp
KQoKIDs7IEZJWE1FOiBUaGUgZmFjdCB0aGF0IHRoZSBgbG9jYXRpb24nIGFyZ3VtZW50IG9mCiA7
OyBgdnRhYmxlLWluc2VydC1vYmplY3QnIGNhbiBiZSBhbiBpbnRlZ2VyIGFuZCBpcyB0aGVuIGlu
dGVycHJldGVkIGFzCiA7OyBhbiBpbmRleCBwcmVjbHVkZXMgdGhlIHVzZSBvZiBpbnRlZ2VycyBh
cyBvYmplY3RzLiAgVGhpcyBzZWVtcyBhIHZlcnkKIDs7IHVubGlrZWx5IHVzZS1jYXNlLCBzbyBs
ZXQncyBqdXN0IGFjY2VwdCB0aGlzIGxpbWl0YXRpb24uCgotKGRlZnVuIHZ0YWJsZS1pbnNlcnQt
b2JqZWN0ICh0YWJsZSBvYmplY3QgJm9wdGlvbmFsIGxvY2F0aW9uIGJlZm9yZSkKKyhkZWZ1biB2
dGFibGUtaW5zZXJ0LW9iamVjdCAodGFibGUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZvcHRpb25hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb2NhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LWFmdGVyCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQtYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5oaWJpdC1yb3ctcmVkaXNwbGF5KQogICAiSW5zZXJ0IE9CSkVDVCBp
bnRvIFRBQkxFIGF0IExPQ0FUSU9OLgogTE9DQVRJT04gaXMgYW4gb2JqZWN0IGluIFRBQkxFLiAg
T0JKRUNUIGlzIGluc2VydGVkIGFmdGVyIExPQ0FUSU9OLAogdW5sZXNzIEJFRk9SRSBpcyBub24t
bmlsLCBpbiB3aGljaCBjYXNlIGl0IGlzIGluc2VydGVkIGJlZm9yZSBMT0NBVElPTi4KQEAgLTM2
Miw5OSArNzUxLDI2NCBAQCB2dGFibGUtaW5zZXJ0LW9iamVjdAogZW5kIChpZiB0aGUgaW5kZXgg
aXMgdG9vIGxhcmdlKSBvZiB0aGUgdGFibGUuICBCRUZPUkUgaXMgaWdub3JlZCBpbiB0aGlzCiBj
YXNlLgoKLVRoaXMgYWxzbyB1cGRhdGVzIHRoZSBkaXNwbGF5ZWQgdGFibGUuIgotICA7OyBJZiB0
aGUgdnRhYmxlIGlzIGVtcHR5LCBqdXN0IGFkZCB0aGUgb2JqZWN0IGFuZCByZWdlbmVyYXRlIHRo
ZQotICA7OyB0YWJsZS4KLSAgKGlmIChudWxsICh2dGFibGUtb2JqZWN0cyB0YWJsZSkpCi0gICAg
ICAocHJvZ24KLSAgICAgICAgKHNldGYgKHZ0YWJsZS1vYmplY3RzIHRhYmxlKSAobGlzdCBvYmpl
Y3QpKQotICAgICAgICAodnRhYmxlLS1yZWNvbXB1dGUtbnVtZXJpY2FsIHRhYmxlICh2dGFibGUt
LWNvbXB1dGUtY2FjaGVkLWxpbmUgdGFibGUgb2JqZWN0KSkKLSAgICAgICAgKHZ0YWJsZS1nb3Rv
LXRhYmxlIHRhYmxlKQotICAgICAgICAodnRhYmxlLXJldmVydC1jb21tYW5kKSkKLSAgICA7OyBG
aXJzdCBpbnNlcnQgaW50byB0aGUgb2JqZWN0cy4KLSAgICAobGV0ICgocG9zIChpZiBsb2NhdGlv
bgotICAgICAgICAgICAgICAgICAgIChpZiAoaW50ZWdlcnAgbG9jYXRpb24pCi0gICAgICAgICAg
ICAgICAgICAgICAgIChwcm9nMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKG50aGNkciBs
b2NhdGlvbiAodnRhYmxlLW9iamVjdHMgdGFibGUpKQotICAgICAgICAgICAgICAgICAgICAgICAg
IDs7IERvIG5vdCBwcmVwZW5kIGlmIGluZGV4IGlzIHRvbyBsYXJnZToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAoc2V0cSBiZWZvcmUgbmlsKSkKLSAgICAgICAgICAgICAgICAgICAgIChvciAo
bWVtcSBsb2NhdGlvbiAodnRhYmxlLW9iamVjdHMgdGFibGUpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgIDs7IFByZXBlbmQgaWYgYGxvY2F0aW9uJyBpcyBub3QgZm91bmQgYW5kCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgOzsgYGJlZm9yZScgaXMgbm9uLW5pbDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAoYW5kIGJlZm9yZSAodnRhYmxlLW9iamVjdHMgdGFibGUpKSkpCi0gICAgICAg
ICAgICAgICAgIDs7IElmIGBsb2NhdGlvbicgaXMgbmlsIGFuZCBgYmVmb3JlJyBpcyBub24tbmls
LCB3ZQotICAgICAgICAgICAgICAgICA7OyBwcmVwZW5kIHRoZSBuZXcgb2JqZWN0LgotICAgICAg
ICAgICAgICAgICAoaWYgYmVmb3JlICh2dGFibGUtb2JqZWN0cyB0YWJsZSkpKSkpCi0gICAgICAo
aWYgKG9yIGJlZm9yZSAgOyBJZiBgYmVmb3JlJyBpcyBub24tbmlsLCBgcG9zJyBzaG91bGQgYmUs
IGFzIHdlbGwuCi0gICAgICAgICAgICAgIChhbmQgcG9zIChpbnRlZ2VycCBsb2NhdGlvbikpKQot
ICAgICAgICAgIDs7IEFkZCB0aGUgbmV3IG9iamVjdCBiZWZvcmUuCi0gICAgICAgICAgKGxldCAo
KG9sZC1vYmplY3QgKGNhciBwb3MpKSkKLSAgICAgICAgICAgIChzZXRjYXIgcG9zIG9iamVjdCkK
LSAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIG9sZC1vYmplY3QgKGNkciBwb3MpKSkpCi0g
ICAgICAgIDs7IE90aGVyd2lzZSwgYWRkIHRoZSBvYmplY3QgYWZ0ZXIuCi0gICAgICAgIChpZiBw
b3MKLSAgICAgICAgICAgIDs7IFNwbGljZSB0aGUgb2JqZWN0IGludG8gdGhlIGxpc3QuCi0gICAg
ICAgICAgICAoc2V0Y2RyIHBvcyAoY29ucyBvYmplY3QgKGNkciBwb3MpKSkKLSAgICAgICAgICA7
OyBPdGhlcndpc2UsIGFwcGVuZCB0aGUgb2JqZWN0LgotICAgICAgICAgIChuY29uYyAodnRhYmxl
LW9iamVjdHMgdGFibGUpIChsaXN0IG9iamVjdCkpKSkpCi0gICAgOzsgVGhlbiBhZGp1c3QgdGhl
IGNhY2hlIGFuZCBkaXNwbGF5LgotICAgIChzYXZlLWV4Y3Vyc2lvbgotICAgICAgKHZ0YWJsZS1n
b3RvLXRhYmxlIHRhYmxlKQotICAgICAgKGxldCogKChjYWNoZSAodnRhYmxlLS1jYWNoZSB0YWJs
ZSkpCi0gICAgICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpCi0gICAgICAgICAgICAgKGtl
eW1hcCAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAna2V5bWFwKSkKLSAgICAgICAgICAgICAo
ZWxsaXBzaXMgKGlmICh2dGFibGUtZWxsaXBzaXMgdGFibGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAocHJvcGVydGl6ZSAodHJ1bmNhdGUtc3RyaW5nLWVsbGlwc2lzKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2UgKHZ0YWJsZS1mYWNlIHRhYmxlKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAiIikpCi0gICAgICAgICAgICAgKGVsbGlwc2lzLXdp
ZHRoIChzdHJpbmctcGl4ZWwtd2lkdGggZWxsaXBzaXMpKQotICAgICAgICAgICAgIChlbGVtIChp
ZiBsb2NhdGlvbiAgOyBUaGlzIGJpbmRpbmcgbWlycm9ycyB0aGUgYmluZGluZyBvZiBgcG9zJyBh
Ym92ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgKGlmIChpbnRlZ2VycCBsb2NhdGlvbikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChudGggbG9jYXRpb24gKGNhciBjYWNoZSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgKG9yIChhc3NxIGxvY2F0aW9uIChjYXIgY2FjaGUpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIGJlZm9yZSAoY2FhciBjYWNoZSkpKSkKLSAg
ICAgICAgICAgICAgICAgICAgIChpZiBiZWZvcmUgKGNhYXIgY2FjaGUpKSkpCi0gICAgICAgICAg
ICAgKHBvcyAobWVtcSBlbGVtIChjYXIgY2FjaGUpKSkKLSAgICAgICAgICAgICAobGluZSAoY29u
cyBvYmplY3QgKHZ0YWJsZS0tY29tcHV0ZS1jYWNoZWQtbGluZSB0YWJsZSBvYmplY3QpKSkpCi0g
ICAgICAgIChpZiAob3IgYmVmb3JlCi0gICAgICAgICAgICAgICAgKGFuZCBwb3MgKGludGVnZXJw
IGxvY2F0aW9uKSkpCi0gICAgICAgICAgICA7OyBBZGQgdGhlIG5ldyBvYmplY3QgYmVmb3JlOi4K
LSAgICAgICAgICAgIChsZXQgKChvbGQtbGluZSAoY2FyIHBvcykpKQotICAgICAgICAgICAgICAo
c2V0Y2FyIHBvcyBsaW5lKQotICAgICAgICAgICAgICAoc2V0Y2RyIHBvcyAoY29ucyBvbGQtbGlu
ZSAoY2RyIHBvcykpKQotICAgICAgICAgICAgICAodW5sZXNzICh2dGFibGUtZ290by1vYmplY3Qg
KGNhciBlbGVtKSkKLSAgICAgICAgICAgICAgICAodnRhYmxlLWJlZ2lubmluZy1vZi10YWJsZSkp
KQotICAgICAgICAgIDs7IE90aGVyd2lzZSwgYWRkIHRoZSBvYmplY3QgYWZ0ZXIuCi0gICAgICAg
ICAgKGlmIHBvcwotICAgICAgICAgICAgICA7OyBTcGxpY2UgdGhlIG9iamVjdCBpbnRvIHRoZSBs
aXN0LgotICAgICAgICAgICAgICAocHJvZ24KLSAgICAgICAgICAgICAgICAoc2V0Y2RyIHBvcyAo
Y29ucyBsaW5lIChjZHIgcG9zKSkpCi0gICAgICAgICAgICAgICAgKGlmICh2dGFibGUtZ290by1v
YmplY3QgbG9jYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgMSkgIDsg
SW5zZXJ0ICphZnRlciouCi0gICAgICAgICAgICAgICAgICAodnRhYmxlLWVuZC1vZi10YWJsZSkp
KQotICAgICAgICAgICAgOzsgT3RoZXJ3aXNlLCBhcHBlbmQgdGhlIG9iamVjdC4KLSAgICAgICAg
ICAgIChzZXRjYXIgY2FjaGUgKG5jb25jIChjYXIgY2FjaGUpIChsaXN0IGxpbmUpKSkKLSAgICAg
ICAgICAgICh2dGFibGUtZW5kLW9mLXRhYmxlKSkpCi0gICAgICAgIChsZXQgKChzdGFydCAocG9p
bnQpKSkKLSAgICAgICAgICA7OyBGSVhNRTogV2UgaGF2ZSB0byBhZGp1c3QgY29sb3JzIGluIGxp
bmVzIGJlbG93IHRoaXMgaWYgd2UKLSAgICAgICAgICA7OyBoYXZlIDpyb3ctY29sb3JzLgotICAg
ICAgICAgICh2dGFibGUtLWluc2VydC1saW5lIHRhYmxlIGxpbmUgMAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChudGggMSBjYWNoZSkgKHZ0YWJsZS0tc3BhY2VyIHRhYmxlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzIGVsbGlwc2lzLXdpZHRoKQotICAg
ICAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkgKGxpc3QgJ2tleW1hcCBr
ZXltYXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICd2dGFibGUgdGFibGUpKSkKLSAgICAgICAgOzsgV2UgbWF5IGhhdmUgaW5zZXJ0ZWQgYSBub24t
bnVtZXJpY2FsIHZhbHVlIGludG8gYSBwcmV2aW91c2x5Ci0gICAgICAgIDs7IGFsbC1udW1lcmlj
YWwgdGFibGUsIHNvIHJlY29tcHV0ZS4KLSAgICAgICAgKHZ0YWJsZS0tcmVjb21wdXRlLW51bWVy
aWNhbCB0YWJsZSAoY2RyIGxpbmUpKSkpKSkKK1Jvd3MgYmVsb3cgdGhlIGluc2VydGVkIG9iamVj
dCBhcmUgcmVkaXNwbGF5ZWQgdG8gdXBkYXRlIHJvdyBjb2xvcnMsIGlmCitwcmVzZW50LiAgSWYg
SU5ISUJJVC1ST1ctUkVESVNQTEFZIGlzIG5vbi1uaWwsIHRoaXMgcmVkaXNwbGF5IGlzCitpbmhp
Yml0ZWQuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGJhdGNoIHVwZGF0ZXMuICBDYWxsIGB2dGFi
bGUtcmV2ZXJ0Jworb3IgYHZ0YWJsZS1yZWRpc3BsYXktcmFuZ2UnIGF0IHRoZSBlbmQgb2YgYSBi
YXRjaCB0byB1cGRhdGUgcm93IGNvbG9ycy4KKworTm90ZTogSU5ISUJJVC1ST1ctUkVESVNQTEFZ
IGhhcyBubyBlZmZlY3QgaWYgU09SVC1BRlRFUiBpcyBub24tbmlsLgorCitJZiBTRUxFQ1QtQUZU
RVIgaXMgbm9uLW5pbCwgdGhlIG5ldyBvYmplY3QgaXMgc2VsZWN0ZWQuICBPdGhlcndpc2UsCit3
aGF0ZXZlciBvYmplY3QgaXMgc2VsZWN0ZWQgcmVtYWlucyBzZWxlY3RlZC4KKworSWYgU09SVC1B
RlRFUiBpcyBub24tbmlsLCBzb3J0IHRoZSB0YWJsZSBhZnRlciB0aGUgb2JqZWN0IGlzIGluc2Vy
dGVkCithbmQgdXBkYXRlIHRoZSBkaXNwbGF5LCBpZiBuZWNlc3NhcnkuCisKK0NvbnN1bHQgdGhl
IHRhYmxlJ3MgYDpkdXBsaWNhdGUtb2JqZWN0cycgcHJvcGVydHkuIgorICAod2l0aC1jdXJyZW50
LWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkKKyAgICA7OyBJZiB0aGUgdnRhYmxlIGlzIGVt
cHR5LCBqdXN0IGFkZCB0aGUgb2JqZWN0IGFuZCByZWdlbmVyYXRlIHRoZQorICAgIDs7IHRhYmxl
LgorICAgIChpZiAobnVsbCAodnRhYmxlLW9iamVjdHMgdGFibGUpKQorICAgICAgICAocHJvZ24K
KyAgICAgICAgICAoc2V0ZiAodnRhYmxlLW9iamVjdHMgdGFibGUpIChsaXN0IG9iamVjdCkpCisg
ICAgICAgICAgOzsgTm8gbmVlZCB0byB0aWNrIHRoZSBjYWNoZSwgaXQgd2lsbCBiZSByZWZyZXNo
ZWQuCisgICAgICAgICAgKHZ0YWJsZS0tdGljay1vYmplY3RzIHRhYmxlKQorICAgICAgICAgICh2
dGFibGUtLW1heWJlLXJlY29tcHV0ZS1udW1lcmljYWwtZnJvbS1jYWNoZS1saW5lCisgICAgICAg
ICAgIHRhYmxlCisgICAgICAgICAgICh2dGFibGUtLWNvbXB1dGUtY2FjaGVkLWxpbmUgdGFibGUg
b2JqZWN0KSkKKyAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgICAgICAgICh2dGFibGUt
Z290by10YWJsZSB0YWJsZSkKKyAgICAgICAgICAgICh2dGFibGUtcmV2ZXJ0LWNvbW1hbmQgdGFi
bGUpKSkKKyAgICAgICh1bmxlc3MgKHZ0YWJsZS0taGFuZGxlLWR1cGxpY2F0ZS1vYmplY3QgdGFi
bGUgb2JqZWN0KQorICAgICAgICAobGV0ICgoY2FjaGUgKHZ0YWJsZS0tZW5zdXJlLWNhY2hlIHRh
YmxlKSkpCisgICAgICAgICAgOzsgRmlyc3QgaW5zZXJ0IGludG8gdGhlIG9iamVjdHMuCisgICAg
ICAgICAgKGxldCAoKHBvcyAoaWYgbG9jYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAo
aWYgKGludGVnZXJwIGxvY2F0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYg
KHZ0YWJsZS0tY2FjaGUtc29ydGVkLXAgY2FjaGUpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoZXJyb3IgIlVuc29ydCB0aGUgdnRhYmxlIHRvIGluc2VydCBieSBpbnRlZ2VyIGxv
Y2F0aW9uICh2dGFibGUgYCVzJykiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHZ0YWJsZS1uYW1lIHRhYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAocHJvZzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG50aGNkciBsb2Nh
dGlvbiAodnRhYmxlLW9iamVjdHMgdGFibGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOzsgRG8gbm90IHByZXBlbmQgaWYgaW5kZXggaXMgdG9vIGxhcmdlOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgYmVmb3JlIG5pbCkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxldCAoKGxv
YyAodnRhYmxlLW9iamVjdHMgdGFibGUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh3aGlsZSAoYW5kIChjZHIgbG9jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKG5vdCAoZnVuY2FsbCAodnRhYmxlLW9iamVjdC1lcXVhbCB0YWJsZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhciBs
b2MpIGxvY2F0aW9uKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIGxv
YyAoY2RyIGxvYykpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChmdW5jYWxs
ICh2dGFibGUtb2JqZWN0LWVxdWFsIHRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjYXIgbG9jKSBsb2NhdGlvbikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBQcmVwZW5kIGlmIGBsb2NhdGlvbicgaXMg
bm90IGZvdW5kIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGBiZWZvcmUnIGlz
IG5vbi1uaWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBiZWZvcmUgKHZ0YWJs
ZS1vYmplY3RzIHRhYmxlKSkpKQorICAgICAgICAgICAgICAgICAgICAgICA7OyBJZiBgbG9jYXRp
b24nIGlzIG5pbCBhbmQgYGJlZm9yZScgaXMgbm9uLW5pbCwgd2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgOzsgcHJlcGVuZCB0aGUgbmV3IG9iamVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAg
KGlmIGJlZm9yZSAodnRhYmxlLW9iamVjdHMgdGFibGUpKSkpKQorICAgICAgICAgICAgKGlmIChv
ciBiZWZvcmUgOyBJZiBgYmVmb3JlJyBpcyBub24tbmlsLCBgcG9zJyBzaG91bGQgYmUsIGFzIHdl
bGwuCisgICAgICAgICAgICAgICAgICAgIChhbmQgcG9zIChpbnRlZ2VycCBsb2NhdGlvbikpKQor
ICAgICAgICAgICAgICAgIDs7IEFkZCB0aGUgbmV3IG9iamVjdCBiZWZvcmUuCisgICAgICAgICAg
ICAgICAgKGxldCAoKG9sZC1vYmplY3QgKGNhciBwb3MpKSkKKyAgICAgICAgICAgICAgICAgIChz
ZXRjYXIgcG9zIG9iamVjdCkKKyAgICAgICAgICAgICAgICAgIChzZXRjZHIgcG9zIChjb25zIG9s
ZC1vYmplY3QgKGNkciBwb3MpKSkpCisgICAgICAgICAgICAgIDs7IE90aGVyd2lzZSwgYWRkIHRo
ZSBvYmplY3QgYWZ0ZXIuCisgICAgICAgICAgICAgIChpZiBwb3MKKyAgICAgICAgICAgICAgICAg
IDs7IFNwbGljZSB0aGUgb2JqZWN0IGludG8gdGhlIGxpc3QuCisgICAgICAgICAgICAgICAgICAo
c2V0Y2RyIHBvcyAoY29ucyBvYmplY3QgKGNkciBwb3MpKSkKKyAgICAgICAgICAgICAgICA7OyBP
dGhlcndpc2UsIGFwcGVuZCB0aGUgb2JqZWN0LgorICAgICAgICAgICAgICAgIChuY29uYyAodnRh
YmxlLW9iamVjdHMgdGFibGUpIChsaXN0IG9iamVjdCkpKSkpCisgICAgICAgICAgOzsgQ2FjaGUg
Y29oZXJlbmNlLiAgVGhlcmUgaXMgYSBub24tbG9jYWwgZXhpdCwgdmlhIGVycm9yLCBiZWxvdzsK
KyAgICAgICAgICA7OyBjYWNoZSB3aWxsIGJlIHN0YWxlIG9uIGVycm9yIGFzIHRoZSB0aWNrcyB3
aWxsIG5vdCBtYXRjaCB1cC4KKyAgICAgICAgICAodnRhYmxlLS10aWNrLW9iamVjdHMgdGFibGUp
CisgICAgICAgICAgOzsgVGhlbiBhZGp1c3QgdGhlIGNhY2hlIGFuZCBkaXNwbGF5LgorICAgICAg
ICAgIChsZXQgKG9yaWctb2JqZWN0CisgICAgICAgICAgICAgICAgb3JpZy1jb2x1bW4KKyAgICAg
ICAgICAgICAgICBsaW5lCisgICAgICAgICAgICAgICAgbGluZS1pbmRleCkKKyAgICAgICAgICAg
ICh3aGVuIChlcSB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKQorICAgICAgICAgICAgICAo
c2V0cSBvcmlnLW9iamVjdCAodnRhYmxlLWN1cnJlbnQtb2JqZWN0KQorICAgICAgICAgICAgICAg
ICAgICBvcmlnLWNvbHVtbiAodnRhYmxlLWN1cnJlbnQtY29sdW1uKSkpCisgICAgICAgICAgICAo
c2F2ZS1leGN1cnNpb24KKyAgICAgICAgICAgICAgOzsgSWYgcG9pbnQgaXMgbm90IGFscmVhZHkg
aW4gdGhlIHRhYmxlLgorICAgICAgICAgICAgICAodW5sZXNzIG9yaWctb2JqZWN0CisgICAgICAg
ICAgICAgICAgKHZ0YWJsZS1nb3RvLXRhYmxlIHRhYmxlKSkKKyAgICAgICAgICAgICAgKGxldCog
KChpbmhpYml0LXJlYWQtb25seSB0KQorICAgICAgICAgICAgICAgICAgICAgKGVsbGlwc2lzICh2
dGFibGUtZWxsaXBzaXMgdGFibGUpKQorICAgICAgICAgICAgICAgICAgICAgKGVsZW0gKGlmIGxv
Y2F0aW9uIDsgbG9jYXRpb24gbWlycm9ycyBgcG9zJywgYWJvdmUuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGlmIChpbnRlZ2VycCBsb2NhdGlvbikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKG50aCBsb2NhdGlvbiAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNo
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgKGFzc29jCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLW9iamVjdC1lcXVhbCB0YWJs
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBiZWZvcmUgKGNh
YXIgY2FjaGUpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBiZWZvcmUgKGNh
YXIgY2FjaGUpKSkpCisgICAgICAgICAgICAgICAgICAgICAocG9zIChtZW1xIGVsZW0gKHZ0YWJs
ZS0tY2FjaGUtbGluZXMgY2FjaGUpKSkpCisgICAgICAgICAgICAgICAgKHNldHEgbGluZQorICAg
ICAgICAgICAgICAgICAgICAgIChjb25zIG9iamVjdCAodnRhYmxlLS1jb21wdXRlLWNhY2hlZC1s
aW5lIHRhYmxlIG9iamVjdCkpKQorICAgICAgICAgICAgICAgIChpZiAob3IgYmVmb3JlCisgICAg
ICAgICAgICAgICAgICAgICAgICAoYW5kIHBvcyAoaW50ZWdlcnAgbG9jYXRpb24pKSkKKyAgICAg
ICAgICAgICAgICAgICAgOzsgQWRkIHRoZSBuZXcgb2JqZWN0IGJlZm9yZS4KKyAgICAgICAgICAg
ICAgICAgICAgKGxldCAoKG9sZC1saW5lIChjYXIgcG9zKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgKHNldGNhciBwb3MgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAoc2V0Y2RyIHBvcyAo
Y29ucyBvbGQtbGluZSAoY2RyIHBvcykpKQorICAgICAgICAgICAgICAgICAgICAgICh1bmxlc3Mg
KHZ0YWJsZS1nb3RvLW9iamVjdCAoY2FyIGVsZW0pKQorICAgICAgICAgICAgICAgICAgICAgICAg
KHZ0YWJsZS1nb3RvLWJlZ2lubmluZy1vZi10YWJsZSkpKQorICAgICAgICAgICAgICAgICAgOzsg
T3RoZXJ3aXNlLCBhZGQgdGhlIG9iamVjdCBhZnRlci4KKyAgICAgICAgICAgICAgICAgIChpZiBw
b3MKKyAgICAgICAgICAgICAgICAgICAgICA7OyBTcGxpY2UgdGhlIG9iamVjdCBpbnRvIHRoZSBs
aXN0LgorICAgICAgICAgICAgICAgICAgICAgIChwcm9nbgorICAgICAgICAgICAgICAgICAgICAg
ICAgKHNldGNkciBwb3MgKGNvbnMgbGluZSAoY2RyIHBvcykpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgKGlmICh2dGFibGUtZ290by1vYmplY3QgbG9jYXRpb24pCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGZvcndhcmQtbGluZSAxKSAgOyBJbnNlcnQgKmFmdGVyKi4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1lbmQtb2YtdGFibGUpKSkKKyAgICAgICAgICAgICAg
ICAgICAgOzsgT3RoZXJ3aXNlLCBhcHBlbmQgdGhlIG9iamVjdC4KKyAgICAgICAgICAgICAgICAg
ICAgKHNldGNhciBjYWNoZSAobmNvbmMgKHZ0YWJsZS0tY2FjaGUtbGluZXMgY2FjaGUpIChsaXN0
IGxpbmUpKSkKKyAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1lbmQtb2YtdGFibGUpKSkKKyAg
ICAgICAgICAgICAgICAoc2V0cSBsaW5lLWluZGV4ICgtIChsaW5lLW51bWJlci1hdC1wb3MgKHBv
aW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtYmVnaW5u
aW5nLW9mLXRhYmxlLWxpbmUtbnVtYmVyKSkpCisgICAgICAgICAgICAgICAgKGZvcndhcmQtbGlu
ZSAwKQorICAgICAgICAgICAgICAgICh2dGFibGUtLWluc2VydC1saW5lIHRhYmxlIGxpbmUgbGlu
ZS1pbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWNh
Y2hlLXdpZHRocyBjYWNoZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGxpcHNpcykpKQorICAgICAgICAgICAgOzsgV2UgbWF5IGhhdmUgaW5zZXJ0ZWQgYSBub24tbnVt
ZXJpY2FsIHZhbHVlIGludG8gYSBwcmV2aW91c2x5CisgICAgICAgICAgICA7OyBhbGwtbnVtZXJp
Y2FsIHRhYmxlLCBzbyByZWNvbXB1dGUuCisgICAgICAgICAgICAodnRhYmxlLS1tYXliZS1yZWNv
bXB1dGUtbnVtZXJpY2FsLWZyb20tY2FjaGUtbGluZSB0YWJsZSAoY2RyIGxpbmUpKQorICAgICAg
ICAgICAgOzsgQ2FjaGUgY29oZXJlbmNlLgorICAgICAgICAgICAgKHZ0YWJsZS0tY2FjaGUtdGlj
ay1zeW5jIHRhYmxlIGNhY2hlKQorICAgICAgICAgICAgKGlmIHNvcnQtYWZ0ZXIKKyAgICAgICAg
ICAgICAgICA7OyBSZXZlcnQgZG9lcyByZWRpc3BsYXksIGFuZCB3ZSBjYWxsIGl0IG9ubHkgaWYg
c29ydAorICAgICAgICAgICAgICAgIDs7IGFjdHVhbGx5IHNvcnRlZCwgb3RoZXJ3aXNlIGl0IGlz
IHNhZmUgdG8gY2FsbAorICAgICAgICAgICAgICAgIDs7IHZ0YWJsZS0tcmVkaXNwbGF5LXJhbmdl
LgorICAgICAgICAgICAgICAgICh3aGVuICh2dGFibGUtLXNvcnQgdGFibGUgY2FjaGUpCisgICAg
ICAgICAgICAgICAgICAodnRhYmxlLXJldmVydCB0YWJsZSkpCisgICAgICAgICAgICAgIDs7IE5v
dyByZWRpc3BsYXkgdGhlIGxpbmVzIGJlbG93IGlmIHRoZXJlIGFyZSByb3cvY29sdW1uCisgICAg
ICAgICAgICAgIDs7IGNvbG9ycywgaWYgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAodW5sZXNz
IGluaGliaXQtcm93LXJlZGlzcGxheQorICAgICAgICAgICAgICAgICh2dGFibGUtLW1heWJlLXJl
ZGlzcGxheS1yYW5nZSB0YWJsZSAoMSsgbGluZS1pbmRleCkgbmlsIGNhY2hlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmhpYml0LXJlc3RvcmUtcG9p
bnQpKSkKKyAgICAgICAgICAgICh3aGVuIChtZW1xICdpbnNlcnQgKHZ0YWJsZS1wdWxzZSB0YWJs
ZSkpCisgICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgICAgICAgICAgICh2dGFi
bGUtZ290by1vYmplY3Qgb2JqZWN0KQorICAgICAgICAgICAgICAgICh2dGFibGUtLXB1bHNlIHRh
YmxlKSkpCisgICAgICAgICAgICA7OyBvcmlnLW9iamVjdCBpcyBub24tbmlsIGlmIHRoaXMgdGFi
bGUgaXMKKyAgICAgICAgICAgIDs7IHZ0YWJsZS1jdXJyZW50LXRhYmxlIGFuZCBpcyBub3QgZW1w
dHkuCisgICAgICAgICAgICAod2hlbiBvcmlnLW9iamVjdAorICAgICAgICAgICAgICAoaWYgc2Vs
ZWN0LWFmdGVyCisgICAgICAgICAgICAgICAgICAodnRhYmxlLWdvdG8tb2JqZWN0IG9iamVjdCkK
KyAgICAgICAgICAgICAgICAodnRhYmxlLWdvdG8tb2JqZWN0IG9yaWctb2JqZWN0KSkKKyAgICAg
ICAgICAgICAgKHZ0YWJsZS1nb3RvLWNvbHVtbiBvcmlnLWNvbHVtbiAnbWF5YmUtc2V0LXdpbmRv
dy1wb2ludCkpKSkpKSkpCisKKyhkZWZ1biB2dGFibGUtLXJlZGlzcGxheS1yYW5nZSAodGFibGUg
Jm9wdGlvbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20tbGlu
ZSB0by1saW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGliaXQtcmVzdG9yZS1wb2lu
dCkKKyAgIlVwZGF0ZSByb3cvY29sdW1uIGNvbG9ycyBmb3IgVEFCTEUuCitJZiBGUk9NLUxJTkUg
aXMgbmlsLCBzdGFydCBhdCAwLCB0aGUgZmlyc3QgbGluZS4KK0lmIFRPLUxJTkUgaXMgbmlsLCBl
bmQgYXQgdGhlIGxhc3QgbGluZSwgdGhlIG51bWJlciBvZiBvYmplY3RzLgorSWYgQ0FDSEUgaXMg
bm9uLW5pbCwgdXNlIHRoYXQgY29weSwgb3IgcmV0cmlldmUgdGhlIGNhY2hlLgorSWYgSU5ISUJJ
VC1SRVNUT1JFLVBPSU5UIGlzIG5vbi1uaWwsIGFzc3VtZSB0aGUgY2FsbGVyIGhhbmRsZXMgcG9p
bnQuIgorICAod2l0aC1jdXJyZW50LWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkKKyAgICAo
bGV0ICgobGluZS1pbmRleCAob3IgZnJvbS1saW5lIDApKQorICAgICAgICAgIChudW0tb2JqZWN0
cyAobGVuZ3RoICh2dGFibGUtb2JqZWN0cyB0YWJsZSkpKQorICAgICAgICAgIChpbmhpYml0LXJl
YWQtb25seSB0KSkKKyAgICAgIChzZXRxIHRvLWxpbmUgKG9yIHRvLWxpbmUgKDEtIG51bS1vYmpl
Y3RzKSkpCisgICAgICAod2hlbiAoPCB0by1saW5lIGxpbmUtaW5kZXgpCisgICAgICAgIChzZXRx
IGxpbmUtaW5kZXggKHByb2cxIHRvLWxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
ZXRxIHRvLWxpbmUgbGluZS1pbmRleCkpKSkKKyAgICAgICh3aGVuICg8IGxpbmUtaW5kZXggbnVt
LW9iamVjdHMpCisgICAgICAgIDs7IFdlIHNhdmUgdGhlIGxvY2F0aW9uIGlmIHRhYmxlIGlzIHRo
ZSBjdXJyZW50IHRhYmxlLCBhcworICAgICAgICA7OyBkZWxldGUtcmVnaW9uLCB2aWEgZGVsZXRl
LWxpbmUsIHdpbGwgbW92ZSBwb2ludCB0byBwb2ludC1taW4gd2hlbgorICAgICAgICA7OyB0aGUg
bGluZSBwb2ludCBpcyBvbiBnZXRzIGRlbGV0ZWQuCisgICAgICAgIChsZXQgKG9yaWctcG9pbnQK
KyAgICAgICAgICAgICAgb3JpZy1jb2x1bW4pCisgICAgICAgICAgKHdoZW4gKGVxIHRhYmxlICh2
dGFibGUtY3VycmVudC10YWJsZSkpCisgICAgICAgICAgICAoc2V0cSBvcmlnLXBvaW50IChwb2lu
dCkKKyAgICAgICAgICAgICAgICAgIG9yaWctY29sdW1uICh2dGFibGUtY3VycmVudC1jb2x1bW4p
KSkKKyAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgICAgICAgIDs7IElmIHBvaW50IGlz
IG5vdCBhbHJlYWR5IGluIHRoZSB0YWJsZS4KKyAgICAgICAgICAgICh1bmxlc3Mgb3JpZy1wb2lu
dAorICAgICAgICAgICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpKQorICAgICAgICAgICAg
KHNldHEgY2FjaGUgKG9yIGNhY2hlICh2dGFibGUtLWVuc3VyZS1jYWNoZSB0YWJsZSkpKQorICAg
ICAgICAgICAgKHZ0YWJsZS1nb3RvLW9iamVjdCAoY2FyIChlbHQgKHZ0YWJsZS0tY2FjaGUtbGlu
ZXMgY2FjaGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5l
LWluZGV4KSkpCisgICAgICAgICAgICAod2hpbGUgKDw9IGxpbmUtaW5kZXggdG8tbGluZSkKKyAg
ICAgICAgICAgICAgKGxldCAoKGxpbmUgKGVsdCAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkg
bGluZS1pbmRleCkpKQorICAgICAgICAgICAgICAgIChkZWxldGUtbGluZSkKKyAgICAgICAgICAg
ICAgICAodnRhYmxlLS1pbnNlcnQtbGluZSB0YWJsZSBsaW5lIGxpbmUtaW5kZXgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLS1jYWNoZS13aWR0aHMgY2FjaGUp
KSkKKyAgICAgICAgICAgICAgKGNsLWluY2YgbGluZS1pbmRleCkpKQorICAgICAgICAgICh3aGVu
IChhbmQgKG5vdCBpbmhpYml0LXJlc3RvcmUtcG9pbnQpCisgICAgICAgICAgICAgICAgICAgICBv
cmlnLXBvaW50KQorICAgICAgICAgICAgKGdvdG8tY2hhciBvcmlnLXBvaW50KQorICAgICAgICAg
ICAgKHZ0YWJsZS1nb3RvLWNvbHVtbiBvcmlnLWNvbHVtbiAnbWF5YmUtc2V0LXdpbmRvdy1wb2lu
dCkpKSkpKSkKKworKGRlZnVuIHZ0YWJsZS0tbWF5YmUtcmVkaXNwbGF5LXJhbmdlICh0YWJsZSAm
b3B0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJv
bS1saW5lIHRvLWxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5o
aWJpdC1yZXN0b3JlLXBvaW50KQorICAiVXBkYXRlIHJvdy9jb2x1bW4gY29sb3JzIGZvciBUQUJM
RSBpZiB0aGVyZSBhcmUgcm93L2NvbHVtbiBjb2xvcnMuCitJZiBGUk9NLUxJTkUgaXMgbmlsLCBz
dGFydCBhdCAwLCB0aGUgZmlyc3QgbGluZS4KK0lmIFRPLUxJTkUgaXMgbmlsLCBlbmQgYXQgdGhl
IGxhc3QgbGluZSwgdGhlIG51bWJlciBvZiBvYmplY3RzLgorSWYgQ0FDSEUgaXMgbm9uLW5pbCwg
dXNlIHRoYXQgY29weS4KK0lmIElOSElCSVQtUkVTVE9SRS1QT0lOVCBpcyBub24tbmlsLCBhc3N1
bWUgdGhlIGNhbGxlciBoYW5kbGVzIHBvaW50LiIKKyAgKHdoZW4gKG9yICh2dGFibGUtY29sdW1u
LWNvbG9ycyB0YWJsZSkKKyAgICAgICAgICAgICh2dGFibGUtcm93LWNvbG9ycyB0YWJsZSkKKyAg
ICAgICAgICAgICh2dGFibGUtY29sdW1uLWNvbG9yLWZ1bmN0aW9uIHRhYmxlKQorICAgICAgICAg
ICAgKHZ0YWJsZS1yb3ctY29sb3ItZnVuY3Rpb24gdGFibGUpKQorICAgICh2dGFibGUtLXJlZGlz
cGxheS1yYW5nZSB0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tLWxpbmUg
dG8tbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmhpYml0LXJlc3RvcmUtcG9pbnQpKSkKKworKGRlZnVuIHZ0YWJs
ZS1tYXliZS1yZWRpc3BsYXktcmFuZ2UgKHRhYmxlICZvcHRpb25hbCBmcm9tLWxpbmUgdG8tbGlu
ZSkKKyAgIlVwZGF0ZSByb3cvY29sdW1uIGNvbG9ycyBmb3IgVEFCTEUgaWYgdGhlcmUgYXJlIHJv
dy9jb2x1bW4gY29sb3JzLgorSWYgRlJPTS1MSU5FIGlzIG5pbCwgc3RhcnQgYXQgMCwgdGhlIGZp
cnN0IGxpbmUuCitJZiBUTy1MSU5FIGlzIG5pbCwgZW5kIGF0IHRoZSBsYXN0IGxpbmUsIHRoZSBu
dW1iZXIgb2Ygb2JqZWN0cy4iCisgICh2dGFibGUtLW1heWJlLXJlZGlzcGxheS1yYW5nZSB0YWJs
ZSBmcm9tLWxpbmUgdG8tbGluZSkpCisKKyhkZWZ1biB2dGFibGUtcmVkaXNwbGF5LXJhbmdlICh0
YWJsZSAmb3B0aW9uYWwgZnJvbS1saW5lIHRvLWxpbmUpCisgICJVcGRhdGUgcm93L2NvbHVtbiBj
b2xvcnMgZm9yIFRBQkxFLgorSWYgRlJPTS1MSU5FIGlzIG5pbCwgc3RhcnQgYXQgMCwgdGhlIGZp
cnN0IGxpbmUuCitJZiBUTy1MSU5FIGlzIG5pbCwgZW5kIGF0IHRoZSBsYXN0IGxpbmUsIHRoZSBu
dW1iZXIgb2Ygb2JqZWN0cy4iCisgICh2dGFibGUtLXJlZGlzcGxheS1yYW5nZSB0YWJsZSBmcm9t
LWxpbmUgdG8tbGluZSkpCgogKGRlZnVuIHZ0YWJsZS1jb2x1bW4gKHRhYmxlIGluZGV4KQotICAi
UmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBJTkRFWHRoIGNvbHVtbiBpbiBUQUJMRS4iCisgICJSZXR1
cm4gdGhlIG5hbWUgb2YgdGhlIDAtYmFzZWQgSU5ERVggY29sdW1uIGluIFRBQkxFLiIKICAgKHZ0
YWJsZS1jb2x1bW4tbmFtZSAoZWx0ICh2dGFibGUtY29sdW1ucyB0YWJsZSkgaW5kZXgpKSkKCiA7
OzsgR2VuZXJhdGluZyB0aGUgdGFibGUuCgorKGRlZnVuIHZ0YWJsZS0tc29tZS1vYmplY3RzICh0
YWJsZSBvYmplY3QpCisgIChzZXEtc29tZSAobGFtYmRhIChlbHQpCisgICAgICAgICAgICAgIChm
dW5jYWxsICh2dGFibGUtb2JqZWN0LWVxdWFsIHRhYmxlKSBlbHQgb2JqZWN0KSkKKyAgICAgICAg
ICAgICh2dGFibGUtb2JqZWN0cyB0YWJsZSkpKQorCisoZGVmdW4gdnRhYmxlLS1oYW5kbGUtZHVw
bGljYXRlLW9iamVjdCAodGFibGUgbmV3LW9iamVjdCkKKyAgIlJldHVybiBuaWwgaWYgTkVXLU9C
SkVDVCBpcyBhY2NlcHRhYmxlIGluIFRBQkxFLCB0IGlmIG5vdC4KK1JldHVybiBuaWwgaWYgZHVw
bGljYXRlcyBhcmUgYWxsb3dlZC4KK1JldHVybiB0IGlmIGR1cGxpY2F0ZSBmb3VuZCBhbmQgc2hv
dWxkIGJlIGlnbm9yZWQuCitTaWduYWwgYW4gZXJyb3IgaWYgZHVwbGljYXRlIGZvdW5kIGFuZCBk
aXNhbGxvd2VkLiIKKyAgKHBjYXNlLWV4aGF1c3RpdmUgKHZ0YWJsZS1kdXBsaWNhdGUtb2JqZWN0
cyB0YWJsZSkKKyAgICAoJ2FsbG93CisgICAgIG5pbCkKKyAgICAoJ2lnbm9yZQorICAgICAodnRh
YmxlLS1zb21lLW9iamVjdHMgdGFibGUgbmV3LW9iamVjdCkpCisgICAgKCdpZ25vcmUtd2Fybgor
ICAgICAoaWYgKHZ0YWJsZS0tc29tZS1vYmplY3RzIHRhYmxlIG5ldy1vYmplY3QpCisgICAgICAg
ICAocHJvZ24KKyAgICAgICAgICAgKG1lc3NhZ2UgIldhcm5pbmc6IGR1cGxpY2F0ZSBvYmplY3Qg
aWdub3JlZCAodnRhYmxlIGAlcycpIgorICAgICAgICAgICAgICAgICAgICAodnRhYmxlLW5hbWUg
dGFibGUpKQorICAgICAgICAgICB0KQorICAgICAgIG5pbCkpCisgICAgKCdlcnJvcgorICAgICAo
d2hlbiAodnRhYmxlLS1zb21lLW9iamVjdHMgdGFibGUgbmV3LW9iamVjdCkKKyAgICAgICAoZXJy
b3IgIkR1cGxpY2F0ZSBvYmplY3RzIG5vdCBhbGxvd2VkICh2dGFibGUgYCVzJykiCisgICAgICAg
ICAgICAgICh2dGFibGUtbmFtZSB0YWJsZSkpKSkpKQorCiAoZGVmdW4gdnRhYmxlLS1nZXQtdmFs
dWUgKG9iamVjdCBpbmRleCBjb2x1bW4gdGFibGUpCi0gICJDb21wdXRlIGEgY2VsbCB2YWx1ZS4i
CiAgIChjb25kCiAgICAoKHZ0YWJsZS1jb2x1bW4tZ2V0dGVyIGNvbHVtbikKICAgICAoZnVuY2Fs
bCAodnRhYmxlLWNvbHVtbi1nZXR0ZXIgY29sdW1uKQpAQCAtNDY4LDM4NSArMTAyMiw4OTYgQEAg
dnRhYmxlLS1nZXQtdmFsdWUKICAgICh0CiAgICAgKGVsdCBvYmplY3QgaW5kZXgpKSkpCgotKGRl
ZnVuIHZ0YWJsZS0tY29tcHV0ZS1jb2x1bW5zICh0YWJsZSAmb3B0aW9uYWwgcmVjb21wdXRlKQot
ICAiQ29tcHV0ZSBjb2x1bW4gc3BlY3MgZm9yIFRBQkxFLgorKGRlZnVuIHZ0YWJsZS0taW5pdGlh
bGl6ZS1jb2x1bW5zICh0YWJsZSBjb2x1bW5zIG9iamVjdHMpCisgICJDb21wdXRlIENPTFVNTlMg
c3BlY3MgZm9yIFRBQkxFLgorQ29tcHV0ZSBjb2x1bW4gcGxhY2Vob2xkZXJzIGZyb20gT0JKRUNU
UyBpZiBubyBjb2x1bW5zIHNwZWNpZmllZC4KK1NpZ25hbCBhbiBlcnJvciBpZiBubyBvYmplY3Rz
IGFuZCBubyBjb2x1bW5zLgorCiBTZXQgdGhlIGBhbGlnbicsIGAtYWxpZ25lZCcgYW5kIGAtbnVt
ZXJpY2FsJyBwcm9wZXJ0aWVzIG9mIGVhY2ggY29sdW1uLgotSWYgdGhlIGNvbHVtbiBjb250YWlu
cyBvbmx5IG51bWVyaWNhbCBkYXRhLCBzZXQgYC1udW1lcmljYWwnIHRvIHQsCi1vdGhlcndpc2Ug
dG8gbmlsLiAgYC1hbGlnbmVkJyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY29sdW1uIGhhcyBhbgot
YGFsaWduJyBwcm9wZXJ0eSBzZXQgYnkgdGhlIHVzZXIuICBJZiBpdCBkb2VzLCBgYWxpZ24nIGlz
IG5vdCB0b3VjaGVkLAotb3RoZXJ3aXNlIGl0IGlzIHNldCB0byBgcmlnaHQnIGZvciBudW1lcmlj
IGNvbHVtbnMgYW5kIHRvIGBsZWZ0JyBmb3IKLW5vbi1udW1lcmljIGNvbHVtbnMuCi0KLUlmIFJF
Q09NUFVURSBpcyBub24tbmlsLCBkbyBub3Qgc2V0IGAtYWxpZ25lZCcuICBUaGlzIGNhbiBiZSB1
c2VkIHRvCi1yZWNvbXB1dGUgdGhlIGNvbHVtbiBzcGVjcyB3aGVuIHRoZSB0YWJsZSBkYXRhIGhh
cyBjaGFuZ2VkLiIKKworYC1hbGlnbmVkJyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY29sdW1uIGhh
cyBhbiBgYWxpZ24nIHByb3BlcnR5IHNldCBieQordGhlIHVzZXIuICBJZiBpdCBkb2VzLCBgYWxp
Z24nIGlzIG5vdCB0b3VjaGVkLCBvdGhlcndpc2UgaXQgaXMgc2V0IHRvCitgcmlnaHQnIGZvciBu
dW1lcmljIGNvbHVtbnMgYW5kIHRvIGBsZWZ0JyBmb3Igbm9uLW51bWVyaWMgY29sdW1ucy4KKwor
U2NhbiB0aGUgaW5pdGlhbGx5IHByb3ZpZGVkIG9iamVjdHMgZm9yIG51bWVyaWNhbG5lc3Mgb24g
Y29sdW1ucyB3aXRoCit0aGVpciBgbnVtZXJpYycgcHJvcGVydHkgYXMgXFw9J2luZmVyLCBhbmQg
c2V0IHRoZSBjb2x1bW4ncyBhbGlnbm1lbnQKK2FuZCBudW1lcmljIGZsYWdzLCBpZiBuZWVkZWQu
CisKK0NvbHVtbnMgd2l0aCBgbnVtZXJpYycgc2V0IHRvIG5pbCBhcmUgbmV2ZXIgc2Nhbm5lZCBh
bmQgYXJlIGFzc3VtZWQgdG8KK2JlIG5vbi1udW1lcmljLCBvciBoYXZlIHRoZWlyIG93biBjb21w
YXJhdG9yLiAgQ29sdW1ucyB3aXRoIGBudW1lcmljJworc2V0IHRvIHQgYXJlIG5ldmVyIHNjYW5u
ZWQgYW5kIGFzc3VtZWQgdG8gYmUgbnVtZXJpYy4iCisgIDs7IEF1dG8tZ2VuZXJhdGUgY29sdW1u
cywgaWYgbmVjZXNzYXJ5LgorICAodW5sZXNzIGNvbHVtbnMKKyAgICAoaWYgKGxlbmd0aD4gb2Jq
ZWN0cyAwKQorICAgICAgICAoc2V0cSBjb2x1bW5zIChtYWtlLWxpc3QgKGxlbmd0aCAoY2FyIG9i
amVjdHMpKSAiIikpCisgICAgICAoZXJyb3IgIkNhbid0IGNyZWF0ZSBwbGFjZWhvbGRlciBjb2x1
bW5zOyBubyBvYmplY3RzICh2dGFibGUgYCVzJykiCisgICAgICAgICAgICAgKHZ0YWJsZS1uYW1l
IHRhYmxlKSkpKQorICAoc2V0ZiAodnRhYmxlLWNvbHVtbnMgdGFibGUpCisgICAgICAgIChtYXBj
YXIgKGxhbWJkYSAoY29sdW1uKQorICAgICAgICAgICAgICAgICAgKGxldCAoKG5ldy1jb2wKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAoY29uZAorICAgICAgICAgICAgICAgICAgICAgICAgICA7
OyBXZSBqdXN0IGhhdmUgdGhlIG5hbWUgKGFzIGEgc3RyaW5nKS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgKChzdHJpbmdwIGNvbHVtbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICht
YWtlLXZ0YWJsZS1jb2x1bW4gOm5hbWUgY29sdW1uKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgOzsgQSBwbGlzdCBvZiBrZXl3b3Jkcy92YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICgobGlzdHAgY29sdW1uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGx5ICMn
bWFrZS12dGFibGUtY29sdW1uIGNvbHVtbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7
IEEgZnVsbCBgdnRhYmxlLWNvbHVtbicgb2JqZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uKSkpKQorICAgICAgICAgICAg
ICAgICAgICAobGV0ICgodHJ1bmNhdGUtZ3Vlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh2dGFibGUtY29sdW1uLXRydW5jYXRlLWd1ZXNzIG5ldy1jb2wpKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAodW5sZXNzIChvciAoYW5kIChpbnRlZ2VycCB0cnVuY2F0ZS1ndWVzcykKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg+IHRydW5jYXRlLWd1ZXNzIC0xKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCB0cnVuY2F0ZS1ndWVzcykp
CisgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAiQ29sdW1uIGAlcycgdHJ1bmNhdGUtZ3Vlc3MgbXVzdCBiZSBuaWwgb3IgPj0gMCAodnRhYmxl
IGAlcycpIgorICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtY29sdW1uLW5hbWUgbmV3
LWNvbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLW5hbWUgdGFibGUpKSkpCisg
ICAgICAgICAgICAgICAgICAgIG5ldy1jb2wpKQorICAgICAgICAgICAgICAgIGNvbHVtbnMpKQor
ICAoZG9saXN0IChjb2x1bW4gKHZ0YWJsZS1jb2x1bW5zIHRhYmxlKSkKKyAgICA7OyBDaGVjayBp
ZiBhbnkgY29sdW1ucyBoYXZlIGFuIGV4cGxpY2l0IGBhbGlnbicgcHJvcGVydHkuCisgICAgKGlm
ICh2dGFibGUtY29sdW1uLWFsaWduIGNvbHVtbikKKyAgICAgICAgKHNldGYgKHZ0YWJsZS1jb2x1
bW4tLWFsaWduZWQgY29sdW1uKSB0KQorICAgICAgOzsgRGVmYXVsdCB0byAncmlnaHQgdW50aWwg
ZGF0YSBhcHBlYXIuCisgICAgICAoc2V0ZiAodnRhYmxlLWNvbHVtbi1hbGlnbiBjb2x1bW4pICdy
aWdodCkpCisgICAgOzsgU2V0IHRoZSBkZWZhdWx0IG51bWVyaWMgb3Igbm9uLW51bWVyaWMgc29y
dCBmbGFncy4KKyAgICAoaWYgKGVxICh2dGFibGUtY29sdW1uLW51bWVyaWMgY29sdW1uKSB0KQor
ICAgICAgICA7OyBFeHBsaWNpdGx5IG51bWVyaWMuCisgICAgICAgIChzZXRmICh2dGFibGUtY29s
dW1uLS1udW1lcmljYWwgY29sdW1uKSB0KQorICAgICAgOzsgRGVmYXVsdCB0byBub24tbnVtZXJp
Yy4gICdpbmZlciBjb2x1bW5zIHdpbGwgYmUgY29tcHV0ZWQgbGF0ZXIuCisgICAgICAoc2V0ZiAo
dnRhYmxlLWNvbHVtbi0tbnVtZXJpY2FsIGNvbHVtbikgbmlsKSkpCisgICh2dGFibGUtLXJlY29t
cHV0ZS1udW1lcmljYWwtZnJvbS1vYmplY3RzIHRhYmxlKSkKKworKGRlZnVuIHZ0YWJsZS0tcmVj
b21wdXRlLW51bWVyaWNhbC1mcm9tLW9iamVjdHMgKHRhYmxlKQorICAiUmVjb21wdXRlIG51bWVy
aWNhbG5lc3Mgb2YgY29sdW1ucyBmb3IgVEFCTEUgZnJvbSBpdHMgb2JqZWN0cy4iCiAgIChsZXQg
KChudW1lcmljYWwgKG1ha2UtdmVjdG9yIChsZW5ndGggKHZ0YWJsZS1jb2x1bW5zIHRhYmxlKSkg
dCkpCi0gICAgICAgIChjb2x1bW5zICh2dGFibGUtY29sdW1ucyB0YWJsZSkpKQotICAgIDs7IEZp
cnN0IGRldGVybWluZSB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgYWxsLW51bWVyaWNhbCBjb2x1bW5z
LgorICAgICAgICAoY29sdW1ucyAodnRhYmxlLWNvbHVtbnMgdGFibGUpKQorICAgICAgICBwb3N0
LXByb2Nlc3MpCiAgICAgKGRvbGlzdCAob2JqZWN0ICh2dGFibGUtb2JqZWN0cyB0YWJsZSkpCiAg
ICAgICAoc2VxLWRvLWluZGV4ZWQKLSAgICAgICAobGFtYmRhIChfZWxlbSBpbmRleCkKLSAgICAg
ICAgICh1bmxlc3MgKG51bWJlcnAgKHZ0YWJsZS0tZ2V0LXZhbHVlIG9iamVjdCBpbmRleCAoZWx0
IGNvbHVtbnMgaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0YWJsZSkpCi0gICAgICAgICAgIChzZXRmIChlbHQgbnVtZXJpY2FsIGluZGV4KSBuaWwp
KSkKLSAgICAgICAodnRhYmxlLWNvbHVtbnMgdGFibGUpKSkKLSAgICA7OyBDaGVjayBpZiBhbnkg
Y29sdW1ucyBoYXZlIGFuIGV4cGxpY2l0IGBhbGlnbicgcHJvcGVydHkuCi0gICAgKHVubGVzcyBy
ZWNvbXB1dGUKLSAgICAgIChkb2xpc3QgKGNvbHVtbiAodnRhYmxlLWNvbHVtbnMgdGFibGUpKQot
ICAgICAgICAod2hlbiAodnRhYmxlLWNvbHVtbi1hbGlnbiBjb2x1bW4pCi0gICAgICAgICAgKHNl
dGYgKHZ0YWJsZS1jb2x1bW4tLWFsaWduZWQgY29sdW1uKSB0KSkpKQotICAgIDs7IFRoZW4gZmls
bCBpbiBkZWZhdWx0cy4KLSAgICAoc2VxLW1hcC1pbmRleGVkCi0gICAgIChsYW1iZGEgKGNvbHVt
biBpbmRleCkKLSAgICAgICA7OyBUaGlzIGlzIHVzZWQgd2hlbiBkaXNwbGF5aW5nLgotICAgICAg
ICh1bmxlc3MgKHZ0YWJsZS1jb2x1bW4tLWFsaWduZWQgY29sdW1uKQotICAgICAgICAgKHNldGYg
KHZ0YWJsZS1jb2x1bW4tYWxpZ24gY29sdW1uKQotICAgICAgICAgICAgICAgKGlmIChlbHQgbnVt
ZXJpY2FsIGluZGV4KQotICAgICAgICAgICAgICAgICAgICdyaWdodAotICAgICAgICAgICAgICAg
ICAnbGVmdCkpKQotICAgICAgIDs7IFRoaXMgaXMgdXNlZCBmb3Igc29ydGluZy4KLSAgICAgICAo
c2V0ZiAodnRhYmxlLWNvbHVtbi0tbnVtZXJpY2FsIGNvbHVtbikKLSAgICAgICAgICAgICAoZWx0
IG51bWVyaWNhbCBpbmRleCkpCi0gICAgICAgY29sdW1uKQotICAgICAodnRhYmxlLWNvbHVtbnMg
dGFibGUpKSkpCisgICAgICAgKGxhbWJkYSAoY29sdW1uIGluZGV4KQorICAgICAgICAgKHBjYXNl
LWV4aGF1c3RpdmUgKHZ0YWJsZS1jb2x1bW4tbnVtZXJpYyBjb2x1bW4pCisgICAgICAgICAgIDs7
IEV4cGxpY2l0bHkgbm9uLW51bWVyaWMuCisgICAgICAgICAgICgocHJlZCBudWxsKQorICAgICAg
ICAgICAgKHNldGYgKGVsdCBudW1lcmljYWwgaW5kZXgpIG5pbCkpCisgICAgICAgICAgIDs7IEV4
cGxpY2l0bHkgbnVtZXJpYy4KKyAgICAgICAgICAgKChwcmVkIChlcSB0KSkKKyAgICAgICAgICAg
IDs7IG5vLW9wLCBkZWZhdWx0IGlzIHQuCisgICAgICAgICAgICApCisgICAgICAgICAgICgnaW5m
ZXIKKyAgICAgICAgICAgICh1bmxlc3MgKG51bWJlcnAgKHZ0YWJsZS0tZ2V0LXZhbHVlIG9iamVj
dCBpbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGVsdCBjb2x1bW5zIGluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGFibGUpKQorICAgICAgICAgICAgICAoc2V0ZiAoZWx0IG51bWVyaWNhbCBp
bmRleCkgbmlsKSkpKQorICAgICAgICAgKHNldHEgcG9zdC1wcm9jZXNzIHQpKQorICAgICAgIGNv
bHVtbnMpKQorICAgIDs7IENvbXB1dGUgYWxpZ25tZW50IGZvciBpbmZlcnJlZCBudW1lcmljIGNv
bHVtbnMgd2l0aG91dCBleHBsaWNpdAorICAgIDs7IGFsaWdubWVudCwgYW5kIHNldCBudW1lcmlj
YWwgc29ydCBmbGFncy4KKyAgICAod2hlbiBwb3N0LXByb2Nlc3MKKyAgICAgIChzZXEtbWFwLWlu
ZGV4ZWQKKyAgICAgICAobGFtYmRhIChjb2x1bW4gaW5kZXgpCisgICAgICAgICA7OyBUaGlzIGlz
IHVzZWQgd2hlbiBkaXNwbGF5aW5nLgorICAgICAgICAgKHVubGVzcyAodnRhYmxlLWNvbHVtbi0t
YWxpZ25lZCBjb2x1bW4pCisgICAgICAgICAgIChzZXRmICh2dGFibGUtY29sdW1uLWFsaWduIGNv
bHVtbikKKyAgICAgICAgICAgICAgICAgKGlmIChlbHQgbnVtZXJpY2FsIGluZGV4KQorICAgICAg
ICAgICAgICAgICAgICAgJ3JpZ2h0CisgICAgICAgICAgICAgICAgICAgJ2xlZnQpKSkKKyAgICAg
ICAgIDs7IFRoaXMgaXMgdXNlZCBmb3Igc29ydGluZy4KKyAgICAgICAgIChzZXRmICh2dGFibGUt
Y29sdW1uLS1udW1lcmljYWwgY29sdW1uKQorICAgICAgICAgICAgICAgKGVsdCBudW1lcmljYWwg
aW5kZXgpKSkKKyAgICAgICAodnRhYmxlLWNvbHVtbnMgdGFibGUpKSkpKQorCisoZGVmdW4gdnRh
YmxlLS1tYXliZS1yZWNvbXB1dGUtbnVtZXJpY2FsLWZyb20tY2FjaGUtbGluZSAodGFibGUgbGlu
ZSkKKyAgIlJlY29tcHV0ZSBudW1lcmljYWxuZXNzIG9mIGNvbHVtbnMgZm9yIFRBQkxFIGZyb20g
Y2FjaGUgTElORS4iCisgIChsZXQgKChjb2x1bW5zICh2dGFibGUtY29sdW1ucyB0YWJsZSkpCisg
ICAgICAgIChyZWNvbXB1dGUgbmlsKSkKKyAgICAoc2VxLWRvLWluZGV4ZWQKKyAgICAgKGxhbWJk
YSAoZWxlbSBpbmRleCkKKyAgICAgICAobGV0ICgoY29sdW1uIChlbHQgY29sdW1ucyBpbmRleCkp
KQorICAgICAgICAgKHdoZW4gKGFuZCAoZXEgKHZ0YWJsZS1jb2x1bW4tbnVtZXJpYyBjb2x1bW4p
ICdpbmZlcikKKyAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1jb2x1bW4tLW51bWVyaWNhbCBj
b2x1bW4pCisgICAgICAgICAgICAgICAgICAgIChub3QgKG51bWJlcnAgKGNhciBlbGVtKSkpKQor
ICAgICAgICAgICAoc2V0cSByZWNvbXB1dGUgdCkpKSkKKyAgICAgbGluZSkKKyAgICAod2hlbiBy
ZWNvbXB1dGUKKyAgICAgICh2dGFibGUtLXJlY29tcHV0ZS1udW1lcmljYWwtZnJvbS1vYmplY3Rz
IHRhYmxlKSkpKQoKIChkZWZ1biB2dGFibGUtLXNwYWNlciAodGFibGUpCi0gICh2dGFibGUtLWNv
bXB1dGUtd2lkdGggdGFibGUgKHZ0YWJsZS1zZXBhcmF0b3Itd2lkdGggdGFibGUpKSkKKyAgKHZ0
YWJsZS0tdGV4dC1zY2FsZS1waXhlbHMKKyAgICh2dGFibGUtLWNvbXB1dGUtd2lkdGggdGFibGUg
KHZ0YWJsZS1zZXBhcmF0b3Itd2lkdGggdGFibGUpKSkpCisKKyhkZWZ1biB2dGFibGUtLWRpdmlk
ZXIgKHRhYmxlKQorICAob3IgKHZ0YWJsZS1kaXZpZGVyIHRhYmxlKQorICAgICAgKHdoZW4gKHZ0
YWJsZS1kaXZpZGVyLXdpZHRoIHRhYmxlKQorICAgICAgICAocHJvcGVydGl6ZSAiICIKKyAgICAg
ICAgICAgICAgICAgICAgJ2Rpc3BsYXkgKGxpc3QgJ3NwYWNlIDp3aWR0aAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAobGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHZ0YWJsZS0tdGV4dC1zY2FsZS1waXhlbHMKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAodnRhYmxlLS1jb21wdXRlLXdpZHRoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRhYmxlICh2dGFibGUtZGl2aWRlci13aWR0aCB0YWJsZSkp
KSkpKSkpKQoKIChkZWZ1biB2dGFibGUtLXJlY29tcHV0ZS1jYWNoZSAodGFibGUpCiAgIChsZXQq
ICgoZGF0YSAodnRhYmxlLS1jb21wdXRlLWNhY2hlIHRhYmxlKSkKLSAgICAgICAgICh3aWR0aHMg
KHZ0YWJsZS0tY29tcHV0ZS13aWR0aHMgdGFibGUgZGF0YSkpKQotICAgIChzZXRmIChnZXRoYXNo
ICh2dGFibGUtLWNhY2hlLWtleSkgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZSkpCi0gICAgICAg
ICAgKGxpc3QgZGF0YSB3aWR0aHMpKSkpCisgICAgICAgICAod2lkdGhzICh2dGFibGUtLWNvbXB1
dGUtd2lkdGhzIHRhYmxlIGRhdGEpKQorICAgICAgICAgKGNhY2hlIChsaXN0CisgICAgICAgICAg
ICAgICAgIGRhdGEKKyAgICAgICAgICAgICAgICAgd2lkdGhzCisgICAgICAgICAgICAgICAgICh2
dGFibGUtLW9iamVjdHMtdGljayB0YWJsZSkKKyAgICAgICAgICAgICAgICAgOzsgQ2FjaGUgc29y
dGVkIGZsYWcuCisgICAgICAgICAgICAgICAgIG5pbCkpKQorICAgICh2dGFibGUtLXNvcnQgdGFi
bGUgY2FjaGUpCisgICAgKHNldGYgKGdldGhhc2ggKHZ0YWJsZS0tY2FjaGUta2V5IHRhYmxlKQor
ICAgICAgICAgICAgICAgICAgIChzbG90LXZhbHVlIHRhYmxlICctY2FjaGUpKQorICAgICAgICAg
IGNhY2hlKSkpCisKKyhkZWZ1biB2dGFibGUtLWNhY2hlLXRpY2stc3luYyAodGFibGUgY2FjaGUp
CisgIChzZXRmIChudGggMiBjYWNoZSkKKyAgICAgICAgKHZ0YWJsZS0tb2JqZWN0cy10aWNrIHRh
YmxlKSkpCisKKyhkZWZ1biB2dGFibGUtLWNhY2hlLXRpY2stdmFsaWQtcCAodGFibGUgY2FjaGUp
CisgIChlcSAobnRoIDIgY2FjaGUpCisgICAgICAodnRhYmxlLS1vYmplY3RzLXRpY2sgdGFibGUp
KSkKKworKGRlZnVuIHZ0YWJsZS0tY2FjaGUtd2lkdGhzIChjYWNoZSkKKyAgKG50aCAxIGNhY2hl
KSkKKworKGRlZnVuIHZ0YWJsZS0tY2FjaGUtbGluZXMgKGNhY2hlKQorICAoY2FyIGNhY2hlKSkK
KworKGRlZnVuIHZ0YWJsZS0tY2FjaGUtc2V0LXNvcnRlZCAoY2FjaGUgc29ydGVkKQorICAoc2V0
ZiAobnRoIDMgY2FjaGUpIHNvcnRlZCkpCisKKyhkZWZ1biB2dGFibGUtLWNhY2hlLXNvcnRlZC1w
IChjYWNoZSkKKyAgKG50aCAzIGNhY2hlKSkKCiAoZGVmdW4gdnRhYmxlLS1lbnN1cmUtY2FjaGUg
KHRhYmxlKQogICAob3IgKHZ0YWJsZS0tY2FjaGUgdGFibGUpCiAgICAgICAodnRhYmxlLS1yZWNv
bXB1dGUtY2FjaGUgdGFibGUpKSkKCi0oZGVmdW4gdnRhYmxlLWluc2VydCAodGFibGUpCi0gIChs
ZXQqICgoc3BhY2VyICh2dGFibGUtLXNwYWNlciB0YWJsZSkpCi0gICAgICAgICAoc3RhcnQgKHBv
aW50KSkKLSAgICAgICAgIChlbGxpcHNpcyAoaWYgKHZ0YWJsZS1lbGxpcHNpcyB0YWJsZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgKHRydW5jYXRlLXN0cmluZy1lbGxpcHNp
cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2UgKHZ0YWJsZS1mYWNl
IHRhYmxlKSkKLSAgICAgICAgICAgICAgICAgICAgICIiKSkKLSAgICAgICAgIChlbGxpcHNpcy13
aWR0aCAoc3RyaW5nLXBpeGVsLXdpZHRoIGVsbGlwc2lzKSkKKyhkZWZ1biB2dGFibGUtLWluc2Vy
dCAodGFibGUpCisgIChsZXQqICgoc3RhcnQgKHBvaW50KSkKKyAgICAgICAgIChlbGxpcHNpcyAo
dnRhYmxlLWVsbGlwc2lzIHRhYmxlKSkKICAgICAgICAgIDs7IFdlIG1haW50YWluIGEgY2FjaGUg
cGVyIHNjcmVlbi93aW5kb3cgd2lkdGgsIHNvIHRoYXQgd2UgcmVuZGVyCiAgICAgICAgICA7OyBj
b3JyZWN0bHkgaWYgRW1hY3MgaXMgb3BlbiBvbiB0d28gZGlmZmVyZW50IHNjcmVlbnMgKG9yIHRo
ZQogICAgICAgICAgOzsgdXNlciByZXNpemVzIHRoZSBmcmFtZSkuCi0gICAgICAgICAod2lkdGhz
IChudGggMSAodnRhYmxlLS1lbnN1cmUtY2FjaGUgdGFibGUpKSkpCisgICAgICAgICAod2lkdGhz
ICh2dGFibGUtLXdpZHRocyB0YWJsZSkpKQogICAgIDs7IERvbid0IGluc2VydCBhbnkgaGVhZGVy
IG9yIGhlYWRlciBsaW5lIGlmIHRoZSB1c2VyIGhhc24ndAogICAgIDs7IHNwZWNpZmllZCB0aGUg
Y29sdW1ucy4KICAgICAod2hlbiAoc2xvdC12YWx1ZSB0YWJsZSAnLWhhcy1jb2x1bW4tc3BlYykK
ICAgICAgIChpZiAodnRhYmxlLXVzZS1oZWFkZXItbGluZSB0YWJsZSkKLSAgICAgICAgICAodnRh
YmxlLS1zZXQtaGVhZGVyLWxpbmUgdGFibGUgd2lkdGhzIHNwYWNlcikKKyAgICAgICAgICAodnRh
YmxlLS1zZXQtaGVhZGVyLWxpbmUgdGFibGUgd2lkdGhzKQogICAgICAgICA7OyBJbnNlcnQgdGhl
IGhlYWRlciBsaW5lIGRpcmVjdGx5IGludG8gdGhlIGJ1ZmZlciwgYW5kIHB1dCBhCiAgICAgICAg
IDs7IGtleW1hcCB0byBiZSBhYmxlIHRvIHNvcnQgdGhlIGNvbHVtbnMgdGhlcmUgKGJ5IGNsaWNr
aW5nIG9uCiAgICAgICAgIDs7IHRoZW0pLgotICAgICAgICAodnRhYmxlLS1pbnNlcnQtaGVhZGVy
LWxpbmUgdGFibGUgd2lkdGhzIHNwYWNlcikKKyAgICAgICAgKHZ0YWJsZS0taW5zZXJ0LWhlYWRl
ci1saW5lIHRhYmxlIHdpZHRocykKICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgc3RhcnQg
KHBvaW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAna2V5bWFwIHZ0YWJs
ZS1oZWFkZXItbGluZS1tYXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jl
YXItbm9uc3RpY2t5IHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgJ3JlYXIt
bm9uc3RpY2t5IHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Z0YWJsZS1o
ZWFkZXIgdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndnRhYmxlIHRhYmxl
KSkKKyAgICAgICAgKHdoZW4gKHZ0YWJsZS1oZWFkZXItaW50YW5naWJsZSB0YWJsZSkKKyAgICAg
ICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGxpc3QgJ2N1cnNvci1pbnRhbmdpYmxlIHQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnZnJvbnQtc3RpY2t5IHQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAncmVhci1ub25zdGlja3kgdCkpCisgICAgICAgICAgKGN1cnNv
ci1pbnRhbmdpYmxlLW1vZGUpKQogICAgICAgICAoc2V0cSBzdGFydCAocG9pbnQpKSkpCi0gICAg
KHZ0YWJsZS0tc29ydCB0YWJsZSkKLSAgICA7OyBJbnNlcnQgdGhlIGRhdGEuCi0gICAgKGxldCAo
KGxpbmUtbnVtYmVyIDApKQotICAgICAgKGRvbGlzdCAobGluZSAoY2FyICh2dGFibGUtLWNhY2hl
IHRhYmxlKSkpCi0gICAgICAgICh2dGFibGUtLWluc2VydC1saW5lIHRhYmxlIGxpbmUgbGluZS1u
dW1iZXIgd2lkdGhzIHNwYWNlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNp
cyBlbGxpcHNpcy13aWR0aCkKLSAgICAgICAgKHNldHEgbGluZS1udW1iZXIgKDErIGxpbmUtbnVt
YmVyKSkpKQotICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChwb2ludCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAobGlzdCAncmVhci1ub25zdGlja3kgdAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICd2dGFibGUgdGFibGUpKQotICAgIChnb3RvLWNoYXIgc3RhcnQpKSkK
KyAgICA7OyBUaGUgY2FjaGUgd2lsbCBiZSBzb3J0ZWQgaWYgdGhlcmUgYXJlIHNvcnQgY3JpdGVy
aWEuCisgICAgKGxldCAoKGNhY2hlICh2dGFibGUtLWVuc3VyZS1jYWNoZSB0YWJsZSkpKQorICAg
ICAgOzsgSW5zZXJ0IHRoZSBkYXRhLgorICAgICAgKGxldCAoKGxpbmUtbnVtYmVyIDApKQorICAg
ICAgICAoZG9saXN0IChsaW5lICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKSkKKyAgICAgICAg
ICAodnRhYmxlLS1pbnNlcnQtbGluZSB0YWJsZSBsaW5lIGxpbmUtbnVtYmVyIHdpZHRocyBlbGxp
cHNpcykKKyAgICAgICAgICAoc2V0cSBsaW5lLW51bWJlciAoMSsgbGluZS1udW1iZXIpKSkpCisg
ICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobGlzdCAncmVhci1ub25zdGlja3kgdAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3Z0YWJsZSB0YWJsZSkpCisgICAgICAoZ290by1jaGFyIHN0YXJ0KSkKKyAg
ICAod2hlbiAodnRhYmxlLWRlY29yLWludGFuZ2libGUgdGFibGUpCisgICAgICAoY3Vyc29yLWlu
dGFuZ2libGUtbW9kZSkpKSkKKworKGRlZnZhci1sb2NhbCB2dGFibGUtLXBvc3QtY29tbWFuZC1o
b29rZWQgbmlsKQorKGRlZnZhci1sb2NhbCB2dGFibGUtLWRpc3BsYXktbGluZS1udW1iZXJzIG5p
bCkKKyhkZWZ2YXItbG9jYWwgdnRhYmxlLS10ZXh0LXNjYWxlLW1vZGUtaG9va2VkIG5pbCkKKyhk
ZWZ2YXItbG9jYWwgdnRhYmxlLS13aW5kb3ctY2hhbmdlcy1ob29rZWQgbmlsKQorKGRlZnZhciB0
ZXh0LXNjYWxlLXJlbWFwLWhlYWRlci1saW5lKSA7IHRoaXMgaXMgYnVmZmVyIGxvY2FsCgotKGRl
ZnVuIHZ0YWJsZS0taW5zZXJ0LWxpbmUgKHRhYmxlIGxpbmUgbGluZS1udW1iZXIgd2lkdGhzIHNw
YWNlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBlbGxpcHNp
cyBlbGxpcHNpcy13aWR0aCkKLSAgKGxldCAoKHN0YXJ0IChwb2ludCkpCi0gICAgICAgIChjb2x1
bW5zICh2dGFibGUtY29sdW1ucyB0YWJsZSkpCi0gICAgICAgIChjb2x1bW4tY29sb3JzCi0gICAg
ICAgICAoYW5kICh2dGFibGUtY29sdW1uLWNvbG9ycyB0YWJsZSkKLSAgICAgICAgICAgICAgKGlm
ICh2dGFibGUtcm93LWNvbG9ycyB0YWJsZSkKLSAgICAgICAgICAgICAgICAgIChlbHQgKHNsb3Qt
dmFsdWUgdGFibGUgJy1jYWNoZWQtY29sb3JzKQotICAgICAgICAgICAgICAgICAgICAgICAobW9k
IGxpbmUtbnVtYmVyIChsZW5ndGggKHZ0YWJsZS1yb3ctY29sb3JzIHRhYmxlKSkpKQotICAgICAg
ICAgICAgICAgIChzbG90LXZhbHVlIHRhYmxlICctY2FjaGVkLWNvbG9ycykpKSkKLSAgICAgICAg
KGRpdmlkZXIgKHZ0YWJsZS1kaXZpZGVyIHRhYmxlKSkKLSAgICAgICAgKGtleW1hcCAoc2xvdC12
YWx1ZSB0YWJsZSAnLWNhY2hlZC1rZXltYXApKSkKKyhkZWZ1biB2dGFibGUtaW5zZXJ0ICh0YWJs
ZSkKKyAgIkluc2VydCBUQUJMRSBpbnRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KK1RoZSBjdXJyZW50
IGJ1ZmZlciB3aWxsIGJlIHNldCBhcyBUQUJMRSdzIGJ1ZmZlci4gIElmIHRoaXMgaXMgZG9uZSBt
b3JlCit0aGFuIG9uY2UsIG9yIGlmIHRoZSB0YWJsZSBpcyBhdHRlbXB0ZWQgdG8gYmUgaW5zZXJ0
ZWQgbW9yZSB0aGFuIG9uY2UKK2ludG8gdGhlIHNhbWUgYnVmZmVyLCBzaWduYWwgYW4gZXJyb3Iu
IgorICAoaWYtbGV0KiAoKHRhYmxlLWJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkpKQorICAg
ICAgKGlmIChlcSB0YWJsZS1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKKyAgICAgICAgICAoZXJy
b3IgIkEgdnRhYmxlIGNhbm5vdCBiZSBpbnNlcnRlZCBtb3JlIHRoYW4gb25jZSBpbnRvIGEgYnVm
ZmVyICh2dGFibGUgYCVzJykiCisgICAgICAgICAgICAgICAgICh2dGFibGUtbmFtZSB0YWJsZSkp
CisgICAgICAgIChlcnJvciAiQSB2dGFibGUgY2Fubm90IGJlIGluc2VydGVkIGludG8gbW9yZSB0
aGFuIG9uZSBidWZmZXIgKHZ0YWJsZSBgJXMnKSIKKyAgICAgICAgICAgICAgICh2dGFibGUtbmFt
ZSB0YWJsZSkpKSkKKyAgKHNldGYgKHNsb3QtdmFsdWUgdGFibGUgJy1idWZmZXIpIChjdXJyZW50
LWJ1ZmZlcikpCisgICh2dGFibGUtLWluc2VydCB0YWJsZSkKKyAgKHdoZW4gKGFuZCAodnRhYmxl
LXVzZS1oZWFkZXItbGluZSB0YWJsZSkKKyAgICAgICAgICAgICAodnRhYmxlLXRleHQtc2NhbGUt
aGVhZGVyLWxpbmUgdGFibGUpKQorICAgIChzZXRxIHRleHQtc2NhbGUtcmVtYXAtaGVhZGVyLWxp
bmUgdCkpCisgIDs7IFNldCB1cCBidWZmZXItbG9jYWwgaG9va3MuICBUaGVzZSBuZWVkIHRvIGJl
IGRvbmUgb25seSBvbmNlIHBlcgorICA7OyBidWZmZXIgYW5kIGFsbCB0YWJsZXMgaW4gdGhlIGJ1
ZmZlciB3aWxsIGJlIHJlZnJlc2hlZCBhcyBuZWVkZWQuCisgIDs7IEV2ZW4gaWYgcmVxdWVzdGVk
IGJ5IG1vcmUgdGhhbiBvbmUgYHZ0YWJsZS1pbnNlcnQnIGNhbGwsIHRoZSBmaXJzdAorICA7OyB0
YWJsZSBpbnNlcnRlZCB3aW5zLgorICAodW5sZXNzIHZ0YWJsZS0tcG9zdC1jb21tYW5kLWhvb2tl
ZAorICAgIChhZGQtaG9vayAncG9zdC1jb21tYW5kLWhvb2sKKyAgICAgICAgICAgICAgKGxhbWJk
YSAoKQorICAgICAgICAgICAgICAgICh1bmxlc3MgKGVxIHZ0YWJsZS0tZGlzcGxheS1saW5lLW51
bWJlcnMgZGlzcGxheS1saW5lLW51bWJlcnMpCisgICAgICAgICAgICAgICAgICAoc2V0cSB2dGFi
bGUtLWRpc3BsYXktbGluZS1udW1iZXJzIGRpc3BsYXktbGluZS1udW1iZXJzKQorICAgICAgICAg
ICAgICAgICAgKHZ0YWJsZS1yZXZlcnQgdGFibGUpKSkKKyAgICAgICAgICAgICAgbmlsICdsb2Nh
bCkKKyAgICAoc2V0cS1sb2NhbCB2dGFibGUtLXBvc3QtY29tbWFuZC1ob29rZWQgdGFibGUpKQor
ICA7OyBUaGUgMC1kZWxheSBpZGxlIHRpbWVyIGF2b2lkcyBhIHNwdXJpb3VzIHJlc2l6aW5nIGlt
bWVkaWF0ZWx5CisgIDs7IGFmdGVyIHRoZSBuZXh0IHJlZGlzcGxheSBjeWNsZSBlbmRzLgorICAo
cnVuLXdpdGgtaWRsZS10aW1lcgorICAgMCBuaWwKKyAgIChsYW1iZGEgKCkKKyAgICAgOzsgRGVi
b3VuY2UgYm90aCB3aW5kb3ctc2l6ZS1jaGFuZ2UtZnVuY3Rpb25zIGFuZAorICAgICA7OyB0ZXh0
LXNjYWxlLW1vZGUtaG9vayAod2hpY2ggY2F1c2VzIHdpbmRvdyBzaXplIGNoYW5nZXMpIHRvCisg
ICAgIDs7IGNvYWxlc2NlIHJlc2l6aW5nIHRyaWdnZXIgZXZlbnRzLgorICAgICAodW5sZXNzIHZ0
YWJsZS0tdGV4dC1zY2FsZS1tb2RlLWhvb2tlZAorICAgICAgICh3aGVuICh2dGFibGUtdGV4dC1z
Y2FsZS1yZWRyYXcgdGFibGUpCisgICAgICAgICAoYWRkLWhvb2sgJ3RleHQtc2NhbGUtbW9kZS1o
b29rCisgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAgICAg
KHZ0YWJsZS0tcmV2ZXJ0LXRhYmxlcy1kZWJvdW5jZXIgdGFibGUpKQorICAgICAgICAgICAgICAg
ICAgIG5pbCAnbG9jYWwpKQorICAgICAgIChzZXRxLWxvY2FsIHZ0YWJsZS0tdGV4dC1zY2FsZS1t
b2RlLWhvb2tlZCB0YWJsZSkpCisgICAgICh1bmxlc3MgdnRhYmxlLS13aW5kb3ctY2hhbmdlcy1o
b29rZWQKKyAgICAgICAoYWRkLWhvb2sgJ3dpbmRvdy1zaXplLWNoYW5nZS1mdW5jdGlvbnMKKyAg
ICAgICAgICAgICAgICAgKGxhbWJkYSAod2luZG93KQorICAgICAgICAgICAgICAgICAgICh2dGFi
bGUtLXJldmVydC10YWJsZXMtZGVib3VuY2VyIHRhYmxlIHdpbmRvdykpCisgICAgICAgICAgICAg
ICAgIG5pbCAnbG9jYWwpCisgICAgICAgOzsgSGFuZGxlIHRhYmxlcyBjcmVhdGVkIGFuZCBub3Qg
aW1tZWRpYXRlbHkgZGlzcGxheWVkICh1bnByaW1lZAorICAgICAgIDs7IGNhY2hlKSwgYW5kIHRh
YmxlcyB0aGF0IG1heSBiZSBkaXNwbGF5ZWQgaW4gbW9yZSB0aGFuIG9uZQorICAgICAgIDs7IHdp
bmRvdyBvZiBkaWZmZXJpbmcgd2lkdGhzIChjYWNoZSBtYXkgbmVlZCBwcmltaW5nIGZvciBvbmUK
KyAgICAgICA7OyB3aWR0aCBvciBhbm90aGVyKS4KKyAgICAgICAoYWRkLWhvb2sgJ3dpbmRvdy1z
ZWxlY3Rpb24tY2hhbmdlLWZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAobGFtYmRhICh3aW5k
b3cpCisgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tcmVmcmVzaC13aW5kb3ctY2FjaGUgdGFi
bGUgd2luZG93KSkKKyAgICAgICAgICAgICAgICAgbmlsICdsb2NhbCkKKyAgICAgICAoc2V0cSB2
dGFibGUtLXdpbmRvdy1jaGFuZ2VzLWhvb2tlZCB0YWJsZSkpKSkpCisKKyhkZWZ1biB2dGFibGUt
LXJlZnJlc2gtd2luZG93LWNhY2hlICh0YWJsZSB3aW5kb3cpCisgIDs7IFdoZW4gYSB0YWJsZSdz
IGJ1ZmZlciB3aW5kb3cgaXMgc2VsZWN0ZWQsIHJlZnJlc2ggdGhlIHRhYmxlJ3MKKyAgOzsgd2lu
ZG93LXdpZHRoIGNhY2hlLCBpZiBuZWNlc3NhcnkuICBUaGlzIGFjY29tbW9kYXRlczogbWlzc2lu
ZyBjYWNoZQorICA7OyBlbnRyeSBmb3IgYSB0YWJsZSBidWZmZXIgYmVpbmcgZGlzcGxheWVkIGlu
IHdpbmRvdyBvZiBhIG5ldyB3aWR0aDsKKyAgOzsgYSBjYWNoZSB0aGF0IGhhcyBiZWNvbWUgc3Rh
bGUgaWYgdGhlIHRhYmxlJ3Mgb2JqZWN0cyB3ZXJlIHVwZGF0ZWQKKyAgOzsgd2hlbiB0aGUgYnVm
ZmVyIGlzIGRpc3BsYXllZCBpbiBhIHNlbGVjdGVkIHdpbmRvdy4KKyAgKHdoZW4gKGFuZCAoZXEg
d2luZG93IChzZWxlY3RlZC13aW5kb3cpKQorICAgICAgICAgICAgIChidWZmZXItbGl2ZS1wICh3
aW5kb3ctYnVmZmVyIHdpbmRvdykpCisgICAgICAgICAgICAgKGVxICh3aW5kb3ctYnVmZmVyIHdp
bmRvdykgKGN1cnJlbnQtYnVmZmVyKSkpCisgICAgKHVubGVzcyAodnRhYmxlLS1jYWNoZSB0YWJs
ZSkKKyAgICAgICh2dGFibGUtcmV2ZXJ0IHRhYmxlKSkpKQorCisoZGVmdmFyLWxvY2FsIHZ0YWJs
ZS0tcmV2ZXJ0LXRhYmxlcy10aW1lciBuaWwpCisoZGVmdmFyLWxvY2FsIHZ0YWJsZS0tcmV2ZXJ0
LXRhYmxlcy1jYWNoZWQtd2luZG93LXdpZHRoIG5pbCkKKworKGRlZnVuIHZ0YWJsZS0tcmV2ZXJ0
LXRhYmxlcy1kZWJvdW5jZXIgKHRhYmxlICZvcHRpb25hbCB3aW5kb3cpCisgICh3aGVuICh0aW1l
cnAgdnRhYmxlLS1yZXZlcnQtdGFibGVzLXRpbWVyKQorICAgIChjYW5jZWwtdGltZXIgdnRhYmxl
LS1yZXZlcnQtdGFibGVzLXRpbWVyKSkKKyAgOzsgRW5zdXJlIHRoZSB3aW5kb3cgaXMgYXNzb2Np
YXRlZCB3aXRoIHRoZSB0YWJsZS4gIFJlZHJhdyBvbmx5IGlmIHRoZQorICA7OyB3aW5kb3cncyB3
aWR0aCBjaGFuZ2VkLCBub3QgaXRzIGhlaWdodC4gIFRoaXMgcHJldmVudHMgc3B1cmlvdXMKKyAg
OzsgcmVkcmF3cyBkdWUgdG8sIGZvciBleGFtcGxlLCBtaW5pYnVmZmVyIHdpbmRvdyBkaXNwbGF5
IHdoaWNoIGFsdGVyCisgIDs7IGhlaWdodCBidXQgbm90IHdpZHRoLgorICAoc2V0cSB3aW5kb3cg
KG9yIHdpbmRvdyAoc2VsZWN0ZWQtd2luZG93KSkpCisgICh3aGVuIChlcSAod2luZG93LWJ1ZmZl
ciB3aW5kb3cpIChjdXJyZW50LWJ1ZmZlcikpCisgICAgKHNldHEgdnRhYmxlLS1yZXZlcnQtdGFi
bGVzLXRpbWVyCisgICAgICAgICAgKHJ1bi13aXRoLXRpbWVyICh2dGFibGUtcmVzaXplLWRlYm91
bmNlLWludGVydmFsIHRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAod2luZG93KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh3aGVuICh0aW1lcnAgdnRhYmxlLS1yZXZlcnQtdGFibGVzLXRpbWVyKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbmNlbC10aW1lciB2dGFibGUtLXJldmVydC10
YWJsZXMtdGltZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHZ0YWJsZS0t
cmV2ZXJ0LXRhYmxlcy10aW1lciBuaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxl
dCAoKHdpbmRvdy13aWR0aCAod2luZG93LWJvZHktd2lkdGggd2luZG93ICdyZW1hcCkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVubGVzcworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChlcSB2dGFibGUtLXJldmVydC10YWJsZXMtY2FjaGVkLXdpbmRvdy13aWR0
aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3ctd2lkdGgpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHZ0YWJsZS0tcmV2ZXJ0LXRhYmxl
cy1jYWNoZWQtd2luZG93LXdpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpbmRvdy13aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJs
ZS0tcmV2ZXJ0LXRhYmxlcykpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93KSkp
KQorCisoZGVmdW4gdnRhYmxlLS1yZXZlcnQtdGFibGVzICgpCisgIChkb2xpc3QgKHRhYmxlICh2
dGFibGUtLWJ1ZmZlci10YWJsZXMpKQorICAgICh2dGFibGUtcmV2ZXJ0IHRhYmxlKSkpCisKKyhk
ZWZ1biB2dGFibGUtLWluc2VydC1saW5lICh0YWJsZSBsaW5lIGxpbmUtbnVtYmVyIHdpZHRocwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBlbGxpcHNpcykKKyAg
KGxldCogKChzdGFydCAocG9pbnQpKQorICAgICAgICAgKGJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0
YWJsZSkpCisgICAgICAgICAoYm9keS1mYWNlICh2dGFibGUtZmFjZSB0YWJsZSkpCisgICAgICAg
ICAoY29sdW1ucyAodnRhYmxlLWNvbHVtbnMgdGFibGUpKQorICAgICAgICAgKGNvbHVtbi1jb2xv
ci1mdW5jdGlvbiAodnRhYmxlLWNvbHVtbi1jb2xvci1mdW5jdGlvbiB0YWJsZSkpCisgICAgICAg
ICAocm93LWNvbG9yLWZ1bmN0aW9uICh2dGFibGUtcm93LWNvbG9yLWZ1bmN0aW9uIHRhYmxlKSkK
KyAgICAgICAgIChjb2x1bW4tY29sb3JzCisgICAgICAgICAgKGFuZCAodnRhYmxlLWNvbHVtbi1j
b2xvcnMgdGFibGUpCisgICAgICAgICAgICAgICAoaWYgKHZ0YWJsZS1yb3ctY29sb3JzIHRhYmxl
KQorICAgICAgICAgICAgICAgICAgIChlbHQgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZWQtY29s
b3JzKQorICAgICAgICAgICAgICAgICAgICAgICAgKG1vZCBsaW5lLW51bWJlciAobGVuZ3RoICh2
dGFibGUtcm93LWNvbG9ycyB0YWJsZSkpKSkKKyAgICAgICAgICAgICAgICAgKHNsb3QtdmFsdWUg
dGFibGUgJy1jYWNoZWQtY29sb3JzKSkpKQorICAgICAgICAgOzsgc3BhY2VyIGFuZCBkaXZpZGVy
LCB3aGVuIGluIHBpeGVscywgYXJlIHRleHQtc2NhbGUgYWRqdXN0ZWQKKyAgICAgICAgIChzcGFj
ZXIgKHZ0YWJsZS0tc3BhY2VyIHRhYmxlKSkKKyAgICAgICAgIChkaXZpZGVyICh2dGFibGUtLWRp
dmlkZXIgdGFibGUpKQorICAgICAgICAgOzsgY29sdW1uLXdpZHRoIGlzIGFkanVzdGVkIGJ5IGlu
ZGljYXRvci1wYWQtd2lkdGggZm9yCisgICAgICAgICA7OyBwaXhlbC1hbGlnbm1lbnQgd2l0aCB0
aGUgaGVhZGVyIGxpbmUuCisgICAgICAgICAoaW5kaWNhdG9yLXBhZC13aWR0aCAoc3RyaW5nLXBp
eGVsLXdpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNsb3QtdmFsdWUgdGFi
bGUgJy1pbmRpY2F0b3ItcGFkKSBidWZmZXIpKQorICAgICAgICAgKGtleW1hcCAoc2xvdC12YWx1
ZSB0YWJsZSAnLWNhY2hlZC1rZXltYXApKQorICAgICAgICAgKGRyYWcta2V5bWFwIChzbG90LXZh
bHVlIHRhYmxlICctY2FjaGVkLWRyYWcta2V5bWFwKSkpCiAgICAgKHNlcS1kby1pbmRleGVkCiAg
ICAgIChsYW1iZGEgKGVsZW0gaW5kZXgpCi0gICAgICAgKGxldCAoKHZhbHVlIChudGggMCBlbGVt
KSkKLSAgICAgICAgICAgICAoY29sdW1uIChlbHQgY29sdW1ucyBpbmRleCkpCi0gICAgICAgICAg
ICAgKHByZS1jb21wdXRlZCAobnRoIDIgZWxlbSkpKQorICAgICAgIChsZXQqICgodmFsdWUgKG50
aCAwIGVsZW0pKQorICAgICAgICAgICAgICAoY29sdW1uIChlbHQgY29sdW1ucyBpbmRleCkpCisg
ICAgICAgICAgICAgIDs7IENhY2hlZCB3aWR0aHMgd2lsbCBiZSB0ZXh0LXNjYWxlIGFkanVzdGVk
LCBleGNlcHQgZm9yCisgICAgICAgICAgICAgIDs7IHdpZHRocyBzcGVjaWZpZWQgaW4gcGl4ZWxz
IG9yIHBlcmNlbnQgb2Ygd2luZG93IHdpZHRoLAorICAgICAgICAgICAgICA7OyB3aGljaCBhcmUg
YWJzb2x1dGUgYW5kIHBpeGVsd2lzZS4KKyAgICAgICAgICAgICAgKGNvbHVtbi13aWR0aCAoLSAo
ZWx0IHdpZHRocyBpbmRleCkgaW5kaWNhdG9yLXBhZC13aWR0aCkpCisgICAgICAgICAgICAgIChw
cmUtY29tcHV0ZWQgKG50aCAyIGVsZW0pKSkKKyAgICAgICAgIDs7IHByZS1jb21wdXRlZCBhbHJl
YWR5IGhhcyB0aGUgYm9keSBmYWNlLgorICAgICAgICAgOzsgV2UgYWRkIHRoZSBib2R5IGZhY2Ug
dG8gdGhlIGZvcm1hdHRlZCB2YWx1ZSBhcyBuZWVkZWQuCiAgICAgICAgICA7OyBTZWUgaWYgd2Ug
aGF2ZSBhbnkgZm9ybWF0dGVycyBoZXJlLgogICAgICAgICAgKGNvbmQKICAgICAgICAgICAoKHZ0
YWJsZS1jb2x1bW4tZm9ybWF0dGVyIGNvbHVtbikKLSAgICAgICAgICAgKHNldHEgdmFsdWUgKGZ1
bmNhbGwgKHZ0YWJsZS1jb2x1bW4tZm9ybWF0dGVyIGNvbHVtbikgdmFsdWUpCi0gICAgICAgICAg
ICAgICAgIHByZS1jb21wdXRlZCBuaWwpKQorICAgICAgICAgICAoc2V0cSB2YWx1ZQorICAgICAg
ICAgICAgICAgICAoZnVuY2FsbCAodnRhYmxlLWNvbHVtbi1mb3JtYXR0ZXIgY29sdW1uKSB2YWx1
ZSkKKyAgICAgICAgICAgICAgICAgcHJlLWNvbXB1dGVkIG5pbCkKKyAgICAgICAgICAgKGFkZC1m
YWNlLXRleHQtcHJvcGVydHkgMCAobGVuZ3RoIHZhbHVlKSBib2R5LWZhY2UgJ2FwcGVuZCB2YWx1
ZSkpCiAgICAgICAgICAgKCh2dGFibGUtZm9ybWF0dGVyIHRhYmxlKQogICAgICAgICAgICAoc2V0
cSB2YWx1ZSAoZnVuY2FsbCAodnRhYmxlLWZvcm1hdHRlciB0YWJsZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgaW5kZXggdGFibGUpCi0gICAgICAgICAgICAgICAgIHBy
ZS1jb21wdXRlZCBuaWwpKSkKLSAgICAgICAgIChsZXQgKChkaXNwbGF5ZWQKLSAgICAgICAgICAg
ICAgICA7OyBBbGxvdyBhbnkgZGlzcGxheWVycyB0byBoYXZlIHRoZWlyIHNheS4KLSAgICAgICAg
ICAgICAgICAoY29uZAotICAgICAgICAgICAgICAgICAoKHZ0YWJsZS1jb2x1bW4tZGlzcGxheWVy
IGNvbHVtbikKLSAgICAgICAgICAgICAgICAgIChmdW5jYWxsICh2dGFibGUtY29sdW1uLWRpc3Bs
YXllciBjb2x1bW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAoZWx0IHdpZHRo
cyBpbmRleCkgdGFibGUpKQotICAgICAgICAgICAgICAgICAoKHZ0YWJsZS1kaXNwbGF5ZXIgdGFi
bGUpCi0gICAgICAgICAgICAgICAgICAoZnVuY2FsbCAodnRhYmxlLWRpc3BsYXllciB0YWJsZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGluZGV4IChlbHQgd2lkdGhzIGluZGV4
KSB0YWJsZSkpCi0gICAgICAgICAgICAgICAgIChwcmUtY29tcHV0ZWQKLSAgICAgICAgICAgICAg
ICAgIDs7IElmIHdlIGRvbid0IGhhdmUgYSBkaXNwbGF5ZXIsIHVzZSB0aGUgcHJlLW1hZGUKLSAg
ICAgICAgICAgICAgICAgIDs7IChjYWNoZWQpIHN0cmluZyB2YWx1ZS4KLSAgICAgICAgICAgICAg
ICAgIChpZiAoPiAobnRoIDEgZWxlbSkgKGVsdCB3aWR0aHMgaW5kZXgpKQotICAgICAgICAgICAg
ICAgICAgICAgIChjb25jYXQKLSAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQt
c3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmUtY29tcHV0ZWQgKC0gKGVsdCB3aWR0
aHMgaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIGVs
bGlwc2lzLXdpZHRoIDApKSkKLSAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXMpCi0gICAg
ICAgICAgICAgICAgICAgIHByZS1jb21wdXRlZCkpCi0gICAgICAgICAgICAgICAgIDs7IFJlY29t
cHV0ZSB3aWR0aHMuCi0gICAgICAgICAgICAgICAgICh0Ci0gICAgICAgICAgICAgICAgICAoaWYg
KD4gKHN0cmluZy1waXhlbC13aWR0aCB2YWx1ZSkgKGVsdCB3aWR0aHMgaW5kZXgpKQotICAgICAg
ICAgICAgICAgICAgICAgIChjb25jYXQKLSAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0t
bGltaXQtc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAoLSAoZWx0IHdpZHRo
cyBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBlbGxpcHNpcy13
aWR0aCAwKSkpCi0gICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzKQotICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSkpKSkKLSAgICAgICAgICAgICAgIChzdGFydCAocG9pbnQpKQotICAgICAg
ICAgICAgICAgOzsgRG9uJ3QgaW5zZXJ0IHRoZSBzZXBhcmF0b3IgYWZ0ZXIgdGhlIGZpbmFsIGNv
bHVtbi4KLSAgICAgICAgICAgICAgIChsYXN0ICg9IGluZGV4ICgtIChsZW5ndGggbGluZSkgMikp
KSkKLSAgICAgICAgICAgKGlmIChlcSAodnRhYmxlLWNvbHVtbi1hbGlnbiBjb2x1bW4pICdsZWZ0
KQotICAgICAgICAgICAgICAgKHByb2duCi0gICAgICAgICAgICAgICAgIChpbnNlcnQgZGlzcGxh
eWVkKQotICAgICAgICAgICAgICAgICAoaW5zZXJ0IChwcm9wZXJ0aXplCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICIgIiAnZGlzcGxheQotICAgICAgICAgICAgICAgICAgICAgICAgICAobGlz
dCAnc3BhY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOndpZHRoIChsaXN0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCsgKC0gKGVsdCB3aWR0aHMg
aW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0
cmluZy1waXhlbC13aWR0aCBkaXNwbGF5ZWQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChpZiBsYXN0IDAgc3BhY2VyKSkpKSkpKQotICAgICAgICAgICAgIDs7
IEFsaWduIHRvIHRoZSByaWdodC4KLSAgICAgICAgICAgICAoaW5zZXJ0IChwcm9wZXJ0aXplICIg
IiAnZGlzcGxheQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgJ3NwYWNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6d2lkdGggKGxpc3QgKC0g
KGVsdCB3aWR0aHMgaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHN0cmluZy1waXhlbC13aWR0aAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWQpKSkpKQotICAg
ICAgICAgICAgICAgICAgICAgZGlzcGxheWVkKQotICAgICAgICAgICAgICh1bmxlc3MgbGFzdAot
ICAgICAgICAgICAgICAgKGluc2VydCAocHJvcGVydGl6ZSAiICIgJ2Rpc3BsYXkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgJ3NwYWNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDp3aWR0aCAobGlzdCBzcGFjZXIpKSkpKSkKLSAgICAg
ICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IHN0YXJ0IChwb2ludCkgJ3Z0YWJsZS1jb2x1bW4gaW5k
ZXgpCi0gICAgICAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSBzdGFydCAocG9pbnQpICdrZXltYXAg
a2V5bWFwKQotICAgICAgICAgICAod2hlbiBjb2x1bW4tY29sb3JzCisgICAgICAgICAgICAgICAg
IHByZS1jb21wdXRlZCBuaWwpCisgICAgICAgICAgIChhZGQtZmFjZS10ZXh0LXByb3BlcnR5IDAg
KGxlbmd0aCB2YWx1ZSkgYm9keS1mYWNlICdhcHBlbmQgdmFsdWUpKSkKKyAgICAgICAgIChsZXQq
ICgoY29sdW1uLXN0YXJ0IChwb2ludCkpCisgICAgICAgICAgICAgICAgKHZhbHVlLWxlbmd0aCAo
bGVuZ3RoIChvciBwcmUtY29tcHV0ZWQgdmFsdWUpKSkKKyAgICAgICAgICAgICAgICA7OyBlbGxp
cHNpcysgdGV4dCBwcm9wZXJ0aWVzIGFyZSB0aG9zZSBvZiB0aGUgZmluYWwgdmFsdWUgY2hhcmFj
dGVyLgorICAgICAgICAgICAgICAgIChlbGxpcHNpcysgKGNvcHktc2VxdWVuY2UgZWxsaXBzaXMp
KQorICAgICAgICAgICAgICAgIChfICh3aGVuICg+IHZhbHVlLWxlbmd0aCAwKQorICAgICAgICAg
ICAgICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAgICAgICAw
IChsZW5ndGggZWxsaXBzaXMrKQorICAgICAgICAgICAgICAgICAgICAgICh0ZXh0LXByb3BlcnRp
ZXMtYXQgKDEtIHZhbHVlLWxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChvciBwcmUtY29tcHV0ZWQgdmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAg
IGVsbGlwc2lzKykpKQorICAgICAgICAgICAgICAgIChlbGxpcHNpcy13aWR0aCAoc3RyaW5nLXBp
eGVsLXdpZHRoIGVsbGlwc2lzKyBidWZmZXIpKQorICAgICAgICAgICAgICAgIChjbGlwcGVkLXZh
bHVlLXdpZHRoICgtIGNvbHVtbi13aWR0aCBlbGxpcHNpcy13aWR0aCkpCisgICAgICAgICAgICAg
ICAgKGRpc3BsYXllZAorICAgICAgICAgICAgICAgICA7OyBBbGxvdyBhbnkgZGlzcGxheWVycyB0
byBoYXZlIHRoZWlyIHNheS4KKyAgICAgICAgICAgICAgICAgKGNvbmQKKyAgICAgICAgICAgICAg
ICAgICgodnRhYmxlLWNvbHVtbi1kaXNwbGF5ZXIgY29sdW1uKQorICAgICAgICAgICAgICAgICAg
IChmdW5jYWxsICh2dGFibGUtY29sdW1uLWRpc3BsYXllciBjb2x1bW4pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWUgY2xpcHBlZC12YWx1ZS13aWR0aCB0YWJsZSkpCisgICAgICAg
ICAgICAgICAgICAoKHZ0YWJsZS1kaXNwbGF5ZXIgdGFibGUpCisgICAgICAgICAgICAgICAgICAg
KGZ1bmNhbGwgKHZ0YWJsZS1kaXNwbGF5ZXIgdGFibGUpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgaW5kZXggY2xpcHBlZC12YWx1ZS13aWR0aCB0YWJsZSkpCisgICAgICAgICAg
ICAgICAgICAocHJlLWNvbXB1dGVkCisgICAgICAgICAgICAgICAgICAgOzsgSWYgd2UgZG9uJ3Qg
aGF2ZSBhIGRpc3BsYXllciwgdXNlIHRoZSBwcmUtbWFkZQorICAgICAgICAgICAgICAgICAgIDs7
IChjYWNoZWQpIHN0cmluZyB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAoaWYgKD4gKG50aCAx
IGVsZW0pIGNvbHVtbi13aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdAorICAg
ICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQtc3RyaW5nCisgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJlLWNvbXB1dGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBl
ZC12YWx1ZS13aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcgorICAgICAgICAg
ICAgICAgICAgICAgICAgICh2dGFibGUtY29sdW1uLXRydW5jYXRlLWd1ZXNzIGNvbHVtbikpCisg
ICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpcyspCisgICAgICAgICAgICAgICAgICAgICBw
cmUtY29tcHV0ZWQpKQorICAgICAgICAgICAgICAgICAgOzsgUmVjb21wdXRlIHdpZHRocy4KKyAg
ICAgICAgICAgICAgICAgICh0CisgICAgICAgICAgICAgICAgICAgKGlmICg+IChzdHJpbmctcGl4
ZWwtd2lkdGggdmFsdWUgYnVmZmVyKSBjb2x1bW4td2lkdGgpCisgICAgICAgICAgICAgICAgICAg
ICAgIChjb25jYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWxpbWl0LXN0cmlu
ZworICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xpcHBlZC12YWx1ZS13aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcgor
ICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtY29sdW1uLXRydW5jYXRlLWd1ZXNzIGNv
bHVtbikpCisgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpcyspCisgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSkpKSkKKyAgICAgICAgICAgICAgICAoZGlzcGxheWVkLXdpZHRoIChzdHJp
bmctcGl4ZWwtd2lkdGggZGlzcGxheWVkIGJ1ZmZlcikpCisgICAgICAgICAgICAgICAgOzsgRG9u
J3QgaW5zZXJ0IHRoZSBzZXBhcmF0b3Igb3IgZGl2aWRlciBhZnRlciB0aGUgZmluYWwgY29sdW1u
LgorICAgICAgICAgICAgICAgIChsYXN0ICg9IGluZGV4ICgtIChsZW5ndGggbGluZSkgMikpKQor
ICAgICAgICAgICAgICAgIDs7IE9uIHRoZSBsYXN0IGNvbHVtbiwgbGVhdmUgb25lIGNoYXIgd2lk
dGguCisgICAgICAgICAgICAgICAgKHNwYWNlciAoaWYgbGFzdAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh2dGFibGUtLWNoYXItd2lkdGggdGFibGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNwYWNlcikpCisgICAgICAgICAgICAgICAgKHNwYWNlci1zdHIgKHByb3BlcnRpemUg
IiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3BhY2UgOndpZHRo
IChsaXN0IHNwYWNlcikpKSkKKyAgICAgICAgICAgICAgICAoZmlsbC13aWR0aCAoLSBjb2x1bW4t
d2lkdGggZGlzcGxheWVkLXdpZHRoKSkKKyAgICAgICAgICAgICAgICAoYWxpZ24gKHZ0YWJsZS1j
b2x1bW4tYWxpZ24gY29sdW1uKSkKKyAgICAgICAgICAgICAgICBmaWxsLXN0cgorICAgICAgICAg
ICAgICAgIGZpbGwtcmlnaHQtc3RyKQorICAgICAgICAgICAocGNhc2UtZXhoYXVzdGl2ZSBhbGln
bgorICAgICAgICAgICAgICgob3IgJ2xlZnQgJ3JpZ2h0KQorICAgICAgICAgICAgICAoc2V0cSBm
aWxsLXN0cgorICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZQorICAgICAgICAgICAgICAg
ICAgICAgIiAiCisgICAgICAgICAgICAgICAgICAgICAnZGlzcGxheQorICAgICAgICAgICAgICAg
ICAgICAgKGxpc3QgJ3NwYWNlIDp3aWR0aCAobGlzdCBmaWxsLXdpZHRoKSkpKSkKKyAgICAgICAg
ICAgICAoJ2NlbnRlcgorICAgICAgICAgICAgICAobGV0ICgoaGFsZi1maWxsICgvIGZpbGwtd2lk
dGggMikpKQorICAgICAgICAgICAgICAgIChzZXRxIGZpbGwtc3RyCisgICAgICAgICAgICAgICAg
ICAgICAgKHByb3BlcnRpemUKKyAgICAgICAgICAgICAgICAgICAgICAgIiAiCisgICAgICAgICAg
ICAgICAgICAgICAgICdkaXNwbGF5CisgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdzcGFj
ZSA6d2lkdGggKGxpc3QgaGFsZi1maWxsKSkpKQorICAgICAgICAgICAgICAgIChzZXRxIGZpbGwt
cmlnaHQtc3RyCisgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUKKyAgICAgICAgICAg
ICAgICAgICAgICAgIiAiCisgICAgICAgICAgICAgICAgICAgICAgICdkaXNwbGF5CisgICAgICAg
ICAgICAgICAgICAgICAgIChsaXN0ICdzcGFjZSA6d2lkdGggKGxpc3QgKC0gZmlsbC13aWR0aCBo
YWxmLWZpbGwpKSkpKSkpKQorICAgICAgICAgICAod2hlbiAodnRhYmxlLWRlY29yLWludGFuZ2li
bGUgdGFibGUpCisgICAgICAgICAgICAgOzsgTm90ZTogZWFjaCBhcmUgZGlmZmVyZW50LCBzbyB0
YWtlIHNvbWUgY2FyZS4KKyAgICAgICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyAwIChsZW5n
dGggc3BhY2VyLXN0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAn
Y3Vyc29yLWludGFuZ2libGUgdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdmcm9udC1zdGlja3kgdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdyZWFyLW5vbnN0aWNreSBuaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3BhY2VyLXN0cikKKyAgICAgICAgICAgICAocGNhc2UtZXhoYXVzdGl2ZSBhbGlnbgorICAg
ICAgICAgICAgICAgKCdsZWZ0CisgICAgICAgICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMg
MCAobGVuZ3RoIGZpbGwtc3RyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChsaXN0ICdjdXJzb3ItaW50YW5naWJsZSB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2Zyb250LXN0aWNreSBuaWwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAncmVhci1ub25zdGlja3kgdCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWxsLXN0cikpCisgICAgICAgICAgICAgICAoJ3JpZ2h0Cisg
ICAgICAgICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgMCAobGVuZ3RoIGZpbGwtc3RyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdjdXJzb3ItaW50YW5n
aWJsZSB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zyb250
LXN0aWNreSBuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
cmVhci1ub25zdGlja3kgbmlsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpbGwtc3RyKSkKKyAgICAgICAgICAgICAgICgnY2VudGVyCisgICAgICAgICAgICAgICAgKGFk
ZC10ZXh0LXByb3BlcnRpZXMgMCAobGVuZ3RoIGZpbGwtc3RyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChsaXN0ICdjdXJzb3ItaW50YW5naWJsZSB0CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zyb250LXN0aWNreSBuaWwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVhci1ub25zdGlja3kgdCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsLXN0cikKKyAgICAgICAg
ICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyAwIChsZW5ndGggZmlsbC1yaWdodC1zdHIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgJ2N1cnNvci1pbnRhbmdp
YmxlIHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbnQt
c3RpY2t5IG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdy
ZWFyLW5vbnN0aWNreSBuaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsbC1yaWdodC1zdHIpKSkpCisgICAgICAgICAgIChwY2FzZS1leGhhdXN0aXZlIGFsaWduCisg
ICAgICAgICAgICAgKCdsZWZ0CisgICAgICAgICAgICAgIChpbnNlcnQKKyAgICAgICAgICAgICAg
IGRpc3BsYXllZAorICAgICAgICAgICAgICAgZmlsbC1zdHIKKyAgICAgICAgICAgICAgIChzbG90
LXZhbHVlIHRhYmxlICctaW5kaWNhdG9yLXBhZCkKKyAgICAgICAgICAgICAgIHNwYWNlci1zdHIp
KQorICAgICAgICAgICAgICgncmlnaHQKKyAgICAgICAgICAgICAgKGluc2VydAorICAgICAgICAg
ICAgICAgZmlsbC1zdHIKKyAgICAgICAgICAgICAgIChzbG90LXZhbHVlIHRhYmxlICctaW5kaWNh
dG9yLXBhZCkKKyAgICAgICAgICAgICAgIGRpc3BsYXllZAorICAgICAgICAgICAgICAgc3BhY2Vy
LXN0cikpCisgICAgICAgICAgICAgKCdjZW50ZXIKKyAgICAgICAgICAgICAgKGluc2VydAorICAg
ICAgICAgICAgICAgZmlsbC1zdHIKKyAgICAgICAgICAgICAgIGRpc3BsYXllZAorICAgICAgICAg
ICAgICAgZmlsbC1yaWdodC1zdHIKKyAgICAgICAgICAgICAgIChzbG90LXZhbHVlIHRhYmxlICct
aW5kaWNhdG9yLXBhZCkKKyAgICAgICAgICAgICAgIHNwYWNlci1zdHIpKSkKKyAgICAgICAgICAg
KHdoZW4gKG9yIGNvbHVtbi1jb2xvci1mdW5jdGlvbiBjb2x1bW4tY29sb3JzKQogICAgICAgICAg
ICAgIChhZGQtZmFjZS10ZXh0LXByb3BlcnR5Ci0gICAgICAgICAgICAgIHN0YXJ0IChwb2ludCkK
LSAgICAgICAgICAgICAgKGVsdCBjb2x1bW4tY29sb3JzIChtb2QgaW5kZXggKGxlbmd0aCBjb2x1
bW4tY29sb3JzKSkpKSkKLSAgICAgICAgICAgKHdoZW4gZGl2aWRlcgotICAgICAgICAgICAgIChp
bnNlcnQgZGl2aWRlcikKLSAgICAgICAgICAgICAoc2V0cSBzdGFydCAocG9pbnQpKSkpKSkKKyAg
ICAgICAgICAgICAgY29sdW1uLXN0YXJ0IChwb2ludCkKKyAgICAgICAgICAgICAgKGlmIGNvbHVt
bi1jb2xvci1mdW5jdGlvbgorICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgY29sdW1uLWNvbG9y
LWZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLW51bWJlciBpbmRleCB2
YWx1ZSAoY2FyIGxpbmUpIGNvbHVtbi1jb2xvcnMpCisgICAgICAgICAgICAgICAgKGVsdCBjb2x1
bW4tY29sb3JzIChtb2QgaW5kZXggKGxlbmd0aCBjb2x1bW4tY29sb3JzKSkpKSkpCisgICAgICAg
ICAgIDs7IFRoZSBjb2x1bW4gaGVhZGVyIGtleW1hcCBpbmNsdWRlcyBzb3J0aW5nLgorICAgICAg
ICAgICAocHV0LXRleHQtcHJvcGVydHkgY29sdW1uLXN0YXJ0IChwb2ludCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdrZXltYXAga2V5bWFwKQorICAgICAgICAgICA7OyBUaGUgZGl2
aWRlciBrZXltYXAgYWRkcyBkcmFnIHRvIHJlc2l6ZS4KKyAgICAgICAgICAgKHdoZW4gKGFuZCBk
aXZpZGVyIChub3QgbGFzdCkpCisgICAgICAgICAgICAgKGluc2VydAorICAgICAgICAgICAgICAo
cHJvcGVydGl6ZSBkaXZpZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICdrZXltYXAgZHJh
Zy1rZXltYXApKSkKKyAgICAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IGNvbHVtbi1zdGFydCAo
cG9pbnQpICd2dGFibGUtY29sdW1uIGluZGV4KSkpKQogICAgICAoY2RyIGxpbmUpKQotICAgIChp
bnNlcnQgIlxuIikKLSAgICAocHV0LXRleHQtcHJvcGVydHkgc3RhcnQgKHBvaW50KSAndnRhYmxl
LW9iamVjdCAoY2FyIGxpbmUpKQotICAgICh1bmxlc3MgY29sdW1uLWNvbG9ycwotICAgICAgKHdo
ZW4tbGV0KiAoKHJvdy1jb2xvcnMgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZWQtY29sb3JzKSkp
CisgICAgKGluc2VydCAocHJvcGVydGl6ZSAiXG4iICdrZXltYXAga2V5bWFwKSkKKyAgICAoYWRk
LXRleHQtcHJvcGVydGllcyBzdGFydCAocG9pbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAg
KGxpc3QgJ3Z0YWJsZS1vYmplY3QgKGNhciBsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICd2dGFibGUgdGFibGUpKQorICAgICh3aGVuICh2dGFibGUtb2JqZWN0LW1hcmtlZC1w
IHRhYmxlIChjYXIgbGluZSkpCisgICAgICAoYWRkLWZhY2UtdGV4dC1wcm9wZXJ0eSBzdGFydCAo
cG9pbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLW1hcmtlZC1mYWNl
IHRhYmxlKSkpCisgICAgKGxldCAoKHJvdy1jb2xvcnMgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNo
ZWQtY29sb3JzKSkpCisgICAgICAoY29uZAorICAgICAgIChyb3ctY29sb3ItZnVuY3Rpb24KICAg
ICAgICAgKGFkZC1mYWNlLXRleHQtcHJvcGVydHkKICAgICAgICAgIHN0YXJ0IChwb2ludCkKLSAg
ICAgICAgIChlbHQgcm93LWNvbG9ycyAobW9kIGxpbmUtbnVtYmVyIChsZW5ndGggcm93LWNvbG9y
cykpKSkpKSkpCi0KLShkZWZ1biB2dGFibGUtLWNhY2hlLWtleSAoKQotICAoY29ucyAoZnJhbWUt
dGVybWluYWwpICh3aW5kb3ctd2lkdGgpKSkKKyAgICAgICAgIChmdW5jYWxsIHJvdy1jb2xvci1m
dW5jdGlvbgorICAgICAgICAgICAgICAgICAgbGluZS1udW1iZXIgKGNhciBsaW5lKSByb3ctY29s
b3JzKSkpCisgICAgICAgKChhbmQgcm93LWNvbG9ycworICAgICAgICAgICAgIChudWxsIGNvbHVt
bi1jb2xvcnMpKQorICAgICAgICAoYWRkLWZhY2UtdGV4dC1wcm9wZXJ0eQorICAgICAgICAgc3Rh
cnQgKHBvaW50KQorICAgICAgICAgKGVsdCByb3ctY29sb3JzIChtb2QgbGluZS1udW1iZXIgKGxl
bmd0aCByb3ctY29sb3JzKSkpKSkpKQorICAgICh3aGVuICh2dGFibGUtcm93LXRleHQtcHJvcGVy
dGllcyB0YWJsZSkKKyAgICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgICAoZm9yd2FyZC1saW5l
IC0xKQorICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyAocG9zLWJvbCkgKHBvcy1lb2wpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtcm93LXRleHQtcHJvcGVydGllcyB0
YWJsZSkpKSkpKQorCisoZGVmdmFyIHZ0YWJsZS0taW5oaWJpdC1vYmplY3RzLXRpY2sgbmlsCisg
ICJJZiBub24tbmlsLCBvYmplY3RzIHRpY2sgd2lsbCBub3QgYmUgaW5jcmVhc2VkLgorVGhpcyBp
cyBib3VuZCBieSBvYmplY3QgbWFya2luZyBmdW5jdGlvbnMgd2hpY2ggZG8gbm90IGFsdGVyIG9i
amVjdAorc3RhdGUuIikKKworKGRlZnVuIHZ0YWJsZS0tb2JqZWN0cy10aWNrICh0YWJsZSkKKyAg
KHNsb3QtdmFsdWUgdGFibGUgJy1vYmplY3RzLXRpY2spKQorCisoZGVmdW4gdnRhYmxlLS10aWNr
LW9iamVjdHMgKHRhYmxlKQorICAodW5sZXNzIHZ0YWJsZS0taW5oaWJpdC1vYmplY3RzLXRpY2sK
KyAgICAoc2V0ZiAoc2xvdC12YWx1ZSB0YWJsZSAnLW9iamVjdHMtdGljaykKKyAgICAgICAgICAo
MSsgKHNsb3QtdmFsdWUgdGFibGUgJy1vYmplY3RzLXRpY2spKSkpKQorCisoZGVmdW4gdnRhYmxl
LS1jYWNoZS1rZXkgKHRhYmxlKQorICAobGV0ICgod2luZG93IChzZWxlY3RlZC13aW5kb3cpKSkK
KyAgICAoaWYgKGFuZCAod2luZG93LWxpdmUtcCB3aW5kb3cpCisgICAgICAgICAgICAgKGVxICh3
aW5kb3ctYnVmZmVyIHdpbmRvdykgKHZ0YWJsZS1idWZmZXIgdGFibGUpKSkKKyAgICAgICAgKGNv
bnMgKGZyYW1lLXRlcm1pbmFsKSAod2luZG93LWJvZHktd2lkdGggd2luZG93ICdyZW1hcCkpCisg
ICAgICA7OyBEZWZhdWx0IGtleSBmb3IgYW4gYWN0aXZlIHRhYmxlIG5vdCBjdXJyZW50bHkgZGlz
cGxheWVkIGluIGEKKyAgICAgIDs7IHdpbmRvdywgb3IgaWYgdGhlIGBzZWxlY3RlZC13aW5kb3cn
IGlzIGEgbm9uLXRhYmxlIHdpbmRvdy4KKyAgICAgIChjb25zIHQgdCkpKSkKCiAoZGVmdW4gdnRh
YmxlLS1jYWNoZSAodGFibGUpCi0gIChnZXRoYXNoICh2dGFibGUtLWNhY2hlLWtleSkgKHNsb3Qt
dmFsdWUgdGFibGUgJy1jYWNoZSkpKQorICAobGV0ICgoY2FjaGUgKGdldGhhc2ggKHZ0YWJsZS0t
Y2FjaGUta2V5IHRhYmxlKSAoc2xvdC12YWx1ZSB0YWJsZSAnLWNhY2hlKSkpKQorICAgIChpZiAo
bGVuZ3RoPSAodnRhYmxlLS1jYWNoZS1saW5lcyBjYWNoZSkgMCkKKyAgICAgICAgOzsgRm9yY2Ug
YW4gZW1wdHkgY2FjaGUgdG8gYmUgcG9wdWxhdGVkOyB0aGlzIGNhbiBvY2N1ciBhdAorICAgICAg
ICA7OyB2dGFibGUgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIChwcm9nbgorICAgICAgICAgICh2
dGFibGUtLWNsZWFyLWNhY2hlIHRhYmxlKQorICAgICAgICAgIG5pbCkKKyAgICAgIChpZiAodnRh
YmxlLS1jYWNoZS10aWNrLXZhbGlkLXAgdGFibGUgY2FjaGUpCisgICAgICAgICAgY2FjaGUKKyAg
ICAgICAgOzsgRm9yY2UgYSBzdGFsZSBjYWNoZSB0byBiZSByZXBvcHVsYXRlZC4KKyAgICAgICAg
KHZ0YWJsZS0tY2xlYXItY2FjaGUgdGFibGUpCisgICAgICAgIG5pbCkpKSkKCiAoZGVmdW4gdnRh
YmxlLS1jbGVhci1jYWNoZSAodGFibGUpCi0gIChzZXRmIChnZXRoYXNoICh2dGFibGUtLWNhY2hl
LWtleSkgKHNsb3QtdmFsdWUgdGFibGUgJy1jYWNoZSkpIG5pbCkpCi0KLShkZWZ1biB2dGFibGUt
LXNvcnQgKHRhYmxlKQotICAocGNhc2UtZG9saXN0IChgKCxpbmRleCAuICxkaXJlY3Rpb24pICh2
dGFibGUtc29ydC1ieSB0YWJsZSkpCi0gICAgKGxldCAoKGNhY2hlICh2dGFibGUtLWNhY2hlIHRh
YmxlKSkKLSAgICAgICAgICAobnVtZXJpY2FsICh2dGFibGUtY29sdW1uLS1udW1lcmljYWwKLSAg
ICAgICAgICAgICAgICAgICAgICAoZWx0ICh2dGFibGUtY29sdW1ucyB0YWJsZSkgaW5kZXgpKSkK
LSAgICAgICAgICAobnVtY29tcCAoaWYgKGVxIGRpcmVjdGlvbiAnZGVzY2VuZCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIyc+ICMnPCkpCi0gICAgICAgICAgKHN0cmluZ2NvbXAgKGlmIChlcSBk
aXJlY3Rpb24gJ2Rlc2NlbmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMnc3RyaW5nPiAj
J3N0cmluZzwpKSkKLSAgICAgIChzZXRjYXIgY2FjaGUKLSAgICAgICAgICAgICAgKHNvcnQgKGNh
ciBjYWNoZSkKLSAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoZTEgZTIpCi0gICAgICAgICAg
ICAgICAgICAgICAgKGxldCAoKGMxIChlbHQgZTEgKDErIGluZGV4KSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGMyIChlbHQgZTIgKDErIGluZGV4KSkpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgKGlmIG51bWVyaWNhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdW5j
YWxsIG51bWNvbXAgKGNhciBjMSkgKGNhciBjMikpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IChmdW5jYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdjb21wCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAoaWYgKHN0cmluZ3AgKGNhciBjMSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNhciBjMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGZvcm1hdCAiJXMiIChjYXIgYzEpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAo
c3RyaW5ncCAoY2FyIGMyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FyIGMy
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICIlcyIgKGNhciBjMikpKSkp
KSkpKSkpKQorICAoc2V0ZiAoZ2V0aGFzaCAodnRhYmxlLS1jYWNoZS1rZXkgdGFibGUpIChzbG90
LXZhbHVlIHRhYmxlICctY2FjaGUpKSBuaWwpKQorCisoZGVmdW4gdnRhYmxlLS1jbGVhci1jYWNo
ZXMgKHRhYmxlKQorICAoY2xyaGFzaCAoc2xvdC12YWx1ZSB0YWJsZSAnLWNhY2hlKSkpCisKKyhk
ZWZ1biB2dGFibGUtLXNvcnQgKHRhYmxlIGNhY2hlKQorICAiU29ydCB0aGUgVEFCTEUgQ0FDSEUg
KG5vdCBpdHMgb2JqZWN0cykgaWYgdGhlcmUgYXJlIHNvcnQgY3JpdGVyaWEuCitSZXR1cm4gbm9u
LW5pbCBpZiBzb3J0ZWQsIG5pbCBvdGhlcndpc2UuIgorICAobGV0IChzb3J0ZWQpCisgICAgKHBj
YXNlLWRvbGlzdCAoYCgsaW5kZXggLiAsZGlyZWN0aW9uKSAodnRhYmxlLXNvcnQtYnkgdGFibGUp
KQorICAgICAgKGxldCogKChjb2x1bW4gKGVsdCAodnRhYmxlLWNvbHVtbnMgdGFibGUpIGluZGV4
KSkKKyAgICAgICAgICAgICAobnVtZXJpY2FsICh2dGFibGUtY29sdW1uLS1udW1lcmljYWwgY29s
dW1uKSkKKyAgICAgICAgICAgICAobnVtY29tcCAoaWYgKGVxIGRpcmVjdGlvbiAnZGVzY2VuZCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIyc+ICMnPCkpCisgICAgICAgICAgICAgKHN0cmlu
Z2NvbXAgKGlmIChlcSBkaXJlY3Rpb24gJ2Rlc2NlbmQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICMnc3RyaW5nPiAjJ3N0cmluZzwpKQorICAgICAgICAgICAgIChjb21wYXJhdG9yICh2
dGFibGUtY29sdW1uLWNvbXBhcmF0b3IgY29sdW1uKSkKKyAgICAgICAgICAgICAoY29tcGFyYXRv
ci1mdW5jICh3aGVuIGNvbXBhcmF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGlmIChlcSBkaXJlY3Rpb24gJ2Rlc2NlbmQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAobGFtYmRhICh2MSB2MikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGZ1bmNhbGwgY29tcGFyYXRvciB2MiB2MSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29tcGFyYXRvcikpKSkKKyAgICAgICAgKHNldGNhciBjYWNoZQorICAgICAg
ICAgICAgICAgIChzb3J0ICh2dGFibGUtLWNhY2hlLWxpbmVzIGNhY2hlKQorICAgICAgICAgICAg
ICAgICAgICAgIChsYW1iZGEgKGUxIGUyKQorICAgICAgICAgICAgICAgICAgICAgICAgKGxldCAo
KGMxIChlbHQgZTEgKDErIGluZGV4KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
YzIgKGVsdCBlMiAoMSsgaW5kZXgpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBj
b21wYXJhdG9yLWZ1bmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIGNv
bXBhcmF0b3ItZnVuYyAoY2FyIGMxKSAoY2FyIGMyKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoaWYgbnVtZXJpY2FsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdW5j
YWxsIG51bWNvbXAgKGNhciBjMSkgKGNhciBjMikpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoZnVuY2FsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ2NvbXAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHN0cmluZ3AgKGNhciBjMSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXIgYzEpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICIlcyIgKGNhciBjMSkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChpZiAoc3RyaW5ncCAoY2FyIGMyKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGNhciBjMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChmb3JtYXQgIiVzIiAoY2FyIGMyKSkpKSkpKSkpKQorICAgICAgICAoc2V0cSBzb3J0
ZWQgdCkKKyAgICAgICAgKHZ0YWJsZS0tY2FjaGUtc2V0LXNvcnRlZCBjYWNoZSB0KSkpCisgICAg
c29ydGVkKSkKCiAoZGVmdW4gdnRhYmxlLS1pbmRpY2F0b3IgKHRhYmxlIGluZGV4KQogICAobGV0
ICgob3JkZXIgKGNhciAobGFzdCAodnRhYmxlLXNvcnQtYnkgdGFibGUpKSkpKQotICAgIChpZiAo
ZXEgaW5kZXggKGNhciBvcmRlcikpCisgICAgKHdoZW4gKGVxIGluZGV4IChjYXIgb3JkZXIpKQor
ICAgICAgKGxldCogKChkaXIgKGNkciBvcmRlcikpCisgICAgICAgICAgICAgKG4gKGlmIChlcSBk
aXIgJ2FzY2VuZCkgMSAwKSkpCiAgICAgICAgIDs7IFdlJ3JlIHNvcnRpbmcgYnkgdGhpcyBjb2x1
bW4gbGFzdCwgc28gcmV0dXJuIGFuIGluZGljYXRvci4KICAgICAgICAgKGNhdGNoICdmb3VuZAot
ICAgICAgICAgIChkb2xpc3QgKGNhbmRpZGF0ZSAobnRoIChpZiAoZXEgKGNkciBvcmRlcikgJ2Fz
Y2VuZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnKCg/4pa8ID92KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KD/ilrIgP14pKSkpCisgICAgICAgICAgKGRvbGlzdCAoY2FuZGlkYXRlIChudGggbiAodnRhYmxl
LXNvcnQtaW5kaWNhdG9yIHRhYmxlKSkpCiAgICAgICAgICAgICAod2hlbiAoY2hhci1kaXNwbGF5
YWJsZS1wIGNhbmRpZGF0ZSkKLSAgICAgICAgICAgICAgKHRocm93ICdmb3VuZCAoc3RyaW5nIGNh
bmRpZGF0ZSkpKSkpCi0gICAgICAiIikpKQotCi0oZGVmdW4gdnRhYmxlLS1pbnNlcnQtaGVhZGVy
LWxpbmUgKHRhYmxlIHdpZHRocyBzcGFjZXIpCi0gIDs7IEluc2VydCB0aGUgaGVhZGVyIGRpcmVj
dGx5IGludG8gdGhlIGJ1ZmZlci4KLSAgKGxldCAoKHN0YXJ0IChwb2ludCkpCi0gICAgICAgIChk
aXZpZGVyICh2dGFibGUtZGl2aWRlciB0YWJsZSkpCi0gICAgICAgIChjbWFwIChkZWZpbmUta2V5
bWFwCi0gICAgICAgICAgICAgICAgIjxoZWFkZXItbGluZT4gPGRyYWctbW91c2UtMT4iICMndnRh
YmxlLS1kcmFnLXJlc2l6ZS1jb2x1bW4KLSAgICAgICAgICAgICAgICAiPGhlYWRlci1saW5lPiA8
ZG93bi1tb3VzZS0xPiIgIydpZ25vcmUpKQotICAgICAgICAoZG1hcCAoZGVmaW5lLWtleW1hcAot
ICAgICAgICAgICAgICAgICI8aGVhZGVyLWxpbmU+IDxkcmFnLW1vdXNlLTE+IgotICAgICAgICAg
ICAgICAgIChsYW1iZGEgKGUpCi0gICAgICAgICAgICAgICAgICAoaW50ZXJhY3RpdmUgImUiKQot
ICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tZHJhZy1yZXNpemUtY29sdW1uIGUgdCkpCi0gICAg
ICAgICAgICAgICAgIjxoZWFkZXItbGluZT4gPGRvd24tbW91c2UtMT4iICMnaWdub3JlKSkpCisg
ICAgICAgICAgICAgICh0aHJvdyAnZm91bmQgKGNvbnMgKHN0cmluZyBjYW5kaWRhdGUpIGRpcikp
KSkKKyAgICAgICAgICAoY29ucyBuaWwgbmlsKSkpKSkpCisKKyhkZWZ1biB2dGFibGUtLWluc2Vy
dC1oZWFkZXItbGluZSAodGFibGUgd2lkdGhzKQorICA7OyBJbnNlcnQgdGhlIGhlYWRlciBkaXJl
Y3RseSBpbnRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KKyAgKGxldCogKChzdGFydCAocG9pbnQpKQor
ICAgICAgICAgKGJ1ZmZlciAodnRhYmxlLWJ1ZmZlciB0YWJsZSkpCisgICAgICAgICAoaGVhZGVy
LWZhY2UgKHZ0YWJsZS1oZWFkZXItZmFjZSB0YWJsZSkpCisgICAgICAgICA7OyBzcGFjZXIgYW5k
IGRpdmlkZXIsIHdoZW4gaW4gcGl4ZWxzLCBhcmUgdGV4dC1zY2FsZSBhZGp1c3RlZAorICAgICAg
ICAgKHNwYWNlciAodnRhYmxlLS1zcGFjZXIgdGFibGUpKQorICAgICAgICAgKGRpdmlkZXItb24t
aGVhZGVyICh2dGFibGUtZGl2aWRlci1vbi1oZWFkZXIgdGFibGUpKQorICAgICAgICAgKGRpdmlk
ZXIgKHZ0YWJsZS0tZGl2aWRlciB0YWJsZSkpCisgICAgICAgICAoZGl2aWRlciAoaWYgZGl2aWRl
ci1vbi1oZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVyCisgICAgICAgICAgICAg
ICAgICAgIChwcm9wZXJ0aXplICIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
ZGlzcGxheSAobGlzdCAnc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOndpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChsaXN0IChzdHJpbmctcGl4ZWwtd2lkdGggZGl2aWRlciBidWZmZXIpKSkpKSkK
KyAgICAgICAgIChkcmFnLWtleW1hcCAoc2xvdC12YWx1ZSB0YWJsZSAnLWNhY2hlZC1kcmFnLWtl
eW1hcCkpKQogICAgIChzZXEtZG8taW5kZXhlZAogICAgICAobGFtYmRhIChjb2x1bW4gaW5kZXgp
Ci0gICAgICAgKGxldCogKChuYW1lIChwcm9wZXJ0aXplCi0gICAgICAgICAgICAgICAgICAgICAo
dnRhYmxlLWNvbHVtbi1uYW1lIGNvbHVtbikKLSAgICAgICAgICAgICAgICAgICAgICdmYWNlIChs
aXN0ICdoZWFkZXItbGluZSAodnRhYmxlLWZhY2UgdGFibGUpKQotICAgICAgICAgICAgICAgICAg
ICAgJ21vdXNlLWZhY2UgJ2hlYWRlci1saW5lLWhpZ2hsaWdodAotICAgICAgICAgICAgICAgICAg
ICAgJ2tleW1hcCBjbWFwKSkKKyAgICAgICAobGV0KiAoKG5hbWUgKHZ0YWJsZS1jb2x1bW4tbmFt
ZSBjb2x1bW4pKQorICAgICAgICAgICAgICAoXyAoYWRkLWZhY2UtdGV4dC1wcm9wZXJ0eSAwIChs
ZW5ndGggbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVh
ZGVyLWZhY2UgJ2FwcGVuZCBuYW1lKSkKKyAgICAgICAgICAgICAgKF8gKGFkZC10ZXh0LXByb3Bl
cnRpZXMgMCAobGVuZ3RoIG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChsaXN0ICdtb3VzZS1mYWNlICdoZWFkZXItbGluZS1oaWdobGlnaHQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpKQogICAgICAgICAgICAgICAoc3RhcnQg
KHBvaW50KSkKLSAgICAgICAgICAgICAgKGluZGljYXRvciAodnRhYmxlLS1pbmRpY2F0b3IgdGFi
bGUgaW5kZXgpKQotICAgICAgICAgICAgICAoaW5kaWNhdG9yLXdpZHRoIChzdHJpbmctcGl4ZWwt
d2lkdGggaW5kaWNhdG9yKSkKKyAgICAgICAgICAgICAgKGNvbHVtbi13aWR0aCAoZWx0IHdpZHRo
cyBpbmRleCkpCisgICAgICAgICAgICAgIChhbGlnbiAob3IgKHZ0YWJsZS1jb2x1bW4taGVhZGVy
LWFsaWduIGNvbHVtbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWNvbHVtbi1h
bGlnbiBjb2x1bW4pKSkKKyAgICAgICAgICAgICAgKGluZGljYXRvcitkaXIgKHZ0YWJsZS0taW5k
aWNhdG9yIHRhYmxlIGluZGV4KSkKKyAgICAgICAgICAgICAgOzsgUGFkIHRoZSBpbmRpY2F0b3Ig
dG8gYXZvaWQgYWJ1dHRpbmcgaXRzIG5laWdoYm9ycy4KKyAgICAgICAgICAgICAgKGluZGljYXRv
ciAoaWYgKGNhciBpbmRpY2F0b3IrZGlyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
cHJvcGVydGl6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdCAiICIgKGNh
ciBpbmRpY2F0b3IrZGlyKSAiICIpIDsgdHdvIHNpbmdsZSBzcGFjZXMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdmYWNlIGhlYWRlci1mYWNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7OyB4ZGlzcC5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBpdC0+
cGl4ZWxfd2lkdGggKj0gWEZMT0FUSU5UIChpdC0+c3BhY2Vfd2lkdGgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOzsgaW50cm9kdWNlcyBzaW5nbGUtcGl4ZWwgcHJlY2lzaW9uIGVy
cm9ycyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGRpc3BsYXkgZW5n
aW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDs7IE5PVEU6IEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7OyBwcmUtY29tcHV0ZWQgaW5kaWNhdG9yLXBhZCB1c2Vk
IGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBgdnRhYmxlLS1pbnNlcnQtbGlu
ZScuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzcGxheQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGxpc3QgJ3NwYWNlLXdpZHRoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2dGFibGUtc29ydC1pbmRpY2F0b3ItcGFkLXNwYWNlLXdpZHRoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKSkKKyAgICAgICAgICAgICAgKF8gKGFkZC1m
YWNlLXRleHQtcHJvcGVydHkgMCAobGVuZ3RoIGluZGljYXRvcikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChlcSAoY2RyIGluZGljYXRvcitkaXIpICdhc2Nl
bmQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxl
LXNvcnQtaW5kaWNhdG9yLWZhY2UtYXNjZW5kIHRhYmxlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtc29ydC1pbmRpY2F0b3ItZmFjZS1kZXNjZW5k
IHRhYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsIGlu
ZGljYXRvcikpCisgICAgICAgICAgICAgIChpbmRpY2F0b3Itd2lkdGggKHN0cmluZy1waXhlbC13
aWR0aCBpbmRpY2F0b3IgYnVmZmVyKSkKKyAgICAgICAgICAgICAgOzsgRG9uJ3QgaW5zZXJ0IHRo
ZSBzZXBhcmF0b3Igb3IgZGl2aWRlciBhZnRlciB0aGUgZmluYWwgY29sdW1uLgogICAgICAgICAg
ICAgICAobGFzdCAoPSBpbmRleCAoMS0gKGxlbmd0aCAodnRhYmxlLWNvbHVtbnMgdGFibGUpKSkp
KQotICAgICAgICAgICAgICBkaXNwbGF5ZWQpCi0gICAgICAgICAoc2V0cSBkaXNwbGF5ZWQKLSAg
ICAgICAgICAgICAgIChpZiAoPiAoc3RyaW5nLXBpeGVsLXdpZHRoIG5hbWUpCi0gICAgICAgICAg
ICAgICAgICAgICAgKC0gKGVsdCB3aWR0aHMgaW5kZXgpIGluZGljYXRvci13aWR0aCkpCi0gICAg
ICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQtc3RyaW5nCi0gICAgICAgICAgICAgICAgICAg
IG5hbWUgKC0gKGVsdCB3aWR0aHMgaW5kZXgpIGluZGljYXRvci13aWR0aCkpCi0gICAgICAgICAg
ICAgICAgIG5hbWUpKQotICAgICAgICAgKGxldCogKChpbmRpY2F0b3ItbGVhZC13aWR0aAotICAg
ICAgICAgICAgICAgICA7OyBXZSB3YW50IHRoZSBpbmRpY2F0b3IgdG8gbm90IGJlIHF1aXRlIGZs
dXNoIHJpZ2h0LgotICAgICAgICAgICAgICAgICAoLyAodnRhYmxlLS1jaGFyLXdpZHRoIHRhYmxl
KSAyLjApKQotICAgICAgICAgICAgICAgIChpbmRpY2F0b3ItcGFkLXdpZHRoICgtICh2dGFibGUt
LWNoYXItd2lkdGggdGFibGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kaWNhdG9yLWxlYWQtd2lkdGgpKQorICAgICAgICAgICAgICAoc3BhY2VyIChpZiBsYXN0
CisgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNw
YWNlcikpCisgICAgICAgICAgICAgIChzcGFjZXItc3RyIChpZiBsYXN0ICIiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgIiAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobGlzdCAnc3BhY2UgOndpZHRoIChsaXN0IHNwYWNlcikpKSkpKQorICAgICAg
ICAgKGxldCogKChtYXgtbmFtZS13aWR0aCAoLSBjb2x1bW4td2lkdGgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yLXdpZHRoKSkKKyAgICAgICAgICAgICAgICAo
ZGlzcGxheWVkICh2dGFibGUtLWxpbWl0LXN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgtbmFtZS13aWR0aAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh2dGFibGUtY29sdW1uLXRydW5jYXRlLWd1ZXNzIGNvbHVtbikpKQorICAgICAgICAgICAg
ICAgIChkaXNwbGF5ZWQtd2lkdGggKHN0cmluZy1waXhlbC13aWR0aCBkaXNwbGF5ZWQgYnVmZmVy
KSkKICAgICAgICAgICAgICAgICAoZmlsbC13aWR0aAotICAgICAgICAgICAgICAgICAoKyAoLSAo
ZWx0IHdpZHRocyBpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1waXhlbC13
aWR0aCBkaXNwbGF5ZWQpCi0gICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRvci13aWR0aAot
ICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3ItbGVhZC13aWR0aCkKLSAgICAgICAgICAg
ICAgICAgICAgKGlmIGxhc3QgMCBzcGFjZXIpKSkpCi0gICAgICAgICAgIChpZiAob3IgKG5vdCBs
YXN0KQotICAgICAgICAgICAgICAgICAgICh6ZXJvcCBpbmRpY2F0b3Itd2lkdGgpCi0gICAgICAg
ICAgICAgICAgICAgKDwgKHNlcS1yZWR1Y2UgIycrIHdpZHRocyAwKSAod2luZG93LXdpZHRoIG5p
bCB0KSkpCi0gICAgICAgICAgICAgICA7OyBOb3JtYWwgY2FzZS4KLSAgICAgICAgICAgICAgIChp
bnNlcnQKLSAgICAgICAgICAgICAgICBkaXNwbGF5ZWQKLSAgICAgICAgICAgICAgICAocHJvcGVy
dGl6ZSAiICIgJ2Rpc3BsYXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3Bh
Y2UgOndpZHRoIChsaXN0IGZpbGwtd2lkdGgpKSkKLSAgICAgICAgICAgICAgICBpbmRpY2F0b3IK
LSAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAiICIgJ2Rpc3BsYXkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAobGlzdCAnc3BhY2UgOndpZHRoIChsaXN0IGluZGljYXRvci1wYWQtd2lk
dGgpKSkpCi0gICAgICAgICAgICAgOzsgVGhpcyBpcyB0aGUgZmluYWwgY29sdW1uLCBhbmQgd2Ug
aGF2ZSBhIHNvcnRpbmcKLSAgICAgICAgICAgICA7OyBpbmRpY2F0b3IsIGFuZCB0aGUgdGFibGUg
aXMgdG9vIHdpZGUgZm9yIHRoZSB3aW5kb3cuCi0gICAgICAgICAgICAgKGxldCogKChwcmUtaW5k
aWNhdG9yIChzdHJpbmctcGl4ZWwtd2lkdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChidWZmZXItc3Vic3RyaW5nIChwb2ludC1taW4pIChwb2ludCkpKSkKLSAgICAgICAg
ICAgICAgICAgICAgKHByZS1maWxsCi0gICAgICAgICAgICAgICAgICAgICAoLSAod2luZG93LXdp
ZHRoIG5pbCB0KQotICAgICAgICAgICAgICAgICAgICAgICAgcHJlLWluZGljYXRvcgotICAgICAg
ICAgICAgICAgICAgICAgICAgKHN0cmluZy1waXhlbC13aWR0aCBkaXNwbGF5ZWQpKSkpCi0gICAg
ICAgICAgICAgICAoaW5zZXJ0Ci0gICAgICAgICAgICAgICAgZGlzcGxheWVkCi0gICAgICAgICAg
ICAgICAgKHByb3BlcnRpemUgIiAiICdkaXNwbGF5Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGxpc3QgJ3NwYWNlIDp3aWR0aCAobGlzdCBwcmUtZmlsbCkpKQotICAgICAgICAgICAgICAg
IGluZGljYXRvcgotICAgICAgICAgICAgICAgIChwcm9wZXJ0aXplICIgIiAnZGlzcGxheQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdzcGFjZSA6d2lkdGgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAoLSBmaWxsLXdpZHRoIHByZS1maWxsKSkpKSkp
KSkKKyAgICAgICAgICAgICAgICAgOzsgQWRqdXN0IGZvciB2ZXJ5IHNtYWxsIGNvbHVtbiB3aWR0
aHM7IGUuZy4sIDEgY2hhcmFjdGVyIHdpZGUuCisgICAgICAgICAgICAgICAgIChtYXggMCAoLSBj
b2x1bW4td2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZC13aWR0aAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yLXdpZHRoKSkpCisgICAgICAgICAg
ICAgICAgZmlsbC1zdHIKKyAgICAgICAgICAgICAgICBmaWxsLXJpZ2h0LXN0cikKKyAgICAgICAg
ICAgKHBjYXNlLWV4aGF1c3RpdmUgYWxpZ24KKyAgICAgICAgICAgICAoKG9yICdsZWZ0ICdyaWdo
dCkKKyAgICAgICAgICAgICAgKHNldHEgZmlsbC1zdHIKKyAgICAgICAgICAgICAgICAgICAgKHBy
b3BlcnRpemUgIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNwbGF5Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICdzcGFjZSA6d2lkdGggKGxpc3Qg
ZmlsbC13aWR0aCkpKSkpCisgICAgICAgICAgICAgKCdjZW50ZXIKKyAgICAgICAgICAgICAgKGxl
dCAoKGhhbGYtZmlsbCAoLyAoKyBmaWxsLXdpZHRoIGluZGljYXRvci13aWR0aCkgMikpKQorICAg
ICAgICAgICAgICAgIChzZXRxIGZpbGwtc3RyCisgICAgICAgICAgICAgICAgICAgICAgKHByb3Bl
cnRpemUgIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAnc3BhY2UgOndpZHRoIChsaXN0
IGhhbGYtZmlsbCkpKSkKKyAgICAgICAgICAgICAgICAoc2V0cSBmaWxsLXJpZ2h0LXN0cgorICAg
ICAgICAgICAgICAgICAgICAgIChwcm9wZXJ0aXplICIgIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdkaXNwbGF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGxpc3QgJ3NwYWNlIDp3aWR0aCAobGlzdCAoLSBmaWxsLXdpZHRoIGhhbGYtZmlsbCkpKSkpKSkp
CisgICAgICAgICAgIDs7IElmIHRoZSB0YWJsZSBpcyBhbHJlYWR5IHdpZGVyIHRoYW4gdGhlIHdp
bmRvdywgdGFrZSB0aGUKKyAgICAgICAgICAgOzsgbm9ybWFsIHBhdGggZm9yIHRoZSBmaW5hbCBj
b2x1bW4uCisgICAgICAgICAgIDs7CisgICAgICAgICAgIDs7IElmIHRoZSB0YWJsZSB3b3VsZCBi
ZSB3aWRlciB0aGFuIHRoZSB3aW5kb3cgaW5jbHVkaW5nCisgICAgICAgICAgIDs7IHRoZSBmaW5h
bCBjb2x1bW4sIHRha2UgdGhlIGFibm9ybWFsIHBhdGggdG8gbGVmdCBhbGlnbgorICAgICAgICAg
ICA7OyB0aGUgbGFzdCBjb2x1bW4ncyBuYW1lIGFuZCBzb3J0IGluZGljYXRvciBzbyBpdCByZW1h
aW5zCisgICAgICAgICAgIDs7IHZpc2libGUuCisgICAgICAgICAgIChsZXQgKChub3JtYWwtcGF0
aCB0KSkKKyAgICAgICAgICAgICAod2hlbiBsYXN0CisgICAgICAgICAgICAgICAobGV0KiAoKHBp
eGVscy11bnRpbC1sYXN0CisgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctcGl4ZWwtd2lk
dGgKKyAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nIChsaW5lLWJlZ2lu
bmluZy1wb3NpdGlvbikgKHBvaW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcikp
CisgICAgICAgICAgICAgICAgICAgICAgKHBpeGVscy11bnRpbC1sYXN0K2xhc3QKKyAgICAgICAg
ICAgICAgICAgICAgICAgKCsgcGl4ZWxzLXVudGlsLWxhc3QKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29sdW1uLXdpZHRoKSkKKyAgICAgICAgICAgICAgICAgICAgICAod2luZG93LWJvZHkt
d2lkdGggKHdpbmRvdy1ib2R5LXdpZHRoIG5pbCAncGl4ZWx3aXNlKSkpCisgICAgICAgICAgICAg
ICAgICh3aGVuIChhbmQgKDwgcGl4ZWxzLXVudGlsLWxhc3Qgd2luZG93LWJvZHktd2lkdGgpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKD49IHBpeGVscy11bnRpbC1sYXN0K2xhc3Qgd2lu
ZG93LWJvZHktd2lkdGgpKQorICAgICAgICAgICAgICAgICAgIChzZXRxIG5vcm1hbC1wYXRoIG5p
bCkpKSkKKyAgICAgICAgICAgICAoaWYgbm9ybWFsLXBhdGgKKyAgICAgICAgICAgICAgICAgOzsg
Tm9ybWFsIGNhc2UuCisgICAgICAgICAgICAgICAgIChwY2FzZS1leGhhdXN0aXZlIGFsaWduCisg
ICAgICAgICAgICAgICAgICAgKCdsZWZ0CisgICAgICAgICAgICAgICAgICAgIChpbnNlcnQKKyAg
ICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZAorICAgICAgICAgICAgICAgICAgICAgZmlsbC1z
dHIKKyAgICAgICAgICAgICAgICAgICAgIGluZGljYXRvcgorICAgICAgICAgICAgICAgICAgICAg
c3BhY2VyLXN0cikpCisgICAgICAgICAgICAgICAgICAgKCdyaWdodAorICAgICAgICAgICAgICAg
ICAgICAoaW5zZXJ0CisgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3IKKyAgICAgICAgICAg
ICAgICAgICAgIGZpbGwtc3RyCisgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWQKKyAgICAg
ICAgICAgICAgICAgICAgIHNwYWNlci1zdHIpKQorICAgICAgICAgICAgICAgICAgICgnY2VudGVy
CisgICAgICAgICAgICAgICAgICAgIChpbnNlcnQKKyAgICAgICAgICAgICAgICAgICAgIGZpbGwt
c3RyCisgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWQKKyAgICAgICAgICAgICAgICAgICAg
IGZpbGwtcmlnaHQtc3RyCisgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3IKKyAgICAgICAg
ICAgICAgICAgICAgIHNwYWNlci1zdHIpKSkKKyAgICAgICAgICAgICAgIDs7IEFibm9ybWFsIGNh
c2UuCisgICAgICAgICAgICAgICAobGV0KiAoKHByZS1pbmRpY2F0b3IgKHN0cmluZy1waXhlbC13
aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0
cmluZyAocG9pbnQtbWluKSAocG9pbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBidWZmZXIpKQorICAgICAgICAgICAgICAgICAgICAgIChwcmUtZmlsbAorICAgICAg
ICAgICAgICAgICAgICAgICAoLSAod2luZG93LWJvZHktd2lkdGggbmlsICdwaXhlbHdpc2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByZS1pbmRpY2F0b3IKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlzcGxheWVkLXdpZHRoKSkpCisgICAgICAgICAgICAgICAgIChzZXRxIGZpbGwt
c3RyCisgICAgICAgICAgICAgICAgICAgICAgIChwcm9wZXJ0aXplICIgIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnZGlzcGxheSAobGlzdCAnc3BhY2UgOndpZHRoIChsaXN0
IHByZS1maWxsKSkpKQorICAgICAgICAgICAgICAgICAoc2V0cSBmaWxsLXJpZ2h0LXN0cgorICAg
ICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAiICIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2Rpc3BsYXkgKGxpc3QgJ3NwYWNlIDp3aWR0aAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAoLSBmaWxsLXdpZHRo
IHByZS1maWxsKSkpKSkKKyAgICAgICAgICAgICAgICAgKGluc2VydAorICAgICAgICAgICAgICAg
ICAgaW5kaWNhdG9yCisgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWQKKyAgICAgICAgICAgICAg
ICAgIGZpbGwtc3RyCisgICAgICAgICAgICAgICAgICBmaWxsLXJpZ2h0LXN0cikpKSkpCiAgICAg
ICAgICAod2hlbiAoYW5kIGRpdmlkZXIgKG5vdCBsYXN0KSkKLSAgICAgICAgICAgKGluc2VydCAo
cHJvcGVydGl6ZSBkaXZpZGVyICdrZXltYXAgZG1hcCkpKQotICAgICAgICAgKHB1dC10ZXh0LXBy
b3BlcnR5IHN0YXJ0IChwb2ludCkgJ3Z0YWJsZS1jb2x1bW4gaW5kZXgpKSkKKyAgICAgICAgICAg
KGluc2VydCBkaXZpZGVyKSkKKyAgICAgICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIHN0YXJ0IChw
b2ludCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICd2dGFibGUtY29sdW1u
IGluZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2V5bWFwCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnLWtleW1hcCkpKSkKICAgICAgKHZ0
YWJsZS1jb2x1bW5zIHRhYmxlKSkKLSAgICAoaW5zZXJ0ICJcbiIpCi0gICAgKGFkZC1mYWNlLXRl
eHQtcHJvcGVydHkgc3RhcnQgKHBvaW50KSAnaGVhZGVyLWxpbmUpKSkKKyAgICAoaW5zZXJ0IChw
cm9wZXJ0aXplICJcbiIgJ2tleW1hcCBkcmFnLWtleW1hcCkpCisgICAgKGFkZC1mYWNlLXRleHQt
cHJvcGVydHkgc3RhcnQgKHBvaW50KSBoZWFkZXItZmFjZSB0KSkpCgogKGRlZnVuIHZ0YWJsZS0t
ZHJhZy1yZXNpemUtY29sdW1uIChlICZvcHRpb25hbCBuZXh0KQogICAiUmVzaXplIHRoZSBjb2x1
bW4gYnkgZHJhZ2dpbmcuCi1JZiBORVhULCBkbyB0aGUgbmV4dCBjb2x1bW4uIgorRSBpcyB0aGUg
cG9pbnRlciBldmVudC4gIElmIE5FWFQgaXMgbm9uLW5pbCwgYWRqdXN0IHRoZSBjb2x1bW4gZm9s
bG93aW5nCit0aGUgZXZlbnQgY29vcmRpbmF0ZXMuICBJZiB0aGUgZm9sbG93aW5nIGNvbHVtbiBl
eGNlZWRzIHRoZSBudW1iZXIgb2YKK2NvbHVtbnMsIHJlc2l6ZSB0aGUgY2xpY2tlZCBjb2x1bW4u
IgogICAoaW50ZXJhY3RpdmUgImUiKQogICAobGV0KiAoKHBvcy1zdGFydCAoZXZlbnQtc3RhcnQg
ZSkpCi0JIChvYmogKHBvc24tb2JqZWN0IHBvcy1zdGFydCkpKQotICAgICh3aXRoLWN1cnJlbnQt
YnVmZmVyICh3aW5kb3ctYnVmZmVyIChwb3NuLXdpbmRvdyBwb3Mtc3RhcnQpKQotICAgICAgKGxl
dCAoKGNvbHVtbgotICAgICAgICAgICAgIDs7IEluIHRoZSBoZWFkZXIgbGluZSB3ZSBoYXZlIGEg
dGV4dCBwcm9wZXJ0eSBvbiB0aGUKLSAgICAgICAgICAgICA7OyBkaXZpZGVyLgotICAgICAgICAg
ICAgIChvciAoZ2V0LXRleHQtcHJvcGVydHkgKGlmIG9iaiAoY2RyIG9iaikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvc24tcG9pbnQgcG9zLXN0YXJ0KSkKLQkJCSAg
ICAgICAgICAgICd2dGFibGUtY29sdW1uCi0JCQkgICAgICAgICAgICAoY2FyIG9iaikpCi0gICAg
ICAgICAgICAgICAgIDs7IEZvciByZWFzb25zIG9mIGVmZmljaWVuY3ksIHdlIGRvbid0IGhhdmUg
dGhhdCBpbgotICAgICAgICAgICAgICAgICA7OyB0aGUgYnVmZmVyIGl0c2VsZiwgc28gZmluZCB0
aGUgY29sdW1uLgotICAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgICAgICAg
ICAgICAgICAoZ290by1jaGFyIChwb3NuLXBvaW50IHBvcy1zdGFydCkpCi0gICAgICAgICAgICAg
ICAgICAgKDErCi0gICAgICAgICAgICAgICAgICAgIChnZXQtdGV4dC1wcm9wZXJ0eQotICAgICAg
ICAgICAgICAgICAgICAgKHByb3AtbWF0Y2gtYmVnaW5uaW5nCi0gICAgICAgICAgICAgICAgICAg
ICAgKHRleHQtcHJvcGVydHktc2VhcmNoLWJhY2t3YXJkICd2dGFibGUtY29sdW1uKSkKLSAgICAg
ICAgICAgICAgICAgICAgICd2dGFibGUtY29sdW1uKSkpKSkKLSAgICAgICAgICAgIChzdGFydC14
IChjYXIgKHBvc24teC15IHBvcy1zdGFydCkpKQotICAgICAgICAgICAgKGVuZC14IChjYXIgKHBv
c24teC15IChldmVudC1lbmQgZSkpKSkpCi0gICAgICAgICh3aGVuIChvciAoPiBjb2x1bW4gMCkg
bmV4dCkKLSAgICAgICAgICAodnRhYmxlLS1hbHRlci1jb2x1bW4td2lkdGggKHZ0YWJsZS1jdXJy
ZW50LXRhYmxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgbmV4
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEtIGNvbHVtbikpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtIGVuZC14IHN0YXJ0LXgpKSkpKSkpCi0K
LShkZWZ1biB2dGFibGUtLXJlY29tcHV0ZS1udW1lcmljYWwgKHRhYmxlIGxpbmUpCi0gICJSZWNv
bXB1dGUgbnVtZXJpY2FsbmVzcyBvZiBjb2x1bW5zIGlmIG5lY2Vzc2FyeS4iCi0gIChsZXQgKChj
b2x1bW5zICh2dGFibGUtY29sdW1ucyB0YWJsZSkpCi0gICAgICAgIChyZWNvbXB1dGUgbmlsKSkK
LSAgICAoc2VxLWRvLWluZGV4ZWQKLSAgICAgKGxhbWJkYSAoZWxlbSBpbmRleCkKLSAgICAgICAo
d2hlbiAoYW5kICh2dGFibGUtY29sdW1uLS1udW1lcmljYWwgKGVsdCBjb2x1bW5zIGluZGV4KSkK
LSAgICAgICAgICAgICAgICAgIChub3QgKG51bWJlcnAgKGNhciBlbGVtKSkpKQotICAgICAgICAg
KHNldHEgcmVjb21wdXRlIHQpKSkKLSAgICAgbGluZSkKLSAgICAod2hlbiByZWNvbXB1dGUKLSAg
ICAgICh2dGFibGUtLWNvbXB1dGUtY29sdW1ucyB0YWJsZSB0KSkpKQotCi0oZGVmdW4gdnRhYmxl
LS1zZXQtaGVhZGVyLWxpbmUgKHRhYmxlIHdpZHRocyBzcGFjZXIpCi0gIChzZXRxIGhlYWRlci1s
aW5lLWZvcm1hdAotICAgICAgICAoc3RyaW5nLXJlcGxhY2UKLSAgICAgICAgICIlIiAiJSUiCi0g
ICAgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgotICAgICAgICAgICAoaW5zZXJ0ICIgIikKLSAgICAg
ICAgICAgKHZ0YWJsZS0taW5zZXJ0LWhlYWRlci1saW5lIHRhYmxlIHdpZHRocyBzcGFjZXIpCi0g
ICAgICAgICAgIDs7IEFsaWduIHRoZSBoZWFkZXIgd2l0aCB0aGUgKHBvc3NpYmx5KSBmcmluZ2Vk
IGJ1ZmZlciB0ZXh0LgotICAgICAgICAgICAocHV0LXRleHQtcHJvcGVydHkKLSAgICAgICAgICAg
IChwb2ludC1taW4pICgxKyAocG9pbnQtbWluKSkKLSAgICAgICAgICAgICdkaXNwbGF5ICcoc3Bh
Y2UgOmFsaWduLXRvIDApKQotICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQtbWlu
KSAoMS0gKHBvaW50LW1heCkpKSkpKQotICAodnRhYmxlLWhlYWRlci1tb2RlIDEpKQotCi0oZGVm
dW4gdnRhYmxlLS1saW1pdC1zdHJpbmcgKHN0cmluZyBwaXhlbHMpCi0gICh3aGlsZSAoYW5kIChs
ZW5ndGg+IHN0cmluZyAwKQotICAgICAgICAgICAgICAoPiAoc3RyaW5nLXBpeGVsLXdpZHRoIHN0
cmluZykgcGl4ZWxzKSkKLSAgICAoc2V0cSBzdHJpbmcgKHN1YnN0cmluZyBzdHJpbmcgMCAoMS0g
KGxlbmd0aCBzdHJpbmcpKSkpKQotICBzdHJpbmcpCisgICAgICAgICAob2JqIChwb3NuLW9iamVj
dCBwb3Mtc3RhcnQpKQorICAgICAgICAgKHN0YXJ0LXggKGNhciAocG9zbi14LXkgcG9zLXN0YXJ0
KSkpCisgICAgICAgICAoZW5kLXggKGNhciAocG9zbi14LXkgKGV2ZW50LWVuZCBlKSkpKQorICAg
ICAgICAgKHRhYmxlIChnZXQtdGV4dC1wcm9wZXJ0eQorICAgICAgICAgICAgICAgICAoaWYgb2Jq
IChjZHIgb2JqKSAocG9zbi1wb2ludCBwb3Mtc3RhcnQpKQorCQkgJ3Z0YWJsZQorCQkgKGNhciBv
YmopKSkKKyAgICAgICAgIChjb2x1bW4gKGdldC10ZXh0LXByb3BlcnR5CisgICAgICAgICAgICAg
ICAgICAoaWYgb2JqIChjZHIgb2JqKSAocG9zbi1wb2ludCBwb3Mtc3RhcnQpKQorCQkgICd2dGFi
bGUtY29sdW1uCisJCSAgKGNhciBvYmopKSkpCisgICAgKHdoZW4gKGFuZCB0YWJsZSBjb2x1bW4p
CisgICAgICAoc2V0cSBjb2x1bW4KKyAgICAgICAgICAgIChpZiAoYW5kIG5leHQKKyAgICAgICAg
ICAgICAgICAgICAgICg8IGNvbHVtbiAoMS0gKGxlbmd0aCAodnRhYmxlLWNvbHVtbnMgdGFibGUp
KSkpKQorICAgICAgICAgICAgICAgICgxKyBjb2x1bW4pCisgICAgICAgICAgICAgIGNvbHVtbikp
CisgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAod2luZG93LWJ1ZmZlciAocG9zbi13aW5kb3cg
cG9zLXN0YXJ0KSkKKyAgICAgICAgKGlmIChlcSB0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUp
KQorICAgICAgICAgICAgKHZ0YWJsZS0tYWx0ZXItY29sdW1uLXdpZHRoIHRhYmxlIGNvbHVtbgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtIGVuZC14IHN0YXJ0LXgp
KQorICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgICAgICAgKHZ0YWJsZS1nb3RvLXRh
YmxlIHRhYmxlKQorICAgICAgICAgICAgKHZ0YWJsZS0tYWx0ZXItY29sdW1uLXdpZHRoIHRhYmxl
IGNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtIGVuZC14
IHN0YXJ0LXgpKSkpKSkpKQorKHB1dCAndnRhYmxlLS1kcmFnLXJlc2l6ZS1jb2x1bW4gJ2NvbXBs
ZXRpb24tcHJlZGljYXRlICMnaWdub3JlKQorCisoZGVmdW4gdnRhYmxlLS1zZXQtaGVhZGVyLWxp
bmUgKHRhYmxlIHdpZHRocykKKyAgKGxldCAoKHJlZmVyZW5jZS1idWZmZXIgKHZ0YWJsZS1idWZm
ZXIgdGFibGUpKSkKKyAgICAoc2V0cSBoZWFkZXItbGluZS1mb3JtYXQKKyAgICAgICAgICAoY29u
Y2F0CisgICAgICAgICAgIChwcm9wZXJ0aXplICIgIiAnZGlzcGxheQorICAgICAgICAgICAgICAg
ICAgICAgICAobGlzdCAnc3BhY2UgOmFsaWduLXRvCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChsaXN0IChsaW5lLW51bWJlci1kaXNwbGF5LXdpZHRoIHQpKSkpCisgICAgICAgICAgIChz
dHJpbmctcmVwbGFjZQorICAgICAgICAgICAgIiUiICIlJSIKKyAgICAgICAgICAgICh3aXRoLXRl
bXAtYnVmZmVyCisgICAgICAgICAgICAgIDs7IENyaWJiZWQgZnJvbSBzdHJpbmctcGl4ZWwtd2lk
dGggdG8gbm9ybWFsaXplIHRoZSB0ZW1wCisgICAgICAgICAgICAgIDs7IGJ1ZmZlciB0byB0aGUg
b3JpZ2luYXRpbmcgYnVmZmVyIGFuZCB3aW5kb3cuCisgICAgICAgICAgICAgIChkb2xpc3QgKHYg
JyhmYWNlLXJlbWFwcGluZy1hbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhci1w
cm9wZXJ0eS1hbGlhcy1hbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC10
ZXh0LXByb3BlcnRpZXMpKQorICAgICAgICAgICAgICAgIChpZiAobG9jYWwtdmFyaWFibGUtcCB2
IHJlZmVyZW5jZS1idWZmZXIpCisgICAgICAgICAgICAgICAgICAgIChzZXQgKG1ha2UtbG9jYWwt
dmFyaWFibGUgdikKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLWxvY2FsLXZhbHVl
IHYgcmVmZXJlbmNlLWJ1ZmZlcikpKSkKKyAgICAgICAgICAgICAgKHZ0YWJsZS0taW5zZXJ0LWhl
YWRlci1saW5lIHRhYmxlIHdpZHRocykKKyAgICAgICAgICAgICAgKGFkZC10ZXh0LXByb3BlcnRp
ZXMgKHBvaW50LW1pbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAndnRhYmxlLWhlYWRl
ciB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2dGFibGUgdGFi
bGUpKQorICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZyAocG9pbnQtbWluKSAoMS0gKHBv
aW50LW1heCkpKSkpKSkpKQorCisoZGVmdW4gdnRhYmxlLS10ZXh0LXNjYWxlLXBpeGVscyAocGl4
ZWxzKQorICAiQWRqdXN0IFBJWEVMUyBmb3IgdGV4dC1zY2FsZWQgYnVmZmVycy4iCisgIChjZWls
aW5nICgqIHBpeGVscyAoLyAoZmxvYXQgKGRlZmF1bHQtZm9udC13aWR0aCkpIChmcmFtZS1jaGFy
LXdpZHRoKSkpKSkKKworKGRlZnVuIHZ0YWJsZS0tbGltaXQtc3RyaW5nIChzdHJpbmcgcGl4ZWxz
IGJ1ZmZlciAmb3B0aW9uYWwgdHJ1bmNhdGUtZ3Vlc3MpCisgICJUcnVuY2F0ZSBTVFJJTkcgdG8g
Zml0IGludG8gd2lkdGggUElYRUxTLgorVGhpcyBmdW5jdGlvbiB0cmllcyB0byBndWVzcyBTVFJJ
TkcncyB0cnVuY2F0ZWQgbGVuZ3RoLCBpbiBjaGFyYWN0ZXJzLAorYmFzZWQgdGhlIGF2ZXJhZ2Ug
cGl4ZWwgd2lkdGggb2YgaXRzIGNoYXJhY3RlcnMsIGluY2x1ZGluZyBpdHMgdGV4dAorcHJvcGVy
dGllcywgcmVsYXRpdmUgdG8gUElYRUxTLgorCitVc2UgQlVGRkVSIHRvIGRlcml2ZSB0ZXh0LXNj
YWxlIGFkanVzdG1lbnRzLgorCitJZiBUUlVOQ0FURS1HVUVTUyBpcyBuaWwsIG5vIGd1ZXNzaW5n
IGlzIGRvbmUuCisKK0lmIFRSVU5DQVRFLUdVRVNTIGlzIGFuIGludGVnZXIsIGl0IGlzIHRoZSBu
dW1iZXIgb2YgYWRkaXRpb25hbAorY2hhcmFjdGVycyBhZGRlZCB0byB0aGUgZ3Vlc3MuICBTdGFy
dCB3aXRoIDAgYW5kIGluY3JlYXNlIHRoZSB0b2xlcmFuY2UKK2lmIHlvdSBmaW5kIHRoYXQgdGhl
IGd1ZXNzIGlzIHRvbyBzbWFsbCBmb3IgdGhlIGNvbHVtbidzIHZhbHVlcy4iCisgIChsZXQgKChz
dHJpbmctbGVuIChsZW5ndGggc3RyaW5nKSkKKyAgICAgICAgKHN0cmluZy1waXhlbHMpKQorICAg
ICh3aGVuIChhbmQgKD4gc3RyaW5nLWxlbiAwKQorICAgICAgICAgICAgICAgKGludGVnZXJwIHRy
dW5jYXRlLWd1ZXNzKSkKKyAgICAgIChzZXRxIHN0cmluZy1waXhlbHMgKHN0cmluZy1waXhlbC13
aWR0aCBzdHJpbmcgYnVmZmVyKSkKKyAgICAgICh3aGVuICg+IHN0cmluZy1waXhlbHMgcGl4ZWxz
KQorICAgICAgICA7OyBVc2UgYXZlcmFnZSBwaXhlbHMvY2hhcmFjdGVyIGZyb20gU1RSSU5HIHRv
IHNlZWQgdGhlIGd1ZXNzLgorICAgICAgICAobGV0ICgoZ3Vlc3MgKCsgMQorICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ1bmNhdGUtZ3Vlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIChjZWls
aW5nICgvIHBpeGVscyAoLyBzdHJpbmctcGl4ZWxzIHN0cmluZy1sZW4pKSkpKSkKKyAgICAgICAg
ICAod2hlbiAoPCBndWVzcyBzdHJpbmctbGVuKQorICAgICAgICAgICAgKHNldHEgc3RyaW5nIChz
dWJzdHJpbmcgc3RyaW5nIDAgZ3Vlc3MpKSkpKSkKKyAgICAod2hpbGUgKGFuZCAobGVuZ3RoPiBz
dHJpbmcgMCkKKyAgICAgICAgICAgICAgICA7OyBSZXVzZSB0aGUgaW5pdGlhbCBzdHJpbmctcGl4
ZWxzIGZvciB0aGUgZmFzdCBwYXRoLgorICAgICAgICAgICAgICAgIChpZiBzdHJpbmctcGl4ZWxz
IChwcm9nMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPiBzdHJpbmct
cGl4ZWxzIHBpeGVscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRx
IHN0cmluZy1waXhlbHMgbmlsKSkKKyAgICAgICAgICAgICAgICAgICg+IChzdHJpbmctcGl4ZWwt
d2lkdGggc3RyaW5nIGJ1ZmZlcikgcGl4ZWxzKSkpCisgICAgICAoc2V0cSBzdHJpbmcgKHN1YnN0
cmluZyBzdHJpbmcgMCAoMS0gKGxlbmd0aCBzdHJpbmcpKSkpKQorICAgIHN0cmluZykpCgogKGRl
ZnVuIHZ0YWJsZS0tY2hhci13aWR0aCAodGFibGUpCi0gIChzdHJpbmctcGl4ZWwtd2lkdGggKHBy
b3BlcnRpemUgIngiICdmYWNlICh2dGFibGUtZmFjZSB0YWJsZSkpKSkKKyAgKHN0cmluZy1waXhl
bC13aWR0aAorICAgKHByb3BlcnRpemUgIngiICdmYWNlICh2dGFibGUtZmFjZSB0YWJsZSkpCisg
ICAodnRhYmxlLWJ1ZmZlciB0YWJsZSkpKQoKIChkZWZ1biB2dGFibGUtLWNvbXB1dGUtd2lkdGgg
KHRhYmxlIHNwZWMpCiAgIChjb25kCkBAIC04NTcsMjIgKzE5MjIsMzIgQEAgdnRhYmxlLS1jb21w
dXRlLXdpZHRoCiAgICAoKHN0cmluZy1tYXRjaCAiXFwoWzAtOS5dK1xcKXB4IiBzcGVjKQogICAg
IChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMSBzcGVjKSkpCiAgICAoKHN0cmluZy1t
YXRjaCAiXFwoWzAtOS5dK1xcKSUiIHNwZWMpCi0gICAgKC8gKCogKHN0cmluZy10by1udW1iZXIg
KG1hdGNoLXN0cmluZyAxIHNwZWMpKSAod2luZG93LXdpZHRoIG5pbCB0KSkKKyAgICAoLyAoKiAo
c3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDEgc3BlYykpCisgICAgICAgICAgKHdpbmRv
dy1ib2R5LXdpZHRoIG5pbCAncGl4ZWx3aXNlKSkKICAgICAgICAxMDApKQogICAgKHQKLSAgICAo
ZXJyb3IgIkludmFsaWQgc3BlYzogJXMiIHNwZWMpKSkpCisgICAgKGVycm9yICJJbnZhbGlkIHNw
ZWM6IGAlcycgKHZ0YWJsZSBgJXMnKSIgc3BlYworICAgICAgICAgICAodnRhYmxlLW5hbWUgdGFi
bGUpKSkpKQoKIChkZWZ1biB2dGFibGUtLWNvbXB1dGUtd2lkdGhzICh0YWJsZSBjYWNoZSkKICAg
IkNvbXB1dGUgdGhlIGRpc3BsYXkgd2lkdGhzIGZvciBUQUJMRS4KIENBQ0hFIGlzIFRBQkxFJ3Mg
Y2FjaGUgZGF0YSBhcyByZXR1cm5lZCBieSBgdnRhYmxlLS1jb21wdXRlLWNhY2hlJy4iCiAgIChs
ZXQqICgobi0wY29scyAwKSA7IENvdW50IHRoZSBudW1iZXIgb2YgemVyby13aWR0aCBjb2x1bW5z
LgorICAgICAgICAgOzsgY29sdW1uLXdpZHRoIGlzIGFkanVzdGVkIGJ5IGluZGljYXRvci1wYWQt
d2lkdGggZm9yCisgICAgICAgICA7OyBwaXhlbC1hbGlnbm1lbnQgd2l0aCB0aGUgaGVhZGVyIGxp
bmUuCisgICAgICAgICAoYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKSkKKyAgICAgICAgIChp
bmRpY2F0b3ItcGFkLXdpZHRoIChzdHJpbmctcGl4ZWwtd2lkdGgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc2xvdC12YWx1ZSB0YWJsZSAnLWluZGljYXRvci1wYWQpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyKSkKICAgICAgICAgICh3aWR0aHMgKHNlcS1t
YXAtaW5kZXhlZAogICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoY29sdW1uIGluZGV4KQogICAg
ICAgICAgICAgICAgICAgICAobGV0ICgod2lkdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IEV4cGxpY2l0IHdpZHRocy4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kICh2dGFibGUtY29sdW1uLXdpZHRoIGNvbHVt
bikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUtLWNvbXB1dGUtd2lk
dGggdGFibGUgKHZ0YWJsZS1jb2x1bW4td2lkdGggY29sdW1uKSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAodnRhYmxlLS1jb21wdXRlLXdpZHRoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAodnRhYmxlLWNvbHVtbi13aWR0aCBjb2x1bW4pKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7OyBJZiB0aGUgdnRhYmxlIGlzIGVtcHR5IGFuZCBubyBleHBsaWNpdCB3aWR0aCBpcyBn
aXZlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBzZXQgaXRzIHdpZHRoIHRvIDAg
YW5kIGRlYWwgd2l0aCBpdCBiZWxvdy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod2hl
biAobnVsbCBjYWNoZSkKQEAgLTg4MCwyNSArMTk1NSwzNyBAQCB2dGFibGUtLWNvbXB1dGUtd2lk
dGhzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDs7IE90aGVyd2lzZSwgY29tcHV0ZSBiYXNlZCBvbiB0aGUgZGlzcGxheWVkIHdp
ZHRocyBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBkYXRhLgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzZXEtbWF4IChzZXEtbWFwIChsYW1iZGEgKGVsZW0pCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnRoIDEgKGVs
dCAoY2RyIGVsZW0pIGluZGV4KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FjaGUpKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlcS1tYXggKHNlcS1tYXAgKGxhbWJkYSAo
ZWxlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bnRoIDEgKGVsdCAoY2RyIGVsZW0pIGluZGV4KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhY2hlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGlmIChlcSAodnRhYmxlLWNvbHVtbi1pbmZlci13aWR0aCBjb2x1bW4pICdkYXRhK25hbWUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgobmFtZSAoY29weS1zZXF1
ZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFi
bGUtY29sdW1uLW5hbWUgY29sdW1uKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoYWRkLWZhY2UtdGV4dC1wcm9wZXJ0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCAobGVuZ3RoIG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodnRhYmxlLWhlYWRlci1mYWNlIHRhYmxlKSB0IG5hbWUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzdHJpbmctcGl4ZWwtd2lkdGggbmFtZSBidWZmZXIpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSkpKQogICAgICAgICAgICAgICAgICAgICAg
IDs7IExldCBtaW4td2lkdGgvbWF4LXdpZHRoIHNwZWNzIGhhdmUgdGhlaXIgc2F5LgogICAgICAg
ICAgICAgICAgICAgICAgICh3aGVuLWxldCogKChtaW4td2lkdGggKGFuZCAodnRhYmxlLWNvbHVt
bi1taW4td2lkdGggY29sdW1uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh2dGFibGUtLWNvbXB1dGUtd2lkdGgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUgKHZ0YWJsZS1jb2x1bW4tbWluLXdp
ZHRoIGNvbHVtbikpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh2dGFibGUtLWNvbXB1dGUtd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWNvbHVtbi1taW4td2lkdGggY29s
dW1uKSkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHdpZHRoIChtYXggd2lkdGgg
bWluLXdpZHRoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgKHdoZW4tbGV0KiAoKG1heC13aWR0
aCAoYW5kICh2dGFibGUtY29sdW1uLW1heC13aWR0aCBjb2x1bW4pCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY29tcHV0ZS13aWR0aAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSAo
dnRhYmxlLWNvbHVtbi1tYXgtd2lkdGggY29sdW1uKSkpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY29tcHV0ZS13aWR0aAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFibGUt
Y29sdW1uLW1heC13aWR0aCBjb2x1bW4pKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgKHNl
dHEgd2lkdGggKG1pbiB3aWR0aCBtYXgtd2lkdGgpKSkKLSAgICAgICAgICAgICAgICAgICAgICB3
aWR0aCkpCisgICAgICAgICAgICAgICAgICAgICAgKCsgd2lkdGggaW5kaWNhdG9yLXBhZC13aWR0
aCkpKQogICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1jb2x1bW5zIHRhYmxlKSkpKQogICAgIDs7
IElmIHRoZXJlIGFyZSBhbnkgemVyby13aWR0aCBjb2x1bW5zLCBkaXZpZGUgdGhlIHJlbWFpbmlu
ZyB3aW5kb3cKICAgICA7OyB3aWR0aCBldmVubHkgb3ZlciB0aGVtLgogICAgICh3aGVuICg+IG4t
MGNvbHMgMCkKICAgICAgIChsZXQqICgoY29tYmluZWQtd2lkdGggKGFwcGx5ICMnKyB3aWR0aHMp
KQotICAgICAgICAgICAgIChkZWZhdWx0LXdpZHRoICgvICgtICh3aW5kb3ctd2lkdGggbmlsIHQp
IGNvbWJpbmVkLXdpZHRoKSBuLTBjb2xzKSkpCisgICAgICAgICAgICAgKGRlZmF1bHQtd2lkdGgg
KC8gKC0gKHdpbmRvdy1ib2R5LXdpZHRoIG5pbCAncGl4ZWx3aXNlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkLXdpZHRoKSBuLTBjb2xzKSkpCiAgICAgICAgIChz
ZXRxIHdpZHRocyAobWFwY2FyIChsYW1iZGEgKHdpZHRoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChpZiAoemVyb3Agd2lkdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQtd2lkdGgKQEAgLTkxNiwxOSArMjAwMywyOCBAQCB2dGFibGUtLWNvbXB1
dGUtY2FjaGVkLWxpbmUKICAgKHNlcS1tYXAtaW5kZXhlZAogICAgKGxhbWJkYSAoY29sdW1uIGlu
ZGV4KQogICAgICAobGV0KiAoKHZhbHVlICh2dGFibGUtLWdldC12YWx1ZSBvYmplY3QgaW5kZXgg
Y29sdW1uIHRhYmxlKSkKLSAgICAgICAgICAgIChzdHJpbmcgKGlmIChzdHJpbmdwIHZhbHVlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgKGNvcHktc2VxdWVuY2UgdmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgICAgKGZvcm1hdCAiJXMiIHZhbHVlKSkpKQorICAgICAgICAgICAgKHN0cmluZwor
ICAgICAgICAgICAgIChjb25kCisgICAgICAgICAgICAgICgodnRhYmxlLWNvbHVtbi1mb3JtYXR0
ZXIgY29sdW1uKQorICAgICAgICAgICAgICAgKGZ1bmNhbGwgKHZ0YWJsZS1jb2x1bW4tZm9ybWF0
dGVyIGNvbHVtbikgdmFsdWUpKQorICAgICAgICAgICAgICAoKHZ0YWJsZS1mb3JtYXR0ZXIgdGFi
bGUpCisgICAgICAgICAgICAgICAoZnVuY2FsbCAodnRhYmxlLWZvcm1hdHRlciB0YWJsZSkgdmFs
dWUgaW5kZXggdGFibGUpKQorICAgICAgICAgICAgICAodAorICAgICAgICAgICAgICAgKGlmIChz
dHJpbmdwIHZhbHVlKQorICAgICAgICAgICAgICAgICAgIChjb3B5LXNlcXVlbmNlIHZhbHVlKQor
ICAgICAgICAgICAgICAgICAoZm9ybWF0ICIlcyIgdmFsdWUpKSkpKSkKICAgICAgICAoYWRkLWZh
Y2UtdGV4dC1wcm9wZXJ0eSAwIChsZW5ndGggc3RyaW5nKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh2dGFibGUtZmFjZSB0YWJsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0IHN0cmluZykKICAgICAgICA7OyBXZSBzdGFzaCB0aGUgY29tcHV0ZWQgd2lkdGggYW5k
IHN0cmluZyBoZXJlIC0tIGlmIHRoZXJlIGFyZQogICAgICAgIDs7IG5vIGZvcm1hdHRlcnMvZGlz
cGxheWVycywgd2UnbGwgYmUgdXNpbmcgdGhlIHN0cmluZywgYW5kCiAgICAgICAgOzsgdGhlbiB3
b24ndCBoYXZlIHRvIHJlY3JlYXRlIGl0LgotICAgICAgIChsaXN0IHZhbHVlIChzdHJpbmctcGl4
ZWwtd2lkdGggc3RyaW5nKSBzdHJpbmcpKSkKKyAgICAgICAobGlzdCB2YWx1ZQorICAgICAgICAg
ICAgIChzdHJpbmctcGl4ZWwtd2lkdGggc3RyaW5nICh2dGFibGUtYnVmZmVyIHRhYmxlKSkKKyAg
ICAgICAgICAgICBzdHJpbmcpKSkKICAgICh2dGFibGUtY29sdW1ucyB0YWJsZSkpKQoKLShkZWZ1
biB2dGFibGUtLW1ha2Uta2V5bWFwICh0YWJsZSkKKyhkZWZ1biB2dGFibGUtLW1ha2Uta2V5bWFw
ICh0YWJsZSB1c2UtbmF2aWdhdGlvbi1rZXltYXApCiAgIChsZXQgKChtYXAgKGlmIChvciAodnRh
YmxlLWFjdGlvbnMgdGFibGUpCiAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWtleW1hcCB0
YWJsZSkpCiAgICAgICAgICAgICAgICAgIChjb3B5LWtleW1hcCB2dGFibGUtbWFwKQpAQCAtOTQy
LDYgKzIwMzgsMTAgQEAgdnRhYmxlLS1tYWtlLWtleW1hcAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGZ1bmNhbGwgYmluZGluZyBvYmplY3QpKSkpCiAgICAgICAgICAgICAgICAg
IChjYXIgYWN0aW9ucykgKGNhZHIgYWN0aW9ucykpCiAgICAgICAgIChzZXRxIGFjdGlvbnMgKGNk
ZHIgYWN0aW9ucykpKSkKKworICAgICh3aGVuIHVzZS1uYXZpZ2F0aW9uLWtleW1hcAorICAgICAg
KHNldHEgbWFwIChtYWtlLWNvbXBvc2VkLWtleW1hcCAobGlzdCBtYXAgdnRhYmxlLW5hdmlnYXRp
b24tbWFwKSkpKQorCiAgICAgKGlmICh2dGFibGUta2V5bWFwIHRhYmxlKQogICAgICAgICAocHJv
Z24KICAgICAgICAgICAoc2V0ZiAodnRhYmxlLWtleW1hcCB0YWJsZSkKQEAgLTk1NiwzOCArMjA1
Niw3MyBAQCB2dGFibGUtLW1ha2Uta2V5bWFwCiAgICAgICAgICAgKHZ0YWJsZS1rZXltYXAgdGFi
bGUpKQogICAgICAgbWFwKSkpCgotKGRlZnVuIHZ0YWJsZS1yZXZlcnQgKCkKLSAgIlJlZ2VuZXJh
dGUgdGhlIHRhYmxlIHVuZGVyIHBvaW50LiIKLSAgKGxldCAoKHRhYmxlICh2dGFibGUtY3VycmVu
dC10YWJsZSkpCi0gICAgICAgIChvYmplY3QgKHZ0YWJsZS1jdXJyZW50LW9iamVjdCkpCi0gICAg
ICAgIChjb2x1bW4gKHZ0YWJsZS1jdXJyZW50LWNvbHVtbikpCi0gICAgICAgIChpbmhpYml0LXJl
YWQtb25seSB0KSkKLSAgICAodW5sZXNzIHRhYmxlCi0gICAgICAodXNlci1lcnJvciAiTm8gdGFi
bGUgdW5kZXIgcG9pbnQiKSkKLSAgICAoZGVsZXRlLXJlZ2lvbiAodnRhYmxlLWJlZ2lubmluZy1v
Zi10YWJsZSkgKHZ0YWJsZS1lbmQtb2YtdGFibGUpKQotICAgICh2dGFibGUtaW5zZXJ0IHRhYmxl
KQotICAgICh3aGVuIG9iamVjdAotICAgICAgKHZ0YWJsZS1nb3RvLW9iamVjdCBvYmplY3QpKQot
ICAgICh3aGVuIGNvbHVtbgotICAgICAgKHZ0YWJsZS1nb3RvLWNvbHVtbiBjb2x1bW4pKSkpCiso
ZGVmdW4gdnRhYmxlLXJldmVydCAoJm9wdGlvbmFsIHRhYmxlKQorICAiUmVnZW5lcmF0ZSBUQUJM
RSBpbiBpdHMgYnVmZmVyLgorSWYgVEFCTEUgaXMgbmlsLCB1c2UgdGhlIHRhYmxlIHVuZGVyIHBv
aW50LiIKKyAgKHNldHEgdGFibGUgKG9yIHRhYmxlICh2dGFibGUtY3VycmVudC10YWJsZSkpKQor
ICAodW5sZXNzIHRhYmxlCisgICAgKHVzZXItZXJyb3IgIk5vIHRhYmxlIGZvdW5kIikpCisgICh3
aXRoLWN1cnJlbnQtYnVmZmVyICh2dGFibGUtYnVmZmVyIHRhYmxlKQorICAgIDs7IEhhbmRsZSBy
ZXZlcnRpbmcgdGFibGVzIHRoYXQgYXJlIG5vdCB0aGUgImN1cnJlbnQgdGFibGUsIgorICAgIDs7
IGluY2x1ZGluZyB0aGUgY2FzZXMgd2hlcmUgcG9pbnQgaXMgbm90IG9uIHRoZSB0YWJsZSBhbmQK
KyAgICA7OyBgdnRhYmxlLXJldmVydCcgaXMgY2FsbGVkIGJ5IGNvZGUsIGFuZCB0aGUgY2FzZSB3
aGVyZSBtdWx0aXBsZQorICAgIDs7IHZ0YWJsZXMgc2hhcmUgYSBidWZmZXIgYW5kIHJldmVydCBp
cyBjYWxsZWQgdmlhIGhvb2tzIHRvIGhhbmRsZQorICAgIDs7IGB0ZXh0LXNjYWxlLW1vZGUnIG9y
IGNoYW5nZXMgdG8gYGRpc3BsYXktbGluZS1udW1iZXJzJy4KKyAgICAobGV0IChvcmlnLW9iamVj
dAorICAgICAgICAgIG9yaWctY29sdW1uCisgICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQp
KQorICAgICAgKHdoZW4gKGVxIHRhYmxlICh2dGFibGUtY3VycmVudC10YWJsZSkpCisgICAgICAg
IChzZXRxIG9yaWctb2JqZWN0ICh2dGFibGUtY3VycmVudC1vYmplY3QpCisgICAgICAgICAgICAg
IG9yaWctY29sdW1uICh2dGFibGUtY3VycmVudC1jb2x1bW4pKSkKKyAgICAgIChzYXZlLWV4Y3Vy
c2lvbgorICAgICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCisgICAgICAgIChkZWxldGUt
cmVnaW9uIChwb2ludCkgKHZ0YWJsZS1lbmQtb2YtdGFibGUpKQorICAgICAgICAodnRhYmxlLS1p
bnNlcnQgdGFibGUpKQorICAgICAgKHdoZW4gb3JpZy1vYmplY3QKKyAgICAgICAgOzsgTmVlZCBn
b3RvLXRhYmxlLCBpZiBwb2ludCBpcyB3aXRoaW4gdGhlIHRhYmxlJ3MgcmVnaW9uLCB0bworICAg
ICAgICA7OyBhY2NvbW1vZGF0ZSBkZWxldGUtcmVnaW9uIG1vdmluZyBwb2ludCBhd2F5LgorICAg
ICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCisgICAgICAgICh2dGFibGUtZ290by1vYmpl
Y3Qgb3JpZy1vYmplY3QpCisgICAgICAgICh2dGFibGUtZ290by1jb2x1bW4gb3JpZy1jb2x1bW4g
J21heWJlLXNldC13aW5kb3ctcG9pbnQpKSkpKQoKIChkZWZ1biB2dGFibGUtLXdpZHRocyAodGFi
bGUpCi0gIChudGggMSAodnRhYmxlLS1lbnN1cmUtY2FjaGUgdGFibGUpKSkKKyAgKHZ0YWJsZS0t
Y2FjaGUtd2lkdGhzICh2dGFibGUtLWVuc3VyZS1jYWNoZSB0YWJsZSkpKQoKIDs7OyBDb21tYW5k
cy4KCi0oZGVmdmFyLWtleW1hcCB2dGFibGUtaGVhZGVyLW1vZGUtbWFwCi0gICI8aGVhZGVyLWxp
bmU+IDxtb3VzZS0xPiIgJ3Z0YWJsZS1oZWFkZXItbGluZS1zb3J0Ci0gICI8aGVhZGVyLWxpbmU+
IDxtb3VzZS0yPiIgJ3Z0YWJsZS1oZWFkZXItbGluZS1zb3J0KQorKGRlZnVuIHZ0YWJsZS1nb3Rv
LW5leHQtdGFibGUgKCkKKyAgIkdvIHRvIHRoZSBuZXh0IHRhYmxlIGluIHRoZSBidWZmZXIuCitE
byBub3RoaW5nIGlmIG5vIG5leHQgdGFibGUuIgorICAoaW50ZXJhY3RpdmUpCisgIChsZXQgKG1h
dGNoKQorICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgOzsgRmluZCB0aGUgbmV4dCBub24tbmls
ICd2dGFibGUsIHNraXBwaW5nIHRoZSBjdXJyZW50IHRhYmxlLCBpZgorICAgICAgOzsgcHJlc2Vu
dC4KKyAgICAgIChzZXRxIG1hdGNoICh0ZXh0LXByb3BlcnR5LXNlYXJjaC1mb3J3YXJkICd2dGFi
bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCBu
aWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2dGFi
bGUtY3VycmVudC10YWJsZSkpKSkKKyAgICAod2hlbiBtYXRjaAorICAgICAgKGdvdG8tY2hhciAo
cHJvcC1tYXRjaC1iZWdpbm5pbmcgbWF0Y2gpKQorICAgICAgKHZ0YWJsZS1nb3RvLWJlZ2lubmlu
Zy1vZi10YWJsZSkpKSkKCi0oZGVmaW5lLW1pbm9yLW1vZGUgdnRhYmxlLWhlYWRlci1tb2RlCi0g
ICJNaW5vciBtb2RlIGZvciBidWZmZXJzIHdpdGggdnRhYmxlcyB3aXRoIGhlYWRlcnMuIgotICA6
a2V5bWFwIHZ0YWJsZS1oZWFkZXItbW9kZS1tYXApCisoZGVmdW4gdnRhYmxlLWdvdG8tcHJldmlv
dXMtdGFibGUgKCkKKyAgIkdvIHRvIHRoZSBwcmV2aW91cyB0YWJsZSBpbiB0aGUgYnVmZmVyLgor
RG8gbm90aGluZyBpZiBubyBwcmV2aW91cyB0YWJsZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGxl
dCAobWF0Y2gpCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICA7OyBGaW5kIHRoZSBwcmV2aW91
cyBub24tbmlsICd2dGFibGUsIHNraXBwaW5nIHRoZSBjdXJyZW50IHRhYmxlLAorICAgICAgOzsg
aWYgcHJlc2VudC4KKyAgICAgIChzZXRxIG1hdGNoICh0ZXh0LXByb3BlcnR5LXNlYXJjaC1iYWNr
d2FyZCAndnRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmlsIG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICh2dGFibGUtY3VycmVudC10YWJsZSkpKSkKKyAgICAod2hlbiBtYXRjaAorICAgICAg
KGdvdG8tY2hhciAocHJvcC1tYXRjaC1iZWdpbm5pbmcgbWF0Y2gpKQorICAgICAgKHZ0YWJsZS1n
b3RvLWJlZ2lubmluZy1vZi10YWJsZSkpKSkKCiAoZGVmdW4gdnRhYmxlLW5hcnJvdy1jdXJyZW50
LWNvbHVtbiAoJm9wdGlvbmFsIG4pCiAgICJOYXJyb3cgdGhlIGN1cnJlbnQgY29sdW1uIGJ5IE4g
Y2hhcmFjdGVycy4KIElmIE4gaXNuJ3QgZ2l2ZW4sIE4gZGVmYXVsdHMgdG8gMS4KLQogSW50ZXJh
Y3RpdmVseSwgTiBpcyB0aGUgcHJlZml4IGFyZ3VtZW50LiIKICAgKGludGVyYWN0aXZlICJwIikK
ICAgKGxldCogKCh0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKQpAQCAtOTk3LDQ3ICsyMTMy
LDcxIEBAIHZ0YWJsZS1uYXJyb3ctY3VycmVudC1jb2x1bW4KICAgICAodnRhYmxlLS1hbHRlci1j
b2x1bW4td2lkdGggdGFibGUgY29sdW1uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgtICgqICh2dGFibGUtLWNoYXItd2lkdGggdGFibGUpIChvciBuIDEpKSkpKSkKCi0oZGVmdW4g
dnRhYmxlLS1hbHRlci1jb2x1bW4td2lkdGggKHRhYmxlIGNvbHVtbiBkZWx0YSkKLSAgKGxldCAo
KHdpZHRocyAodnRhYmxlLS13aWR0aHMgdGFibGUpKSkKLSAgICAoc2V0ZiAoYXJlZiB3aWR0aHMg
Y29sdW1uKQotICAgICAgICAgIChtYXggKCogKHZ0YWJsZS0tY2hhci13aWR0aCB0YWJsZSkgMikK
LSAgICAgICAgICAgICAgICgrIChhcmVmIHdpZHRocyBjb2x1bW4pIGRlbHRhKSkpCisoZGVmdW4g
dnRhYmxlLS1hbHRlci1jb2x1bW4td2lkdGggKHRhYmxlIGNvbHVtbi1pbmRleCBkZWx0YSkKKyAg
KGxldCogKCh3aWR0aHMgKHZ0YWJsZS0td2lkdGhzIHRhYmxlKSkKKyAgICAgICAgIChjaGFyLXdp
ZHRoICh2dGFibGUtLWNoYXItd2lkdGggdGFibGUpKQorICAgICAgICAgKGNvbHVtbiAoZWx0ICh2
dGFibGUtY29sdW1ucyB0YWJsZSkgY29sdW1uLWluZGV4KSkKKyAgICAgICAgIChjdXJyLXdpZHRo
IChhcmVmIHdpZHRocyBjb2x1bW4taW5kZXgpKQorICAgICAgICAgKGFkai13aWR0aCAoKyBjdXJy
LXdpZHRoIGRlbHRhKSkKKyAgICAgICAgIDs7IEFkaiBmb3IgbWluLXdpZHRoLgorICAgICAgICAg
KG1pbi13aWR0aCAob3IKKyAgICAgICAgICAgICAgICAgICAgIChhbmQgKHZ0YWJsZS1jb2x1bW4t
bWluLXdpZHRoIGNvbHVtbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tY29t
cHV0ZS13aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUgKHZ0YWJsZS1jb2x1
bW4tbWluLXdpZHRoIGNvbHVtbikpKQorICAgICAgICAgICAgICAgICAgICAgKCogMiBjaGFyLXdp
ZHRoKSkpCisgICAgICAgICAobmV3LXdpZHRoIChtYXggbWluLXdpZHRoIGFkai13aWR0aCkpCisg
ICAgICAgICA7OyBBZGogZm9yIG1heC13aWR0aC4KKyAgICAgICAgIChtYXgtd2lkdGggKGFuZCAo
dnRhYmxlLWNvbHVtbi1tYXgtd2lkdGggY29sdW1uKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICh2dGFibGUtLWNvbXB1dGUtd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUg
KHZ0YWJsZS1jb2x1bW4tbWF4LXdpZHRoIGNvbHVtbikpKSkKKyAgICAgICAgIChuZXctd2lkdGgg
KGlmIG1heC13aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgKG1pbiBtYXgtd2lkdGggbmV3
LXdpZHRoKQorICAgICAgICAgICAgICAgICAgICAgIG5ldy13aWR0aCkpKQorICAgIChzZXRmIChh
cmVmIHdpZHRocyBjb2x1bW4taW5kZXgpIG5ldy13aWR0aCkKICAgICA7OyBTdG9yZSB0aGUgd2lk
dGggc28gaXQnbGwgYmUgcmVzcGVjdGVkIG9uIGEgcmV2ZXJ0LgotICAgIChzZXRmICh2dGFibGUt
Y29sdW1uLXdpZHRoIChlbHQgKHZ0YWJsZS1jb2x1bW5zIHRhYmxlKSBjb2x1bW4pKQotICAgICAg
ICAgIChmb3JtYXQgIiVkcHgiIChhcmVmIHdpZHRocyBjb2x1bW4pKSkKLSAgICAodnRhYmxlLXJl
dmVydCkpKQorICAgIChzZXRmICh2dGFibGUtY29sdW1uLXdpZHRoIGNvbHVtbikKKyAgICAgICAg
ICAoZm9ybWF0ICIlZHB4IiAoYXJlZiB3aWR0aHMgY29sdW1uLWluZGV4KSkpCisgICAgKGNvbmQK
KyAgICAgKChlcSBuZXctd2lkdGggbWluLXdpZHRoKQorICAgICAgKG1lc3NhZ2UgIkNvbHVtbiBp
cyBhdCBpdHMgbWluaW11bSB3aWR0aCIpKQorICAgICAoKGVxIG5ldy13aWR0aCBtYXgtd2lkdGgp
CisgICAgICAobWVzc2FnZSAiQ29sdW1uIGlzIGF0IGl0cyBtYXhpbXVtIHdpZHRoIikpKQorICAg
ICh2dGFibGUtcmV2ZXJ0IHRhYmxlKSkpCgogKGRlZnVuIHZ0YWJsZS13aWRlbi1jdXJyZW50LWNv
bHVtbiAoJm9wdGlvbmFsIG4pCiAgICJXaWRlbiB0aGUgY3VycmVudCBjb2x1bW4gYnkgTiBjaGFy
YWN0ZXJzLgogSWYgTiBpc24ndCBnaXZlbiwgTiBkZWZhdWx0cyB0byAxLgotCiBJbnRlcmFjdGl2
ZWx5LCBOIGlzIHRoZSBwcmVmaXggYXJndW1lbnQuIgogICAoaW50ZXJhY3RpdmUgInAiKQogICAo
dnRhYmxlLW5hcnJvdy1jdXJyZW50LWNvbHVtbiAoLSBuKSkpCgogKGRlZnVuIHZ0YWJsZS1wcmV2
aW91cy1jb2x1bW4gKCkKLSAgIkdvIHRvIHRoZSBwcmV2aW91cyBjb2x1bW4uIgorICAiTW92ZSBw
b2ludCB0byB0aGUgcHJldmlvdXMgY29sdW1uIG9mIHRoZSBjdXJyZW50IHRhYmxlLiIKICAgKGlu
dGVyYWN0aXZlKQogICAodnRhYmxlLWdvdG8tY29sdW1uCiAgICAobWF4IDAgKDEtIChvciAodnRh
YmxlLWN1cnJlbnQtY29sdW1uKQogICAgICAgICAgICAgICAgICAgKGxlbmd0aCAodnRhYmxlLS13
aWR0aHMgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpKSkpKSkKCiAoZGVmdW4gdnRhYmxlLW5leHQt
Y29sdW1uICgpCi0gICJHbyB0byB0aGUgbmV4dCBjb2x1bW4uIgorICAiTW92ZSBwb2ludCB0byB0
aGUgbmV4dCBjb2x1bW4gb2YgdGhlIGN1cnJlbnQgdGFibGUuIgogICAoaW50ZXJhY3RpdmUpCiAg
ICh3aGVuICh2dGFibGUtY3VycmVudC1jb2x1bW4pCiAgICAgKHZ0YWJsZS1nb3RvLWNvbHVtbgog
ICAgICAobWluICgxLSAobGVuZ3RoICh2dGFibGUtLXdpZHRocyAodnRhYmxlLWN1cnJlbnQtdGFi
bGUpKSkpCiAgICAgICAgICAgKDErICh2dGFibGUtY3VycmVudC1jb2x1bW4pKSkpKSkKCi0oZGVm
dW4gdnRhYmxlLXJldmVydC1jb21tYW5kICgpCi0gICJSZS1xdWVyeSBkYXRhIGFuZCByZWdlbmVy
YXRlIHRoZSB0YWJsZSB1bmRlciBwb2ludC4iCisoZGVmdW4gdnRhYmxlLXJldmVydC1jb21tYW5k
ICgmb3B0aW9uYWwgdGFibGUpCisgICJSZS1xdWVyeSBkYXRhIGFuZCByZWdlbmVyYXRlIFRBQkxF
IGluIGl0cyBidWZmZXIuCitJZiBUQUJMRSBpcyBuaWwsIHVzZSB0aGUgY3VycmVudCB0YWJsZSBh
dCBwb2ludC4iCiAgIChpbnRlcmFjdGl2ZSkKLSAgKGxldCAoKHRhYmxlICh2dGFibGUtY3VycmVu
dC10YWJsZSkpKQotICAgICh3aGVuICh2dGFibGUtb2JqZWN0cy1mdW5jdGlvbiB0YWJsZSkKLSAg
ICAgIChzZXRmICh2dGFibGUtb2JqZWN0cyB0YWJsZSkgKGZ1bmNhbGwgKHZ0YWJsZS1vYmplY3Rz
LWZ1bmN0aW9uIHRhYmxlKSkpKQotICAgICh2dGFibGUtLWNsZWFyLWNhY2hlIHRhYmxlKSkKLSAg
KHZ0YWJsZS1yZXZlcnQpKQorICAoc2V0cSB0YWJsZSAob3IgdGFibGUgKHZ0YWJsZS1jdXJyZW50
LXRhYmxlKSkpCisgICh1bmxlc3MgdGFibGUKKyAgICAodXNlci1lcnJvciAiTm8gdGFibGUgZm91
bmQiKSkKKyAgKHZ0YWJsZS0tdW5tYXJrLWFsbC1vYmplY3RzIHRhYmxlKQorICAod2hlbiAodnRh
YmxlLW9iamVjdHMtZnVuY3Rpb24gdGFibGUpCisgICAgKHNldGYgKHZ0YWJsZS1vYmplY3RzIHRh
YmxlKSAoZnVuY2FsbCAodnRhYmxlLW9iamVjdHMtZnVuY3Rpb24gdGFibGUpKSkpCisgICh2dGFi
bGUtLWNsZWFyLWNhY2hlcyB0YWJsZSkKKyAgKHZ0YWJsZS1yZXZlcnQgdGFibGUpKQoKIChkZWZ1
biB2dGFibGUtc29ydC1ieS1jdXJyZW50LWNvbHVtbiAoKQogICAiU29ydCB0aGUgdGFibGUgdW5k
ZXIgcG9pbnQgYnkgdGhlIGNvbHVtbiB1bmRlciBwb2ludC4iCkBAIC0xMDU5LDIxICsyMjE4LDE3
OSBAQCB2dGFibGUtc29ydC1ieS1jdXJyZW50LWNvbHVtbgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChpZiAoZXEgKGNkciBsYXN0KSAnYXNjZW5kKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnZGVzY2VuZAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2FzY2VuZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fz
Y2VuZCkpKSkpKQotICAodnRhYmxlLXJldmVydCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdhc2NlbmQpKSkpKQorICAgIDs7IENsZWFyIHRoZSBjYWNoZSB0byBmb3JjZSByZXNv
cnQuCisgICAgKHZ0YWJsZS0tY2xlYXItY2FjaGUgdGFibGUpCisgICAgKHZ0YWJsZS1yZXZlcnQg
dGFibGUpKSkKCi0oZGVmdW4gdnRhYmxlLWhlYWRlci1saW5lLXNvcnQgKGUpCi0gICJTb3J0IGEg
dnRhYmxlIGZyb20gdGhlIGhlYWRlciBsaW5lLiIKKyhkZWZ1biB2dGFibGUtLWhlYWRlci1saW5l
LXNvcnQgKGUpCisgICJTb3J0IHRoZSBjdXJyZW50IHRhYmxlIGZyb20gdGhlIGhlYWRlciBsaW5l
LCB0cmlnZ2VyZWQgYnkgZXZlbnQgRS4iCiAgIChpbnRlcmFjdGl2ZSAiZSIpCiAgIChsZXQqICgo
cG9zIChldmVudC1zdGFydCBlKSkKLQkgKG9iaiAocG9zbi1vYmplY3QgcG9zKSkpCisJIChvYmog
KHBvc24tb2JqZWN0IHBvcykpCisgICAgICAgICAodGFibGUgKGdldC10ZXh0LXByb3BlcnR5Cisg
ICAgICAgICAgICAgICAgIChpZiBvYmogKGNkciBvYmopIChwb3NuLXBvaW50IHBvcykpCisJCSAn
dnRhYmxlCisJCSAoY2FyIG9iaikpKQorICAgICAgICAgKGNvbHVtbiAoZ2V0LXRleHQtcHJvcGVy
dHkKKyAgICAgICAgICAgICAgICAgIChpZiBvYmogKGNkciBvYmopIChwb3NuLXBvaW50IHBvcykp
CisJCSAgJ3Z0YWJsZS1jb2x1bW4KKwkJICAoY2FyIG9iaikpKSkKICAgICAod2l0aC1jdXJyZW50
LWJ1ZmZlciAod2luZG93LWJ1ZmZlciAocG9zbi13aW5kb3cgcG9zKSkKLSAgICAgIChnb3RvLWNo
YXIgKHBvaW50LW1pbikpCi0gICAgICAodnRhYmxlLWdvdG8tY29sdW1uCi0gICAgICAgKGdldC10
ZXh0LXByb3BlcnR5IChpZiBvYmogKGNkciBvYmopIChwb3NuLXBvaW50IHBvcykpCi0JCQkgICd2
dGFibGUtY29sdW1uCi0JCQkgIChjYXIgb2JqKSkpCi0gICAgICAodnRhYmxlLXNvcnQtYnktY3Vy
cmVudC1jb2x1bW4pKSkpCisgICAgICAoaWYgKGVxIHRhYmxlICh2dGFibGUtY3VycmVudC10YWJs
ZSkpCisgICAgICAgICAgKHByb2duCisgICAgICAgICAgICAodnRhYmxlLWdvdG8tY29sdW1uIGNv
bHVtbikKKyAgICAgICAgICAgICh2dGFibGUtc29ydC1ieS1jdXJyZW50LWNvbHVtbikKKyAgICAg
ICAgICAgIDs7IEtlZXAgcG9pbnQgd2l0aGluIHRhYmxlIGJvdW5kcy4KKyAgICAgICAgICAgICh2
dGFibGUtZ290by1iZWdpbm5pbmctb2YtdGFibGUpKQorICAgICAgICAoc2F2ZS1leGN1cnNpb24K
KyAgICAgICAgICAodnRhYmxlLWdvdG8tdGFibGUgdGFibGUpCisgICAgICAgICAgKHZ0YWJsZS1n
b3RvLWNvbHVtbiBjb2x1bW4pCisgICAgICAgICAgKHZ0YWJsZS1zb3J0LWJ5LWN1cnJlbnQtY29s
dW1uKSkpKSkpCisocHV0ICd2dGFibGUtLWhlYWRlci1saW5lLXNvcnQgJ2NvbXBsZXRpb24tcHJl
ZGljYXRlICMnaWdub3JlKQorCisoZGVmdW4gdnRhYmxlLXVuc29ydCAoJm9wdGlvbmFsIHRhYmxl
KQorICAiVG9nZ2xlIFRBQkxFIHNvcnQgYmV0d2VlbiB1bnNvcnRlZCBhbmQgaXRzIG9yaWdpbmFs
IGA6c29ydC1ieScuCitUaGUgZGVmYXVsdCBvcmRlciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSB0YWJs
ZSdzIG9iamVjdHMgb3IgaXRzCitgOm9iamVjdHMtZnVuY3Rpb24nLiIKKyAgKGludGVyYWN0aXZl
KQorICAoc2V0cSB0YWJsZSAob3IgdGFibGUgKHZ0YWJsZS1jdXJyZW50LXRhYmxlKSkpCisgICh1
bmxlc3MgdGFibGUKKyAgICAodXNlci1lcnJvciAiTm8gdGFibGUgZm91bmQiKSkKKyAgKGNvbmQK
KyAgICgobnVsbCAodnRhYmxlLXNvcnQtYnkgdGFibGUpKQorICAgIChpZiAoc2xvdC12YWx1ZSB0
YWJsZSAnLW9yaWctc29ydC1ieSkKKyAgICAgICAgKHByb2duCisgICAgICAgICAgKG1lc3NhZ2Ug
Ik9yaWdpbmFsIHNvcnQgb3JkZXIiKQorICAgICAgICAgIChzZXRmICh2dGFibGUtc29ydC1ieSB0
YWJsZSkgKHNsb3QtdmFsdWUgdGFibGUgJy1vcmlnLXNvcnQtYnkpKSkKKyAgICAgIChtZXNzYWdl
ICJTb3J0IGRpc2FibGVkIikpKQorICAgKHQKKyAgICAobWVzc2FnZSAiU29ydCBkaXNhYmxlZCIp
CisgICAgKHNldGYgKHZ0YWJsZS1zb3J0LWJ5IHRhYmxlKSBuaWwpKSkKKyAgOzsgQ2xlYXIgdGhl
IGNhY2hlIHRvIGZvcmNlIHJlc29ydCBvciByZXN0b3JlIG9iamVjdCBvcmRlci4KKyAgKHZ0YWJs
ZS0tY2xlYXItY2FjaGUgdGFibGUpCisgICh2dGFibGUtcmV2ZXJ0IHRhYmxlKSkKKworKGRlZnVu
IHZ0YWJsZS1uZXh0LWxpbmUgKCZvcHRpb25hbCBuKQorICAiTGlrZSBgZm9yd2FyZC1saW5lJywg
a2VlcGluZyBwb2ludCB3aXRoaW4gdGFibGUgYm9keSBib3VuZHMuCitOIGhhcyB0aGUgc2FtZSBt
ZWFuaW5nIGFzIGluIGBmb3J3YXJkLWxpbmUnLCB3aGljaCBzZWUuIgorICAoaW50ZXJhY3RpdmUg
InAiKQorICAod2l0aC1uby13YXJuaW5ncyA7IEluaGliaXQgbmV4dC1saW5lIHdhcm5pbmcuCisg
ICAgKHdoZW4gKHNhdmUtZXhjdXJzaW9uCisgICAgICAgICAgICAobmV4dC1saW5lIChvciBuIDEp
KQorICAgICAgICAgICAgKHZ0YWJsZS1jdXJyZW50LW9iamVjdCkpCisgICAgICAobmV4dC1saW5l
IChvciBuIDEpKSkpKQorCisoZGVmdW4gdnRhYmxlLXByZXZpb3VzLWxpbmUgKCZvcHRpb25hbCBu
KQorICAiTGlrZSBgZm9yd2FyZC1saW5lJywga2VlcGluZyBwb2ludCB3aXRoaW4gdGFibGUgYm9k
eSBib3VuZHMuCitOIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGEgbmVnYXRpdmUgYXJndW1lbnQg
aW4gYGZvcndhcmQtbGluZScsIHdoaWNoCitzZWUuIgorICAoaW50ZXJhY3RpdmUgInAiKQorICAo
dnRhYmxlLW5leHQtbGluZSAoKiAtMSAob3IgbiAxKSkpKQorCisoZGVmdW4gdnRhYmxlLWNsb3Nl
ICgpCisgICJDbG9zZSB0aGUgY3VycmVudCB0YWJsZS4KK1RoZSBjbG9zZSBhY3Rpb24gaXMgZGV0
ZXJtaW5lZCBieSB0aGUgdGFibGUncyBgOmNsb3NlLWFjdGlvbicuIgorICAoaW50ZXJhY3RpdmUp
CisgICh3aGVuLWxldCogKCh0YWJsZSAodnRhYmxlLWN1cnJlbnQtdGFibGUpKSkKKyAgICAocGNh
c2UgKHZ0YWJsZS1jbG9zZS1hY3Rpb24gdGFibGUpCisgICAgICAoKHByZWQgKGxhbWJkYSAoeCkg
KHdoZW4gKGZ1bmN0aW9ucCB4KSAoZnVuY2FsbCB4KSB0KSkpIHQpCisgICAgICAoJ3F1aXQtd2lu
ZG93IChxdWl0LXdpbmRvdykpCisgICAgICAoJ3F1aXQtd2luZG93LWtpbGwgKHF1aXQtd2luZG93
ICdraWxsKSkKKyAgICAgIChfIChidXJ5LWJ1ZmZlcikpKSkpCisKKzs7IE9iamVjdCBtYXJraW5n
IGZ1bmN0aW9ucy4KKworKGRlZnVuIHZ0YWJsZS1tYXJrZWQtb2JqZWN0cyAodGFibGUpCisgICJS
ZXR1cm4gYSBsaXN0IG9mIG1hcmtlZCBvYmplY3RzIGluIFRBQkxFLgorTm90ZSwgdGhlIG9yZGVy
IG9mIHRoaXMgbGlzdCBpcyB1bmRlZmluZWQuIgorICAoc2xvdC12YWx1ZSB0YWJsZSAnLW1hcmtl
ZC1vYmplY3RzKSkKKworKGRlZnVuIHZ0YWJsZS1vYmplY3QtbWFya2VkLXAgKHRhYmxlIG9iamVj
dCkKKyAgIlJldHVybiBub24tbmlsIGlmIE9CSkVDVCBpcyBtYXJrZWQgaW4gVEFCTEUuIgorICAo
c2VxLWNvbnRhaW5zLXAgKHNsb3QtdmFsdWUgdGFibGUgJy1tYXJrZWQtb2JqZWN0cykKKyAgICAg
ICAgICAgICAgICAgIG9iamVjdAorICAgICAgICAgICAgICAgICAgKHZ0YWJsZS1vYmplY3QtZXF1
YWwgdGFibGUpKSkKKworKGRlZnVuIHZ0YWJsZS0tbWFyay1vYmplY3QgKHRhYmxlIG9iamVjdCkK
KyAgKHVubGVzcyAodnRhYmxlLW9iamVjdC1tYXJrZWQtcCB0YWJsZSBvYmplY3QpCisgICAgKHB1
c2ggb2JqZWN0IChzbG90LXZhbHVlIHRhYmxlICctbWFya2VkLW9iamVjdHMpKQorICAgIChsZXQg
KCh2dGFibGUtLWluaGliaXQtb2JqZWN0cy10aWNrIHQpKQorICAgICAgKHZ0YWJsZS11cGRhdGUt
b2JqZWN0IHRhYmxlIG9iamVjdCkpKSkKKworKGRlZnVuIHZ0YWJsZS1tYXJrLW9iamVjdCAob2Jq
ZWN0ICZvcHRpb25hbCBpbmhpYml0LW5leHQtbGluZSkKKyAgIk1hcmsgT0JKRUNUIGluIHRoZSBj
dXJyZW50IHRhYmxlLgorSWYgSU5ISUJJVC1ORVhULUxJTkUgaXMgbm9uLW5pbCwgZG8gbm90IG1v
dmUgcG9pbnQgdG8gdGhlIG5leHQgbGluZS4iCisgICh2dGFibGUtLW1hcmstb2JqZWN0ICh2dGFi
bGUtY3VycmVudC10YWJsZSkgb2JqZWN0KQorICAodW5sZXNzIGluaGliaXQtbmV4dC1saW5lCisg
ICAgKHZ0YWJsZS1uZXh0LWxpbmUgMSkpKQorCisoZGVmdW4gdnRhYmxlLS11bm1hcmstb2JqZWN0
ICh0YWJsZSBvYmplY3QgJm9wdGlvbmFsIGluaGliaXQtdXBkYXRlKQorICAobGV0ICgocmVtb3Zl
ZC1zZXEgKHNlcS1yZW1vdmUgKGxhbWJkYSAoZWx0KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZnVuY2FsbCAodnRhYmxlLW9iamVjdC1lcXVhbCB0YWJsZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWx0IG9iamVjdCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2xvdC12YWx1ZSB0YWJsZSAnLW1hcmtlZC1vYmpl
Y3RzKSkpKQorICAgICh1bmxlc3MgKGxlbmd0aD0gcmVtb3ZlZC1zZXEKKyAgICAgICAgICAgICAg
ICAgICAgIChsZW5ndGggKHNsb3QtdmFsdWUgdGFibGUgJy1tYXJrZWQtb2JqZWN0cykpKQorICAg
ICAgKHNldGYgKHNsb3QtdmFsdWUgdGFibGUgJy1tYXJrZWQtb2JqZWN0cykgcmVtb3ZlZC1zZXEp
CisgICAgICAodW5sZXNzIGluaGliaXQtdXBkYXRlCisgICAgICAgIChsZXQgKCh2dGFibGUtLWlu
aGliaXQtb2JqZWN0cy10aWNrIHQpKQorICAgICAgICAgICh2dGFibGUtdXBkYXRlLW9iamVjdCB0
YWJsZSBvYmplY3QpKSkpKSkKKworKGRlZnVuIHZ0YWJsZS11bm1hcmstb2JqZWN0IChvYmplY3Qg
Jm9wdGlvbmFsIGluaGliaXQtbmV4dC1saW5lKQorICAiVW5tYXJrIE9CSkVDVCBpbiB0aGUgY3Vy
cmVudCB0YWJsZS4KK0lmIElOSElCSVQtTkVYVC1MSU5FIGlzIG5vbi1uaWwsIGRvIG5vdCBtb3Zl
IHBvaW50IHRvIHRoZSBuZXh0IGxpbmUuIgorICAodnRhYmxlLS11bm1hcmstb2JqZWN0ICh2dGFi
bGUtY3VycmVudC10YWJsZSkgb2JqZWN0KQorICAodW5sZXNzIGluaGliaXQtbmV4dC1saW5lCisg
ICAgKHZ0YWJsZS1uZXh0LWxpbmUgMSkpKQorCisoZGVmdW4gdnRhYmxlLXRvZ2dsZS1tYXJrZWQt
b2JqZWN0IChvYmplY3QpCisgICJUb2dnbGUgdGhlIG1hcmsgb24gT0JKRUNUIGluIHRoZSBjdXJy
ZW50IHRhYmxlLiIKKyAgKGxldCAoKHRhYmxlICh2dGFibGUtY3VycmVudC10YWJsZSkpKQorICAg
IChpZiAodnRhYmxlLW9iamVjdC1tYXJrZWQtcCB0YWJsZSBvYmplY3QpCisgICAgICAgICh2dGFi
bGUtLXVubWFyay1vYmplY3QgdGFibGUgb2JqZWN0KQorICAgICAgKHZ0YWJsZS0tbWFyay1vYmpl
Y3QgdGFibGUgb2JqZWN0KSkpKQorCisoZGVmdW4gdnRhYmxlLW1hcmstb2JqZWN0cyAodGFibGUg
cHJlZGljYXRlKQorICAiTWFyayBvYmplY3RzIGluIFRBQkxFIGZvciB3aGljaCBQUkVESUNBVEUs
IHdoZW4gY2FsbGVkLCBpcyBub24tbmlsLgorUFJFRElDQVRFIGlzIGNhbGxlZCB3aXRoIG9uZSBh
cmd1bWVudCwgdGhlIG9iamVjdC4iCisgIChkb2xpc3QgKGxpbmUgKGNhciAodnRhYmxlLS1lbnN1
cmUtY2FjaGUgdGFibGUpKSkKKyAgICAobGV0ICgob2JqZWN0IChjYXIgbGluZSkpKQorICAgICAg
KHdoZW4gKGZ1bmNhbGwgcHJlZGljYXRlIG9iamVjdCkKKyAgICAgICAgKHZ0YWJsZS0tbWFyay1v
YmplY3QgdGFibGUgb2JqZWN0KSkpKSkKKworKGRlZnVuIHZ0YWJsZS1tYXJrLWFsbC1vYmplY3Rz
ICgmcmVzdCBfKQorICAiTWFyayBhbGwgb2JqZWN0cyBpbiB0aGUgY3VycmVudCB0YWJsZS4iCisg
ICh2dGFibGUtbWFyay1vYmplY3RzICh2dGFibGUtY3VycmVudC10YWJsZSkgIydpZGVudGl0eSkp
CisKKyhkZWZ1biB2dGFibGUtdW5tYXJrLW9iamVjdHMgKHRhYmxlIHByZWRpY2F0ZSkKKyAgIlVu
bWFyayBvYmplY3RzIGluIFRBQkxFIGZvciB3aGljaCBQUkVESUNBVEUsIHdoZW4gY2FsbGVkLCBp
cyBub24tbmlsLgorUFJFRElDQVRFIGlzIGNhbGxlZCB3aXRoIG9uZSBhcmd1bWVudCwgdGhlIG9i
amVjdC4iCisgIChkb2xpc3QgKGxpbmUgKGNhciAodnRhYmxlLS1lbnN1cmUtY2FjaGUgdGFibGUp
KSkKKyAgICAobGV0ICgob2JqZWN0IChjYXIgbGluZSkpKQorICAgICAgKHdoZW4gKGZ1bmNhbGwg
cHJlZGljYXRlIG9iamVjdCkKKyAgICAgICAgKHZ0YWJsZS0tdW5tYXJrLW9iamVjdCB0YWJsZSBv
YmplY3QpKSkpKQorCisoZGVmdW4gdnRhYmxlLS11bm1hcmstYWxsLW9iamVjdHMgKHRhYmxlKQor
ICAodnRhYmxlLXVubWFyay1vYmplY3RzIHRhYmxlICMnaWRlbnRpdHkpKQorCisoZGVmdW4gdnRh
YmxlLXVubWFyay1hbGwtb2JqZWN0cyAoJnJlc3QgXykKKyAgIlVubWFyayBhbGwgb2JqZWN0cyBp
biB0aGUgY3VycmVudCB0YWJsZS4iCisgICh2dGFibGUtLXVubWFyay1hbGwtb2JqZWN0cyAodnRh
YmxlLWN1cnJlbnQtdGFibGUpKSkKKworOzsgRXh0cmEgZGF0YSBjb252ZW5pZW5jZSBmdW5jdGlv
bnMuCisKKyhkZWZ1biB2dGFibGUtc2V0LWV4dHJhLWRhdGEgKHRhYmxlIGV4dHJhLWRhdGEpCisg
ICJSZXR1cm4gRVhUUkEtREFUQSBmb3IgVEFCTEUuIgorICAoc2V0ZiAodnRhYmxlLWV4dHJhLWRh
dGEgdGFibGUpIGV4dHJhLWRhdGEpKQorCisoZGVmdW4gdnRhYmxlLWNvbHVtbi1zZXQtZXh0cmEt
ZGF0YSAodGFibGUgY29sdW1uLW9yLWluZGV4IGV4dHJhLWRhdGEpCisgICJTZXQgRVhUUkEtREFU
QSBmb3IgVEFCTEUncyBDT0xVTU4tT1ItSU5ERVguCitJZiBDT0xVTU4tT1ItSU5ERVggaXMgYW4g
aW50ZWdlciwgYW1lbmQgdGhlIGNvbHVtbiBhc3NvY2lhdGVkIHdpdGggdGhhdAoraW50ZWdlciBp
bmRleCwgb3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYSBjb2x1bW4gb2JqZWN0LiIKKyAgKHdoZW4g
KGludGVnZXJwIGNvbHVtbi1vci1pbmRleCkKKyAgICAoc2V0cSBjb2x1bW4tb3ItaW5kZXggKGVs
dCAodnRhYmxlLWNvbHVtbnMgdGFibGUpIGNvbHVtbi1vci1pbmRleCkpKQorICAoc2V0ZiAodnRh
YmxlLWNvbHVtbi1leHRyYS1kYXRhIGNvbHVtbi1vci1pbmRleCkgZXh0cmEtZGF0YSkpCgogKHBy
b3ZpZGUgJ3Z0YWJsZSkKCi0tCjIuNDcuMQo=
--000000000000fadcac063816d1d2--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 19 Jun 2025 20:24:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Jun 19 16:24:30 2025
Received: from localhost ([127.0.0.1]:38559 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uSLoD-0004qa-1I
	for submit <at> debbugs.gnu.org; Thu, 19 Jun 2025 16:24:30 -0400
Received: from lists.gnu.org ([2001:470:142::17]:55838)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uSLo9-0004oz-L8
 for submit <at> debbugs.gnu.org; Thu, 19 Jun 2025 16:24:26 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <shipmints@HIDDEN>)
 id 1uSLo4-0003DL-6T
 for bug-gnu-emacs@HIDDEN; Thu, 19 Jun 2025 16:24:20 -0400
Received: from mail-ua1-x932.google.com ([2607:f8b0:4864:20::932])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <shipmints@HIDDEN>)
 id 1uSLo2-0002l7-S9
 for bug-gnu-emacs@HIDDEN; Thu, 19 Jun 2025 16:24:19 -0400
Received: by mail-ua1-x932.google.com with SMTP id
 a1e0cc1a2514c-87ecdf5f326so676014241.1
 for <bug-gnu-emacs@HIDDEN>; Thu, 19 Jun 2025 13:24:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1750364657; x=1750969457; darn=gnu.org;
 h=to:subject:message-id:date:from:mime-version:from:to:cc:subject
 :date:message-id:reply-to;
 bh=dygwSLtEqUwDKjLcktVtsJknEJ6YNfBRIDQD2e7bXHM=;
 b=CDcpdOoAwSFJVWicQ+yjlOmWvCBgnOe8uDqHrflzL/6wlHsF6KLT5/9SQwk+cAhcQM
 izRTiTxSwH0hy6gPCrMLlDC91F1C6rBUxjQsxSx+l4Um3hJmnqaCE9iQEnCLOVqKz7Qi
 GX0iBMup/zS4o2TJFPXgNCULO8ZbYONFcxIBMdBJy0dnz/3UGhyoO7oNrO63kKEpEnwm
 qMeVvlntOKNHsVXUuMSm49FuOZFXSeXXDxIfbFSCtKfD/gX7V7hegHmgJbiKtZLhjJyG
 mClkRyNKgFTGZ40AoVzqdIY1a5fYgZlkUc1l6PEst4OfqBOc0TgzWvFsWpwm9FIE043T
 fboA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1750364657; x=1750969457;
 h=to:subject:message-id:date:from:mime-version:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=dygwSLtEqUwDKjLcktVtsJknEJ6YNfBRIDQD2e7bXHM=;
 b=Tfqmd1kVxDpU5S/q2niAZS6o01DTUDN6xvz5zAc1Qk8y4tOqm4Fo8RbSLC81PtKKLZ
 BjXc+RVmJYOfpHKxJG3ckLdKVStKNlFwUNSPi+iy3OYgmA8pdTDj0zSIQDByvF6098gX
 ZYDc9pcdNN5ClkIk/F1SRiSaWyZ0JPcUCqWYU6kYZAoxOvW0Hv0PHeoJANa6H9IQeJux
 ZnfLli8ywTAckkKXRhK14objs8XZO6LKz+pr2AaBEDFbszzo3ordGglhhjfgBiyInmpa
 GUD/5issM5B0FWVgH6Og+fdKTeE9hDPlDCeD7LrvGnUE9BwvzMC/ImSkcQgl/iXobPUZ
 i0yA==
X-Gm-Message-State: AOJu0YyCYUh5DaFjFNgQYFduKvBGfvt/fEd8D0q+rLpGdxH0dZW0AMq8
 o5vdg97FwFOH8HlrmWVBUg+gmMZyy6LZHcDzWzrxxZACBM7wQvm5tepGVwY59Ic9Mbqg9uqrC4e
 KWUXhKQKwDlL62f4aTL2e6iyCpST6syZrqA==
X-Gm-Gg: ASbGncum5USl8hMQ1799BxY8ySK99zDbgdewl4WcrBfK/VLWz0dME2/PDRrCbFJR1as
 3m9Tx0kLYtNNQrCC3ZXL2oqGDqP3HtgcXjQcHjR9KtLJTUNrhIdQ6zjgUV/nq6EpSc5M396chPi
 aJTinzNg7SHNnQgjOVo6pRzM93hBx40pk6+foMpekdbMHpkA==
X-Google-Smtp-Source: AGHT+IECVkt1AD/snO4OCmsJNNjbbXBwTuFh6NyO36tPL+8tyyglqgbNe550ZLzMO5YMGoy6V2r5XpUdgtJqHLzJo98=
X-Received: by 2002:a05:6122:511b:10b0:531:188b:c1a0 with SMTP id
 71dfb90a1353d-5319d21f62amr1931544e0c.4.1750364657556; Thu, 19 Jun 2025
 13:24:17 -0700 (PDT)
MIME-Version: 1.0
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Thu, 19 Jun 2025 16:24:06 -0400
X-Gm-Features: Ac12FXyZwQWcAeUc71XMTxicOilB-OtdQnUFVqEcesKGJxVgQIEWjPPKl6l-ymk
Message-ID: <CAN+1HbrRjYDraZQ_4gfZGggUBY-jf4-RmSZ+3VOSSGn-bEm-ow@HIDDEN>
Subject: Various vtable bug fixes and enhancements
To: bug-gnu-emacs@HIDDEN
Content-Type: multipart/alternative; boundary="000000000000a423200637f287ff"
Received-SPF: pass client-ip=2607:f8b0:4864:20::932;
 envelope-from=shipmints@HIDDEN; helo=mail-ua1-x932.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

--000000000000a423200637f287ff
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Bug for a consolidated patch which is in the process of being prepared.

-St=C3=A9phane

--000000000000a423200637f287ff
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:monospac=
e">Bug for a consolidated patch which is in the process of being prepared.<=
/div><div class=3D"gmail_default" style=3D"font-family:monospace"><br></div=
><div class=3D"gmail_default" style=3D"font-family:monospace">-St=C3=A9phan=
e</div></div>

--000000000000a423200637f287ff--




Acknowledgement sent to Stéphane Marks <shipmints@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#78843; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Tue, 24 Jun 2025 11:30:06 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.