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 1qgy1a-000Qgq-Kr for pgsql-hackers@arkaria.postgresql.org; Fri, 15 Sep 2023 01:53:39 +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 1qgy1Y-00CBmT-Ox for pgsql-hackers@arkaria.postgresql.org; Fri, 15 Sep 2023 01:53:36 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qgy1X-00CBlv-SJ for pgsql-hackers@lists.postgresql.org; Fri, 15 Sep 2023 01:53:36 +0000 Received: from mail-oa1-x2a.google.com ([2001:4860:4864:20::2a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qgy1V-004cZ6-0o for pgsql-hackers@postgresql.org; Fri, 15 Sep 2023 01:53:34 +0000 Received: by mail-oa1-x2a.google.com with SMTP id 586e51a60fabf-1c4cf775a14so882371fac.3 for ; Thu, 14 Sep 2023 18:53:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1694742812; x=1695347612; 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=7yFksWCaeyt/iQrVqmU5JFv+HicuXBEbi9ohQkzANG0=; b=QOtDlxPL1TeQt/H4oX+mot8QxYqsPI2Pd6r8G1qrxkxwYmVVRW8XEutJeFMXy/gZ0s t8BxyHzVoZWcEqJAPaBnMSfu3AdFkTorITmoOb+ahpaLvqFCJbQ/uOY+mDbCwfSQtyx9 LIZIMv+ewuRntoQM6wOpyhKY+ky3sDGD7oHmyh21tmLgki5xxSDYrquSLkZliPMVOHQK UVjVn73Yv05oW+IMp0XMQGIxt6MghfDtvHODt+I/d2itOOV8NII/CPm4f9UUmu3EgDwe ImZai9h7DJV2kpdgl+BImZP5l0IqMf+xCTD3a9gopQuGIW8f5PSFyvD7QHWMarhYJd3d B2MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694742812; x=1695347612; 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=7yFksWCaeyt/iQrVqmU5JFv+HicuXBEbi9ohQkzANG0=; b=t5/j7e0DBLm8x5FKW5xtT2dV36kD0A4zZbYoboBrn7HkTnFrdxbPoteYeWdXs6+aGn I+gXRNYxKBJTAjcyeBn/2Qp2V/GIl+oFnpv+xhW4lKgCcWGVOznyPiBQgK3h2W5GQnBk 1oKPYkA3fcUZfACDUoGfampn8HOCETLRMhLWVDdLnSdS80secKS03afq8t0ymyyfbBLE /95oQjO8Np/euu3uPcAulZvWV7lP7HcYidY/19/aYEUV/powuy93SiQ6cB6GrqOhrjqx BcpcorTJPuqkMzAUN4gLdSOFZ0+DOyE9yTr6exx9Tx0r/FD46ay1ftYAV8Gbu0sVvYNU gVSg== X-Gm-Message-State: AOJu0YzBQu2rJGlEt4a3xFmzk14FuoOv887vtL6NKB4jV+KZBmJA4bVc 3eq6NxArKw3idN0sT64d0pzJgVWF93muzAlhrhU= X-Google-Smtp-Source: AGHT+IH+sKKycCVNthI038OkZkiX4xX7NJ6pSy7U47mUgwNo3g2xjmuPNV6ZNtqx5XSWfveMhJLuCLoJr3NhnFKiiZo= X-Received: by 2002:a05:6870:968f:b0:1b7:670e:ad7a with SMTP id o15-20020a056870968f00b001b7670ead7amr421470oaq.43.1694742812319; Thu, 14 Sep 2023 18:53:32 -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> <43a988594ac91a63dc4bb49a94303a42@anastigmatix.net> In-Reply-To: From: Andy Fan Date: Fri, 15 Sep 2023 09:53:20 +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="000000000000517d2106055c0fbc" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000517d2106055c0fbc Content-Type: multipart/alternative; boundary="000000000000517d1f06055c0fba" --000000000000517d1f06055c0fba Content-Type: text/plain; charset="UTF-8" > Is there a reason not to transform the _tz flavors of >> jsonb_path_query and jsonb_path-query_first? >> > > I misunderstood the _tz flavors return timestamp, after some deep > reading of these functions, they just work at the comparisons part. > so I will add them in the following version. > _tz favors did return timestamp.. the reason is stated in the commit messge of patch 2. try to apply jsonb extraction optimization to _tz functions. both jsonb_path_query_tz and jsonb_path_query_tz_first returns the elements which are timestamp comparable, but such elements are impossible to be cast to numeric or boolean IIUC. Just provides this commit for communication purpose only. so v14 is attached, changes include: 1. Change the typmod for internal type from 0 to -1. 2. return NULL for non-simplify expressions from the planner support function, hence shallow copy is removed as well. Things are not addressed yet: 1. the error message handling. 2. if we have chances to optimize _tz functions, I guess no. 3. function naming issue. I think I can get it modified once after all the other issues are addressed. -- Best Regards Andy Fan --000000000000517d1f06055c0fba Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Is there a reason not to transform the _tz flavors of
jsonb_path_query and jsonb_path-query_first?

I misunderstood the _tz flavors return timestamp,=C2=A0 after some de= ep
reading of these functions, they just work at the=C2=A0compari= sons part.
so I will add them in the following version.=C2=A0=C2= =A0

_tz favors did return= timestamp..=C2=A0 the reason is stated in the commit
=C2=A0messg= e of patch 2.=C2=A0

try to apply jsonb extraction optim= ization to =C2=A0_tz functions.

both jsonb_path_query_tz and jsonb_p= ath_query_tz_first returns
the elements which are timestamp comparable, = but such elements
are impossible to be cast= to numeric or boolean IIUC. Just provides
this commit for communic= ation purpose only.=C2=A0

so v14 is attached, cha= nges include:
1. Change=C2=A0the typmod for internal type from 0 t= o -1.
2. return NULL for non-simplify expressions from the planne= r=C2=A0
support function, hence shallow copy is removed as well.<= /div>

Things are not addressed yet:
1.=C2=A0 t= he error message handling.=C2=A0
2.=C2=A0 if we have chances to o= ptimize _tz functions, I guess no.
3.=C2=A0 function naming issue= . I think I can get it modified once after
all the other issues a= re addressed.=C2=A0

--
Best Regards
Andy Fan
--000000000000517d1f06055c0fba-- --000000000000517d2106055c0fbc Content-Type: application/octet-stream; name="v14-0002-try-to-apply-jsonb-extraction-optimization-to-_t.patch" Content-Disposition: attachment; filename="v14-0002-try-to-apply-jsonb-extraction-optimization-to-_t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lmjy35jd0 RnJvbSAyOWEyY2E1MDg1NDE2MjhkZjllOTAyYmU2MGIzZWMxZWE4MTQyNGNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IEZhbiA8emhpaHVpLmZhbjEyMTNAZ21haWwuY29tPgpE YXRlOiBGcmksIDE1IFNlcCAyMDIzIDA5OjM3OjMyICswODAwClN1YmplY3Q6IFtQQVRDSCB2MTQg Mi8yXSB0cnkgdG8gYXBwbHkganNvbmIgZXh0cmFjdGlvbiBvcHRpbWl6YXRpb24gdG8gIF90egog ZnVuY3Rpb25zLgoKYm90aCBqc29uYl9wYXRoX3F1ZXJ5X3R6IGFuZCBqc29uYl9wYXRoX3F1ZXJ5 X3R6X2ZpcnN0IHJldHVybnMKdGhlIGVsZW1lbnQgd2hpY2ggaXMgdGltZXN0YW1wIGNvbXBhcmFi bGUsIGJ1dCBzdWNoIGVsZW1lbnQgaXMKaW1wb3NzaWJsZSB0byBiZSBjYXN0IHRvIG51bWVyaWMg b3IgYm9vbGVhbiBJSVVDLiBKdXN0IHByb3ZpZGVzCnRoaXMgY29tbWl0IGZvciBjb21tdW5pY2F0 aW9uIHB1cnBvc2Ugb25seS4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyAgICAg ICAgIHwgIDggKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMg fCAxMiArKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAg fCAgOCArKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAxIGRlbGV0 aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvanNvbmIuYwppbmRleCBlMmVmYjI4YTY4NS4uYWFkM2I3ZjU0MmYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9qc29uYi5jCkBAIC0yMDg5LDcgKzIwODksNiBAQCBqc29uYl9jYXN0X3N1 cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKIAkJCS8qIG5vdCB0aGUgZGVzaXJlZCBwYXR0ZXJuLiAq LwogCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7CiAKLQogCQlzd2l0Y2ggKGlucHV0X2Z1bmNf aWQpCiAJCXsKIAkJCWNhc2UgRl9KU09OQl9PQkpFQ1RfRklFTEQ6CkBAIC0yMTA2LDkgKzIxMDUs MTYgQEAganNvbmJfY2FzdF9zdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJbmV3X2Z1bmNf aWQgPSBGX0pTT05CX1BBVEhfUVVFUllfU1RBUlQ7CiAJCQkJcmV0c2V0ID0gdHJ1ZTsKIAkJCQli cmVhazsKKwkJCWNhc2UgRl9KU09OQl9QQVRIX1FVRVJZX1RaOgorCQkJCW5ld19mdW5jX2lkID0g IEZfSlNPTkJfUEFUSF9RVUVSWV9UWl9TVEFSVDsKKwkJCQlyZXRzZXQgPSB0cnVlOworCQkJCWJy ZWFrOwogCQkJY2FzZSBGX0pTT05CX1BBVEhfUVVFUllfRklSU1Q6CiAJCQkJbmV3X2Z1bmNfaWQg PSBGX0pTT05CX1BBVEhfUVVFUllfRklSU1RfU1RBUlQ7CiAJCQkJYnJlYWs7CisJCQljYXNlIEZf SlNPTkJfUEFUSF9RVUVSWV9GSVJTVF9UWjoKKwkJCQluZXdfZnVuY19pZCA9IEZfSlNPTkJfUEFU SF9RVUVSWV9GSVJTVF9UWl9TVEFSVDsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJbmV3 X2Z1bmNfaWQgPSBJbnZhbGlkT2lkOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u cGF0aF9leGVjLmMKaW5kZXggNWVlZjE0ZjkzZWQuLjliNzEwODQxOGJlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKQEAgLTQ1Niw2ICs0NTYsMTIgQEAganNvbmJfcGF0aF9x dWVyeV9zdGFydChQR19GVU5DVElPTl9BUkdTKQogCXJldHVybiBqc29uYl9wYXRoX3F1ZXJ5X2lu dGVybmFsKGZjaW5mbywgZmFsc2UsIEpzb25iVmFsdWVfQXNKc29uYlZhbHVlKTsKIH0KIAorRGF0 dW0KK2pzb25iX3BhdGhfcXVlcnlfdHpfc3RhcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlyZXR1 cm4ganNvbmJfcGF0aF9xdWVyeV9pbnRlcm5hbChmY2luZm8sIHRydWUsIEpzb25iVmFsdWVfQXNK c29uYlZhbHVlKTsKK30KKwogLyoKICAqIGpzb25iX3BhdGhfcXVlcnlfYXJyYXkKICAqCQlFeGVj dXRlcyBqc29ucGF0aCBmb3IgZ2l2ZW4ganNvbmIgZG9jdW1lbnQgYW5kIHJldHVybnMgcmVzdWx0 IGFzCkBAIC01MzAsNiArNTM2LDEyIEBAIGpzb25iX3BhdGhfcXVlcnlfZmlyc3Rfc3RhcnQoUEdf RlVOQ1RJT05fQVJHUykKIAlyZXR1cm4ganNvbmJfcGF0aF9xdWVyeV9maXJzdF9pbnRlcm5hbChm Y2luZm8sIGZhbHNlLCBKc29uYlZhbHVlX0FzSnNvbmJWYWx1ZSk7CiB9CiAKK0RhdHVtCitqc29u Yl9wYXRoX3F1ZXJ5X2ZpcnN0X3R6X3N0YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJcmV0dXJu IGpzb25iX3BhdGhfcXVlcnlfZmlyc3RfaW50ZXJuYWwoZmNpbmZvLCB0cnVlLCBKc29uYlZhbHVl X0FzSnNvbmJWYWx1ZSk7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKkV4ZWN1dGUgZnVuY3Rp b25zIGZvciBKc29uUGF0aCoqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKaW5kZXggZWY3MTlhYWM2YmIuLjdlNzZkNjExYzA2IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKQEAgLTEwMTY3LDYgKzEwMTY3LDEwIEBACiAgIHByb25hbWUgPT4gJ2pz b25iX3BhdGhfcXVlcnlfc3RhcnQnLCBwcm9yb3dzID0+ICcxMDAwJywgcHJvcmV0c2V0ID0+ICd0 JywKICAgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLCBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwg anNvbnBhdGgganNvbmIgYm9vbCcsCiAgIHByb3NyYyA9PiAnanNvbmJfcGF0aF9xdWVyeV9zdGFy dCcgfSwKK3sgb2lkID0+ICc0NTU2JywgZGVzY3IgPT4gJ2pzb25wYXRoIHF1ZXJ5IHR6IGFzIGpz b25idmFsdWUnLAorICBwcm9uYW1lID0+ICdqc29uYl9wYXRoX3F1ZXJ5X3R6X3N0YXJ0JywgcHJv cm93cyA9PiAnMTAwMCcsIHByb3JldHNldCA9PiAndCcsCisgIHByb3JldHR5cGUgPT4gJ2ludGVy bmFsJywgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsIGpzb25wYXRoIGpzb25iIGJvb2wnLAorICBw cm9zcmMgPT4gJ2pzb25iX3BhdGhfcXVlcnlfdHpfc3RhcnQnIH0sCiB7IG9pZCA9PiAnNDAwNycs IGRlc2NyID0+ICdqc29ucGF0aCBxdWVyeSB3cmFwcGVkIGludG8gYXJyYXknLAogICBwcm9uYW1l ID0+ICdqc29uYl9wYXRoX3F1ZXJ5X2FycmF5JywgcHJvcmV0dHlwZSA9PiAnanNvbmInLAogICBw cm9hcmd0eXBlcyA9PiAnanNvbmIganNvbnBhdGgganNvbmIgYm9vbCcsCkBAIC0xMDE3OSw2ICsx MDE4MywxMCBAQAogICBwcm9uYW1lID0+ICdqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0X3N0YXJ0Jywg cHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAogICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwganNv bnBhdGgganNvbmIgYm9vbCcsCiAgIHByb3NyYyA9PiAnanNvbmJfcGF0aF9xdWVyeV9maXJzdF9z dGFydCcgfSwKK3sgb2lkID0+ICc0NTUxJywgZGVzY3IgPT4gJ2pzb25wYXRoIHF1ZXJ5IHR6IGZp cnN0IGl0ZW0gYXMganNvbmJ2YWx1ZScsCisgIHByb25hbWUgPT4gJ2pzb25iX3BhdGhfcXVlcnlf Zmlyc3RfdHpfc3RhcnQnLCBwcm9yZXR0eXBlID0+ICdpbnRlcm5hbCcsCisgIHByb2FyZ3R5cGVz ID0+ICdpbnRlcm5hbCBqc29ucGF0aCBqc29uYiBib29sJywKKyAgcHJvc3JjID0+ICdqc29uYl9w YXRoX3F1ZXJ5X2ZpcnN0X3R6X3N0YXJ0J30sCiB7IG9pZCA9PiAnNDAwOScsIGRlc2NyID0+ICdq c29ucGF0aCBtYXRjaCcsCiAgIHByb25hbWUgPT4gJ2pzb25iX3BhdGhfbWF0Y2gnLCBwcm9yZXR0 eXBlID0+ICdib29sJywKICAgcHJvYXJndHlwZXMgPT4gJ2pzb25iIGpzb25wYXRoIGpzb25iIGJv b2wnLCBwcm9zcmMgPT4gJ2pzb25iX3BhdGhfbWF0Y2gnIH0sCi0tIAoyLjIxLjAKCg== --000000000000517d2106055c0fbc Content-Type: application/octet-stream; name="v14-0001-optimize-casting-jsonb-to-a-given-type.patch" Content-Disposition: attachment; filename="v14-0001-optimize-casting-jsonb-to-a-given-type.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lmjy35jq1 RnJvbSBmZjU4ZDU0Y2E1MmQ4N2EyNTk0NzkzYzdhOTA0ZmE5OTgyYzk1Mzc0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IEZhbiA8emhpaHVpLmZhbjEyMTNAZ21haWwuY29tPgpE YXRlOiBUaHUsIDE0IFNlcCAyMDIzIDE2OjU4OjEzICswODAwClN1YmplY3Q6IFtQQVRDSCB2MTQg MS8yXSBvcHRpbWl6ZSBjYXN0aW5nIGpzb25iIHRvIGEgZ2l2ZW4gdHlwZS4KClByZXZpb3VzbHkg YWZ0ZXIgd2UgZ2V0IGEgSnNvbmJWYWx1ZSwgd2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvCkpzb25i IGZpcnN0IHRoZW4gY2FzdCB0aGUgSnNvbmIgdG8gdGhlIGdpdmVuIHR5cGUuIEluIHRoaXMgcGF0 Y2gsCndlIGNvdmVydCB0aGUgSnNvbmJWYWx1ZSB0byB0aGUgZGVzaXJlZCB0eXBlIGRpcmVjdGx5 LgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jICAgICAgICAgfCAxNTIgKysrKysr KysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYnN1YnMuYyAg ICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyAgICAgfCAxMjUg KysrKysrKysrKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhl Yy5jIHwgIDMxICsrKystLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmggICAgICB8 ICAgMyArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICB8ICA0NiArKysr KystLQogc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaCAgICAgICAgICAgICB8ICAxMSArLQogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYi5vdXQgICB8IDExMiArKysrKysrKysrKysrKysr KystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYi5zcWwgICAgICAgIHwgIDY2ICsrKysrKysr KystCiA5IGZpbGVzIGNoYW5nZWQsIDQ4NSBpbnNlcnRpb25zKCspLCA2NSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9qc29uYi5jCmluZGV4IDk3ODE4NTJiMGNiLi5lMmVmYjI4YTY4NSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2pzb25iLmMKQEAgLTE3LDExICsxNywxNSBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdf cHJvYy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImZ1bmNhcGku aCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9zdXBwb3J0 bm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29lcmNlLmgiCiAjaW5jbHVkZSAibGli cHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRl dGltZS5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvanNv bi5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmZ1bmNz LmgiCkBAIC0yMDM4LDYgKzIwNDIsMTU0IEBAIGNhbm5vdENhc3RKc29uYlZhbHVlKGVudW0gamJ2 VHlwZSB0eXBlLCBjb25zdCBjaGFyICpzcWx0eXBlKQogCWVsb2coRVJST1IsICJ1bmtub3duIGpz b25iIHR5cGU6ICVkIiwgKGludCkgdHlwZSk7CiB9CiAKKworLyoKKyAqIGpzb25iX2Nhc3Rfc3Vw cG9ydCgpCisgKgorICogUGxhbm5lciBzdXBwb3J0IGZ1bmN0aW9uIGZvciBjYXN0aW5nIGEganNv bmIgZXh0cmFjdGlvbiB0byBhIG51bWVyaWMKKyAqIG9yIGJvb2wgZGF0YSB0eXBlLiBJbnN0ZWFk IG9mIGNvbnZlcnRpbmcgYSBqc29uYnZhbHVlIHRvIGpzb25iLCB0aGUgbmV3CisgKiBtZXRob2Qg d2lsbCBjYXN0IHRoZSBqc29uYnZhbHVlIHRvIHRoZSBkZXNpcmVkIGRhdGEgdHlwZSBkaXJlY3Rs eS4KKyAqLworRGF0dW0KK2pzb25iX2Nhc3Rfc3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQorewor CU5vZGUJICAgKnJhd3JlcSA9IChOb2RlICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJaWYg KElzQShyYXdyZXEsIFN1cHBvcnRSZXF1ZXN0U2ltcGxpZnkpKQorCXsKKwkJU3VwcG9ydFJlcXVl c3RTaW1wbGlmeSAqcmVxID0gKFN1cHBvcnRSZXF1ZXN0U2ltcGxpZnkgKikgcmF3cmVxOworCQlG dW5jRXhwcgkqZmV4cHIgPSByZXEtPmZjYWxsOworCQlGdW5jRXhwcgkqanNvbmJfc3RhcnRfZnVu YyA9IE5VTEwsICpqc29uYl9maW5pc2hfZnVuYyA9IE5VTEwsICpmaW5hbF9mdW5jID0gTlVMTDsK KwkJTm9kZQkJKmlucHV0OworCQlPaWQJCQluZXdfZnVuY19pZCA9IEludmFsaWRPaWQ7CisJCUxp c3QJCSphcmdzOworCQlPaWQJCQlpbnB1dF9mdW5jX2lkLCBjb2xsaWQsIGlucHV0Y29sbGlkOwor CQlib29sCQlyZXRzZXQgPSBmYWxzZSwgIHZhcmlhZGljID0gZmFsc2U7CisKKwkJQXNzZXJ0KGxp c3RfbGVuZ3RoKGZleHByLT5hcmdzKSA9PSAxKTsKKwkJaW5wdXQgPSAoTm9kZSAqKSBsaW5pdGlh bChmZXhwci0+YXJncyk7CisKKwkJaWYgKElzQShpbnB1dCwgT3BFeHByKSkKKwkJeworCQkJT3BF eHByCSpvcEV4cHIgPSBjYXN0Tm9kZShPcEV4cHIsIGlucHV0KTsKKwkJCWlucHV0X2Z1bmNfaWQg PSBvcEV4cHItPm9wZnVuY2lkOworCQkJY29sbGlkID0gb3BFeHByLT5vcGNvbGxpZDsKKwkJCWlu cHV0Y29sbGlkID0gb3BFeHByLT5pbnB1dGNvbGxpZDsKKwkJCWFyZ3MgPSBvcEV4cHItPmFyZ3M7 CisJCX0KKwkJZWxzZSBpZiAoSXNBKGlucHV0LCBGdW5jRXhwcikpCisJCXsKKwkJCUZ1bmNFeHBy ICpmdW5jRXhwciA9IGNhc3ROb2RlKEZ1bmNFeHByLCBpbnB1dCk7CisJCQlpbnB1dF9mdW5jX2lk ID0gZnVuY0V4cHItPmZ1bmNpZDsKKwkJCWNvbGxpZCA9IGZ1bmNFeHByLT5mdW5jY29sbGlkOwor CQkJaW5wdXRjb2xsaWQgPSBmdW5jRXhwci0+aW5wdXRjb2xsaWQ7CisJCQlhcmdzID0gZnVuY0V4 cHItPmFyZ3M7CisJCX0KKwkJZWxzZQorCQkJLyogbm90IHRoZSBkZXNpcmVkIHBhdHRlcm4uICov CisJCQlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKKworCisJCXN3aXRjaCAoaW5wdXRfZnVuY19p ZCkKKwkJeworCQkJY2FzZSBGX0pTT05CX09CSkVDVF9GSUVMRDoKKwkJCQluZXdfZnVuY19pZCA9 IEZfSlNPTkJfT0JKRUNUX0ZJRUxEX1NUQVJUOworCQkJCWJyZWFrOworCQkJY2FzZSBGX0pTT05C X0FSUkFZX0VMRU1FTlQ6CisJCQkJbmV3X2Z1bmNfaWQgPSBGX0pTT05CX0FSUkFZX0VMRU1FTlRf U1RBUlQ7CisJCQkJYnJlYWs7CisJCQljYXNlIEZfSlNPTkJfRVhUUkFDVF9QQVRIOgorCQkJCW5l d19mdW5jX2lkID0gRl9KU09OQl9FWFRSQUNUX1BBVEhfU1RBUlQ7CisJCQkJdmFyaWFkaWMgPSB0 cnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBGX0pTT05CX1BBVEhfUVVFUlk6CisJCQkJbmV3X2Z1 bmNfaWQgPSBGX0pTT05CX1BBVEhfUVVFUllfU1RBUlQ7CisJCQkJcmV0c2V0ID0gdHJ1ZTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgRl9KU09OQl9QQVRIX1FVRVJZX0ZJUlNUOgorCQkJCW5ld19mdW5j X2lkID0gRl9KU09OQl9QQVRIX1FVRVJZX0ZJUlNUX1NUQVJUOworCQkJCWJyZWFrOworCQkJZGVm YXVsdDoKKwkJCQluZXdfZnVuY19pZCA9IEludmFsaWRPaWQ7CisJCQkJYnJlYWs7CisJCX0KKwor CQlpZiAoIU9pZElzVmFsaWQobmV3X2Z1bmNfaWQpKQorCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVM TCk7CisKKwkJanNvbmJfc3RhcnRfZnVuYyA9IG1ha2VGdW5jRXhwcihuZXdfZnVuY19pZCwgSU5U RVJOQUxPSUQsIGFyZ3MsCisJCQkJCQkJCQkJY29sbGlkLCBpbnB1dGNvbGxpZCwKKwkJCQkJCQkJ CQlDT0VSQ0VfRVhQTElDSVRfQ0FMTCk7CisJCWpzb25iX3N0YXJ0X2Z1bmMtPmZ1bmNyZXRzZXQg PSByZXRzZXQ7CisJCWpzb25iX3N0YXJ0X2Z1bmMtPmZ1bmN2YXJpYWRpYyA9IHZhcmlhZGljOwor CisJCS8qIHJlbGFiZWwgdGhlIGZpcnN0IGFyZ3VtZW50cyBhcyAnaW50ZXJuYWwnLiAqLworCQls aW5pdGlhbChqc29uYl9zdGFydF9mdW5jLT5hcmdzKSA9IG1ha2VSZWxhYmVsVHlwZShsaW5pdGlh bChqc29uYl9zdGFydF9mdW5jLT5hcmdzKSwKKwkJCQkJCQkJCQkJCQkJICAgSU5URVJOQUxPSUQs IC0xLAorCQkJCQkJCQkJCQkJCQkgICBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCQkJCQkgICBDT0VS Q0VfSU1QTElDSVRfQ0FTVCk7CisJCXN3aXRjaCAoZmV4cHItPmZ1bmNyZXN1bHR0eXBlKQorCQl7 CisJCQljYXNlIElOVDJPSUQ6CisJCQljYXNlIElOVDRPSUQ6CisJCQljYXNlIElOVDhPSUQ6CisJ CQljYXNlIEZMT0FUNE9JRDoKKwkJCWNhc2UgRkxPQVQ4T0lEOgorCQkJY2FzZSBOVU1FUklDT0lE OgorCQkJCWpzb25iX2ZpbmlzaF9mdW5jID0gbWFrZUZ1bmNFeHByKEZfSlNPTkJfRklOSVNIX05V TUVSSUMsIE5VTUVSSUNPSUQsCisJCQkJCQkJCQkJCQkgbGlzdF9tYWtlMihqc29uYl9zdGFydF9m dW5jLAorCQkJCQkJCQkJCQkJCQkJbWFrZUNvbnN0KE9JRE9JRCwKKwkJCQkJCQkJCQkJCQkJCQkJ ICAtMSwKKwkJCQkJCQkJCQkJCQkJCQkJICBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCQkJCQkJCQkg IHNpemVvZihPaWQpLAorCQkJCQkJCQkJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oZmV4cHIt PmZ1bmNyZXN1bHR0eXBlKSwKKwkJCQkJCQkJCQkJCQkJCQkJICBmYWxzZSwKKwkJCQkJCQkJCQkJ CQkJCQkJICB0cnVlKSksCisJCQkJCQkJCQkJCQkgY29sbGlkLCBpbnB1dGNvbGxpZCwgQ09FUkNF X0VYUExJQ0lUX0NBTEwpOworCisJCQkJaWYgKGZleHByLT5mdW5jcmVzdWx0dHlwZSAhPSBOVU1F UklDT0lEKQorCQkJCXsKKwkJCQkJZmluYWxfZnVuYyA9IChGdW5jRXhwciAqKWNvZXJjZV90eXBl KE5VTEwsIChOb2RlICopanNvbmJfZmluaXNoX2Z1bmMsIE5VTUVSSUNPSUQsCisJCQkJCQkJCQkJ CQkJCSBmZXhwci0+ZnVuY3Jlc3VsdHR5cGUsIDAsIENPRVJDSU9OX0VYUExJQ0lULAorCQkJCQkJ CQkJCQkJCQkgQ09FUkNFX0VYUExJQ0lUX0NBU1QsIGZleHByLT5sb2NhdGlvbik7CisJCQkJfQor CQkJCWVsc2UKKwkJCQkJZmluYWxfZnVuYyA9IGpzb25iX2ZpbmlzaF9mdW5jOworCisJCQkJUEdf UkVUVVJOX1BPSU5URVIoZmluYWxfZnVuYyk7CisJCQljYXNlIEJPT0xPSUQ6CisJCQkJZmluYWxf ZnVuYyA9IG1ha2VGdW5jRXhwcihGX0pTT05CX0ZJTklTSF9CT09MLCBCT09MT0lELAorCQkJCQkJ CQkJCSAgbGlzdF9tYWtlMShqc29uYl9zdGFydF9mdW5jKSwgY29sbGlkLAorCQkJCQkJCQkJCSAg aW5wdXRjb2xsaWQsIENPRVJDRV9FWFBMSUNJVF9DQUxMKTsKKwkJCQlQR19SRVRVUk5fUE9JTlRF UihmaW5hbF9mdW5jKTsKKwkJCWRlZmF1bHQ6CisJCQkJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7 CisJCX0KKwl9CisKKwlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKK30KKworCitEYXR1bQoranNv bmJfZmluaXNoX251bWVyaWMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlKc29uYlZhbHVlCSp2ID0g KEpzb25iVmFsdWUgKilQR19HRVRBUkdfUE9JTlRFUigwKTsKKwlPaWQJCQlmaW5hbF9vaWQgPSBQ R19HRVRBUkdfT0lEKDEpOworCWlmICh2LT50eXBlICE9IGpidk51bWVyaWMpCisJCWNhbm5vdENh c3RKc29uYlZhbHVlKHYtPnR5cGUsIGZvcm1hdF90eXBlX2JlKGZpbmFsX29pZCkpOworCVBHX1JF VFVSTl9OVU1FUklDKHYtPnZhbC5udW1lcmljKTsKK30KKworRGF0dW0KK2pzb25iX2ZpbmlzaF9i b29sKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJSnNvbmJWYWx1ZQkqdiA9IChKc29uYlZhbHVlICop UEdfR0VUQVJHX1BPSU5URVIoMCk7CisJaWYgKHYtPnR5cGUgIT0gamJ2Qm9vbCkKKwkJY2Fubm90 Q2FzdEpzb25iVmFsdWUodi0+dHlwZSwgImJvb2xlYW4iKTsKKwlQR19SRVRVUk5fQk9PTCh2LT52 YWwuYm9vbGVhbik7Cit9CisKIERhdHVtCiBqc29uYl9ib29sKFBHX0ZVTkNUSU9OX0FSR1MpCiB7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJzdWJzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbmJzdWJzLmMKaW5kZXggZGUwYWUzNjA0ZmYuLmNiMDUwYzY1ZWY3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJzdWJzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2pzb25ic3Vicy5jCkBAIC0yNTEsNyArMjUxLDcgQEAganNvbmJf c3Vic2NyaXB0X2ZldGNoKEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJCQkJCQkgIHdvcmtzcGFjZS0+ aW5kZXgsCiAJCQkJCQkJCQkgIHNic3JlZnN0YXRlLT5udW11cHBlciwKIAkJCQkJCQkJCSAgb3At PnJlc251bGwsCi0JCQkJCQkJCQkgIGZhbHNlKTsKKwkJCQkJCQkJCSAgSnNvbmJWYWx1ZV9Bc0pz b25iKTsKIH0KIAogLyoKQEAgLTM0Myw3ICszNDMsNyBAQCBqc29uYl9zdWJzY3JpcHRfZmV0Y2hf b2xkKEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJCQkJCQkJCQkgICBzYnNyZWZzdGF0ZS0+dXBwZXJp bmRleCwKIAkJCQkJCQkJCQkJCSAgIHNic3JlZnN0YXRlLT5udW11cHBlciwKIAkJCQkJCQkJCQkJ CSAgICZzYnNyZWZzdGF0ZS0+cHJldm51bGwsCi0JCQkJCQkJCQkJCQkgICBmYWxzZSk7CisJCQkJ CQkJCQkJCQkgICBKc29uYlZhbHVlX0FzSnNvbmIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pz b25mdW5jcy5jCmluZGV4IGE0YmZhNWU0MDQwLi5lZGVkOGU0ZjMyYiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29uZnVuY3MuYwpAQCAtMzU3LDcgKzM1Nyw3IEBAIHN0YXRpYyBKc29uUGFyc2VFcnJvclR5 cGUgZ2V0X3NjYWxhcih2b2lkICpzdGF0ZSwgY2hhciAqdG9rZW4sIEpzb25Ub2tlblR5cGUgdG9r CiBzdGF0aWMgRGF0dW0gZ2V0X3BhdGhfYWxsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29s IGFzX3RleHQpOwogc3RhdGljIHRleHQgKmdldF93b3JrZXIodGV4dCAqanNvbiwgY2hhciAqKnRw YXRoLCBpbnQgKmlwYXRoLCBpbnQgbnBhdGgsCiAJCQkJCQlib29sIG5vcm1hbGl6ZV9yZXN1bHRz KTsKLXN0YXRpYyBEYXR1bSBnZXRfanNvbmJfcGF0aF9hbGwoRnVuY3Rpb25DYWxsSW5mbyBmY2lu Zm8sIGJvb2wgYXNfdGV4dCk7CitzdGF0aWMgRGF0dW0gZ2V0X2pzb25iX3BhdGhfYWxsKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvLCBKc29uYlZhbHVlVGFyZ2V0IHRhcmdldCk7CiBzdGF0aWMgdGV4 dCAqSnNvbmJWYWx1ZUFzVGV4dChKc29uYlZhbHVlICp2KTsKIAogLyogc2VtYW50aWMgYWN0aW9u IGZ1bmN0aW9ucyBmb3IganNvbl9hcnJheV9sZW5ndGggKi8KQEAgLTQ5Miw2ICs0OTIsMjAgQEAg c3RhdGljIEpzb25QYXJzZUVycm9yVHlwZSB0cmFuc2Zvcm1fc3RyaW5nX3ZhbHVlc19vYmplY3Rf ZmllbGRfc3RhcnQodm9pZCAqc3RhdGUKIHN0YXRpYyBKc29uUGFyc2VFcnJvclR5cGUgdHJhbnNm b3JtX3N0cmluZ192YWx1ZXNfYXJyYXlfZWxlbWVudF9zdGFydCh2b2lkICpzdGF0ZSwgYm9vbCBp c251bGwpOwogc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZSB0cmFuc2Zvcm1fc3RyaW5nX3ZhbHVl c19zY2FsYXIodm9pZCAqc3RhdGUsIGNoYXIgKnRva2VuLCBKc29uVG9rZW5UeXBlIHRva2VudHlw ZSk7CiAKK0RhdHVtCitqc29uYnZhbHVlX2NvdmVydChKc29uYlZhbHVlICpqYnYsIEpzb25iVmFs dWVUYXJnZXQgdGFyZ2V0KQoreworCXN3aXRjaCAodGFyZ2V0KQorCXsKKwkJY2FzZSBKc29uYlZh bHVlX0FzSnNvbmJWYWx1ZToKKwkJCVBHX1JFVFVSTl9QT0lOVEVSKGpidik7CisJCWNhc2UgSnNv bmJWYWx1ZV9Bc0pzb25iOgorCQkJUEdfUkVUVVJOX0pTT05CX1AoSnNvbmJWYWx1ZVRvSnNvbmIo amJ2KSk7CisJCWNhc2UgSnNvbmJWYWx1ZV9Bc1RleHQ6CisJCQlQR19SRVRVUk5fVEVYVF9QKEpz b25iVmFsdWVBc1RleHQoamJ2KSk7CisJfQorCVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOworfQog CiAvKgogICogcGdfcGFyc2VfanNvbl9vcl9lcnJzYXZlCkBAIC04NDgsMTMgKzg2MiwxMiBAQCBq c29uX29iamVjdF9maWVsZChQR19GVU5DVElPTl9BUkdTKQogCQlQR19SRVRVUk5fTlVMTCgpOwog fQogCi1EYXR1bQotanNvbmJfb2JqZWN0X2ZpZWxkKFBHX0ZVTkNUSU9OX0FSR1MpCitzdGF0aWMg RGF0dW0KK2pzb25iX29iamVjdF9maWVsZF9pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5m bywgSnNvbmJWYWx1ZVRhcmdldCB0YXJnZXQpCiB7CiAJSnNvbmIJICAgKmpiID0gUEdfR0VUQVJH X0pTT05CX1AoMCk7CiAJdGV4dAkgICAqa2V5ID0gUEdfR0VUQVJHX1RFWFRfUFAoMSk7CiAJSnNv bmJWYWx1ZSAqdjsKLQlKc29uYlZhbHVlCXZidWY7CiAKIAlpZiAoIUpCX1JPT1RfSVNfT0JKRUNU KGpiKSkKIAkJUEdfUkVUVVJOX05VTEwoKTsKQEAgLTg2MiwxMiArODc1LDIzIEBAIGpzb25iX29i amVjdF9maWVsZChQR19GVU5DVElPTl9BUkdTKQogCXYgPSBnZXRLZXlKc29uVmFsdWVGcm9tQ29u dGFpbmVyKCZqYi0+cm9vdCwKIAkJCQkJCQkJCSBWQVJEQVRBX0FOWShrZXkpLAogCQkJCQkJCQkJ IFZBUlNJWkVfQU5ZX0VYSERSKGtleSksCi0JCQkJCQkJCQkgJnZidWYpOworCQkJCQkJCQkJIE5V TEwpOworCWlmICh2ID09IE5VTEwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CiAKLQlpZiAodiAhPSBO VUxMKQotCQlQR19SRVRVUk5fSlNPTkJfUChKc29uYlZhbHVlVG9Kc29uYih2KSk7CisJcmV0dXJu IGpzb25idmFsdWVfY292ZXJ0KHYsIHRhcmdldCk7Cit9CiAKLQlQR19SRVRVUk5fTlVMTCgpOwor RGF0dW0KK2pzb25iX29iamVjdF9maWVsZChQR19GVU5DVElPTl9BUkdTKQoreworCXJldHVybiBq c29uYl9vYmplY3RfZmllbGRfaW50ZXJuYWwoZmNpbmZvLCBKc29uYlZhbHVlX0FzSnNvbmIpOwor fQorCitEYXR1bQoranNvbmJfb2JqZWN0X2ZpZWxkX3N0YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJcmV0dXJuIGpzb25iX29iamVjdF9maWVsZF9pbnRlcm5hbChmY2luZm8sIEpzb25iVmFsdWVf QXNKc29uYlZhbHVlKTsKIH0KIAogRGF0dW0KQEAgLTkyMyw4ICs5NDcsOCBAQCBqc29uX2FycmF5 X2VsZW1lbnQoUEdfRlVOQ1RJT05fQVJHUykKIAkJUEdfUkVUVVJOX05VTEwoKTsKIH0KIAotRGF0 dW0KLWpzb25iX2FycmF5X2VsZW1lbnQoUEdfRlVOQ1RJT05fQVJHUykKK3N0YXRpYyBEYXR1bQor anNvbmJfYXJyYXlfZWxlbWVudF9pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgSnNv bmJWYWx1ZVRhcmdldCB0YXJnZXQpCiB7CiAJSnNvbmIJICAgKmpiID0gUEdfR0VUQVJHX0pTT05C X1AoMCk7CiAJaW50CQkJZWxlbWVudCA9IFBHX0dFVEFSR19JTlQzMigxKTsKQEAgLTk0NSwxMCAr OTY5LDIyIEBAIGpzb25iX2FycmF5X2VsZW1lbnQoUEdfRlVOQ1RJT05fQVJHUykKIAl9CiAKIAl2 ID0gZ2V0SXRoSnNvbmJWYWx1ZUZyb21Db250YWluZXIoJmpiLT5yb290LCBlbGVtZW50KTsKLQlp ZiAodiAhPSBOVUxMKQotCQlQR19SRVRVUk5fSlNPTkJfUChKc29uYlZhbHVlVG9Kc29uYih2KSk7 CisJaWYgKHYgPT0gTlVMTCkKKwkJUEdfUkVUVVJOX05VTEwoKTsKIAotCVBHX1JFVFVSTl9OVUxM KCk7CisJcmV0dXJuIGpzb25idmFsdWVfY292ZXJ0KHYsIHRhcmdldCk7Cit9CisKK0RhdHVtCitq c29uYl9hcnJheV9lbGVtZW50KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJcmV0dXJuIGpzb25iX2Fy cmF5X2VsZW1lbnRfaW50ZXJuYWwoZmNpbmZvLCBKc29uYlZhbHVlX0FzSnNvbmIpOworfQorCitE YXR1bQoranNvbmJfYXJyYXlfZWxlbWVudF9zdGFydChQR19GVU5DVElPTl9BUkdTKQoreworCXJl dHVybiBqc29uYl9hcnJheV9lbGVtZW50X2ludGVybmFsKGZjaW5mbywgSnNvbmJWYWx1ZV9Bc0pz b25iVmFsdWUpOwogfQogCiBEYXR1bQpAQCAtMTQ3NiwxNyArMTUxMiwyMyBAQCBnZXRfc2NhbGFy KHZvaWQgKnN0YXRlLCBjaGFyICp0b2tlbiwgSnNvblRva2VuVHlwZSB0b2tlbnR5cGUpCiBEYXR1 bQoganNvbmJfZXh0cmFjdF9wYXRoKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JcmV0dXJuIGdldF9q c29uYl9wYXRoX2FsbChmY2luZm8sIGZhbHNlKTsKKwlyZXR1cm4gZ2V0X2pzb25iX3BhdGhfYWxs KGZjaW5mbywgSnNvbmJWYWx1ZV9Bc0pzb25iKTsKIH0KIAogRGF0dW0KIGpzb25iX2V4dHJhY3Rf cGF0aF90ZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JcmV0dXJuIGdldF9qc29uYl9wYXRoX2Fs bChmY2luZm8sIHRydWUpOworCXJldHVybiBnZXRfanNvbmJfcGF0aF9hbGwoZmNpbmZvLCBKc29u YlZhbHVlX0FzVGV4dCk7Cit9CisKK0RhdHVtCitqc29uYl9leHRyYWN0X3BhdGhfc3RhcnQoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlyZXR1cm4gZ2V0X2pzb25iX3BhdGhfYWxsKGZjaW5mbywgSnNv bmJWYWx1ZV9Bc0pzb25iVmFsdWUpOwogfQogCiBzdGF0aWMgRGF0dW0KLWdldF9qc29uYl9wYXRo X2FsbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCBhc190ZXh0KQorZ2V0X2pzb25iX3Bh dGhfYWxsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBKc29uYlZhbHVlVGFyZ2V0IHRhcmdldCkK IHsKIAlKc29uYgkgICAqamIgPSBQR19HRVRBUkdfSlNPTkJfUCgwKTsKIAlBcnJheVR5cGUgICpw YXRoID0gUEdfR0VUQVJHX0FSUkFZVFlQRV9QKDEpOwpAQCAtMTUwOCw3ICsxNTUwLDcgQEAgZ2V0 X2pzb25iX3BhdGhfYWxsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIGFzX3RleHQpCiAK IAlkZWNvbnN0cnVjdF9hcnJheV9idWlsdGluKHBhdGgsIFRFWFRPSUQsICZwYXRodGV4dCwgJnBh dGhudWxscywgJm5wYXRoKTsKIAotCXJlcyA9IGpzb25iX2dldF9lbGVtZW50KGpiLCBwYXRodGV4 dCwgbnBhdGgsICZpc251bGwsIGFzX3RleHQpOworCXJlcyA9IGpzb25iX2dldF9lbGVtZW50KGpi LCBwYXRodGV4dCwgbnBhdGgsICZpc251bGwsIHRhcmdldCk7CiAKIAlpZiAoaXNudWxsKQogCQlQ R19SRVRVUk5fTlVMTCgpOwpAQCAtMTUxNyw3ICsxNTU5LDcgQEAgZ2V0X2pzb25iX3BhdGhfYWxs KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIGFzX3RleHQpCiB9CiAKIERhdHVtCi1qc29u Yl9nZXRfZWxlbWVudChKc29uYiAqamIsIERhdHVtICpwYXRoLCBpbnQgbnBhdGgsIGJvb2wgKmlz bnVsbCwgYm9vbCBhc190ZXh0KQoranNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBEYXR1bSAq cGF0aCwgaW50IG5wYXRoLCBib29sICppc251bGwsIEpzb25iVmFsdWVUYXJnZXQgdGFyZ2V0KQog ewogCUpzb25iQ29udGFpbmVyICpjb250YWluZXIgPSAmamItPnJvb3Q7CiAJSnNvbmJWYWx1ZSAq amJ2cCA9IE5VTEw7CkBAIC0xNTUwLDE2ICsxNTkyLDI2IEBAIGpzb25iX2dldF9lbGVtZW50KEpz b25iICpqYiwgRGF0dW0gKnBhdGgsIGludCBucGF0aCwgYm9vbCAqaXNudWxsLCBib29sIGFzX3Rl eHQpCiAJICovCiAJaWYgKG5wYXRoIDw9IDAgJiYgamJ2cCA9PSBOVUxMKQogCXsKLQkJaWYgKGFz X3RleHQpCi0JCXsKLQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oY3N0cmluZ190b190ZXh0KEpz b25iVG9DU3RyaW5nKE5VTEwsCi0JCQkJCQkJCQkJCQkJCQkJICBjb250YWluZXIsCi0JCQkJCQkJ CQkJCQkJCQkJICBWQVJTSVpFKGpiKSkpKTsKLQkJfQotCQllbHNlCisJCXN3aXRjaCh0YXJnZXQp CiAJCXsKLQkJCS8qIG5vdCB0ZXh0IG1vZGUgLSBqdXN0IGhhbmQgYmFjayB0aGUganNvbmIgKi8K LQkJCVBHX1JFVFVSTl9KU09OQl9QKGpiKTsKKwkJCWNhc2UgSnNvbmJWYWx1ZV9Bc1RleHQ6CisJ CQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3RleHQoSnNvbmJUb0NTdHJpbmco TlVMTCwKKwkJCQkJCQkJCQkJCQkJCQkJICBjb250YWluZXIsCisJCQkJCQkJCQkJCQkJCQkJCSAg VkFSU0laRShqYikpKSk7CisJCQljYXNlIEpzb25iVmFsdWVfQXNKc29uYjoKKwkJCQkvKiBqdXN0 IGhhbmQgYmFjayB0aGUganNvbmIgKi8KKwkJCQlQR19SRVRVUk5fSlNPTkJfUChqYik7CisJCQlj YXNlIEpzb25iVmFsdWVfQXNKc29uYlZhbHVlOgorCQkJCXsKKwkJCQkJLyoganVzdCBoYW5kIGJh Y2sgdGhlIGpzb25iICovCisJCQkJCUpzb25iVmFsdWUgKmpidiA9IE5VTEw7CisJCQkJCWlmIChK Ql9ST09UX0lTX0FSUkFZKGpiKSAmJiBKQl9ST09UX0lTX1NDQUxBUihqYikpCisJCQkJCQlQR19S RVRVUk5fUE9JTlRFUihnZXRJdGhKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsIDAp KTsKKworCQkJCQlqYnYgPSBwYWxsb2MwKHNpemVvZihKc29uYlZhbHVlKSk7CisJCQkJCUpzb25i VG9Kc29uYlZhbHVlKGpiLCBqYnYpOworCQkJCQlQR19SRVRVUk5fUE9JTlRFUihqYnYpOworCQkJ CX0KIAkJfQogCX0KIApAQCAtMTY0NSwyMyArMTY5NywxNCBAQCBqc29uYl9nZXRfZWxlbWVudChK c29uYiAqamIsIERhdHVtICpwYXRoLCBpbnQgbnBhdGgsIGJvb2wgKmlzbnVsbCwgYm9vbCBhc190 ZXh0KQogCQl9CiAJfQogCi0JaWYgKGFzX3RleHQpCi0JewotCQlpZiAoamJ2cC0+dHlwZSA9PSBq YnZOdWxsKQotCQl7Ci0JCQkqaXNudWxsID0gdHJ1ZTsKLQkJCXJldHVybiBQb2ludGVyR2V0RGF0 dW0oTlVMTCk7Ci0JCX0KIAotCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKEpzb25iVmFsdWVBc1Rl eHQoamJ2cCkpOwotCX0KLQllbHNlCisJaWYgKHRhcmdldCA9PSBKc29uYlZhbHVlX0FzVGV4dCAm JiBqYnZwLT50eXBlID09IGpidk51bGwpCiAJewotCQlKc29uYgkgICAqcmVzID0gSnNvbmJWYWx1 ZVRvSnNvbmIoamJ2cCk7Ci0KLQkJLyogbm90IHRleHQgbW9kZSAtIGp1c3QgaGFuZCBiYWNrIHRo ZSBqc29uYiAqLwotCQlQR19SRVRVUk5fSlNPTkJfUChyZXMpOworCQkqaXNudWxsID0gdHJ1ZTsK KwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKIAl9CisKKwlyZXR1cm4ganNvbmJ2YWx1 ZV9jb3ZlcnQoamJ2cCwgdGFyZ2V0KTsKIH0KIAogRGF0dW0KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNv bnBhdGhfZXhlYy5jCmluZGV4IDJkMDU5OWI0YWFhLi41ZWVmMTRmOTNlZCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCkBAIC0zOTMsNyArMzkzLDcgQEAganNvbmJfcGF0aF9t YXRjaF9vcHIoUEdfRlVOQ1RJT05fQVJHUykKICAqCQlyb3dzZXQuCiAgKi8KIHN0YXRpYyBEYXR1 bQotanNvbmJfcGF0aF9xdWVyeV9pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9v bCB0eikKK2pzb25iX3BhdGhfcXVlcnlfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8s IGJvb2wgdHosIEpzb25iVmFsdWVUYXJnZXQgdGFyZ2V0KQogewogCUZ1bmNDYWxsQ29udGV4dCAq ZnVuY2N0eDsKIAlMaXN0CSAgICpmb3VuZDsKQEAgLTQzNSwxOSArNDM1LDI1IEBAIGpzb25iX3Bh dGhfcXVlcnlfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgdHopCiAJdiA9 IGxmaXJzdChjKTsKIAlmdW5jY3R4LT51c2VyX2ZjdHggPSBsaXN0X2RlbGV0ZV9maXJzdChmb3Vu ZCk7CiAKLQlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwgSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1 ZVRvSnNvbmIodikpKTsKKwlTUkZfUkVUVVJOX05FWFQoZnVuY2N0eCwganNvbmJ2YWx1ZV9jb3Zl cnQodiwgdGFyZ2V0KSk7CiB9CiAKIERhdHVtCiBqc29uYl9wYXRoX3F1ZXJ5KFBHX0ZVTkNUSU9O X0FSR1MpCiB7Ci0JcmV0dXJuIGpzb25iX3BhdGhfcXVlcnlfaW50ZXJuYWwoZmNpbmZvLCBmYWxz ZSk7CisJcmV0dXJuIGpzb25iX3BhdGhfcXVlcnlfaW50ZXJuYWwoZmNpbmZvLCBmYWxzZSwgSnNv bmJWYWx1ZV9Bc0pzb25iKTsKIH0KIAogRGF0dW0KIGpzb25iX3BhdGhfcXVlcnlfdHooUEdfRlVO Q1RJT05fQVJHUykKIHsKLQlyZXR1cm4ganNvbmJfcGF0aF9xdWVyeV9pbnRlcm5hbChmY2luZm8s IHRydWUpOworCXJldHVybiBqc29uYl9wYXRoX3F1ZXJ5X2ludGVybmFsKGZjaW5mbywgdHJ1ZSwg SnNvbmJWYWx1ZV9Bc0pzb25iKTsKK30KKworRGF0dW0KK2pzb25iX3BhdGhfcXVlcnlfc3RhcnQo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlyZXR1cm4ganNvbmJfcGF0aF9xdWVyeV9pbnRlcm5hbChm Y2luZm8sIGZhbHNlLCBKc29uYlZhbHVlX0FzSnNvbmJWYWx1ZSk7CiB9CiAKIC8qCkBAIC00ODcs NyArNDkzLDcgQEAganNvbmJfcGF0aF9xdWVyeV9hcnJheV90eihQR19GVU5DVElPTl9BUkdTKQog ICoJCWl0ZW0uICBJZiB0aGVyZSBhcmUgbm8gaXRlbXMsIE5VTEwgcmV0dXJuZWQuCiAgKi8KIHN0 YXRpYyBEYXR1bQotanNvbmJfcGF0aF9xdWVyeV9maXJzdF9pbnRlcm5hbChGdW5jdGlvbkNhbGxJ bmZvIGZjaW5mbywgYm9vbCB0eikKK2pzb25iX3BhdGhfcXVlcnlfZmlyc3RfaW50ZXJuYWwoRnVu Y3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgdHosIEpzb25iVmFsdWVUYXJnZXQgdGFyZ2V0KQog ewogCUpzb25iCSAgICpqYiA9IFBHX0dFVEFSR19KU09OQl9QKDApOwogCUpzb25QYXRoICAgKmpw ID0gUEdfR0VUQVJHX0pTT05QQVRIX1AoMSk7CkBAIC00OTgsNyArNTA0LDEwIEBAIGpzb25iX3Bh dGhfcXVlcnlfZmlyc3RfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgdHop CiAJKHZvaWQpIGV4ZWN1dGVKc29uUGF0aChqcCwgdmFycywgamIsICFzaWxlbnQsICZmb3VuZCwg dHopOwogCiAJaWYgKEpzb25WYWx1ZUxpc3RMZW5ndGgoJmZvdW5kKSA+PSAxKQotCQlQR19SRVRV Uk5fSlNPTkJfUChKc29uYlZhbHVlVG9Kc29uYihKc29uVmFsdWVMaXN0SGVhZCgmZm91bmQpKSk7 CisJeworCQlKc29uYlZhbHVlICpqYnYgPSBKc29uVmFsdWVMaXN0SGVhZCgmZm91bmQpOworCQly ZXR1cm4ganNvbmJ2YWx1ZV9jb3ZlcnQoamJ2LCB0YXJnZXQpOworCX0KIAllbHNlCiAJCVBHX1JF VFVSTl9OVUxMKCk7CiB9CkBAIC01MDYsMTMgKzUxNSwxOSBAQCBqc29uYl9wYXRoX3F1ZXJ5X2Zp cnN0X2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIHR6KQogRGF0dW0KIGpz b25iX3BhdGhfcXVlcnlfZmlyc3QoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlyZXR1cm4ganNvbmJf cGF0aF9xdWVyeV9maXJzdF9pbnRlcm5hbChmY2luZm8sIGZhbHNlKTsKKwlyZXR1cm4ganNvbmJf cGF0aF9xdWVyeV9maXJzdF9pbnRlcm5hbChmY2luZm8sIGZhbHNlLCBKc29uYlZhbHVlX0FzSnNv bmIpOwogfQogCiBEYXR1bQoganNvbmJfcGF0aF9xdWVyeV9maXJzdF90eihQR19GVU5DVElPTl9B UkdTKQogewotCXJldHVybiBqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0X2ludGVybmFsKGZjaW5mbywg dHJ1ZSk7CisJcmV0dXJuIGpzb25iX3BhdGhfcXVlcnlfZmlyc3RfaW50ZXJuYWwoZmNpbmZvLCB0 cnVlLCBKc29uYlZhbHVlX0FzSnNvbmIpOworfQorCitEYXR1bQoranNvbmJfcGF0aF9xdWVyeV9m aXJzdF9zdGFydChQR19GVU5DVElPTl9BUkdTKQoreworCXJldHVybiBqc29uYl9wYXRoX3F1ZXJ5 X2ZpcnN0X2ludGVybmFsKGZjaW5mbywgZmFsc2UsIEpzb25iVmFsdWVfQXNKc29uYlZhbHVlKTsK IH0KIAogLyoqKioqKioqKioqKioqKioqKioqRXhlY3V0ZSBmdW5jdGlvbnMgZm9yIEpzb25QYXRo KioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL2NhdHZlcnNpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCmluZGV4 IGFiOWE3YWMxZjc5Li5mYjgzYTdhMjlkZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9jYXR2ZXJzaW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKQEAg LTU3LDYgKzU3LDUgQEAKICAqLwogCiAvKgkJCQkJCQl5eXl5bW1kZE4gKi8KLSNkZWZpbmUgQ0FU QUxPR19WRVJTSU9OX05PCTIwMjMwODI1MQotCisjZGVmaW5lIENBVEFMT0dfVkVSU0lPTl9OTwky MDIzMDkxNTEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggOTgwNWJjNjExODAu LmVmNzE5YWFjNmJiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTQ1ODcsMjUgKzQ1ODcs MjUgQEAKICAgcHJvbmFtZSA9PiAncGdfbHNuJywgcHJvcmV0dHlwZSA9PiAncGdfbHNuJywgcHJv YXJndHlwZXMgPT4gJ251bWVyaWMnLAogICBwcm9zcmMgPT4gJ251bWVyaWNfcGdfbHNuJyB9LAog Ci17IG9pZCA9PiAnMzU1NicsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIGJvb2xlYW4nLAor eyBvaWQgPT4gJzM1NTYnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBib29sZWFuJywgcHJv c3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKICAgcHJvbmFtZSA9PiAnYm9vbCcsIHBy b3JldHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4g J2pzb25iX2Jvb2wnIH0sCiB7IG9pZCA9PiAnMzQ0OScsIGRlc2NyID0+ICdjb252ZXJ0IGpzb25i IHRvIG51bWVyaWMnLAotICBwcm9uYW1lID0+ICdudW1lcmljJywgcHJvcmV0dHlwZSA9PiAnbnVt ZXJpYycsIHByb2FyZ3R5cGVzID0+ICdqc29uYicsCisgIHByb25hbWUgPT4gJ251bWVyaWMnLCBw cm9yZXR0eXBlID0+ICdudW1lcmljJywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywgcHJvc3VwcG9y dCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKICAgcHJvc3JjID0+ICdqc29uYl9udW1lcmljJyB9 LAoteyBvaWQgPT4gJzM0NTAnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBpbnQyJywKK3sg b2lkID0+ICczNDUwJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gaW50MicsIHByb3N1cHBv cnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsCiAgIHByb25hbWUgPT4gJ2ludDInLCBwcm9yZXR0 eXBlID0+ICdpbnQyJywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29u Yl9pbnQyJyB9LAoteyBvaWQgPT4gJzM0NTEnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBp bnQ0JywKK3sgb2lkID0+ICczNDUxJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gaW50NCcs IHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsCiAgIHByb25hbWUgPT4gJ2ludDQn LCBwcm9yZXR0eXBlID0+ICdpbnQ0JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3Jj ID0+ICdqc29uYl9pbnQ0JyB9LAoteyBvaWQgPT4gJzM0NTInLCBkZXNjciA9PiAnY29udmVydCBq c29uYiB0byBpbnQ4JywKK3sgb2lkID0+ICczNDUyJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIg dG8gaW50OCcsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsCiAgIHByb25hbWUg PT4gJ2ludDgnLCBwcm9yZXR0eXBlID0+ICdpbnQ4JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywK ICAgcHJvc3JjID0+ICdqc29uYl9pbnQ4JyB9LAoteyBvaWQgPT4gJzM0NTMnLCBkZXNjciA9PiAn Y29udmVydCBqc29uYiB0byBmbG9hdDQnLAoreyBvaWQgPT4gJzM0NTMnLCBkZXNjciA9PiAnY29u dmVydCBqc29uYiB0byBmbG9hdDQnLCBwcm9zdXBwb3J0ID0+ICdqc29uYl9jYXN0X3N1cHBvcnQn LAogICBwcm9uYW1lID0+ICdmbG9hdDQnLCBwcm9yZXR0eXBlID0+ICdmbG9hdDQnLCBwcm9hcmd0 eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4gJ2pzb25iX2Zsb2F0NCcgfSwKLXsgb2lkID0+ ICcyNTgwJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gZmxvYXQ4JywKK3sgb2lkID0+ICcy NTgwJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gZmxvYXQ4JywgcHJvc3VwcG9ydCA9PiAn anNvbmJfY2FzdF9zdXBwb3J0JywKICAgcHJvbmFtZSA9PiAnZmxvYXQ4JywgcHJvcmV0dHlwZSA9 PiAnZmxvYXQ4JywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9m bG9hdDgnIH0sCiAKQEAgLTk5NDcsNiArOTk0NywzMCBAQAogICBwcm9uYW1lID0+ICdqc29uYl9v YmplY3RfZmllbGRfdGV4dCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9 PiAnanNvbmIgdGV4dCcsIHByb2FyZ25hbWVzID0+ICd7ZnJvbV9qc29uLCBmaWVsZF9uYW1lfScs CiAgIHByb3NyYyA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX3RleHQnIH0sCit7IG9pZCA9PiAnNDU1 MicsIGRlc2NyID0+ICdleHRyYWN0IGpzb25idmFsdWUgZnJvbSBqc29uYiBmb3IgdGhlIGdpdmVu IGZpZWxkJywKKyAgcHJvbmFtZSA9PiAnanNvbmJfb2JqZWN0X2ZpZWxkX3N0YXJ0JywgcHJvcmV0 dHlwZSA9PiAnaW50ZXJuYWwnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwgdGV4dCcsIHBy b2FyZ25hbWVzID0+ICd7ZnJvbV9qc29uLCBmaWVsZF9uYW1lfScsCisgIHByb3NyYyA9PiAnanNv bmJfb2JqZWN0X2ZpZWxkX3N0YXJ0JyB9LAoreyBvaWQgPT4gJzM4MTMnLCBkZXNjciA9PiAnZXh0 cmFjdCBqb3NuYnZhbHVlIGZyb20ganNvbmIgYXJyYXkgZm9yIHRoZSBnaXZlbiBpbmRleCcsCisg IHByb25hbWUgPT4gJ2pzb25iX2FycmF5X2VsZW1lbnRfc3RhcnQnLCBwcm9yZXR0eXBlID0+ICdp bnRlcm5hbCcsCisgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCBpbnQ0JywgcHJvYXJnbmFtZXMg PT4gJ3tmcm9tX2pzb25iLCBlbGVtZW50X2luZGV4fScsCisgIHByb3NyYyA9PiAnanNvbmJfYXJy YXlfZWxlbWVudF9zdGFydCcgfSwKK3sgb2lkID0+ICc0NTQ5JywgZGVzY3IgPT4gJ2V4dHJhY3Qg anNvbmJ2YWx1ZSBmcm9tIGpzb25iIGZvciB0aGUgZ2l2ZW4gcGF0aHMnLAorICBwcm9uYW1lID0+ ICdqc29uYl9leHRyYWN0X3BhdGhfc3RhcnQnLCBwcm92YXJpYWRpYyA9PiAndGV4dCcsIHByb3Jl dHR5cGUgPT4gJ2ludGVybmFsJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsIF90ZXh0Jywg cHJvYWxsYXJndHlwZXMgPT4gJ3tpbnRlcm5hbCxfdGV4dH0nLAorICBwcm9hcmdtb2RlcyA9PiAn e2ksdn0nLCBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbmIscGF0aF9lbGVtc30nLAorICBwcm9z cmMgPT4gJ2pzb25iX2V4dHJhY3RfcGF0aF9zdGFydCd9LAoreyBvaWQgPT4gJzQ1NTMnLCBkZXNj ciA9PiAnY29udmVydCBhIGpzb25idmFsdWUgdG8gbnVtZXJpYycsCisgIHByb25hbWUgPT4gJ2pz b25iX2ZpbmlzaF9udW1lcmljJywgcHJvcmV0dHlwZSA9PiAnbnVtZXJpYycsCisgIHByb2FyZ3R5 cGVzID0+ICdpbnRlcm5hbCBvaWQnLCBwcm9hcmduYW1lcyA9PiAne2Zyb21fanNvbnZhbHVlLHRh cmdldF9vaWR9JywKKyAgcHJvc3JjID0+ICdqc29uYl9maW5pc2hfbnVtZXJpYycgfSwKK3sgb2lk ID0+ICc0NTU0JywgZGVzY3IgPT4gJ2NvbnZlcnQgYSBqc29uYnZhbHVlIHRvIGJvb2xlYW4nLAor ICBwcm9uYW1lID0+ICdqc29uYl9maW5pc2hfYm9vbCcsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAor ICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwnLCBwcm9hcmduYW1lcyA9PiAne2pzb252YWx1ZX0n LAorICBwcm9zcmMgPT4gJ2pzb25iX2ZpbmlzaF9ib29sJyB9LAoreyBvaWQgPT4gJzM4MTQnLCBk ZXNjciA9PiAncGxhbm5lciBzdXBwb3J0IGZvciBudW1lcmljKGpzb25iKScsCisgIHByb25hbWUg PT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywKKyAgcHJv YXJndHlwZXMgPT4gJ2ludGVybmFsJywgcHJvc3JjID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnIH0s CiB7IG9pZCA9PiAnMzIxNScsCiAgIHByb25hbWUgPT4gJ2pzb25iX2FycmF5X2VsZW1lbnQnLCBw cm9yZXR0eXBlID0+ICdqc29uYicsCiAgIHByb2FyZ3R5cGVzID0+ICdqc29uYiBpbnQ0JywgcHJv YXJnbmFtZXMgPT4gJ3tmcm9tX2pzb24sIGVsZW1lbnRfaW5kZXh9JywKQEAgLTEwMTM5LDYgKzEw MTYzLDEwIEBACiAgIHByb25hbWUgPT4gJ2pzb25iX3BhdGhfcXVlcnknLCBwcm9yb3dzID0+ICcx MDAwJywgcHJvcmV0c2V0ID0+ICd0JywKICAgcHJvcmV0dHlwZSA9PiAnanNvbmInLCBwcm9hcmd0 eXBlcyA9PiAnanNvbmIganNvbnBhdGgganNvbmIgYm9vbCcsCiAgIHByb3NyYyA9PiAnanNvbmJf cGF0aF9xdWVyeScgfSwKK3sgb2lkID0+ICc0NTU3JywgZGVzY3IgPT4gJ2pzb25wYXRoIHF1ZXJ5 IGFzIGpzb25idmFsdWUnLAorICBwcm9uYW1lID0+ICdqc29uYl9wYXRoX3F1ZXJ5X3N0YXJ0Jywg cHJvcm93cyA9PiAnMTAwMCcsIHByb3JldHNldCA9PiAndCcsCisgIHByb3JldHR5cGUgPT4gJ2lu dGVybmFsJywgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsIGpzb25wYXRoIGpzb25iIGJvb2wnLAor ICBwcm9zcmMgPT4gJ2pzb25iX3BhdGhfcXVlcnlfc3RhcnQnIH0sCiB7IG9pZCA9PiAnNDAwNycs IGRlc2NyID0+ICdqc29ucGF0aCBxdWVyeSB3cmFwcGVkIGludG8gYXJyYXknLAogICBwcm9uYW1l ID0+ICdqc29uYl9wYXRoX3F1ZXJ5X2FycmF5JywgcHJvcmV0dHlwZSA9PiAnanNvbmInLAogICBw cm9hcmd0eXBlcyA9PiAnanNvbmIganNvbnBhdGgganNvbmIgYm9vbCcsCkBAIC0xMDE0Nyw2ICsx MDE3NSwxMCBAQAogICBwcm9uYW1lID0+ICdqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0JywgcHJvcmV0 dHlwZSA9PiAnanNvbmInLAogICBwcm9hcmd0eXBlcyA9PiAnanNvbmIganNvbnBhdGgganNvbmIg Ym9vbCcsCiAgIHByb3NyYyA9PiAnanNvbmJfcGF0aF9xdWVyeV9maXJzdCcgfSwKK3sgb2lkID0+ ICc0NTU1JywgZGVzY3IgPT4gJ2pzb25wYXRoIHF1ZXJ5IGZpcnN0IGl0ZW0gYXMganNvbmJ2YWx1 ZScsCisgIHByb25hbWUgPT4gJ2pzb25iX3BhdGhfcXVlcnlfZmlyc3Rfc3RhcnQnLCBwcm9yZXR0 eXBlID0+ICdpbnRlcm5hbCcsCisgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCBqc29ucGF0aCBq c29uYiBib29sJywKKyAgcHJvc3JjID0+ICdqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0X3N0YXJ0JyB9 LAogeyBvaWQgPT4gJzQwMDknLCBkZXNjciA9PiAnanNvbnBhdGggbWF0Y2gnLAogICBwcm9uYW1l ID0+ICdqc29uYl9wYXRoX21hdGNoJywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCiAgIHByb2FyZ3R5 cGVzID0+ICdqc29uYiBqc29ucGF0aCBqc29uYiBib29sJywgcHJvc3JjID0+ICdqc29uYl9wYXRo X21hdGNoJyB9LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaCBiL3NyYy9p bmNsdWRlL3V0aWxzL2pzb25iLmgKaW5kZXggNjQ5YTE2NDRmMjQuLjUwYjNjNjU1NTdmIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2pzb25iLmgKQEAgLTI5NCw2ICsyOTQsMTMgQEAgc3RydWN0IEpzb25iVmFsdWUKIAl9CQkJdmFs OwogfTsKIAordHlwZWRlZiBlbnVtIEpzb25iVmFsdWVUYXJnZXQKK3sKKwlKc29uYlZhbHVlX0Fz SnNvbmJWYWx1ZSwKKwlKc29uYlZhbHVlX0FzSnNvbmIsCisJSnNvbmJWYWx1ZV9Bc1RleHQKK30g SnNvbmJWYWx1ZVRhcmdldDsKKwogI2RlZmluZSBJc0FKc29uYlNjYWxhcihqc29uYnZhbCkJKCgo anNvbmJ2YWwpLT50eXBlID49IGpidk51bGwgJiYgXAogCQkJCQkJCQkJICAoanNvbmJ2YWwpLT50 eXBlIDw9IGpidkJvb2wpIHx8IFwKIAkJCQkJCQkJCSAgKGpzb25idmFsKS0+dHlwZSA9PSBqYnZE YXRldGltZSkKQEAgLTQyOCwxMiArNDM1LDEyIEBAIGV4dGVybiBjb25zdCBjaGFyICpKc29uYlR5 cGVOYW1lKEpzb25iVmFsdWUgKnZhbCk7CiBleHRlcm4gRGF0dW0ganNvbmJfc2V0X2VsZW1lbnQo SnNvbmIgKmpiLCBEYXR1bSAqcGF0aCwgaW50IHBhdGhfbGVuLAogCQkJCQkJCSAgIEpzb25iVmFs dWUgKm5ld3ZhbCk7CiBleHRlcm4gRGF0dW0ganNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBE YXR1bSAqcGF0aCwgaW50IG5wYXRoLAotCQkJCQkJCSAgIGJvb2wgKmlzbnVsbCwgYm9vbCBhc190 ZXh0KTsKKwkJCQkJCQkgICBib29sICppc251bGwsIEpzb25iVmFsdWVUYXJnZXQgdGFyZ2V0KTsK IGV4dGVybiBib29sIHRvX2pzb25iX2lzX2ltbXV0YWJsZShPaWQgdHlwb2lkKTsKIGV4dGVybiBE YXR1bSBqc29uYl9idWlsZF9vYmplY3Rfd29ya2VyKGludCBuYXJncywgRGF0dW0gKmFyZ3MsIGJv b2wgKm51bGxzLAogCQkJCQkJCQkJICAgT2lkICp0eXBlcywgYm9vbCBhYnNlbnRfb25fbnVsbCwK IAkJCQkJCQkJCSAgIGJvb2wgdW5pcXVlX2tleXMpOwogZXh0ZXJuIERhdHVtIGpzb25iX2J1aWxk X2FycmF5X3dvcmtlcihpbnQgbmFyZ3MsIERhdHVtICphcmdzLCBib29sICpudWxscywKIAkJCQkJ CQkJCSAgT2lkICp0eXBlcywgYm9vbCBhYnNlbnRfb25fbnVsbCk7Ci0KK2V4dGVybiBEYXR1bSBq c29uYnZhbHVlX2NvdmVydChKc29uYlZhbHVlICpqYnYsIEpzb25iVmFsdWVUYXJnZXQgdGFyZ2V0 KTsKICNlbmRpZgkJCQkJCQkvKiBfX0pTT05CX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9qc29uYi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pz b25iLm91dAppbmRleCA0YTE2ZDBkYmFmYi4uYzZhZjdhNTljY2IgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvanNvbmIub3V0CkBAIC00NTcsOCArNDU3LDExNCBAQCBDUkVBVEUgVEVNUCBUQUJMRSB0 ZXN0X2pzb25iICgKICk7CiBJTlNFUlQgSU5UTyB0ZXN0X2pzb25iIFZBTFVFUwogKCdzY2FsYXIn LCciYSBzY2FsYXIiJyksCisoJ3NjYWxhcmludCcsJzInKSwKICgnYXJyYXknLCdbInplcm8iLCAi b25lIiwidHdvIixudWxsLCJmb3VyIiwiZml2ZSIsIFsxLDIsM10seyJmMSI6OX1dJyksCi0oJ29i amVjdCcsJ3siZmllbGQxIjoidmFsMSIsImZpZWxkMiI6InZhbDIiLCJmaWVsZDMiOm51bGwsICJm aWVsZDQiOiA0LCAiZmllbGQ1IjogWzEsMiwzXSwgImZpZWxkNiI6IHsiZjEiOjl9fScpOworKCdv YmplY3QnLCd7ImZpZWxkMSI6InZhbDEiLCJmaWVsZDIiOiJ2YWwyIiwiZmllbGQzIjpudWxsLCAi ZmllbGQ0IjogNCwgImZpZWxkNSI6IFsxLDIsM10sICJmaWVsZDYiOiB7ImYxIjo5fSwgImZpZWxk NyI6IHRydWUsICJmaWVsZDgiOiBbMSwyLDMsNCw1XX0nKTsKK1xwc2V0IG51bGwgTlVMTAorRVhQ TEFJTiAoQ09TVFMgT0ZGLCBWRVJCT1NFKQorU0VMRUNUCisodGVzdF9qc29uIC0+ICdmaWVsZDQn KTo6bnVtZXJpYywKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQyLAorKHRlc3RfanNvbiAt PiAnZmllbGQ0Jyk6OmludDQsCisodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6aW50OCwKKyh0ZXN0 X2pzb24gLT4gJ2ZpZWxkNCcpOjpmbG9hdDQsCisodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6Zmxv YXQ4LAorKHRlc3RfanNvbi0+J2ZpZWxkNScgLT4gMCk6Om51bWVyaWMsCisodGVzdF9qc29uLT4n ZmllbGQ1JyAtPiAxMCk6Om51bWVyaWMsCisodGVzdF9qc29uIz4neyJmaWVsZDYiLCAiZjEifScp OjpudW1lcmljLAorKHRlc3RfanNvbiM+J3siZmllbGQ2IiwgImYyIn0nKTo6bnVtZXJpYywKKyh0 ZXN0X2pzb24jPid7ImZpZWxkNyJ9Jyk6OmJvb2wKK0ZST00gdGVzdF9qc29uYgorV0hFUkUganNv bl90eXBlID0gJ29iamVjdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHBnX3RlbXAudGVzdF9qc29uYgorICAgT3V0cHV0OiBqc29uYl9maW5pc2hfbnVtZXJpYyhq c29uYl9vYmplY3RfZmllbGRfc3RhcnQoKHRlc3RfanNvbik6OmludGVybmFsLCAnZmllbGQ0Jzo6 dGV4dCksICcxNzAwJzo6b2lkKSwgKGpzb25iX2ZpbmlzaF9udW1lcmljKGpzb25iX29iamVjdF9m aWVsZF9zdGFydCgodGVzdF9qc29uKTo6aW50ZXJuYWwsICdmaWVsZDQnOjp0ZXh0KSwgJzIxJzo6 b2lkKSk6OnNtYWxsaW50LCAoanNvbmJfZmluaXNoX251bWVyaWMoanNvbmJfb2JqZWN0X2ZpZWxk X3N0YXJ0KCh0ZXN0X2pzb24pOjppbnRlcm5hbCwgJ2ZpZWxkNCc6OnRleHQpLCAnMjMnOjpvaWQp KTo6aW50ZWdlciwgKGpzb25iX2ZpbmlzaF9udW1lcmljKGpzb25iX29iamVjdF9maWVsZF9zdGFy dCgodGVzdF9qc29uKTo6aW50ZXJuYWwsICdmaWVsZDQnOjp0ZXh0KSwgJzIwJzo6b2lkKSk6OmJp Z2ludCwgKGpzb25iX2ZpbmlzaF9udW1lcmljKGpzb25iX29iamVjdF9maWVsZF9zdGFydCgodGVz dF9qc29uKTo6aW50ZXJuYWwsICdmaWVsZDQnOjp0ZXh0KSwgJzcwMCc6Om9pZCkpOjpyZWFsLCAo anNvbmJfZmluaXNoX251bWVyaWMoanNvbmJfb2JqZWN0X2ZpZWxkX3N0YXJ0KCh0ZXN0X2pzb24p OjppbnRlcm5hbCwgJ2ZpZWxkNCc6OnRleHQpLCAnNzAxJzo6b2lkKSk6OmRvdWJsZSBwcmVjaXNp b24sIGpzb25iX2ZpbmlzaF9udW1lcmljKGpzb25iX2FycmF5X2VsZW1lbnRfc3RhcnQoKCh0ZXN0 X2pzb24gLT4gJ2ZpZWxkNSc6OnRleHQpKTo6aW50ZXJuYWwsIDApLCAnMTcwMCc6Om9pZCksIGpz b25iX2ZpbmlzaF9udW1lcmljKGpzb25iX2FycmF5X2VsZW1lbnRfc3RhcnQoKCh0ZXN0X2pzb24g LT4gJ2ZpZWxkNSc6OnRleHQpKTo6aW50ZXJuYWwsIDEwKSwgJzE3MDAnOjpvaWQpLCBqc29uYl9m aW5pc2hfbnVtZXJpYyhqc29uYl9leHRyYWN0X3BhdGhfc3RhcnQoKHRlc3RfanNvbik6OmludGVy bmFsLCBWQVJJQURJQyAne2ZpZWxkNixmMX0nOjp0ZXh0W10pLCAnMTcwMCc6Om9pZCksIGpzb25i X2ZpbmlzaF9udW1lcmljKGpzb25iX2V4dHJhY3RfcGF0aF9zdGFydCgodGVzdF9qc29uKTo6aW50 ZXJuYWwsIFZBUklBRElDICd7ZmllbGQ2LGYyfSc6OnRleHRbXSksICcxNzAwJzo6b2lkKSwganNv bmJfZmluaXNoX2Jvb2woanNvbmJfZXh0cmFjdF9wYXRoX3N0YXJ0KCh0ZXN0X2pzb24pOjppbnRl cm5hbCwgVkFSSUFESUMgJ3tmaWVsZDd9Jzo6dGV4dFtdKSkKKyAgIEZpbHRlcjogKHRlc3RfanNv bmIuanNvbl90eXBlID0gJ29iamVjdCc6OnRleHQpCisoMyByb3dzKQorCitTRUxFQ1QKKyh0ZXN0 X2pzb24gLT4gJ2ZpZWxkNCcpOjpudW1lcmljLAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6Omlu dDIsCisodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6aW50NCwKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxk NCcpOjppbnQ4LAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0NCwKKyh0ZXN0X2pzb24g LT4gJ2ZpZWxkNCcpOjpmbG9hdDgsCisodGVzdF9qc29uIC0+ICdmaWVsZDUnIC0+IDApOjpudW1l cmljLAorKHRlc3RfanNvbiAtPiAnZmllbGQ1JyAtPiAxMCk6Om51bWVyaWMsCisodGVzdF9qc29u ICM+ICd7ImZpZWxkNiIsICJmMSJ9Jyk6Om51bWVyaWMsCisodGVzdF9qc29uICM+ICd7ImZpZWxk NiIsICJmMiJ9Jyk6Om51bWVyaWMsCisodGVzdF9qc29uIz4neyJmaWVsZDcifScpOjpib29sCitG Uk9NIHRlc3RfanNvbmIKK1dIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworIG51bWVyaWMgfCBp bnQyIHwgaW50NCB8IGludDggfCBmbG9hdDQgfCBmbG9hdDggfCBudW1lcmljIHwgbnVtZXJpYyB8 IG51bWVyaWMgfCBudW1lcmljIHwgYm9vbCAKKy0tLS0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0t LSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tCisgICAgICAgNCB8ICAgIDQgfCAgICA0IHwgICAgNCB8ICAgICAgNCB8ICAgICAg NCB8ICAgICAgIDEgfCAgICBOVUxMIHwgICAgICAgOSB8ICAgIE5VTEwgfCB0CisoMSByb3cpCisK K0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVAoranNvbmJfcGF0aF9xdWVyeSh0 ZXN0X2pzb24sJyQuZmllbGQ4WypdID8gKEAgPj0gJG1pbiAmJiBAIDw9ICRtYXgpJywgJ3sibWlu IjoyLCAibWF4Ijo0fScpLAoranNvbmJfcGF0aF9xdWVyeV9maXJzdCh0ZXN0X2pzb24sICckLmZp ZWxkOFsqXSA/IChAID49ICRtaW4gJiYgQCA8PSAkbWF4KScsICd7Im1pbiI6MiwgIm1heCI6NH0n KSwKK2pzb25iX3BhdGhfcXVlcnkodGVzdF9qc29uLCckLmZpZWxkOFsqXSA/IChAID49ICRtaW4g JiYgQCA8PSAkbWF4KScsICd7Im1pbiI6MiwgIm1heCI6NH0nKTo6aW50MiwKK2pzb25iX3BhdGhf cXVlcnlfZmlyc3QodGVzdF9qc29uLCAnJC5maWVsZDhbKl0gPyAoQCA+PSAkbWluICYmIEAgPD0g JG1heCknLCAneyJtaW4iOjIsICJtYXgiOjR9Jyk6OmludDIKK0ZST00gdGVzdF9qc29uYgorV0hF UkUganNvbl90eXBlID0gJ29iamVjdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBSZXN1bHQKKyAgIE91dHB1dDogKGpzb25iX3BhdGhfcXVlcnkodGVzdF9qc29uLCAn JC4iZmllbGQ4IlsqXT8oQCA+PSAkIm1pbiIgJiYgQCA8PSAkIm1heCIpJzo6anNvbnBhdGgsICd7 Im1heCI6IDQsICJtaW4iOiAyfSc6Ompzb25iLCBmYWxzZSkpLCBqc29uYl9wYXRoX3F1ZXJ5X2Zp cnN0KHRlc3RfanNvbiwgJyQuImZpZWxkOCJbKl0/KEAgPj0gJCJtaW4iICYmIEAgPD0gJCJtYXgi KSc6Ompzb25wYXRoLCAneyJtYXgiOiA0LCAibWluIjogMn0nOjpqc29uYiwgZmFsc2UpLCAoanNv bmJfZmluaXNoX251bWVyaWMoKGpzb25iX3BhdGhfcXVlcnlfc3RhcnQoKHRlc3RfanNvbik6Omlu dGVybmFsLCAnJC4iZmllbGQ4IlsqXT8oQCA+PSAkIm1pbiIgJiYgQCA8PSAkIm1heCIpJzo6anNv bnBhdGgsICd7Im1heCI6IDQsICJtaW4iOiAyfSc6Ompzb25iLCBmYWxzZSkpLCAnMjEnOjpvaWQp KTo6c21hbGxpbnQsIChqc29uYl9maW5pc2hfbnVtZXJpYyhqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0 X3N0YXJ0KCh0ZXN0X2pzb24pOjppbnRlcm5hbCwgJyQuImZpZWxkOCJbKl0/KEAgPj0gJCJtaW4i ICYmIEAgPD0gJCJtYXgiKSc6Ompzb25wYXRoLCAneyJtYXgiOiA0LCAibWluIjogMn0nOjpqc29u YiwgZmFsc2UpLCAnMjEnOjpvaWQpKTo6c21hbGxpbnQKKyAgIC0+ICBQcm9qZWN0U2V0CisgICAg ICAgICBPdXRwdXQ6IGpzb25iX3BhdGhfcXVlcnkodGVzdF9qc29uLCAnJC4iZmllbGQ4IlsqXT8o QCA+PSAkIm1pbiIgJiYgQCA8PSAkIm1heCIpJzo6anNvbnBhdGgsICd7Im1heCI6IDQsICJtaW4i OiAyfSc6Ompzb25iLCBmYWxzZSksIGpzb25iX3BhdGhfcXVlcnlfc3RhcnQoKHRlc3RfanNvbik6 OmludGVybmFsLCAnJC4iZmllbGQ4IlsqXT8oQCA+PSAkIm1pbiIgJiYgQCA8PSAkIm1heCIpJzo6 anNvbnBhdGgsICd7Im1heCI6IDQsICJtaW4iOiAyfSc6Ompzb25iLCBmYWxzZSksIHRlc3RfanNv bgorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBnX3RlbXAudGVzdF9qc29uYgorICAgICAgICAg ICAgICAgT3V0cHV0OiBqc29uX3R5cGUsIHRlc3RfanNvbgorICAgICAgICAgICAgICAgRmlsdGVy OiAodGVzdF9qc29uYi5qc29uX3R5cGUgPSAnb2JqZWN0Jzo6dGV4dCkKKyg3IHJvd3MpCisKK1NF TEVDVAoranNvbmJfcGF0aF9xdWVyeSh0ZXN0X2pzb24sJyQuZmllbGQ4WypdID8gKEAgPj0gJG1p biAmJiBAIDw9ICRtYXgpJywgJ3sibWluIjoyLCAibWF4Ijo0fScpLAoranNvbmJfcGF0aF9xdWVy eV9maXJzdCh0ZXN0X2pzb24sICckLmZpZWxkOFsqXSA/IChAID49ICRtaW4gJiYgQCA8PSAkbWF4 KScsICd7Im1pbiI6MiwgIm1heCI6NH0nKSwKK2pzb25iX3BhdGhfcXVlcnkodGVzdF9qc29uLCck LmZpZWxkOFsqXSA/IChAID49ICRtaW4gJiYgQCA8PSAkbWF4KScsICd7Im1pbiI6MiwgIm1heCI6 NH0nKTo6aW50MiwKK2pzb25iX3BhdGhfcXVlcnlfZmlyc3QodGVzdF9qc29uLCAnJC5maWVsZDhb Kl0gPyAoQCA+PSAkbWluICYmIEAgPD0gJG1heCknLCAneyJtaW4iOjIsICJtYXgiOjR9Jyk6Omlu dDIKK0ZST00gdGVzdF9qc29uYgorV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisganNvbmJf cGF0aF9xdWVyeSB8IGpzb25iX3BhdGhfcXVlcnlfZmlyc3QgfCBqc29uYl9wYXRoX3F1ZXJ5IHwg anNvbmJfcGF0aF9xdWVyeV9maXJzdCAKKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IDIgICAgICAgICAgICAgICAgfCAyICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg ICAgMiB8ICAgICAgICAgICAgICAgICAgICAgIDIKKyAzICAgICAgICAgICAgICAgIHwgMiAgICAg ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIDMgfCAgICAgICAgICAgICAgICAgICAg ICAyCisgNCAgICAgICAgICAgICAgICB8IDIgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg ICAgICAgICA0IHwgICAgICAgICAgICAgICAgICAgICAgMgorKDMgcm93cykKKworRVhQTEFJTiAo Q09TVFMgT0ZGLCBWRVJCT1NFKQorU0VMRUNUICh0ZXN0X2pzb24gIz4gJ3t9Jyk6Om51bWVyaWMg RlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdzY2FsYXJpbnQnOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTZXEgU2NhbiBvbiBwZ190ZW1wLnRlc3RfanNvbmIKKyAgIE91dHB1dDoganNvbmJfZmluaXNo X251bWVyaWMoanNvbmJfZXh0cmFjdF9wYXRoX3N0YXJ0KCh0ZXN0X2pzb24pOjppbnRlcm5hbCwg VkFSSUFESUMgJ3t9Jzo6dGV4dFtdKSwgJzE3MDAnOjpvaWQpCisgICBGaWx0ZXI6ICh0ZXN0X2pz b25iLmpzb25fdHlwZSA9ICdzY2FsYXJpbnQnOjp0ZXh0KQorKDMgcm93cykKKworU0VMRUNUICh0 ZXN0X2pzb24gIz4gJ3t9Jyk6Om51bWVyaWMgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlw ZSA9ICdzY2FsYXJpbnQnOworIG51bWVyaWMgCistLS0tLS0tLS0KKyAgICAgICAyCisoMSByb3cp CisKKy0tIGxldCByYWlzZSBzb21lIGVycm9ycy4KK0VYUExBSU4gKENPU1RTIE9GRiwgVkVSQk9T RSkKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6aW50NCBGUk9NIHRlc3RfanNvbmIg V0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBw Z190ZW1wLnRlc3RfanNvbmIKKyAgIE91dHB1dDogKGpzb25iX2ZpbmlzaF9udW1lcmljKGpzb25i X29iamVjdF9maWVsZF9zdGFydCgodGVzdF9qc29uKTo6aW50ZXJuYWwsICdmaWVsZDEnOjp0ZXh0 KSwgJzIzJzo6b2lkKSk6OmludGVnZXIKKyAgIEZpbHRlcjogKHRlc3RfanNvbmIuanNvbl90eXBl ID0gJ29iamVjdCc6OnRleHQpCisoMyByb3dzKQorCitTRUxFQ1QgKHRlc3RfanNvbiAtPiAnZmll bGQxJyk6OmludDQgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOwor RVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBpbnRlZ2VyCitTRUxFQ1Qg KHRlc3RfanNvbiAtPiAnZmllbGQxJyk6OmJvb2wgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25f dHlwZSA9ICdvYmplY3QnOworRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlw ZSBib29sZWFuCitccHNldCBudWxsICcnCiBTRUxFQ1QgdGVzdF9qc29uIC0+ICd4JyBGUk9NIHRl c3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ3NjYWxhcic7CiAgP2NvbHVtbj8gCiAtLS0tLS0t LS0tCkBAIC01ODYsNyArNjkyLDkgQEAgU0VMRUNUIGpzb25iX29iamVjdF9rZXlzKHRlc3RfanNv bikgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOwogIGZpZWxkNAog IGZpZWxkNQogIGZpZWxkNgotKDYgcm93cykKKyBmaWVsZDcKKyBmaWVsZDgKKyg4IHJvd3MpCiAK IC0tIG51bGxzCiBTRUxFQ1QgKHRlc3RfanNvbi0+J2ZpZWxkMycpIElTIE5VTEwgQVMgZXhwZWN0 X2ZhbHNlIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pzb25iLnNxbAppbmRleCBlNGI3Y2RmNzAzZC4uNTAwZDA0OTM2ZDkgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9qc29uYi5zcWwKQEAgLTE1NCw4ICsxNTQsNzIgQEAgQ1JFQVRFIFRFTVAgVEFCTEUgdGVzdF9q c29uYiAoCiAKIElOU0VSVCBJTlRPIHRlc3RfanNvbmIgVkFMVUVTCiAoJ3NjYWxhcicsJyJhIHNj YWxhciInKSwKKygnc2NhbGFyaW50JywnMicpLAogKCdhcnJheScsJ1siemVybyIsICJvbmUiLCJ0 d28iLG51bGwsImZvdXIiLCJmaXZlIiwgWzEsMiwzXSx7ImYxIjo5fV0nKSwKLSgnb2JqZWN0Jywn eyJmaWVsZDEiOiJ2YWwxIiwiZmllbGQyIjoidmFsMiIsImZpZWxkMyI6bnVsbCwgImZpZWxkNCI6 IDQsICJmaWVsZDUiOiBbMSwyLDNdLCAiZmllbGQ2IjogeyJmMSI6OX19Jyk7CisoJ29iamVjdCcs J3siZmllbGQxIjoidmFsMSIsImZpZWxkMiI6InZhbDIiLCJmaWVsZDMiOm51bGwsICJmaWVsZDQi OiA0LCAiZmllbGQ1IjogWzEsMiwzXSwgImZpZWxkNiI6IHsiZjEiOjl9LCAiZmllbGQ3IjogdHJ1 ZSwgImZpZWxkOCI6IFsxLDIsMyw0LDVdfScpOworCitccHNldCBudWxsIE5VTEwKK0VYUExBSU4g KENPU1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6Om51 bWVyaWMsCisodGVzdF9qc29uIC0+ICdmaWVsZDQnKTo6aW50MiwKKyh0ZXN0X2pzb24gLT4gJ2Zp ZWxkNCcpOjppbnQ0LAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmludDgsCisodGVzdF9qc29u IC0+ICdmaWVsZDQnKTo6ZmxvYXQ0LAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmZsb2F0OCwK Kyh0ZXN0X2pzb24tPidmaWVsZDUnIC0+IDApOjpudW1lcmljLAorKHRlc3RfanNvbi0+J2ZpZWxk NScgLT4gMTApOjpudW1lcmljLAorKHRlc3RfanNvbiM+J3siZmllbGQ2IiwgImYxIn0nKTo6bnVt ZXJpYywKKyh0ZXN0X2pzb24jPid7ImZpZWxkNiIsICJmMiJ9Jyk6Om51bWVyaWMsCisodGVzdF9q c29uIz4neyJmaWVsZDcifScpOjpib29sCitGUk9NIHRlc3RfanNvbmIKK1dIRVJFIGpzb25fdHlw ZSA9ICdvYmplY3QnOworCitTRUxFQ1QKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpudW1lcmlj LAorKHRlc3RfanNvbiAtPiAnZmllbGQ0Jyk6OmludDIsCisodGVzdF9qc29uIC0+ICdmaWVsZDQn KTo6aW50NCwKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjppbnQ4LAorKHRlc3RfanNvbiAtPiAn ZmllbGQ0Jyk6OmZsb2F0NCwKKyh0ZXN0X2pzb24gLT4gJ2ZpZWxkNCcpOjpmbG9hdDgsCisodGVz dF9qc29uIC0+ICdmaWVsZDUnIC0+IDApOjpudW1lcmljLAorKHRlc3RfanNvbiAtPiAnZmllbGQ1 JyAtPiAxMCk6Om51bWVyaWMsCisodGVzdF9qc29uICM+ICd7ImZpZWxkNiIsICJmMSJ9Jyk6Om51 bWVyaWMsCisodGVzdF9qc29uICM+ICd7ImZpZWxkNiIsICJmMiJ9Jyk6Om51bWVyaWMsCisodGVz dF9qc29uIz4neyJmaWVsZDcifScpOjpib29sCitGUk9NIHRlc3RfanNvbmIKK1dIRVJFIGpzb25f dHlwZSA9ICdvYmplY3QnOworCitFWFBMQUlOIChDT1NUUyBPRkYsIFZFUkJPU0UpCitTRUxFQ1QK K2pzb25iX3BhdGhfcXVlcnkodGVzdF9qc29uLCckLmZpZWxkOFsqXSA/IChAID49ICRtaW4gJiYg QCA8PSAkbWF4KScsICd7Im1pbiI6MiwgIm1heCI6NH0nKSwKK2pzb25iX3BhdGhfcXVlcnlfZmly c3QodGVzdF9qc29uLCAnJC5maWVsZDhbKl0gPyAoQCA+PSAkbWluICYmIEAgPD0gJG1heCknLCAn eyJtaW4iOjIsICJtYXgiOjR9JyksCitqc29uYl9wYXRoX3F1ZXJ5KHRlc3RfanNvbiwnJC5maWVs ZDhbKl0gPyAoQCA+PSAkbWluICYmIEAgPD0gJG1heCknLCAneyJtaW4iOjIsICJtYXgiOjR9Jyk6 OmludDIsCitqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0KHRlc3RfanNvbiwgJyQuZmllbGQ4WypdID8g KEAgPj0gJG1pbiAmJiBAIDw9ICRtYXgpJywgJ3sibWluIjoyLCAibWF4Ijo0fScpOjppbnQyCitG Uk9NIHRlc3RfanNvbmIKK1dIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworCitTRUxFQ1QKK2pz b25iX3BhdGhfcXVlcnkodGVzdF9qc29uLCckLmZpZWxkOFsqXSA/IChAID49ICRtaW4gJiYgQCA8 PSAkbWF4KScsICd7Im1pbiI6MiwgIm1heCI6NH0nKSwKK2pzb25iX3BhdGhfcXVlcnlfZmlyc3Qo dGVzdF9qc29uLCAnJC5maWVsZDhbKl0gPyAoQCA+PSAkbWluICYmIEAgPD0gJG1heCknLCAneyJt aW4iOjIsICJtYXgiOjR9JyksCitqc29uYl9wYXRoX3F1ZXJ5KHRlc3RfanNvbiwnJC5maWVsZDhb Kl0gPyAoQCA+PSAkbWluICYmIEAgPD0gJG1heCknLCAneyJtaW4iOjIsICJtYXgiOjR9Jyk6Omlu dDIsCitqc29uYl9wYXRoX3F1ZXJ5X2ZpcnN0KHRlc3RfanNvbiwgJyQuZmllbGQ4WypdID8gKEAg Pj0gJG1pbiAmJiBAIDw9ICRtYXgpJywgJ3sibWluIjoyLCAibWF4Ijo0fScpOjppbnQyCitGUk9N IHRlc3RfanNvbmIKK1dIRVJFIGpzb25fdHlwZSA9ICdvYmplY3QnOworCisKK0VYUExBSU4gKENP U1RTIE9GRiwgVkVSQk9TRSkKK1NFTEVDVCAodGVzdF9qc29uICM+ICd7fScpOjpudW1lcmljIEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnc2NhbGFyaW50JzsKK1NFTEVDVCAodGVz dF9qc29uICM+ICd7fScpOjpudW1lcmljIEZST00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUg PSAnc2NhbGFyaW50JzsKKworLS0gbGV0IHJhaXNlIHNvbWUgZXJyb3JzLgorRVhQTEFJTiAoQ09T VFMgT0ZGLCBWRVJCT1NFKQorU0VMRUNUICh0ZXN0X2pzb24gLT4gJ2ZpZWxkMScpOjppbnQ0IEZS T00gdGVzdF9qc29uYiBXSEVSRSBqc29uX3R5cGUgPSAnb2JqZWN0JzsKK1NFTEVDVCAodGVzdF9q c29uIC0+ICdmaWVsZDEnKTo6aW50NCBGUk9NIHRlc3RfanNvbmIgV0hFUkUganNvbl90eXBlID0g J29iamVjdCc7CisKK1NFTEVDVCAodGVzdF9qc29uIC0+ICdmaWVsZDEnKTo6Ym9vbCBGUk9NIHRl c3RfanNvbmIgV0hFUkUganNvbl90eXBlID0gJ29iamVjdCc7CisKK1xwc2V0IG51bGwgJycKIAog U0VMRUNUIHRlc3RfanNvbiAtPiAneCcgRlJPTSB0ZXN0X2pzb25iIFdIRVJFIGpzb25fdHlwZSA9 ICdzY2FsYXInOwogU0VMRUNUIHRlc3RfanNvbiAtPiAneCcgRlJPTSB0ZXN0X2pzb25iIFdIRVJF IGpzb25fdHlwZSA9ICdhcnJheSc7Ci0tIAoyLjIxLjAKCg== --000000000000517d2106055c0fbc--