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.96) (envelope-from ) id 1vdpEK-005Hen-36 for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Jan 2026 12:35:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vdpEJ-001sS2-2Y for pgsql-hackers@arkaria.postgresql.org; Thu, 08 Jan 2026 12:35:08 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vdpEI-001sRt-2V for pgsql-hackers@lists.postgresql.org; Thu, 08 Jan 2026 12:35:08 +0000 Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vdpEC-004swl-1q for pgsql-hackers@postgresql.org; Thu, 08 Jan 2026 12:35:06 +0000 Received: by mail-ed1-x535.google.com with SMTP id 4fb4d7f45d1cf-64d02c01865so4998069a12.1 for ; Thu, 08 Jan 2026 04:35:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jeltef.nl; s=google; t=1767875699; x=1768480499; darn=postgresql.org; h=in-reply-to:references:from:to:subject:cc:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=0pNdf3OUOgogkDycGvkgTTPbzrqB1xm5Jvmc9UnQDYk=; b=r2SgtQ9xU2hB/YsZWciTr1CwrudHA0HAqpxR/pOHGxhk9s1b6KXL2rOiO0aXP7B+j+ OBRc/sYxoJhk+pI1AxYNjfS9aCsbY3GDbU05bHALIRGkkkig+ojQmQrhuYEzvdhJPYO+ dgfHTWsfLswUo9DJwKYR1tSBTV1VN3ZK+1BwetFGDkA9C5Djb3rqaqsyfoBhwv0j2Heh UWjIBlWndbrpEQn8CNvq43rl9KUPPwYxVBTx0q1brqFqiCT4xGbbRF58gPOaYV7YhCMY pk8B6VtycD3adtStAHjISZAPBnV6LOqzx8aQLFILQUyPwkR86lu1T5cYquzwWupONaki zIYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767875699; x=1768480499; h=in-reply-to:references:from:to:subject:cc:message-id:date :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=0pNdf3OUOgogkDycGvkgTTPbzrqB1xm5Jvmc9UnQDYk=; b=X9pXB1eUpedepjUv/cbKRvf0R0Uld/Cd/eS2HLya8BwL8/C+SHou2nbB94LCZpK3Do QzyEqOd2/4B+nzuVDadi2jkFLtjJFa4+es2gkpLNZXyiH3ObnI7Kr/MNA+3jcAXkyYD8 O/x+iWjUiRDA6evlOeA89zdktOHBAhQID4ESQHrhUrxVQmgwT06OrCdpxk9MS0bTqJTo flZCCW6QIzEfF16GAbGturHVsKPOjpmo6OCev9qL2WsZxSPdqdUo5Dt0Xw8+IeAv0WIC 1mbme+uLPJFs53cyraxoqE+Kn7UXlyBrvJaVuhv2OionMPJrRNbQwqST0ElcyJKfu+7M ye6Q== X-Forwarded-Encrypted: i=1; AJvYcCVfl8Jk/TL7hntISfhERC/TpNy5cGOgp8fgmUm7U4WAHk/zzYsniD6Uw9cf+Rn4hGPLGHRRdNFjsy5ObQGS@postgresql.org X-Gm-Message-State: AOJu0YwOGOMsiKBbgnyD0y2dJQMUuGlGvjVs421S5rJ6kKOTGhb1eVlE rseJuax8S6miik8xSls5MWk+R4qaoick3tZa9s6to72LtgEtm0oxRnPLu7JwQ/OqYFo= X-Gm-Gg: AY/fxX7gMcVYeCqA+bJfSo+d66gEhNG9NuRGgLFHTRCjIXK3Vw211RarO/s7m80nJD6 F+FBtxvQ2jfxXQ3a0KVKaK0nsZU4Qc6q6RY7N9hVwAzhP+VcFZ5nboItrqtD+SF9gvYEnutUu0o YCg5w+RHgGSEqTa1KGUs0n0ARY/vUsFOPRGQ8qNzQ30syJa6KvelIqdifUIwwz+O3aW+M5xlOyV 7W9SaoY+61WNDzh6rLjv97L2BpxTUVhKW3zyTAxrz4vgm8tBNtKEBnvVfgIXQ2qWiAXTMO28HgP iYqePFikw1GguYmi3l5z6GvQ0aXySEdkBE+AWspyp1drk+axIQVRGSOs1plv/Fv3O1QFk7fDGDR 9R+mBJuw4C/a06XX/co4uwj4iiX9Qu6yUehImMpplSH8vQWsXkooE6vZ9NglL70gNp2+tI3j0h0 GTyvnU6wS5KiBX9PbmNJASujPWz5u8cpPQEPATLNlr1JIbcs+WkQsLPibnRZc= X-Google-Smtp-Source: AGHT+IEL/+GX6RC9riUqVEx+V48/4LwhGXS30bKALHdXkrCIDAMxVicMeFWobDsBhCjlb6UkYVKjmA== X-Received: by 2002:a17:907:9615:b0:b79:fc29:ebd2 with SMTP id a640c23a62f3a-b8444d4ea7emr602444366b.3.1767875698649; Thu, 08 Jan 2026 04:34:58 -0800 (PST) Received: from localhost (037153217001.static.ipv4.heldenvannu.net. [37.153.217.1]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b842a4d3229sm782367366b.37.2026.01.08.04.34.57 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 08 Jan 2026 04:34:57 -0800 (PST) Content-Type: multipart/mixed; boundary=baaef3372e886fe21dfd6cae3d53a904ae10bf2be12ea57b7aa5066ea5c7 Mime-Version: 1.0 Date: Thu, 08 Jan 2026 13:34:57 +0100 Message-Id: Cc: "Jacob Champion" , "PostgreSQL Hackers" , "Robert Haas" , "Daniel Gustafsson" , "Tom Lane" , "Peter Eisentraut" , "Nazir Bilal Yavuz" Subject: Re: RFC: adding pytest as a supported test framework To: "Andres Freund" From: "Jelte Fennema-Nio" X-Mailer: aerc 0.20.1-31-gf6db7c329ce0 References: In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --baaef3372e886fe21dfd6cae3d53a904ae10bf2be12ea57b7aa5066ea5c7 Content-Type: multipart/alternative; boundary=825b0f106e4b1c9a9f9da7932c24942a44d808c439275d2592d3f22996e6 --825b0f106e4b1c9a9f9da7932c24942a44d808c439275d2592d3f22996e6 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8; format=Flowed On Wed Jan 7, 2026 at 1:48 AM CET, Andres Freund wrote: > I mainly think you're doing too much at once. Attached is a simplified version with all of the things you mentioned removed. The load balance test replacement was more meant as a POC of what this test would look like if it had been written in Python. So I kept it in a separate commit, but labeled it as POC for now (it's not WIP though since I'm pretty happy with what it looks like). --825b0f106e4b1c9a9f9da7932c24942a44d808c439275d2592d3f22996e6-- --baaef3372e886fe21dfd6cae3d53a904ae10bf2be12ea57b7aa5066ea5c7 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0001-Add-support-for-pytest-test-suites.patch Content-Type: text/x-patch; charset=utf-8; name=v9-0001-Add-support-for-pytest-test-suites.patch RnJvbSBmN2U2YTMwZDZlYTYzOWIxMzdmNzc1MzExZjA2YTEzNzc5ZmZmNmVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAxMyBBdWcgMjAyNSAxMDo1ODo1NiAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjkgMS81XSBBZGQgc3VwcG9ydCBmb3IgcHl0ZXN0IHRlc3Qgc3VpdGVzCgpTcGVj aWZ5IC0tZW5hYmxlLXB5dGVzdC8tRHB5dGVzdD1lbmFibGVkIGF0IGNvbmZpZ3VyZSB0aW1lLiBU aGlzCmNvbnRhaW5zIG5vIFBvc3RncmVzIHRlc3QgbG9naWMgLS0gaXQgaXMganVzdCBhICJ2YW5p bGxhIiBweXRlc3QKc2tlbGV0b24uCgpUaGlzIGNvbnRhaW5zIGEgY3VzdG9tIHB5dGVzdCBwbHVn aW4gdG8gZ2VuZXJhdGUgVEFQIG91dHB1dC4gVGhpcyBwbHVnaW4KaXMgdXNlZCBieSB0aGUgTWVz b24gbXRlc3QgcnVubmVyLCB0byBzaG93IHJlbGV2YW50IGluZm9ybWF0aW9uIGZvcgpmYWlsZWQg dGVzdHMuIFRoZSBweXRlc3QtdGFwIHBsdWdpbiB3b3VsZCBoYXZlIGJlZW4gcHJlZmVyYWJsZSwg YnV0IGl0J3MKbm93IGluIG1haW50ZW5hbmNlIG1vZGUsIGFuZCBpdCBoYXMgcHJvYmxlbXMgd2l0 aCBhY2NpZGVudGFsbHkKc3VwcHJlc3NpbmcgaW1wb3J0YW50IGNvbGxlY3Rpb24gZmFpbHVyZXMu CgpDby1hdXRob3JlZC1ieTogSmVsdGUgRmVubmVtYS1OaW8gPHBvc3RncmVzQGplbHRlZi5ubD4K LS0tCiAuY2lycnVzLnRhc2tzLnltbCAgICAgICAgICAgfCAgMTEgKy0KIC5naXRpZ25vcmUgICAg ICAgICAgICAgICAgICB8ICAgMyArCiBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgfCAxNjYg KysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiBjb25maWd1cmUuYWMgICAgICAgICAgICAg ICAgfCAgMjQgKysrKy0KIG1lc29uLmJ1aWxkICAgICAgICAgICAgICAgICB8IDEwMCArKysrKysr KysrKysrKysrKysKIG1lc29uX29wdGlvbnMudHh0ICAgICAgICAgICB8ICAgOCArLQogcHlwcm9q ZWN0LnRvbWwgICAgICAgICAgICAgIHwgIDIxICsrKysKIHNyYy9NYWtlZmlsZS5nbG9iYWwuaW4g ICAgICB8ICAyOSArKysrKysKIHNyYy9tYWtlZmlsZXMvbWVzb24uYnVpbGQgICB8ICAgMiArCiBz cmMvdGVzdC9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbWVzb24uYnVpbGQg ICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3B5dGVzdC9NYWtlZmlsZSAgICB8ICAyMCArKysrCiBz cmMvdGVzdC9weXRlc3QvUkVBRE1FICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvcHl0ZXN0L21lc29u LmJ1aWxkIHwgIDE1ICsrKwogc3JjL3Rlc3QvcHl0ZXN0L3BndGFwLnB5ICAgIHwgMTk4ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rvb2xzL3Rlc3R3cmFwICAgICAg ICAgIHwgICA2ICstCiAxNiBmaWxlcyBjaGFuZ2VkLCA1OTggaW5zZXJ0aW9ucygrKSwgOCBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBweXByb2plY3QudG9tbAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L3B5dGVzdC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90 ZXN0L3B5dGVzdC9SRUFETUUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRlc3QvbWVz b24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRlc3QvcGd0YXAucHkKCmRp ZmYgLS1naXQgYS8uY2lycnVzLnRhc2tzLnltbCBiLy5jaXJydXMudGFza3MueW1sCmluZGV4IDc3 ZDAzNjJhNTUxLi4xYjBkZWFlOGQ4NyAxMDA2NDQKLS0tIGEvLmNpcnJ1cy50YXNrcy55bWwKKysr IGIvLmNpcnJ1cy50YXNrcy55bWwKQEAgLTQ0LDYgKzQ0LDcgQEAgZW52OgogICAgIC1EbGRhcD1l bmFibGVkCiAgICAgLURzc2w9b3BlbnNzbAogICAgIC1EdGFwX3Rlc3RzPWVuYWJsZWQKKyAgICAt RHB5dGVzdD1lbmFibGVkCiAgICAgLURwbHBlcmw9ZW5hYmxlZAogICAgIC1EcGxweXRob249ZW5h YmxlZAogICAgIC1EZG9jcz1lbmFibGVkCkBAIC0zMTUsNiArMzE2LDcgQEAgdGFzazoKICAgICAg ICAgICAtRGxpYmN1cmw9ZW5hYmxlZAogICAgICAgICAgIC1EbmxzPWVuYWJsZWQKICAgICAgICAg ICAtRHBhbT1lbmFibGVkCisgICAgICAgICAgLURQWVRFU1Q9cHl0ZXN0LTMuMTIKIAogICAgICAg c2V0dXBfYWRkaXRpb25hbF9wYWNrYWdlc19zY3JpcHQ6IHwKICAgICAgICAgI3BrZ2luIC15IGlu c3RhbGwgLi4uCkBAIC01MTgsMTQgKzUyMCwxNSBAQCB0YXNrOgogICAgICAgICAgIHNldCAtZQog ICAgICAgICAgIC4vY29uZmlndXJlIFwKICAgICAgICAgICAgIC0tZW5hYmxlLWNhc3NlcnQgLS1l bmFibGUtaW5qZWN0aW9uLXBvaW50cyAtLWVuYWJsZS1kZWJ1ZyBcCi0gICAgICAgICAgICAtLWVu YWJsZS10YXAtdGVzdHMgLS1lbmFibGUtbmxzIFwKKyAgICAgICAgICAgIC0tZW5hYmxlLXRhcC10 ZXN0cyAtLWVuYWJsZS1weXRlc3QgLS1lbmFibGUtbmxzIFwKICAgICAgICAgICAgIC0td2l0aC1z ZWdzaXplLWJsb2Nrcz02IFwKICAgICAgICAgICAgIC0td2l0aC1saWJudW1hIFwKICAgICAgICAg ICAgIC0td2l0aC1saWJ1cmluZyBcCiAgICAgICAgICAgICBcCiAgICAgICAgICAgICAke0xJTlVY X0NPTkZJR1VSRV9GRUFUVVJFU30gXAogICAgICAgICAgICAgXAotICAgICAgICAgICAgQ0xBTkc9 ImNjYWNoZSBjbGFuZyIKKyAgICAgICAgICAgIENMQU5HPSJjY2FjaGUgY2xhbmciIFwKKyAgICAg ICAgICAgIFBZVEVTVD0iZW52IExEX1BSRUxPQUQ9L2xpYi94ODZfNjQtbGludXgtZ251L2xpYmFz YW4uc28uOCBweXRlc3QiCiAgICAgICAgIEVPRgogICAgICAgYnVpbGRfc2NyaXB0OiBzdSBwb3N0 Z3JlcyAtYyAibWFrZSAtcyAtaiR7QlVJTERfSk9CU30gd29ybGQtYmluIgogICAgICAgdXBsb2Fk X2NhY2hlczogY2NhY2hlCkBAIC02NjIsNiArNjY1LDggQEAgdGFzazoKICAgICAgIHA1LjM0LWlv LXR0eQogICAgICAgcDUuMzQtaXBjLXJ1bgogICAgICAgcHl0aG9uMzEyCisgICAgICBweTMxMi1w YWNrYWdpbmcKKyAgICAgIHB5MzEyLXB5dGVzdAogICAgICAgdGNsCiAgICAgICB6c3RkCiAKQEAg LTcxMSw2ICs3MTYsNyBAQCB0YXNrOgogICAgIHNoIHNyYy90b29scy9jaS9jaV9tYWNwb3J0c19w YWNrYWdlcy5zaCAkTUFDT1NfUEFDS0FHRV9MSVNUCiAgICAgIyBzeXN0ZW0gcHl0aG9uIGRvZXNu J3QgcHJvdmlkZSBoZWFkZXJzCiAgICAgc3VkbyAvb3B0L2xvY2FsL2Jpbi9wb3J0IHNlbGVjdCBw eXRob24zIHB5dGhvbjMxMgorICAgIHN1ZG8gL29wdC9sb2NhbC9iaW4vcG9ydCBzZWxlY3QgcHl0 ZXN0IHB5dGVzdDMxMgogICAgICMgTWFrZSBtYWNwb3J0cyBpbnN0YWxsIHZpc2libGUgZm9yIHN1 YnNlcXVlbnQgc3RlcHMKICAgICBlY2hvIFBBVEg9L29wdC9sb2NhbC9zYmluLzovb3B0L2xvY2Fs L2Jpbi86JFBBVEggPj4gJENJUlJVU19FTlYKICAgdXBsb2FkX2NhY2hlczogbWFjcG9ydHMKQEAg LTc4NCw2ICs3OTAsNyBAQCB0YXNrOgogICAgICAgLURsZGFwPWVuYWJsZWQKICAgICAgIC1Ec3Ns PW9wZW5zc2wKICAgICAgIC1EdGFwX3Rlc3RzPWVuYWJsZWQKKyAgICAgIC1EcHl0ZXN0PWVuYWJs ZWQKICAgICAgIC1EcGxwZXJsPWVuYWJsZWQKICAgICAgIC1EcGxweXRob249ZW5hYmxlZAogCmRp ZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCA0ZTkxMTM5NWZlMy4uYTU1 MGNlNjE5NGIgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMzEs NiArMzEsNyBAQCB3aW4zMnZlci5yYwogKi5leGUKIGxpYipkbGwuZGVmCiBsaWIqLnBjCitfX3B5 Y2FjaGVfXy8KIAogIyBMb2NhbCBleGNsdWRlcyBpbiByb290IGRpcmVjdG9yeQogL0dOVW1ha2Vm aWxlCkBAIC00MywzICs0NCw1IEBAIGxpYioucGMKIC9SZWxlYXNlLwogL3RtcF9pbnN0YWxsLwog L3BvcnRsb2NrLworLy52ZW52LworL3V2LmxvY2sKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2Nv bmZpZ3VyZQppbmRleCAwNDVjOTEzODY1ZC4uMTI2M2Y4NGU2OTkgMTAwNzU1Ci0tLSBhL2NvbmZp Z3VyZQorKysgYi9jb25maWd1cmUKQEAgLTYzMCw2ICs2MzAsOCBAQCB2cGF0aF9idWlsZAogUEdf U1lTUk9PVAogUEdfVkVSU0lPTl9OVU0KIExERkxBR1NfRVhfQkUKK1VWCitQWVRFU1QKIFBST1ZF CiBEQlRPRVBVQgogRk9QCkBAIC03NzIsNiArNzc0LDcgQEAgQ0ZMQUdTCiBDQwogZW5hYmxlX2lu amVjdGlvbl9wb2ludHMKIFBHX1RFU1RfRVhUUkEKK2VuYWJsZV9weXRlc3QKIGVuYWJsZV90YXBf dGVzdHMKIGVuYWJsZV9kdHJhY2UKIERUUkFDRUZMQUdTCkBAIC04NTAsNiArODUzLDcgQEAgZW5h YmxlX3Byb2ZpbGluZwogZW5hYmxlX2NvdmVyYWdlCiBlbmFibGVfZHRyYWNlCiBlbmFibGVfdGFw X3Rlc3RzCitlbmFibGVfcHl0ZXN0CiBlbmFibGVfaW5qZWN0aW9uX3BvaW50cwogd2l0aF9ibG9j a3NpemUKIHdpdGhfc2Vnc2l6ZQpAQCAtMTU1MCw3ICsxNTU0LDEwIEBAIE9wdGlvbmFsIEZlYXR1 cmVzOgogICAtLWVuYWJsZS1wcm9maWxpbmcgICAgICBidWlsZCB3aXRoIHByb2ZpbGluZyBlbmFi bGVkCiAgIC0tZW5hYmxlLWNvdmVyYWdlICAgICAgIGJ1aWxkIHdpdGggY292ZXJhZ2UgdGVzdGlu ZyBpbnN0cnVtZW50YXRpb24KICAgLS1lbmFibGUtZHRyYWNlICAgICAgICAgYnVpbGQgd2l0aCBE VHJhY2Ugc3VwcG9ydAotICAtLWVuYWJsZS10YXAtdGVzdHMgICAgICBlbmFibGUgVEFQIHRlc3Rz IChyZXF1aXJlcyBQZXJsIGFuZCBJUEM6OlJ1bikKKyAgLS1lbmFibGUtdGFwLXRlc3RzICAgICAg ZW5hYmxlIChQZXJsLWJhc2VkKSBUQVAgdGVzdHMgKHJlcXVpcmVzIFBlcmwgYW5kCisgICAgICAg ICAgICAgICAgICAgICAgICAgIElQQzo6UnVuKQorICAtLWVuYWJsZS1weXRlc3QgICAgICAgICBl bmFibGUgKFB5dGhvbi1iYXNlZCkgcHl0ZXN0IHN1aXRlcyAocmVxdWlyZXMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgUHl0aG9uKQogICAtLWVuYWJsZS1pbmplY3Rpb24tcG9pbnRzCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZSBpbmplY3Rpb24gcG9pbnRzIChmb3IgdGVzdGlu ZykKICAgLS1lbmFibGUtZGVwZW5kICAgICAgICAgdHVybiBvbiBhdXRvbWF0aWMgZGVwZW5kZW5j eSB0cmFja2luZwpAQCAtMzYzMiw3ICszNjM5LDcgQEAgZmkKIAogCiAjCi0jIFRBUCB0ZXN0cwor IyBUZXN0IGZyYW1ld29ya3MKICMKIAogCkBAIC0zNjYwLDYgKzM2NjcsMzIgQEAgZmkKIAogCiAK KworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXB5dGVzdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIk e2VuYWJsZV9weXRlc3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9w eXRlc3Q7CisgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykKKyAgICAgIDoKKyAgICAgIDs7 CisgICAgbm8pCisgICAgICA6CisgICAgICA7OworICAgICopCisgICAgICBhc19mbl9lcnJvciAk PyAibm8gYXJndW1lbnQgZXhwZWN0ZWQgZm9yIC0tZW5hYmxlLXB5dGVzdCBvcHRpb24iICIkTElO RU5PIiA1CisgICAgICA7OworICBlc2FjCisKK2Vsc2UKKyAgZW5hYmxlX3B5dGVzdD1ubworCitm aQorCisKKworCisKKwogIwogIyBJbmplY3Rpb24gcG9pbnRzCiAjCkBAIC0xOTE3NCw2ICsxOTIw NywxMzUgQEAgJGFzX2VjaG8gIiRtb2R1bGVzdGRlcnIiID4mNjsgfQogICBmaQogZmkKIAoraWYg dGVzdCAiJGVuYWJsZV9weXRlc3QiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgLXogIiRQWVRFU1Qi OyB0aGVuCisgIGZvciBhY19wcm9nIGluIHB5dGVzdCBweS50ZXN0CitkbworICAjIEV4dHJhY3Qg dGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1l IHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQor JGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2 X3BhdGhfUFlURVNUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYKK2Vsc2UKKyAgY2FzZSAkUFlURVNUIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19j dl9wYXRoX1BZVEVTVD0iJFBZVEVTVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qg d2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9T RVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAg dGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycg JGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIk YXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfUFlURVNU PSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4m NQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisg IDs7Citlc2FjCitmaQorUFlURVNUPSRhY19jdl9wYXRoX1BZVEVTVAoraWYgdGVzdCAtbiAiJFBZ VEVTVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRQWVRFU1QiID4mNQorJGFzX2VjaG8gIiRQWVRFU1QiID4mNjsgfQorZWxzZQorICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQor JGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkUFlURVNUIiAmJiBicmVh aworZG9uZQorCitlbHNlCisgICMgUmVwb3J0IHRoZSB2YWx1ZSBvZiBQWVRFU1QgaW4gY29uZmln dXJlJ3Mgb3V0cHV0IGluIGFsbCBjYXNlcy4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUFlURVNUIiA+JjUKKyRhc19lY2hvX24gImNoZWNr aW5nIGZvciBQWVRFU1QuLi4gIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQWVRFU1QiID4mNQorJGFzX2VjaG8gIiRQWVRFU1QiID4m NjsgfQorZmkKKworICBpZiB0ZXN0IC16ICIkUFlURVNUIjsgdGhlbgorICAgICMgSWYgcHl0ZXN0 IG5vdCBmb3VuZCwgdHJ5IGluc3RhbGxpbmcgd2l0aCB1dgorICAgIGlmIHRlc3QgLXogIiRVViI7 IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gdXYKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29y ZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgor c2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJj aGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9VVis6fSBm YWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2Ug JFVWIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1VWPSIkVVYiICMgTGV0 IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBh c19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRI CitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0u CisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRv CisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7 IHRoZW4KKyAgICBhY19jdl9wYXRoX1VWPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0Igor ICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIv JGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9u ZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorVVY9JGFjX2N2X3BhdGhfVVYK K2lmIHRlc3QgLW4gIiRVViI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRVViIgPiY1CiskYXNfZWNobyAiJFVWIiA+JjY7IH0KK2Vsc2UK KyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+ JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJFVWIiAmJiBicmVh aworZG9uZQorCitlbHNlCisgICMgUmVwb3J0IHRoZSB2YWx1ZSBvZiBVViBpbiBjb25maWd1cmUn cyBvdXRwdXQgaW4gYWxsIGNhc2VzLgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIGZvciBVViIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Ig VVYuLi4gIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6ICRVViIgPiY1CiskYXNfZWNobyAiJFVWIiA+JjY7IH0KK2ZpCisKKyAgICBpZiB0 ZXN0IC1uICIkVVYiOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdXYgY2FuIGluc3RhbGwgcHl0ZXN0IGRlcGVuZGVu Y2llcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHV2IGNhbiBpbnN0YWxsIHB5 dGVzdCBkZXBlbmRlbmNpZXMuLi4gIiA+JjY7IH0KKyAgICAgIGlmICIkVVYiIHBpcCBpbnN0YWxs ICIkc3JjZGlyIiA+JjUgMj4mMTsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsg fQorICAgICAgICBQWVRFU1Q9IiRVViBydW4gcHl0ZXN0IgorICAgICAgZWxzZQorICAgICAgICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQor JGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gInB5dGVzdCBub3Qg Zm91bmQgYW5kIHV2IGZhaWxlZCB0byBpbnN0YWxsIGRlcGVuZGVuY2llcyIgIiRMSU5FTk8iIDUK KyAgICAgIGZpCisgICAgZWxzZQorICAgICAgYXNfZm5fZXJyb3IgJD8gInB5dGVzdCBub3QgZm91 bmQiICIkTElORU5PIiA1CisgICAgZmkKKyAgZmkKK2ZpCisKICMgSWYgY29tcGlsZXIgd2lsbCB0 YWtlIC1XbCwtLWFzLW5lZWRlZCAob3IgdmFyaW91cyBwbGF0Zm9ybS1zcGVjaWZpYwogIyBzcGVs bGluZ3MgdGhlcmVvZikgdGhlbiBhZGQgdGhhdCB0byBMREZMQUdTLiAgVGhpcyBpcyBtdWNoIGVh c2llciB0aGFuCiAjIHRyeWluZyB0byBmaWx0ZXIgTElCUyB0byB0aGUgbWluaW11bSBmb3IgZWFj aCBleGVjdXRhYmxlLgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmlu ZGV4IDE0NTE5N2U2YmQ2Li4wYTQ0OTg5OTlmZSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisr KyBiL2NvbmZpZ3VyZS5hYwpAQCAtMjI1LDExICsyMjUsMTYgQEAgQUNfU1VCU1QoRFRSQUNFRkxB R1MpXSkKIEFDX1NVQlNUKGVuYWJsZV9kdHJhY2UpCiAKICMKLSMgVEFQIHRlc3RzCisjIFRlc3Qg ZnJhbWV3b3JrcwogIwogUEdBQ19BUkdfQk9PTChlbmFibGUsIHRhcC10ZXN0cywgbm8sCi0gICAg ICAgICAgICAgIFtlbmFibGUgVEFQIHRlc3RzIChyZXF1aXJlcyBQZXJsIGFuZCBJUEM6OlJ1bild KQorICAgICAgICAgICAgICBbZW5hYmxlIChQZXJsLWJhc2VkKSBUQVAgdGVzdHMgKHJlcXVpcmVz IFBlcmwgYW5kIElQQzo6UnVuKV0pCiBBQ19TVUJTVChlbmFibGVfdGFwX3Rlc3RzKQorCitQR0FD X0FSR19CT09MKGVuYWJsZSwgcHl0ZXN0LCBubywKKyAgICAgICAgICAgICAgW2VuYWJsZSAoUHl0 aG9uLWJhc2VkKSBweXRlc3Qgc3VpdGVzIChyZXF1aXJlcyBQeXRob24pXSkKK0FDX1NVQlNUKGVu YWJsZV9weXRlc3QpCisKIEFDX0FSR19WQVIoUEdfVEVTVF9FWFRSQSwKICAgICAgICAgICAgW2Vu YWJsZSBzZWxlY3RlZCBleHRyYSB0ZXN0cyAob3ZlcnJpZGRlbiBhdCBydW50aW1lIGJ5IFBHX1RF U1RfRVhUUkEgZW52aXJvbm1lbnQgdmFyaWFibGUpXSkKIApAQCAtMjQwNSw2ICsyNDEwLDIxIEBA IGlmIHRlc3QgIiRlbmFibGVfdGFwX3Rlc3RzIiA9IHllczsgdGhlbgogICBmaQogZmkKIAoraWYg dGVzdCAiJGVuYWJsZV9weXRlc3QiID0geWVzOyB0aGVuCisgIFBHQUNfUEFUSF9QUk9HUyhQWVRF U1QsIFtweXRlc3QgcHkudGVzdF0pCisgIGlmIHRlc3QgLXogIiRQWVRFU1QiOyB0aGVuCisgICAg IyBUcnkgcHl0aG9uIC1tIHB5dGVzdCBhcyBhIGZhbGxiYWNrCisgICAgQUNfTVNHX0NIRUNLSU5H KFt3aGV0aGVyIHB5dGhvbiAtbSBweXRlc3Qgd29ya3NdKQorICAgIGlmICIkUFlUSE9OIiAtbSBw eXRlc3QgLS12ZXJzaW9uID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mMTsgdGhlbgorICAgICAgQUNf TVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIFBZVEVTVD0iJFBZVEhPTiAtbSBweXRlc3QiCisgICAg ZWxzZQorICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgQUNfTVNHX0VSUk9SKFtweXRl c3Qgbm90IGZvdW5kXSkKKyAgICBmaQorICBmaQorZmkKKwogIyBJZiBjb21waWxlciB3aWxsIHRh a2UgLVdsLC0tYXMtbmVlZGVkIChvciB2YXJpb3VzIHBsYXRmb3JtLXNwZWNpZmljCiAjIHNwZWxs aW5ncyB0aGVyZW9mKSB0aGVuIGFkZCB0aGF0IHRvIExERkxBR1MuICBUaGlzIGlzIG11Y2ggZWFz aWVyIHRoYW4KICMgdHJ5aW5nIHRvIGZpbHRlciBMSUJTIHRvIHRoZSBtaW5pbXVtIGZvciBlYWNo IGV4ZWN1dGFibGUuCmRpZmYgLS1naXQgYS9tZXNvbi5idWlsZCBiL21lc29uLmJ1aWxkCmluZGV4 IDIwNjRkMWIwYThkLi42NTlkMzZkNjAxZCAxMDA2NDQKLS0tIGEvbWVzb24uYnVpbGQKKysrIGIv bWVzb24uYnVpbGQKQEAgLTE3MTEsNiArMTcxMSw0NyBAQCBlbmRpZgogCiAKIAorIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IExpYnJhcnk6IHB5dGVzdAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3B5dGVzdF9lbmFibGVkID0gZmFsc2UKK3B5dGVz dF92ZXJzaW9uID0gJycKK3B5dGVzdF9jbWQgPSBbJ3B5dGVzdCddICAjIGR1bW15LCBvdmVyd3Jp dHRlbiB3aGVuIHB5dGVzdCBpcyBmb3VuZAorIyBXZSBhbHNvIGNvbmZpZ3VyZSB0aGUgc2FtZSBQ WVRIT05QQVRIIGluIHRoZSBweXRlc3Qgc2V0dGluZ3MgaW4KKyMgcHlwcm9qZWN0LnRvbWwsIGJ1 dCBweXRlc3QgdmVyc2lvbnMgYmVsb3cgOC40IG9ubHkgYWN0dWFsbHkgdXNlIHRoYXQKKyMgdmFs dWUgYWZ0ZXIgcGx1Z2luIGxvYWRpbmcuIE9uIGxvd2VyIHZlcnNpb25zIHB5dGVzdCB3aWxsIHRo cm93IGFuIGVycm9yIGV2ZW4KKyMgd2hlbiBqdXN0IHJ1bm5pbmcgJ3B5dGVzdCAtLXZlcnNpb24n LiBTbyB3ZSBuZWVkIHRvIGNvbmZpZ3VyZSBpdCBoZXJlIHRvby4KKyMgVGhpcyB3b24ndCBoZWxw IHBlb3BsZSBtYW51YWxseSBydW5uaW5nIHB5dGVzdCBvdXRzaWRlIG9mIG1lc29uL21ha2UsIGJ1 dCB3ZQorIyBleHBlY3QgdGhvc2UgdG8gdXNlIGEgcmVjZW50IGVub3VnaCB2ZXJzaW9uIG9mIHB5 dGVzdCBhbnl3YXkgKGFuZCBpZiBub3QgdGhleQorIyBjYW4gbWFudWFsbHkgY29uZmlndXJlIFBZ VEhPTlBBVEggdG9vKS4KK3B5dGVzdF9lbnYgPSB7J1BZVEhPTlBBVEgnOiBtZXNvbi5wcm9qZWN0 X3NvdXJjZV9yb290KCkgLyAnc3JjJyAvICd0ZXN0JyAvICdweXRlc3QnfQorCitweXRlc3RvcHQg PSBnZXRfb3B0aW9uKCdweXRlc3QnKQoraWYgbm90IHB5dGVzdG9wdC5kaXNhYmxlZCgpCisgIHB5 dGVzdCA9IGZpbmRfcHJvZ3JhbShnZXRfb3B0aW9uKCdQWVRFU1QnKSwgbmF0aXZlOiB0cnVlLCBy ZXF1aXJlZDogZmFsc2UpCisKKyAgaWYgcHl0ZXN0LmZvdW5kKCkKKyAgICBweXRlc3RfZW5hYmxl ZCA9IHRydWUKKyAgICBweXRlc3RfdmVyc2lvbiA9IHJ1bl9jb21tYW5kKHB5dGVzdCwgJy0tdmVy c2lvbicsIGVudjogcHl0ZXN0X2VudiwgY2hlY2s6IGZhbHNlKS5zdGRvdXQoKS5zdHJpcCgpLnNw bGl0KCcgJylbLTFdCisgICAgcHl0ZXN0X2NtZCA9IFtweXRlc3QuZnVsbF9wYXRoKCldCisgIGVs c2UKKyAgICAjIFRyeSBweXRob24gLW0gcHl0ZXN0IGFzIGEgZmFsbGJhY2sKKyAgICBweXRlc3Rf Y2hlY2sgPSBydW5fY29tbWFuZChweXRob24sICctbScsICdweXRlc3QnLCAnLS12ZXJzaW9uJywg ZW52OiBweXRlc3RfZW52LCBjaGVjazogZmFsc2UpCisgICAgaWYgcHl0ZXN0X2NoZWNrLnJldHVy bmNvZGUoKSA9PSAwCisgICAgICBweXRlc3RfZW5hYmxlZCA9IHRydWUKKyAgICAgIHB5dGVzdF92 ZXJzaW9uID0gcHl0ZXN0X2NoZWNrLnN0ZG91dCgpLnN0cmlwKCkuc3BsaXQoJyAnKVstMV0KKyAg ICAgIHB5dGVzdF9jbWQgPSBbcHl0aG9uLmZ1bGxfcGF0aCgpLCAnLW0nLCAncHl0ZXN0J10KKyAg ICBlbmRpZgorICBlbmRpZgorCisgIGlmIG5vdCBweXRlc3RfZW5hYmxlZCBhbmQgcHl0ZXN0b3B0 LmVuYWJsZWQoKQorICAgIGVycm9yKCdweXRlc3Qgbm90IGZvdW5kJykKKyAgZW5kaWYKK2VuZGlm CisKKworCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKICMgTGlicmFyeTogenN0ZAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0zODAwLDYgKzM4NDEs NjQgQEAgZm9yZWFjaCB0ZXN0X2RpciA6IHRlc3RzCiAgICAgICAgICkKICAgICAgIGVuZGZvcmVh Y2gKICAgICAgIGluc3RhbGxfc3VpdGVzICs9IHRlc3RfZ3JvdXAKKyAgICBlbGlmIGtpbmQgPT0g J3B5dGVzdCcKKyAgICAgIHRlc3R3cmFwX3B5dGVzdCA9IHRlc3R3cmFwX2Jhc2UKKyAgICAgIGlm IG5vdCBweXRlc3RfZW5hYmxlZAorICAgICAgICB0ZXN0d3JhcF9weXRlc3QgKz0gWyctLXNraXAn LCAncHl0ZXN0IG5vdCBlbmFibGVkJ10KKyAgICAgIGVuZGlmCisKKyAgICAgIHRlc3RfY29tbWFu ZCA9IHB5dGVzdF9jbWQKKworICAgICAgdGVzdF9jb21tYW5kICs9IFsKKyAgICAgICAgJy1jJywg bWVzb24ucHJvamVjdF9zb3VyY2Vfcm9vdCgpIC8gJ3B5cHJvamVjdC50b21sJywKKyAgICAgICAg Jy0tdmVyYm9zZScsCisgICAgICAgICctcCcsICdwZ3RhcCcsICAjIGVuYWJsZSBvdXIgdGVzdCBy ZXBvcnRlciBwbHVnaW4KKyAgICAgICAgJy1yYScsICAjIHNob3cgc2tpcHBlZCBhbmQgeGZhaWxl ZCB0ZXN0cyB0b28KKyAgICAgIF0KKworICAgICAgIyBBZGQgdGVtcG9yYXJ5IGluc3RhbGwsIHRo ZSBidWlsZCBkaXJlY3RvcnkgZm9yIG5vbi1pbnN0YWxsZWQgYmluYXJpZXMgYW5kCisgICAgICAj IGFsc28gdGVzdC8gZm9yIG5vbi1pbnN0YWxsZWQgdGVzdCBiaW5hcmllcyBidWlsdCBzZXBhcmF0 ZWx5LgorICAgICAgZW52ID0gdGVzdF9lbnYKKyAgICAgIGVudi5wcmVwZW5kKCdQQVRIJywgdGVt cF9pbnN0YWxsX2JpbmRpciwgdGVzdF9kaXJbJ2JkJ10sIHRlc3RfZGlyWydiZCddIC8gJ3Rlc3Qn KQorICAgICAgdGVtcF9pbnN0YWxsX2RhdGFkaXIgPSAnQDBAQDFAJy5mb3JtYXQodGVzdF9pbnN0 YWxsX2Rlc3RkaXIsIGRpcl9wcmVmaXggLyBkaXJfZGF0YSkKKyAgICAgIGVudi5zZXQoJ3NoYXJl X2NvbnRyaWJfZGlyJywgdGVtcF9pbnN0YWxsX2RhdGFkaXIgLyAnY29udHJpYicpCisgICAgICBl bnYucHJlcGVuZCgnUFlUSE9OUEFUSCcsIHB5dGVzdF9lbnZbJ1BZVEhPTlBBVEgnXSkKKworICAg ICAgZm9yZWFjaCBuYW1lLCB2YWx1ZSA6IHQuZ2V0KCdlbnYnLCB7fSkKKyAgICAgICAgZW52LnNl dChuYW1lLCB2YWx1ZSkKKyAgICAgIGVuZGZvcmVhY2gKKworICAgICAgdGVzdF9ncm91cCA9IHRl c3RfZGlyWyduYW1lJ10KKyAgICAgIHRlc3Rfa3dhcmdzID0geworICAgICAgICAncHJvdG9jb2wn OiAndGFwJywKKyAgICAgICAgJ3N1aXRlJzogdGVzdF9ncm91cCwKKyAgICAgICAgJ3RpbWVvdXQn OiAxMDAwLAorICAgICAgICAnZGVwZW5kcyc6IHRlc3RfZGVwcyArIHQuZ2V0KCdkZXBzJywgW10p LAorICAgICAgICAnZW52JzogZW52LAorICAgICAgfSArIHQuZ2V0KCd0ZXN0X2t3YXJncycsIHt9 KQorCisgICAgICBmb3JlYWNoIG9uZXRlc3QgOiB0Wyd0ZXN0cyddCisgICAgICAgICMgTWFrZSB0 ZXN0IG5hbWVzIHByZXR0aWVyLCByZW1vdmUgcHl0LyBhbmQgLnB5CisgICAgICAgIG9uZXRlc3Rf cCA9IG9uZXRlc3QKKyAgICAgICAgaWYgb25ldGVzdF9wLnN0YXJ0c3dpdGgoJ3B5dC8nKQorICAg ICAgICAgIG9uZXRlc3RfcCA9IG9uZXRlc3Quc3BsaXQoJ3B5dC8nKVsxXQorICAgICAgICBlbmRp ZgorICAgICAgICBpZiBvbmV0ZXN0X3AuZW5kc3dpdGgoJy5weScpCisgICAgICAgICAgb25ldGVz dF9wID0gZnMuc3RlbShvbmV0ZXN0X3ApCisgICAgICAgIGVuZGlmCisKKyAgICAgICAgdGVzdCh0 ZXN0X2RpclsnbmFtZSddIC8gb25ldGVzdF9wLAorICAgICAgICAgIHB5dGhvbiwKKyAgICAgICAg ICBrd2FyZ3M6IHRlc3Rfa3dhcmdzLAorICAgICAgICAgIGFyZ3M6IHRlc3R3cmFwX3B5dGVzdCAr IFsKKyAgICAgICAgICAgICctLXRlc3Rncm91cCcsIHRlc3RfZGlyWyduYW1lJ10sCisgICAgICAg ICAgICAnLS10ZXN0bmFtZScsIG9uZXRlc3RfcCwKKyAgICAgICAgICAgICctLScsIHRlc3RfY29t bWFuZCwKKyAgICAgICAgICAgIHRlc3RfZGlyWydzZCddIC8gb25ldGVzdCwKKyAgICAgICAgICBd LAorICAgICAgICApCisgICAgICBlbmRmb3JlYWNoCisgICAgICBpbnN0YWxsX3N1aXRlcyArPSB0 ZXN0X2dyb3VwCiAgICAgZWxzZQogICAgICAgZXJyb3IoJ3Vua25vd24ga2luZCBAMEAgb2YgdGVz dCBpbiBAMUAnLmZvcm1hdChraW5kLCB0ZXN0X2Rpclsnc2QnXSkpCiAgICAgZW5kaWYKQEAgLTM5 NzMsNiArNDA3Miw3IEBAIHN1bW1hcnkoCiAgICAgJ2Jpc29uJzogJ0AwQCBAMUAnLmZvcm1hdChi aXNvbi5mdWxsX3BhdGgoKSwgYmlzb25fdmVyc2lvbiksCiAgICAgJ2R0cmFjZSc6IGR0cmFjZSwK ICAgICAnZmxleCc6ICdAMEAgQDFAJy5mb3JtYXQoZmxleC5mdWxsX3BhdGgoKSwgZmxleF92ZXJz aW9uKSwKKyAgICAncHl0ZXN0JzogcHl0ZXN0X2VuYWJsZWQgPyAnICcuam9pbihweXRlc3RfY21k KSArICcgJyArIHB5dGVzdF92ZXJzaW9uIDogbm90X2ZvdW5kX2RlcCwKICAgfSwKICAgc2VjdGlv bjogJ1Byb2dyYW1zJywKICkKZGlmZiAtLWdpdCBhL21lc29uX29wdGlvbnMudHh0IGIvbWVzb25f b3B0aW9ucy50eHQKaW5kZXggNmE3OTNmM2U0NzkuLmNiNDgyNWMzNTc1IDEwMDY0NAotLS0gYS9t ZXNvbl9vcHRpb25zLnR4dAorKysgYi9tZXNvbl9vcHRpb25zLnR4dApAQCAtNDEsNyArNDEsMTAg QEAgb3B0aW9uKCdjYXNzZXJ0JywgdHlwZTogJ2Jvb2xlYW4nLCB2YWx1ZTogZmFsc2UsCiAgIGRl c2NyaXB0aW9uOiAnRW5hYmxlIGFzc2VydGlvbiBjaGVja3MgKGZvciBkZWJ1Z2dpbmcpJykKIAog b3B0aW9uKCd0YXBfdGVzdHMnLCB0eXBlOiAnZmVhdHVyZScsIHZhbHVlOiAnYXV0bycsCi0gIGRl c2NyaXB0aW9uOiAnRW5hYmxlIFRBUCB0ZXN0cycpCisgIGRlc2NyaXB0aW9uOiAnRW5hYmxlIChQ ZXJsLWJhc2VkKSBUQVAgdGVzdHMnKQorCitvcHRpb24oJ3B5dGVzdCcsIHR5cGU6ICdmZWF0dXJl JywgdmFsdWU6ICdhdXRvJywKKyAgZGVzY3JpcHRpb246ICdFbmFibGUgKFB5dGhvbi1iYXNlZCkg cHl0ZXN0IHN1aXRlcycpCiAKIG9wdGlvbignaW5qZWN0aW9uX3BvaW50cycsIHR5cGU6ICdib29s ZWFuJywgdmFsdWU6IGZhbHNlLAogICBkZXNjcmlwdGlvbjogJ0VuYWJsZSBpbmplY3Rpb24gcG9p bnRzJykKQEAgLTE5NSw2ICsxOTgsOSBAQCBvcHRpb24oJ1BFUkwnLCB0eXBlOiAnc3RyaW5nJywg dmFsdWU6ICdwZXJsJywKIG9wdGlvbignUFJPVkUnLCB0eXBlOiAnc3RyaW5nJywgdmFsdWU6ICdw cm92ZScsCiAgIGRlc2NyaXB0aW9uOiAnUGF0aCB0byBwcm92ZSBiaW5hcnknKQogCitvcHRpb24o J1BZVEVTVCcsIHR5cGU6ICdhcnJheScsIHZhbHVlOiBbJ3B5dGVzdCcsICdweS50ZXN0J10sCisg IGRlc2NyaXB0aW9uOiAnUGF0aCB0byBweXRlc3QgYmluYXJ5JykKKwogb3B0aW9uKCdQWVRIT04n LCB0eXBlOiAnYXJyYXknLCB2YWx1ZTogWydweXRob24zJywgJ3B5dGhvbiddLAogICBkZXNjcmlw dGlvbjogJ1BhdGggdG8gcHl0aG9uIGJpbmFyeScpCiAKZGlmZiAtLWdpdCBhL3B5cHJvamVjdC50 b21sIGIvcHlwcm9qZWN0LnRvbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjYwYWJiNGQwNjU1Ci0tLSAvZGV2L251bGwKKysrIGIvcHlwcm9qZWN0LnRvbWwKQEAgLTAs MCArMSwyMSBAQAorW3Byb2plY3RdCituYW1lID0gInBvc3RncmVzcWwtaGFja2Vycy10b29saW5n IgordmVyc2lvbiA9ICIwLjEuMCIKK2Rlc2NyaXB0aW9uID0gIlB5dGVzdCBpbmZyYXN0cnVjdHVy ZSBmb3IgUG9zdGdyZVNRTCIKK3JlcXVpcmVzLXB5dGhvbiA9ICI+PTMuNiIKK2RlcGVuZGVuY2ll cyA9IFsKKyAgICAjIHB5dGVzdCA3LjAgd2FzIHRoZSBsYXN0IHZlcnNpb24gd2hpY2ggc3VwcG9y dGVkIFB5dGhvbiAzLjYsIGJ1dCB0aGUgQlNEcworICAgICMgaGF2ZSBzdGFydGVkIHB1dHRpbmcg OC54IGludG8gcG9ydHMsIHNvIHdlIHN1cHBvcnQgYm90aC4gKHB5dGVzdCA4IGNhbiBiZQorICAg ICMgdXNlZCB0aHJvdWdob3V0IG9uY2Ugd2UgZHJvcCBzdXBwb3J0IGZvciBQeXRob24gMy43LikK KyAgICAicHl0ZXN0ID49IDcuMCwgPCAxMCIsCisKKyAgICAjIEFueSBvdGhlciBkZXBlbmRlbmNp ZXMgYXJlIGVmZmVjdGl2ZWx5IG9wdGlvbmFsIChhZGRlZCBiZWxvdykuIFdlIGltcG9ydAorICAg ICMgdGhlc2UgbGlicmFyaWVzIHVzaW5nIHB5dGVzdC5pbXBvcnRvcnNraXAoKS4gU28gdGVzdHMg d2lsbCBiZSBza2lwcGVkIGlmCisgICAgIyB0aGV5IGFyZSBub3QgYXZhaWxhYmxlLgorXQorCitb dG9vbC5weXRlc3QuaW5pX29wdGlvbnNdCittaW52ZXJzaW9uID0gIjcuMCIKKworIyBDb21tb24g dGVzdCBjb2RlIGNhbiBiZSBmb3VuZCBoZXJlLgorcHl0aG9ucGF0aCA9IFsic3JjL3Rlc3QvcHl0 ZXN0Il0KZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5nbG9iYWwuaW4gYi9zcmMvTWFrZWZpbGUu Z2xvYmFsLmluCmluZGV4IDM3MWNkN2ViYTJjLi4xNjBjZGZmZDRmMSAxMDA2NDQKLS0tIGEvc3Jj L01ha2VmaWxlLmdsb2JhbC5pbgorKysgYi9zcmMvTWFrZWZpbGUuZ2xvYmFsLmluCkBAIC0yMTEs NiArMjExLDcgQEAgZW5hYmxlX2R0cmFjZQk9IEBlbmFibGVfZHRyYWNlQAogZW5hYmxlX2NvdmVy YWdlCT0gQGVuYWJsZV9jb3ZlcmFnZUAKIGVuYWJsZV9pbmplY3Rpb25fcG9pbnRzID0gQGVuYWJs ZV9pbmplY3Rpb25fcG9pbnRzQAogZW5hYmxlX3RhcF90ZXN0cwk9IEBlbmFibGVfdGFwX3Rlc3Rz QAorZW5hYmxlX3B5dGVzdAk9IEBlbmFibGVfcHl0ZXN0QAogCiBweXRob25faW5jbHVkZXNwZWMJ PSBAcHl0aG9uX2luY2x1ZGVzcGVjQAogcHl0aG9uX2xpYmRpcgkJPSBAcHl0aG9uX2xpYmRpckAK QEAgLTM1NCw2ICszNTUsNyBAQCBNU0dGTVQgID0gQE1TR0ZNVEAKIE1TR0ZNVF9GTEFHUyA9IEBN U0dGTVRfRkxBR1NACiBNU0dNRVJHRSA9IEBNU0dNRVJHRUAKIE9QRU5TU0wJPSBAT1BFTlNTTEAK K1BZVEVTVAk9IEBQWVRFU1RACiBQWVRIT04JPSBAUFlUSE9OQAogVEFSCT0gQFRBUkAKIFhHRVRU RVhUID0gQFhHRVRURVhUQApAQCAtNTA4LDYgKzUxMCwzMyBAQCBwcm92ZV9pbnN0YWxsY2hlY2sg PSBAZWNobyAiVEFQIHRlc3RzIG5vdCBlbmFibGVkLiBUcnkgY29uZmlndXJpbmcgd2l0aCAtLWVu YWJsZQogcHJvdmVfY2hlY2sgPSAkKHByb3ZlX2luc3RhbGxjaGVjaykKIGVuZGlmCiAKK2lmZXEg KCQoZW5hYmxlX3B5dGVzdCkseWVzKQorCitweXRlc3RfaW5zdGFsbGNoZWNrID0gQGVjaG8gIklu c3RhbGxjaGVjayBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBmb3IgcHl0ZXN0LiIKKworIyBX ZSBhbHNvIGNvbmZpZ3VyZSB0aGUgc2FtZSBQWVRIT05QQVRIIGluIHRoZSBweXRlc3Qgc2V0dGlu Z3MgaW4KKyMgcHlwcm9qZWN0LnRvbWwsIGJ1dCBweXRlc3QgdmVyc2lvbnMgYmVsb3cgOC40IG9u bHkgYWN0dWFsbHkgdXNlIHRoYXQgdmFsdWUKKyMgYWZ0ZXIgcGx1Z2luIGxvYWRpbmcuIFNvIHdl IG5lZWQgdG8gY29uZmlndXJlIGl0IGhlcmUgdG9vLiBUaGlzIHdvbid0IGhlbHAKKyMgcGVvcGxl IG1hbnVhbGx5IHJ1bm5pbmcgcHl0ZXN0IG91dHNpZGUgb2YgbWVzb24vbWFrZSwgYnV0IHdlIGV4 cGVjdCB0aG9zZSB0bworIyB1c2UgYSByZWNlbnQgZW5vdWdoIHZlcnNpb24gb2YgcHl0ZXN0IGFu eXdheSAoYW5kIGlmIG5vdCB0aGV5IGNhbiBtYW51YWxseQorIyBjb25maWd1cmUgUFlUSE9OUEFU SCB0b28pLgorZGVmaW5lIHB5dGVzdF9jaGVjaworZWNobyAiIyArKysgcHl0ZXN0IGNoZWNrIGlu ICQoc3ViZGlyKSArKysiICYmIFwKK3JtIC1yZiAnJChDVVJESVIpJy90bXBfY2hlY2sgJiYgXAor JChNS0RJUl9QKSAnJChDVVJESVIpJy90bXBfY2hlY2sgJiYgXAorY2QgJChzcmNkaXIpICYmIFwK KyAgIFRFU1RMT0dESVI9JyQoQ1VSRElSKS90bXBfY2hlY2svbG9nJyBcCisgICBURVNUREFUQURJ Uj0nJChDVVJESVIpL3RtcF9jaGVjaycgXAorICAgUFlUSE9OUEFUSD0nJChhYnNfdG9wX3NyY2Rp cikvc3JjL3Rlc3QvcHl0ZXN0OiQkUFlUSE9OUEFUSCcgXAorICAgJCh3aXRoX3RlbXBfaW5zdGFs bCkgXAorICAgJChQWVRFU1QpIC1jICckKGFic190b3Bfc3JjZGlyKS9weXByb2plY3QudG9tbCcg LS12ZXJib3NlIC1yYSAuL3B5dC8KK2VuZGVmCisKK2Vsc2UKK3B5dGVzdF9pbnN0YWxsY2hlY2sg PSBAZWNobyAicHl0ZXN0IGlzIG5vdCBlbmFibGVkLiBUcnkgY29uZmlndXJpbmcgd2l0aCAtLWVu YWJsZS1weXRlc3QiCitweXRlc3RfY2hlY2sgPSAkKHB5dGVzdF9pbnN0YWxsY2hlY2spCitlbmRp ZgorCiAjIEluc3RhbGxhdGlvbi4KIAogaW5zdGFsbF9iaW4gPSBAaW5zdGFsbF9iaW5ACmRpZmYg LS1naXQgYS9zcmMvbWFrZWZpbGVzL21lc29uLmJ1aWxkIGIvc3JjL21ha2VmaWxlcy9tZXNvbi5i dWlsZAppbmRleCAxMjRkZjJjODU4Mi4uNzc4YjU5YzlhZmIgMTAwNjQ0Ci0tLSBhL3NyYy9tYWtl ZmlsZXMvbWVzb24uYnVpbGQKKysrIGIvc3JjL21ha2VmaWxlcy9tZXNvbi5idWlsZApAQCAtNTYs NiArNTYsOCBAQCBwZ3hzX2t2ID0gewogICAnZW5hYmxlX25scyc6IGxpYmludGwuZm91bmQoKSA/ ICd5ZXMnIDogJ25vJywKICAgJ2VuYWJsZV9pbmplY3Rpb25fcG9pbnRzJzogZ2V0X29wdGlvbign aW5qZWN0aW9uX3BvaW50cycpID8gJ3llcycgOiAnbm8nLAogICAnZW5hYmxlX3RhcF90ZXN0cyc6 IHRhcF90ZXN0c19lbmFibGVkID8gJ3llcycgOiAnbm8nLAorICAnZW5hYmxlX3B5dGVzdCc6IHB5 dGVzdF9lbmFibGVkID8gJ3llcycgOiAnbm8nLAorICAnUFlURVNUJzogcHl0ZXN0X2VuYWJsZWQg PyAnICcuam9pbihweXRlc3RfY21kKSA6ICcnLAogICAnZW5hYmxlX2RlYnVnJzogZ2V0X29wdGlv bignZGVidWcnKSA/ICd5ZXMnIDogJ25vJywKICAgJ2VuYWJsZV9jb3ZlcmFnZSc6ICdubycsCiAg ICdlbmFibGVfZHRyYWNlJzogZHRyYWNlLmZvdW5kKCkgPyAneWVzJyA6ICdubycsCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9NYWtlZmlsZSBiL3NyYy90ZXN0L01ha2VmaWxlCmluZGV4IDNlYjBhMDZh YmI0Li4wYmU5NzcxZDcxZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvTWFrZWZpbGUKKysrIGIvc3Jj L3Rlc3QvTWFrZWZpbGUKQEAgLTE4LDYgKzE4LDcgQEAgU1VCRElSUyA9IFwKIAltb2R1bGVzIFwK IAlwZXJsIFwKIAlwb3N0bWFzdGVyIFwKKwlweXRlc3QgXAogCXJlY292ZXJ5IFwKIAlyZWdyZXNz IFwKIAlzdWJzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21lc29uLmJ1aWxkIGIvc3Jj L3Rlc3QvbWVzb24uYnVpbGQKaW5kZXggY2Q0NWNiZjU3ZmIuLjA5MTc1ZjBlYWVhIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tZXNvbi5idWlsZApAQCAt NSw2ICs1LDcgQEAgc3ViZGlyKCdpc29sYXRpb24nKQogCiBzdWJkaXIoJ2F1dGhlbnRpY2F0aW9u JykKIHN1YmRpcigncG9zdG1hc3RlcicpCitzdWJkaXIoJ3B5dGVzdCcpCiBzdWJkaXIoJ3JlY292 ZXJ5JykKIHN1YmRpcignc3Vic2NyaXB0aW9uJykKIHN1YmRpcignbW9kdWxlcycpCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9weXRlc3QvTWFrZWZpbGUgYi9zcmMvdGVzdC9weXRlc3QvTWFrZWZpbGUK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJiZGNhOTZjY2JlCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0ZXN0L01ha2VmaWxlCkBAIC0wLDAgKzEsMjAgQEAK KyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIE1ha2VmaWxlIGZvciBweXRlc3QKKyMKKyMgUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisjIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5p dmVyc2l0eSBvZiBDYWxpZm9ybmlhCisjCisjIHNyYy90ZXN0L3B5dGVzdC9NYWtlZmlsZQorIwor Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKworc3ViZGlyID0gc3JjL3Rlc3QvcHl0ZXN0Cit0b3BfYnVpbGRk aXIgPSAuLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2Jh bAorCitjaGVjazoKKwkkKHB5dGVzdF9jaGVjaykKKworY2xlYW4gZGlzdGNsZWFuIG1haW50YWlu ZXItY2xlYW46CisJcm0gLXJmIHRtcF9jaGVjawpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0ZXN0 L1JFQURNRSBiL3NyYy90ZXN0L3B5dGVzdC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjEzMzNlZDc3YjdlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv cHl0ZXN0L1JFQURNRQpAQCAtMCwwICsxIEBACitUT0RPCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9w eXRlc3QvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9weXRlc3QvbWVzb24uYnVpbGQKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIxZjYwNjFiMzA3Ci0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvcHl0ZXN0L21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMTUgQEAKKyMgQ29w eXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitp ZiBub3QgcHl0ZXN0X2VuYWJsZWQKKyAgc3ViZGlyX2RvbmUoKQorZW5kaWYKKwordGVzdHMgKz0g eworICAnbmFtZSc6ICdweXRlc3QnLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIo KSwKKyAgJ2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3B5dGVzdCc6IHsKKyAg ICAndGVzdHMnOiBbCisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGVz dC9wZ3RhcC5weSBiL3NyYy90ZXN0L3B5dGVzdC9wZ3RhcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYzkyY2FkOThkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9weXRlc3QvcGd0YXAucHkKQEAgLTAsMCArMSwxOTggQEAKKyMgQ29weXJpZ2h0IChjKSAy MDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitpbXBvcnQgb3MKK2lt cG9ydCBzeXMKKworaW1wb3J0IHB5dGVzdAorCisjCisjIEhlbHBlcnMKKyMKKworCitjbGFzcyBU QVA6CisgICAgIiIiCisgICAgQSBiYXNpYyBBUEkgZm9yIHJlcG9ydGluZyB2aWEgdGhlIFRBUCBw cm90b2NvbC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2Vs Zi5jb3VudCA9IDAKKworICAgICAgICAjIFhYWCBpbnRlcmFjdHMgcG9vcmx5IHdpdGggdGVzdHdy YXAncyBib2lsZXJwbGF0ZSBkaWFnbm9zdGljcworICAgICAgICAjIHNlbGYucHJpbnQoIlRBUCB2 ZXJzaW9uIDEzIikKKworICAgIGRlZiBleHBlY3Qoc2VsZiwgbnVtOiBpbnQpOgorICAgICAgICBz ZWxmLnByaW50KGYiMS4ue251bX0iKQorCisgICAgZGVmIHByaW50KHNlbGYsICphcmdzKToKKyAg ICAgICAgcHJpbnQoKmFyZ3MsIGZpbGU9c3lzLl9fc3Rkb3V0X18pCisKKyAgICBkZWYgb2soc2Vs ZiwgbmFtZTogc3RyKToKKyAgICAgICAgc2VsZi5jb3VudCArPSAxCisgICAgICAgIHNlbGYucHJp bnQoIm9rIiwgc2VsZi5jb3VudCwgIi0iLCBuYW1lKQorCisgICAgZGVmIHNraXAoc2VsZiwgbmFt ZTogc3RyLCByZWFzb246IHN0cik6CisgICAgICAgIHNlbGYuY291bnQgKz0gMQorICAgICAgICBz ZWxmLnByaW50KCJvayIsIHNlbGYuY291bnQsICItIiwgbmFtZSwgIiMgc2tpcCIsIHJlYXNvbikK KworICAgIGRlZiBmYWlsKHNlbGYsIG5hbWU6IHN0ciwgZGV0YWlsczogc3RyKToKKyAgICAgICAg c2VsZi5jb3VudCArPSAxCisgICAgICAgIHNlbGYucHJpbnQoIm5vdCBvayIsIHNlbGYuY291bnQs ICItIiwgbmFtZSkKKworICAgICAgICAjIG10ZXN0IGhhcyBzb21lIG9kZCBiZWhhdmlvciBhcm91 bmQgVEFQIHRlc3RzIHdoZXJlIGl0IHdvbid0IHByaW50CisgICAgICAgICMgZGlhZ25vc3RpY3Mg b24gZmFpbHVyZSBpZiB0aGV5J3JlIHBhcnQgb2YgdGhlIHN0ZG91dCBzdHJlYW0sIHNvIHdlCisg ICAgICAgICMgbWlnaHQgYXMgd2VsbCBqdXN0IGR1bXAgdGhlIGRldGFpbHMgZGlyZWN0bHkgdG8g c3RkZXJyIGluc3RlYWQuCisgICAgICAgIHByaW50KGRldGFpbHMsIGZpbGU9c3lzLl9fc3RkZXJy X18pCisKKwordGFwID0gVEFQKCkKKworCitjbGFzcyBUZXN0Tm90ZXM6CisgICAgIiIiCisgICAg QW5ub3RhdGlvbnMgZm9yIGEgc2luZ2xlIHRlc3QuIFRoZSBleGlzdGluZyBweXRlc3QgaG9va3Mg a2VlcCBpbnRlcmVzdGluZworICAgIGluZm9ybWF0aW9uIHNvbWV3aGF0IHNlcGFyYXRlZCBhY3Jv c3MgdGhlIGRpZmZlcmVudCBzdGFnZXMKKyAgICAoc2V0dXAvdGVzdC90ZWFyZG93biksIHNvIHRo aXMgY2xhc3MgaXMgdXNlZCB0byBjb3JyZWxhdGUgdGhlbS4KKyAgICAiIiIKKworICAgIHNraXBw ZWQgPSBGYWxzZQorICAgIHNraXBfcmVhc29uID0gTm9uZQorCisgICAgZmFpbGVkID0gRmFsc2UK KyAgICBkZXRhaWxzID0gIiIKKworCisjIFJlZ2lzdGVyIGEgY3VzdG9tIGtleSBpbiB0aGUgc3Rh c2ggZGljdGlvbmFyeSBmb3Iga2VlcGluZyBvdXIgVGVzdE5vdGVzLgorbm90ZXNfa2V5ID0gcHl0 ZXN0LlN0YXNoS2V5W1Rlc3ROb3Rlc10oKQorCisKKyMKKyMgSG9vayBJbXBsZW1lbnRhdGlvbnMK KyMKKworCitAcHl0ZXN0Lmhvb2tpbXBsKHRyeWZpcnN0PVRydWUpCitkZWYgcHl0ZXN0X2NvbmZp Z3VyZShjb25maWcpOgorICAgICIiIgorICAgIEhpamFja3MgdGhlIHN0YW5kYXJkIHN0cmVhbXMg YXMgc29vbiBhcyBwb3NzaWJsZSBkdXJpbmcgcHl0ZXN0IHN0YXJ0dXAuIFRoZQorICAgIHB5dGVz dC1mb3JtYXR0ZWQgb3V0cHV0IGdldHMgbG9nZ2VkIHRvIGZpbGUgaW5zdGVhZCwgYW5kIHdlJ2xs IHVzZSB0aGUKKyAgICBvcmlnaW5hbCBzeXMuX19zdGRvdXRfXy9fX3N0ZGVycl9fIHN0cmVhbXMg Zm9yIHRoZSBUQVAgcHJvdG9jb2wuCisgICAgIiIiCisgICAgbG9nZGlyID0gb3MuZ2V0ZW52KCJU RVNUTE9HRElSIikKKyAgICBpZiBub3QgbG9nZGlyOgorICAgICAgICByYWlzZSBSdW50aW1lRXJy b3IoInBndGFwIHJlcXVpcmVzIHRoZSBURVNUTE9HRElSIGVudnZhciB0byBiZSBzZXQiKQorCisg ICAgb3MubWFrZWRpcnMobG9nZGlyKQorICAgIGxvZ3BhdGggPSBvcy5wYXRoLmpvaW4obG9nZGly LCAicHl0ZXN0LmxvZyIpCisgICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIgPSBvcGVuKGxvZ3Bh dGgsICJhIiwgYnVmZmVyaW5nPTEpCisKKworQHB5dGVzdC5ob29raW1wbCh0cnlsYXN0PVRydWUp CitkZWYgcHl0ZXN0X3Nlc3Npb25maW5pc2goc2Vzc2lvbiwgZXhpdHN0YXR1cyk6CisgICAgIiIi CisgICAgU3VwcHJlc3NlcyBub256ZXJvIGV4aXQgY29kZXMgZHVlIHRvIGZhaWxlZCB0ZXN0cy4g KEluIHRoYXQgY2FzZSwgd2Ugd2FudAorICAgIE1lc29uIHRvIHJlcG9ydCBhIGZhaWx1cmUgY291 bnQsIG5vdCBhIGdlbmVyaWMgRVJST1IuKQorICAgICIiIgorICAgIGlmIGV4aXRzdGF0dXMgPT0g cHl0ZXN0LkV4aXRDb2RlLlRFU1RTX0ZBSUxFRDoKKyAgICAgICAgc2Vzc2lvbi5leGl0c3RhdHVz ID0gcHl0ZXN0LkV4aXRDb2RlLk9LCisKKworQHB5dGVzdC5ob29raW1wbAorZGVmIHB5dGVzdF9j b2xsZWN0cmVwb3J0KHJlcG9ydCk6CisgICAgIyBJbmNsdWRlIGNvbGxlY3Rpb24gZmFpbHVyZXMg ZGlyZWN0bHkgaW4gTWVzb24gZXJyb3Igb3V0cHV0LgorICAgIGlmIHJlcG9ydC5mYWlsZWQ6Cisg ICAgICAgIHByaW50KHJlcG9ydC5sb25ncmVwcnRleHQsIGZpbGU9c3lzLl9fc3RkZXJyX18pCisK KworQHB5dGVzdC5ob29raW1wbAorZGVmIHB5dGVzdF9pbnRlcm5hbGVycm9yKGV4Y3JlcHIsIGV4 Y2luZm8pOgorICAgICMgSW5jbHVkZSBpbnRlcm5hbCBlcnJvcnMgZGlyZWN0bHkgaW4gTWVzb24g ZXJyb3Igb3V0cHV0LgorICAgIHByaW50KGV4Y3JlcHIsIGZpbGU9c3lzLl9fc3RkZXJyX18pCisK KworIworIyBIb29rIFdyYXBwZXJzCisjCisjIEluIHB5dGVzdCBwYXJsYW5jZSwgYSAid3JhcHBl ciIgZm9yIGEgaG9vayBjYW4gaW5zcGVjdCBhbmQgb3B0aW9uYWxseSBtb2RpZnkKKyMgZXhpc3Rp bmcgaG9va3MnIGJlaGF2aW9yLCBidXQgaXQgZG9lcyBub3QgcmVwbGFjZSB0aGUgaG9vayBjaGFp bi4gVGhpcyBpcyBkb25lCisjIHRocm91Z2ggYSBnZW5lcmF0b3Itc3R5bGUgQVBJIHdoaWNoIGNo YWlucyB0aGUgaG9va3MgdG9nZXRoZXIgKHNlZSB0aGUgdXNlIG9mCisjIGB5aWVsZGApLgorIwor CisKK0BweXRlc3QuaG9va2ltcGwoaG9va3dyYXBwZXI9VHJ1ZSkKK2RlZiBweXRlc3RfY29sbGVj dGlvbihzZXNzaW9uKToKKyAgICAiIiJSZXBvcnRzIHRoZSBudW1iZXIgb2YgZ2F0aGVyZWQgdGVz dHMgYWZ0ZXIgY29sbGVjdGlvbiBpcyBmaW5pc2hlZC4iIiIKKyAgICByZXMgPSB5aWVsZAorICAg IHRhcC5leHBlY3Qoc2Vzc2lvbi50ZXN0c2NvbGxlY3RlZCkKKyAgICByZXR1cm4gcmVzCisKKwor QHB5dGVzdC5ob29raW1wbChob29rd3JhcHBlcj1UcnVlKQorZGVmIHB5dGVzdF9ydW50ZXN0X21h a2VyZXBvcnQoaXRlbSwgY2FsbCk6CisgICAgIiIiCisgICAgQW5ub3RhdGVzIGEgdGVzdCBpdGVt IHdpdGggb3VyIFRlc3ROb3RlcyBhbmQgZ3JhYnMgcmVsZXZhbnQgaW5mb3JtYXRpb24gZm9yCisg ICAgcmVwb3J0aW5nLgorCisgICAgVGhpcyBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgcGVyIHRl c3QsIHNvIGl0J3Mgbm90IGNvcnJlY3QgdG8gcHJpbnQgdGhlIFRBUAorICAgIHJlc3VsdCBoZXJl LiAoQSB0ZXN0IGFuZCBpdHMgdGVhcmRvd24gc3RhZ2UgY2FuIGJvdGggZmFpbCwgYW5kIHdlIHdh bnQgdG8KKyAgICBzZWUgdGhlIGRldGFpbHMgZm9yIGJvdGguKSBXZSBpbnN0ZWFkIGNvbWJpbmUg YWxsIHRoZSBpbmZvcm1hdGlvbiBmb3IgdXNlIGJ5CisgICAgb3VyIHB5dGVzdF9ydW50ZXN0X3By b3RvY29sIHdyYXBwZXIgbGF0ZXIgb24uCisgICAgIiIiCisgICAgcmVzID0geWllbGQKKworICAg IGlmIG5vdGVzX2tleSBub3QgaW4gaXRlbS5zdGFzaDoKKyAgICAgICAgaXRlbS5zdGFzaFtub3Rl c19rZXldID0gVGVzdE5vdGVzKCkKKyAgICBub3RlcyA9IGl0ZW0uc3Rhc2hbbm90ZXNfa2V5XQor CisgICAgcmVwb3J0ID0gcmVzLmdldF9yZXN1bHQoKQorICAgIGlmIHJlcG9ydC5wYXNzZWQ6Cisg ICAgICAgIHBhc3MgICMgbm8gYW5ub3RhdGlvbiBuZWVkZWQKKworICAgIGVsaWYgcmVwb3J0LnNr aXBwZWQ6CisgICAgICAgIG5vdGVzLnNraXBwZWQgPSBUcnVlCisgICAgICAgIF8sIF8sIG5vdGVz LnNraXBfcmVhc29uID0gcmVwb3J0LmxvbmdyZXByCisKKyAgICBlbGlmIHJlcG9ydC5mYWlsZWQ6 CisgICAgICAgIG5vdGVzLmZhaWxlZCA9IFRydWUKKworICAgICAgICBpZiBub3Qgbm90ZXMuZGV0 YWlsczoKKyAgICAgICAgICAgIG5vdGVzLmRldGFpbHMgKz0gIns6X143Mn1cblxuIi5mb3JtYXQo ZiIge3JlcG9ydC5oZWFkX2xpbmV9ICIpCisKKyAgICAgICAgaWYgcmVwb3J0LndoZW4gaW4gKCJz ZXR1cCIsICJ0ZWFyZG93biIpOgorICAgICAgICAgICAgbm90ZXMuZGV0YWlscyArPSAiXG57Ol9e NzJ9XG5cbiIuZm9ybWF0KAorICAgICAgICAgICAgICAgIGYiIEVycm9yIGR1cmluZyB7cmVwb3J0 LndoZW59IG9mIHtyZXBvcnQuaGVhZF9saW5lfSAiCisgICAgICAgICAgICApCisKKyAgICAgICAg bm90ZXMuZGV0YWlscyArPSByZXBvcnQubG9uZ3JlcHJ0ZXh0ICsgIlxuIgorCisgICAgICAgICMg SW5jbHVkZSBjYXB0dXJlZCBzdGRvdXQvc3RkZXJyL2xvZyBpbiBmYWlsdXJlIG91dHB1dAorICAg ICAgICBmb3Igc2VjdGlvbl9uYW1lLCBzZWN0aW9uX2NvbnRlbnQgaW4gcmVwb3J0LnNlY3Rpb25z OgorICAgICAgICAgICAgaWYgc2VjdGlvbl9jb250ZW50LnN0cmlwKCk6CisgICAgICAgICAgICAg ICAgbm90ZXMuZGV0YWlscyArPSAiXG57Oi1eNzJ9XG4iLmZvcm1hdChmIiB7c2VjdGlvbl9uYW1l fSAiKQorICAgICAgICAgICAgICAgIG5vdGVzLmRldGFpbHMgKz0gc2VjdGlvbl9jb250ZW50ICsg IlxuIgorCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJweXRlc3RfcnVu dGVzdF9tYWtlcmVwb3J0IHJlY2VpdmVkIHVua25vd24gdGVzdCBzdGF0dXMiKQorCisgICAgcmV0 dXJuIHJlcworCisKK0BweXRlc3QuaG9va2ltcGwoaG9va3dyYXBwZXI9VHJ1ZSkKK2RlZiBweXRl c3RfcnVudGVzdF9wcm90b2NvbChpdGVtLCBuZXh0aXRlbSk6CisgICAgIiIiCisgICAgUmVwb3J0 cyB0aGUgVEFQIHJlc3VsdCBmb3IgdGhpcyB0ZXN0IGl0ZW0gdXNpbmcgb3VyIGdhdGhlcmVkIFRl c3ROb3Rlcy4KKyAgICAiIiIKKyAgICByZXMgPSB5aWVsZAorCisgICAgYXNzZXJ0IG5vdGVzX2tl eSBpbiBpdGVtLnN0YXNoLCAicGd0YXAgZGlkbid0IGFubm90YXRlIGEgdGVzdCBpdGVtPyIKKyAg ICBub3RlcyA9IGl0ZW0uc3Rhc2hbbm90ZXNfa2V5XQorCisgICAgaWYgbm90ZXMuZmFpbGVkOgor ICAgICAgICB0YXAuZmFpbChpdGVtLm5vZGVpZCwgbm90ZXMuZGV0YWlscykKKyAgICBlbGlmIG5v dGVzLnNraXBwZWQ6CisgICAgICAgIHRhcC5za2lwKGl0ZW0ubm9kZWlkLCBub3Rlcy5za2lwX3Jl YXNvbikKKyAgICBlbHNlOgorICAgICAgICB0YXAub2soaXRlbS5ub2RlaWQpCisKKyAgICByZXR1 cm4gcmVzCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvdGVzdHdyYXAgYi9zcmMvdG9vbHMvdGVzdHdy YXAKaW5kZXggZTkxMjk2ZWNkMTUuLjM0NmY4NmI4ZWEzIDEwMDc1NQotLS0gYS9zcmMvdG9vbHMv dGVzdHdyYXAKKysrIGIvc3JjL3Rvb2xzL3Rlc3R3cmFwCkBAIC00Miw3ICs0MiwxMSBAQCBvcGVu KG9zLnBhdGguam9pbih0ZXN0ZGlyLCAndGVzdC5zdGFydCcpLCAneCcpCiAKIGVudl9kaWN0ID0g eyoqb3MuZW52aXJvbiwKICAgICAgICAgICAgICdURVNUREFUQURJUic6IG9zLnBhdGguam9pbih0 ZXN0ZGlyLCAnZGF0YScpLAotICAgICAgICAgICAgJ1RFU1RMT0dESVInOiBvcy5wYXRoLmpvaW4o dGVzdGRpciwgJ2xvZycpfQorICAgICAgICAgICAgJ1RFU1RMT0dESVInOiBvcy5wYXRoLmpvaW4o dGVzdGRpciwgJ2xvZycpLAorICAgICAgICAgICAgIyBQcmV2ZW50IGVtaXR0aW5nIHRlcm1pbmFs IGNhcGFiaWxpdHkgc2VxdWVuY2VzIHRoYXQgcG9sbHV0ZSB0aGUKKyAgICAgICAgICAgICMgVEFQ IG91dHB1dCBzdHJlYW0gKGkuZS5cMDMzWz8xMDM0aCkuIFRoaXMgaGFwcGVucyBvbiBPcGVuQlNE IHdpdGgKKyAgICAgICAgICAgICMgcHl0ZXN0IGZvciB1bmtub3duIHJlYXNvbnMuCisgICAgICAg ICAgICAnVEVSTSc6ICcnfQogCiAKICMgVGhlIGNvbmZpZ3VyYXRpb24gdGltZSB2YWx1ZSBvZiBQ R19URVNUX0VYVFJBIGlzIHN1cHBsaWVkIHZpYSBhcmd1bWVudAoKYmFzZS1jb21taXQ6IDMxZGRi YjM4ZWVmZjYwYWQ1MzUzNzY4Yzc0MTZmZWEzYTBlY2FmY2UKLS0gCjIuNTIuMAoK --baaef3372e886fe21dfd6cae3d53a904ae10bf2be12ea57b7aa5066ea5c7 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0002-Add-pytest-infrastructure-to-interact-with-Postgr.patch Content-Type: text/x-patch; charset=utf-8; name=v9-0002-Add-pytest-infrastructure-to-interact-with-Postgr.patch RnJvbSBlYmQwZGMyMjE4YTc0NGMwYzk0MTgwNDcyZGM5MmE0YWI5MDE5OTlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBUdWUsIDE2IERlYyAyMDI1IDA5OjI1OjQ4ICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 OSAyLzVdIEFkZCBweXRlc3QgaW5mcmFzdHJ1Y3R1cmUgdG8gaW50ZXJhY3Qgd2l0aCBQb3N0Z3Jl U1FMCiBzZXJ2ZXJzCgpUaGlzIGFkZHMgZnVuY3Rpb25hbGl0eSB0byB0aGUgcHl0ZXN0IGluZnJh c3RydWN0dXJlIHRoYXQgYWxsb3dzIHRlc3RzCnRvIGRvIGNvbW1vbiB0aGluZ3Mgd2l0aCBQb3N0 Z3JlU1FMIHNlcnZlcnMgbGlrZToKLSBjcmVhdGluZwotIHN0YXJ0aW5nCi0gc3RvcHBpbmcKLSBj b25uZWN0aW5nCi0gcnVubmluZyBxdWVyaWVzCi0gaGFuZGxpbmcgZXJyb3JzCgpUaGUgZ29hbCBv ZiB0aGlzIGluZnJhc3RydWN0dXJlIGlzIHRvIGJlIHNvIGVhc3kgdG8gdXNlIHRoYXQgdGhlIGFj dHVhbAp0ZXN0cyByZWFsbHkgb25seSBjb250YWluIHRoZSBsb2dpYyB0byB0ZXN0IHRoZSBiZWhh dmlvdXIgdGhhdCB0aGUgdGVzdHMKYXJlIHRlc3RpbmcsIGFzIG9wcG9zZWQgdG8gYSBidW5jaCBv ZiBib2lsZXJwbGF0ZS4gRXhhbXBsZXMgb2YgdGhpcyBhcmU6CgpUeXBlcyBnZXQgY29udmVydGVk IHRvIHRoZWlyIFB5dGhvbiBjb3VudGVyIHBhcnRzIGF1dG9tYXRpY2FsbHkuIEVycm9ycwpiZWNv bWUgYWN0dWFsIFB5dGhvbiBleGNlcHRpb25zLiBSZXN1bHRzIG9mIHF1ZXJpZXMgdGhhdCBvbmx5 IHJldHVybiBhCnNpbmdsZSByb3cgb3IgY2VsbCBhcmUgdW5wYWNrZWQgYXV0b21hdGljYWxseSwg c28geW91IGRvbid0IGhhdmUgdG8gZG8Kcm93c1swXVswXSBpZiB0aGUgcXVlcnkgb25seSByZXR1 cm5zIGEgc2luZ2xlIGNlbGwuCgpUaGUgb25seSBuZXcgdGVzdHMgdGhhdCBhcmUgcGFydCBvZiB0 aGlzIGNvbW1pdCBhcmUgdGVzdHMgdGhhdCBjb3Zlcgp0aGlzIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1 cmUgaXRzZWxmLiBJdCdzIGRlYmF0YWJsZSB3aGV0aGVyIHN1Y2ggdGVzdHMKYXJlIHVzZWZ1bCBs b25nIHRlcm0sIGJlY2F1c2UgYW55IGluZnJhc3RydWN0dXJlIHRoYXQncyB1bnVzZWQgYnkgYWN0 dWFsCnRlc3RzIHNob3VsZCBwcm9iYWJseSBub3QgZXhpc3QuIEZvciBub3cgaXQgc2VlbXMgZ29v ZCB0byB0ZXN0IHRoaXMKYmFzaWMgZnVuY3Rpb25hbGl0eSB0aG91Z2gsIGJvdGggdG8gbWFrZSBz dXJlIHdlIGRvbid0IGJyZWFrIGl0IGJlZm9yZQpjb21taXR0aW5nIGFjdHVhbCB0ZXN0cyB0aGF0 IHVzZSBpdCwgYW5kIGFsc28gYXMgYW4gZXhhbXBsZSBmb3IgcGVvcGxlCndyaXRpbmcgbmV3IHRl c3RzLgotLS0KIGRvYy9zcmMvc2dtbC9yZWdyZXNzLnNnbWwgICAgICAgICAgICAgICAgIHwgIDY2 ICsrLQogcHlwcm9qZWN0LnRvbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwog c3JjL3Rlc3QvcHl0ZXN0L1JFQURNRSAgICAgICAgICAgICAgICAgICAgfCAxNTQgKysrKysrLQog c3JjL3Rlc3QvcHl0ZXN0L2xpYnBxL19faW5pdF9fLnB5ICAgICAgICAgfCAgMzUgKysKIHNyYy90 ZXN0L3B5dGVzdC9saWJwcS9fY29yZS5weSAgICAgICAgICAgIHwgNDg4ICsrKysrKysrKysrKysr KysrKysrKysKIHNyYy90ZXN0L3B5dGVzdC9saWJwcS9lcnJvcnMucHkgICAgICAgICAgIHwgIDYy ICsrKwogc3JjL3Rlc3QvcHl0ZXN0L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgfCAgIDQgKwog c3JjL3Rlc3QvcHl0ZXN0L3B5cGcvX19pbml0X18ucHkgICAgICAgICAgfCAgMTAgKwogc3JjL3Rl c3QvcHl0ZXN0L3B5cGcvX2Vudi5weSAgICAgICAgICAgICAgfCAgNzIgKysrKwogc3JjL3Rlc3Qv cHl0ZXN0L3B5cGcvZml4dHVyZXMucHkgICAgICAgICAgfCAzMzUgKysrKysrKysrKysrKysrCiBz cmMvdGVzdC9weXRlc3QvcHlwZy9zZXJ2ZXIucHkgICAgICAgICAgICB8IDQ3MCArKysrKysrKysr KysrKysrKysrKysKIHNyYy90ZXN0L3B5dGVzdC9weXBnL3V0aWwucHkgICAgICAgICAgICAgIHwg IDQyICsrCiBzcmMvdGVzdC9weXRlc3QvcHl0L2NvbmZ0ZXN0LnB5ICAgICAgICAgICB8ICAgMSAr CiBzcmMvdGVzdC9weXRlc3QvcHl0L3Rlc3RfZXJyb3JzLnB5ICAgICAgICB8ICAzNCArKwogc3Jj L3Rlc3QvcHl0ZXN0L3B5dC90ZXN0X2xpYnBxLnB5ICAgICAgICAgfCAxNzIgKysrKysrKysKIHNy Yy90ZXN0L3B5dGVzdC9weXQvdGVzdF9tdWx0aV9zZXJ2ZXIucHkgIHwgIDQ2ICsrCiBzcmMvdGVz dC9weXRlc3QvcHl0L3Rlc3RfcXVlcnlfaGVscGVycy5weSB8IDM0NyArKysrKysrKysrKysrKysK IDE3IGZpbGVzIGNoYW5nZWQsIDIzMzkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRlc3QvbGlicHEvX19pbml0X18ucHkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRlc3QvbGlicHEvX2NvcmUucHkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9weXRlc3QvbGlicHEvZXJyb3JzLnB5CiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvcHl0ZXN0L3B5cGcvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9weXRlc3QvcHlwZy9fZW52LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv cHl0ZXN0L3B5cGcvZml4dHVyZXMucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRl c3QvcHlwZy9zZXJ2ZXIucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRlc3QvcHlw Zy91dGlsLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0ZXN0L3B5dC9jb25mdGVz dC5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3B5dGVzdC9weXQvdGVzdF9lcnJvcnMu cHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRlc3QvcHl0L3Rlc3RfbGlicHEucHkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRlc3QvcHl0L3Rlc3RfbXVsdGlfc2VydmVy LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0ZXN0L3B5dC90ZXN0X3F1ZXJ5X2hl bHBlcnMucHkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVncmVzcy5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3JlZ3Jlc3Muc2dtbAppbmRleCBkODBkZDQ2YzVmZC4uMmQ4NWVkYWNlYzcgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWdyZXNzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZ3Jl c3Muc2dtbApAQCAtODQwLDcgKzg0MCw3IEBAIGZsb2F0NDpvdXQ6LiotLiotY3lnd2luLio9Zmxv YXQ0LW1pc3JvdW5kZWQtaW5wdXQub3V0CiAgIDwvc2VjdDE+CiAKICAgPHNlY3QxIGlkPSJyZWdy ZXNzLXRhcCI+Ci0gICA8dGl0bGU+VEFQIFRlc3RzPC90aXRsZT4KKyAgIDx0aXRsZT5QZXJsIFRB UCBUZXN0czwvdGl0bGU+CiAKICAgIDxwYXJhPgogICAgIFZhcmlvdXMgdGVzdHMsIHBhcnRpY3Vs YXJseSB0aGUgY2xpZW50IHByb2dyYW0gdGVzdHMKQEAgLTkyOSw2ICs5MjksNzAgQEAgUEdfVEVT VF9OT0NMRUFOPTEgbWFrZSAtQyBzcmMvYmluL3BnX2R1bXAgY2hlY2sKIAogICA8L3NlY3QxPgog CisgIDxzZWN0MSBpZD0icmVncmVzcy1weXRlc3QiPgorICAgPHRpdGxlPlB5dGVzdCBUZXN0czwv dGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRlc3RzIGluIDxmaWxlbmFtZT5weXQ8L2ZpbGVuYW1l PiBkaXJlY3RvcmllcyB1c2UgdGhlIFB5dGhvbgorICAgIDxhcHBsaWNhdGlvbj5weXRlc3Q8L2Fw cGxpY2F0aW9uPiBmcmFtZXdvcmsuIFRoZXNlIHRlc3RzIHByb3ZpZGUgYQorICAgIGNvbnZlbmll bnQgd2F5IHRvIHRlc3QgbGlicHEgY2xpZW50IGZ1bmN0aW9uYWxpdHkgYW5kIHNjZW5hcmlvcyBy ZXF1aXJpbmcKKyAgICBtdWx0aXBsZSBQb3N0Z3JlU1FMIHNlcnZlciBpbnN0YW5jZXMuCisgICA8 L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSBweXRlc3QgdGVzdHMgcmVxdWlyZSA8cHJvZHVj dG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHRvIGJlCisgICAgY29uZmlndXJlZCB3aXRo IHRoZSBvcHRpb24gPG9wdGlvbj4tLWVuYWJsZS1weXRlc3Q8L29wdGlvbj4gKG9yCisgICAgPG9w dGlvbj4tRHB5dGVzdD1lbmFibGVkPC9vcHRpb24+IGZvciBNZXNvbiBidWlsZHMpLiBZb3UgYWxz byBuZWVkCisgICAgPGFwcGxpY2F0aW9uPnB5dGVzdDwvYXBwbGljYXRpb24+IGluc3RhbGxlZC4g WW91IGNhbiBlaXRoZXIgaW5zdGFsbCBpdAorICAgIHN5c3RlbS13aWRlLCBvciBjcmVhdGUgYSB2 aXJ0dWFsIGVudmlyb25tZW50IGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5OgorPHByb2dyYW1saXN0 aW5nPgorcHl0aG9uIC1tIHZlbnYgLnZlbnYKK3NvdXJjZSAudmVudi9iaW4vYWN0aXZhdGUKK3Bp cCBpbnN0YWxsIC4KKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgQWx0ZXJuYXRpdmVseSwgaWYgeW91 IGhhdmUgPGFwcGxpY2F0aW9uPnV2PC9hcHBsaWNhdGlvbj4gaW5zdGFsbGVkOgorPHByb2dyYW1s aXN0aW5nPgordXYgc3luYworc291cmNlIC52ZW52L2Jpbi9hY3RpdmF0ZQorPC9wcm9ncmFtbGlz dGluZz4KKyAgICBSZW1lbWJlciB0byBhY3RpdmF0ZSB0aGUgdmlydHVhbCBlbnZpcm9ubWVudCBi ZWZvcmUgcnVubmluZworICAgIDxjb21tYW5kPmNvbmZpZ3VyZTwvY29tbWFuZD4gb3IgPGNvbW1h bmQ+bWVzb24gc2V0dXA8L2NvbW1hbmQ+LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBX aXRoIE1lc29uIGJ1aWxkcywgeW91IGNhbiBydW4gdGhlIHB5dGVzdCB0ZXN0cyB1c2luZzoKKzxw cm9ncmFtbGlzdGluZz4KK21lc29uIHRlc3QgLS1zdWl0ZSBweXRlc3QKKzwvcHJvZ3JhbWxpc3Rp bmc+CisgICAgV2l0aCBhdXRvY29uZi1iYXNlZCBidWlsZHMsIHlvdSBjYW4gcnVuIHRoZW0gZnJv bSB0aGUKKyAgICA8ZmlsZW5hbWU+c3JjL3Rlc3QvcHl0ZXN0PC9maWxlbmFtZT4gZGlyZWN0b3J5 IHVzaW5nOgorPHByb2dyYW1saXN0aW5nPgorbWFrZSBjaGVjaworPC9wcm9ncmFtbGlzdGluZz4K KyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgWW91IGNhbiBhbHNvIHJ1biBzcGVjaWZpYyB0 ZXN0IGZpbGVzIGRpcmVjdGx5IHVzaW5nIHB5dGVzdDoKKzxwcm9ncmFtbGlzdGluZz4KK3B5dGVz dCBzcmMvdGVzdC9weXRlc3QvcHl0L3Rlc3RfbGlicHEucHkKK3B5dGVzdCAtayAidGVzdF9jb25u c3RyIgorPC9wcm9ncmFtbGlzdGluZz4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgTWFu eSBvcGVyYXRpb25zIGluIHRoZSB0ZXN0IHN1aXRlcyB1c2UgYSAxODAtc2Vjb25kIHRpbWVvdXQs IHdoaWNoIG9uIHNsb3cKKyAgICBob3N0cyBtYXkgbGVhZCB0byBsb2FkLWluZHVjZWQgdGltZW91 dHMuICBTZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgIDx2YXJuYW1lPlBHX1RF U1RfVElNRU9VVF9ERUZBVUxUPC92YXJuYW1lPiB0byBhIGhpZ2hlciBudW1iZXIgd2lsbCBjaGFu Z2UKKyAgICB0aGUgZGVmYXVsdCB0byBhdm9pZCB0aGlzLgorICAgPC9wYXJhPgorCisgICA8cGFy YT4KKyAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB3cml0aW5nIHB5dGVzdCB0ZXN0cywgc2Vl IHRoZQorICAgIDxmaWxlbmFtZT5zcmMvdGVzdC9weXRlc3QvUkVBRE1FPC9maWxlbmFtZT4gZmls ZS4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QxPgorCiAgIDxzZWN0MSBpZD0icmVncmVzcy1jb3Zl cmFnZSI+CiAgICA8dGl0bGU+VGVzdCBDb3ZlcmFnZSBFeGFtaW5hdGlvbjwvdGl0bGU+CiAKZGlm ZiAtLWdpdCBhL3B5cHJvamVjdC50b21sIGIvcHlwcm9qZWN0LnRvbWwKaW5kZXggNjBhYmI0ZDA2 NTUuLjQ2MjhkMjI3NGUwIDEwMDY0NAotLS0gYS9weXByb2plY3QudG9tbAorKysgYi9weXByb2pl Y3QudG9tbApAQCAtMTksMyArMTksNiBAQCBtaW52ZXJzaW9uID0gIjcuMCIKIAogIyBDb21tb24g dGVzdCBjb2RlIGNhbiBiZSBmb3VuZCBoZXJlLgogcHl0aG9ucGF0aCA9IFsic3JjL3Rlc3QvcHl0 ZXN0Il0KKworIyBMb2FkIHRoZSBzaGFyZWQgZml4dHVyZXMgcGx1Z2luCithZGRvcHRzID0gWyIt cCIsICJweXBnLmZpeHR1cmVzIl0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGVzdC9SRUFETUUg Yi9zcmMvdGVzdC9weXRlc3QvUkVBRE1FCmluZGV4IDEzMzNlZDc3YjdlLi5iYjc1ZTU2YTI1ZCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcHl0ZXN0L1JFQURNRQorKysgYi9zcmMvdGVzdC9weXRlc3Qv UkVBRE1FCkBAIC0xICsxLDE1MyBAQAotVE9ETworc3JjL3Rlc3QvcHl0ZXN0L1JFQURNRQorCitQ eXRlc3QtYmFzZWQgdGVzdHMKKz09PT09PT09PT09PT09PT09PQorCitUaGlzIGRpcmVjdG9yeSBj b250YWlucyBpbmZyYXN0cnVjdHVyZSBmb3IgUHl0aG9uLWJhc2VkIHRlc3RzIHVzaW5nIHB5dGVz dCwKK2Fsb25nIHdpdGggc29tZSBjb3JlIHRlc3RzIGZvciB0aGUgcHl0ZXN0IGluZnJhc3RydWN0 dXJlIGl0c2VsZi4gVGhlIGZyYW1ld29yaworcHJvdmlkZXMgZml4dHVyZXMgZm9yIG1hbmFnaW5n IFBvc3RncmVTUUwgc2VydmVyIGluc3RhbmNlcyBhbmQgY29ubmVjdGluZyB0bwordGhlbSB2aWEg bGlicHEuCisKKworUnVubmluZyB0aGUgdGVzdHMKKz09PT09PT09PT09PT09PT09CisKK05PVEU6 IFlvdSBtdXN0IGhhdmUgZ2l2ZW4gdGhlIC0tZW5hYmxlLXB5dGVzdCBhcmd1bWVudCB0byBjb25m aWd1cmUgKG9yCistRHB5dGVzdD1lbmFibGVkIGZvciBNZXNvbiBidWlsZHMpLiBZb3UgYWxzbyBu ZWVkIHRvIGhhdmUgcHl0ZXN0IGluc3RhbGxlZC4KKworSWYgeW91IGRvbid0IGhhdmUgcHl0ZXN0 IGluc3RhbGxlZCBzeXN0ZW0td2lkZSwgeW91IGNhbiBjcmVhdGUgYSB2aXJ0dWFsCitlbnZpcm9u bWVudDoKKworICAgIHB5dGhvbjMgLW0gdmVudiAudmVudgorICAgIHNvdXJjZSAudmVudi9iaW4v YWN0aXZhdGUgICAgIyBPbiBXaW5kb3dzOiAudmVudlxTY3JpcHRzXGFjdGl2YXRlCisgICAgcGlw IGluc3RhbGwgLiAgICAgICAgICAgICAgICAjIEluc3RhbGxzIHB5dGVzdCBhbmQgb3RoZXIgZGVw ZW5kZW5jaWVzCisKK09yIHVzaW5nIHV2IChodHRwczovL2RvY3MuYXN0cmFsLnNoL3V2Lyk6CisK KyAgICB1diBzeW5jCisgICAgc291cmNlIC52ZW52L2Jpbi9hY3RpdmF0ZSAgICAjIE9uIFdpbmRv d3M6IC52ZW52XFNjcmlwdHNcYWN0aXZhdGUKKworUmVtZW1iZXIgdG8gYWN0aXZhdGUgdGhlIHZp cnR1YWwgZW52aXJvbm1lbnQgYmVmb3JlIHJ1bm5pbmcgY29uZmlndXJlL21lc29uCitzZXR1cC4K KworV2l0aCBNZXNvbiBidWlsZHMsIHlvdSBjYW4gcnVuOgorICAgIG1lc29uIHRlc3QgLS1zdWl0 ZSBweXRlc3QKKworV2l0aCBhdXRvY29uZiBiYXNlZCBidWlsZHMsIHlvdSBjYW4gcnVuOgorICAg IG1ha2UgY2hlY2sKK29yCisgICAgbWFrZSBpbnN0YWxsY2hlY2sKKworWW91IGNhbiBydW4gc3Bl Y2lmaWMgdGVzdCBmaWxlcyBhbmQvb3IgdXNlIHB5dGVzdCdzIC1rIG9wdGlvbiB0byBzZWxlY3Qg dGVzdHM6CisgICAgcHl0ZXN0IHNyYy90ZXN0L3B5dGVzdC9weXQvdGVzdF9saWJwcS5weQorICAg IHB5dGVzdCAtayAidGVzdF9jb25uc3RyIgorCisKK0RpcmVjdG9yeSBzdHJ1Y3R1cmUKKz09PT09 PT09PT09PT09PT09PT0KKworcHlwZy8KKyAgICBQeXRob24gbGlicmFyeSBwcm92aWRpbmcgY29t bW9uIGZ1bmN0aW9ucyBhbmQgcHl0ZXN0IGZpeHR1cmVzIHRoYXQgY2FuIGJlCisgICAgdXNlZCBp biB0ZXN0cy4KKworbGlicHEvCisgICAgQSBzaW1wbGUgYnV0IHVzZXItZnJpZW5kbHkgcHl0aG9u IHdyYXBwZXIgYXJvdW5kIGxpYnBxCisKK3B5dC8KKyAgICBUZXN0cyBmb3IgdGhlIHB5dGVzdCBp bmZyYXN0cnVjdHVyZSBpdHNlbGYKKworcGd0YXAucHkKKyAgICBBIHB5dGVzdCBwbHVnaW4gdG8g b3V0cHV0IHJlc3VsdHMgaW4gVEFQIGZvcm1hdAorCisKK1dyaXRpbmcgdGVzdHMKKz09PT09PT09 PT09PT0KKworVGVzdHMgdXNlIHB5dGVzdCBmaXh0dXJlcyB0byBtYW5hZ2Ugc2VydmVyIGluc3Rh bmNlcyBhbmQgY29ubmVjdGlvbnMuIFRoZQorbW9zdCBjb21tb25seSB1c2VkIGZpeHR1cmVzIGFy ZToKKworcGcKKyAgICBBIFBvc3RncmVzU2VydmVyIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIHRo ZSBjdXJyZW50IHRlc3QuIFVzZSB0aGlzIGZvcgorICAgIGNyZWF0aW5nIHRlc3QgdXNlcnMvZGF0 YWJhc2VzIG9yIG1vZGlmeWluZyBzZXJ2ZXIgY29uZmlndXJhdGlvbi4gQ2hhbmdlcworICAgIGFy ZSBhdXRvbWF0aWNhbGx5IHJvbGxlZCBiYWNrIGFmdGVyIHRoZSB0ZXN0LgorCitjb25uCisgICAg QSBjb25uZWN0ZWQgUEdjb25uIGluc3RhbmNlIHRvIHRoZSB0ZXN0IHNlcnZlci4gQXV0b21hdGlj YWxseSBjbGVhbmVkIHVwCisgICAgYWZ0ZXIgdGhlIHRlc3QuCisKK2Nvbm5lY3QKKyAgICBBIGZ1 bmN0aW9uIHRvIGNyZWF0ZSBhZGRpdGlvbmFsIGNvbm5lY3Rpb25zIHdpdGggY3VzdG9tIG9wdGlv bnMuCisKK2NyZWF0ZV9wZworICAgIEEgZmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYWRkaXRp b25hbCBQb3N0Z3JlU1FMIHNlcnZlcnMgd2l0aGluIGEgdGVzdC4KKyAgICBTZXJ2ZXJzIGFyZSBh dXRvbWF0aWNhbGx5IGNsZWFuZWQgdXAgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdC4gVXNlZnVsIGZv cgorICAgIHRlc3Rpbmcgc2NlbmFyaW9zIHRoYXQgcmVxdWlyZSBtdWx0aXBsZSBpbmRlcGVuZGVu dCBzZXJ2ZXJzLgorCitjcmVhdGVfcGdfbW9kdWxlCisgICAgTGlrZSBjcmVhdGVfcGcsIGJ1dCBz ZXJ2ZXJzIHBlcnNpc3QgZm9yIHRoZSBlbnRpcmUgdGVzdCBtb2R1bGUuIFVzZSB0aGlzCisgICAg d2hlbiBtdWx0aXBsZSB0ZXN0cyBpbiBhIG1vZHVsZSBjYW4gc2hhcmUgdGhlIHNhbWUgc2VydmVy cywgd2hpY2ggaXMKKyAgICBmYXN0ZXIgdGhhbiBjcmVhdGluZyBuZXcgc2VydmVycyBmb3IgZWFj aCB0ZXN0LgorCisKK0V4YW1wbGUgdGVzdDoKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9xdWVyeShj b25uKToKKyAgICAgICAgcmVzdWx0ID0gY29ubi5zcWwoIlNFTEVDVCAxICsgMSIpCisgICAgICAg IGFzc2VydCByZXN1bHQgPT0gMgorCisgICAgZGVmIHRlc3Rfd2l0aF91c2VyKHBnKToKKyAgICAg ICAgdXNlcnMgPSBwZy5jcmVhdGVfdXNlcnMoInRlc3QiKQorICAgICAgICB3aXRoIHBnLnJlbG9h ZGluZygpIGFzIHM6CisgICAgICAgICAgICBzLmhiYS5wcmVwZW5kKFsibG9jYWwiLCAiYWxsIiwg dXNlcnNbInRlc3QiXSwgInRydXN0Il0pCisKKyAgICAgICAgY29ubiA9IHBnLmNvbm5lY3QodXNl cj11c2Vyc1sidGVzdCJdKQorICAgICAgICBhc3NlcnQgY29ubi5zcWwoIlNFTEVDVCBjdXJyZW50 X3VzZXIiKSA9PSB1c2Vyc1sidGVzdCJdCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9zZXJ2ZXJz KGNyZWF0ZV9wZyk6CisgICAgICAgIG5vZGUxID0gY3JlYXRlX3BnKCJwcmltYXJ5IikKKyAgICAg ICAgbm9kZTIgPSBjcmVhdGVfcGcoInNlY29uZGFyeSIpCisKKyAgICAgICAgY29ubjEgPSBub2Rl MS5jb25uZWN0KCkKKyAgICAgICAgY29ubjIgPSBub2RlMi5jb25uZWN0KCkKKworICAgICAgICAj IEVhY2ggc2VydmVyIGlzIGluZGVwZW5kZW50CisgICAgICAgIGFzc2VydCBub2RlMS5wb3J0ICE9 IG5vZGUyLnBvcnQKKworCitTZXJ2ZXIgY29uZmlndXJhdGlvbgorPT09PT09PT09PT09PT09PT09 PT0KKworVGVzdHMgY2FuIHRlbXBvcmFyaWx5IG1vZGlmeSBzZXJ2ZXIgY29uZmlndXJhdGlvbiB1 c2luZyBjb250ZXh0IG1hbmFnZXJzOgorCisgICAgd2l0aCBwZy5yZWxvYWRpbmcoKSBhcyBzOgor ICAgICAgICBzLmNvbmYuc2V0KGxvZ19jb25uZWN0aW9ucz0ib24iKQorICAgICAgICBzLmhiYS5w cmVwZW5kKCJsb2NhbCBhbGwgYWxsIHRydXN0IikKKyAgICAgICAgIyBTZXJ2ZXIgaXMgcmVsb2Fk ZWQgaGVyZQorICAgICMgQWZ0ZXIgdGhlIHRlc3QgZmluaXNoZWQgdGhlIG9yaWdpbmFsIGNvbmZp Z3VyYXRpb24gaXMgcmVzdG9yZWQgYW5kCisgICAgIyB0aGUgc2VydmVyIGlzIHJlbG9hZGVkIGFn YWluCisKK1VzZSBwZy5yZXN0YXJ0aW5nKCkgaW5zdGVhZCBpZiB0aGUgY29uZmlndXJhdGlvbiBj aGFuZ2UgcmVxdWlyZXMgYSByZXN0YXJ0LgorCisKK1RpbWVvdXRzCis9PT09PT09PQorCitUZXN0 cyBpbmhlcml0IHRoZSBQR19URVNUX1RJTUVPVVRfREVGQVVMVCBlbnZpcm9ubWVudCB2YXJpYWJs ZSAoZGVmYXVsdGluZwordG8gMTgwIHNlY29uZHMpLiBUaGUgcmVtYWluaW5nX3RpbWVvdXQgZml4 dHVyZSBwcm92aWRlcyBhIGZ1bmN0aW9uIHRoYXQKK3JldHVybnMgaG93IG11Y2ggdGltZSByZW1h aW5zIGZvciB0aGUgY3VycmVudCB0ZXN0LgorCisKK0Vudmlyb25tZW50IHZhcmlhYmxlcworPT09 PT09PT09PT09PT09PT09PT09CisKK1BHX1RFU1RfVElNRU9VVF9ERUZBVUxUCisgICAgUGVyLXRl c3QgdGltZW91dCBpbiBzZWNvbmRzIChkZWZhdWx0OiAxODApCisKK1BHX0NPTkZJRworICAgIFBh dGggdG8gcGdfY29uZmlnIChkZWZhdWx0OiB1c2VzIFBBVEgpCisKK1RFU1REQVRBRElSCisgICAg RGlyZWN0b3J5IGZvciB0ZXN0IGRhdGEgKGRlZmF1bHQ6IHB5dGVzdCB0ZW1wIGRpcmVjdG9yeSkK KworUEdfVEVTVF9FWFRSQQorICAgIFNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIG9wdGlvbmFsIHRl c3QgY2F0ZWdvcmllcyB0byBydW4gKGUuZy4sICJzc2wiKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cHl0ZXN0L2xpYnBxL19faW5pdF9fLnB5IGIvc3JjL3Rlc3QvcHl0ZXN0L2xpYnBxL19faW5pdF9f LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42YTcxZWJiZTQzZgot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGVzdC9saWJwcS9fX2luaXRfXy5weQpAQCAt MCwwICsxLDM1IEBACisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKworIiIiCitsaWJwcSB0ZXN0aW5nIHV0aWxpdGllcyAtIGN0eXBlcyBi aW5kaW5ncyBhbmQgaGVscGVycyBmb3IgUG9zdGdyZVNRTCdzIGxpYnBxIGxpYnJhcnkuCisKK1Ro aXMgbW9kdWxlIHByb3ZpZGVzIFB5dGhvbiB3cmFwcGVycyBhcm91bmQgbGlicHEgZm9yIHVzZSBp biBweXRlc3QgdGVzdHMuCisiIiIKKworZnJvbSAuIGltcG9ydCBlcnJvcnMKK2Zyb20gLmVycm9y cyBpbXBvcnQgTGlicHFFcnJvcgorZnJvbSAuX2NvcmUgaW1wb3J0ICgKKyAgICBDb25uZWN0aW9u U3RhdHVzLAorICAgIERpYWdGaWVsZCwKKyAgICBFeGVjU3RhdHVzLAorICAgIFBHY29ubiwKKyAg ICBQR3Jlc3VsdCwKKyAgICBjb25uZWN0LAorICAgIGNvbm5zdHIsCisgICAgbG9hZF9saWJwcV9o YW5kbGUsCisgICAgcmVnaXN0ZXJfdHlwZV9pbmZvLAorKQorCitfX2FsbF9fID0gWworICAgICJl cnJvcnMiLAorICAgICJMaWJwcUVycm9yIiwKKyAgICAiQ29ubmVjdGlvblN0YXR1cyIsCisgICAg IkRpYWdGaWVsZCIsCisgICAgIkV4ZWNTdGF0dXMiLAorICAgICJQR2Nvbm4iLAorICAgICJQR3Jl c3VsdCIsCisgICAgImNvbm5lY3QiLAorICAgICJjb25uc3RyIiwKKyAgICAibG9hZF9saWJwcV9o YW5kbGUiLAorICAgICJyZWdpc3Rlcl90eXBlX2luZm8iLAorXQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcHl0ZXN0L2xpYnBxL19jb3JlLnB5IGIvc3JjL3Rlc3QvcHl0ZXN0L2xpYnBxL19jb3JlLnB5 Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xYzA1OWI5YjQ0NgotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5dGVzdC9saWJwcS9fY29yZS5weQpAQCAtMCwwICsx LDQ4OCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisKKyIiIgorQ29yZSBsaWJwcSBmdW5jdGlvbmFsaXR5IC0gY3R5cGVzIGJpbmRp bmdzIGFuZCBjb25uZWN0aW9uIGhhbmRsaW5nLgorIiIiCisKK2ltcG9ydCBjb250ZXh0bGliCitp bXBvcnQgY3R5cGVzCitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBkZWNpbWFsCitpbXBvcnQgZW51 bQoraW1wb3J0IGpzb24KK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IG9zCitpbXBvcnQgdXVpZAor ZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgQ2FsbGFibGUsIERpY3QsIE9wdGlvbmFsCisKK2Zyb20g LmVycm9ycyBpbXBvcnQgTGlicHFFcnJvcgorCisKKyMgUEdfRElBRyBmaWVsZCBpZGVudGlmaWVy cyBmcm9tIHBvc3RncmVzX2V4dC5oCitjbGFzcyBEaWFnRmllbGQoZW51bS5JbnRFbnVtKToKKyAg ICBTRVZFUklUWSA9IG9yZCgiUyIpCisgICAgU0VWRVJJVFlfTk9OTE9DQUxJWkVEID0gb3JkKCJW IikKKyAgICBTUUxTVEFURSA9IG9yZCgiQyIpCisgICAgTUVTU0FHRV9QUklNQVJZID0gb3JkKCJN IikKKyAgICBNRVNTQUdFX0RFVEFJTCA9IG9yZCgiRCIpCisgICAgTUVTU0FHRV9ISU5UID0gb3Jk KCJIIikKKyAgICBTVEFURU1FTlRfUE9TSVRJT04gPSBvcmQoIlAiKQorICAgIElOVEVSTkFMX1BP U0lUSU9OID0gb3JkKCJwIikKKyAgICBJTlRFUk5BTF9RVUVSWSA9IG9yZCgicSIpCisgICAgQ09O VEVYVCA9IG9yZCgiVyIpCisgICAgU0NIRU1BX05BTUUgPSBvcmQoInMiKQorICAgIFRBQkxFX05B TUUgPSBvcmQoInQiKQorICAgIENPTFVNTl9OQU1FID0gb3JkKCJjIikKKyAgICBEQVRBVFlQRV9O QU1FID0gb3JkKCJkIikKKyAgICBDT05TVFJBSU5UX05BTUUgPSBvcmQoIm4iKQorICAgIFNPVVJD RV9GSUxFID0gb3JkKCJGIikKKyAgICBTT1VSQ0VfTElORSA9IG9yZCgiTCIpCisgICAgU09VUkNF X0ZVTkNUSU9OID0gb3JkKCJSIikKKworCitjbGFzcyBDb25uZWN0aW9uU3RhdHVzKGVudW0uSW50 RW51bSk6CisgICAgIiIiUG9zdGdyZVNRTCBjb25uZWN0aW9uIHN0YXR1cyBjb2RlcyBmcm9tIGxp YnBxLiIiIgorCisgICAgQ09OTkVDVElPTl9PSyA9IDAKKyAgICBDT05ORUNUSU9OX0JBRCA9IDEK KworCitjbGFzcyBFeGVjU3RhdHVzKGVudW0uSW50RW51bSk6CisgICAgIiIiUG9zdGdyZVNRTCBy ZXN1bHQgc3RhdHVzIGNvZGVzIGZyb20gUFFyZXN1bHRTdGF0dXMuIiIiCisKKyAgICBQR1JFU19F TVBUWV9RVUVSWSA9IDAKKyAgICBQR1JFU19DT01NQU5EX09LID0gMQorICAgIFBHUkVTX1RVUExF U19PSyA9IDIKKyAgICBQR1JFU19DT1BZX09VVCA9IDMKKyAgICBQR1JFU19DT1BZX0lOID0gNAor ICAgIFBHUkVTX0JBRF9SRVNQT05TRSA9IDUKKyAgICBQR1JFU19OT05GQVRBTF9FUlJPUiA9IDYK KyAgICBQR1JFU19GQVRBTF9FUlJPUiA9IDcKKyAgICBQR1JFU19DT1BZX0JPVEggPSA4CisgICAg UEdSRVNfU0lOR0xFX1RVUExFID0gOQorICAgIFBHUkVTX1BJUEVMSU5FX1NZTkMgPSAxMAorICAg IFBHUkVTX1BJUEVMSU5FX0FCT1JURUQgPSAxMQorCisKK2NsYXNzIF9QR2Nvbm4oY3R5cGVzLlN0 cnVjdHVyZSk6CisgICAgcGFzcworCisKK2NsYXNzIF9QR3Jlc3VsdChjdHlwZXMuU3RydWN0dXJl KToKKyAgICBwYXNzCisKKworX1BHY29ubl9wID0gY3R5cGVzLlBPSU5URVIoX1BHY29ubikKK19Q R3Jlc3VsdF9wID0gY3R5cGVzLlBPSU5URVIoX1BHcmVzdWx0KQorCisKK2RlZiBsb2FkX2xpYnBx X2hhbmRsZShsaWJkaXIsIGJpbmRpcik6CisgICAgIiIiCisgICAgTG9hZHMgYSBjdHlwZXMgaGFu ZGxlIGZvciBsaWJwcS4gU29tZSBjb21tb24gZnVuY3Rpb24gcHJvdG90eXBlcyBhcmUKKyAgICBp bml0aWFsaXplZCBmb3IgZ2VuZXJhbCB1c2UuCisgICAgIiIiCisgICAgc3lzdGVtID0gcGxhdGZv cm0uc3lzdGVtKCkKKworICAgIGlmIHN5c3RlbSBpbiAoIkxpbnV4IiwgIkZyZWVCU0QiLCAiTmV0 QlNEIiwgIk9wZW5CU0QiKToKKyAgICAgICAgbmFtZSA9ICJsaWJwcS5zby41IgorICAgIGVsaWYg c3lzdGVtID09ICJEYXJ3aW4iOgorICAgICAgICBuYW1lID0gImxpYnBxLjUuZHlsaWIiCisgICAg ZWxpZiBzeXN0ZW0gPT0gIldpbmRvd3MiOgorICAgICAgICBuYW1lID0gImxpYnBxLmRsbCIKKyAg ICBlbHNlOgorICAgICAgICBhc3NlcnQgRmFsc2UsIGYidGhlIGxpYnBxIGZpeHR1cmUgbXVzdCBi ZSB1cGRhdGVkIGZvciB7c3lzdGVtfSIKKworICAgIGlmIHN5c3RlbSA9PSAiV2luZG93cyI6Cisg ICAgICAgICMgT24gV2luZG93cywgbGlicHEuZGxsIGlzIGNvbmZ1c2luZ2x5IGluIGJpbmRpciwg bm90IGxpYmRpci4gQW5kIHdlCisgICAgICAgICMgbmVlZCB0byBhZGQgdGhpcyBkaXJlY3Rvcnkg dGhlIHRoZSBzZWFyY2ggcGF0aC4KKyAgICAgICAgbGlicHFfcGF0aCA9IG9zLnBhdGguam9pbihi aW5kaXIsIG5hbWUpCisgICAgICAgIGxpYiA9IGN0eXBlcy5DRExMKGxpYnBxX3BhdGgpCisgICAg ZWxzZToKKyAgICAgICAgbGlicHFfcGF0aCA9IG9zLnBhdGguam9pbihsaWJkaXIsIG5hbWUpCisg ICAgICAgIGxpYiA9IGN0eXBlcy5DRExMKGxpYnBxX3BhdGgpCisKKyAgICAjCisgICAgIyBGdW5j dGlvbiBQcm90b3R5cGVzCisgICAgIworCisgICAgbGliLlBRY29ubmVjdGRiLnJlc3R5cGUgPSBf UEdjb25uX3AKKyAgICBsaWIuUFFjb25uZWN0ZGIuYXJndHlwZXMgPSBbY3R5cGVzLmNfY2hhcl9w XQorCisgICAgbGliLlBRc3RhdHVzLnJlc3R5cGUgPSBjdHlwZXMuY19pbnQKKyAgICBsaWIuUFFz dGF0dXMuYXJndHlwZXMgPSBbX1BHY29ubl9wXQorCisgICAgbGliLlBRZXhlYy5yZXN0eXBlID0g X1BHcmVzdWx0X3AKKyAgICBsaWIuUFFleGVjLmFyZ3R5cGVzID0gW19QR2Nvbm5fcCwgY3R5cGVz LmNfY2hhcl9wXQorCisgICAgbGliLlBRcmVzdWx0U3RhdHVzLnJlc3R5cGUgPSBjdHlwZXMuY19p bnQKKyAgICBsaWIuUFFyZXN1bHRTdGF0dXMuYXJndHlwZXMgPSBbX1BHcmVzdWx0X3BdCisKKyAg ICBsaWIuUFFjbGVhci5yZXN0eXBlID0gTm9uZQorICAgIGxpYi5QUWNsZWFyLmFyZ3R5cGVzID0g W19QR3Jlc3VsdF9wXQorCisgICAgbGliLlBRZXJyb3JNZXNzYWdlLnJlc3R5cGUgPSBjdHlwZXMu Y19jaGFyX3AKKyAgICBsaWIuUFFlcnJvck1lc3NhZ2UuYXJndHlwZXMgPSBbX1BHY29ubl9wXQor CisgICAgbGliLlBRZmluaXNoLnJlc3R5cGUgPSBOb25lCisgICAgbGliLlBRZmluaXNoLmFyZ3R5 cGVzID0gW19QR2Nvbm5fcF0KKworICAgIGxpYi5QUXJlc3VsdEVycm9yTWVzc2FnZS5yZXN0eXBl ID0gY3R5cGVzLmNfY2hhcl9wCisgICAgbGliLlBRcmVzdWx0RXJyb3JNZXNzYWdlLmFyZ3R5cGVz ID0gW19QR3Jlc3VsdF9wXQorCisgICAgbGliLlBRbnR1cGxlcy5yZXN0eXBlID0gY3R5cGVzLmNf aW50CisgICAgbGliLlBRbnR1cGxlcy5hcmd0eXBlcyA9IFtfUEdyZXN1bHRfcF0KKworICAgIGxp Yi5QUW5maWVsZHMucmVzdHlwZSA9IGN0eXBlcy5jX2ludAorICAgIGxpYi5QUW5maWVsZHMuYXJn dHlwZXMgPSBbX1BHcmVzdWx0X3BdCisKKyAgICBsaWIuUFFnZXR2YWx1ZS5yZXN0eXBlID0gY3R5 cGVzLmNfY2hhcl9wCisgICAgbGliLlBRZ2V0dmFsdWUuYXJndHlwZXMgPSBbX1BHcmVzdWx0X3As IGN0eXBlcy5jX2ludCwgY3R5cGVzLmNfaW50XQorCisgICAgbGliLlBRZ2V0aXNudWxsLnJlc3R5 cGUgPSBjdHlwZXMuY19pbnQKKyAgICBsaWIuUFFnZXRpc251bGwuYXJndHlwZXMgPSBbX1BHcmVz dWx0X3AsIGN0eXBlcy5jX2ludCwgY3R5cGVzLmNfaW50XQorCisgICAgbGliLlBRZnR5cGUucmVz dHlwZSA9IGN0eXBlcy5jX3VpbnQKKyAgICBsaWIuUFFmdHlwZS5hcmd0eXBlcyA9IFtfUEdyZXN1 bHRfcCwgY3R5cGVzLmNfaW50XQorCisgICAgbGliLlBRcmVzdWx0RXJyb3JGaWVsZC5yZXN0eXBl ID0gY3R5cGVzLmNfY2hhcl9wCisgICAgbGliLlBRcmVzdWx0RXJyb3JGaWVsZC5hcmd0eXBlcyA9 IFtfUEdyZXN1bHRfcCwgY3R5cGVzLmNfaW50XQorCisgICAgcmV0dXJuIGxpYgorCisKKyMgUG9z dGdyZVNRTCB0eXBlIE9JRHMgYW5kIGNvbnZlcnNpb24gc3lzdGVtCisjIFR5cGUgcmVnaXN0cnkg LSBtYXBzIE9JRCB0byBjb252ZXJ0ZXIgZnVuY3Rpb24KK190eXBlX2NvbnZlcnRlcnM6IERpY3Rb aW50LCBDYWxsYWJsZVtbc3RyXSwgQW55XV0gPSB7fQorX2FycmF5X3RvX2VsZW1fbWFwOiBEaWN0 W2ludCwgaW50XSA9IHt9CisKKworZGVmIHJlZ2lzdGVyX3R5cGVfaW5mbygKKyAgICBuYW1lOiBz dHIsIG9pZDogaW50LCBhcnJheV9vaWQ6IGludCwgY29udmVydGVyOiBDYWxsYWJsZVtbc3RyXSwg QW55XQorKToKKyAgICAiIiIKKyAgICBSZWdpc3RlciBhIFBvc3RncmVTUUwgdHlwZSB3aXRoIGl0 cyBPSUQsIGFycmF5IE9JRCwgYW5kIGNvbnZlcnNpb24gZnVuY3Rpb24uCisKKyAgICBVc2FnZToK KyAgICAgICAgcmVnaXN0ZXJfdHlwZV9pbmZvKCJib29sIiwgMTYsIDEwMDAsIGxhbWJkYSB2OiB2 ID09ICJ0IikKKyAgICAiIiIKKyAgICBfdHlwZV9jb252ZXJ0ZXJzW29pZF0gPSBjb252ZXJ0ZXIK KyAgICBpZiBhcnJheV9vaWQgaXMgbm90IE5vbmU6CisgICAgICAgIF9hcnJheV90b19lbGVtX21h cFthcnJheV9vaWRdID0gb2lkCisKKworZGVmIF9wYXJzZV9hcnJheSh2YWx1ZTogc3RyLCBlbGVt X29pZDogaW50KToKKyAgICAiIiJQYXJzZSBQb3N0Z3JlU1FMIGFycmF5IHN5bnRheCBpbnRvIG5l c3RlZCBQeXRob24gbGlzdHMuIiIiCisgICAgc3RhY2s6IGxpc3RbbGlzdF0gPSBbXQorICAgIGN1 cnJlbnRfZWxlbWVudDogbGlzdFtzdHJdID0gW10KKyAgICBpbl9xdW90ZXMgPSBGYWxzZQorICAg IHdhc19xdW90ZWQgPSBGYWxzZQorICAgIHBvcyA9IDAKKworICAgIHdoaWxlIHBvcyA8IGxlbih2 YWx1ZSk6CisgICAgICAgIGNoYXIgPSB2YWx1ZVtwb3NdCisKKyAgICAgICAgaWYgaW5fcXVvdGVz OgorICAgICAgICAgICAgaWYgY2hhciA9PSAiXFwiOgorICAgICAgICAgICAgICAgIG5leHRfY2hh ciA9IHZhbHVlW3BvcyArIDFdCisgICAgICAgICAgICAgICAgaWYgbmV4dF9jaGFyIG5vdCBpbiAn IlxcJzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignT25s eSBcXCIgYW5kIFxcXFwgZXNjYXBlcyBhcmUgc3VwcG9ydGVkJykKKyAgICAgICAgICAgICAgICBj dXJyZW50X2VsZW1lbnQuYXBwZW5kKG5leHRfY2hhcikKKyAgICAgICAgICAgICAgICBwb3MgKz0g MgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIGNoYXIgPT0gJyIn OgorICAgICAgICAgICAgICAgIGluX3F1b3RlcyA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgor ICAgICAgICAgICAgICAgIGN1cnJlbnRfZWxlbWVudC5hcHBlbmQoY2hhcikKKyAgICAgICAgZWxp ZiBjaGFyID09ICciJzoKKyAgICAgICAgICAgIGluX3F1b3RlcyA9IFRydWUKKyAgICAgICAgICAg IHdhc19xdW90ZWQgPSBUcnVlCisgICAgICAgIGVsaWYgY2hhciA9PSAieyI6CisgICAgICAgICAg ICBzdGFjay5hcHBlbmQoW10pCisgICAgICAgIGVsaWYgY2hhciBpbiAiLH0iOgorICAgICAgICAg ICAgaWYgY3VycmVudF9lbGVtZW50IG9yIHdhc19xdW90ZWQ6CisgICAgICAgICAgICAgICAgZWxl bSA9ICIiLmpvaW4oY3VycmVudF9lbGVtZW50KQorICAgICAgICAgICAgICAgIGlmIG5vdCB3YXNf cXVvdGVkIGFuZCBlbGVtID09ICJOVUxMIjoKKyAgICAgICAgICAgICAgICAgICAgc3RhY2tbLTFd LmFwcGVuZChOb25lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg IHN0YWNrWy0xXS5hcHBlbmQoX2NvbnZlcnRfcGdfdmFsdWUoZWxlbSwgZWxlbV9vaWQpKQorICAg ICAgICAgICAgICAgIGN1cnJlbnRfZWxlbWVudCA9IFtdCisgICAgICAgICAgICAgICAgd2FzX3F1 b3RlZCA9IEZhbHNlCisgICAgICAgICAgICBpZiBjaGFyID09ICJ9IjoKKyAgICAgICAgICAgICAg ICBjb21wbGV0ZWQgPSBzdGFjay5wb3AoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzdGFjazoK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRlZAorICAgICAgICAgICAgICAgIHN0 YWNrWy0xXS5hcHBlbmQoY29tcGxldGVkKQorICAgICAgICBlbGlmIGNoYXIgIT0gIiAiOgorICAg ICAgICAgICAgY3VycmVudF9lbGVtZW50LmFwcGVuZChjaGFyKQorICAgICAgICBwb3MgKz0gMQor CisgICAgcmFpc2UgVmFsdWVFcnJvcihmIk1hbGZvcm1lZCBhcnJheSBsaXRlcmFsOiB7dmFsdWV9 IikKKworCisjIFJlZ2lzdGVyIHN0YW5kYXJkIFBvc3RncmVTUUwgdHlwZXMgdGhhdCB3ZSdsbCBs aWtlbHkgZW5jb3VudGVyIGluIHRlc3RzCityZWdpc3Rlcl90eXBlX2luZm8oImJvb2wiLCAxNiwg MTAwMCwgbGFtYmRhIHY6IHYgPT0gInQiKQorcmVnaXN0ZXJfdHlwZV9pbmZvKCJpbnQyIiwgMjEs IDEwMDUsIGludCkKK3JlZ2lzdGVyX3R5cGVfaW5mbygiaW50NCIsIDIzLCAxMDA3LCBpbnQpCity ZWdpc3Rlcl90eXBlX2luZm8oImludDgiLCAyMCwgMTAxNiwgaW50KQorcmVnaXN0ZXJfdHlwZV9p bmZvKCJmbG9hdDQiLCA3MDAsIDEwMjEsIGZsb2F0KQorcmVnaXN0ZXJfdHlwZV9pbmZvKCJmbG9h dDgiLCA3MDEsIDEwMjIsIGZsb2F0KQorcmVnaXN0ZXJfdHlwZV9pbmZvKCJudW1lcmljIiwgMTcw MCwgMTIzMSwgZGVjaW1hbC5EZWNpbWFsKQorcmVnaXN0ZXJfdHlwZV9pbmZvKCJ0ZXh0IiwgMjUs IDEwMDksIHN0cikKK3JlZ2lzdGVyX3R5cGVfaW5mbygidmFyY2hhciIsIDEwNDMsIDEwMTUsIHN0 cikKK3JlZ2lzdGVyX3R5cGVfaW5mbygiZGF0ZSIsIDEwODIsIDExODIsIGRhdGV0aW1lLmRhdGUu ZnJvbWlzb2Zvcm1hdCkKK3JlZ2lzdGVyX3R5cGVfaW5mbygidGltZSIsIDEwODMsIDExODMsIGRh dGV0aW1lLnRpbWUuZnJvbWlzb2Zvcm1hdCkKK3JlZ2lzdGVyX3R5cGVfaW5mbygidGltZXN0YW1w IiwgMTExNCwgMTExNSwgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCkKK3JlZ2lzdGVy X3R5cGVfaW5mbygidGltZXN0YW1wdHoiLCAxMTg0LCAxMTg1LCBkYXRldGltZS5kYXRldGltZS5m cm9taXNvZm9ybWF0KQorcmVnaXN0ZXJfdHlwZV9pbmZvKCJ1dWlkIiwgMjk1MCwgMjk1MSwgdXVp ZC5VVUlEKQorcmVnaXN0ZXJfdHlwZV9pbmZvKCJqc29uIiwgMTE0LCAxOTksIGpzb24ubG9hZHMp CityZWdpc3Rlcl90eXBlX2luZm8oImpzb25iIiwgMzgwMiwgMzgwNywganNvbi5sb2FkcykKKwor CitkZWYgX2NvbnZlcnRfcGdfdmFsdWUodmFsdWU6IHN0ciwgdHlwZV9vaWQ6IGludCkgLT4gQW55 OgorICAgICIiIgorICAgIENvbnZlcnQgUG9zdGdyZVNRTCBzdHJpbmcgdmFsdWUgdG8gYXBwcm9w cmlhdGUgUHl0aG9uIHR5cGUgYmFzZWQgb24gT0lELgorICAgIFVzZXMgdGhlIHJlZ2lzdGVyZWQg dHlwZSBjb252ZXJ0ZXJzIGZyb20gcmVnaXN0ZXJfdHlwZV9pbmZvKCkuCisgICAgIiIiCisgICAg IyBDaGVjayBpZiBpdCdzIGFuIGFycmF5IHR5cGUKKyAgICBpZiB0eXBlX29pZCBpbiBfYXJyYXlf dG9fZWxlbV9tYXA6CisgICAgICAgIGVsZW1fb2lkID0gX2FycmF5X3RvX2VsZW1fbWFwW3R5cGVf b2lkXQorICAgICAgICByZXR1cm4gX3BhcnNlX2FycmF5KHZhbHVlLCBlbGVtX29pZCkKKworICAg ICMgVXNlIHJlZ2lzdGVyZWQgY29udmVydGVyIGlmIGF2YWlsYWJsZQorICAgIGNvbnZlcnRlciA9 IF90eXBlX2NvbnZlcnRlcnMuZ2V0KHR5cGVfb2lkKQorICAgIGlmIGNvbnZlcnRlcjoKKyAgICAg ICAgcmV0dXJuIGNvbnZlcnRlcih2YWx1ZSkKKworICAgICMgVW5rbm93biB0eXBlcyAtIHJldHVy biBhcyBzdHJpbmcKKyAgICByZXR1cm4gdmFsdWUKKworCitkZWYgc2ltcGxpZnlfcXVlcnlfcmVz dWx0cyhyZXN1bHRzKSAtPiBBbnk6CisgICAgIiIiCisgICAgU2ltcGxpZnkgdGhlIHJlc3VsdHMg b2YgYSBxdWVyeSBzbyB0aGF0IHRoZSBjYWxsZXIgZG9lc24ndCBoYXZlIHRvIHVucGFjaworICAg IGxpc3RzIGFuZCB0dXBsZXMgb2YgbGVuZ3RoIDEuCisgICAgIiIiCisgICAgaWYgbGVuKHJlc3Vs dHMpID09IDE6CisgICAgICAgIHJvdyA9IHJlc3VsdHNbMF0KKyAgICAgICAgaWYgbGVuKHJvdykg PT0gMToKKyAgICAgICAgICAgICMgSWYgdGhlcmUncyBvbmx5IGEgc2luZ2xlIGNlbGwsIGp1c3Qg cmV0dXJuIHRoZSB2YWx1ZQorICAgICAgICAgICAgcmV0dXJuIHJvd1swXQorICAgICAgICAjIElm IHRoZXJlJ3Mgb25seSBhIHNpbmdsZSByb3csIGp1c3QgcmV0dXJuIHRoYXQgcm93CisgICAgICAg IHJldHVybiByb3cKKworICAgIGlmIGxlbihyZXN1bHRzKSAhPSAwIGFuZCBsZW4ocmVzdWx0c1sw XSkgPT0gMToKKyAgICAgICAgIyBJZiB0aGVyZSdzIG9ubHkgYSBzaW5nbGUgY29sdW1uLCByZXR1 cm4gYW4gYXJyYXkgb2YgdmFsdWVzCisgICAgICAgIHJldHVybiBbcm93WzBdIGZvciByb3cgaW4g cmVzdWx0c10KKworICAgICMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHJvd3MgYW5kIGNvbHVtbnMs IHJldHVybiB0aGUgcmVzdWx0cyBhcyBpcworICAgIHJldHVybiByZXN1bHRzCisKKworY2xhc3Mg UEdyZXN1bHQoY29udGV4dGxpYi5BYnN0cmFjdENvbnRleHRNYW5hZ2VyKToKKyAgICAiIiJXcmFw cyBhIHJhdyBfUEdyZXN1bHRfcCB3aXRoIGEgbW9yZSBmcmllbmRseSBpbnRlcmZhY2UuIiIiCisK KyAgICBkZWYgX19pbml0X18oc2VsZiwgbGliOiBjdHlwZXMuQ0RMTCwgcmVzOiBfUEdyZXN1bHRf cCk6CisgICAgICAgIHNlbGYuX2xpYiA9IGxpYgorICAgICAgICBzZWxmLl9yZXMgPSByZXMKKwor ICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjKToKKyAgICAgICAgc2VsZi5fbGliLlBRY2xlYXIo c2VsZi5fcmVzKQorICAgICAgICBzZWxmLl9yZXMgPSBOb25lCisKKyAgICBkZWYgc3RhdHVzKHNl bGYpIC0+IEV4ZWNTdGF0dXM6CisgICAgICAgIHJldHVybiBFeGVjU3RhdHVzKHNlbGYuX2xpYi5Q UXJlc3VsdFN0YXR1cyhzZWxmLl9yZXMpKQorCisgICAgZGVmIGVycm9yX21lc3NhZ2Uoc2VsZik6 CisgICAgICAgICIiIlJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRo aXMgcmVzdWx0LiIiIgorICAgICAgICBtc2cgPSBzZWxmLl9saWIuUFFyZXN1bHRFcnJvck1lc3Nh Z2Uoc2VsZi5fcmVzKQorICAgICAgICByZXR1cm4gbXNnLmRlY29kZSgpIGlmIG1zZyBlbHNlICIi CisKKyAgICBkZWYgX2dldF9lcnJvcl9maWVsZChzZWxmLCBmaWVsZDogRGlhZ0ZpZWxkKSAtPiBP cHRpb25hbFtzdHJdOgorICAgICAgICAiIiJHZXQgYW4gZXJyb3IgZmllbGQgZnJvbSB0aGUgcmVz dWx0IHVzaW5nIFBRcmVzdWx0RXJyb3JGaWVsZC4iIiIKKyAgICAgICAgdmFsID0gc2VsZi5fbGli LlBRcmVzdWx0RXJyb3JGaWVsZChzZWxmLl9yZXMsIGludChmaWVsZCkpCisgICAgICAgIHJldHVy biB2YWwuZGVjb2RlKCkgaWYgdmFsIGVsc2UgTm9uZQorCisgICAgZGVmIHJhaXNlX2Vycm9yKHNl bGYpIC0+IE5vbmU6CisgICAgICAgICIiIgorICAgICAgICBSYWlzZXMgTGlicHFFcnJvciB3aXRo IGRpYWdub3N0aWMgaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVzdWx0LgorICAgICAgICAiIiIKKyAg ICAgICAgaWYgbm90IHNlbGYuX3JlczoKKyAgICAgICAgICAgIHJhaXNlIExpYnBxRXJyb3IoInF1 ZXJ5IGZhaWxlZDogb3V0IG9mIG1lbW9yeSBvciBjb25uZWN0aW9uIGxvc3QiKQorCisgICAgICAg IHNxbHN0YXRlID0gc2VsZi5fZ2V0X2Vycm9yX2ZpZWxkKERpYWdGaWVsZC5TUUxTVEFURSkKKyAg ICAgICAgcHJpbWFyeSA9IHNlbGYuX2dldF9lcnJvcl9maWVsZChEaWFnRmllbGQuTUVTU0FHRV9Q UklNQVJZKQorICAgICAgICBkZXRhaWwgPSBzZWxmLl9nZXRfZXJyb3JfZmllbGQoRGlhZ0ZpZWxk Lk1FU1NBR0VfREVUQUlMKQorICAgICAgICBoaW50ID0gc2VsZi5fZ2V0X2Vycm9yX2ZpZWxkKERp YWdGaWVsZC5NRVNTQUdFX0hJTlQpCisgICAgICAgIHNldmVyaXR5ID0gc2VsZi5fZ2V0X2Vycm9y X2ZpZWxkKERpYWdGaWVsZC5TRVZFUklUWSkKKyAgICAgICAgc2NoZW1hX25hbWUgPSBzZWxmLl9n ZXRfZXJyb3JfZmllbGQoRGlhZ0ZpZWxkLlNDSEVNQV9OQU1FKQorICAgICAgICB0YWJsZV9uYW1l ID0gc2VsZi5fZ2V0X2Vycm9yX2ZpZWxkKERpYWdGaWVsZC5UQUJMRV9OQU1FKQorICAgICAgICBj b2x1bW5fbmFtZSA9IHNlbGYuX2dldF9lcnJvcl9maWVsZChEaWFnRmllbGQuQ09MVU1OX05BTUUp CisgICAgICAgIGRhdGF0eXBlX25hbWUgPSBzZWxmLl9nZXRfZXJyb3JfZmllbGQoRGlhZ0ZpZWxk LkRBVEFUWVBFX05BTUUpCisgICAgICAgIGNvbnN0cmFpbnRfbmFtZSA9IHNlbGYuX2dldF9lcnJv cl9maWVsZChEaWFnRmllbGQuQ09OU1RSQUlOVF9OQU1FKQorICAgICAgICBjb250ZXh0ID0gc2Vs Zi5fZ2V0X2Vycm9yX2ZpZWxkKERpYWdGaWVsZC5DT05URVhUKQorCisgICAgICAgIHBvc2l0aW9u X3N0ciA9IHNlbGYuX2dldF9lcnJvcl9maWVsZChEaWFnRmllbGQuU1RBVEVNRU5UX1BPU0lUSU9O KQorICAgICAgICBwb3NpdGlvbiA9IGludChwb3NpdGlvbl9zdHIpIGlmIHBvc2l0aW9uX3N0ciBl bHNlIE5vbmUKKworICAgICAgICByYWlzZSBMaWJwcUVycm9yKAorICAgICAgICAgICAgcHJpbWFy eSBvciBzZWxmLmVycm9yX21lc3NhZ2UoKSwKKyAgICAgICAgICAgIHNxbHN0YXRlPXNxbHN0YXRl LAorICAgICAgICAgICAgc2V2ZXJpdHk9c2V2ZXJpdHksCisgICAgICAgICAgICBwcmltYXJ5PXBy aW1hcnksCisgICAgICAgICAgICBkZXRhaWw9ZGV0YWlsLAorICAgICAgICAgICAgaGludD1oaW50 LAorICAgICAgICAgICAgc2NoZW1hX25hbWU9c2NoZW1hX25hbWUsCisgICAgICAgICAgICB0YWJs ZV9uYW1lPXRhYmxlX25hbWUsCisgICAgICAgICAgICBjb2x1bW5fbmFtZT1jb2x1bW5fbmFtZSwK KyAgICAgICAgICAgIGRhdGF0eXBlX25hbWU9ZGF0YXR5cGVfbmFtZSwKKyAgICAgICAgICAgIGNv bnN0cmFpbnRfbmFtZT1jb25zdHJhaW50X25hbWUsCisgICAgICAgICAgICBwb3NpdGlvbj1wb3Np dGlvbiwKKyAgICAgICAgICAgIGNvbnRleHQ9Y29udGV4dCwKKyAgICAgICAgKQorCisgICAgZGVm IGZldGNoX2FsbChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEZldGNoIGFsbCByb3dzIGFu ZCBjb252ZXJ0IHRvIFB5dGhvbiB0eXBlcy4KKyAgICAgICAgUmV0dXJucyBhIGxpc3Qgb2YgdHVw bGVzLCB3aXRoIHZhbHVlcyBjb252ZXJ0ZWQgYmFzZWQgb24gdGhlaXIgUG9zdGdyZVNRTCB0eXBl LgorICAgICAgICAiIiIKKyAgICAgICAgbnJvd3MgPSBzZWxmLl9saWIuUFFudHVwbGVzKHNlbGYu X3JlcykKKyAgICAgICAgbmNvbHMgPSBzZWxmLl9saWIuUFFuZmllbGRzKHNlbGYuX3JlcykKKwor ICAgICAgICAjIEdldCB0eXBlIE9JRHMgZm9yIGVhY2ggY29sdW1uCisgICAgICAgIHR5cGVfb2lk cyA9IFtzZWxmLl9saWIuUFFmdHlwZShzZWxmLl9yZXMsIGNvbCkgZm9yIGNvbCBpbiByYW5nZShu Y29scyldCisKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGZvciByb3cgaW4gcmFuZ2Uo bnJvd3MpOgorICAgICAgICAgICAgcm93X2RhdGEgPSBbXQorICAgICAgICAgICAgZm9yIGNvbCBp biByYW5nZShuY29scyk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fbGliLlBRZ2V0aXNudWxs KHNlbGYuX3Jlcywgcm93LCBjb2wpOgorICAgICAgICAgICAgICAgICAgICByb3dfZGF0YS5hcHBl bmQoTm9uZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YWx1 ZSA9IHNlbGYuX2xpYi5QUWdldHZhbHVlKHNlbGYuX3Jlcywgcm93LCBjb2wpLmRlY29kZSgpCisg ICAgICAgICAgICAgICAgICAgIHJvd19kYXRhLmFwcGVuZChfY29udmVydF9wZ192YWx1ZSh2YWx1 ZSwgdHlwZV9vaWRzW2NvbF0pKQorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQodHVwbGUocm93 X2RhdGEpKQorCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKworY2xhc3MgUEdjb25uKGNvbnRl eHRsaWIuQWJzdHJhY3RDb250ZXh0TWFuYWdlcik6CisgICAgIiIiCisgICAgV3JhcHMgYSByYXcg X1BHY29ubl9wIHdpdGggYSBtb3JlIGZyaWVuZGx5IGludGVyZmFjZS4gVGhpcyBpcyBqdXN0IGEK KyAgICBzdHViOyBpdCdzIGV4cGVjdGVkIHRvIGdyb3cuCisgICAgIiIiCisKKyAgICBkZWYgX19p bml0X18oCisgICAgICAgIHNlbGYsCisgICAgICAgIGxpYjogY3R5cGVzLkNETEwsCisgICAgICAg IGhhbmRsZTogX1BHY29ubl9wLAorICAgICAgICBzdGFjazogY29udGV4dGxpYi5FeGl0U3RhY2ss CisgICAgKToKKyAgICAgICAgc2VsZi5fbGliID0gbGliCisgICAgICAgIHNlbGYuX2hhbmRsZSA9 IGhhbmRsZQorICAgICAgICBzZWxmLl9zdGFjayA9IHN0YWNrCisKKyAgICBkZWYgX19leGl0X18o c2VsZiwgKmV4Yyk6CisgICAgICAgIHNlbGYuX2xpYi5QUWZpbmlzaChzZWxmLl9oYW5kbGUpCisg ICAgICAgIHNlbGYuX2hhbmRsZSA9IE5vbmUKKworICAgIGRlZiBleGVjKHNlbGYsIHF1ZXJ5OiBz dHIpOgorICAgICAgICAiIiIKKyAgICAgICAgRXhlY3V0ZXMgYSBxdWVyeSB2aWEgUFFleGVjKCkg YW5kIHJldHVybnMgYSBQR3Jlc3VsdC4KKyAgICAgICAgIiIiCisgICAgICAgIHJlcyA9IHNlbGYu X2xpYi5QUWV4ZWMoc2VsZi5faGFuZGxlLCBxdWVyeS5lbmNvZGUoKSkKKyAgICAgICAgcmV0dXJu IHNlbGYuX3N0YWNrLmVudGVyX2NvbnRleHQoUEdyZXN1bHQoc2VsZi5fbGliLCByZXMpKQorCisg ICAgZGVmIHNxbChzZWxmLCBxdWVyeTogc3RyKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4ZWN1 dGVzIGEgcXVlcnkgYW5kIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgaXQgZmFpbHMuCisgICAgICAg IFJldHVybnMgdGhlIHF1ZXJ5IHJlc3VsdHMgd2l0aCBhdXRvbWF0aWMgdHlwZSBjb252ZXJzaW9u IGFuZCBzaW1wbGlmaWNhdGlvbi4KKyAgICAgICAgRm9yIGNvbW1hbmRzIHRoYXQgZG9uJ3QgcmV0 dXJuIGRhdGEgKElOU0VSVCwgVVBEQVRFLCBldGMuKSwgcmV0dXJucyBOb25lLgorCisgICAgICAg IEV4YW1wbGVzOgorICAgICAgICAtIFNFTEVDVCAxIC0+IDEKKyAgICAgICAgLSBTRUxFQ1QgMSwg MiAtPiAoMSwgMikKKyAgICAgICAgLSBTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAz KSAtPiBbMSwgMiwgM10KKyAgICAgICAgLSBTRUxFQ1QgKiBGUk9NIChWQUxVRVMgKDEsICdhJyks ICgyLCAnYicpKSB0IC0+IFsoMSwgJ2EnKSwgKDIsICdiJyldCisgICAgICAgIC0gQ1JFQVRFIFRB QkxFIC4uLiAtPiBOb25lCisgICAgICAgIC0gSU5TRVJUIElOVE8gLi4uIC0+IE5vbmUKKyAgICAg ICAgIiIiCisgICAgICAgIHJlcyA9IHNlbGYuZXhlYyhxdWVyeSkKKyAgICAgICAgc3RhdHVzID0g cmVzLnN0YXR1cygpCisKKyAgICAgICAgaWYgc3RhdHVzID09IEV4ZWNTdGF0dXMuUEdSRVNfRkFU QUxfRVJST1I6CisgICAgICAgICAgICByZXMucmFpc2VfZXJyb3IoKQorICAgICAgICBlbGlmIHN0 YXR1cyA9PSBFeGVjU3RhdHVzLlBHUkVTX0NPTU1BTkRfT0s6CisgICAgICAgICAgICByZXR1cm4g Tm9uZQorICAgICAgICBlbGlmIHN0YXR1cyA9PSBFeGVjU3RhdHVzLlBHUkVTX1RVUExFU19PSzoK KyAgICAgICAgICAgIHJlc3VsdHMgPSByZXMuZmV0Y2hfYWxsKCkKKyAgICAgICAgICAgIHJldHVy biBzaW1wbGlmeV9xdWVyeV9yZXN1bHRzKHJlc3VsdHMpCisgICAgICAgIGVsc2U6CisgICAgICAg ICAgICByZXMucmFpc2VfZXJyb3IoKQorCisKK2RlZiBjb25uc3RyKG9wdHM6IERpY3Rbc3RyLCBB bnldKSAtPiBzdHI6CisgICAgIiIiCisgICAgRmxhdHRlbnMgdGhlIHByb3ZpZGVkIG9wdGlvbnMg aW50byBhIGxpYnBxIGNvbm5lY3Rpb24gc3RyaW5nLiBWYWx1ZXMKKyAgICBhcmUgY29udmVydGVk IHRvIHN0ciBhbmQgcXVvdGVkL2VzY2FwZWQgYXMgbmVjZXNzYXJ5LgorICAgICIiIgorICAgIHNl dHRpbmdzID0gW10KKworICAgIGZvciBrLCB2IGluIG9wdHMuaXRlbXMoKToKKyAgICAgICAgdiA9 IHN0cih2KQorICAgICAgICBpZiBub3QgdjoKKyAgICAgICAgICAgIHYgPSAiJyciCisgICAgICAg IGVsc2U6CisgICAgICAgICAgICB2ID0gdi5yZXBsYWNlKCJcXCIsICJcXFxcIikKKyAgICAgICAg ICAgIHYgPSB2LnJlcGxhY2UoIiciLCAiXFwnIikKKworICAgICAgICAgICAgaWYgIiAiIGluIHY6 CisgICAgICAgICAgICAgICAgdiA9IGYiJ3t2fSciCisKKyAgICAgICAgc2V0dGluZ3MuYXBwZW5k KGYie2t9PXt2fSIpCisKKyAgICByZXR1cm4gIiAiLmpvaW4oc2V0dGluZ3MpCisKKworZGVmIGNv bm5lY3QoCisgICAgbGlicHFfaGFuZGxlOiBjdHlwZXMuQ0RMTCwKKyAgICBzdGFjazogY29udGV4 dGxpYi5FeGl0U3RhY2ssCisgICAgcmVtYWluaW5nX3RpbWVvdXRfZm46IENhbGxhYmxlW1tdLCBm bG9hdF0sCisgICAgKipvcHRzLAorKSAtPiBQR2Nvbm46CisgICAgIiIiCisgICAgQ29ubmVjdHMg dG8gYSBzZXJ2ZXIsIHVzaW5nIHRoZSBnaXZlbiBjb25uZWN0aW9uIG9wdGlvbnMsIGFuZAorICAg IHJldHVybnMgYSBQR2Nvbm4gb2JqZWN0IHdyYXBwaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZS4g QQorICAgIGZhaWx1cmUgd2lsbCByYWlzZSBMaWJwcUVycm9yLgorCisgICAgQ29ubmVjdGlvbnMg aG9ub3IgUEdfVEVTVF9USU1FT1VUX0RFRkFVTFQgdW5sZXNzIGNvbm5lY3RfdGltZW91dCBpcwor ICAgIGV4cGxpY2l0bHkgb3ZlcnJpZGRlbiBpbiBvcHRzLgorCisgICAgQXJnczoKKyAgICAgICAg bGlicHFfaGFuZGxlOiBjdHlwZXMuQ0RMTCBoYW5kbGUgdG8gbGlicHEgbGlicmFyeQorICAgICAg ICBzdGFjazogRXhpdFN0YWNrIGZvciBtYW5hZ2luZyBjb25uZWN0aW9uIGNsZWFudXAKKyAgICAg ICAgcmVtYWluaW5nX3RpbWVvdXRfZm46IEZ1bmN0aW9uIHRoYXQgcmV0dXJucyByZW1haW5pbmcg dGltZW91dCBpbiBzZWNvbmRzCisgICAgICAgICoqb3B0czogQ29ubmVjdGlvbiBvcHRpb25zICho b3N0LCBwb3J0LCBkYm5hbWUsIGV0Yy4pCisKKyAgICBSZXR1cm5zOgorICAgICAgICBQR2Nvbm46 IENvbm5lY3RlZCBkYXRhYmFzZSBjb25uZWN0aW9uCisKKyAgICBSYWlzZXM6CisgICAgICAgIExp YnBxRXJyb3I6IElmIGNvbm5lY3Rpb24gZmFpbHMKKyAgICAiIiIKKworICAgIGlmICJjb25uZWN0 X3RpbWVvdXQiIG5vdCBpbiBvcHRzOgorICAgICAgICB0ID0gaW50KHJlbWFpbmluZ190aW1lb3V0 X2ZuKCkpCisgICAgICAgIG9wdHNbImNvbm5lY3RfdGltZW91dCJdID0gbWF4KHQsIDEpCisKKyAg ICBjb25uX3AgPSBsaWJwcV9oYW5kbGUuUFFjb25uZWN0ZGIoY29ubnN0cihvcHRzKS5lbmNvZGUo KSkKKworICAgICMgQ2hlY2sgY29ubmVjdGlvbiBzdGF0dXMgYmVmb3JlIGFkZGluZyB0byBzdGFj aworICAgIGlmIGxpYnBxX2hhbmRsZS5QUXN0YXR1cyhjb25uX3ApICE9IENvbm5lY3Rpb25TdGF0 dXMuQ09OTkVDVElPTl9PSzoKKyAgICAgICAgZXJyb3JfbXNnID0gbGlicHFfaGFuZGxlLlBRZXJy b3JNZXNzYWdlKGNvbm5fcCkuZGVjb2RlKCkKKyAgICAgICAgIyBNYW51YWxseSBjbG9zZSB0aGUg ZmFpbGVkIGNvbm5lY3Rpb24KKyAgICAgICAgbGlicHFfaGFuZGxlLlBRZmluaXNoKGNvbm5fcCkK KyAgICAgICAgcmFpc2UgTGlicHFFcnJvcihlcnJvcl9tc2cpCisKKyAgICAjIENvbm5lY3Rpb24g c3VjY2VlZGVkIC0gYWRkIHRvIHN0YWNrIGZvciBjbGVhbnVwCisgICAgY29ubiA9IHN0YWNrLmVu dGVyX2NvbnRleHQoUEdjb25uKGxpYnBxX2hhbmRsZSwgY29ubl9wLCBzdGFjaz1zdGFjaykpCisg ICAgcmV0dXJuIGNvbm4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGVzdC9saWJwcS9lcnJvcnMu cHkgYi9zcmMvdGVzdC9weXRlc3QvbGlicHEvZXJyb3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5jNjY1YjY2M2UyMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L3B5dGVzdC9saWJwcS9lcnJvcnMucHkKQEAgLTAsMCArMSw2MiBAQAorIyBDb3B5cmlnaHQg KGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyIiIgorRXhj ZXB0aW9uIGNsYXNzZXMgZm9yIGxpYnBxIGVycm9ycy4KKyIiIgorCitmcm9tIHR5cGluZyBpbXBv cnQgT3B0aW9uYWwKKworCitjbGFzcyBMaWJwcUVycm9yKFJ1bnRpbWVFcnJvcik6CisgICAgIiIi RXhjZXB0aW9uIGZvciBsaWJwcSBlcnJvcnMgd2l0aCBQb3N0Z3JlU1FMIGRpYWdub3N0aWMgZmll bGRzLiIiIgorCisgICAgc3Fsc3RhdGU6IE9wdGlvbmFsW3N0cl0KKyAgICBzZXZlcml0eTogT3B0 aW9uYWxbc3RyXQorICAgIHByaW1hcnk6IE9wdGlvbmFsW3N0cl0KKyAgICBkZXRhaWw6IE9wdGlv bmFsW3N0cl0KKyAgICBoaW50OiBPcHRpb25hbFtzdHJdCisgICAgc2NoZW1hX25hbWU6IE9wdGlv bmFsW3N0cl0KKyAgICB0YWJsZV9uYW1lOiBPcHRpb25hbFtzdHJdCisgICAgY29sdW1uX25hbWU6 IE9wdGlvbmFsW3N0cl0KKyAgICBkYXRhdHlwZV9uYW1lOiBPcHRpb25hbFtzdHJdCisgICAgY29u c3RyYWludF9uYW1lOiBPcHRpb25hbFtzdHJdCisgICAgcG9zaXRpb246IE9wdGlvbmFsW2ludF0K KyAgICBjb250ZXh0OiBPcHRpb25hbFtzdHJdCisKKyAgICBkZWYgX19pbml0X18oCisgICAgICAg IHNlbGYsCisgICAgICAgIG1lc3NhZ2U6IHN0ciwKKyAgICAgICAgKiwKKyAgICAgICAgc3Fsc3Rh dGU6IE9wdGlvbmFsW3N0cl0gPSBOb25lLAorICAgICAgICBzZXZlcml0eTogT3B0aW9uYWxbc3Ry XSA9IE5vbmUsCisgICAgICAgIHByaW1hcnk6IE9wdGlvbmFsW3N0cl0gPSBOb25lLAorICAgICAg ICBkZXRhaWw6IE9wdGlvbmFsW3N0cl0gPSBOb25lLAorICAgICAgICBoaW50OiBPcHRpb25hbFtz dHJdID0gTm9uZSwKKyAgICAgICAgc2NoZW1hX25hbWU6IE9wdGlvbmFsW3N0cl0gPSBOb25lLAor ICAgICAgICB0YWJsZV9uYW1lOiBPcHRpb25hbFtzdHJdID0gTm9uZSwKKyAgICAgICAgY29sdW1u X25hbWU6IE9wdGlvbmFsW3N0cl0gPSBOb25lLAorICAgICAgICBkYXRhdHlwZV9uYW1lOiBPcHRp b25hbFtzdHJdID0gTm9uZSwKKyAgICAgICAgY29uc3RyYWludF9uYW1lOiBPcHRpb25hbFtzdHJd ID0gTm9uZSwKKyAgICAgICAgcG9zaXRpb246IE9wdGlvbmFsW2ludF0gPSBOb25lLAorICAgICAg ICBjb250ZXh0OiBPcHRpb25hbFtzdHJdID0gTm9uZSwKKyAgICApOgorICAgICAgICBzdXBlcigp Ll9faW5pdF9fKG1lc3NhZ2UpCisgICAgICAgIHNlbGYuc3Fsc3RhdGUgPSBzcWxzdGF0ZQorICAg ICAgICBzZWxmLnNldmVyaXR5ID0gc2V2ZXJpdHkKKyAgICAgICAgc2VsZi5wcmltYXJ5ID0gcHJp bWFyeQorICAgICAgICBzZWxmLmRldGFpbCA9IGRldGFpbAorICAgICAgICBzZWxmLmhpbnQgPSBo aW50CisgICAgICAgIHNlbGYuc2NoZW1hX25hbWUgPSBzY2hlbWFfbmFtZQorICAgICAgICBzZWxm LnRhYmxlX25hbWUgPSB0YWJsZV9uYW1lCisgICAgICAgIHNlbGYuY29sdW1uX25hbWUgPSBjb2x1 bW5fbmFtZQorICAgICAgICBzZWxmLmRhdGF0eXBlX25hbWUgPSBkYXRhdHlwZV9uYW1lCisgICAg ICAgIHNlbGYuY29uc3RyYWludF9uYW1lID0gY29uc3RyYWludF9uYW1lCisgICAgICAgIHNlbGYu cG9zaXRpb24gPSBwb3NpdGlvbgorICAgICAgICBzZWxmLmNvbnRleHQgPSBjb250ZXh0CisKKyAg ICBAcHJvcGVydHkKKyAgICBkZWYgc3Fsc3RhdGVfY2xhc3Moc2VsZikgLT4gT3B0aW9uYWxbc3Ry XToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgMi1jaGFyYWN0ZXIgU1FMU1RBVEUgY2xhc3MuIiIi CisgICAgICAgIGlmIHNlbGYuc3Fsc3RhdGUgYW5kIGxlbihzZWxmLnNxbHN0YXRlKSA+PSAyOgor ICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3Fsc3RhdGVbOjJdCisgICAgICAgIHJldHVybiBOb25l CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRlc3QvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9weXRl c3QvbWVzb24uYnVpbGQKaW5kZXggYjFmNjA2MWIzMDcuLmI4NmJlOTAxZTdjIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9weXRlc3QvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvcHl0ZXN0L21lc29u LmJ1aWxkCkBAIC0xMCw2ICsxMCwxMCBAQCB0ZXN0cyArPSB7CiAgICdiZCc6IG1lc29uLmN1cnJl bnRfYnVpbGRfZGlyKCksCiAgICdweXRlc3QnOiB7CiAgICAgJ3Rlc3RzJzogWworICAgICAgJ3B5 dC90ZXN0X2Vycm9ycy5weScsCisgICAgICAncHl0L3Rlc3RfbGlicHEucHknLAorICAgICAgJ3B5 dC90ZXN0X211bHRpX3NlcnZlci5weScsCisgICAgICAncHl0L3Rlc3RfcXVlcnlfaGVscGVycy5w eScsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGVzdC9weXBnL19f aW5pdF9fLnB5IGIvc3JjL3Rlc3QvcHl0ZXN0L3B5cGcvX19pbml0X18ucHkKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRlZTkxMjg5ZjcwCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvcHl0ZXN0L3B5cGcvX19pbml0X18ucHkKQEAgLTAsMCArMSwxMCBAQAorIyBD b3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisK K2Zyb20gLl9lbnYgaW1wb3J0IHJlcXVpcmVfdGVzdF9leHRyYXMsIHNraXBfdW5sZXNzX3Rlc3Rf ZXh0cmFzCitmcm9tIC5zZXJ2ZXIgaW1wb3J0IFBvc3RncmVzU2VydmVyCisKK19fYWxsX18gPSBb CisgICAgInJlcXVpcmVfdGVzdF9leHRyYXMiLAorICAgICJza2lwX3VubGVzc190ZXN0X2V4dHJh cyIsCisgICAgIlBvc3RncmVzU2VydmVyIiwKK10KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGVz dC9weXBnL19lbnYucHkgYi9zcmMvdGVzdC9weXRlc3QvcHlwZy9fZW52LnB5Cm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNDA4N2JlMzIxMgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L3B5dGVzdC9weXBnL19lbnYucHkKQEAgLTAsMCArMSw3MiBAQAorIyBDb3B5 cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK2lt cG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKKworaW1wb3J0IHB5dGVzdAorCitsb2dnZXIgPSBsb2dn aW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitkZWYgX3Rlc3RfZXh0cmFfc2tpcF9yZWFzb24o KmtleXM6IHN0cikgLT4gc3RyOgorICAgIHJldHVybiAicmVxdWlyZXMge30gdG8gYmUgc2V0IGlu IFBHX1RFU1RfRVhUUkEiLmZvcm1hdCgiLCAiLmpvaW4oa2V5cykpCisKKworZGVmIF9oYXNfdGVz dF9leHRyYShrZXk6IHN0cikgLT4gYm9vbDoKKyAgICAiIiIKKyAgICBSZXR1cm5zIFRydWUgaWYg dGhlIFBHX1RFU1RfRVhUUkEgZW52aXJvbm1lbnQgdmFyaWFibGUgY29udGFpbnMgdGhlIGdpdmVu CisgICAga2V5LgorICAgICIiIgorICAgIGV4dHJhID0gb3MuZ2V0ZW52KCJQR19URVNUX0VYVFJB IiwgIiIpCisgICAgcmV0dXJuIGtleSBpbiBleHRyYS5zcGxpdCgpCisKKworZGVmIHJlcXVpcmVf dGVzdF9leHRyYXMoKmtleXM6IHN0cik6CisgICAgIiIiCisgICAgQSBjb252ZW5pZW5jZSBhbm5v dGF0aW9uIHdoaWNoIHdpbGwgc2tpcCB0ZXN0cyBpZiBhbGwgb2YgdGhlIHJlcXVpcmVkIGtleXMK KyAgICBhcmUgbm90IHByZXNlbnQgaW4gUEdfVEVTVF9FWFRSQS4KKworICAgIFRvIHNraXAgYSBw YXJ0aWN1bGFyIHRlc3QgZnVuY3Rpb24gb3IgY2xhc3M6CisKKyAgICAgICAgQHB5cGcucmVxdWly ZV90ZXN0X2V4dHJhcygibGRhcCIpCisgICAgICAgIGRlZiB0ZXN0X3NvbWVfbGRhcF9mZWF0dXJl KCk6CisgICAgICAgICAgICAuLi4KKworICAgIFRvIHNraXAgYW4gZW50aXJlIG1vZHVsZToKKwor ICAgICAgICBweXRlc3RtYXJrID0gcHlwZy5yZXF1aXJlX3Rlc3RfZXh0cmEoInNzbCIsICJrZXJi ZXJvcyIpCisgICAgIiIiCisgICAgcmV0dXJuIHB5dGVzdC5tYXJrLnNraXBpZigKKyAgICAgICAg bm90IGFsbChbX2hhc190ZXN0X2V4dHJhKGspIGZvciBrIGluIGtleXNdKSwKKyAgICAgICAgcmVh c29uPV90ZXN0X2V4dHJhX3NraXBfcmVhc29uKCprZXlzKSwKKyAgICApCisKKworZGVmIHNraXBf dW5sZXNzX3Rlc3RfZXh0cmFzKCprZXlzOiBzdHIpOgorICAgICIiIgorICAgIFNraXAgdGhlIGN1 cnJlbnQgdGVzdC9maXh0dXJlIGlmIGFueSBvZiB0aGUgcmVxdWlyZWQga2V5cyBhcmUgbm90IHBy ZXNlbnQKKyAgICBpbiBQR19URVNUX0VYVFJBLiBVc2UgdGhpcyBpbnNpZGUgZml4dHVyZXMgd2hl cmUgZGVjb3JhdG9ycyBjYW4ndCBiZSB1c2VkLgorCisgICAgICAgIEBweXRlc3QuZml4dHVyZQor ICAgICAgICBkZWYgbXlfZml4dHVyZSgpOgorICAgICAgICAgICAgc2tpcF91bmxlc3NfdGVzdF9l eHRyYXMoImxkYXAiKQorICAgICAgICAgICAgLi4uCisgICAgIiIiCisgICAgaWYgbm90IGFsbChb X2hhc190ZXN0X2V4dHJhKGspIGZvciBrIGluIGtleXNdKToKKyAgICAgICAgcHl0ZXN0LnNraXAo X3Rlc3RfZXh0cmFfc2tpcF9yZWFzb24oKmtleXMpKQorCisKK2RlZiB0ZXN0X3RpbWVvdXRfZGVm YXVsdCgpIC0+IGludDoKKyAgICAiIiIKKyAgICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgUEdf VEVTVF9USU1FT1VUX0RFRkFVTFQgZW52aXJvbm1lbnQgdmFyaWFibGUsIGluCisgICAgc2Vjb25k cywgb3IgMTgwIGlmIG9uZSB3YXMgbm90IHByb3ZpZGVkLgorICAgICIiIgorICAgIGRlZmF1bHQg PSBvcy5nZXRlbnYoIlBHX1RFU1RfVElNRU9VVF9ERUZBVUxUIiwgIiIpCisgICAgaWYgbm90IGRl ZmF1bHQ6CisgICAgICAgIHJldHVybiAxODAKKworICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGlu dChkZWZhdWx0KQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIHY6CisgICAgICAgIGxvZ2dlci53 YXJuaW5nKCJQR19URVNUX1RJTUVPVVRfREVGQVVMVCBjb3VsZCBub3QgYmUgcGFyc2VkOiAiICsg c3RyKHYpKQorICAgICAgICByZXR1cm4gMTgwCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRlc3Qv cHlwZy9maXh0dXJlcy5weSBiL3NyYy90ZXN0L3B5dGVzdC9weXBnL2ZpeHR1cmVzLnB5Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44YzBjYjYwZGFhNQotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L3B5dGVzdC9weXBnL2ZpeHR1cmVzLnB5CkBAIC0wLDAgKzEsMzM1 IEBACisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKworaW1wb3J0IG9zCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IHBhdGhsaWIKK2lt cG9ydCB0aW1lCitmcm9tIHR5cGluZyBpbXBvcnQgTGlzdAorCitpbXBvcnQgcHl0ZXN0CisKK2Zy b20gLl9lbnYgaW1wb3J0IHRlc3RfdGltZW91dF9kZWZhdWx0Citmcm9tIC51dGlsIGltcG9ydCBj YXB0dXJlCitmcm9tIC5zZXJ2ZXIgaW1wb3J0IFBvc3RncmVzU2VydmVyCisKK2Zyb20gbGlicHEg aW1wb3J0IGxvYWRfbGlicHFfaGFuZGxlLCBjb25uZWN0IGFzIGxpYnBxX2Nvbm5lY3QKKworCisj IFN0YXNoIGtleSBmb3IgdHJhY2tpbmcgc2VydmVycyBmb3IgbG9nIHJlcG9ydGluZy4KK19zZXJ2 ZXJzX2tleSA9IHB5dGVzdC5TdGFzaEtleVtMaXN0W1Bvc3RncmVzU2VydmVyXV0oKQorCisKK2Rl ZiBfcmVjb3JkX3NlcnZlcl9mb3JfbG9nX3JlcG9ydGluZyhyZXF1ZXN0LCBzZXJ2ZXIpOgorICAg ICIiIlJlY29yZCBhIHNlcnZlciBmb3IgbG9nIHJlcG9ydGluZyBvbiB0ZXN0IGZhaWx1cmUuIiIi CisgICAgaWYgX3NlcnZlcnNfa2V5IG5vdCBpbiByZXF1ZXN0Lm5vZGUuc3Rhc2g6CisgICAgICAg IHJlcXVlc3Qubm9kZS5zdGFzaFtfc2VydmVyc19rZXldID0gW10KKyAgICByZXF1ZXN0Lm5vZGUu c3Rhc2hbX3NlcnZlcnNfa2V5XS5hcHBlbmQoc2VydmVyKQorCisKK0BweXRlc3QuZml4dHVyZQor ZGVmIHJlbWFpbmluZ190aW1lb3V0KCk6CisgICAgIiIiCisgICAgVGhpcyBmaXh0dXJlIHByb3Zp ZGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGhvdyBtdWNoIG9mIHRoZQorICAgIFBHX1RFU1Rf VElNRU9VVF9ERUZBVUxUIHJlbWFpbnMgZm9yIHRoZSBjdXJyZW50IHRlc3QsIGluIGZyYWN0aW9u YWwgc2Vjb25kcy4KKyAgICBUaGlzIHZhbHVlIGlzIG5ldmVyIGxlc3MgdGhhbiB6ZXJvLgorCisg ICAgVGhpcyBmaXh0dXJlIGlzIHBlci10ZXN0LCBzbyB0aGUgZGVhZGxpbmUgaXMgYWxzbyByZXNl dCBvbiBhIHBlci10ZXN0IGJhc2lzLgorICAgICIiIgorICAgIG5vdyA9IHRpbWUubW9ub3Rvbmlj KCkKKyAgICBkZWFkbGluZSA9IG5vdyArIHRlc3RfdGltZW91dF9kZWZhdWx0KCkKKworICAgIHJl dHVybiBsYW1iZGE6IG1heChkZWFkbGluZSAtIHRpbWUubW9ub3RvbmljKCksIDApCisKKworQHB5 dGVzdC5maXh0dXJlKHNjb3BlPSJtb2R1bGUiKQorZGVmIHJlbWFpbmluZ190aW1lb3V0X21vZHVs ZSgpOgorICAgICIiIgorICAgIFNhbWUgYXMgcmVtYWluaW5nX3RpbWVvdXQsIGJ1dCB0aGUgZGVh ZGxpbmUgaXMgc2V0IG9uY2UgcGVyIG1vZHVsZS4KKworICAgIFRoaXMgZml4dHVyZSBpcyBwZXIt bW9kdWxlLCB3aGljaCBtZWFucyBpdCdzIGdlbmVyYWxseSBvbmx5IHJlYWxseSB1c2VmdWwKKyAg ICBmb3IgY29uZmlndXJpbmcgdGltZW91dHMgb2Ygb3BlcmF0aW9ucyB0aGF0IGhhcHBlbiBpbiB0 aGUgc2V0dXAgcGhhc2Ugb2YKKyAgICBhbm90aGVyIG1vZHVsZSBmaXh0dXJlcy4gSWYgeW91IHVz ZSBpdCBpbiBhIHRlc3QgaXQgd291bGQgbWVhbiB0aGF0IGVhY2gKKyAgICBzdWJzZXF1ZW50IHRl c3QgaW4gdGhlIG1vZHVsZSBnZXRzIGEgcmVkdWNlZCB0aW1lb3V0LgorICAgICIiIgorICAgIG5v dyA9IHRpbWUubW9ub3RvbmljKCkKKyAgICBkZWFkbGluZSA9IG5vdyArIHRlc3RfdGltZW91dF9k ZWZhdWx0KCkKKworICAgIHJldHVybiBsYW1iZGE6IG1heChkZWFkbGluZSAtIHRpbWUubW9ub3Rv bmljKCksIDApCisKKworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJzZXNzaW9uIikKK2RlZiBsaWJw cV9oYW5kbGUobGliZGlyLCBiaW5kaXIpOgorICAgICIiIgorICAgIExvYWRzIGEgY3R5cGVzIGhh bmRsZSBmb3IgbGlicHEuIFNvbWUgY29tbW9uIGZ1bmN0aW9uIHByb3RvdHlwZXMgYXJlCisgICAg aW5pdGlhbGl6ZWQgZm9yIGdlbmVyYWwgdXNlLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAg cmV0dXJuIGxvYWRfbGlicHFfaGFuZGxlKGxpYmRpciwgYmluZGlyKQorICAgIGV4Y2VwdCBPU0Vy cm9yIGFzIGU6CisgICAgICAgIGlmICJ3cm9uZyBFTEYgY2xhc3MiIGluIHN0cihlKToKKyAgICAg ICAgICAgICMgVGhpcyBoYXBwZW5zIGluIENJIHdoZW4gdHJ5aW5nIHRvIGxlYWQgYSAzMi1iaXQg bGlicHEgbGlicmFyeQorICAgICAgICAgICAgIyB3aXRoIGEgNjQtYml0IFB5dGhvbgorICAgICAg ICAgICAgcHl0ZXN0LnNraXAoImxpYnBxIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBtYXRjaCBQeXRo b24gaW50ZXJwcmV0ZXIiKQorICAgICAgICByYWlzZQorCisKK0BweXRlc3QuZml4dHVyZQorZGVm IGNvbm5lY3QobGlicHFfaGFuZGxlLCByZW1haW5pbmdfdGltZW91dCk6CisgICAgIiIiCisgICAg UmV0dXJucyBhIGZ1bmN0aW9uIHRvIGNvbm5lY3QgdG8gUG9zdGdyZVNRTCB2aWEgbGlicHEuCisK KyAgICBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gYWNjZXB0cyBjb25uZWN0aW9uIG9wdGlvbnMgYXMg a2V5d29yZCBhcmd1bWVudHMKKyAgICAoaG9zdCwgcG9ydCwgZGJuYW1lLCBldGMuKSBhbmQgcmV0 dXJucyBhIFBHY29ubiBvYmplY3QuIENvbm5lY3Rpb25zCisgICAgYXJlIGF1dG9tYXRpY2FsbHkg Y2xlYW5lZCB1cCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0LgorCisgICAgRXhhbXBsZToKKyAgICAg ICAgY29ubiA9IGNvbm5lY3QoaG9zdD0nbG9jYWxob3N0JywgcG9ydD01NDMyLCBkYm5hbWU9J3Bv c3RncmVzJykKKyAgICAgICAgcmVzdWx0ID0gY29ubi5zcWwoIlNFTEVDVCAxIikKKyAgICAiIiIK KyAgICB3aXRoIGNvbnRleHRsaWIuRXhpdFN0YWNrKCkgYXMgc3RhY2s6CisKKyAgICAgICAgZGVm IF9jb25uZWN0KCoqb3B0cyk6CisgICAgICAgICAgICByZXR1cm4gbGlicHFfY29ubmVjdChsaWJw cV9oYW5kbGUsIHN0YWNrLCByZW1haW5pbmdfdGltZW91dCwgKipvcHRzKQorCisgICAgICAgIHlp ZWxkIF9jb25uZWN0CisKKworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJzZXNzaW9uIikKK2RlZiBw Z19jb25maWcoKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIHRoZSBwYXRoIHRvIHBnX2NvbmZpZy4g VXNlcyBQR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgc2V0LAorICAgIG90aGVyd2lz ZSB1c2VzICdwZ19jb25maWcnIGZyb20gUEFUSC4KKyAgICAiIiIKKyAgICByZXR1cm4gb3MuZW52 aXJvbi5nZXQoIlBHX0NPTkZJRyIsICJwZ19jb25maWciKQorCisKK0BweXRlc3QuZml4dHVyZShz Y29wZT0ic2Vzc2lvbiIpCitkZWYgYmluZGlyKHBnX2NvbmZpZyk6CisgICAgIiIiCisgICAgUmV0 dXJucyB0aGUgUG9zdGdyZVNRTCBiaW4gZGlyZWN0b3J5IHVzaW5nIHBnX2NvbmZpZyAtLWJpbmRp ci4KKyAgICAiIiIKKyAgICByZXR1cm4gcGF0aGxpYi5QYXRoKGNhcHR1cmUocGdfY29uZmlnLCAi LS1iaW5kaXIiKSkKKworCitAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9InNlc3Npb24iKQorZGVmIGxp YmRpcihwZ19jb25maWcpOgorICAgICIiIgorICAgIFJldHVybnMgdGhlIFBvc3RncmVTUUwgbGli IGRpcmVjdG9yeSB1c2luZyBwZ19jb25maWcgLS1saWJkaXIuCisgICAgIiIiCisgICAgcmV0dXJu IHBhdGhsaWIuUGF0aChjYXB0dXJlKHBnX2NvbmZpZywgIi0tbGliZGlyIikpCisKKworQHB5dGVz dC5maXh0dXJlKHNjb3BlPSJzZXNzaW9uIikKK2RlZiB0bXBfY2hlY2sodG1wX3BhdGhfZmFjdG9y eSkgLT4gcGF0aGxpYi5QYXRoOgorICAgICIiIgorICAgIFJldHVybnMgdGhlIHRtcF9jaGVjayBk aXJlY3RvcnkgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIHRlc3RzLiBJZgorICAgIFRFU1RE QVRBRElSIGlzIHByb3ZpZGVkLCB0aGF0IHdpbGwgYmUgdXNlZDsgb3RoZXJ3aXNlIGEgbmV3IHRl bXBvcmFyeQorICAgIGRpcmVjdG9yeSBpcyBjcmVhdGVkIGluIHRoZSBweXRlc3QgdGVtcCByb290 LgorICAgICIiIgorICAgIGQgPSBvcy5nZXRlbnYoIlRFU1REQVRBRElSIikKKyAgICBpZiBkOgor ICAgICAgICBkID0gcGF0aGxpYi5QYXRoKGQpCisgICAgZWxzZToKKyAgICAgICAgZCA9IHRtcF9w YXRoX2ZhY3RvcnkubWt0ZW1wKCJ0bXBfY2hlY2siKQorCisgICAgcmV0dXJuIGQKKworCitAcHl0 ZXN0LmZpeHR1cmUoc2NvcGU9InNlc3Npb24iKQorZGVmIGRhdGFkaXIodG1wX2NoZWNrKToKKyAg ICAiIiIKKyAgICBSZXR1cm5zIHRoZSBkYXRhIGRpcmVjdG9yeSB0byB1c2UgZm9yIHRoZSBwZyBm aXh0dXJlLgorICAgICIiIgorCisgICAgcmV0dXJuIHRtcF9jaGVjayAvICJwZ2RhdGEiCisKKwor QHB5dGVzdC5maXh0dXJlKHNjb3BlPSJzZXNzaW9uIikKK2RlZiBzb2NrZGlyKHRtcF9wYXRoX2Zh Y3RvcnkpOgorICAgICIiIgorICAgIFJldHVybnMgdGhlIGRpcmVjdG9yeSBuYW1lIHRvIHVzZSBh cyB0aGUgc2VydmVyJ3MgdW5peF9zb2NrZXRfZGlyZWN0b3JpZXMKKyAgICBzZXR0aW5nLiBMb2Nh bCBjbGllbnQgY29ubmVjdGlvbnMgdXNlIHRoaXMgYXMgdGhlIFBHSE9TVC4KKworICAgIEF0IHRo ZSBtb21lbnQsIHRoaXMgaXMgYWx3YXlzIHB1dCB1bmRlciB0aGUgcHl0ZXN0IHRlbXAgcm9vdC4K KyAgICAiIiIKKyAgICByZXR1cm4gdG1wX3BhdGhfZmFjdG9yeS5ta3RlbXAoInNvY2tmaWxlcyIp CisKKworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJzZXNzaW9uIikKK2RlZiBwZ19zZXJ2ZXJfZ2xv YmFsKGJpbmRpciwgZGF0YWRpciwgc29ja2RpciwgbGlicHFfaGFuZGxlKToKKyAgICAiIiIKKyAg ICBTdGFydHMgYSBydW5uaW5nIFBvc3RncmVzIHNlcnZlciBsaXN0ZW5pbmcgb24gbG9jYWxob3N0 LiBUaGUgSEJBIGluaXRpYWxseQorICAgIGFsbG93cyBvbmx5IGxvY2FsIFVOSVggY29ubmVjdGlv bnMgZnJvbSB0aGUgc2FtZSB1c2VyLgorCisgICAgUmV0dXJucyBhIFBvc3RncmVzU2VydmVyIGlu c3RhbmNlIHdpdGggbWV0aG9kcyBmb3Igc2VydmVyIG1hbmFnZW1lbnQsIGNvbmZpZ3VyYXRpb24s CisgICAgYW5kIGNyZWF0aW5nIHRlc3QgZGF0YWJhc2VzL3VzZXJzLgorICAgICIiIgorICAgIHNl cnZlciA9IFBvc3RncmVzU2VydmVyKCJkZWZhdWx0IiwgYmluZGlyLCBkYXRhZGlyLCBzb2NrZGly LCBsaWJwcV9oYW5kbGUpCisKKyAgICB5aWVsZCBzZXJ2ZXIKKworICAgICMgQ2xlYW51cCBhbnkg dGVzdCByZXNvdXJjZXMKKyAgICBzZXJ2ZXIuY2xlYW51cCgpCisKKyAgICAjIFN0b3AgdGhlIHNl cnZlcgorICAgIHNlcnZlci5zdG9wKCkKKworCitAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9Im1vZHVs ZSIpCitkZWYgcGdfc2VydmVyX21vZHVsZShwZ19zZXJ2ZXJfZ2xvYmFsKToKKyAgICAiIiIKKyAg ICBNb2R1bGUtc2NvcGVkIHNlcnZlciBjb250ZXh0LiBXaGljaCBjYW4gYmUgdXNlZnVsIHNvIHRo YXQgY2VydGFpbiBzZXR0aW5ncworICAgIGNhbiBiZSBvdmVycmlkZW4gYXQgdGhlIG1vZHVsZSBs ZXZlbCB0aHJvdWdoIGF1dG91c2UgZml4dHVyZXMuIEFuIGV4YW1wbGUKKyAgICBvZiB0aGlzIGlz IGluIHRoZSBTU0wgdGVzdHMuCisgICAgIiIiCisgICAgd2l0aCBwZ19zZXJ2ZXJfZ2xvYmFsLnN1 YmNvbnRleHQoKSBhcyBzOgorICAgICAgICB5aWVsZCBzCisKKworQHB5dGVzdC5maXh0dXJlCitk ZWYgcGcocmVxdWVzdCwgcGdfc2VydmVyX21vZHVsZSwgcmVtYWluaW5nX3RpbWVvdXQpOgorICAg ICIiIgorICAgIFBlci10ZXN0IHNlcnZlciBjb250ZXh0LiBVc2UgdGhpcyBmaXh0dXJlIHRvIG1h a2UgY2hhbmdlcyB0byB0aGUgc2VydmVyCisgICAgd2hpY2ggd2lsbCBiZSByb2xsZWQgYmFjayBh dCB0aGUgZW5kIG9mIHRoZSB0ZXN0IChlLmcuLCBjcmVhdGluZyB0ZXN0CisgICAgdXNlcnMvZGF0 YWJhc2VzKS4KKworICAgIEFsc28gY2FwdHVyZXMgdGhlIFBvc3RncmVTUUwgbG9nIHBvc2l0aW9u IGF0IHRlc3Qgc3RhcnQgc28gdGhhdCBhbnkgbmV3CisgICAgbG9nIGVudHJpZXMgY2FuIGJlIGlu Y2x1ZGVkIGluIHRoZSB0ZXN0IHJlcG9ydCBvbiBmYWlsdXJlLgorICAgICIiIgorICAgIHdpdGgg cGdfc2VydmVyX21vZHVsZS5zdGFydF9uZXdfdGVzdChyZW1haW5pbmdfdGltZW91dCkgYXMgczoK KyAgICAgICAgX3JlY29yZF9zZXJ2ZXJfZm9yX2xvZ19yZXBvcnRpbmcocmVxdWVzdCwgcykKKyAg ICAgICAgeWllbGQgcworCisKK0BweXRlc3QuZml4dHVyZQorZGVmIGNvbm4ocGcpOgorICAgICIi IgorICAgIFJldHVybnMgYSBjb25uZWN0ZWQgUEdjb25uIGluc3RhbmNlIHRvIHRoZSB0ZXN0IFBv c3RncmVTUUwgc2VydmVyLgorICAgIFRoZSBjb25uZWN0aW9uIGlzIGF1dG9tYXRpY2FsbHkgY2xl YW5lZCB1cCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0LgorCisgICAgRXhhbXBsZToKKyAgICAgICAg ZGVmIHRlc3Rfc29tZXRoaW5nKGNvbm4pOgorICAgICAgICAgICAgcmVzdWx0ID0gY29ubi5zcWwo IlNFTEVDVCAxIikKKyAgICAgICAgICAgIGFzc2VydCByZXN1bHQgPT0gMQorICAgICIiIgorICAg IHJldHVybiBwZy5jb25uZWN0KCkKKworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiBjcmVhdGVfcGco cmVxdWVzdCwgYmluZGlyLCBzb2NrZGlyLCBsaWJwcV9oYW5kbGUsIHRtcF9jaGVjaywgcmVtYWlu aW5nX3RpbWVvdXQpOgorICAgICIiIgorICAgIEZhY3RvcnkgZml4dHVyZSB0byBjcmVhdGUgYWRk aXRpb25hbCBQb3N0Z3JlU1FMIHNlcnZlcnMgKHBlci10ZXN0IHNjb3BlKS4KKworICAgIFJldHVy bnMgYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgbmV3IFBvc3RncmVTUUwgc2VydmVyIGluc3RhbmNl cy4KKyAgICBTZXJ2ZXJzIGFyZSBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgdXAgYXQgdGhlIGVuZCBv ZiB0aGUgdGVzdC4KKworICAgIEV4YW1wbGU6CisgICAgICAgIGRlZiB0ZXN0X211bHRpcGxlX3Nl cnZlcnMoY3JlYXRlX3BnKToKKyAgICAgICAgICAgIG5vZGUxID0gY3JlYXRlX3BnKCkKKyAgICAg ICAgICAgIG5vZGUyID0gY3JlYXRlX3BnKCkKKyAgICAgICAgICAgIG5vZGUzID0gY3JlYXRlX3Bn KCkKKyAgICAiIiIKKyAgICBzZXJ2ZXJzID0gW10KKworICAgIGRlZiBfY3JlYXRlKG5hbWU9Tm9u ZSwgKiprd2FyZ3MpOgorICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBjb3Vu dCA9IGxlbihzZXJ2ZXJzKSArIDEKKyAgICAgICAgICAgIG5hbWUgPSBmInBne2NvdW50fSIKKwor ICAgICAgICBkYXRhZGlyID0gdG1wX2NoZWNrIC8gZiJwZ2RhdGFfe25hbWV9IgorICAgICAgICBz ZXJ2ZXIgPSBQb3N0Z3Jlc1NlcnZlcihuYW1lLCBiaW5kaXIsIGRhdGFkaXIsIHNvY2tkaXIsIGxp YnBxX2hhbmRsZSwgKiprd2FyZ3MpCisgICAgICAgIHNlcnZlci5zZXRfdGltZW91dChyZW1haW5p bmdfdGltZW91dCkKKyAgICAgICAgX3JlY29yZF9zZXJ2ZXJfZm9yX2xvZ19yZXBvcnRpbmcocmVx dWVzdCwgc2VydmVyKQorICAgICAgICBzZXJ2ZXJzLmFwcGVuZChzZXJ2ZXIpCisgICAgICAgIHJl dHVybiBzZXJ2ZXIKKworICAgIHlpZWxkIF9jcmVhdGUKKworICAgIGZvciBzZXJ2ZXIgaW4gc2Vy dmVyczoKKyAgICAgICAgc2VydmVyLmNsZWFudXAoKQorICAgICAgICBzZXJ2ZXIuc3RvcCgpCisK KworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJtb2R1bGUiKQorZGVmIF9tb2R1bGVfc2NvcGVkX3Nl cnZlcnMoKToKKyAgICAiIiJTZXNzaW9uLXNjb3BlZCBsaXN0IHRvIHRyYWNrIHNlcnZlcnMgY3Jl YXRlZCBieSBjcmVhdGVfcGdfbW9kdWxlLiIiIgorICAgIHJldHVybiBbXQorCisKK0BweXRlc3Qu Zml4dHVyZShzY29wZT0ibW9kdWxlIikKK2RlZiBjcmVhdGVfcGdfbW9kdWxlKAorICAgIGJpbmRp ciwKKyAgICBzb2NrZGlyLAorICAgIGxpYnBxX2hhbmRsZSwKKyAgICB0bXBfY2hlY2ssCisgICAg cmVtYWluaW5nX3RpbWVvdXRfbW9kdWxlLAorICAgIF9tb2R1bGVfc2NvcGVkX3NlcnZlcnMsCisp OgorICAgICIiIgorICAgIEZhY3RvcnkgZml4dHVyZSB0byBjcmVhdGUgYWRkaXRpb25hbCBQb3N0 Z3JlU1FMIHNlcnZlcnMgKG1vZHVsZSBzY29wZSkuCisKKyAgICBMaWtlIGNyZWF0ZV9wZywgYnV0 IHNlcnZlcnMgcGVyc2lzdCBmb3IgdGhlIGVudGlyZSB0ZXN0IG1vZHVsZS4KKyAgICBVc2UgdGhp cyB3aGVuIG11bHRpcGxlIHRlc3RzIGluIGEgbW9kdWxlIGNhbiBzaGFyZSB0aGUgc2FtZSBzZXJ2 ZXJzLgorCisgICAgVGhlIHRpbWVvdXQgaXMgYXV0b21hdGljYWxseSBzZXQgb24gYWxsIHNlcnZl cnMgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggdGVzdAorICAgIHZpYSB0aGUgX3NldF9tb2R1bGVfc2Vy dmVyX3RpbWVvdXRzIGF1dG91c2UgZml4dHVyZS4KKworICAgIEV4YW1wbGU6CisgICAgICAgIEBw eXRlc3QuZml4dHVyZShzY29wZT0ibW9kdWxlIikKKyAgICAgICAgZGVmIHNoYXJlZF9ub2Rlcyhj cmVhdGVfcGdfbW9kdWxlKToKKyAgICAgICAgICAgIHJldHVybiBbY3JlYXRlX3BnX21vZHVsZSgp IGZvciBfIGluIHJhbmdlKDMpXQorICAgICIiIgorCisgICAgZGVmIF9jcmVhdGUobmFtZT1Ob25l LCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIGNvdW50 ID0gbGVuKF9tb2R1bGVfc2NvcGVkX3NlcnZlcnMpICsgMQorICAgICAgICAgICAgbmFtZSA9IGYi cGd7Y291bnR9IgorICAgICAgICBkYXRhZGlyID0gdG1wX2NoZWNrIC8gZiJwZ2RhdGFfe25hbWV9 IgorICAgICAgICBzZXJ2ZXIgPSBQb3N0Z3Jlc1NlcnZlcihuYW1lLCBiaW5kaXIsIGRhdGFkaXIs IHNvY2tkaXIsIGxpYnBxX2hhbmRsZSwgKiprd2FyZ3MpCisgICAgICAgIHNlcnZlci5zZXRfdGlt ZW91dChyZW1haW5pbmdfdGltZW91dF9tb2R1bGUpCisgICAgICAgIF9tb2R1bGVfc2NvcGVkX3Nl cnZlcnMuYXBwZW5kKHNlcnZlcikKKyAgICAgICAgcmV0dXJuIHNlcnZlcgorCisgICAgeWllbGQg X2NyZWF0ZQorCisgICAgZm9yIHNlcnZlciBpbiBfbW9kdWxlX3Njb3BlZF9zZXJ2ZXJzOgorICAg ICAgICBzZXJ2ZXIuY2xlYW51cCgpCisgICAgICAgIHNlcnZlci5zdG9wKCkKKworCitAcHl0ZXN0 LmZpeHR1cmUoYXV0b3VzZT1UcnVlKQorZGVmIF9zZXRfbW9kdWxlX3NlcnZlcl90aW1lb3V0cyhy ZXF1ZXN0LCBfbW9kdWxlX3Njb3BlZF9zZXJ2ZXJzLCByZW1haW5pbmdfdGltZW91dCk6CisgICAg IiIiQXV0b3VzZSBmaXh0dXJlIHRoYXQgc2V0cyB0aW1lb3V0LCBlbnRlcnMgc3ViY29udGV4dCwg YW5kIHJlY29yZHMgbG9nIHBvc2l0aW9ucyBmb3IgbW9kdWxlLXNjb3BlZCBzZXJ2ZXJzLiIiIgor ICAgIHdpdGggY29udGV4dGxpYi5FeGl0U3RhY2soKSBhcyBzdGFjazoKKyAgICAgICAgZm9yIHNl cnZlciBpbiBfbW9kdWxlX3Njb3BlZF9zZXJ2ZXJzOgorICAgICAgICAgICAgc3RhY2suZW50ZXJf Y29udGV4dChzZXJ2ZXIuc3RhcnRfbmV3X3Rlc3QocmVtYWluaW5nX3RpbWVvdXQpKQorICAgICAg ICAgICAgX3JlY29yZF9zZXJ2ZXJfZm9yX2xvZ19yZXBvcnRpbmcocmVxdWVzdCwgc2VydmVyKQor ICAgICAgICB5aWVsZAorCisKK0BweXRlc3QuaG9va2ltcGwoaG9va3dyYXBwZXI9VHJ1ZSwgdHJ5 bGFzdD1UcnVlKQorZGVmIHB5dGVzdF9ydW50ZXN0X21ha2VyZXBvcnQoaXRlbSwgY2FsbCk6Cisg ICAgIiIiCisgICAgQWRkcyBQb3N0Z3JlU1FMIHNlcnZlciBsb2dzIHRvIHRoZSB0ZXN0IHJlcG9y dCBzZWN0aW9ucy4KKyAgICAiIiIKKyAgICBvdXRjb21lID0geWllbGQKKyAgICByZXBvcnQgPSBv dXRjb21lLmdldF9yZXN1bHQoKQorCisgICAgaWYgcmVwb3J0LndoZW4gIT0gImNhbGwiOgorICAg ICAgICByZXR1cm4KKworICAgIGlmIF9zZXJ2ZXJzX2tleSBub3QgaW4gaXRlbS5zdGFzaDoKKyAg ICAgICAgcmV0dXJuCisKKyAgICBzZXJ2ZXJzID0gaXRlbS5zdGFzaFtfc2VydmVyc19rZXldCisg ICAgZGVsIGl0ZW0uc3Rhc2hbX3NlcnZlcnNfa2V5XQorCisgICAgaW5jbHVkZV9uYW1lID0gbGVu KHNlcnZlcnMpID4gMQorCisgICAgZm9yIHNlcnZlciBpbiBzZXJ2ZXJzOgorICAgICAgICBjb250 ZW50ID0gc2VydmVyLmxvZ19jb250ZW50KCkKKyAgICAgICAgaWYgY29udGVudC5zdHJpcCgpOgor ICAgICAgICAgICAgc2VjdGlvbl90aXRsZSA9ICJQb3N0Z3JlcyBsb2ciCisgICAgICAgICAgICBp ZiBpbmNsdWRlX25hbWU6CisgICAgICAgICAgICAgICAgc2VjdGlvbl90aXRsZSArPSBmIiAoe3Nl cnZlci5uYW1lfSkiCisgICAgICAgICAgICByZXBvcnQuc2VjdGlvbnMuYXBwZW5kKChzZWN0aW9u X3RpdGxlLCBjb250ZW50KSkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGVzdC9weXBnL3NlcnZl ci5weSBiL3NyYy90ZXN0L3B5dGVzdC9weXBnL3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uOTI0MmFiMjUwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9weXRlc3QvcHlwZy9zZXJ2ZXIucHkKQEAgLTAsMCArMSw0NzAgQEAKKyMgQ29weXJpZ2h0 IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitpbXBvcnQg Y29udGV4dGxpYgoraW1wb3J0IG9zCitpbXBvcnQgcGF0aGxpYgoraW1wb3J0IHBsYXRmb3JtCitp bXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJwcm9jZXNz CitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKK2Zy b20gdHlwaW5nIGltcG9ydCBDYWxsYWJsZSwgT3B0aW9uYWwKKworZnJvbSAudXRpbCBpbXBvcnQg cnVuCitmcm9tIGxpYnBxIGltcG9ydCBQR2Nvbm4sIGNvbm5lY3QgYXMgbGlicHFfY29ubmVjdAor CisKK2NsYXNzIEZpbGVCYWNrdXAoY29udGV4dGxpYi5BYnN0cmFjdENvbnRleHRNYW5hZ2VyKToK KyAgICAiIiIKKyAgICBBIGNvbnRleHQgbWFuYWdlciB3aGljaCBiYWNrcyB1cCBhIGZpbGUncyBj b250ZW50cywgcmVzdG9yaW5nIHRoZW0gb24gZXhpdC4KKyAgICAiIiIKKworICAgIGRlZiBfX2lu aXRfXyhzZWxmLCBmaWxlOiBwYXRobGliLlBhdGgpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9f KCkKKworICAgICAgICBzZWxmLl9maWxlID0gZmlsZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxm KToKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoCisgICAgICAgICAg ICBwcmVmaXg9c2VsZi5fZmlsZS5uYW1lLCBkaXI9c2VsZi5fZmlsZS5wYXJlbnQsIGRlbGV0ZT1G YWxzZQorICAgICAgICApIGFzIGY6CisgICAgICAgICAgICBzZWxmLl9iYWNrdXAgPSBwYXRobGli LlBhdGgoZi5uYW1lKQorCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLl9maWxlLCBzZWxm Ll9iYWNrdXApCisKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxm LCAqZXhjKToKKyAgICAgICAgIyBTd2FwIHRoZSBiYWNrdXAgYW5kIHRoZSBvcmlnaW5hbCBmaWxl LCBzbyB0aGF0IHRoZSBtb2RpZmllZCBjb250ZW50cworICAgICAgICAjIGNhbiBzdGlsbCBiZSBp bnNwZWN0ZWQgaW4gY2FzZSBvZiBmYWlsdXJlLgorICAgICAgICB0bXAgPSBzZWxmLl9iYWNrdXAu cGFyZW50IC8gKHNlbGYuX2JhY2t1cC5uYW1lICsgIi50bXAiKQorCisgICAgICAgIHNodXRpbC5j b3B5ZmlsZShzZWxmLl9maWxlLCB0bXApCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLl9i YWNrdXAsIHNlbGYuX2ZpbGUpCisgICAgICAgIHNodXRpbC5tb3ZlKHRtcCwgc2VsZi5fYmFja3Vw KQorCisKK2NsYXNzIEhCQShGaWxlQmFja3VwKToKKyAgICAiIiIKKyAgICBCYWNrcyB1cCBhIHNl cnZlcidzIEhCQSBjb25maWd1cmF0aW9uIGFuZCBwcm92aWRlcyBtZWFucyBmb3IgdGVtcG9yYXJp bHkKKyAgICBlZGl0aW5nIGl0LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRh dGFkaXI6IHBhdGhsaWIuUGF0aCk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oZGF0YWRpciAv ICJwZ19oYmEuY29uZiIpCisKKyAgICBkZWYgcHJlcGVuZChzZWxmLCAqbGluZXMpOgorICAgICAg ICAiIiIKKyAgICAgICAgVGVtcG9yYXJpbHkgcHJlcGVuZHMgbGluZXMgdG8gdGhlIHNlcnZlcidz IHBnX2hiYS5jb25mLgorCisgICAgICAgIEFzIHN1Z2FyIGZvciBhbGlnbmluZyBIQkEgY29sdW1u cyBpbiB0aGUgdGVzdHMsIGVhY2ggbGluZSBjYW4gYmUgZWl0aGVyCisgICAgICAgIGEgc3RyaW5n IG9yIGEgbGlzdCBvZiBzdHJpbmdzLiBMaXN0IGVsZW1lbnRzIHdpbGwgYmUgam9pbmVkIGJ5IHNp bmdsZQorICAgICAgICBzcGFjZXMgYmVmb3JlIHRoZXkgYXJlIHdyaXR0ZW4gdG8gZmlsZS4KKyAg ICAgICAgIiIiCisgICAgICAgIHdpdGggb3BlbihzZWxmLl9maWxlLCAiciIpIGFzIGY6CisgICAg ICAgICAgICBwcmlvcl9kYXRhID0gZi5yZWFkKCkKKworICAgICAgICB3aXRoIG9wZW4oc2VsZi5f ZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAg ICAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAg cHJpbnQoKmxpbmUsIGZpbGU9ZikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg ICAgICAgICBwcmludChsaW5lLCBmaWxlPWYpCisKKyAgICAgICAgICAgIGYud3JpdGUocHJpb3Jf ZGF0YSkKKworCitjbGFzcyBDb25maWcoRmlsZUJhY2t1cCk6CisgICAgIiIiCisgICAgQmFja3Mg dXAgYSBzZXJ2ZXIncyBwb3N0Z3Jlc3FsLmNvbmYgYW5kIHByb3ZpZGVzIG1lYW5zIGZvciB0ZW1w b3JhcmlseQorICAgIGVkaXRpbmcgaXQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs ZiwgZGF0YWRpcjogcGF0aGxpYi5QYXRoKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhkYXRh ZGlyIC8gInBvc3RncmVzcWwuY29uZiIpCisKKyAgICBkZWYgc2V0KHNlbGYsICoqZ3Vjcyk6Cisg ICAgICAgICIiIgorICAgICAgICBUZW1wb3JhcmlseSBhcHBlbmRzIEdVQyBzZXR0aW5ncyB0byB0 aGUgc2VydmVyJ3MgcG9zdGdyZXNxbC5jb25mLgorICAgICAgICAiIiIKKworICAgICAgICB3aXRo IG9wZW4oc2VsZi5fZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgcHJpbnQoZmlsZT1mKQor CisgICAgICAgICAgICBmb3IgbiwgdiBpbiBndWNzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAg diA9IHN0cih2KQorCisgICAgICAgICAgICAgICAgIyBUT0RPOiBwcm9wZXIgcXVvdGluZworICAg ICAgICAgICAgICAgIHYgPSB2LnJlcGxhY2UoIlxcIiwgIlxcXFwiKQorICAgICAgICAgICAgICAg IHYgPSB2LnJlcGxhY2UoIiciLCAiXFwnIikKKyAgICAgICAgICAgICAgICB2ID0gIid7fSciLmZv cm1hdCh2KQorCisgICAgICAgICAgICAgICAgcHJpbnQobiwgIj0iLCB2LCBmaWxlPWYpCisKKwor QmFja3VwID0gbmFtZWR0dXBsZSgiQmFja3VwIiwgImNvbmYsIGhiYSIpCisKKworY2xhc3MgUG9z dGdyZXNTZXJ2ZXI6CisgICAgIiIiCisgICAgUmVwcmVzZW50cyBhIHJ1bm5pbmcgUG9zdGdyZVNR TCBzZXJ2ZXIgaW5zdGFuY2Ugd2l0aCBtYW5hZ2VtZW50IHV0aWxpdGllcy4KKyAgICBQcm92aWRl cyBtZXRob2RzIGZvciBjb25maWd1cmF0aW9uLCB1c2VyL2RhdGFiYXNlIGNyZWF0aW9uLCBhbmQg c2VydmVyIGNvbnRyb2wuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oCisgICAgICAgIHNl bGYsCisgICAgICAgIG5hbWUsCisgICAgICAgIGJpbmRpciwKKyAgICAgICAgZGF0YWRpciwKKyAg ICAgICAgc29ja2RpciwKKyAgICAgICAgbGlicHFfaGFuZGxlLAorICAgICAgICAqLAorICAgICAg ICBob3N0YWRkcjogT3B0aW9uYWxbc3RyXSA9IE5vbmUsCisgICAgICAgIHBvcnQ6IE9wdGlvbmFs W2ludF0gPSBOb25lLAorICAgICk6CisgICAgICAgICIiIgorICAgICAgICBJbml0aWFsaXplIGFu ZCBzdGFydCBhIFBvc3RncmVTUUwgc2VydmVyIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6Cisg ICAgICAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGlzIHNlcnZlciBpbnN0YW5jZSAoZm9yIGxv Z2dpbmcgcHVycG9zZXMpCisgICAgICAgICAgICBiaW5kaXI6IFBhdGggdG8gUG9zdGdyZVNRTCBi aW4gZGlyZWN0b3J5CisgICAgICAgICAgICBkYXRhZGlyOiBQYXRoIHRvIGRhdGEgZGlyZWN0b3J5 IGZvciB0aGlzIHNlcnZlcgorICAgICAgICAgICAgc29ja2RpcjogUGF0aCB0byBkaXJlY3Rvcnkg Zm9yIFVuaXggc29ja2V0cworICAgICAgICAgICAgbGlicHFfaGFuZGxlOiBjdHlwZXMgaGFuZGxl IHRvIGxpYnBxCisgICAgICAgICAgICBob3N0YWRkcjogSWYgcHJvdmlkZWQsIHVzZSB0aGlzIHNw ZWNpZmljIGFkZHJlc3MgKGUuZy4sICIxMjcuMC4wLjIiKQorICAgICAgICAgICAgcG9ydDogSWYg cHJvdmlkZWQsIHVzZSB0aGlzIHBvcnQgaW5zdGVhZCBvZiBmaW5kaW5nIGEgZnJlZSBvbmUsCisg ICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IG9ubHkgYWxsb3dlZCBpZiBob3N0YWRkciBpcyBh bHNvIHByb3ZpZGVkCisgICAgICAgICIiIgorCisgICAgICAgIGlmIGhvc3RhZGRyIGlzIE5vbmUg YW5kIHBvcnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy cm9yKCJwb3J0IHdhcyBwcm92aWRlZCB3aXRob3V0IGhvc3RhZGRyIikKKworICAgICAgICBzZWxm Lm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZGF0YWRpciA9IGRhdGFkaXIKKyAgICAgICAgc2Vs Zi5zb2NrZGlyID0gc29ja2RpcgorICAgICAgICBzZWxmLmxpYnBxX2hhbmRsZSA9IGxpYnBxX2hh bmRsZQorICAgICAgICBzZWxmLl9yZW1haW5pbmdfdGltZW91dF9mbjogT3B0aW9uYWxbQ2FsbGFi bGVbW10sIGZsb2F0XV0gPSBOb25lCisgICAgICAgIHNlbGYuX2JpbmRpciA9IGJpbmRpcgorICAg ICAgICBzZWxmLl9wZ19jdGwgPSBiaW5kaXIgLyAicGdfY3RsIgorICAgICAgICBzZWxmLmxvZyA9 IGRhdGFkaXIgLyAicG9zdGdyZXNxbC5sb2ciCisgICAgICAgIHNlbGYuX2xvZ19zdGFydF9wb3Mg PSAwCisKKyAgICAgICAgIyBEZXRlcm1pbmUgd2hldGhlciB0byB1c2UgVW5peCBzb2NrZXRzCisg ICAgICAgIHVzZV91bml4X3NvY2tldHMgPSBwbGF0Zm9ybS5zeXN0ZW0oKSAhPSAiV2luZG93cyIg YW5kIGhvc3RhZGRyIGlzIE5vbmUKKworICAgICAgICAjIFVzZSBJTklUREJfVEVNUExBVEUgaWYg YXZhaWxhYmxlIChtdWNoIGZhc3RlciB0aGFuIHJ1bm5pbmcgaW5pdGRiKQorICAgICAgICBpbml0 ZGJfdGVtcGxhdGUgPSBvcy5lbnZpcm9uLmdldCgiSU5JVERCX1RFTVBMQVRFIikKKyAgICAgICAg aWYgaW5pdGRiX3RlbXBsYXRlIGFuZCBvcy5wYXRoLmlzZGlyKGluaXRkYl90ZW1wbGF0ZSk6Cisg ICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoaW5pdGRiX3RlbXBsYXRlLCBkYXRhZGlyKQorICAg ICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gIldpbmRvd3Mi OgorICAgICAgICAgICAgICAgIGF1dGhfbWV0aG9kID0gInRydXN0IgorICAgICAgICAgICAgZWxz ZToKKyAgICAgICAgICAgICAgICBhdXRoX21ldGhvZCA9ICJwZWVyIgorICAgICAgICAgICAgcnVu KAorICAgICAgICAgICAgICAgIGJpbmRpciAvICJpbml0ZGIiLAorICAgICAgICAgICAgICAgICIt LW5vLXN5bmMiLAorICAgICAgICAgICAgICAgICItLWF1dGgiLAorICAgICAgICAgICAgICAgIGF1 dGhfbWV0aG9kLAorICAgICAgICAgICAgICAgICItLXBnZGF0YSIsCisgICAgICAgICAgICAgICAg c2VsZi5kYXRhZGlyLAorICAgICAgICAgICAgKQorCisgICAgICAgICMgRmlndXJlIG91dCBhIHBv cnQgdG8gbGlzdGVuIG9uLiBBdHRlbXB0IHRvIHJlc2VydmUgYm90aCBJUHY0IGFuZCBJUHY2Cisg ICAgICAgICMgYWRkcmVzc2VzIGluIG9uZSBnby4KKyAgICAgICAgIworICAgICAgICAjIE5vdGU6 IHNvY2tldC5oYXNfZHVhbHN0YWNrX2lwdjYvY3JlYXRlX3NlcnZlciBhcmUgb25seSBpbiBQeXRo b24gMy44Ky4KKyAgICAgICAgaWYgaG9zdGFkZHIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAj IEV4cGxpY2l0IGFkZHJlc3MgcHJvdmlkZWQKKyAgICAgICAgICAgIGFkZHJzOiBsaXN0W3N0cl0g PSBbaG9zdGFkZHJdCisgICAgICAgICAgICB0ZW1wX3NvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAg ICAgICAgICAgIGlmIHBvcnQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB0ZW1wX3NvY2suYmlu ZCgoaG9zdGFkZHIsIDApKQorICAgICAgICAgICAgICAgIF8sIHBvcnQgPSB0ZW1wX3NvY2suZ2V0 c29ja25hbWUoKQorCisgICAgICAgIGVsaWYgaGFzYXR0cihzb2NrZXQsICJoYXNfZHVhbHN0YWNr X2lwdjYiKSBhbmQgc29ja2V0Lmhhc19kdWFsc3RhY2tfaXB2NigpOgorICAgICAgICAgICAgYWRk ciA9ICgiOjoxIiwgMCkKKyAgICAgICAgICAgIHRlbXBfc29jayA9IHNvY2tldC5jcmVhdGVfc2Vy dmVyKAorICAgICAgICAgICAgICAgIGFkZHIsIGZhbWlseT1zb2NrZXQuQUZfSU5FVDYsIGR1YWxz dGFja19pcHY2PVRydWUKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgaG9zdGFkZHIsIHBv cnQsIF8sIF8gPSB0ZW1wX3NvY2suZ2V0c29ja25hbWUoKQorICAgICAgICAgICAgYXNzZXJ0IGhv c3RhZGRyIGlzIG5vdCBOb25lCisgICAgICAgICAgICBhZGRycyA9IFtob3N0YWRkciwgIjEyNy4w LjAuMSJdCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZHIgPSAoIjEyNy4wLjAuMSIs IDApCisKKyAgICAgICAgICAgIHRlbXBfc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAg ICAgdGVtcF9zb2NrLmJpbmQoYWRkcikKKworICAgICAgICAgICAgaG9zdGFkZHIsIHBvcnQgPSB0 ZW1wX3NvY2suZ2V0c29ja25hbWUoKQorICAgICAgICAgICAgYXNzZXJ0IGhvc3RhZGRyIGlzIG5v dCBOb25lCisgICAgICAgICAgICBhZGRycyA9IFtob3N0YWRkcl0KKworICAgICAgICAjIFN0b3Jl IHRoZSBjb21wdXRlZCB2YWx1ZXMKKyAgICAgICAgc2VsZi5ob3N0YWRkciA9IGhvc3RhZGRyCisg ICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgIyBJbmNsdWRpbmcgdGhlIGhvc3QgdG8g dXNlIGZvciBjb25uZWN0aW9ucyAtIGVpdGhlciB0aGUgc29ja2V0CisgICAgICAgICMgZGlyZWN0 b3J5IG9yIFRDUCBhZGRyZXNzCisgICAgICAgIGlmIHVzZV91bml4X3NvY2tldHM6CisgICAgICAg ICAgICBzZWxmLmhvc3QgPSBzdHIoc29ja2RpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg IHNlbGYuaG9zdCA9IGhvc3RhZGRyCisKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihk YXRhZGlyLCAicG9zdGdyZXNxbC5jb25mIiksICJhIikgYXMgZjoKKyAgICAgICAgICAgIHByaW50 KGZpbGU9ZikKKyAgICAgICAgICAgIGlmIHVzZV91bml4X3NvY2tldHM6CisgICAgICAgICAgICAg ICAgcHJpbnQoCisgICAgICAgICAgICAgICAgICAgICJ1bml4X3NvY2tldF9kaXJlY3RvcmllcyA9 ICd7fSciLmZvcm1hdChzb2NrZGlyLmFzX3Bvc2l4KCkpLAorICAgICAgICAgICAgICAgICAgICBm aWxlPWYsCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg ICAgICAjIERpc2FibGUgVW5peCBzb2NrZXRzIHdoZW4gdXNpbmcgVENQIHRvIGF2b2lkIGxvY2sg Y29uZmxpY3RzCisgICAgICAgICAgICAgICAgcHJpbnQoInVuaXhfc29ja2V0X2RpcmVjdG9yaWVz ID0gJyciLCBmaWxlPWYpCisgICAgICAgICAgICBwcmludCgibGlzdGVuX2FkZHJlc3NlcyA9ICd7 fSciLmZvcm1hdCgiLCIuam9pbihhZGRycykpLCBmaWxlPWYpCisgICAgICAgICAgICBwcmludCgi cG9ydCA9IiwgcG9ydCwgZmlsZT1mKQorICAgICAgICAgICAgcHJpbnQoImxvZ19jb25uZWN0aW9u cyA9IGFsbCIsIGZpbGU9ZikKKyAgICAgICAgICAgIHByaW50KCJmc3luYyA9IG9mZiIsIGZpbGU9 ZikKKyAgICAgICAgICAgIHByaW50KCJkYXRlc3R5bGUgPSAnSVNPJyIsIGZpbGU9ZikKKyAgICAg ICAgICAgIHByaW50KCJ0aW1lem9uZSA9ICdVVEMnIiwgZmlsZT1mKQorCisgICAgICAgICMgQmV0 d2VlbiBjbG9zaW5nIG9mIHRoZSBzb2NrZXQsIHMsIGFuZCBzZXJ2ZXIgc3RhcnQsIHdlJ3JlIHJh Y2luZworICAgICAgICAjIGFnYWluc3QgYW55dGhpbmcgdGhhdCB3YW50cyB0byBvcGVuIHVwIGVw aGVtZXJhbCBwb3J0cywgc28gdHJ5IG5vdCB0bworICAgICAgICAjIHB1dCBhbnkgbmV3IHdvcmsg aGVyZS4KKworICAgICAgICB0ZW1wX3NvY2suY2xvc2UoKQorICAgICAgICBzZWxmLnBnX2N0bCgi c3RhcnQiKQorCisgICAgICAgICMgUmVhZCB0aGUgUElEIGZpbGUgdG8gZ2V0IHRoZSBwb3N0bWFz dGVyIFBJRAorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGRhdGFkaXIsICJwb3N0bWFz dGVyLnBpZCIpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5waWQgPSBpbnQoZi5yZWFkbGluZSgp LnN0cmlwKCkpCisKKyAgICAgICAgIyBFeGl0U3RhY2sgZm9yIGNsZWFudXAgY2FsbGJhY2tzCisg ICAgICAgIHNlbGYuX2NsZWFudXBfc3RhY2sgPSBjb250ZXh0bGliLkV4aXRTdGFjaygpCisKKyAg ICBkZWYgY3VycmVudF9sb2dfcG9zaXRpb24oc2VsZik6CisgICAgICAgICIiIkdldCB0aGUgY3Vy cmVudCBlbmQgcG9zaXRpb24gb2YgdGhlIGxvZyBmaWxlLiIiIgorICAgICAgICBpZiBzZWxmLmxv Zy5leGlzdHMoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmxvZy5zdGF0KCkuc3Rfc2l6ZQor ICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIHJlc2V0X2xvZ19wb3NpdGlvbihzZWxmKToKKyAg ICAgICAgIiIiTWFyayBjdXJyZW50IGxvZyBwb3NpdGlvbiBhcyBzdGFydCBmb3IgbG9nX2NvbnRl bnQoKS4iIiIKKyAgICAgICAgc2VsZi5fbG9nX3N0YXJ0X3BvcyA9IHNlbGYuY3VycmVudF9sb2df cG9zaXRpb24oKQorCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgc3Rh cnRfbmV3X3Rlc3Qoc2VsZiwgcmVtYWluaW5nX3RpbWVvdXQpOgorICAgICAgICAiIiIKKyAgICAg ICAgUHJlcGFyZSBzZXJ2ZXIgZm9yIGEgbmV3IHRlc3QuCisKKyAgICAgICAgU2V0cyB0aW1lb3V0 LCByZXNldHMgbG9nIHBvc2l0aW9uLCBhbmQgZW50ZXJzIGEgY2xlYW51cCBzdWJjb250ZXh0Lgor ICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zZXRfdGltZW91dChyZW1haW5pbmdfdGltZW91dCkK KyAgICAgICAgc2VsZi5yZXNldF9sb2dfcG9zaXRpb24oKQorICAgICAgICB3aXRoIHNlbGYuc3Vi Y29udGV4dCgpOgorICAgICAgICAgICAgeWllbGQgc2VsZgorCisgICAgZGVmIHBzcWwoc2VsZiwg KmFyZ3MpOgorICAgICAgICAiIiJSdW4gcHNxbCB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuIiIi CisgICAgICAgIHNlbGYuX3J1bihvcy5wYXRoLmpvaW4oc2VsZi5fYmluZGlyLCAicHNxbCIpLCAi LXciLCAqYXJncykKKworICAgIGRlZiBzcWwoc2VsZiwgcXVlcnkpOgorICAgICAgICAiIiJFeGVj dXRlIGEgU1FMIHF1ZXJ5IHZpYSBsaWJwcS4gUmV0dXJucyBzaW1wbGlmaWVkIHJlc3VsdHMuIiIi CisgICAgICAgIHdpdGggc2VsZi5jb25uZWN0KCkgYXMgY29ubjoKKyAgICAgICAgICAgIHJldHVy biBjb25uLnNxbChxdWVyeSkKKworICAgIGRlZiBwZ19jdGwoc2VsZiwgKmFyZ3MpOgorICAgICAg ICAiIiJSdW4gcGdfY3RsIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4iIiIKKyAgICAgICAgc2Vs Zi5fcnVuKHNlbGYuX3BnX2N0bCwgIi0tcGdkYXRhIiwgc2VsZi5kYXRhZGlyLCAiLS1sb2ciLCBz ZWxmLmxvZywgKmFyZ3MpCisKKyAgICBkZWYgX3J1bihzZWxmLCBjbWQsICphcmdzLCBhZGRlbnY6 IE9wdGlvbmFsW2RpY3RdID0gTm9uZSk6CisgICAgICAgICIiIlJ1biBhIGNvbW1hbmQgd2l0aCBQ RyogZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldC4iIiIKKyAgICAgICAgc3ViZW52ID0gZGljdChv cy5lbnZpcm9uKQorICAgICAgICBzdWJlbnYudXBkYXRlKAorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICJQR0hPU1QiOiBzdHIoc2VsZi5ob3N0KSwKKyAgICAgICAgICAgICAgICAiUEdQ T1JUIjogc3RyKHNlbGYucG9ydCksCisgICAgICAgICAgICAgICAgIlBHREFUQUJBU0UiOiAicG9z dGdyZXMiLAorICAgICAgICAgICAgICAgICJQR0RBVEEiOiBzdHIoc2VsZi5kYXRhZGlyKSwKKyAg ICAgICAgICAgIH0KKyAgICAgICAgKQorICAgICAgICBpZiBhZGRlbnY6CisgICAgICAgICAgICBz dWJlbnYudXBkYXRlKGFkZGVudikKKyAgICAgICAgcnVuKGNtZCwgKmFyZ3MsIGVudj1zdWJlbnYp CisKKyAgICBkZWYgY3JlYXRlX3VzZXJzKHNlbGYsICp1c2Vya2V5czogc3RyKToKKyAgICAgICAg IiIiQ3JlYXRlIHRlc3QgdXNlcnMgYW5kIHJlZ2lzdGVyIHRoZW0gZm9yIGNsZWFudXAuIiIiCisg ICAgICAgIHVzZXJtYXAgPSB7fQorICAgICAgICBmb3IgdSBpbiB1c2Vya2V5czoKKyAgICAgICAg ICAgIG5hbWUgPSB1ICsgInVzZXIiCisgICAgICAgICAgICB1c2VybWFwW3VdID0gbmFtZQorICAg ICAgICAgICAgc2VsZi5wc3FsKCItYyIsICJDUkVBVEUgVVNFUiAiICsgbmFtZSkKKyAgICAgICAg ICAgIHNlbGYuX2NsZWFudXBfc3RhY2suY2FsbGJhY2soc2VsZi5wc3FsLCAiLWMiLCAiRFJPUCBV U0VSICIgKyBuYW1lKQorICAgICAgICByZXR1cm4gdXNlcm1hcAorCisgICAgZGVmIGNyZWF0ZV9k YnMoc2VsZiwgKmRia2V5czogc3RyKToKKyAgICAgICAgIiIiQ3JlYXRlIHRlc3QgZGF0YWJhc2Vz IGFuZCByZWdpc3RlciB0aGVtIGZvciBjbGVhbnVwLiIiIgorICAgICAgICBkYm1hcCA9IHt9Cisg ICAgICAgIGZvciBkIGluIGRia2V5czoKKyAgICAgICAgICAgIG5hbWUgPSBkICsgImRiIgorICAg ICAgICAgICAgZGJtYXBbZF0gPSBuYW1lCisgICAgICAgICAgICBzZWxmLnBzcWwoIi1jIiwgIkNS RUFURSBEQVRBQkFTRSAiICsgbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NsZWFudXBfc3RhY2su Y2FsbGJhY2soc2VsZi5wc3FsLCAiLWMiLCAiRFJPUCBEQVRBQkFTRSAiICsgbmFtZSkKKyAgICAg ICAgcmV0dXJuIGRibWFwCisKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRl ZiByZWxvYWRpbmcoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBQcm92aWRlcyBhIGNvbnRl eHQgbWFuYWdlciBmb3IgbWFraW5nIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KKworICAgICAgICBJ ZiB0aGUgY29udGV4dCBzdWl0ZSBmaW5pc2hlcyBzdWNjZXNzZnVsbHksIHRoZSBjb25maWd1cmF0 aW9uIHdpbGwKKyAgICAgICAgYmUgcmVsb2FkZWQgdmlhIHBnX2N0bC4gT24gdGVhcmRvd24sIHRo ZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgd2lsbAorICAgICAgICBiZSB1bndvdW5kLCBhbmQgdGhl IHNlcnZlciB3aWxsIGJlIHNpZ25hbGVkIHRvIHJlbG9hZCBhZ2Fpbi4KKworICAgICAgICBUaGUg Y29udGV4dCB0YXJnZXQgY29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHdoaWNoIGNh biBiZQorICAgICAgICB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgc2VydmVyOgorICAgICAgICAtIC5j b25mOiBtb2RpZmllcyBwb3N0Z3Jlc3FsLmNvbmYKKyAgICAgICAgLSAuaGJhOiBtb2RpZmllcyBw Z19oYmEuY29uZgorCisgICAgICAgIEZvciBleGFtcGxlOgorCisgICAgICAgICAgICB3aXRoIHBn X3NlcnZlcl9zZXNzaW9uLnJlbG9hZGluZygpIGFzIHM6CisgICAgICAgICAgICAgICAgcy5jb25m LnNldChsb2dfY29ubmVjdGlvbnM9Im9uIikKKyAgICAgICAgICAgICAgICBzLmhiYS5wcmVwZW5k KCJsb2NhbCBhbGwgYWxsIHRydXN0IikKKyAgICAgICAgIiIiCisgICAgICAgICMgUHVzaCBhIHJl bG9hZCBvbnRvIHRoZSBzdGFjayBiZWZvcmUgbWFraW5nIGFueSBvdGhlcgorICAgICAgICAjIHVu d2luZGFibGUgY2hhbmdlcy4gVGhhdCB3YXkgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgd2lsbCBi ZQorICAgICAgICAjCisgICAgICAgICMgICMgdGVzdAorICAgICAgICAjICAgLSBjb25maWcgY2hh bmdlIDEKKyAgICAgICAgIyAgIC0gY29uZmlnIGNoYW5nZSAyCisgICAgICAgICMgICAtIHJlbG9h ZAorICAgICAgICAjICAjIHRlYXJkb3duCisgICAgICAgICMgICAtIHVuZG8gY29uZmlnIGNoYW5n ZSAyCisgICAgICAgICMgICAtIHVuZG8gY29uZmlnIGNoYW5nZSAxCisgICAgICAgICMgICAtIHJl bG9hZAorICAgICAgICAjCisgICAgICAgIHNlbGYuX2NsZWFudXBfc3RhY2suY2FsbGJhY2soc2Vs Zi5wZ19jdGwsICJyZWxvYWQiKQorICAgICAgICB5aWVsZCBzZWxmLl9iYWNrdXBfY29uZmlndXJh dGlvbigpCisKKyAgICAgICAgIyBOb3cgYWN0dWFsbHkgcmVsb2FkCisgICAgICAgIHNlbGYucGdf Y3RsKCJyZWxvYWQiKQorCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYg cmVzdGFydGluZyhzZWxmKToKKyAgICAgICAgIiIiTGlrZSAucmVsb2FkaW5nKCksIGJ1dCB3aXRo IGEgZnVsbCBzZXJ2ZXIgcmVzdGFydC4iIiIKKyAgICAgICAgc2VsZi5fY2xlYW51cF9zdGFjay5j YWxsYmFjayhzZWxmLnBnX2N0bCwgInJlc3RhcnQiKQorICAgICAgICB5aWVsZCBzZWxmLl9iYWNr dXBfY29uZmlndXJhdGlvbigpCisgICAgICAgIHNlbGYucGdfY3RsKCJyZXN0YXJ0IikKKworICAg IGRlZiBfYmFja3VwX2NvbmZpZ3VyYXRpb24oc2VsZik6CisgICAgICAgICMgV3JhcCB0aGUgZXhp c3RpbmcgSEJBIGFuZCBjb25maWd1cmF0aW9uIHdpdGggRmlsZUJhY2t1cHMuCisgICAgICAgIHJl dHVybiBCYWNrdXAoCisgICAgICAgICAgICBoYmE9c2VsZi5fY2xlYW51cF9zdGFjay5lbnRlcl9j b250ZXh0KEhCQShzZWxmLmRhdGFkaXIpKSwKKyAgICAgICAgICAgIGNvbmY9c2VsZi5fY2xlYW51 cF9zdGFjay5lbnRlcl9jb250ZXh0KENvbmZpZyhzZWxmLmRhdGFkaXIpKSwKKyAgICAgICAgKQor CisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgc3ViY29udGV4dChzZWxm KToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIG5ldyBjbGVhbnVwIGNvbnRleHQgZm9y IHBlci10ZXN0IGlzb2xhdGlvbi4KKworICAgICAgICBUZW1wb3JhcmlseSByZXBsYWNlcyB0aGUg Y2xlYW51cCBzdGFjayBzbyB0aGF0IGFueSBjbGVhbnVwIGNhbGxiYWNrcworICAgICAgICByZWdp c3RlcmVkIHdpdGhpbiB0aGlzIGNvbnRleHQgd2lsbCBiZSBjbGVhbmVkIHVwIHdoZW4gdGhlIGNv bnRleHQgZXhpdHMuCisgICAgICAgICIiIgorICAgICAgICBvbGRfc3RhY2sgPSBzZWxmLl9jbGVh bnVwX3N0YWNrCisgICAgICAgIHNlbGYuX2NsZWFudXBfc3RhY2sgPSBjb250ZXh0bGliLkV4aXRT dGFjaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2NsZWFudXBfc3RhY2suX19l bnRlcl9fKCkKKyAgICAgICAgICAgIHlpZWxkIHNlbGYKKyAgICAgICAgZmluYWxseToKKyAgICAg ICAgICAgIHNlbGYuX2NsZWFudXBfc3RhY2suX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSkKKyAg ICAgICAgICAgIHNlbGYuX2NsZWFudXBfc3RhY2sgPSBvbGRfc3RhY2sKKworICAgIGRlZiBzdG9w KHNlbGYsIG1vZGU9ImZhc3QiKToKKyAgICAgICAgIiIiCisgICAgICAgIFN0b3AgdGhlIFBvc3Rn cmVTUUwgc2VydmVyIGluc3RhbmNlLgorCisgICAgICAgIElnbm9yZXMgZmFpbHVyZXMgaWYgdGhl IHNlcnZlciBpcyBhbHJlYWR5IHN0b3BwZWQuCisgICAgICAgICIiIgorICAgICAgICB0cnk6Cisg ICAgICAgICAgICBzZWxmLnBnX2N0bCgic3RvcCIsICItLW1vZGUiLCBtb2RlKQorICAgICAgICBl eGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICAjIFNlcnZl ciBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gc3RvcHBlZAorICAgICAgICAgICAgcGFzcworCisgICAg ZGVmIGxvZ19jb250ZW50KHNlbGYpIC0+IHN0cjoKKyAgICAgICAgIiIiUmV0dXJuIGxvZyBjb250 ZW50IGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCdzIHN0YXJ0IHBvc2l0aW9uLiIiIgorICAgICAg ICB3aXRoIG9wZW4oc2VsZi5sb2cpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsoc2VsZi5fbG9n X3N0YXJ0X3BvcykKKyAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorCisgICAgQGNvbnRleHRs aWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgbG9nX2NvbnRhaW5zKHNlbGYsIHBhdHRlcm4sIHRp bWVzPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29udGV4dCBtYW5hZ2VyIHRoYXQgY2hl Y2tzIGlmIHRoZSBsb2cgbWF0Y2hlcyBwYXR0ZXJuIGR1cmluZyB0aGUgYmxvY2suCisKKyAgICAg ICAgQXJnczoKKyAgICAgICAgICAgIHBhdHRlcm46IFRoZSByZWdleCBwYXR0ZXJuIHRvIHNlYXJj aCBmb3IuCisgICAgICAgICAgICB0aW1lczogSWYgTm9uZSwgYW55IG51bWJlciBvZiBtYXRjaGVz IGlzIGFjY2VwdGVkLgorICAgICAgICAgICAgICAgICAgIElmIGEgbnVtYmVyLCBleGFjdGx5IHRo YXQgbWFueSBtYXRjaGVzIGFyZSByZXF1aXJlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHN0YXJ0 X3BvcyA9IHNlbGYuY3VycmVudF9sb2dfcG9zaXRpb24oKQorICAgICAgICB5aWVsZAorICAgICAg ICB3aXRoIG9wZW4oc2VsZi5sb2cpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsoc3RhcnRfcG9z KQorICAgICAgICAgICAgY29udGVudCA9IGYucmVhZCgpCisgICAgICAgIGlmIHRpbWVzIGlzIE5v bmU6CisgICAgICAgICAgICBhc3NlcnQgcmUuc2VhcmNoKHBhdHRlcm4sIGNvbnRlbnQpLCBmIlBh dHRlcm4ge3BhdHRlcm4hcn0gbm90IGZvdW5kIGluIGxvZyIKKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgIG1hdGNoX2NvdW50ID0gbGVuKHJlLmZpbmRhbGwocGF0dGVybiwgY29udGVudCkpCisg ICAgICAgICAgICBhc3NlcnQgbWF0Y2hfY291bnQgPT0gdGltZXMsICgKKyAgICAgICAgICAgICAg ICBmIkV4cGVjdGVkIHt0aW1lc30gbWF0Y2hlcyBvZiB7cGF0dGVybiFyfSwgZm91bmQge21hdGNo X2NvdW50fSIKKyAgICAgICAgICAgICkKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAg ICAiIiJSdW4gYWxsIHJlZ2lzdGVyZWQgY2xlYW51cCBjYWxsYmFja3MuIiIiCisgICAgICAgIHNl bGYuX2NsZWFudXBfc3RhY2suY2xvc2UoKQorCisgICAgZGVmIHNldF90aW1lb3V0KHNlbGYsIHJl bWFpbmluZ190aW1lb3V0X2ZuOiBDYWxsYWJsZVtbXSwgZmxvYXRdKSAtPiBOb25lOgorICAgICAg ICAiIiIKKyAgICAgICAgU2V0IHRoZSB0aW1lb3V0IGZ1bmN0aW9uIGZvciBjb25uZWN0aW9ucy4K KyAgICAgICAgVGhpcyBpcyB0eXBpY2FsbHkgY2FsbGVkIGJ5IHBnIGZpeHR1cmUgZm9yIGVhY2gg dGVzdC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3JlbWFpbmluZ190aW1lb3V0X2ZuID0g cmVtYWluaW5nX3RpbWVvdXRfZm4KKworICAgIGRlZiBjb25uZWN0KHNlbGYsICoqb3B0cykgLT4g UEdjb25uOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlcyBhIGNvbm5lY3Rpb24gdG8gdGhp cyBQb3N0Z3JlU1FMIHNlcnZlciBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAg ICAgKipvcHRzOiBBZGRpdGlvbmFsIGNvbm5lY3Rpb24gb3B0aW9ucyAoY2FuIG92ZXJyaWRlIGRl ZmF1bHRzKQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBQR2Nvbm46IENvbm5lY3Rl ZCBkYXRhYmFzZSBjb25uZWN0aW9uCisKKyAgICAgICAgRXhhbXBsZToKKyAgICAgICAgICAgIGNv bm4gPSBwZy5jb25uZWN0KCkKKyAgICAgICAgICAgIGNvbm4gPSBwZy5jb25uZWN0KGRibmFtZT0n bXlkYicpCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9yZW1haW5pbmdfdGltZW91dF9m biBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAg ICAgICJUaW1lb3V0IGZ1bmN0aW9uIG5vdCBzZXQuIFVzZSBzZXRfdGltZW91dCgpIG9yIHBnIGZp eHR1cmUuIgorICAgICAgICAgICAgKQorCisgICAgICAgIGRlZmF1bHRzID0geworICAgICAgICAg ICAgImhvc3QiOiBzZWxmLmhvc3QsCisgICAgICAgICAgICAicG9ydCI6IHNlbGYucG9ydCwKKyAg ICAgICAgICAgICJkYm5hbWUiOiAicG9zdGdyZXMiLAorICAgICAgICB9CisgICAgICAgIGRlZmF1 bHRzLnVwZGF0ZShvcHRzKQorCisgICAgICAgIHJldHVybiBsaWJwcV9jb25uZWN0KAorICAgICAg ICAgICAgc2VsZi5saWJwcV9oYW5kbGUsCisgICAgICAgICAgICBzZWxmLl9jbGVhbnVwX3N0YWNr LAorICAgICAgICAgICAgc2VsZi5fcmVtYWluaW5nX3RpbWVvdXRfZm4sCisgICAgICAgICAgICAq KmRlZmF1bHRzLAorICAgICAgICApCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRlc3QvcHlwZy91 dGlsLnB5IGIvc3JjL3Rlc3QvcHl0ZXN0L3B5cGcvdXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYjJhMWU2MjdlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9weXRlc3QvcHlwZy91dGlsLnB5CkBAIC0wLDAgKzEsNDIgQEAKKyMgQ29weXJpZ2h0IChj KSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitpbXBvcnQgc2hs ZXgKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCisKKworZGVmIGVwcmludCgqYXJncywg Kiprd2FyZ3MpOgorICAgICIiImVwcmludCBwcmludHMgdG8gc3RkZXJyIiIiCisgICAgcHJpbnQo KmFyZ3MsIGZpbGU9c3lzLnN0ZGVyciwgKiprd2FyZ3MpCisKKworZGVmIHJ1bigqY29tbWFuZCwg Y2hlY2s9VHJ1ZSwgc2hlbGw9Tm9uZSwgc2lsZW50PUZhbHNlLCAqKmt3YXJncyk6CisgICAgIiIi cnVuIHJ1bnMgdGhlIGdpdmVuIGNvbW1hbmQgYW5kIHByaW50cyBpdCB0byBzdGRlcnIiIiIKKwor ICAgIGlmIHNoZWxsIGlzIE5vbmU6CisgICAgICAgIHNoZWxsID0gbGVuKGNvbW1hbmQpID09IDEg YW5kIGlzaW5zdGFuY2UoY29tbWFuZFswXSwgc3RyKQorCisgICAgaWYgc2hlbGw6CisgICAgICAg IGNvbW1hbmQgPSBjb21tYW5kWzBdCisgICAgZWxzZToKKyAgICAgICAgY29tbWFuZCA9IGxpc3Qo bWFwKHN0ciwgY29tbWFuZCkpCisKKyAgICBpZiBub3Qgc2lsZW50OgorICAgICAgICBpZiBzaGVs bDoKKyAgICAgICAgICAgIGVwcmludChmIisge2NvbW1hbmR9IikKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgICMgV2UgY291bGQgbm9ybWFsbHkgdXNlIHNobGV4LmpvaW4gaGVyZSwgYnV0IGl0 J3Mgbm90IGF2YWlsYWJsZSBpbgorICAgICAgICAgICAgIyBQeXRob24gMy42IHdoaWNoIHdlIHN0 aWxsIGxpa2UgdG8gc3VwcG9ydAorICAgICAgICAgICAgdW5zYWZlX3N0cmluZ19jbWQgPSAiICIu am9pbihtYXAoc2hsZXgucXVvdGUsIGNvbW1hbmQpKQorICAgICAgICAgICAgZXByaW50KGYiKyB7 dW5zYWZlX3N0cmluZ19jbWR9IikKKworICAgIGlmIHNpbGVudDoKKyAgICAgICAga3dhcmdzLnNl dGRlZmF1bHQoInN0ZG91dCIsIHN1YnByb2Nlc3MuREVWTlVMTCkKKworICAgIHJldHVybiBzdWJw cm9jZXNzLnJ1bihjb21tYW5kLCBjaGVjaz1jaGVjaywgc2hlbGw9c2hlbGwsICoqa3dhcmdzKQor CisKK2RlZiBjYXB0dXJlKGNvbW1hbmQsICphcmdzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBl bmNvZGluZz0idXRmLTgiLCAqKmt3YXJncyk6CisgICAgcmV0dXJuIHJ1bigKKyAgICAgICAgY29t bWFuZCwgKmFyZ3MsIHN0ZG91dD1zdGRvdXQsIGVuY29kaW5nPWVuY29kaW5nLCAqKmt3YXJncwor ICAgICkuc3Rkb3V0LnJlbW92ZXN1ZmZpeCgiXG4iKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0 ZXN0L3B5dC9jb25mdGVzdC5weSBiL3NyYy90ZXN0L3B5dGVzdC9weXQvY29uZnRlc3QucHkKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRkNzM5MTdjNjhjCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0ZXN0L3B5dC9jb25mdGVzdC5weQpAQCAtMCwwICsxIEBA CisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGVzdC9weXQvdGVzdF9lcnJvcnMucHkgYi9zcmMv dGVzdC9weXRlc3QvcHl0L3Rlc3RfZXJyb3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi43NzFmZThmNzZlMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3B5 dGVzdC9weXQvdGVzdF9lcnJvcnMucHkKQEAgLTAsMCArMSwzNCBAQAorIyBDb3B5cmlnaHQgKGMp IDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyIiIgorVGVzdHMg Zm9yIGxpYnBxIGVycm9yIHR5cGVzIGFuZCBTUUxTVEFURS1iYXNlZCBleGNlcHRpb24gbWFwcGlu Zy4KKyIiIgorCitpbXBvcnQgcHl0ZXN0Citmcm9tIGxpYnBxIGltcG9ydCBMaWJwcUVycm9yCisK KworZGVmIHRlc3Rfc3ludGF4X2Vycm9yKGNvbm4pOgorICAgICIiIkludmFsaWQgU1FMIHN5bnRh eCByYWlzZXMgTGlicHFFcnJvciB3aXRoIGNvcnJlY3QgU1FMU1RBVEUuIiIiCisgICAgd2l0aCBw eXRlc3QucmFpc2VzKExpYnBxRXJyb3IpIGFzIGV4Y19pbmZvOgorICAgICAgICBjb25uLnNxbCgi U0VMRUMgMSIpCisKKyAgICBlcnIgPSBleGNfaW5mby52YWx1ZQorICAgIGFzc2VydCBlcnIuc3Fs c3RhdGUgPT0gIjQyNjAxIgorICAgIGFzc2VydCBlcnIuc3Fsc3RhdGVfY2xhc3MgPT0gIjQyIgor ICAgIGFzc2VydCAic3ludGF4IiBpbiBzdHIoZXJyKS5sb3dlcigpCisKKworZGVmIHRlc3RfdW5p cXVlX3Zpb2xhdGlvbihjb25uKToKKyAgICAiIiJVbmlxdWUgdmlvbGF0aW9uIGluY2x1ZGVzIGFs bCBlcnJvciBmaWVsZHMuIiIiCisgICAgY29ubi5zcWwoIkNSRUFURSBURU1QIFRBQkxFIHRlc3Rf dXYgKGlkIGludCBDT05TVFJBSU5UIHRlc3RfdXZfcGsgUFJJTUFSWSBLRVkpIikKKyAgICBjb25u LnNxbCgiSU5TRVJUIElOVE8gdGVzdF91diBWQUxVRVMgKDEpIikKKworICAgIHdpdGggcHl0ZXN0 LnJhaXNlcyhMaWJwcUVycm9yKSBhcyBleGNfaW5mbzoKKyAgICAgICAgY29ubi5zcWwoIklOU0VS VCBJTlRPIHRlc3RfdXYgVkFMVUVTICgxKSIpCisKKyAgICBlcnIgPSBleGNfaW5mby52YWx1ZQor ICAgIGFzc2VydCBlcnIuc3Fsc3RhdGUgPT0gIjIzNTA1IgorICAgIGFzc2VydCBlcnIudGFibGVf bmFtZSA9PSAidGVzdF91diIKKyAgICBhc3NlcnQgZXJyLmNvbnN0cmFpbnRfbmFtZSA9PSAidGVz dF91dl9wayIKKyAgICBhc3NlcnQgZXJyLmRldGFpbCA9PSAiS2V5IChpZCk9KDEpIGFscmVhZHkg ZXhpc3RzLiIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGVzdC9weXQvdGVzdF9saWJwcS5weSBi L3NyYy90ZXN0L3B5dGVzdC9weXQvdGVzdF9saWJwcS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNGZjZjQwNTZmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9weXRlc3QvcHl0L3Rlc3RfbGlicHEucHkKQEAgLTAsMCArMSwxNzIgQEAKKyMgQ29weXJpZ2h0 IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitpbXBvcnQg Y29udGV4dGxpYgoraW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RydWN0CitpbXBv cnQgdGhyZWFkaW5nCitmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUKKworaW1wb3J0IHB5dGVz dAorCitmcm9tIGxpYnBxIGltcG9ydCBjb25uc3RyLCBMaWJwcUVycm9yCisKKworQHB5dGVzdC5t YXJrLnBhcmFtZXRyaXplKAorICAgICJvcHRzLCBleHBlY3RlZCIsCisgICAgWworICAgICAgICAo ZGljdCgpLCAiIiksCisgICAgICAgIChkaWN0KHBvcnQ9NTQzMiksICJwb3J0PTU0MzIiKSwKKyAg ICAgICAgKGRpY3QocG9ydD01NDMyLCBkYm5hbWU9InBvc3RncmVzIiksICJwb3J0PTU0MzIgZGJu YW1lPXBvc3RncmVzIiksCisgICAgICAgIChkaWN0KGhvc3Q9IiIpLCAiaG9zdD0nJyIpLAorICAg ICAgICAoZGljdChob3N0PSIgIiksIHIiaG9zdD0nICciKSwKKyAgICAgICAgKGRpY3Qoa2V5d29y ZD0iJyIpLCByImtleXdvcmQ9XCciKSwKKyAgICAgICAgKGRpY3Qoa2V5d29yZD0iIFxcJyAiKSwg ciJrZXl3b3JkPScgXFxcJyAnIiksCisgICAgXSwKKykKK2RlZiB0ZXN0X2Nvbm5zdHIob3B0cywg ZXhwZWN0ZWQpOgorICAgICIiIlRlc3RzIHRoZSBlc2NhcGUgYmVoYXZpb3IgZm9yIGNvbm5zdHIo KS4iIiIKKyAgICBhc3NlcnQgY29ubnN0cihvcHRzKSA9PSBleHBlY3RlZAorCisKK2RlZiB0ZXN0 X211c3RfY29ubmVjdF9lcnJvcnMoY29ubmVjdCk6CisgICAgIiIiVGVzdHMgdGhhdCBjb25uZWN0 KCkgcmFpc2VzIExpYnBxRXJyb3IuIiIiCisgICAgd2l0aCBweXRlc3QucmFpc2VzKExpYnBxRXJy b3IsIG1hdGNoPSJpbnZhbGlkIGNvbm5lY3Rpb24gb3B0aW9uIik6CisgICAgICAgIGNvbm5lY3Qo c29tZV91bmtub3duX2tleXdvcmQ9IndoYXRldmVyIikKKworCitAcHl0ZXN0LmZpeHR1cmUKK2Rl ZiBsb2NhbF9zZXJ2ZXIodG1wX3BhdGgsIHJlbWFpbmluZ190aW1lb3V0KToKKyAgICAiIiIKKyAg ICBPcGVucyB1cCBhIGxvY2FsIFVOSVggc29ja2V0IGZvciBtb2NraW5nIGEgUG9zdGdyZXMgc2Vy dmVyIG9uIGEgYmFja2dyb3VuZAorICAgIHRocmVhZC4gU2VlIHRoZSBfU2VydmVyIEFQSSBmb3Ig dXNhZ2UuCisKKyAgICBUaGlzIGZpeHR1cmUgcmVxdWlyZXMgQUZfVU5JWCBzdXBwb3J0OyBkZXBl bmRlbnQgdGVzdHMgd2lsbCBiZSBza2lwcGVkIG9uCisgICAgcGxhdGZvcm1zIHRoYXQgZG9uJ3Qg cHJvdmlkZSBpdC4KKyAgICAiIiIKKworICAgIHRyeToKKyAgICAgICAgZnJvbSBzb2NrZXQgaW1w b3J0IEFGX1VOSVgKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHB5dGVzdC5za2lw KCJBRl9VTklYIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpCisKKyAgICBjbGFzcyBf U2VydmVyKGNvbnRleHRsaWIuRXhpdFN0YWNrKToKKyAgICAgICAgIiIiCisgICAgICAgIEltcGxl bWVudGF0aW9uIGNsYXNzIGZvciBsb2NhbF9zZXJ2ZXIuIFNlZSAuYmFja2dyb3VuZCgpIGZvciB0 aGUgcHJpbWFyeQorICAgICAgICBlbnRyeSBwb2ludCBmb3IgdGVzdHMuIFBvc3RncmVzIGNsaWVu dHMgbWF5IGNvbm5lY3QgdG8gdGhpcyBzZXJ2ZXIgdmlhCisgICAgICAgIGxvY2FsX3NlcnZlci5o b3N0L2xvY2FsX3NlcnZlci5wb3J0LgorCisgICAgICAgIF9TZXJ2ZXIgZGVyaXZlcyBmcm9tIGNv bnRleHRsaWIuRXhpdFN0YWNrIHRvIHByb3ZpZGUgZWFzeSBjbGVhbnVwIG9mCisgICAgICAgIGFz c29jaWF0ZWQgcmVzb3VyY2VzOyBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoYXQgY2xhc3Mg Zm9yIGEgZnVsbAorICAgICAgICBleHBsYW5hdGlvbi4KKyAgICAgICAgIiIiCisKKyAgICAgICAg ZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisKKyAg ICAgICAgICAgIHNlbGYuaG9zdCA9IHRtcF9wYXRoCisgICAgICAgICAgICBzZWxmLnBvcnQgPSA1 NDMyCisKKyAgICAgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYu X3RocmVhZF9leGMgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9saXN0ZW5lciA9IHNlbGYuZW50 ZXJfY29udGV4dCgKKyAgICAgICAgICAgICAgICBzb2NrZXQuc29ja2V0KEFGX1VOSVgsIHNvY2tl dC5TT0NLX1NUUkVBTSksCisgICAgICAgICAgICApCisKKyAgICAgICAgZGVmIGJpbmRfYW5kX2xp c3RlbihzZWxmKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgRG9lcyB0aGUgYWN0dWFs IHdvcmsgb2YgYmluZGluZyB0aGUgVU5JWCBzb2NrZXQgdXNpbmcgdGhlIFBvc3RncmVzCisgICAg ICAgICAgICBzZXJ2ZXIgY29udmVudGlvbnMgYW5kIGxpc3RlbmluZyBmb3IgY29ubmVjdGlvbnMu CisKKyAgICAgICAgICAgIFRoZSBsaXN0ZW4gYmFja2xvZyBpcyBjdXJyZW50bHkgaGFyZGNvZGVk IHRvIG9uZS4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgc29ja2ZpbGUgPSBzZWxmLmhv c3QgLyAiLnMuUEdTUUwue30iLmZvcm1hdChzZWxmLnBvcnQpCisKKyAgICAgICAgICAgICMgTG9j ayBkb3duIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgbmV3IHNvY2tldC4KKyAgICAgICAgICAgIHBy ZXZfbWFzayA9IG9zLnVtYXNrKDBvMDc3KQorCisgICAgICAgICAgICAjIEJpbmQgKGNyZWF0aW5n IHRoZSBzb2NrZXQgZmlsZSksIGFuZCBpbW1lZGlhdGVseSByZWdpc3RlciBpdCBmb3IKKyAgICAg ICAgICAgICMgZGVsZXRpb24gZnJvbSBkaXNrIHdoZW4gdGhlIHN0YWNrIGlzIGNsZWFuZWQgdXAu CisgICAgICAgICAgICBzZWxmLl9saXN0ZW5lci5iaW5kKGJ5dGVzKHNvY2tmaWxlKSkKKyAgICAg ICAgICAgIHNlbGYuY2FsbGJhY2sob3MudW5saW5rLCBzb2NrZmlsZSkKKworICAgICAgICAgICAg b3MudW1hc2socHJldl9tYXNrKQorCisgICAgICAgICAgICBzZWxmLl9saXN0ZW5lci5saXN0ZW4o MSkKKworICAgICAgICBkZWYgYmFja2dyb3VuZChzZWxmLCBmbjogQ2FsbGFibGVbW3NvY2tldC5z b2NrZXRdLCBOb25lXSkgLT4gTm9uZToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgQWNj ZXB0cyBhIGNsaWVudCBjb25uZWN0aW9uIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQgYW5kIHBhc3Nl cyBpdCB0bworICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGNhbGxiYWNrLiBBbnkgZXhjZXB0aW9u cyByYWlzZWQgZnJvbSB0aGUgY2FsbGJhY2sgd2lsbAorICAgICAgICAgICAgYmUgcmUtcmFpc2Vk IG9uIHRoZSBtYWluIHRocmVhZCBkdXJpbmcgZml4dHVyZSB0ZWFyZG93bi4KKworICAgICAgICAg ICAgQmxvY2tpbmcgb3BlcmF0aW9ucyBvbiB0aGUgY29ubmVjdGVkIHNvY2tldCBkZWZhdWx0IHRv IHVzaW5nIHRoZQorICAgICAgICAgICAgcmVtYWluaW5nX3RpbWVvdXQoKSwgdGhvdWdoIHRoaXMg Y2FuIGJlIGNoYW5nZWQgYnkgdGhlIHRlc3QgdmlhIHRoZQorICAgICAgICAgICAgc29ja2V0J3Mg LnNldHRpbWVvdXQoKS4KKyAgICAgICAgICAgICIiIgorCisgICAgICAgICAgICBkZWYgX2JnKCk6 CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9saXN0ZW5l ci5zZXR0aW1lb3V0KHJlbWFpbmluZ190aW1lb3V0KCkpCisgICAgICAgICAgICAgICAgICAgIHNv Y2ssIF8gPSBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKQorCisgICAgICAgICAgICAgICAgICAgIHdp dGggc29jazoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0dGltZW91dChyZW1haW5p bmdfdGltZW91dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZm4oc29jaykKKworICAgICAg ICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgIyBT YXZlIHRoZSBleGNlcHRpb24gZm9yIHJlLXJhaXNpbmcgb24gdGhlIG1haW4gdGhyZWFkLgorICAg ICAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWRfZXhjID0gZQorCisgICAgICAgICAgICAjIFRP RE86IHJhdGhlciB0aGFuIHVzaW5nIGNhbGxiYWNrKCksIGNvbnNpZGVyIGV4cGxpY2l0bHkgc2ln bmFsaW5nCisgICAgICAgICAgICAjIHRoZSBmbigpIGltcGxlbWVudGF0aW9uIHRvIHN0b3AgZWFy bHkgaWYgd2UgZ2V0IGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgICMgT3RoZXJ3aXNlIHdlJ2xs IGhhbmcgdW50aWwgdGhlIGVuZCBvZiB0aGUgdGltZW91dC4KKyAgICAgICAgICAgIHNlbGYuX3Ro cmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PV9iZykKKyAgICAgICAgICAgIHNlbGYuY2Fs bGJhY2soc2VsZi5fam9pbikKKworICAgICAgICAgICAgc2VsZi5fdGhyZWFkLnN0YXJ0KCkKKwor ICAgICAgICBkZWYgX2pvaW4oc2VsZik6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIFdh aXRzIGZvciB0aGUgYmFja2dyb3VuZCB0aHJlYWQgdG8gZmluaXNoIGFuZCByYWlzZXMgYW55IHRo cm93bgorICAgICAgICAgICAgZXhjZXB0aW9uLiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgZml4dHVy ZSB0ZWFyZG93bi4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgIyBHaXZlIGEgbGl0dGxl IGJpdCBvZiB3aWdnbGUgcm9vbSBvbiB0aGUgam9pbiB0aW1lb3V0LCBzaW5jZSB3ZSdyZQorICAg ICAgICAgICAgIyByYWNpbmcgYWdhaW5zdCB0aGUgdGVzdCdzIG93biB1c2Ugb2YgcmVtYWluaW5n X3RpbWVvdXQoKS4gKEl0J3MKKyAgICAgICAgICAgICMgcHJlZmVyYWJsZSB0byBsZXQgdGVzdHMg cmVwb3J0IHRpbWVvdXRzOyB0aGUgc3RhY2sgdHJhY2VzIHdpbGwKKyAgICAgICAgICAgICMgaGVs cCB3aXRoIGRlYnVnZ2luZy4pCisgICAgICAgICAgICBzZWxmLl90aHJlYWQuam9pbihyZW1haW5p bmdfdGltZW91dCgpICsgMSkKKyAgICAgICAgICAgIGlmIHNlbGYuX3RocmVhZC5pc19hbGl2ZSgp OgorICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFcnJvcigiYmFja2dyb3VuZCB0aHJlYWQg aXMgc3RpbGwgcnVubmluZyBhZnRlciB0aW1lb3V0IikKKworICAgICAgICAgICAgaWYgc2VsZi5f dGhyZWFkX2V4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLl90aHJl YWRfZXhjCisKKyAgICB3aXRoIF9TZXJ2ZXIoKSBhcyBzOgorICAgICAgICBzLmJpbmRfYW5kX2xp c3RlbigpCisgICAgICAgIHlpZWxkIHMKKworCitkZWYgdGVzdF9jb25uZWN0aW9uX2lzX2Zpbmlz aGVkX29uX2Vycm9yKGNvbm5lY3QsIGxvY2FsX3NlcnZlcik6CisgICAgIiIiVGVzdHMgdGhhdCBQ UWZpbmlzaCgpIGdldHMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGVzdGluZy4iIiIKKyAgICBleHBl Y3RlZF9lcnJvciA9ICJzb21ldGhpbmcgaXMgd3JvbmciCisKKyAgICBkZWYgc2VydmVfZXJyb3Io czogc29ja2V0LnNvY2tldCkgLT4gTm9uZToKKyAgICAgICAgcGt0bGVuID0gc3RydWN0LnVucGFj aygiIUkiLCBzLnJlY3YoNCkpWzBdCisKKyAgICAgICAgIyBRdWljayBjaGVjayBmb3IgdGhlIHN0 YXJ0dXAgcGFja2V0IHZlcnNpb24uCisgICAgICAgIHZlcnNpb24gPSBzdHJ1Y3QudW5wYWNrKCIh SEgiLCBzLnJlY3YoNCkpCisgICAgICAgIGFzc2VydCB2ZXJzaW9uID09ICgzLCAwKQorCisgICAg ICAgICMgRGlzY2FyZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdGFydHVwIHBhY2tldCBhbmQgc2Vu ZCBhIHYyIGVycm9yLgorICAgICAgICBzLnJlY3YocGt0bGVuIC0gOCkKKyAgICAgICAgcy5zZW5k KGIiRSIgKyBleHBlY3RlZF9lcnJvci5lbmNvZGUoKSArIGIiXDAiKQorCisgICAgICAgICMgQW5k IG5vdyB0aGUgc29ja2V0IHNob3VsZCBiZSBjbG9zZWQuCisgICAgICAgIGFzc2VydCBub3Qgcy5y ZWN2KDEpLCAiY2xpZW50IHNlbnQgdW5leHBlY3RlZCBkYXRhIgorCisgICAgbG9jYWxfc2VydmVy LmJhY2tncm91bmQoc2VydmVfZXJyb3IpCisKKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMoTGlicHFF cnJvciwgbWF0Y2g9ZXhwZWN0ZWRfZXJyb3IpOgorICAgICAgICAjIEV4aXRpbmcgdGhpcyBjb250 ZXh0IHNob3VsZCByZXN1bHQgaW4gUFFmaW5pc2goKS4KKyAgICAgICAgY29ubmVjdChob3N0PWxv Y2FsX3NlcnZlci5ob3N0LCBwb3J0PWxvY2FsX3NlcnZlci5wb3J0KQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcHl0ZXN0L3B5dC90ZXN0X211bHRpX3NlcnZlci5weSBiL3NyYy90ZXN0L3B5dGVzdC9w eXQvdGVzdF9tdWx0aV9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjhlZTA0NWIwY2M4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0ZXN0L3B5 dC90ZXN0X211bHRpX3NlcnZlci5weQpAQCAtMCwwICsxLDQ2IEBACisjIENvcHlyaWdodCAoYykg MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIiIiCitUZXN0cyBk ZW1vbnN0cmF0aW5nIG11bHRpLXNlcnZlciBmdW5jdGlvbmFsaXR5IHVzaW5nIGNyZWF0ZV9wZyBm aXh0dXJlLgorCitUaGVzZSB0ZXN0cyB2ZXJpZnkgdGhhdCB0aGUgcHl0ZXN0IGluZnJhc3RydWN0 dXJlIGNvcnJlY3RseSBoYW5kbGVzCittdWx0aXBsZSBQb3N0Z3JlU1FMIHNlcnZlciBpbnN0YW5j ZXMgd2l0aGluIGEgc2luZ2xlIHRlc3QsIGFuZCB0aGF0Cittb2R1bGUtc2NvcGVkIHNlcnZlcnMg cGVyc2lzdCBhY3Jvc3MgdGVzdHMuCisiIiIKKworaW1wb3J0IHB5dGVzdAorCisKK2RlZiB0ZXN0 X211bHRpcGxlX3NlcnZlcnNfYmFzaWMoY3JlYXRlX3BnKToKKyAgICAiIiJUZXN0IHRoYXQgd2Ug Y2FuIGNyZWF0ZSBhbmQgY29ubmVjdCB0byBtdWx0aXBsZSBzZXJ2ZXJzLiIiIgorICAgIG5vZGUx ID0gY3JlYXRlX3BnKCJwcmltYXJ5IikKKyAgICBub2RlMiA9IGNyZWF0ZV9wZygic2Vjb25kYXJ5 IikKKworICAgIGNvbm4xID0gbm9kZTEuY29ubmVjdCgpCisgICAgY29ubjIgPSBub2RlMi5jb25u ZWN0KCkKKworICAgICMgRWFjaCBzZXJ2ZXIgc2hvdWxkIGhhdmUgaXRzIG93biBkYXRhIGRpcmVj dG9yeQorICAgIGRhdGFkaXIxID0gY29ubjEuc3FsKCJTSE9XIGRhdGFfZGlyZWN0b3J5IikKKyAg ICBkYXRhZGlyMiA9IGNvbm4yLnNxbCgiU0hPVyBkYXRhX2RpcmVjdG9yeSIpCisgICAgYXNzZXJ0 IGRhdGFkaXIxICE9IGRhdGFkaXIyCisKKyAgICAjIEVhY2ggc2VydmVyIHNob3VsZCBiZSBsaXN0 ZW5pbmcgb24gYSBkaWZmZXJlbnQgcG9ydAorICAgIGFzc2VydCBub2RlMS5wb3J0ICE9IG5vZGUy LnBvcnQKKworCitAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9Im1vZHVsZSIpCitkZWYgc2hhcmVkX3Nl cnZlcihjcmVhdGVfcGdfbW9kdWxlKToKKyAgICAiIiJBIHNlcnZlciBzaGFyZWQgYWNyb3NzIGFs bCB0ZXN0cyBpbiB0aGlzIG1vZHVsZS4iIiIKKyAgICBzZXJ2ZXIgPSBjcmVhdGVfcGdfbW9kdWxl KCJzaGFyZWQiKQorICAgIHNlcnZlci5zcWwoIkNSRUFURSBUQUJMRSBtb2R1bGVfc3RhdGUgKHZh bHVlIGludCBERUZBVUxUIDApIikKKyAgICByZXR1cm4gc2VydmVyCisKKworZGVmIHRlc3RfbW9k dWxlX3NlcnZlcl9jcmVhdGVfcm93KHNoYXJlZF9zZXJ2ZXIpOgorICAgICIiIkZpcnN0IHRlc3Q6 IGNyZWF0ZSBhIHJvdyBpbiB0aGUgc2hhcmVkIHNlcnZlci4iIiIKKyAgICBzaGFyZWRfc2VydmVy LmNvbm5lY3QoKS5zcWwoIklOU0VSVCBJTlRPIG1vZHVsZV9zdGF0ZSBWQUxVRVMgKDQyKSIpCisK KworZGVmIHRlc3RfbW9kdWxlX3NlcnZlcl9zZWVfcm93KHNoYXJlZF9zZXJ2ZXIpOgorICAgICIi IlNlY29uZCB0ZXN0OiB2ZXJpZnkgd2Ugc2VlIHRoZSByb3cgZnJvbSB0aGUgcHJldmlvdXMgdGVz dC4iIiIKKyAgICBhc3NlcnQgc2hhcmVkX3NlcnZlci5jb25uZWN0KCkuc3FsKCJTRUxFQ1QgdmFs dWUgRlJPTSBtb2R1bGVfc3RhdGUiKSA9PSA0MgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0ZXN0 L3B5dC90ZXN0X3F1ZXJ5X2hlbHBlcnMucHkgYi9zcmMvdGVzdC9weXRlc3QvcHl0L3Rlc3RfcXVl cnlfaGVscGVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWJj ZDkwODQyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRlc3QvcHl0L3Rlc3RfcXVl cnlfaGVscGVycy5weQpAQCAtMCwwICsxLDM0NyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyIiIgorVGVzdHMgZm9yIHF1ZXJ5 IGhlbHBlciBmdW5jdGlvbnMgd2l0aCB0eXBlIGNvbnZlcnNpb24gYW5kIHJlc3VsdCBzaW1wbGlm aWNhdGlvbi4KKyIiIgorCitpbXBvcnQgdXVpZAorCitpbXBvcnQgcHl0ZXN0CisKKworZGVmIHRl c3Rfc2luZ2xlX2NlbGxfaW50KGNvbm4pOgorICAgICIiIlNpbmdsZSBjZWxsIGludGVnZXIgcXVl cnkgcmV0dXJucyBqdXN0IHRoZSB2YWx1ZS4iIiIKKyAgICByZXN1bHQgPSBjb25uLnNxbCgiU0VM RUNUIDEiKQorICAgIGFzc2VydCByZXN1bHQgPT0gMQorICAgIGFzc2VydCBpc2luc3RhbmNlKHJl c3VsdCwgaW50KQorCisKK2RlZiB0ZXN0X3NpbmdsZV9jZWxsX3N0cmluZyhjb25uKToKKyAgICAi IiJTaW5nbGUgY2VsbCBzdHJpbmcgcXVlcnkgcmV0dXJucyBqdXN0IHRoZSB2YWx1ZS4iIiIKKyAg ICByZXN1bHQgPSBjb25uLnNxbCgiU0VMRUNUICdoZWxsbyciKQorICAgIGFzc2VydCByZXN1bHQg PT0gImhlbGxvIgorICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3VsdCwgc3RyKQorCisKK2RlZiB0 ZXN0X3NpbmdsZV9jZWxsX2Jvb2woY29ubik6CisgICAgIiIiU2luZ2xlIGNlbGwgYm9vbGVhbiBx dWVyeSByZXR1cm5zIGp1c3QgdGhlIHZhbHVlLiIiIgorCisgICAgcmVzdWx0ID0gY29ubi5zcWwo IlNFTEVDVCB0cnVlIikKKyAgICBhc3NlcnQgcmVzdWx0IGlzIFRydWUKKyAgICBhc3NlcnQgaXNp bnN0YW5jZShyZXN1bHQsIGJvb2wpCisKKyAgICByZXN1bHQgPSBjb25uLnNxbCgiU0VMRUNUIGZh bHNlIikKKyAgICBhc3NlcnQgcmVzdWx0IGlzIEZhbHNlCisKKworZGVmIHRlc3Rfc2luZ2xlX2Nl bGxfZmxvYXQoY29ubik6CisgICAgIiIiU2luZ2xlIGNlbGwgZmxvYXQgcXVlcnkgcmV0dXJucyBq dXN0IHRoZSB2YWx1ZS4iIiIKKworICAgIHJlc3VsdCA9IGNvbm4uc3FsKCJTRUxFQ1QgMy4xNDo6 ZmxvYXQ0IikKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHQsIGZsb2F0KQorICAgIGFzc2Vy dCBhYnMocmVzdWx0IC0gMy4xNCkgPCAwLjAxCisKKworZGVmIHRlc3Rfc2luZ2xlX2NlbGxfbnVs bChjb25uKToKKyAgICAiIiJTaW5nbGUgY2VsbCBOVUxMIHF1ZXJ5IHJldHVybnMgTm9uZS4iIiIK KworICAgIHJlc3VsdCA9IGNvbm4uc3FsKCJTRUxFQ1QgTlVMTCIpCisgICAgYXNzZXJ0IHJlc3Vs dCBpcyBOb25lCisKKworZGVmIHRlc3Rfc2luZ2xlX3Jvd19tdWx0aXBsZV9jb2x1bW5zKGNvbm4p OgorICAgICIiIlNpbmdsZSByb3cgd2l0aCBtdWx0aXBsZSBjb2x1bW5zIHJldHVybnMgYSB0dXBs ZS4iIiIKKworICAgIHJlc3VsdCA9IGNvbm4uc3FsKCJTRUxFQ1QgMSwgJ2hlbGxvJywgdHJ1ZSIp CisgICAgYXNzZXJ0IHJlc3VsdCA9PSAoMSwgImhlbGxvIiwgVHJ1ZSkKKyAgICBhc3NlcnQgaXNp bnN0YW5jZShyZXN1bHQsIHR1cGxlKQorCisKK2RlZiB0ZXN0X3NpbmdsZV9jb2x1bW5fbXVsdGlw bGVfcm93cyhjb25uKToKKyAgICAiIiJTaW5nbGUgY29sdW1uIHdpdGggbXVsdGlwbGUgcm93cyBy ZXR1cm5zIGEgbGlzdCBvZiB2YWx1ZXMuIiIiCisKKyAgICByZXN1bHQgPSBjb25uLnNxbCgiU0VM RUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMykiKQorICAgIGFzc2VydCByZXN1bHQgPT0g WzEsIDIsIDNdCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzdWx0LCBsaXN0KQorCisKK2RlZiB0 ZXN0X211bHRpcGxlX3Jvd3NfYW5kX2NvbHVtbnMoY29ubik6CisgICAgIiIiTXVsdGlwbGUgcm93 cyBhbmQgY29sdW1ucyByZXR1cm5zIGxpc3Qgb2YgdHVwbGVzLiIiIgorCisgICAgcmVzdWx0ID0g Y29ubi5zcWwoIlNFTEVDVCAqIEZST00gKFZBTFVFUyAoMSwgJ2EnKSwgKDIsICdiJyksICgzLCAn YycpKSBBUyB0IikKKyAgICBhc3NlcnQgcmVzdWx0ID09IFsoMSwgImEiKSwgKDIsICJiIiksICgz LCAiYyIpXQorICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3VsdCwgbGlzdCkKKyAgICBhc3NlcnQg YWxsKGlzaW5zdGFuY2Uocm93LCB0dXBsZSkgZm9yIHJvdyBpbiByZXN1bHQpCisKKworZGVmIHRl c3RfZW1wdHlfcmVzdWx0KGNvbm4pOgorICAgICIiIkVtcHR5IHJlc3VsdCBzZXQgcmV0dXJucyBl bXB0eSBsaXN0LiIiIgorCisgICAgcmVzdWx0ID0gY29ubi5zcWwoIlNFTEVDVCAxIFdIRVJFIGZh bHNlIikKKyAgICBhc3NlcnQgcmVzdWx0ID09IFtdCisKKworZGVmIHRlc3RfcXVlcnlfZXJyb3Jf aGFuZGxpbmcoY29ubik6CisgICAgIiIiUXVlcnkgZXJyb3JzIHJhaXNlIFJ1bnRpbWVFcnJvciB3 aXRoIGFjdHVhbCBlcnJvciBtZXNzYWdlLiIiIgorCisgICAgd2l0aCBweXRlc3QucmFpc2VzKFJ1 bnRpbWVFcnJvcikgYXMgZXhjX2luZm86CisgICAgICAgIGNvbm4uc3FsKCJTRUxFQ1QgKiBGUk9N IG5vbmV4aXN0ZW50X3RhYmxlIikKKworICAgIGVycm9yX21zZyA9IHN0cihleGNfaW5mby52YWx1 ZSkKKyAgICBhc3NlcnQgIm5vbmV4aXN0ZW50X3RhYmxlIiBpbiBlcnJvcl9tc2cgb3IgImRvZXMg bm90IGV4aXN0IiBpbiBlcnJvcl9tc2cKKworCitkZWYgdGVzdF9kaXZpc2lvbl9ieV96ZXJvX2Vy cm9yKGNvbm4pOgorICAgICIiIkRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIFJ1bnRpbWVFcnJvci4i IiIKKworICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIGV4Y19pbmZvOgor ICAgICAgICBjb25uLnNxbCgiU0VMRUNUIDEvMCIpCisKKyAgICBlcnJvcl9tc2cgPSBzdHIoZXhj X2luZm8udmFsdWUpCisgICAgYXNzZXJ0ICJkaXZpc2lvbiBieSB6ZXJvIiBpbiBlcnJvcl9tc2cu bG93ZXIoKQorCisKK2RlZiB0ZXN0X3NpbXBsZV9leGVjX2NyZWF0ZV90YWJsZShjb25uKToKKyAg ICAiIiJzcWwgZm9yIENSRUFURSBUQUJMRSByZXR1cm5zIE5vbmUuIiIiCisKKyAgICByZXN1bHQg PSBjb25uLnNxbCgiQ1JFQVRFIFRFTVAgVEFCTEUgdGVzdF90YWJsZSAoaWQgaW50LCBuYW1lIHRl eHQpIikKKyAgICBhc3NlcnQgcmVzdWx0IGlzIE5vbmUKKworICAgICMgVmVyaWZ5IHRhYmxlIHdh cyBjcmVhdGVkCisgICAgY291bnQgPSBjb25uLnNxbCgiU0VMRUNUIENPVU5UKCopIEZST00gdGVz dF90YWJsZSIpCisgICAgYXNzZXJ0IGNvdW50ID09IDAKKworCitkZWYgdGVzdF9zaW1wbGVfZXhl Y19pbnNlcnQoY29ubik6CisgICAgIiIic3FsIGZvciBJTlNFUlQgcmV0dXJucyBOb25lLiIiIgor CisgICAgY29ubi5zcWwoIkNSRUFURSBURU1QIFRBQkxFIHRlc3RfdGFibGUgKGlkIGludCwgbmFt ZSB0ZXh0KSIpCisgICAgcmVzdWx0ID0gY29ubi5zcWwoIklOU0VSVCBJTlRPIHRlc3RfdGFibGUg VkFMVUVTICgxLCAnQWxpY2UnKSwgKDIsICdCb2InKSIpCisgICAgYXNzZXJ0IHJlc3VsdCBpcyBO b25lCisKKyAgICAjIFZlcmlmeSBkYXRhIHdhcyBpbnNlcnRlZAorICAgIGNvdW50ID0gY29ubi5z cWwoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHRlc3RfdGFibGUiKQorICAgIGFzc2VydCBjb3VudCA9 PSAyCisKKworZGVmIHRlc3RfdHlwZV9jb252ZXJzaW9uX21peGVkKGNvbm4pOgorICAgICIiIlRl c3QgbWl4ZWQgdHlwZSBjb252ZXJzaW9uIGluIGEgc2luZ2xlIHJvdy4iIiIKKworICAgIHJlc3Vs dCA9IGNvbm4uc3FsKCJTRUxFQ1QgNDI6OmludDQsIDEyMzo6aW50OCwgMy4xNDo6ZmxvYXQ4LCAn dGV4dCcsIHRydWUsIE5VTEwiKQorICAgIGFzc2VydCByZXN1bHQgPT0gKDQyLCAxMjMsIDMuMTQs ICJ0ZXh0IiwgVHJ1ZSwgTm9uZSkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHRbMF0sIGlu dCkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHRbMV0sIGludCkKKyAgICBhc3NlcnQgaXNp bnN0YW5jZShyZXN1bHRbMl0sIGZsb2F0KQorICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3VsdFsz XSwgc3RyKQorICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3VsdFs0XSwgYm9vbCkKKyAgICBhc3Nl cnQgcmVzdWx0WzVdIGlzIE5vbmUKKworCitkZWYgdGVzdF9tdWx0aXBsZV9xdWVyaWVzX3NhbWVf Y29ubmVjdGlvbihjb25uKToKKyAgICAiIiJUZXN0IHJ1bm5pbmcgbXVsdGlwbGUgcXVlcmllcyBv biB0aGUgc2FtZSBjb25uZWN0aW9uLiIiIgorCisgICAgcmVzdWx0MSA9IGNvbm4uc3FsKCJTRUxF Q1QgMSIpCisgICAgYXNzZXJ0IHJlc3VsdDEgPT0gMQorCisgICAgcmVzdWx0MiA9IGNvbm4uc3Fs KCJTRUxFQ1QgJ2hlbGxvJywgJ3dvcmxkJyIpCisgICAgYXNzZXJ0IHJlc3VsdDIgPT0gKCJoZWxs byIsICJ3b3JsZCIpCisKKyAgICByZXN1bHQzID0gY29ubi5zcWwoIlNFTEVDVCAqIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDUpIikKKyAgICBhc3NlcnQgcmVzdWx0MyA9PSBbMSwgMiwgMywgNCwg NV0KKworCitkZWYgdGVzdF9kYXRlX3R5cGUoY29ubik6CisgICAgIiIiVGVzdCBkYXRlIHR5cGUg Y29udmVyc2lvbi4iIiIKKyAgICBpbXBvcnQgZGF0ZXRpbWUKKworICAgIHJlc3VsdCA9IGNvbm4u c3FsKCJTRUxFQ1QgJzIwMjUtMTAtMjAnOjpkYXRlIikKKyAgICBhc3NlcnQgcmVzdWx0ID09IGRh dGV0aW1lLmRhdGUoMjAyNSwgMTAsIDIwKQorICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3VsdCwg ZGF0ZXRpbWUuZGF0ZSkKKworCitkZWYgdGVzdF90aW1lc3RhbXBfdHlwZShjb25uKToKKyAgICAi IiJUZXN0IHRpbWVzdGFtcCB0eXBlIGNvbnZlcnNpb24uIiIiCisgICAgaW1wb3J0IGRhdGV0aW1l CisKKyAgICByZXN1bHQgPSBjb25uLnNxbCgiU0VMRUNUICcyMDI1LTEwLTIwIDE1OjMwOjQ1Jzo6 dGltZXN0YW1wIikKKyAgICBhc3NlcnQgcmVzdWx0ID09IGRhdGV0aW1lLmRhdGV0aW1lKDIwMjUs IDEwLCAyMCwgMTUsIDMwLCA0NSkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHQsIGRhdGV0 aW1lLmRhdGV0aW1lKQorCisKK2RlZiB0ZXN0X3RpbWVfdHlwZShjb25uKToKKyAgICAiIiJUZXN0 IHRpbWUgdHlwZSBjb252ZXJzaW9uLiIiIgorICAgIGltcG9ydCBkYXRldGltZQorCisgICAgcmVz dWx0ID0gY29ubi5zcWwoIlNFTEVDVCAnMTU6MzA6NDUnOjp0aW1lIikKKyAgICBhc3NlcnQgcmVz dWx0ID09IGRhdGV0aW1lLnRpbWUoMTUsIDMwLCA0NSkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShy ZXN1bHQsIGRhdGV0aW1lLnRpbWUpCisKKworZGVmIHRlc3RfbnVtZXJpY190eXBlKGNvbm4pOgor ICAgICIiIlRlc3QgbnVtZXJpYy9kZWNpbWFsIHR5cGUgY29udmVyc2lvbi4iIiIKKyAgICBpbXBv cnQgZGVjaW1hbAorCisgICAgcmVzdWx0ID0gY29ubi5zcWwoIlNFTEVDVCAxMjMuNDU2OjpudW1l cmljIikKKyAgICBhc3NlcnQgcmVzdWx0ID09IGRlY2ltYWwuRGVjaW1hbCgiMTIzLjQ1NiIpCisg ICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzdWx0LCBkZWNpbWFsLkRlY2ltYWwpCisKKworZGVmIHRl c3RfaW50X2FycmF5KGNvbm4pOgorICAgICIiIlRlc3QgaW50ZWdlciBhcnJheSB0eXBlIGNvbnZl cnNpb24uIiIiCisKKyAgICByZXN1bHQgPSBjb25uLnNxbCgiU0VMRUNUIEFSUkFZWzEsIDIsIDMs IDQsIDVdIikKKyAgICBhc3NlcnQgcmVzdWx0ID09IFsxLCAyLCAzLCA0LCA1XQorICAgIGFzc2Vy dCBpc2luc3RhbmNlKHJlc3VsdCwgbGlzdCkKKyAgICBhc3NlcnQgYWxsKGlzaW5zdGFuY2UoeCwg aW50KSBmb3IgeCBpbiByZXN1bHQpCisKKworZGVmIHRlc3RfdGV4dF9hcnJheShjb25uKToKKyAg ICAiIiJUZXN0IHRleHQgYXJyYXkgdHlwZSBjb252ZXJzaW9uLiIiIgorCisgICAgcmVzdWx0ID0g Y29ubi5zcWwoIlNFTEVDVCBBUlJBWVsnaGVsbG8nLCAnd29ybGQnLCAndGVzdCddIikKKyAgICBh c3NlcnQgcmVzdWx0ID09IFsiaGVsbG8iLCAid29ybGQiLCAidGVzdCJdCisgICAgYXNzZXJ0IGlz aW5zdGFuY2UocmVzdWx0LCBsaXN0KQorICAgIGFzc2VydCBhbGwoaXNpbnN0YW5jZSh4LCBzdHIp IGZvciB4IGluIHJlc3VsdCkKKworCitkZWYgdGVzdF9ib29sX2FycmF5KGNvbm4pOgorICAgICIi IlRlc3QgYm9vbGVhbiBhcnJheSB0eXBlIGNvbnZlcnNpb24uIiIiCisKKyAgICByZXN1bHQgPSBj b25uLnNxbCgiU0VMRUNUIEFSUkFZW3RydWUsIGZhbHNlLCB0cnVlXSIpCisgICAgYXNzZXJ0IHJl c3VsdCA9PSBbVHJ1ZSwgRmFsc2UsIFRydWVdCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzdWx0 LCBsaXN0KQorICAgIGFzc2VydCBhbGwoaXNpbnN0YW5jZSh4LCBib29sKSBmb3IgeCBpbiByZXN1 bHQpCisKKworZGVmIHRlc3RfZW1wdHlfYXJyYXkoY29ubik6CisgICAgIiIiVGVzdCBlbXB0eSBh cnJheSB0eXBlIGNvbnZlcnNpb24uIiIiCisKKyAgICByZXN1bHQgPSBjb25uLnNxbCgiU0VMRUNU IEFSUkFZW106OmludFtdIikKKyAgICBhc3NlcnQgcmVzdWx0ID09IFtdCisgICAgYXNzZXJ0IGlz aW5zdGFuY2UocmVzdWx0LCBsaXN0KQorCisKK2RlZiB0ZXN0X2pzb25fdHlwZShjb25uKToKKyAg ICAiIiJUZXN0IEpTT04gdHlwZSAocGFyc2VkIHRvIGRpY3QpLiIiIgorCisgICAgcmVzdWx0ID0g Y29ubi5zcWwoJ1NFTEVDVCBcJ3sia2V5IjogInZhbHVlIn1cJzo6anNvbicpCisgICAgYXNzZXJ0 IGlzaW5zdGFuY2UocmVzdWx0LCBkaWN0KQorICAgIGFzc2VydCByZXN1bHQgPT0geyJrZXkiOiAi dmFsdWUifQorCisKK2RlZiB0ZXN0X2pzb25iX3R5cGUoY29ubik6CisgICAgIiIiVGVzdCBKU09O QiB0eXBlIChwYXJzZWQgdG8gZGljdCkuIiIiCisKKyAgICByZXN1bHQgPSBjb25uLnNxbCgnU0VM RUNUIFwneyJuYW1lIjogInRlc3QiLCAiY291bnQiOiA0Mn1cJzo6anNvbmInKQorICAgIGFzc2Vy dCBpc2luc3RhbmNlKHJlc3VsdCwgZGljdCkKKyAgICBhc3NlcnQgcmVzdWx0ID09IHsibmFtZSI6 ICJ0ZXN0IiwgImNvdW50IjogNDJ9CisKKworZGVmIHRlc3RfanNvbl9hcnJheShjb25uKToKKyAg ICAiIiJUZXN0IEpTT04gYXJyYXkgdHlwZS4iIiIKKworICAgIHJlc3VsdCA9IGNvbm4uc3FsKCJT RUxFQ1QgJ1sxLCAyLCAzLCA0LCA1XSc6Ompzb24iKQorICAgIGFzc2VydCBpc2luc3RhbmNlKHJl c3VsdCwgbGlzdCkKKyAgICBhc3NlcnQgcmVzdWx0ID09IFsxLCAyLCAzLCA0LCA1XQorCisKK2Rl ZiB0ZXN0X2pzb25fbmVzdGVkKGNvbm4pOgorICAgICIiIlRlc3QgbmVzdGVkIEpTT04gb2JqZWN0 LiIiIgorCisgICAgcmVzdWx0ID0gY29ubi5zcWwoCisgICAgICAgICdTRUxFQ1QgXCd7InVzZXIi OiB7ImlkIjogMSwgIm5hbWUiOiAiQWxpY2UifSwgImFjdGl2ZSI6IHRydWV9XCc6Ompzb24nCisg ICAgKQorICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3VsdCwgZGljdCkKKyAgICBhc3NlcnQgcmVz dWx0ID09IHsidXNlciI6IHsiaWQiOiAxLCAibmFtZSI6ICJBbGljZSJ9LCAiYWN0aXZlIjogVHJ1 ZX0KKworCitkZWYgdGVzdF9taXhlZF90eXBlc193aXRoX2FycmF5cyhjb25uKToKKyAgICAiIiJU ZXN0IG1peGVkIHR5cGVzIGluY2x1ZGluZyBhcnJheXMgaW4gYSBzaW5nbGUgcm93LiIiIgorCisg ICAgcmVzdWx0ID0gY29ubi5zcWwoIlNFTEVDVCA0MiwgJ3RleHQnLCBBUlJBWVsxLCAyLCAzXSwg dHJ1ZSIpCisgICAgYXNzZXJ0IHJlc3VsdCA9PSAoNDIsICJ0ZXh0IiwgWzEsIDIsIDNdLCBUcnVl KQorICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3VsdFswXSwgaW50KQorICAgIGFzc2VydCBpc2lu c3RhbmNlKHJlc3VsdFsxXSwgc3RyKQorICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3VsdFsyXSwg bGlzdCkKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHRbM10sIGJvb2wpCisKKworZGVmIHRl c3RfdXVpZF90eXBlKGNvbm4pOgorICAgICIiIlRlc3QgVVVJRCB0eXBlIGNvbnZlcnNpb24uIiIi CisgICAgdGVzdF91dWlkID0gIjU1MGU4NDAwLWUyOWItNDFkNC1hNzE2LTQ0NjY1NTQ0MDAwMCIK KyAgICByZXN1bHQgPSBjb25uLnNxbChmIlNFTEVDVCAne3Rlc3RfdXVpZH0nOjp1dWlkIikKKyAg ICBhc3NlcnQgcmVzdWx0ID09IHV1aWQuVVVJRCh0ZXN0X3V1aWQpCisgICAgYXNzZXJ0IGlzaW5z dGFuY2UocmVzdWx0LCB1dWlkLlVVSUQpCisKKworZGVmIHRlc3RfdXVpZF9nZW5lcmF0aW9uKGNv bm4pOgorICAgICIiIlRlc3QgZ2VuZXJhdGVkIFVVSUQgdHlwZSBjb252ZXJzaW9uLiIiIgorICAg IHJlc3VsdCA9IGNvbm4uc3FsKCJTRUxFQ1QgdXVpZHY0KCkiKQorICAgIGFzc2VydCBpc2luc3Rh bmNlKHJlc3VsdCwgdXVpZC5VVUlEKQorICAgICMgQ2hlY2sgaXQncyBhIHZhbGlkIFVVSUQgYnkg ZW5zdXJpbmcgaXQgY2FuIGJlIGNvbnZlcnRlZCB0byBzdHJpbmcKKyAgICBhc3NlcnQgbGVuKHN0 cihyZXN1bHQpKSA9PSAzNiAgIyBVVUlEIHN0cmluZyBmb3JtYXQgbGVuZ3RoCisKKworZGVmIHRl c3RfdGV4dF9hcnJheV93aXRoX2NvbW1hcyhjb25uKToKKyAgICAiIiJUZXN0IHRleHQgYXJyYXkg d2l0aCBlbGVtZW50cyBjb250YWluaW5nIGNvbW1hcy4iIiIKKworICAgIHJlc3VsdCA9IGNvbm4u c3FsKCJTRUxFQ1QgQVJSQVlbJ0EsQicsICdDJywgJyBEICddIikKKyAgICBhc3NlcnQgcmVzdWx0 ID09IFsiQSxCIiwgIkMiLCAiIEQgIl0KKworCitkZWYgdGVzdF90ZXh0X2FycmF5X3dpdGhfcXVv dGVzKGNvbm4pOgorICAgICIiIlRlc3QgdGV4dCBhcnJheSB3aXRoIGVsZW1lbnRzIGNvbnRhaW5p bmcgcXVvdGVzLiIiIgorCisgICAgcmVzdWx0ID0gY29ubi5zcWwociJTRUxFQ1QgQVJSQVlbRSdh XCJiJywgJ2MnXSIpCisgICAgYXNzZXJ0IHJlc3VsdCA9PSBbJ2EiYicsICJjIl0KKworCitkZWYg dGVzdF90ZXh0X2FycmF5X3dpdGhfYmFja3NsYXNoKGNvbm4pOgorICAgICIiIlRlc3QgdGV4dCBh cnJheSB3aXRoIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmFja3NsYXNoZXMuIiIiCisKKyAgICByZXN1 bHQgPSBjb25uLnNxbChyIlNFTEVDVCBBUlJBWVtFJ2FcXGInLCAnYyddIikKKyAgICBhc3NlcnQg cmVzdWx0ID09IFsiYVxcYiIsICJjIl0KKworCitkZWYgdGVzdF9qc29uX2FycmF5X3R5cGUoY29u bik6CisgICAgIiIiVGVzdCBhcnJheSBvZiBKU09OIHZhbHVlcyB3aXRoIGVtYmVkZGVkIHF1b3Rl cyBhbmQgY29tbWFzLiIiIgorCisgICAgcmVzdWx0ID0gY29ubi5zcWwoIiIiU0VMRUNUIEFSUkFZ Wyd7ImFiYyI6IDEyMywgInh5eiI6IDQ1Nn0nOjpqc29uXSIiIikKKyAgICBhc3NlcnQgcmVzdWx0 ID09IFt7ImFiYyI6IDEyMywgInh5eiI6IDQ1Nn1dCisKKworZGVmIHRlc3RfanNvbl9hcnJheV9t dWx0aXBsZShjb25uKToKKyAgICAiIiJUZXN0IGFycmF5IG9mIG11bHRpcGxlIEpTT04gb2JqZWN0 cy4iIiIKKworICAgIHJlc3VsdCA9IGNvbm4uc3FsKAorICAgICAgICAiIiJTRUxFQ1QgQVJSQVlb J3siYSI6IDF9Jzo6anNvbiwgJ3siYiI6IDJ9Jzo6anNvbiwgJ1sieCIsICJ5Il0nOjpqc29uXSIi IgorICAgICkKKyAgICBhc3NlcnQgcmVzdWx0ID09IFt7ImEiOiAxfSwgeyJiIjogMn0sIFsieCIs ICJ5Il1dCisKKworZGVmIHRlc3RfMmRfaW50X2FycmF5KGNvbm4pOgorICAgICIiIlRlc3QgMkQg aW50ZWdlciBhcnJheS4iIiIKKworICAgIHJlc3VsdCA9IGNvbm4uc3FsKCJTRUxFQ1QgQVJSQVlb WzEsMl0sWzMsNF1dIikKKyAgICBhc3NlcnQgcmVzdWx0ID09IFtbMSwgMl0sIFszLCA0XV0KKwor CitkZWYgdGVzdF8yZF90ZXh0X2FycmF5KGNvbm4pOgorICAgICIiIlRlc3QgMkQgaW50ZWdlciBh cnJheS4iIiIKKworICAgIHJlc3VsdCA9IGNvbm4uc3FsKCJTRUxFQ1QgQVJSQVlbWydhJywnYidd LFsnYycsJ2QsZSddXSIpCisgICAgYXNzZXJ0IHJlc3VsdCA9PSBbWyJhIiwgImIiXSwgWyJjIiwg ImQsZSJdXQorCisKK2RlZiB0ZXN0XzNkX2ludF9hcnJheShjb25uKToKKyAgICAiIiJUZXN0IDNE IGludGVnZXIgYXJyYXkuIiIiCisKKyAgICByZXN1bHQgPSBjb25uLnNxbCgiU0VMRUNUIEFSUkFZ W1tbMSwyXSxbMyw0XV0sW1s1LDZdLFs3LDhdXV0iKQorICAgIGFzc2VydCByZXN1bHQgPT0gW1tb MSwgMl0sIFszLCA0XV0sIFtbNSwgNl0sIFs3LCA4XV1dCisKKworZGVmIHRlc3RfYXJyYXlfd2l0 aF9udWxsKGNvbm4pOgorICAgICIiIlRlc3QgYXJyYXkgd2l0aCBOVUxMIGVsZW1lbnRzLiIiIgor CisgICAgcmVzdWx0ID0gY29ubi5zcWwoIlNFTEVDVCBBUlJBWVsxLCBOVUxMLCAzXSIpCisgICAg YXNzZXJ0IHJlc3VsdCA9PSBbMSwgTm9uZSwgM10KLS0gCjIuNTIuMAoK --baaef3372e886fe21dfd6cae3d53a904ae10bf2be12ea57b7aa5066ea5c7 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0003-POC-Convert-load-balance-tests-from-perl-to-pytho.patch Content-Type: text/x-patch; charset=utf-8; name=v9-0003-POC-Convert-load-balance-tests-from-perl-to-pytho.patch RnJvbSAxM2M5Yzg1NzZiNzBiNGNmODBlYTY5NDQ3MjdiYWE2ZjU2MzlkZGMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBGcmksIDI2IERlYyAyMDI1IDEyOjMxOjQzICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 OSAzLzVdIFBPQzogQ29udmVydCBsb2FkIGJhbGFuY2UgdGVzdHMgZnJvbSBwZXJsIHRvIHB5dGhv bgoKVGhpcyBpcyBhIHByb29mIG9mIGNvbmNlcHQgdG8gc2hvdyBob3cgdG8gdXNlIHRoZSBweXRl c3QgdGVzdAppbmZyYXN0cnVjdHVyZS4gSXQgY29udmVydHMgdHdvIGV4aXN0aW5nIHRlc3RzIHRo YXQgY291bGQgbm90IHNoYXJlCmNvZGUuIEFuZCBub3cgdGhleSBkby4gSWYgd2UgZXZlciBpbnRy b2R1Y2UgYW5vdGhlciBsb2FkIGJhbGFuY2UgbWV0aG9kCihlLmcuIHJvdW5kIHJvYmluKS4gV2Ug Y2FuIGVhc2lseSB0ZXN0IGl0IGZvciBib3RoIEROUyBhbmQgaG9zdGxpc3QKYmFzZWQgbG9hZCBi YWxhbmNpbmcgYnkgYWRkaW5nIGEgc2luZ2xlIG5ldyB0ZXN0IGZ1bmN0aW9uLgotLS0KIHNyYy9p bnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW50 ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZCAgICAgICAgICAgICAgfCAgIDcgKy0KIHNyYy9pbnRl cmZhY2VzL2xpYnBxL3B5dC90ZXN0X2xvYWRfYmFsYW5jZS5weSB8IDE3MCArKysrKysrKysrKysr KysrKysKIC4uLi9saWJwcS90LzAwM19sb2FkX2JhbGFuY2VfaG9zdF9saXN0LnBsICAgICB8ICA5 NCAtLS0tLS0tLS0tCiAuLi4vbGlicHEvdC8wMDRfbG9hZF9iYWxhbmNlX2Rucy5wbCAgICAgICAg ICAgfCAxNDQgLS0tLS0tLS0tLS0tLS0tCiA1IGZpbGVzIGNoYW5nZWQsIDE3NiBpbnNlcnRpb25z KCspLCAyNDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2ludGVyZmFjZXMv bGlicHEvcHl0L3Rlc3RfbG9hZF9iYWxhbmNlLnB5CiBkZWxldGUgbW9kZSAxMDA2NDQgc3JjL2lu dGVyZmFjZXMvbGlicHEvdC8wMDNfbG9hZF9iYWxhbmNlX2hvc3RfbGlzdC5wbAogZGVsZXRlIG1v ZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2xpYnBxL3QvMDA0X2xvYWRfYmFsYW5jZV9kbnMucGwK CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZSBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL01ha2VmaWxlCmluZGV4IGJmNGJhYTkyOTE3Li40YzRiZGI0YjNhMyAxMDA2NDQK LS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUKKysrIGIvc3JjL2ludGVyZmFjZXMv bGlicHEvTWFrZWZpbGUKQEAgLTE2Nyw2ICsxNjcsNyBAQCBjaGVjayBpbnN0YWxsY2hlY2s6IGV4 cG9ydCBQQVRIIDo9ICQoQ1VSRElSKS90ZXN0OiQoUEFUSCkKIAogY2hlY2s6IHRlc3QtYnVpbGQg YWxsCiAJJChwcm92ZV9jaGVjaykKKwkkKHB5dGVzdF9jaGVjaykKIAogaW5zdGFsbGNoZWNrOiB0 ZXN0LWJ1aWxkIGFsbAogCSQocHJvdmVfaW5zdGFsbGNoZWNrKQpkaWZmIC0tZ2l0IGEvc3JjL2lu dGVyZmFjZXMvbGlicHEvbWVzb24uYnVpbGQgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9tZXNvbi5i dWlsZAppbmRleCBjNWVjZDljM2E4Ny4uNTY3OTBkZDkyYTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRl cmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29u LmJ1aWxkCkBAIC0xNTAsOCArMTUwLDYgQEAgdGVzdHMgKz0gewogICAgICd0ZXN0cyc6IFsKICAg ICAgICd0LzAwMV91cmkucGwnLAogICAgICAgJ3QvMDAyX2FwaS5wbCcsCi0gICAgICAndC8wMDNf bG9hZF9iYWxhbmNlX2hvc3RfbGlzdC5wbCcsCi0gICAgICAndC8wMDRfbG9hZF9iYWxhbmNlX2Ru cy5wbCcsCiAgICAgICAndC8wMDVfbmVnb3RpYXRlX2VuY3J5cHRpb24ucGwnLAogICAgICAgJ3Qv MDA2X3NlcnZpY2UucGwnLAogICAgIF0sCkBAIC0xNjIsNiArMTYwLDExIEBAIHRlc3RzICs9IHsK ICAgICB9LAogICAgICdkZXBzJzogbGlicHFfdGVzdF9kZXBzLAogICB9LAorICAncHl0ZXN0Jzog eworICAgICd0ZXN0cyc6IFsKKyAgICAgICdweXQvdGVzdF9sb2FkX2JhbGFuY2UucHknLAorICAg IF0sCisgIH0sCiB9CiAKIHN1YmRpcigncG8nLCBpZl9mb3VuZDogbGliaW50bCkKZGlmZiAtLWdp dCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL3B5dC90ZXN0X2xvYWRfYmFsYW5jZS5weSBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxL3B5dC90ZXN0X2xvYWRfYmFsYW5jZS5weQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGFmNDZkOGYzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvaW50ZXJmYWNlcy9saWJwcS9weXQvdGVzdF9sb2FkX2JhbGFuY2UucHkKQEAgLTAsMCArMSwx NzAgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorCisiIiIKK1Rlc3RzIGZvciBsb2FkX2JhbGFuY2VfaG9zdHMgY29ubmVjdGlvbiBw YXJhbWV0ZXIuCisKK1RoZXNlIHRlc3RzIHZlcmlmeSB0aGF0IGxpYnBxIGNvcnJlY3RseSBoYW5k bGVzIGxvYWQgYmFsYW5jaW5nIGFjcm9zcyBtdWx0aXBsZQorUG9zdGdyZVNRTCBzZXJ2ZXJzIHNw ZWNpZmllZCBpbiB0aGUgY29ubmVjdGlvbiBzdHJpbmcuCisiIiIKKworaW1wb3J0IHBsYXRmb3Jt CitpbXBvcnQgcmUKKworaW1wb3J0IHB5dGVzdAorCitmcm9tIGxpYnBxIGltcG9ydCBMaWJwcUVy cm9yCitpbXBvcnQgcHlwZworCisKK0BweXRlc3QuZml4dHVyZShzY29wZT0ibW9kdWxlIikKK2Rl ZiBsb2FkX2JhbGFuY2Vfbm9kZXNfaG9zdGxpc3QoY3JlYXRlX3BnX21vZHVsZSk6CisgICAgIiIi CisgICAgQ3JlYXRlIDMgUG9zdGdyZVNRTCBub2RlcyB3aXRoIGRpZmZlcmVudCBzb2NrZXQgZGly ZWN0b3JpZXMuCisKKyAgICBFYWNoIG5vZGUgaGFzIGl0cyBvd24gVW5peCBzb2NrZXQgZGlyZWN0 b3J5IGZvciBpc29sYXRpb24uCisgICAgUmV0dXJucyBhIHR1cGxlIG9mIChub2RlcywgY29ubmVj dCkuCisgICAgIiIiCisgICAgbm9kZXMgPSBbY3JlYXRlX3BnX21vZHVsZSgpIGZvciBfIGluIHJh bmdlKDMpXQorCisgICAgaG9zdGxpc3QgPSAiLCIuam9pbihub2RlLmhvc3QgZm9yIG5vZGUgaW4g bm9kZXMpCisgICAgcG9ydGxpc3QgPSAiLCIuam9pbihzdHIobm9kZS5wb3J0KSBmb3Igbm9kZSBp biBub2RlcykKKworICAgIGRlZiBjb25uZWN0KCoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIG5v ZGVzWzBdLmNvbm5lY3QoaG9zdD1ob3N0bGlzdCwgcG9ydD1wb3J0bGlzdCwgKiprd2FyZ3MpCisK KyAgICByZXR1cm4gbm9kZXMsIGNvbm5lY3QKKworCitAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9Im1v ZHVsZSIpCitkZWYgbG9hZF9iYWxhbmNlX25vZGVzX2RucyhjcmVhdGVfcGdfbW9kdWxlKToKKyAg ICAiIiIKKyAgICBDcmVhdGUgMyBQb3N0Z3JlU1FMIG5vZGVzIG9uIHRoZSBzYW1lIHBvcnQgYnV0 IGRpZmZlcmVudCBJUCBhZGRyZXNzZXMuCisKKyAgICBVc2VzIDEyNy4wLjAuMSwgMTI3LjAuMC4y LCAxMjcuMC4wLjMgd2l0aCBhIHNoYXJlZCBwb3J0LCBzbyB0aGF0CisgICAgY29ubmVjdGlvbnMg dG8gJ3BnLWxvYWRiYWxhbmNldGVzdCcgY2FuIGJlIGxvYWQgYmFsYW5jZWQgdmlhIEROUy4KKwor ICAgIFNpbmNlIHNldHRpbmcgdXAgYSBETlMgc2VydmVyIGlzIG1vcmUgZWZmb3J0IHRoYW4gd2Ug Y29uc2lkZXIgcmVhc29uYWJsZSB0bworICAgIHJ1biB0aGlzIHRlc3QsIHRoaXMgc2l0dWF0aW9u IGlzIGluc3RlYWQgaW1pdGF0ZWQgYnkgdXNpbmcgYSBob3N0cyBmaWxlCisgICAgd2hlcmUgYSBz aW5nbGUgaG9zdG5hbWUgbWFwcyB0byBtdWx0aXBsZSBkaWZmZXJlbnQgSVAgYWRkcmVzc2VzLiBU aGlzIHRlc3QKKyAgICByZXF1aXJlcyB0aGUgYWRtaW5pc3RyYXRvciB0byBhZGQgdGhlIGZvbGxv d2luZyBsaW5lcyB0byB0aGUgaG9zdHMgZmlsZSAoaWYKKyAgICB3ZSBkZXRlY3QgdGhhdCB0aGlz IGhhc24ndCBoYXBwZW5lZCB3ZSBza2lwIHRoZSB0ZXN0KToKKworICAgIDEyNy4wLjAuMSBwZy1s b2FkYmFsYW5jZXRlc3QKKyAgICAxMjcuMC4wLjIgcGctbG9hZGJhbGFuY2V0ZXN0CisgICAgMTI3 LjAuMC4zIHBnLWxvYWRiYWxhbmNldGVzdAorCisgICAgV2luZG93cyBvciBMaW51eCBhcmUgcmVx dWlyZWQgdG8gcnVuIHRoaXMgdGVzdCBiZWNhdXNlIHRoZXNlIE9TZXMgYWxsb3cKKyAgICBiaW5k aW5nIHRvIDEyNy4wLjAuMiBhbmQgMTI3LjAuMC4zIGFkZHJlc3NlcyBieSBkZWZhdWx0LCBidXQg b3RoZXIgT1NlcworICAgIGRvbid0LiBXZSBuZWVkIHRvIGJpbmQgdG8gZGlmZmVyZW50IElQIGFk ZHJlc3Nlcywgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZXNlCisgICAgZGlmZmVyZW50IElQIGFkZHJl c3NlcyBpbiB0aGUgaG9zdHMgZmlsZS4KKworICAgIFRoZSBob3N0cyBmaWxlIG5lZWRzIHRvIGJl IHByZXBhcmVkIGJlZm9yZSBydW5uaW5nIHRoaXMgdGVzdC4gV2UgZG9uJ3QgZG8KKyAgICBpdCBv biB0aGUgZmx5LCBiZWNhdXNlIGl0IHJlcXVpcmVzIHJvb3QgcGVybWlzc2lvbnMgdG8gY2hhbmdl IHRoZSBob3N0cworICAgIGZpbGUuIEluIENJIHdlIHNldCB1cCB0aGUgcHJldmlvdXNseSBtZW50 aW9uZWQgcnVsZXMgaW4gdGhlIGhvc3RzIGZpbGUsIHNvCisgICAgdGhhdCB0aGlzIGxvYWQgYmFs YW5jaW5nIG1ldGhvZCBpcyB0ZXN0ZWQuCisKKyAgICBSZXF1aXJlcyBQR19URVNUX0VYVFJBPWxv YWRfYmFsYW5jZSBiZWNhdXNlIGl0IHJlcXVpcmVzIHRoaXMgbWFudWFsIGhvc3RzCisgICAgZmls ZSBjb25maWd1cmF0aW9uIGFuZCBhbHNvIHVzZXMgVENQIHdpdGggdHJ1c3QgYXV0aCwgd2hpY2gg aXMgcG90ZW50aWFsbHkKKyAgICB1bnNhZmUgb24gbXVsdGl1c2VyIHN5c3RlbXMuCisgICAgIiIi CisgICAgcHlwZy5za2lwX3VubGVzc190ZXN0X2V4dHJhcygibG9hZF9iYWxhbmNlIikKKworICAg IGlmIHBsYXRmb3JtLnN5c3RlbSgpIG5vdCBpbiAoIkxpbnV4IiwgIldpbmRvd3MiKToKKyAgICAg ICAgcHl0ZXN0LnNraXAoIkROUyBsb2FkIGJhbGFuY2UgdGVzdCBvbmx5IHN1cHBvcnRlZCBvbiBM aW51eCBhbmQgV2luZG93cyIpCisKKyAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAiV2luZG93 cyI6CisgICAgICAgIGhvc3RzX3BhdGggPSByImM6XFdpbmRvd3NcU3lzdGVtMzJcRHJpdmVyc1xl dGNcaG9zdHMiCisgICAgZWxzZToKKyAgICAgICAgaG9zdHNfcGF0aCA9ICIvZXRjL2hvc3RzIgor CisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oaG9zdHNfcGF0aCkgYXMgZjoKKyAgICAgICAg ICAgIGhvc3RzX2NvbnRlbnQgPSBmLnJlYWQoKQorICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJv cik6CisgICAgICAgIHB5dGVzdC5za2lwKGYiQ291bGQgbm90IHJlYWQgaG9zdHMgZmlsZToge2hv c3RzX3BhdGh9IikKKworICAgIGNvdW50ID0gbGVuKHJlLmZpbmRhbGwociIxMjdcLjBcLjBcLlsx LTNdXHMrcGctbG9hZGJhbGFuY2V0ZXN0IiwgaG9zdHNfY29udGVudCkpCisgICAgaWYgY291bnQg IT0gMzoKKyAgICAgICAgcHl0ZXN0LnNraXAoImhvc3RzIGZpbGUgbm90IHByZXBhcmVkIGZvciBE TlMgbG9hZCBiYWxhbmNlIHRlc3QiKQorCisgICAgZmlyc3Rfbm9kZSA9IGNyZWF0ZV9wZ19tb2R1 bGUoaG9zdGFkZHI9IjEyNy4wLjAuMSIpCisgICAgbm9kZXMgPSBbCisgICAgICAgIGZpcnN0X25v ZGUsCisgICAgICAgIGNyZWF0ZV9wZ19tb2R1bGUoaG9zdGFkZHI9IjEyNy4wLjAuMiIsIHBvcnQ9 Zmlyc3Rfbm9kZS5wb3J0KSwKKyAgICAgICAgY3JlYXRlX3BnX21vZHVsZShob3N0YWRkcj0iMTI3 LjAuMC4zIiwgcG9ydD1maXJzdF9ub2RlLnBvcnQpLAorICAgIF0KKworICAgICMgQWxsb3cgdHJ1 c3QgYXV0aGVudGljYXRpb24gZm9yIFRDUCBjb25uZWN0aW9ucyBmcm9tIGxvb3BiYWNrCisgICAg Zm9yIG5vZGUgaW4gbm9kZXM6CisgICAgICAgIGhiYV9wYXRoID0gbm9kZS5kYXRhZGlyIC8gInBn X2hiYS5jb25mIgorICAgICAgICB3aXRoIG9wZW4oaGJhX3BhdGgsICJyIikgYXMgZjoKKyAgICAg ICAgICAgIG9yaWdpbmFsX2NvbnRlbnQgPSBmLnJlYWQoKQorICAgICAgICB3aXRoIG9wZW4oaGJh X3BhdGgsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoImhvc3QgYWxsIGFsbCAxMjcu MC4wLjAvOCB0cnVzdFxuIikKKyAgICAgICAgICAgIGYud3JpdGUob3JpZ2luYWxfY29udGVudCkK KyAgICAgICAgbm9kZS5wZ19jdGwoInJlbG9hZCIpCisKKyAgICBkZWYgY29ubmVjdCgqKmt3YXJn cyk6CisgICAgICAgIHJldHVybiBub2Rlc1swXS5jb25uZWN0KGhvc3Q9InBnLWxvYWRiYWxhbmNl dGVzdCIsICoqa3dhcmdzKQorCisgICAgcmV0dXJuIG5vZGVzLCBjb25uZWN0CisKKworQHB5dGVz dC5maXh0dXJlKHNjb3BlPSJtb2R1bGUiLCBwYXJhbXM9WyJob3N0bGlzdCIsICJkbnMiXSkKK2Rl ZiBsb2FkX2JhbGFuY2Vfbm9kZXMocmVxdWVzdCk6CisgICAgIiIiCisgICAgUGFyYW1ldHJpemVk IGZpeHR1cmUgcHJvdmlkaW5nIGJvdGggbG9hZCBiYWxhbmNpbmcgdGVzdCBlbnZpcm9ubWVudHMu CisgICAgIiIiCisgICAgcmV0dXJuIHJlcXVlc3QuZ2V0Zml4dHVyZXZhbHVlKGYibG9hZF9iYWxh bmNlX25vZGVzX3tyZXF1ZXN0LnBhcmFtfSIpCisKKworZGVmIHRlc3RfbG9hZF9iYWxhbmNlX2hv c3RzX2ludmFsaWRfdmFsdWUobG9hZF9iYWxhbmNlX25vZGVzKToKKyAgICAiIiJsb2FkX2JhbGFu Y2VfaG9zdHMgZG9lc24ndCBhY2NlcHQgdW5rbm93biB2YWx1ZXMuIiIiCisgICAgXywgY29ubmVj dCA9IGxvYWRfYmFsYW5jZV9ub2RlcworCisgICAgd2l0aCBweXRlc3QucmFpc2VzKAorICAgICAg ICBMaWJwcUVycm9yLCBtYXRjaD0naW52YWxpZCBsb2FkX2JhbGFuY2VfaG9zdHMgdmFsdWU6ICJk b2Vzbm90ZXhpc3QiJworICAgICk6CisgICAgICAgIGNvbm5lY3QobG9hZF9iYWxhbmNlX2hvc3Rz PSJkb2Vzbm90ZXhpc3QiKQorCisKK2RlZiB0ZXN0X2xvYWRfYmFsYW5jZV9ob3N0c19kaXNhYmxl KGxvYWRfYmFsYW5jZV9ub2Rlcyk6CisgICAgIiIibG9hZF9iYWxhbmNlX2hvc3RzPWRpc2FibGUg YWx3YXlzIGNvbm5lY3RzIHRvIHRoZSBmaXJzdCBub2RlLiIiIgorICAgIG5vZGVzLCBjb25uZWN0 ID0gbG9hZF9iYWxhbmNlX25vZGVzCisKKyAgICB3aXRoIG5vZGVzWzBdLmxvZ19jb250YWlucygi Y29ubmVjdGlvbiByZWNlaXZlZCIpOgorICAgICAgICBjb25uZWN0KGxvYWRfYmFsYW5jZV9ob3N0 cz0iZGlzYWJsZSIpCisKKworZGVmIHRlc3RfbG9hZF9iYWxhbmNlX2hvc3RzX3JhbmRvbV9kaXN0 cmlidXRpb24obG9hZF9iYWxhbmNlX25vZGVzKToKKyAgICAiIiJsb2FkX2JhbGFuY2VfaG9zdHM9 cmFuZG9tIGRpc3RyaWJ1dGVzIGNvbm5lY3Rpb25zIGFjcm9zcyBhbGwgbm9kZXMuIiIiCisgICAg bm9kZXMsIGNvbm5lY3QgPSBsb2FkX2JhbGFuY2Vfbm9kZXMKKworICAgIGZvciBfIGluIHJhbmdl KDUwKToKKyAgICAgICAgY29ubmVjdChsb2FkX2JhbGFuY2VfaG9zdHM9InJhbmRvbSIpCisKKyAg ICBvY2N1cnJlbmNlcyA9IFsKKyAgICAgICAgbGVuKHJlLmZpbmRhbGwoImNvbm5lY3Rpb24gcmVj ZWl2ZWQiLCBub2RlLmxvZ19jb250ZW50KCkpKSBmb3Igbm9kZSBpbiBub2RlcworICAgIF0KKwor ICAgICMgU3RhdGlzdGljYWxseSwgZWFjaCBub2RlIHNob3VsZCByZWNlaXZlIGF0IGxlYXN0IG9u ZSBjb25uZWN0aW9uLgorICAgICMgVGhlIHByb2JhYmlsaXR5IG9mIGFueSBub2RlIHJlY2Vpdmlu ZyAwIGNvbm5lY3Rpb25zIGlzICgyLzMpXjUwIOKJiCAxLjU3ZS05CisgICAgYXNzZXJ0IG9jY3Vy cmVuY2VzWzBdID4gMCwgIm5vZGUxIHNob3VsZCByZWNlaXZlIGF0IGxlYXN0IG9uZSBjb25uZWN0 aW9uIgorICAgIGFzc2VydCBvY2N1cnJlbmNlc1sxXSA+IDAsICJub2RlMiBzaG91bGQgcmVjZWl2 ZSBhdCBsZWFzdCBvbmUgY29ubmVjdGlvbiIKKyAgICBhc3NlcnQgb2NjdXJyZW5jZXNbMl0gPiAw LCAibm9kZTMgc2hvdWxkIHJlY2VpdmUgYXQgbGVhc3Qgb25lIGNvbm5lY3Rpb24iCisgICAgYXNz ZXJ0IHN1bShvY2N1cnJlbmNlcykgPT0gNTAsICJ0b3RhbCBjb25uZWN0aW9ucyBzaG91bGQgYmUg NTAiCisKKworZGVmIHRlc3RfbG9hZF9iYWxhbmNlX2hvc3RzX2ZhaWxvdmVyKGxvYWRfYmFsYW5j ZV9ub2Rlcyk6CisgICAgIiIibG9hZF9iYWxhbmNlX2hvc3RzIGNvbnRpbnVlcyB0cnlpbmcgaG9z dHMgdW50aWwgaXQgZmluZHMgYSB3b3JraW5nIG9uZS4iIiIKKyAgICBub2RlcywgY29ubmVjdCA9 IGxvYWRfYmFsYW5jZV9ub2RlcworCisgICAgbm9kZXNbMF0uc3RvcCgpCisgICAgbm9kZXNbMV0u c3RvcCgpCisKKyAgICB3aXRoIG5vZGVzWzJdLmxvZ19jb250YWlucygiY29ubmVjdGlvbiByZWNl aXZlZCIpOgorICAgICAgICBjb25uZWN0KGxvYWRfYmFsYW5jZV9ob3N0cz0iZGlzYWJsZSIpCisK KyAgICB3aXRoIG5vZGVzWzJdLmxvZ19jb250YWlucygiY29ubmVjdGlvbiByZWNlaXZlZCIsIHRp bWVzPTUpOgorICAgICAgICBmb3IgXyBpbiByYW5nZSg1KToKKyAgICAgICAgICAgIGNvbm5lY3Qo bG9hZF9iYWxhbmNlX2hvc3RzPSJyYW5kb20iKQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMv bGlicHEvdC8wMDNfbG9hZF9iYWxhbmNlX2hvc3RfbGlzdC5wbCBiL3NyYy9pbnRlcmZhY2VzL2xp YnBxL3QvMDAzX2xvYWRfYmFsYW5jZV9ob3N0X2xpc3QucGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDFmOTcwZmY5OTRiLi4wMDAwMDAwMDAwMAotLS0gYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS90LzAwM19sb2FkX2JhbGFuY2VfaG9zdF9saXN0LnBsCisrKyAvZGV2L251bGwKQEAgLTEs OTQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMjMtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKLXVzZSBzdHJpY3Q7Ci11c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2Fs bCc7Ci11c2UgQ29uZmlnOwotdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwotdXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Ci11c2UgVGVzdDo6TW9yZTsKLQotIyBUaGlzIHRlc3RzIGxv YWQgYmFsYW5jaW5nIGFjcm9zcyB0aGUgbGlzdCBvZiBkaWZmZXJlbnQgaG9zdHMgaW4gdGhlIGhv c3QKLSMgcGFyYW1ldGVyIG9mIHRoZSBjb25uZWN0aW9uIHN0cmluZy4KLQotIyBDbHVzdGVyIHNl dHVwIHdoaWNoIGlzIHNoYXJlZCBmb3IgdGVzdGluZyBib3RoIGxvYWQgYmFsYW5jaW5nIG1ldGhv ZHMKLW15ICRub2RlMSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZTEnKTsK LW15ICRub2RlMiA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZTInLCBvd25f aG9zdCA9PiAxKTsKLW15ICRub2RlMyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygn bm9kZTMnLCBvd25faG9zdCA9PiAxKTsKLQotIyBDcmVhdGUgYSBkYXRhIGRpcmVjdG9yeSB3aXRo IGluaXRkYgotJG5vZGUxLT5pbml0KCk7Ci0kbm9kZTItPmluaXQoKTsKLSRub2RlMy0+aW5pdCgp OwotCi0jIFN0YXJ0IHRoZSBQb3N0Z3JlU1FMIHNlcnZlcgotJG5vZGUxLT5zdGFydCgpOwotJG5v ZGUyLT5zdGFydCgpOwotJG5vZGUzLT5zdGFydCgpOwotCi0jIFN0YXJ0IHRoZSB0ZXN0cyBmb3Ig bG9hZCBiYWxhbmNpbmcgbWV0aG9kIDEKLW15ICRob3N0bGlzdCA9ICRub2RlMS0+aG9zdCAuICcs JyAuICRub2RlMi0+aG9zdCAuICcsJyAuICRub2RlMy0+aG9zdDsKLW15ICRwb3J0bGlzdCA9ICRu b2RlMS0+cG9ydCAuICcsJyAuICRub2RlMi0+cG9ydCAuICcsJyAuICRub2RlMy0+cG9ydDsKLQot JG5vZGUxLT5jb25uZWN0X2ZhaWxzKAotCSJob3N0PSRob3N0bGlzdCBwb3J0PSRwb3J0bGlzdCBs b2FkX2JhbGFuY2VfaG9zdHM9ZG9lc25vdGV4aXN0IiwKLQkibG9hZF9iYWxhbmNlX2hvc3RzIGRv ZXNuJ3QgYWNjZXB0IHVua25vd24gdmFsdWVzIiwKLQlleHBlY3RlZF9zdGRlcnIgPT4gcXIvaW52 YWxpZCBsb2FkX2JhbGFuY2VfaG9zdHMgdmFsdWU6ICJkb2Vzbm90ZXhpc3QiLyk7Ci0KLSMgbG9h ZF9iYWxhbmNlX2hvc3RzPWRpc2FibGUgc2hvdWxkIGFsd2F5cyBjaG9vc2UgdGhlIGZpcnN0IG9u ZS4KLSRub2RlMS0+Y29ubmVjdF9vaygKLQkiaG9zdD0kaG9zdGxpc3QgcG9ydD0kcG9ydGxpc3Qg bG9hZF9iYWxhbmNlX2hvc3RzPWRpc2FibGUiLAotCSJsb2FkX2JhbGFuY2VfaG9zdHM9ZGlzYWJs ZSBjb25uZWN0cyB0byB0aGUgZmlyc3Qgbm9kZSIsCi0Jc3FsID0+ICJTRUxFQ1QgJ2Nvbm5lY3Qx JyIsCi0JbG9nX2xpa2UgPT4gW3FyL3N0YXRlbWVudDogU0VMRUNUICdjb25uZWN0MScvXSk7Ci0K LSMgU3RhdGlzdGljYWxseSB0aGUgZm9sbG93aW5nIGxvb3Agd2l0aCBsb2FkX2JhbGFuY2VfaG9z dHM9cmFuZG9tIHdpbGwgYWxtb3N0Ci0jIGNlcnRhaW5seSBjb25uZWN0IGF0IGxlYXN0IG9uY2Ug dG8gZWFjaCBvZiB0aGUgbm9kZXMuIFRoZSBjaGFuY2Ugb2YgdGhhdCBub3QKLSMgaGFwcGVuaW5n IGlzIHNvIHNtYWxsIHRoYXQgaXQncyBuZWdsaWdpYmxlOiAoMi8zKV41MCA9IDEuNTY4MzI4NTVl LTkKLWZvcmVhY2ggbXkgJGkgKDEgLi4gNTApCi17Ci0JJG5vZGUxLT5jb25uZWN0X29rKAotCQki aG9zdD0kaG9zdGxpc3QgcG9ydD0kcG9ydGxpc3QgbG9hZF9iYWxhbmNlX2hvc3RzPXJhbmRvbSIs Ci0JCSJyZXBlYXRlZCBjb25uZWN0aW9ucyB3aXRoIHJhbmRvbSBsb2FkIGJhbGFuY2luZyIsCi0J CXNxbCA9PiAiU0VMRUNUICdjb25uZWN0MiciKTsKLX0KLQotbXkgJG5vZGUxX29jY3VycmVuY2Vz ID0gKCkgPQotICAkbm9kZTEtPmxvZ19jb250ZW50KCkgPX4gL3N0YXRlbWVudDogU0VMRUNUICdj b25uZWN0MicvZzsKLW15ICRub2RlMl9vY2N1cnJlbmNlcyA9ICgpID0KLSAgJG5vZGUyLT5sb2df Y29udGVudCgpID1+IC9zdGF0ZW1lbnQ6IFNFTEVDVCAnY29ubmVjdDInL2c7Ci1teSAkbm9kZTNf b2NjdXJyZW5jZXMgPSAoKSA9Ci0gICRub2RlMy0+bG9nX2NvbnRlbnQoKSA9fiAvc3RhdGVtZW50 OiBTRUxFQ1QgJ2Nvbm5lY3QyJy9nOwotCi1teSAkdG90YWxfb2NjdXJyZW5jZXMgPQotICAkbm9k ZTFfb2NjdXJyZW5jZXMgKyAkbm9kZTJfb2NjdXJyZW5jZXMgKyAkbm9kZTNfb2NjdXJyZW5jZXM7 Ci0KLWNtcF9vaygkbm9kZTFfb2NjdXJyZW5jZXMsICc+JywgMSwKLQkicmVjZWl2ZWQgYXQgbGVh c3Qgb25lIGNvbm5lY3Rpb24gb24gbm9kZTEiKTsKLWNtcF9vaygkbm9kZTJfb2NjdXJyZW5jZXMs ICc+JywgMSwKLQkicmVjZWl2ZWQgYXQgbGVhc3Qgb25lIGNvbm5lY3Rpb24gb24gbm9kZTIiKTsK LWNtcF9vaygkbm9kZTNfb2NjdXJyZW5jZXMsICc+JywgMSwKLQkicmVjZWl2ZWQgYXQgbGVhc3Qg b25lIGNvbm5lY3Rpb24gb24gbm9kZTMiKTsKLWlzKCR0b3RhbF9vY2N1cnJlbmNlcywgNTAsICJy ZWNlaXZlZCA1MCBjb25uZWN0aW9ucyBhY3Jvc3MgYWxsIG5vZGVzIik7Ci0KLSRub2RlMS0+c3Rv cCgpOwotJG5vZGUyLT5zdG9wKCk7Ci0KLSMgbG9hZF9iYWxhbmNlX2hvc3RzPWRpc2FibGUgc2hv dWxkIGNvbnRpbnVlIHRyeWluZyBob3N0cyB1bnRpbCBpdCBmaW5kcyBhCi0jIHdvcmtpbmcgb25l LgotJG5vZGUzLT5jb25uZWN0X29rKAotCSJob3N0PSRob3N0bGlzdCBwb3J0PSRwb3J0bGlzdCBs b2FkX2JhbGFuY2VfaG9zdHM9ZGlzYWJsZSIsCi0JImxvYWRfYmFsYW5jZV9ob3N0cz1kaXNhYmxl IGNvbnRpbnVlcyB1bnRpbCBpdCBjb25uZWN0cyB0byB0aGUgYSB3b3JraW5nIG5vZGUiLAotCXNx bCA9PiAiU0VMRUNUICdjb25uZWN0MyciLAotCWxvZ19saWtlID0+IFtxci9zdGF0ZW1lbnQ6IFNF TEVDVCAnY29ubmVjdDMnL10pOwotCi0jIEFsc28gd2l0aCBsb2FkX2JhbGFuY2VfaG9zdHM9cmFu ZG9tIHdlIGNvbnRpbnVlIHRvIHRoZSBuZXh0IG5vZGVzIGlmIHByZXZpb3VzCi0jIG9uZXMgYXJl IGRvd24uIENvbm5lY3QgYSBmZXcgdGltZXMgdG8gbWFrZSBzdXJlIGl0J3Mgbm90IGp1c3QgbHVj a3kuCi1mb3JlYWNoIG15ICRpICgxIC4uIDUpCi17Ci0JJG5vZGUzLT5jb25uZWN0X29rKAotCQki aG9zdD0kaG9zdGxpc3QgcG9ydD0kcG9ydGxpc3QgbG9hZF9iYWxhbmNlX2hvc3RzPXJhbmRvbSIs Ci0JCSJsb2FkX2JhbGFuY2VfaG9zdHM9cmFuZG9tIGNvbnRpbnVlcyB1bnRpbCBpdCBjb25uZWN0 cyB0byB0aGUgYSB3b3JraW5nIG5vZGUiLAotCQlzcWwgPT4gIlNFTEVDVCAnY29ubmVjdDQnIiwK LQkJbG9nX2xpa2UgPT4gW3FyL3N0YXRlbWVudDogU0VMRUNUICdjb25uZWN0NCcvXSk7Ci19Ci0K LWRvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvdC8wMDRf bG9hZF9iYWxhbmNlX2Rucy5wbCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL3QvMDA0X2xvYWRfYmFs YW5jZV9kbnMucGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMGVjMWZmNTE3Li4w MDAwMDAwMDAwMAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS90LzAwNF9sb2FkX2JhbGFuY2Vf ZG5zLnBsCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAy MDIzLTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCi11c2Ugc3RyaWN0 OwotdXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwotdXNlIENvbmZpZzsKLXVzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKLXVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwotdXNlIFRl c3Q6Ok1vcmU7Ci0KLWlmICghJEVOVntQR19URVNUX0VYVFJBfSB8fCAkRU5We1BHX1RFU1RfRVhU UkF9ICF+IC9cYmxvYWRfYmFsYW5jZVxiLykKLXsKLQlwbGFuIHNraXBfYWxsID0+Ci0JICAnUG90 ZW50aWFsbHkgdW5zYWZlIHRlc3QgbG9hZF9iYWxhbmNlIG5vdCBlbmFibGVkIGluIFBHX1RFU1Rf RVhUUkEnOwotfQotCi0jIFRoaXMgdGVzdHMgbG9hZGJhbGFuY2luZyBiYXNlZCBvbiBhIEROUyBl bnRyeSB0aGF0IGNvbnRhaW5zIG11bHRpcGxlIHJlY29yZHMKLSMgZm9yIGRpZmZlcmVudCBJUHMu IFNpbmNlIHNldHRpbmcgdXAgYSBETlMgc2VydmVyIGlzIG1vcmUgZWZmb3J0IHRoYW4gd2UKLSMg Y29uc2lkZXIgcmVhc29uYWJsZSB0byBydW4gdGhpcyB0ZXN0LCB0aGlzIHNpdHVhdGlvbiBpcyBp bnN0ZWFkIGltaXRhdGVkIGJ5Ci0jIHVzaW5nIGEgaG9zdHMgZmlsZSB3aGVyZSBhIHNpbmdsZSBo b3N0bmFtZSBtYXBzIHRvIG11bHRpcGxlIGRpZmZlcmVudCBJUAotIyBhZGRyZXNzZXMuIFRoaXMg dGVzdCByZXF1aXJlcyB0aGUgYWRtaW5pc3RyYXRvciB0byBhZGQgdGhlIGZvbGxvd2luZyBsaW5l cyB0bwotIyB0aGUgaG9zdHMgZmlsZSAoaWYgd2UgZGV0ZWN0IHRoYXQgdGhpcyBoYXNuJ3QgaGFw cGVuZWQgd2Ugc2tpcCB0aGUgdGVzdCk6Ci0jCi0jIDEyNy4wLjAuMSBwZy1sb2FkYmFsYW5jZXRl c3QKLSMgMTI3LjAuMC4yIHBnLWxvYWRiYWxhbmNldGVzdAotIyAxMjcuMC4wLjMgcGctbG9hZGJh bGFuY2V0ZXN0Ci0jCi0jIFdpbmRvd3Mgb3IgTGludXggYXJlIHJlcXVpcmVkIHRvIHJ1biB0aGlz IHRlc3QgYmVjYXVzZSB0aGVzZSBPU2VzIGFsbG93Ci0jIGJpbmRpbmcgdG8gMTI3LjAuMC4yIGFu ZCAxMjcuMC4wLjMgYWRkcmVzc2VzIGJ5IGRlZmF1bHQsIGJ1dCBvdGhlciBPU2VzCi0jIGRvbid0 LiBXZSBuZWVkIHRvIGJpbmQgdG8gZGlmZmVyZW50IElQIGFkZHJlc3Nlcywgc28gdGhhdCB3ZSBj YW4gdXNlIHRoZXNlCi0jIGRpZmZlcmVudCBJUCBhZGRyZXNzZXMgaW4gdGhlIGhvc3RzIGZpbGUu Ci0jCi0jIFRoZSBob3N0cyBmaWxlIG5lZWRzIHRvIGJlIHByZXBhcmVkIGJlZm9yZSBydW5uaW5n IHRoaXMgdGVzdC4gV2UgZG9uJ3QgZG8gaXQKLSMgb24gdGhlIGZseSwgYmVjYXVzZSBpdCByZXF1 aXJlcyByb290IHBlcm1pc3Npb25zIHRvIGNoYW5nZSB0aGUgaG9zdHMgZmlsZS4gSW4KLSMgQ0kg d2Ugc2V0IHVwIHRoZSBwcmV2aW91c2x5IG1lbnRpb25lZCBydWxlcyBpbiB0aGUgaG9zdHMgZmls ZSwgc28gdGhhdCB0aGlzCi0jIGxvYWQgYmFsYW5jaW5nIG1ldGhvZCBpcyB0ZXN0ZWQuCi0KLSMg Q2x1c3RlciBzZXR1cCB3aGljaCBpcyBzaGFyZWQgZm9yIHRlc3RpbmcgYm90aCBsb2FkIGJhbGFu Y2luZyBtZXRob2RzCi1teSAkY2FuX2JpbmRfdG9fMTI3XzBfMF8yID0KLSAgJENvbmZpZ3tvc25h bWV9IGVxICdsaW51eCcgfHwgJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp3aW5kb3dzX29zOwot Ci0jIENoZWNrcyBmb3IgdGhlIHJlcXVpcmVtZW50cyBmb3IgdGVzdGluZyBsb2FkIGJhbGFuY2lu ZyBtZXRob2QgMgotaWYgKCEkY2FuX2JpbmRfdG9fMTI3XzBfMF8yKQotewotCXBsYW4gc2tpcF9h bGwgPT4gJ2xvYWRfYmFsYW5jZSB0ZXN0IG9ubHkgc3VwcG9ydGVkIG9uIExpbnV4IGFuZCBXaW5k b3dzJzsKLX0KLQotbXkgJGhvc3RzX3BhdGg7Ci1pZiAoJHdpbmRvd3Nfb3MpCi17Ci0JJGhvc3Rz X3BhdGggPSAnYzpcV2luZG93c1xTeXN0ZW0zMlxEcml2ZXJzXGV0Y1xob3N0cyc7Ci19Ci1lbHNl Ci17Ci0JJGhvc3RzX3BhdGggPSAnL2V0Yy9ob3N0cyc7Ci19Ci0KLW15ICRob3N0c19jb250ZW50 ID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnNsdXJwX2ZpbGUoJGhvc3RzX3BhdGgpOwotCi1t eSAkaG9zdHNfY291bnQgPSAoKSA9Ci0gICRob3N0c19jb250ZW50ID1+IC8xMjdcLjBcLjBcLlsx LTNdIHBnLWxvYWRiYWxhbmNldGVzdC9nOwotaWYgKCRob3N0c19jb3VudCAhPSAzKQotewotCSMg SG9zdCBmaWxlIGlzIG5vdCBwcmVwYXJlZCBmb3IgdGhpcyB0ZXN0Ci0JcGxhbiBza2lwX2FsbCA9 PiAiaG9zdHMgZmlsZSB3YXMgbm90IHByZXBhcmVkIGZvciBETlMgbG9hZCBiYWxhbmNlIHRlc3Qi OwotfQotCi0kUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlcjo6dXNlX3RjcCA9IDE7Ci0kUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlcjo6dGVzdF9wZ2hvc3QgPSAnMTI3LjAuMC4xJzsKLW15ICRwb3J0 ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlcjo6Z2V0X2ZyZWVfcG9ydCgpOwotbXkgJG5vZGUx ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlMScsIHBvcnQgPT4gJHBvcnQp OwotbXkgJG5vZGUyID0KLSAgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlMics IHBvcnQgPT4gJHBvcnQsIG93bl9ob3N0ID0+IDEpOwotbXkgJG5vZGUzID0KLSAgUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlMycsIHBvcnQgPT4gJHBvcnQsIG93bl9ob3N0ID0+ IDEpOwotCi0jIENyZWF0ZSBhIGRhdGEgZGlyZWN0b3J5IHdpdGggaW5pdGRiCi0kbm9kZTEtPmlu aXQoKTsKLSRub2RlMi0+aW5pdCgpOwotJG5vZGUzLT5pbml0KCk7Ci0KLSMgU3RhcnQgdGhlIFBv c3RncmVTUUwgc2VydmVyCi0kbm9kZTEtPnN0YXJ0KCk7Ci0kbm9kZTItPnN0YXJ0KCk7Ci0kbm9k ZTMtPnN0YXJ0KCk7Ci0KLSMgbG9hZF9iYWxhbmNlX2hvc3RzPWRpc2FibGUgc2hvdWxkIGFsd2F5 cyBjaG9vc2UgdGhlIGZpcnN0IG9uZS4KLSRub2RlMS0+Y29ubmVjdF9vaygKLQkiaG9zdD1wZy1s b2FkYmFsYW5jZXRlc3QgcG9ydD0kcG9ydCBsb2FkX2JhbGFuY2VfaG9zdHM9ZGlzYWJsZSIsCi0J ImxvYWRfYmFsYW5jZV9ob3N0cz1kaXNhYmxlIGNvbm5lY3RzIHRvIHRoZSBmaXJzdCBub2RlIiwK LQlzcWwgPT4gIlNFTEVDVCAnY29ubmVjdDEnIiwKLQlsb2dfbGlrZSA9PiBbcXIvc3RhdGVtZW50 OiBTRUxFQ1QgJ2Nvbm5lY3QxJy9dKTsKLQotCi0jIFN0YXRpc3RpY2FsbHkgdGhlIGZvbGxvd2lu ZyBsb29wIHdpdGggbG9hZF9iYWxhbmNlX2hvc3RzPXJhbmRvbSB3aWxsIGFsbW9zdAotIyBjZXJ0 YWlubHkgY29ubmVjdCBhdCBsZWFzdCBvbmNlIHRvIGVhY2ggb2YgdGhlIG5vZGVzLiBUaGUgY2hh bmNlIG9mIHRoYXQgbm90Ci0jIGhhcHBlbmluZyBpcyBzbyBzbWFsbCB0aGF0IGl0J3MgbmVnbGln aWJsZTogKDIvMyleNTAgPSAxLjU2ODMyODU1ZS05Ci1mb3JlYWNoIG15ICRpICgxIC4uIDUwKQot ewotCSRub2RlMS0+Y29ubmVjdF9vaygKLQkJImhvc3Q9cGctbG9hZGJhbGFuY2V0ZXN0IHBvcnQ9 JHBvcnQgbG9hZF9iYWxhbmNlX2hvc3RzPXJhbmRvbSIsCi0JCSJyZXBlYXRlZCBjb25uZWN0aW9u cyB3aXRoIHJhbmRvbSBsb2FkIGJhbGFuY2luZyIsCi0JCXNxbCA9PiAiU0VMRUNUICdjb25uZWN0 MiciKTsKLX0KLQotbXkgJG5vZGUxX29jY3VycmVuY2VzID0gKCkgPQotICAkbm9kZTEtPmxvZ19j b250ZW50KCkgPX4gL3N0YXRlbWVudDogU0VMRUNUICdjb25uZWN0MicvZzsKLW15ICRub2RlMl9v Y2N1cnJlbmNlcyA9ICgpID0KLSAgJG5vZGUyLT5sb2dfY29udGVudCgpID1+IC9zdGF0ZW1lbnQ6 IFNFTEVDVCAnY29ubmVjdDInL2c7Ci1teSAkbm9kZTNfb2NjdXJyZW5jZXMgPSAoKSA9Ci0gICRu b2RlMy0+bG9nX2NvbnRlbnQoKSA9fiAvc3RhdGVtZW50OiBTRUxFQ1QgJ2Nvbm5lY3QyJy9nOwot Ci1teSAkdG90YWxfb2NjdXJyZW5jZXMgPQotICAkbm9kZTFfb2NjdXJyZW5jZXMgKyAkbm9kZTJf b2NjdXJyZW5jZXMgKyAkbm9kZTNfb2NjdXJyZW5jZXM7Ci0KLWNtcF9vaygkbm9kZTFfb2NjdXJy ZW5jZXMsICc+JywgMSwKLQkicmVjZWl2ZWQgYXQgbGVhc3Qgb25lIGNvbm5lY3Rpb24gb24gbm9k ZTEiKTsKLWNtcF9vaygkbm9kZTJfb2NjdXJyZW5jZXMsICc+JywgMSwKLQkicmVjZWl2ZWQgYXQg bGVhc3Qgb25lIGNvbm5lY3Rpb24gb24gbm9kZTIiKTsKLWNtcF9vaygkbm9kZTNfb2NjdXJyZW5j ZXMsICc+JywgMSwKLQkicmVjZWl2ZWQgYXQgbGVhc3Qgb25lIGNvbm5lY3Rpb24gb24gbm9kZTMi KTsKLWlzKCR0b3RhbF9vY2N1cnJlbmNlcywgNTAsICJyZWNlaXZlZCA1MCBjb25uZWN0aW9ucyBh Y3Jvc3MgYWxsIG5vZGVzIik7Ci0KLSRub2RlMS0+c3RvcCgpOwotJG5vZGUyLT5zdG9wKCk7Ci0K LSMgbG9hZF9iYWxhbmNlX2hvc3RzPWRpc2FibGUgc2hvdWxkIGNvbnRpbnVlIHRyeWluZyBob3N0 cyB1bnRpbCBpdCBmaW5kcyBhCi0jIHdvcmtpbmcgb25lLgotJG5vZGUzLT5jb25uZWN0X29rKAot CSJob3N0PXBnLWxvYWRiYWxhbmNldGVzdCBwb3J0PSRwb3J0IGxvYWRfYmFsYW5jZV9ob3N0cz1k aXNhYmxlIiwKLQkibG9hZF9iYWxhbmNlX2hvc3RzPWRpc2FibGUgY29udGludWVzIHVudGlsIGl0 IGNvbm5lY3RzIHRvIHRoZSBhIHdvcmtpbmcgbm9kZSIsCi0Jc3FsID0+ICJTRUxFQ1QgJ2Nvbm5l Y3QzJyIsCi0JbG9nX2xpa2UgPT4gW3FyL3N0YXRlbWVudDogU0VMRUNUICdjb25uZWN0MycvXSk7 Ci0KLSMgQWxzbyB3aXRoIGxvYWRfYmFsYW5jZV9ob3N0cz1yYW5kb20gd2UgY29udGludWUgdG8g dGhlIG5leHQgbm9kZXMgaWYgcHJldmlvdXMKLSMgb25lcyBhcmUgZG93bi4gQ29ubmVjdCBhIGZl dyB0aW1lcyB0byBtYWtlIHN1cmUgaXQncyBub3QganVzdCBsdWNreS4KLWZvcmVhY2ggbXkgJGkg KDEgLi4gNSkKLXsKLQkkbm9kZTMtPmNvbm5lY3Rfb2soCi0JCSJob3N0PXBnLWxvYWRiYWxhbmNl dGVzdCBwb3J0PSRwb3J0IGxvYWRfYmFsYW5jZV9ob3N0cz1yYW5kb20iLAotCQkibG9hZF9iYWxh bmNlX2hvc3RzPXJhbmRvbSBjb250aW51ZXMgdW50aWwgaXQgY29ubmVjdHMgdG8gdGhlIGEgd29y a2luZyBub2RlIiwKLQkJc3FsID0+ICJTRUxFQ1QgJ2Nvbm5lY3Q0JyIsCi0JCWxvZ19saWtlID0+ IFtxci9zdGF0ZW1lbnQ6IFNFTEVDVCAnY29ubmVjdDQnL10pOwotfQotCi1kb25lX3Rlc3Rpbmco KTsKLS0gCjIuNTIuMAoK --baaef3372e886fe21dfd6cae3d53a904ae10bf2be12ea57b7aa5066ea5c7 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0004-WIP-pytest-Add-some-SSL-client-tests.patch Content-Type: text/x-patch; charset=utf-8; name=v9-0004-WIP-pytest-Add-some-SSL-client-tests.patch RnJvbSBjODJlMTg4ZTNlMzEyNzdjZWQyOWUxMDI1MzI2ODI2MzBmOTBkZmM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVHVlLCAxNiBEZWMgMjAyNSAwOTozMDo1NSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjkgNC81XSBXSVA6IHB5dGVzdDogQWRkIHNvbWUgU1NMIGNsaWVudCB0ZXN0cwoK VGhpcyBpcyBhIHNhbXBsZSBjbGllbnQtb25seSB0ZXN0IHN1aXRlLiBJdCB0ZXN0cyBzb21lIGhh bmRzaGFrZQpmYWlsdXJlcyBhZ2FpbnN0IGEgbW9jayBzZXJ2ZXIsIGFzIHdlbGwgYXMgYSBmdWxs IFNTTCBoYW5kc2hha2UgKyBlbXB0eQpxdWVyeSArIHJlc3BvbnNlLgoKcHljYS9jcnlwdG9ncmFw aHkgaXMgYWRkZWQgYXMgYSBuZXcgcGFja2FnZSBkZXBlbmRlbmN5LiBDZXJ0aWZpY2F0ZXMgZm9y CnRlc3RpbmcgYXJlIGdlbmVyYXRlZCBvbiB0aGUgZmx5LgoKVGhlIG1vY2sgZGVzaWduIGlzIHRo cmVhZGVkOiB0aGUgc2VydmVyIHNvY2tldCBpcyBsaXN0ZW5pbmcgb24gYQpiYWNrZ3JvdW5kIHRo cmVhZCwgYW5kIHRoZSB0ZXN0IHByb3ZpZGVzIHRoZSBzZXJ2ZXIgbG9naWMgdmlhIGEKY2FsbGJh Y2suIFRoZXJlIGlzIHNvbWUgYWRkaXRpb25hbCB3b3JrIHN0aWxsIG5lZWRlZCB0byBtYWtlIHRo aXMKcHJvZHVjdGlvbi1yZWFkeTsgc2VlIHRoZSBub3RlcyBmb3IgX1RDUFNlcnZlci5iYWNrZ3Jv dW5kKCkuIChDdXJyZW50bHksCmFuIGV4Y2VwdGlvbiBpbiB0aGUgd3JvbmcgcGxhY2UgY291bGQg cmVzdWx0IGluIGEgaGFuZy11bnRpbC10aW1lb3V0CnJhdGhlciB0aGFuIGFuIGltbWVkaWF0ZSBm YWlsdXJlLikKClRPRE9zOgotIGxvY2FsX3NlcnZlciBhbmQgdGNwX3NlcnZlcl9jbGFzcyBhcmUg bmVhcmx5IGlkZW50aWNhbCBhbmQgc2hvdWxkCiAgc2hhcmUgY29kZS4KLSBmaXggZXhjZXB0aW9u LXJlbGF0ZWQgdGltZW91dHMgZm9yIC5iYWNrZ3JvdW5kKCkKLSBmaWd1cmUgb3V0IHRoZSBwcm9w ZXIgdXNlIG9mICJzZXNzaW9uIiB2cyAibW9kdWxlIiBzY29wZQotIGVuc3VyZSB0aGF0IHBxLmxp YnBxIHVud2luZHMgKHRvIGNsb3NlIGNvbm5lY3Rpb25zKSBiZWZvcmUgdGNwX3NlcnZlcjsKICBz ZWUgY29tbWVudCBpbiB0ZXN0X3NlcnZlcl93aXRoX3NzbF9kaXNhYmxlZCgpCi0tLQogLmNpcnJ1 cy50YXNrcy55bWwgICAgICAgICAgICAgICB8ICAgMiArCiBweXByb2plY3QudG9tbCAgICAgICAg ICAgICAgICAgIHwgICA4ICsKIHNyYy90ZXN0L3NzbC9NYWtlZmlsZSAgICAgICAgICAgfCAgIDIg Kwogc3JjL3Rlc3Qvc3NsL21lc29uLmJ1aWxkICAgICAgICB8ICAgNiArCiBzcmMvdGVzdC9zc2wv cHl0L2NvbmZ0ZXN0LnB5ICAgIHwgMTI4ICsrKysrKysrKysrKysrKwogc3JjL3Rlc3Qvc3NsL3B5 dC90ZXN0X2NsaWVudC5weSB8IDI3OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog NiBmaWxlcyBjaGFuZ2VkLCA0MjQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L3NzbC9weXQvY29uZnRlc3QucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9z c2wvcHl0L3Rlc3RfY2xpZW50LnB5CgpkaWZmIC0tZ2l0IGEvLmNpcnJ1cy50YXNrcy55bWwgYi8u Y2lycnVzLnRhc2tzLnltbAppbmRleCAxYjBkZWFlOGQ4Ny4uMTdmZDdlMGM4YzMgMTAwNjQ0Ci0t LSBhLy5jaXJydXMudGFza3MueW1sCisrKyBiLy5jaXJydXMudGFza3MueW1sCkBAIC02NDUsNiAr NjQ1LDcgQEAgdGFzazoKICAgICBDSVJSVVNfV09SS0lOR19ESVI6ICR7SE9NRX0vcGdzcWwvCiAg ICAgQ0NBQ0hFX0RJUjogJHtIT01FfS9jY2FjaGUKICAgICBNQUNQT1JUU19DQUNIRTogJHtIT01F fS9tYWNwb3J0cy1jYWNoZQorICAgIFBZVEVTVF9ERUJVR19URU1QUk9PVDogL3RtcCAgIyBkZWZh dWx0IGlzIHRvbyBsb25nIGZvciBVTklYIHNvY2tldHMgb24gTWFjCiAKICAgICBNRVNPTl9GRUFU VVJFUzogPi0KICAgICAgIC1EYm9uam91cj1lbmFibGVkCkBAIC02NjUsNiArNjY2LDcgQEAgdGFz azoKICAgICAgIHA1LjM0LWlvLXR0eQogICAgICAgcDUuMzQtaXBjLXJ1bgogICAgICAgcHl0aG9u MzEyCisgICAgICBweTMxMi1jcnlwdG9ncmFwaHkKICAgICAgIHB5MzEyLXBhY2thZ2luZwogICAg ICAgcHkzMTItcHl0ZXN0CiAgICAgICB0Y2wKZGlmZiAtLWdpdCBhL3B5cHJvamVjdC50b21sIGIv cHlwcm9qZWN0LnRvbWwKaW5kZXggNDYyOGQyMjc0ZTAuLjAwYzhhZTg4NTgzIDEwMDY0NAotLS0g YS9weXByb2plY3QudG9tbAorKysgYi9weXByb2plY3QudG9tbApAQCAtMTIsNiArMTIsMTQgQEAg ZGVwZW5kZW5jaWVzID0gWwogICAgICMgQW55IG90aGVyIGRlcGVuZGVuY2llcyBhcmUgZWZmZWN0 aXZlbHkgb3B0aW9uYWwgKGFkZGVkIGJlbG93KS4gV2UgaW1wb3J0CiAgICAgIyB0aGVzZSBsaWJy YXJpZXMgdXNpbmcgcHl0ZXN0LmltcG9ydG9yc2tpcCgpLiBTbyB0ZXN0cyB3aWxsIGJlIHNraXBw ZWQgaWYKICAgICAjIHRoZXkgYXJlIG5vdCBhdmFpbGFibGUuCisKKyAgICAjIE5vdGVzIG9uIHRo ZSBjcnlwdG9ncmFwaHkgcGFja2FnZToKKyAgICAjIC0gMy4zLjIgaXMgc2hpcHBlZCBvbiBEZWJp YW4gYnVsbHNleWUuCisgICAgIyAtIDMuNC54IGRyb3BzIHN1cHBvcnQgZm9yIFB5dGhvbiAyLCBt YWtpbmcgaXQgYSB2ZXJzaW9uIG9mIG5vdGUgZm9yIG9sZGVyIExUUworICAgICMgICBkaXN0cm9z LgorICAgICMgLSAzNS54IHN3aXRjaGVkIHZlcnNpb25pbmcgc2NoZW1lcyBhbmQgbW92ZWQgdG8g UnVzdCBwYXJzaW5nLgorICAgICMgLSA0MC54IGlzIHRoZSBsYXN0IHZlcnNpb24gc3VwcG9ydGlu ZyBQeXRob24gMy42LgorICAgICJjcnlwdG9ncmFwaHkgPj0gMy4zLjIiLAogXQogCiBbdG9vbC5w eXRlc3QuaW5pX29wdGlvbnNdCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zc2wvTWFrZWZpbGUgYi9z cmMvdGVzdC9zc2wvTWFrZWZpbGUKaW5kZXggYWEwNjI5NDVmYjkuLjI4NzcyOWFkOWZiIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9zc2wvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3Qvc3NsL01ha2VmaWxl CkBAIC0zMCw2ICszMCw4IEBAIGNsZWFuIGRpc3RjbGVhbjoKICMgRG9lc24ndCBkZXBlbmQgb24g c3NsZmlsZXMgYmVjYXVzZSB3ZSBkb24ndCByZWJ1aWxkIHRoZW0gYnkgZGVmYXVsdAogY2hlY2s6 CiAJJChwcm92ZV9jaGVjaykKKwkjIFhYWCB0aGVzZSBzdWl0ZXMgc2hvdWxkIHJ1biBpbmRlcGVu ZGVudGx5LCBub3Qgc2VyaWFsbHkKKwkkKHB5dGVzdF9jaGVjaykKIAogaW5zdGFsbGNoZWNrOgog CSQocHJvdmVfaW5zdGFsbGNoZWNrKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3NsL21lc29uLmJ1 aWxkIGIvc3JjL3Rlc3Qvc3NsL21lc29uLmJ1aWxkCmluZGV4IDllNWJkYmI2MTM2Li42ZWMyNzRk ODE2NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3NsL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0 L3NzbC9tZXNvbi5idWlsZApAQCAtMTUsNCArMTUsMTAgQEAgdGVzdHMgKz0gewogICAgICAgJ3Qv MDAzX3NzbGluZm8ucGwnLAogICAgIF0sCiAgIH0sCisgICdweXRlc3QnOiB7CisgICAgJ3Rlc3Rz JzogWworICAgICAgJ3B5dC90ZXN0X2NsaWVudC5weScsCisgICAgICAncHl0L3Rlc3Rfc2VydmVy LnB5JywKKyAgICBdLAorICB9LAogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3NsL3B5dC9jb25m dGVzdC5weSBiL3NyYy90ZXN0L3NzbC9weXQvY29uZnRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg3MGY3MzhhYzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3Qvc3NsL3B5dC9jb25mdGVzdC5weQpAQCAtMCwwICsxLDEyOCBAQAorIyBDb3B5cmlnaHQg KGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK2ltcG9ydCBk YXRldGltZQoraW1wb3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitm cm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCisKK2ltcG9ydCBweXRlc3QKKworCitA cHl0ZXN0LmZpeHR1cmUoc2NvcGU9InNlc3Npb24iKQorZGVmIGNyeXB0b2dyYXBoeSgpOgorICAg IHJldHVybiBweXRlc3QuaW1wb3J0b3Jza2lwKCJjcnlwdG9ncmFwaHkiLCAiMy4zLjIiKQorCisK K0NlcnQgPSBuYW1lZHR1cGxlKCJDZXJ0IiwgImNlcnQsIGNlcnRwYXRoLCBrZXksIGtleXBhdGgi KQorCisKK0BweXRlc3QuZml4dHVyZShzY29wZT0ic2Vzc2lvbiIpCitkZWYgY2VydHMoY3J5cHRv Z3JhcGh5LCB0bXBfcGF0aF9mYWN0b3J5KToKKyAgICAiIiIKKyAgICBDYWNoZXMgY29tbW9ubHkg dXNlZCBjZXJ0aWZpY2F0ZXMgYXQgdGhlIHNlc3Npb24gbGV2ZWwsIGFuZCBwcm92aWRlcyBhIHdh eQorICAgIHRvIGNyZWF0ZSBuZXcgb25lcy4KKworICAgIC0gY2VydHMuY2E6IHRoZSByb290IENB IGNlcnRpZmljYXRlCisKKyAgICAtIGNlcnRzLnNlcnZlcjogdGhlICJzdGFuZGFyZCIgc2VydmVy IGNlcnRmaWNhdGUsIHNpZ25lZCBieSBjZXJ0cy5jYQorCisgICAgLSBjZXJ0cy5zZXJ2ZXJfaG9z dDogdGhlIGhvc3RuYW1lIG9mIHRoZSBjZXJ0cy5zZXJ2ZXIgY2VydGlmaWNhdGUKKworICAgIC0g Y2VydHMubmV3KCk6IGNyZWF0ZXMgYSBjdXN0b20gY2VydGlmaWNhdGUsIHNpZ25lZCBieSBjZXJ0 cy5jYQorICAgICIiIgorCisgICAgZnJvbSBjcnlwdG9ncmFwaHkgaW1wb3J0IHg1MDkKKyAgICBm cm9tIGNyeXB0b2dyYXBoeS5oYXptYXQucHJpbWl0aXZlcyBpbXBvcnQgaGFzaGVzLCBzZXJpYWxp emF0aW9uCisgICAgZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LnByaW1pdGl2ZXMuYXN5bW1ldHJp YyBpbXBvcnQgcnNhCisgICAgZnJvbSBjcnlwdG9ncmFwaHkueDUwOS5vaWQgaW1wb3J0IE5hbWVP SUQKKworICAgIHRtcGRpciA9IHRtcF9wYXRoX2ZhY3RvcnkubWt0ZW1wKCJ0ZXN0LWNlcnRzIikK KworICAgIGNsYXNzIF9DZXJ0czoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAg ICAgICAgc2VsZi5jYSA9IHNlbGYubmV3KAorICAgICAgICAgICAgICAgIHg1MDkuTmFtZSgKKyAg ICAgICAgICAgICAgICAgICAgW3g1MDkuTmFtZUF0dHJpYnV0ZShOYW1lT0lELkNPTU1PTl9OQU1F LCAiUEcgcHl0ZXN0IENBIildLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAg Y2E9VHJ1ZSwKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaG9zdCA9 ICJleGFtcGxlLm9yZyIKKyAgICAgICAgICAgIHNlbGYuc2VydmVyID0gc2VsZi5uZXcoCisgICAg ICAgICAgICAgICAgeDUwOS5OYW1lKAorICAgICAgICAgICAgICAgICAgICBbeDUwOS5OYW1lQXR0 cmlidXRlKE5hbWVPSUQuQ09NTU9OX05BTUUsIHNlbGYuc2VydmVyX2hvc3QpXSwKKyAgICAgICAg ICAgICAgICApCisgICAgICAgICAgICApCisKKyAgICAgICAgZGVmIG5ldyhzZWxmLCBzdWJqZWN0 OiB4NTA5Lk5hbWUsICosIGNhPUZhbHNlKSAtPiBDZXJ0OgorICAgICAgICAgICAgIiIiCisgICAg ICAgICAgICBDcmVhdGVzIGFuZCBzaWducyBhIG5ldyBDZXJ0IHdpdGggdGhlIGdpdmVuIHN1Ympl Y3QgbmFtZS4gSWYgY2EgaXMKKyAgICAgICAgICAgIFRydWUsIHRoZSBjZXJ0aWZpY2F0ZSB3aWxs IGJlIHNlbGYtc2lnbmVkOyBvdGhlcndpc2UgdGhlIGNlcnRpZmljYXRlCisgICAgICAgICAgICBp cyBzaWduZWQgYnkgc2VsZi5jYS4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAga2V5ID0g cnNhLmdlbmVyYXRlX3ByaXZhdGVfa2V5KAorICAgICAgICAgICAgICAgIHB1YmxpY19leHBvbmVu dD02NTUzNywKKyAgICAgICAgICAgICAgICBrZXlfc2l6ZT0yMDQ4LAorICAgICAgICAgICAgKQor CisgICAgICAgICAgICBidWlsZGVyID0geDUwOS5DZXJ0aWZpY2F0ZUJ1aWxkZXIoKQorICAgICAg ICAgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KGRhdGV0aW1lLnRpbWV6b25lLnV0YykK KworICAgICAgICAgICAgYnVpbGRlciA9ICgKKyAgICAgICAgICAgICAgICBidWlsZGVyLnN1Ympl Y3RfbmFtZShzdWJqZWN0KQorICAgICAgICAgICAgICAgIC5wdWJsaWNfa2V5KGtleS5wdWJsaWNf a2V5KCkpCisgICAgICAgICAgICAgICAgLnNlcmlhbF9udW1iZXIoeDUwOS5yYW5kb21fc2VyaWFs X251bWJlcigpKQorICAgICAgICAgICAgICAgIC5ub3RfdmFsaWRfYmVmb3JlKG5vdykKKyAgICAg ICAgICAgICAgICAubm90X3ZhbGlkX2FmdGVyKG5vdyArIGRhdGV0aW1lLnRpbWVkZWx0YShob3Vy cz0xKSkKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgaWYgY2E6CisgICAgICAgICAgICAg ICAgYnVpbGRlciA9IGJ1aWxkZXIuaXNzdWVyX25hbWUoc3ViamVjdCkKKyAgICAgICAgICAgIGVs c2U6CisgICAgICAgICAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIuaXNzdWVyX25hbWUoc2VsZi5j YS5jZXJ0LnN1YmplY3QpCisKKyAgICAgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLmFkZF9leHRl bnNpb24oCisgICAgICAgICAgICAgICAgeDUwOS5CYXNpY0NvbnN0cmFpbnRzKGNhPWNhLCBwYXRo X2xlbmd0aD1Ob25lKSwKKyAgICAgICAgICAgICAgICBjcml0aWNhbD1UcnVlLAorICAgICAgICAg ICAgKQorCisgICAgICAgICAgICBjZXJ0ID0gYnVpbGRlci5zaWduKAorICAgICAgICAgICAgICAg IHByaXZhdGVfa2V5PWtleSBpZiBjYSBlbHNlIHNlbGYuY2Eua2V5LAorICAgICAgICAgICAgICAg IGFsZ29yaXRobT1oYXNoZXMuU0hBMjU2KCksCisgICAgICAgICAgICApCisKKyAgICAgICAgICAg ICMgRHVtcCB0aGUgY2VydGlmaWNhdGUgYW5kIGtleSB0byBmaWxlLgorICAgICAgICAgICAga2V5 cGF0aCA9IHNlbGYuX3RvZmlsZSgKKyAgICAgICAgICAgICAgICBrZXkucHJpdmF0ZV9ieXRlcygK KyAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbi5FbmNvZGluZy5QRU0sCisgICAgICAg ICAgICAgICAgICAgIHNlcmlhbGl6YXRpb24uUHJpdmF0ZUZvcm1hdC5QS0NTOCwKKyAgICAgICAg ICAgICAgICAgICAgc2VyaWFsaXphdGlvbi5Ob0VuY3J5cHRpb24oKSwKKyAgICAgICAgICAgICAg ICApLAorICAgICAgICAgICAgICAgIHN1ZmZpeD0iLmtleSIsCisgICAgICAgICAgICApCisgICAg ICAgICAgICBjZXJ0cGF0aCA9IHNlbGYuX3RvZmlsZSgKKyAgICAgICAgICAgICAgICBjZXJ0LnB1 YmxpY19ieXRlcyhzZXJpYWxpemF0aW9uLkVuY29kaW5nLlBFTSksCisgICAgICAgICAgICAgICAg c3VmZml4PSItY2EuY3J0IiBpZiBjYSBlbHNlICIuY3J0IiwKKyAgICAgICAgICAgICkKKworICAg ICAgICAgICAgcmV0dXJuIENlcnQoCisgICAgICAgICAgICAgICAgY2VydD1jZXJ0LAorICAgICAg ICAgICAgICAgIGNlcnRwYXRoPWNlcnRwYXRoLAorICAgICAgICAgICAgICAgIGtleT1rZXksCisg ICAgICAgICAgICAgICAga2V5cGF0aD1rZXlwYXRoLAorICAgICAgICAgICAgKQorCisgICAgICAg IGRlZiBfdG9maWxlKHNlbGYsIGRhdGE6IGJ5dGVzLCAqLCBzdWZmaXgpIC0+IHN0cjoKKyAgICAg ICAgICAgICIiIgorICAgICAgICAgICAgRHVtcHMgZGF0YSB0byBhIGZpbGUgb24gZGlzayB3aXRo IHRoZSByZXF1ZXN0ZWQgc3VmZml4IGFuZCByZXR1cm5zCisgICAgICAgICAgICB0aGUgcGF0aC4g VGhlIGZpbGUgaXMgbG9jYXRlZCBzb21ld2hlcmUgaW4gcHl0ZXN0J3MgdGVtcG9yYXJ5CisgICAg ICAgICAgICBkaXJlY3Rvcnkgcm9vdC4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgZiA9 IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShzdWZmaXg9c3VmZml4LCBkaXI9dG1wZGlyLCBk ZWxldGU9RmFsc2UpCisgICAgICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICAgICAgZi53cml0 ZShkYXRhKQorCisgICAgICAgICAgICByZXR1cm4gZi5uYW1lCisKKyAgICByZXR1cm4gX0NlcnRz KCkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3NzbC9weXQvdGVzdF9jbGllbnQucHkgYi9zcmMvdGVz dC9zc2wvcHl0L3Rlc3RfY2xpZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi41NTZiYWQzM2JmOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3NzbC9weXQv dGVzdF9jbGllbnQucHkKQEAgLTAsMCArMSwyNzggQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitpbXBvcnQgY29udGV4dGxpYgor aW1wb3J0IGN0eXBlcworaW1wb3J0IHNvY2tldAoraW1wb3J0IHNzbAoraW1wb3J0IHN0cnVjdAor aW1wb3J0IHRocmVhZGluZworZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlCisKK2ltcG9ydCBw eXRlc3QKKworaW1wb3J0IHB5cGcKK2Zyb20gbGlicHEgaW1wb3J0IExpYnBxRXJyb3IsIEV4ZWNT dGF0dXMKKworIyBUaGlzIHN1aXRlIG9wZW5zIHVwIGxvY2FsIFRDUCBwb3J0cyBhbmQgaXMgaGlk ZGVuIGJlaGluZCBQR19URVNUX0VYVFJBPXNzbC4KK3B5dGVzdG1hcmsgPSBweXBnLnJlcXVpcmVf dGVzdF9leHRyYXMoInNzbCIpCisKKworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJzZXNzaW9uIiwg YXV0b3VzZT1UcnVlKQorZGVmIHNraXBfaWZfbm9fc3NsX3N1cHBvcnQobGlicHFfaGFuZGxlKToK KyAgICAiIiJTa2lwcyB0ZXN0cyBpZiBTU0wgc3VwcG9ydCBpcyBub3QgY29uZmlndXJlZC4iIiIK KworICAgICMgRGVjbGFyZSBQUXNzbEF0dHJpYnV0ZSgpLgorICAgIFBRc3NsQXR0cmlidXRlID0g bGlicHFfaGFuZGxlLlBRc3NsQXR0cmlidXRlCisgICAgUFFzc2xBdHRyaWJ1dGUucmVzdHlwZSA9 IGN0eXBlcy5jX2NoYXJfcAorICAgIFBRc3NsQXR0cmlidXRlLmFyZ3R5cGVzID0gW2N0eXBlcy5j X3ZvaWRfcCwgY3R5cGVzLmNfY2hhcl9wXQorCisgICAgaWYgbm90IFBRc3NsQXR0cmlidXRlKE5v bmUsIGIibGlicmFyeSIpOgorICAgICAgICBweXRlc3Quc2tpcCgicmVxdWlyZXMgU1NMIHN1cHBv cnQgdG8gYmUgY29uZmlndXJlZCIpCisKKworIworIyBUZXN0IEZpeHR1cmVzCisjCisKKworQHB5 dGVzdC5maXh0dXJlCitkZWYgdGNwX3NlcnZlcl9jbGFzcyhyZW1haW5pbmdfdGltZW91dCk6Cisg ICAgIiIiCisgICAgTWV0YWZpeHR1cmUgdG8gY29tYmluZSByZWxhdGVkIGxvZ2ljIGZvciB0Y3Bf c2VydmVyIGFuZCBzc2xfc2VydmVyLgorCisgICAgVE9ETzogY29tYmluZSB3aXRoIHRlc3RfbGli cHEubG9jYWxfc2VydmVyCisgICAgIiIiCisKKyAgICBjbGFzcyBfVENQU2VydmVyKGNvbnRleHRs aWIuRXhpdFN0YWNrKToKKyAgICAgICAgIiIiCisgICAgICAgIEltcGxlbWVudGF0aW9uIGNsYXNz IGZvciB0Y3Bfc2VydmVyLiBTZWUgLmJhY2tncm91bmQoKSBmb3IgdGhlIHByaW1hcnkKKyAgICAg ICAgZW50cnkgcG9pbnQgZm9yIHRlc3RzLiBQb3N0Z3JlcyBjbGllbnRzIG1heSBjb25uZWN0IHRv IHRoaXMgc2VydmVyIHZpYQorICAgICAgICAqKnRjcF9zZXJ2ZXIuY29ubmluZm8uCisKKyAgICAg ICAgX1RDUFNlcnZlciBkZXJpdmVzIGZyb20gY29udGV4dGxpYi5FeGl0U3RhY2sgdG8gcHJvdmlk ZSBlYXN5IGNsZWFudXAgb2YKKyAgICAgICAgYXNzb2NpYXRlZCByZXNvdXJjZXM7IHNlZSB0aGUg ZG9jdW1lbnRhdGlvbiBmb3IgdGhhdCBjbGFzcyBmb3IgYSBmdWxsCisgICAgICAgIGV4cGxhbmF0 aW9uLgorICAgICAgICAiIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAg ICAgICBzdXBlcigpLl9faW5pdF9fKCkKKworICAgICAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9u ZQorICAgICAgICAgICAgc2VsZi5fdGhyZWFkX2V4YyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYu X2xpc3RlbmVyID0gc2VsZi5lbnRlcl9jb250ZXh0KAorICAgICAgICAgICAgICAgIHNvY2tldC5z b2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSksCisgICAgICAgICAgICAp CisKKyAgICAgICAgICAgIHNlbGYuX2JpbmRfYW5kX2xpc3RlbigpCisgICAgICAgICAgICBzb2Nr bmFtZSA9IHNlbGYuX2xpc3RlbmVyLmdldHNvY2tuYW1lKCkKKyAgICAgICAgICAgIHNlbGYuY29u bmluZm8gPSBkaWN0KAorICAgICAgICAgICAgICAgIGhvc3RhZGRyPXNvY2tuYW1lWzBdLAorICAg ICAgICAgICAgICAgIHBvcnQ9c29ja25hbWVbMV0sCisgICAgICAgICAgICApCisKKyAgICAgICAg ZGVmIF9iaW5kX2FuZF9saXN0ZW4oc2VsZik6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAg IERvZXMgdGhlIGFjdHVhbCB3b3JrIG9mIGJpbmRpbmcgdGhlIHNvY2tldCBhbmQgbGlzdGVuaW5n IGZvcgorICAgICAgICAgICAgY29ubmVjdGlvbnMuCisKKyAgICAgICAgICAgIFRoZSBsaXN0ZW4g YmFja2xvZyBpcyBjdXJyZW50bHkgaGFyZGNvZGVkIHRvIG9uZS4KKyAgICAgICAgICAgICIiIgor ICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuYmluZCgoIjEyNy4wLjAuMSIsIDApKQorICAgICAg ICAgICAgc2VsZi5fbGlzdGVuZXIubGlzdGVuKDEpCisKKyAgICAgICAgZGVmIGJhY2tncm91bmQo c2VsZiwgZm46IENhbGxhYmxlW1tzb2NrZXQuc29ja2V0XSwgTm9uZV0pIC0+IE5vbmU6CisgICAg ICAgICAgICAiIiIKKyAgICAgICAgICAgIEFjY2VwdHMgYSBjbGllbnQgY29ubmVjdGlvbiBvbiBh IGJhY2tncm91bmQgdGhyZWFkIGFuZCBwYXNzZXMgaXQgdG8KKyAgICAgICAgICAgIHRoZSBwcm92 aWRlZCBjYWxsYmFjay4gQW55IGV4Y2VwdGlvbnMgcmFpc2VkIGZyb20gdGhlIGNhbGxiYWNrIHdp bGwKKyAgICAgICAgICAgIGJlIHJlLXJhaXNlZCBvbiB0aGUgbWFpbiB0aHJlYWQgZHVyaW5nIGZp eHR1cmUgdGVhcmRvd24uCisKKyAgICAgICAgICAgIEJsb2NraW5nIG9wZXJhdGlvbnMgb24gdGhl IGNvbm5lY3RlZCBzb2NrZXQgZGVmYXVsdCB0byB1c2luZyB0aGUKKyAgICAgICAgICAgIHJlbWFp bmluZ190aW1lb3V0KCksIHRob3VnaCB0aGlzIGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSB0ZXN0IHZp YSB0aGUKKyAgICAgICAgICAgIHNvY2tldCdzIC5zZXR0aW1lb3V0KCkuCisgICAgICAgICAgICAi IiIKKworICAgICAgICAgICAgZGVmIF9iZygpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAg ICAgICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuc2V0dGltZW91dChyZW1haW5pbmdfdGltZW91 dCgpKQorICAgICAgICAgICAgICAgICAgICBzb2NrLCBfID0gc2VsZi5fbGlzdGVuZXIuYWNjZXB0 KCkKKworICAgICAgICAgICAgICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICAgICAgICAg ICAgICBzb2NrLnNldHRpbWVvdXQocmVtYWluaW5nX3RpbWVvdXQoKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgIGZuKHNvY2spCisKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz IGU6CisgICAgICAgICAgICAgICAgICAgICMgU2F2ZSB0aGUgZXhjZXB0aW9uIGZvciByZS1yYWlz aW5nIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGhyZWFk X2V4YyA9IGUKKworICAgICAgICAgICAgIyBUT0RPOiByYXRoZXIgdGhhbiB1c2luZyBjYWxsYmFj aygpLCBjb25zaWRlciBleHBsaWNpdGx5IHNpZ25hbGluZworICAgICAgICAgICAgIyB0aGUgZm4o KSBpbXBsZW1lbnRhdGlvbiB0byBzdG9wIGVhcmx5IGlmIHdlIGdldCBhbiBleGNlcHRpb24uCisg ICAgICAgICAgICAjIE90aGVyd2lzZSB3ZSdsbCBoYW5nIHVudGlsIHRoZSBlbmQgb2YgdGhlIHRp bWVvdXQuCisgICAgICAgICAgICBzZWxmLl90aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdl dD1fYmcpCisgICAgICAgICAgICBzZWxmLmNhbGxiYWNrKHNlbGYuX2pvaW4pCisKKyAgICAgICAg ICAgIHNlbGYuX3RocmVhZC5zdGFydCgpCisKKyAgICAgICAgZGVmIF9qb2luKHNlbGYpOgorICAg ICAgICAgICAgIiIiCisgICAgICAgICAgICBXYWl0cyBmb3IgdGhlIGJhY2tncm91bmQgdGhyZWFk IHRvIGZpbmlzaCBhbmQgcmFpc2VzIGFueSB0aHJvd24KKyAgICAgICAgICAgIGV4Y2VwdGlvbi4g VGhpcyBpcyBjYWxsZWQgZHVyaW5nIGZpeHR1cmUgdGVhcmRvd24uCisgICAgICAgICAgICAiIiIK KyAgICAgICAgICAgICMgR2l2ZSBhIGxpdHRsZSBiaXQgb2Ygd2lnZ2xlIHJvb20gb24gdGhlIGpv aW4gdGltZW91dCwgc2luY2Ugd2UncmUKKyAgICAgICAgICAgICMgcmFjaW5nIGFnYWluc3QgdGhl IHRlc3QncyBvd24gdXNlIG9mIHJlbWFpbmluZ190aW1lb3V0KCkuIChJdCdzCisgICAgICAgICAg ICAjIHByZWZlcmFibGUgdG8gbGV0IHRlc3RzIHJlcG9ydCB0aW1lb3V0czsgdGhlIHN0YWNrIHRy YWNlcyB3aWxsCisgICAgICAgICAgICAjIGhlbHAgd2l0aCBkZWJ1Z2dpbmcuKQorICAgICAgICAg ICAgc2VsZi5fdGhyZWFkLmpvaW4ocmVtYWluaW5nX3RpbWVvdXQoKSArIDEpCisgICAgICAgICAg ICBpZiBzZWxmLl90aHJlYWQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICByYWlzZSBUaW1l b3V0RXJyb3IoImJhY2tncm91bmQgdGhyZWFkIGlzIHN0aWxsIHJ1bm5pbmcgYWZ0ZXIgdGltZW91 dCIpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX3RocmVhZF9leGMgaXMgbm90IE5vbmU6CisgICAg ICAgICAgICAgICAgcmFpc2Ugc2VsZi5fdGhyZWFkX2V4YworCisgICAgcmV0dXJuIF9UQ1BTZXJ2 ZXIKKworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiB0Y3Bfc2VydmVyKHRjcF9zZXJ2ZXJfY2xhc3Mp OgorICAgICIiIgorICAgIE9wZW5zIHVwIGEgbG9jYWwgVENQIHNvY2tldCBmb3IgbW9ja2luZyBh IFBvc3RncmVzIHNlcnZlciBvbiBhIGJhY2tncm91bmQKKyAgICB0aHJlYWQuIFNlZSB0aGUgX1RD UFNlcnZlciBBUEkgZm9yIHVzYWdlLgorICAgICIiIgorICAgIHdpdGggdGNwX3NlcnZlcl9jbGFz cygpIGFzIHM6CisgICAgICAgIHlpZWxkIHMKKworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiBzc2xf c2VydmVyKHRjcF9zZXJ2ZXJfY2xhc3MsIGNlcnRzKToKKyAgICAiIiIKKyAgICBMaWtlIHRjcF9z ZXJ2ZXIsIGJ1dCB3aXRoIGFuIGFkZGl0aW9uYWwgLmJhY2tncm91bmRfc3NsKCkgbWV0aG9kIHdo aWNoIHdpbGwKKyAgICBwZXJmb3JtIGEgU1NMUmVxdWVzdCBoYW5kc2hha2Ugb24gdGhlIHNvY2tl dCBiZWZvcmUgaGFuZGluZyB0aGUgY29ubmVjdGlvbgorICAgIHRvIHRoZSB0ZXN0IGNhbGxiYWNr LgorCisgICAgVGhpcyBzZXJ2ZXIgdXNlcyBjZXJ0cy5zZXJ2ZXIgYXMgaXRzIGlkZW50aXR5Lgor ICAgICIiIgorCisgICAgY2xhc3MgX1NTTFNlcnZlcih0Y3Bfc2VydmVyX2NsYXNzKToKKyAgICAg ICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisK KyAgICAgICAgICAgIHNlbGYuY29ubmluZm9bImhvc3QiXSA9IGNlcnRzLnNlcnZlcl9ob3N0CisK KyAgICAgICAgICAgIHNlbGYuX2N0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFNf U0VSVkVSKQorICAgICAgICAgICAgc2VsZi5fY3R4LmxvYWRfY2VydF9jaGFpbihjZXJ0cy5zZXJ2 ZXIuY2VydHBhdGgsIGNlcnRzLnNlcnZlci5rZXlwYXRoKQorCisgICAgICAgIGRlZiBiYWNrZ3Jv dW5kX3NzbChzZWxmLCBmbjogQ2FsbGFibGVbW3NzbC5TU0xTb2NrZXRdLCBOb25lXSkgLT4gTm9u ZToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgSW52b2tlcyBhIHNlcnZlciBjYWxsYmFj ayBhcyB3aXRoIC5iYWNrZ3JvdW5kKCksIGJ1dCBhbiBTU0xSZXF1ZXN0CisgICAgICAgICAgICBo YW5kc2hha2UgaXMgcGVyZm9ybWVkIGZpcnN0LCBhbmQgdGhlIHNvY2tldCBwcm92aWRlZCB0byB0 aGUKKyAgICAgICAgICAgIGNhbGxiYWNrIGhhcyBiZWVuIHdyYXBwZWQgaW4gYW4gT3BlblNTTCBs YXllci4KKyAgICAgICAgICAgICIiIgorCisgICAgICAgICAgICBkZWYgaGFuZHNoYWtlKHM6IHNv Y2tldC5zb2NrZXQpOgorICAgICAgICAgICAgICAgIHBrdGxlbiA9IHN0cnVjdC51bnBhY2soIiFJ Iiwgcy5yZWN2KDQpKVswXQorCisgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgZ2V0IGFu IFNTTFJlcXVlc3QuCisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHN0cnVjdC51bnBhY2soIiFI SCIsIHMucmVjdig0KSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgdmVyc2lvbiA9PSAoMTIzNCwg NTY3OSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgcGt0bGVuID09IDgKKworICAgICAgICAgICAg ICAgICMgQWNjZXB0IHRoZSBTU0xSZXF1ZXN0LgorICAgICAgICAgICAgICAgIHMuc2VuZChiIlMi KQorCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl9jdHgud3JhcF9zb2NrZXQocywgc2VydmVy X3NpZGU9VHJ1ZSkgYXMgd3JhcHBlZDoKKyAgICAgICAgICAgICAgICAgICAgZm4od3JhcHBlZCkK KworICAgICAgICAgICAgc2VsZi5iYWNrZ3JvdW5kKGhhbmRzaGFrZSkKKworICAgIHdpdGggX1NT TFNlcnZlcigpIGFzIHM6CisgICAgICAgIHlpZWxkIHMKKworCisjCisjIFRlc3RzCisjCisKKwor QHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKCJzc2xtb2RlIiwgKCJyZXF1aXJlIiwgInZlcmlmeS1j YSIsICJ2ZXJpZnktZnVsbCIpKQorZGVmIHRlc3Rfc2VydmVyX3dpdGhfc3NsX2Rpc2FibGVkKGNv bm5lY3QsIHRjcF9zZXJ2ZXIsIGNlcnRzLCBzc2xtb2RlKToKKyAgICAiIiIKKyAgICBNYWtlIHN1 cmUgY2xpZW50IHJlZnVzZXMgdG8gdGFsayB0byBub24tU1NMIHNlcnZlcnMgd2l0aCBzdHJpY3Rl cgorICAgIHNzbG1vZGVzLgorICAgICIiIgorCisgICAgZGVmIHJlZnVzZV9zc2woczogc29ja2V0 LnNvY2tldCk6CisgICAgICAgIHBrdGxlbiA9IHN0cnVjdC51bnBhY2soIiFJIiwgcy5yZWN2KDQp KVswXQorCisgICAgICAgICMgTWFrZSBzdXJlIHdlIGdldCBhbiBTU0xSZXF1ZXN0LgorICAgICAg ICB2ZXJzaW9uID0gc3RydWN0LnVucGFjaygiIUhIIiwgcy5yZWN2KDQpKQorICAgICAgICBhc3Nl cnQgdmVyc2lvbiA9PSAoMTIzNCwgNTY3OSkKKyAgICAgICAgYXNzZXJ0IHBrdGxlbiA9PSA4CisK KyAgICAgICAgIyBSZWZ1c2UgdGhlIFNTTFJlcXVlc3QuCisgICAgICAgIHMuc2VuZChiIk4iKQor CisgICAgICAgICMgV2FpdCBmb3IgdGhlIGNsaWVudCB0byBjbG9zZSB0aGUgY29ubmVjdGlvbi4K KyAgICAgICAgYXNzZXJ0IG5vdCBzLnJlY3YoMSksICJjbGllbnQgc2VudCB1bmV4cGVjdGVkIGRh dGEiCisKKyAgICB0Y3Bfc2VydmVyLmJhY2tncm91bmQocmVmdXNlX3NzbCkKKworICAgIHdpdGgg cHl0ZXN0LnJhaXNlcyhMaWJwcUVycm9yLCBtYXRjaD0ic2VydmVyIGRvZXMgbm90IHN1cHBvcnQg U1NMIik6CisgICAgICAgIGNvbm5lY3QoCisgICAgICAgICAgICAqKnRjcF9zZXJ2ZXIuY29ubmlu Zm8sCisgICAgICAgICAgICBzc2xyb290Y2VydD1jZXJ0cy5jYS5jZXJ0cGF0aCwKKyAgICAgICAg ICAgIHNzbG1vZGU9c3NsbW9kZSwKKyAgICAgICAgKQorCisKK2RlZiB0ZXN0X3ZlcmlmeV9mdWxs X2Nvbm5lY3Rpb24oY29ubmVjdCwgc3NsX3NlcnZlciwgY2VydHMpOgorICAgICIiIkNvbXBsZXRl cyBhIHZlcmlmeS1mdWxsIGNvbm5lY3Rpb24gYW5kIGVtcHR5IHF1ZXJ5LiIiIgorCisgICAgZGVm IGhhbmRsZV9lbXB0eV9xdWVyeShzOiBzc2wuU1NMU29ja2V0KToKKyAgICAgICAgcGt0bGVuID0g c3RydWN0LnVucGFjaygiIUkiLCBzLnJlY3YoNCkpWzBdCisKKyAgICAgICAgIyBDaGVjayB0aGUg c3RhcnR1cCBwYWNrZXQgdmVyc2lvbiwgdGhlbiBkaXNjYXJkIHRoZSByZW1haW5kZXIuCisgICAg ICAgIHZlcnNpb24gPSBzdHJ1Y3QudW5wYWNrKCIhSEgiLCBzLnJlY3YoNCkpCisgICAgICAgIGFz c2VydCB2ZXJzaW9uID09ICgzLCAwKQorICAgICAgICBzLnJlY3YocGt0bGVuIC0gOCkKKworICAg ICAgICAjIFNlbmQgdGhlIHJlcXVpcmVkIGxpdGFueSBvZiBzZXJ2ZXIgbWVzc2FnZXMuCisgICAg ICAgIHMuc2VuZChzdHJ1Y3QucGFjaygiIWNJSSIsIGIiUiIsIDgsIDApKSAgIyBBdXRoZW50aWNh dGlvbk9LCisKKyAgICAgICAgIyBQYXJhbWV0ZXJTdGF0dXM6IGNsaWVudF9lbmNvZGluZworICAg ICAgICBrZXkgPSBiImNsaWVudF9lbmNvZGluZ1wwIgorICAgICAgICB2YWwgPSBiIlVURi04XDAi CisgICAgICAgIHMuc2VuZChzdHJ1Y3QucGFjaygiIWNJIiwgYiJTIiwgNCArIGxlbihrZXkpICsg bGVuKHZhbCkpICsga2V5ICsgdmFsKQorCisgICAgICAgICMgUGFyYW1ldGVyU3RhdHVzOiBEYXRl U3R5bGUKKyAgICAgICAga2V5ID0gYiJEYXRlU3R5bGVcMCIKKyAgICAgICAgdmFsID0gYiJJU08s IE1EWVwwIgorICAgICAgICBzLnNlbmQoc3RydWN0LnBhY2soIiFjSSIsIGIiUyIsIDQgKyBsZW4o a2V5KSArIGxlbih2YWwpKSArIGtleSArIHZhbCkKKworICAgICAgICBzLnNlbmQoc3RydWN0LnBh Y2soIiFjSUlJIiwgYiJLIiwgMTIsIDEyMzQsIDEyMzQpKSAgIyBCYWNrZW5kS2V5RGF0YQorICAg ICAgICBzLnNlbmQoc3RydWN0LnBhY2soIiFjSWMiLCBiIloiLCA1LCBiIkkiKSkgICMgUmVhZHlG b3JRdWVyeQorCisgICAgICAgICMgRXhwZWN0IGFuIGVtcHR5IHF1ZXJ5LgorICAgICAgICBwa3R0 eXBlID0gcy5yZWN2KDEpCisgICAgICAgIGFzc2VydCBwa3R0eXBlID09IGIiUSIKKyAgICAgICAg cGt0bGVuID0gc3RydWN0LnVucGFjaygiIUkiLCBzLnJlY3YoNCkpWzBdCisgICAgICAgIGFzc2Vy dCBzLnJlY3YocGt0bGVuIC0gNCkgPT0gYiJcMCIKKworICAgICAgICAjIFNlbmQgYW4gRW1wdHlR dWVyeVJlc3BvbnNlK1JlYWR5Rm9yUXVlcnkuCisgICAgICAgIHMuc2VuZChzdHJ1Y3QucGFjaygi IWNJIiwgYiJJIiwgNCkpCisgICAgICAgIHMuc2VuZChzdHJ1Y3QucGFjaygiIWNJYyIsIGIiWiIs IDUsIGIiSSIpKQorCisgICAgICAgICMgbGlicHEgc2hvdWxkIHRlcm1pbmF0ZSBhbmQgY2xvc2Ug dGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGFzc2VydCBzLnJlY3YoMSkgPT0gYiJYIgorICAgICAg ICBwa3RsZW4gPSBzdHJ1Y3QudW5wYWNrKCIhSSIsIHMucmVjdig0KSlbMF0KKyAgICAgICAgYXNz ZXJ0IHBrdGxlbiA9PSA0CisKKyAgICAgICAgYXNzZXJ0IG5vdCBzLnJlY3YoMSksICJjbGllbnQg c2VudCB1bmV4cGVjdGVkIGRhdGEiCisKKyAgICBzc2xfc2VydmVyLmJhY2tncm91bmRfc3NsKGhh bmRsZV9lbXB0eV9xdWVyeSkKKworICAgIGNvbm4gPSBjb25uZWN0KAorICAgICAgICAqKnNzbF9z ZXJ2ZXIuY29ubmluZm8sCisgICAgICAgIHNzbHJvb3RjZXJ0PWNlcnRzLmNhLmNlcnRwYXRoLAor ICAgICAgICBzc2xtb2RlPSJ2ZXJpZnktZnVsbCIsCisgICAgKQorICAgIHdpdGggY29ubjoKKyAg ICAgICAgYXNzZXJ0IGNvbm4uZXhlYygiIikuc3RhdHVzKCkgPT0gRXhlY1N0YXR1cy5QR1JFU19F TVBUWV9RVUVSWQotLSAKMi41Mi4wCgo= --baaef3372e886fe21dfd6cae3d53a904ae10bf2be12ea57b7aa5066ea5c7 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v9-0005-WIP-pytest-Add-some-server-side-SSL-tests.patch Content-Type: text/x-patch; charset=utf-8; name=v9-0005-WIP-pytest-Add-some-server-side-SSL-tests.patch RnJvbSA5ZjlkY2U5YTEwNjM1MWU5NjliNWFkYzZkMDc0NGE2MmE2Nzc0NzBiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVHVlLCAxNiBEZWMgMjAyNSAwOTozMTo0NiArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjkgNS81XSBXSVA6IHB5dGVzdDogQWRkIHNvbWUgc2VydmVyLXNpZGUgU1NMIHRl c3RzCgpJbiB0aGUgc2FtZSB2ZWluIGFzIHRoZSBwcmV2aW91cyBjb21taXQsIHRoaXMgaXMgYSBz ZXJ2ZXItb25seSB0ZXN0CnN1aXRlIG9wZXJhdGluZyBhZ2FpbnN0IGEgbW9jayBjbGllbnQuIFRo ZSB0ZXN0IGl0c2VsZiBpcyBhIGhlYXZpbHkKcGFyYW1ldGVyaXplZCBjaGVjayBmb3IgZGlyZWN0 LVNTTCBoYW5kc2hha2UgYmVoYXZpb3IsIHVzaW5nIGEKY29tYmluYXRpb24gb2YgInN0YW5kYXJk IiBhbmQgImN1c3RvbSIgY2VydGlmaWNhdGVzIHZpYSB0aGUgY2VydHMKZml4dHVyZS4KCmluc3Rh bGxjaGVjayBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQsIGJ1dCB0aGUgYXJjaGl0ZWN0dXJlIGhh cyBzb21lCmV4dGVuc2lvbiBwb2ludHMgdGhhdCBzaG91bGQgbWFrZSBpdCBwb3NzaWJsZSBsYXRl ci4gRm9yIG5vdywgYSBuZXcKc2VydmVyIGlzIGFsd2F5cyBzdGFydGVkIGZvciB0aGUgdGVzdCBz ZXNzaW9uLgoKVE9ET3M6Ci0gaW1wcm92ZSByZW1haW5pbmdfdGltZW91dCgpIGludGVncmF0aW9u IHdpdGggc29ja2V0IG9wZXJhdGlvbnM7IGF0IHRoZQogIG1vbWVudCwgdGhlIHRpbWVvdXQgcmVz ZXRzIG9uIGV2ZXJ5IGNhbGwgcmF0aGVyIHRoYW4gZGVjcmVtZW50aW5nCi0tLQogc3JjL3Rlc3Qv c3NsL3B5dC9jb25mdGVzdC5weSAgICB8ICA1MCArKysrKysrKysrCiBzcmMvdGVzdC9zc2wvcHl0 L3Rlc3Rfc2VydmVyLnB5IHwgMTYxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAy IGZpbGVzIGNoYW5nZWQsIDIxMSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3Qvc3NsL3B5dC90ZXN0X3NlcnZlci5weQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3NzbC9w eXQvY29uZnRlc3QucHkgYi9zcmMvdGVzdC9zc2wvcHl0L2NvbmZ0ZXN0LnB5CmluZGV4IDg3MGY3 MzhhYzQ0Li5kMTIxNzI0ODAwYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3NsL3B5dC9jb25mdGVz dC5weQorKysgYi9zcmMvdGVzdC9zc2wvcHl0L2NvbmZ0ZXN0LnB5CkBAIC0xMjYsMyArMTI2LDUz IEBAIGRlZiBjZXJ0cyhjcnlwdG9ncmFwaHksIHRtcF9wYXRoX2ZhY3RvcnkpOgogICAgICAgICAg ICAgcmV0dXJuIGYubmFtZQogCiAgICAgcmV0dXJuIF9DZXJ0cygpCisKKworQHB5dGVzdC5maXh0 dXJlKHNjb3BlPSJtb2R1bGUiLCBhdXRvdXNlPVRydWUpCitkZWYgc3NsX3NldHVwKHBnX3NlcnZl cl9tb2R1bGUsIGNlcnRzLCBkYXRhZGlyKToKKyAgICAiIiIKKyAgICBTZXRzIHVwIHJlcXVpcmVk IHNlcnZlciBzZXR0aW5ncyBmb3IgYWxsIHRlc3RzIGluIHRoaXMgbW9kdWxlLgorICAgICIiIgor ICAgIHRyeToKKyAgICAgICAgd2l0aCBwZ19zZXJ2ZXJfbW9kdWxlLnJlc3RhcnRpbmcoKSBhcyBz OgorICAgICAgICAgICAgcy5jb25mLnNldCgKKyAgICAgICAgICAgICAgICBzc2w9Im9uIiwKKyAg ICAgICAgICAgICAgICBzc2xfY2FfZmlsZT1jZXJ0cy5jYS5jZXJ0cGF0aCwKKyAgICAgICAgICAg ICAgICBzc2xfY2VydF9maWxlPWNlcnRzLnNlcnZlci5jZXJ0cGF0aCwKKyAgICAgICAgICAgICAg ICBzc2xfa2V5X2ZpbGU9Y2VydHMuc2VydmVyLmtleXBhdGgsCisgICAgICAgICAgICApCisKKyAg ICAgICAgICAgICMgUmVqZWN0IGJ5IGRlZmF1bHQuCisgICAgICAgICAgICBzLmhiYS5wcmVwZW5k KCJob3N0c3NsIGFsbCBhbGwgYWxsIHJlamVjdCIpCisKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5D YWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICMgVGhpcyBpcyBhIGRlY2VudCBwbGFjZSB0byBz a2lwIGlmIHRoZSBzZXJ2ZXIgaXNuJ3Qgc2V0IHVwIGZvciBTU0wuCisgICAgICAgIGxvZ3BhdGgg PSBkYXRhZGlyIC8gInBvc3RncmVzcWwubG9nIgorICAgICAgICB1bnN1cHBvcnRlZCA9IHJlLmNv bXBpbGUoIlNTTCBpcyBub3Qgc3VwcG9ydGVkIikKKworICAgICAgICB3aXRoIG9wZW4obG9ncGF0 aCwgInIiKSBhcyBsb2c6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBsb2c6CisgICAgICAgICAg ICAgICAgaWYgdW5zdXBwb3J0ZWQuc2VhcmNoKGxpbmUpOgorICAgICAgICAgICAgICAgICAgICBw eXRlc3Quc2tpcCgidGhlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFNTTCIpCisKKyAgICAgICAg IyBTb21lIG90aGVyIGVycm9yIGhhcHBlbmVkLgorICAgICAgICByYWlzZQorCisgICAgdXNlcnMg PSBwZ19zZXJ2ZXJfbW9kdWxlLmNyZWF0ZV91c2Vycygic3NsIikKKyAgICBkYnMgPSBwZ19zZXJ2 ZXJfbW9kdWxlLmNyZWF0ZV9kYnMoInNzbCIpCisKKyAgICByZXR1cm4gKHVzZXJzLCBkYnMpCisK KworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJtb2R1bGUiKQorZGVmIGNsaWVudF9jZXJ0KHNzbF9z ZXR1cCwgY2VydHMpOgorICAgICIiIgorICAgIENyZWF0ZXMgYSBDZXJ0IGZvciB0aGUgInNzbCIg dXNlci4KKyAgICAiIiIKKyAgICBmcm9tIGNyeXB0b2dyYXBoeSBpbXBvcnQgeDUwOQorICAgIGZy b20gY3J5cHRvZ3JhcGh5Lng1MDkub2lkIGltcG9ydCBOYW1lT0lECisKKyAgICB1c2VycywgXyA9 IHNzbF9zZXR1cAorICAgIHVzZXIgPSB1c2Vyc1sic3NsIl0KKworICAgIHJldHVybiBjZXJ0cy5u ZXcoeDUwOS5OYW1lKFt4NTA5Lk5hbWVBdHRyaWJ1dGUoTmFtZU9JRC5DT01NT05fTkFNRSwgdXNl cildKSkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3NzbC9weXQvdGVzdF9zZXJ2ZXIucHkgYi9zcmMv dGVzdC9zc2wvcHl0L3Rlc3Rfc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5kNWNiMTRiNmM5YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3NzbC9w eXQvdGVzdF9zZXJ2ZXIucHkKQEAgLTAsMCArMSwxNjEgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitpbXBvcnQgcmUKK2ltcG9y dCBzb2NrZXQKK2ltcG9ydCBzc2wKK2ltcG9ydCBzdHJ1Y3QKKworaW1wb3J0IHB5dGVzdAorCitp bXBvcnQgcHlwZworCisjIFRoaXMgc3VpdGUgb3BlbnMgdXAgbG9jYWwgVENQIHBvcnRzIGFuZCBp cyBoaWRkZW4gYmVoaW5kIFBHX1RFU1RfRVhUUkE9c3NsLgorcHl0ZXN0bWFyayA9IHB5cGcucmVx dWlyZV90ZXN0X2V4dHJhcygic3NsIikKKworIyBGb3IgdXNlIHdpdGggdGhlIGBjcmVkc2AgcGFy YW1ldGVyIGJlbG93LgorQ0xJRU5UID0gImNsaWVudCIKK1NFUlZFUiA9ICJzZXJ2ZXIiCisKKwor IyBmbXQ6IG9mZgorQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICJhdXRoX21ldGhvZCwg ICAgICAgICAgICAgICAgICAgIGNyZWRzLCAgZXhwZWN0ZWRfZXJyb3IiLAorWworICAgICMgVHJ1 c3QgYWxsb3dzIGFueXRoaW5nLgorICAgICgidHJ1c3QiLCAgICAgICAgICAgICAgICAgICAgICAg IE5vbmUsICAgTm9uZSksCisgICAgKCJ0cnVzdCIsICAgICAgICAgICAgICAgICAgICAgICAgQ0xJ RU5ULCBOb25lKSwKKyAgICAoInRydXN0IiwgICAgICAgICAgICAgICAgICAgICAgICBTRVJWRVIs IE5vbmUpLAorCisgICAgIyB2ZXJpZnktY2EgYWxsb3dzIGFueSBDQS1zaWduZWQgY2VydGlmaWNh dGUuCisgICAgKCJ0cnVzdCBjbGllbnRjZXJ0PXZlcmlmeS1jYSIsICAgTm9uZSwgICAicmVxdWly ZXMgYSB2YWxpZCBjbGllbnQgY2VydGlmaWNhdGUiKSwKKyAgICAoInRydXN0IGNsaWVudGNlcnQ9 dmVyaWZ5LWNhIiwgICBDTElFTlQsIE5vbmUpLAorICAgICgidHJ1c3QgY2xpZW50Y2VydD12ZXJp ZnktY2EiLCAgIFNFUlZFUiwgTm9uZSksCisKKyAgICAjIGNlcnQgYW5kIHZlcmlmeS1mdWxsIGFs bG93IG9ubHkgdGhlIGNvcnJlY3QgY2VydGlmaWNhdGUuCisgICAgKCJ0cnVzdCBjbGllbnRjZXJ0 PXZlcmlmeS1mdWxsIiwgTm9uZSwgICAicmVxdWlyZXMgYSB2YWxpZCBjbGllbnQgY2VydGlmaWNh dGUiKSwKKyAgICAoInRydXN0IGNsaWVudGNlcnQ9dmVyaWZ5LWZ1bGwiLCBDTElFTlQsIE5vbmUp LAorICAgICgidHJ1c3QgY2xpZW50Y2VydD12ZXJpZnktZnVsbCIsIFNFUlZFUiwgImF1dGhlbnRp Y2F0aW9uIGZhaWxlZCBmb3IgdXNlciIpLAorICAgICgiY2VydCIsICAgICAgICAgICAgICAgICAg ICAgICAgIE5vbmUsICAgInJlcXVpcmVzIGEgdmFsaWQgY2xpZW50IGNlcnRpZmljYXRlIiksCisg ICAgKCJjZXJ0IiwgICAgICAgICAgICAgICAgICAgICAgICAgQ0xJRU5ULCBOb25lKSwKKyAgICAo ImNlcnQiLCAgICAgICAgICAgICAgICAgICAgICAgICBTRVJWRVIsICJhdXRoZW50aWNhdGlvbiBm YWlsZWQgZm9yIHVzZXIiKSwKK10sCispCisjIGZtdDogb24KK2RlZiB0ZXN0X2RpcmVjdF9zc2xf Y2VydGlmaWNhdGVfYXV0aGVudGljYXRpb24oCisgICAgcGcsCisgICAgc3NsX3NldHVwLAorICAg IGNlcnRzLAorICAgIGNsaWVudF9jZXJ0LAorICAgIHJlbWFpbmluZ190aW1lb3V0LAorICAgICMg dGVzdCBwYXJhbWV0ZXJzCisgICAgYXV0aF9tZXRob2QsCisgICAgY3JlZHMsCisgICAgZXhwZWN0 ZWRfZXJyb3IsCispOgorICAgICIiIgorICAgIFRlc3RzIGRpcmVjdCBTU0wgY29ubmVjdGlvbnMg d2l0aCB2YXJpb3VzIGNsaWVudC1jZXJ0aWZpY2F0ZS9IQkEKKyAgICBjb21iaW5hdGlvbnMuCisg ICAgIiIiCisKKyAgICAjIFNldCB1cCB0aGUgSEJBIGFzIGRlc2lyZWQgYnkgdGhlIHRlc3QuCisg ICAgdXNlcnMsIGRicyA9IHNzbF9zZXR1cAorCisgICAgdXNlciA9IHVzZXJzWyJzc2wiXQorICAg IGRiID0gZGJzWyJzc2wiXQorCisgICAgd2l0aCBwZy5yZWxvYWRpbmcoKSBhcyBzOgorICAgICAg ICBzLmhiYS5wcmVwZW5kKAorICAgICAgICAgICAgWyJob3N0c3NsIiwgZGIsIHVzZXIsICIxMjcu MC4wLjEvMzIiLCBhdXRoX21ldGhvZF0sCisgICAgICAgICAgICBbImhvc3Rzc2wiLCBkYiwgdXNl ciwgIjo6MS8xMjgiLCBhdXRoX21ldGhvZF0sCisgICAgICAgICkKKworICAgICMgQ29uZmlndXJl IHRoZSBTU0wgc2V0dGluZ3MgZm9yIHRoZSBjbGllbnQuCisgICAgY3R4ID0gc3NsLlNTTENvbnRl eHQoc3NsLlBST1RPQ09MX1RMU19DTElFTlQpCisgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9u cyhjYWZpbGU9Y2VydHMuY2EuY2VydHBhdGgpCisgICAgY3R4LnNldF9hbHBuX3Byb3RvY29scyhb InBvc3RncmVzcWwiXSkgICMgZm9yIGRpcmVjdCBTU0wKKworICAgICMgTG9hZCB1cCBhIGNsaWVu dCBjZXJ0aWZpY2F0ZSBpZiByZXF1aXJlZCBieSB0aGUgdGVzdC4KKyAgICBpZiBjcmVkcyA9PSBD TElFTlQ6CisgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oY2xpZW50X2NlcnQuY2VydHBhdGgs IGNsaWVudF9jZXJ0LmtleXBhdGgpCisgICAgZWxpZiBjcmVkcyA9PSBTRVJWRVI6CisgICAgICAg ICMgVXNpbmcgYSBzZXJ2ZXIgY2VydGlmaWNhdGUgYXMgdGhlIGNsaWVudCBjcmVkZW50aWFsIGlz IGV4cGVjdGVkIHRvCisgICAgICAgICMgd29yayBvbmx5IGZvciBjbGllbnRjZXJ0PXZlcmlmeS1j YSAoYW5kIGB0cnVzdGAsIG5hdHVyYWxseSkuCisgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4o Y2VydHMuc2VydmVyLmNlcnRwYXRoLCBjZXJ0cy5zZXJ2ZXIua2V5cGF0aCkKKworICAgICMgTWFr ZSBhIGRpcmVjdCBTU0wgY29ubmVjdGlvbi4gVGhlcmUncyBubyBTU0xSZXF1ZXN0IGluIHRoZSBo YW5kc2hha2U7IHdlCisgICAgIyBzaW1wbHkgd3JhcCBhIFRDUCBjb25uZWN0aW9uIHdpdGggT3Bl blNTTC4KKyAgICBhZGRyID0gKHBnLmhvc3RhZGRyLCBwZy5wb3J0KQorICAgIHdpdGggc29ja2V0 LmNyZWF0ZV9jb25uZWN0aW9uKGFkZHIpIGFzIHM6CisgICAgICAgIHMuc2V0dGltZW91dChyZW1h aW5pbmdfdGltZW91dCgpKSAgIyBYWFggdGhpcyByZXNldHMgZXZlcnkgb3BlcmF0aW9uCisKKyAg ICAgICAgd2l0aCBjdHgud3JhcF9zb2NrZXQocywgc2VydmVyX2hvc3RuYW1lPWNlcnRzLnNlcnZl cl9ob3N0KSBhcyBjb25uOgorICAgICAgICAgICAgIyBCdWlsZCBhbmQgc2VuZCB0aGUgc3RhcnR1 cCBwYWNrZXQuCisgICAgICAgICAgICBzdGFydHVwX29wdGlvbnMgPSBkaWN0KAorICAgICAgICAg ICAgICAgIHVzZXI9dXNlciwKKyAgICAgICAgICAgICAgICBkYXRhYmFzZT1kYiwKKyAgICAgICAg ICAgICAgICBhcHBsaWNhdGlvbl9uYW1lPSJweXRlc3QiLAorICAgICAgICAgICAgKQorCisgICAg ICAgICAgICBwYXlsb2FkID0gYiIiCisgICAgICAgICAgICBmb3IgaywgdiBpbiBzdGFydHVwX29w dGlvbnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBwYXlsb2FkICs9IGsuZW5jb2RlKCkgKyBi IlwwIgorICAgICAgICAgICAgICAgIHBheWxvYWQgKz0gc3RyKHYpLmVuY29kZSgpICsgYiJcMCIK KyAgICAgICAgICAgIHBheWxvYWQgKz0gYiJcMCIgICMgbnVsbCB0ZXJtaW5hdG9yCisKKyAgICAg ICAgICAgIHBrdGxlbiA9IDQgKyA0ICsgbGVuKHBheWxvYWQpCisgICAgICAgICAgICBjb25uLnNl bmQoc3RydWN0LnBhY2soIiFJSEgiLCBwa3RsZW4sIDMsIDApICsgcGF5bG9hZCkKKworICAgICAg ICAgICAgaWYgbm90IGV4cGVjdGVkX2Vycm9yOgorICAgICAgICAgICAgICAgICMgRXhwZWN0IGFu IEF1dGhlbnRpY2F0aW9uT0sgdG8gY29tZSBiYWNrLgorICAgICAgICAgICAgICAgIHBrdHR5cGUs IHBrdGxlbiA9IHN0cnVjdC51bnBhY2soIiFjSSIsIGNvbm4ucmVjdig1KSkKKyAgICAgICAgICAg ICAgICBhc3NlcnQgcGt0dHlwZSA9PSBiIlIiCisgICAgICAgICAgICAgICAgYXNzZXJ0IHBrdGxl biA9PSA4CisKKyAgICAgICAgICAgICAgICBhdXRobl9yZXN1bHQgPSBzdHJ1Y3QudW5wYWNrKCIh SSIsIGNvbm4ucmVjdig0KSlbMF0KKyAgICAgICAgICAgICAgICBhc3NlcnQgYXV0aG5fcmVzdWx0 ID09IDAKKworICAgICAgICAgICAgICAgICMgUmVhZCBhbmQgZGlzY2FyZCB0byBSZWFkeUZvclF1 ZXJ5LgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHBr dHR5cGUsIHBrdGxlbiA9IHN0cnVjdC51bnBhY2soIiFjSSIsIGNvbm4ucmVjdig1KSkKKyAgICAg ICAgICAgICAgICAgICAgcGF5bG9hZCA9IGNvbm4ucmVjdihwa3RsZW4gLSA0KQorCisgICAgICAg ICAgICAgICAgICAgIGlmIHBrdHR5cGUgPT0gYiJaIjoKKyAgICAgICAgICAgICAgICAgICAgICAg IGFzc2VydCBwYXlsb2FkID09IGIiSSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisK KyAgICAgICAgICAgICAgICAjIFNlbmQgYW4gZW1wdHkgcXVlcnkuCisgICAgICAgICAgICAgICAg Y29ubi5zZW5kKHN0cnVjdC5wYWNrKCIhY0kiLCBiIlEiLCA1KSArIGIiXDAiKQorCisgICAgICAg ICAgICAgICAgIyBFeHBlY3QgRW1wdHlRdWVyeVJlc3BvbnNlK1JlYWR5Rm9yUXVlcnkuCisgICAg ICAgICAgICAgICAgcGt0dHlwZSwgcGt0bGVuID0gc3RydWN0LnVucGFjaygiIWNJIiwgY29ubi5y ZWN2KDUpKQorICAgICAgICAgICAgICAgIGFzc2VydCBwa3R0eXBlID09IGIiSSIKKyAgICAgICAg ICAgICAgICBhc3NlcnQgcGt0bGVuID09IDQKKworICAgICAgICAgICAgICAgIHBrdHR5cGUsIHBr dGxlbiA9IHN0cnVjdC51bnBhY2soIiFjSSIsIGNvbm4ucmVjdig1KSkKKyAgICAgICAgICAgICAg ICBhc3NlcnQgcGt0dHlwZSA9PSBiIloiCisKKyAgICAgICAgICAgICAgICBwYXlsb2FkID0gY29u bi5yZWN2KHBrdGxlbiAtIDQpCisgICAgICAgICAgICAgICAgYXNzZXJ0IHBheWxvYWQgPT0gYiJJ IgorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgTWF0Y2ggdGhlIGV4cGVj dGVkIGF1dGhlbnRpY2F0aW9uIGVycm9yLgorICAgICAgICAgICAgICAgIHBrdHR5cGUsIHBrdGxl biA9IHN0cnVjdC51bnBhY2soIiFjSSIsIGNvbm4ucmVjdig1KSkKKyAgICAgICAgICAgICAgICBh c3NlcnQgcGt0dHlwZSA9PSBiIkUiCisKKyAgICAgICAgICAgICAgICBwYXlsb2FkID0gY29ubi5y ZWN2KHBrdGxlbiAtIDQpCisgICAgICAgICAgICAgICAgbXNnID0gTm9uZQorCisgICAgICAgICAg ICAgICAgZm9yIGNvbXBvbmVudCBpbiBwYXlsb2FkLnNwbGl0KGIiXDAiKToKKyAgICAgICAgICAg ICAgICAgICAgaWYgbm90IGNvbXBvbmVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr ICAjIGVuZCBvZiBtZXNzYWdlCisKKyAgICAgICAgICAgICAgICAgICAga2V5LCB2YWwgPSBjb21w b25lbnRbOjFdLCBjb21wb25lbnRbMTpdCisgICAgICAgICAgICAgICAgICAgIGlmIGtleSA9PSBi IlMiOgorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHZhbCA9PSBiIkZBVEFMIgorICAg ICAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSBiIk0iOgorICAgICAgICAgICAgICAgICAgICAg ICAgbXNnID0gdmFsLmRlY29kZSgpCisKKyAgICAgICAgICAgICAgICBhc3NlcnQgcmUuc2VhcmNo KGV4cGVjdGVkX2Vycm9yLCBtc2cpLCAic2VydmVyIGVycm9yIGRpZCBub3QgbWF0Y2giCisKKyAg ICAgICAgICAgICMgVGVybWluYXRlLgorICAgICAgICAgICAgY29ubi5zZW5kKHN0cnVjdC5wYWNr KCIhY0kiLCBiIlgiLCA0KSkKLS0gCjIuNTIuMAoK --baaef3372e886fe21dfd6cae3d53a904ae10bf2be12ea57b7aa5066ea5c7--