Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sljvC-000tOI-3U for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Sep 2024 06:55:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sljv9-005N8P-OH for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Sep 2024 06:55:16 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sljv9-005N7d-5n for pgsql-hackers@lists.postgresql.org; Wed, 04 Sep 2024 06:55:15 +0000 Received: from mail-vk1-xa2f.google.com ([2607:f8b0:4864:20::a2f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sljv6-0004RE-0Q for pgsql-hackers@lists.postgresql.org; Wed, 04 Sep 2024 06:55:14 +0000 Received: by mail-vk1-xa2f.google.com with SMTP id 71dfb90a1353d-4fed4a1a003so2090548e0c.2 for ; Tue, 03 Sep 2024 23:55:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1725432911; x=1726037711; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=bPE5ThCBx2YXCBAdY/zd8+xr+GigVtXS90dWK9qaM/w=; b=ZwlriTdtttJrSXWmA2WK937pcIgawVedAQTzCPAld6t5WyOh/NnlSJtuPBbmakeLoZ FS9LCmGDGfJZMzxnuVBf9qvKvLa/5B3Joel/Wr8TrjLASc7du7H4H3CFeE3Bs76F9WXv +p96mcKpR3H3GTY75tBgfC8mm+OOSvREV7QCbEnks5plRDMIOJL03GxNhmoC1P47nfGZ R8Z/i/bTxdh2xwevct7cndzq3LvcnSgMnlzuuVMkrkXYt+Km1Y2UH9xk0blNdoF9fNvs CQvrRW774LU9gbcv4OFCY/FMyrUpqg+lWGUI9mYnhN6LeFQgsxz1OP9NXjKuojji/rNm Z1Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725432911; x=1726037711; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=bPE5ThCBx2YXCBAdY/zd8+xr+GigVtXS90dWK9qaM/w=; b=i7N4cmEafGsJTHbLjemyWIYL6yeTYXibpwNxfHN4QLWE8X8OF492fCQoKK6/p/BHPt dtKGV7KMIQiyVyk0nkger4hsy+jNN6tIw+hUr1m+WB03y4sw33ux3wtYQ+ruXy3j6/fE cjN/zj9VNI2/7E1hCekvNJhTwFAzOEDrfMAHrRd+hQueBCau+zgDO6NUbDhWuKb0LNLV ZaYp7JP8VqJKT37fg8/hhe0ZF2jSbJfmtmUXeCRrPuXIevRvT8m7YukRe71x65nPKeEB 25cpp0XDtPdH/zFRPACiMzpO0DWLhHIMnFOKieWsXl0blijYn8hTfyNQ0MsbdjnVB1X2 8LvA== X-Forwarded-Encrypted: i=1; AJvYcCUmZ1P6TPZ/ap/kA93M89tfP9qegqXmcpIEBlmT2Ka1ib9qMuessKzBbv+53WuZJW0teeFLiPvflvvt4emB@lists.postgresql.org X-Gm-Message-State: AOJu0YzoTBx98ZYeLVleNbQ57nNWtxk6t+Zl1gDbjFtSVahvroJzd6sx jdsjtadJXO7qygBpUxG73pp06Xe/t7kMueU8gNnzWYkB++3IZ+gcZ2IFTUdh4rYVnkLpgSOuvIe 22FbR4ZpexIf0GOqFz47JtgxQ/GhiBkKF/rrFgw== X-Google-Smtp-Source: AGHT+IFCwxbq6DGrLTXLlj5DottiOs0SH63YAbQgpSONTW8m5QP84vuuiYN18Bf8TwNmZXtvYgeP0R/q66kUPDNeNaU= X-Received: by 2002:a05:6122:3c44:b0:4f5:12d3:799a with SMTP id 71dfb90a1353d-500de135f43mr5107142e0c.2.1725432910998; Tue, 03 Sep 2024 23:55:10 -0700 (PDT) MIME-Version: 1.0 References: <78d824e0-b21e-480d-a252-e4b84bc2c24b@illuminatedcomputing.com> <69f0a887-a4ed-49cf-9d63-923891006658@illuminatedcomputing.com> In-Reply-To: From: jian he Date: Wed, 4 Sep 2024 14:54:00 +0800 Message-ID: Subject: Re: altering a column's collation leaves an invalid foreign key To: Peter Eisentraut Cc: Paul Jungwirth , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000be983c062145a74c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000be983c062145a74c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Sep 3, 2024 at 5:41=E2=80=AFPM Peter Eisentraut wrote: > > > I like this patch version (v4). It's the simplest, probably also > easiest to backpatch. > I am actually confused. In this email thread [1], I listed 3 corn cases. I thought all these 3 corner cases should not be allowed. but V4 didn't solve these corner case issues. what do you think of their corner case, should it be allowed? Anyway, I thought these corner cases should not be allowed to happen, so I made sure PK, FK ties related collation were deterministic. PK can have indeterministic collation as long as it does not interact with = FK. [1] https://www.postgresql.org/message-id/CACJufxEW6OMBqt8cbr%3D3Jt%2B%2BZd= _SL-4YDjfk7Q7DhGKiSLcu4g%40mail.gmail.com --000000000000be983c062145a74c Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0001-ensure-PK-FK-ties-related-collation-indeterminist.patch" Content-Disposition: attachment; filename="v5-0001-ensure-PK-FK-ties-related-collation-indeterminist.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m0nht8fn0 RnJvbSAwMjRkODE4ZTBlMjg2YWYxMGI3NDY0OWJkMzE1NjgzNmQ2ZjI4NDQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgNCBTZXAgMjAyNCAxNDozMTo0MyArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjUg MS8xXSBlbnN1cmUgUEstRksgdGllcyByZWxhdGVkIGNvbGxhdGlvbiBpbmRldGVybWluaXN0aWMK ClBLIGNhbiBoYXZlIGluZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb24gYXMgbG9uZyBhcyBpdCBub3Qg aW50ZXJhY3Qgd2l0aCBGSy4KVG8gbWFrZSB0aGUgUEstRksgdGllIGNvbnNpc3RlbnQsIHdlIG5l ZWQgdG8gZW5zdXJlIGJvdGggc2lkZSdzIGNvbGxhdGlvbiBpcwpkZXRlcm1pbmlzdGljLCBvdGhl cndpc2UsIHRoZSBmb2xsb3dpbmcgdHdvIHNvbWUgYW5vbWFsaXR5cyBjYW4gaGFwcGVuLgoKMS4g UEsgc2lkZSBjb2xsYXRpb24gaXMgaW5kZXRlcm1pbmlzdGljLCBtdWx0aXBsZSBmb3JtIEZLIHZh bHVlcyBlcXVhbCB0byBvbmUgUEsKdmFsdWUuCjIuIEZLIHNpZGUgY29sbGF0aW9uIGlzIGluZGV0 ZXJtaW5pc3RpYywgbXVsdGlwbGUgZm9ybSBQSyB2YWx1ZXMgZXF1YWwgdG8gb25lIEZLCnZhbHVl LgoKZGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS83OGQ4MjRlMC1iMjFlLTQ4MGQtYTI1 Mi1lNGI4NGJjMmMyNGIlNDBpbGx1bWluYXRlZGNvbXB1dGluZy5jb20KLS0tCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgfCAgNjUgKysrKysrKysKIC4uLi9y ZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUuaWN1LnV0Zjgub3V0ICAgICB8IDE0MiArKysrKysrLS0t LS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbGxhdGUuaWN1LnV0Zjguc3FsICAgICB8 ICA2MCArKysrLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxNTEgaW5zZXJ0aW9ucygrKSwgMTE2IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggYjNjYzZmOGY2OS4uNmM5 NTFhZTM2ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTk3MDUsNiArOTcwNSw3MSBA QCBBVEFkZEZvcmVpZ25LZXlDb25zdHJhaW50KExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUlu Zm8gKnRhYiwgUmVsYXRpb24gcmVsLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9GT1JF SUdOX0tFWSksCiAJCQkJIGVycm1zZygibnVtYmVyIG9mIHJlZmVyZW5jaW5nIGFuZCByZWZlcmVu Y2VkIGNvbHVtbnMgZm9yIGZvcmVpZ24ga2V5IGRpc2FncmVlIikpKTsKIAorCWZvciAoaSA9IDA7 IGkgPCBudW1wa3M7IGkrKykKKwl7CisJCWludDMyCQlrZXljb2x0eXBtb2Q7CisJCU9pZAkJCWtl eWNvbHR5cGU7CisJCU9pZAkJCWtleWNvbGNvbGxhdGlvbjsKKwkJT2lkCQkJdHlwY29sbGF0aW9u OworCQlib29sCQljb2xfY29sbF9kZXRlcm1pbmlzdGljID0gdHJ1ZTsKKworCQkvKgorCQkgKiBm b3IgYm90aCBmb3JlaWduIGtleSBhbmQgcHJpbWFyeSBrZXksIHdlIG5lZWQgbWFrZSBzdXJlIHRo ZSBzcGVjaWZpZWQKKwkJICoga2V5cyBjb2xsYXRpb24gKHZpYSBDT0xMQVRFIGNsYXVzZSkgaXMg ZGV0ZXJtaW5pc3RpYy4gd2UgYWxzbyBuZWVkIHRvCisJCSAqIGVuc3VyZSB0aGUga2V5J3MgdHlw Y29sbGF0aW9uIGlzIGluZGV0ZXJtaW5pc3RpYyAoZm9yIGRvbWFpbiB0eXBlKS4KKwkJICoKKwkJ ICogUEsgYW5kIEZLIGJvdGggYXJlIG5vdCBpbmRldGVybWluaXN0aWMsIHRoZW4gYW5vbWFsaXR5 IGNhbiBoYXBwZW46CisJCSAqIDEuIFBLIHNpZGUgY29sbGF0aW9uIGlzIGluZGV0ZXJtaW5pc3Rp YywgbXVsdGlwbGUgZm9ybSBGSyB2YWx1ZXMKKwkJICogICAgZXF1YWwgdG8gb25lIFBLIHZhbHVl LgorCQkgKiAyLiBGSyBzaWRlIGNvbGxhdGlvbiBpcyBpbmRldGVybWluaXN0aWMsIG11bHRpcGxl IGZvcm0gUEsgdmFsdWVzCisJCSAqICAgIGVxdWFsIHRvIG9uZSBGSyB2YWx1ZS4KKwkJICoKKwkJ ICovCisKKwkJLyogY2hlY2tpbmcgUEsgY29sbGF0aW9uIGRldGVybWluaXN0aWMgKi8KKwkJZ2V0 X2F0dHR5cGV0eXBtb2Rjb2xsKFJlbGF0aW9uR2V0UmVsaWQocGtyZWwpLCBwa2F0dG51bVtpXSwK KwkJCQkJCQkJJmtleWNvbHR5cGUsICZrZXljb2x0eXBtb2QsCisJCQkJCQkJCSZrZXljb2xjb2xs YXRpb24pOworCisJCXR5cGNvbGxhdGlvbiA9IGdldF90eXBjb2xsYXRpb24oa2V5Y29sdHlwZSk7 CisJCWlmIChPaWRJc1ZhbGlkKHR5cGNvbGxhdGlvbikpCisJCQljb2xfY29sbF9kZXRlcm1pbmlz dGljID0gZ2V0X2NvbGxhdGlvbl9pc2RldGVybWluaXN0aWModHlwY29sbGF0aW9uKTsKKworCQlp ZiAoY29sX2NvbGxfZGV0ZXJtaW5pc3RpYyAmJiBPaWRJc1ZhbGlkKGtleWNvbGNvbGxhdGlvbikp CisJCQljb2xfY29sbF9kZXRlcm1pbmlzdGljID0gZ2V0X2NvbGxhdGlvbl9pc2RldGVybWluaXN0 aWMoa2V5Y29sY29sbGF0aW9uKTsKKworCQlpZiAoIWNvbF9jb2xsX2RldGVybWluaXN0aWMpCisJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENI KSwKKwkJCQkJZXJybXNnKCJmb3JlaWduIGtleSBjb25zdHJhaW50IFwiJXNcIiBjYW5ub3QgYmUg aW1wbGVtZW50ZWQiLAorCQkJCQkJCWZrY29uc3RyYWludC0+Y29ubmFtZSksCisJCQkJCWVycmRl dGFpbCgiQ2Fubm90IGhhdmUgaW5kZXRlcm1pbmlzdGljIGNvbGxhdGlvbnMgaW4gcHJpbWFyeSBr ZXkgZm9yIHJlZmVyZW5jZWQgdGFibGUgXCIlc1wiLiIsCisJCQkJCQkJICAgUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUocGtyZWwpKSwKKwkJCQkJZXJyaGludCgiWW91IG1heSBuZWVkIHRvIG1ha2Ug cHJpbWFyeSBrZXkgY29uc3RyYWludCdzIGNvbGxhdGlvbiBkZXRlcm1pbmlzdGljLiIpKSk7CisK KworCQkvKiBjaGVja2luZyBQSyBjb2xsYXRpb24gZGV0ZXJtaW5pc3RpYyAqLworCQlnZXRfYXR0 dHlwZXR5cG1vZGNvbGwoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBma2F0dG51bVtpXSwKKwkJCQkJ CQkJJmtleWNvbHR5cGUsICZrZXljb2x0eXBtb2QsCisJCQkJCQkJCSZrZXljb2xjb2xsYXRpb24p OworCisJCXR5cGNvbGxhdGlvbiA9IGdldF90eXBjb2xsYXRpb24oa2V5Y29sdHlwZSk7CisJCWlm IChPaWRJc1ZhbGlkKHR5cGNvbGxhdGlvbikpCisJCQljb2xfY29sbF9kZXRlcm1pbmlzdGljID0g Z2V0X2NvbGxhdGlvbl9pc2RldGVybWluaXN0aWModHlwY29sbGF0aW9uKTsKKworCQlpZiAoY29s X2NvbGxfZGV0ZXJtaW5pc3RpYyAmJiBPaWRJc1ZhbGlkKGtleWNvbGNvbGxhdGlvbikpCisJCQlj b2xfY29sbF9kZXRlcm1pbmlzdGljID0gZ2V0X2NvbGxhdGlvbl9pc2RldGVybWluaXN0aWMoa2V5 Y29sY29sbGF0aW9uKTsKKworCQlpZiAoIWNvbF9jb2xsX2RldGVybWluaXN0aWMpCisJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKKwkJ CQkJIGVycm1zZygiZm9yZWlnbiBrZXkgY29uc3RyYWludCBcIiVzXCIgY2Fubm90IGJlIGltcGxl bWVudGVkIiwKKwkJCQkJCQlma2NvbnN0cmFpbnQtPmNvbm5hbWUpLAorCQkJCQkgZXJyZGV0YWls KCJGb3JlaWduIGtleSBjb25zdHJhaW50IGNhbm5vdCB1c2UgaW5kZXRlcm1pbmlzdGljIGNvbGxh dGlvbiBmb3IgcmVmZXJlbmNpbmcgdGFibGUgXCIlc1wiLiIsCisJCQkJCQkJCVJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbCkpLAorCQkJCQkgZXJyaGludCgiWW91IG1heSBuZWVkIHRvIG1ha2Ug dGhlIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQncyBjb2xsYXRpb24gZGV0ZXJtaW5pc3RpYy4iKSkp OworCX0KKwogCS8qCiAJICogT24gdGhlIHN0cmVuZ3RoIG9mIGEgcHJldmlvdXMgY29uc3RyYWlu dCwgd2UgbWlnaHQgYXZvaWQgc2Nhbm5pbmcKIAkgKiB0YWJsZXMgdG8gdmFsaWRhdGUgdGhpcyBv bmUuICBTZWUgYmVsb3cuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Nv bGxhdGUuaWN1LnV0Zjgub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb2xsYXRlLmlj dS51dGY4Lm91dAppbmRleCAzMTM0NTI5NWMxLi41MDc0ODEyMDk5IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUuaWN1LnV0Zjgub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY29sbGF0ZS5pY3UudXRmOC5vdXQKQEAgLTE4NDEsMTAwICsxODQx LDYyIEBAIFNFTEVDVCAqIEZST00gdGVzdDQgV0hFUkUgYiA9ICdDb3RlJyBDT0xMQVRFIGNhc2Vf aW5zZW5zaXRpdmU7CiAoMSByb3cpCiAKIC0tIGZvcmVpZ24ga2V5cyAoc2hvdWxkIHVzZSBjb2xs YXRpb24gb2YgcHJpbWFyeSBrZXkpCi0tLSBQSyBpcyBjYXNlLXNlbnNpdGl2ZSwgRksgaXMgY2Fz ZS1pbnNlbnNpdGl2ZQorQ1JFQVRFIENPTExBVElPTiBpZ25vcmVfYWNjZW50X2Nhc2UgKHByb3Zp ZGVyID0gaWN1LCBkZXRlcm1pbmlzdGljID0gZmFsc2UsIGxvY2FsZSA9ICd1bmQtdS1rcy1sZXZl bDEnKTsKK0NSRUFURSBET01BSU4gdGV4dF9kX2lnbm9yZV9hY2NlbnRfY2FzZSBBUyB0ZXh0IENP TExBVEUgaWdub3JlX2FjY2VudF9jYXNlOworLS0gUEsgaXMgY2FzZS1zZW5zaXRpdmUgKGRldGVy bWluaXN0aWMpLCBGSyBpcyBjYXNlLWluc2Vuc2l0aXZlIChpbmRldGVybWluaXN0aWMpLgorLS0g bm90IE9LLCBtdWx0aXBsZSBQSy1zaWRlIHZhbHVlIGVxdWFsIHRvIG9uZSBGSy1zaWRlIHZhbHVl IG5vdCBhbGxvd2VkCistLSBlLmcuIG5vdCBhbGxvd2VkIGNhc2U6IFBLIHZhbHVlcyB7J2EnLCAn QSJ9IGJvdGggZXF1YWwgdG8gRksgdmFsdWUgeydBJ30KIENSRUFURSBUQUJMRSB0ZXN0MTBwayAo eCB0ZXh0IENPTExBVEUgY2FzZV9zZW5zaXRpdmUgUFJJTUFSWSBLRVkpOwotSU5TRVJUIElOVE8g dGVzdDEwcGsgVkFMVUVTICgnYWJjJyksICgnZGVmJyksICgnZ2hpJyk7CiBDUkVBVEUgVEFCTEUg dGVzdDEwZmsgKHggdGV4dCBDT0xMQVRFIGNhc2VfaW5zZW5zaXRpdmUgUkVGRVJFTkNFUyB0ZXN0 MTBwayAoeCkgT04gVVBEQVRFIENBU0NBREUgT04gREVMRVRFIENBU0NBREUpOwotSU5TRVJUIElO VE8gdGVzdDEwZmsgVkFMVUVTICgnYWJjJyk7ICAtLSBvawotSU5TRVJUIElOVE8gdGVzdDEwZmsg VkFMVUVTICgnQUJDJyk7ICAtLSBlcnJvcgotRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRh YmxlICJ0ZXN0MTBmayIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAidGVzdDEwZmtf eF9ma2V5IgotREVUQUlMOiAgS2V5ICh4KT0oQUJDKSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAi dGVzdDEwcGsiLgotSU5TRVJUIElOVE8gdGVzdDEwZmsgVkFMVUVTICgneHl6Jyk7ICAtLSBlcnJv cgotRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJ0ZXN0MTBmayIgdmlvbGF0ZXMg Zm9yZWlnbiBrZXkgY29uc3RyYWludCAidGVzdDEwZmtfeF9ma2V5IgotREVUQUlMOiAgS2V5ICh4 KT0oeHl6KSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAidGVzdDEwcGsiLgotU0VMRUNUICogRlJP TSB0ZXN0MTBwazsKLSAgeCAgCi0tLS0tLQotIGFiYwotIGRlZgotIGdoaQotKDMgcm93cykKLQot U0VMRUNUICogRlJPTSB0ZXN0MTBmazsKLSAgeCAgCi0tLS0tLQotIGFiYwotKDEgcm93KQotCi0t LSByZXN0cmljdCB1cGRhdGUgZXZlbiB0aG91Z2ggdGhlIHZhbHVlcyBhcmUgImVxdWFsIiBpbiB0 aGUgRksgdGFibGUKLVVQREFURSB0ZXN0MTBmayBTRVQgeCA9ICdBQkMnIFdIRVJFIHggPSAnYWJj JzsgIC0tIGVycm9yCi1FUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgInRlc3QxMGZr IiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJ0ZXN0MTBma194X2ZrZXkiCi1ERVRB SUw6ICBLZXkgKHgpPShBQkMpIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJ0ZXN0MTBwayIuCi1T RUxFQ1QgKiBGUk9NIHRlc3QxMGZrOwotICB4ICAKLS0tLS0tCi0gYWJjCi0oMSByb3cpCi0KLURF TEVURSBGUk9NIHRlc3QxMHBrIFdIRVJFIHggPSAnYWJjJzsKLVNFTEVDVCAqIEZST00gdGVzdDEw cGs7Ci0gIHggIAotLS0tLS0KLSBkZWYKLSBnaGkKLSgyIHJvd3MpCi0KLVNFTEVDVCAqIEZST00g dGVzdDEwZms7Ci0geCAKLS0tLQotKDAgcm93cykKLQotLS0gUEsgaXMgY2FzZS1pbnNlbnNpdGl2 ZSwgRksgaXMgY2FzZS1zZW5zaXRpdmUKK0VSUk9SOiAgZm9yZWlnbiBrZXkgY29uc3RyYWludCAi dGVzdDEwZmtfeF9ma2V5IiBjYW5ub3QgYmUgaW1wbGVtZW50ZWQKK0RFVEFJTDogIEZvcmVpZ24g a2V5IGNvbnN0cmFpbnQgY2Fubm90IHVzZSBpbmRldGVybWluaXN0aWMgY29sbGF0aW9uIGZvciBy ZWZlcmVuY2luZyB0YWJsZSAidGVzdDEwZmsiLgorSElOVDogIFlvdSBtYXkgbmVlZCB0byBtYWtl IHRoZSBmb3JlaWduIGtleSBjb25zdHJhaW50J3MgY29sbGF0aW9uIGRldGVybWluaXN0aWMuCist LSBQSyBpcyBjYXNlLWluc2Vuc2l0aXZlIChpbmRldGVybWluaXN0aWMpLCBGSyBpcyBjYXNlLXNl bnNpdGl2ZSAoZGV0ZXJtaW5pc3RpYykKKy0tIG1vcmUgdGhhbiBvbmUgcmVmZXJlbmNpbmcgKEZL KSByb3cgdmFsdWUgZXF1YWwgdG8gcmVmZXJlbmNlZCAoUEspIHJvdyBzaG91bGQgbm90IGFsbG93 ZWQKKy0tIGUuZy4gbm90IGFsbG93ZWQgY2FzZTogRksgdmFsdWVzIHsnYScsICdBIn0gYm90aCBl cXVhbCB0byBQSyB2YWx1ZSB7J0EnfQogQ1JFQVRFIFRBQkxFIHRlc3QxMXBrICh4IHRleHQgQ09M TEFURSBjYXNlX2luc2Vuc2l0aXZlIFBSSU1BUlkgS0VZKTsKLUlOU0VSVCBJTlRPIHRlc3QxMXBr IFZBTFVFUyAoJ2FiYycpLCAoJ2RlZicpLCAoJ2doaScpOwogQ1JFQVRFIFRBQkxFIHRlc3QxMWZr ICh4IHRleHQgQ09MTEFURSBjYXNlX3NlbnNpdGl2ZSBSRUZFUkVOQ0VTIHRlc3QxMXBrICh4KSBP TiBVUERBVEUgQ0FTQ0FERSBPTiBERUxFVEUgQ0FTQ0FERSk7Ci1JTlNFUlQgSU5UTyB0ZXN0MTFm ayBWQUxVRVMgKCdhYmMnKTsgIC0tIG9rCi1JTlNFUlQgSU5UTyB0ZXN0MTFmayBWQUxVRVMgKCdB QkMnKTsgIC0tIG9rCi1JTlNFUlQgSU5UTyB0ZXN0MTFmayBWQUxVRVMgKCd4eXonKTsgIC0tIGVy cm9yCi1FUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgInRlc3QxMWZrIiB2aW9sYXRl cyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJ0ZXN0MTFma194X2ZrZXkiCi1ERVRBSUw6ICBLZXkg KHgpPSh4eXopIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJ0ZXN0MTFwayIuCi1TRUxFQ1QgKiBG Uk9NIHRlc3QxMXBrOwotICB4ICAKLS0tLS0tCi0gYWJjCi0gZGVmCi0gZ2hpCi0oMyByb3dzKQot Ci1TRUxFQ1QgKiBGUk9NIHRlc3QxMWZrOwotICB4ICAKLS0tLS0tCi0gYWJjCi0gQUJDCi0oMiBy b3dzKQotCi0tLSBjYXNjYWRlIHVwZGF0ZSBldmVuIHRob3VnaCB0aGUgdmFsdWVzIGFyZSAiZXF1 YWwiIGluIHRoZSBQSyB0YWJsZQotVVBEQVRFIHRlc3QxMXBrIFNFVCB4ID0gJ0FCQycgV0hFUkUg eCA9ICdhYmMnOwotU0VMRUNUICogRlJPTSB0ZXN0MTFmazsKLSAgeCAgCi0tLS0tLQotIEFCQwot IEFCQwotKDIgcm93cykKLQotREVMRVRFIEZST00gdGVzdDExcGsgV0hFUkUgeCA9ICdhYmMnOwot U0VMRUNUICogRlJPTSB0ZXN0MTFwazsKLSAgeCAgCi0tLS0tLQotIGRlZgotIGdoaQotKDIgcm93 cykKLQotU0VMRUNUICogRlJPTSB0ZXN0MTFmazsKLSB4IAotLS0tCi0oMCByb3dzKQotCitFUlJP UjogIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgInRlc3QxMWZrX3hfZmtleSIgY2Fubm90IGJlIGlt cGxlbWVudGVkCitERVRBSUw6ICBDYW5ub3QgaGF2ZSBpbmRldGVybWluaXN0aWMgY29sbGF0aW9u cyBpbiBwcmltYXJ5IGtleSBmb3IgcmVmZXJlbmNlZCB0YWJsZSAidGVzdDExcGsiLgorSElOVDog IFlvdSBtYXkgbmVlZCB0byBtYWtlIHByaW1hcnkga2V5IGNvbnN0cmFpbnQncyBjb2xsYXRpb24g ZGV0ZXJtaW5pc3RpYy4KK2Ryb3AgdGFibGUgdGVzdDExcGs7CitDUkVBVEUgVEFCTEUgdGVzdDEy cGsgKHggdGV4dCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgdGVzdDEyZmsgKHggdGV4dCBS RUZFUkVOQ0VTIHRlc3QxMnBrIG9uIHVwZGF0ZSBjYXNjYWRlIG9uIGRlbGV0ZSBjYXNjYWRlKTsK Ky0tYWx0ZXIgdGFibGUgY2hhbmdlIHByaW1hcnkga2V5J3MgY29sbGF0aW9uIHRvIGluZGV0ZXJt aW5pc3RpYywgc2hvdWxkIGZhaWwuCithbHRlciB0YWJsZSB0ZXN0MTJwayBhbHRlciBjb2x1bW4g eCBzZXQgZGF0YSB0eXBlIHRleHQgQ09MTEFURSBpZ25vcmVfYWNjZW50X2Nhc2U7CitFUlJPUjog IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgInRlc3QxMmZrX3hfZmtleSIgY2Fubm90IGJlIGltcGxl bWVudGVkCitERVRBSUw6ICBDYW5ub3QgaGF2ZSBpbmRldGVybWluaXN0aWMgY29sbGF0aW9ucyBp biBwcmltYXJ5IGtleSBmb3IgcmVmZXJlbmNlZCB0YWJsZSAidGVzdDEycGsiLgorSElOVDogIFlv dSBtYXkgbmVlZCB0byBtYWtlIHByaW1hcnkga2V5IGNvbnN0cmFpbnQncyBjb2xsYXRpb24gZGV0 ZXJtaW5pc3RpYy4KK2FsdGVyIHRhYmxlIHRlc3QxMnBrIGFsdGVyIGNvbHVtbiB4IHNldCBkYXRh IHR5cGUgdGV4dF9kX2lnbm9yZV9hY2NlbnRfY2FzZTsKK0VSUk9SOiAgZm9yZWlnbiBrZXkgY29u c3RyYWludCAidGVzdDEyZmtfeF9ma2V5IiBjYW5ub3QgYmUgaW1wbGVtZW50ZWQKK0RFVEFJTDog IENhbm5vdCBoYXZlIGluZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25zIGluIHByaW1hcnkga2V5IGZv ciByZWZlcmVuY2VkIHRhYmxlICJ0ZXN0MTJwayIuCitISU5UOiAgWW91IG1heSBuZWVkIHRvIG1h a2UgcHJpbWFyeSBrZXkgY29uc3RyYWludCdzIGNvbGxhdGlvbiBkZXRlcm1pbmlzdGljLgorLS0t c2hvdWxkIGFsc28gZmFpbC4KK2FsdGVyIHRhYmxlIHRlc3QxMnBrIGFsdGVyIGNvbHVtbiB4IHNl dCBkYXRhIHR5cGUgdGV4dF9kX2lnbm9yZV9hY2NlbnRfY2FzZSBDT0xMQVRFICJDIjsKK0VSUk9S OiAgZm9yZWlnbiBrZXkgY29uc3RyYWludCAidGVzdDEyZmtfeF9ma2V5IiBjYW5ub3QgYmUgaW1w bGVtZW50ZWQKK0RFVEFJTDogIENhbm5vdCBoYXZlIGluZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb25z IGluIHByaW1hcnkga2V5IGZvciByZWZlcmVuY2VkIHRhYmxlICJ0ZXN0MTJwayIuCitISU5UOiAg WW91IG1heSBuZWVkIHRvIG1ha2UgcHJpbWFyeSBrZXkgY29uc3RyYWludCdzIGNvbGxhdGlvbiBk ZXRlcm1pbmlzdGljLgorZHJvcCB0YWJsZSB0ZXN0MTJwayx0ZXN0MTJmazsKKy0tYWx0ZXIgdGFi bGUgY2hhbmdlIGZvcmVpZ24ga2V5J3MgY29sbGF0aW9uLCBhbGwgdGhlc2UgY2FzZSBzaG91bGQg ZmFpbC4KK0NSRUFURSBUQUJMRSB0ZXN0MTNwayAoeCB0ZXh0IFBSSU1BUlkgS0VZKTsKK0NSRUFU RSBUQUJMRSB0ZXN0MTNmayAoeCB0ZXh0IFJFRkVSRU5DRVMgdGVzdDEzcGsgb24gdXBkYXRlIGNh c2NhZGUgb24gZGVsZXRlIGNhc2NhZGUpOworYWx0ZXIgdGFibGUgdGVzdDEzZmsgYWx0ZXIgY29s dW1uIHggc2V0IGRhdGEgdHlwZSB0ZXh0IENPTExBVEUgaWdub3JlX2FjY2VudF9jYXNlOworRVJS T1I6ICBmb3JlaWduIGtleSBjb25zdHJhaW50ICJ0ZXN0MTNma194X2ZrZXkiIGNhbm5vdCBiZSBp bXBsZW1lbnRlZAorREVUQUlMOiAgRm9yZWlnbiBrZXkgY29uc3RyYWludCBjYW5ub3QgdXNlIGlu ZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb24gZm9yIHJlZmVyZW5jaW5nIHRhYmxlICJ0ZXN0MTNmayIu CitISU5UOiAgWW91IG1heSBuZWVkIHRvIG1ha2UgdGhlIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQn cyBjb2xsYXRpb24gZGV0ZXJtaW5pc3RpYy4KK2FsdGVyIHRhYmxlIHRlc3QxM2ZrIGFsdGVyIGNv bHVtbiB4IHNldCBkYXRhIHR5cGUgdGV4dF9kX2lnbm9yZV9hY2NlbnRfY2FzZTsKK0VSUk9SOiAg Zm9yZWlnbiBrZXkgY29uc3RyYWludCAidGVzdDEzZmtfeF9ma2V5IiBjYW5ub3QgYmUgaW1wbGVt ZW50ZWQKK0RFVEFJTDogIEZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgY2Fubm90IHVzZSBpbmRldGVy bWluaXN0aWMgY29sbGF0aW9uIGZvciByZWZlcmVuY2luZyB0YWJsZSAidGVzdDEzZmsiLgorSElO VDogIFlvdSBtYXkgbmVlZCB0byBtYWtlIHRoZSBmb3JlaWduIGtleSBjb25zdHJhaW50J3MgY29s bGF0aW9uIGRldGVybWluaXN0aWMuCithbHRlciB0YWJsZSB0ZXN0MTNmayBhbHRlciBjb2x1bW4g eCBzZXQgZGF0YSB0eXBlIHRleHRfZF9pZ25vcmVfYWNjZW50X2Nhc2UgQ09MTEFURSBpZ25vcmVf YWNjZW50X2Nhc2U7CitFUlJPUjogIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgInRlc3QxM2ZrX3hf ZmtleSIgY2Fubm90IGJlIGltcGxlbWVudGVkCitERVRBSUw6ICBGb3JlaWduIGtleSBjb25zdHJh aW50IGNhbm5vdCB1c2UgaW5kZXRlcm1pbmlzdGljIGNvbGxhdGlvbiBmb3IgcmVmZXJlbmNpbmcg dGFibGUgInRlc3QxM2ZrIi4KK0hJTlQ6ICBZb3UgbWF5IG5lZWQgdG8gbWFrZSB0aGUgZm9yZWln biBrZXkgY29uc3RyYWludCdzIGNvbGxhdGlvbiBkZXRlcm1pbmlzdGljLgorYWx0ZXIgdGFibGUg dGVzdDEzZmsgYWx0ZXIgY29sdW1uIHggc2V0IGRhdGEgdHlwZSB0ZXh0X2RfaWdub3JlX2FjY2Vu dF9jYXNlIENPTExBVEUgIkMiOworRVJST1I6ICBmb3JlaWduIGtleSBjb25zdHJhaW50ICJ0ZXN0 MTNma194X2ZrZXkiIGNhbm5vdCBiZSBpbXBsZW1lbnRlZAorREVUQUlMOiAgRm9yZWlnbiBrZXkg Y29uc3RyYWludCBjYW5ub3QgdXNlIGluZGV0ZXJtaW5pc3RpYyBjb2xsYXRpb24gZm9yIHJlZmVy ZW5jaW5nIHRhYmxlICJ0ZXN0MTNmayIuCitISU5UOiAgWW91IG1heSBuZWVkIHRvIG1ha2UgdGhl IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQncyBjb2xsYXRpb24gZGV0ZXJtaW5pc3RpYy4KK2Ryb3Ag dGFibGUgdGVzdDEzcGssdGVzdDEzZms7CiAtLSBwYXJ0aXRpb25pbmcKIENSRUFURSBUQUJMRSB0 ZXN0MjAgKGEgaW50LCBiIHRleHQgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZlKSBQQVJUSVRJT04g QlkgTElTVCAoYik7CiBDUkVBVEUgVEFCTEUgdGVzdDIwXzEgUEFSVElUSU9OIE9GIHRlc3QyMCBG T1IgVkFMVUVTIElOICgnYWJjJyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9j b2xsYXRlLmljdS51dGY4LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbGxhdGUuaWN1LnV0 Zjguc3FsCmluZGV4IDgwZjI4YTk3ZDcuLmFkNDE4ZTg3ZWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2NvbGxhdGUuaWN1LnV0Zjguc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NvbGxhdGUuaWN1LnV0Zjguc3FsCkBAIC02ODgsMzggKzY4OCw0NiBAQCBTRUxFQ1QgKiBG Uk9NIHRlc3Q0IFdIRVJFIGIgPSAnQ290ZScgQ09MTEFURSBpZ25vcmVfYWNjZW50czsgIC0tIHN0 aWxsIGNhc2Utc2VucwogU0VMRUNUICogRlJPTSB0ZXN0NCBXSEVSRSBiID0gJ0NvdGUnIENPTExB VEUgY2FzZV9pbnNlbnNpdGl2ZTsKIAogLS0gZm9yZWlnbiBrZXlzIChzaG91bGQgdXNlIGNvbGxh dGlvbiBvZiBwcmltYXJ5IGtleSkKK0NSRUFURSBDT0xMQVRJT04gaWdub3JlX2FjY2VudF9jYXNl IChwcm92aWRlciA9IGljdSwgZGV0ZXJtaW5pc3RpYyA9IGZhbHNlLCBsb2NhbGUgPSAndW5kLXUt a3MtbGV2ZWwxJyk7CitDUkVBVEUgRE9NQUlOIHRleHRfZF9pZ25vcmVfYWNjZW50X2Nhc2UgQVMg dGV4dCBDT0xMQVRFIGlnbm9yZV9hY2NlbnRfY2FzZTsKIAotLS0gUEsgaXMgY2FzZS1zZW5zaXRp dmUsIEZLIGlzIGNhc2UtaW5zZW5zaXRpdmUKKy0tIFBLIGlzIGNhc2Utc2Vuc2l0aXZlIChkZXRl cm1pbmlzdGljKSwgRksgaXMgY2FzZS1pbnNlbnNpdGl2ZSAoaW5kZXRlcm1pbmlzdGljKS4KKy0t IG5vdCBPSywgbXVsdGlwbGUgUEstc2lkZSB2YWx1ZSBlcXVhbCB0byBvbmUgRkstc2lkZSB2YWx1 ZSBub3QgYWxsb3dlZAorLS0gZS5nLiBub3QgYWxsb3dlZCBjYXNlOiBQSyB2YWx1ZXMgeydhJywg J0EifSBib3RoIGVxdWFsIHRvIEZLIHZhbHVlIHsnQSd9CiBDUkVBVEUgVEFCTEUgdGVzdDEwcGsg KHggdGV4dCBDT0xMQVRFIGNhc2Vfc2Vuc2l0aXZlIFBSSU1BUlkgS0VZKTsKLUlOU0VSVCBJTlRP IHRlc3QxMHBrIFZBTFVFUyAoJ2FiYycpLCAoJ2RlZicpLCAoJ2doaScpOwogQ1JFQVRFIFRBQkxF IHRlc3QxMGZrICh4IHRleHQgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZlIFJFRkVSRU5DRVMgdGVz dDEwcGsgKHgpIE9OIFVQREFURSBDQVNDQURFIE9OIERFTEVURSBDQVNDQURFKTsKLUlOU0VSVCBJ TlRPIHRlc3QxMGZrIFZBTFVFUyAoJ2FiYycpOyAgLS0gb2sKLUlOU0VSVCBJTlRPIHRlc3QxMGZr IFZBTFVFUyAoJ0FCQycpOyAgLS0gZXJyb3IKLUlOU0VSVCBJTlRPIHRlc3QxMGZrIFZBTFVFUyAo J3h5eicpOyAgLS0gZXJyb3IKLVNFTEVDVCAqIEZST00gdGVzdDEwcGs7Ci1TRUxFQ1QgKiBGUk9N IHRlc3QxMGZrOwotLS0gcmVzdHJpY3QgdXBkYXRlIGV2ZW4gdGhvdWdoIHRoZSB2YWx1ZXMgYXJl ICJlcXVhbCIgaW4gdGhlIEZLIHRhYmxlCi1VUERBVEUgdGVzdDEwZmsgU0VUIHggPSAnQUJDJyBX SEVSRSB4ID0gJ2FiYyc7ICAtLSBlcnJvcgotU0VMRUNUICogRlJPTSB0ZXN0MTBmazsKLURFTEVU RSBGUk9NIHRlc3QxMHBrIFdIRVJFIHggPSAnYWJjJzsKLVNFTEVDVCAqIEZST00gdGVzdDEwcGs7 Ci1TRUxFQ1QgKiBGUk9NIHRlc3QxMGZrOwogCi0tLSBQSyBpcyBjYXNlLWluc2Vuc2l0aXZlLCBG SyBpcyBjYXNlLXNlbnNpdGl2ZQorCistLSBQSyBpcyBjYXNlLWluc2Vuc2l0aXZlIChpbmRldGVy bWluaXN0aWMpLCBGSyBpcyBjYXNlLXNlbnNpdGl2ZSAoZGV0ZXJtaW5pc3RpYykKKy0tIG1vcmUg dGhhbiBvbmUgcmVmZXJlbmNpbmcgKEZLKSByb3cgdmFsdWUgZXF1YWwgdG8gcmVmZXJlbmNlZCAo UEspIHJvdyBzaG91bGQgbm90IGFsbG93ZWQKKy0tIGUuZy4gbm90IGFsbG93ZWQgY2FzZTogRksg dmFsdWVzIHsnYScsICdBIn0gYm90aCBlcXVhbCB0byBQSyB2YWx1ZSB7J0EnfQogQ1JFQVRFIFRB QkxFIHRlc3QxMXBrICh4IHRleHQgQ09MTEFURSBjYXNlX2luc2Vuc2l0aXZlIFBSSU1BUlkgS0VZ KTsKLUlOU0VSVCBJTlRPIHRlc3QxMXBrIFZBTFVFUyAoJ2FiYycpLCAoJ2RlZicpLCAoJ2doaScp OwogQ1JFQVRFIFRBQkxFIHRlc3QxMWZrICh4IHRleHQgQ09MTEFURSBjYXNlX3NlbnNpdGl2ZSBS RUZFUkVOQ0VTIHRlc3QxMXBrICh4KSBPTiBVUERBVEUgQ0FTQ0FERSBPTiBERUxFVEUgQ0FTQ0FE RSk7Ci1JTlNFUlQgSU5UTyB0ZXN0MTFmayBWQUxVRVMgKCdhYmMnKTsgIC0tIG9rCi1JTlNFUlQg SU5UTyB0ZXN0MTFmayBWQUxVRVMgKCdBQkMnKTsgIC0tIG9rCi1JTlNFUlQgSU5UTyB0ZXN0MTFm ayBWQUxVRVMgKCd4eXonKTsgIC0tIGVycm9yCi1TRUxFQ1QgKiBGUk9NIHRlc3QxMXBrOwotU0VM RUNUICogRlJPTSB0ZXN0MTFmazsKLS0tIGNhc2NhZGUgdXBkYXRlIGV2ZW4gdGhvdWdoIHRoZSB2 YWx1ZXMgYXJlICJlcXVhbCIgaW4gdGhlIFBLIHRhYmxlCi1VUERBVEUgdGVzdDExcGsgU0VUIHgg PSAnQUJDJyBXSEVSRSB4ID0gJ2FiYyc7Ci1TRUxFQ1QgKiBGUk9NIHRlc3QxMWZrOwotREVMRVRF IEZST00gdGVzdDExcGsgV0hFUkUgeCA9ICdhYmMnOwotU0VMRUNUICogRlJPTSB0ZXN0MTFwazsK LVNFTEVDVCAqIEZST00gdGVzdDExZms7Citkcm9wIHRhYmxlIHRlc3QxMXBrOworCisKKworQ1JF QVRFIFRBQkxFIHRlc3QxMnBrICh4IHRleHQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIHRl c3QxMmZrICh4IHRleHQgUkVGRVJFTkNFUyB0ZXN0MTJwayBvbiB1cGRhdGUgY2FzY2FkZSBvbiBk ZWxldGUgY2FzY2FkZSk7CisKKy0tYWx0ZXIgdGFibGUgY2hhbmdlIHByaW1hcnkga2V5J3MgY29s bGF0aW9uIHRvIGluZGV0ZXJtaW5pc3RpYywgc2hvdWxkIGZhaWwuCithbHRlciB0YWJsZSB0ZXN0 MTJwayBhbHRlciBjb2x1bW4geCBzZXQgZGF0YSB0eXBlIHRleHQgQ09MTEFURSBpZ25vcmVfYWNj ZW50X2Nhc2U7CithbHRlciB0YWJsZSB0ZXN0MTJwayBhbHRlciBjb2x1bW4geCBzZXQgZGF0YSB0 eXBlIHRleHRfZF9pZ25vcmVfYWNjZW50X2Nhc2U7CisKKy0tLXNob3VsZCBhbHNvIGZhaWwuCith bHRlciB0YWJsZSB0ZXN0MTJwayBhbHRlciBjb2x1bW4geCBzZXQgZGF0YSB0eXBlIHRleHRfZF9p Z25vcmVfYWNjZW50X2Nhc2UgQ09MTEFURSAiQyI7Citkcm9wIHRhYmxlIHRlc3QxMnBrLHRlc3Qx MmZrOworCisKKworLS1hbHRlciB0YWJsZSBjaGFuZ2UgZm9yZWlnbiBrZXkncyBjb2xsYXRpb24s IGFsbCB0aGVzZSBjYXNlIHNob3VsZCBmYWlsLgorQ1JFQVRFIFRBQkxFIHRlc3QxM3BrICh4IHRl eHQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIHRlc3QxM2ZrICh4IHRleHQgUkVGRVJFTkNF UyB0ZXN0MTNwayBvbiB1cGRhdGUgY2FzY2FkZSBvbiBkZWxldGUgY2FzY2FkZSk7CithbHRlciB0 YWJsZSB0ZXN0MTNmayBhbHRlciBjb2x1bW4geCBzZXQgZGF0YSB0eXBlIHRleHQgQ09MTEFURSBp Z25vcmVfYWNjZW50X2Nhc2U7CithbHRlciB0YWJsZSB0ZXN0MTNmayBhbHRlciBjb2x1bW4geCBz ZXQgZGF0YSB0eXBlIHRleHRfZF9pZ25vcmVfYWNjZW50X2Nhc2U7CithbHRlciB0YWJsZSB0ZXN0 MTNmayBhbHRlciBjb2x1bW4geCBzZXQgZGF0YSB0eXBlIHRleHRfZF9pZ25vcmVfYWNjZW50X2Nh c2UgQ09MTEFURSBpZ25vcmVfYWNjZW50X2Nhc2U7CithbHRlciB0YWJsZSB0ZXN0MTNmayBhbHRl ciBjb2x1bW4geCBzZXQgZGF0YSB0eXBlIHRleHRfZF9pZ25vcmVfYWNjZW50X2Nhc2UgQ09MTEFU RSAiQyI7Citkcm9wIHRhYmxlIHRlc3QxM3BrLHRlc3QxM2ZrOwogCiAtLSBwYXJ0aXRpb25pbmcK IENSRUFURSBUQUJMRSB0ZXN0MjAgKGEgaW50LCBiIHRleHQgQ09MTEFURSBjYXNlX2luc2Vuc2l0 aXZlKSBQQVJUSVRJT04gQlkgTElTVCAoYik7CgpiYXNlLWNvbW1pdDogMzFhOTg5MzRkMTY5OTAw N2I1MGFlZmFlZGQ2OGFiNGQ2YjQyZTNiNAotLSAKMi4zNC4xCgo= --000000000000be983c062145a74c--