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 <<a href=3D"mail= to:arstoffel@HIDDEN">arstoffel@HIDDEN</a>> 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> > On Sat, Jun 21, 2025 at 11:41=E2=80=AFAM St=C3=A9phane Marks <<a hr= ef=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>= > wrote:<br> ><br> >=C2=A0 On Thu, Jun 19, 2025 at 4:25=E2=80=AFPM St=C3=A9phane Marks <= <a href=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN= m</a>><br> >=C2=A0 wrote:<br> ><br> >=C2=A0 Bug for a consolidated patch which is in the process of being pr= epared.<br> ><br> >=C2=A0 Large patch attached.=C2=A0 All the changes, aside from bug fixe= s, should be backward<br> >=C2=A0 compatible.=C2=A0 I've cc'd a few of the major vtable us= ers whose code bases helped<br> >=C2=A0 inform many bug fixes and enhancements.=C2=A0 Some of you have h= elped test and<br> >=C2=A0 provide feedback along the way.=C2=A0 Please try this out (and r= eview the updated<br> >=C2=A0 texinfo documentation if you want to).<br> ><br> >=C2=A0 Feedback here and/or to me directly is fine.<br> ><br> > After double checking comint-mime, it looks like I should add header-t= ext-properties<br> > just as I did row-text-properties so that comint-mime doesn't need= shenanigans.=C2=A0 On<br> > 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'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 "mimecat=C2=A0-t t= ext/html table.html" with old and new vtable, they look the same, so a= t least it'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--
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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.
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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 <<a href=3D"mailto= :sbaugh@HIDDEN">sbaugh@HIDDEN</a>> 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 <<a href=3D"mailto:shipm= ints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>> writes:<br> <br> > On Sun, Jun 22, 2025 at 6:35=E2=80=AFAM Eli Zaretskii <<a href=3D"m= ailto:eliz@HIDDEN" target=3D"_blank">eliz@HIDDEN</a>> wrote:<br> ><br> >=C2=A0 > From: St=C3=A9phane Marks <<a href=3D"mailto:shipmints@g= mail.com" target=3D"_blank">shipmints@HIDDEN</a>><br> >=C2=A0 > Date: Sun, 22 Jun 2025 06:24:39 -0400<br> >=C2=A0 > 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> >=C2=A0 >=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> >=C2=A0 > <br> >=C2=A0 >=C2=A0 > Let's start with the vtable users I looped i= n actually using it.<br> >=C2=A0 > <br> >=C2=A0 >=C2=A0 I don't see how this will help in reviewing the p= atch. It will allow<br> >=C2=A0 >=C2=A0 those folks to try the patch, but that's a separa= te job.=C2=A0 Patch review<br> >=C2=A0 >=C2=A0 has to happen regardless, because it might spot issue= s that no<br> >=C2=A0 >=C2=A0 reasonable amount of testing can.=C2=A0 This is why p= atch review is a<br> >=C2=A0 >=C2=A0 necessary step in our development process.<br> >=C2=A0 > <br> >=C2=A0 >=C2=A0 > I can attach a vtable.el without the patch file = and<br> >=C2=A0 >=C2=A0 > make it easier.<br> >=C2=A0 > <br> >=C2=A0 >=C2=A0 Thanks, but it won't make it easier, no.<br> >=C2=A0 > <br> >=C2=A0 > Of course.=C2=A0 I did say that I would submit a "big-= bang" patch a few weeks ago.=C2=A0 The vtable users who are<br> >=C2=A0 > familiar with the code (having implemented their workaround= s) should have an easier time with the review. <br> ><br> >=C2=A0 That will help, but I would like to review it as well.=C2=A0 It&= #39;s part of<br> >=C2=A0 my job.<br> ><br> >=C2=A0 Your patch lists many changes:<br> ><br> >=C2=A0 > Bug fixes<br> >=C2=A0 > <br> >=C2=A0 > - vtable-update-object works with no visible or changed win= dow<br> >=C2=A0 > width cache key (bug=3D69837)<br> >=C2=A0 > - Improve vtable--limit-string performance for long<br> >=C2=A0 > strings (bug=3D77684)<br> >=C2=A0 > - Keymap changes:<br> >=C2=A0 >=C2=A0 =C2=A0- Keymap spans the whole header column and head= er<br> >=C2=A0 >=C2=A0 =C2=A0dividers (bug=3D74701)<br> >=C2=A0 >=C2=A0 =C2=A0- Missing keymap and 'vtable-column propert= y on body/header<br> >=C2=A0 >=C2=A0 =C2=A0dividers and newlines<br> >=C2=A0 >=C2=A0 =C2=A0- mouse-1 and close table bindings in vtable-he= ader-line-map<br> >=C2=A0 >=C2=A0 =C2=A0keymap<br> >=C2=A0 >=C2=A0 =C2=A0- table-drag-resize-column-map keymap for use i= n body on<br> >=C2=A0 >=C2=A0 =C2=A0dividers (bug=3D74701)<br> >=C2=A0 >=C2=A0 =C2=A0- vtable-header-drag-resize-column-map consolid= ates<br> >=C2=A0 >=C2=A0 =C2=A0vtable-header-line-map and vtable-drag-resize-c= olumn-map<br> >=C2=A0 > - Infer column widths based on formatted elements, not raw<= br> >=C2=A0 > elements<br> >=C2=A0 > - Compute columns works when there are no objects at<br> >=C2=A0 > initialization<br> >=C2=A0 > - text-scale-mode support (header and body elements are pix= el<br> >=C2=A0 > aligned)<br> >=C2=A0 > - Header line handles display-line-numbers-mode<br> >=C2=A0 > - Redraw row colors on lines below an inserted or removed l= ine<br> >=C2=A0 > - Cache is coherent with its objects (rather than by chance= ),<br> >=C2=A0 > invalidated where needed<br> >=C2=A0 > - All cache references now cache warming calls vs. mere cac= he<br> >=C2=A0 > get<br> >=C2=A0 > - Table mutations work when the table buffer is not the cur= rent<br> >=C2=A0 > buffer and if the table isn't current<br> >=C2=A0 > - Resize all tables in a buffer when their window<br> >=C2=A0 > resizes (debounced to accommodate frame size dragging)<br> >=C2=A0 > - Spacer goes after the column name on the header if right<= br> >=C2=A0 > aligned<br> >=C2=A0 > - Column name defaults to right-aligned when its data are<b= r> >=C2=A0 > right-aligned<br> >=C2=A0 > - Improve column placeholder message when no objects and no= <br> >=C2=A0 > columns are specified<br> >=C2=A0 > - Do not display divider after a row's final column<br> >=C2=A0 > - Option to display divider on the header (was always on)<b= r> >=C2=A0 > - Treat divider as a part of its preceding column when drag= ging<br> >=C2=A0 > or sorting<br> >=C2=A0 > - Append table faces to values and column heading names rat= her<br> >=C2=A0 > than override<br> >=C2=A0 > - Truncated string ellipsis text properties match those of = the<br> >=C2=A0 > formatted column entry<br> >=C2=A0 > - Clicking on a header keeps point within table bounds<br> >=C2=A0 > - Use vtable-object-equal and do not assume eq (or via assq= ,<br> >=C2=A0 > memq)<br> >=C2=A0 > - Header line adjust final column name and sort indicator i= n a<br> >=C2=A0 > narrow window works as intended<br> >=C2=A0 > - Set window point where needed<br> >=C2=A0 > - Next/previous line remains in the current column<br> >=C2=A0 > - Signal an error if a table is inserted in more than one b= uffer<br> >=C2=A0 > or more than once in a buffer<br> >=C2=A0 > - vtable--cache-key handle if called when the selected wind= ow<br> >=C2=A0 > does not contain a table buffer<br> >=C2=A0 > - Restore "focus" after vtable-remove-object,<br> >=C2=A0 > vtable-update-object, vtable-redisplay-range, vtable-revert= if<br> >=C2=A0 > table is current<br> >=C2=A0 > - vtable-revert works when reverted table is not the curren= t<br> >=C2=A0 > table<br> >=C2=A0 > - Mutate the correct associated table in<br> >=C2=A0 > vtable-header-line-sort, vtable--drag-resize-column<br> >=C2=A0 > - vtable--recompute-cache considers the table's sort or= der<br> >=C2=A0 > - vtable--alter-column-width respects min-width and max-wid= th<br> >=C2=A0 > - vtable-insert-object if integer location specified, does = not<br> >=C2=A0 > assume the object list and line cache are in the same order= <br> >=C2=A0 > - vtable-insert-object signal an error if integer insert<br= > >=C2=A0 > location specified when the table is sorted<br> >=C2=A0 > - vtable-update-object does not assume objects are in the s= ame<br> >=C2=A0 > order as the cache, which might be sorted<br> >=C2=A0 > - vtable-update-object no longer signal "setcar nil&qu= ot; on failed<br> >=C2=A0 > old-object search<br> >=C2=A0 > - vtable-update-object goto table before updating<br> >=C2=A0 > - vtable-remove-object updates numeric column type as neede= d<br> >=C2=A0 > after removing line<br> >=C2=A0 > - vtable-remove-object signals an error if the specified ob= ject<br> >=C2=A0 > is not found<br> >=C2=A0 > - vtable-remove-object leaves point within table bounds if = table<br> >=C2=A0 > is current (and there are rows)<br> >=C2=A0 > - Hide event-handler interactive functions from M-x display= (not<br> >=C2=A0 > really "commands")<br> >=C2=A0 > - Renamed private vtable-header-line-sort to<br> >=C2=A0 > vtable--header-line-sort<br> >=C2=A0 > - Ensured docstrings for all public functions with added<br= > >=C2=A0 > clarifications where needed<br> >=C2=A0 > <br> >=C2=A0 > Enhancements<br> >=C2=A0 > <br> >=C2=A0 > - Custom column comparator for sorting types other than num= erics<br> >=C2=A0 > and lexical strings<br> >=C2=A0 > <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> >=C2=A0 > - Column-width inference can optionally include column-name= <br> >=C2=A0 > width vs. just data<br> >=C2=A0 > - Table name slot, defaults to "*vtable*", which = is displayed in<br> >=C2=A0 > messages to differentiate vtables<br> >=C2=A0 > - Duplicate object ignore, warning or error, defaults to ig= nore<br> >=C2=A0 > duplicates<br> >=C2=A0 > - Explicitly identify columns as numeric or non-numeric to = avoid<br> >=C2=A0 > the cost of inferring numericalness<br> >=C2=A0 > - Option to sort table after insert or update object<br> >=C2=A0 > - Option to select the newly inserted line if the table is<= br> >=C2=A0 > current<br> >=C2=A0 > - Sort indicator characters specifiable<br> >=C2=A0 > - Sort indicator faces for ascending and descending<br> >=C2=A0 > - Unsort the table, toggling between unsorted and the sort-= by at<br> >=C2=A0 > initialization<br> >=C2=A0 > - Unsort binding in vtable-map<br> >=C2=A0 > - Add tab to vtable-header-line-map to move point into the = table<br> >=C2=A0 > - Functions to compute programmatic row/column colors<br> >=C2=A0 > - Header face independent of body face<br> >=C2=A0 > - Header column alignment independent of from body alignmen= t,<br> >=C2=A0 > defaults to body alignment<br> >=C2=A0 > - Center alignment options<br> >=C2=A0 > - Truncation ellipsis specifiable<br> >=C2=A0 > - Option to make in-buffer header cursor-intangible<br> >=C2=A0 > - Option to make in-buffer "decor" cursor-intangi= ble (spacers,<br> >=C2=A0 > dividers, indicator padding)<br> >=C2=A0 > - Object/line marking/unmarking functions, marked line face= <br> >=C2=A0 > - Next/previous line functions that remain in table body bo= unds<br> >=C2=A0 > - Multi-table commands 'vtable-goto-next-table',<br= > >=C2=A0 > 'vtable-goto-previous-table'<br> >=C2=A0 > - Optionally apply row text properties; e.g., for mouse-fac= e,<br> >=C2=A0 > cursor-face<br> >=C2=A0 > - Optional "navigation" keymap adding several use= ful bindings<br> >=C2=A0 > including "q" to close the table (a la special-mo= de)<br> >=C2=A0 > - Display a message when interactive column resizing min-wi= dth<br> >=C2=A0 > and max-width limits reached<br> >=C2=A0 > - Optionally pulse an updated, inserted, removed line,<br> >=C2=A0 > defaulting to 'pulse-momentary-highlight-one-line'<= br> >=C2=A0 > - Go to table beginning/end of body convenience functions<b= r> >=C2=A0 > - Table and object line-number convenience functions<br> >=C2=A0 > - Table close-action which defaults to 'quit-window'= ;<br> >=C2=A0 > - Extra-data slots on both the table and columns for<br> >=C2=A0 > programmatic reference<br> ><br> >=C2=A0 It is nigh impossible to review such a large number of changes<b= r> >=C2=A0 together: how am I supposed to find out which design and<br> >=C2=A0 implementation decisions did you take, when faced with such a la= rge<br> >=C2=A0 number of separate changes?=C2=A0 Without that, the review is no= t useful,<br> >=C2=A0 even impossible.<br> ><br> >=C2=A0 So please subdivide the patch into smaller, preferably independe= nt<br> >=C2=A0 parts, to make the patch review possible, let alone practical.<b= r> ><br> > Let's see what the vtable user feedback is first and then I'll= think<br> > 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'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'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'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'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--
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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.
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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!
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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 <<a href=3D"mailto= :eliz@HIDDEN">eliz@HIDDEN</a>> 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'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"> > +A vtable can be inserted into a single buffer only.=C2=A0 An error is= <br> > +signaled if a vtable is attempted to be inserted more than once into = a<br> > +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"> >=C2=A0 @table @code<br> > +@item :name<br> > +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"> > -In the latter case, if @code{:columns} is non-@code{nil} and there= 9;s<br> > -more elements in the sequence than there is in @code{:columns}, only<= br> > -the @code{:columns} first elements are displayed.<br> > +In the latter case, if @code{:columns} is non-@code{nil} and there ar= e<br> > +more elements in the sequence than there are in @code{:columns}, the<= br> > +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"> > +@item :object-equal<br> > +This function tests for the equality of two table objects.=C2=A0 It d= efaults<br> > +to @code{eq}.<br> > +<br> > +@defun object-equal object1 object2<br> > +Return non-nil if @var{object1} and @var{object2} are equal, and non-= nil<br> > +otherwise.<br> > +@end defun<br> <br> I don'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'= ;s original format for other "callback" 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"> > +@item :duplicate-objects<br> > +A vtable assumes all objects inserted into the table are unique among= <br> > +themselves.=C2=A0 If the symbol @code{'allow}, the default, allow= duplicate<br> > +objects (the first object found during table operations has primacy),= if<br> <br> First, please say "If the value is the symbol...", not just "= ;If the<br> symbol".=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"> > +@code{'ignore}, silently ignore duplicates leaving the existing o= bject<br> > +intact, if @code{'ignore-warn} do the same thing as @code{'ig= nore} and<br> > +produce a warning message, or if @code{'error}, signal an error i= f a<br> > +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's |@code{ignore}, silently ignore duplicates leaving th= e<br> =C2=A0 existing object intact; if it'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= "> > +This is a list where each element is either a string (the column name= ),<br> > +a plist of keyword/values (to make a @code{vtable-column} object), or= a<br> > +@code{vtable-column} object (created by calling the function<br> > +@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"> > +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> "nil" 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"> > +@item comparator<br> > +This function will be called to compare column values.=C2=A0 Use this= when<br> > +your objects contain data that needs non-numeric or string collation,= <br> > +for example, dates.=C2=A0 Another case would be where you want the eq= uivalent<br> > +of @code{sort-fold-case}.<br> > +<br> > +@defun comparator value1 value2<br> > +This function is called with two values to compare.=C2=A0 The return = value<br> > +should follow the semantics of @code{<} or, @code{string-lessp}.<b= r> >=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"> > +@item :sort-indicator<br> > +This is a list of two cons cells that specify the sort ascending and<= br> > +descending characters that are shown on the table header to indicate = a<br> > +sorted column.=C2=A0 The first character is the fancier ``graphical&#= 39;'<br> > +character, and the second a text-only character.=C2=A0 If the first c= haracter<br> > +cannot be displayed on the selected frame, the table will show the<br= > > +text-only character.=C2=A0 The default is<br> > +@code{vtable-sort-indicator-default}.=C2=A0 For example:<br> > +<br> > +@lisp<br> > +'((?=E2=96=BC ?v) (?=E2=96=B2 ?^)) ; This is the default.<br> > +'((?=E2=AC=87 ?v) (?=E2=AC=86 ?^)) ; Alternative arrows.<br> > +@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"> > +@table @kbd<br> > +@findex vtable-next-line<br> > +@item n<br> > +@item <down><br> <br> Our conventions are to UPCASE arrow key names, so please use DOWN, UP,<br> etc.<br> <br> Also, since "DOWN" is a label of the key, you should use @key{DOW= N},<br> not <DOWN>.<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"> > +@findex vtable-goto-next-table<br> > +@item <forward-paragraph><br> <br> What's "<forward-paragraph>"?=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 "<remap> <forward-paragraph>" =C2=A0#'vtable-= goto-next-table<br>=C2=A0 "<remap> <backward-paragraph>&qu= ot; #'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"> > --- a/lisp/emacs-lisp/vtable.el<br> > +++ b/lisp/emacs-lisp/vtable.el<br> > @@ -30,77 +30,220 @@<br> > <br> >=C2=A0 (defface vtable<br> >=C2=A0 =C2=A0 '((t :inherit variable-pitch))<br> > -=C2=A0 "Face used (by default) for vtables."<br> > +=C2=A0 "Face used (by default) for vtable bodies."<br> >=C2=A0 =C2=A0 :version "29.1"<br> >=C2=A0 =C2=A0 :group 'faces)<br> > <br> > +(defface vtable-header<br> > +=C2=A0 '((t :inherit (header-line vtable)))<br> > +=C2=A0 "Face used (by default) for vtable headers."<br> > +=C2=A0 :version "31.1"<br> > +=C2=A0 :group 'faces)<br> > +<br> > +(defface vtable-marked<br> > +=C2=A0 '((t :inherit region))<br> > +=C2=A0 "Face used (by default) for marked vtable objects."<= br> > +=C2=A0 :version "31.1"<br> > +=C2=A0 :group 'faces)<br> > +<br> > +(defface vtable-sort-indicator-ascend<br> > +=C2=A0 '((t :inherit vtable-header))<br> > +=C2=A0 "Face used (by default) for vtable ascend sort indicator.= "<br> > +=C2=A0 :version "31.1"<br> > +=C2=A0 :group 'faces)<br> > +<br> > +(defface vtable-sort-indicator-descend<br> > +=C2=A0 '((t :inherit vtable-header))<br> > +=C2=A0 "Face used (by default) for vtable descend sort indicator= ."<br> > +=C2=A0 :version "31.1"<br> > +=C2=A0 :group 'faces)<br> <br> Shouldn'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'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--
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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.
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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 <<a href=3D"mailto= :eliz@HIDDEN">eliz@HIDDEN</a>> 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">> From: St=C3=A9phane Marks <<a href=3D"mailto:shipmints@g= mail.com" target=3D"_blank">shipmints@HIDDEN</a>><br> > Date: Sun, 22 Jun 2025 06:24:39 -0400<br> > 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> >=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> > <br> >=C2=A0 > Let's start with the vtable users I looped in actually = using it.<br> > <br> >=C2=A0 I don't see how this will help in reviewing the patch. It wi= ll allow<br> >=C2=A0 those folks to try the patch, but that's a separate job.=C2= =A0 Patch review<br> >=C2=A0 has to happen regardless, because it might spot issues that no<b= r> >=C2=A0 reasonable amount of testing can.=C2=A0 This is why patch review= is a<br> >=C2=A0 necessary step in our development process.<br> > <br> >=C2=A0 > I can attach a vtable.el without the patch file and<br> >=C2=A0 > make it easier.<br> > <br> >=C2=A0 Thanks, but it won't make it easier, no.<br> > <br> > Of course.=C2=A0 I did say that I would submit a "big-bang" = patch a few weeks ago.=C2=A0 The vtable users who are<br> > 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's part = of<br> my job.<br> <br> Your patch lists many changes:<br> <br> > Bug fixes<br> > <br> > - vtable-update-object works with no visible or changed window<br> > width cache key (bug=3D69837)<br> > - Improve vtable--limit-string performance for long<br> > strings (bug=3D77684)<br> > - Keymap changes:<br> >=C2=A0 =C2=A0- Keymap spans the whole header column and header<br> >=C2=A0 =C2=A0dividers (bug=3D74701)<br> >=C2=A0 =C2=A0- Missing keymap and 'vtable-column property on body/h= eader<br> >=C2=A0 =C2=A0dividers and newlines<br> >=C2=A0 =C2=A0- mouse-1 and close table bindings in vtable-header-line-m= ap<br> >=C2=A0 =C2=A0keymap<br> >=C2=A0 =C2=A0- table-drag-resize-column-map keymap for use in body on<b= r> >=C2=A0 =C2=A0dividers (bug=3D74701)<br> >=C2=A0 =C2=A0- vtable-header-drag-resize-column-map consolidates<br> >=C2=A0 =C2=A0vtable-header-line-map and vtable-drag-resize-column-map<b= r> > - Infer column widths based on formatted elements, not raw<br> > elements<br> > - Compute columns works when there are no objects at<br> > initialization<br> > - text-scale-mode support (header and body elements are pixel<br> > aligned)<br> > - Header line handles display-line-numbers-mode<br> > - Redraw row colors on lines below an inserted or removed line<br> > - Cache is coherent with its objects (rather than by chance),<br> > invalidated where needed<br> > - All cache references now cache warming calls vs. mere cache<br> > get<br> > - Table mutations work when the table buffer is not the current<br> > buffer and if the table isn't current<br> > - Resize all tables in a buffer when their window<br> > resizes (debounced to accommodate frame size dragging)<br> > - Spacer goes after the column name on the header if right<br> > aligned<br> > - Column name defaults to right-aligned when its data are<br> > right-aligned<br> > - Improve column placeholder message when no objects and no<br> > columns are specified<br> > - Do not display divider after a row's final column<br> > - Option to display divider on the header (was always on)<br> > - Treat divider as a part of its preceding column when dragging<br> > or sorting<br> > - Append table faces to values and column heading names rather<br> > than override<br> > - Truncated string ellipsis text properties match those of the<br> > formatted column entry<br> > - Clicking on a header keeps point within table bounds<br> > - Use vtable-object-equal and do not assume eq (or via assq,<br> > memq)<br> > - Header line adjust final column name and sort indicator in a<br> > narrow window works as intended<br> > - Set window point where needed<br> > - Next/previous line remains in the current column<br> > - Signal an error if a table is inserted in more than one buffer<br> > or more than once in a buffer<br> > - vtable--cache-key handle if called when the selected window<br> > does not contain a table buffer<br> > - Restore "focus" after vtable-remove-object,<br> > vtable-update-object, vtable-redisplay-range, vtable-revert if<br> > table is current<br> > - vtable-revert works when reverted table is not the current<br> > table<br> > - Mutate the correct associated table in<br> > vtable-header-line-sort, vtable--drag-resize-column<br> > - vtable--recompute-cache considers the table's sort order<br> > - vtable--alter-column-width respects min-width and max-width<br> > - vtable-insert-object if integer location specified, does not<br> > assume the object list and line cache are in the same order<br> > - vtable-insert-object signal an error if integer insert<br> > location specified when the table is sorted<br> > - vtable-update-object does not assume objects are in the same<br> > order as the cache, which might be sorted<br> > - vtable-update-object no longer signal "setcar nil" on fail= ed<br> > old-object search<br> > - vtable-update-object goto table before updating<br> > - vtable-remove-object updates numeric column type as needed<br> > after removing line<br> > - vtable-remove-object signals an error if the specified object<br> > is not found<br> > - vtable-remove-object leaves point within table bounds if table<br> > is current (and there are rows)<br> > - Hide event-handler interactive functions from M-x display (not<br> > really "commands")<br> > - Renamed private vtable-header-line-sort to<br> > vtable--header-line-sort<br> > - Ensured docstrings for all public functions with added<br> > clarifications where needed<br> > <br> > Enhancements<br> > <br> > - Custom column comparator for sorting types other than numerics<br> > and lexical strings<br> > <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> > - Column-width inference can optionally include column-name<br> > width vs. just data<br> > - Table name slot, defaults to "*vtable*", which is displaye= d in<br> > messages to differentiate vtables<br> > - Duplicate object ignore, warning or error, defaults to ignore<br> > duplicates<br> > - Explicitly identify columns as numeric or non-numeric to avoid<br> > the cost of inferring numericalness<br> > - Option to sort table after insert or update object<br> > - Option to select the newly inserted line if the table is<br> > current<br> > - Sort indicator characters specifiable<br> > - Sort indicator faces for ascending and descending<br> > - Unsort the table, toggling between unsorted and the sort-by at<br> > initialization<br> > - Unsort binding in vtable-map<br> > - Add tab to vtable-header-line-map to move point into the table<br> > - Functions to compute programmatic row/column colors<br> > - Header face independent of body face<br> > - Header column alignment independent of from body alignment,<br> > defaults to body alignment<br> > - Center alignment options<br> > - Truncation ellipsis specifiable<br> > - Option to make in-buffer header cursor-intangible<br> > - Option to make in-buffer "decor" cursor-intangible (spacer= s,<br> > dividers, indicator padding)<br> > - Object/line marking/unmarking functions, marked line face<br> > - Next/previous line functions that remain in table body bounds<br> > - Multi-table commands 'vtable-goto-next-table',<br> > 'vtable-goto-previous-table'<br> > - Optionally apply row text properties; e.g., for mouse-face,<br> > cursor-face<br> > - Optional "navigation" keymap adding several useful binding= s<br> > including "q" to close the table (a la special-mode)<br> > - Display a message when interactive column resizing min-width<br> > and max-width limits reached<br> > - Optionally pulse an updated, inserted, removed line,<br> > defaulting to 'pulse-momentary-highlight-one-line'<br> > - Go to table beginning/end of body convenience functions<br> > - Table and object line-number convenience functions<br> > - Table close-action which defaults to 'quit-window'<br> > - Extra-data slots on both the table and columns for<br> > 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's see what the vtable user feedback is first and then I'll= think about it.=C2=A0 It will be a trade-off between your pain and mine.</= div></div></div> --000000000000735e7a063826b454--
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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 <<a href=3D"mailto= :eliz@HIDDEN">eliz@HIDDEN</a>> 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">> From: St=C3=A9phane Marks <<a href=3D"mailto:shipmints@g= mail.com" target=3D"_blank">shipmints@HIDDEN</a>><br> > Date: Sun, 22 Jun 2025 05:45:59 -0400<br> > 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> >=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> > <br> > On Sun, Jun 22, 2025 at 5:42=E2=80=AFAM Eli Zaretskii <<a href=3D"m= ailto:eliz@HIDDEN" target=3D"_blank">eliz@HIDDEN</a>> wrote:<br> > <br> >=C2=A0 > From: St=C3=A9phane Marks <<a href=3D"mailto:shipmints@g= mail.com" target=3D"_blank">shipmints@HIDDEN</a>><br> >=C2=A0 > Date: Sun, 22 Jun 2025 05:12:46 -0400<br> >=C2=A0 > 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> >=C2=A0 >=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> >=C2=A0 > <br> >=C2=A0 > On Sun, Jun 22, 2025 at 4:59=E2=80=AFAM Eli Zaretskii <<= a href=3D"mailto:eliz@HIDDEN" target=3D"_blank">eliz@HIDDEN</a>> wrote= :<br> >=C2=A0 > <br> >=C2=A0 >=C2=A0 Is it really not feasible to have separate patches fo= r each bugfix and<br> >=C2=A0 >=C2=A0 each enhancement (or coherent set of enhancements)?= =C2=A0 What if we decide<br> >=C2=A0 >=C2=A0 to install just some of these changes -- you'd ne= ed to update the<br> >=C2=A0 >=C2=A0 entire large patch, instead of dropping a relatively = small one and<br> >=C2=A0 >=C2=A0 leaving the others intact.<br> >=C2=A0 > <br> >=C2=A0 > 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> >=C2=A0 wouldn't<br> >=C2=A0 > really, in the end, produce a better vtable.<br> > <br> >=C2=A0 Please also consider the inherent difficulties in reviewing such= a<br> >=C2=A0 large (4K lines!) patch.<br> > <br> > Let's start with the vtable users I looped in actually using it.<b= r> <br> I don't see how this will help in reviewing the patch. It will allow<br= > those folks to try the patch, but that'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> > I can attach a vtable.el without the patch file and<br> > make it easier.<br> <br> Thanks, but it won'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 "big-bang" 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've been using = it every day and I enjoy the revised one much more.</div></div></div> --0000000000005d489f06382681d5--
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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.
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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 <<a href=3D"mailto= :eliz@HIDDEN">eliz@HIDDEN</a>> 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">> From: St=C3=A9phane Marks <<a href=3D"mailto:shipmints@g= mail.com" target=3D"_blank">shipmints@HIDDEN</a>><br> > Date: Sun, 22 Jun 2025 05:12:46 -0400<br> > 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> >=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> > <br> > On Sun, Jun 22, 2025 at 4:59=E2=80=AFAM Eli Zaretskii <<a href=3D"m= ailto:eliz@HIDDEN" target=3D"_blank">eliz@HIDDEN</a>> wrote:<br> > <br> >=C2=A0 Is it really not feasible to have separate patches for each bugf= ix and<br> >=C2=A0 each enhancement (or coherent set of enhancements)?=C2=A0 What i= f we decide<br> >=C2=A0 to install just some of these changes -- you'd need to updat= e the<br> >=C2=A0 entire large patch, instead of dropping a relatively small one a= nd<br> >=C2=A0 leaving the others intact.<br> > <br> > I hope we elect to adopt them all.=C2=A0 It would be much more work to= tease them all out piecemeal and wouldn't<br> > 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'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"> > WRT quoting symbols, there are examples in the texinfo doc collection = that suggest the convention is not<br> > enforced:<br> <br> They are all bugs that need to be fixed.=C2=A0 Patches welcome.=C2=A0 "= ;Not<br> enforced" 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= 9;t follow ELisp formatting conventions which I found confusing.</div></div= ></div> --00000000000010f7bb063825f74b--
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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.
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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 <<a href=3D"mailto= :eliz@HIDDEN">eliz@HIDDEN</a>> 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">> Cc: Adam Porter <<a href=3D"mailto:adam@HIDDEN" t= arget=3D"_blank">adam@HIDDEN</a>>, Spencer Baugh <<a href=3D"m= ailto:sbaugh@HIDDEN" target=3D"_blank">sbaugh@HIDDEN</a>>= ;,<br> >=C2=A0 Lars Ingebrigtsen <<a href=3D"mailto:larsi@HIDDEN" target= =3D"_blank">larsi@HIDDEN</a>>, Augusto Stoffel <<a href=3D"mailto:a= rstoffel@HIDDEN" target=3D"_blank">arstoffel@HIDDEN</a>>,<br> >=C2=A0 Kristoffer Balintona <<a href=3D"mailto:krisbalintona@HIDDEN= om" target=3D"_blank">krisbalintona@HIDDEN</a>><br> > From: St=C3=A9phane Marks <<a href=3D"mailto:shipmints@HIDDEN" t= arget=3D"_blank">shipmints@HIDDEN</a>><br> > Date: Sat, 21 Jun 2025 11:41:50 -0400<br> > <br> > On Thu, Jun 19, 2025 at 4:25=E2=80=AFPM St=C3=A9phane Marks <<a hre= f=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>&= gt; wrote:<br> > <br> >=C2=A0 Bug for a consolidated patch which is in the process of being pr= epared.<br> > <br> > Large patch attached.=C2=A0 All the changes, aside from bug fixes, sho= uld be backward compatible.=C2=A0 I've cc'd a few<br> > of the major vtable users whose code bases helped inform many bug fixe= s and enhancements.=C2=A0 Some of you<br> > have helped test and provide feedback along the way.=C2=A0 Please try = this out (and review the updated texinfo<br> > 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'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'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'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{'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{'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{'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{'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"> > +A vtable can be inserted into a single buffer only.=C2=A0 An error is= <br> > +signaled if a vtable is attempted to be inserted more than once into = a<br> > +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> >=C2=A0 @table @code<br> > +@item :name<br> > +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> > -In the latter case, if @code{:columns} is non-@code{nil} and there= 9;s<br> > -more elements in the sequence than there is in @code{:columns}, only<= br> > -the @code{:columns} first elements are displayed.<br> > +In the latter case, if @code{:columns} is non-@code{nil} and there ar= e<br> > +more elements in the sequence than there are in @code{:columns}, the<= br> > +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> > +@item :object-equal<br> > +This function tests for the equality of two table objects.=C2=A0 It d= efaults<br> > +to @code{eq}.<br> > +<br> > +@defun object-equal object1 object2<br> > +Return non-nil if @var{object1} and @var{object2} are equal, and non-= nil<br> > +otherwise.<br> > +@end defun<br> <br> I don't understand the purpose of this @defun here.=C2=A0 What did you<= br> intend to say by placing it here?<br> <br> > +@item :duplicate-objects<br> > +A vtable assumes all objects inserted into the table are unique among= <br> > +themselves.=C2=A0 If the symbol @code{'allow}, the default, allow= duplicate<br> > +objects (the first object found during table operations has primacy),= if<br> <br> First, please say "If the value is the symbol...", not just "= ;If the<br> symbol".=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> > +@code{'ignore}, silently ignore duplicates leaving the existing o= bject<br> > +intact, if @code{'ignore-warn} do the same thing as @code{'ig= nore} and<br> > +produce a warning message, or if @code{'error}, signal an error i= f a<br> > +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's |@code{ignore}, silently ignore duplicates leaving th= e<br> =C2=A0 existing object intact; if it's @code{ignore-warn}, do the same.= ..<br> <br> > +This is a list where each element is either a string (the column name= ),<br> > +a plist of keyword/values (to make a @code{vtable-column} object), or= a<br> > +@code{vtable-column} object (created by calling the function<br> > +@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> > +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> "nil" should have the @code markup.<br> <br> > +@item comparator<br> > +This function will be called to compare column values.=C2=A0 Use this= when<br> > +your objects contain data that needs non-numeric or string collation,= <br> > +for example, dates.=C2=A0 Another case would be where you want the eq= uivalent<br> > +of @code{sort-fold-case}.<br> > +<br> > +@defun comparator value1 value2<br> > +This function is called with two values to compare.=C2=A0 The return = value<br> > +should follow the semantics of @code{<} or, @code{string-lessp}.<b= r> >=C2=A0 @end defun<br> <br> Same question here about this @defun, as above about object-equal.<br> <br> > +@item :sort-indicator<br> > +This is a list of two cons cells that specify the sort ascending and<= br> > +descending characters that are shown on the table header to indicate = a<br> > +sorted column.=C2=A0 The first character is the fancier ``graphical&#= 39;'<br> > +character, and the second a text-only character.=C2=A0 If the first c= haracter<br> > +cannot be displayed on the selected frame, the table will show the<br= > > +text-only character.=C2=A0 The default is<br> > +@code{vtable-sort-indicator-default}.=C2=A0 For example:<br> > +<br> > +@lisp<br> > +'((?=E2=96=BC ?v) (?=E2=96=B2 ?^)) ; This is the default.<br> > +'((?=E2=AC=87 ?v) (?=E2=AC=86 ?^)) ; Alternative arrows.<br> > +@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> > +@table @kbd<br> > +@findex vtable-next-line<br> > +@item n<br> > +@item <down><br> <br> Our conventions are to UPCASE arrow key names, so please use DOWN, UP,<br> etc.<br> <br> Also, since "DOWN" is a label of the key, you should use @key{DOW= N},<br> not <DOWN>.<br> <br> > +@findex vtable-goto-next-table<br> > +@item <forward-paragraph><br> <br> What's "<forward-paragraph>"?=C2=A0 Are there keyboards= with a key that has<br> such a label?<br> <br> > --- a/lisp/emacs-lisp/vtable.el<br> > +++ b/lisp/emacs-lisp/vtable.el<br> > @@ -30,77 +30,220 @@<br> > <br> >=C2=A0 (defface vtable<br> >=C2=A0 =C2=A0 '((t :inherit variable-pitch))<br> > -=C2=A0 "Face used (by default) for vtables."<br> > +=C2=A0 "Face used (by default) for vtable bodies."<br> >=C2=A0 =C2=A0 :version "29.1"<br> >=C2=A0 =C2=A0 :group 'faces)<br> > <br> > +(defface vtable-header<br> > +=C2=A0 '((t :inherit (header-line vtable)))<br> > +=C2=A0 "Face used (by default) for vtable headers."<br> > +=C2=A0 :version "31.1"<br> > +=C2=A0 :group 'faces)<br> > +<br> > +(defface vtable-marked<br> > +=C2=A0 '((t :inherit region))<br> > +=C2=A0 "Face used (by default) for marked vtable objects."<= br> > +=C2=A0 :version "31.1"<br> > +=C2=A0 :group 'faces)<br> > +<br> > +(defface vtable-sort-indicator-ascend<br> > +=C2=A0 '((t :inherit vtable-header))<br> > +=C2=A0 "Face used (by default) for vtable ascend sort indicator.= "<br> > +=C2=A0 :version "31.1"<br> > +=C2=A0 :group 'faces)<br> > +<br> > +(defface vtable-sort-indicator-descend<br> > +=C2=A0 '((t :inherit vtable-header))<br> > +=C2=A0 "Face used (by default) for vtable descend sort indicator= ."<br> > +=C2=A0 :version "31.1"<br> > +=C2=A0 :group 'faces)<br> <br> Shouldn'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--
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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?
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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 <<a href=3D= "mailto:shipmints@HIDDEN">shipmints@HIDDEN</a>> 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 <<a= href=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN<= /a>> 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've cc'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'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--
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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 <<a href=3D"= mailto:shipmints@HIDDEN">shipmints@HIDDEN</a>> 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= 've cc'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--
bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.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--
Stéphane Marks <shipmints@HIDDEN>
:bug-gnu-emacs@HIDDEN
.
Full text available.bug-gnu-emacs@HIDDEN
:bug#78843
; Package emacs
.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.