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 1qdAfw-002QiM-Am for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Sep 2023 14:35: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 1qdAfv-00Btbf-98 for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Sep 2023 14:35:35 +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 1qdAfu-00BtbP-QP for pgsql-hackers@lists.postgresql.org; Mon, 04 Sep 2023 14:35:34 +0000 Received: from mail-oo1-xc31.google.com ([2607:f8b0:4864:20::c31]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qdAfp-0030Hg-V4 for pgsql-hackers@postgresql.org; Mon, 04 Sep 2023 14:35:34 +0000 Received: by mail-oo1-xc31.google.com with SMTP id 006d021491bc7-5733aa10291so1094559eaf.3 for ; Mon, 04 Sep 2023 07:35:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693838128; x=1694442928; 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=iXdlwqP0RkOIwxAtjGmuBJscJo7QnoA/EgSMxbJ5WwA=; b=fl3Tbq7uf+e3SmeHHTbrfUnyG0JAfCcb7YYqKvX0YlE4WQobKMMqMt2bafiCQyygnZ PnN/SBBWDy8Re3xiJX7Shb6B2buXHj1m5AvbXdlDRfSNZsP9AFwtTbw0iyNXMMzSAWGp oo8MAfej45Vne2n9gQFAhGx72yfmhvRiAIes9Fx9YJ+/fQzvmC8Uezv+exGVbgUtDaK+ RmpzRhqdOW7PWC0Q6XhmvdBLbCOnLOy5J8rjWZFASPaUzHYUmC2eXs3mWKgvytv4S0ET EwqaavZIWEdwMRxD47+TcnCRD8N7ZlcK7IGD6SpTvyl6Do1egMzIeSjJhlZbDeXLNK4s jJ/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693838128; x=1694442928; 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=iXdlwqP0RkOIwxAtjGmuBJscJo7QnoA/EgSMxbJ5WwA=; b=LTu96Tbc+1Atv7cFo3pF7BJLuM6kvX85aOcJpylS8YCvSilsxGVFWiGyqnWJqeSenz RhWQE8KCXQMSIxsyagRmaTBUO9fiAXlum7RhJI5Bse6V/pY+CWbrWLrCSuF+SIWXExmT aH9BNx2+m5i6pltrR/ur0eIZQHwXnygbv8HUF2LHoks+92bTlQWObOGNy52t3aERHpxW coJJw0HnLPWohPlWA91A3w88TQ5FrrD+MYJ0UOX6m+E43ZJNkg6SZBz4fxLILFmzK5Ns 2SB209qlU6govkVll+cHyNDrOuZQZR0Pj8LWryNOkr0i5AWESQPTTTlwBiSNKeX6/NaO muvw== X-Gm-Message-State: AOJu0YwvWc+C3FiYfm7zG5HZKzw2neuyi2IIxRpZexkCDbG8B2To6uKv 2VTT1VXpO5GWILqQaweSHg5RIxCBxvKW9ro8q42hb26kGkM= X-Google-Smtp-Source: AGHT+IGm4W4l1oQ9N2y7WV5tIe90vTFlchlH60gJRGWgkhzhgcA6SDHnMvb2lgywsRh41XhP+YeykYrjQsJXkHm82qI= X-Received: by 2002:a4a:2553:0:b0:56e:5a8e:654f with SMTP id v19-20020a4a2553000000b0056e5a8e654fmr9118462ooe.8.1693838127722; Mon, 04 Sep 2023 07:35:27 -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: Mon, 4 Sep 2023 22:35:16 +0800 Message-ID: Subject: Re: Extract numeric filed in JSONB more effectively To: jian he Cc: Chapman Flack , Pavel Stehule , Tom Lane , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000ea6d7e0604896b2a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ea6d7e0604896b2a Content-Type: multipart/alternative; boundary="000000000000ea6d790604896b28" --000000000000ea6d790604896b28 Content-Type: text/plain; charset="UTF-8" Hi, v13 attached. Changes includes: 1. fix the bug Jian provides. 2. reduce more code duplication without DirectFunctionCall. 3. add the overlooked jsonb_path_query and jsonb_path_query_first as candidates -- Best Regards Andy Fan --000000000000ea6d790604896b28 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

=C2=A0 v13 attached.=C2= =A0 Changes includes:

1.=C2=A0 fix the bug Jian pr= ovides.=C2=A0=C2=A0
2.=C2=A0 reduce more code duplication without= DirectFunctionCall.=C2=A0
3.=C2=A0 add the overlooked=C2=A0 json= b_path_query and jsonb_path_query_first as candidates

<= div>
--
Best Regards
= Andy Fan
--000000000000ea6d790604896b28-- --000000000000ea6d7e0604896b2a Content-Type: application/octet-stream; name="v13-0001-optimize-casting-jsonb-to-a-given-type.patch" Content-Disposition: attachment; filename="v13-0001-optimize-casting-jsonb-to-a-given-type.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lm4zgwgq0 RnJvbSA5YjFiNDQ0NmQ0MWI1ODdlMGRkNjM1YTc2NjhiNDJlMDBhYjRlNzliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IEZhbiA8emhpaHVpLmZhbjEyMTNAZ21haWwuY29tPgpE YXRlOiBNb24sIDQgU2VwIDIwMjMgMjI6Mjk6MTggKzA4MDAKU3ViamVjdDogW1BBVENIIHYxM10g b3B0aW1pemUgY2FzdGluZyBqc29uYiB0byBhIGdpdmVuIHR5cGUuCgpQcmV2aW91c2x5IGFmdGVy IHdlIGdldCBhIEpzb25iVmFsdWUsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0bwpKc29uYiBmaXJz dCB0aGVuIGNhc3QgdGhlIEpzb25iIHRvIHRoZSBnaXZlbiB0eXBlLiBJbiB0aGlzIHBhdGNoLAp3 ZSBjb3ZlcnQgdGhlIEpzb25iVmFsdWUgdG8gdGhlIGRlc2lyZWQgdHlwZSBkaXJlY3RseS4KLS0t CiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyAgICAgICAgIHwgMTQ1ICsrKysrKysrKysr KysrKysrKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMgICAgIHwgMTY0 ICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBh dGhfZXhlYy5jIHwgIDM2ICsrKystLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgg ICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICB8ICA0 NiArKysrKystLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYi5vdXQgICB8IDExMiAr KysrKysrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbCAgICAgICAg fCAgNjYgKysrKysrKysrKy0KIDcgZmlsZXMgY2hhbmdlZCwgNTAxIGluc2VydGlvbnMoKyksIDcx IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKaW5kZXggOTc4MTg1MmIwY2IuLjMxNjU2 ZDhhMTFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwpAQCAtMTcsMTEgKzE3LDE1IEBACiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19wcm9jLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5j bHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUg Im5vZGVzL3N1cHBvcnRub2Rlcy5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2VyY2UuaCIK ICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0ZS5oIgogI2luY2x1 ZGUgInV0aWxzL2RhdGV0aW1lLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKICNpbmNs dWRlICJ1dGlscy9qc29uLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKICNpbmNsdWRlICJ1 dGlscy9qc29uZnVuY3MuaCIKQEAgLTIwMzgsNiArMjA0MiwxNDcgQEAgY2Fubm90Q2FzdEpzb25i VmFsdWUoZW51bSBqYnZUeXBlIHR5cGUsIGNvbnN0IGNoYXIgKnNxbHR5cGUpCiAJZWxvZyhFUlJP UiwgInVua25vd24ganNvbmIgdHlwZTogJWQiLCAoaW50KSB0eXBlKTsKIH0KIAorRGF0dW0KK2pz b25iX2Nhc3Rfc3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCU5vZGUJICAgKnJhd3JlcSA9 IChOb2RlICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJaWYgKElzQShyYXdyZXEsIFN1cHBv cnRSZXF1ZXN0U2ltcGxpZnkpKQorCXsKKwkJU3VwcG9ydFJlcXVlc3RTaW1wbGlmeSAqcmVxID0g KFN1cHBvcnRSZXF1ZXN0U2ltcGxpZnkgKikgcmF3cmVxOworCQlGdW5jRXhwcgkqZmV4cHIgPSBw YWxsb2MwKHNpemVvZihGdW5jRXhwcikpOworCQlGdW5jRXhwcgkqanNvbmJfc3RhcnRfZnVuYyA9 IE5VTEwsICpqc29uYl9maW5pc2hfZnVuYyA9IE5VTEwsICpmaW5hbF9mdW5jID0gTlVMTDsKKwkJ Tm9kZQkJKmlucHV0OworCQlPaWQJCQluZXdfZnVuY19pZCA9IEludmFsaWRPaWQ7CisJCUxpc3QJ CSphcmdzOworCQlPaWQJCQlpbnB1dF9mdW5jX2lkLCBjb2xsaWQsIGlucHV0Y29sbGlkOworCQli b29sCQlyZXRzZXQgPSBmYWxzZSwgIHZhcmlhZGljID0gZmFsc2U7CisKKwkJbWVtY3B5KGZleHBy LCByZXEtPmZjYWxsLCBzaXplb2YoRnVuY0V4cHIpKTsKKwkJQXNzZXJ0KGxpc3RfbGVuZ3RoKGZl eHByLT5hcmdzKSA9PSAxKTsKKwkJaW5wdXQgPSAoTm9kZSAqKSBsaW5pdGlhbChmZXhwci0+YXJn cyk7CisKKwkJaWYgKElzQShpbnB1dCwgT3BFeHByKSkKKwkJeworCQkJT3BFeHByCSpvcEV4cHIg PSBjYXN0Tm9kZShPcEV4cHIsIGlucHV0KTsKKwkJCWlucHV0X2Z1bmNfaWQgPSBvcEV4cHItPm9w ZnVuY2lkOworCQkJY29sbGlkID0gb3BFeHByLT5vcGNvbGxpZDsKKwkJCWlucHV0Y29sbGlkID0g b3BFeHByLT5pbnB1dGNvbGxpZDsKKwkJCWFyZ3MgPSBvcEV4cHItPmFyZ3M7CisJCX0KKwkJZWxz ZSBpZiAoSXNBKGlucHV0LCBGdW5jRXhwcikpCisJCXsKKwkJCUZ1bmNFeHByICpmdW5jRXhwciA9 IGNhc3ROb2RlKEZ1bmNFeHByLCBpbnB1dCk7CisJCQlpbnB1dF9mdW5jX2lkID0gZnVuY0V4cHIt PmZ1bmNpZDsKKwkJCWNvbGxpZCA9IGZ1bmNFeHByLT5mdW5jY29sbGlkOworCQkJaW5wdXRjb2xs aWQgPSBmdW5jRXhwci0+aW5wdXRjb2xsaWQ7CisJCQlhcmdzID0gZnVuY0V4cHItPmFyZ3M7CisJ CX0KKwkJZWxzZQorCQkJLyogbm90IHRoZSBkZXNpcmVkIHBhdHRlcm4uICovCisJCQlQR19SRVRV Uk5fUE9JTlRFUihmZXhwcik7CisKKworCQlzd2l0Y2ggKGlucHV0X2Z1bmNfaWQpCisJCXsKKwkJ CWNhc2UgRl9KU09OQl9PQkpFQ1RfRklFTEQ6CisJCQkJbmV3X2Z1bmNfaWQgPSBGX0pTT05CX09C SkVDVF9GSUVMRF9TVEFSVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgRl9KU09OQl9BUlJBWV9FTEVN RU5UOgorCQkJCW5ld19mdW5jX2lkID0gRl9KU09OQl9BUlJBWV9FTEVNRU5UX1NUQVJUOworCQkJ CWJyZWFrOworCQkJY2FzZSBGX0pTT05CX0VYVFJBQ1RfUEFUSDoKKwkJCQluZXdfZnVuY19pZCA9 IEZfSlNPTkJfRVhUUkFDVF9QQVRIX1NUQVJUOworCQkJCXZhcmlhZGljID0gdHJ1ZTsKKwkJCQli cmVhazsKKwkJCWNhc2UgRl9KU09OQl9QQVRIX1FVRVJZOgorCQkJCW5ld19mdW5jX2lkID0gRl9K U09OQl9QQVRIX1FVRVJZX1NUQVJUOworCQkJCXJldHNldCA9IHRydWU7CisJCQkJYnJlYWs7CisJ CQljYXNlIEZfSlNPTkJfUEFUSF9RVUVSWV9GSVJTVDoKKwkJCQluZXdfZnVuY19pZCA9IEZfSlNP TkJfUEFUSF9RVUVSWV9GSVJTVF9TVEFSVDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJ bmV3X2Z1bmNfaWQgPSBJbnZhbGlkT2lkOworCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFPaWRJ c1ZhbGlkKG5ld19mdW5jX2lkKSkKKwkJCVBHX1JFVFVSTl9QT0lOVEVSKGZleHByKTsKKworCQlq c29uYl9zdGFydF9mdW5jID0gbWFrZUZ1bmNFeHByKG5ld19mdW5jX2lkLCBJTlRFUk5BTE9JRCwg YXJncywKKwkJCQkJCQkJCQljb2xsaWQsIGlucHV0Y29sbGlkLAorCQkJCQkJCQkJCUNPRVJDRV9F WFBMSUNJVF9DQUxMKTsKKwkJanNvbmJfc3RhcnRfZnVuYy0+ZnVuY3JldHNldCA9IHJldHNldDsK KwkJanNvbmJfc3RhcnRfZnVuYy0+ZnVuY3ZhcmlhZGljID0gdmFyaWFkaWM7CisKKwkJLyogcmVs YWJlbCB0aGUgZmlyc3QgYXJndW1lbnRzIGFzICdpbnRlcm5hbCcuICovCisJCWxpbml0aWFsKGpz b25iX3N0YXJ0X2Z1bmMtPmFyZ3MpID0gbWFrZVJlbGFiZWxUeXBlKGxpbml0aWFsKGpzb25iX3N0 YXJ0X2Z1bmMtPmFyZ3MpLAorCQkJCQkJCQkJCQkJCQkgICBJTlRFUk5BTE9JRCwgMCwKKwkJCQkJ CQkJCQkJCQkJICAgSW52YWxpZE9pZCwKKwkJCQkJCQkJCQkJCQkJICAgQ09FUkNFX0lNUExJQ0lU X0NBU1QpOworCQlzd2l0Y2ggKGZleHByLT5mdW5jcmVzdWx0dHlwZSkKKwkJeworCQkJY2FzZSBJ TlQyT0lEOgorCQkJY2FzZSBJTlQ0T0lEOgorCQkJY2FzZSBJTlQ4T0lEOgorCQkJY2FzZSBGTE9B VDRPSUQ6CisJCQljYXNlIEZMT0FUOE9JRDoKKwkJCWNhc2UgTlVNRVJJQ09JRDoKKwkJCQlqc29u Yl9maW5pc2hfZnVuYyA9IG1ha2VGdW5jRXhwcihGX0pTT05CX0ZJTklTSF9OVU1FUklDLCBOVU1F UklDT0lELAorCQkJCQkJCQkJCQkJIGxpc3RfbWFrZTIoanNvbmJfc3RhcnRfZnVuYywKKwkJCQkJ CQkJCQkJCQkJCW1ha2VDb25zdChPSURPSUQsCisJCQkJCQkJCQkJCQkJCQkJCSAgLTEsCisJCQkJ CQkJCQkJCQkJCQkJCSAgSW52YWxpZE9pZCwKKwkJCQkJCQkJCQkJCQkJCQkJICBzaXplb2YoT2lk KSwKKwkJCQkJCQkJCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGZleHByLT5mdW5jcmVzdWx0 dHlwZSksCisJCQkJCQkJCQkJCQkJCQkJCSAgZmFsc2UsCisJCQkJCQkJCQkJCQkJCQkJCSAgdHJ1 ZSkpLAorCQkJCQkJCQkJCQkJIGNvbGxpZCwgaW5wdXRjb2xsaWQsIENPRVJDRV9FWFBMSUNJVF9D QUxMKTsKKworCQkJCWlmIChmZXhwci0+ZnVuY3Jlc3VsdHR5cGUgIT0gTlVNRVJJQ09JRCkKKwkJ CQl7CisJCQkJCWZpbmFsX2Z1bmMgPSAoRnVuY0V4cHIgKiljb2VyY2VfdHlwZShOVUxMLCAoTm9k ZSAqKWpzb25iX2ZpbmlzaF9mdW5jLCBOVU1FUklDT0lELAorCQkJCQkJCQkJCQkJCQkgZmV4cHIt PmZ1bmNyZXN1bHR0eXBlLCAwLCBDT0VSQ0lPTl9FWFBMSUNJVCwKKwkJCQkJCQkJCQkJCQkJIENP RVJDRV9FWFBMSUNJVF9DQVNULCBmZXhwci0+bG9jYXRpb24pOworCQkJCX0KKwkJCQllbHNlCisJ CQkJCWZpbmFsX2Z1bmMgPSBqc29uYl9maW5pc2hfZnVuYzsKKworCQkJCVBHX1JFVFVSTl9QT0lO VEVSKGZpbmFsX2Z1bmMpOworCQkJY2FzZSBCT09MT0lEOgorCQkJCWZpbmFsX2Z1bmMgPSBtYWtl RnVuY0V4cHIoRl9KU09OQl9GSU5JU0hfQk9PTCwgQk9PTE9JRCwKKwkJCQkJCQkJCQkgIGxpc3Rf bWFrZTEoanNvbmJfc3RhcnRfZnVuYyksIGNvbGxpZCwKKwkJCQkJCQkJCQkgIGlucHV0Y29sbGlk LCBDT0VSQ0VfRVhQTElDSVRfQ0FMTCk7CisJCQkJUEdfUkVUVVJOX1BPSU5URVIoZmluYWxfZnVu Yyk7CisJCQlkZWZhdWx0OgorCQkJCVBHX1JFVFVSTl9QT0lOVEVSKGZleHByKTsKKwkJfQorCX0K KworCVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOworfQorCisKK0RhdHVtCitqc29uYl9maW5pc2hf bnVtZXJpYyhQR19GVU5DVElPTl9BUkdTKQoreworCUpzb25iVmFsdWUJKnYgPSAoSnNvbmJWYWx1 ZSAqKVBHX0dFVEFSR19QT0lOVEVSKDApOworCU9pZAkJCWZpbmFsX29pZCA9IFBHX0dFVEFSR19P SUQoMSk7CisJaWYgKHYtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJY2Fubm90Q2FzdEpzb25iVmFs dWUodi0+dHlwZSwgZm9ybWF0X3R5cGVfYmUoZmluYWxfb2lkKSk7CisJUEdfUkVUVVJOX05VTUVS SUModi0+dmFsLm51bWVyaWMpOworfQorCitEYXR1bQoranNvbmJfZmluaXNoX2Jvb2woUEdfRlVO Q1RJT05fQVJHUykKK3sKKwlKc29uYlZhbHVlCSp2ID0gKEpzb25iVmFsdWUgKilQR19HRVRBUkdf UE9JTlRFUigwKTsKKwlpZiAodi0+dHlwZSAhPSBqYnZCb29sKQorCQljYW5ub3RDYXN0SnNvbmJW YWx1ZSh2LT50eXBlLCAiYm9vbGVhbiIpOworCVBHX1JFVFVSTl9CT09MKHYtPnZhbC5ib29sZWFu KTsKK30KKwogRGF0dW0KIGpzb25iX2Jvb2woUEdfRlVOQ1RJT05fQVJHUykKIHsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9qc29uZnVuY3MuYwppbmRleCBhNGJmYTVlNDA0MC4uZTNmNmZlYTRlMTkgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbmZ1bmNzLmMKQEAgLTQ5Miw2ICs0OTIsNyBAQCBzdGF0aWMgSnNvblBhcnNl RXJyb3JUeXBlIHRyYW5zZm9ybV9zdHJpbmdfdmFsdWVzX29iamVjdF9maWVsZF9zdGFydCh2b2lk ICpzdGF0ZQogc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZSB0cmFuc2Zvcm1fc3RyaW5nX3ZhbHVl c19hcnJheV9lbGVtZW50X3N0YXJ0KHZvaWQgKnN0YXRlLCBib29sIGlzbnVsbCk7CiBzdGF0aWMg SnNvblBhcnNlRXJyb3JUeXBlIHRyYW5zZm9ybV9zdHJpbmdfdmFsdWVzX3NjYWxhcih2b2lkICpz dGF0ZSwgY2hhciAqdG9rZW4sIEpzb25Ub2tlblR5cGUgdG9rZW50eXBlKTsKIAorc3RhdGljIEpz b25iVmFsdWUgKmpzb25iX2dldF9qc29uYnZhbHVlKEpzb25iICpqYiwgRGF0dW0gKnBhdGgsIGlu dCBucGF0aCwgYm9vbCAqaXNudWxsKTsKIAogLyoKICAqIHBnX3BhcnNlX2pzb25fb3JfZXJyc2F2 ZQpAQCAtODQ4LDEzICs4NDksMTIgQEAganNvbl9vYmplY3RfZmllbGQoUEdfRlVOQ1RJT05fQVJH UykKIAkJUEdfUkVUVVJOX05VTEwoKTsKIH0KIAotRGF0dW0KLWpzb25iX29iamVjdF9maWVsZChQ R19GVU5DVElPTl9BUkdTKQorc3RhdGljIERhdHVtCitqc29uYl9vYmplY3RfZmllbGRfaW50ZXJu YWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgYXNfanNvbmIpCiB7CiAJSnNvbmIJICAg KmpiID0gUEdfR0VUQVJHX0pTT05CX1AoMCk7CiAJdGV4dAkgICAqa2V5ID0gUEdfR0VUQVJHX1RF WFRfUFAoMSk7Ci0JSnNvbmJWYWx1ZSAqdjsKLQlKc29uYlZhbHVlCXZidWY7CisJSnNvbmJWYWx1 ZQkqdjsKIAogCWlmICghSkJfUk9PVF9JU19PQkpFQ1QoamIpKQogCQlQR19SRVRVUk5fTlVMTCgp OwpAQCAtODYyLDEyICs4NjIsMjYgQEAganNvbmJfb2JqZWN0X2ZpZWxkKFBHX0ZVTkNUSU9OX0FS R1MpCiAJdiA9IGdldEtleUpzb25WYWx1ZUZyb21Db250YWluZXIoJmpiLT5yb290LAogCQkJCQkJ CQkJIFZBUkRBVEFfQU5ZKGtleSksCiAJCQkJCQkJCQkgVkFSU0laRV9BTllfRVhIRFIoa2V5KSwK LQkJCQkJCQkJCSAmdmJ1Zik7CisJCQkJCQkJCQkgTlVMTCk7CisJaWYgKHYgPT0gTlVMTCkKKwkJ UEdfUkVUVVJOX05VTEwoKTsKIAotCWlmICh2ICE9IE5VTEwpCisJaWYgKGFzX2pzb25iKQogCQlQ R19SRVRVUk5fSlNPTkJfUChKc29uYlZhbHVlVG9Kc29uYih2KSk7CiAKLQlQR19SRVRVUk5fTlVM TCgpOworCVBHX1JFVFVSTl9QT0lOVEVSKHYpOworfQorCitEYXR1bQoranNvbmJfb2JqZWN0X2Zp ZWxkKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJcmV0dXJuIGpzb25iX29iamVjdF9maWVsZF9pbnRl cm5hbChmY2luZm8sIHRydWUpOworfQorCitEYXR1bQoranNvbmJfb2JqZWN0X2ZpZWxkX3N0YXJ0 KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJcmV0dXJuIGpzb25iX29iamVjdF9maWVsZF9pbnRlcm5h bChmY2luZm8sIGZhbHNlKTsKIH0KIAogRGF0dW0KQEAgLTkyMyw4ICs5MzcsOCBAQCBqc29uX2Fy cmF5X2VsZW1lbnQoUEdfRlVOQ1RJT05fQVJHUykKIAkJUEdfUkVUVVJOX05VTEwoKTsKIH0KIAot RGF0dW0KLWpzb25iX2FycmF5X2VsZW1lbnQoUEdfRlVOQ1RJT05fQVJHUykKK3N0YXRpYyBEYXR1 bQoranNvbmJfYXJyYXlfZWxlbWVudF9pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywg Ym9vbCBhc19qc29uYikKIHsKIAlKc29uYgkgICAqamIgPSBQR19HRVRBUkdfSlNPTkJfUCgwKTsK IAlpbnQJCQllbGVtZW50ID0gUEdfR0VUQVJHX0lOVDMyKDEpOwpAQCAtOTQ1LDEwICs5NTksMjUg QEAganNvbmJfYXJyYXlfZWxlbWVudChQR19GVU5DVElPTl9BUkdTKQogCX0KIAogCXYgPSBnZXRJ dGhKc29uYlZhbHVlRnJvbUNvbnRhaW5lcigmamItPnJvb3QsIGVsZW1lbnQpOwotCWlmICh2ICE9 IE5VTEwpCisJaWYgKHYgPT0gTlVMTCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCWlmIChhc19q c29uYikKIAkJUEdfUkVUVVJOX0pTT05CX1AoSnNvbmJWYWx1ZVRvSnNvbmIodikpOwogCi0JUEdf UkVUVVJOX05VTEwoKTsKKwlQR19SRVRVUk5fUE9JTlRFUih2KTsKK30KKworRGF0dW0KK2pzb25i X2FycmF5X2VsZW1lbnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlyZXR1cm4ganNvbmJfYXJyYXlf ZWxlbWVudF9pbnRlcm5hbChmY2luZm8sIHRydWUpOworfQorCitEYXR1bQoranNvbmJfYXJyYXlf ZWxlbWVudF9zdGFydChQR19GVU5DVElPTl9BUkdTKQoreworCXJldHVybiBqc29uYl9hcnJheV9l bGVtZW50X2ludGVybmFsKGZjaW5mbywgZmFsc2UpOwogfQogCiBEYXR1bQpAQCAtMTQ3Myw2ICsx NTAyLDM5IEBAIGdldF9zY2FsYXIodm9pZCAqc3RhdGUsIGNoYXIgKnRva2VuLCBKc29uVG9rZW5U eXBlIHRva2VudHlwZSkKIAlyZXR1cm4gSlNPTl9TVUNDRVNTOwogfQogCitEYXR1bQoranNvbmJf ZXh0cmFjdF9wYXRoX3N0YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJSnNvbmIJICAgKmpiID0g UEdfR0VUQVJHX0pTT05CX1AoMCk7CisJQXJyYXlUeXBlICAqcGF0aCA9IFBHX0dFVEFSR19BUlJB WVRZUEVfUCgxKTsKKworCUpzb25iVmFsdWUgKnY7CisKKwlEYXR1bQkgICAqcGF0aHRleHQ7CisJ Ym9vbAkgICAqcGF0aG51bGxzOworCWJvb2wJCWlzbnVsbCA9IGZhbHNlOworCWludAkJCW5wYXRo OworCisJLyoKKwkgKiBJZiB0aGUgYXJyYXkgY29udGFpbnMgYW55IG51bGwgZWxlbWVudHMsIHJl dHVybiBOVUxMLCBvbiB0aGUgZ3JvdW5kcworCSAqIHRoYXQgeW91J2QgaGF2ZSBnb3R0ZW4gTlVM TCBpZiBhbnkgUkhTIHZhbHVlIHdlcmUgTlVMTCBpbiBhIG5lc3RlZAorCSAqIHNlcmllcyBvZiBh cHBsaWNhdGlvbnMgb2YgdGhlIC0+IG9wZXJhdG9yLiAgKE5vdGU6IGJlY2F1c2Ugd2UgYWxzbwor CSAqIHJldHVybiBOVUxMIGZvciBlcnJvciBjYXNlcyBzdWNoIGFzIG5vLXN1Y2gtZmllbGQsIHRo aXMgaXMgdHJ1ZQorCSAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXN0IG9m IHRoZSBhcnJheS4pCisJICovCisJaWYgKGFycmF5X2NvbnRhaW5zX251bGxzKHBhdGgpKQorCQlQ R19SRVRVUk5fTlVMTCgpOworCisJZGVjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihwYXRoLCBURVhU T0lELCAmcGF0aHRleHQsICZwYXRobnVsbHMsICZucGF0aCk7CisKKwl2ID0ganNvbmJfZ2V0X2pz b25idmFsdWUoamIsIHBhdGh0ZXh0LCBucGF0aCwgJmlzbnVsbCk7CisKKwlpZiAoaXNudWxsKQor CQlQR19SRVRVUk5fTlVMTCgpOworCisJUEdfUkVUVVJOX1BPSU5URVIodik7Cit9CisKIERhdHVt CiBqc29uYl9leHRyYWN0X3BhdGgoUEdfRlVOQ1RJT05fQVJHUykKIHsKQEAgLTE1MTYsNTIgKzE1 NzgsMzYgQEAgZ2V0X2pzb25iX3BhdGhfYWxsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29s IGFzX3RleHQpCiAJCVBHX1JFVFVSTl9EQVRVTShyZXMpOwogfQogCi1EYXR1bQotanNvbmJfZ2V0 X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGws IGJvb2wgYXNfdGV4dCkKKworc3RhdGljIEpzb25iVmFsdWUgKgoranNvbmJfZ2V0X2pzb25idmFs dWUoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGwpCiB7CisJ Ym9vbCBoYXZlX29iamVjdCA9IGZhbHNlLCBoYXZlX2FycmF5ID0gZmFsc2U7CiAJSnNvbmJDb250 YWluZXIgKmNvbnRhaW5lciA9ICZqYi0+cm9vdDsKKwlpbnQgaTsKIAlKc29uYlZhbHVlICpqYnZw ID0gTlVMTDsKLQlpbnQJCQlpOwotCWJvb2wJCWhhdmVfb2JqZWN0ID0gZmFsc2UsCi0JCQkJaGF2 ZV9hcnJheSA9IGZhbHNlOwogCi0JKmlzbnVsbCA9IGZhbHNlOworCS8qCisJICogSWYgdGhlIGFy cmF5IGlzIGVtcHR5LCByZXR1cm4gdGhlIGVudGlyZSBMSFMgb2JqZWN0LCBvbiB0aGUgZ3JvdW5k cworCSAqIHRoYXQgd2Ugc2hvdWxkIGRvIHplcm8gZmllbGQgb3IgZWxlbWVudCBleHRyYWN0aW9u cy4KKwkgKi8KKwlpZiAobnBhdGggPD0gMCkKKwl7CisJCUpzb25iVmFsdWUgKnJlcyA9IE5VTEw7 CisJCWlmIChKQl9ST09UX0lTX0FSUkFZKGpiKSAmJiBKQl9ST09UX0lTX1NDQUxBUihqYikpCisJ CQlyZXR1cm4gZ2V0SXRoSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLCAwKTsKKwor CQkvKiBOQjogcmVzIGlzIGEgamJ2QmluYXJ5IEpzb25iVmFsdWUgKi8KKwkJcmVzID0gcGFsbG9j MChzaXplb2YoSnNvbmJWYWx1ZSkpOworCQlKc29uYlRvSnNvbmJWYWx1ZShqYiwgcmVzKTsKKwkJ cmV0dXJuIHJlczsKKwl9CiAKIAkvKiBJZGVudGlmeSB3aGV0aGVyIHdlIGhhdmUgb2JqZWN0LCBh cnJheSwgb3Igc2NhbGFyIGF0IHRvcC1sZXZlbCAqLwogCWlmIChKQl9ST09UX0lTX09CSkVDVChq YikpCiAJCWhhdmVfb2JqZWN0ID0gdHJ1ZTsKIAllbHNlIGlmIChKQl9ST09UX0lTX0FSUkFZKGpi KSAmJiAhSkJfUk9PVF9JU19TQ0FMQVIoamIpKQogCQloYXZlX2FycmF5ID0gdHJ1ZTsKLQllbHNl Ci0JewotCQlBc3NlcnQoSkJfUk9PVF9JU19BUlJBWShqYikgJiYgSkJfUk9PVF9JU19TQ0FMQVIo amIpKTsKLQkJLyogRXh0cmFjdCB0aGUgc2NhbGFyIHZhbHVlLCBpZiBpdCBpcyB3aGF0IHdlJ2xs IHJldHVybiAqLwotCQlpZiAobnBhdGggPD0gMCkKLQkJCWpidnAgPSBnZXRJdGhKc29uYlZhbHVl RnJvbUNvbnRhaW5lcihjb250YWluZXIsIDApOwotCX0KLQotCS8qCi0JICogSWYgdGhlIGFycmF5 IGlzIGVtcHR5LCByZXR1cm4gdGhlIGVudGlyZSBMSFMgb2JqZWN0LCBvbiB0aGUgZ3JvdW5kcwot CSAqIHRoYXQgd2Ugc2hvdWxkIGRvIHplcm8gZmllbGQgb3IgZWxlbWVudCBleHRyYWN0aW9ucy4g IEZvciB0aGUKLQkgKiBub24tc2NhbGFyIGNhc2Ugd2UgY2FuIGp1c3QgaGFuZCBiYWNrIHRoZSBv YmplY3Qgd2l0aG91dCBtdWNoIHdvcmsuIEZvcgotCSAqIHRoZSBzY2FsYXIgY2FzZSwgZmFsbCB0 aHJvdWdoIGFuZCBkZWFsIHdpdGggdGhlIHZhbHVlIGJlbG93IHRoZSBsb29wLgotCSAqIChUaGlz IGluY29uc2lzdGVuY3kgYXJpc2VzIGJlY2F1c2UgdGhlcmUncyBubyBlYXN5IHdheSB0byBnZW5l cmF0ZSBhCi0JICogSnNvbmJWYWx1ZSBkaXJlY3RseSBmb3Igcm9vdC1sZXZlbCBjb250YWluZXJz LikKLQkgKi8KLQlpZiAobnBhdGggPD0gMCAmJiBqYnZwID09IE5VTEwpCi0JewotCQlpZiAoYXNf dGV4dCkKLQkJewotCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3RleHQoSnNv bmJUb0NTdHJpbmcoTlVMTCwKLQkJCQkJCQkJCQkJCQkJCQkgIGNvbnRhaW5lciwKLQkJCQkJCQkJ CQkJCQkJCQkgIFZBUlNJWkUoamIpKSkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogbm90IHRl eHQgbW9kZSAtIGp1c3QgaGFuZCBiYWNrIHRoZSBqc29uYiAqLwotCQkJUEdfUkVUVVJOX0pTT05C X1AoamIpOwotCQl9Ci0JfQogCiAJZm9yIChpID0gMDsgaSA8IG5wYXRoOyBpKyspCiAJewpAQCAt MTU4Niw3ICsxNjMyLDcgQEAganNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0 aCwgaW50IG5wYXRoLCBib29sICppc251bGwsIGJvb2wgYXNfdGV4dCkKIAkJCWlmIChlbmRwdHIg PT0gaW5kZXh0ZXh0IHx8ICplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyAhPSAwKQogCQkJewogCQkJ CSppc251bGwgPSB0cnVlOwotCQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisJCQkJ cmV0dXJuIE5VTEw7CiAJCQl9CiAKIAkJCWlmIChsaW5kZXggPj0gMCkKQEAgLTE2MDcsNyArMTY1 Myw3IEBAIGpzb25iX2dldF9lbGVtZW50KEpzb25iICpqYiwgRGF0dW0gKnBhdGgsIGludCBucGF0 aCwgYm9vbCAqaXNudWxsLCBib29sIGFzX3RleHQpCiAJCQkJaWYgKGxpbmRleCA9PSBJTlRfTUlO IHx8IC1saW5kZXggPiBuZWxlbWVudHMpCiAJCQkJewogCQkJCQkqaXNudWxsID0gdHJ1ZTsKLQkJ CQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwkJCQkJcmV0dXJuIE5VTEw7CiAJCQkJ fQogCQkJCWVsc2UKIAkJCQkJaW5kZXggPSBuZWxlbWVudHMgKyBsaW5kZXg7CkBAIC0xNjE5LDEz ICsxNjY1LDEzIEBAIGpzb25iX2dldF9lbGVtZW50KEpzb25iICpqYiwgRGF0dW0gKnBhdGgsIGlu dCBucGF0aCwgYm9vbCAqaXNudWxsLCBib29sIGFzX3RleHQpCiAJCXsKIAkJCS8qIHNjYWxhciwg ZXh0cmFjdGlvbiB5aWVsZHMgYSBudWxsICovCiAJCQkqaXNudWxsID0gdHJ1ZTsKLQkJCXJldHVy biBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQogCiAJCWlmIChq YnZwID09IE5VTEwpCiAJCXsKIAkJCSppc251bGwgPSB0cnVlOwotCQkJcmV0dXJuIFBvaW50ZXJH ZXREYXR1bShOVUxMKTsKKwkJCXJldHVybiBOVUxMOwogCQl9CiAJCWVsc2UgaWYgKGkgPT0gbnBh dGggLSAxKQogCQkJYnJlYWs7CkBAIC0xNjQ0LDYgKzE2OTAsMjIgQEAganNvbmJfZ2V0X2VsZW1l bnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGwsIGJvb2wg YXNfdGV4dCkKIAkJCWhhdmVfYXJyYXkgPSBmYWxzZTsKIAkJfQogCX0KKwlyZXR1cm4gamJ2cDsK K30KKworLyoKKyAqIFJldHVybiBqc29uYiBkYXR1bSBvciBqc29uYi1hcy10ZXh0IGRhdHVtLgor ICovCitEYXR1bQoranNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50 IG5wYXRoLCBib29sICppc251bGwsIGJvb2wgYXNfdGV4dCkKK3sKKwlKc29uYlZhbHVlICpqYnZw ID0gTlVMTDsKKwkqaXNudWxsID0gZmFsc2U7CisKKwlqYnZwID0ganNvbmJfZ2V0X2pzb25idmFs dWUoamIsIHBhdGgsIG5wYXRoLCBpc251bGwpOworCisJaWYgKCppc251bGwpCisJCXJldHVybiBQ b2ludGVyR2V0RGF0dW0oTlVMTCk7CiAKIAlpZiAoYXNfdGV4dCkKIAl7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25wYXRoX2V4ZWMuYwppbmRleCAyZDA1OTliNGFhYS4uOTczYWRiOTk4MWIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYwpAQCAtMzkzLDcgKzM5Myw3IEBAIGpzb25i X3BhdGhfbWF0Y2hfb3ByKFBHX0ZVTkNUSU9OX0FSR1MpCiAgKgkJcm93c2V0LgogICovCiBzdGF0 aWMgRGF0dW0KLWpzb25iX3BhdGhfcXVlcnlfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2lu Zm8sIGJvb2wgdHopCitqc29uYl9wYXRoX3F1ZXJ5X2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvLCBib29sIHR6LCBib29sIGFzX2pzb25iKQogewogCUZ1bmNDYWxsQ29udGV4dCAqZnVu Y2N0eDsKIAlMaXN0CSAgICpmb3VuZDsKQEAgLTQzNSwxOSArNDM1LDI4IEBAIGpzb25iX3BhdGhf cXVlcnlfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgdHopCiAJdiA9IGxm aXJzdChjKTsKIAlmdW5jY3R4LT51c2VyX2ZjdHggPSBsaXN0X2RlbGV0ZV9maXJzdChmb3VuZCk7 CiAKLQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1ZVRv SnNvbmIodikpKTsKKwlpZiAoYXNfanNvbmIpCisJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBK c29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9Kc29uYih2KSkpOworCWVsc2UKKwkJU1JGX1JFVFVS Tl9ORVhUKGZ1bmNjdHgsIFBvaW50ZXJHZXREYXR1bSh2KSk7CiB9CiAKIERhdHVtCiBqc29uYl9w YXRoX3F1ZXJ5KFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JcmV0dXJuIGpzb25iX3BhdGhfcXVlcnlf aW50ZXJuYWwoZmNpbmZvLCBmYWxzZSk7CisJcmV0dXJuIGpzb25iX3BhdGhfcXVlcnlfaW50ZXJu YWwoZmNpbmZvLCBmYWxzZSwgdHJ1ZSk7CiB9CiAKIERhdHVtCiBqc29uYl9wYXRoX3F1ZXJ5X3R6 KFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JcmV0dXJuIGpzb25iX3BhdGhfcXVlcnlfaW50ZXJuYWwo ZmNpbmZvLCB0cnVlKTsKKwlyZXR1cm4ganNvbmJfcGF0aF9xdWVyeV9pbnRlcm5hbChmY2luZm8s IHRydWUsIHRydWUpOworfQorCitEYXR1bQoranNvbmJfcGF0aF9xdWVyeV9zdGFydChQR19GVU5D VElPTl9BUkdTKQoreworCXJldHVybiBqc29uYl9wYXRoX3F1ZXJ5X2ludGVybmFsKGZjaW5mbywg ZmFsc2UsIGZhbHNlKTsKIH0KIAogLyoKQEAgLTQ4Nyw3ICs0OTYsNyBAQCBqc29uYl9wYXRoX3F1 ZXJ5X2FycmF5X3R6KFBHX0ZVTkNUSU9OX0FSR1MpCiAgKgkJaXRlbS4gIElmIHRoZXJlIGFyZSBu byBpdGVtcywgTlVMTCByZXR1cm5lZC4KICAqLwogc3RhdGljIERhdHVtCi1qc29uYl9wYXRoX3F1 ZXJ5X2ZpcnN0X2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIHR6KQoranNv bmJfcGF0aF9xdWVyeV9maXJzdF9pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9v bCB0eiwgYm9vbCBhc19qc29uYikKIHsKIAlKc29uYgkgICAqamIgPSBQR19HRVRBUkdfSlNPTkJf UCgwKTsKIAlKc29uUGF0aCAgICpqcCA9IFBHX0dFVEFSR19KU09OUEFUSF9QKDEpOwpAQCAtNDk4 LDcgKzUwNywxMiBAQCBqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0X2ludGVybmFsKEZ1bmN0aW9uQ2Fs bEluZm8gZmNpbmZvLCBib29sIHR6KQogCSh2b2lkKSBleGVjdXRlSnNvblBhdGgoanAsIHZhcnMs IGpiLCAhc2lsZW50LCAmZm91bmQsIHR6KTsKIAogCWlmIChKc29uVmFsdWVMaXN0TGVuZ3RoKCZm b3VuZCkgPj0gMSkKLQkJUEdfUkVUVVJOX0pTT05CX1AoSnNvbmJWYWx1ZVRvSnNvbmIoSnNvblZh bHVlTGlzdEhlYWQoJmZvdW5kKSkpOworCXsKKwkJaWYgKGFzX2pzb25iKQorCQkJUEdfUkVUVVJO X0pTT05CX1AoSnNvbmJWYWx1ZVRvSnNvbmIoSnNvblZhbHVlTGlzdEhlYWQoJmZvdW5kKSkpOwor CQllbHNlCisJCQlQR19SRVRVUk5fUE9JTlRFUihKc29uVmFsdWVMaXN0SGVhZCgmZm91bmQpKTsK Kwl9CiAJZWxzZQogCQlQR19SRVRVUk5fTlVMTCgpOwogfQpAQCAtNTA2LDEzICs1MjAsMTkgQEAg anNvbmJfcGF0aF9xdWVyeV9maXJzdF9pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywg Ym9vbCB0eikKIERhdHVtCiBqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0KFBHX0ZVTkNUSU9OX0FSR1Mp CiB7Ci0JcmV0dXJuIGpzb25iX3BhdGhfcXVlcnlfZmlyc3RfaW50ZXJuYWwoZmNpbmZvLCBmYWxz ZSk7CisJcmV0dXJuIGpzb25iX3BhdGhfcXVlcnlfZmlyc3RfaW50ZXJuYWwoZmNpbmZvLCBmYWxz ZSwgdHJ1ZSk7CiB9CiAKIERhdHVtCiBqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0X3R6KFBHX0ZVTkNU SU9OX0FSR1MpCiB7Ci0JcmV0dXJuIGpzb25iX3BhdGhfcXVlcnlfZmlyc3RfaW50ZXJuYWwoZmNp bmZvLCB0cnVlKTsKKwlyZXR1cm4ganNvbmJfcGF0aF9xdWVyeV9maXJzdF9pbnRlcm5hbChmY2lu Zm8sIHRydWUsIHRydWUpOworfQorCitEYXR1bQoranNvbmJfcGF0aF9xdWVyeV9maXJzdF9zdGFy dChQR19GVU5DVElPTl9BUkdTKQoreworCXJldHVybiBqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0X2lu dGVybmFsKGZjaW5mbywgZmFsc2UsIGZhbHNlKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioq RXhlY3V0ZSBmdW5jdGlvbnMgZm9yIEpzb25QYXRoKioqKioqKioqKioqKioqKioqKioqKioqKiov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCmluZGV4IGFiOWE3YWMxZjc5Li4xYmYwYjgyODg1MyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKQEAgLTU3LDYgKzU3LDUgQEAKICAqLwogCiAvKgkJ CQkJCQl5eXl5bW1kZE4gKi8KLSNkZWZpbmUgQ0FUQUxPR19WRVJTSU9OX05PCTIwMjMwODI1MQot CisjZGVmaW5lIENBVEFMT0dfVkVSU0lPTl9OTwkyMDIzMDkwNDEKICNlbmRpZgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKaW5kZXggOTgwNWJjNjExODAuLmVmNzE5YWFjNmJiIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKQEAgLTQ1ODcsMjUgKzQ1ODcsMjUgQEAKICAgcHJvbmFtZSA9PiAncGdfbHNu JywgcHJvcmV0dHlwZSA9PiAncGdfbHNuJywgcHJvYXJndHlwZXMgPT4gJ251bWVyaWMnLAogICBw cm9zcmMgPT4gJ251bWVyaWNfcGdfbHNuJyB9LAogCi17IG9pZCA9PiAnMzU1NicsIGRlc2NyID0+ ICdjb252ZXJ0IGpzb25iIHRvIGJvb2xlYW4nLAoreyBvaWQgPT4gJzM1NTYnLCBkZXNjciA9PiAn Y29udmVydCBqc29uYiB0byBib29sZWFuJywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBw b3J0JywKICAgcHJvbmFtZSA9PiAnYm9vbCcsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0 eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4gJ2pzb25iX2Jvb2wnIH0sCiB7IG9pZCA9PiAn MzQ0OScsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIG51bWVyaWMnLAotICBwcm9uYW1lID0+ ICdudW1lcmljJywgcHJvcmV0dHlwZSA9PiAnbnVtZXJpYycsIHByb2FyZ3R5cGVzID0+ICdqc29u YicsCisgIHByb25hbWUgPT4gJ251bWVyaWMnLCBwcm9yZXR0eXBlID0+ICdudW1lcmljJywgcHJv YXJndHlwZXMgPT4gJ2pzb25iJywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywK ICAgcHJvc3JjID0+ICdqc29uYl9udW1lcmljJyB9LAoteyBvaWQgPT4gJzM0NTAnLCBkZXNjciA9 PiAnY29udmVydCBqc29uYiB0byBpbnQyJywKK3sgb2lkID0+ICczNDUwJywgZGVzY3IgPT4gJ2Nv bnZlcnQganNvbmIgdG8gaW50MicsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcs CiAgIHByb25hbWUgPT4gJ2ludDInLCBwcm9yZXR0eXBlID0+ICdpbnQyJywgcHJvYXJndHlwZXMg PT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9pbnQyJyB9LAoteyBvaWQgPT4gJzM0NTEn LCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBpbnQ0JywKK3sgb2lkID0+ICczNDUxJywgZGVz Y3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gaW50NCcsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rf c3VwcG9ydCcsCiAgIHByb25hbWUgPT4gJ2ludDQnLCBwcm9yZXR0eXBlID0+ICdpbnQ0JywgcHJv YXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9pbnQ0JyB9LAoteyBvaWQg PT4gJzM0NTInLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBpbnQ4JywKK3sgb2lkID0+ICcz NDUyJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gaW50OCcsIHByb3N1cHBvcnQgPT4gJ2pz b25iX2Nhc3Rfc3VwcG9ydCcsCiAgIHByb25hbWUgPT4gJ2ludDgnLCBwcm9yZXR0eXBlID0+ICdp bnQ4JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9pbnQ4JyB9 LAoteyBvaWQgPT4gJzM0NTMnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBmbG9hdDQnLAor eyBvaWQgPT4gJzM0NTMnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBmbG9hdDQnLCBwcm9z dXBwb3J0ID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnLAogICBwcm9uYW1lID0+ICdmbG9hdDQnLCBw cm9yZXR0eXBlID0+ICdmbG9hdDQnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMg PT4gJ2pzb25iX2Zsb2F0NCcgfSwKLXsgb2lkID0+ICcyNTgwJywgZGVzY3IgPT4gJ2NvbnZlcnQg anNvbmIgdG8gZmxvYXQ4JywKK3sgb2lkID0+ICcyNTgwJywgZGVzY3IgPT4gJ2NvbnZlcnQganNv bmIgdG8gZmxvYXQ4JywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKICAgcHJv bmFtZSA9PiAnZmxvYXQ4JywgcHJvcmV0dHlwZSA9PiAnZmxvYXQ4JywgcHJvYXJndHlwZXMgPT4g J2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9mbG9hdDgnIH0sCiAKQEAgLTk5NDcsNiArOTk0 NywzMCBAQAogICBwcm9uYW1lID0+ICdqc29uYl9vYmplY3RfZmllbGRfdGV4dCcsIHByb3JldHR5 cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAnanNvbmIgdGV4dCcsIHByb2FyZ25hbWVz ID0+ICd7ZnJvbV9qc29uLCBmaWVsZF9uYW1lfScsCiAgIHByb3NyYyA9PiAnanNvbmJfb2JqZWN0 X2ZpZWxkX3RleHQnIH0sCit7IG9pZCA9PiAnNDU1MicsIGRlc2NyID0+ICdleHRyYWN0IGpzb25i dmFsdWUgZnJvbSBqc29uYiBmb3IgdGhlIGdpdmVuIGZpZWxkJywKKyAgcHJvbmFtZSA9PiAnanNv bmJfb2JqZWN0X2ZpZWxkX3N0YXJ0JywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAorICBwcm9h cmd0eXBlcyA9PiAnaW50ZXJuYWwgdGV4dCcsIHByb2FyZ25hbWVzID0+ICd7ZnJvbV9qc29uLCBm aWVsZF9uYW1lfScsCisgIHByb3NyYyA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX3N0YXJ0JyB9LAor eyBvaWQgPT4gJzM4MTMnLCBkZXNjciA9PiAnZXh0cmFjdCBqb3NuYnZhbHVlIGZyb20ganNvbmIg YXJyYXkgZm9yIHRoZSBnaXZlbiBpbmRleCcsCisgIHByb25hbWUgPT4gJ2pzb25iX2FycmF5X2Vs ZW1lbnRfc3RhcnQnLCBwcm9yZXR0eXBlID0+ICdpbnRlcm5hbCcsCisgIHByb2FyZ3R5cGVzID0+ ICdpbnRlcm5hbCBpbnQ0JywgcHJvYXJnbmFtZXMgPT4gJ3tmcm9tX2pzb25iLCBlbGVtZW50X2lu ZGV4fScsCisgIHByb3NyYyA9PiAnanNvbmJfYXJyYXlfZWxlbWVudF9zdGFydCcgfSwKK3sgb2lk ID0+ICc0NTQ5JywgZGVzY3IgPT4gJ2V4dHJhY3QganNvbmJ2YWx1ZSBmcm9tIGpzb25iIGZvciB0 aGUgZ2l2ZW4gcGF0aHMnLAorICBwcm9uYW1lID0+ICdqc29uYl9leHRyYWN0X3BhdGhfc3RhcnQn LCBwcm92YXJpYWRpYyA9PiAndGV4dCcsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywKKyAgcHJv YXJndHlwZXMgPT4gJ2ludGVybmFsIF90ZXh0JywgcHJvYWxsYXJndHlwZXMgPT4gJ3tpbnRlcm5h bCxfdGV4dH0nLAorICBwcm9hcmdtb2RlcyA9PiAne2ksdn0nLCBwcm9hcmduYW1lcyA9PiAne2Zy b21fanNvbmIscGF0aF9lbGVtc30nLAorICBwcm9zcmMgPT4gJ2pzb25iX2V4dHJhY3RfcGF0aF9z dGFydCd9LAoreyBvaWQgPT4gJzQ1NTMnLCBkZXNjciA9PiAnY29udmVydCBhIGpzb25idmFsdWUg dG8gbnVtZXJpYycsCisgIHByb25hbWUgPT4gJ2pzb25iX2ZpbmlzaF9udW1lcmljJywgcHJvcmV0 dHlwZSA9PiAnbnVtZXJpYycsCisgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCBvaWQnLCBwcm9h cmduYW1lcyA9PiAne2Zyb21fanNvbnZhbHVlLHRhcmdldF9vaWR9JywKKyAgcHJvc3JjID0+ICdq c29uYl9maW5pc2hfbnVtZXJpYycgfSwKK3sgb2lkID0+ICc0NTU0JywgZGVzY3IgPT4gJ2NvbnZl cnQgYSBqc29uYnZhbHVlIHRvIGJvb2xlYW4nLAorICBwcm9uYW1lID0+ICdqc29uYl9maW5pc2hf Ym9vbCcsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwn LCBwcm9hcmduYW1lcyA9PiAne2pzb252YWx1ZX0nLAorICBwcm9zcmMgPT4gJ2pzb25iX2Zpbmlz aF9ib29sJyB9LAoreyBvaWQgPT4gJzM4MTQnLCBkZXNjciA9PiAncGxhbm5lciBzdXBwb3J0IGZv ciBudW1lcmljKGpzb25iKScsCisgIHByb25hbWUgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsIHBy b3JldHR5cGUgPT4gJ2ludGVybmFsJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsJywgcHJv c3JjID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnIH0sCiB7IG9pZCA9PiAnMzIxNScsCiAgIHByb25h bWUgPT4gJ2pzb25iX2FycmF5X2VsZW1lbnQnLCBwcm9yZXR0eXBlID0+ICdqc29uYicsCiAgIHBy b2FyZ3R5cGVzID0+ICdqc29uYiBpbnQ0JywgcHJvYXJnbmFtZXMgPT4gJ3tmcm9tX2pzb24sIGVs ZW1lbnRfaW5kZXh9JywKQEAgLTEwMTM5LDYgKzEwMTYzLDEwIEBACiAgIHByb25hbWUgPT4gJ2pz b25iX3BhdGhfcXVlcnknLCBwcm9yb3dzID0+ICcxMDAwJywgcHJvcmV0c2V0ID0+ICd0JywKICAg cHJvcmV0dHlwZSA9PiAnanNvbmInLCBwcm9hcmd0eXBlcyA9PiAnanNvbmIganNvbnBhdGgganNv bmIgYm9vbCcsCiAgIHByb3NyYyA9PiAnanNvbmJfcGF0aF9xdWVyeScgfSwKK3sgb2lkID0+ICc0 NTU3JywgZGVzY3IgPT4gJ2pzb25wYXRoIHF1ZXJ5IGFzIGpzb25idmFsdWUnLAorICBwcm9uYW1l ID0+ICdqc29uYl9wYXRoX3F1ZXJ5X3N0YXJ0JywgcHJvcm93cyA9PiAnMTAwMCcsIHByb3JldHNl dCA9PiAndCcsCisgIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywgcHJvYXJndHlwZXMgPT4gJ2lu dGVybmFsIGpzb25wYXRoIGpzb25iIGJvb2wnLAorICBwcm9zcmMgPT4gJ2pzb25iX3BhdGhfcXVl cnlfc3RhcnQnIH0sCiB7IG9pZCA9PiAnNDAwNycsIGRlc2NyID0+ICdqc29ucGF0aCBxdWVyeSB3 cmFwcGVkIGludG8gYXJyYXknLAogICBwcm9uYW1lID0+ICdqc29uYl9wYXRoX3F1ZXJ5X2FycmF5 JywgcHJvcmV0dHlwZSA9PiAnanNvbmInLAogICBwcm9hcmd0eXBlcyA9PiAnanNvbmIganNvbnBh dGgganNvbmIgYm9vbCcsCkBAIC0xMDE0Nyw2ICsxMDE3NSwxMCBAQAogICBwcm9uYW1lID0+ICdq c29uYl9wYXRoX3F1ZXJ5X2ZpcnN0JywgcHJvcmV0dHlwZSA9PiAnanNvbmInLAogICBwcm9hcmd0 eXBlcyA9PiAnanNvbmIganNvbnBhdGgganNvbmIgYm9vbCcsCiAgIHByb3NyYyA9PiAnanNvbmJf cGF0aF9xdWVyeV9maXJzdCcgfSwKK3sgb2lkID0+ICc0NTU1JywgZGVzY3IgPT4gJ2pzb25wYXRo IHF1ZXJ5IGZpcnN0IGl0ZW0gYXMganNvbmJ2YWx1ZScsCisgIHByb25hbWUgPT4gJ2pzb25iX3Bh dGhfcXVlcnlfZmlyc3Rfc3RhcnQnLCBwcm9yZXR0eXBlID0+ICdpbnRlcm5hbCcsCisgIHByb2Fy Z3R5cGVzID0+ICdpbnRlcm5hbCBqc29ucGF0aCBqc29uYiBib29sJywKKyAgcHJvc3JjID0+ICdq c29uYl9wYXRoX3F1ZXJ5X2ZpcnN0X3N0YXJ0JyB9LAogeyBvaWQgPT4gJzQwMDknLCBkZXNjciA9 PiAnanNvbnBhdGggbWF0Y2gnLAogICBwcm9uYW1lID0+ICdqc29uYl9wYXRoX21hdGNoJywgcHJv cmV0dHlwZSA9PiAnYm9vbCcsCiAgIHByb2FyZ3R5cGVzID0+ICdqc29uYiBqc29ucGF0aCBqc29u YiBib29sJywgcHJvc3JjID0+ICdqc29uYl9wYXRoX21hdGNoJyB9LApkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2pzb25iLm91dAppbmRleCA0YTE2ZDBkYmFmYi4uYjYxMmZiODVlYzIgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvanNvbmIub3V0CkBAIC00NTcsOCArNDU3LDExNCBAQCBDUkVBVEUgVEVNUCBU QUJMRSB0ZXN0X2pzb25iICgKICk7CiBJTlNFUlQgSU5UTyB0ZXN0X2pzb25iIFZBTFVFUwogKCdz Y2FsYXInLCciYSBzY2FsYXIiJyksCisoJ3NjYWxhcmludCcsJzInKSwKICgnYXJyYXknLCdbInpl cm8iLCAib25lIiwidHdvIixudWxsLCJmb3VyIiwiZml2ZSIsIFsxLDIsM10seyJmMSI6OX1dJyks Ci0oJ29iamVjdCcsJ3siZmllbGQxIjoidmFsMSIsImZpZWxkMiI6InZhbDIiLCJmaWVsZDMiOm51 bGwsICJmaWVsZDQiOiA0LCAiZmllbGQ1IjogWzEsMiwzXSwgImZpZWxkNiI6IHsiZjEiOjl9fScp OworKCdvYmplY3QnLCd7ImZpZWxkMSI6InZhbDEiLCJmaWVsZDIiOiJ2YWwyIiwiZmllbGQzIjpu dWxsLCAiZmllbGQ0IjogNCwgImZpZWxkNSI6IFsxLDIsM10sICJmaWVsZDYiOiB7ImYxIjo5fSwg ImZpZWxkNyI6IHRydWUsICJmaWVsZDgiOiBbMSwyLDMsNCw1XX0nKTsKK1xwc2V0IG51bGwgTlVM TAorRVhQTEFJTiAoQ09TVFMgT0ZGLCBWRVJCT1NFKQorU0VMRUNUCisodGVzdF9qc29uIC0+ICdm aWVsZDQnKTo6bnVtZXJpYywKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQyLAorKHRlc3Rf anNvbiAtPiAnZmllbGQ0Jyk6OmludDQsCisodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6aW50OCwK Kyh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpmbG9hdDQsCisodGVzdF9qc29uIC0+ICdmaWVsZDQn KTo6ZmxvYXQ4LAorKHRlc3RfanNvbi0+J2ZpZWxkNScgLT4gMCk6Om51bWVyaWMsCisodGVzdF9q c29uLT4nZmllbGQ1JyAtPiAxMCk6Om51bWVyaWMsCisodGVzdF9qc29uIz4neyJmaWVsZDYiLCAi ZjEifScpOjpudW1lcmljLAorKHRlc3RfanNvbiM+J3siZmllbGQ2IiwgImYyIn0nKTo6bnVtZXJp YywKKyh0ZXN0X2pzb24jPid7ImZpZWxkNyJ9Jyk6OmJvb2wKK0ZST00gdGVzdF9qc29uYgorV0hF UkUganNvbl90eXBlID0gJ29iamVjdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFNlcSBTY2FuIG9uIHBnX3RlbXAudGVzdF9qc29uYgorICAgT3V0cHV0OiBqc29uYl9m aW5pc2hfbnVtZXJpYyhqc29uYl9vYmplY3RfZmllbGRfc3RhcnQoKHRlc3RfanNvbik6OmludGVy bmFsKDApLCAnZmllbGQ0Jzo6dGV4dCksICcxNzAwJzo6b2lkKSwgKGpzb25iX2ZpbmlzaF9udW1l cmljKGpzb25iX29iamVjdF9maWVsZF9zdGFydCgodGVzdF9qc29uKTo6aW50ZXJuYWwoMCksICdm aWVsZDQnOjp0ZXh0KSwgJzIxJzo6b2lkKSk6OnNtYWxsaW50LCAoanNvbmJfZmluaXNoX251bWVy aWMoanNvbmJfb2JqZWN0X2ZpZWxkX3N0YXJ0KCh0ZXN0X2pzb24pOjppbnRlcm5hbCgwKSwgJ2Zp ZWxkNCc6OnRleHQpLCAnMjMnOjpvaWQpKTo6aW50ZWdlciwgKGpzb25iX2ZpbmlzaF9udW1lcmlj KGpzb25iX29iamVjdF9maWVsZF9zdGFydCgodGVzdF9qc29uKTo6aW50ZXJuYWwoMCksICdmaWVs ZDQnOjp0ZXh0KSwgJzIwJzo6b2lkKSk6OmJpZ2ludCwgKGpzb25iX2ZpbmlzaF9udW1lcmljKGpz b25iX29iamVjdF9maWVsZF9zdGFydCgodGVzdF9qc29uKTo6aW50ZXJuYWwoMCksICdmaWVsZDQn Ojp0ZXh0KSwgJzcwMCc6Om9pZCkpOjpyZWFsLCAoanNvbmJfZmluaXNoX251bWVyaWMoanNvbmJf b2JqZWN0X2ZpZWxkX3N0YXJ0KCh0ZXN0X2pzb24pOjppbnRlcm5hbCgwKSwgJ2ZpZWxkNCc6OnRl eHQpLCAnNzAxJzo6b2lkKSk6OmRvdWJsZSBwcmVjaXNpb24sIGpzb25iX2ZpbmlzaF9udW1lcmlj KGpzb25iX2FycmF5X2VsZW1lbnRfc3RhcnQoKCh0ZXN0X2pzb24gLT4gJ2ZpZWxkNSc6OnRleHQp KTo6aW50ZXJuYWwoMCksIDApLCAnMTcwMCc6Om9pZCksIGpzb25iX2ZpbmlzaF9udW1lcmljKGpz b25iX2FycmF5X2VsZW1lbnRfc3RhcnQoKCh0ZXN0X2pzb24gLT4gJ2ZpZWxkNSc6OnRleHQpKTo6 aW50ZXJuYWwoMCksIDEwKSwgJzE3MDAnOjpvaWQpLCBqc29uYl9maW5pc2hfbnVtZXJpYyhqc29u Yl9leHRyYWN0X3BhdGhfc3RhcnQoKHRlc3RfanNvbik6OmludGVybmFsKDApLCBWQVJJQURJQyAn e2ZpZWxkNixmMX0nOjp0ZXh0W10pLCAnMTcwMCc6Om9pZCksIGpzb25iX2ZpbmlzaF9udW1lcmlj KGpzb25iX2V4dHJhY3RfcGF0aF9zdGFydCgodGVzdF9qc29uKTo6aW50ZXJuYWwoMCksIFZBUklB RElDICd7ZmllbGQ2LGYyfSc6OnRleHRbXSksICcxNzAwJzo6b2lkKSwganNvbmJfZmluaXNoX2Jv b2woanNvbmJfZXh0cmFjdF9wYXRoX3N0YXJ0KCh0ZXN0X2pzb24pOjppbnRlcm5hbCgwKSwgVkFS SUFESUMgJ3tmaWVsZDd9Jzo6dGV4dFtdKSkKKyAgIEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90 eXBlID0gJ29iamVjdCc6OnRleHQpCisoMyByb3dzKQorCitTRUxFQ1QKKyh0ZXN0X2pzb24gLT4g J2ZpZWxkNCcpOjpudW1lcmljLAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmludDIsCisodGVz dF9qc29uIC0+ICdmaWVsZDQnKTo6aW50NCwKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ4 LAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0NCwKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxk NCcpOjpmbG9hdDgsCisodGVzdF9qc29uIC0+ICdmaWVsZDUnIC0+IDApOjpudW1lcmljLAorKHRl c3RfanNvbiAtPiAnZmllbGQ1JyAtPiAxMCk6Om51bWVyaWMsCisodGVzdF9qc29uICM+ICd7ImZp ZWxkNiIsICJmMSJ9Jyk6Om51bWVyaWMsCisodGVzdF9qc29uICM+ICd7ImZpZWxkNiIsICJmMiJ9 Jyk6Om51bWVyaWMsCisodGVzdF9qc29uIz4neyJmaWVsZDcifScpOjpib29sCitGUk9NIHRlc3Rf anNvbmIKK1dIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworIG51bWVyaWMgfCBpbnQyIHwgaW50 NCB8IGludDggfCBmbG9hdDQgfCBmbG9hdDggfCBudW1lcmljIHwgbnVtZXJpYyB8IG51bWVyaWMg fCBudW1lcmljIHwgYm9vbCAKKy0tLS0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0t LSstLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t CisgICAgICAgNCB8ICAgIDQgfCAgICA0IHwgICAgNCB8ICAgICAgNCB8ICAgICAgNCB8ICAgICAg IDEgfCAgICBOVUxMIHwgICAgICAgOSB8ICAgIE5VTEwgfCB0CisoMSByb3cpCisKK0VYUExBSU4g KENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVAoranNvbmJfcGF0aF9xdWVyeSh0ZXN0X2pzb24s JyQuZmllbGQ4WypdID8gKEAgPj0gJG1pbiAmJiBAIDw9ICRtYXgpJywgJ3sibWluIjoyLCAibWF4 Ijo0fScpLAoranNvbmJfcGF0aF9xdWVyeV9maXJzdCh0ZXN0X2pzb24sICckLmZpZWxkOFsqXSA/ IChAID49ICRtaW4gJiYgQCA8PSAkbWF4KScsICd7Im1pbiI6MiwgIm1heCI6NH0nKSwKK2pzb25i X3BhdGhfcXVlcnkodGVzdF9qc29uLCckLmZpZWxkOFsqXSA/IChAID49ICRtaW4gJiYgQCA8PSAk bWF4KScsICd7Im1pbiI6MiwgIm1heCI6NH0nKTo6aW50MiwKK2pzb25iX3BhdGhfcXVlcnlfZmly c3QodGVzdF9qc29uLCAnJC5maWVsZDhbKl0gPyAoQCA+PSAkbWluICYmIEAgPD0gJG1heCknLCAn eyJtaW4iOjIsICJtYXgiOjR9Jyk6OmludDIKK0ZST00gdGVzdF9qc29uYgorV0hFUkUganNvbl90 eXBlID0gJ29iamVjdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBSZXN1bHQKKyAgIE91dHB1dDogKGpzb25iX3BhdGhfcXVlcnkodGVzdF9qc29u LCAnJC4iZmllbGQ4IlsqXT8oQCA+PSAkIm1pbiIgJiYgQCA8PSAkIm1heCIpJzo6anNvbnBhdGgs ICd7Im1heCI6IDQsICJtaW4iOiAyfSc6Ompzb25iLCBmYWxzZSkpLCBqc29uYl9wYXRoX3F1ZXJ5 X2ZpcnN0KHRlc3RfanNvbiwgJyQuImZpZWxkOCJbKl0/KEAgPj0gJCJtaW4iICYmIEAgPD0gJCJt YXgiKSc6Ompzb25wYXRoLCAneyJtYXgiOiA0LCAibWluIjogMn0nOjpqc29uYiwgZmFsc2UpLCAo anNvbmJfZmluaXNoX251bWVyaWMoKGpzb25iX3BhdGhfcXVlcnlfc3RhcnQoKHRlc3RfanNvbik6 OmludGVybmFsKDApLCAnJC4iZmllbGQ4IlsqXT8oQCA+PSAkIm1pbiIgJiYgQCA8PSAkIm1heCIp Jzo6anNvbnBhdGgsICd7Im1heCI6IDQsICJtaW4iOiAyfSc6Ompzb25iLCBmYWxzZSkpLCAnMjEn OjpvaWQpKTo6c21hbGxpbnQsIChqc29uYl9maW5pc2hfbnVtZXJpYyhqc29uYl9wYXRoX3F1ZXJ5 X2ZpcnN0X3N0YXJ0KCh0ZXN0X2pzb24pOjppbnRlcm5hbCgwKSwgJyQuImZpZWxkOCJbKl0/KEAg Pj0gJCJtaW4iICYmIEAgPD0gJCJtYXgiKSc6Ompzb25wYXRoLCAneyJtYXgiOiA0LCAibWluIjog Mn0nOjpqc29uYiwgZmFsc2UpLCAnMjEnOjpvaWQpKTo6c21hbGxpbnQKKyAgIC0+ICBQcm9qZWN0 U2V0CisgICAgICAgICBPdXRwdXQ6IGpzb25iX3BhdGhfcXVlcnkodGVzdF9qc29uLCAnJC4iZmll bGQ4IlsqXT8oQCA+PSAkIm1pbiIgJiYgQCA8PSAkIm1heCIpJzo6anNvbnBhdGgsICd7Im1heCI6 IDQsICJtaW4iOiAyfSc6Ompzb25iLCBmYWxzZSksIGpzb25iX3BhdGhfcXVlcnlfc3RhcnQoKHRl c3RfanNvbik6OmludGVybmFsKDApLCAnJC4iZmllbGQ4IlsqXT8oQCA+PSAkIm1pbiIgJiYgQCA8 PSAkIm1heCIpJzo6anNvbnBhdGgsICd7Im1heCI6IDQsICJtaW4iOiAyfSc6Ompzb25iLCBmYWxz ZSksIHRlc3RfanNvbgorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBnX3RlbXAudGVzdF9qc29u YgorICAgICAgICAgICAgICAgT3V0cHV0OiBqc29uX3R5cGUsIHRlc3RfanNvbgorICAgICAgICAg ICAgICAgRmlsdGVyOiAodGVzdF9qc29uYi5qc29uX3R5cGUgPSAnb2JqZWN0Jzo6dGV4dCkKKyg3 IHJvd3MpCisKK1NFTEVDVAoranNvbmJfcGF0aF9xdWVyeSh0ZXN0X2pzb24sJyQuZmllbGQ4Wypd ID8gKEAgPj0gJG1pbiAmJiBAIDw9ICRtYXgpJywgJ3sibWluIjoyLCAibWF4Ijo0fScpLAoranNv bmJfcGF0aF9xdWVyeV9maXJzdCh0ZXN0X2pzb24sICckLmZpZWxkOFsqXSA/IChAID49ICRtaW4g JiYgQCA8PSAkbWF4KScsICd7Im1pbiI6MiwgIm1heCI6NH0nKSwKK2pzb25iX3BhdGhfcXVlcnko dGVzdF9qc29uLCckLmZpZWxkOFsqXSA/IChAID49ICRtaW4gJiYgQCA8PSAkbWF4KScsICd7Im1p biI6MiwgIm1heCI6NH0nKTo6aW50MiwKK2pzb25iX3BhdGhfcXVlcnlfZmlyc3QodGVzdF9qc29u LCAnJC5maWVsZDhbKl0gPyAoQCA+PSAkbWluICYmIEAgPD0gJG1heCknLCAneyJtaW4iOjIsICJt YXgiOjR9Jyk6OmludDIKK0ZST00gdGVzdF9qc29uYgorV0hFUkUganNvbl90eXBlID0gJ29iamVj dCc7CisganNvbmJfcGF0aF9xdWVyeSB8IGpzb25iX3BhdGhfcXVlcnlfZmlyc3QgfCBqc29uYl9w YXRoX3F1ZXJ5IHwganNvbmJfcGF0aF9xdWVyeV9maXJzdCAKKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIDIgICAgICAgICAgICAgICAgfCAyICAgICAgICAgICAgICAgICAgICAgIHwg ICAgICAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAgICAgICAgIDIKKyAzICAgICAgICAgICAg ICAgIHwgMiAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIDMgfCAgICAgICAg ICAgICAgICAgICAgICAyCisgNCAgICAgICAgICAgICAgICB8IDIgICAgICAgICAgICAgICAgICAg ICAgfCAgICAgICAgICAgICAgICA0IHwgICAgICAgICAgICAgICAgICAgICAgMgorKDMgcm93cykK KworRVhQTEFJTiAoQ09TVFMgT0ZGLCBWRVJCT1NFKQorU0VMRUNUICh0ZXN0X2pzb24gIz4gJ3t9 Jyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXJpbnQn OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNvbmIKKyAgIE91 dHB1dDoganNvbmJfZmluaXNoX251bWVyaWMoanNvbmJfZXh0cmFjdF9wYXRoX3N0YXJ0KCh0ZXN0 X2pzb24pOjppbnRlcm5hbCgwKSwgVkFSSUFESUMgJ3t9Jzo6dGV4dFtdKSwgJzE3MDAnOjpvaWQp CisgICBGaWx0ZXI6ICh0ZXN0X2pzb25iLmpzb25fdHlwZSA9ICdzY2FsYXJpbnQnOjp0ZXh0KQor KDMgcm93cykKKworU0VMRUNUICh0ZXN0X2pzb24gIz4gJ3t9Jyk6Om51bWVyaWMgRlJPTSB0ZXN0 X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXJpbnQnOworIG51bWVyaWMgCistLS0tLS0t LS0KKyAgICAgICAyCisoMSByb3cpCisKKy0tIGxldCByYWlzZSBzb21lIGVycm9ycy4KK0VYUExB SU4gKENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6 aW50NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNvbmIKKyAgIE91dHB1dDog KGpzb25iX2ZpbmlzaF9udW1lcmljKGpzb25iX29iamVjdF9maWVsZF9zdGFydCgodGVzdF9qc29u KTo6aW50ZXJuYWwoMCksICdmaWVsZDEnOjp0ZXh0KSwgJzIzJzo6b2lkKSk6OmludGVnZXIKKyAg IEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90eXBlID0gJ29iamVjdCc6OnRleHQpCisoMyByb3dz KQorCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQxJyk6OmludDQgRlJPTSB0ZXN0X2pzb25i IFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBz dHJpbmcgdG8gdHlwZSBpbnRlZ2VyCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmllbGQxJyk6OmJv b2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworRVJST1I6ICBj YW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBib29sZWFuCitccHNldCBudWxsICcnCiBT RUxFQ1QgdGVzdF9qc29uIC0+ICd4JyBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0g J3NjYWxhcic7CiAgP2NvbHVtbj8gCiAtLS0tLS0tLS0tCkBAIC01ODYsNyArNjkyLDkgQEAgU0VM RUNUIGpzb25iX29iamVjdF9rZXlzKHRlc3RfanNvbikgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpz b25fdHlwZSA9ICdvYmplY3QnOwogIGZpZWxkNAogIGZpZWxkNQogIGZpZWxkNgotKDYgcm93cykK KyBmaWVsZDcKKyBmaWVsZDgKKyg4IHJvd3MpCiAKIC0tIG51bGxzCiBTRUxFQ1QgKHRlc3RfanNv bi0+J2ZpZWxkMycpIElTIE5VTEwgQVMgZXhwZWN0X2ZhbHNlIEZST00gdGVzdF9qc29uYiBXSEVS RSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2pzb25iLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbAppbmRleCBlNGI3Y2Rm NzAzZC4uNTAwZDA0OTM2ZDkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25i LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwKQEAgLTE1NCw4ICsxNTQs NzIgQEAgQ1JFQVRFIFRFTVAgVEFCTEUgdGVzdF9qc29uYiAoCiAKIElOU0VSVCBJTlRPIHRlc3Rf anNvbmIgVkFMVUVTCiAoJ3NjYWxhcicsJyJhIHNjYWxhciInKSwKKygnc2NhbGFyaW50JywnMicp LAogKCdhcnJheScsJ1siemVybyIsICJvbmUiLCJ0d28iLG51bGwsImZvdXIiLCJmaXZlIiwgWzEs MiwzXSx7ImYxIjo5fV0nKSwKLSgnb2JqZWN0JywneyJmaWVsZDEiOiJ2YWwxIiwiZmllbGQyIjoi dmFsMiIsImZpZWxkMyI6bnVsbCwgImZpZWxkNCI6IDQsICJmaWVsZDUiOiBbMSwyLDNdLCAiZmll bGQ2IjogeyJmMSI6OX19Jyk7CisoJ29iamVjdCcsJ3siZmllbGQxIjoidmFsMSIsImZpZWxkMiI6 InZhbDIiLCJmaWVsZDMiOm51bGwsICJmaWVsZDQiOiA0LCAiZmllbGQ1IjogWzEsMiwzXSwgImZp ZWxkNiI6IHsiZjEiOjl9LCAiZmllbGQ3IjogdHJ1ZSwgImZpZWxkOCI6IFsxLDIsMyw0LDVdfScp OworCitccHNldCBudWxsIE5VTEwKK0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVD VAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6Om51bWVyaWMsCisodGVzdF9qc29uIC0+ICdmaWVs ZDQnKTo6aW50MiwKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ0LAorKHRlc3RfanNvbiAt PiAnZmllbGQ0Jyk6OmludDgsCisodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6ZmxvYXQ0LAorKHRl c3RfanNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0OCwKKyh0ZXN0X2pzb24tPidmaWVsZDUnIC0+IDAp OjpudW1lcmljLAorKHRlc3RfanNvbi0+J2ZpZWxkNScgLT4gMTApOjpudW1lcmljLAorKHRlc3Rf anNvbiM+J3siZmllbGQ2IiwgImYxIn0nKTo6bnVtZXJpYywKKyh0ZXN0X2pzb24jPid7ImZpZWxk NiIsICJmMiJ9Jyk6Om51bWVyaWMsCisodGVzdF9qc29uIz4neyJmaWVsZDcifScpOjpib29sCitG Uk9NIHRlc3RfanNvbmIKK1dIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworCitTRUxFQ1QKKyh0 ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpudW1lcmljLAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6 OmludDIsCisodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6aW50NCwKKyh0ZXN0X2pzb24gLT4gJ2Zp ZWxkNCcpOjppbnQ4LAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0NCwKKyh0ZXN0X2pz b24gLT4gJ2ZpZWxkNCcpOjpmbG9hdDgsCisodGVzdF9qc29uIC0+ICdmaWVsZDUnIC0+IDApOjpu dW1lcmljLAorKHRlc3RfanNvbiAtPiAnZmllbGQ1JyAtPiAxMCk6Om51bWVyaWMsCisodGVzdF9q c29uICM+ICd7ImZpZWxkNiIsICJmMSJ9Jyk6Om51bWVyaWMsCisodGVzdF9qc29uICM+ICd7ImZp ZWxkNiIsICJmMiJ9Jyk6Om51bWVyaWMsCisodGVzdF9qc29uIz4neyJmaWVsZDcifScpOjpib29s CitGUk9NIHRlc3RfanNvbmIKK1dIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworCitFWFBMQUlO IChDT1NUUyBPRkYsIFZFUkJPU0UpCitTRUxFQ1QKK2pzb25iX3BhdGhfcXVlcnkodGVzdF9qc29u LCckLmZpZWxkOFsqXSA/IChAID49ICRtaW4gJiYgQCA8PSAkbWF4KScsICd7Im1pbiI6MiwgIm1h eCI6NH0nKSwKK2pzb25iX3BhdGhfcXVlcnlfZmlyc3QodGVzdF9qc29uLCAnJC5maWVsZDhbKl0g PyAoQCA+PSAkbWluICYmIEAgPD0gJG1heCknLCAneyJtaW4iOjIsICJtYXgiOjR9JyksCitqc29u Yl9wYXRoX3F1ZXJ5KHRlc3RfanNvbiwnJC5maWVsZDhbKl0gPyAoQCA+PSAkbWluICYmIEAgPD0g JG1heCknLCAneyJtaW4iOjIsICJtYXgiOjR9Jyk6OmludDIsCitqc29uYl9wYXRoX3F1ZXJ5X2Zp cnN0KHRlc3RfanNvbiwgJyQuZmllbGQ4WypdID8gKEAgPj0gJG1pbiAmJiBAIDw9ICRtYXgpJywg J3sibWluIjoyLCAibWF4Ijo0fScpOjppbnQyCitGUk9NIHRlc3RfanNvbmIKK1dIRVJFIGpzb25f dHlwZSA9ICdvYmplY3QnOworCitTRUxFQ1QKK2pzb25iX3BhdGhfcXVlcnkodGVzdF9qc29uLCck LmZpZWxkOFsqXSA/IChAID49ICRtaW4gJiYgQCA8PSAkbWF4KScsICd7Im1pbiI6MiwgIm1heCI6 NH0nKSwKK2pzb25iX3BhdGhfcXVlcnlfZmlyc3QodGVzdF9qc29uLCAnJC5maWVsZDhbKl0gPyAo QCA+PSAkbWluICYmIEAgPD0gJG1heCknLCAneyJtaW4iOjIsICJtYXgiOjR9JyksCitqc29uYl9w YXRoX3F1ZXJ5KHRlc3RfanNvbiwnJC5maWVsZDhbKl0gPyAoQCA+PSAkbWluICYmIEAgPD0gJG1h eCknLCAneyJtaW4iOjIsICJtYXgiOjR9Jyk6OmludDIsCitqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0 KHRlc3RfanNvbiwgJyQuZmllbGQ4WypdID8gKEAgPj0gJG1pbiAmJiBAIDw9ICRtYXgpJywgJ3si bWluIjoyLCAibWF4Ijo0fScpOjppbnQyCitGUk9NIHRlc3RfanNvbmIKK1dIRVJFIGpzb25fdHlw ZSA9ICdvYmplY3QnOworCisKK0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVCAo dGVzdF9qc29uICM+ICd7fScpOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnc2NhbGFyaW50JzsKK1NFTEVDVCAodGVzdF9qc29uICM+ICd7fScpOjpudW1lcmljIEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyaW50JzsKKworLS0gbGV0IHJh aXNlIHNvbWUgZXJyb3JzLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBWRVJCT1NFKQorU0VMRUNUICh0 ZXN0X2pzb24gLT4gJ2ZpZWxkMScpOjppbnQ0IEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5 cGUgPSAnb2JqZWN0JzsKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6aW50NCBGUk9N IHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisKK1NFTEVDVCAodGVzdF9q c29uIC0+ICdmaWVsZDEnKTo6Ym9vbCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0g J29iamVjdCc7CisKK1xwc2V0IG51bGwgJycKIAogU0VMRUNUIHRlc3RfanNvbiAtPiAneCcgRlJP TSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXInOwogU0VMRUNUIHRlc3RfanNv biAtPiAneCcgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdhcnJheSc7Ci0tIAoy LjIxLjAKCg== --000000000000ea6d7e0604896b2a--