Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kf0zr-0001Qr-6u for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Nov 2020 13:26:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kf0zp-0002ht-Gg for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Nov 2020 13:26:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kf0zo-0002hj-WC for pgsql-hackers@lists.postgresql.org; Tue, 17 Nov 2020 13:26:09 +0000 Received: from forward4-smtp.messagingengine.com ([66.111.4.238]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kf0zj-0005wT-Lb for pgsql-hackers@postgresql.org; Tue, 17 Nov 2020 13:26:07 +0000 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailforward.nyi.internal (Postfix) with ESMTP id 881241943375; Tue, 17 Nov 2020 08:26:02 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Tue, 17 Nov 2020 08:26:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=ZAJnmr bUxfrDUHp35x8PUdstLVicO3YWdrar8ADKoQc=; b=k8+Ld/yFe6ywIX9FhtWesW 5gEHdVqFuTG2ZLfQVAxdScxPVc2eXr+S6neo0PFGuff6Hd7XnGaLHyq8jIQ7TYvj dDCD2ChtaFbX5Jjpcwxzg9upkZU3s0AXOHOcevVOIOGkxzbOu8XsltIDxHoDgI88 kz7oX20nG1blZQukn3xfTJH4yygq2CcJyTN8EVLG1WQGSPwFq4/shHUnbBQ9kn8m QKXnLcAtNVZDMmrUYM6i1v6flbS6sQPaUr73fNw88fbP4wfbG1oFuSVUm7+dP75E G9uKC+/L5AzID/6kErPE7cBAEZuaOTN10obzTS7KBW3mOfMtGKi7BnpN4eySR+Ag == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrudeffedghedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepuffvfhfhohfkffgfgggjtgesmhdtreertdefjeenucfhrhhomheprfgvthgv rhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdrvghishgvnhhtrhgruhhtsedvnhguqh hurggurhgrnhhtrdgtohhmqeenucggtffrrghtthgvrhhnpedugfeuveeileeugfegledu gffhuefhhfejheefgfeludeftdeivedugfegvefgjeenucffohhmrghinhepvdhnughquh grughrrghnthdrtghomhenucfkphepkeejrddujeejrdejhedrleegnecuvehluhhsthgv rhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphgvthgvrhdrvghishgvnh htrhgruhhtsedvnhguqhhurggurhgrnhhtrdgtohhm X-ME-Proxy: Received: from april.pezone.net (p57b14b5e.dip0.t-ipconnect.de [87.177.75.94]) by mail.messagingengine.com (Postfix) with ESMTPA id 2C2AE3280064; Tue, 17 Nov 2020 08:26:01 -0500 (EST) Subject: Re: Hash support for row types To: Tom Lane References: <38eccd35-4e2d-6767-1b3c-dada1eac3124@2ndquadrant.com> <20201019233234.r6lyxbvdg5s77rvd@alap3.anarazel.de> <395784.1605297108@sss.pgh.pa.us> Cc: pgsql-hackers , Andres Freund From: Peter Eisentraut Organization: 2ndQuadrant Message-ID: Date: Tue, 17 Nov 2020 14:25:59 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <395784.1605297108@sss.pgh.pa.us> Content-Type: multipart/mixed; boundary="------------4FCDBE7D75E8337F60250B7A" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------4FCDBE7D75E8337F60250B7A Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit I wrote a new patch to add a lot more tests around hash-based plans. This is intended to apply separately from the other patch, and the other patch would then "flip" some of the test cases. On 2020-11-13 20:51, Tom Lane wrote: > * The new test in with.sql claims to be testing row hashing, but > it's not very apparent that any such thing actually happens. Maybe > EXPLAIN the query, as well as execute it, to confirm that a > hash-based plan is used. The recursive union requires hashing, but this is not visible in the plan. You only get an error if there is no hashing support for a type. I have added a test for this. For the non-recursive union, I have added more tests that show this in the plans. > * Is it worth devising a test case in which hashing is not possible > because one of the columns isn't hashable? I have mixed feelings > about this because the set of suitable column types may decrease > to empty over time, making it hard to maintain the test case. I used the money type for now. If someone adds hash support for that, we'll change it. I don't think this will change too rapidly, though. -- Peter Eisentraut 2ndQuadrant, an EDB company https://www.2ndquadrant.com/ --------------4FCDBE7D75E8337F60250B7A Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="0001-Add-more-tests-for-hashing-and-hash-based-plans.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-Add-more-tests-for-hashing-and-hash-based-plans.patch" RnJvbSBkZmFjZThiMWE4YTU3MTQwMDFiMmY2Y2Q3Zjk0OWQyZjc4MDQ3MzA2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogVHVlLCAxNyBOb3YgMjAyMCAxMzo1NDo1MiArMDEwMApTdWJqZWN0 OiBbUEFUQ0hdIEFkZCBtb3JlIHRlc3RzIGZvciBoYXNoaW5nIGFuZCBoYXNoLWJhc2VkIHBs YW5zCgotIFRlc3QgaGFzaGluZyBvZiBhbiBhcnJheSBvZiBhIG5vbi1oYXNoYWJsZSBlbGVt ZW50IHR5cGUuCgotIFRlc3QgVU5JT04gW0RJU1RJTkNUXSB3aXRoIGhhc2gtIGFuZCBzb3J0 LWJhc2VkIHBsYW5zLiAgKFByZXZpb3VzbHksCiAgb25seSBJTlRFUlNFQ1QgYW5kIEVYQ0VQ VCB3aGVyZSB0ZXN0ZWQgdGhlcmUuKQoKLSBUZXN0IFVOSU9OIFtESVNUSU5DVF0gd2l0aCBh IG5vbi1oYXNoYWJsZSBjb2x1bW4gdHlwZS4gIFRoaXMKICBjdXJyZW50bHkgcmV2ZXJ0cyB0 byBhIHNvcnQtYmFzZWQgcGxhbiBldmVuIGlmIGVuYWJsZV9oYXNoYWdnIGlzIG9uLgoKLSBU ZXN0IFVOSU9OL0lOVEVSU0VDVC9FWENFUFQgaGFzaC0gYW5kIHNvcnQtYmFzZWQgcGxhbnMg d2l0aCBhcnJheXMKICBhcyBjb2x1bW4gdHlwZXMuICBBbHNvIHRlc3QgYW4gYXJyYXkgd2l0 aCBhIG5vbi1oYXNoYWJsZSBlbGVtZW50CiAgdHlwZS4KCi0gVGVzdCBVTklPTi9JTlRFUlNF Q1QvRVhDRVBUIHNpbWlsYXJseSB3aXRoIHJvdyB0eXBlcyBhcyBjb2x1bW4KICB0eXBlcy4g IEN1cnJlbnRseSwgdGhpcyB1c2VzIG9ubHkgc29ydC1iYXNlZCBwbGFucyBiZWNhdXNlIHRo ZXJlIGlzCiAgbm8gaGFzaGluZyBzdXBwb3J0IGZvciByb3cgdHlwZXMuCgotIEFkZCBhIHRl c3QgY2FzZSB0aGF0IHNob3dzIHRoYXQgcmVjdXJzaXZlIHF1ZXJpZXMgdXNpbmcgVU5JT04K ICBbRElTVElOQ1RdIHJlcXVpcmUgaGFzaGFibGUgY29sdW1uIHR5cGVzLgoKLSBBZGQgYSBj dXJyZW50bHkgZmFpbGluZyB0ZXN0IHRoYXQgdXNlcyBVTklPTiBESVNUSU5DVCBpbiBhCiAg Y3ljbGUtZGV0ZWN0aW9uIHVzZSBjYXNlIHVzaW5nIHJvdyB0eXBlcyBhcyBjb2x1bW4gdHlw ZXMuCgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlk L2ZsYXQvMzhlY2NkMzUtNGUyZC02NzY3LTFiM2MtZGFkYTFlYWMzMTI0JTQwMm5kcXVhZHJh bnQuY29tCi0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9oYXNoX2Z1bmMub3V0IHwg ICA3ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdW5pb24ub3V0ICAgICB8IDM1NyAr KysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2l0 aC5vdXQgICAgICB8ICAyMCArKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvaGFzaF9mdW5jLnNx bCAgICAgIHwgICA2ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3VuaW9uLnNxbCAgICAgICAg ICB8ICA5MiArKysrKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpdGguc3FsICAgICAgICAg ICB8ICAxOCArKwogNiBmaWxlcyBjaGFuZ2VkLCA0OTggaW5zZXJ0aW9ucygrKSwgMiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2hhc2hf ZnVuYy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2hhc2hfZnVuYy5vdXQKaW5k ZXggZTZlMzQxMGFhYS4uZTdkNjE1ZmRlNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9oYXNoX2Z1bmMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvaGFzaF9mdW5jLm91dApAQCAtMTc3LDYgKzE3NywxMyBAQCBXSEVSRSAgaGFzaF9hcnJh eSh2KTo6Yml0KDMyKSAhPSBoYXNoX2FycmF5X2V4dGVuZGVkKHYsIDApOjpiaXQoMzIpCiAt LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0KICgwIHJvd3MpCiAK Ky0tIGFycmF5IGhhc2hpbmcgd2l0aCBub24taGFzaGFibGUgZWxlbWVudCB0eXBlCitTRUxF Q1QgdiBhcyB2YWx1ZSwgaGFzaF9hcnJheSh2KTo6Yml0KDMyKSBhcyBzdGFuZGFyZAorRlJP TSAgIChWQUxVRVMgKCd7MH0nOjptb25leVtdKSkgeCh2KTsKK0VSUk9SOiAgY291bGQgbm90 IGlkZW50aWZ5IGEgaGFzaCBmdW5jdGlvbiBmb3IgdHlwZSBtb25leQorU0VMRUNUIHYgYXMg dmFsdWUsIGhhc2hfYXJyYXlfZXh0ZW5kZWQodiwgMCk6OmJpdCgzMikgYXMgZXh0ZW5kZWQw CitGUk9NICAgKFZBTFVFUyAoJ3swfSc6Om1vbmV5W10pKSB4KHYpOworRVJST1I6ICBjb3Vs ZCBub3QgaWRlbnRpZnkgYW4gZXh0ZW5kZWQgaGFzaCBmdW5jdGlvbiBmb3IgdHlwZSBtb25l eQogU0VMRUNUIHYgYXMgdmFsdWUsIGhhc2hicGNoYXIodik6OmJpdCgzMikgYXMgc3RhbmRh cmQsCiAgICAgICAgaGFzaGJwY2hhcmV4dGVuZGVkKHYsIDApOjpiaXQoMzIpIGFzIGV4dGVu ZGVkMCwKICAgICAgICBoYXNoYnBjaGFyZXh0ZW5kZWQodiwgMSk6OmJpdCgzMikgYXMgZXh0 ZW5kZWQxCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VuaW9uLm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdW5pb24ub3V0CmluZGV4IDZlNzJlOTJk ODAuLjIyZTFmZjVjNDIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv dW5pb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdW5pb24ub3V0CkBA IC0zNDUsOCArMzQ1LDI4IEBAIEVSUk9SOiAgRk9SIE5PIEtFWSBVUERBVEUgaXMgbm90IGFs bG93ZWQgd2l0aCBVTklPTi9JTlRFUlNFQ1QvRVhDRVBUCiAgICAgICAgIDEgfCAgICAgICAg MiB8ICAgICAgICAzCiAoMSByb3cpCiAKLS0tIGV4ZXJjaXNlIGJvdGggaGFzaGVkIGFuZCBz b3J0ZWQgaW1wbGVtZW50YXRpb25zIG9mIElOVEVSU0VDVC9FWENFUFQKKy0tIGV4ZXJjaXNl IGJvdGggaGFzaGVkIGFuZCBzb3J0ZWQgaW1wbGVtZW50YXRpb25zIG9mIFVOSU9OL0lOVEVS U0VDVC9FWENFUFQKIHNldCBlbmFibGVfaGFzaGFnZyB0byBvbjsKK2V4cGxhaW4gKGNvc3Rz IG9mZikKK3NlbGVjdCBjb3VudCgqKSBmcm9tCisgICggc2VsZWN0IHVuaXF1ZTEgZnJvbSB0 ZW5rMSB1bmlvbiBzZWxlY3QgZml2ZXRob3VzIGZyb20gdGVuazEgKSBzczsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAg ICAgICBHcm91cCBLZXk6IHRlbmsxLnVuaXF1ZTEKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAg ICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgdGVuazFfdW5pcXVlMSBv biB0ZW5rMQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHRlbmsxIHRlbmsxXzEK Kyg2IHJvd3MpCisKK3NlbGVjdCBjb3VudCgqKSBmcm9tCisgICggc2VsZWN0IHVuaXF1ZTEg ZnJvbSB0ZW5rMSB1bmlvbiBzZWxlY3QgZml2ZXRob3VzIGZyb20gdGVuazEgKSBzczsKKyBj b3VudCAKKy0tLS0tLS0KKyAxMDAwMAorKDEgcm93KQorCiBleHBsYWluIChjb3N0cyBvZmYp CiBzZWxlY3QgY291bnQoKikgZnJvbQogICAoIHNlbGVjdCB1bmlxdWUxIGZyb20gdGVuazEg aW50ZXJzZWN0IHNlbGVjdCBmaXZldGhvdXMgZnJvbSB0ZW5rMSApIHNzOwpAQCAtMzg5LDYg KzQwOSwyNyBAQCBzZWxlY3QgdW5pcXVlMSBmcm9tIHRlbmsxIGV4Y2VwdCBzZWxlY3QgdW5p cXVlMiBmcm9tIHRlbmsxIHdoZXJlIHVuaXF1ZTIgIT0gMTA7CiAoMSByb3cpCiAKIHNldCBl bmFibGVfaGFzaGFnZyB0byBvZmY7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgY291 bnQoKikgZnJvbQorICAoIHNlbGVjdCB1bmlxdWUxIGZyb20gdGVuazEgdW5pb24gc2VsZWN0 IGZpdmV0aG91cyBmcm9tIHRlbmsxICkgc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgVW5pcXVlCisgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgU29ydCBLZXk6IHRlbmsxLnVuaXF1ZTEKKyAgICAgICAgICAg ICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNj YW4gdXNpbmcgdGVuazFfdW5pcXVlMSBvbiB0ZW5rMQorICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHRlbmsxIHRlbmsxXzEKKyg3IHJvd3MpCisKK3NlbGVjdCBjb3Vu dCgqKSBmcm9tCisgICggc2VsZWN0IHVuaXF1ZTEgZnJvbSB0ZW5rMSB1bmlvbiBzZWxlY3Qg Zml2ZXRob3VzIGZyb20gdGVuazEgKSBzczsKKyBjb3VudCAKKy0tLS0tLS0KKyAxMDAwMAor KDEgcm93KQorCiBleHBsYWluIChjb3N0cyBvZmYpCiBzZWxlY3QgY291bnQoKikgZnJvbQog ICAoIHNlbGVjdCB1bmlxdWUxIGZyb20gdGVuazEgaW50ZXJzZWN0IHNlbGVjdCBmaXZldGhv dXMgZnJvbSB0ZW5rMSApIHNzOwpAQCAtNDM0LDYgKzQ3NSwzMjAgQEAgc2VsZWN0IHVuaXF1 ZTEgZnJvbSB0ZW5rMSBleGNlcHQgc2VsZWN0IHVuaXF1ZTIgZnJvbSB0ZW5rMSB3aGVyZSB1 bmlxdWUyICE9IDEwOwogICAgICAgMTAKICgxIHJvdykKIAorcmVzZXQgZW5hYmxlX2hhc2hh Z2c7CistLSBub24taGFzaGFibGUgdHlwZQorc2V0IGVuYWJsZV9oYXNoYWdnIHRvIG9uOwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHggZnJvbSAodmFsdWVzICgxMDA6Om1vbmV5 KSwgKDIwMDo6bW9uZXkpKSBfKHgpIHVuaW9uIHNlbGVjdCB4IGZyb20gKHZhbHVlcyAoMTAw Ojptb25leSksICgzMDA6Om1vbmV5KSkgXyh4KTsKKyAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFVuaXF1ZQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNv cnQgS2V5OiAiKlZBTFVFUyoiLmNvbHVtbjEKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAg ICAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgICAgICAgICAgICAg ICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqXzEiCisoNiByb3dzKQorCitzZXQgZW5h YmxlX2hhc2hhZ2cgdG8gb2ZmOworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHggZnJv bSAodmFsdWVzICgxMDA6Om1vbmV5KSwgKDIwMDo6bW9uZXkpKSBfKHgpIHVuaW9uIHNlbGVj dCB4IGZyb20gKHZhbHVlcyAoMTAwOjptb25leSksICgzMDA6Om1vbmV5KSkgXyh4KTsKKyAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFVuaXF1ZQorICAg LT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiAiKlZBTFVFUyoiLmNvbHVtbjEKKyAgICAg ICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZB TFVFUyoiCisgICAgICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqXzEi CisoNiByb3dzKQorCityZXNldCBlbmFibGVfaGFzaGFnZzsKKy0tIGFycmF5cworc2V0IGVu YWJsZV9oYXNoYWdnIHRvIG9uOworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHggZnJv bSAodmFsdWVzIChhcnJheVsxLCAyXSksIChhcnJheVsxLCAzXSkpIF8oeCkgdW5pb24gc2Vs ZWN0IHggZnJvbSAodmFsdWVzIChhcnJheVsxLCAyXSksIChhcnJheVsxLCA0XSkpIF8oeCk7 CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoQWdncmVnYXRlCisgICBH cm91cCBLZXk6ICIqVkFMVUVTKiIuY29sdW1uMQorICAgLT4gIEFwcGVuZAorICAgICAgICAg LT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyAgICAgICAgIC0+ICBWYWx1ZXMgU2Nh biBvbiAiKlZBTFVFUypfMSIKKyg1IHJvd3MpCisKK3NlbGVjdCB4IGZyb20gKHZhbHVlcyAo YXJyYXlbMSwgMl0pLCAoYXJyYXlbMSwgM10pKSBfKHgpIHVuaW9uIHNlbGVjdCB4IGZyb20g KHZhbHVlcyAoYXJyYXlbMSwgMl0pLCAoYXJyYXlbMSwgNF0pKSBfKHgpOworICAgeCAgIAor LS0tLS0tLQorIHsxLDR9CisgezEsMn0KKyB7MSwzfQorKDMgcm93cykKKworZXhwbGFpbiAo Y29zdHMgb2ZmKQorc2VsZWN0IHggZnJvbSAodmFsdWVzIChhcnJheVsxLCAyXSksIChhcnJh eVsxLCAzXSkpIF8oeCkgaW50ZXJzZWN0IHNlbGVjdCB4IGZyb20gKHZhbHVlcyAoYXJyYXlb MSwgMl0pLCAoYXJyYXlbMSwgNF0pKSBfKHgpOworICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaFNldE9wIEludGVyc2VjdAorICAgLT4gIEFwcGVu ZAorICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gIipTRUxFQ1QqIDEiCisgICAgICAg ICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorICAgICAgICAgLT4gIFN1 YnF1ZXJ5IFNjYW4gb24gIipTRUxFQ1QqIDIiCisgICAgICAgICAgICAgICAtPiAgVmFsdWVz IFNjYW4gb24gIipWQUxVRVMqXzEiCisoNiByb3dzKQorCitzZWxlY3QgeCBmcm9tICh2YWx1 ZXMgKGFycmF5WzEsIDJdKSwgKGFycmF5WzEsIDNdKSkgXyh4KSBpbnRlcnNlY3Qgc2VsZWN0 IHggZnJvbSAodmFsdWVzIChhcnJheVsxLCAyXSksIChhcnJheVsxLCA0XSkpIF8oeCk7Cisg ICB4ICAgCistLS0tLS0tCisgezEsMn0KKygxIHJvdykKKworZXhwbGFpbiAoY29zdHMgb2Zm KQorc2VsZWN0IHggZnJvbSAodmFsdWVzIChhcnJheVsxLCAyXSksIChhcnJheVsxLCAzXSkp IF8oeCkgZXhjZXB0IHNlbGVjdCB4IGZyb20gKHZhbHVlcyAoYXJyYXlbMSwgMl0pLCAoYXJy YXlbMSwgNF0pKSBfKHgpOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSGFzaFNldE9wIEV4Y2VwdAorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4g IFN1YnF1ZXJ5IFNjYW4gb24gIipTRUxFQ1QqIDEiCisgICAgICAgICAgICAgICAtPiAgVmFs dWVzIFNjYW4gb24gIipWQUxVRVMqIgorICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24g IipTRUxFQ1QqIDIiCisgICAgICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxV RVMqXzEiCisoNiByb3dzKQorCitzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKGFycmF5WzEsIDJd KSwgKGFycmF5WzEsIDNdKSkgXyh4KSBleGNlcHQgc2VsZWN0IHggZnJvbSAodmFsdWVzIChh cnJheVsxLCAyXSksIChhcnJheVsxLCA0XSkpIF8oeCk7CisgICB4ICAgCistLS0tLS0tCisg ezEsM30KKygxIHJvdykKKworLS0gbm9uLWhhc2hhYmxlIHR5cGUKK2V4cGxhaW4gKGNvc3Rz IG9mZikKK3NlbGVjdCB4IGZyb20gKHZhbHVlcyAoYXJyYXlbMTAwOjptb25leV0pLCAoYXJy YXlbMjAwOjptb25leV0pKSBfKHgpIHVuaW9uIHNlbGVjdCB4IGZyb20gKHZhbHVlcyAoYXJy YXlbMTAwOjptb25leV0pLCAoYXJyYXlbMzAwOjptb25leV0pKSBfKHgpOworICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVW5pcXVlCisgICAtPiAgU29y dAorICAgICAgICAgU29ydCBLZXk6ICIqVkFMVUVTKiIuY29sdW1uMQorICAgICAgICAgLT4g IEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIK KyAgICAgICAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUypfMSIKKyg2IHJv d3MpCisKK3NlbGVjdCB4IGZyb20gKHZhbHVlcyAoYXJyYXlbMTAwOjptb25leV0pLCAoYXJy YXlbMjAwOjptb25leV0pKSBfKHgpIHVuaW9uIHNlbGVjdCB4IGZyb20gKHZhbHVlcyAoYXJy YXlbMTAwOjptb25leV0pLCAoYXJyYXlbMzAwOjptb25leV0pKSBfKHgpOworICAgICB4ICAg ICAKKy0tLS0tLS0tLS0tCisgeyQxMDAuMDB9CisgeyQyMDAuMDB9CisgeyQzMDAuMDB9Ciso MyByb3dzKQorCitzZXQgZW5hYmxlX2hhc2hhZ2cgdG8gb2ZmOworZXhwbGFpbiAoY29zdHMg b2ZmKQorc2VsZWN0IHggZnJvbSAodmFsdWVzIChhcnJheVsxLCAyXSksIChhcnJheVsxLCAz XSkpIF8oeCkgdW5pb24gc2VsZWN0IHggZnJvbSAodmFsdWVzIChhcnJheVsxLCAyXSksIChh cnJheVsxLCA0XSkpIF8oeCk7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBVbmlxdWUKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogIipW QUxVRVMqIi5jb2x1bW4xCisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAt PiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorICAgICAgICAgICAgICAgLT4gIFZhbHVl cyBTY2FuIG9uICIqVkFMVUVTKl8xIgorKDYgcm93cykKKworc2VsZWN0IHggZnJvbSAodmFs dWVzIChhcnJheVsxLCAyXSksIChhcnJheVsxLCAzXSkpIF8oeCkgdW5pb24gc2VsZWN0IHgg ZnJvbSAodmFsdWVzIChhcnJheVsxLCAyXSksIChhcnJheVsxLCA0XSkpIF8oeCk7CisgICB4 ICAgCistLS0tLS0tCisgezEsMn0KKyB7MSwzfQorIHsxLDR9CisoMyByb3dzKQorCitleHBs YWluIChjb3N0cyBvZmYpCitzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKGFycmF5WzEsIDJdKSwg KGFycmF5WzEsIDNdKSkgXyh4KSBpbnRlcnNlY3Qgc2VsZWN0IHggZnJvbSAodmFsdWVzIChh cnJheVsxLCAyXSksIChhcnJheVsxLCA0XSkpIF8oeCk7CisgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXRPcCBJbnRlcnNlY3QK KyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogIipTRUxFQ1QqIDEiLngKKyAgICAg ICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9uICIq U0VMRUNUKiAxIgorICAgICAgICAgICAgICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIq VkFMVUVTKiIKKyAgICAgICAgICAgICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9uICIqU0VMRUNU KiAyIgorICAgICAgICAgICAgICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVT Kl8xIgorKDggcm93cykKKworc2VsZWN0IHggZnJvbSAodmFsdWVzIChhcnJheVsxLCAyXSks IChhcnJheVsxLCAzXSkpIF8oeCkgaW50ZXJzZWN0IHNlbGVjdCB4IGZyb20gKHZhbHVlcyAo YXJyYXlbMSwgMl0pLCAoYXJyYXlbMSwgNF0pKSBfKHgpOworICAgeCAgIAorLS0tLS0tLQor IHsxLDJ9CisoMSByb3cpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCB4IGZyb20g KHZhbHVlcyAoYXJyYXlbMSwgMl0pLCAoYXJyYXlbMSwgM10pKSBfKHgpIGV4Y2VwdCBzZWxl Y3QgeCBmcm9tICh2YWx1ZXMgKGFycmF5WzEsIDJdKSwgKGFycmF5WzEsIDRdKSkgXyh4KTsK KyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNldE9wIEV4Y2VwdAorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiAiKlNF TEVDVCogMSIueAorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIFN1 YnF1ZXJ5IFNjYW4gb24gIipTRUxFQ1QqIDEiCisgICAgICAgICAgICAgICAgICAgICAtPiAg VmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorICAgICAgICAgICAgICAgLT4gIFN1YnF1ZXJ5 IFNjYW4gb24gIipTRUxFQ1QqIDIiCisgICAgICAgICAgICAgICAgICAgICAtPiAgVmFsdWVz IFNjYW4gb24gIipWQUxVRVMqXzEiCisoOCByb3dzKQorCitzZWxlY3QgeCBmcm9tICh2YWx1 ZXMgKGFycmF5WzEsIDJdKSwgKGFycmF5WzEsIDNdKSkgXyh4KSBleGNlcHQgc2VsZWN0IHgg ZnJvbSAodmFsdWVzIChhcnJheVsxLCAyXSksIChhcnJheVsxLCA0XSkpIF8oeCk7CisgICB4 ICAgCistLS0tLS0tCisgezEsM30KKygxIHJvdykKKworcmVzZXQgZW5hYmxlX2hhc2hhZ2c7 CistLSByZWNvcmRzCitzZXQgZW5hYmxlX2hhc2hhZ2cgdG8gb247CistLSBjdXJyZW50bHkg bm8gaGFzaGluZyBzdXBwb3J0IGZvciByZWNvcmQsIHNvIHRoZXNlIHdpbGwgc3RpbGwgcnVu IHdpdGggc29ydCBwbGFuczoKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCB4IGZyb20g KHZhbHVlcyAocm93KDEsIDIpKSwgKHJvdygxLCAzKSkpIF8oeCkgdW5pb24gc2VsZWN0IHgg ZnJvbSAodmFsdWVzIChyb3coMSwgMikpLCAocm93KDEsIDQpKSkgXyh4KTsKKyAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFVuaXF1ZQorICAgLT4gIFNv cnQKKyAgICAgICAgIFNvcnQgS2V5OiAiKlZBTFVFUyoiLmNvbHVtbjEKKyAgICAgICAgIC0+ ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoi CisgICAgICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqXzEiCisoNiBy b3dzKQorCitzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKHJvdygxLCAyKSksIChyb3coMSwgMykp KSBfKHgpIHVuaW9uIHNlbGVjdCB4IGZyb20gKHZhbHVlcyAocm93KDEsIDIpKSwgKHJvdygx LCA0KSkpIF8oeCk7CisgICB4ICAgCistLS0tLS0tCisgKDEsMikKKyAoMSwzKQorICgxLDQp CisoMyByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgeCBmcm9tICh2YWx1 ZXMgKHJvdygxLCAyKSksIChyb3coMSwgMykpKSBfKHgpIGludGVyc2VjdCBzZWxlY3QgeCBm cm9tICh2YWx1ZXMgKHJvdygxLCAyKSksIChyb3coMSwgNCkpKSBfKHgpOworICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2V0T3Ag SW50ZXJzZWN0CisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6ICIqU0VMRUNUKiAx Ii54CisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU3VicXVlcnkg U2NhbiBvbiAiKlNFTEVDVCogMSIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBWYWx1ZXMg U2NhbiBvbiAiKlZBTFVFUyoiCisgICAgICAgICAgICAgICAtPiAgU3VicXVlcnkgU2NhbiBv biAiKlNFTEVDVCogMiIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBv biAiKlZBTFVFUypfMSIKKyg4IHJvd3MpCisKK3NlbGVjdCB4IGZyb20gKHZhbHVlcyAocm93 KDEsIDIpKSwgKHJvdygxLCAzKSkpIF8oeCkgaW50ZXJzZWN0IHNlbGVjdCB4IGZyb20gKHZh bHVlcyAocm93KDEsIDIpKSwgKHJvdygxLCA0KSkpIF8oeCk7CisgICB4ICAgCistLS0tLS0t CisgKDEsMikKKygxIHJvdykKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHggZnJv bSAodmFsdWVzIChyb3coMSwgMikpLCAocm93KDEsIDMpKSkgXyh4KSBleGNlcHQgc2VsZWN0 IHggZnJvbSAodmFsdWVzIChyb3coMSwgMikpLCAocm93KDEsIDQpKSkgXyh4KTsKKyAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNl dE9wIEV4Y2VwdAorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiAiKlNFTEVDVCog MSIueAorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIFN1YnF1ZXJ5 IFNjYW4gb24gIipTRUxFQ1QqIDEiCisgICAgICAgICAgICAgICAgICAgICAtPiAgVmFsdWVz IFNjYW4gb24gIipWQUxVRVMqIgorICAgICAgICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4g b24gIipTRUxFQ1QqIDIiCisgICAgICAgICAgICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4g b24gIipWQUxVRVMqXzEiCisoOCByb3dzKQorCitzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKHJv dygxLCAyKSksIChyb3coMSwgMykpKSBfKHgpIGV4Y2VwdCBzZWxlY3QgeCBmcm9tICh2YWx1 ZXMgKHJvdygxLCAyKSksIChyb3coMSwgNCkpKSBfKHgpOworICAgeCAgIAorLS0tLS0tLQor ICgxLDMpCisoMSByb3cpCisKKy0tIG5vbi1oYXNoYWJsZSB0eXBlCitleHBsYWluIChjb3N0 cyBvZmYpCitzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKHJvdygxMDA6Om1vbmV5KSksIChyb3co MjAwOjptb25leSkpKSBfKHgpIHVuaW9uIHNlbGVjdCB4IGZyb20gKHZhbHVlcyAocm93KDEw MDo6bW9uZXkpKSwgKHJvdygzMDA6Om1vbmV5KSkpIF8oeCk7CisgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVbmlxdWUKKyAgIC0+ICBTb3J0CisgICAg ICAgICBTb3J0IEtleTogIipWQUxVRVMqIi5jb2x1bW4xCisgICAgICAgICAtPiAgQXBwZW5k CisgICAgICAgICAgICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorICAgICAg ICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKl8xIgorKDYgcm93cykKKwor c2VsZWN0IHggZnJvbSAodmFsdWVzIChyb3coMTAwOjptb25leSkpLCAocm93KDIwMDo6bW9u ZXkpKSkgXyh4KSB1bmlvbiBzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKHJvdygxMDA6Om1vbmV5 KSksIChyb3coMzAwOjptb25leSkpKSBfKHgpOworICAgICB4ICAgICAKKy0tLS0tLS0tLS0t CisgKCQxMDAuMDApCisgKCQyMDAuMDApCisgKCQzMDAuMDApCisoMyByb3dzKQorCitzZXQg ZW5hYmxlX2hhc2hhZ2cgdG8gb2ZmOworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHgg ZnJvbSAodmFsdWVzIChyb3coMSwgMikpLCAocm93KDEsIDMpKSkgXyh4KSB1bmlvbiBzZWxl Y3QgeCBmcm9tICh2YWx1ZXMgKHJvdygxLCAyKSksIChyb3coMSwgNCkpKSBfKHgpOworICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVW5pcXVlCisgICAt PiAgU29ydAorICAgICAgICAgU29ydCBLZXk6ICIqVkFMVUVTKiIuY29sdW1uMQorICAgICAg ICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFM VUVTKiIKKyAgICAgICAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUypfMSIK Kyg2IHJvd3MpCisKK3NlbGVjdCB4IGZyb20gKHZhbHVlcyAocm93KDEsIDIpKSwgKHJvdygx LCAzKSkpIF8oeCkgdW5pb24gc2VsZWN0IHggZnJvbSAodmFsdWVzIChyb3coMSwgMikpLCAo cm93KDEsIDQpKSkgXyh4KTsKKyAgIHggICAKKy0tLS0tLS0KKyAoMSwyKQorICgxLDMpCisg KDEsNCkKKygzIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCB4IGZyb20g KHZhbHVlcyAocm93KDEsIDIpKSwgKHJvdygxLCAzKSkpIF8oeCkgaW50ZXJzZWN0IHNlbGVj dCB4IGZyb20gKHZhbHVlcyAocm93KDEsIDIpKSwgKHJvdygxLCA0KSkpIF8oeCk7CisgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBT ZXRPcCBJbnRlcnNlY3QKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogIipTRUxF Q1QqIDEiLngKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBTdWJx dWVyeSBTY2FuIG9uICIqU0VMRUNUKiAxIgorICAgICAgICAgICAgICAgICAgICAgLT4gIFZh bHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyAgICAgICAgICAgICAgIC0+ICBTdWJxdWVyeSBT Y2FuIG9uICIqU0VMRUNUKiAyIgorICAgICAgICAgICAgICAgICAgICAgLT4gIFZhbHVlcyBT Y2FuIG9uICIqVkFMVUVTKl8xIgorKDggcm93cykKKworc2VsZWN0IHggZnJvbSAodmFsdWVz IChyb3coMSwgMikpLCAocm93KDEsIDMpKSkgXyh4KSBpbnRlcnNlY3Qgc2VsZWN0IHggZnJv bSAodmFsdWVzIChyb3coMSwgMikpLCAocm93KDEsIDQpKSkgXyh4KTsKKyAgIHggICAKKy0t LS0tLS0KKyAoMSwyKQorKDEgcm93KQorCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qg eCBmcm9tICh2YWx1ZXMgKHJvdygxLCAyKSksIChyb3coMSwgMykpKSBfKHgpIGV4Y2VwdCBz ZWxlY3QgeCBmcm9tICh2YWx1ZXMgKHJvdygxLCAyKSksIChyb3coMSwgNCkpKSBfKHgpOwor ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU2V0T3AgRXhjZXB0CisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6ICIqU0VM RUNUKiAxIi54CisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU3Vi cXVlcnkgU2NhbiBvbiAiKlNFTEVDVCogMSIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBW YWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgICAgICAgICAgICAgICAtPiAgU3VicXVlcnkg U2NhbiBvbiAiKlNFTEVDVCogMiIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBWYWx1ZXMg U2NhbiBvbiAiKlZBTFVFUypfMSIKKyg4IHJvd3MpCisKK3NlbGVjdCB4IGZyb20gKHZhbHVl cyAocm93KDEsIDIpKSwgKHJvdygxLCAzKSkpIF8oeCkgZXhjZXB0IHNlbGVjdCB4IGZyb20g KHZhbHVlcyAocm93KDEsIDIpKSwgKHJvdygxLCA0KSkpIF8oeCk7CisgICB4ICAgCistLS0t LS0tCisgKDEsMykKKygxIHJvdykKKwogcmVzZXQgZW5hYmxlX2hhc2hhZ2c7CiAtLQogLS0g TWl4ZWQgdHlwZXMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2l0 aC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpdGgub3V0CmluZGV4IDQ1N2Yz YmYwNGYuLjFmOTg0YTlmYTQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvd2l0aC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aXRoLm91dApA QCAtNDksNiArNDksMTUgQEAgU0VMRUNUICogRlJPTSB0OwogIDUKICg1IHJvd3MpCiAKKy0t IFVOSU9OIERJU1RJTkNUIHJlcXVpcmVzIGhhc2hhYmxlIHR5cGUKK1dJVEggUkVDVVJTSVZF IHQobikgQVMgKAorICAgIFZBTFVFUyAoMTo6bW9uZXkpCitVTklPTgorICAgIFNFTEVDVCBu KzE6Om1vbmV5IEZST00gdCBXSEVSRSBuIDwgMTAwOjptb25leQorKQorU0VMRUNUIHN1bShu KSBGUk9NIHQ7CitFUlJPUjogIGNvdWxkIG5vdCBpbXBsZW1lbnQgcmVjdXJzaXZlIFVOSU9O CitERVRBSUw6ICBBbGwgY29sdW1uIGRhdGF0eXBlcyBtdXN0IGJlIGhhc2hhYmxlLgogLS0g cmVjdXJzaXZlIHZpZXcKIENSRUFURSBSRUNVUlNJVkUgVklFVyBudW1zIChuKSBBUwogICAg IFZBTFVFUyAoMSkKQEAgLTYxNiw2ICs2MjUsMTcgQEAgc2VsZWN0ICogZnJvbSBzZWFyY2hf Z3JhcGg7CiAgMiB8IDMgfCBhcmMgMiAtPiAzIHwgZiAgICAgICAgfCB7IigxLDQpIiwiKDQs NSkiLCIoNSwxKSIsIigxLDIpIiwiKDIsMykifQogKDI1IHJvd3MpCiAKKy0tIFVOSU9OIERJ U1RJTkNUIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGhlcmUgYmVjYXVzZSByb3cgdHlwZXMg bm90IGhhc2hhYmxlCit3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hfZ3JhcGgoZiwgdCwgbGFiZWws IGlzX2N5Y2xlLCBwYXRoKSBhcyAoCisJc2VsZWN0ICosIGZhbHNlLCBhcnJheVtyb3coZy5m LCBnLnQpXSBmcm9tIGdyYXBoIGcKKwl1bmlvbiBkaXN0aW5jdAorCXNlbGVjdCBnLiosIHJv dyhnLmYsIGcudCkgPSBhbnkocGF0aCksIHBhdGggfHwgcm93KGcuZiwgZy50KQorCWZyb20g Z3JhcGggZywgc2VhcmNoX2dyYXBoIHNnCisJd2hlcmUgZy5mID0gc2cudCBhbmQgbm90IGlz X2N5Y2xlCispCitzZWxlY3QgKiBmcm9tIHNlYXJjaF9ncmFwaDsKK0VSUk9SOiAgY291bGQg bm90IGltcGxlbWVudCByZWN1cnNpdmUgVU5JT04KK0RFVEFJTDogIEFsbCBjb2x1bW4gZGF0 YXR5cGVzIG11c3QgYmUgaGFzaGFibGUuCiAtLSBvcmRlcmluZyBieSB0aGUgcGF0aCBjb2x1 bW4gaGFzIHNhbWUgZWZmZWN0IGFzIFNFQVJDSCBERVBUSCBGSVJTVAogd2l0aCByZWN1cnNp dmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsLCBpc19jeWNsZSwgcGF0aCkgYXMgKAogCXNl bGVjdCAqLCBmYWxzZSwgYXJyYXlbcm93KGcuZiwgZy50KV0gZnJvbSBncmFwaCBnCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9oYXNoX2Z1bmMuc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvaGFzaF9mdW5jLnNxbAppbmRleCBhM2UyZGVjYzJjLi5kZTg0ZTY4YmEz IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9oYXNoX2Z1bmMuc3FsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2hhc2hfZnVuYy5zcWwKQEAgLTEzMCw2ICsxMzAsMTIg QEAKIFdIRVJFICBoYXNoX2FycmF5KHYpOjpiaXQoMzIpICE9IGhhc2hfYXJyYXlfZXh0ZW5k ZWQodiwgMCk6OmJpdCgzMikKICAgICAgICBPUiBoYXNoX2FycmF5KHYpOjpiaXQoMzIpID0g aGFzaF9hcnJheV9leHRlbmRlZCh2LCAxKTo6Yml0KDMyKTsKIAorLS0gYXJyYXkgaGFzaGlu ZyB3aXRoIG5vbi1oYXNoYWJsZSBlbGVtZW50IHR5cGUKK1NFTEVDVCB2IGFzIHZhbHVlLCBo YXNoX2FycmF5KHYpOjpiaXQoMzIpIGFzIHN0YW5kYXJkCitGUk9NICAgKFZBTFVFUyAoJ3sw fSc6Om1vbmV5W10pKSB4KHYpOworU0VMRUNUIHYgYXMgdmFsdWUsIGhhc2hfYXJyYXlfZXh0 ZW5kZWQodiwgMCk6OmJpdCgzMikgYXMgZXh0ZW5kZWQwCitGUk9NICAgKFZBTFVFUyAoJ3sw fSc6Om1vbmV5W10pKSB4KHYpOworCiBTRUxFQ1QgdiBhcyB2YWx1ZSwgaGFzaGJwY2hhcih2 KTo6Yml0KDMyKSBhcyBzdGFuZGFyZCwKICAgICAgICBoYXNoYnBjaGFyZXh0ZW5kZWQodiwg MCk6OmJpdCgzMikgYXMgZXh0ZW5kZWQwLAogICAgICAgIGhhc2hicGNoYXJleHRlbmRlZCh2 LCAxKTo6Yml0KDMyKSBhcyBleHRlbmRlZDEKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3VuaW9uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3VuaW9uLnNxbAppbmRl eCA1ZjQ4ODFkNTk0Li42Y2VlNDU0YTRjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC91bmlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdW5pb24uc3FsCkBA IC0xMTgsMTAgKzExOCwxNiBAQAogKFNFTEVDVCAxLDIsMyBVTklPTiBTRUxFQ1QgNCw1LDYp IEVYQ0VQVCBTRUxFQ1QgNCw1LDY7CiAoU0VMRUNUIDEsMiwzIFVOSU9OIFNFTEVDVCA0LDUs NiBPUkRFUiBCWSAxLDIpIEVYQ0VQVCBTRUxFQ1QgNCw1LDY7CiAKLS0tIGV4ZXJjaXNlIGJv dGggaGFzaGVkIGFuZCBzb3J0ZWQgaW1wbGVtZW50YXRpb25zIG9mIElOVEVSU0VDVC9FWENF UFQKKy0tIGV4ZXJjaXNlIGJvdGggaGFzaGVkIGFuZCBzb3J0ZWQgaW1wbGVtZW50YXRpb25z IG9mIFVOSU9OL0lOVEVSU0VDVC9FWENFUFQKIAogc2V0IGVuYWJsZV9oYXNoYWdnIHRvIG9u OwogCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgY291bnQoKikgZnJvbQorICAoIHNl bGVjdCB1bmlxdWUxIGZyb20gdGVuazEgdW5pb24gc2VsZWN0IGZpdmV0aG91cyBmcm9tIHRl bmsxICkgc3M7CitzZWxlY3QgY291bnQoKikgZnJvbQorICAoIHNlbGVjdCB1bmlxdWUxIGZy b20gdGVuazEgdW5pb24gc2VsZWN0IGZpdmV0aG91cyBmcm9tIHRlbmsxICkgc3M7CisKIGV4 cGxhaW4gKGNvc3RzIG9mZikKIHNlbGVjdCBjb3VudCgqKSBmcm9tCiAgICggc2VsZWN0IHVu aXF1ZTEgZnJvbSB0ZW5rMSBpbnRlcnNlY3Qgc2VsZWN0IGZpdmV0aG91cyBmcm9tIHRlbmsx ICkgc3M7CkBAIC0xMzQsNiArMTQwLDEyIEBACiAKIHNldCBlbmFibGVfaGFzaGFnZyB0byBv ZmY7CiAKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBjb3VudCgqKSBmcm9tCisgICgg c2VsZWN0IHVuaXF1ZTEgZnJvbSB0ZW5rMSB1bmlvbiBzZWxlY3QgZml2ZXRob3VzIGZyb20g dGVuazEgKSBzczsKK3NlbGVjdCBjb3VudCgqKSBmcm9tCisgICggc2VsZWN0IHVuaXF1ZTEg ZnJvbSB0ZW5rMSB1bmlvbiBzZWxlY3QgZml2ZXRob3VzIGZyb20gdGVuazEgKSBzczsKKwog ZXhwbGFpbiAoY29zdHMgb2ZmKQogc2VsZWN0IGNvdW50KCopIGZyb20KICAgKCBzZWxlY3Qg dW5pcXVlMSBmcm9tIHRlbmsxIGludGVyc2VjdCBzZWxlY3QgZml2ZXRob3VzIGZyb20gdGVu azEgKSBzczsKQEAgLTE0Niw2ICsxNTgsODQgQEAKIAogcmVzZXQgZW5hYmxlX2hhc2hhZ2c7 CiAKKy0tIG5vbi1oYXNoYWJsZSB0eXBlCitzZXQgZW5hYmxlX2hhc2hhZ2cgdG8gb247CisK K2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCB4IGZyb20gKHZhbHVlcyAoMTAwOjptb25l eSksICgyMDA6Om1vbmV5KSkgXyh4KSB1bmlvbiBzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKDEw MDo6bW9uZXkpLCAoMzAwOjptb25leSkpIF8oeCk7CisKK3NldCBlbmFibGVfaGFzaGFnZyB0 byBvZmY7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCB4IGZyb20gKHZhbHVlcyAo MTAwOjptb25leSksICgyMDA6Om1vbmV5KSkgXyh4KSB1bmlvbiBzZWxlY3QgeCBmcm9tICh2 YWx1ZXMgKDEwMDo6bW9uZXkpLCAoMzAwOjptb25leSkpIF8oeCk7CisKK3Jlc2V0IGVuYWJs ZV9oYXNoYWdnOworCistLSBhcnJheXMKK3NldCBlbmFibGVfaGFzaGFnZyB0byBvbjsKKwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHggZnJvbSAodmFsdWVzIChhcnJheVsxLCAy XSksIChhcnJheVsxLCAzXSkpIF8oeCkgdW5pb24gc2VsZWN0IHggZnJvbSAodmFsdWVzIChh cnJheVsxLCAyXSksIChhcnJheVsxLCA0XSkpIF8oeCk7CitzZWxlY3QgeCBmcm9tICh2YWx1 ZXMgKGFycmF5WzEsIDJdKSwgKGFycmF5WzEsIDNdKSkgXyh4KSB1bmlvbiBzZWxlY3QgeCBm cm9tICh2YWx1ZXMgKGFycmF5WzEsIDJdKSwgKGFycmF5WzEsIDRdKSkgXyh4KTsKK2V4cGxh aW4gKGNvc3RzIG9mZikKK3NlbGVjdCB4IGZyb20gKHZhbHVlcyAoYXJyYXlbMSwgMl0pLCAo YXJyYXlbMSwgM10pKSBfKHgpIGludGVyc2VjdCBzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKGFy cmF5WzEsIDJdKSwgKGFycmF5WzEsIDRdKSkgXyh4KTsKK3NlbGVjdCB4IGZyb20gKHZhbHVl cyAoYXJyYXlbMSwgMl0pLCAoYXJyYXlbMSwgM10pKSBfKHgpIGludGVyc2VjdCBzZWxlY3Qg eCBmcm9tICh2YWx1ZXMgKGFycmF5WzEsIDJdKSwgKGFycmF5WzEsIDRdKSkgXyh4KTsKK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCB4IGZyb20gKHZhbHVlcyAoYXJyYXlbMSwgMl0p LCAoYXJyYXlbMSwgM10pKSBfKHgpIGV4Y2VwdCBzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKGFy cmF5WzEsIDJdKSwgKGFycmF5WzEsIDRdKSkgXyh4KTsKK3NlbGVjdCB4IGZyb20gKHZhbHVl cyAoYXJyYXlbMSwgMl0pLCAoYXJyYXlbMSwgM10pKSBfKHgpIGV4Y2VwdCBzZWxlY3QgeCBm cm9tICh2YWx1ZXMgKGFycmF5WzEsIDJdKSwgKGFycmF5WzEsIDRdKSkgXyh4KTsKKworLS0g bm9uLWhhc2hhYmxlIHR5cGUKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCB4IGZyb20g KHZhbHVlcyAoYXJyYXlbMTAwOjptb25leV0pLCAoYXJyYXlbMjAwOjptb25leV0pKSBfKHgp IHVuaW9uIHNlbGVjdCB4IGZyb20gKHZhbHVlcyAoYXJyYXlbMTAwOjptb25leV0pLCAoYXJy YXlbMzAwOjptb25leV0pKSBfKHgpOworc2VsZWN0IHggZnJvbSAodmFsdWVzIChhcnJheVsx MDA6Om1vbmV5XSksIChhcnJheVsyMDA6Om1vbmV5XSkpIF8oeCkgdW5pb24gc2VsZWN0IHgg ZnJvbSAodmFsdWVzIChhcnJheVsxMDA6Om1vbmV5XSksIChhcnJheVszMDA6Om1vbmV5XSkp IF8oeCk7CisKK3NldCBlbmFibGVfaGFzaGFnZyB0byBvZmY7CisKK2V4cGxhaW4gKGNvc3Rz IG9mZikKK3NlbGVjdCB4IGZyb20gKHZhbHVlcyAoYXJyYXlbMSwgMl0pLCAoYXJyYXlbMSwg M10pKSBfKHgpIHVuaW9uIHNlbGVjdCB4IGZyb20gKHZhbHVlcyAoYXJyYXlbMSwgMl0pLCAo YXJyYXlbMSwgNF0pKSBfKHgpOworc2VsZWN0IHggZnJvbSAodmFsdWVzIChhcnJheVsxLCAy XSksIChhcnJheVsxLCAzXSkpIF8oeCkgdW5pb24gc2VsZWN0IHggZnJvbSAodmFsdWVzIChh cnJheVsxLCAyXSksIChhcnJheVsxLCA0XSkpIF8oeCk7CitleHBsYWluIChjb3N0cyBvZmYp CitzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKGFycmF5WzEsIDJdKSwgKGFycmF5WzEsIDNdKSkg Xyh4KSBpbnRlcnNlY3Qgc2VsZWN0IHggZnJvbSAodmFsdWVzIChhcnJheVsxLCAyXSksIChh cnJheVsxLCA0XSkpIF8oeCk7CitzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKGFycmF5WzEsIDJd KSwgKGFycmF5WzEsIDNdKSkgXyh4KSBpbnRlcnNlY3Qgc2VsZWN0IHggZnJvbSAodmFsdWVz IChhcnJheVsxLCAyXSksIChhcnJheVsxLCA0XSkpIF8oeCk7CitleHBsYWluIChjb3N0cyBv ZmYpCitzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKGFycmF5WzEsIDJdKSwgKGFycmF5WzEsIDNd KSkgXyh4KSBleGNlcHQgc2VsZWN0IHggZnJvbSAodmFsdWVzIChhcnJheVsxLCAyXSksIChh cnJheVsxLCA0XSkpIF8oeCk7CitzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKGFycmF5WzEsIDJd KSwgKGFycmF5WzEsIDNdKSkgXyh4KSBleGNlcHQgc2VsZWN0IHggZnJvbSAodmFsdWVzIChh cnJheVsxLCAyXSksIChhcnJheVsxLCA0XSkpIF8oeCk7CisKK3Jlc2V0IGVuYWJsZV9oYXNo YWdnOworCistLSByZWNvcmRzCitzZXQgZW5hYmxlX2hhc2hhZ2cgdG8gb247CisKKy0tIGN1 cnJlbnRseSBubyBoYXNoaW5nIHN1cHBvcnQgZm9yIHJlY29yZCwgc28gdGhlc2Ugd2lsbCBz dGlsbCBydW4gd2l0aCBzb3J0IHBsYW5zOgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0 IHggZnJvbSAodmFsdWVzIChyb3coMSwgMikpLCAocm93KDEsIDMpKSkgXyh4KSB1bmlvbiBz ZWxlY3QgeCBmcm9tICh2YWx1ZXMgKHJvdygxLCAyKSksIChyb3coMSwgNCkpKSBfKHgpOwor c2VsZWN0IHggZnJvbSAodmFsdWVzIChyb3coMSwgMikpLCAocm93KDEsIDMpKSkgXyh4KSB1 bmlvbiBzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKHJvdygxLCAyKSksIChyb3coMSwgNCkpKSBf KHgpOworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHggZnJvbSAodmFsdWVzIChyb3co MSwgMikpLCAocm93KDEsIDMpKSkgXyh4KSBpbnRlcnNlY3Qgc2VsZWN0IHggZnJvbSAodmFs dWVzIChyb3coMSwgMikpLCAocm93KDEsIDQpKSkgXyh4KTsKK3NlbGVjdCB4IGZyb20gKHZh bHVlcyAocm93KDEsIDIpKSwgKHJvdygxLCAzKSkpIF8oeCkgaW50ZXJzZWN0IHNlbGVjdCB4 IGZyb20gKHZhbHVlcyAocm93KDEsIDIpKSwgKHJvdygxLCA0KSkpIF8oeCk7CitleHBsYWlu IChjb3N0cyBvZmYpCitzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKHJvdygxLCAyKSksIChyb3co MSwgMykpKSBfKHgpIGV4Y2VwdCBzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKHJvdygxLCAyKSks IChyb3coMSwgNCkpKSBfKHgpOworc2VsZWN0IHggZnJvbSAodmFsdWVzIChyb3coMSwgMikp LCAocm93KDEsIDMpKSkgXyh4KSBleGNlcHQgc2VsZWN0IHggZnJvbSAodmFsdWVzIChyb3co MSwgMikpLCAocm93KDEsIDQpKSkgXyh4KTsKKworLS0gbm9uLWhhc2hhYmxlIHR5cGUKK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCB4IGZyb20gKHZhbHVlcyAocm93KDEwMDo6bW9u ZXkpKSwgKHJvdygyMDA6Om1vbmV5KSkpIF8oeCkgdW5pb24gc2VsZWN0IHggZnJvbSAodmFs dWVzIChyb3coMTAwOjptb25leSkpLCAocm93KDMwMDo6bW9uZXkpKSkgXyh4KTsKK3NlbGVj dCB4IGZyb20gKHZhbHVlcyAocm93KDEwMDo6bW9uZXkpKSwgKHJvdygyMDA6Om1vbmV5KSkp IF8oeCkgdW5pb24gc2VsZWN0IHggZnJvbSAodmFsdWVzIChyb3coMTAwOjptb25leSkpLCAo cm93KDMwMDo6bW9uZXkpKSkgXyh4KTsKKworc2V0IGVuYWJsZV9oYXNoYWdnIHRvIG9mZjsK KworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHggZnJvbSAodmFsdWVzIChyb3coMSwg MikpLCAocm93KDEsIDMpKSkgXyh4KSB1bmlvbiBzZWxlY3QgeCBmcm9tICh2YWx1ZXMgKHJv dygxLCAyKSksIChyb3coMSwgNCkpKSBfKHgpOworc2VsZWN0IHggZnJvbSAodmFsdWVzIChy b3coMSwgMikpLCAocm93KDEsIDMpKSkgXyh4KSB1bmlvbiBzZWxlY3QgeCBmcm9tICh2YWx1 ZXMgKHJvdygxLCAyKSksIChyb3coMSwgNCkpKSBfKHgpOworZXhwbGFpbiAoY29zdHMgb2Zm KQorc2VsZWN0IHggZnJvbSAodmFsdWVzIChyb3coMSwgMikpLCAocm93KDEsIDMpKSkgXyh4 KSBpbnRlcnNlY3Qgc2VsZWN0IHggZnJvbSAodmFsdWVzIChyb3coMSwgMikpLCAocm93KDEs IDQpKSkgXyh4KTsKK3NlbGVjdCB4IGZyb20gKHZhbHVlcyAocm93KDEsIDIpKSwgKHJvdygx LCAzKSkpIF8oeCkgaW50ZXJzZWN0IHNlbGVjdCB4IGZyb20gKHZhbHVlcyAocm93KDEsIDIp KSwgKHJvdygxLCA0KSkpIF8oeCk7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgeCBm cm9tICh2YWx1ZXMgKHJvdygxLCAyKSksIChyb3coMSwgMykpKSBfKHgpIGV4Y2VwdCBzZWxl Y3QgeCBmcm9tICh2YWx1ZXMgKHJvdygxLCAyKSksIChyb3coMSwgNCkpKSBfKHgpOworc2Vs ZWN0IHggZnJvbSAodmFsdWVzIChyb3coMSwgMikpLCAocm93KDEsIDMpKSkgXyh4KSBleGNl cHQgc2VsZWN0IHggZnJvbSAodmFsdWVzIChyb3coMSwgMikpLCAocm93KDEsIDQpKSkgXyh4 KTsKKworcmVzZXQgZW5hYmxlX2hhc2hhZ2c7CisKIC0tCiAtLSBNaXhlZCB0eXBlcwogLS0K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpdGguc3FsIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvd2l0aC5zcWwKaW5kZXggMmVlYTI5N2E3MS4uYzZjZTAxYTJkMSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2l0aC5zcWwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvd2l0aC5zcWwKQEAgLTMxLDYgKzMxLDE0IEBACiApCiBTRUxFQ1QgKiBG Uk9NIHQ7CiAKKy0tIFVOSU9OIERJU1RJTkNUIHJlcXVpcmVzIGhhc2hhYmxlIHR5cGUKK1dJ VEggUkVDVVJTSVZFIHQobikgQVMgKAorICAgIFZBTFVFUyAoMTo6bW9uZXkpCitVTklPTgor ICAgIFNFTEVDVCBuKzE6Om1vbmV5IEZST00gdCBXSEVSRSBuIDwgMTAwOjptb25leQorKQor U0VMRUNUIHN1bShuKSBGUk9NIHQ7CisKIC0tIHJlY3Vyc2l2ZSB2aWV3CiBDUkVBVEUgUkVD VVJTSVZFIFZJRVcgbnVtcyAobikgQVMKICAgICBWQUxVRVMgKDEpCkBAIC0zMTcsNiArMzI1 LDE2IEBAIENSRUFURSBURU1QT1JBUlkgVEFCTEUgdHJlZSgKICkKIHNlbGVjdCAqIGZyb20g c2VhcmNoX2dyYXBoOwogCistLSBVTklPTiBESVNUSU5DVCBjdXJyZW50bHkgbm90IHN1cHBv cnRlZCBoZXJlIGJlY2F1c2Ugcm93IHR5cGVzIG5vdCBoYXNoYWJsZQord2l0aCByZWN1cnNp dmUgc2VhcmNoX2dyYXBoKGYsIHQsIGxhYmVsLCBpc19jeWNsZSwgcGF0aCkgYXMgKAorCXNl bGVjdCAqLCBmYWxzZSwgYXJyYXlbcm93KGcuZiwgZy50KV0gZnJvbSBncmFwaCBnCisJdW5p b24gZGlzdGluY3QKKwlzZWxlY3QgZy4qLCByb3coZy5mLCBnLnQpID0gYW55KHBhdGgpLCBw YXRoIHx8IHJvdyhnLmYsIGcudCkKKwlmcm9tIGdyYXBoIGcsIHNlYXJjaF9ncmFwaCBzZwor CXdoZXJlIGcuZiA9IHNnLnQgYW5kIG5vdCBpc19jeWNsZQorKQorc2VsZWN0ICogZnJvbSBz ZWFyY2hfZ3JhcGg7CisKIC0tIG9yZGVyaW5nIGJ5IHRoZSBwYXRoIGNvbHVtbiBoYXMgc2Ft ZSBlZmZlY3QgYXMgU0VBUkNIIERFUFRIIEZJUlNUCiB3aXRoIHJlY3Vyc2l2ZSBzZWFyY2hf Z3JhcGgoZiwgdCwgbGFiZWwsIGlzX2N5Y2xlLCBwYXRoKSBhcyAoCiAJc2VsZWN0ICosIGZh bHNlLCBhcnJheVtyb3coZy5mLCBnLnQpXSBmcm9tIGdyYXBoIGcKLS0gCjIuMjkuMgoK --------------4FCDBE7D75E8337F60250B7A--