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.94.2) (envelope-from ) id 1qWYys-003elP-Bc for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Aug 2023 09:07:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qWYyq-00FUgh-UG for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Aug 2023 09:07:49 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qWYyq-00FUgZ-Ef for pgsql-hackers@lists.postgresql.org; Thu, 17 Aug 2023 09:07:48 +0000 Received: from mail-ot1-x333.google.com ([2607:f8b0:4864:20::333]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qWYyn-000dX4-7B for pgsql-hackers@postgresql.org; Thu, 17 Aug 2023 09:07:47 +0000 Received: by mail-ot1-x333.google.com with SMTP id 46e09a7af769-6bc9811558cso6113796a34.0 for ; Thu, 17 Aug 2023 02:07:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692263263; x=1692868063; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=z9j3D1wT45QoxMg6n4bMDu0LhOLjAtWQivUCq4v/yrE=; b=ZZu4V2zOA+i0lkTlEwjBzyv9Wy76ZWmFu4CIa/+cHzaVm2w0WKpWFNHcvCItI3051v uZRw+bVpSprWHP7tMWNq6IfEUwEJXQRGtuU880mU7hg6oqlPEFIDUb52MQvWi+IzwvNW Xgq0gc25aNIAiRA5lOiCTLKct6hp5d9wGLwHyXBJh/IWtNTeADTguyR5gEHuRlgibViD I8jic7UXpTkFEZ9tcwAKZlYFEgwm7gn2Xg8BkeU6NrdTIvS3Hoi+BghrH0dtN9jpEMLx 7JwqLL54BovSK18Qp+EN9tExSZVk9PDMcmcA6P56UxKJ4psQj2CNf92S6Tsk7QDaO5E9 aXPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692263263; x=1692868063; 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=z9j3D1wT45QoxMg6n4bMDu0LhOLjAtWQivUCq4v/yrE=; b=Vdm7E+NvrPx5mvxkEXB8p7TeMS6+qRB9WjXFC5fyUNM9dFN3tY+KJ2T6OJ7c9dBkDi 4Mp+688t1S3NoZ3CT4X/02STc4gztDuZ5/pXTP/86GuudSqlbqd5EIdDcorVp4W+XEkg b3Rx8VSs48gHz+vj97qDuW4OKJOf/OgM6xpucejC+cWKI76orCf/gi+9BF+Z0PzlYuLq lcc31IBykxrhu14jjcMveEaEg8KyBGlL4WBymKwhkZB8N6B6KFmFLmDQQ5p7VhDyRgAD U8u8j438lL3bD6flnuu+Gbv3kkjE/whCJFu5Uc5u3TgCN7V3QLVYt2X+fAhArAUMuS3O m80A== X-Gm-Message-State: AOJu0Yyi0+oLTrnGCzQlOtjCTSGjYOSviBXPF1kN2xI3XtbfFguZDnJw +q6GltVydvIyXV7K53TijsMAhsCv6/63f7lCJEw= X-Google-Smtp-Source: AGHT+IF8XxkIjXoE2sdDjBaN7nfNzP66WnjXvU5E88NJ+TAiR1wPl6FqaGSu6QLpNpmAjvnxBz7Z9mcwe3rOfHITL8A= X-Received: by 2002:a05:6870:7393:b0:1c1:2dd2:92a3 with SMTP id z19-20020a056870739300b001c12dd292a3mr5009072oam.59.1692263263135; Thu, 17 Aug 2023 02:07:43 -0700 (PDT) MIME-Version: 1.0 References: <3507485.1691090027@sss.pgh.pa.us> <900892914fdc3f477b101d699efb40e0@anastigmatix.net> <903341.1692022214@sss.pgh.pa.us> In-Reply-To: From: Andy Fan Date: Thu, 17 Aug 2023 17:07:31 +0800 Message-ID: Subject: Re: Extract numeric filed in JSONB more effectively To: jian he Cc: Pavel Stehule , Tom Lane , Chapman Flack , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000aad3e406031abedd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000aad3e406031abedd Content-Type: multipart/alternative; boundary="000000000000aad3e306031abedb" --000000000000aad3e306031abedb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi jian: On Thu, Aug 17, 2023 at 12:32=E2=80=AFAM jian he wrote: > On Wed, Aug 16, 2023 at 2:28=E2=80=AFPM Andy Fan wrote: > > > > update with the correct patch.. > > regression=3D# select proname, pg_catalog.pg_get_function_arguments(oid) > from pg_proc > where proname =3D 'jsonb_extract_path_type'; > proname | pg_get_function_arguments > > -------------------------+-----------------------------------------------= --------------------- > jsonb_extract_path_type | from_json jsonb, VARIADIC path_elems > text[], target_oid anyelement > (1 row) > > VARIADIC should be the last argument? > Currently if users call this function directly(usually I don't think so), they will get something wrong. This issue is fixed in the v9 version. To keep the consistency among all the functions, I moved the 'target_type anyelement' to the 1st argument. Thanks for the report! > select jsonb_array_element_type(jsonb'[1231]',0, null::int); > now return null. > Should it return 1231? > No, this is by design. the function is declared as strict, so any NULL inputs yield a NULL output. That's just what we talked above (the markDummyConst section). I don't think this should be addressed. > select jsonb_array_element_type(jsonb'[1231]',0, '1'::jsonb); > will crash > OK, looks I didn't pay enough attention to the 'user directly call jsonb_xx_type' function, so I changed the code in v9 based on your suggestion. Thanks for the review, v9 attached! --=20 Best Regards Andy Fan --000000000000aad3e306031abedb Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi jian:

On Thu, Aug 17, 2023 at 12:32=E2=80=AFAM jian= he <jian.universality@gm= ail.com> wrote:
On Wed, Aug 16, 2023 at 2:28=E2=80=AFPM Andy Fan <zhihui.fan1213@gmail.com= > wrote:
>
> update with the correct patch..

regression=3D# select proname, pg_catalog.pg_get_function_arguments(oid) from pg_proc
where proname =3D=C2=A0 'jsonb_extract_path_type';
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0proname=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= =A0pg_get_function_arguments
-------------------------+-------------------------------------------------= -------------------
=C2=A0jsonb_extract_path_type | from_json jsonb, VARIADIC path_elems
text[], target_oid anyelement
(1 row)

VARIADIC should be the last argument?

C= urrently=C2=A0if users call this function directly(usually I don't=C2= =A0 think
so), they will get something wrong.=C2=A0 =C2=A0This is= sue is fixed in the=C2=A0
v9 version.=C2=A0 To keep the consisten= cy among=C2=A0all the functions,=C2=A0
I moved the 'target_ty= pe anyelement' to the 1st argument.=C2=A0
Thanks for the repo= rt!
=C2=A0
select jsonb_array_element_type(jsonb'[1231]',0, null::int);
now return null.
Should it return 1231?

No, this is by d= esign. the function is declared as strict, so
any NULL inputs yie= ld a NULL output.=C2=A0 That's just what we
talked above (the= markDummyConst section).=C2=A0 I don't
think this should be = addressed.
=C2=A0
select jsonb_array_element_type(jsonb'[1231]',0, '1'::jsonb= );
will crash

OK,=C2=A0 looks I didn't= pay enough attention to the 'user directly call
jsonb_xx_typ= e' function, so I changed the code in v9 based on
your sugges= tion.=C2=A0

Thanks for the review,=C2=A0 = v9 attached!

-- =
Best= Regards
Andy Fan
--000000000000aad3e306031abedb-- --000000000000aad3e406031abedd Content-Type: application/octet-stream; name="test.sql" Content-Disposition: attachment; filename="test.sql" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_llextb6w0 Y3JlYXRlIHRhYmxlIHRiMiAoaWQgaW50LCBhIGpzb25iKTsKaW5zZXJ0IGludG8gdGIyIHZhbHVl cyAoMSwgJ3siYSI6IDEsICJiIjogdHJ1ZSwgImMiOiB7ImQiOiAyfX0nOjpqc29uYiksICgyLCAn WzEsIDIsIDNdJzo6anNvbmIpLCAoMywgJzEnOjpqc29uYik7CgpccHNldCBudWxsIDxudWxsPgoK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tIGpzb25iX29iamVj dF9maWVsZCAgLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKCmV4cGxhaW4gdmVyYm9zZSBzZWxlY3QgKGEtPidhJyk6Om51bWVyaWMs IChhLT4nYScpOjppbnQyLCAoYS0+J2EnKTo6aW50NCwgKGEtPidhJyk6OmludDgsIChhLT4nYScp OjpmbG9hdDQsIChhLT4nYScpOjpmbG9hdDgsIChhLT4nYicpOjpib29sLCAoYS0+J25vdGV4aXN0 cycpOjppbnQyIGZyb20gdGIyIHdoZXJlIGlkID0gMTsKc2VsZWN0IChhLT4nYScpOjpudW1lcmlj LCAoYS0+J2EnKTo6aW50MiwgKGEtPidhJyk6OmludDQsIChhLT4nYScpOjppbnQ4LCAoYS0+J2En KTo6ZmxvYXQ0LCAoYS0+J2EnKTo6ZmxvYXQ4LCAoYS0+J2InKTo6Ym9vbCwgKGEtPidub3RleGlz dHMnKTo6aW50MiBmcm9tIHRiMiB3aGVyZSBpZCA9IDE7CgpzZWxlY3QgKGEtPidhJyk6OmJvb2wg ZnJvbSB0YjIgd2hlcmUgaWQgPSAxOwoKc2VsZWN0IChhLT4nYicpOjppbnQyIGZyb20gdGIyIHdo ZXJlIGlkID0gMTsKCnNlbGVjdCAoYS0+J2MnKTo6bnVtZXJpYyBmcm9tIHRiMiB3aGVyZSBpZCA9 IDE7CgpzZWxlY3QgKGEtPidhJyk6Om51bWVyaWMsIChhLT4nYScpOjppbnQyLCAoYS0+J2EnKTo6 aW50NCwgKGEtPidhJyk6OmludDgsIChhLT4nYScpOjpmbG9hdDQsIChhLT4nYScpOjpmbG9hdDgs IChhLT4nYicpOjpib29sLCAoYS0+J25vdGV4aXN0cycpOjppbnQyIGZyb20gdGIyIHdoZXJlIGlk ID0gMjsKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLSBqc29u Yl9leHRyYWN0X3BhdGggLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCgotLSBhbGwgdGhlIG5vcm1hbCBjYXNlcyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKc2VsZWN0IChhICM+ICd7ImEifScpOjpudW1lcmljLCAgKGEgIz4gJ3siYSIsICJi In0nKTo6bnVtZXJpYywgIChhICM+ICd7ImMiLCAiZCJ9Jyk6Om51bWVyaWMgZnJvbSB0YjI7Cgot LSBmaWVsZCBkb2Vzbid0IGV4aXN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKc2VsZWN0IChhICM+ICd7 ImEiLCAiYiJ9Jyk6Om51bWVyaWMgZnJvbSB0YjI7CnNlbGVjdCAoYSAjPiAneyJub3RleGlzdHMi fScpOjpudW1lcmljIGZyb20gdGIyOwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCi0tIGpzb25iX2FycmF5X2VsZW1lbnQtLS0tLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCmV4cGxhaW4gdmVyYm9zZSBz ZWxlY3QgYSwgIChhLT4wKSBhcyBpZHgwLCAoYS0+MCk6Om51bWVyaWMgZnJvbSB0YjI7CgpzZWxl Y3QgYSwgIChhLT4wKSBhcyBpZHgwLCAoYS0+MCk6Om51bWVyaWMgZnJvbSB0YjI7CgotLSBvdXQg b2YgcmFuZ2UgY2FzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKc2VsZWN0IGEsIGEtPjEsIChhLT4x KTo6bnVtZXJpYyBmcm9tIHRiMjsK --000000000000aad3e406031abedd Content-Type: application/octet-stream; name="v9-0001-optimize-casting-jsonb-to-a-given-type.patch" Content-Disposition: attachment; filename="v9-0001-optimize-casting-jsonb-to-a-given-type.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_llextesn1 RnJvbSBjNGIxYWUxM2EwZjRiYTI4OTcyODM1ZmZhNGM5ODUwZTJlMGRiZGE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IEZhbiA8emhpaHVpLmZhbjEyMTNAZ21haWwuY29tPgpE YXRlOiBXZWQsIDE2IEF1ZyAyMDIzIDE0OjA0OjI3ICswODAwClN1YmplY3Q6IFtQQVRDSCB2OV0g b3B0aW1pemUgY2FzdGluZyBqc29uYiB0byBhIGdpdmVuIHR5cGUuCgpQcmV2aW91c2x5IGFmdGVy IHdlIGdldCBhIEpzb25iVmFsdWUsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0bwpKc29uYiBmaXJz dCB0aGVuIGNhc3QgdGhlIEpzb25iIHRvIHRoZSBnaXZlbiB0eXBlLiBJbiB0aGlzIHBhdGNoLAp3 ZSBjb3ZlcnQgdGhlIEpzb25iVmFsdWUgdG8gdGhlIGRlc2lyZWQgdHlwZSBkaXJlY3RseS4KLS0t CiBzcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyAgICAgICB8ICAzMCArKysrKwogc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgICAgICAgfCAxNzcgKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMgICB8IDExNSArKysrKysr KysrKy0tLS0tLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oICAgIHwgICAyICst CiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICB8ICAzMiArKystLQogc3JjL2lu Y2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMv anNvbmIuaCAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29u Yi5vdXQgfCAxNzggKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogc3JjL3Rlc3QvcmVncmVz cy9zcWwvanNvbmIuc3FsICAgICAgfCAgNTYgKysrKysrLS0tCiA5IGZpbGVzIGNoYW5nZWQsIDQ2 MiBpbnNlcnRpb25zKCspLCAxMzEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbm9kZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwppbmRl eCAwZTdlNmU0NmQ5NC4uOWNiOTE3OGYwMWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVz L21ha2VmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCkBAIC0yMCw2 ICsyMCw3IEBACiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMv bm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAidXRpbHMvZXJyY29kZXMuaCIKKyNpbmNsdWRlICJ1dGls cy9mbWdycHJvdG9zLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAKIApAQCAtMzUy LDYgKzM1MywzNSBAQCBtYWtlTnVsbENvbnN0KE9pZCBjb25zdHR5cGUsIGludDMyIGNvbnN0dHlw bW9kLCBPaWQgY29uc3Rjb2xsaWQpCiAJCQkJCSB0eXBCeVZhbCk7CiB9CiAKKy8qCisgKiBtYWtl RHVtbXlDb25zdAorICoJIGNyZWF0ZSBhIENvbnN0IG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIHR5 cGUvdHlwbW9kLgorICoKKyAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSByb3V0aW5lIHRvIGNyZWF0 ZSBhIENvbnN0IHdoaWNoIG9ubHkgdGhlCisgKiB0eXBlIGlzIGludGVyZXN0aW5nIGJ1dCBtYWtl IHN1cmUgdGhlIHZhbHVlIGlzIGFjY2Vzc2libGUuCisgKi8KK0NvbnN0ICoKK21ha2VEdW1teUNv bnN0KE9pZCBjb25zdHR5cGUsIGludDMyIGNvbnN0dHlwbW9kLCBPaWQgY29uc3Rjb2xsaWQpCit7 CisJaW50MTYJCXR5cExlbjsKKwlib29sCQl0eXBCeVZhbDsKKwlDb25zdAkJKmM7CisJRGF0dW0J CXZhbCA9IDA7CisKKworCWdldF90eXBsZW5ieXZhbChjb25zdHR5cGUsICZ0eXBMZW4sICZ0eXBC eVZhbCk7CisKKwlpZiAoY29uc3R0eXBlID09IE5VTUVSSUNPSUQpCisJCXZhbCA9IERpcmVjdEZ1 bmN0aW9uQ2FsbDEobnVtZXJpY19pbiwgQ1N0cmluZ0dldERhdHVtKCIwIikpOworCWVsc2UgaWYg KCF0eXBCeVZhbCkKKwkJZWxvZyhFUlJPUiwgImNyZWF0ZSBkdW1teSBjb25zdCBmb3IgdHlwZSAl dSBpcyBub3Qgc3VwcG9ydGVkLiIsIGNvbnN0dHlwZSk7CisKKwkvKiBYWFg6IGhlcmUgSSBhc3N1 bWUgY29uc3R2YWx1ZT0wIGlzIGFjY2Vzc2libGUgZm9yIGNvbnN0Ynl2YWwuKi8KKwljID0gbWFr ZUNvbnN0KGNvbnN0dHlwZSwgY29uc3R0eXBtb2QsIDAsIChpbnQpIHR5cExlbiwgdmFsLCBmYWxz ZSwgdHlwQnlWYWwpOworCisJcmV0dXJuIGM7Cit9CisKIC8qCiAgKiBtYWtlQm9vbENvbnN0IC0K ICAqCSAgY3JlYXRlcyBhIENvbnN0IG5vZGUgcmVwcmVzZW50aW5nIGEgYm9vbGVhbiB2YWx1ZSAo Y2FuIGJlIE5VTEwgdG9vKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25i LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwppbmRleCA5NzgxODUyYjBjYi4uMTQ4 YzFlMmUxOTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCkBAIC0xNywxMSArMTcsMTQgQEAKICNpbmNs dWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNp bmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVk ZSAibm9kZXMvc3VwcG9ydG5vZGVzLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1 ZGUgInV0aWxzL2RhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRldGltZS5oIgorI2luY2x1ZGUg InV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbi5oIgogI2luY2x1ZGUgInV0 aWxzL2pzb25iLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmZ1bmNzLmgiCkBAIC0yMDM4LDYgKzIw NDEsMTgwIEBAIGNhbm5vdENhc3RKc29uYlZhbHVlKGVudW0gamJ2VHlwZSB0eXBlLCBjb25zdCBj aGFyICpzcWx0eXBlKQogCWVsb2coRVJST1IsICJ1bmtub3duIGpzb25iIHR5cGU6ICVkIiwgKGlu dCkgdHlwZSk7CiB9CiAKK3N0YXRpYyBib29sCitqc29uYl9jYXN0X2lzX29wdGltaXplZChPaWQg dGFyZ2V0X3R5cGUpCit7CisJc3dpdGNoKHRhcmdldF90eXBlKQorCXsKKwkJY2FzZSBOVU1FUklD T0lEOgorCQljYXNlIEJPT0xPSUQ6CisJCWNhc2UgSU5UMk9JRDoKKwkJY2FzZSBJTlQ0T0lEOgor CQljYXNlIElOVDhPSUQ6CisJCWNhc2UgRkxPQVQ0T0lEOgorCQljYXNlIEZMT0FUOE9JRDoKKwkJ CXJldHVybiB0cnVlOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIGZhbHNlOworCX0KK30KKworRGF0 dW0KK2pzb25iX2Nhc3Rfc3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCU5vZGUJICAgKnJh d3JlcSA9IChOb2RlICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJaWYgKElzQShyYXdyZXEs IFN1cHBvcnRSZXF1ZXN0U2ltcGxpZnkpKQorCXsKKwkJU3VwcG9ydFJlcXVlc3RTaW1wbGlmeSAq cmVxID0gKFN1cHBvcnRSZXF1ZXN0U2ltcGxpZnkgKikgcmF3cmVxOworCQlGdW5jRXhwcgkqZmV4 cHIgPSBwYWxsb2Moc2l6ZW9mKEZ1bmNFeHByKSk7CisJCU9wRXhwcgkJKm9wZXhwcjsKKwkJT2lk CQkJbmV3X2Z1bmNfaWQgPSBJbnZhbGlkT2lkOworCisJCW1lbWNweShmZXhwciwgcmVxLT5mY2Fs bCwgc2l6ZW9mKEZ1bmNFeHByKSk7CisKKwkJb3BleHByID0gKE9wRXhwciAqKSBsaW5pdGlhbChm ZXhwci0+YXJncyk7CisKKwkJaWYgKCFJc0Eob3BleHByLCBPcEV4cHIpIHx8CisJCQkhanNvbmJf Y2FzdF9pc19vcHRpbWl6ZWQoZmV4cHItPmZ1bmNyZXN1bHR0eXBlKSkKKwkJeworCQkJLyogbm90 IHRoZSBkZXNpcmVkIHBhdHRlcm4uICovCisJCQlQR19SRVRVUk5fUE9JTlRFUihmZXhwcik7CisJ CX0KKworCQlpZiAob3BleHByLT5vcGZ1bmNpZCAgPT0gRl9KU09OQl9PQkpFQ1RfRklFTEQpCisJ CQluZXdfZnVuY19pZCA9IEZfSlNPTkJfT0JKRUNUX0ZJRUxEX1RZUEU7CisJCWVsc2UgaWYgKG9w ZXhwci0+b3BmdW5jaWQgPT0gRl9KU09OQl9BUlJBWV9FTEVNRU5UKQorCQkJbmV3X2Z1bmNfaWQg PSBGX0pTT05CX0FSUkFZX0VMRU1FTlRfVFlQRTsKKwkJZWxzZSBpZiAob3BleHByLT5vcGZ1bmNp ZCA9PSBGX0pTT05CX0VYVFJBQ1RfUEFUSCkKKwkJCW5ld19mdW5jX2lkID0gRl9KU09OQl9FWFRS QUNUX1BBVEhfVFlQRTsKKworCQlpZiAoT2lkSXNWYWxpZChuZXdfZnVuY19pZCkpCisJCXsKKwkJ CUNvbnN0CSp0YXJnZXQgPSAgbWFrZUR1bW15Q29uc3QoZmV4cHItPmZ1bmNyZXN1bHR0eXBlLCAw LCBJbnZhbGlkT2lkKTsKKwkJCWZleHByLT5mdW5jaWQgPSBuZXdfZnVuY19pZDsKKwkJCWZleHBy LT5hcmdzID0gb3BleHByLT5hcmdzOworCQkJZmV4cHItPmFyZ3MgPSBsaXN0X2luc2VydF9udGgo ZmV4cHItPmFyZ3MsIDAsIHRhcmdldCk7CisJCX0KKworCQlQR19SRVRVUk5fUE9JTlRFUihmZXhw cik7CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7Cit9CisKK0RhdHVtCitjYXN0X2pz b25idmFsdWVfdG9fdHlwZShKc29uYlZhbHVlICp2LCBPaWQgdGFyZ2V0T2lkKQoreworCXN3aXRj aCh0YXJnZXRPaWQpCisJeworCQlEYXR1bQlyZXRWYWx1ZTsKKworCQljYXNlIEJPT0xPSUQ6CisJ CQlpZiAodi0+dHlwZSAhPSBqYnZCb29sKQorCQkJCWNhbm5vdENhc3RKc29uYlZhbHVlKHYtPnR5 cGUsICJib29sIik7CisJCQlQR19SRVRVUk5fQk9PTCh2LT52YWwuYm9vbGVhbik7CisKKwkJY2Fz ZSBOVU1FUklDT0lEOgorCQkJaWYgKHYtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQljYW5ub3RD YXN0SnNvbmJWYWx1ZSh2LT50eXBlLCAibnVtZXJpYyIpOworCQkJUEdfUkVUVVJOX05VTUVSSUMo di0+dmFsLm51bWVyaWMpOworCQljYXNlIElOVDJPSUQ6CisJCQlpZiAodi0+dHlwZSAhPSBqYnZO dW1lcmljKQorCQkJCWNhbm5vdENhc3RKc29uYlZhbHVlKHYtPnR5cGUsICJzbWFsbGludCIpOwor CQkJcmV0VmFsdWUgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfaW50MiwKKwkJCQkJCQkJ CQkgICBOdW1lcmljR2V0RGF0dW0odi0+dmFsLm51bWVyaWMpKTsKKwkJCVBHX1JFVFVSTl9EQVRV TShyZXRWYWx1ZSk7CisJCWNhc2UgSU5UNE9JRDoKKwkJCWlmICh2LT50eXBlICE9IGpidk51bWVy aWMpCisJCQkJY2Fubm90Q2FzdEpzb25iVmFsdWUodi0+dHlwZSwgImludGVnZXIiKTsKKwkJCXJl dFZhbHVlID0gRGlyZWN0RnVuY3Rpb25DYWxsMShudW1lcmljX2ludDQsCisJCQkJCQkJCQkJICAg TnVtZXJpY0dldERhdHVtKHYtPnZhbC5udW1lcmljKSk7CisJCQlQR19SRVRVUk5fREFUVU0ocmV0 VmFsdWUpOworCisJCWNhc2UgSU5UOE9JRDoKKwkJCWlmICh2LT50eXBlICE9IGpidk51bWVyaWMp CisJCQkJY2Fubm90Q2FzdEpzb25iVmFsdWUodi0+dHlwZSwgImJpZ2ludCIpOworCQkJcmV0VmFs dWUgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfaW50OCwKKwkJCQkJCQkJCQkgICBOdW1l cmljR2V0RGF0dW0odi0+dmFsLm51bWVyaWMpKTsKKwkJCVBHX1JFVFVSTl9EQVRVTShyZXRWYWx1 ZSk7CisKKwkJY2FzZSBGTE9BVDRPSUQ6CisJCQlpZiAodi0+dHlwZSAhPSBqYnZOdW1lcmljKQor CQkJCWNhbm5vdENhc3RKc29uYlZhbHVlKHYtPnR5cGUsICJyZWFsIik7CisJCQlyZXRWYWx1ZSA9 IERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19mbG9hdDQsCisJCQkJCQkJCQkJICAgTnVtZXJp Y0dldERhdHVtKHYtPnZhbC5udW1lcmljKSk7CisJCQlQR19SRVRVUk5fREFUVU0ocmV0VmFsdWUp OworCisJCWNhc2UgRkxPQVQ4T0lEOgorCQkJaWYgKHYtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJ CQljYW5ub3RDYXN0SnNvbmJWYWx1ZSh2LT50eXBlLCAiZG91YmxlIHByZWNpc2lvbiIpOworCQkJ cmV0VmFsdWUgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfZmxvYXQ4LAorCQkJCQkJCQkJ CSAgIE51bWVyaWNHZXREYXR1bSh2LT52YWwubnVtZXJpYykpOworCQkJUEdfUkVUVVJOX0RBVFVN KHJldFZhbHVlKTsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImNhc3QganNvbmIgdG8g dHlwZSAldSBpcyBub3QgYWxsb3dlZCIsIHRhcmdldE9pZCk7CisJCQlicmVhazsKKwl9CisKKwlQ R19SRVRVUk5fUE9JTlRFUihOVUxMKTsKK30KKworRGF0dW0KK2pzb25iX29iamVjdF9maWVsZF90 eXBlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJdGFyZ2V0T2lkID0gZ2V0X2ZuX2V4cHJf YXJndHlwZShmY2luZm8tPmZsaW5mbywgMCk7CisJSnNvbmIJICAgKmpiID0gUEdfR0VUQVJHX0pT T05CX1AoMSk7CisJdGV4dAkgICAqa2V5ID0gUEdfR0VUQVJHX1RFWFRfUFAoMik7CisKKwlKc29u YlZhbHVlICp2OworCUpzb25iVmFsdWUJdmJ1ZjsKKworCWlmICghSkJfUk9PVF9JU19PQkpFQ1Qo amIpKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJdiA9IGdldEtleUpzb25WYWx1ZUZyb21Db250 YWluZXIoJmpiLT5yb290LAorCQkJCQkJCQkJIFZBUkRBVEFfQU5ZKGtleSksCisJCQkJCQkJCQkg VkFSU0laRV9BTllfRVhIRFIoa2V5KSwKKwkJCQkJCQkJCSAmdmJ1Zik7CisKKwlpZiAodiA9PSBO VUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJcmV0dXJuIGNhc3RfanNvbmJ2YWx1ZV90b190 eXBlKHYsIHRhcmdldE9pZCk7Cit9CisKK0RhdHVtCitqc29uYl9hcnJheV9lbGVtZW50X3R5cGUo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlPaWQJCQl0YXJnZXRPaWQgPSBnZXRfZm5fZXhwcl9hcmd0 eXBlKGZjaW5mby0+ZmxpbmZvLCAwKTsKKwlKc29uYgkgICAqamIgPSBQR19HRVRBUkdfSlNPTkJf UCgxKTsKKwlpbnQJCQllbGVtZW50ID0gUEdfR0VUQVJHX0lOVDMyKDIpOworCisJSnNvbmJWYWx1 ZSAqdjsKKworCWlmICghSkJfUk9PVF9JU19BUlJBWShqYikpCisJCVBHX1JFVFVSTl9OVUxMKCk7 CisKKwkvKiBIYW5kbGUgbmVnYXRpdmUgc3Vic2NyaXB0ICovCisJaWYgKGVsZW1lbnQgPCAwKQor CXsKKwkJdWludDMyCQluZWxlbWVudHMgPSBKQl9ST09UX0NPVU5UKGpiKTsKKworCQlpZiAoLWVs ZW1lbnQgPiBuZWxlbWVudHMpCisJCQlQR19SRVRVUk5fTlVMTCgpOworCQllbHNlCisJCQllbGVt ZW50ICs9IG5lbGVtZW50czsKKwl9CisKKwl2ID0gZ2V0SXRoSnNvbmJWYWx1ZUZyb21Db250YWlu ZXIoJmpiLT5yb290LCBlbGVtZW50KTsKKwlpZiAodiA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVM TCgpOworCisJcmV0dXJuIGNhc3RfanNvbmJ2YWx1ZV90b190eXBlKHYsIHRhcmdldE9pZCk7Cit9 CisKIERhdHVtCiBqc29uYl9ib29sKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv anNvbmZ1bmNzLmMKaW5kZXggYTRiZmE1ZTQwNDAuLmJiNGNhODA3ZDc0IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25mdW5jcy5jCkBAIC00OTIsNiArNDkyLDcgQEAgc3RhdGljIEpzb25QYXJzZUVycm9y VHlwZSB0cmFuc2Zvcm1fc3RyaW5nX3ZhbHVlc19vYmplY3RfZmllbGRfc3RhcnQodm9pZCAqc3Rh dGUKIHN0YXRpYyBKc29uUGFyc2VFcnJvclR5cGUgdHJhbnNmb3JtX3N0cmluZ192YWx1ZXNfYXJy YXlfZWxlbWVudF9zdGFydCh2b2lkICpzdGF0ZSwgYm9vbCBpc251bGwpOwogc3RhdGljIEpzb25Q YXJzZUVycm9yVHlwZSB0cmFuc2Zvcm1fc3RyaW5nX3ZhbHVlc19zY2FsYXIodm9pZCAqc3RhdGUs IGNoYXIgKnRva2VuLCBKc29uVG9rZW5UeXBlIHRva2VudHlwZSk7CiAKK3N0YXRpYyBKc29uYlZh bHVlICpqc29uYl9nZXRfanNvbmJ2YWx1ZShKc29uYiAqamIsIERhdHVtICpwYXRoLCBpbnQgbnBh dGgsIGJvb2wgKmlzbnVsbCk7CiAKIC8qCiAgKiBwZ19wYXJzZV9qc29uX29yX2VycnNhdmUKQEAg LTE0NzMsNiArMTQ3NCw0MCBAQCBnZXRfc2NhbGFyKHZvaWQgKnN0YXRlLCBjaGFyICp0b2tlbiwg SnNvblRva2VuVHlwZSB0b2tlbnR5cGUpCiAJcmV0dXJuIEpTT05fU1VDQ0VTUzsKIH0KIAorRGF0 dW0KK2pzb25iX2V4dHJhY3RfcGF0aF90eXBlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJ dGFyZ2V0T2lkID0gZ2V0X2ZuX2V4cHJfYXJndHlwZShmY2luZm8tPmZsaW5mbywgMCk7CisJSnNv bmIJICAgKmpiID0gUEdfR0VUQVJHX0pTT05CX1AoMSk7CisJQXJyYXlUeXBlICAqcGF0aCA9IFBH X0dFVEFSR19BUlJBWVRZUEVfUCgyKTsKKworCUpzb25iVmFsdWUgKnY7CisKKwlEYXR1bQkgICAq cGF0aHRleHQ7CisJYm9vbAkgICAqcGF0aG51bGxzOworCWJvb2wJCWlzbnVsbCA9IGZhbHNlOwor CWludAkJCW5wYXRoOworCisJLyoKKwkgKiBJZiB0aGUgYXJyYXkgY29udGFpbnMgYW55IG51bGwg ZWxlbWVudHMsIHJldHVybiBOVUxMLCBvbiB0aGUgZ3JvdW5kcworCSAqIHRoYXQgeW91J2QgaGF2 ZSBnb3R0ZW4gTlVMTCBpZiBhbnkgUkhTIHZhbHVlIHdlcmUgTlVMTCBpbiBhIG5lc3RlZAorCSAq IHNlcmllcyBvZiBhcHBsaWNhdGlvbnMgb2YgdGhlIC0+IG9wZXJhdG9yLiAgKE5vdGU6IGJlY2F1 c2Ugd2UgYWxzbworCSAqIHJldHVybiBOVUxMIGZvciBlcnJvciBjYXNlcyBzdWNoIGFzIG5vLXN1 Y2gtZmllbGQsIHRoaXMgaXMgdHJ1ZQorCSAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbnRlbnRzIG9m IHRoZSByZXN0IG9mIHRoZSBhcnJheS4pCisJICovCisJaWYgKGFycmF5X2NvbnRhaW5zX251bGxz KHBhdGgpKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJZGVjb25zdHJ1Y3RfYXJyYXlfYnVpbHRp bihwYXRoLCBURVhUT0lELCAmcGF0aHRleHQsICZwYXRobnVsbHMsICZucGF0aCk7CisKKwl2ID0g anNvbmJfZ2V0X2pzb25idmFsdWUoamIsIHBhdGh0ZXh0LCBucGF0aCwgJmlzbnVsbCk7CisKKwlp ZiAoaXNudWxsKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJcmV0dXJuIGNhc3RfanNvbmJ2YWx1 ZV90b190eXBlKHYsIHRhcmdldE9pZCk7Cit9CisKIERhdHVtCiBqc29uYl9leHRyYWN0X3BhdGgo UEdfRlVOQ1RJT05fQVJHUykKIHsKQEAgLTE1MTYsNTIgKzE1NTEsMzYgQEAgZ2V0X2pzb25iX3Bh dGhfYWxsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIGFzX3RleHQpCiAJCVBHX1JFVFVS Tl9EQVRVTShyZXMpOwogfQogCi1EYXR1bQotanNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBE YXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGwsIGJvb2wgYXNfdGV4dCkKKworc3Rh dGljIEpzb25iVmFsdWUgKgoranNvbmJfZ2V0X2pzb25idmFsdWUoSnNvbmIgKmpiLCBEYXR1bSAq cGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGwpCiB7CisJYm9vbCBoYXZlX29iamVjdCA9IGZh bHNlLCBoYXZlX2FycmF5ID0gZmFsc2U7CiAJSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciA9ICZq Yi0+cm9vdDsKKwlpbnQgaTsKIAlKc29uYlZhbHVlICpqYnZwID0gTlVMTDsKLQlpbnQJCQlpOwot CWJvb2wJCWhhdmVfb2JqZWN0ID0gZmFsc2UsCi0JCQkJaGF2ZV9hcnJheSA9IGZhbHNlOwogCi0J KmlzbnVsbCA9IGZhbHNlOworCS8qCisJICogSWYgdGhlIGFycmF5IGlzIGVtcHR5LCByZXR1cm4g dGhlIGVudGlyZSBMSFMgb2JqZWN0LCBvbiB0aGUgZ3JvdW5kcworCSAqIHRoYXQgd2Ugc2hvdWxk IGRvIHplcm8gZmllbGQgb3IgZWxlbWVudCBleHRyYWN0aW9ucy4KKwkgKi8KKwlpZiAobnBhdGgg PD0gMCkKKwl7CisJCUpzb25iVmFsdWUgKnJlcyA9IE5VTEw7CisJCWlmIChKQl9ST09UX0lTX0FS UkFZKGpiKSAmJiBKQl9ST09UX0lTX1NDQUxBUihqYikpCisJCQlyZXR1cm4gZ2V0SXRoSnNvbmJW YWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLCAwKTsKKworCQkvKiBOQjogcmVzIGlzIGEgamJ2 QmluYXJ5IEpzb25iVmFsdWUgKi8KKwkJcmVzID0gcGFsbG9jMChzaXplb2YoSnNvbmJWYWx1ZSkp OworCQlKc29uYlRvSnNvbmJWYWx1ZShqYiwgcmVzKTsKKwkJcmV0dXJuIHJlczsKKwl9CiAKIAkv KiBJZGVudGlmeSB3aGV0aGVyIHdlIGhhdmUgb2JqZWN0LCBhcnJheSwgb3Igc2NhbGFyIGF0IHRv cC1sZXZlbCAqLwogCWlmIChKQl9ST09UX0lTX09CSkVDVChqYikpCiAJCWhhdmVfb2JqZWN0ID0g dHJ1ZTsKIAllbHNlIGlmIChKQl9ST09UX0lTX0FSUkFZKGpiKSAmJiAhSkJfUk9PVF9JU19TQ0FM QVIoamIpKQogCQloYXZlX2FycmF5ID0gdHJ1ZTsKLQllbHNlCi0JewotCQlBc3NlcnQoSkJfUk9P VF9JU19BUlJBWShqYikgJiYgSkJfUk9PVF9JU19TQ0FMQVIoamIpKTsKLQkJLyogRXh0cmFjdCB0 aGUgc2NhbGFyIHZhbHVlLCBpZiBpdCBpcyB3aGF0IHdlJ2xsIHJldHVybiAqLwotCQlpZiAobnBh dGggPD0gMCkKLQkJCWpidnAgPSBnZXRJdGhKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWlu ZXIsIDApOwotCX0KLQotCS8qCi0JICogSWYgdGhlIGFycmF5IGlzIGVtcHR5LCByZXR1cm4gdGhl IGVudGlyZSBMSFMgb2JqZWN0LCBvbiB0aGUgZ3JvdW5kcwotCSAqIHRoYXQgd2Ugc2hvdWxkIGRv IHplcm8gZmllbGQgb3IgZWxlbWVudCBleHRyYWN0aW9ucy4gIEZvciB0aGUKLQkgKiBub24tc2Nh bGFyIGNhc2Ugd2UgY2FuIGp1c3QgaGFuZCBiYWNrIHRoZSBvYmplY3Qgd2l0aG91dCBtdWNoIHdv cmsuIEZvcgotCSAqIHRoZSBzY2FsYXIgY2FzZSwgZmFsbCB0aHJvdWdoIGFuZCBkZWFsIHdpdGgg dGhlIHZhbHVlIGJlbG93IHRoZSBsb29wLgotCSAqIChUaGlzIGluY29uc2lzdGVuY3kgYXJpc2Vz IGJlY2F1c2UgdGhlcmUncyBubyBlYXN5IHdheSB0byBnZW5lcmF0ZSBhCi0JICogSnNvbmJWYWx1 ZSBkaXJlY3RseSBmb3Igcm9vdC1sZXZlbCBjb250YWluZXJzLikKLQkgKi8KLQlpZiAobnBhdGgg PD0gMCAmJiBqYnZwID09IE5VTEwpCi0JewotCQlpZiAoYXNfdGV4dCkKLQkJewotCQkJcmV0dXJu IFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3RleHQoSnNvbmJUb0NTdHJpbmcoTlVMTCwKLQkJ CQkJCQkJCQkJCQkJCQkgIGNvbnRhaW5lciwKLQkJCQkJCQkJCQkJCQkJCQkgIFZBUlNJWkUoamIp KSkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogbm90IHRleHQgbW9kZSAtIGp1c3QgaGFuZCBi YWNrIHRoZSBqc29uYiAqLwotCQkJUEdfUkVUVVJOX0pTT05CX1AoamIpOwotCQl9Ci0JfQogCiAJ Zm9yIChpID0gMDsgaSA8IG5wYXRoOyBpKyspCiAJewpAQCAtMTU4Niw3ICsxNjA1LDcgQEAganNv bmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICpp c251bGwsIGJvb2wgYXNfdGV4dCkKIAkJCWlmIChlbmRwdHIgPT0gaW5kZXh0ZXh0IHx8ICplbmRw dHIgIT0gJ1wwJyB8fCBlcnJubyAhPSAwKQogCQkJewogCQkJCSppc251bGwgPSB0cnVlOwotCQkJ CXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAK IAkJCWlmIChsaW5kZXggPj0gMCkKQEAgLTE2MDcsNyArMTYyNiw3IEBAIGpzb25iX2dldF9lbGVt ZW50KEpzb25iICpqYiwgRGF0dW0gKnBhdGgsIGludCBucGF0aCwgYm9vbCAqaXNudWxsLCBib29s IGFzX3RleHQpCiAJCQkJaWYgKGxpbmRleCA9PSBJTlRfTUlOIHx8IC1saW5kZXggPiBuZWxlbWVu dHMpCiAJCQkJewogCQkJCQkqaXNudWxsID0gdHJ1ZTsKLQkJCQkJcmV0dXJuIFBvaW50ZXJHZXRE YXR1bShOVUxMKTsKKwkJCQkJcmV0dXJuIE5VTEw7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQkJaW5k ZXggPSBuZWxlbWVudHMgKyBsaW5kZXg7CkBAIC0xNjE5LDEzICsxNjM4LDEzIEBAIGpzb25iX2dl dF9lbGVtZW50KEpzb25iICpqYiwgRGF0dW0gKnBhdGgsIGludCBucGF0aCwgYm9vbCAqaXNudWxs LCBib29sIGFzX3RleHQpCiAJCXsKIAkJCS8qIHNjYWxhciwgZXh0cmFjdGlvbiB5aWVsZHMgYSBu dWxsICovCiAJCQkqaXNudWxsID0gdHJ1ZTsKLQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVM TCk7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQogCiAJCWlmIChqYnZwID09IE5VTEwpCiAJCXsKIAkJ CSppc251bGwgPSB0cnVlOwotCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwkJCXJl dHVybiBOVUxMOwogCQl9CiAJCWVsc2UgaWYgKGkgPT0gbnBhdGggLSAxKQogCQkJYnJlYWs7CkBA IC0xNjQ0LDYgKzE2NjMsMjIgQEAganNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAq cGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGwsIGJvb2wgYXNfdGV4dCkKIAkJCWhhdmVfYXJy YXkgPSBmYWxzZTsKIAkJfQogCX0KKwlyZXR1cm4gamJ2cDsKK30KKworLyoKKyAqIFJldHVybiBq c29uYiBkYXR1bSBvciBqc29uYi1hcy10ZXh0IGRhdHVtLgorICovCitEYXR1bQoranNvbmJfZ2V0 X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGws IGJvb2wgYXNfdGV4dCkKK3sKKwlKc29uYlZhbHVlICpqYnZwID0gTlVMTDsKKwkqaXNudWxsID0g ZmFsc2U7CisKKwlqYnZwID0ganNvbmJfZ2V0X2pzb25idmFsdWUoamIsIHBhdGgsIG5wYXRoLCBp c251bGwpOworCisJaWYgKCppc251bGwpCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 CiAKIAlpZiAoYXNfdGV4dCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2Nh dHZlcnNpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCmluZGV4IGY1MDdi NDliYjI4Li44YTg5NmY5YWFkMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2 ZXJzaW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKQEAgLTU3LDYg KzU3LDYgQEAKICAqLwogCiAvKgkJCQkJCQl5eXl5bW1kZE4gKi8KLSNkZWZpbmUgQ0FUQUxPR19W RVJTSU9OX05PCTIwMjMwNzI2MQorI2RlZmluZSBDQVRBTE9HX1ZFUlNJT05fTk8JMjAyMzA4MTcx CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggNjk5NjA3Mzk4OWEuLmI2ODQ0 NTM3NTI5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTQ1NzUsMjUgKzQ1NzUsMjYgQEAK ICAgcHJvbmFtZSA9PiAncGdfbHNuJywgcHJvcmV0dHlwZSA9PiAncGdfbHNuJywgcHJvYXJndHlw ZXMgPT4gJ251bWVyaWMnLAogICBwcm9zcmMgPT4gJ251bWVyaWNfcGdfbHNuJyB9LAogCi17IG9p ZCA9PiAnMzU1NicsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGJvb2xlYW4nLAoreyBvaWQg PT4gJzM1NTYnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBib29sZWFuJywgcHJvc3VwcG9y dCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKICAgcHJvbmFtZSA9PiAnYm9vbCcsIHByb3JldHR5 cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4gJ2pzb25i X2Jvb2wnIH0sCiB7IG9pZCA9PiAnMzQ0OScsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIG51 bWVyaWMnLAotICBwcm9uYW1lID0+ICdudW1lcmljJywgcHJvcmV0dHlwZSA9PiAnbnVtZXJpYycs IHByb2FyZ3R5cGVzID0+ICdqc29uYicsCisgIHByb25hbWUgPT4gJ251bWVyaWMnLCBwcm9zdXBw b3J0ID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnLAorICBwcm9yZXR0eXBlID0+ICdudW1lcmljJywg cHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9udW1lcmljJyB9LAot eyBvaWQgPT4gJzM0NTAnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBpbnQyJywKK3sgb2lk ID0+ICczNDUwJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gaW50MicsIHByb3N1cHBvcnQg PT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsCiAgIHByb25hbWUgPT4gJ2ludDInLCBwcm9yZXR0eXBl ID0+ICdpbnQyJywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9p bnQyJyB9LAoteyBvaWQgPT4gJzM0NTEnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBpbnQ0 JywKK3sgb2lkID0+ICczNDUxJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gaW50NCcsIHBy b3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsCiAgIHByb25hbWUgPT4gJ2ludDQnLCBw cm9yZXR0eXBlID0+ICdpbnQ0JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ ICdqc29uYl9pbnQ0JyB9LAoteyBvaWQgPT4gJzM0NTInLCBkZXNjciA9PiAnY29udmVydCBqc29u YiB0byBpbnQ4JywKK3sgb2lkID0+ICczNDUyJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8g aW50OCcsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsCiAgIHByb25hbWUgPT4g J2ludDgnLCBwcm9yZXR0eXBlID0+ICdpbnQ4JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAg cHJvc3JjID0+ICdqc29uYl9pbnQ4JyB9LAoteyBvaWQgPT4gJzM0NTMnLCBkZXNjciA9PiAnY29u dmVydCBqc29uYiB0byBmbG9hdDQnLAoreyBvaWQgPT4gJzM0NTMnLCBkZXNjciA9PiAnY29udmVy dCBqc29uYiB0byBmbG9hdDQnLCBwcm9zdXBwb3J0ID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnLAog ICBwcm9uYW1lID0+ICdmbG9hdDQnLCBwcm9yZXR0eXBlID0+ICdmbG9hdDQnLCBwcm9hcmd0eXBl cyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4gJ2pzb25iX2Zsb2F0NCcgfSwKLXsgb2lkID0+ICcy NTgwJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gZmxvYXQ4JywKK3sgb2lkID0+ICcyNTgw JywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gZmxvYXQ4JywgcHJvc3VwcG9ydCA9PiAnanNv bmJfY2FzdF9zdXBwb3J0JywKICAgcHJvbmFtZSA9PiAnZmxvYXQ4JywgcHJvcmV0dHlwZSA9PiAn ZmxvYXQ4JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9mbG9h dDgnIH0sCiAKQEAgLTk5MjgsNiArOTkyOSwxMyBAQAogICBwcm9uYW1lID0+ICdqc29uYl9vYmpl Y3RfZmllbGRfdGV4dCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAn anNvbmIgdGV4dCcsIHByb2FyZ25hbWVzID0+ICd7ZnJvbV9qc29uLCBmaWVsZF9uYW1lfScsCiAg IHByb3NyYyA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX3RleHQnIH0sCit7IG9pZCA9PiAnMzgxMycs IGRlc2NyID0+ICdyZXR1cm4gYSBnaXZlbiB0eXBlIHNwZWNpZmllZCBpbiBkZXNpcmVkX3R5cGUg ZnJvbSBqc29uYiBmaWVsZCcsCisgIHByb25hbWUgPT4gJ2pzb25iX29iamVjdF9maWVsZF90eXBl JywgcHJvcmV0dHlwZSA9PiAnYW55ZWxlbWVudCcsCisgIHByb2FyZ3R5cGVzID0+ICdhbnllbGVt ZW50IGpzb25iIHRleHQnLCBwcm9hcmduYW1lcyA9PiAne3RhcmdldF90eXBlLCBmcm9tX2pzb24s IGZpZWxkX25hbWV9JywKKyAgcHJvc3JjID0+ICdqc29uYl9vYmplY3RfZmllbGRfdHlwZSd9LAor eyBvaWQgPT4gJzM4MTQnLCBkZXNjciA9PiAncGxhbm5lciBzdXBwb3J0IGZvciBudW1lcmljKGpz b25iKScsCisgIHByb25hbWUgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsIHByb3JldHR5cGUgPT4g J2ludGVybmFsJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsJywgcHJvc3JjID0+ICdqc29u Yl9jYXN0X3N1cHBvcnQnIH0sCiB7IG9pZCA9PiAnMzIxNScsCiAgIHByb25hbWUgPT4gJ2pzb25i X2FycmF5X2VsZW1lbnQnLCBwcm9yZXR0eXBlID0+ICdqc29uYicsCiAgIHByb2FyZ3R5cGVzID0+ ICdqc29uYiBpbnQ0JywgcHJvYXJnbmFtZXMgPT4gJ3tmcm9tX2pzb24sIGVsZW1lbnRfaW5kZXh9 JywKQEAgLTk5MzYsNiArOTk0NCwxMCBAQAogICBwcm9uYW1lID0+ICdqc29uYl9hcnJheV9lbGVt ZW50X3RleHQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKICAgcHJvYXJndHlwZXMgPT4gJ2pzb25i IGludDQnLCBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbiwgZWxlbWVudF9pbmRleH0nLAogICBw cm9zcmMgPT4gJ2pzb25iX2FycmF5X2VsZW1lbnRfdGV4dCcgfSwKK3sgb2lkID0+ICc0NTQ5Jywg ZGVzY3IgPT4gJ2Nhc3QgYW4gYXJyYXkgZWxlbWVudCB0byBnaXZlbiB0eXBlJywKKyAgcHJvbmFt ZSA9PiAnanNvbmJfYXJyYXlfZWxlbWVudF90eXBlJywgcHJvcmV0dHlwZSA9PiAnYW55ZWxlbWVu dCcsCisgIHByb2FyZ3R5cGVzID0+ICdhbnllbGVtZW50IGpzb25iIGludDQnLCBwcm9hcmduYW1l cyA9PiAne3RhcmdldF90eXBlLCBmcm9tX2pzb24sIGVsZW1lbnRfaW5kZXh9JywKKyAgcHJvc3Jj ID0+ICdqc29uYl9hcnJheV9lbGVtZW50X3R5cGUnIH0sCiB7IG9pZCA9PiAnMzIxNycsIGRlc2Ny ID0+ICdnZXQgdmFsdWUgZnJvbSBqc29uYiB3aXRoIHBhdGggZWxlbWVudHMnLAogICBwcm9uYW1l ID0+ICdqc29uYl9leHRyYWN0X3BhdGgnLCBwcm92YXJpYWRpYyA9PiAndGV4dCcsIHByb3JldHR5 cGUgPT4gJ2pzb25iJywKICAgcHJvYXJndHlwZXMgPT4gJ2pzb25iIF90ZXh0JywgcHJvYWxsYXJn dHlwZXMgPT4gJ3tqc29uYixfdGV4dH0nLApAQCAtOTk0Nyw2ICs5OTU5LDEyIEBACiAgIHByb2Fs bGFyZ3R5cGVzID0+ICd7anNvbmIsX3RleHR9JywgcHJvYXJnbW9kZXMgPT4gJ3tpLHZ9JywKICAg cHJvYXJnbmFtZXMgPT4gJ3tmcm9tX2pzb24scGF0aF9lbGVtc30nLAogICBwcm9zcmMgPT4gJ2pz b25iX2V4dHJhY3RfcGF0aF90ZXh0JyB9LAoreyBvaWQgPT4gJzQ1NTEnLCBkZXNjciA9PiAnY2Fz dCB2YWx1ZSBmcm9tIGpzb25iIGFzIHRleHQgd2l0aCBwYXRoIGVsZW1lbnRzIHRvIGdpdmVuIHR5 cGUnLAorICBwcm9uYW1lID0+ICdqc29uYl9leHRyYWN0X3BhdGhfdHlwZScsIHByb3ZhcmlhZGlj ID0+ICd0ZXh0JywKKyAgcHJvcmV0dHlwZSA9PiAnYW55ZWxlbWVudCcsIHByb2FyZ3R5cGVzID0+ ICdhbnllbGVtZW50IGpzb25iIF90ZXh0JywKKyAgcHJvYWxsYXJndHlwZXMgPT4gJ3thbnllbGVt ZW50LGpzb25iLF90ZXh0fScsIHByb2FyZ21vZGVzID0+ICd7aSxpLHZ9JywKKyAgcHJvYXJnbmFt ZXMgPT4gJ3t0YXJnZXRfdHlwZSxmcm9tX2pzb24scGF0aF9lbGVtc30nLAorICBwcm9zcmMgPT4g J2pzb25iX2V4dHJhY3RfcGF0aF90eXBlJyB9LAogeyBvaWQgPT4gJzMyMTknLCBkZXNjciA9PiAn ZWxlbWVudHMgb2YgYSBqc29uYiBhcnJheScsCiAgIHByb25hbWUgPT4gJ2pzb25iX2FycmF5X2Vs ZW1lbnRzJywgcHJvcm93cyA9PiAnMTAwJywgcHJvcmV0c2V0ID0+ICd0JywKICAgcHJvcmV0dHlw ZSA9PiAnanNvbmInLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaApp bmRleCAzMTgwNzAzMDA1NS4uY2ZiZTViMjYxOTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL21ha2VmdW5jcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCkBAIC01 OCw2ICs1OCw4IEBAIGV4dGVybiBDb25zdCAqbWFrZUNvbnN0KE9pZCBjb25zdHR5cGUsCiAKIGV4 dGVybiBDb25zdCAqbWFrZU51bGxDb25zdChPaWQgY29uc3R0eXBlLCBpbnQzMiBjb25zdHR5cG1v ZCwgT2lkIGNvbnN0Y29sbGlkKTsKIAorZXh0ZXJuIENvbnN0ICptYWtlRHVtbXlDb25zdChPaWQg Y29uc3R0eXBlLCBpbnQzMiBjb25zdHR5cG1vZCwgT2lkIGNvbnN0Y29sbGlkKTsKKwogZXh0ZXJu IE5vZGUgKm1ha2VCb29sQ29uc3QoYm9vbCB2YWx1ZSwgYm9vbCBpc251bGwpOwogCiBleHRlcm4g RXhwciAqbWFrZUJvb2xFeHByKEJvb2xFeHByVHlwZSBib29sb3AsIExpc3QgKmFyZ3MsIGludCBs b2NhdGlvbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvanNvbmIuaAppbmRleCA2NDlhMTY0NGYyNC4uNTMyMjI1MzE0YTkgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMv anNvbmIuaApAQCAtNDM1LDUgKzQzNSw2IEBAIGV4dGVybiBEYXR1bSBqc29uYl9idWlsZF9vYmpl Y3Rfd29ya2VyKGludCBuYXJncywgRGF0dW0gKmFyZ3MsIGJvb2wgKm51bGxzLAogCQkJCQkJCQkJ ICAgYm9vbCB1bmlxdWVfa2V5cyk7CiBleHRlcm4gRGF0dW0ganNvbmJfYnVpbGRfYXJyYXlfd29y a2VyKGludCBuYXJncywgRGF0dW0gKmFyZ3MsIGJvb2wgKm51bGxzLAogCQkJCQkJCQkJICBPaWQg KnR5cGVzLCBib29sIGFic2VudF9vbl9udWxsKTsKK2V4dGVybiBEYXR1bSBjYXN0X2pzb25idmFs dWVfdG9fdHlwZShKc29uYlZhbHVlICp2LCBPaWQgdGFyZ2V0X29pZCk7CiAKICNlbmRpZgkJCQkJ CQkvKiBfX0pTT05CX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qc29uYi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dAppbmRleCA0 YTE2ZDBkYmFmYi4uMTJkYWFjYjNiODAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvanNvbmIub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0 CkBAIC00NTcsNiArNDU3LDcgQEAgQ1JFQVRFIFRFTVAgVEFCTEUgdGVzdF9qc29uYiAoCiApOwog SU5TRVJUIElOVE8gdGVzdF9qc29uYiBWQUxVRVMKICgnc2NhbGFyJywnImEgc2NhbGFyIicpLAor KCdzY2FsYXJpbnQnLCcyJyksCiAoJ2FycmF5JywnWyJ6ZXJvIiwgIm9uZSIsInR3byIsbnVsbCwi Zm91ciIsImZpdmUiLCBbMSwyLDNdLHsiZjEiOjl9XScpLAogKCdvYmplY3QnLCd7ImZpZWxkMSI6 InZhbDEiLCJmaWVsZDIiOiJ2YWwyIiwiZmllbGQzIjpudWxsLCAiZmllbGQ0IjogNCwgImZpZWxk NSI6IFsxLDIsM10sICJmaWVsZDYiOiB7ImYxIjo5fX0nKTsKIFNFTEVDVCB0ZXN0X2pzb24gLT4g J3gnIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyJzsKQEAgLTUwMSwx MCArNTAyLDI1IEBAIFNFTEVDVCB0ZXN0X2pzb24gLT4+ICdmaWVsZDInIEZST00gdGVzdF9qc29u YiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKICB2YWwyCiAoMSByb3cpCiAKLVNFTEVDVCB0 ZXN0X2pzb24gLT4gMiBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ3NjYWxhcic7 CitTRUxFQ1QgdGVzdF9qc29uIC0+IDIsIHRlc3RfanNvbiAtPiAwIEZST00gdGVzdF9qc29uYiBX SEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyJzsKKyA/Y29sdW1uPyB8ICA/Y29sdW1uPyAgCistLS0t LS0tLS0tKy0tLS0tLS0tLS0tLQorICAgICAgICAgIHwgImEgc2NhbGFyIgorKDEgcm93KQorCitl eHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAwKTo6aW50 NCwgdGVzdF9qc29uIC0+IDAgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2Fs YXJpbnQnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcGdf dGVtcC50ZXN0X2pzb25iCisgICBPdXRwdXQ6IGpzb25iX2FycmF5X2VsZW1lbnRfdHlwZSgwLCB0 ZXN0X2pzb24sIDApLCAodGVzdF9qc29uIC0+IDApCisgICBGaWx0ZXI6ICh0ZXN0X2pzb25iLmpz b25fdHlwZSA9ICdzY2FsYXJpbnQnOjp0ZXh0KQorKDMgcm93cykKKworU0VMRUNUIHRlc3RfanNv biAtPiAwIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyaW50JzsKICA/ Y29sdW1uPyAKIC0tLS0tLS0tLS0KLSAKKyAyCiAoMSByb3cpCiAKIFNFTEVDVCB0ZXN0X2pzb24g LT4gMiBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ2FycmF5JzsKQEAgLTE3ODYs NiArMTgwMiwxMiBAQCBzZWxlY3QgJ3siYSI6IHsiYiI6eyJjIjogImZvbyJ9fX0nOjpqc29uYiAj PiAne30nOwogIHsiYSI6IHsiYiI6IHsiYyI6ICJmb28ifX19CiAoMSByb3cpCiAKK3NlbGVjdCAo JzInOjpqc29uYiAjPiAne30nKTo6aW50MiwgKCd7ImEiOjJ9Jzo6anNvbmIgIz4gJ3siYiJ9Jyks ICgneyJhIjoyfSc6Ompzb25iICM+ICd7ImIifScpOjppbnQyOworIGludDIgfCA/Y29sdW1uPyB8 IGludDIgCistLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyAgICAyIHwgICAgICAgICAgfCAgICAg CisoMSByb3cpCisKIHNlbGVjdCAnWzEsMiwzXSc6Ompzb25iICM+ICd7fSc7CiAgP2NvbHVtbj8g IAogLS0tLS0tLS0tLS0KQEAgLTM1MzcsNiArMzU1OSwyNCBAQCBTRUxFQ1QgY291bnQoKikgRlJP TSB0ZXN0anNvbmIgV0hFUkUgaiBAPyAnJC5iYXInOwogCiBSRVNFVCBlbmFibGVfc2Vxc2NhbjsK IERST1AgSU5ERVggamlkeDsKKy0tIHRlc3QgdGhlIHN1cHBvcnRlZCBmdW5jdGlvbiBmb3IganNv bmIgY2FzdC4KK0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVCAoai0+J2EnKTo6 bnVtZXJpYywKKyhqLT4nYScpOjppbnQyLAorKGotPidhJyk6OmludDQsCisoai0+J2EnKTo6aW50 OCwKKyhqLT4nYScpOjpmbG9hdDQsCisoai0+J2EnKTo6ZmxvYXQ4LAorKGotPidhJyk6OmJvb2ws CisoaiAjPiAneyJhIn0nKTo6bnVtZXJpYywKKyhqLT4wKTo6bnVtZXJpYworRlJPTSB0ZXN0anNv bmI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFNlcSBTY2FuIG9uIHB1YmxpYy50ZXN0anNvbmIKKyAgIE91dHB1dDoganNvbmJfb2Jq ZWN0X2ZpZWxkX3R5cGUoJzAnOjpudW1lcmljLCBqLCAnYSc6OnRleHQpLCBqc29uYl9vYmplY3Rf ZmllbGRfdHlwZSgnMCc6OnNtYWxsaW50LCBqLCAnYSc6OnRleHQpLCBqc29uYl9vYmplY3RfZmll bGRfdHlwZSgwLCBqLCAnYSc6OnRleHQpLCBqc29uYl9vYmplY3RfZmllbGRfdHlwZSgnMCc6OmJp Z2ludCwgaiwgJ2EnOjp0ZXh0KSwganNvbmJfb2JqZWN0X2ZpZWxkX3R5cGUoJzAnOjpyZWFsLCBq LCAnYSc6OnRleHQpLCBqc29uYl9vYmplY3RfZmllbGRfdHlwZSgnMCc6OmRvdWJsZSBwcmVjaXNp b24sIGosICdhJzo6dGV4dCksIGpzb25iX29iamVjdF9maWVsZF90eXBlKGZhbHNlLCBqLCAnYSc6 OnRleHQpLCBwZ19jYXRhbG9nLmpzb25iX2V4dHJhY3RfcGF0aF90eXBlKCcwJzo6bnVtZXJpYywg aiwgJ3thfSc6OnRleHRbXSksIGpzb25iX2FycmF5X2VsZW1lbnRfdHlwZSgnMCc6Om51bWVyaWMs IGosIDApCisoMiByb3dzKQorCiAtLSBuZXN0ZWQgdGVzdHMKIFNFTEVDVCAneyJmZiI6eyJhIjox MiwiYiI6MTZ9fSc6Ompzb25iOwogICAgICAgICAgICBqc29uYiAgICAgICAgICAgIApAQCAtNTQ3 MSwxMDcgKzU1MTEsMTEzIEBAIHNlbGVjdCB0c19oZWFkbGluZSgnW10nOjpqc29uYiwgdHNxdWVy eSgnYWFhICYgYmJiJykpOwogKDEgcm93KQogCiAtLSBjYXN0cwotc2VsZWN0ICd0cnVlJzo6anNv bmI6OmJvb2w7Ci0gYm9vbCAKLS0tLS0tLQotIHQKK3NlbGVjdCAndHJ1ZSc6Ompzb25iOjpib29s LCAoJ3siYSI6IHRydWV9Jzo6anNvbmItPidhJyk6OmJvb2w7CisgYm9vbCB8IGJvb2wgCistLS0t LS0rLS0tLS0tCisgdCAgICB8IHQKICgxIHJvdykKIAogc2VsZWN0ICdbXSc6Ompzb25iOjpib29s OwogRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBhcnJheSB0byB0eXBlIGJvb2xlYW4KLXNlbGVj dCAnMS4wJzo6anNvbmI6OmZsb2F0OwotIGZsb2F0OCAKLS0tLS0tLS0tCi0gICAgICAxCitzZWxl Y3QgKCd7ImEiOiBbXX0nOjpqc29uYi0+J2EnKTo6Ym9vbDsKK0VSUk9SOiAgY2Fubm90IGNhc3Qg anNvbmIgYXJyYXkgdG8gdHlwZSBib29sZWFuCitzZWxlY3QgJzEuMCc6Ompzb25iOjpmbG9hdCwg KCd7ImEiOiAxLjB9Jzo6anNvbmItPidhJyk6OmZsb2F0OworIGZsb2F0OCB8IGZsb2F0OCAKKy0t LS0tLS0tKy0tLS0tLS0tCisgICAgICAxIHwgICAgICAxCiAoMSByb3cpCiAKIHNlbGVjdCAnWzEu MF0nOjpqc29uYjo6ZmxvYXQ7CiBFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIGFycmF5IHRvIHR5 cGUgZG91YmxlIHByZWNpc2lvbgotc2VsZWN0ICcxMjM0NSc6Ompzb25iOjppbnQ0OwotIGludDQg IAotLS0tLS0tLQotIDEyMzQ1CitzZWxlY3QgKCd7ImEiOiBbMS4wXX0nOjpqc29uYi0+J2EnKTo6 ZmxvYXQ7CitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIGFycmF5IHRvIHR5cGUgZG91YmxlIHBy ZWNpc2lvbgorc2VsZWN0ICcxMjM0NSc6Ompzb25iOjppbnQ0LCAgKCd7ImEiOiAxMjM0NX0nOjpq c29uYi0+J2EnKTo6aW50NDsKKyBpbnQ0ICB8IGludDQgIAorLS0tLS0tLSstLS0tLS0tCisgMTIz NDUgfCAxMjM0NQogKDEgcm93KQogCiBzZWxlY3QgJyJoZWxsbyInOjpqc29uYjo6aW50NDsKIEVS Uk9SOiAgY2Fubm90IGNhc3QganNvbmIgc3RyaW5nIHRvIHR5cGUgaW50ZWdlcgotc2VsZWN0ICcx MjM0NSc6Ompzb25iOjpudW1lcmljOwotIG51bWVyaWMgCi0tLS0tLS0tLS0KLSAgIDEyMzQ1Citz ZWxlY3QgKCd7ImEiOiAiaGVsbG8ifSc6Ompzb25iLT4nYScpOjppbnQ0OworRVJST1I6ICBjYW5u b3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBpbnRlZ2VyCitzZWxlY3QgJzEyMzQ1Jzo6anNv bmI6Om51bWVyaWMsICgneyJhIjogMTIzNDV9Jzo6anNvbmItPidhJyk6Om51bWVyaWM7CisgbnVt ZXJpYyB8IG51bWVyaWMgCistLS0tLS0tLS0rLS0tLS0tLS0tCisgICAxMjM0NSB8ICAgMTIzNDUK ICgxIHJvdykKIAogc2VsZWN0ICd7fSc6Ompzb25iOjpudW1lcmljOwogRVJST1I6ICBjYW5ub3Qg Y2FzdCBqc29uYiBvYmplY3QgdG8gdHlwZSBudW1lcmljCi1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNv bmI6Om51bWVyaWM7Ci0gbnVtZXJpYyAgCi0tLS0tLS0tLS0tCi0gMTIzNDUuMDUKK3NlbGVjdCAn MTIzNDUuMDUnOjpqc29uYjo6bnVtZXJpYywgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2En KTo6bnVtZXJpYzsKKyBudW1lcmljICB8IG51bWVyaWMgIAorLS0tLS0tLS0tLSstLS0tLS0tLS0t CisgMTIzNDUuMDUgfCAxMjM0NS4wNQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNv bmI6OmZsb2F0NDsKLSAgZmxvYXQ0ICAKLS0tLS0tLS0tLS0KLSAxMjM0NS4wNQorc2VsZWN0ICcx MjM0NS4wNSc6Ompzb25iOjpmbG9hdDQsICgneyJhIjogMTIzNDUuMDV9Jzo6anNvbmItPidhJyk6 OmZsb2F0NDsKKyAgZmxvYXQ0ICB8ICBmbG9hdDQgIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg MTIzNDUuMDUgfCAxMjM0NS4wNQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6 OmZsb2F0ODsKLSAgZmxvYXQ4ICAKLS0tLS0tLS0tLS0KLSAxMjM0NS4wNQorc2VsZWN0ICcxMjM0 NS4wNSc6Ompzb25iOjpmbG9hdDgsICgneyJhIjogMTIzNDUuMDV9Jzo6anNvbmItPidhJyk6OmZs b2F0ODsKKyAgZmxvYXQ4ICB8ICBmbG9hdDggIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgMTIz NDUuMDUgfCAxMjM0NS4wNQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6Omlu dDI7Ci0gaW50MiAgCi0tLS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6 aW50MiwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6aW50MjsKKyBpbnQyICB8IGlu dDIgIAorLS0tLS0tLSstLS0tLS0tCisgMTIzNDUgfCAxMjM0NQogKDEgcm93KQogCi1zZWxlY3Qg JzEyMzQ1LjA1Jzo6anNvbmI6OmludDQ7Ci0gaW50NCAgCi0tLS0tLS0tCi0gMTIzNDUKK3NlbGVj dCAnMTIzNDUuMDUnOjpqc29uYjo6aW50NCwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2En KTo6aW50NDsKKyBpbnQ0ICB8IGludDQgIAorLS0tLS0tLSstLS0tLS0tCisgMTIzNDUgfCAxMjM0 NQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmludDg7Ci0gaW50OCAgCi0t LS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50OCwgKCd7ImEiOiAx MjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6aW50ODsKKyBpbnQ4ICB8IGludDggIAorLS0tLS0tLSst LS0tLS0tCisgMTIzNDUgfCAxMjM0NQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1LjAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6bnVtZXJpYzsK LSAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyAgICAgICAgICAgICAgICAgICAgICAgIAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g MTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorc2Vs ZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1 Jzo6anNvbmI6Om51bWVyaWMsICgneyJhIjogMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpqc29uYi0+J2EnKTo6bnVtZXJpYzsKKyAgICAgICAg ICAgICAgICAgICAgICAgbnVtZXJpYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg ICAgICAgICAgICAgIG51bWVyaWMgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxMjM0NS4wMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1IHwgMTIzNDUuMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQogKDEgcm93KQogCi1zZWxlY3Qg JzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpq c29uYjo6ZmxvYXQ0OwotIGZsb2F0NCAKLS0tLS0tLS0tCi0gIDEyMzQ1CitzZWxlY3QgJzEyMzQ1 LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6 ZmxvYXQ0LCAgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpmbG9hdDQ7CisgZmxvYXQ0IHwgZmxvYXQ0IAor LS0tLS0tLS0rLS0tLS0tLS0KKyAgMTIzNDUgfCAgMTIzNDUKICgxIHJvdykKIAotc2VsZWN0ICcx MjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNv bmI6OmZsb2F0ODsKLSBmbG9hdDggCi0tLS0tLS0tLQotICAxMjM0NQorc2VsZWN0ICcxMjM0NS4w MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmZs b2F0OCwgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpmbG9hdDg7CisgZmxvYXQ4IHwgZmxvYXQ4IAorLS0t LS0tLS0rLS0tLS0tLS0KKyAgMTIzNDUgfCAgMTIzNDUKICgxIHJvdykKIAotc2VsZWN0ICcxMjM0 NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6 OmludDI7Ci0gaW50MiAgCi0tLS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAnMTIzNDUuMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjppbnQyLCAoJ3si YSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9 Jzo6anNvbmItPidhJyk6OmludDI7CisgaW50MiAgfCBpbnQyICAKKy0tLS0tLS0rLS0tLS0tLQor IDEyMzQ1IHwgMTIzNDUKICgxIHJvdykKIAotc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDQ7Ci0gaW50NCAgCi0t LS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjppbnQ0LCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6Omlu dDQ7CisgaW50NCAgfCBpbnQ0ICAKKy0tLS0tLS0rLS0tLS0tLQorIDEyMzQ1IHwgMTIzNDUKICgx IHJvdykKIAotc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDg7Ci0gaW50OCAgCi0tLS0tLS0tCi0gMTIzNDUKK3Nl bGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw NSc6Ompzb25iOjppbnQ4LCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6OmludDg7CisgaW50OCAgfCBpbnQ4 ICAKKy0tLS0tLS0rLS0tLS0tLQorIDEyMzQ1IHwgMTIzNDUKICgxIHJvdykKIApkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmIuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv anNvbmIuc3FsCmluZGV4IGU0YjdjZGY3MDNkLi44NjM0ZDE1NGVmZSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvanNvbmIuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pz b25iLnNxbApAQCAtMTU0LDYgKzE1NCw3IEBAIENSRUFURSBURU1QIFRBQkxFIHRlc3RfanNvbmIg KAogCiBJTlNFUlQgSU5UTyB0ZXN0X2pzb25iIFZBTFVFUwogKCdzY2FsYXInLCciYSBzY2FsYXIi JyksCisoJ3NjYWxhcmludCcsJzInKSwKICgnYXJyYXknLCdbInplcm8iLCAib25lIiwidHdvIixu dWxsLCJmb3VyIiwiZml2ZSIsIFsxLDIsM10seyJmMSI6OX1dJyksCiAoJ29iamVjdCcsJ3siZmll bGQxIjoidmFsMSIsImZpZWxkMiI6InZhbDIiLCJmaWVsZDMiOm51bGwsICJmaWVsZDQiOiA0LCAi ZmllbGQ1IjogWzEsMiwzXSwgImZpZWxkNiI6IHsiZjEiOjl9fScpOwogCkBAIC0xNjYsNyArMTY3 LDEwIEBAIFNFTEVDVCB0ZXN0X2pzb24gLT4+ICdmaWVsZDInIEZST00gdGVzdF9qc29uYiBXSEVS RSBqc29uX3R5cGUgPSAnc2NhbGFyJzsKIFNFTEVDVCB0ZXN0X2pzb24gLT4+ICdmaWVsZDInIEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnYXJyYXknOwogU0VMRUNUIHRlc3RfanNv biAtPj4gJ2ZpZWxkMicgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3Qn OwogCi1TRUxFQ1QgdGVzdF9qc29uIC0+IDIgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlw ZSA9ICdzY2FsYXInOworU0VMRUNUIHRlc3RfanNvbiAtPiAyLCB0ZXN0X2pzb24gLT4gMCBGUk9N IHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ3NjYWxhcic7CitleHBsYWluICh2ZXJib3Nl LCBjb3N0cyBvZmYpCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAwKTo6aW50NCwgdGVzdF9qc29uIC0+ IDAgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXJpbnQnOworU0VMRUNU IHRlc3RfanNvbiAtPiAwIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFy aW50JzsKIFNFTEVDVCB0ZXN0X2pzb24gLT4gMiBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90 eXBlID0gJ2FycmF5JzsKIFNFTEVDVCB0ZXN0X2pzb24gLT4gOSBGUk9NIHRlc3RfanNvbmIgV0hF UkUganNvbl90eXBlID0gJ2FycmF5JzsKIFNFTEVDVCB0ZXN0X2pzb24gLT4gMiBGUk9NIHRlc3Rf anNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CkBAIC00OTEsNiArNDk1LDcgQEAgU0VM RUNUICd7ImYyIjpbImYzIiwxXSwiZjQiOnsiZjUiOjk5LCJmNiI6InN0cmluZ3kifX0nOjpqc29u YiM+PmFycmF5WydmMicsJzEnXTsKIAogLS0gY29ybmVyIGNhc2VzIGZvciBzYW1lCiBzZWxlY3Qg J3siYSI6IHsiYiI6eyJjIjogImZvbyJ9fX0nOjpqc29uYiAjPiAne30nOworc2VsZWN0ICgnMic6 Ompzb25iICM+ICd7fScpOjppbnQyLCAoJ3siYSI6Mn0nOjpqc29uYiAjPiAneyJiIn0nKSwgKCd7 ImEiOjJ9Jzo6anNvbmIgIz4gJ3siYiJ9Jyk6OmludDI7CiBzZWxlY3QgJ1sxLDIsM10nOjpqc29u YiAjPiAne30nOwogc2VsZWN0ICciZm9vIic6Ompzb25iICM+ICd7fSc7CiBzZWxlY3QgJzQyJzo6 anNvbmIgIz4gJ3t9JzsKQEAgLTkzOSw2ICs5NDQsMTkgQEAgU0VMRUNUIGNvdW50KCopIEZST00g dGVzdGpzb25iIFdIRVJFIGogQD8gJyQuYmFyJzsKIFJFU0VUIGVuYWJsZV9zZXFzY2FuOwogRFJP UCBJTkRFWCBqaWR4OwogCistLSB0ZXN0IHRoZSBzdXBwb3J0ZWQgZnVuY3Rpb24gZm9yIGpzb25i IGNhc3QuCitFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpCitTRUxFQ1QgKGotPidhJyk6Om51 bWVyaWMsCisoai0+J2EnKTo6aW50MiwKKyhqLT4nYScpOjppbnQ0LAorKGotPidhJyk6OmludDgs Cisoai0+J2EnKTo6ZmxvYXQ0LAorKGotPidhJyk6OmZsb2F0OCwKKyhqLT4nYScpOjpib29sLAor KGogIz4gJ3siYSJ9Jyk6Om51bWVyaWMsCisoai0+MCk6Om51bWVyaWMKK0ZST00gdGVzdGpzb25i OworCiAtLSBuZXN0ZWQgdGVzdHMKIFNFTEVDVCAneyJmZiI6eyJhIjoxMiwiYiI6MTZ9fSc6Ompz b25iOwogU0VMRUNUICd7ImZmIjp7ImEiOjEyLCJiIjoxNn0sInFxIjoxMjN9Jzo6anNvbmI7CkBA IC0xNDk2LDIzICsxNTE0LDI3IEBAIHNlbGVjdCB0c19oZWFkbGluZSgne30nOjpqc29uYiwgdHNx dWVyeSgnYWFhICYgYmJiJykpOwogc2VsZWN0IHRzX2hlYWRsaW5lKCdbXSc6Ompzb25iLCB0c3F1 ZXJ5KCdhYWEgJiBiYmInKSk7CiAKIC0tIGNhc3RzCi1zZWxlY3QgJ3RydWUnOjpqc29uYjo6Ym9v bDsKK3NlbGVjdCAndHJ1ZSc6Ompzb25iOjpib29sLCAoJ3siYSI6IHRydWV9Jzo6anNvbmItPidh Jyk6OmJvb2w7CiBzZWxlY3QgJ1tdJzo6anNvbmI6OmJvb2w7Ci1zZWxlY3QgJzEuMCc6Ompzb25i OjpmbG9hdDsKK3NlbGVjdCAoJ3siYSI6IFtdfSc6Ompzb25iLT4nYScpOjpib29sOworc2VsZWN0 ICcxLjAnOjpqc29uYjo6ZmxvYXQsICgneyJhIjogMS4wfSc6Ompzb25iLT4nYScpOjpmbG9hdDsK IHNlbGVjdCAnWzEuMF0nOjpqc29uYjo6ZmxvYXQ7Ci1zZWxlY3QgJzEyMzQ1Jzo6anNvbmI6Omlu dDQ7CitzZWxlY3QgKCd7ImEiOiBbMS4wXX0nOjpqc29uYi0+J2EnKTo6ZmxvYXQ7CitzZWxlY3Qg JzEyMzQ1Jzo6anNvbmI6OmludDQsICAoJ3siYSI6IDEyMzQ1fSc6Ompzb25iLT4nYScpOjppbnQ0 Owogc2VsZWN0ICciaGVsbG8iJzo6anNvbmI6OmludDQ7Ci1zZWxlY3QgJzEyMzQ1Jzo6anNvbmI6 Om51bWVyaWM7CitzZWxlY3QgKCd7ImEiOiAiaGVsbG8ifSc6Ompzb25iLT4nYScpOjppbnQ0Owor CitzZWxlY3QgJzEyMzQ1Jzo6anNvbmI6Om51bWVyaWMsICgneyJhIjogMTIzNDV9Jzo6anNvbmIt PidhJyk6Om51bWVyaWM7CiBzZWxlY3QgJ3t9Jzo6anNvbmI6Om51bWVyaWM7Ci1zZWxlY3QgJzEy MzQ1LjA1Jzo6anNvbmI6Om51bWVyaWM7Ci1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmZsb2F0 NDsKLXNlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6ZmxvYXQ4Owotc2VsZWN0ICcxMjM0NS4wNSc6 Ompzb25iOjppbnQyOwotc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjppbnQ0Owotc2VsZWN0ICcx MjM0NS4wNSc6Ompzb25iOjppbnQ4Owotc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6Om51bWVyaWM7Ci1zZWxlY3QgJzEy MzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29u Yjo6ZmxvYXQ0Owotc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmZsb2F0ODsKLXNlbGVjdCAnMTIzNDUuMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjppbnQyOwotc2Vs ZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1 Jzo6anNvbmI6OmludDQ7Ci1zZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6aW50ODsKK3NlbGVjdCAnMTIzNDUuMDUnOjpq c29uYjo6bnVtZXJpYywgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6bnVtZXJpYzsK K3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6ZmxvYXQ0LCAoJ3siYSI6IDEyMzQ1LjA1fSc6Ompz b25iLT4nYScpOjpmbG9hdDQ7CitzZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmZsb2F0OCwgKCd7 ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6ZmxvYXQ4Oworc2VsZWN0ICcxMjM0NS4wNSc6 Ompzb25iOjppbnQyLCAoJ3siYSI6IDEyMzQ1LjA1fSc6Ompzb25iLT4nYScpOjppbnQyOworc2Vs ZWN0ICcxMjM0NS4wNSc6Ompzb25iOjppbnQ0LCAoJ3siYSI6IDEyMzQ1LjA1fSc6Ompzb25iLT4n YScpOjppbnQ0Oworc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjppbnQ4LCAoJ3siYSI6IDEyMzQ1 LjA1fSc6Ompzb25iLT4nYScpOjppbnQ4Oworc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6Om51bWVyaWMsICgneyJhIjog MTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpq c29uYi0+J2EnKTo6bnVtZXJpYzsKK3NlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjpmbG9hdDQsICAoJ3siYSI6IDEyMzQ1 LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNvbmIt PidhJyk6OmZsb2F0NDsKK3NlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjpmbG9hdDgsICgneyJhIjogMTIzNDUuMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpqc29uYi0+J2EnKTo6 ZmxvYXQ4Oworc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDIsICgneyJhIjogMTIzNDUuMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpqc29uYi0+J2EnKTo6aW50MjsKK3Nl bGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw NSc6Ompzb25iOjppbnQ0LCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6OmludDQ7CitzZWxlY3QgJzEyMzQ1 LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6 aW50OCwgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjppbnQ4OwotLSAKMi4yMS4wCgo= --000000000000aad3e406031abedd--