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 1qWu6y-004eNg-Hg for pgsql-hackers@arkaria.postgresql.org; Fri, 18 Aug 2023 07:41:36 +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 1qWu6w-0093HD-2Z for pgsql-hackers@arkaria.postgresql.org; Fri, 18 Aug 2023 07:41:34 +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.94.2) (envelope-from ) id 1qWu6v-0093H5-7g for pgsql-hackers@lists.postgresql.org; Fri, 18 Aug 2023 07:41:33 +0000 Received: from mail-oa1-x33.google.com ([2001:4860:4864:20::33]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qWu6n-000lyk-Qc for pgsql-hackers@postgresql.org; Fri, 18 Aug 2023 07:41:32 +0000 Received: by mail-oa1-x33.google.com with SMTP id 586e51a60fabf-1bba7717d3bso335941fac.1 for ; Fri, 18 Aug 2023 00:41:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692344485; x=1692949285; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=veoYfcHH8euOuJshcQNgk/ssqiwJkjJWgLyuDjYLuDQ=; b=X5G+ss6wXhGszDwm7I7a+4HbVBW44pjwqMYjxg5acWctgKDH0nLUs324vuPf0Lb2u4 Xa5Cmw/roR1O80zYZPLKYeIXNRIT6h2jkG+hcXfHVmFfbr1igCAv7gXukW7OP0byHw20 FfmQwHt4aEPbQYz9rVOWfzd3hlv5j7Dj88xup8x/yaTZeqg9fDOoJ4srw8N3OLMGor2d zTo4t9oMDrbWDWemTgg3jRhnLPvhniRNm0BoG537npxlM9IGlA57xcK71B3bEytbl1Mp YeiPo7tPk5QybCVzdimpCNAakebUrwMWqXjRd8yUCfLa3qhODURJbgcJIh1QPeltLmKq 7TRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692344485; x=1692949285; 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=veoYfcHH8euOuJshcQNgk/ssqiwJkjJWgLyuDjYLuDQ=; b=c3QpA+l+dDGO5bIPdYEuAruWdvfeqM2TwR3cLn7yokUjxKklWFiciKAR89gY2hdRgZ RI2Jd26HNT1IxszWEpnlX3vVpWXSaLlsiE9FCsqC3H9Aeu8KEu1DFrIYrcX71+7mFaNt F3sPsKFBLV0HhO4XvBygI9DyNv+qubSRvizb5YhnsECQObqfBTqlCwzbgXW3Sll3AOpq eh3EGUV1iLFQlgMPecU7FjaD9tN/62CpZbeziadcL9PJ5NQ9GMipt/rS87CcrluUP+pt bhGyK1mSsEiO6kE8oyHTc3wgwXnteB/xS5WkQc5emqSH5Ipby0H54U81j2SmB9aSlzpA 9Q3Q== X-Gm-Message-State: AOJu0YyTO2Ds/0A5N2p0njZ+naMRlkA8r2c3g07cPStuaCg0Ot9bW3TN XyCXamjWfraICtkOc/LQ2pkRmidi8zSRIpa13pI= X-Google-Smtp-Source: AGHT+IEe1+8ldY8WlkBXo1vdPcgg482YzoDyinbNUjO/uQXFVbcedXVZD36iigblP6zfv1ocjoZnYWSXA4YcLJckSj0= X-Received: by 2002:a05:6870:5702:b0:1bf:32bf:1913 with SMTP id k2-20020a056870570200b001bf32bf1913mr1811480oap.43.1692344484951; Fri, 18 Aug 2023 00:41:24 -0700 (PDT) MIME-Version: 1.0 References: <3507485.1691090027@sss.pgh.pa.us> <900892914fdc3f477b101d699efb40e0@anastigmatix.net> <903341.1692022214@sss.pgh.pa.us> <4b97f1a1dd9b6e45443d24870d3be698@anastigmatix.net> In-Reply-To: From: Andy Fan Date: Fri, 18 Aug 2023 15:41:13 +0800 Message-ID: Subject: Re: Extract numeric filed in JSONB more effectively To: Chapman Flack Cc: jian he , Pavel Stehule , Tom Lane , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000dd2a3a06032da7cf" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000dd2a3a06032da7cf Content-Type: multipart/alternative; boundary="000000000000dd2a3906032da7cd" --000000000000dd2a3906032da7cd Content-Type: text/plain; charset="UTF-8" > because as long as it has parameters declared internal, > no SQL can ever call it. I was confused about the difference between anyelement and internal, and I want to know a way to create a function which is disallowed to be called by the user. Your above words resolved two questions of mine! So it can only appear in an expression > tree because your SupportRequestSimplify put it there properly > typed, after the SQL query was parsed but before evaluation. > > The thing about 'internal' is it doesn't represent any specific > type, it doesn't necessarily represent the same type every time it > is mentioned, and it often means something that isn't a cataloged > type at all, such as a pointer to some kind of struct. I should have noticed this during the study planner support function, but highlighting this is pretty amazing. > If there isn't, one might have to be invented. So it might be that > if we go down the "use polymorphic resolution" road, we have to > invent dummy Consts, and down the "internal" road we also have to > invent something. I think you might already feel that putting an internal function into an expression would cause something wrong. I just have a quick hack on this, and crash happens at the simplest case. If something already exists to fix this, I am inclined to use 'internal', but I didn't find the way. I'm thinking if we should clarify "internal" should only be used internally and should never be used in expression by design? > (And I'm not even sure anything has to be invented. If there's an > existing node for no-op binary casts, I think I'd first try > putting that there and see if anything complains.) > > If this thread is being followed by others more familiar with > the relevant code or who see obvious problems I'm missing, > please chime in! > Thank you wise & modest gentleman, I would really hope Tom can chime in at this time. In general, the current decision we need to make is shall we use 'internal' or 'anyelement' to present the target OID. the internal way would be more straight but have troubles to be in the expression tree. the 'anyelement' way is compatible with expression, but it introduces the makeDummyConst overhead and I'm not pretty sure it is a correct implementation in makeDummyConst. see the XXX part. +/* + * makeDummyConst + * create a Const node with the specified type/typmod. + * + * This is a convenience routine to create a Const which only the + * type is interested but make sure the value is accessible. + */ +Const * +makeDummyConst(Oid consttype, int32 consttypmod, Oid constcollid) +{ + int16 typLen; + bool typByVal; + Const *c; + Datum val = 0; + + + get_typlenbyval(consttype, &typLen, &typByVal); + + if (consttype == NUMERICOID) + val = DirectFunctionCall1(numeric_in, CStringGetDatum("0")); + else if (!typByVal) + elog(ERROR, "create dummy const for type %u is not supported.", consttype); + + /* XXX: here I assume constvalue=0 is accessible for const by value type.*/ + c = makeConst(consttype, consttypmod, 0, (int) typLen, val, false, typByVal); + + return c; +} -- Best Regards Andy Fan --000000000000dd2a3906032da7cd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=

because as long as it= has parameters declared internal,
no SQL can ever call it.
=C2=A0
I was confused = about the difference between anyelement and
internal, and I want = to know a way to create a function which
is disallowed to be call= ed by the user.=C2=A0 Your above words=C2=A0
resolved two questio= ns of mine!

So it can only appear in an expression
tree because your SupportRequestSimplify put it there properly
typed, after the SQL query was parsed but before evaluation.

The thing about 'internal' is it doesn't represent any specific=
type, it doesn't necessarily represent the same type every time it
is mentioned, and it often means something that isn't a cataloged
type at all, such as a pointer to some kind of struct.
I should have noticed this during the study planner support fun= ction,
but highlighting this is pretty amazing.=C2=A0
= =C2=A0
If there isn't, one might have to be invented. So it might be that
if we go down the "use polymorphic resolution" road, we have to invent dummy Consts, and down the "internal" road we also have to=
invent something.

I think you might already= feel that putting an internal function
into an expression would = cause something wrong.=C2=A0 I just have
a quick hack on this, an= d crash happens at the simplest case.=C2=A0
If something already = exists to fix this, I am=C2=A0inclined=C2=A0
to use 'internal= ', but I didn't find the way.=C2=A0 I'm thinking if we
should clarify "internal" should only be used internally and
should never be used in expression by design?=C2=A0
=C2= =A0
(And I'm not even sure anything has to be invented. If there's an existing node for no-op binary casts, I think I'd first try
putting that there and see if anything complains.)

If this thread is being followed by others more familiar with
the relevant code or who see obvious problems I'm missing,
please chime in!

Thank you wise & modest= gentleman,=C2=A0 I would really hope Tom can
chime in at this time.=C2=A0

<= div class=3D"gmail_quote">In general,=C2=A0 the current decision we need to= make is shall we use
'internal' or= 'anyelement' to present the target OID.=C2=A0 the internal way
would be more straight but have troubles to be= in the expression tree.
the 'anyelemen= t'=C2=A0 way is compatible with expression, but it introduces
the makeDummyConst overhead and I'm not pretty s= ure it is a correct
implementation in makeD= ummyConst. see the XXX part.=C2=A0

+/*
+ * makeDummyConst
+ * =C2=A0 =C2=A0= =C2=A0create a Const node with the specified type/typmod.
+ *
+ * Th= is is a convenience routine to create a Const which only the
+ * type is= interested but make sure the value is accessible.
+ */
+Const *
+= makeDummyConst(Oid consttype, int32 consttypmod, Oid constcollid)
+{
= + =C2=A0 =C2=A0 =C2=A0 int16 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 typLen;
= + =C2=A0 =C2=A0 =C2=A0 bool =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0typByV= al;
+ =C2=A0 =C2=A0 =C2=A0 Const =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 *c;<= br>+ =C2=A0 =C2=A0 =C2=A0 Datum =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 val =3D = 0;
+
+
+ =C2=A0 =C2=A0 =C2=A0 get_typlenbyval(consttype, &typL= en, &typByVal);
+
+ =C2=A0 =C2=A0 =C2=A0 if (consttype =3D=3D NUM= ERICOID)
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 val =3D Dire= ctFunctionCall1(numeric_in, CStringGetDatum("0"));
+ =C2=A0 = =C2=A0 =C2=A0 else if (!typByVal)
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 elog(ERROR, "create dummy const for type %u is not suppo= rted.", consttype);
+
+ =C2=A0 =C2=A0 =C2=A0 /* XXX: here I assu= me constvalue=3D0 is accessible for const by value type.*/
+ =C2=A0 =C2= =A0 =C2=A0 c =3D makeConst(consttype, consttypmod, 0, (int) typLen, val, fa= lse, typByVal);
+
+ =C2=A0 =C2=A0 =C2=A0 return c;
+}

--
Best Regards
Andy F= an
--000000000000dd2a3906032da7cd-- --000000000000dd2a3a06032da7cf Content-Type: application/octet-stream; name="0001-convert-anyelement-to-internal.patch" Content-Disposition: attachment; filename="0001-convert-anyelement-to-internal.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_llga6ndl0 RnJvbSBlZGNhODM5NTZjNjViMDYwNDM3Y2FiNTViNTBkY2ZlNzY0MTQwNjViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IEZhbiA8emhpaHVpLmZhbjEyMTNAZ21haWwuY29tPgpE YXRlOiBGcmksIDE4IEF1ZyAyMDIzIDE1OjM4OjUwICswODAwClN1YmplY3Q6IFtQQVRDSF0gY29u dmVydCBhbnllbGVtZW50IHRvIGludGVybmFsLgoKLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQv anNvbmIuYyAgICAgfCAgOSArKysrKy0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVu Y3MuYyB8ICAyICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgfCAxMiArKysr KystLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbmIuYwppbmRleCAxNDhjMWUyZTE5NS4uN2MxZmFhM2Q3ZjcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9qc29uYi5jCkBAIC0yMDkxLDEwICsyMDkxLDExIEBAIGpzb25iX2Nhc3Rfc3Vw cG9ydChQR19GVU5DVElPTl9BUkdTKQogCiAJCWlmIChPaWRJc1ZhbGlkKG5ld19mdW5jX2lkKSkK IAkJewotCQkJQ29uc3QJKnRhcmdldCA9ICBtYWtlRHVtbXlDb25zdChmZXhwci0+ZnVuY3Jlc3Vs dHR5cGUsIDAsIEludmFsaWRPaWQpOworCQkJLy8gQ29uc3QJKnRhcmdldCA9ICBtYWtlRHVtbXlD b25zdChmZXhwci0+ZnVuY3Jlc3VsdHR5cGUsIDAsIEludmFsaWRPaWQpOworCQkJaW50NjQgdGFy Z2V0X3R5cCA9IGZleHByLT5mdW5jcmVzdWx0dHlwZTsKIAkJCWZleHByLT5mdW5jaWQgPSBuZXdf ZnVuY19pZDsKIAkJCWZleHByLT5hcmdzID0gb3BleHByLT5hcmdzOwotCQkJZmV4cHItPmFyZ3Mg PSBsaXN0X2luc2VydF9udGgoZmV4cHItPmFyZ3MsIDAsIHRhcmdldCk7CisJCQlmZXhwci0+YXJn cyA9IGxpc3RfaW5zZXJ0X250aChmZXhwci0+YXJncywgMCwgKHZvaWQgKikgdGFyZ2V0X3R5cCk7 CiAJCX0KIAogCQlQR19SRVRVUk5fUE9JTlRFUihmZXhwcik7CkBAIC0yMTY0LDcgKzIxNjUsNyBA QCBjYXN0X2pzb25idmFsdWVfdG9fdHlwZShKc29uYlZhbHVlICp2LCBPaWQgdGFyZ2V0T2lkKQog RGF0dW0KIGpzb25iX29iamVjdF9maWVsZF90eXBlKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JT2lk CQkJdGFyZ2V0T2lkID0gZ2V0X2ZuX2V4cHJfYXJndHlwZShmY2luZm8tPmZsaW5mbywgMCk7CisJ T2lkCQkJdGFyZ2V0T2lkID0gRGF0dW1HZXRPYmplY3RJZCgwKTsKIAlKc29uYgkgICAqamIgPSBQ R19HRVRBUkdfSlNPTkJfUCgxKTsKIAl0ZXh0CSAgICprZXkgPSBQR19HRVRBUkdfVEVYVF9QUCgy KTsKIApAQCAtMjE4OCw3ICsyMTg5LDcgQEAganNvbmJfb2JqZWN0X2ZpZWxkX3R5cGUoUEdfRlVO Q1RJT05fQVJHUykKIERhdHVtCiBqc29uYl9hcnJheV9lbGVtZW50X3R5cGUoUEdfRlVOQ1RJT05f QVJHUykKIHsKLQlPaWQJCQl0YXJnZXRPaWQgPSBnZXRfZm5fZXhwcl9hcmd0eXBlKGZjaW5mby0+ ZmxpbmZvLCAwKTsKKwlPaWQJCQl0YXJnZXRPaWQgPSBEYXR1bUdldE9iamVjdElkKDApOwogCUpz b25iCSAgICpqYiA9IFBHX0dFVEFSR19KU09OQl9QKDEpOwogCWludAkJCWVsZW1lbnQgPSBQR19H RVRBUkdfSU5UMzIoMik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYwppbmRleCBiYjRjYTgw N2Q3NC4uNTQxMzgyNThiZmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKQEAgLTE0Nzcs NyArMTQ3Nyw3IEBAIGdldF9zY2FsYXIodm9pZCAqc3RhdGUsIGNoYXIgKnRva2VuLCBKc29uVG9r ZW5UeXBlIHRva2VudHlwZSkKIERhdHVtCiBqc29uYl9leHRyYWN0X3BhdGhfdHlwZShQR19GVU5D VElPTl9BUkdTKQogewotCU9pZAkJCXRhcmdldE9pZCA9IGdldF9mbl9leHByX2FyZ3R5cGUoZmNp bmZvLT5mbGluZm8sIDApOworCU9pZAkJCXRhcmdldE9pZCA9IERhdHVtR2V0T2JqZWN0SWQoMCk7 CiAJSnNvbmIJICAgKmpiID0gUEdfR0VUQVJHX0pTT05CX1AoMSk7CiAJQXJyYXlUeXBlICAqcGF0 aCA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5k ZXggYjY4NDQ1Mzc1MjkuLjY2ZDFhZjcxNTg2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAg LTk5MzAsOCArOTkzMCw4IEBACiAgIHByb2FyZ3R5cGVzID0+ICdqc29uYiB0ZXh0JywgcHJvYXJn bmFtZXMgPT4gJ3tmcm9tX2pzb24sIGZpZWxkX25hbWV9JywKICAgcHJvc3JjID0+ICdqc29uYl9v YmplY3RfZmllbGRfdGV4dCcgfSwKIHsgb2lkID0+ICczODEzJywgZGVzY3IgPT4gJ3JldHVybiBh IGdpdmVuIHR5cGUgc3BlY2lmaWVkIGluIGRlc2lyZWRfdHlwZSBmcm9tIGpzb25iIGZpZWxkJywK LSAgcHJvbmFtZSA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX3R5cGUnLCBwcm9yZXR0eXBlID0+ICdh bnllbGVtZW50JywKLSAgcHJvYXJndHlwZXMgPT4gJ2FueWVsZW1lbnQganNvbmIgdGV4dCcsIHBy b2FyZ25hbWVzID0+ICd7dGFyZ2V0X3R5cGUsIGZyb21fanNvbiwgZmllbGRfbmFtZX0nLAorICBw cm9uYW1lID0+ICdqc29uYl9vYmplY3RfZmllbGRfdHlwZScsIHByb3JldHR5cGUgPT4gJ2ludGVy bmFsJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsIGpzb25iIHRleHQnLCBwcm9hcmduYW1l cyA9PiAne3RhcmdldF90eXBlLCBmcm9tX2pzb24sIGZpZWxkX25hbWV9JywKICAgcHJvc3JjID0+ ICdqc29uYl9vYmplY3RfZmllbGRfdHlwZSd9LAogeyBvaWQgPT4gJzM4MTQnLCBkZXNjciA9PiAn cGxhbm5lciBzdXBwb3J0IGZvciBudW1lcmljKGpzb25iKScsCiAgIHByb25hbWUgPT4gJ2pzb25i X2Nhc3Rfc3VwcG9ydCcsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywKQEAgLTk5NDUsOCArOTk0 NSw4IEBACiAgIHByb2FyZ3R5cGVzID0+ICdqc29uYiBpbnQ0JywgcHJvYXJnbmFtZXMgPT4gJ3tm cm9tX2pzb24sIGVsZW1lbnRfaW5kZXh9JywKICAgcHJvc3JjID0+ICdqc29uYl9hcnJheV9lbGVt ZW50X3RleHQnIH0sCiB7IG9pZCA9PiAnNDU0OScsIGRlc2NyID0+ICdjYXN0IGFuIGFycmF5IGVs ZW1lbnQgdG8gZ2l2ZW4gdHlwZScsCi0gIHByb25hbWUgPT4gJ2pzb25iX2FycmF5X2VsZW1lbnRf dHlwZScsIHByb3JldHR5cGUgPT4gJ2FueWVsZW1lbnQnLAotICBwcm9hcmd0eXBlcyA9PiAnYW55 ZWxlbWVudCBqc29uYiBpbnQ0JywgcHJvYXJnbmFtZXMgPT4gJ3t0YXJnZXRfdHlwZSwgZnJvbV9q c29uLCBlbGVtZW50X2luZGV4fScsCisgIHByb25hbWUgPT4gJ2pzb25iX2FycmF5X2VsZW1lbnRf dHlwZScsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVy bmFsIGpzb25iIGludDQnLCBwcm9hcmduYW1lcyA9PiAne3RhcmdldF90eXBlLCBmcm9tX2pzb24s IGVsZW1lbnRfaW5kZXh9JywKICAgcHJvc3JjID0+ICdqc29uYl9hcnJheV9lbGVtZW50X3R5cGUn IH0sCiB7IG9pZCA9PiAnMzIxNycsIGRlc2NyID0+ICdnZXQgdmFsdWUgZnJvbSBqc29uYiB3aXRo IHBhdGggZWxlbWVudHMnLAogICBwcm9uYW1lID0+ICdqc29uYl9leHRyYWN0X3BhdGgnLCBwcm92 YXJpYWRpYyA9PiAndGV4dCcsIHByb3JldHR5cGUgPT4gJ2pzb25iJywKQEAgLTk5NjEsOCArOTk2 MSw4IEBACiAgIHByb3NyYyA9PiAnanNvbmJfZXh0cmFjdF9wYXRoX3RleHQnIH0sCiB7IG9pZCA9 PiAnNDU1MScsIGRlc2NyID0+ICdjYXN0IHZhbHVlIGZyb20ganNvbmIgYXMgdGV4dCB3aXRoIHBh dGggZWxlbWVudHMgdG8gZ2l2ZW4gdHlwZScsCiAgIHByb25hbWUgPT4gJ2pzb25iX2V4dHJhY3Rf cGF0aF90eXBlJywgcHJvdmFyaWFkaWMgPT4gJ3RleHQnLAotICBwcm9yZXR0eXBlID0+ICdhbnll bGVtZW50JywgcHJvYXJndHlwZXMgPT4gJ2FueWVsZW1lbnQganNvbmIgX3RleHQnLAotICBwcm9h bGxhcmd0eXBlcyA9PiAne2FueWVsZW1lbnQsanNvbmIsX3RleHR9JywgcHJvYXJnbW9kZXMgPT4g J3tpLGksdn0nLAorICBwcm9yZXR0eXBlID0+ICdpbnRlcm5hbCcsIHByb2FyZ3R5cGVzID0+ICdp bnRlcm5hbCBqc29uYiBfdGV4dCcsCisgIHByb2FsbGFyZ3R5cGVzID0+ICd7aW50ZXJuYWwsanNv bmIsX3RleHR9JywgcHJvYXJnbW9kZXMgPT4gJ3tpLGksdn0nLAogICBwcm9hcmduYW1lcyA9PiAn e3RhcmdldF90eXBlLGZyb21fanNvbixwYXRoX2VsZW1zfScsCiAgIHByb3NyYyA9PiAnanNvbmJf ZXh0cmFjdF9wYXRoX3R5cGUnIH0sCiB7IG9pZCA9PiAnMzIxOScsIGRlc2NyID0+ICdlbGVtZW50 cyBvZiBhIGpzb25iIGFycmF5JywKLS0gCjIuMjEuMAoK --000000000000dd2a3a06032da7cf 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_llga6zh31 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= --000000000000dd2a3a06032da7cf--