Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7nC5-005hHP-2c for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 04:28:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7nC3-00Ekzv-0p for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 04:28:39 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7nC2-00Ekzl-1l for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 04:28:39 +0000 Received: from mail-qv1-xf32.google.com ([2607:f8b0:4864:20::f32]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7nBx-0000000252x-0mwl for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 04:28:34 +0000 Received: by mail-qv1-xf32.google.com with SMTP id 6a1803df08f44-8a110e06b4cso27085446d6.1 for ; Tue, 31 Mar 2026 21:28:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775017712; cv=none; d=google.com; s=arc-20240605; b=gVbGa6TUulRZ/8hfrG5GrlSY4LWIXkQXDDdN9aFY1fUz82y/69I/zwBynJtSxzzNWR +gxkyvpOLiTVyjl78oTwOUHV3/lQmSZknkKth497sBd7vGpcR4HkItVeRxlXaxPdVUmq zLZOft1kPGQl4GCWgjcZUNOXY8Q/gY6Si/wdOlv6HgwMzMRD0JUwH/ZKU9gVqepfMyDv NRoQ/KehCyNf1oCGL7SoiDgFy4CSXPQT/g2Dq1SFb221tL9wG/zpfmfv2h1/vCNQMKeF ZQGlNJNyJo7gwszev+q7hISuCWGqOaCDAL7FQuu415pBx6FjOqW5WQtFdq4xlKUGDj8H 3OrA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=EetE7bwY3uCMAy6peMabf2xWit3uaPaRJVGaGH0PNOg=; fh=V7cJ9deFGkUinFO+6Lm9H6T620/5X3DyultW4HH9jqA=; b=Y1bcIkVHo/c9NuMbLrnRsIVGtCc0tqB7uA813XgEq3XnAYWWfNj+ZDsJbRRS+qDr+H RpxmA00iAHNM0s+odt7W8i9Nfi/MYvKjx/fjiyGfIJf1fzyKPvUADY5br6eZOA5P77iA G/0qynep8ga5ORv0Qx7CnjOP1m3wK40YoWAUiUlUldwdfp4SFiLeAznpmkZ9sGFSQqaQ yGG60TMHLS30zdNjyd5UUG2ieIk1S/2uP+vn5KT/xlwyWXPvGoIEWxBLLbUmogB5Bfnk SVDdRRg/9RC63iVO8/IxU6sOS1Eyv/bsvKcCx+Djbja7IaRHYxj/msZCKDwSgiPlC2Yj P1VQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1775017712; x=1775622512; darn=lists.postgresql.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=EetE7bwY3uCMAy6peMabf2xWit3uaPaRJVGaGH0PNOg=; b=fy2z865bBn22LWrfFUsPQWr1y1tocd9/iopARU6/ZnqU+ouYsYF/oS7w6cJgFoKNdW Jtht4FRO0m1xOo8vtPdwCGexlucXP+qgkPVRnG0lohDNIvc3Meegvlea+Dr2IEh9K9z9 3ao4TSzQmODLRTyzQDxi4x9Syiyc1ktxm5d+pQmswWheMv0mf7/44zTdA8Tcm49jmzu/ 1QtnB91ldsECq6J6Dw01aNS2cRplAAovyhDjRK5ZAzvyG4vR4CSmS7evlHKX1ClLjO4A 93CIMDbbMMZuAlFhDGZw6lgd/BMDJbXQsF8HO0UAu/s2XfZc1G3Up6yffgj43J5qpYY2 kcRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775017712; x=1775622512; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=EetE7bwY3uCMAy6peMabf2xWit3uaPaRJVGaGH0PNOg=; b=G5HdurBSxi0HqBxDIKD6JqZTTa/nJg6bkKo6LSQjsogbaMjxS2/TITc2MUncAT3mYp eE0eY3VHHlGzw0Rj+I7kHxi5CyAiBRFNA3grVKqraHI0chEHBaeHEKK8rdB9Yu7Le09y ZQ4pzT9I3qhYbVD04uzus85kT4vtp8QpeknNlQDM8LQZrgcEBOCydTC2MdXJ441YRHD8 lMH3JozAzTuk+wjr+zFV8/4g4jnUrJqI74Etk6qWtUIc6jMUVzTOOxpOReC5WbX/JCmo XQrpjtaCOkKTPEH9I3luIe1B2xqwpThs53yHgwFHK07b+10PT27rTTNCKDXy9f0rN/Io UfAg== X-Forwarded-Encrypted: i=1; AJvYcCXkZOLNJ9jnWgankSNj3IbC9+cXq1VEdgr1OJGLSJavPuJ3rv2rBUsRUUMNzqorNHckNDTNPrGNlOztYnu1@lists.postgresql.org X-Gm-Message-State: AOJu0Yxi8udr7Enly8bv4jNVcpLSWuKPqwvyCJWd7FiQeYIANU4eTQ/n GD6k+g5V6noLs3loeVBQ/ylzV43ApChoTDuMsoKIAGIo3mjhlZSGy3WzAfbYhh3gXMdXsiwb2iH y594+5if91yRWi3g2qvIrpKg9JErJdpTDr3xOG0Wn X-Gm-Gg: ATEYQzyAZeDqWGGrzG6qvtqH8+3VO3h60O3V4QDtDZk/mn/yuxlCjSdZP7NlITBhiFB vlmHsQgJ+VKOsrnkzvSLXBWqPO8FtQU6eTxLzcRGAlHL6IWPnw/glHa5irWpGKkDSU9LxSJzGum LmRoauHHIofbMPp3RMltCGSCPy8orQU7C/El2gcR3ZWmDCOL0r6OrWDM0C0HNqkBhNSVAPbB9J+ Y6oW6B+aNUeAjmLLHFnl8U8yLEYS8QUlt+6pJw/701WK+sbjwo1NlT4GJDmS90JpFK0AaRUFLZn 27iYdyw+95+Hn0xmwYm9 X-Received: by 2002:a05:6214:5545:b0:89a:2fe7:91c9 with SMTP id 6a1803df08f44-8a437e18ddemr32516246d6.1.1775017711995; Tue, 31 Mar 2026 21:28:31 -0700 (PDT) MIME-Version: 1.0 References: <0238206d-81c9-4bce-acb4-127fbc4a96ac@dunslane.net> <202603301544.utwvuj534m36@alvherre.pgsql> In-Reply-To: From: Suraj Kharage Date: Wed, 1 Apr 2026 09:58:20 +0530 X-Gm-Features: AQROBzBQVu1YbSNKw70RoaxQB_3FQA3_eE0RXP7vdzGd3NzkMzXDMiMI8z_wcLI Message-ID: Subject: Re: [PATCH] Add support for INSERT ... SET syntax To: Ajay Pal Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , Andrew Dunstan , "David G. Johnston" , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000322f68064e5e84fe" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000322f68064e5e84fe Content-Type: multipart/alternative; boundary="000000000000322f66064e5e84fc" --000000000000322f66064e5e84fc Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks, Ajay for reporting this. The issue is that the INSERT...SET grammar was incorrectly using set_clause_list which includes the UPDATE-style multi-column assignment syntax (col1, col2) =3D expr. This creates MultiAssignRef nodes that are only valid in UPDATE contexts, not INSERT. Fix this by changing the grammer rule. Please find attached v2 patch with the above fix. I have also added support for different column sets in multi-row inserts. Thanks, Andrew for the offline discussion and help on this. -- Thanks & Regards, Suraj kharage, enterprisedb.com On Tue, Mar 31, 2026 at 11:44=E2=80=AFAM Ajay Pal wr= ote: > Hello all, > > I am reporting a server crash encountered while testing the patch > provided by Suraj. The crash is consistently triggered by the query > attached below. > > postgres=3D# INSERT INTO emp_test SET (empno,ename)=3D(SELECT 1,'aa'); > > server closed the connection unexpectedly > This probably means the server terminated abnormally > before or while processing the request. > The connection to the server was lost. Attempting reset: Failed. > > Thanks > Ajay > > On Mon, Mar 30, 2026 at 9:19=E2=80=AFPM =C3=81lvaro Herrera > wrote: > > > > On 2026-Mar-30, Andrew Dunstan wrote: > > > > > Well, Suraj has kinda beaten me to it, but he didn't invent this > syntax. > > > Oracle did < > https://oracle-base.com/articles/23/non-positional-insert-into-set-and-in= sert-into-by-name-clauses-23 > > > > > and I believe there is a proposal to add it to the standard. (Unlike > > > Suraj's, my WIP patch also supports the INSERT BY NAME variant.) > > > > Hmm, I don't see any WIP patch from you -- are you talking about this > > patch from July 2019? > > > https://postgr.es/m/CA+A-St+NntBh2EGu3a0xbVxJFzaeEOn=3DVn_V84OuhM59_HKarQ= @mail.gmail.com > > > > Funnily enough, we have an even older proposal from 2016, > > https://postgr.es/m/709e06c0-59c9-ccec-d216-21e38cb5ed61@joh.to > > > > It seems this is quite a popular missing feature, as Marko's patch was > > also asked about in February 2019: > > https://postgr.es/m/e58dd487-7ed4-3f95-c63c-24200ed768be@berkvens.net > > > > -- > > =C3=81lvaro Herrera Breisgau, Deutschland =E2=80=94 > https://www.EnterpriseDB.com/ > > > > > --000000000000322f66064e5e84fc Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thanks, Ajay for reporting this.

The issue is = that the INSERT...SET grammar was incorrectly using set_clause_list which i= ncludes the UPDATE-style
multi-column assignment syntax (col1, col2) =3D= expr. This creates MultiAssignRef nodes that are only valid in UPDATE cont= exts, not INSERT.
Fix this by changing the grammer rule.

Please f= ind attached v2 patch with=C2=A0the above fix. I have also added support fo= r different column sets in multi-row inserts.

Thanks, Andrew for the= offline discussion and help on this.
<= div dir=3D"ltr">
--

Thanks & Regards,=C2=A0
S= uraj kharage,=C2=A0

=


On Tue, Ma= r 31, 2026 at 11:44=E2=80=AFAM Ajay Pal <ajay.pal.k@gmail.com> wrote:
Hello all,

I am reporting a server crash encountered while testing the patch
provided by Suraj. The crash is consistently triggered by the query
attached below.

postgres=3D# INSERT INTO emp_test SET (empno,ename)=3D(SELECT 1,'aa'= ;);

server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

Thanks
Ajay

On Mon, Mar 30, 2026 at 9:19=E2=80=AFPM =C3=81lvaro Herrera <alvherre@kurilemu.de>= wrote:
>
> On 2026-Mar-30, Andrew Dunstan wrote:
>
> > Well, Suraj has kinda beaten me to it, but he didn't invent t= his syntax.
> > Oracle did <https://oracle-base.com/articles/23/non-positiona= l-insert-into-set-and-insert-into-by-name-clauses-23>
> > and I believe there is a proposal to add it to the standard. (Unl= ike
> > Suraj's, my WIP patch also supports the INSERT BY NAME varian= t.)
>
> Hmm, I don't see any WIP patch from you -- are you talking about t= his
> patch from July 2019?
> https:/= /postgr.es/m/CA+A-St+NntBh2EGu3a0xbVxJFzaeEOn=3DVn_V84OuhM59_HKarQ@mail.gma= il.com
>
> Funnily enough, we have an even older proposal from 2016,
> https://postgr.es/m/709e06c0-59c= 9-ccec-d216-21e38cb5ed61@joh.to
>
> It seems this is quite a popular missing feature, as Marko's patch= was
> also asked about in February 2019:
> https://postgr.es/m/e58dd4= 87-7ed4-3f95-c63c-24200ed768be@berkvens.net
>
> --
> =C3=81lvaro Herrera=C2=A0 =C2=A0 =C2=A0 =C2=A0 Breisgau, Deutschland= =C2=A0 =E2=80=94=C2=A0 https://www.EnterpriseDB.com/
>
>
--000000000000322f66064e5e84fc-- --000000000000322f68064e5e84fe Content-Type: application/octet-stream; name="v2-0001-Add-support-for-INSERT-.-SET-syntax.patch" Content-Disposition: attachment; filename="v2-0001-Add-support-for-INSERT-.-SET-syntax.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnfjnnck0 RnJvbSBkYWUwYzhhMjk5OTU3M2YxYzBjYjRiYzA3N2M5NWU2NDE4OTJkNmQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdXJhaiBLaGFyYWdlIDxzdXJhai5raGFyYWdlQGVudGVycHJp c2VkYi5jb20+CkRhdGU6IFdlZCwgMjUgTWFyIDIwMjYgMTY6NDY6MTQgKzA1MzAKU3ViamVjdDog W1BBVENIIHYyXSBBZGQgc3VwcG9ydCBmb3IgSU5TRVJUIC4uLiBTRVQgc3ludGF4CgpUaGlzIGNv bW1pdCBhZGRzIHN1cHBvcnQgZm9yIElOU0VSVCAuLi4gU0VUIHN5bnRheCwgd2hpY2ggYWxsb3dz CnNwZWNpZnlpbmcgY29sdW1uIHZhbHVlcyB1c2luZyBuYW1lZCBhc3NpZ25tZW50cyBpbnN0ZWFk IG9mCnJlcXVpcmluZyBhIHNlcGFyYXRlIGNvbHVtbiBsaXN0IGFuZCBWQUxVRVMgY2xhdXNlLgoK U3ludGF4OgogICAgSU5TRVJUIElOVE8gdGFibGVfbmFtZSBTRVQgY29sdW1uMT12YWx1ZTEsIGNv bHVtbjI9dmFsdWUyLCAuLi47CgpUaGlzIHN5bnRheCBwcm92aWRlcyBhIG1vcmUgY29udmVuaWVu dCBhbmQgcmVhZGFibGUgYWx0ZXJuYXRpdmUgZm9yCnNpbmdsZS1yb3cgaW5zZXJ0cywgcGFydGlj dWxhcmx5IHdoZW4gb25seSBzcGVjaWZpYyBjb2x1bW5zIG5lZWQgdmFsdWVzLgpDb2x1bW5zIG5v dCBtZW50aW9uZWQgaW4gdGhlIFNFVCBjbGF1c2UgcmVjZWl2ZSB0aGVpciBkZWZhdWx0IHZhbHVl cyBvcgpOVUxMLCBjb25zaXN0ZW50IHdpdGggc3RhbmRhcmQgSU5TRVJUIGJlaGF2aW9yLgoKRmVh dHVyZXMgc3VwcG9ydGVkOgotIEJhc2ljIHN5bnRheDogSU5TRVJUIElOVE8gdCBTRVQgY29sPXZh bCwgLi4uCi0gREVGQVVMVCBrZXl3b3JkOiBTRVQgY29sPURFRkFVTFQKLSBOVUxMIHZhbHVlczog U0VUIGNvbD1OVUxMCi0gRXhwcmVzc2lvbnMgYW5kIGZ1bmN0aW9uczogU0VUIGNvbD1leHByCi0g U3VicXVlcmllczogU0VUIGNvbD0oU0VMRUNUIC4uLikKLSBSRVRVUk5JTkcgY2xhdXNlOiBTRVQg Li4uIFJFVFVSTklORyAqCi0gT04gQ09ORkxJQ1Q6IFNFVCAuLi4gT04gQ09ORkxJQ1QgRE8gVVBE QVRFL05PVEhJTkcKLSBPVkVSUklESU5HIFNZU1RFTSBWQUxVRTogT1ZFUlJJRElORyBTWVNURU0g VkFMVUUgU0VUIC4uLgotIE11bHRpLXJvdyBzeW50YXg6IFNFVCAoY29sMT12YWwxLCBjb2wyPXZh bDIpLCAoY29sMT12YWwzLCBjb2wyPXZhbDQpCi0gU3VwcG9ydCBmb3IgZGlmZmVyZW50IGNvbHVt biBzZXRzIGluIG11bHRpLXJvdyBpbnNlcnRzCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9pbnNlcnQu c2dtbCAgICAgICAgIHwgIDQ1ICsrKy0KIHNyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jICAg ICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5jICAgICAgICAgfCAxNjAg KysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAgICB8ICA2 NCArKysrKysKIHNyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYyAgICAgICB8ICAgNiArLQog c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvaW5zZXJ0Lm91dCB8IDI5OCArKysrKysrKysrKysrKysrKysrKysrKysr KysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2luc2VydC5zcWwgICAgICB8IDIwNyArKysrKysrKysr KysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDc3OSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvaW5zZXJ0LnNnbWwgYi9kb2Mvc3Jj L3NnbWwvcmVmL2luc2VydC5zZ21sCmluZGV4IDEyMWE5ZWRjYjk5Li5mYWY3ZTE3YmZhNCAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9pbnNlcnQuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv cmVmL2luc2VydC5zZ21sCkBAIC0yNCw3ICsyNCw4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlv bgogWyBXSVRIIFsgUkVDVVJTSVZFIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndp dGhfcXVlcnk8L3JlcGxhY2VhYmxlPiBbLCAuLi5dIF0KIElOU0VSVCBJTlRPIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyBBUyA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+YWxpYXM8L3JlcGxhY2VhYmxlPiBdIFsgKCA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi5d ICkgXQogICAgIFsgT1ZFUlJJRElORyB7IFNZU1RFTSB8IFVTRVIgfSBWQUxVRSBdCi0gICAgeyBE RUZBVUxUIFZBTFVFUyB8IFZBTFVFUyAoIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiB8IERFRkFVTFQgfSBbLCAuLi5dICkgWywgLi4uXSB8 IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5xdWVyeTwvcmVwbGFjZWFibGU+IH0KKyAg ICB7IERFRkFVTFQgVkFMVUVTIHwgVkFMVUVTICggeyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IHwgREVGQVVMVCB9IFssIC4uLl0gKSBbLCAu Li5dIHwgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnF1ZXJ5PC9yZXBsYWNlYWJsZT4g fAorICAgICAgU0VUICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1l PC9yZXBsYWNlYWJsZT4gPSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNz aW9uPC9yZXBsYWNlYWJsZT4gfCBERUZBVUxUIH0gWywgLi4uXSApLCBbLCAuLi5dIH0KICAgICBb IE9OIENPTkZMSUNUIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbmZsaWN0X3Rh cmdldDwvcmVwbGFjZWFibGU+IF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbmZs aWN0X2FjdGlvbjwvcmVwbGFjZWFibGU+IF0KICAgICBbIFJFVFVSTklORyBbIFdJVEggKCB7IE9M RCB8IE5FVyB9IEFTIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vdXRwdXRfYWxpYXM8 L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXQogICAgICAgICAgICAgICAgIHsgKiB8IDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vdXRwdXRfZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IFsg WyBBUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vdXRwdXRfbmFtZTwvcmVwbGFj ZWFibGU+IF0gfSBbLCAuLi5dIF0KQEAgLTY1LDYgKzY2LDE5IEBAIElOU0VSVCBJTlRPIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyBBUyA8 cmVwbGFjCiAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGV4cGxpY2l0IG9yIGltcGxpY2l0IGNvbHVt biBsaXN0IGxlZnQtdG8tcmlnaHQuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIEFzIGFuIGFs dGVybmF0aXZlIHRvIHRoZSA8bGl0ZXJhbD5WQUxVRVM8L2xpdGVyYWw+IGNsYXVzZSwgeW91IGNh biB1c2UgdGhlCisgICA8bGl0ZXJhbD5TRVQ8L2xpdGVyYWw+IGNsYXVzZSB0byBzcGVjaWZ5IGNv bHVtbiB2YWx1ZXMgdXNpbmcgbmFtZWQKKyAgIGFzc2lnbm1lbnRzLiBUaGUgPGxpdGVyYWw+U0VU PC9saXRlcmFsPiBjbGF1c2UgaGFzIHRoZSBmb3JtCisgICA8bGl0ZXJhbD5TRVQgPHJlcGxhY2Vh YmxlPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gPSA8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwv cmVwbGFjZWFibGU+PC9saXRlcmFsPiwKKyAgIHdpdGggbXVsdGlwbGUgY29sdW1uIGFzc2lnbm1l bnRzIHNlcGFyYXRlZCBieSBjb21tYXMuIFRoaXMgc3ludGF4IGlzCisgICBwYXJ0aWN1bGFybHkg Y29udmVuaWVudCB3aGVuIGluc2VydGluZyBhIHNpbmdsZSByb3cgd2l0aCB2YWx1ZXMgZm9yCisg ICBzcGVjaWZpYyBjb2x1bW5zLCBhcyBpdCBlbGltaW5hdGVzIHRoZSBuZWVkIHRvIHNwZWNpZnkg YSBzZXBhcmF0ZQorICAgY29sdW1uIGxpc3QuIFdoZW4gdXNpbmcgPGxpdGVyYWw+U0VUPC9saXRl cmFsPiwgY29sdW1ucyBub3QgbWVudGlvbmVkCisgICB3aWxsIHJlY2VpdmUgdGhlaXIgZGVmYXVs dCB2YWx1ZXMgb3IgbnVsbC4gVGhlIDxsaXRlcmFsPlNFVDwvbGl0ZXJhbD4KKyAgIHN5bnRheCBj YW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbiBleHBsaWNpdCBjb2x1bW4gbGlzdC4KKyAgPC9wYXJh PgorCiAgIDxwYXJhPgogICAgRWFjaCBjb2x1bW4gbm90IHByZXNlbnQgaW4gdGhlIGV4cGxpY2l0 IG9yIGltcGxpY2l0IGNvbHVtbiBsaXN0IHdpbGwgYmUKICAgIGZpbGxlZCB3aXRoIGEgZGVmYXVs dCB2YWx1ZSwgZWl0aGVyIGl0cyBkZWNsYXJlZCBkZWZhdWx0IHZhbHVlCkBAIC03MzYsNiArNzUw LDM1IEBAIElOU0VSVCBJTlRPIGZpbG1zIChjb2RlLCB0aXRsZSwgZGlkLCBkYXRlX3Byb2QsIGtp bmQpIFZBTFVFUwogPC9wcm9ncmFtbGlzdGluZz4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAg VG8gaW5zZXJ0IGEgc2luZ2xlIHJvdyB1c2luZyB0aGUgPGxpdGVyYWw+U0VUPC9saXRlcmFsPiBz eW50YXg6CisKKzxwcm9ncmFtbGlzdGluZz4KK0lOU0VSVCBJTlRPIGZpbG1zIFNFVCBjb2RlPSdV QTUwMicsIHRpdGxlPSdCYW5hbmFzJywgZGlkPTEwNSwKKyAgICBkYXRlX3Byb2Q9JzE5NzEtMDct MTMnLCBraW5kPSdDb21lZHknLCBsZW49JzgyIG1pbnV0ZXMnOworPC9wcm9ncmFtbGlzdGluZz4K KyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhpcyBleGFtcGxlIHVzZXMgdGhlIDxsaXRlcmFs PlNFVDwvbGl0ZXJhbD4gc3ludGF4IHdpdGgKKyAgIDxsaXRlcmFsPkRFRkFVTFQ8L2xpdGVyYWw+ IGZvciBzb21lIGNvbHVtbnM6CisKKzxwcm9ncmFtbGlzdGluZz4KK0lOU0VSVCBJTlRPIGZpbG1z IFNFVCBjb2RlPSdUXzYwMScsIHRpdGxlPSdZb2ppbWJvJywgZGlkPTEwNiwKKyAgICBkYXRlX3By b2Q9REVGQVVMVCwga2luZD0nRHJhbWEnOworPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9wYXJhPgor CisgIDxwYXJhPgorICAgVGhlIDxsaXRlcmFsPlNFVDwvbGl0ZXJhbD4gc3ludGF4IGNhbiBiZSB1 c2VkIHdpdGggZXhwcmVzc2lvbnMKKyAgIGFuZCBmdW5jdGlvbnM6CisKKzxwcm9ncmFtbGlzdGlu Zz4KK0lOU0VSVCBJTlRPIGZpbG1zIFNFVCBjb2RlPSdIRzEyMCcsIHRpdGxlPXVwcGVyKCd0aGUg ZGlubmVyIGdhbWUnKSwKKyAgICBkaWQ9MTQwLCBkYXRlX3Byb2Q9Y3VycmVudF9kYXRlLCBraW5k PSdDb21lZHknOworPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogICAg VGhpcyBleGFtcGxlIGluc2VydHMgc29tZSByb3dzIGludG8gdGFibGUKICAgIDxzdHJ1Y3RuYW1l PmZpbG1zPC9zdHJ1Y3RuYW1lPiBmcm9tIGEgdGFibGUgPHN0cnVjdG5hbWU+dG1wX2ZpbG1zPC9z dHJ1Y3RuYW1lPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgYi9z cmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCA2YTg1MDM0OWNmNy4uOWRlOTc3OGU3 NzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCisrKyBiL3NyYy9i YWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCkBAIC00MjkzLDYgKzQyOTMsOCBAQCByYXdfZXhwcmVz c2lvbl90cmVlX3dhbGtlcl9pbXBsKE5vZGUgKm5vZGUsCiAJCQkJCXJldHVybiB0cnVlOwogCQkJ CWlmIChXQUxLKHN0bXQtPnNlbGVjdFN0bXQpKQogCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlpZiAo V0FMSyhzdG10LT5zZXRDbGF1c2VMaXN0KSkKKwkJCQkJcmV0dXJuIHRydWU7CiAJCQkJaWYgKFdB TEsoc3RtdC0+b25Db25mbGljdENsYXVzZSkpCiAJCQkJCXJldHVybiB0cnVlOwogCQkJCWlmIChX QUxLKHN0bXQtPnJldHVybmluZ0NsYXVzZSkpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJz ZXIvYW5hbHl6ZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYwppbmRleCBhZDMxZGVl MjY4Ni4uMmM0MjY4ZjI2NjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXpl LmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYwpAQCAtNzAsNiArNzAsOCBAQCBw b3N0X3BhcnNlX2FuYWx5emVfaG9va190eXBlIHBvc3RfcGFyc2VfYW5hbHl6ZV9ob29rID0gTlVM TDsKIHN0YXRpYyBRdWVyeSAqdHJhbnNmb3JtT3B0aW9uYWxTZWxlY3RJbnRvKFBhcnNlU3RhdGUg KnBzdGF0ZSwgTm9kZSAqcGFyc2VUcmVlKTsKIHN0YXRpYyBRdWVyeSAqdHJhbnNmb3JtRGVsZXRl U3RtdChQYXJzZVN0YXRlICpwc3RhdGUsIERlbGV0ZVN0bXQgKnN0bXQpOwogc3RhdGljIFF1ZXJ5 ICp0cmFuc2Zvcm1JbnNlcnRTdG10KFBhcnNlU3RhdGUgKnBzdGF0ZSwgSW5zZXJ0U3RtdCAqc3Rt dCk7CitzdGF0aWMgdm9pZCB0cmFuc2Zvcm1JbnNlcnRTZXRDbGF1c2UoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBMaXN0ICpzZXRDbGF1c2VMaXN0LAorCQkJCQkJCQkJIExpc3QgKipjb2xzX3AsIExpc3Qg Kip2YWx1ZXNMaXN0c19wKTsKIHN0YXRpYyBPbkNvbmZsaWN0RXhwciAqdHJhbnNmb3JtT25Db25m bGljdENsYXVzZShQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCQkJCQkgT25Db25mbGljdENs YXVzZSAqb25Db25mbGljdENsYXVzZSk7CiBzdGF0aWMgaW50CWNvdW50X3Jvd2V4cHJfY29sdW1u cyhQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKmV4cHIpOwpAQCAtNjI5LDYgKzYzMSwxNDQgQEAg dHJhbnNmb3JtRGVsZXRlU3RtdChQYXJzZVN0YXRlICpwc3RhdGUsIERlbGV0ZVN0bXQgKnN0bXQp CiAJcmV0dXJuIHFyeTsKIH0KIAorLyoKKyAqIHRyYW5zZm9ybUluc2VydFNldENsYXVzZSAtCisg KgkgIFRyYW5zZm9ybSBJTlNFUlQgLi4uIFNFVCBjbGF1c2UgaW50byBjb2x1bW4gbGlzdCBhbmQg VkFMVUVTIGxpc3RzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBib3RoIHNpbmdsZS1y b3cgYW5kIG11bHRpLXJvdyBTRVQgc3ludGF4OgorICogICBTaW5nbGUgcm93OiBJTlNFUlQgSU5U TyB0IFNFVCBjMT0xLCBjMj0yCisgKiAgIE11bHRpLXJvdzogIElOU0VSVCBJTlRPIHQgU0VUIChj MT0xLCBjMj0yKSwgKGMxPTMsIGMyPTQpCisgKgorICogVGhlIGZ1bmN0aW9uIHN1cHBvcnRzIGRp ZmZlcmVudCBjb2x1bW4gc2V0cyBhY3Jvc3Mgcm93cy4gRm9yIGV4YW1wbGU6CisgKiAgIElOU0VS VCBJTlRPIHQgU0VUIChjMT0xLCBjMj0yLCBjMz0zKSwgKGMxPTQsIGMyPTUpCisgKiBUaGlzIHdp bGwgZ2VuZXJhdGU6CisgKiAgIC0gQ29sdW1uIGxpc3Q6IGMxLCBjMiwgYzMKKyAqICAgLSBWYWx1 ZXM6ICgxLCAyLCAzKSwgKDQsIDUsIERFRkFVTFQpCisgKgorICogTWlzc2luZyBjb2x1bW5zIGlu IGFueSByb3cgYXJlIGZpbGxlZCB3aXRoIERFRkFVTFQuCisgKi8KK3N0YXRpYyB2b2lkCit0cmFu c2Zvcm1JbnNlcnRTZXRDbGF1c2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpzZXRDbGF1c2VM aXN0LAorCQkJCQkJIExpc3QgKipjb2xzX3AsIExpc3QgKip2YWx1ZXNMaXN0c19wKQoreworCUxp c3QJICAgKmFsbF9jb2xzID0gTklMOwkJLyogTGlzdCBvZiBhbGwgdW5pcXVlIGNvbHVtbiBuYW1l cyAqLworCUxpc3QJICAgKnZhbHVlc0xpc3RzID0gTklMOworCUxpc3RDZWxsICAgKm91dGVyX2xj OworCUxpc3RDZWxsICAgKmxjOworCisJLyoKKwkgKiBGaXJzdCBwYXNzOiBjb2xsZWN0IGFsbCB1 bmlxdWUgY29sdW1uIG5hbWVzIGZyb20gYWxsIHJvd3MuCisJICogV2UgbmVlZCB0byBzY2FuIGFs bCByb3dzIGZpcnN0IHRvIGRldGVybWluZSB0aGUgY29tcGxldGUgc2V0IG9mIGNvbHVtbnMuCisJ ICogQWxzbyBjaGVjayBmb3IgZHVwbGljYXRlIGNvbHVtbnMgd2l0aGluIGVhY2ggcm93LgorCSAq LworCWZvcmVhY2gob3V0ZXJfbGMsIHNldENsYXVzZUxpc3QpCisJeworCQlMaXN0CSAgICpzZXRf Y2xhdXNlID0gKExpc3QgKikgbGZpcnN0KG91dGVyX2xjKTsKKwkJTGlzdAkgICAqcm93X2NvbHMg PSBOSUw7CQkvKiBDb2x1bW5zIHNlZW4gaW4gdGhpcyByb3cgKi8KKwkJTGlzdENlbGwgICAqc2V0 X2xjOworCisJCWZvcmVhY2goc2V0X2xjLCBzZXRfY2xhdXNlKQorCQl7CisJCQlSZXNUYXJnZXQg ICpyZXMgPSAoUmVzVGFyZ2V0ICopIGxmaXJzdChzZXRfbGMpOworCQkJYm9vbAkJZm91bmQgPSBm YWxzZTsKKwkJCUxpc3RDZWxsICAgKmNvbF9sYzsKKworCQkJLyogQ2hlY2sgZm9yIGR1cGxpY2F0 ZSBjb2x1bW4gaW4gdGhlIHNhbWUgcm93ICovCisJCQlmb3JlYWNoKGNvbF9sYywgcm93X2NvbHMp CisJCQl7CisJCQkJUmVzVGFyZ2V0ICAqcm93X2NvbCA9IChSZXNUYXJnZXQgKikgbGZpcnN0KGNv bF9sYyk7CisKKwkJCQlpZiAoc3RyY21wKHJvd19jb2wtPm5hbWUsIHJlcy0+bmFtZSkgPT0gMCkK KwkJCQl7CisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLAorCQkJCQkJCSBlcnJtc2coImNvbHVtbiBcIiVzXCIgc3BlY2lmaWVkIG1vcmUg dGhhbiBvbmNlIiwKKwkJCQkJCQkJCXJlcy0+bmFtZSksCisJCQkJCQkJIHBhcnNlcl9lcnJwb3Np dGlvbihwc3RhdGUsIHJlcy0+bG9jYXRpb24pKSk7CisJCQkJfQorCQkJfQorCisJCQkvKiBBZGQg dG8gdGhpcyByb3cncyBjb2x1bW4gbGlzdCAqLworCQkJcm93X2NvbHMgPSBsYXBwZW5kKHJvd19j b2xzLCByZXMpOworCisJCQkvKiBDaGVjayBpZiB3ZSd2ZSBhbHJlYWR5IHNlZW4gdGhpcyBjb2x1 bW4gbmFtZSBhY3Jvc3MgYWxsIHJvd3MgKi8KKwkJCWZvcmVhY2goY29sX2xjLCBhbGxfY29scykK KwkJCXsKKwkJCQlSZXNUYXJnZXQgICpleGlzdGluZyA9IChSZXNUYXJnZXQgKikgbGZpcnN0KGNv bF9sYyk7CisKKwkJCQlpZiAoc3RyY21wKGV4aXN0aW5nLT5uYW1lLCByZXMtPm5hbWUpID09IDAp CisJCQkJeworCQkJCQlmb3VuZCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwor CQkJLyogSWYgdGhpcyBpcyBhIG5ldyBjb2x1bW4gYWNyb3NzIGFsbCByb3dzLCBhZGQgaXQgdG8g b3VyIGxpc3QgKi8KKwkJCWlmICghZm91bmQpCisJCQl7CisJCQkJUmVzVGFyZ2V0ICAqY29sID0g bWFrZU5vZGUoUmVzVGFyZ2V0KTsKKworCQkJCWNvbC0+bmFtZSA9IHJlcy0+bmFtZTsKKwkJCQlj b2wtPmluZGlyZWN0aW9uID0gcmVzLT5pbmRpcmVjdGlvbjsKKwkJCQljb2wtPnZhbCA9IE5VTEw7 CisJCQkJY29sLT5sb2NhdGlvbiA9IHJlcy0+bG9jYXRpb247CisJCQkJYWxsX2NvbHMgPSBsYXBw ZW5kKGFsbF9jb2xzLCBjb2wpOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBTZWNvbmQgcGFz czogZm9yIGVhY2ggcm93LCBjcmVhdGUgYSB2YWx1ZXMgbGlzdCBtYXRjaGluZyB0aGUgY29sdW1u IG9yZGVyCisJICogZnJvbSBhbGxfY29scy4gVXNlIERFRkFVTFQgZm9yIGFueSBjb2x1bW5zIG5v dCBwcmVzZW50IGluIHRoaXMgcm93LgorCSAqLworCWZvcmVhY2gob3V0ZXJfbGMsIHNldENsYXVz ZUxpc3QpCisJeworCQlMaXN0CSAgICpzZXRfY2xhdXNlID0gKExpc3QgKikgbGZpcnN0KG91dGVy X2xjKTsKKwkJTGlzdAkgICAqdmFscyA9IE5JTDsKKworCQkvKiBGb3IgZWFjaCBjb2x1bW4gaW4g dGhlIGNvbXBsZXRlIGNvbHVtbiBsaXN0ICovCisJCWZvcmVhY2gobGMsIGFsbF9jb2xzKQorCQl7 CisJCQlSZXNUYXJnZXQgICpjb2wgPSAoUmVzVGFyZ2V0ICopIGxmaXJzdChsYyk7CisJCQlib29s CQlmb3VuZCA9IGZhbHNlOworCQkJTGlzdENlbGwgICAqc2V0X2xjOworCisJCQkvKiBTZWFyY2gg Zm9yIHRoaXMgY29sdW1uIGluIHRoZSBjdXJyZW50IHJvdyAqLworCQkJZm9yZWFjaChzZXRfbGMs IHNldF9jbGF1c2UpCisJCQl7CisJCQkJUmVzVGFyZ2V0ICAqcmVzID0gKFJlc1RhcmdldCAqKSBs Zmlyc3Qoc2V0X2xjKTsKKworCQkJCWlmIChzdHJjbXAoY29sLT5uYW1lLCByZXMtPm5hbWUpID09 IDApCisJCQkJeworCQkJCQkvKiBGb3VuZCBpdCAtIHVzZSB0aGUgcHJvdmlkZWQgdmFsdWUgKi8K KwkJCQkJdmFscyA9IGxhcHBlbmQodmFscywgcmVzLT52YWwpOworCQkJCQlmb3VuZCA9IHRydWU7 CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyoKKwkJCSAqIElmIHRoZSBjb2x1bW4g aXMgbm90IHByZXNlbnQgaW4gdGhpcyByb3csIHVzZSBERUZBVUxULgorCQkJICogQ3JlYXRlIGEg U2V0VG9EZWZhdWx0IG5vZGUgdG8gcmVwcmVzZW50IHRoZSBERUZBVUxUIGtleXdvcmQuCisJCQkg Ki8KKwkJCWlmICghZm91bmQpCisJCQl7CisJCQkJU2V0VG9EZWZhdWx0ICpkZWYgPSBtYWtlTm9k ZShTZXRUb0RlZmF1bHQpOworCisJCQkJZGVmLT5sb2NhdGlvbiA9IC0xOworCQkJCXZhbHMgPSBs YXBwZW5kKHZhbHMsIGRlZik7CisJCQl9CisJCX0KKworCQkvKiBBZGQgdGhpcyByb3cncyB2YWx1 ZXMgdG8gdGhlIHZhbHVlc0xpc3RzICovCisJCXZhbHVlc0xpc3RzID0gbGFwcGVuZCh2YWx1ZXNM aXN0cywgdmFscyk7CisJfQorCisJLyogUmV0dXJuIHRoZSByZXN1bHRzICovCisJKmNvbHNfcCA9 IGFsbF9jb2xzOworCSp2YWx1ZXNMaXN0c19wID0gdmFsdWVzTGlzdHM7Cit9CisKIC8qCiAgKiB0 cmFuc2Zvcm1JbnNlcnRTdG10IC0KICAqCSAgdHJhbnNmb3JtIGFuIEluc2VydCBTdGF0ZW1lbnQK QEAgLTY2OCw2ICs4MDgsMjYgQEAgdHJhbnNmb3JtSW5zZXJ0U3RtdChQYXJzZVN0YXRlICpwc3Rh dGUsIEluc2VydFN0bXQgKnN0bXQpCiAKIAlxcnktPm92ZXJyaWRlID0gc3RtdC0+b3ZlcnJpZGU7 CiAKKwkvKgorCSAqIElmIHdlIGhhdmUgU0VUIGNsYXVzZSAoSU5TRVJUIC4uLiBTRVQgY29sPXZh bCwgLi4uKSwgdHJhbnNmb3JtIGl0CisJICogaW50byBjb2x1bW4gbGlzdCBhbmQgVkFMVUVTIGxp c3QgYmVmb3JlIGZ1cnRoZXIgcHJvY2Vzc2luZy4KKwkgKi8KKwlpZiAoc3RtdC0+c2V0Q2xhdXNl TGlzdCAhPSBOSUwpCisJeworCQlMaXN0CSAgICpjb2xzID0gTklMOworCQlMaXN0CSAgICp2YWx1 ZXNMaXN0cyA9IE5JTDsKKworCQkvKiBUcmFuc2Zvcm0gU0VUIGNsYXVzZSBpbnRvIGNvbHVtbnMg YW5kIHZhbHVlcyAqLworCQl0cmFuc2Zvcm1JbnNlcnRTZXRDbGF1c2UocHN0YXRlLCBzdG10LT5z ZXRDbGF1c2VMaXN0LCAmY29scywgJnZhbHVlc0xpc3RzKTsKKworCQkvKiBDcmVhdGUgYSBTZWxl Y3RTdG10IHdpdGggbXVsdGlwbGUgVkFMVUVTIHJvd3MgKi8KKwkJc2VsZWN0U3RtdCA9IG1ha2VO b2RlKFNlbGVjdFN0bXQpOworCQlzZWxlY3RTdG10LT52YWx1ZXNMaXN0cyA9IHZhbHVlc0xpc3Rz OworCQlzdG10LT5zZWxlY3RTdG10ID0gKE5vZGUgKikgc2VsZWN0U3RtdDsKKwkJc3RtdC0+Y29s cyA9IGNvbHM7CisJCXN0bXQtPnNldENsYXVzZUxpc3QgPSBOSUw7CS8qIGNsZWFyIGl0IHNvIHdl IGRvbid0IHByb2Nlc3MgYWdhaW4gKi8KKwl9CisKIAkvKgogCSAqIE9OIENPTkZMSUNUIERPIFVQ REFURSBhbmQgT04gQ09ORkxJQ1QgRE8gU0VMRUNUIEZPUiBVUERBVEUvU0hBUkUKIAkgKiByZXF1 aXJlIFVQREFURSBwZXJtaXNzaW9uIG9uIHRoZSB0YXJnZXQgcmVsYXRpb24uCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpp bmRleCA5ZTg2NTk2ZGMwNS4uOGJmMjY5NmJiODQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bh cnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtNTYxLDYgKzU2 MSw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1l LCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAldHlwZSA8cmFuZ2U+CXJlbGF0aW9uX2V4 cHJfb3B0X2FsaWFzCiAldHlwZSA8bm9kZT4JdGFibGVzYW1wbGVfY2xhdXNlIG9wdF9yZXBlYXRh YmxlX2NsYXVzZQogJXR5cGUgPHRhcmdldD4JdGFyZ2V0X2VsIHNldF90YXJnZXQgaW5zZXJ0X2Nv bHVtbl9pdGVtCisldHlwZSA8bGlzdD4JaW5zZXJ0X3NldF9jbGF1c2UgaW5zZXJ0X3NldF9jbGF1 c2VfbGlzdAorJXR5cGUgPGxpc3Q+CWluc2VydF9zZXRfY2xhdXNlX2dyb3VwIGluc2VydF9zZXRf Y2xhdXNlX2dyb3VwX2xpc3QKIAogJXR5cGUgPHN0cj4JCWdlbmVyaWNfb3B0aW9uX25hbWUKICV0 eXBlIDxub2RlPglnZW5lcmljX29wdGlvbl9hcmcKQEAgLTEzMDUwLDYgKzEzMDUyLDM2IEBAIGlu c2VydF9yZXN0OgogCQkJCQkkJC0+Y29scyA9IE5JTDsKIAkJCQkJJCQtPnNlbGVjdFN0bXQgPSBO VUxMOwogCQkJCX0KKwkJCXwgT1ZFUlJJRElORyBvdmVycmlkZV9raW5kIFZBTFVFX1AgU0VUIGlu c2VydF9zZXRfY2xhdXNlX2xpc3QKKwkJCQl7CisJCQkJCSQkID0gbWFrZU5vZGUoSW5zZXJ0U3Rt dCk7CisJCQkJCSQkLT5jb2xzID0gTklMOworCQkJCQkkJC0+c2VsZWN0U3RtdCA9IE5VTEw7CisJ CQkJCSQkLT5vdmVycmlkZSA9ICQyOworCQkJCQkkJC0+c2V0Q2xhdXNlTGlzdCA9IGxpc3RfbWFr ZTEoJDUpOworCQkJCX0KKwkJCXwgT1ZFUlJJRElORyBvdmVycmlkZV9raW5kIFZBTFVFX1AgU0VU IGluc2VydF9zZXRfY2xhdXNlX2dyb3VwX2xpc3QKKwkJCQl7CisJCQkJCSQkID0gbWFrZU5vZGUo SW5zZXJ0U3RtdCk7CisJCQkJCSQkLT5jb2xzID0gTklMOworCQkJCQkkJC0+c2VsZWN0U3RtdCA9 IE5VTEw7CisJCQkJCSQkLT5vdmVycmlkZSA9ICQyOworCQkJCQkkJC0+c2V0Q2xhdXNlTGlzdCA9 ICQ1OworCQkJCX0KKwkJCXwgU0VUIGluc2VydF9zZXRfY2xhdXNlX2dyb3VwX2xpc3QKKwkJCQl7 CisJCQkJCSQkID0gbWFrZU5vZGUoSW5zZXJ0U3RtdCk7CisJCQkJCSQkLT5jb2xzID0gTklMOwor CQkJCQkkJC0+c2VsZWN0U3RtdCA9IE5VTEw7CisJCQkJCSQkLT5zZXRDbGF1c2VMaXN0ID0gJDI7 CisJCQkJfQorCQkJfCBTRVQgaW5zZXJ0X3NldF9jbGF1c2VfbGlzdAorCQkJCXsKKwkJCQkJJCQg PSBtYWtlTm9kZShJbnNlcnRTdG10KTsKKwkJCQkJJCQtPmNvbHMgPSBOSUw7CisJCQkJCSQkLT5z ZWxlY3RTdG10ID0gTlVMTDsKKwkJCQkJJCQtPnNldENsYXVzZUxpc3QgPSBsaXN0X21ha2UxKCQy KTsKKwkJCQl9CiAJCTsKIAogb3ZlcnJpZGVfa2luZDoKQEAgLTEzMzI2LDYgKzEzMzU4LDM4IEBA IHNldF90YXJnZXRfbGlzdDoKIAkJCXwgc2V0X3RhcmdldF9saXN0ICcsJyBzZXRfdGFyZ2V0CQl7 ICQkID0gbGFwcGVuZCgkMSwkMyk7IH0KIAkJOwogCisvKgorICogR3JhbW1hciBydWxlcyBmb3Ig SU5TRVJUIC4uLiBTRVQgc3ludGF4CisgKiBTdXBwb3J0cyBib3RoIHNpbmdsZS1yb3cgYW5kIG11 bHRpLXJvdyBzeW50YXg6CisgKiAgIFNpbmdsZSByb3c6IElOU0VSVCBJTlRPIHRhYmxlIFNFVCBj b2wxPXZhbDEsIGNvbDI9dmFsMgorICogICBNdWx0aS1yb3c6ICBJTlNFUlQgSU5UTyB0YWJsZSBT RVQgKGNvbDE9dmFsMSwgY29sMj12YWwyKSwgKGNvbDE9dmFsMywgY29sMj12YWw0KQorICoKKyAq IFRoZXNlIHJ1bGVzIGFyZSBJTlNFUlQtc3BlY2lmaWMgYW5kIG9ubHkgYWxsb3cgc2ltcGxlIGNv bHVtbj12YWx1ZSBhc3NpZ25tZW50cy4KKyAqLworaW5zZXJ0X3NldF9jbGF1c2U6CisJCQlzZXRf dGFyZ2V0ICc9JyBhX2V4cHIKKwkJCQl7CisJCQkJCSQxLT52YWwgPSAoTm9kZSAqKSAkMzsKKwkJ CQkJJCQgPSBsaXN0X21ha2UxKCQxKTsKKwkJCQl9CisJCTsKKworaW5zZXJ0X3NldF9jbGF1c2Vf bGlzdDoKKwkJCWluc2VydF9zZXRfY2xhdXNlCQkJCQkJeyAkJCA9ICQxOyB9CisJCQl8IGluc2Vy dF9zZXRfY2xhdXNlX2xpc3QgJywnIGluc2VydF9zZXRfY2xhdXNlCisJCQkJCQkJCQkJCQkJeyAk JCA9IGxpc3RfY29uY2F0KCQxLCAkMyk7IH0KKwkJOworCitpbnNlcnRfc2V0X2NsYXVzZV9ncm91 cDoKKwkJCScoJyBpbnNlcnRfc2V0X2NsYXVzZV9saXN0ICcpJwkJCXsgJCQgPSAkMjsgfQorCQk7 CisKK2luc2VydF9zZXRfY2xhdXNlX2dyb3VwX2xpc3Q6CisJCQlpbnNlcnRfc2V0X2NsYXVzZV9n cm91cAkJCQkJeyAkJCA9IGxpc3RfbWFrZTEoJDEpOyB9CisJCQl8IGluc2VydF9zZXRfY2xhdXNl X2dyb3VwX2xpc3QgJywnIGluc2VydF9zZXRfY2xhdXNlX2dyb3VwCisJCQkJCQkJCQkJCQkJeyAk JCA9IGxhcHBlbmQoJDEsICQzKTsgfQorCQk7CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAg KgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jIGIvc3JjL2Jpbi9w c3FsL3RhYi1jb21wbGV0ZS5pbi5jCmluZGV4IDUzYmYxZTIxNzIxLi4wNmEyYjRjMWY4ZCAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCisrKyBiL3NyYy9iaW4vcHNx bC90YWItY29tcGxldGUuaW4uYwpAQCAtNDkyMCwxMCArNDkyMCwxMCBAQCBtYXRjaF9wcmV2aW91 c193b3JkcyhpbnQgcGF0dGVybl9pZCwKIAogCS8qCiAJICogQ29tcGxldGUgSU5TRVJUIElOVE8g PHRhYmxlPiB3aXRoICIoIiBvciAiVkFMVUVTIiBvciAiU0VMRUNUIiBvcgotCSAqICJUQUJMRSIg b3IgIkRFRkFVTFQgVkFMVUVTIiBvciAiT1ZFUlJJRElORyIKKwkgKiAiVEFCTEUiIG9yICJERUZB VUxUIFZBTFVFUyIgb3IgIk9WRVJSSURJTkciIG9yICJTRVQiCiAJICovCiAJZWxzZSBpZiAoVGFp bE1hdGNoZXMoIklOU0VSVCIsICJJTlRPIiwgTWF0Y2hBbnkpKQotCQlDT01QTEVURV9XSVRIKCIo IiwgIkRFRkFVTFQgVkFMVUVTIiwgIlNFTEVDVCIsICJUQUJMRSIsICJWQUxVRVMiLCAiT1ZFUlJJ RElORyIpOworCQlDT01QTEVURV9XSVRIKCIoIiwgIkRFRkFVTFQgVkFMVUVTIiwgIlNFTEVDVCIs ICJTRVQiLCAiVEFCTEUiLCAiVkFMVUVTIiwgIk9WRVJSSURJTkciKTsKIAogCS8qCiAJICogQ29t cGxldGUgSU5TRVJUIElOVE8gPHRhYmxlPiAoYXR0cmlicykgd2l0aCAiVkFMVUVTIiBvciAiU0VM RUNUIiBvcgpAQCAtNDkzOSw3ICs0OTM5LDcgQEAgbWF0Y2hfcHJldmlvdXNfd29yZHMoaW50IHBh dHRlcm5faWQsCiAKIAkvKiBDb21wbGV0ZSBhZnRlciBPVkVSUklESU5HIGNsYXVzZSAqLwogCWVs c2UgaWYgKFRhaWxNYXRjaGVzKCJPVkVSUklESU5HIiwgTWF0Y2hBbnksICJWQUxVRSIpKQotCQlD T01QTEVURV9XSVRIKCJTRUxFQ1QiLCAiVEFCTEUiLCAiVkFMVUVTIik7CisJCUNPTVBMRVRFX1dJ VEgoIlNFTEVDVCIsICJTRVQiLCAiVEFCTEUiLCAiVkFMVUVTIik7CiAKIAkvKiBJbnNlcnQgYW4g b3BlbiBwYXJlbnRoZXNpcyBhZnRlciAiVkFMVUVTIiAqLwogCWVsc2UgaWYgKFRhaWxNYXRjaGVz KCJWQUxVRVMiKSAmJiAhVGFpbE1hdGNoZXMoIkRFRkFVTFQiLCAiVkFMVUVTIikpCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9w YXJzZW5vZGVzLmgKaW5kZXggYTUwMWNkZmIyNDkuLjZhNmVhODI4M2E4IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFy c2Vub2Rlcy5oCkBAIC0yMTk3LDYgKzIxOTcsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbnNlcnRTdG10 CiAJUmV0dXJuaW5nQ2xhdXNlICpyZXR1cm5pbmdDbGF1c2U7CS8qIFJFVFVSTklORyBjbGF1c2Ug Ki8KIAlXaXRoQ2xhdXNlICp3aXRoQ2xhdXNlOwkJLyogV0lUSCBjbGF1c2UgKi8KIAlPdmVycmlk aW5nS2luZCBvdmVycmlkZTsJLyogT1ZFUlJJRElORyBjbGF1c2UgKi8KKwlMaXN0CSAgICpzZXRD bGF1c2VMaXN0OwkvKiBTRVQgY2xhdXNlIGxpc3QgKGZvciBJTlNFUlQgLi4uIFNFVCBzeW50YXgp ICovCiB9IEluc2VydFN0bXQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5zZXJ0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvaW5zZXJ0Lm91dAppbmRleCA3NWI4ZGU3OWZjZS4uOTgwNmE4YTllOGYgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5zZXJ0Lm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luc2VydC5vdXQKQEAgLTEwOTYsMyArMTA5NiwzMDEgQEAg aW5zZXJ0IGludG8gcmV0dXJuaW5nd3J0ZXN0IHZhbHVlcyAoMiwgJ2ZvbycpIHJldHVybmluZyBy ZXR1cm5pbmd3cnRlc3Q7CiAoMSByb3cpCiAKIGRyb3AgdGFibGUgcmV0dXJuaW5nd3J0ZXN0Owor LS0KKy0tIElOU0VSVCAuLi4gU0VUIHN5bnRheCB0ZXN0cworLS0KK2NyZWF0ZSB0YWJsZSBpbnNl cnRzZXR0ZXN0ICgKKyAgICBpZCBpbnQsCisgICAgbmFtZSB0ZXh0LAorICAgIHNhbGFyeSBpbnQg ZGVmYXVsdCA1MDAwMCwKKyAgICBkZXB0IHRleHQsCisgICAgY3JlYXRlZF9hdCB0aW1lc3RhbXAg ZGVmYXVsdCBub3coKQorKTsKKy0tIEJhc2ljIElOU0VSVCBTRVQgc3ludGF4CitpbnNlcnQgaW50 byBpbnNlcnRzZXR0ZXN0IHNldCBpZD0xLCBuYW1lPSdBbGljZScsIHNhbGFyeT02MDAwMCwgZGVw dD0nRW5naW5lZXJpbmcnOworaW5zZXJ0IGludG8gaW5zZXJ0c2V0dGVzdCBzZXQgbmFtZT0nQm9i JywgaWQ9MiwgZGVwdD0nU2FsZXMnLCBzYWxhcnk9NTUwMDA7CistLSBJTlNFUlQgU0VUIHdpdGgg REVGQVVMVCBrZXl3b3JkCitpbnNlcnQgaW50byBpbnNlcnRzZXR0ZXN0IHNldCBpZD0zLCBuYW1l PSdDaGFybGllJywgc2FsYXJ5PURFRkFVTFQsIGRlcHQ9J0hSJzsKK2luc2VydCBpbnRvIGluc2Vy dHNldHRlc3Qgc2V0IGlkPTQsIG5hbWU9J0RhdmlkJywgZGVwdD0nTWFya2V0aW5nJzsgIC0tIHNh bGFyeSBzaG91bGQgdXNlIGRlZmF1bHQKKy0tIElOU0VSVCBTRVQgd2l0aCBOVUxMIHZhbHVlcwor aW5zZXJ0IGludG8gaW5zZXJ0c2V0dGVzdCBzZXQgaWQ9NSwgbmFtZT0nRXZlJywgc2FsYXJ5PU5V TEwsIGRlcHQ9J0ZpbmFuY2UnOworaW5zZXJ0IGludG8gaW5zZXJ0c2V0dGVzdCBzZXQgaWQ9Niwg bmFtZT1OVUxMLCBzYWxhcnk9NzAwMDAsIGRlcHQ9J0lUJzsKKy0tIElOU0VSVCBTRVQgd2l0aCBl eHByZXNzaW9ucworaW5zZXJ0IGludG8gaW5zZXJ0c2V0dGVzdCBzZXQgaWQ9NywgbmFtZT0nRnJh bmsnLCBzYWxhcnk9NTAwMDArMTAwMDAsIGRlcHQ9J0VuZ2luZWVyaW5nJzsKK2luc2VydCBpbnRv IGluc2VydHNldHRlc3Qgc2V0IGlkPTgsIG5hbWU9dXBwZXIoJ2dyYWNlJyksIHNhbGFyeT00NTAw MCwgZGVwdD1sb3dlcignU0FMRVMnKTsKKy0tIElOU0VSVCBTRVQgd2l0aCBmdW5jdGlvbnMKK2lu c2VydCBpbnRvIGluc2VydHNldHRlc3Qgc2V0IGlkPTksIG5hbWU9Y29uY2F0KCdKb2huJywgJyAn LCAnRG9lJyksIHNhbGFyeT04MDAwMCwgZGVwdD0nRXhlY3V0aXZlJzsKKy0tIElOU0VSVCBTRVQg d2l0aCBzdWJxdWVyaWVzCitpbnNlcnQgaW50byBpbnNlcnRzZXR0ZXN0IHNldCBpZD0xMCwgbmFt ZT0nS2F0ZScsIHNhbGFyeT0oc2VsZWN0IG1heChzYWxhcnkpICsgNTAwMCBmcm9tIGluc2VydHNl dHRlc3QpLCBkZXB0PSdFbmdpbmVlcmluZyc7CistLSBJTlNFUlQgU0VUIHdpdGggY29sdW1uIHN1 YnNldCAob3RoZXJzIHNob3VsZCBiZSBOVUxMIG9yIERFRkFVTFQpCitpbnNlcnQgaW50byBpbnNl cnRzZXR0ZXN0IHNldCBpZD0xMSwgbmFtZT0nTGF1cmEnOworaW5zZXJ0IGludG8gaW5zZXJ0c2V0 dGVzdCBzZXQgaWQ9MTIsIGRlcHQ9J1N1cHBvcnQnOworLS0gVmVyaWZ5IGFsbCBpbnNlcnRzCitz ZWxlY3QgaWQsIG5hbWUsIHNhbGFyeSwgZGVwdCBmcm9tIGluc2VydHNldHRlc3Qgb3JkZXIgYnkg aWQ7CisgaWQgfCAgIG5hbWUgICB8IHNhbGFyeSB8ICAgIGRlcHQgICAgIAorLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyAgMSB8IEFsaWNlICAgIHwgIDYwMDAwIHwgRW5n aW5lZXJpbmcKKyAgMiB8IEJvYiAgICAgIHwgIDU1MDAwIHwgU2FsZXMKKyAgMyB8IENoYXJsaWUg IHwgIDUwMDAwIHwgSFIKKyAgNCB8IERhdmlkICAgIHwgIDUwMDAwIHwgTWFya2V0aW5nCisgIDUg fCBFdmUgICAgICB8ICAgICAgICB8IEZpbmFuY2UKKyAgNiB8ICAgICAgICAgIHwgIDcwMDAwIHwg SVQKKyAgNyB8IEZyYW5rICAgIHwgIDYwMDAwIHwgRW5naW5lZXJpbmcKKyAgOCB8IEdSQUNFICAg IHwgIDQ1MDAwIHwgc2FsZXMKKyAgOSB8IEpvaG4gRG9lIHwgIDgwMDAwIHwgRXhlY3V0aXZlCisg MTAgfCBLYXRlICAgICB8ICA4NTAwMCB8IEVuZ2luZWVyaW5nCisgMTEgfCBMYXVyYSAgICB8ICA1 MDAwMCB8IAorIDEyIHwgICAgICAgICAgfCAgNTAwMDAgfCBTdXBwb3J0CisoMTIgcm93cykKKwor LS0gSU5TRVJUIFNFVCB3aXRoIFJFVFVSTklORyBjbGF1c2UKK2luc2VydCBpbnRvIGluc2VydHNl dHRlc3Qgc2V0IGlkPTEzLCBuYW1lPSdNaWtlJywgc2FsYXJ5PTkwMDAwLCBkZXB0PSdNYW5hZ2Vt ZW50JyByZXR1cm5pbmcgaWQsIG5hbWUsIHNhbGFyeSwgZGVwdDsKKyBpZCB8IG5hbWUgfCBzYWxh cnkgfCAgICBkZXB0ICAgIAorLS0tLSstLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgMTMg fCBNaWtlIHwgIDkwMDAwIHwgTWFuYWdlbWVudAorKDEgcm93KQorCitpbnNlcnQgaW50byBpbnNl cnRzZXR0ZXN0IHNldCBpZD0xNCwgbmFtZT0nTmFuY3knLCBzYWxhcnk9OTUwMDAsIGRlcHQ9J0V4 ZWN1dGl2ZScgcmV0dXJuaW5nIGlkLCBuYW1lLCBzYWxhcnk7CisgaWQgfCBuYW1lICB8IHNhbGFy eSAKKy0tLS0rLS0tLS0tLSstLS0tLS0tLQorIDE0IHwgTmFuY3kgfCAgOTUwMDAKKygxIHJvdykK KworLS0gSU5TRVJUIFNFVCB3aXRoIE9OIENPTkZMSUNUIERPIFVQREFURQorY3JlYXRlIHRhYmxl IGluc2VydHNldHBrICgKKyAgICBpZCBpbnQgcHJpbWFyeSBrZXksCisgICAgdmFsdWUgdGV4dCwK KyAgICBjb3VudGVyIGludCBkZWZhdWx0IDAKKyk7CitpbnNlcnQgaW50byBpbnNlcnRzZXRwayBz ZXQgaWQ9MSwgdmFsdWU9J2ZpcnN0JywgY291bnRlcj0xOworaW5zZXJ0IGludG8gaW5zZXJ0c2V0 cGsgc2V0IGlkPTIsIHZhbHVlPSdzZWNvbmQnLCBjb3VudGVyPTI7CistLSBUZXN0IE9OIENPTkZM SUNUIERPIFVQREFURSB3aXRoIElOU0VSVCBTRVQKK2luc2VydCBpbnRvIGluc2VydHNldHBrIHNl dCBpZD0xLCB2YWx1ZT0ndXBkYXRlZCcsIGNvdW50ZXI9MTAKKyAgICBvbiBjb25mbGljdCAoaWQp IGRvIHVwZGF0ZSBzZXQgdmFsdWU9ZXhjbHVkZWQudmFsdWUsIGNvdW50ZXI9ZXhjbHVkZWQuY291 bnRlcjsKK2luc2VydCBpbnRvIGluc2VydHNldHBrIHNldCBpZD0yLCB2YWx1ZT0nYWxzbyB1cGRh dGVkJywgY291bnRlcj0yMAorICAgIG9uIGNvbmZsaWN0IChpZCkgZG8gdXBkYXRlIHNldCBjb3Vu dGVyPWluc2VydHNldHBrLmNvdW50ZXIgKyBleGNsdWRlZC5jb3VudGVyOworc2VsZWN0ICogZnJv bSBpbnNlcnRzZXRwayBvcmRlciBieSBpZDsKKyBpZCB8ICB2YWx1ZSAgfCBjb3VudGVyIAorLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tCisgIDEgfCB1cGRhdGVkIHwgICAgICAxMAorICAyIHwgc2Vj b25kICB8ICAgICAgMjIKKygyIHJvd3MpCisKKy0tIFRlc3QgT04gQ09ORkxJQ1QgRE8gTk9USElO RyB3aXRoIElOU0VSVCBTRVQKK2luc2VydCBpbnRvIGluc2VydHNldHBrIHNldCBpZD0xLCB2YWx1 ZT0naWdub3JlZCcsIGNvdW50ZXI9MTAwCisgICAgb24gY29uZmxpY3QgKGlkKSBkbyBub3RoaW5n Oworc2VsZWN0ICogZnJvbSBpbnNlcnRzZXRwayBvcmRlciBieSBpZDsKKyBpZCB8ICB2YWx1ZSAg fCBjb3VudGVyIAorLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tCisgIDEgfCB1cGRhdGVkIHwgICAg ICAxMAorICAyIHwgc2Vjb25kICB8ICAgICAgMjIKKygyIHJvd3MpCisKKy0tIElOU0VSVCBTRVQg d2l0aCBPVkVSUklESU5HIFNZU1RFTSBWQUxVRSAoZm9yIGdlbmVyYXRlZCBjb2x1bW5zKQorY3Jl YXRlIHRhYmxlIGluc2VydHNldGdlbiAoCisgICAgaWQgaW50IGdlbmVyYXRlZCBhbHdheXMgYXMg aWRlbnRpdHksCisgICAgZGF0YSB0ZXh0CispOworLS0gVGhpcyBzaG91bGQgZmFpbCAoY2FuJ3Qg b3ZlcnJpZGUgd2l0aG91dCBPVkVSUklESU5HIGNsYXVzZSkKK2luc2VydCBpbnRvIGluc2VydHNl dGdlbiBzZXQgaWQ9MTAwLCBkYXRhPSd0ZXN0JzsKK0VSUk9SOiAgY2Fubm90IGluc2VydCBhIG5v bi1ERUZBVUxUIHZhbHVlIGludG8gY29sdW1uICJpZCIKK0RFVEFJTDogIENvbHVtbiAiaWQiIGlz IGFuIGlkZW50aXR5IGNvbHVtbiBkZWZpbmVkIGFzIEdFTkVSQVRFRCBBTFdBWVMuCitISU5UOiAg VXNlIE9WRVJSSURJTkcgU1lTVEVNIFZBTFVFIHRvIG92ZXJyaWRlLgorLS0gVGhpcyBzaG91bGQg d29yaworaW5zZXJ0IGludG8gaW5zZXJ0c2V0Z2VuIG92ZXJyaWRpbmcgc3lzdGVtIHZhbHVlIHNl dCBpZD0xMDAsIGRhdGE9J3Rlc3QnOworaW5zZXJ0IGludG8gaW5zZXJ0c2V0Z2VuIHNldCBkYXRh PSdhdXRvLWdlbmVyYXRlZCc7CitzZWxlY3QgKiBmcm9tIGluc2VydHNldGdlbiBvcmRlciBieSBp ZDsKKyBpZCAgfCAgICAgIGRhdGEgICAgICAKKy0tLS0tKy0tLS0tLS0tLS0tLS0tLS0KKyAgIDEg fCBhdXRvLWdlbmVyYXRlZAorIDEwMCB8IHRlc3QKKygyIHJvd3MpCisKK2Ryb3AgdGFibGUgaW5z ZXJ0c2V0Z2VuOworLS0gSU5TRVJUIFNFVCB3aXRoIENIRUNLIGNvbnN0cmFpbnRzCitjcmVhdGUg dGFibGUgaW5zZXJ0c2V0Y2hlY2sgKAorICAgIGlkIGludCwKKyAgICBhZ2UgaW50IGNoZWNrIChh Z2UgPj0gMCBhbmQgYWdlIDw9IDE1MCksCisgICAgc2NvcmUgaW50IGNoZWNrIChzY29yZSBiZXR3 ZWVuIDAgYW5kIDEwMCkKKyk7CitpbnNlcnQgaW50byBpbnNlcnRzZXRjaGVjayBzZXQgaWQ9MSwg YWdlPTI1LCBzY29yZT04NTsKK2luc2VydCBpbnRvIGluc2VydHNldGNoZWNrIHNldCBpZD0yLCBh Z2U9MzAsIHNjb3JlPTkyOworLS0gVGhlc2Ugc2hvdWxkIGZhaWwKK2luc2VydCBpbnRvIGluc2Vy dHNldGNoZWNrIHNldCBpZD0zLCBhZ2U9LTUsIHNjb3JlPTUwOyAgLS0gYWdlIGNoZWNrIGZhaWxz CitFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJpbnNlcnRzZXRjaGVjayIgdmlvbGF0ZXMg Y2hlY2sgY29uc3RyYWludCAiaW5zZXJ0c2V0Y2hlY2tfYWdlX2NoZWNrIgorREVUQUlMOiAgRmFp bGluZyByb3cgY29udGFpbnMgKDMsIC01LCA1MCkuCitpbnNlcnQgaW50byBpbnNlcnRzZXRjaGVj ayBzZXQgaWQ9NCwgYWdlPTI1LCBzY29yZT0xNTA7IC0tIHNjb3JlIGNoZWNrIGZhaWxzCitFUlJP UjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJpbnNlcnRzZXRjaGVjayIgdmlvbGF0ZXMgY2hlY2sg Y29uc3RyYWludCAiaW5zZXJ0c2V0Y2hlY2tfc2NvcmVfY2hlY2siCitERVRBSUw6ICBGYWlsaW5n IHJvdyBjb250YWlucyAoNCwgMjUsIDE1MCkuCitzZWxlY3QgKiBmcm9tIGluc2VydHNldGNoZWNr IG9yZGVyIGJ5IGlkOworIGlkIHwgYWdlIHwgc2NvcmUgCistLS0tKy0tLS0tKy0tLS0tLS0KKyAg MSB8ICAyNSB8ICAgIDg1CisgIDIgfCAgMzAgfCAgICA5MgorKDIgcm93cykKKworZHJvcCB0YWJs ZSBpbnNlcnRzZXRjaGVjazsKKy0tIElOU0VSVCBTRVQgd2l0aCBwYXJ0aXRpb25lZCB0YWJsZXMK K2NyZWF0ZSB0YWJsZSBpbnNlcnRzZXRwYXJ0ICgKKyAgICBpZCBpbnQsCisgICAgY2F0ZWdvcnkg dGV4dCwKKyAgICB2YWx1ZSBpbnQKKykgcGFydGl0aW9uIGJ5IGxpc3QgKGNhdGVnb3J5KTsKK2Ny ZWF0ZSB0YWJsZSBpbnNlcnRzZXRwYXJ0X2EgcGFydGl0aW9uIG9mIGluc2VydHNldHBhcnQgZm9y IHZhbHVlcyBpbiAoJ0EnKTsKK2NyZWF0ZSB0YWJsZSBpbnNlcnRzZXRwYXJ0X2IgcGFydGl0aW9u IG9mIGluc2VydHNldHBhcnQgZm9yIHZhbHVlcyBpbiAoJ0InKTsKK2NyZWF0ZSB0YWJsZSBpbnNl cnRzZXRwYXJ0X2MgcGFydGl0aW9uIG9mIGluc2VydHNldHBhcnQgZm9yIHZhbHVlcyBpbiAoJ0Mn KTsKK2luc2VydCBpbnRvIGluc2VydHNldHBhcnQgc2V0IGlkPTEsIGNhdGVnb3J5PSdBJywgdmFs dWU9MTAwOworaW5zZXJ0IGludG8gaW5zZXJ0c2V0cGFydCBzZXQgaWQ9MiwgY2F0ZWdvcnk9J0In LCB2YWx1ZT0yMDA7CitpbnNlcnQgaW50byBpbnNlcnRzZXRwYXJ0IHNldCBpZD0zLCBjYXRlZ29y eT0nQycsIHZhbHVlPTMwMDsKK2luc2VydCBpbnRvIGluc2VydHNldHBhcnQgc2V0IGlkPTQsIGNh dGVnb3J5PSdBJywgdmFsdWU9MTUwOworc2VsZWN0IHRhYmxlb2lkOjpyZWdjbGFzcywgKiBmcm9t IGluc2VydHNldHBhcnQgb3JkZXIgYnkgaWQ7CisgICAgdGFibGVvaWQgICAgIHwgaWQgfCBjYXRl Z29yeSB8IHZhbHVlIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0K KyBpbnNlcnRzZXRwYXJ0X2EgfCAgMSB8IEEgICAgICAgIHwgICAxMDAKKyBpbnNlcnRzZXRwYXJ0 X2IgfCAgMiB8IEIgICAgICAgIHwgICAyMDAKKyBpbnNlcnRzZXRwYXJ0X2MgfCAgMyB8IEMgICAg ICAgIHwgICAzMDAKKyBpbnNlcnRzZXRwYXJ0X2EgfCAgNCB8IEEgICAgICAgIHwgICAxNTAKKyg0 IHJvd3MpCisKK2Ryb3AgdGFibGUgaW5zZXJ0c2V0cGFydDsKKy0tIElOU0VSVCBTRVQgd2l0aCBp bmhlcml0YW5jZQorY3JlYXRlIHRhYmxlIGluc2VydHNldHBhcmVudCAoCisgICAgaWQgaW50LAor ICAgIHBhcmVudF9jb2wgdGV4dAorKTsKK2NyZWF0ZSB0YWJsZSBpbnNlcnRzZXRjaGlsZCAoCisg ICAgY2hpbGRfY29sIHRleHQKKykgaW5oZXJpdHMgKGluc2VydHNldHBhcmVudCk7CitpbnNlcnQg aW50byBpbnNlcnRzZXRwYXJlbnQgc2V0IGlkPTEsIHBhcmVudF9jb2w9J3BhcmVudCBkYXRhJzsK K2luc2VydCBpbnRvIGluc2VydHNldGNoaWxkIHNldCBpZD0yLCBwYXJlbnRfY29sPSdmcm9tIGNo aWxkJywgY2hpbGRfY29sPSdjaGlsZCBkYXRhJzsKK3NlbGVjdCAqIGZyb20gaW5zZXJ0c2V0cGFy ZW50IG9yZGVyIGJ5IGlkOworIGlkIHwgcGFyZW50X2NvbCAgCistLS0tKy0tLS0tLS0tLS0tLS0K KyAgMSB8IHBhcmVudCBkYXRhCisgIDIgfCBmcm9tIGNoaWxkCisoMiByb3dzKQorCitzZWxlY3Qg KiBmcm9tIGluc2VydHNldGNoaWxkOworIGlkIHwgcGFyZW50X2NvbCB8IGNoaWxkX2NvbCAgCist LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyAgMiB8IGZyb20gY2hpbGQgfCBjaGlsZCBk YXRhCisoMSByb3cpCisKK2Ryb3AgdGFibGUgaW5zZXJ0c2V0Y2hpbGQ7Citkcm9wIHRhYmxlIGlu c2VydHNldHBhcmVudDsKKy0tIElOU0VSVCBTRVQgZXJyb3IgY2FzZXMKKy0tIER1cGxpY2F0ZSBj b2x1bW4gbmFtZXMgKHNob3VsZCBmYWlsKQoraW5zZXJ0IGludG8gaW5zZXJ0c2V0dGVzdCBzZXQg aWQ9MTUsIG5hbWU9J1Rlc3QnLCBpZD0xNjsKK0VSUk9SOiAgY29sdW1uICJpZCIgc3BlY2lmaWVk IG1vcmUgdGhhbiBvbmNlCitMSU5FIDE6IGluc2VydCBpbnRvIGluc2VydHNldHRlc3Qgc2V0IGlk PTE1LCBuYW1lPSdUZXN0JywgaWQ9MTY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLS0gTm9uLWV4aXN0ZW50IGNvbHVtbiAoc2hv dWxkIGZhaWwpCitpbnNlcnQgaW50byBpbnNlcnRzZXR0ZXN0IHNldCBpZD0xNSwgbm9uZXhpc3Rl bnQ9J3ZhbHVlJzsKK0VSUk9SOiAgY29sdW1uICJub25leGlzdGVudCIgb2YgcmVsYXRpb24gImlu c2VydHNldHRlc3QiIGRvZXMgbm90IGV4aXN0CitMSU5FIDE6IGluc2VydCBpbnRvIGluc2VydHNl dHRlc3Qgc2V0IGlkPTE1LCBub25leGlzdGVudD0ndmFsdWUnOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLS0gVHlwZSBtaXNtYXRjaCAoc2hvdWxkIGZh aWwpCitpbnNlcnQgaW50byBpbnNlcnRzZXR0ZXN0IHNldCBpZD0nbm90IGEgbnVtYmVyJywgbmFt ZT0nVGVzdCc7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6 ICJub3QgYSBudW1iZXIiCitMSU5FIDE6IGluc2VydCBpbnRvIGluc2VydHNldHRlc3Qgc2V0IGlk PSdub3QgYSBudW1iZXInLCBuYW1lPSdUZXN0Jy4uLgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBeCistLSBNdWx0aS1jb2x1bW4gYXNzaWdubWVudCBzeW50YXggKHNo b3VsZCBmYWlsIC0gdGhpcyBpcyBVUERBVEUgc3ludGF4KQoraW5zZXJ0IGludG8gaW5zZXJ0c2V0 dGVzdCBzZXQgKGlkLCBuYW1lKSA9ICgyMCwgJ1Rlc3QnKTsKK0VSUk9SOiAgc3ludGF4IGVycm9y IGF0IG9yIG5lYXIgIiwiCitMSU5FIDE6IGluc2VydCBpbnRvIGluc2VydHNldHRlc3Qgc2V0IChp ZCwgbmFtZSkgPSAoMjAsICdUZXN0Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF4KKy0tIE11bHRpLWNvbHVtbiBhc3NpZ25tZW50IHdpdGggc3VicXVlcnkgKHNo b3VsZCBmYWlsKQoraW5zZXJ0IGludG8gaW5zZXJ0c2V0dGVzdCBzZXQgKGlkLCBuYW1lKSA9IChz ZWxlY3QgMjEsICdUZXN0Jyk7CitFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIsIgor TElORSAxOiBpbnNlcnQgaW50byBpbnNlcnRzZXR0ZXN0IHNldCAoaWQsIG5hbWUpID0gKHNlbGVj dCAyMSwgJ1Rlc3QuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XgorLS0gSU5TRVJUIFNFVCB3aXRoIENURQord2l0aCBuZXdfdmFsdWVzIGFzICgKKyAgICBzZWxl Y3QgMTUgYXMgbmV3X2lkLCAnT2xpdmVyJyBhcyBuZXdfbmFtZSwgODUwMDAgYXMgbmV3X3NhbGFy eQorKQoraW5zZXJ0IGludG8gaW5zZXJ0c2V0dGVzdAorc2VsZWN0IG5ld19pZCwgbmV3X25hbWUs IG5ld19zYWxhcnksICdTYWxlcycgZnJvbSBuZXdfdmFsdWVzOworLS0gVmVyaWZ5IENURSBpbnNl cnQgd29ya2VkIChub3QgdXNpbmcgU0VUIHN5bnRheCwgYnV0IGZvciBjb21wbGV0ZW5lc3MpCitz ZWxlY3QgaWQsIG5hbWUsIHNhbGFyeSwgZGVwdCBmcm9tIGluc2VydHNldHRlc3Qgd2hlcmUgaWQg PSAxNTsKKyBpZCB8ICBuYW1lICB8IHNhbGFyeSB8IGRlcHQgIAorLS0tLSstLS0tLS0tLSstLS0t LS0tLSstLS0tLS0tCisgMTUgfCBPbGl2ZXIgfCAgODUwMDAgfCBTYWxlcworKDEgcm93KQorCist LSBNdWx0aS1yb3cgSU5TRVJUIFNFVCBzeW50YXgKK2NyZWF0ZSB0YWJsZSBpbnNlcnRzZXRtdWx0 aSAoCisgICAgYzEgaW50LAorICAgIGMyIGludCwKKyAgICBjMyBpbnQKKyk7CistLSBCYXNpYyBt dWx0aS1yb3cgd2l0aCBzYW1lIGNvbHVtbiBvcmRlcgoraW5zZXJ0IGludG8gaW5zZXJ0c2V0bXVs dGkgc2V0IChjMT0xLCBjMj0yLCBjMz0zKSwgKGMxPTQsIGMyPTUsIGMzPTYpOworc2VsZWN0ICog ZnJvbSBpbnNlcnRzZXRtdWx0aSBvcmRlciBieSBjMTsKKyBjMSB8IGMyIHwgYzMgCistLS0tKy0t LS0rLS0tLQorICAxIHwgIDIgfCAgMworICA0IHwgIDUgfCAgNgorKDIgcm93cykKKworLS0gTXVs dGktcm93IHdpdGggZGlmZmVyZW50IGNvbHVtbiBvcmRlcnMKKy0tIFRoaXMgdGVzdHMgdGhhdCBj b2x1bW4tdmFsdWUgbWF0Y2hpbmcgd29ya3MgY29ycmVjdGx5IGFjcm9zcyByb3dzCitpbnNlcnQg aW50byBpbnNlcnRzZXRtdWx0aSBzZXQgKGMyPTIwLCBjMT0xMCwgYzM9MzApLCAoYzE9NDAsIGMz PTYwLCBjMj01MCksIChjMz05MCwgYzI9ODAsIGMxPTcwKTsKK3NlbGVjdCAqIGZyb20gaW5zZXJ0 c2V0bXVsdGkgb3JkZXIgYnkgYzE7CisgYzEgfCBjMiB8IGMzIAorLS0tLSstLS0tKy0tLS0KKyAg MSB8ICAyIHwgIDMKKyAgNCB8ICA1IHwgIDYKKyAxMCB8IDIwIHwgMzAKKyA0MCB8IDUwIHwgNjAK KyA3MCB8IDgwIHwgOTAKKyg1IHJvd3MpCisKKy0tIE11bHRpLXJvdyB3aXRoIG1peGVkIGV4cHJl c3Npb25zCitpbnNlcnQgaW50byBpbnNlcnRzZXRtdWx0aSBzZXQgKGMxPTEwMCwgYzI9MjAwLCBj Mz0zMDApLCAoYzI9NTAwLCBjMT00MDAsIGMzPTYwMCk7CitzZWxlY3QgKiBmcm9tIGluc2VydHNl dG11bHRpIG9yZGVyIGJ5IGMxOworIGMxICB8IGMyICB8IGMzICAKKy0tLS0tKy0tLS0tKy0tLS0t CisgICAxIHwgICAyIHwgICAzCisgICA0IHwgICA1IHwgICA2CisgIDEwIHwgIDIwIHwgIDMwCisg IDQwIHwgIDUwIHwgIDYwCisgIDcwIHwgIDgwIHwgIDkwCisgMTAwIHwgMjAwIHwgMzAwCisgNDAw IHwgNTAwIHwgNjAwCisoNyByb3dzKQorCistLSBUZXN0IGRpZmZlcmVudCBjb2x1bW4gc2V0cyBp biBtdWx0aS1yb3cgSU5TRVJUIFNFVAorLS0gRmlyc3Qgcm93IGhhcyBhbGwgY29sdW1ucywgc2Vj b25kIHJvdyBoYXMgc3Vic2V0IChjMyBzaG91bGQgZ2V0IERFRkFVTFQvTlVMTCkKK2luc2VydCBp bnRvIGluc2VydHNldG11bHRpIHNldCAoYzE9MTAwMCwgYzI9MjAwMCwgYzM9MzAwMCksIChjMT00 MDAwLCBjMj01MDAwKTsKK3NlbGVjdCAqIGZyb20gaW5zZXJ0c2V0bXVsdGkgd2hlcmUgYzEgPj0g MTAwMCBvcmRlciBieSBjMTsKKyAgYzEgIHwgIGMyICB8ICBjMyAgCistLS0tLS0rLS0tLS0tKy0t LS0tLQorIDEwMDAgfCAyMDAwIHwgMzAwMAorIDQwMDAgfCA1MDAwIHwgICAgIAorKDIgcm93cykK KworLS0gRmlyc3Qgcm93IGhhcyBzdWJzZXQsIHNlY29uZCByb3cgaGFzIGFsbCBjb2x1bW5zIChj MiBpbiBmaXJzdCByb3cgc2hvdWxkIGdldCBERUZBVUxUL05VTEwpCitpbnNlcnQgaW50byBpbnNl cnRzZXRtdWx0aSBzZXQgKGMxPTEwMDEsIGMzPTMwMDEpLCAoYzE9NDAwMSwgYzI9NTAwMSwgYzM9 NjAwMSk7CitzZWxlY3QgKiBmcm9tIGluc2VydHNldG11bHRpIHdoZXJlIGMxID49IDEwMDEgb3Jk ZXIgYnkgYzE7CisgIGMxICB8ICBjMiAgfCAgYzMgIAorLS0tLS0tKy0tLS0tLSstLS0tLS0KKyAx MDAxIHwgICAgICB8IDMwMDEKKyA0MDAwIHwgNTAwMCB8ICAgICAKKyA0MDAxIHwgNTAwMSB8IDYw MDEKKygzIHJvd3MpCisKKy0tIERpZmZlcmVudCBzdWJzZXRzIGluIGVhY2ggcm93ICh1bmlvbiBv ZiBhbGwgY29sdW1ucyB1c2VkLCBtaXNzaW5nIGdldCBERUZBVUxUL05VTEwpCitpbnNlcnQgaW50 byBpbnNlcnRzZXRtdWx0aSBzZXQgKGMxPTEwMDIsIGMyPTIwMDIpLCAoYzE9NDAwMiwgYzM9NjAw Mik7CitzZWxlY3QgKiBmcm9tIGluc2VydHNldG11bHRpIHdoZXJlIGMxID49IDEwMDIgb3JkZXIg YnkgYzE7CisgIGMxICB8ICBjMiAgfCAgYzMgIAorLS0tLS0tKy0tLS0tLSstLS0tLS0KKyAxMDAy IHwgMjAwMiB8ICAgICAKKyA0MDAwIHwgNTAwMCB8ICAgICAKKyA0MDAxIHwgNTAwMSB8IDYwMDEK KyA0MDAyIHwgICAgICB8IDYwMDIKKyg0IHJvd3MpCisKKy0tIENsZWFudXAKK2Ryb3AgdGFibGUg aW5zZXJ0c2V0dGVzdDsKK2Ryb3AgdGFibGUgaW5zZXJ0c2V0cGs7Citkcm9wIHRhYmxlIGluc2Vy dHNldG11bHRpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW5zZXJ0LnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2luc2VydC5zcWwKaW5kZXggMmIwODZlZWI2ZDcuLjMyM2Nl ZDA1ZmJhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbnNlcnQuc3FsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2luc2VydC5zcWwKQEAgLTY3NCwzICs2NzQsMjEwIEBAIGFs dGVyIHRhYmxlIHJldHVybmluZ3dydGVzdDIgZHJvcCBjOwogYWx0ZXIgdGFibGUgcmV0dXJuaW5n d3J0ZXN0IGF0dGFjaCBwYXJ0aXRpb24gcmV0dXJuaW5nd3J0ZXN0MiBmb3IgdmFsdWVzIGluICgy KTsKIGluc2VydCBpbnRvIHJldHVybmluZ3dydGVzdCB2YWx1ZXMgKDIsICdmb28nKSByZXR1cm5p bmcgcmV0dXJuaW5nd3J0ZXN0OwogZHJvcCB0YWJsZSByZXR1cm5pbmd3cnRlc3Q7CisKKy0tCist LSBJTlNFUlQgLi4uIFNFVCBzeW50YXggdGVzdHMKKy0tCitjcmVhdGUgdGFibGUgaW5zZXJ0c2V0 dGVzdCAoCisgICAgaWQgaW50LAorICAgIG5hbWUgdGV4dCwKKyAgICBzYWxhcnkgaW50IGRlZmF1 bHQgNTAwMDAsCisgICAgZGVwdCB0ZXh0LAorICAgIGNyZWF0ZWRfYXQgdGltZXN0YW1wIGRlZmF1 bHQgbm93KCkKKyk7CisKKy0tIEJhc2ljIElOU0VSVCBTRVQgc3ludGF4CitpbnNlcnQgaW50byBp bnNlcnRzZXR0ZXN0IHNldCBpZD0xLCBuYW1lPSdBbGljZScsIHNhbGFyeT02MDAwMCwgZGVwdD0n RW5naW5lZXJpbmcnOworaW5zZXJ0IGludG8gaW5zZXJ0c2V0dGVzdCBzZXQgbmFtZT0nQm9iJywg aWQ9MiwgZGVwdD0nU2FsZXMnLCBzYWxhcnk9NTUwMDA7CisKKy0tIElOU0VSVCBTRVQgd2l0aCBE RUZBVUxUIGtleXdvcmQKK2luc2VydCBpbnRvIGluc2VydHNldHRlc3Qgc2V0IGlkPTMsIG5hbWU9 J0NoYXJsaWUnLCBzYWxhcnk9REVGQVVMVCwgZGVwdD0nSFInOworaW5zZXJ0IGludG8gaW5zZXJ0 c2V0dGVzdCBzZXQgaWQ9NCwgbmFtZT0nRGF2aWQnLCBkZXB0PSdNYXJrZXRpbmcnOyAgLS0gc2Fs YXJ5IHNob3VsZCB1c2UgZGVmYXVsdAorCistLSBJTlNFUlQgU0VUIHdpdGggTlVMTCB2YWx1ZXMK K2luc2VydCBpbnRvIGluc2VydHNldHRlc3Qgc2V0IGlkPTUsIG5hbWU9J0V2ZScsIHNhbGFyeT1O VUxMLCBkZXB0PSdGaW5hbmNlJzsKK2luc2VydCBpbnRvIGluc2VydHNldHRlc3Qgc2V0IGlkPTYs IG5hbWU9TlVMTCwgc2FsYXJ5PTcwMDAwLCBkZXB0PSdJVCc7CisKKy0tIElOU0VSVCBTRVQgd2l0 aCBleHByZXNzaW9ucworaW5zZXJ0IGludG8gaW5zZXJ0c2V0dGVzdCBzZXQgaWQ9NywgbmFtZT0n RnJhbmsnLCBzYWxhcnk9NTAwMDArMTAwMDAsIGRlcHQ9J0VuZ2luZWVyaW5nJzsKK2luc2VydCBp bnRvIGluc2VydHNldHRlc3Qgc2V0IGlkPTgsIG5hbWU9dXBwZXIoJ2dyYWNlJyksIHNhbGFyeT00 NTAwMCwgZGVwdD1sb3dlcignU0FMRVMnKTsKKworLS0gSU5TRVJUIFNFVCB3aXRoIGZ1bmN0aW9u cworaW5zZXJ0IGludG8gaW5zZXJ0c2V0dGVzdCBzZXQgaWQ9OSwgbmFtZT1jb25jYXQoJ0pvaG4n LCAnICcsICdEb2UnKSwgc2FsYXJ5PTgwMDAwLCBkZXB0PSdFeGVjdXRpdmUnOworCistLSBJTlNF UlQgU0VUIHdpdGggc3VicXVlcmllcworaW5zZXJ0IGludG8gaW5zZXJ0c2V0dGVzdCBzZXQgaWQ9 MTAsIG5hbWU9J0thdGUnLCBzYWxhcnk9KHNlbGVjdCBtYXgoc2FsYXJ5KSArIDUwMDAgZnJvbSBp bnNlcnRzZXR0ZXN0KSwgZGVwdD0nRW5naW5lZXJpbmcnOworCistLSBJTlNFUlQgU0VUIHdpdGgg Y29sdW1uIHN1YnNldCAob3RoZXJzIHNob3VsZCBiZSBOVUxMIG9yIERFRkFVTFQpCitpbnNlcnQg aW50byBpbnNlcnRzZXR0ZXN0IHNldCBpZD0xMSwgbmFtZT0nTGF1cmEnOworaW5zZXJ0IGludG8g aW5zZXJ0c2V0dGVzdCBzZXQgaWQ9MTIsIGRlcHQ9J1N1cHBvcnQnOworCistLSBWZXJpZnkgYWxs IGluc2VydHMKK3NlbGVjdCBpZCwgbmFtZSwgc2FsYXJ5LCBkZXB0IGZyb20gaW5zZXJ0c2V0dGVz dCBvcmRlciBieSBpZDsKKworLS0gSU5TRVJUIFNFVCB3aXRoIFJFVFVSTklORyBjbGF1c2UKK2lu c2VydCBpbnRvIGluc2VydHNldHRlc3Qgc2V0IGlkPTEzLCBuYW1lPSdNaWtlJywgc2FsYXJ5PTkw MDAwLCBkZXB0PSdNYW5hZ2VtZW50JyByZXR1cm5pbmcgaWQsIG5hbWUsIHNhbGFyeSwgZGVwdDsK K2luc2VydCBpbnRvIGluc2VydHNldHRlc3Qgc2V0IGlkPTE0LCBuYW1lPSdOYW5jeScsIHNhbGFy eT05NTAwMCwgZGVwdD0nRXhlY3V0aXZlJyByZXR1cm5pbmcgaWQsIG5hbWUsIHNhbGFyeTsKKwor LS0gSU5TRVJUIFNFVCB3aXRoIE9OIENPTkZMSUNUIERPIFVQREFURQorY3JlYXRlIHRhYmxlIGlu c2VydHNldHBrICgKKyAgICBpZCBpbnQgcHJpbWFyeSBrZXksCisgICAgdmFsdWUgdGV4dCwKKyAg ICBjb3VudGVyIGludCBkZWZhdWx0IDAKKyk7CisKK2luc2VydCBpbnRvIGluc2VydHNldHBrIHNl dCBpZD0xLCB2YWx1ZT0nZmlyc3QnLCBjb3VudGVyPTE7CitpbnNlcnQgaW50byBpbnNlcnRzZXRw ayBzZXQgaWQ9MiwgdmFsdWU9J3NlY29uZCcsIGNvdW50ZXI9MjsKKworLS0gVGVzdCBPTiBDT05G TElDVCBETyBVUERBVEUgd2l0aCBJTlNFUlQgU0VUCitpbnNlcnQgaW50byBpbnNlcnRzZXRwayBz ZXQgaWQ9MSwgdmFsdWU9J3VwZGF0ZWQnLCBjb3VudGVyPTEwCisgICAgb24gY29uZmxpY3QgKGlk KSBkbyB1cGRhdGUgc2V0IHZhbHVlPWV4Y2x1ZGVkLnZhbHVlLCBjb3VudGVyPWV4Y2x1ZGVkLmNv dW50ZXI7CisKK2luc2VydCBpbnRvIGluc2VydHNldHBrIHNldCBpZD0yLCB2YWx1ZT0nYWxzbyB1 cGRhdGVkJywgY291bnRlcj0yMAorICAgIG9uIGNvbmZsaWN0IChpZCkgZG8gdXBkYXRlIHNldCBj b3VudGVyPWluc2VydHNldHBrLmNvdW50ZXIgKyBleGNsdWRlZC5jb3VudGVyOworCitzZWxlY3Qg KiBmcm9tIGluc2VydHNldHBrIG9yZGVyIGJ5IGlkOworCistLSBUZXN0IE9OIENPTkZMSUNUIERP IE5PVEhJTkcgd2l0aCBJTlNFUlQgU0VUCitpbnNlcnQgaW50byBpbnNlcnRzZXRwayBzZXQgaWQ9 MSwgdmFsdWU9J2lnbm9yZWQnLCBjb3VudGVyPTEwMAorICAgIG9uIGNvbmZsaWN0IChpZCkgZG8g bm90aGluZzsKKworc2VsZWN0ICogZnJvbSBpbnNlcnRzZXRwayBvcmRlciBieSBpZDsKKworLS0g SU5TRVJUIFNFVCB3aXRoIE9WRVJSSURJTkcgU1lTVEVNIFZBTFVFIChmb3IgZ2VuZXJhdGVkIGNv bHVtbnMpCitjcmVhdGUgdGFibGUgaW5zZXJ0c2V0Z2VuICgKKyAgICBpZCBpbnQgZ2VuZXJhdGVk IGFsd2F5cyBhcyBpZGVudGl0eSwKKyAgICBkYXRhIHRleHQKKyk7CisKKy0tIFRoaXMgc2hvdWxk IGZhaWwgKGNhbid0IG92ZXJyaWRlIHdpdGhvdXQgT1ZFUlJJRElORyBjbGF1c2UpCitpbnNlcnQg aW50byBpbnNlcnRzZXRnZW4gc2V0IGlkPTEwMCwgZGF0YT0ndGVzdCc7CisKKy0tIFRoaXMgc2hv dWxkIHdvcmsKK2luc2VydCBpbnRvIGluc2VydHNldGdlbiBvdmVycmlkaW5nIHN5c3RlbSB2YWx1 ZSBzZXQgaWQ9MTAwLCBkYXRhPSd0ZXN0JzsKK2luc2VydCBpbnRvIGluc2VydHNldGdlbiBzZXQg ZGF0YT0nYXV0by1nZW5lcmF0ZWQnOworCitzZWxlY3QgKiBmcm9tIGluc2VydHNldGdlbiBvcmRl ciBieSBpZDsKKworZHJvcCB0YWJsZSBpbnNlcnRzZXRnZW47CisKKy0tIElOU0VSVCBTRVQgd2l0 aCBDSEVDSyBjb25zdHJhaW50cworY3JlYXRlIHRhYmxlIGluc2VydHNldGNoZWNrICgKKyAgICBp ZCBpbnQsCisgICAgYWdlIGludCBjaGVjayAoYWdlID49IDAgYW5kIGFnZSA8PSAxNTApLAorICAg IHNjb3JlIGludCBjaGVjayAoc2NvcmUgYmV0d2VlbiAwIGFuZCAxMDApCispOworCitpbnNlcnQg aW50byBpbnNlcnRzZXRjaGVjayBzZXQgaWQ9MSwgYWdlPTI1LCBzY29yZT04NTsKK2luc2VydCBp bnRvIGluc2VydHNldGNoZWNrIHNldCBpZD0yLCBhZ2U9MzAsIHNjb3JlPTkyOworCistLSBUaGVz ZSBzaG91bGQgZmFpbAoraW5zZXJ0IGludG8gaW5zZXJ0c2V0Y2hlY2sgc2V0IGlkPTMsIGFnZT0t NSwgc2NvcmU9NTA7ICAtLSBhZ2UgY2hlY2sgZmFpbHMKK2luc2VydCBpbnRvIGluc2VydHNldGNo ZWNrIHNldCBpZD00LCBhZ2U9MjUsIHNjb3JlPTE1MDsgLS0gc2NvcmUgY2hlY2sgZmFpbHMKKwor c2VsZWN0ICogZnJvbSBpbnNlcnRzZXRjaGVjayBvcmRlciBieSBpZDsKKworZHJvcCB0YWJsZSBp bnNlcnRzZXRjaGVjazsKKworLS0gSU5TRVJUIFNFVCB3aXRoIHBhcnRpdGlvbmVkIHRhYmxlcwor Y3JlYXRlIHRhYmxlIGluc2VydHNldHBhcnQgKAorICAgIGlkIGludCwKKyAgICBjYXRlZ29yeSB0 ZXh0LAorICAgIHZhbHVlIGludAorKSBwYXJ0aXRpb24gYnkgbGlzdCAoY2F0ZWdvcnkpOworCitj cmVhdGUgdGFibGUgaW5zZXJ0c2V0cGFydF9hIHBhcnRpdGlvbiBvZiBpbnNlcnRzZXRwYXJ0IGZv ciB2YWx1ZXMgaW4gKCdBJyk7CitjcmVhdGUgdGFibGUgaW5zZXJ0c2V0cGFydF9iIHBhcnRpdGlv biBvZiBpbnNlcnRzZXRwYXJ0IGZvciB2YWx1ZXMgaW4gKCdCJyk7CitjcmVhdGUgdGFibGUgaW5z ZXJ0c2V0cGFydF9jIHBhcnRpdGlvbiBvZiBpbnNlcnRzZXRwYXJ0IGZvciB2YWx1ZXMgaW4gKCdD Jyk7CisKK2luc2VydCBpbnRvIGluc2VydHNldHBhcnQgc2V0IGlkPTEsIGNhdGVnb3J5PSdBJywg dmFsdWU9MTAwOworaW5zZXJ0IGludG8gaW5zZXJ0c2V0cGFydCBzZXQgaWQ9MiwgY2F0ZWdvcnk9 J0InLCB2YWx1ZT0yMDA7CitpbnNlcnQgaW50byBpbnNlcnRzZXRwYXJ0IHNldCBpZD0zLCBjYXRl Z29yeT0nQycsIHZhbHVlPTMwMDsKK2luc2VydCBpbnRvIGluc2VydHNldHBhcnQgc2V0IGlkPTQs IGNhdGVnb3J5PSdBJywgdmFsdWU9MTUwOworCitzZWxlY3QgdGFibGVvaWQ6OnJlZ2NsYXNzLCAq IGZyb20gaW5zZXJ0c2V0cGFydCBvcmRlciBieSBpZDsKKworZHJvcCB0YWJsZSBpbnNlcnRzZXRw YXJ0OworCistLSBJTlNFUlQgU0VUIHdpdGggaW5oZXJpdGFuY2UKK2NyZWF0ZSB0YWJsZSBpbnNl cnRzZXRwYXJlbnQgKAorICAgIGlkIGludCwKKyAgICBwYXJlbnRfY29sIHRleHQKKyk7CisKK2Ny ZWF0ZSB0YWJsZSBpbnNlcnRzZXRjaGlsZCAoCisgICAgY2hpbGRfY29sIHRleHQKKykgaW5oZXJp dHMgKGluc2VydHNldHBhcmVudCk7CisKK2luc2VydCBpbnRvIGluc2VydHNldHBhcmVudCBzZXQg aWQ9MSwgcGFyZW50X2NvbD0ncGFyZW50IGRhdGEnOworaW5zZXJ0IGludG8gaW5zZXJ0c2V0Y2hp bGQgc2V0IGlkPTIsIHBhcmVudF9jb2w9J2Zyb20gY2hpbGQnLCBjaGlsZF9jb2w9J2NoaWxkIGRh dGEnOworCitzZWxlY3QgKiBmcm9tIGluc2VydHNldHBhcmVudCBvcmRlciBieSBpZDsKK3NlbGVj dCAqIGZyb20gaW5zZXJ0c2V0Y2hpbGQ7CisKK2Ryb3AgdGFibGUgaW5zZXJ0c2V0Y2hpbGQ7Citk cm9wIHRhYmxlIGluc2VydHNldHBhcmVudDsKKworLS0gSU5TRVJUIFNFVCBlcnJvciBjYXNlcwor LS0gRHVwbGljYXRlIGNvbHVtbiBuYW1lcyAoc2hvdWxkIGZhaWwpCitpbnNlcnQgaW50byBpbnNl cnRzZXR0ZXN0IHNldCBpZD0xNSwgbmFtZT0nVGVzdCcsIGlkPTE2OworCistLSBOb24tZXhpc3Rl bnQgY29sdW1uIChzaG91bGQgZmFpbCkKK2luc2VydCBpbnRvIGluc2VydHNldHRlc3Qgc2V0IGlk PTE1LCBub25leGlzdGVudD0ndmFsdWUnOworCistLSBUeXBlIG1pc21hdGNoIChzaG91bGQgZmFp bCkKK2luc2VydCBpbnRvIGluc2VydHNldHRlc3Qgc2V0IGlkPSdub3QgYSBudW1iZXInLCBuYW1l PSdUZXN0JzsKKworLS0gTXVsdGktY29sdW1uIGFzc2lnbm1lbnQgc3ludGF4IChzaG91bGQgZmFp bCAtIHRoaXMgaXMgVVBEQVRFIHN5bnRheCkKK2luc2VydCBpbnRvIGluc2VydHNldHRlc3Qgc2V0 IChpZCwgbmFtZSkgPSAoMjAsICdUZXN0Jyk7CisKKy0tIE11bHRpLWNvbHVtbiBhc3NpZ25tZW50 IHdpdGggc3VicXVlcnkgKHNob3VsZCBmYWlsKQoraW5zZXJ0IGludG8gaW5zZXJ0c2V0dGVzdCBz ZXQgKGlkLCBuYW1lKSA9IChzZWxlY3QgMjEsICdUZXN0Jyk7CisKKy0tIElOU0VSVCBTRVQgd2l0 aCBDVEUKK3dpdGggbmV3X3ZhbHVlcyBhcyAoCisgICAgc2VsZWN0IDE1IGFzIG5ld19pZCwgJ09s aXZlcicgYXMgbmV3X25hbWUsIDg1MDAwIGFzIG5ld19zYWxhcnkKKykKK2luc2VydCBpbnRvIGlu c2VydHNldHRlc3QKK3NlbGVjdCBuZXdfaWQsIG5ld19uYW1lLCBuZXdfc2FsYXJ5LCAnU2FsZXMn IGZyb20gbmV3X3ZhbHVlczsKKworLS0gVmVyaWZ5IENURSBpbnNlcnQgd29ya2VkIChub3QgdXNp bmcgU0VUIHN5bnRheCwgYnV0IGZvciBjb21wbGV0ZW5lc3MpCitzZWxlY3QgaWQsIG5hbWUsIHNh bGFyeSwgZGVwdCBmcm9tIGluc2VydHNldHRlc3Qgd2hlcmUgaWQgPSAxNTsKKworLS0gTXVsdGkt cm93IElOU0VSVCBTRVQgc3ludGF4CitjcmVhdGUgdGFibGUgaW5zZXJ0c2V0bXVsdGkgKAorICAg IGMxIGludCwKKyAgICBjMiBpbnQsCisgICAgYzMgaW50CispOworCistLSBCYXNpYyBtdWx0aS1y b3cgd2l0aCBzYW1lIGNvbHVtbiBvcmRlcgoraW5zZXJ0IGludG8gaW5zZXJ0c2V0bXVsdGkgc2V0 IChjMT0xLCBjMj0yLCBjMz0zKSwgKGMxPTQsIGMyPTUsIGMzPTYpOworc2VsZWN0ICogZnJvbSBp bnNlcnRzZXRtdWx0aSBvcmRlciBieSBjMTsKKworLS0gTXVsdGktcm93IHdpdGggZGlmZmVyZW50 IGNvbHVtbiBvcmRlcnMKKy0tIFRoaXMgdGVzdHMgdGhhdCBjb2x1bW4tdmFsdWUgbWF0Y2hpbmcg d29ya3MgY29ycmVjdGx5IGFjcm9zcyByb3dzCitpbnNlcnQgaW50byBpbnNlcnRzZXRtdWx0aSBz ZXQgKGMyPTIwLCBjMT0xMCwgYzM9MzApLCAoYzE9NDAsIGMzPTYwLCBjMj01MCksIChjMz05MCwg YzI9ODAsIGMxPTcwKTsKK3NlbGVjdCAqIGZyb20gaW5zZXJ0c2V0bXVsdGkgb3JkZXIgYnkgYzE7 CisKKy0tIE11bHRpLXJvdyB3aXRoIG1peGVkIGV4cHJlc3Npb25zCitpbnNlcnQgaW50byBpbnNl cnRzZXRtdWx0aSBzZXQgKGMxPTEwMCwgYzI9MjAwLCBjMz0zMDApLCAoYzI9NTAwLCBjMT00MDAs IGMzPTYwMCk7CitzZWxlY3QgKiBmcm9tIGluc2VydHNldG11bHRpIG9yZGVyIGJ5IGMxOworCist LSBUZXN0IGRpZmZlcmVudCBjb2x1bW4gc2V0cyBpbiBtdWx0aS1yb3cgSU5TRVJUIFNFVAorLS0g Rmlyc3Qgcm93IGhhcyBhbGwgY29sdW1ucywgc2Vjb25kIHJvdyBoYXMgc3Vic2V0IChjMyBzaG91 bGQgZ2V0IERFRkFVTFQvTlVMTCkKK2luc2VydCBpbnRvIGluc2VydHNldG11bHRpIHNldCAoYzE9 MTAwMCwgYzI9MjAwMCwgYzM9MzAwMCksIChjMT00MDAwLCBjMj01MDAwKTsKK3NlbGVjdCAqIGZy b20gaW5zZXJ0c2V0bXVsdGkgd2hlcmUgYzEgPj0gMTAwMCBvcmRlciBieSBjMTsKKworLS0gRmly c3Qgcm93IGhhcyBzdWJzZXQsIHNlY29uZCByb3cgaGFzIGFsbCBjb2x1bW5zIChjMiBpbiBmaXJz dCByb3cgc2hvdWxkIGdldCBERUZBVUxUL05VTEwpCitpbnNlcnQgaW50byBpbnNlcnRzZXRtdWx0 aSBzZXQgKGMxPTEwMDEsIGMzPTMwMDEpLCAoYzE9NDAwMSwgYzI9NTAwMSwgYzM9NjAwMSk7Citz ZWxlY3QgKiBmcm9tIGluc2VydHNldG11bHRpIHdoZXJlIGMxID49IDEwMDEgb3JkZXIgYnkgYzE7 CisKKy0tIERpZmZlcmVudCBzdWJzZXRzIGluIGVhY2ggcm93ICh1bmlvbiBvZiBhbGwgY29sdW1u cyB1c2VkLCBtaXNzaW5nIGdldCBERUZBVUxUL05VTEwpCitpbnNlcnQgaW50byBpbnNlcnRzZXRt dWx0aSBzZXQgKGMxPTEwMDIsIGMyPTIwMDIpLCAoYzE9NDAwMiwgYzM9NjAwMik7CitzZWxlY3Qg KiBmcm9tIGluc2VydHNldG11bHRpIHdoZXJlIGMxID49IDEwMDIgb3JkZXIgYnkgYzE7CisKKy0t IENsZWFudXAKK2Ryb3AgdGFibGUgaW5zZXJ0c2V0dGVzdDsKK2Ryb3AgdGFibGUgaW5zZXJ0c2V0 cGs7Citkcm9wIHRhYmxlIGluc2VydHNldG11bHRpOwotLSAKMi40Ny4zCgo= --000000000000322f68064e5e84fe--