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 1vBYn4-000YJK-JG for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Oct 2025 13:22:10 +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 1vBYn3-00GYnd-IU for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Oct 2025 13:22:08 +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 1vBYn2-00GYnV-TI for pgsql-hackers@lists.postgresql.org; Wed, 22 Oct 2025 13:22:08 +0000 Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vBYmz-003AEn-03 for pgsql-hackers@postgresql.org; Wed, 22 Oct 2025 13:22:06 +0000 Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-586883eb9fbso8487410e87.1 for ; Wed, 22 Oct 2025 06:22:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1761139323; x=1761744123; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=wp2tDFCJ8et/d+rtp+PhXzJEZ5IuZDftWigIBi4VUC0=; b=aGBu5gVhj9yWYQcbL/YWtnHaI7K9CMPlj866GHwEqxk7hvCQtOahigFDxuHwAPFkXZ Xb4/rZe5qZ6B1H1SWXfVtx1DQoSA8UNk3qbx5uKWeEk7GnnpilP6r5+RE8bh5XYKvnu4 PQx6JMKmHZOLp4jueZ/8943ap00ltnq9d994tUVhKMBLL37TDU93uMNWszMMxa2NJIat +uQD1U43jxcuY4f1DRGt3HeJrkcsXUQ/c/aJJ2DYy1UBQUKw/R6wz/WJY3DkTfmXUNuT C4bj95QLBY7ISbm32Cdm1/6066uK3yfT7a9Qj9oc3CkNRCc2wErvMn4cMgcuiaySbhAb XX6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761139323; x=1761744123; 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=wp2tDFCJ8et/d+rtp+PhXzJEZ5IuZDftWigIBi4VUC0=; b=gLoRgiOXxfBprtQaiaoUYq8H8UGTfBmZSyvpOEXz84qCWPrtgOgRtdzxfwNNYt0pWr LzP2DNAhHOXd77XNY+VGHSOEyBzlmC5LQz8Bvpm42j1GFt388xDZkFrEqSaIYRGyIRe5 4TszUlD1VNm19WkC+Lq/jYo2/sFpqLAE/YRk0bPgA8yK02464OOgh6JRhadM/tjrcSrq i8rvgXIexbysvMRS33kqaddepkxH20NBe9uIwRmR5Yiat3TERzd7gzD6DjhCj9fVpbj2 LQ9yezstdemjlV3h+8/LPkOV08f2/ghCzbYOtJE7LODXkv60X4bepCnXNiJ4v1JI2dEN cupg== X-Forwarded-Encrypted: i=1; AJvYcCVCTlodg5Lq5KEeQZQg2sy4q8fQHNKJi9Co4BgOnTKBhmjmecnTxH1xKhkQ2EHMX2WNX999lsV2DKkO6ch0@postgresql.org X-Gm-Message-State: AOJu0YwmWh3aggVRdbaA/Cz9eUbZN56xfSIfydOe/daWnowsa5JDObIi thIDPlBFPFDagWd2EF3P9w7fxi0Hfq6LpuakAsiyd1XfeVEcvUMFsUNEEXxCvyX/FVpv2nKN/To VuJMx9XMbyF/ocLtwFlpBbJ/8DsA+UEISQYxkxFAxeTsOKhPoP6B5cQ== X-Gm-Gg: ASbGnctGmLD4LqeFNAKn5OHV0li6H1UGUGs/+Am/Lj2SCJN/cBJvd2SEKLAu1/bWSnF dBcSxdiWFOTFuBLSkLq+StVfGyZC7IlkQVT9k56BXm4RmLF2CZuEs0OmZwLolmdSsmXU6u9+rI/ ChEpMhUcPI9gPS/wRSD5FDIhynjotPAModUcgN5jMC9wgoocEqSriWSsG6amrUg80g1kZR15mYc Zkmm0zXvZntiUY252VhDM+x04JYP2QnR9fYhtJtLW6UmmIjoZ95iZLiZrhfX65CJW3Kvk2I X-Google-Smtp-Source: AGHT+IGdaGGJPMVWMpmO/OSiZN9tnU04oA31Oap+N687TTL8EILOcD96itTRrfB+c1qjsjfwrFLo6njjPphKdexSnas= X-Received: by 2002:a05:6512:3e27:b0:55f:6aa7:c09 with SMTP id 2adb3069b0e04-591d85519bdmr6232518e87.44.1761139323080; Wed, 22 Oct 2025 06:22:03 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Akshay Joshi Date: Wed, 22 Oct 2025 18:51:50 +0530 X-Gm-Features: AS18NWA4f-II6yzBhDrFaTaveV6lj24wqEm7rfHtZTjhiS93UaW7hMrK0vdlVLo Message-ID: Subject: Re: [PATCH] Add pg_get_policy_ddl() function to reconstruct CREATE POLICY statement To: jian he Cc: Philip Alger , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000c0d4170641bf339e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c0d4170641bf339e Content-Type: multipart/alternative; boundary="000000000000c0d4170641bf339c" --000000000000c0d4170641bf339c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Oct 22, 2025 at 12:51=E2=80=AFPM jian he wrote: > On Thu, Oct 16, 2025 at 8:51=E2=80=AFPM Akshay Joshi > wrote: > > > > Please find attached the v3 patch, which resolves all compilation error= s > and warnings. > > > > drop table if exists t, ts, ts1; > create table t(a int); > CREATE POLICY p0 ON t FOR ALL TO PUBLIC USING (a % 2 =3D 1); > SELECT pg_get_policy_ddl('t', 'p0', false); > > pg_get_policy_ddl > --------------------------------------------------------------------- > CREATE POLICY p0 ON t AS PERMISSIVE FOR ALL USING (((a % 2) =3D 1)); > (1 row) > > "TO PUBLIC" part is missing, maybe it's ok. > I used the logic below, which did not return PUBLIC as a role. I have added logic to default the TO clause to PUBLIC when no specific role name is provided valueDatum =3D heap_getattr(tuplePolicy, Anum_pg_policy_polroles, RelationGetDescr(pgPolicyRel), &attrIsNull); if (!attrIsNull) { ArrayType *policy_roles =3D DatumGetArrayTypePCopy(valueDatum); int nitems =3D ARR_DIMS(policy_roles)[0]; Oid *roles =3D (Oid *) ARR_DATA_PTR(policy_roles); > > > SELECT pg_get_policy_ddl(-1, 'p0', false); > ERROR: could not open relation with OID 4294967295 > as I mentioned in a nearby thread [1], this should be NULL instead of > ERROR. > [1] > https://postgr.es/m/CACJufxGbE4uJWu1YuqdmOx+7PMBpHvX_fbRMmHu=3Dr4SrsuW9tg= @mail.gmail.com > > Fixed in v4 patch. > > IMHO, get_formatted_string is not needed, most of the time, if pretty is > true, > we append "\t" and "\n", for that we can simply do > ``` > appendStringInfo(&buf, "CREATE POLICY %s ON %s ", > quote_identifier(NameStr(*policyName)), > generate_qualified_relation_name(policy_form->polrelid)); > if (pretty) > appendStringInfoString(buf, "\t\n"); > ``` > > The get_formatted_string function is needed. Instead of using multiple if statements for the pretty flag, it=E2=80=99s better to have a generic funct= ion. This will be useful if the pretty-format DDL implementation is accepted by the community, as it can be reused by other pg_get__ddl() DDL functions added in the future. > > in pg_get_triggerdef_worker, I found the below code pattern: > /* > * In non-pretty mode, always schema-qualify the target table name fo= r > * safety. In pretty mode, schema-qualify only if not visible. > */ > appendStringInfo(&buf, " ON %s ", > pretty ? > generate_relation_name(trigrec->tgrelid, NIL) : > generate_qualified_relation_name(trigrec->tgrelid)); > > maybe we can apply it too while construct query string: > "CREATE POLICY %s ON %s", > In my opinion, the table name should always be schema-qualified, which I have addressed in the v4 patch. The implementation of the pretty flag here differs from pg_get_triggerdef_worker, which is used only for the target table name. In my patch, the pretty flag adds \t and \n to each different clause (example AS, FOR, USING ...) --000000000000c0d4170641bf339c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

On Wed, Oct 22, 202= 5 at 12:51=E2=80=AFPM jian he <jian.universality@gmail.com> wrote:
On Thu, Oct 16, 2025 at 8:51=E2=80=AFPM Ak= shay Joshi
<aksh= ay.joshi@enterprisedb.com> wrote:
>
> Please find attached the v3 patch, which resolves all compilation erro= rs and warnings.
>

drop table if exists t, ts, ts1;
create table t(a int);
CREATE POLICY p0 ON t FOR ALL TO PUBLIC USING (a % 2 =3D 1);
SELECT pg_get_policy_ddl('t', 'p0', false);

=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 pg_get_policy_ddl
---------------------------------------------------------------------
=C2=A0 CREATE POLICY p0 ON t AS PERMISSIVE FOR ALL USING (((a % 2) =3D 1));=
(1 row)

"TO PUBLIC" part is missing, maybe it's ok.
<= div>
I used the logic below, which did not return PUBLIC as a role.=C2= =A0I have added logic to default the TO clause to PUBLIC when no specific r= ole name is provided=C2=A0
valueDatum =3D heap_getattr(tuplePolicy,
= Anum_pg_policy= _polroles,
RelationGetDescr(pgPolicyRel),
= &attrIsNull);
if (!attrIsNull)
{
Arra= yType *policy_roles =3D DatumGetArrayTy= pePCopy(valueDatum);
int nitems =3D ARR_= DIMS(policy_roles)[0];
Oid *roles =3D (Oid *) ARR_DATA_PTR(policy_roles);
=C2=A0 =C2=A0 =C2=A0


SELECT pg_get_policy_ddl(-1, 'p0', false);
ERROR:=C2=A0 could not open relation with OID 4294967295
as I mentioned in a nearby thread [1], this should be NULL instead of ERROR= .
[1] https://= postgr.es/m/CACJufxGbE4uJWu1YuqdmOx+7PMBpHvX_fbRMmHu=3Dr4SrsuW9tg@mail.gmai= l.com

Fixed in v4 patch.=C2=A0

IMHO, get_formatted_string is not needed, most of the time, if pretty is tr= ue,
we append "\t" and "\n", for that we can simply do
```
=C2=A0 appendStringInfo(&buf, "CREATE POLICY %s ON %s ",
=C2=A0 =C2=A0 =C2=A0 =C2=A0quote_identifier(NameStr(*policyName)),
=C2=A0 =C2=A0 =C2=A0 =C2=A0generate_qualified_relation_name(policy_form->= ;polrelid));
if (pretty)
=C2=A0 =C2=A0 appendStringInfoString(buf, "\t\n");
```


The get_formatted_string function is= needed. Instead of using multiple if statements for the pretty flag, it=E2=80=99s better to have a generic function. This w= ill be useful if the pretty-format DDL implementation is accepted by the co= mmunity, as it can be reused by other pg_get_<object>_ddl() DDL funct= ions added in the future.=C2=A0

in pg_get_triggerdef_worker, I found the below code pattern:
=C2=A0 =C2=A0 /*
=C2=A0 =C2=A0 =C2=A0* In non-pretty mode, always schema-qualify the target = table name for
=C2=A0 =C2=A0 =C2=A0* safety.=C2=A0 In pretty mode, schema-qualify only if = not visible.
=C2=A0 =C2=A0 =C2=A0*/
=C2=A0 =C2=A0 appendStringInfo(&buf, " ON %s ",
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0pretty ?
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0generate_relation_name(trigrec->tgrelid, NIL) :
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0generate_qualified_relation_name(trigrec->tgrelid));

maybe we can apply it too while construct query string:
"CREATE POLICY %s ON %s",

In my opinion,= the table name should always be schema-qualified, which=C2=A0I have addres= sed in the v4 patch. The implementation of the pretty flag her= e differs from pg_get_triggerdef_worker, which is used only fo= r the target table name. In my patch, the pretty flag adds \t and \n to each different clause (example AS, FOR,= USING ...)
=C2=A0
--000000000000c0d4170641bf339c-- --000000000000c0d4170641bf339e Content-Type: application/octet-stream; name="v4-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch" Content-Disposition: attachment; filename="v4-0001-Add-pg_get_policy_ddl-function-to-reconstruct-CREATE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mh20sol00 RnJvbSBhODZmZjlmYzJmZThmMGI5MDNiZWI2YWFlYzFjZDhlODY2N2JiYzRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBGcmksIDEwIE9jdCAyMDI1IDE1OjQ2OjEzICswNTMwClN1YmplY3Q6IFtQ QVRDSCB2NF0gQWRkIHBnX2dldF9wb2xpY3lfZGRsKCkgZnVuY3Rpb24gdG8gcmVjb25zdHJ1Y3Qg Q1JFQVRFCiBQT0xJQ1kgc3RhdGVtZW50cwpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6 IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJp dAoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN5c3RlbSBmdW5jdGlvbjoKcGdfZ2V0X3Bv bGljeV9kZGwocmVnY2xhc3MgdGFibGUsIG5hbWUgcG9saWN5X25hbWUsIGJvb2wgcHJldHR5KSwK d2hpY2ggcmVjb25zdHJ1Y3RzIHRoZSBDUkVBVEUgUE9MSUNZIHN0YXRlbWVudCBmb3IgdGhlIHNw ZWNpZmllZCBwb2xpY3kuCgpVc2FnZSBleGFtcGxlczoKU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRs KCdybHNfdGFibGUnLCAncG9sMScsIGZhbHNlKTsgLS0gbm9uLXByZXR0eSBmb3JtYXR0ZWQgRERM ClNFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RhYmxlJywgJ3BvbDEnLCB0cnVlKTsgIC0t IHByZXR0eSBmb3JtYXR0ZWQgRERMCgpSZWZlcmVuY2U6IFBHLTE2MwpBdXRob3I6IEFrc2hheSBK b3NoaSA8YWtzaGF5Lmpvc2hpQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiDDgWx2YXJv IEhlcnJlcmEgPGFsdmhlcnJlQGt1cmlsZW11LmRlPgpSZXZpZXdlZC1ieTogUGhpbGlwIEFsZ2Vy IDxwYWFsZ2VyMEBnbWFpbC5jb20+Ci0tLQogZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNn bWwgICAgICAgICAgfCAgNDUgKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3BvbGljeS5jICAg ICAgICAgICAgIHwgIDI3ICsrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAg ICAgICAgfCAxOTkgKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3BvbGljeS5o ICAgICAgICAgICAgIHwgICAyICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93c2VjdXJp dHkub3V0IHwgMjEwICsrKysrKysrKysrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3Jvd3NlY3VyaXR5LnNxbCAgICAgIHwgIDgwICsrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA1 NjUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9mdW5jL2Z1bmMtaW5mby5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwK aW5kZXggYzM5MzgzMmQ5NGMuLjRiOWM2NjFjMjBiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv ZnVuYy9mdW5jLWluZm8uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dt bApAQCAtMzc5Nyw0ICszNzk3LDQ5IEBAIGFjbCAgICAgIHwge3Bvc3RncmVzPWFyd2REeHRtL3Bv c3RncmVzLGZvbz1yL3Bvc3RncmVzfQogCiAgIDwvc2VjdDI+CiAKKyAgPHNlY3QyIGlkPSJmdW5j dGlvbnMtZ2V0LW9iamVjdC1kZGwiPgorICAgPHRpdGxlPkdldCBPYmplY3QgRERMIEZ1bmN0aW9u czwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIDx4 cmVmIGxpbmtlbmQ9ImZ1bmN0aW9ucy1nZXQtb2JqZWN0LWRkbC10YWJsZSIvPgorICAgIHJldHVy biB0aGUgRGF0YSBEZWZpbml0aW9uIExhbmd1YWdlIChEREwpIHN0YXRlbWVudCBmb3IgYW55IGdp dmVuIGRhdGFiYXNlIG9iamVjdC4KKyAgICBUaGlzIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQgYXMg YSBzZXQgb2YgZGlzdGluY3QgZnVuY3Rpb25zIGZvciBlYWNoIG9iamVjdCB0eXBlLgorICAgPC9w YXJhPgorCisgICA8dGFibGUgaWQ9ImZ1bmN0aW9ucy1nZXQtb2JqZWN0LWRkbC10YWJsZSI+Cisg ICAgPHRpdGxlPkdldCBPYmplY3QgRERMIEZ1bmN0aW9uczwvdGl0bGU+CisgICAgPHRncm91cCBj b2xzPSIxIj4KKyAgICAgPHRoZWFkPgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnkgcm9sZT0i ZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgorICAgICAgICBG dW5jdGlvbgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRGVzY3JpcHRp b24KKyAgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgIDwvcm93PgorICAgICA8L3RoZWFkPgor CisgICAgIDx0Ym9keT4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFi bGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4dGVy bT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2dldF9wb2xpY3lfZGRsPC9wcmltYXJ5PgorICAgICAg ICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX2dldF9wb2xpY3lfZGRsPC9mdW5j dGlvbj4KKyAgICAgICAgKCA8cGFyYW1ldGVyPnRhYmxlPC9wYXJhbWV0ZXI+IDx0eXBlPnJlZ2Ns YXNzPC90eXBlPiwgPHBhcmFtZXRlcj5wb2xpY3lfbmFtZTwvcGFyYW1ldGVyPiA8dHlwZT5uYW1l PC90eXBlPiwgPHBhcmFtZXRlcj5wcmV0dHk8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlw ZT4gKQorICAgICAgICA8cmV0dXJudmFsdWU+dGV4dDwvcmV0dXJudmFsdWU+CisgICAgICAgPC9w YXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZWNvbnN0cnVjdHMgdGhlIENSRUFURSBQT0xJ Q1kgc3RhdGVtZW50IGZyb20gdGhlIHN5c3RlbSBjYXRhbG9ncyBmb3IgYSBzcGVjaWZpZWQgdGFi bGUgYW5kIHBvbGljeSBuYW1lLgorICAgICAgICBXaGVuIHRoZSBwcmV0dHkgZmxhZyBpcyBzZXQg dG8gdHJ1ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB3ZWxsLWZvcm1hdHRlZCBEREwgc3RhdGVt ZW50LgorICAgICAgICBUaGUgcmVzdWx0IGlzIGEgY29tcHJlaGVuc2l2ZSA8Y29tbWFuZD5DUkVB VEUgUE9MSUNZPC9jb21tYW5kPiBzdGF0ZW1lbnQuCisgICAgICAgPC9wYXJhPjwvZW50cnk+Cisg ICAgICA8L3Jvdz4KKyAgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgIDwvdGFibGU+CisK KyAgPC9zZWN0Mj4KKwogICA8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvcG9saWN5LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wb2xpY3kuYwppbmRleCA4MzA1Njk2 MGZlNC4uMWFiZTBjNDQzNTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3BvbGlj eS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3BvbGljeS5jCkBAIC0xMjgsNiArMTI4LDMz IEBAIHBhcnNlX3BvbGljeV9jb21tYW5kKGNvbnN0IGNoYXIgKmNtZF9uYW1lKQogCXJldHVybiBw b2xjbWQ7CiB9CiAKKy8qCisgKiBnZXRfcG9saWN5X2NtZF9uYW1lIC0KKyAqCSBoZWxwZXIgZnVu Y3Rpb24gdG8gY29udmVydCBjaGFyIHJlcHJlc2VudGF0aW9uIHRvIGZ1bGwgY29tbWFuZCBzdHJp bmdzLgorICoKKyAqIGNtZCAtICBWYWxpZCB2YWx1ZXMgYXJlICcqJywgJ3InLCAnYScsICd3JyBh bmQgJ2QnLgorICoKKyAqLworY2hhciAqCitnZXRfcG9saWN5X2NtZF9uYW1lKGNoYXIgY21kKQor eworCXN3aXRjaCAoY21kKQorCXsKKwkJY2FzZSAnKic6CisJCQlyZXR1cm4gIkFMTCI7CisJCWNh c2UgQUNMX1NFTEVDVF9DSFI6CisJCQlyZXR1cm4gIlNFTEVDVCI7CisJCWNhc2UgQUNMX0lOU0VS VF9DSFI6CisJCQlyZXR1cm4gIklOU0VSVCI7CisJCWNhc2UgQUNMX1VQREFURV9DSFI6CisJCQly ZXR1cm4gIlVQREFURSI7CisJCWNhc2UgQUNMX0RFTEVURV9DSFI6CisJCQlyZXR1cm4gIkRFTEVU RSI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIHBvbGljeSBjb21t YW5kIik7CisJfQorfQorCiAvKgogICogcG9saWN5X3JvbGVfbGlzdF90b19hcnJheQogICoJIGhl bHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgbGlzdCBvZiBSb2xlU3BlY3MgdG8gYW4gYXJyYXkg b2YKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCA3OWVjMTM2MjMxYi4uYzA1ZTQ3ODY3 MDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTMzLDEyICszMywxNCBAQAogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0 b3IuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3BhcnRpdGlvbmVkX3RhYmxlLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X3RyaWdnZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21t YW5kcy9kZWZyZW0uaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVk ZSAiY29tbWFuZHMvcG9saWN5LmgiCiAjaW5jbHVkZSAiY29tbW9uL2tleXdvcmRzLmgiCiAjaW5j bHVkZSAiZXhlY3V0b3Ivc3BpLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgpAQCAtNTQ2LDYgKzU0 OCwxMCBAQCBzdGF0aWMgdm9pZCBnZXRfanNvbl90YWJsZV9uZXN0ZWRfY29sdW1ucyhUYWJsZUZ1 bmMgKnRmLCBKc29uVGFibGVQbGFuICpwbGFuLAogCQkJCQkJCQkJCSAgZGVwYXJzZV9jb250ZXh0 ICpjb250ZXh0LAogCQkJCQkJCQkJCSAgYm9vbCBzaG93aW1wbGljaXQsCiAJCQkJCQkJCQkJICBi b29sIG5lZWRjb21tYSk7CitzdGF0aWMgdm9pZCBnZXRfZm9ybWF0dGVkX3N0cmluZyhTdHJpbmdJ bmZvIGJ1ZiwKKwkJCQkJCQkJIGJvb2wgcHJldHR5LAorCQkJCQkJCQkgaW50IG5vT2ZUYWJDaGFy cywKKwkJCQkJCQkJIGNvbnN0IGNoYXIgKmZtdCwuLi4pIHBnX2F0dHJpYnV0ZV9wcmludGYoNCwg NSk7CiAKICNkZWZpbmUgb25seV9tYXJrZXIocnRlKSAgKChydGUpLT5pbmggPyAiIiA6ICJPTkxZ ICIpCiAKQEAgLTEzNzM4LDMgKzEzNzQ0LDE5NiBAQCBnZXRfcmFuZ2VfcGFydGJvdW5kX3N0cmlu ZyhMaXN0ICpib3VuZF9kYXR1bXMpCiAKIAlyZXR1cm4gYnVmLT5kYXRhOwogfQorCisvKgorICog Z2V0X2Zvcm1hdHRlZF9zdHJpbmcKKyAqCisgKiBSZXR1cm4gYSBmb3JtYXR0ZWQgdmVyc2lvbiBv ZiB0aGUgc3RyaW5nLgorICoKKyAqIHByZXR0eSAtIElmIHByZXR0eSBpcyB0cnVlLCB0aGUgb3V0 cHV0IGluY2x1ZGVzIHRhYnMgKFx0KSBhbmQgbmV3bGluZXMgKFxuKS4KKyAqIG5vT2ZUYWJDaGFy cyAtIGluZGVudCB3aXRoIHNwZWNpZmllZCBubyBvZiB0YWJzLgorICogZm10IC0gcHJpbnRmLXN0 eWxlIGZvcm1hdCBzdHJpbmcgdXNlZCBieSBhcHBlbmRTdHJpbmdJbmZvVkEuCisgKi8KK3N0YXRp YyB2b2lkCitnZXRfZm9ybWF0dGVkX3N0cmluZyhTdHJpbmdJbmZvIGJ1ZiwgYm9vbCBwcmV0dHks IGludCBub09mVGFiQ2hhcnMsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCit7CisJdmFfbGlzdAkJYXJn czsKKworCWlmIChwcmV0dHkpCisJeworCQkvKiBJbmRlbnQgd2l0aCB0YWJzICovCisJCWZvciAo aW50IGkgPSAwOyBpIDwgbm9PZlRhYkNoYXJzOyBpKyspCisJCXsKKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGJ1ZiwgJ1x0Jyk7CisJCX0KKwl9CisJZWxzZQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cihidWYsICcgJyk7CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWFwcGVuZFN0cmluZ0luZm9W QShidWYsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJLyogSWYgcHJldHR5IG1vZGUs IGFwcGVuZCBuZXdsaW5lIGF0IHRoZSBlbmQgKi8KKwlpZiAocHJldHR5KQorCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihidWYsICdcbicpOworfQorCisvKgorICogcGdfZ2V0X3BvbGljeV9kZGwKKyAq CisgKiBHZW5lcmF0ZSBhIENSRUFURSBQT0xJQ1kgc3RhdGVtZW50IGZvciB0aGUgc3BlY2lmaWVk IHBvbGljeS4KKyAqCisgKiB0YWJsZUlEIC0gVGFibGUgSUQgb2YgdGhlIHBvbGljeS4KKyAqIHBv bGljeU5hbWUgLSBOYW1lIG9mIHRoZSBwb2xpY3kgZm9yIHdoaWNoIHRvIGdlbmVyYXRlIHRoZSBE REwuCisgKiBwcmV0dHkgLSBJZiB0cnVlLCBmb3JtYXQgdGhlIERETCB3aXRoIGluZGVudGF0aW9u IGFuZCBsaW5lIGJyZWFrcy4KKyAqLworRGF0dW0KK3BnX2dldF9wb2xpY3lfZGRsKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJT2lkCQkJdGFibGVJRCA9IFBHX0dFVEFSR19PSUQoMCk7CisJTmFtZQkJ cG9saWN5TmFtZSA9IFBHX0dFVEFSR19OQU1FKDEpOworCWJvb2wJCXByZXR0eSA9IFBHX0dFVEFS R19CT09MKDIpOworCWJvb2wJCWF0dHJJc051bGw7CisJaW50CQkJcHJldHR5RmxhZ3M7CisJRGF0 dW0JCXZhbHVlRGF0dW07CisJSGVhcFR1cGxlCXR1cGxlUG9saWN5OworCVJlbGF0aW9uCXBnUG9s aWN5UmVsOworCWNoYXIJICAgKnRhcmdldFRhYmxlOworCVNjYW5LZXlEYXRhIHNrZXlbMl07CisJ U3lzU2NhbkRlc2Mgc3NjYW47CisJRm9ybV9wZ19wb2xpY3kgcG9saWN5Rm9ybTsKKwlTdHJpbmdJ bmZvRGF0YSBidWY7CisKKwkvKiBWYWxpZGF0ZSB0aGF0IHRoZSByZWxhdGlvbiBleGlzdHMgKi8K KwlpZiAoIU9pZElzVmFsaWQodGFibGVJRCkgfHwgZ2V0X3JlbF9uYW1lKHRhYmxlSUQpID09IE5V TEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKworCXRh cmdldFRhYmxlID0gZ2VuZXJhdGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUodGFibGVJRCk7CisJ LyogRmluZCBwb2xpY3kgdG8gYmVnaW4gc2NhbiAqLworCXBnUG9saWN5UmVsID0gdGFibGVfb3Bl bihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyogU2V0IGtleSAtIHBv bGljeSdzIHJlbGF0aW9uIGlkLiAqLworCVNjYW5LZXlJbml0KCZza2V5WzBdLAorCQkJCUFudW1f cGdfcG9saWN5X3BvbHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwK KwkJCQlPYmplY3RJZEdldERhdHVtKHRhYmxlSUQpKTsKKworCS8qIFNldCBrZXkgLSBwb2xpY3kn cyBuYW1lLiAqLworCVNjYW5LZXlJbml0KCZza2V5WzFdLAorCQkJCUFudW1fcGdfcG9saWN5X3Bv bG5hbWUsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX05BTUVFUSwKKwkJCQlDU3RyaW5n R2V0RGF0dW0oTmFtZVN0cigqcG9saWN5TmFtZSkpKTsKKworCXNzY2FuID0gc3lzdGFibGVfYmVn aW5zY2FuKHBnUG9saWN5UmVsLAorCQkJCQkJCSAgIFBvbGljeVBvbHJlbGlkUG9sbmFtZUluZGV4 SWQsIHRydWUsIE5VTEwsIDIsCisJCQkJCQkJICAgc2tleSk7CisKKwl0dXBsZVBvbGljeSA9IHN5 c3RhYmxlX2dldG5leHQoc3NjYW4pOworCS8qIENoZWNrIHRoYXQgdGhlIHBvbGljeSBpcyBmb3Vu ZCwgcmFpc2UgYW4gZXJyb3IgaWYgbm90LiAqLworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBs ZVBvbGljeSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklO RURfT0JKRUNUKSwKKwkJCQkgZXJybXNnKCJwb2xpY3kgXCIlc1wiIGZvciB0YWJsZSBcIiVzXCIg ZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJTmFtZVN0cigqcG9saWN5TmFtZSksCisJCQkJCQl0YXJn ZXRUYWJsZSkpKTsKKworCXBvbGljeUZvcm0gPSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVCh0 dXBsZVBvbGljeSk7CisKKwkvKiBCdWlsZCB0aGUgQ1JFQVRFIFBPTElDWSBzdGF0ZW1lbnQgKi8K KwlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHksIDAsICJDUkVBVEUgUE9MSUNZICVz IE9OICVzIiwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoKnBvbGljeU5hbWUpKSwK KwkJCQkJCSB0YXJnZXRUYWJsZSk7CisKKwkvKiBDaGVjayB0aGUgdHlwZSBpcyBQRVJNSVNTSVZF IG9yIFJFU1RSSUNUSVZFICovCisJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5LCAx LAorCQkJCQkJIHBvbGljeUZvcm0tPnBvbHBlcm1pc3NpdmUgPyAiQVMgUEVSTUlTU0lWRSIgOiAi QVMgUkVTVFJJQ1RJVkUiKTsKKworCS8qIENoZWNrIGNvbW1hbmQgdG8gd2hpY2ggdGhlIHBvbGlj eSBhcHBsaWVzICovCisJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5LCAxLCAiRk9S ICVzIiwKKwkJCQkJCSBnZXRfcG9saWN5X2NtZF9uYW1lKHBvbGljeUZvcm0tPnBvbGNtZCkpOwor CisJLyogQ2hlY2sgaWYgdGhlIHBvbGljeSBoYXMgYSBUTyBsaXN0ICovCisJdmFsdWVEYXR1bSA9 IGhlYXBfZ2V0YXR0cih0dXBsZVBvbGljeSwKKwkJCQkJCQkgIEFudW1fcGdfcG9saWN5X3BvbHJv bGVzLAorCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwZ1BvbGljeVJlbCksCisJCQkJCQkJICAm YXR0cklzTnVsbCk7CisJaWYgKCFhdHRySXNOdWxsKQorCXsKKwkJQXJyYXlUeXBlICAqcG9saWN5 X3JvbGVzID0gRGF0dW1HZXRBcnJheVR5cGVQQ29weSh2YWx1ZURhdHVtKTsKKwkJaW50CQkJbml0 ZW1zID0gQVJSX0RJTVMocG9saWN5X3JvbGVzKVswXTsKKwkJT2lkCQkgICAqcm9sZXMgPSAoT2lk ICopIEFSUl9EQVRBX1BUUihwb2xpY3lfcm9sZXMpOworCQlTdHJpbmdJbmZvRGF0YSByb2xlX25h bWVzOworCisJCWluaXRTdHJpbmdJbmZvKCZyb2xlX25hbWVzKTsKKworCQlmb3IgKGludCBpID0g MDsgaSA8IG5pdGVtczsgaSsrKQorCQl7CisJCQlpZiAoT2lkSXNWYWxpZChyb2xlc1tpXSkpCisJ CQl7CisJCQkJY2hhcgkgICAqcm9sZW5hbWUgPSBHZXRVc2VyTmFtZUZyb21JZChyb2xlc1tpXSwg ZmFsc2UpOworCisJCQkJaWYgKGkgPiAwKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZy b2xlX25hbWVzLCAiLCAiKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZyb2xlX25hbWVz LCByb2xlbmFtZSk7CisJCQl9CisJCX0KKworCQlpZiAocm9sZV9uYW1lcy5sZW4gPiAwKQorCQkJ Z2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5LCAxLCAiVE8gJXMiLCByb2xlX25hbWVz LmRhdGEpOworCQllbHNlCisKKwkJCS8qCisJCQkgKiBXaGVuIG5vIHNwZWNpZmljIHJvbGUgaXMg cHJvdmlkZWQsIGdlbmVyYXRlIHRoZSBUTyBjbGF1c2Ugd2l0aAorCQkJICogdGhlIFBVQkxJQyBy b2xlLgorCQkJICovCisJCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHksIDEsICJU TyBQVUJMSUMiKTsKKwl9CisKKwlwcmV0dHlGbGFncyA9IEdFVF9QUkVUVFlfRkxBR1MocHJldHR5 KTsKKwkvKiBDaGVjayBpZiB0aGUgcG9saWN5IGhhcyBhIFVTSU5HIGV4cHIgKi8KKwl2YWx1ZURh dHVtID0gaGVhcF9nZXRhdHRyKHR1cGxlUG9saWN5LAorCQkJCQkJCSAgQW51bV9wZ19wb2xpY3lf cG9scXVhbCwKKwkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocGdQb2xpY3lSZWwpLAorCQkJCQkJ CSAgJmF0dHJJc051bGwpOworCWlmICghYXR0cklzTnVsbCkKKwl7CisJCXRleHQJICAgKmV4cHJ0 ZXh0ID0gRGF0dW1HZXRUZXh0UFAodmFsdWVEYXR1bSk7CisJCXRleHQJICAgKnVzaW5nRXhwcmVz c2lvbiA9IHBnX2dldF9leHByX3dvcmtlcihleHBydGV4dCwKKwkJCQkJCQkJCQkJCQkJIHBvbGlj eUZvcm0tPnBvbHJlbGlkLAorCQkJCQkJCQkJCQkJCQkgcHJldHR5RmxhZ3MpOworCisJCWdldF9m b3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eSwgMSwgIlVTSU5HICglcykiLAorCQkJCQkJCSB0 ZXh0X3RvX2NzdHJpbmcodXNpbmdFeHByZXNzaW9uKSk7CisJfQorCisJLyogQ2hlY2sgaWYgdGhl IHBvbGljeSBoYXMgYSBXSVRIIENIRUNLIGV4cHIgKi8KKwl2YWx1ZURhdHVtID0gaGVhcF9nZXRh dHRyKHR1cGxlUG9saWN5LAorCQkJCQkJCSAgQW51bV9wZ19wb2xpY3lfcG9sd2l0aGNoZWNrLAor CQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwZ1BvbGljeVJlbCksCisJCQkJCQkJICAmYXR0cklz TnVsbCk7CisJaWYgKCFhdHRySXNOdWxsKQorCXsKKwkJdGV4dAkgICAqZXhwcnRleHQgPSBEYXR1 bUdldFRleHRQUCh2YWx1ZURhdHVtKTsKKwkJdGV4dAkgICAqY2hlY2tFeHByZXNzaW9uID0gcGdf Z2V0X2V4cHJfd29ya2VyKGV4cHJ0ZXh0LAorCQkJCQkJCQkJCQkJCQkgcG9saWN5Rm9ybS0+cG9s cmVsaWQsCisJCQkJCQkJCQkJCQkJCSBwcmV0dHlGbGFncyk7CisKKwkJZ2V0X2Zvcm1hdHRlZF9z dHJpbmcoJmJ1ZiwgcHJldHR5LCAxLCAiV0lUSCBDSEVDSyAoJXMpIiwKKwkJCQkJCQkgdGV4dF90 b19jc3RyaW5nKGNoZWNrRXhwcmVzc2lvbikpOworCX0KKworCS8qIFJlcGxhY2UgJ1xuJyB3aXRo ICc7JyBpZiBuZXdsaW5lIGF0IHRoZSBlbmQgKi8KKwlpZiAoYnVmLmxlbiA+IDAgJiYgYnVmLmRh dGFbYnVmLmxlbiAtIDFdID09ICdcbicpCisJCWJ1Zi5kYXRhW2J1Zi5sZW4gLSAxXSA9ICc7JzsK KwllbHNlCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICc7Jyk7CisKKwkvKiBDbGVhbiB1 cC4gKi8KKwlzeXN0YWJsZV9lbmRzY2FuKHNzY2FuKTsKKwl0YWJsZV9jbG9zZShwZ1BvbGljeVJl bCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCVBHX1JFVFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQo YnVmLmRhdGEpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IGVlY2I0M2VjNmYwLi41 MzZjNWE4NTdkYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAor KysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC00MDIxLDYgKzQwMjEsOSBA QAogICBwcm9uYW1lID0+ICdwZ19nZXRfZnVuY3Rpb25fc3FsYm9keScsIHByb3ZvbGF0aWxlID0+ ICdzJywKICAgcHJvcmV0dHlwZSA9PiAndGV4dCcsIHByb2FyZ3R5cGVzID0+ICdvaWQnLAogICBw cm9zcmMgPT4gJ3BnX2dldF9mdW5jdGlvbl9zcWxib2R5JyB9LAoreyBvaWQgPT4gJzg4MTEnLCBk ZXNjciA9PiAnZ2V0IENSRUFURSBzdGF0ZW1lbnQgZm9yIHBvbGljeScsCisgIHByb25hbWUgPT4g J3BnX2dldF9wb2xpY3lfZGRsJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVz ID0+ICdyZWdjbGFzcyBuYW1lIGJvb2wnLCBwcm9zcmMgPT4gJ3BnX2dldF9wb2xpY3lfZGRsJyB9 LAogCiB7IG9pZCA9PiAnMTY4NicsIGRlc2NyID0+ICdsaXN0IG9mIFNRTCBrZXl3b3JkcycsCiAg IHByb25hbWUgPT4gJ3BnX2dldF9rZXl3b3JkcycsIHByb2Nvc3QgPT4gJzEwJywgcHJvcm93cyA9 PiAnNTAwJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3BvbGljeS5oIGIvc3Jj L2luY2x1ZGUvY29tbWFuZHMvcG9saWN5LmgKaW5kZXggZjA2YWExZGY0MzkuLjQwZTQ1YjczOGY0 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9wb2xpY3kuaAorKysgYi9zcmMvaW5j bHVkZS9jb21tYW5kcy9wb2xpY3kuaApAQCAtMzUsNCArMzUsNiBAQCBleHRlcm4gT2JqZWN0QWRk cmVzcyByZW5hbWVfcG9saWN5KFJlbmFtZVN0bXQgKnN0bXQpOwogCiBleHRlcm4gYm9vbCByZWxh dGlvbl9oYXNfcG9saWNpZXMoUmVsYXRpb24gcmVsKTsKIAorZXh0ZXJuIGNoYXIgKmdldF9wb2xp Y3lfY21kX25hbWUoY2hhciBjbWQpOworCiAjZW5kaWYJCQkJCQkJLyogUE9MSUNZX0ggKi8KZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcm93c2VjdXJpdHkub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9yb3dzZWN1cml0eS5vdXQKaW5kZXggNDJiNzhhMjQ2MDMu LjgxNWE0ZmY3MmNlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jvd3Nl Y3VyaXR5Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jvd3NlY3VyaXR5Lm91 dApAQCAtNDg0MiwxMSArNDg0MiwyMTcgQEAgcmVzZXQgcmxzX3Rlc3QuYmxhaDsKIGRyb3AgZnVu Y3Rpb24gcmxzX2YodGV4dCk7CiBkcm9wIHRhYmxlIHJsc190LCB0ZXN0X3Q7CiAtLQorLS0gVGVz dCBmb3IgcGdfZ2V0X3BvbGljeV9kZGwodGFibGVOYW1lLCBwb2xpY3lOYW1lLCBwcmV0dHkpIGZ1 bmN0aW9uLgorLS0KK0NSRUFURSBUQUJMRSBybHNfdGJsXzEgKAorICAgIGRpZCAgICAgICAgIGlu dCBwcmltYXJ5IGtleSwKKyAgICBjaWQgICAgICAgICBpbnQsCisgICAgZGxldmVsICAgICAgaW50 IG5vdCBudWxsLAorICAgIGRhdXRob3IgICAgIG5hbWUsCisgICAgZHRpdGxlICAgICAgdGV4dAor KTsKK0dSQU5UIEFMTCBPTiBybHNfdGJsXzEgVE8gcHVibGljOworQ1JFQVRFIFRBQkxFIHJsc190 YmxfMiAoCisgICAgcGd1c2VyICAgICAgbmFtZSBwcmltYXJ5IGtleSwKKyAgICBzZWNsdiAgICAg ICBpbnQKKyk7CitHUkFOVCBTRUxFQ1QgT04gcmxzX3RibF8yIFRPIHB1YmxpYzsKKy0tIFRlc3Qg UEVSTUlTU0lWRSBhbmQgUkVTVFJJQ1RJVkUKK0NSRUFURSBQT0xJQ1kgcmxzX3AxIE9OIHJsc190 YmxfMSBBUyBQRVJNSVNTSVZFCisgICAgVVNJTkcgKGRsZXZlbCA8PSAoU0VMRUNUIHNlY2x2IEZS T00gcmxzX3RibF8yIFdIRVJFIHBndXNlciA9IGN1cnJlbnRfdXNlcikpOworQ1JFQVRFIFBPTElD WSBybHNfcDIgT04gcmxzX3RibF8xIEFTIFJFU1RSSUNUSVZFIFVTSU5HIChjaWQgPD4gNDQgQU5E IGNpZCA8IDUwKTsKKy0tIFRlc3QgRk9SIEFMTCB8IFNFTEVDVCB8IElOU0VSVCB8IFVQREFURSB8 IERFTEVURQorQ1JFQVRFIFBPTElDWSBybHNfcDMgT04gcmxzX3RibF8xIEZPUiBBTEwgVVNJTkcg KGRhdXRob3IgPSBjdXJyZW50X3VzZXIpOworQ1JFQVRFIFBPTElDWSBybHNfcDQgT04gcmxzX3Ri bF8xIEZPUiBTRUxFQ1QgVVNJTkcgKGNpZCAlIDIgPSAwKTsKK0NSRUFURSBQT0xJQ1kgcmxzX3A1 IE9OIHJsc190YmxfMSBGT1IgSU5TRVJUIFdJVEggQ0hFQ0sgKGNpZCAlIDIgPSAxKTsKK0NSRUFU RSBQT0xJQ1kgcmxzX3A2IE9OIHJsc190YmxfMSBGT1IgVVBEQVRFIFVTSU5HIChjaWQgJSAyID0g MCk7CitDUkVBVEUgUE9MSUNZIHJsc19wNyBPTiBybHNfdGJsXzEgRk9SIERFTEVURSBVU0lORyAo Y2lkIDwgOCk7CistLSBUZXN0IFRPIHsgcm9sZV9uYW1lIC4uLiB9CitDUkVBVEUgUE9MSUNZIHJs c19wOCBPTiBybHNfdGJsXzEgVE8gcmVncmVzc19ybHNfZGF2ZSwgcmVncmVzc19ybHNfYWxpY2Ug VVNJTkcgKHRydWUpOworQ1JFQVRFIFBPTElDWSBybHNfcDkgT04gcmxzX3RibF8xIFRPIHJlZ3Jl c3NfcmxzX2V4ZW1wdF91c2VyIFdJVEggQ0hFQ0sgKGNpZCA9IChTRUxFQ1Qgc2VjbHYgRlJPTSBy bHNfdGJsXzIpKTsKKy0tIFRlc3QgTlVMTCB2YWx1ZQorU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRs KE5VTEwsICdybHNfcDEnLCBmYWxzZSk7CisgcGdfZ2V0X3BvbGljeV9kZGwgCistLS0tLS0tLS0t LS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgndGFiMScs IE5VTEwsIGZhbHNlKTsKK0VSUk9SOiAgcmVsYXRpb24gInRhYjEiIGRvZXMgbm90IGV4aXN0CitM SU5FIDE6IFNFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgndGFiMScsIE5VTEwsIGZhbHNlKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCBwZ19nZXRfcG9saWN5X2Rk bChOVUxMLCBOVUxMLCBmYWxzZSk7CisgcGdfZ2V0X3BvbGljeV9kZGwgCistLS0tLS0tLS0tLS0t LS0tLS0tCisgCisoMSByb3cpCisKKy0tIFRlc3QgLTEgYXMgdGFibGUgb2lkCisgU0VMRUNUIHBn X2dldF9wb2xpY3lfZGRsKC0xLCAncmxzX3AxJywgZmFsc2UpOworIHBnX2dldF9wb2xpY3lfZGRs IAorLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBUYWJsZSBkb2VzIG5vdCBl eGlzdAorU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCd0YWIxJywgJ3Jsc19wMScsIGZhbHNlKTsK K0VSUk9SOiAgcmVsYXRpb24gInRhYjEiIGRvZXMgbm90IGV4aXN0CitMSU5FIDE6IFNFTEVDVCBw Z19nZXRfcG9saWN5X2RkbCgndGFiMScsICdybHNfcDEnLCBmYWxzZSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeCistLSBQb2xpY3kgZG9lcyBub3QgZXhpc3QKK1NFTEVDVCBw Z19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3BvbDEnLCBmYWxzZSk7CitFUlJPUjogIHBv bGljeSAicG9sMSIgZm9yIHRhYmxlICJyZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIiBkb2Vz IG5vdCBleGlzdAorLS0gV2l0aG91dCBQcmV0dHkgZm9ybWF0dGVkCitTRUxFQ1QgcGdfZ2V0X3Bv bGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDEnLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgIENSRUFURSBQT0xJQ1kgcmxzX3AxIE9OIHJlZ3Jlc3Nfcmxz X3NjaGVtYS5ybHNfdGJsXzEgQVMgUEVSTUlTU0lWRSBGT1IgQUxMIFRPIFBVQkxJQyBVU0lORyAo KGRsZXZlbCA8PSAoIFNFTEVDVCBybHNfdGJsXzIuc2VjbHYrCisgICAgRlJPTSBybHNfdGJsXzIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisg ICBXSEVSRSAocmxzX3RibF8yLnBndXNlciA9IENVUlJFTlRfVVNFUikpKSk7CisoMSByb3cpCisK K1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMicsIGZhbHNlKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIENSRUFURSBQT0xJQ1kgcmxzX3AyIE9OIHJl Z3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgQVMgUkVTVFJJQ1RJVkUgRk9SIEFMTCBUTyBQVUJM SUMgVVNJTkcgKCgoY2lkIDw+IDQ0KSBBTkQgKGNpZCA8IDUwKSkpOworKDEgcm93KQorCitTRUxF Q1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDMnLCBmYWxzZSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Bv bGljeV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgIENSRUFURSBQT0xJQ1kgcmxzX3AzIE9OIHJlZ3Jlc3NfcmxzX3NjaGVt YS5ybHNfdGJsXzEgQVMgUEVSTUlTU0lWRSBGT1IgQUxMIFRPIFBVQkxJQyBVU0lORyAoKGRhdXRo b3IgPSBDVVJSRU5UX1VTRVIpKTsKKygxIHJvdykKKworU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRs KCdybHNfdGJsXzEnLCAncmxzX3A0JywgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBDUkVBVEUgUE9MSUNZIHJs c19wNCBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIEFTIFBFUk1JU1NJVkUgRk9SIFNF TEVDVCBUTyBQVUJMSUMgVVNJTkcgKCgoY2lkICUgMikgPSAwKSk7CisoMSByb3cpCisKK1NFTEVD VCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNScsIGZhbHNlKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xp Y3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgIENSRUFURSBQT0xJQ1kgcmxzX3A1IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5y bHNfdGJsXzEgQVMgUEVSTUlTU0lWRSBGT1IgSU5TRVJUIFRPIFBVQkxJQyBXSVRIIENIRUNLICgo KGNpZCAlIDIpID0gMSkpOworKDEgcm93KQorCitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Js c190YmxfMScsICdybHNfcDYnLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3BvbGljeV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIENSRUFURSBQT0xJQ1kgcmxzX3A2 IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEgQVMgUEVSTUlTU0lWRSBGT1IgVVBEQVRF IFRPIFBVQkxJQyBVU0lORyAoKChjaWQgJSAyKSA9IDApKTsKKygxIHJvdykKKworU0VMRUNUIHBn X2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A3JywgZmFsc2UpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBDUkVBVEUgUE9MSUNZ IHJsc19wNyBPTiByZWdyZXNzX3Jsc19zY2hlbWEucmxzX3RibF8xIEFTIFBFUk1JU1NJVkUgRk9S IERFTEVURSBUTyBQVUJMSUMgVVNJTkcgKChjaWQgPCA4KSk7CisoMSByb3cpCisKK1NFTEVDVCBw Z19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wOCcsIGZhbHNlKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Bv bGljeV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQ1JFQVRFIFBPTElDWSBybHNfcDggT04gcmVn cmVzc19ybHNfc2NoZW1hLnJsc190YmxfMSBBUyBQRVJNSVNTSVZFIEZPUiBBTEwgVE8gcmVncmVz c19ybHNfZGF2ZSwgcmVncmVzc19ybHNfYWxpY2UgVVNJTkcgKHRydWUpOworKDEgcm93KQorCitT RUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDknLCBmYWxzZSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF9wb2xpY3lfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgIENSRUFURSBQT0xJQ1kgcmxzX3A5IE9OIHJlZ3Jlc3NfcmxzX3NjaGVt YS5ybHNfdGJsXzEgQVMgUEVSTUlTU0lWRSBGT1IgQUxMIFRPIHJlZ3Jlc3NfcmxzX2V4ZW1wdF91 c2VyIFdJVEggQ0hFQ0sgKChjaWQgPSAoIFNFTEVDVCBybHNfdGJsXzIuc2VjbHYrCisgICAgRlJP TSBybHNfdGJsXzIpKSk7CisoMSByb3cpCisKKy0tIFdpdGggUHJldHR5IGZvcm1hdHRlZAorXHBz ZXQgZm9ybWF0IHVuYWxpZ25lZAorU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEn LCAncmxzX3AxJywgdHJ1ZSk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNf cDEgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMQorCUFTIFBFUk1JU1NJVkUKKwlGT1Ig QUxMCisJVE8gUFVCTElDCisJVVNJTkcgKGRsZXZlbCA8PSAoKCBTRUxFQ1QgcmxzX3RibF8yLnNl Y2x2CisgICBGUk9NIHJsc190YmxfMgorICBXSEVSRSBybHNfdGJsXzIucGd1c2VyID0gQ1VSUkVO VF9VU0VSKSkpOworKDEgcm93KQorU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEn LCAncmxzX3AyJywgdHJ1ZSk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNf cDIgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMQorCUFTIFJFU1RSSUNUSVZFCisJRk9S IEFMTAorCVRPIFBVQkxJQworCVVTSU5HIChjaWQgPD4gNDQgQU5EIGNpZCA8IDUwKTsKKygxIHJv dykKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycsIHRydWUp OworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3AzIE9OIHJlZ3Jlc3Nfcmxz X3NjaGVtYS5ybHNfdGJsXzEKKwlBUyBQRVJNSVNTSVZFCisJRk9SIEFMTAorCVRPIFBVQkxJQwor CVVTSU5HIChkYXV0aG9yID0gQ1VSUkVOVF9VU0VSKTsKKygxIHJvdykKK1NFTEVDVCBwZ19nZXRf cG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNCcsIHRydWUpOworcGdfZ2V0X3BvbGljeV9k ZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3A0IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEK KwlBUyBQRVJNSVNTSVZFCisJRk9SIFNFTEVDVAorCVRPIFBVQkxJQworCVVTSU5HICgoY2lkICUg MikgPSAwKTsKKygxIHJvdykKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywg J3Jsc19wNScsIHRydWUpOworcGdfZ2V0X3BvbGljeV9kZGwKK0NSRUFURSBQT0xJQ1kgcmxzX3A1 IE9OIHJlZ3Jlc3NfcmxzX3NjaGVtYS5ybHNfdGJsXzEKKwlBUyBQRVJNSVNTSVZFCisJRk9SIElO U0VSVAorCVRPIFBVQkxJQworCVdJVEggQ0hFQ0sgKChjaWQgJSAyKSA9IDEpOworKDEgcm93KQor U0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A2JywgdHJ1ZSk7Citw Z19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDYgT04gcmVncmVzc19ybHNfc2No ZW1hLnJsc190YmxfMQorCUFTIFBFUk1JU1NJVkUKKwlGT1IgVVBEQVRFCisJVE8gUFVCTElDCisJ VVNJTkcgKChjaWQgJSAyKSA9IDApOworKDEgcm93KQorU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRs KCdybHNfdGJsXzEnLCAncmxzX3A3JywgdHJ1ZSk7CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRF IFBPTElDWSBybHNfcDcgT04gcmVncmVzc19ybHNfc2NoZW1hLnJsc190YmxfMQorCUFTIFBFUk1J U1NJVkUKKwlGT1IgREVMRVRFCisJVE8gUFVCTElDCisJVVNJTkcgKGNpZCA8IDgpOworKDEgcm93 KQorU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A4JywgdHJ1ZSk7 CitwZ19nZXRfcG9saWN5X2RkbAorQ1JFQVRFIFBPTElDWSBybHNfcDggT04gcmVncmVzc19ybHNf c2NoZW1hLnJsc190YmxfMQorCUFTIFBFUk1JU1NJVkUKKwlGT1IgQUxMCisJVE8gcmVncmVzc19y bHNfZGF2ZSwgcmVncmVzc19ybHNfYWxpY2UKKwlVU0lORyAodHJ1ZSk7CisoMSByb3cpCitTRUxF Q1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDknLCB0cnVlKTsKK3BnX2dl dF9wb2xpY3lfZGRsCitDUkVBVEUgUE9MSUNZIHJsc19wOSBPTiByZWdyZXNzX3Jsc19zY2hlbWEu cmxzX3RibF8xCisJQVMgUEVSTUlTU0lWRQorCUZPUiBBTEwKKwlUTyByZWdyZXNzX3Jsc19leGVt cHRfdXNlcgorCVdJVEggQ0hFQ0sgKGNpZCA9ICgoIFNFTEVDVCBybHNfdGJsXzIuc2VjbHYKKyAg IEZST00gcmxzX3RibF8yKSkpOworKDEgcm93KQorLS0gQ2xlYW4gdXAgb2JqZWN0cyBjcmVhdGVk IGZvciB0ZXN0aW5nIHBnX2dldF9wb2xpY3lfZGRsIGZ1bmN0aW9uLgorRFJPUCBQT0xJQ1kgcmxz X3AxIE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wMiBPTiBybHNfdGJsXzE7CitEUk9Q IFBPTElDWSBybHNfcDMgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A0IE9OIHJsc190 YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wNSBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNf cDYgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A3IE9OIHJsc190YmxfMTsKK0RST1Ag UE9MSUNZIHJsc19wOCBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElDWSBybHNfcDkgT04gcmxzX3Ri bF8xOworLS0KIC0tIENsZWFuIHVwIG9iamVjdHMKIC0tCiBSRVNFVCBTRVNTSU9OIEFVVEhPUkla QVRJT047CiBEUk9QIFNDSEVNQSByZWdyZXNzX3Jsc19zY2hlbWEgQ0FTQ0FERTsKLU5PVElDRTog IGRyb3AgY2FzY2FkZXMgdG8gMzAgb3RoZXIgb2JqZWN0cworTk9USUNFOiAgZHJvcCBjYXNjYWRl cyB0byAzMiBvdGhlciBvYmplY3RzCiBERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIGZ1bmN0aW9u IGZfbGVhayh0ZXh0KQogZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB1YWNjb3VudAogZHJvcCBjYXNj YWRlcyB0byB0YWJsZSBjYXRlZ29yeQpAQCAtNDg3Nyw2ICs1MDgzLDggQEAgZHJvcCBjYXNjYWRl cyB0byB0YWJsZSBkZXAxCiBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGRlcDIKIGRyb3AgY2FzY2Fk ZXMgdG8gdGFibGUgZG9iX3QxCiBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGRvYl90MgorZHJvcCBj YXNjYWRlcyB0byB0YWJsZSBybHNfdGJsXzEKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmxzX3Ri bF8yCiBEUk9QIFVTRVIgcmVncmVzc19ybHNfYWxpY2U7CiBEUk9QIFVTRVIgcmVncmVzc19ybHNf Ym9iOwogRFJPUCBVU0VSIHJlZ3Jlc3NfcmxzX2Nhcm9sOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvcm93c2VjdXJpdHkuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcm93c2Vj dXJpdHkuc3FsCmluZGV4IDJkMWJlNTQzMzkxLi5mOWY1YmQwYWU3ZCAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvcm93c2VjdXJpdHkuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3Jvd3NlY3VyaXR5LnNxbApAQCAtMjQwMyw2ICsyNDAzLDg2IEBAIHJlc2V0IHJsc190ZXN0 LmJsYWg7CiBkcm9wIGZ1bmN0aW9uIHJsc19mKHRleHQpOwogZHJvcCB0YWJsZSBybHNfdCwgdGVz dF90OwogCistLQorLS0gVGVzdCBmb3IgcGdfZ2V0X3BvbGljeV9kZGwodGFibGVOYW1lLCBwb2xp Y3lOYW1lLCBwcmV0dHkpIGZ1bmN0aW9uLgorLS0KK0NSRUFURSBUQUJMRSBybHNfdGJsXzEgKAor ICAgIGRpZCAgICAgICAgIGludCBwcmltYXJ5IGtleSwKKyAgICBjaWQgICAgICAgICBpbnQsCisg ICAgZGxldmVsICAgICAgaW50IG5vdCBudWxsLAorICAgIGRhdXRob3IgICAgIG5hbWUsCisgICAg ZHRpdGxlICAgICAgdGV4dAorKTsKK0dSQU5UIEFMTCBPTiBybHNfdGJsXzEgVE8gcHVibGljOwor Q1JFQVRFIFRBQkxFIHJsc190YmxfMiAoCisgICAgcGd1c2VyICAgICAgbmFtZSBwcmltYXJ5IGtl eSwKKyAgICBzZWNsdiAgICAgICBpbnQKKyk7CitHUkFOVCBTRUxFQ1QgT04gcmxzX3RibF8yIFRP IHB1YmxpYzsKKworLS0gVGVzdCBQRVJNSVNTSVZFIGFuZCBSRVNUUklDVElWRQorQ1JFQVRFIFBP TElDWSBybHNfcDEgT04gcmxzX3RibF8xIEFTIFBFUk1JU1NJVkUKKyAgICBVU0lORyAoZGxldmVs IDw9IChTRUxFQ1Qgc2VjbHYgRlJPTSBybHNfdGJsXzIgV0hFUkUgcGd1c2VyID0gY3VycmVudF91 c2VyKSk7CitDUkVBVEUgUE9MSUNZIHJsc19wMiBPTiBybHNfdGJsXzEgQVMgUkVTVFJJQ1RJVkUg VVNJTkcgKGNpZCA8PiA0NCBBTkQgY2lkIDwgNTApOworCistLSBUZXN0IEZPUiBBTEwgfCBTRUxF Q1QgfCBJTlNFUlQgfCBVUERBVEUgfCBERUxFVEUKK0NSRUFURSBQT0xJQ1kgcmxzX3AzIE9OIHJs c190YmxfMSBGT1IgQUxMIFVTSU5HIChkYXV0aG9yID0gY3VycmVudF91c2VyKTsKK0NSRUFURSBQ T0xJQ1kgcmxzX3A0IE9OIHJsc190YmxfMSBGT1IgU0VMRUNUIFVTSU5HIChjaWQgJSAyID0gMCk7 CitDUkVBVEUgUE9MSUNZIHJsc19wNSBPTiBybHNfdGJsXzEgRk9SIElOU0VSVCBXSVRIIENIRUNL IChjaWQgJSAyID0gMSk7CitDUkVBVEUgUE9MSUNZIHJsc19wNiBPTiBybHNfdGJsXzEgRk9SIFVQ REFURSBVU0lORyAoY2lkICUgMiA9IDApOworQ1JFQVRFIFBPTElDWSBybHNfcDcgT04gcmxzX3Ri bF8xIEZPUiBERUxFVEUgVVNJTkcgKGNpZCA8IDgpOworCistLSBUZXN0IFRPIHsgcm9sZV9uYW1l IC4uLiB9CitDUkVBVEUgUE9MSUNZIHJsc19wOCBPTiBybHNfdGJsXzEgVE8gcmVncmVzc19ybHNf ZGF2ZSwgcmVncmVzc19ybHNfYWxpY2UgVVNJTkcgKHRydWUpOworQ1JFQVRFIFBPTElDWSBybHNf cDkgT04gcmxzX3RibF8xIFRPIHJlZ3Jlc3NfcmxzX2V4ZW1wdF91c2VyIFdJVEggQ0hFQ0sgKGNp ZCA9IChTRUxFQ1Qgc2VjbHYgRlJPTSBybHNfdGJsXzIpKTsKKworLS0gVGVzdCBOVUxMIHZhbHVl CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoTlVMTCwgJ3Jsc19wMScsIGZhbHNlKTsKK1NFTEVD VCBwZ19nZXRfcG9saWN5X2RkbCgndGFiMScsIE5VTEwsIGZhbHNlKTsKK1NFTEVDVCBwZ19nZXRf cG9saWN5X2RkbChOVUxMLCBOVUxMLCBmYWxzZSk7CisKKy0tIFRlc3QgLTEgYXMgdGFibGUgb2lk CisgU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKC0xLCAncmxzX3AxJywgZmFsc2UpOworCistLSBU YWJsZSBkb2VzIG5vdCBleGlzdAorU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCd0YWIxJywgJ3Js c19wMScsIGZhbHNlKTsKKy0tIFBvbGljeSBkb2VzIG5vdCBleGlzdAorU0VMRUNUIHBnX2dldF9w b2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncG9sMScsIGZhbHNlKTsKKworLS0gV2l0aG91dCBQcmV0 dHkgZm9ybWF0dGVkCitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNf cDEnLCBmYWxzZSk7CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNf cDInLCBmYWxzZSk7CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNf cDMnLCBmYWxzZSk7CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNf cDQnLCBmYWxzZSk7CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNf cDUnLCBmYWxzZSk7CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNf cDYnLCBmYWxzZSk7CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNf cDcnLCBmYWxzZSk7CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNf cDgnLCBmYWxzZSk7CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNf cDknLCBmYWxzZSk7CisKKy0tIFdpdGggUHJldHR5IGZvcm1hdHRlZAorXHBzZXQgZm9ybWF0IHVu YWxpZ25lZAorU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3AxJywg dHJ1ZSk7CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDInLCB0 cnVlKTsKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wMycsIHRy dWUpOworU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A0JywgdHJ1 ZSk7CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDUnLCB0cnVl KTsKK1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wNicsIHRydWUp OworU0VMRUNUIHBnX2dldF9wb2xpY3lfZGRsKCdybHNfdGJsXzEnLCAncmxzX3A3JywgdHJ1ZSk7 CitTRUxFQ1QgcGdfZ2V0X3BvbGljeV9kZGwoJ3Jsc190YmxfMScsICdybHNfcDgnLCB0cnVlKTsK K1NFTEVDVCBwZ19nZXRfcG9saWN5X2RkbCgncmxzX3RibF8xJywgJ3Jsc19wOScsIHRydWUpOwor CistLSBDbGVhbiB1cCBvYmplY3RzIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcGdfZ2V0X3BvbGljeV9k ZGwgZnVuY3Rpb24uCitEUk9QIFBPTElDWSBybHNfcDEgT04gcmxzX3RibF8xOworRFJPUCBQT0xJ Q1kgcmxzX3AyIE9OIHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wMyBPTiBybHNfdGJsXzE7 CitEUk9QIFBPTElDWSBybHNfcDQgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A1IE9O IHJsc190YmxfMTsKK0RST1AgUE9MSUNZIHJsc19wNiBPTiBybHNfdGJsXzE7CitEUk9QIFBPTElD WSBybHNfcDcgT04gcmxzX3RibF8xOworRFJPUCBQT0xJQ1kgcmxzX3A4IE9OIHJsc190YmxfMTsK K0RST1AgUE9MSUNZIHJsc19wOSBPTiBybHNfdGJsXzE7CisKIC0tCiAtLSBDbGVhbiB1cCBvYmpl Y3RzCiAtLQotLSAKMi41MS4wCgo= --000000000000c0d4170641bf339e--