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 1rUQzF-00Aric-H1 for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jan 2024 12:43:43 +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 1rUQzE-00E5AK-Ly for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jan 2024 12:43:40 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rUQzE-00E5AB-55 for pgsql-hackers@lists.postgresql.org; Mon, 29 Jan 2024 12:43:40 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rUQzA-004L2D-Jb for pgsql-hackers@lists.postgresql.org; Mon, 29 Jan 2024 12:43:39 +0000 Received: from mail.postgrespro.ru (webmail.mstn.postgrespro.ru [192.168.2.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: a.pyhalov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id E87C7E2043F; Mon, 29 Jan 2024 15:43:34 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1706532215; bh=bmyuSOaF0HkSj4h4d4XuS7uehQfXSJxmAZNMU+NIr4s=; h=Date:From:To:Cc:Subject:In-Reply-To:References:User-Agent: Message-ID:From; b=aNBpMy7HnyyAEyeMszFHNXNNgCMsLNNM8BAqxf1YFwkYDMvjftjOm5XlPVQ1TpuCz cxjIiflwaAD0OBFka1Mf8/KXX4jf42bNv1F4yzh2LHxAWiiQLkelR02uOb3bmQiU7s rlCvXo1cObq98rb/C447EX6uH6hVGiNLz1i9vwlZCAMbwk9Ihpsw8BT87L4mQZQPey iGjtzLPUWfHG+SAmLw3nOtC0vDv56ppBIisGdyHspBfJUBdtzPOTfiIgHJD/YAv5sk 6q+4/8+YhfzwMrPI6/DACOGPTHEROIGUchN2u0PwkDJGM+xFDlo/VCm4CJVBZvd7NM XyiNwUrOBLJMw== MIME-Version: 1.0 Date: Mon, 29 Jan 2024 15:43:34 +0300 From: Alexander Pyhalov To: Justin Pryzby Cc: Ilya Gladyshev , pgsql-hackers@lists.postgresql.org, Masahiko Sawada , Michael Paquier , =?UTF-8?Q?=E6=9D=8E=E6=9D=B0=28?= =?UTF-8?Q?=E6=85=8E=E8=BF=BD=29?= , =?UTF-8?Q?=E6=9B=BE=E6=96=87=E6=97=8C=28=E4=B9=89=E4=BB=8E=29?= , Alvaro Herrera Subject: Re: CREATE INDEX CONCURRENTLY on partitioned index In-Reply-To: <37d3f0a984a15f6465b83027eed8c588@postgrespro.ru> References: <20210226182019.GU20769@telsasoft.com> <04657227cc37b6353cf0c72bedac70cc@postgrespro.ru> <20220628183309.GD28130@telsasoft.com> <20221121030011.GU11463@telsasoft.com> <5bafee07d0e1b3ce5359d1656c90b4836d7cb6a1.camel@gmail.com> <20221204190935.GD14156@telsasoft.com> <37d3f0a984a15f6465b83027eed8c588@postgrespro.ru> User-Agent: Roundcube Webmail/1.6.5 Message-ID: X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_6c75021449aac1d20907ca4e5b0dc3b9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_6c75021449aac1d20907ca4e5b0dc3b9 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi. I've rebased patch on master and it'seems to me there's one more issue - when we call DefineIndexConcurrentInternal() in partitioned case, it waits for transactions, locking tableId, not tabrelid - heaprelid LockRelId is constructed for parent index relation, not for child index relation. Attaching fixed version. Also I'm not sure what to do with locking of child relations. If we don't do anything, you can drop one of the partitioned table childs while CIC is in progress, and get error ERROR: cache lookup failed for index 16399 If you try to lock all child tables in CIC session, you'll get deadlocks. -- Best regards, Alexander Pyhalov, Postgres Professional --=_6c75021449aac1d20907ca4e5b0dc3b9 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-Allow-CREATE-INDEX-CONCURRENTLY-on-partitioned-table.patch Content-Disposition: attachment; filename=0001-Allow-CREATE-INDEX-CONCURRENTLY-on-partitioned-table.patch; size=20048 RnJvbSAzN2ExM2I3ZmExYzMyNzdiOWQwMzhiN2EwYzc1Mzk5ZmYwNWIyOGE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKdXN0aW4gUHJ5emJ5IDxwcnl6YnlAdGVsc2Fzb2Z0LmNvbT4K RGF0ZTogTW9uLCAyOSBKYW4gMjAyNCAxMDo0MTowMSArMDMwMApTdWJqZWN0OiBbUEFUQ0hdIEFs bG93IENSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgb24gcGFydGl0aW9uZWQgdGFibGUKCi0tLQog ZG9jL3NyYy9zZ21sL2RkbC5zZ21sICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIGRvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgICAgIHwgIDE0ICstCiBzcmMvYmFja2VuZC9jb21t YW5kcy9pbmRleGNtZHMuYyAgICAgICB8IDIwMCArKysrKysrKysrKysrKysrKystLS0tLS0tCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dCB8IDEyNyArKysrKysrKysrKysr KystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9pbmRleGluZy5zcWwgICAgICB8ICAyNiArKystCiA1 IGZpbGVzIGNoYW5nZWQsIDI5NiBpbnNlcnRpb25zKCspLCA3NSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvZGRsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZGRsLnNnbWwKaW5k ZXggMDc1ZmYzMjk5MTIuLjhlZTgwYzQwZTNiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZGRs LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2RkbC5zZ21sCkBAIC00MTk0LDkgKzQxOTQsNyBAQCBB TFRFUiBUQUJMRSBtZWFzdXJlbWVudCBBVFRBQ0ggUEFSVElUSU9OIG1lYXN1cmVtZW50X3kyMDA4 bTAyCiAgICAgIHNvIHRoYXQgdGhleSBhcmUgYXBwbGllZCBhdXRvbWF0aWNhbGx5IHRvIHRoZSBl bnRpcmUgaGllcmFyY2h5LgogICAgICBUaGlzIGlzIHZlcnkKICAgICAgY29udmVuaWVudCwgYXMg bm90IG9ubHkgd2lsbCB0aGUgZXhpc3RpbmcgcGFydGl0aW9ucyBiZWNvbWUgaW5kZXhlZCwgYnV0 Ci0gICAgIGFsc28gYW55IHBhcnRpdGlvbnMgdGhhdCBhcmUgY3JlYXRlZCBpbiB0aGUgZnV0dXJl IHdpbGwuICBPbmUgbGltaXRhdGlvbiBpcwotICAgICB0aGF0IGl0J3Mgbm90IHBvc3NpYmxlIHRv IHVzZSB0aGUgPGxpdGVyYWw+Q09OQ1VSUkVOVExZPC9saXRlcmFsPgotICAgICBxdWFsaWZpZXIg d2hlbiBjcmVhdGluZyBzdWNoIGEgcGFydGl0aW9uZWQgaW5kZXguICBUbyBhdm9pZCBsb25nIGxv Y2sKKyAgICAgYWxzbyBhbnkgcGFydGl0aW9ucyB0aGF0IGFyZSBjcmVhdGVkIGluIHRoZSBmdXR1 cmUgd2lsbC4gIFRvIGF2b2lkIGxvbmcgbG9jawogICAgICB0aW1lcywgaXQgaXMgcG9zc2libGUg dG8gdXNlIDxjb21tYW5kPkNSRUFURSBJTkRFWCBPTiBPTkxZPC9jb21tYW5kPgogICAgICB0aGUg cGFydGl0aW9uZWQgdGFibGU7IHN1Y2ggYW4gaW5kZXggaXMgbWFya2VkIGludmFsaWQsIGFuZCB0 aGUgcGFydGl0aW9ucwogICAgICBkbyBub3QgZ2V0IHRoZSBpbmRleCBhcHBsaWVkIGF1dG9tYXRp Y2FsbHkuICBUaGUgaW5kZXhlcyBvbiBwYXJ0aXRpb25zIGNhbgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2lu ZGV4LnNnbWwKaW5kZXggNDA5ODZhYTUwMmYuLmIwNTEwMmVmZGFmIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3Jl YXRlX2luZGV4LnNnbWwKQEAgLTY0NSw3ICs2NDUsMTAgQEAgQ1JFQVRFIFsgVU5JUVVFIF0gSU5E RVggWyBDT05DVVJSRU5UTFkgXSBbIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFz cz0KICAgIDxwYXJhPgogICAgIElmIGEgcHJvYmxlbSBhcmlzZXMgd2hpbGUgc2Nhbm5pbmcgdGhl IHRhYmxlLCBzdWNoIGFzIGEgZGVhZGxvY2sgb3IgYQogICAgIHVuaXF1ZW5lc3MgdmlvbGF0aW9u IGluIGEgdW5pcXVlIGluZGV4LCB0aGUgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPgot ICAgIGNvbW1hbmQgd2lsbCBmYWlsIGJ1dCBsZWF2ZSBiZWhpbmQgYW4gPHF1b3RlPmludmFsaWQ8 L3F1b3RlPiBpbmRleC4gVGhpcyBpbmRleAorICAgIGNvbW1hbmQgd2lsbCBmYWlsIGJ1dCBsZWF2 ZSBiZWhpbmQgYW4gPHF1b3RlPmludmFsaWQ8L3F1b3RlPiBpbmRleC4KKyAgICBJZiB0aGlzIGhh cHBlbnMgd2hpbGUgYnVpbGQgYW4gaW5kZXggY29uY3VycmVudGx5IG9uIGEgcGFydGl0aW9uZWQK KyAgICB0YWJsZSwgdGhlIGNvbW1hbmQgY2FuIGFsc28gbGVhdmUgYmVoaW5kIDxxdW90ZT52YWxp ZDwvcXVvdGU+IG9yCisgICAgPHF1b3RlPmludmFsaWQ8L3F1b3RlPiBpbmRleGVzIG9uIHRhYmxl IHBhcnRpdGlvbnMuICBUaGUgaW52YWxpZCBpbmRleAogICAgIHdpbGwgYmUgaWdub3JlZCBmb3Ig cXVlcnlpbmcgcHVycG9zZXMgYmVjYXVzZSBpdCBtaWdodCBiZSBpbmNvbXBsZXRlOwogICAgIGhv d2V2ZXIgaXQgd2lsbCBzdGlsbCBjb25zdW1lIHVwZGF0ZSBvdmVyaGVhZC4gVGhlIDxhcHBsaWNh dGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4KICAgICA8Y29tbWFuZD5cZDwvY29tbWFuZD4gY29tbWFu ZCB3aWxsIHJlcG9ydCBzdWNoIGFuIGluZGV4IGFzIDxsaXRlcmFsPklOVkFMSUQ8L2xpdGVyYWw+ OgpAQCAtNjkyLDE1ICs2OTUsNiBAQCBJbmRleGVzOgogICAgIGNhbm5vdC4KICAgIDwvcGFyYT4K IAotICAgPHBhcmE+Ci0gICAgQ29uY3VycmVudCBidWlsZHMgZm9yIGluZGV4ZXMgb24gcGFydGl0 aW9uZWQgdGFibGVzIGFyZSBjdXJyZW50bHkgbm90Ci0gICAgc3VwcG9ydGVkLiAgSG93ZXZlciwg eW91IG1heSBjb25jdXJyZW50bHkgYnVpbGQgdGhlIGluZGV4IG9uIGVhY2gKLSAgICBwYXJ0aXRp b24gaW5kaXZpZHVhbGx5IGFuZCB0aGVuIGZpbmFsbHkgY3JlYXRlIHRoZSBwYXJ0aXRpb25lZCBp bmRleAotICAgIG5vbi1jb25jdXJyZW50bHkgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSB0aW1lIHdo ZXJlIHdyaXRlcyB0byB0aGUKLSAgICBwYXJ0aXRpb25lZCB0YWJsZSB3aWxsIGJlIGxvY2tlZCBv dXQuICBJbiB0aGlzIGNhc2UsIGJ1aWxkaW5nIHRoZQotICAgIHBhcnRpdGlvbmVkIGluZGV4IGlz IGEgbWV0YWRhdGEgb25seSBvcGVyYXRpb24uCi0gICA8L3BhcmE+Ci0KICAgPC9yZWZzZWN0Mj4K ICA8L3JlZnNlY3QxPgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNt ZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IGFiOGI4MWIzMDIw Li42NTQ3N2FlYjNhOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRz LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKQEAgLTkzLDYgKzkzLDEx IEBAIHN0YXRpYyBjaGFyICpDaG9vc2VJbmRleE5hbWUoY29uc3QgY2hhciAqdGFibmFtZSwgT2lk IG5hbWVzcGFjZUlkLAogCQkJCQkJCSBib29sIHByaW1hcnksIGJvb2wgaXNjb25zdHJhaW50KTsK IHN0YXRpYyBjaGFyICpDaG9vc2VJbmRleE5hbWVBZGRpdGlvbihjb25zdCBMaXN0ICpjb2xuYW1l cyk7CiBzdGF0aWMgTGlzdCAqQ2hvb3NlSW5kZXhDb2x1bW5OYW1lcyhjb25zdCBMaXN0ICppbmRl eEVsZW1zKTsKK3N0YXRpYyB2b2lkIERlZmluZUluZGV4Q29uY3VycmVudEludGVybmFsKE9pZCBy ZWxhdGlvbklkLAorCQkJCQkJCSAgT2lkIGluZGV4UmVsYXRpb25JZCwKKwkJCQkJCQkgIEluZGV4 SW5mbyAqaW5kZXhJbmZvLAorCQkJCQkJCSAgTE9DS1RBRyBoZWFwbG9ja3RhZywKKwkJCQkJCQkg IExvY2tSZWxJZCBoZWFwcmVsaWQpOwogc3RhdGljIHZvaWQgUmVpbmRleEluZGV4KGNvbnN0IFJh bmdlVmFyICppbmRleFJlbGF0aW9uLCBjb25zdCBSZWluZGV4UGFyYW1zICpwYXJhbXMsCiAJCQkJ CQkgYm9vbCBpc1RvcExldmVsKTsKIHN0YXRpYyB2b2lkIFJhbmdlVmFyQ2FsbGJhY2tGb3JSZWlu ZGV4SW5kZXgoY29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9uLApAQCAtNTU0LDcgKzU1OSw2IEBAIERl ZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCWJvb2wJCWFtaXNzdW1tYXJpemluZzsKIAlhbW9wdGlv bnNfZnVuY3Rpb24gYW1vcHRpb25zOwogCWJvb2wJCXBhcnRpdGlvbmVkOwotCWJvb2wJCXNhZmVf aW5kZXg7CiAJRGF0dW0JCXJlbG9wdGlvbnM7CiAJaW50MTYJICAgKmNvbG9wdGlvbnM7CiAJSW5k ZXhJbmZvICAqaW5kZXhJbmZvOwpAQCAtNTYyLDEyICs1NjYsMTAgQEAgRGVmaW5lSW5kZXgoT2lk IHRhYmxlSWQsCiAJYml0czE2CQljb25zdHJfZmxhZ3M7CiAJaW50CQkJbnVtYmVyT2ZBdHRyaWJ1 dGVzOwogCWludAkJCW51bWJlck9mS2V5QXR0cmlidXRlczsKLQlUcmFuc2FjdGlvbklkIGxpbWl0 WG1pbjsKIAlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CiAJTG9ja1JlbElkCWhlYXByZWxpZDsKIAlM T0NLVEFHCQloZWFwbG9ja3RhZzsKIAlMT0NLTU9ERQlsb2NrbW9kZTsKLQlTbmFwc2hvdAlzbmFw c2hvdDsKIAlPaWQJCQlyb290X3NhdmVfdXNlcmlkOwogCWludAkJCXJvb3Rfc2F2ZV9zZWNfY29u dGV4dDsKIAlpbnQJCQlyb290X3NhdmVfbmVzdGxldmVsOwpAQCAtNjk3LDIwICs2OTksNiBAQCBE ZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkgKiBwYXJ0aXRpb24uCiAJICovCiAJcGFydGl0aW9u ZWQgPSByZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOwot CWlmIChwYXJ0aXRpb25lZCkKLQl7Ci0JCS8qCi0JCSAqIE5vdGU6IHdlIGNoZWNrICdzdG10LT5j b25jdXJyZW50JyByYXRoZXIgdGhhbiAnY29uY3VycmVudCcsIHNvIHRoYXQKLQkJICogdGhlIGVy cm9yIGlzIHRocm93biBhbHNvIGZvciB0ZW1wb3JhcnkgdGFibGVzLiAgU2VlbXMgYmV0dGVyIHRv IGJlCi0JCSAqIGNvbnNpc3RlbnQsIGV2ZW4gdGhvdWdoIHdlIGNvdWxkIGRvIGl0IG9uIHRlbXBv cmFyeSB0YWJsZSBiZWNhdXNlCi0JCSAqIHdlJ3JlIG5vdCBhY3R1YWxseSBkb2luZyBpdCBjb25j dXJyZW50bHkuCi0JCSAqLwotCQlpZiAoc3RtdC0+Y29uY3VycmVudCkKLQkJCWVyZXBvcnQoRVJS T1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJ IGVycm1zZygiY2Fubm90IGNyZWF0ZSBpbmRleCBvbiBwYXJ0aXRpb25lZCB0YWJsZSBcIiVzXCIg Y29uY3VycmVudGx5IiwKLQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOwot CX0KIAogCS8qCiAJICogRG9uJ3QgdHJ5IHRvIENSRUFURSBJTkRFWCBvbiB0ZW1wIHRhYmxlcyBv ZiBvdGhlciBiYWNrZW5kcy4KQEAgLTExMDAsMTAgKzEwODgsNiBAQCBEZWZpbmVJbmRleChPaWQg dGFibGVJZCwKIAkJfQogCX0KIAotCS8qIElzIGluZGV4IHNhZmUgZm9yIG90aGVycyB0byBpZ25v cmU/ICBTZWUgc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MoKSAqLwotCXNhZmVfaW5kZXggPSBpbmRl eEluZm8tPmlpX0V4cHJlc3Npb25zID09IE5JTCAmJgotCQlpbmRleEluZm8tPmlpX1ByZWRpY2F0 ZSA9PSBOSUw7Ci0KIAkvKgogCSAqIFJlcG9ydCBpbmRleCBjcmVhdGlvbiBpZiBhcHByb3ByaWF0 ZSAoZGVsYXkgdGhpcyB0aWxsIGFmdGVyIG1vc3Qgb2YgdGhlCiAJICogZXJyb3IgY2hlY2tzKQpA QCAtMTE2OCw2ICsxMTUyLDExIEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCQlpZiAocGQt Pm5wYXJ0cyAhPSAwKQogCQkJZmxhZ3MgfD0gSU5ERVhfQ1JFQVRFX0lOVkFMSUQ7CiAJfQorCWVs c2UgaWYgKGNvbmN1cnJlbnQgJiYgT2lkSXNWYWxpZChwYXJlbnRJbmRleElkKSkKKwl7CisJCS8q IElmIGNvbmN1cnJlbnQsIGluaXRpYWxseSBidWlsZCBpbmRleCBwYXJ0aXRpb25zIGFzICJpbnZh bGlkIiAqLworCQlmbGFncyB8PSBJTkRFWF9DUkVBVEVfSU5WQUxJRDsKKwl9CiAKIAlpZiAoc3Rt dC0+ZGVmZXJyYWJsZSkKIAkJY29uc3RyX2ZsYWdzIHw9IElOREVYX0NPTlNUUl9DUkVBVEVfREVG RVJSQUJMRTsKQEAgLTE1MTYsMjEgKzE1MDUsNyBAQCBEZWZpbmVJbmRleChPaWQgdGFibGVJZCwK IAkJCSAqLwogCQkJaWYgKGludmFsaWRhdGVfcGFyZW50KQogCQkJewotCQkJCVJlbGF0aW9uCXBn X2luZGV4ID0gdGFibGVfb3BlbihJbmRleFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwot CQkJCUhlYXBUdXBsZQl0dXAsCi0JCQkJCQkJbmV3dHVwOwotCi0JCQkJdHVwID0gU2VhcmNoU3lz Q2FjaGUxKElOREVYUkVMSUQsCi0JCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oaW5kZXhSZWxh dGlvbklkKSk7Ci0JCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCi0JCQkJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBpbmRleCAldSIsCi0JCQkJCQkgaW5kZXhSZWxh dGlvbklkKTsKLQkJCQluZXd0dXAgPSBoZWFwX2NvcHl0dXBsZSh0dXApOwotCQkJCSgoRm9ybV9w Z19pbmRleCkgR0VUU1RSVUNUKG5ld3R1cCkpLT5pbmRpc3ZhbGlkID0gZmFsc2U7Ci0JCQkJQ2F0 YWxvZ1R1cGxlVXBkYXRlKHBnX2luZGV4LCAmdHVwLT50X3NlbGYsIG5ld3R1cCk7Ci0JCQkJUmVs ZWFzZVN5c0NhY2hlKHR1cCk7Ci0JCQkJdGFibGVfY2xvc2UocGdfaW5kZXgsIFJvd0V4Y2x1c2l2 ZUxvY2spOwotCQkJCWhlYXBfZnJlZXR1cGxlKG5ld3R1cCk7CisJCQkJaW5kZXhfc2V0X3N0YXRl X2ZsYWdzKGluZGV4UmVsYXRpb25JZCwgSU5ERVhfRFJPUF9DTEVBUl9WQUxJRCk7CiAKIAkJCQkv KgogCQkJCSAqIENDSSBoZXJlIHRvIG1ha2UgdGhpcyB1cGRhdGUgdmlzaWJsZSwgaW4gY2FzZSB0 aGlzIHJlY3Vyc2VzCkBAIC0xNTQyLDM3ICsxNTE3LDQ5IEBAIERlZmluZUluZGV4KE9pZCB0YWJs ZUlkLAogCiAJCS8qCiAJCSAqIEluZGV4ZXMgb24gcGFydGl0aW9uZWQgdGFibGVzIGFyZSBub3Qg dGhlbXNlbHZlcyBidWlsdCwgc28gd2UncmUKLQkJICogZG9uZSBoZXJlLgorCQkgKiBkb25lIGhl cmUgaW4gdGhlIG5vbi1jb25jdXJyZW50IGNhc2UuCiAJCSAqLwotCQlBdEVPWGFjdF9HVUMoZmFs c2UsIHJvb3Rfc2F2ZV9uZXN0bGV2ZWwpOwotCQlTZXRVc2VySWRBbmRTZWNDb250ZXh0KHJvb3Rf c2F2ZV91c2VyaWQsIHJvb3Rfc2F2ZV9zZWNfY29udGV4dCk7Ci0JCXRhYmxlX2Nsb3NlKHJlbCwg Tm9Mb2NrKTsKLQkJaWYgKCFPaWRJc1ZhbGlkKHBhcmVudEluZGV4SWQpKQotCQkJcGdzdGF0X3By b2dyZXNzX2VuZF9jb21tYW5kKCk7Ci0JCWVsc2UKKwkJaWYgKCFjb25jdXJyZW50KQogCQl7Ci0J CQkvKiBVcGRhdGUgcHJvZ3Jlc3MgZm9yIGFuIGludGVybWVkaWF0ZSBwYXJ0aXRpb25lZCBpbmRl eCBpdHNlbGYgKi8KLQkJCXBnc3RhdF9wcm9ncmVzc19pbmNyX3BhcmFtKFBST0dSRVNTX0NSRUFU RUlEWF9QQVJUSVRJT05TX0RPTkUsIDEpOwotCQl9CisJCQlBdEVPWGFjdF9HVUMoZmFsc2UsIHJv b3Rfc2F2ZV9uZXN0bGV2ZWwpOworCQkJU2V0VXNlcklkQW5kU2VjQ29udGV4dChyb290X3NhdmVf dXNlcmlkLCByb290X3NhdmVfc2VjX2NvbnRleHQpOworCQkJdGFibGVfY2xvc2UocmVsLCBOb0xv Y2spOwogCi0JCXJldHVybiBhZGRyZXNzOworCQkJaWYgKCFPaWRJc1ZhbGlkKHBhcmVudEluZGV4 SWQpKQorCQkJCXBnc3RhdF9wcm9ncmVzc19lbmRfY29tbWFuZCgpOworCQkJZWxzZQorCQkJewor CQkJCS8qCisJCQkJICogVXBkYXRlIHByb2dyZXNzIGZvciBhbiBpbnRlcm1lZGlhdGUgcGFydGl0 aW9uZWQgaW5kZXgKKwkJCQkgKiBpdHNlbGYKKwkJCQkgKi8KKwkJCQlwZ3N0YXRfcHJvZ3Jlc3Nf aW5jcl9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEFSVElUSU9OU19ET05FLCAxKTsKKwkJCX0K KworCQkJcmV0dXJuIGFkZHJlc3M7CisJCX0KIAl9CiAKIAlBdEVPWGFjdF9HVUMoZmFsc2UsIHJv b3Rfc2F2ZV9uZXN0bGV2ZWwpOwogCVNldFVzZXJJZEFuZFNlY0NvbnRleHQocm9vdF9zYXZlX3Vz ZXJpZCwgcm9vdF9zYXZlX3NlY19jb250ZXh0KTsKIAotCWlmICghY29uY3VycmVudCkKKwkvKgor CSAqIEFsbCBkb25lIGluIHRoZSBub24tY29uY3VycmVudCBjYXNlLCBhbmQgd2hlbiBidWlsZGlu ZyBjYXRhbG9nIGVudHJpZXMKKwkgKiBvZiBwYXJ0aXRpb25zIGZvciBDSUMuCisJICovCisJaWYg KCFjb25jdXJyZW50IHx8IE9pZElzVmFsaWQocGFyZW50SW5kZXhJZCkpCiAJewotCQkvKiBDbG9z ZSB0aGUgaGVhcCBhbmQgd2UncmUgZG9uZSwgaW4gdGhlIG5vbi1jb25jdXJyZW50IGNhc2UgKi8K IAkJdGFibGVfY2xvc2UocmVsLCBOb0xvY2spOwogCiAJCS8qCiAJCSAqIElmIHRoaXMgaXMgdGhl IHRvcC1sZXZlbCBpbmRleCwgdGhlIGNvbW1hbmQgaXMgZG9uZSBvdmVyYWxsOwotCQkgKiBvdGhl cndpc2UsIGluY3JlbWVudCBwcm9ncmVzcyB0byByZXBvcnQgb25lIGNoaWxkIGluZGV4IGlzIGRv bmUuCisJCSAqIG90aGVyd2lzZSAod2hlbiBiZWluZyBjYWxsZWQgcmVjdXJzaXZlbHkpLCBpbmNy ZW1lbnQgcHJvZ3Jlc3MgdG8KKwkJICogcmVwb3J0IHRoYXQgb25lIGNoaWxkIGluZGV4IGlzIGRv bmUuICBFeGNlcHQgaW4gdGhlIGNvbmN1cnJlbnQKKwkJICogKGNhdGFsb2ctb25seSkgY2FzZSwg d2hpY2ggaXMgaGFuZGxlZCBsYXRlci4KIAkJICovCiAJCWlmICghT2lkSXNWYWxpZChwYXJlbnRJ bmRleElkKSkKIAkJCXBnc3RhdF9wcm9ncmVzc19lbmRfY29tbWFuZCgpOwotCQllbHNlCisJCWVs c2UgaWYgKCFjb25jdXJyZW50KQogCQkJcGdzdGF0X3Byb2dyZXNzX2luY3JfcGFyYW0oUFJPR1JF U1NfQ1JFQVRFSURYX1BBUlRJVElPTlNfRE9ORSwgMSk7CiAKIAkJcmV0dXJuIGFkZHJlc3M7CkBA IC0xNTgzLDYgKzE1NzAsMTEzIEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCVNFVF9MT0NL VEFHX1JFTEFUSU9OKGhlYXBsb2NrdGFnLCBoZWFwcmVsaWQuZGJJZCwgaGVhcHJlbGlkLnJlbElk KTsKIAl0YWJsZV9jbG9zZShyZWwsIE5vTG9jayk7CiAKKwlpZiAoIXBhcnRpdGlvbmVkKQorCXsK KwkJLyogQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBvbiBhIG5vbnBhcnRpdGlvbmVkIHRhYmxl ICovCisJCURlZmluZUluZGV4Q29uY3VycmVudEludGVybmFsKHRhYmxlSWQsIGluZGV4UmVsYXRp b25JZCwKKwkJCQkJCQkJCSAgaW5kZXhJbmZvLCBoZWFwbG9ja3RhZywgaGVhcHJlbGlkKTsKKwkJ cGdzdGF0X3Byb2dyZXNzX2VuZF9jb21tYW5kKCk7CisJCXJldHVybiBhZGRyZXNzOworCX0KKwll bHNlCisJeworCQkvKgorCQkgKiBGb3IgQ0lDIG9uIGEgcGFydGl0aW9uZWQgdGFibGUsIGZpbmlz aCBieSBidWlsZGluZyBpbmRleGVzIG9uCisJCSAqIHBhcnRpdGlvbnMKKwkJICovCisKKwkJTGlz dENlbGwgICAqbGM7CisJCUxpc3QJICAgKmNoaWxkczsKKwkJTGlzdAkgICAqdG9zZXR2YWxpZCA9 IE5JTDsKKwkJTWVtb3J5Q29udGV4dCBjaWNfY29udGV4dCwKKwkJCQkJb2xkX2NvbnRleHQ7CisK KwkJLyogQ3JlYXRlIHNwZWNpYWwgbWVtb3J5IGNvbnRleHQgZm9yIGNyb3NzLXRyYW5zYWN0aW9u IHN0b3JhZ2UgKi8KKwkJY2ljX2NvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoUG9ydGFs Q29udGV4dCwKKwkJCQkJCQkJCQkJIkNyZWF0ZSBpbmRleCBjb25jdXJyZW50bHkiLAorCQkJCQkJ CQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCQlvbGRfY29udGV4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhjaWNfY29udGV4dCk7CisJCWNoaWxkcyA9IGZpbmRfYWxsX2luaGVyaXRv cnMoaW5kZXhSZWxhdGlvbklkLCBTaGFyZUxvY2ssIE5VTEwpOworCQlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkX2NvbnRleHQpOworCisJCWZvcmVhY2gobGMsIGNoaWxkcykKKwkJeworCQkJT2lk CQkJaW5kcmVsaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJCU9pZAkJCXRhYnJlbGlkOworCQkJY2hh cgkJcmVsa2luZDsKKworCQkJLyoKKwkJCSAqIFByZS1leGlzdGluZyBwYXJ0aXRpb25zIHdoaWNo IHdlcmUgQVRUQUNIRUQgd2VyZSBhbHJlYWR5CisJCQkgKiBjb3VudGVkIGluIHRoZSBwcm9ncmVz cyByZXBvcnQuCisJCQkgKi8KKwkJCWlmIChnZXRfaW5kZXhfaXN2YWxpZChpbmRyZWxpZCkpCisJ CQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBQYXJ0aXRpb25lZCBpbmRleGVzIGFyZSBjb3Vu dGVkIGluIHRoZSBwcm9ncmVzcyByZXBvcnQsIGJ1dAorCQkJICogZG9uJ3QgbmVlZCB0byBiZSBm dXJ0aGVyIHByb2Nlc3NlZC4KKwkJCSAqLworCQkJcmVsa2luZCA9IGdldF9yZWxfcmVsa2luZChp bmRyZWxpZCk7CisJCQlpZiAoIVJFTEtJTkRfSEFTX1NUT1JBR0UocmVsa2luZCkpCisJCQl7CisJ CQkJLyogVGhlIHRvcGxldmVsIGluZGV4IGRvZXNuJ3QgY291bnQgdG93YXJkcyAicGFydGl0aW9u cyBkb25lIiAqLworCQkJCWlmIChpbmRyZWxpZCAhPSBpbmRleFJlbGF0aW9uSWQpCisJCQkJCXBn c3RhdF9wcm9ncmVzc19pbmNyX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QQVJUSVRJT05TX0RP TkUsIDEpOworCisJCQkJLyoKKwkJCQkgKiBCdWlsZCB1cCBhIGxpc3Qgb2YgYWxsIHRoZSBpbnRl cm1lZGlhdGUgcGFydGl0aW9uZWQgdGFibGVzCisJCQkJICogd2hpY2ggd2lsbCBsYXRlciBuZWVk IHRvIGJlIHNldCB2YWxpZC4KKwkJCQkgKi8KKwkJCQlvbGRfY29udGV4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhjaWNfY29udGV4dCk7CisJCQkJdG9zZXR2YWxpZCA9IGxhcHBlbmRfb2lkKHRv c2V0dmFsaWQsIGluZHJlbGlkKTsKKwkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkX2NvbnRl eHQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQl0YWJyZWxpZCA9IEluZGV4R2V0UmVsYXRp b24oaW5kcmVsaWQsIGZhbHNlKTsKKwkJCXJlbCA9IHRhYmxlX29wZW4odGFicmVsaWQsIFNoYXJl VXBkYXRlRXhjbHVzaXZlTG9jayk7CisJCQloZWFwcmVsaWQgPSByZWwtPnJkX2xvY2tJbmZvLmxv Y2tSZWxJZDsKKwkJCXRhYmxlX2Nsb3NlKHJlbCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsK KwkJCVNFVF9MT0NLVEFHX1JFTEFUSU9OKGhlYXBsb2NrdGFnLCBoZWFwcmVsaWQuZGJJZCwgaGVh cHJlbGlkLnJlbElkKTsKKworCQkJLyogUHJvY2VzcyBlYWNoIHBhcnRpdGlvbiBpbiBhIHNlcGFy YXRlIHRyYW5zYWN0aW9uICovCisJCQlEZWZpbmVJbmRleENvbmN1cnJlbnRJbnRlcm5hbCh0YWJy ZWxpZCwgaW5kcmVsaWQsIGluZGV4SW5mbywKKwkJCQkJCQkJCQkgIGhlYXBsb2NrdGFnLCBoZWFw cmVsaWQpOworCisJCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgp KTsKKwkJCXBnc3RhdF9wcm9ncmVzc19pbmNyX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QQVJU SVRJT05TX0RPTkUsIDEpOworCQl9CisKKwkJLyogU2V0IGFzIHZhbGlkIGFsbCBwYXJ0aXRpb25l ZCBpbmRleGVzLCBpbmNsdWRpbmcgdGhlIHBhcmVudCAqLworCQlmb3JlYWNoKGxjLCB0b3NldHZh bGlkKQorCQl7CisJCQlPaWQJCQlpbmRyZWxpZCA9IGxmaXJzdF9vaWQobGMpOworCisJCQlpbmRl eF9zZXRfc3RhdGVfZmxhZ3MoaW5kcmVsaWQsIElOREVYX0NSRUFURV9TRVRfUkVBRFkpOworCQkJ Q29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKwkJCWluZGV4X3NldF9zdGF0ZV9mbGFncyhpbmRy ZWxpZCwgSU5ERVhfQ1JFQVRFX1NFVF9WQUxJRCk7CisJCX0KKworCQlNZW1vcnlDb250ZXh0RGVs ZXRlKGNpY19jb250ZXh0KTsKKwkJcGdzdGF0X3Byb2dyZXNzX2VuZF9jb21tYW5kKCk7CisJCVBv cEFjdGl2ZVNuYXBzaG90KCk7CisJCXJldHVybiBhZGRyZXNzOworCX0KK30KKworCitzdGF0aWMg dm9pZAorRGVmaW5lSW5kZXhDb25jdXJyZW50SW50ZXJuYWwoT2lkIHRhYmxlSWQsIE9pZCBpbmRl eFJlbGF0aW9uSWQsIEluZGV4SW5mbyAqaW5kZXhJbmZvLAorCQkJCQkJCSAgTE9DS1RBRyBoZWFw bG9ja3RhZywgTG9ja1JlbElkIGhlYXByZWxpZCkKK3sKKwlUcmFuc2FjdGlvbklkIGxpbWl0WG1p bjsKKwlTbmFwc2hvdAlzbmFwc2hvdDsKKworCS8qIElzIGluZGV4IHNhZmUgZm9yIG90aGVycyB0 byBpZ25vcmU/ICBTZWUgc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MoKSAqLworCWJvb2wJCXNhZmVf aW5kZXggPSBpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zID09IE5JTCAmJgorCQlpbmRleEluZm8t PmlpX1ByZWRpY2F0ZSA9PSBOSUw7CisKIAkvKgogCSAqIEZvciBhIGNvbmN1cnJlbnQgYnVpbGQs IGl0J3MgaW1wb3J0YW50IHRvIG1ha2UgdGhlIGNhdGFsb2cgZW50cmllcwogCSAqIHZpc2libGUg dG8gb3RoZXIgdHJhbnNhY3Rpb25zIGJlZm9yZSB3ZSBzdGFydCB0byBidWlsZCB0aGUgaW5kZXgu IFRoYXQKQEAgLTE3NzgsMTAgKzE4NzIsNiBAQCBEZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkg KiBMYXN0IHRoaW5nIHRvIGRvIGlzIHJlbGVhc2UgdGhlIHNlc3Npb24tbGV2ZWwgbG9jayBvbiB0 aGUgcGFyZW50IHRhYmxlLgogCSAqLwogCVVubG9ja1JlbGF0aW9uSWRGb3JTZXNzaW9uKCZoZWFw cmVsaWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7Ci0KLQlwZ3N0YXRfcHJvZ3Jlc3NfZW5k X2NvbW1hbmQoKTsKLQotCXJldHVybiBhZGRyZXNzOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9pbmRleGluZy5vdXQKaW5kZXggMDg3Zjk1NWIxZTYuLjVkNTI5NDU0OTkzIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dApAQCAtNTAsMTEgKzUwLDEzMCBAQCBzZWxl Y3QgcmVsbmFtZSwgcmVsa2luZCwgcmVsaGFzc3ViY2xhc3MsIGluaHBhcmVudDo6cmVnY2xhc3MK ICg4IHJvd3MpCiAKIGRyb3AgdGFibGUgaWR4cGFydDsKLS0tIFNvbWUgdW5zdXBwb3J0ZWQgZmVh dHVyZXMKKy0tIENJQyBvbiBwYXJ0aXRpb25lZCB0YWJsZQogY3JlYXRlIHRhYmxlIGlkeHBhcnQg KGEgaW50LCBiIGludCwgYyB0ZXh0KSBwYXJ0aXRpb24gYnkgcmFuZ2UgKGEpOwotY3JlYXRlIHRh YmxlIGlkeHBhcnQxIHBhcnRpdGlvbiBvZiBpZHhwYXJ0IGZvciB2YWx1ZXMgZnJvbSAoMCkgdG8g KDEwKTsKLWNyZWF0ZSBpbmRleCBjb25jdXJyZW50bHkgb24gaWR4cGFydCAoYSk7Ci1FUlJPUjog IGNhbm5vdCBjcmVhdGUgaW5kZXggb24gcGFydGl0aW9uZWQgdGFibGUgImlkeHBhcnQiIGNvbmN1 cnJlbnRseQorY3JlYXRlIHRhYmxlIGlkeHBhcnQxIHBhcnRpdGlvbiBvZiBpZHhwYXJ0IGZvciB2 YWx1ZXMgZnJvbSAoMCkgdG8gKDEwKSBwYXJ0aXRpb24gYnkgcmFuZ2UoYSk7CitjcmVhdGUgdGFi bGUgaWR4cGFydDExIHBhcnRpdGlvbiBvZiBpZHhwYXJ0MSBmb3IgdmFsdWVzIGZyb20gKDApIHRv ICgxMCkgcGFydGl0aW9uIGJ5IHJhbmdlKGEpOworY3JlYXRlIHRhYmxlIGlkeHBhcnQxMTEgcGFy dGl0aW9uIG9mIGlkeHBhcnQxMSBkZWZhdWx0IHBhcnRpdGlvbiBieSByYW5nZShhKTsKK2NyZWF0 ZSB0YWJsZSBpZHhwYXJ0MTExMSBwYXJ0aXRpb24gb2YgaWR4cGFydDExMSBkZWZhdWx0IHBhcnRp dGlvbiBieSByYW5nZShhKTsKK2NyZWF0ZSB0YWJsZSBpZHhwYXJ0MiBwYXJ0aXRpb24gb2YgaWR4 cGFydCBmb3IgdmFsdWVzIGZyb20gKDEwKSB0byAoMjApOworY3JlYXRlIHRhYmxlIGlkeHBhcnQz IHBhcnRpdGlvbiBvZiBpZHhwYXJ0IGZvciB2YWx1ZXMgZnJvbSAoMzApIHRvICg0MCkgcGFydGl0 aW9uIGJ5IHJhbmdlKGEpOworY3JlYXRlIHRhYmxlIGlkeHBhcnQzMSBwYXJ0aXRpb24gb2YgaWR4 cGFydDMgZGVmYXVsdDsKK2luc2VydCBpbnRvIGlkeHBhcnQyIHZhbHVlcygxMCksKDEwKTsgLS0g bm90IHVuaXF1ZQorY3JlYXRlIGluZGV4IGNvbmN1cnJlbnRseSBvbiBpZHhwYXJ0MTEgKGEpOyAt LSBwYXJ0aXRpb25lZCBhbmQgcGFydGl0aW9uLCB3aXRoIG5vIGxlYXZlcworY3JlYXRlIGluZGV4 IGNvbmN1cnJlbnRseSBvbiBpZHhwYXJ0MSAoYSk7IC0tIHBhcnRpdGlvbmVkIGFuZCBwYXJ0aXRp b24KK2NyZWF0ZSBpbmRleCBjb25jdXJyZW50bHkgb24gaWR4cGFydDIgKGEpOyAtLSBsZWFmCitj cmVhdGUgaW5kZXggY29uY3VycmVudGx5IG9uIGlkeHBhcnQgKGEpOyAtLSBwYXJ0aXRpb25lZAor Y3JlYXRlIHVuaXF1ZSBpbmRleCBjb25jdXJyZW50bHkgb24gaWR4cGFydCAoYSk7IC0tIHBhcnRp dGlvbmVkLCB1bmlxdWUgZmFpbHVyZQorRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBp bmRleCAiaWR4cGFydDJfYV9pZHgxIgorREVUQUlMOiAgS2V5IChhKT0oMTApIGlzIGR1cGxpY2F0 ZWQuCitcZCBpZHhwYXJ0CisgICAgICAgIFBhcnRpdGlvbmVkIHRhYmxlICJwdWJsaWMuaWR4cGFy dCIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAor LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgYSAg ICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYiAgICAgIHwgaW50ZWdl ciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4dCAgICB8ICAgICAgICAg ICB8ICAgICAgICAgIHwgCitQYXJ0aXRpb24ga2V5OiBSQU5HRSAoYSkKK0luZGV4ZXM6CisgICAg ImlkeHBhcnRfYV9pZHgiIGJ0cmVlIChhKQorICAgICJpZHhwYXJ0X2FfaWR4MSIgVU5JUVVFLCBi dHJlZSAoYSkgSU5WQUxJRAorTnVtYmVyIG9mIHBhcnRpdGlvbnM6IDMgKFVzZSBcZCsgdG8gbGlz dCB0aGVtLikKKworXGQgaWR4cGFydDEKKyAgICAgICAgUGFydGl0aW9uZWQgdGFibGUgInB1Ymxp Yy5pZHhwYXJ0MSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBE ZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t LS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYiAgICAg IHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4dCAgICB8 ICAgICAgICAgICB8ICAgICAgICAgIHwgCitQYXJ0aXRpb24gb2Y6IGlkeHBhcnQgRk9SIFZBTFVF UyBGUk9NICgwKSBUTyAoMTApCitQYXJ0aXRpb24ga2V5OiBSQU5HRSAoYSkKK0luZGV4ZXM6Cisg ICAgImlkeHBhcnQxX2FfaWR4IiBidHJlZSAoYSkKKyAgICAiaWR4cGFydDFfYV9pZHgxIiBVTklR VUUsIGJ0cmVlIChhKSBJTlZBTElECitOdW1iZXIgb2YgcGFydGl0aW9uczogMSAoVXNlIFxkKyB0 byBsaXN0IHRoZW0uKQorCitcZCBpZHhwYXJ0MTEKKyAgICAgICBQYXJ0aXRpb25lZCB0YWJsZSAi cHVibGljLmlkeHBhcnQxMSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFi bGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisg YiAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4 dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitQYXJ0aXRpb24gb2Y6IGlkeHBhcnQxIEZP UiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKQorUGFydGl0aW9uIGtleTogUkFOR0UgKGEpCitJbmRl eGVzOgorICAgICJpZHhwYXJ0MTFfYV9pZHgiIGJ0cmVlIChhKQorICAgICJpZHhwYXJ0MTFfYV9p ZHgxIiBVTklRVUUsIGJ0cmVlIChhKSBJTlZBTElECitOdW1iZXIgb2YgcGFydGl0aW9uczogMSAo VXNlIFxkKyB0byBsaXN0IHRoZW0uKQorCitcZCBpZHhwYXJ0MTExCisgICAgICAgUGFydGl0aW9u ZWQgdGFibGUgInB1YmxpYy5pZHhwYXJ0MTExIgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRp b24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAg ICAgICAgfCAKKyBiICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyBj ICAgICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKK1BhcnRpdGlvbiBvZjog aWR4cGFydDExIERFRkFVTFQKK1BhcnRpdGlvbiBrZXk6IFJBTkdFIChhKQorSW5kZXhlczoKKyAg ICAiaWR4cGFydDExMV9hX2lkeCIgYnRyZWUgKGEpCisgICAgImlkeHBhcnQxMTFfYV9pZHgxIiBV TklRVUUsIGJ0cmVlIChhKSBJTlZBTElECitOdW1iZXIgb2YgcGFydGl0aW9uczogMSAoVXNlIFxk KyB0byBsaXN0IHRoZW0uKQorCitcZCBpZHhwYXJ0MTExMQorICAgICAgUGFydGl0aW9uZWQgdGFi bGUgInB1YmxpYy5pZHhwYXJ0MTExMSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwg TnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAg IHwgCisgYiAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYyAgICAg IHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitQYXJ0aXRpb24gb2Y6IGlkeHBh cnQxMTEgREVGQVVMVAorUGFydGl0aW9uIGtleTogUkFOR0UgKGEpCitJbmRleGVzOgorICAgICJp ZHhwYXJ0MTExMV9hX2lkeCIgYnRyZWUgKGEpCisgICAgImlkeHBhcnQxMTExX2FfaWR4MSIgVU5J UVVFLCBidHJlZSAoYSkgSU5WQUxJRAorTnVtYmVyIG9mIHBhcnRpdGlvbnM6IDAKKworXGQgaWR4 cGFydDIKKyAgICAgICAgICAgICAgVGFibGUgInB1YmxpYy5pZHhwYXJ0MiIKKyBDb2x1bW4gfCAg VHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8 ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYiAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8 ICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwg CitQYXJ0aXRpb24gb2Y6IGlkeHBhcnQgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIwKQorSW5k ZXhlczoKKyAgICAiaWR4cGFydDJfYV9pZHgiIGJ0cmVlIChhKQorICAgICJpZHhwYXJ0Ml9hX2lk eDEiIFVOSVFVRSwgYnRyZWUgKGEpIElOVkFMSUQKKworXGQgaWR4cGFydDMKKyAgICAgICAgUGFy dGl0aW9uZWQgdGFibGUgInB1YmxpYy5pZHhwYXJ0MyIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29s bGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8 ICAgICAgICAgIHwgCisgYiAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwg CisgYyAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitQYXJ0aXRpb24g b2Y6IGlkeHBhcnQgRk9SIFZBTFVFUyBGUk9NICgzMCkgVE8gKDQwKQorUGFydGl0aW9uIGtleTog UkFOR0UgKGEpCitJbmRleGVzOgorICAgICJpZHhwYXJ0M19hX2lkeCIgYnRyZWUgKGEpCisgICAg ImlkeHBhcnQzX2FfaWR4MSIgVU5JUVVFLCBidHJlZSAoYSkgSU5WQUxJRAorTnVtYmVyIG9mIHBh cnRpdGlvbnM6IDEgKFVzZSBcZCsgdG8gbGlzdCB0aGVtLikKKworXGQgaWR4cGFydDMxCisgICAg ICAgICAgICAgVGFibGUgInB1YmxpYy5pZHhwYXJ0MzEiCisgQ29sdW1uIHwgIFR5cGUgICB8IENv bGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLQorIGEgICAgICB8IGludGVnZXIgfCAgICAgICAgICAg fCAgICAgICAgICB8IAorIGIgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8 IAorIGMgICAgICB8IHRleHQgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorUGFydGl0aW9u IG9mOiBpZHhwYXJ0MyBERUZBVUxUCitJbmRleGVzOgorICAgICJpZHhwYXJ0MzFfYV9pZHgiIGJ0 cmVlIChhKQorICAgICJpZHhwYXJ0MzFfYV9pZHgxIiBVTklRVUUsIGJ0cmVlIChhKSBJTlZBTElE CisKIGRyb3AgdGFibGUgaWR4cGFydDsKIC0tIFZlcmlmeSBidWdmaXggd2l0aCBxdWVyeSBvbiBp bmRleGVkIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggbm8gcGFydGl0aW9ucwogLS0gaHR0cHM6Ly9w b3N0Z3IuZXMvbS8yMDE4MDEyNDE2MjAwNi5wbWFwZml6bmhnbmd3dGpmQGFsdmhlcnJlLnBnc3Fs CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbmRleGluZy5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9pbmRleGluZy5zcWwKaW5kZXggNDRmNjc4ODkxNWMuLjk2YzYzNjE1ZTlh IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbmRleGluZy5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvaW5kZXhpbmcuc3FsCkBAIC0yOSwxMCArMjksMzAgQEAgc2VsZWN0 IHJlbG5hbWUsIHJlbGtpbmQsIHJlbGhhc3N1YmNsYXNzLCBpbmhwYXJlbnQ6OnJlZ2NsYXNzCiAJ d2hlcmUgcmVsbmFtZSBsaWtlICdpZHhwYXJ0JScgb3JkZXIgYnkgcmVsbmFtZTsKIGRyb3AgdGFi bGUgaWR4cGFydDsKIAotLS0gU29tZSB1bnN1cHBvcnRlZCBmZWF0dXJlcworLS0gQ0lDIG9uIHBh cnRpdGlvbmVkIHRhYmxlCiBjcmVhdGUgdGFibGUgaWR4cGFydCAoYSBpbnQsIGIgaW50LCBjIHRl eHQpIHBhcnRpdGlvbiBieSByYW5nZSAoYSk7Ci1jcmVhdGUgdGFibGUgaWR4cGFydDEgcGFydGl0 aW9uIG9mIGlkeHBhcnQgZm9yIHZhbHVlcyBmcm9tICgwKSB0byAoMTApOwotY3JlYXRlIGluZGV4 IGNvbmN1cnJlbnRseSBvbiBpZHhwYXJ0IChhKTsKK2NyZWF0ZSB0YWJsZSBpZHhwYXJ0MSBwYXJ0 aXRpb24gb2YgaWR4cGFydCBmb3IgdmFsdWVzIGZyb20gKDApIHRvICgxMCkgcGFydGl0aW9uIGJ5 IHJhbmdlKGEpOworY3JlYXRlIHRhYmxlIGlkeHBhcnQxMSBwYXJ0aXRpb24gb2YgaWR4cGFydDEg Zm9yIHZhbHVlcyBmcm9tICgwKSB0byAoMTApIHBhcnRpdGlvbiBieSByYW5nZShhKTsKK2NyZWF0 ZSB0YWJsZSBpZHhwYXJ0MTExIHBhcnRpdGlvbiBvZiBpZHhwYXJ0MTEgZGVmYXVsdCBwYXJ0aXRp b24gYnkgcmFuZ2UoYSk7CitjcmVhdGUgdGFibGUgaWR4cGFydDExMTEgcGFydGl0aW9uIG9mIGlk eHBhcnQxMTEgZGVmYXVsdCBwYXJ0aXRpb24gYnkgcmFuZ2UoYSk7CitjcmVhdGUgdGFibGUgaWR4 cGFydDIgcGFydGl0aW9uIG9mIGlkeHBhcnQgZm9yIHZhbHVlcyBmcm9tICgxMCkgdG8gKDIwKTsK K2NyZWF0ZSB0YWJsZSBpZHhwYXJ0MyBwYXJ0aXRpb24gb2YgaWR4cGFydCBmb3IgdmFsdWVzIGZy b20gKDMwKSB0byAoNDApIHBhcnRpdGlvbiBieSByYW5nZShhKTsKK2NyZWF0ZSB0YWJsZSBpZHhw YXJ0MzEgcGFydGl0aW9uIG9mIGlkeHBhcnQzIGRlZmF1bHQ7CisKK2luc2VydCBpbnRvIGlkeHBh cnQyIHZhbHVlcygxMCksKDEwKTsgLS0gbm90IHVuaXF1ZQorY3JlYXRlIGluZGV4IGNvbmN1cnJl bnRseSBvbiBpZHhwYXJ0MTEgKGEpOyAtLSBwYXJ0aXRpb25lZCBhbmQgcGFydGl0aW9uLCB3aXRo IG5vIGxlYXZlcworY3JlYXRlIGluZGV4IGNvbmN1cnJlbnRseSBvbiBpZHhwYXJ0MSAoYSk7IC0t IHBhcnRpdGlvbmVkIGFuZCBwYXJ0aXRpb24KK2NyZWF0ZSBpbmRleCBjb25jdXJyZW50bHkgb24g aWR4cGFydDIgKGEpOyAtLSBsZWFmCitjcmVhdGUgaW5kZXggY29uY3VycmVudGx5IG9uIGlkeHBh cnQgKGEpOyAtLSBwYXJ0aXRpb25lZAorY3JlYXRlIHVuaXF1ZSBpbmRleCBjb25jdXJyZW50bHkg b24gaWR4cGFydCAoYSk7IC0tIHBhcnRpdGlvbmVkLCB1bmlxdWUgZmFpbHVyZQorXGQgaWR4cGFy dAorXGQgaWR4cGFydDEKK1xkIGlkeHBhcnQxMQorXGQgaWR4cGFydDExMQorXGQgaWR4cGFydDEx MTEKK1xkIGlkeHBhcnQyCitcZCBpZHhwYXJ0MworXGQgaWR4cGFydDMxCiBkcm9wIHRhYmxlIGlk eHBhcnQ7CiAKIC0tIFZlcmlmeSBidWdmaXggd2l0aCBxdWVyeSBvbiBpbmRleGVkIHBhcnRpdGlv bmVkIHRhYmxlIHdpdGggbm8gcGFydGl0aW9ucwotLSAKMi4zNC4xCgo= --=_6c75021449aac1d20907ca4e5b0dc3b9--