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 1qbuXY-00DLoG-Cm for pgsql-hackers@arkaria.postgresql.org; Fri, 01 Sep 2023 03:09:44 +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 1qbuXX-00BnxM-4D for pgsql-hackers@arkaria.postgresql.org; Fri, 01 Sep 2023 03:09:42 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qbuXW-00Bnx3-Mb for pgsql-hackers@lists.postgresql.org; Fri, 01 Sep 2023 03:09:42 +0000 Received: from mail-oo1-xc2a.google.com ([2607:f8b0:4864:20::c2a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qbuXP-002GGl-B1 for pgsql-hackers@postgresql.org; Fri, 01 Sep 2023 03:09:41 +0000 Received: by mail-oo1-xc2a.google.com with SMTP id 006d021491bc7-57129417cecso797105eaf.1 for ; Thu, 31 Aug 2023 20:09:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693537773; x=1694142573; 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=1ODOUT+6J+6fnvYxKO8EEYrkj70nhswRzg7mb0AkBrc=; b=Kta7m7Kdmvd0UQF2lFmryDi0u/ewRcN95ME/YpeZKdlINW7g3sXWdufiOqb2Py+PQH M4BtxVzq+fR6cMHyh32Gdcjf5mmxd02zQHkUsL2+opBKSFP+q1WVB3NZWAq3bgOZDazC xGNjj2XVwyb4MSypicO5b0rTTjt+Lv/lmD8gb8PnaPpw6WqArx7daLUC2A/LVmQCBAto BLQTg2szdwokoyplfI4R0nl3w23ctGlO6jdFNPj9kGxPw1io0+vqL8/jBRyOw62v04d3 2Y+u90V/B+RkBpAykGnMNLVFj5uyuOd1YsLGz3PaYdaBsLpHkEhJbrl9FDIKDSBVrj8j wWCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693537773; x=1694142573; 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=1ODOUT+6J+6fnvYxKO8EEYrkj70nhswRzg7mb0AkBrc=; b=ClLhgGX8dOBcVZQLlgbS2IUahECp+OtZcNsYNa1QkQJcYAXeVluycl+I1e2m6L4Erw 0HmmDsztiZkDxhavH3v0xTNThhmq3LjIsZyxErbKlRBGCnfeSB+IcbYwPpiFtODdVTGj +e4fmcvGgwpb4OM+DjghfxBEOKp3nRNEh5v7SMipX9c5Q1ftWbjYValsfw7cofSgf6aX LMNF02bjyQujfGHMf+dka+FKGAF9ypjyZNdZtQjoewk+4888+JHsQ/nzRGQTmZ1omVNg WsT7ViXtmwiXlBAZEoy4i8LWWyOC0C3jMSJIq/2MbA06RYKBiEanbZ/byacW/H9zkDgA kDRQ== X-Gm-Message-State: AOJu0Ywz6qIZcc2Nu7B1ERRXBQjvEhSDHxBlKEiWC7tyYXRqM7B/CKN0 KY8obFG1jCK/2UaJfAMLWN/uJsxV4+wXCheiCPawA2TFfdUb4w== X-Google-Smtp-Source: AGHT+IF8FDK9x59Bti9gZ5H3RYdNjYxvDwI0n0xpSbM/5SFA14H/PIjREYG69xQISlT/NR7jRhbN/pzkz33LVUsKqbc= X-Received: by 2002:a4a:9193:0:b0:571:aceb:26d3 with SMTP id d19-20020a4a9193000000b00571aceb26d3mr1020974ooh.4.1693537773464; Thu, 31 Aug 2023 20:09:33 -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> <111272f2dc112c7becdd35ad89f6b935@anastigmatix.net> <5138c6b5fd239e7ce4e1a4e63826ac27@anastigmatix.net> <369543439e988ae43f0a6307500b27c4@anastigmatix.net> <5955e93347a7e3b1612cf7e129ae6d04@anastigmatix.net> In-Reply-To: From: Andy Fan Date: Fri, 1 Sep 2023 11:09:22 +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="000000000000671b380604437d74" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000671b380604437d74 Content-Type: multipart/alternative; boundary="000000000000671b2f0604437d72" --000000000000671b2f0604437d72 Content-Type: text/plain; charset="UTF-8" > An incompatible issue at error message level is found during test: > create table jb(a jsonb); > insert into jb select '{"a": "a"}'::jsonb; > select (a->'a')::int4 from jb; > > master: ERROR: cannot cast jsonb string to type *integer* > patch: ERROR: cannot cast jsonb string to type *numeric* > > That's mainly because we first extract the field to numeric and > then cast it to int4 and the error raised at the first step and it > doesn't know the final type. One way to fix it is adding a 2nd > argument for jsonb_finish_numeric for the real type, but > it looks weird and more suggestions on this would be good. > > v12 is attached to address the above issue, I added a new argument named target_oid for jsonb_finish_numeric so that it can raise a correct error message. I also fixed the issue reported by opr_sanity in this version. Chap, do you still think we should refactor the code for the previous existing functions like jsonb_object_field for less code duplication purpose? I think we should not do it because a). The code duplication is just ~10 rows. b). If we do the refactor, we have to implement two DirectFunctionCall1. Point b) is the key reason I am not willing to do it. Or do I miss other important reasons? -- Best Regards Andy Fan --000000000000671b2f0604437d72 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
=C2=A0
An incompatible issue at error message level is found = during test:=C2=A0
create table jb(a jsonb);
insert= into jb select '{"a": "a"}'::jsonb;
selec= t (a->'a')::int4 from jb;

master:=C2=A0 =C2=A0ERROR: =C2=A0cannot cast= jsonb string to type integer
patch:= =C2=A0 ERROR: =C2=A0cannot cast jsonb string to type numeric

That's mainly because we first extract the f= ield to numeric and
then cast it to int4 and the error raised= at the first step and it
doesn't know the final type.=C2=A0 = One way to fix it is adding a 2nd
argument for=C2=A0jsonb_finish_= numeric for the real type, but
it looks weird=C2=A0and more sugge= stions on this would be good.=C2=A0


v12 is attached to address the above issue, I add= ed a new argument
named target_oid for jsonb_finish_numeric so th= at it can raise a
correct error message.=C2=A0 I also fixed the i= ssue reported by opr_sanity
in this version.=C2=A0

=
Chap, do you still think we should refactor the code for the pre= vious
existing functions like jsonb_object_field for less code du= plication
purpose?=C2=A0 I think we should not do it because a). = The code duplication
is just ~10 rows.=C2=A0 b).=C2=A0 If we do t= he refactor, we have to implement
two=C2=A0DirectFunctionCall1.= =C2=A0 =C2=A0Point b) is the key reason I am not willing
to do it= .=C2=A0 Or do I miss other important reasons?=C2=A0

--
Best Regards
Andy Fan
--000000000000671b2f0604437d72-- --000000000000671b380604437d74 Content-Type: application/octet-stream; name="v12-0001-optimize-casting-jsonb-to-a-given-type.patch" Content-Disposition: attachment; filename="v12-0001-optimize-casting-jsonb-to-a-given-type.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lm00n6yi0 RnJvbSAwMzc2NWFlYzliMjdiODJkMDA1YTM4ZGQxZmE4MWU2MWQ0MDMyNjU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IEZhbiA8emhpaHVpLmZhbjEyMTNAZ21haWwuY29tPgpE YXRlOiBUaHUsIDMxIEF1ZyAyMDIzIDE2OjQ4OjM1ICswODAwClN1YmplY3Q6IFtQQVRDSCB2MTJd IG9wdGltaXplIGNhc3RpbmcganNvbmIgdG8gYSBnaXZlbiB0eXBlLgoKUHJldmlvdXNseSBhZnRl ciB3ZSBnZXQgYSBKc29uYlZhbHVlLCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8KSnNvbmIgZmly c3QgdGhlbiBjYXN0IHRoZSBKc29uYiB0byB0aGUgZ2l2ZW4gdHlwZS4gSW4gdGhpcyBwYXRjaCwK d2UgY292ZXJ0IHRoZSBKc29uYlZhbHVlIHRvIHRoZSBkZXNpcmVkIHR5cGUgZGlyZWN0bHkuCi0t LQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgICAgICAgfCAxNzcgKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jICAgfCAx MTQgKysrKysrKysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCAg ICB8ICAgMyArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgfCAgMzggKysr Ky0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dCB8ICA3OCArKysrKysrKysr Ky0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbCAgICAgIHwgIDQ4ICsrKysrKystCiA2 IGZpbGVzIGNoYW5nZWQsIDQwNiBpbnNlcnRpb25zKCspLCA1MiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9qc29uYi5jCmluZGV4IDk3ODE4NTJiMGNiLi4xNGM5NDY1MDFkYSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2pzb25iLmMKQEAgLTE3LDExICsxNywxNSBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNp bmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9zdXBwb3J0bm9kZXMu aCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29lcmNlLmgiCiAjaW5jbHVkZSAibGlicHEvcHFm b3JtYXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRldGltZS5o IgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbi5oIgog I2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmZ1bmNzLmgiCkBA IC0yMDM4LDYgKzIwNDIsMTc5IEBAIGNhbm5vdENhc3RKc29uYlZhbHVlKGVudW0gamJ2VHlwZSB0 eXBlLCBjb25zdCBjaGFyICpzcWx0eXBlKQogCWVsb2coRVJST1IsICJ1bmtub3duIGpzb25iIHR5 cGU6ICVkIiwgKGludCkgdHlwZSk7CiB9CiAKK3N0YXRpYyBib29sCitqc29uYl9jYXN0X2lzX29w dGltaXplZChPaWQgdGFyZ2V0X3R5cGUpCit7CisJc3dpdGNoKHRhcmdldF90eXBlKQorCXsKKwkJ Y2FzZSBOVU1FUklDT0lEOgorCQljYXNlIEJPT0xPSUQ6CisJCWNhc2UgSU5UMk9JRDoKKwkJY2Fz ZSBJTlQ0T0lEOgorCQljYXNlIElOVDhPSUQ6CisJCWNhc2UgRkxPQVQ0T0lEOgorCQljYXNlIEZM T0FUOE9JRDoKKwkJCXJldHVybiB0cnVlOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIGZhbHNlOwor CX0KK30KKworRGF0dW0KK2pzb25iX2Nhc3Rfc3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQorewor CU5vZGUJICAgKnJhd3JlcSA9IChOb2RlICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJaWYg KElzQShyYXdyZXEsIFN1cHBvcnRSZXF1ZXN0U2ltcGxpZnkpKQorCXsKKwkJU3VwcG9ydFJlcXVl c3RTaW1wbGlmeSAqcmVxID0gKFN1cHBvcnRSZXF1ZXN0U2ltcGxpZnkgKikgcmF3cmVxOworCQlG dW5jRXhwcgkqZmV4cHIgPSBwYWxsb2MwKHNpemVvZihGdW5jRXhwcikpOworCQlGdW5jRXhwcgkq anNvbmJfc3RhcnRfZnVuYyA9IE5VTEwsICpqc29uYl9maW5pc2hfZnVuYyA9IE5VTEwsICpmaW5h bF9mdW5jID0gTlVMTDsKKwkJT3BFeHByCQkqb3BleHByOworCQlPaWQJCQluZXdfZnVuY19pZCA9 IEludmFsaWRPaWQ7CisKKwkJbWVtY3B5KGZleHByLCByZXEtPmZjYWxsLCBzaXplb2YoRnVuY0V4 cHIpKTsKKworCQlvcGV4cHIgPSAoT3BFeHByICopIGxpbml0aWFsKGZleHByLT5hcmdzKTsKKwor CQlpZiAoIUlzQShvcGV4cHIsIE9wRXhwcikgfHwKKwkJCSFqc29uYl9jYXN0X2lzX29wdGltaXpl ZChmZXhwci0+ZnVuY3Jlc3VsdHR5cGUpKQorCQl7CisJCQkvKiBub3QgdGhlIGRlc2lyZWQgcGF0 dGVybi4gKi8KKwkJCVBHX1JFVFVSTl9QT0lOVEVSKGZleHByKTsKKwkJfQorCisJCWlmIChvcGV4 cHItPm9wZnVuY2lkICA9PSBGX0pTT05CX09CSkVDVF9GSUVMRCkKKwkJCW5ld19mdW5jX2lkID0g Rl9KU09OQl9PQkpFQ1RfRklFTERfU1RBUlQ7CisJCWVsc2UgaWYgKG9wZXhwci0+b3BmdW5jaWQg PT0gRl9KU09OQl9BUlJBWV9FTEVNRU5UKQorCQkJbmV3X2Z1bmNfaWQgPSBGX0pTT05CX0FSUkFZ X0VMRU1FTlRfU1RBUlQ7CisJCWVsc2UgaWYgKG9wZXhwci0+b3BmdW5jaWQgPT0gRl9KU09OQl9F WFRSQUNUX1BBVEgpCisJCQluZXdfZnVuY19pZCA9IEZfSlNPTkJfRVhUUkFDVF9QQVRIX1NUQVJU OworCisJCWlmICghT2lkSXNWYWxpZChuZXdfZnVuY19pZCkpCisJCQlQR19SRVRVUk5fUE9JTlRF UihmZXhwcik7CisKKwkJanNvbmJfc3RhcnRfZnVuYyA9IG1ha2VGdW5jRXhwcihuZXdfZnVuY19p ZCwgSU5URVJOQUxPSUQsIG9wZXhwci0+YXJncywKKwkJCQkJCQkJCQlvcGV4cHItPm9wY29sbGlk LCBvcGV4cHItPmlucHV0Y29sbGlkLAorCQkJCQkJCQkJCUNPRVJDRV9FWFBMSUNJVF9DQUxMKTsK KworCQkvKiByZWxhYmVsIHRoZSBmaXJzdCBhcmd1bWVudHMgYXMgJ2ludGVybmFsJy4gKi8KKwkJ bGluaXRpYWwoanNvbmJfc3RhcnRfZnVuYy0+YXJncykgPSBtYWtlUmVsYWJlbFR5cGUobGluaXRp YWwoanNvbmJfc3RhcnRfZnVuYy0+YXJncyksCisJCQkJCQkJCQkJCQkJCSAgIElOVEVSTkFMT0lE LCAwLAorCQkJCQkJCQkJCQkJCQkgICBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCQkJCQkgICBDT0VS Q0VfSU1QTElDSVRfQ0FTVCk7CisJCXN3aXRjaCAoZmV4cHItPmZ1bmNyZXN1bHR0eXBlKQorCQl7 CisJCQljYXNlIElOVDJPSUQ6CisJCQljYXNlIElOVDRPSUQ6CisJCQljYXNlIElOVDhPSUQ6CisJ CQljYXNlIEZMT0FUNE9JRDoKKwkJCWNhc2UgRkxPQVQ4T0lEOgorCQkJY2FzZSBOVU1FUklDT0lE OgorCQkJCWpzb25iX2ZpbmlzaF9mdW5jID0gbWFrZUZ1bmNFeHByKEZfSlNPTkJfRklOSVNIX05V TUVSSUMsIE5VTUVSSUNPSUQsCisJCQkJCQkJCQkJCQkgbGlzdF9tYWtlMihqc29uYl9zdGFydF9m dW5jLAorCQkJCQkJCQkJCQkJCQkJbWFrZUNvbnN0KE9JRE9JRCwKKwkJCQkJCQkJCQkJCQkJCQkJ ICAtMSwKKwkJCQkJCQkJCQkJCQkJCQkJICBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCQkJCQkJCQkg IHNpemVvZihPaWQpLAorCQkJCQkJCQkJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oZmV4cHIt PmZ1bmNyZXN1bHR0eXBlKSwKKwkJCQkJCQkJCQkJCQkJCQkJICBmYWxzZSwKKwkJCQkJCQkJCQkJ CQkJCQkJICB0cnVlKSksCisJCQkJCQkJCQkJCQkgb3BleHByLT5vcGNvbGxpZCwgb3BleHByLT5p bnB1dGNvbGxpZCwgQ09FUkNFX0VYUExJQ0lUX0NBTEwpOworCisJCQkJaWYgKGZleHByLT5mdW5j cmVzdWx0dHlwZSAhPSBOVU1FUklDT0lEKQorCQkJCXsKKwkJCQkJZmluYWxfZnVuYyA9IChGdW5j RXhwciAqKWNvZXJjZV90eXBlKE5VTEwsIChOb2RlICopanNvbmJfZmluaXNoX2Z1bmMsIE5VTUVS SUNPSUQsCisJCQkJCQkJCQkJCQkJCSBmZXhwci0+ZnVuY3Jlc3VsdHR5cGUsIDAsIENPRVJDSU9O X0VYUExJQ0lULAorCQkJCQkJCQkJCQkJCQkgQ09FUkNFX0VYUExJQ0lUX0NBU1QsIGZleHByLT5s b2NhdGlvbik7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJZmluYWxfZnVuYyA9IGpzb25iX2Zpbmlz aF9mdW5jOworCisJCQkJUEdfUkVUVVJOX1BPSU5URVIoZmluYWxfZnVuYyk7CisJCQljYXNlIEJP T0xPSUQ6CisJCQkJZmluYWxfZnVuYyA9IG1ha2VGdW5jRXhwcihGX0pTT05CX0ZJTklTSF9CT09M LCBCT09MT0lELAorCQkJCQkJCQkJCQkgICBsaXN0X21ha2UxKGpzb25iX3N0YXJ0X2Z1bmMpLCBv cGV4cHItPm9wY29sbGlkLAorCQkJCQkJCQkJCSAgb3BleHByLT5pbnB1dGNvbGxpZCwgQ09FUkNF X0VYUExJQ0lUX0NBTEwpOworCQkJCVBHX1JFVFVSTl9QT0lOVEVSKGZpbmFsX2Z1bmMpOworCQkJ ZGVmYXVsdDoKKwkJCQlQR19SRVRVUk5fUE9JTlRFUihmZXhwcik7CisJCX0KKwl9CisKKwlQR19S RVRVUk5fUE9JTlRFUihOVUxMKTsKK30KKworCitEYXR1bQoranNvbmJfb2JqZWN0X2ZpZWxkX3N0 YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJSnNvbmIJICAgKmpiID0gUEdfR0VUQVJHX0pTT05C X1AoMCk7CisJdGV4dAkgICAqa2V5ID0gUEdfR0VUQVJHX1RFWFRfUFAoMSk7CisJSnNvbmJWYWx1 ZQkqdjsKKwlKc29uYlZhbHVlCXZidWY7CisKKwlpZiAoIUpCX1JPT1RfSVNfT0JKRUNUKGpiKSkK KwkJUEdfUkVUVVJOX05VTEwoKTsKKworCXYgPSBnZXRLZXlKc29uVmFsdWVGcm9tQ29udGFpbmVy KCZqYi0+cm9vdCwKKwkJCQkJCQkJCSBWQVJEQVRBX0FOWShrZXkpLAorCQkJCQkJCQkJIFZBUlNJ WkVfQU5ZX0VYSERSKGtleSksCisJCQkJCQkJCQkgJnZidWYpOworCisJaWYgKHYgPT0gTlVMTCkK KwkJUEdfUkVUVVJOX05VTEwoKTsKKworCVBHX1JFVFVSTl9QT0lOVEVSKHYpOworfQorCitEYXR1 bQoranNvbmJfYXJyYXlfZWxlbWVudF9zdGFydChQR19GVU5DVElPTl9BUkdTKQoreworCUpzb25i CSAgICpqYiA9IFBHX0dFVEFSR19KU09OQl9QKDApOworCWludAkJCWVsZW1lbnQgPSBQR19HRVRB UkdfSU5UMzIoMSk7CisJSnNvbmJWYWx1ZQkqdjsKKworCWlmICghSkJfUk9PVF9JU19BUlJBWShq YikpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwkvKiBIYW5kbGUgbmVnYXRpdmUgc3Vic2NyaXB0 ICovCisJaWYgKGVsZW1lbnQgPCAwKQorCXsKKwkJdWludDMyCQluZWxlbWVudHMgPSBKQl9ST09U X0NPVU5UKGpiKTsKKworCQlpZiAoLWVsZW1lbnQgPiBuZWxlbWVudHMpCisJCQlQR19SRVRVUk5f TlVMTCgpOworCQllbHNlCisJCQllbGVtZW50ICs9IG5lbGVtZW50czsKKwl9CisKKwl2ID0gZ2V0 SXRoSnNvbmJWYWx1ZUZyb21Db250YWluZXIoJmpiLT5yb290LCBlbGVtZW50KTsKKwlpZiAodiA9 PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJUEdfUkVUVVJOX1BPSU5URVIodik7Cit9 CisKK0RhdHVtCitqc29uYl9maW5pc2hfbnVtZXJpYyhQR19GVU5DVElPTl9BUkdTKQoreworCUpz b25iVmFsdWUJKnYgPSAoSnNvbmJWYWx1ZSAqKVBHX0dFVEFSR19QT0lOVEVSKDApOworCU9pZAkJ CWZpbmFsX29pZCA9IFBHX0dFVEFSR19PSUQoMSk7CisJaWYgKHYtPnR5cGUgIT0gamJ2TnVtZXJp YykKKwkJY2Fubm90Q2FzdEpzb25iVmFsdWUodi0+dHlwZSwgZm9ybWF0X3R5cGVfYmUoZmluYWxf b2lkKSk7CisJUEdfUkVUVVJOX05VTUVSSUModi0+dmFsLm51bWVyaWMpOworfQorCitEYXR1bQor anNvbmJfZmluaXNoX2Jvb2woUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlKc29uYlZhbHVlCSp2ID0g KEpzb25iVmFsdWUgKilQR19HRVRBUkdfUE9JTlRFUigwKTsKKwlpZiAodi0+dHlwZSAhPSBqYnZC b29sKQorCQljYW5ub3RDYXN0SnNvbmJWYWx1ZSh2LT50eXBlLCAiYm9vbGVhbiIpOworCVBHX1JF VFVSTl9CT09MKHYtPnZhbC5ib29sZWFuKTsKK30KKwogRGF0dW0KIGpzb25iX2Jvb2woUEdfRlVO Q1RJT05fQVJHUykKIHsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVu Y3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYwppbmRleCBhNGJmYTVlNDA0 MC4uZjYwNDJlYTQ0MmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVu Y3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKQEAgLTQ5Miw2ICs0 OTIsNyBAQCBzdGF0aWMgSnNvblBhcnNlRXJyb3JUeXBlIHRyYW5zZm9ybV9zdHJpbmdfdmFsdWVz X29iamVjdF9maWVsZF9zdGFydCh2b2lkICpzdGF0ZQogc3RhdGljIEpzb25QYXJzZUVycm9yVHlw ZSB0cmFuc2Zvcm1fc3RyaW5nX3ZhbHVlc19hcnJheV9lbGVtZW50X3N0YXJ0KHZvaWQgKnN0YXRl LCBib29sIGlzbnVsbCk7CiBzdGF0aWMgSnNvblBhcnNlRXJyb3JUeXBlIHRyYW5zZm9ybV9zdHJp bmdfdmFsdWVzX3NjYWxhcih2b2lkICpzdGF0ZSwgY2hhciAqdG9rZW4sIEpzb25Ub2tlblR5cGUg dG9rZW50eXBlKTsKIAorc3RhdGljIEpzb25iVmFsdWUgKmpzb25iX2dldF9qc29uYnZhbHVlKEpz b25iICpqYiwgRGF0dW0gKnBhdGgsIGludCBucGF0aCwgYm9vbCAqaXNudWxsKTsKIAogLyoKICAq IHBnX3BhcnNlX2pzb25fb3JfZXJyc2F2ZQpAQCAtMTQ3Myw2ICsxNDc0LDM5IEBAIGdldF9zY2Fs YXIodm9pZCAqc3RhdGUsIGNoYXIgKnRva2VuLCBKc29uVG9rZW5UeXBlIHRva2VudHlwZSkKIAly ZXR1cm4gSlNPTl9TVUNDRVNTOwogfQogCitEYXR1bQoranNvbmJfZXh0cmFjdF9wYXRoX3N0YXJ0 KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJSnNvbmIJICAgKmpiID0gUEdfR0VUQVJHX0pTT05CX1Ao MCk7CisJQXJyYXlUeXBlICAqcGF0aCA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgxKTsKKworCUpz b25iVmFsdWUgKnY7CisKKwlEYXR1bQkgICAqcGF0aHRleHQ7CisJYm9vbAkgICAqcGF0aG51bGxz OworCWJvb2wJCWlzbnVsbCA9IGZhbHNlOworCWludAkJCW5wYXRoOworCisJLyoKKwkgKiBJZiB0 aGUgYXJyYXkgY29udGFpbnMgYW55IG51bGwgZWxlbWVudHMsIHJldHVybiBOVUxMLCBvbiB0aGUg Z3JvdW5kcworCSAqIHRoYXQgeW91J2QgaGF2ZSBnb3R0ZW4gTlVMTCBpZiBhbnkgUkhTIHZhbHVl IHdlcmUgTlVMTCBpbiBhIG5lc3RlZAorCSAqIHNlcmllcyBvZiBhcHBsaWNhdGlvbnMgb2YgdGhl IC0+IG9wZXJhdG9yLiAgKE5vdGU6IGJlY2F1c2Ugd2UgYWxzbworCSAqIHJldHVybiBOVUxMIGZv ciBlcnJvciBjYXNlcyBzdWNoIGFzIG5vLXN1Y2gtZmllbGQsIHRoaXMgaXMgdHJ1ZQorCSAqIHJl Z2FyZGxlc3Mgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXN0IG9mIHRoZSBhcnJheS4pCisJICov CisJaWYgKGFycmF5X2NvbnRhaW5zX251bGxzKHBhdGgpKQorCQlQR19SRVRVUk5fTlVMTCgpOwor CisJZGVjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihwYXRoLCBURVhUT0lELCAmcGF0aHRleHQsICZw YXRobnVsbHMsICZucGF0aCk7CisKKwl2ID0ganNvbmJfZ2V0X2pzb25idmFsdWUoamIsIHBhdGh0 ZXh0LCBucGF0aCwgJmlzbnVsbCk7CisKKwlpZiAoaXNudWxsKQorCQlQR19SRVRVUk5fTlVMTCgp OworCisJUEdfUkVUVVJOX1BPSU5URVIodik7Cit9CisKIERhdHVtCiBqc29uYl9leHRyYWN0X3Bh dGgoUEdfRlVOQ1RJT05fQVJHUykKIHsKQEAgLTE1MTYsNTIgKzE1NTAsMzYgQEAgZ2V0X2pzb25i X3BhdGhfYWxsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIGFzX3RleHQpCiAJCVBHX1JF VFVSTl9EQVRVTShyZXMpOwogfQogCi1EYXR1bQotanNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpi LCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGwsIGJvb2wgYXNfdGV4dCkKKwor c3RhdGljIEpzb25iVmFsdWUgKgoranNvbmJfZ2V0X2pzb25idmFsdWUoSnNvbmIgKmpiLCBEYXR1 bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGwpCiB7CisJYm9vbCBoYXZlX29iamVjdCA9 IGZhbHNlLCBoYXZlX2FycmF5ID0gZmFsc2U7CiAJSnNvbmJDb250YWluZXIgKmNvbnRhaW5lciA9 ICZqYi0+cm9vdDsKKwlpbnQgaTsKIAlKc29uYlZhbHVlICpqYnZwID0gTlVMTDsKLQlpbnQJCQlp OwotCWJvb2wJCWhhdmVfb2JqZWN0ID0gZmFsc2UsCi0JCQkJaGF2ZV9hcnJheSA9IGZhbHNlOwog Ci0JKmlzbnVsbCA9IGZhbHNlOworCS8qCisJICogSWYgdGhlIGFycmF5IGlzIGVtcHR5LCByZXR1 cm4gdGhlIGVudGlyZSBMSFMgb2JqZWN0LCBvbiB0aGUgZ3JvdW5kcworCSAqIHRoYXQgd2Ugc2hv dWxkIGRvIHplcm8gZmllbGQgb3IgZWxlbWVudCBleHRyYWN0aW9ucy4KKwkgKi8KKwlpZiAobnBh dGggPD0gMCkKKwl7CisJCUpzb25iVmFsdWUgKnJlcyA9IE5VTEw7CisJCWlmIChKQl9ST09UX0lT X0FSUkFZKGpiKSAmJiBKQl9ST09UX0lTX1NDQUxBUihqYikpCisJCQlyZXR1cm4gZ2V0SXRoSnNv bmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLCAwKTsKKworCQkvKiBOQjogcmVzIGlzIGEg amJ2QmluYXJ5IEpzb25iVmFsdWUgKi8KKwkJcmVzID0gcGFsbG9jMChzaXplb2YoSnNvbmJWYWx1 ZSkpOworCQlKc29uYlRvSnNvbmJWYWx1ZShqYiwgcmVzKTsKKwkJcmV0dXJuIHJlczsKKwl9CiAK IAkvKiBJZGVudGlmeSB3aGV0aGVyIHdlIGhhdmUgb2JqZWN0LCBhcnJheSwgb3Igc2NhbGFyIGF0 IHRvcC1sZXZlbCAqLwogCWlmIChKQl9ST09UX0lTX09CSkVDVChqYikpCiAJCWhhdmVfb2JqZWN0 ID0gdHJ1ZTsKIAllbHNlIGlmIChKQl9ST09UX0lTX0FSUkFZKGpiKSAmJiAhSkJfUk9PVF9JU19T Q0FMQVIoamIpKQogCQloYXZlX2FycmF5ID0gdHJ1ZTsKLQllbHNlCi0JewotCQlBc3NlcnQoSkJf Uk9PVF9JU19BUlJBWShqYikgJiYgSkJfUk9PVF9JU19TQ0FMQVIoamIpKTsKLQkJLyogRXh0cmFj dCB0aGUgc2NhbGFyIHZhbHVlLCBpZiBpdCBpcyB3aGF0IHdlJ2xsIHJldHVybiAqLwotCQlpZiAo bnBhdGggPD0gMCkKLQkJCWpidnAgPSBnZXRJdGhKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250 YWluZXIsIDApOwotCX0KLQotCS8qCi0JICogSWYgdGhlIGFycmF5IGlzIGVtcHR5LCByZXR1cm4g dGhlIGVudGlyZSBMSFMgb2JqZWN0LCBvbiB0aGUgZ3JvdW5kcwotCSAqIHRoYXQgd2Ugc2hvdWxk IGRvIHplcm8gZmllbGQgb3IgZWxlbWVudCBleHRyYWN0aW9ucy4gIEZvciB0aGUKLQkgKiBub24t c2NhbGFyIGNhc2Ugd2UgY2FuIGp1c3QgaGFuZCBiYWNrIHRoZSBvYmplY3Qgd2l0aG91dCBtdWNo IHdvcmsuIEZvcgotCSAqIHRoZSBzY2FsYXIgY2FzZSwgZmFsbCB0aHJvdWdoIGFuZCBkZWFsIHdp dGggdGhlIHZhbHVlIGJlbG93IHRoZSBsb29wLgotCSAqIChUaGlzIGluY29uc2lzdGVuY3kgYXJp c2VzIGJlY2F1c2UgdGhlcmUncyBubyBlYXN5IHdheSB0byBnZW5lcmF0ZSBhCi0JICogSnNvbmJW YWx1ZSBkaXJlY3RseSBmb3Igcm9vdC1sZXZlbCBjb250YWluZXJzLikKLQkgKi8KLQlpZiAobnBh dGggPD0gMCAmJiBqYnZwID09IE5VTEwpCi0JewotCQlpZiAoYXNfdGV4dCkKLQkJewotCQkJcmV0 dXJuIFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3RleHQoSnNvbmJUb0NTdHJpbmcoTlVMTCwK LQkJCQkJCQkJCQkJCQkJCQkgIGNvbnRhaW5lciwKLQkJCQkJCQkJCQkJCQkJCQkgIFZBUlNJWkUo amIpKSkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogbm90IHRleHQgbW9kZSAtIGp1c3QgaGFu ZCBiYWNrIHRoZSBqc29uYiAqLwotCQkJUEdfUkVUVVJOX0pTT05CX1AoamIpOwotCQl9Ci0JfQog CiAJZm9yIChpID0gMDsgaSA8IG5wYXRoOyBpKyspCiAJewpAQCAtMTU4Niw3ICsxNjA0LDcgQEAg anNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29s ICppc251bGwsIGJvb2wgYXNfdGV4dCkKIAkJCWlmIChlbmRwdHIgPT0gaW5kZXh0ZXh0IHx8ICpl bmRwdHIgIT0gJ1wwJyB8fCBlcnJubyAhPSAwKQogCQkJewogCQkJCSppc251bGwgPSB0cnVlOwot CQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisJCQkJcmV0dXJuIE5VTEw7CiAJCQl9 CiAKIAkJCWlmIChsaW5kZXggPj0gMCkKQEAgLTE2MDcsNyArMTYyNSw3IEBAIGpzb25iX2dldF9l bGVtZW50KEpzb25iICpqYiwgRGF0dW0gKnBhdGgsIGludCBucGF0aCwgYm9vbCAqaXNudWxsLCBi b29sIGFzX3RleHQpCiAJCQkJaWYgKGxpbmRleCA9PSBJTlRfTUlOIHx8IC1saW5kZXggPiBuZWxl bWVudHMpCiAJCQkJewogCQkJCQkqaXNudWxsID0gdHJ1ZTsKLQkJCQkJcmV0dXJuIFBvaW50ZXJH ZXREYXR1bShOVUxMKTsKKwkJCQkJcmV0dXJuIE5VTEw7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQkJ aW5kZXggPSBuZWxlbWVudHMgKyBsaW5kZXg7CkBAIC0xNjE5LDEzICsxNjM3LDEzIEBAIGpzb25i X2dldF9lbGVtZW50KEpzb25iICpqYiwgRGF0dW0gKnBhdGgsIGludCBucGF0aCwgYm9vbCAqaXNu dWxsLCBib29sIGFzX3RleHQpCiAJCXsKIAkJCS8qIHNjYWxhciwgZXh0cmFjdGlvbiB5aWVsZHMg YSBudWxsICovCiAJCQkqaXNudWxsID0gdHJ1ZTsKLQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0o TlVMTCk7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQogCiAJCWlmIChqYnZwID09IE5VTEwpCiAJCXsK IAkJCSppc251bGwgPSB0cnVlOwotCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwkJ CXJldHVybiBOVUxMOwogCQl9CiAJCWVsc2UgaWYgKGkgPT0gbnBhdGggLSAxKQogCQkJYnJlYWs7 CkBAIC0xNjQ0LDYgKzE2NjIsMjIgQEAganNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1 bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGwsIGJvb2wgYXNfdGV4dCkKIAkJCWhhdmVf YXJyYXkgPSBmYWxzZTsKIAkJfQogCX0KKwlyZXR1cm4gamJ2cDsKK30KKworLyoKKyAqIFJldHVy biBqc29uYiBkYXR1bSBvciBqc29uYi1hcy10ZXh0IGRhdHVtLgorICovCitEYXR1bQoranNvbmJf Z2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICppc251 bGwsIGJvb2wgYXNfdGV4dCkKK3sKKwlKc29uYlZhbHVlICpqYnZwID0gTlVMTDsKKwkqaXNudWxs ID0gZmFsc2U7CisKKwlqYnZwID0ganNvbmJfZ2V0X2pzb25idmFsdWUoamIsIHBhdGgsIG5wYXRo LCBpc251bGwpOworCisJaWYgKCppc251bGwpCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVM TCk7CiAKIAlpZiAoYXNfdGV4dCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9n L2NhdHZlcnNpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCmluZGV4IGFi OWE3YWMxZjc5Li4yY2U4NWI0MmQ4ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9j YXR2ZXJzaW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKQEAgLTU3 LDYgKzU3LDUgQEAKICAqLwogCiAvKgkJCQkJCQl5eXl5bW1kZE4gKi8KLSNkZWZpbmUgQ0FUQUxP R19WRVJTSU9OX05PCTIwMjMwODI1MQotCisjZGVmaW5lIENBVEFMT0dfVkVSU0lPTl9OTwkyMDIz MDgzMTEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggOTgwNWJjNjExODAuLjRm YTNlZWEyZDFhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0Cisr KyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTQ1ODcsMjUgKzQ1ODcsMjUg QEAKICAgcHJvbmFtZSA9PiAncGdfbHNuJywgcHJvcmV0dHlwZSA9PiAncGdfbHNuJywgcHJvYXJn dHlwZXMgPT4gJ251bWVyaWMnLAogICBwcm9zcmMgPT4gJ251bWVyaWNfcGdfbHNuJyB9LAogCi17 IG9pZCA9PiAnMzU1NicsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGJvb2xlYW4nLAoreyBv aWQgPT4gJzM1NTYnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBib29sZWFuJywgcHJvc3Vw cG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKICAgcHJvbmFtZSA9PiAnYm9vbCcsIHByb3Jl dHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4gJ2pz b25iX2Jvb2wnIH0sCiB7IG9pZCA9PiAnMzQ0OScsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRv IG51bWVyaWMnLAotICBwcm9uYW1lID0+ICdudW1lcmljJywgcHJvcmV0dHlwZSA9PiAnbnVtZXJp YycsIHByb2FyZ3R5cGVzID0+ICdqc29uYicsCisgIHByb25hbWUgPT4gJ251bWVyaWMnLCBwcm9y ZXR0eXBlID0+ICdudW1lcmljJywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywgcHJvc3VwcG9ydCA9 PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKICAgcHJvc3JjID0+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 dDgnIH0sCiAKQEAgLTk5NDcsNiArOTk0NywzMCBAQAogICBwcm9uYW1lID0+ICdqc29uYl9vYmpl Y3RfZmllbGRfdGV4dCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAn anNvbmIgdGV4dCcsIHByb2FyZ25hbWVzID0+ICd7ZnJvbV9qc29uLCBmaWVsZF9uYW1lfScsCiAg IHByb3NyYyA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX3RleHQnIH0sCit7IG9pZCA9PiAnNDU1Mics IGRlc2NyID0+ICdleHRyYWN0IGpzb25idmFsdWUgZnJvbSBqc29uYiBmb3IgdGhlIGdpdmVuIGZp ZWxkJywKKyAgcHJvbmFtZSA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX3N0YXJ0JywgcHJvcmV0dHlw ZSA9PiAnaW50ZXJuYWwnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwgdGV4dCcsIHByb2Fy Z25hbWVzID0+ICd7ZnJvbV9qc29uLCBmaWVsZF9uYW1lfScsCisgIHByb3NyYyA9PiAnanNvbmJf b2JqZWN0X2ZpZWxkX3N0YXJ0JyB9LAoreyBvaWQgPT4gJzM4MTMnLCBkZXNjciA9PiAnZXh0cmFj dCBqb3NuYnZhbHVlIGZyb20ganNvbmIgYXJyYXkgZm9yIHRoZSBnaXZlbiBpbmRleCcsCisgIHBy b25hbWUgPT4gJ2pzb25iX2FycmF5X2VsZW1lbnRfc3RhcnQnLCBwcm9yZXR0eXBlID0+ICdpbnRl cm5hbCcsCisgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCBpbnQ0JywgcHJvYXJnbmFtZXMgPT4g J3tmcm9tX2pzb25iLCBlbGVtZW50X2luZGV4fScsCisgIHByb3NyYyA9PiAnanNvbmJfYXJyYXlf ZWxlbWVudF9zdGFydCcgfSwKK3sgb2lkID0+ICc0NTQ5JywgZGVzY3IgPT4gJ2V4dHJhY3QganNv bmJ2YWx1ZSBmcm9tIGpzb25iIGZvciB0aGUgZ2l2ZW4gcGF0aHMnLAorICBwcm9uYW1lID0+ICdq c29uYl9leHRyYWN0X3BhdGhfc3RhcnQnLCBwcm92YXJpYWRpYyA9PiAndGV4dCcsIHByb3JldHR5 cGUgPT4gJ2ludGVybmFsJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsIF90ZXh0JywgcHJv YWxsYXJndHlwZXMgPT4gJ3tpbnRlcm5hbCxfdGV4dH0nLAorICBwcm9hcmdtb2RlcyA9PiAne2ks dn0nLCBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbmIscGF0aF9lbGVtc30nLAorICBwcm9zcmMg PT4gJ2pzb25iX2V4dHJhY3RfcGF0aF9zdGFydCd9LAoreyBvaWQgPT4gJzQ1NTMnLCBkZXNjciA9 PiAnY29udmVydCBhIGpzb25idmFsdWUgdG8gbnVtZXJpYycsCisgIHByb25hbWUgPT4gJ2pzb25i X2ZpbmlzaF9udW1lcmljJywgcHJvcmV0dHlwZSA9PiAnbnVtZXJpYycsCisgIHByb2FyZ3R5cGVz ID0+ICdpbnRlcm5hbCBvaWQnLCBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbnZhbHVlLHRhcmdl dF9vaWR9JywKKyAgcHJvc3JjID0+ICdqc29uYl9maW5pc2hfbnVtZXJpYycgfSwKK3sgb2lkID0+ ICc0NTU0JywgZGVzY3IgPT4gJ2NvbnZlcnQgYSBqc29uYnZhbHVlIHRvIGJvb2xlYW4nLAorICBw cm9uYW1lID0+ICdqc29uYl9maW5pc2hfYm9vbCcsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAorICBw cm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwnLCBwcm9hcmduYW1lcyA9PiAne2pzb252YWx1ZX0nLAor ICBwcm9zcmMgPT4gJ2pzb25iX2ZpbmlzaF9ib29sJyB9LAoreyBvaWQgPT4gJzM4MTQnLCBkZXNj ciA9PiAncGxhbm5lciBzdXBwb3J0IGZvciBudW1lcmljKGpzb25iKScsCisgIHByb25hbWUgPT4g J2pzb25iX2Nhc3Rfc3VwcG9ydCcsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywKKyAgcHJvYXJn dHlwZXMgPT4gJ2ludGVybmFsJywgcHJvc3JjID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnIH0sCiB7 IG9pZCA9PiAnMzIxNScsCiAgIHByb25hbWUgPT4gJ2pzb25iX2FycmF5X2VsZW1lbnQnLCBwcm9y ZXR0eXBlID0+ICdqc29uYicsCiAgIHByb2FyZ3R5cGVzID0+ICdqc29uYiBpbnQ0JywgcHJvYXJn bmFtZXMgPT4gJ3tmcm9tX2pzb24sIGVsZW1lbnRfaW5kZXh9JywKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9qc29uYi5vdXQKaW5kZXggNGExNmQwZGJhZmIuLmMxMmYzZDA2ZjNjIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2pzb25iLm91dApAQCAtNDU3LDggKzQ1Nyw4MSBAQCBDUkVBVEUgVEVNUCBUQUJM RSB0ZXN0X2pzb25iICgKICk7CiBJTlNFUlQgSU5UTyB0ZXN0X2pzb25iIFZBTFVFUwogKCdzY2Fs YXInLCciYSBzY2FsYXIiJyksCisoJ3NjYWxhcmludCcsJzInKSwKICgnYXJyYXknLCdbInplcm8i LCAib25lIiwidHdvIixudWxsLCJmb3VyIiwiZml2ZSIsIFsxLDIsM10seyJmMSI6OX1dJyksCi0o J29iamVjdCcsJ3siZmllbGQxIjoidmFsMSIsImZpZWxkMiI6InZhbDIiLCJmaWVsZDMiOm51bGws ICJmaWVsZDQiOiA0LCAiZmllbGQ1IjogWzEsMiwzXSwgImZpZWxkNiI6IHsiZjEiOjl9fScpOwor KCdvYmplY3QnLCd7ImZpZWxkMSI6InZhbDEiLCJmaWVsZDIiOiJ2YWwyIiwiZmllbGQzIjpudWxs LCAiZmllbGQ0IjogNCwgImZpZWxkNSI6IFsxLDIsM10sICJmaWVsZDYiOiB7ImYxIjo5fSwgImZp ZWxkNyI6IHRydWV9Jyk7CitccHNldCBudWxsIE5VTEwKK0VYUExBSU4gKENPU1RTIE9GRiwgVkVS Qk9TRSkKK1NFTEVDVAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6Om51bWVyaWMsCisodGVzdF9q c29uIC0+ICdmaWVsZDQnKTo6aW50MiwKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ0LAor KHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmludDgsCisodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6 ZmxvYXQ0LAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0OCwKKyh0ZXN0X2pzb24tPidm aWVsZDUnIC0+IDApOjpudW1lcmljLAorKHRlc3RfanNvbi0+J2ZpZWxkNScgLT4gMTApOjpudW1l cmljLAorKHRlc3RfanNvbiM+J3siZmllbGQ2IiwgImYxIn0nKTo6bnVtZXJpYywKKyh0ZXN0X2pz b24jPid7ImZpZWxkNiIsICJmMiJ9Jyk6Om51bWVyaWMsCisodGVzdF9qc29uIz4neyJmaWVsZDci fScpOjpib29sCitGUk9NIHRlc3RfanNvbmIKK1dIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2Nh biBvbiBwZ190ZW1wLnRlc3RfanNvbmIKKyAgIE91dHB1dDoganNvbmJfZmluaXNoX251bWVyaWMo anNvbmJfb2JqZWN0X2ZpZWxkX3N0YXJ0KCh0ZXN0X2pzb24pOjppbnRlcm5hbCgwKSwgJ2ZpZWxk NCc6OnRleHQpLCAnMTcwMCc6Om9pZCksIChqc29uYl9maW5pc2hfbnVtZXJpYyhqc29uYl9vYmpl Y3RfZmllbGRfc3RhcnQoKHRlc3RfanNvbik6OmludGVybmFsKDApLCAnZmllbGQ0Jzo6dGV4dCks ICcyMSc6Om9pZCkpOjpzbWFsbGludCwgKGpzb25iX2ZpbmlzaF9udW1lcmljKGpzb25iX29iamVj dF9maWVsZF9zdGFydCgodGVzdF9qc29uKTo6aW50ZXJuYWwoMCksICdmaWVsZDQnOjp0ZXh0KSwg JzIzJzo6b2lkKSk6OmludGVnZXIsIChqc29uYl9maW5pc2hfbnVtZXJpYyhqc29uYl9vYmplY3Rf ZmllbGRfc3RhcnQoKHRlc3RfanNvbik6OmludGVybmFsKDApLCAnZmllbGQ0Jzo6dGV4dCksICcy MCc6Om9pZCkpOjpiaWdpbnQsIChqc29uYl9maW5pc2hfbnVtZXJpYyhqc29uYl9vYmplY3RfZmll bGRfc3RhcnQoKHRlc3RfanNvbik6OmludGVybmFsKDApLCAnZmllbGQ0Jzo6dGV4dCksICc3MDAn OjpvaWQpKTo6cmVhbCwgKGpzb25iX2ZpbmlzaF9udW1lcmljKGpzb25iX29iamVjdF9maWVsZF9z dGFydCgodGVzdF9qc29uKTo6aW50ZXJuYWwoMCksICdmaWVsZDQnOjp0ZXh0KSwgJzcwMSc6Om9p ZCkpOjpkb3VibGUgcHJlY2lzaW9uLCBqc29uYl9maW5pc2hfbnVtZXJpYyhqc29uYl9hcnJheV9l bGVtZW50X3N0YXJ0KCgodGVzdF9qc29uIC0+ICdmaWVsZDUnOjp0ZXh0KSk6OmludGVybmFsKDAp LCAwKSwgJzE3MDAnOjpvaWQpLCBqc29uYl9maW5pc2hfbnVtZXJpYyhqc29uYl9hcnJheV9lbGVt ZW50X3N0YXJ0KCgodGVzdF9qc29uIC0+ICdmaWVsZDUnOjp0ZXh0KSk6OmludGVybmFsKDApLCAx MCksICcxNzAwJzo6b2lkKSwganNvbmJfZmluaXNoX251bWVyaWMocGdfY2F0YWxvZy5qc29uYl9l eHRyYWN0X3BhdGhfc3RhcnQoKHRlc3RfanNvbik6OmludGVybmFsKDApLCAne2ZpZWxkNixmMX0n Ojp0ZXh0W10pLCAnMTcwMCc6Om9pZCksIGpzb25iX2ZpbmlzaF9udW1lcmljKHBnX2NhdGFsb2cu anNvbmJfZXh0cmFjdF9wYXRoX3N0YXJ0KCh0ZXN0X2pzb24pOjppbnRlcm5hbCgwKSwgJ3tmaWVs ZDYsZjJ9Jzo6dGV4dFtdKSwgJzE3MDAnOjpvaWQpLCBqc29uYl9maW5pc2hfYm9vbChwZ19jYXRh bG9nLmpzb25iX2V4dHJhY3RfcGF0aF9zdGFydCgodGVzdF9qc29uKTo6aW50ZXJuYWwoMCksICd7 ZmllbGQ3fSc6OnRleHRbXSkpCisgICBGaWx0ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdv YmplY3QnOjp0ZXh0KQorKDMgcm93cykKKworU0VMRUNUCisodGVzdF9qc29uIC0+ICdmaWVsZDQn KTo6bnVtZXJpYywKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQyLAorKHRlc3RfanNvbiAt PiAnZmllbGQ0Jyk6OmludDQsCisodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6aW50OCwKKyh0ZXN0 X2pzb24gLT4gJ2ZpZWxkNCcpOjpmbG9hdDQsCisodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6Zmxv YXQ4LAorKHRlc3RfanNvbiAtPiAnZmllbGQ1JyAtPiAwKTo6bnVtZXJpYywKKyh0ZXN0X2pzb24g LT4gJ2ZpZWxkNScgLT4gMTApOjpudW1lcmljLAorKHRlc3RfanNvbiAjPiAneyJmaWVsZDYiLCAi ZjEifScpOjpudW1lcmljLAorKHRlc3RfanNvbiAjPiAneyJmaWVsZDYiLCAiZjIifScpOjpudW1l cmljLAorKHRlc3RfanNvbiM+J3siZmllbGQ3In0nKTo6Ym9vbAorRlJPTSB0ZXN0X2pzb25iCitX SEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyBudW1lcmljIHwgaW50MiB8IGludDQgfCBpbnQ4 IHwgZmxvYXQ0IHwgZmxvYXQ4IHwgbnVtZXJpYyB8IG51bWVyaWMgfCBudW1lcmljIHwgbnVtZXJp YyB8IGJvb2wgCistLS0tLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0rLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLQorICAgICAg IDQgfCAgICA0IHwgICAgNCB8ICAgIDQgfCAgICAgIDQgfCAgICAgIDQgfCAgICAgICAxIHwgICAg TlVMTCB8ICAgICAgIDkgfCAgICBOVUxMIHwgdAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBP RkYsIFZFUkJPU0UpCitTRUxFQ1QgKHRlc3RfanNvbiAjPiAne30nKTo6bnVtZXJpYyBGUk9NIHRl c3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ3NjYWxhcmludCc7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNvbmIKKyAgIE91dHB1dDoganNvbmJfZmlu aXNoX251bWVyaWMocGdfY2F0YWxvZy5qc29uYl9leHRyYWN0X3BhdGhfc3RhcnQoKHRlc3RfanNv bik6OmludGVybmFsKDApLCAne30nOjp0ZXh0W10pLCAnMTcwMCc6Om9pZCkKKyAgIEZpbHRlcjog KHRlc3RfanNvbmIuanNvbl90eXBlID0gJ3NjYWxhcmludCc6OnRleHQpCisoMyByb3dzKQorCitT RUxFQ1QgKHRlc3RfanNvbiAjPiAne30nKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUg anNvbl90eXBlID0gJ3NjYWxhcmludCc7CisgbnVtZXJpYyAKKy0tLS0tLS0tLQorICAgICAgIDIK KygxIHJvdykKKworLS0gbGV0IHJhaXNlIHNvbWUgZXJyb3JzLgorRVhQTEFJTiAoQ09TVFMgT0ZG LCBWRVJCT1NFKQorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkMScpOjppbnQ0IEZST00gdGVz dF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IFNlcSBTY2FuIG9uIHBnX3RlbXAudGVzdF9qc29uYgorICAgT3V0cHV0OiAoanNvbmJfZmluaXNo X251bWVyaWMoanNvbmJfb2JqZWN0X2ZpZWxkX3N0YXJ0KCh0ZXN0X2pzb24pOjppbnRlcm5hbCgw KSwgJ2ZpZWxkMSc6OnRleHQpLCAnMjMnOjpvaWQpKTo6aW50ZWdlcgorICAgRmlsdGVyOiAodGVz dF9qc29uYi5qc29uX3R5cGUgPSAnb2JqZWN0Jzo6dGV4dCkKKygzIHJvd3MpCisKK1NFTEVDVCAo dGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6aW50NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90 eXBlID0gJ29iamVjdCc7CitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIHN0cmluZyB0byB0eXBl IGludGVnZXIKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6Ym9vbCBGUk9NIHRlc3Rf anNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CitFUlJPUjogIGNhbm5vdCBjYXN0IGpz b25iIHN0cmluZyB0byB0eXBlIGJvb2xlYW4KK1xwc2V0IG51bGwgJycKIFNFTEVDVCB0ZXN0X2pz b24gLT4gJ3gnIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyJzsKICA/ Y29sdW1uPyAKIC0tLS0tLS0tLS0KQEAgLTU4Niw3ICs2NTksOCBAQCBTRUxFQ1QganNvbmJfb2Jq ZWN0X2tleXModGVzdF9qc29uKSBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29i amVjdCc7CiAgZmllbGQ0CiAgZmllbGQ1CiAgZmllbGQ2Ci0oNiByb3dzKQorIGZpZWxkNworKDcg cm93cykKIAogLS0gbnVsbHMKIFNFTEVDVCAodGVzdF9qc29uLT4nZmllbGQzJykgSVMgTlVMTCBB UyBleHBlY3RfZmFsc2UgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3Qn OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmIuc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvanNvbmIuc3FsCmluZGV4IGU0YjdjZGY3MDNkLi45ZGY4ODg2NjY3MSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmIuc3FsCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2pzb25iLnNxbApAQCAtMTU0LDggKzE1NCw1NCBAQCBDUkVBVEUgVEVNUCBUQUJM RSB0ZXN0X2pzb25iICgKIAogSU5TRVJUIElOVE8gdGVzdF9qc29uYiBWQUxVRVMKICgnc2NhbGFy JywnImEgc2NhbGFyIicpLAorKCdzY2FsYXJpbnQnLCcyJyksCiAoJ2FycmF5JywnWyJ6ZXJvIiwg Im9uZSIsInR3byIsbnVsbCwiZm91ciIsImZpdmUiLCBbMSwyLDNdLHsiZjEiOjl9XScpLAotKCdv YmplY3QnLCd7ImZpZWxkMSI6InZhbDEiLCJmaWVsZDIiOiJ2YWwyIiwiZmllbGQzIjpudWxsLCAi ZmllbGQ0IjogNCwgImZpZWxkNSI6IFsxLDIsM10sICJmaWVsZDYiOiB7ImYxIjo5fX0nKTsKKygn b2JqZWN0JywneyJmaWVsZDEiOiJ2YWwxIiwiZmllbGQyIjoidmFsMiIsImZpZWxkMyI6bnVsbCwg ImZpZWxkNCI6IDQsICJmaWVsZDUiOiBbMSwyLDNdLCAiZmllbGQ2IjogeyJmMSI6OX0sICJmaWVs ZDciOiB0cnVlfScpOworCitccHNldCBudWxsIE5VTEwKK0VYUExBSU4gKENPU1RTIE9GRiwgVkVS Qk9TRSkKK1NFTEVDVAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6Om51bWVyaWMsCisodGVzdF9q c29uIC0+ICdmaWVsZDQnKTo6aW50MiwKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ0LAor KHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmludDgsCisodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6 ZmxvYXQ0LAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0OCwKKyh0ZXN0X2pzb24tPidm aWVsZDUnIC0+IDApOjpudW1lcmljLAorKHRlc3RfanNvbi0+J2ZpZWxkNScgLT4gMTApOjpudW1l cmljLAorKHRlc3RfanNvbiM+J3siZmllbGQ2IiwgImYxIn0nKTo6bnVtZXJpYywKKyh0ZXN0X2pz b24jPid7ImZpZWxkNiIsICJmMiJ9Jyk6Om51bWVyaWMsCisodGVzdF9qc29uIz4neyJmaWVsZDci fScpOjpib29sCitGUk9NIHRlc3RfanNvbmIKK1dIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOwor CitTRUxFQ1QKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpudW1lcmljLAorKHRlc3RfanNvbiAt PiAnZmllbGQ0Jyk6OmludDIsCisodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6aW50NCwKKyh0ZXN0 X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ4LAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0 NCwKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpmbG9hdDgsCisodGVzdF9qc29uIC0+ICdmaWVs ZDUnIC0+IDApOjpudW1lcmljLAorKHRlc3RfanNvbiAtPiAnZmllbGQ1JyAtPiAxMCk6Om51bWVy aWMsCisodGVzdF9qc29uICM+ICd7ImZpZWxkNiIsICJmMSJ9Jyk6Om51bWVyaWMsCisodGVzdF9q c29uICM+ICd7ImZpZWxkNiIsICJmMiJ9Jyk6Om51bWVyaWMsCisodGVzdF9qc29uIz4neyJmaWVs ZDcifScpOjpib29sCitGUk9NIHRlc3RfanNvbmIKK1dIRVJFIGpzb25fdHlwZSA9ICdvYmplY3Qn OworCitFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpCitTRUxFQ1QgKHRlc3RfanNvbiAjPiAn e30nKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ3NjYWxhcmlu dCc7CitTRUxFQ1QgKHRlc3RfanNvbiAjPiAne30nKTo6bnVtZXJpYyBGUk9NIHRlc3RfanNvbmIg V0hFUkUganNvbl90eXBlID0gJ3NjYWxhcmludCc7CisKKy0tIGxldCByYWlzZSBzb21lIGVycm9y cy4KK0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdm aWVsZDEnKTo6aW50NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7 CitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQxJyk6OmludDQgRlJPTSB0ZXN0X2pzb25iIFdI RVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQx Jyk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworCitc cHNldCBudWxsICcnCiAKIFNFTEVDVCB0ZXN0X2pzb24gLT4gJ3gnIEZST00gdGVzdF9qc29uYiBX SEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyJzsKIFNFTEVDVCB0ZXN0X2pzb24gLT4gJ3gnIEZST00g dGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnYXJyYXknOwotLSAKMi4yMS4wCgo= --000000000000671b380604437d74--